public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/7086: g++ -O2 locks up
@ 2002-06-20  7:26 brd
  0 siblings, 0 replies; 3+ messages in thread
From: brd @ 2002-06-20  7:26 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7086
>Category:       c++
>Synopsis:       g++ -O2 locks up
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Jun 20 04:56:04 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Tony Bryant
>Release:        CVS 20062002 mainline
>Organization:
>Environment:
i686-pc-linux-gnu
>Description:
built from today's CVS:

gcc -v

Using built-in specs.
Configured with: ../gcc/configure --enable-languages=c,c++ --prefix=/usr --exec-prefix=/usr
Thread model: single
gcc version 3.2 20020619 (experimental)

occurs with both native i686-pc-linux-gnu and cross compiler for target sh-elf.
>How-To-Repeat:
g++ -O2 -c broken.cc
>Fix:
Out of my depth, I'm afraid
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-c++src; name="broken.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="broken.cc"

IyAxICJjb25maWcuY2MiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx
ICJjb25maWcuY2MiCiMgMSAiaTRlbmdpbmUuaCIgMQojIDEgImVuZ2luZS5oIiAxCgoKCiMgMSAi
c3RkY3h4L2xvY2Fsc2xpc3QuaCIgMQoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXh0L3Ns
aXN0IiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2crKy12My9leHQvc2xpc3QiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L3NoLWVsZi9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9z
aC1lbGYvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvc2gtZWxm
L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9zaC1lbGYv
Yml0cy9jKytjb25maWcuaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAxIDMKIyA0
OCAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKyst
djMvY3N0ZGRlZiIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMwoKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL3NoLWVsZi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAx
NDcgIi91c3IvbGliL2djYy1saWIvc2gtZWxmLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlw
ZWRlZiBpbnQgcHRyZGlmZl90OwojIDIwMSAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDkgIi91
c3IvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6
OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDUwICIvdXNyL2luY2x1ZGUvZysrLXYz
L2NzdHJpbmciIDIgMwoKIyAxICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAx
MSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gIkMiIHsKCgojIDEgIi91
c3Ivc2gtZWxmL2luY2x1ZGUvX2Fuc2kuaCIgMSAzCiMgMTUgIi91c3Ivc2gtZWxmL2luY2x1ZGUv
X2Fuc2kuaCIgMwojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAxIDMKIyAx
MzMgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAzCnR5cGVkZWYgc2hvcnQgaW50
IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKIyAxNjcg
Ii91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAzCnR5cGVkZWYgaW50IF9faW50MzJf
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCgoKCgoKX19leHRlbnNpb25fXyB0
eXBlZGVmIGxvbmcgbG9uZyBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGxvbmcgX191aW50NjRfdDsKIyAxNiAiL3Vzci9zaC1lbGYvaW5jbHVkZS9fYW5zaS5o
IiAyIDMKIyAxNSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9z
aC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMSAzCiMgOSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9z
eXMvcmVlbnQuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9z
eXMvX3R5cGVzLmgiIDEgMwojIDEyICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy9fdHlwZXMuaCIg
Mwp0eXBlZGVmIGxvbmcgX29mZl90Owp0eXBlZGVmIGxvbmcgX3NzaXplX3Q7CiMgMTUgIi91c3Iv
c2gtZWxmL2luY2x1ZGUvc3lzL3JlZW50LmgiIDIgMwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IF9fVUxvbmc7CiMgMzYgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKc3RydWN0
IF9nbHVlCnsKICBzdHJ1Y3QgX2dsdWUgKl9uZXh0OwogIGludCBfbmlvYnM7CiAgc3RydWN0IF9f
c0ZJTEUgKl9pb2JzOwp9OwoKc3RydWN0IF9CaWdpbnQKewogIHN0cnVjdCBfQmlnaW50ICpfbmV4
dDsKICBpbnQgX2ssIF9tYXh3ZHMsIF9zaWduLCBfd2RzOwogIF9fVUxvbmcgX3hbMV07Cn07CgoK
c3RydWN0IF9fdG0KewogIGludCBfX3RtX3NlYzsKICBpbnQgX190bV9taW47CiAgaW50IF9fdG1f
aG91cjsKICBpbnQgX190bV9tZGF5OwogIGludCBfX3RtX21vbjsKICBpbnQgX190bV95ZWFyOwog
IGludCBfX3RtX3dkYXk7CiAgaW50IF9fdG1feWRheTsKICBpbnQgX190bV9pc2RzdDsKfTsKIyA3
MSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX2F0ZXhpdCB7CiAg
ICAgICAgc3RydWN0IF9hdGV4aXQgKl9uZXh0OwogICAgICAgIGludCBfaW5kOwogICAgICAgIHZv
aWQgKCpfZm5zWzMyXSkodm9pZCk7CiAgICAgICAgdm9pZCAqX2ZuYXJnc1szMl07CiAgICAgICAg
X191aW50MzJfdCBfZm50eXBlczsKfTsKIyA5NCAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVl
bnQuaCIgMwpzdHJ1Y3QgX19zYnVmIHsKICAgICAgICB1bnNpZ25lZCBjaGFyICpfYmFzZTsKICAg
ICAgICBpbnQgX3NpemU7Cn07CgoKCgoKCnR5cGVkZWYgbG9uZyBfZnBvc190OwojIDE1NSAiL3Vz
ci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX19zRklMRSB7CiAgdW5zaWdu
ZWQgY2hhciAqX3A7CiAgaW50IF9yOwogIGludCBfdzsKICBzaG9ydCBfZmxhZ3M7CiAgc2hvcnQg
X2ZpbGU7CiAgc3RydWN0IF9fc2J1ZiBfYmY7CiAgaW50IF9sYmZzaXplOwoKCgoKCgogIHZvaWQg
KiBfY29va2llOwoKICBpbnQgKCpfcmVhZCkgKHZvaWQgKiBfY29va2llLCBjaGFyICpfYnVmLCBp
bnQgX24pOwogIGludCAoKl93cml0ZSkgKHZvaWQgKiBfY29va2llLCBjb25zdCBjaGFyICpfYnVm
LCBpbnQgX24pOwoKICBfZnBvc190ICgqX3NlZWspICh2b2lkICogX2Nvb2tpZSwgX2Zwb3NfdCBf
b2Zmc2V0LCBpbnQgX3doZW5jZSk7CiAgaW50ICgqX2Nsb3NlKSAodm9pZCAqIF9jb29raWUpOwoK
CiAgc3RydWN0IF9fc2J1ZiBfdWI7CiAgdW5zaWduZWQgY2hhciAqX3VwOwogIGludCBfdXI7CgoK
ICB1bnNpZ25lZCBjaGFyIF91YnVmWzNdOwogIHVuc2lnbmVkIGNoYXIgX25idWZbMV07CgoKICBz
dHJ1Y3QgX19zYnVmIF9sYjsKCgogIGludCBfYmxrc2l6ZTsKICBpbnQgX29mZnNldDsKCgogIHN0
cnVjdCBfcmVlbnQgKl9kYXRhOwoKfTsKIyAyMTkgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL3Jl
ZW50LmgiIDMKc3RydWN0IF9yYW5kNDggewogIHVuc2lnbmVkIHNob3J0IF9zZWVkWzNdOwogIHVu
c2lnbmVkIHNob3J0IF9tdWx0WzNdOwogIHVuc2lnbmVkIHNob3J0IF9hZGQ7CgoKCgp9OwojIDQ0
NCAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX3JlZW50CnsKICBp
bnQgX2Vycm5vOwoKCgoKICBzdHJ1Y3QgX19zRklMRSAqX3N0ZGluLCAqX3N0ZG91dCwgKl9zdGRl
cnI7CgogIGludCBfaW5jOwogIGNoYXIgX2VtZXJnZW5jeVsyNV07CgogIGludCBfY3VycmVudF9j
YXRlZ29yeTsKICBjb25zdCBjaGFyICpfY3VycmVudF9sb2NhbGU7CgogIGludCBfX3NkaWRpbml0
OwoKICB2b2lkICgqX19jbGVhbnVwKSAoc3RydWN0IF9yZWVudCAqKTsKCgogIHN0cnVjdCBfQmln
aW50ICpfcmVzdWx0OwogIGludCBfcmVzdWx0X2s7CiAgc3RydWN0IF9CaWdpbnQgKl9wNXM7CiAg
c3RydWN0IF9CaWdpbnQgKipfZnJlZWxpc3Q7CgoKICBpbnQgX2N2dGxlbjsKICBjaGFyICpfY3Z0
YnVmOwoKICB1bmlvbgogICAgewogICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAgICB1bnNp
Z25lZCBpbnQgX3VudXNlZF9yYW5kOwogICAgICAgICAgY2hhciAqIF9zdHJ0b2tfbGFzdDsKICAg
ICAgICAgIGNoYXIgX2FzY3RpbWVfYnVmWzI2XTsKICAgICAgICAgIHN0cnVjdCBfX3RtIF9sb2Nh
bHRpbWVfYnVmOwogICAgICAgICAgaW50IF9nYW1tYV9zaWduZ2FtOwogICAgICAgICAgX19leHRl
bnNpb25fXyB1bnNpZ25lZCBsb25nIGxvbmcgX3JhbmRfbmV4dDsKICAgICAgICAgIHN0cnVjdCBf
cmFuZDQ4IF9yNDg7CiAgICAgICAgICBpbnQgX21ibGVuX3N0YXRlOwogICAgICAgICAgaW50IF9t
YnRvd2Nfc3RhdGU7CiAgICAgICAgICBpbnQgX3djdG9tYl9zdGF0ZTsKICAgICAgICAgIGNoYXIg
X2w2NGFfYnVmWzhdOwogICAgICAgICAgY2hhciBfc2lnbmFsX2J1ZlsyNF07CiAgICAgICAgfSBf
cmVlbnQ7CgoKCiAgICAgIHN0cnVjdAogICAgICAgIHsKCiAgICAgICAgICB1bnNpZ25lZCBjaGFy
ICogX25leHRmWzMwXTsKICAgICAgICAgIHVuc2lnbmVkIGludCBfbm1hbGxvY1szMF07CiAgICAg
ICAgfSBfdW51c2VkOwogICAgfSBfbmV3OwoKCiAgc3RydWN0IF9hdGV4aXQgKl9hdGV4aXQ7CiAg
c3RydWN0IF9hdGV4aXQgX2F0ZXhpdDA7CgoKICB2b2lkICgqKihfc2lnX2Z1bmMpKShpbnQpOwoK
CgoKICBzdHJ1Y3QgX2dsdWUgX19zZ2x1ZTsKICBzdHJ1Y3QgX19zRklMRSBfX3NmWzNdOwp9Owoj
IDYxNCAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpleHRlcm4gc3RydWN0IF9y
ZWVudCAqX2ltcHVyZV9wdHIgOwoKdm9pZCBfcmVjbGFpbV9yZWVudCAoc3RydWN0IF9yZWVudCAq
KTsKIyA2MzIgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKfQojIDE2ICIvdXNy
L3NoLWVsZi9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvc2gt
ZWxmLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE5ICIvdXNyL3NoLWVsZi9pbmNsdWRl
L3N0cmluZy5oIiAyIDMKCgoKCgp2b2lkICogbWVtY2hyIChjb25zdCB2b2lkICosIGludCwgc2l6
ZV90KTsKaW50IG1lbWNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZv
aWQgKiBtZW1jcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2b2lkICogbWVtbW92
ZSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZvaWQgKiBtZW1zZXQgKHZvaWQgKiwg
aW50LCBzaXplX3QpOwpjaGFyICpzdHJjYXQgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAq
c3RyY2hyIChjb25zdCBjaGFyICosIGludCk7CmludCBzdHJjbXAgKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqKTsKaW50IHN0cmNvbGwgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hh
ciAqc3RyY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKik7CnNpemVfdCBzdHJjc3BuIChjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CmNoYXIgKnN0cmVycm9yIChpbnQpOwpzaXplX3Qgc3RybGVu
IChjb25zdCBjaGFyICopOwpjaGFyICpzdHJuY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6
ZV90KTsKaW50IHN0cm5jbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpj
aGFyICpzdHJuY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKY2hhciAqc3RycGJy
ayAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpzdHJyY2hyIChjb25zdCBjaGFy
ICosIGludCk7CnNpemVfdCBzdHJzcG4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hh
ciAqc3Ryc3RyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKY2hhciAqc3RydG9rIChj
aGFyICosIGNvbnN0IGNoYXIgKik7CgoKc2l6ZV90IHN0cnhmcm0gKGNoYXIgKiwgY29uc3QgY2hh
ciAqLCBzaXplX3QpOwoKCmNoYXIgKnN0cnRva19yIChjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hh
ciAqKik7CgppbnQgYmNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZv
aWQgYmNvcHkgKGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOwp2b2lkIGJ6ZXJvICh2b2lk
ICosIHNpemVfdCk7CmludCBmZnMgKGludCk7CmNoYXIgKmluZGV4IChjb25zdCBjaGFyICosIGlu
dCk7CnZvaWQgKiBtZW1jY3B5ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwpj
aGFyICpyaW5kZXggKGNvbnN0IGNoYXIgKiwgaW50KTsKaW50IHN0cmNhc2VjbXAgKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqc3RyZHVwIChjb25zdCBjaGFyICopOwpjaGFyICpf
c3RyZHVwX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqc3RyZXJyb3Jf
ciAoaW50LCBjaGFyICosIHNpemVfdCk7CnNpemVfdCBzdHJsY2F0IChjaGFyICosIGNvbnN0IGNo
YXIgKiwgc2l6ZV90KTsKc2l6ZV90IHN0cmxjcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl
X3QpOwppbnQgc3RybmNhc2VjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp
OwpzaXplX3Qgc3RybmxlbiAoY29uc3QgY2hhciAqLCBzaXplX3QpOwpjaGFyICpzdHJzZXAgKGNo
YXIgKiosIGNvbnN0IGNoYXIgKik7CmNoYXIgKnN0cmx3ciAoY2hhciAqKTsKY2hhciAqc3RydXBy
IChjaGFyICopOwojIDk4ICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyA1MiAi
L3Vzci9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAyIDMKIyA3NyAiL3Vzci9pbmNsdWRlL2crKy12
My9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6
bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpz
dHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3Ry
Y21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4
ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRv
azsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVu
OwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwg
aW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2
b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hh
cioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ry
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ry
cGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBf
X3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+
KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0
cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihj
b25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsK
CiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAg
eyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg
X19zMik7IH0KfQojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY2xpbWl0cyIgMSAzCiMgNDggIi91c3IvaW5j
bHVkZS9nKystdjMvY2xpbWl0cyIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3NoLWVsZi8zLjIv
aW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy12My9jbGltaXRz
IiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK
IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2NzdGRsaWIiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdGRsaWIuaCIg
MSAzCiMgOSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gIkMiIHsKCgoK
CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MyA0CiMgMTggIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgMSAiL3Vzci9z
aC1lbGYvaW5jbHVkZS9tYWNoaW5lL3N0ZGxpYi5oIiAxIDMKIyAyMSAiL3Vzci9zaC1lbGYvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzCgojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvYWxsb2NhLmgiIDEg
MwojIDIzICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IHF1b3Q7CiAgaW50IHJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3RydWN0CnsKICBs
b25nIHF1b3Q7CiAgbG9uZyByZW07Cn0gbGRpdl90OwojIDQ2ICIvdXNyL3NoLWVsZi9pbmNsdWRl
L3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgX19tYl9jdXJfbWF4OwoKCgp2b2lkIGFib3J0ICh2b2lk
KSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKaW50IGFicyAoaW50KTsKaW50IGF0ZXhpdCAo
dm9pZCAoKl9fZnVuYykodm9pZCkpOwpkb3VibGUgYXRvZiAoY29uc3QgY2hhciAqX19ucHRyKTsK
CmZsb2F0IGF0b2ZmIChjb25zdCBjaGFyICpfX25wdHIpOwoKaW50IGF0b2kgKGNvbnN0IGNoYXIg
Kl9fbnB0cik7CmxvbmcgYXRvbCAoY29uc3QgY2hhciAqX19ucHRyKTsKdm9pZCAqIGJzZWFyY2gg
KGNvbnN0IHZvaWQgKiBfX2tleSwgY29uc3Qgdm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUsIGludCAoKiBfY29tcGFyKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lk
ICopKTsKCgoKCnZvaWQgKiBjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKTsK
ZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pOwp2b2lkIGV4aXQgKGludCBfX3N0
YXR1cykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CnZvaWQgZnJlZSAodm9pZCAqKTsKY2hh
ciAqIGdldGVudiAoY29uc3QgY2hhciAqX19zdHJpbmcpOwpjaGFyICogX2dldGVudl9yIChzdHJ1
Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKY2hhciAqIF9maW5kZW52IChjb25z
dCBjaGFyICosIGludCAqKTsKY2hhciAqIF9maW5kZW52X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29u
c3QgY2hhciAqLCBpbnQgKik7CmxvbmcgbGFicyAobG9uZyk7CmxkaXZfdCBsZGl2IChsb25nIF9f
bnVtZXIsIGxvbmcgX19kZW5vbSk7CnZvaWQgKiBtYWxsb2MgKHNpemVfdCBfX3NpemUpOwppbnQg
bWJsZW4gKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKaW50IF9tYmxlbl9yIChzdHJ1Y3QgX3JlZW50
ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBpbnQgKik7CmludCBtYnRvd2MgKHdjaGFyX3QgKiwg
Y29uc3QgY2hhciAqLCBzaXplX3QpOwppbnQgX21idG93Y19yIChzdHJ1Y3QgX3JlZW50ICosIHdj
aGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGludCAqKTsKaW50IHdjdG9tYiAoY2hhciAq
LCB3Y2hhcl90KTsKaW50IF93Y3RvbWJfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIHdjaGFy
X3QsIGludCAqKTsKc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6
ZV90KTsKc2l6ZV90IF9tYnN0b3djc19yIChzdHJ1Y3QgX3JlZW50ICosIHdjaGFyX3QgKiwgY29u
c3QgY2hhciAqLCBzaXplX3QsIGludCAqKTsKc2l6ZV90IHdjc3RvbWJzIChjaGFyICosIGNvbnN0
IHdjaGFyX3QgKiwgc2l6ZV90KTsKc2l6ZV90IF93Y3N0b21ic19yIChzdHJ1Y3QgX3JlZW50ICos
IGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QsIGludCAqKTsKCgppbnQgbWtzdGVtcCAo
Y2hhciAqKTsKY2hhciAqIG1rdGVtcCAoY2hhciAqKTsKCgp2b2lkIHFzb3J0ICh2b2lkICogX19i
YXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgaW50KCpfY29tcGFyKShjb25zdCB2
b2lkICosIGNvbnN0IHZvaWQgKikpOwppbnQgcmFuZCAodm9pZCk7CnZvaWQgKiByZWFsbG9jICh2
b2lkICogX19yLCBzaXplX3QgX19zaXplKTsKdm9pZCBzcmFuZCAodW5zaWduZWQgX19zZWVkKTsK
ZG91YmxlIHN0cnRvZCAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSKTsKZG91Ymxl
IF9zdHJ0b2RfciAoc3RydWN0IF9yZWVudCAqLGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5k
X1BUUik7CgpmbG9hdCBzdHJ0b2RmIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIp
OwoKbG9uZyBzdHJ0b2wgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9f
YmFzZSk7CmxvbmcgX3N0cnRvbF9yIChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX19uLCBj
aGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKdW5zaWduZWQgbG9uZyBzdHJ0b3VsIChjb25z
dCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwp1bnNpZ25lZCBsb25n
IF9zdHJ0b3VsX3IgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2Vu
ZF9QVFIsIGludCBfX2Jhc2UpOwoKaW50IHN5c3RlbSAoY29uc3QgY2hhciAqX19zdHJpbmcpOwoK
CmxvbmcgYTY0bCAoY29uc3QgY2hhciAqX19pbnB1dCk7CmNoYXIgKiBsNjRhIChsb25nIF9faW5w
dXQpOwpjaGFyICogX2w2NGFfciAoc3RydWN0IF9yZWVudCAqLGxvbmcgX19pbnB1dCk7CmludCBv
bl9leGl0ICh2b2lkICgqX19mdW5jKShpbnQsIHZvaWQgKiksdm9pZCAqIF9fYXJnKTsKaW50IHB1
dGVudiAoY29uc3QgY2hhciAqX19zdHJpbmcpOwppbnQgX3B1dGVudl9yIChzdHJ1Y3QgX3JlZW50
ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKaW50IHNldGVudiAoY29uc3QgY2hhciAqX19zdHJp
bmcsIGNvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX292ZXJ3cml0ZSk7CmludCBfc2V0ZW52X3Ig
KHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19zdHJpbmcsIGNvbnN0IGNoYXIgKl9fdmFs
dWUsIGludCBfX292ZXJ3cml0ZSk7CgpjaGFyICogZ2N2dCAoZG91YmxlLGludCxjaGFyICopOwpj
aGFyICogZ2N2dGYgKGZsb2F0LGludCxjaGFyICopOwpjaGFyICogZmN2dCAoZG91YmxlLGludCxp
bnQgKixpbnQgKik7CmNoYXIgKiBmY3Z0ZiAoZmxvYXQsaW50LGludCAqLGludCAqKTsKY2hhciAq
IGVjdnQgKGRvdWJsZSxpbnQsaW50ICosaW50ICopOwpjaGFyICogZWN2dGJ1ZiAoZG91YmxlLCBp
bnQsIGludCosIGludCosIGNoYXIgKik7CmNoYXIgKiBmY3Z0YnVmIChkb3VibGUsIGludCwgaW50
KiwgaW50KiwgY2hhciAqKTsKY2hhciAqIGVjdnRmIChmbG9hdCxpbnQsaW50ICosaW50ICopOwpj
aGFyICogZHRvYSAoZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCosIGNoYXIqKik7CmludCBy
YW5kX3IgKHVuc2lnbmVkICpfX3NlZWQpOwoKZG91YmxlIGRyYW5kNDggKHZvaWQpOwpkb3VibGUg
X2RyYW5kNDhfciAoc3RydWN0IF9yZWVudCAqKTsKZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNo
b3J0IFszXSk7CmRvdWJsZSBfZXJhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNo
b3J0IFszXSk7CmxvbmcganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgWzNdKTsKbG9uZyBfanJhbmQ0
OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFszXSk7CnZvaWQgbGNvbmc0OCAo
dW5zaWduZWQgc2hvcnQgWzddKTsKdm9pZCBfbGNvbmc0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVu
c2lnbmVkIHNob3J0IFs3XSk7CmxvbmcgbHJhbmQ0OCAodm9pZCk7CmxvbmcgX2xyYW5kNDhfciAo
c3RydWN0IF9yZWVudCAqKTsKbG9uZyBtcmFuZDQ4ICh2b2lkKTsKbG9uZyBfbXJhbmQ0OF9yIChz
dHJ1Y3QgX3JlZW50ICopOwpsb25nIG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7Cmxvbmcg
X25yYW5kNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOwp1bnNpZ25l
ZCBzaG9ydCAqCiAgICAgICBzZWVkNDggKHVuc2lnbmVkIHNob3J0IFszXSk7CnVuc2lnbmVkIHNo
b3J0ICoKICAgICAgIF9zZWVkNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBb
M10pOwp2b2lkIHNyYW5kNDggKGxvbmcpOwp2b2lkIF9zcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQg
KiwgbG9uZyk7CmxvbmcgbG9uZyBzdHJ0b2xsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2Vu
ZF9QVFIsIGludCBfX2Jhc2UpOwpsb25nIGxvbmcgX3N0cnRvbGxfciAoc3RydWN0IF9yZWVudCAq
LCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwp1bnNpZ25l
ZCBsb25nIGxvbmcgc3RydG91bGwgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwg
aW50IF9fYmFzZSk7CnVuc2lnbmVkIGxvbmcgbG9uZyBfc3RydG91bGxfciAoc3RydWN0IF9yZWVu
dCAqLCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwoKCnZv
aWQgY2ZyZWUgKHZvaWQgKik7CiMgMTY4ICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmNoYXIgKiBfZHRvYV9yIChzdHJ1Y3QgX3JlZW50ICosIGRvdWJsZSwgaW50LCBpbnQsIGludCAq
LCBpbnQqLCBjaGFyKiopOwp2b2lkICogX21hbGxvY19yIChzdHJ1Y3QgX3JlZW50ICosIHNpemVf
dCk7CnZvaWQgKiBfY2FsbG9jX3IgKHN0cnVjdCBfcmVlbnQgKiwgc2l6ZV90LCBzaXplX3QpOwp2
b2lkIF9mcmVlX3IgKHN0cnVjdCBfcmVlbnQgKiwgdm9pZCAqKTsKdm9pZCAqIF9yZWFsbG9jX3Ig
KHN0cnVjdCBfcmVlbnQgKiwgdm9pZCAqLCBzaXplX3QpOwp2b2lkIF9tc3RhdHNfciAoc3RydWN0
IF9yZWVudCAqLCBjaGFyICopOwppbnQgX3N5c3RlbV9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0
IGNoYXIgKik7Cgp2b2lkIF9fZXByaW50ZiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVu
c2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMv
Y3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGxpYiIgMwpuYW1lc3Bh
Y2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFi
b3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1
c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6
OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwog
IHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcg
OjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6
bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxv
YzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwog
IHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwog
IHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4g
bGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7
IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMgNjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMK
IyA0MiAiL3Vzci9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4
dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7
CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2Vw
dGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRo
cm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgog
IHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVh
bCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1p
bmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAo
KTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIp
IHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu
X18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hh
bmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CiMgOTggIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCiAgYm9v
bCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsK
IyAxMTEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCiAgdm9pZCBfX3ZlcmJvc2Vf
dGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9uZXci
IDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9j
IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygp
IHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBu
b3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVk
ZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIo
bmV3X2hhbmRsZXIpOwp9CiMgNzkgIi91c3IvaW5jbHVkZS9nKystdjMvbmV3IiAzCnZvaWQqIG9w
ZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3Bl
cmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3Bl
cmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq
KSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90
aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0
IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lk
KiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBvcGVyYXRv
ciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KaW5s
aW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkg
eyByZXR1cm4gX19wOyB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pb3Nmd2QiIDEgMwojIDQzICIv
dXNyL2luY2x1ZGUvZysrLXYzL2lvc2Z3ZCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0cmlu
Z2Z3ZC5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAg
IHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hh
cj47CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+
IHN0cmluZzsKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYg
Ii91c3IvaW5jbHVkZS9nKystdjMvaW9zZndkIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIg
MwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2MrK2lvLmgiIDEgMwojIDM1
ICIvdXNyL2luY2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2NzdGRpbyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGlv
IiAzCgoKCgojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjggIi91c3Iv
c2gtZWxmL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gIkMiIHsKIyAzNyAiL3Vzci9zaC1lbGYv
aW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzggIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3RkaW8uaCIgMiAz
CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3NoLWVsZi8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAz
IDQKIyA0MyAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDMg
NAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDQxICIvdXNyL3No
LWVsZi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDUwICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0ZGlv
LmgiIDMKIyAxICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy9zdGRpby5oIiAxIDMKIyA1MSAiL3Vz
ci9zaC1lbGYvaW5jbHVkZS9zdGRpby5oIiAyIDMKCnR5cGVkZWYgX2Zwb3NfdCBmcG9zX3Q7Cgp0
eXBlZGVmIHN0cnVjdCBfX3NGSUxFIEZJTEU7CiMgMTU4ICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0
ZGlvLmgiIDMKRklMRSAqIHRtcGZpbGUgKHZvaWQpOwpjaGFyICogdG1wbmFtIChjaGFyICopOwpp
bnQgZmNsb3NlIChGSUxFICopOwppbnQgZmZsdXNoIChGSUxFICopOwpGSUxFICogZnJlb3BlbiAo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CnZvaWQgc2V0YnVmIChGSUxFICos
IGNoYXIgKik7CmludCBzZXR2YnVmIChGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOwppbnQg
ZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBmc2NhbmYgKEZJTEUgKiwg
Y29uc3QgY2hhciAqLCAuLi4pOwppbnQgcHJpbnRmIChjb25zdCBjaGFyICosIC4uLik7CmludCBz
Y2FuZiAoY29uc3QgY2hhciAqLCAuLi4pOwppbnQgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwgLi4uKTsKaW50IHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVj
X3ZhX2xpc3QpOwppbnQgdnByaW50ZiAoY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7Cmlu
dCB2c3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IGZn
ZXRjIChGSUxFICopOwpjaGFyICogZmdldHMgKGNoYXIgKiwgaW50LCBGSUxFICopOwppbnQgZnB1
dGMgKGludCwgRklMRSAqKTsKaW50IGZwdXRzIChjb25zdCBjaGFyICosIEZJTEUgKik7CmludCBn
ZXRjIChGSUxFICopOwppbnQgZ2V0Y2hhciAodm9pZCk7CmNoYXIgKiBnZXRzIChjaGFyICopOwpp
bnQgcHV0YyAoaW50LCBGSUxFICopOwppbnQgcHV0Y2hhciAoaW50KTsKaW50IHB1dHMgKGNvbnN0
IGNoYXIgKik7CmludCB1bmdldGMgKGludCwgRklMRSAqKTsKc2l6ZV90IGZyZWFkICh2b2lkICos
IHNpemVfdCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopOwpzaXplX3QgZndyaXRlIChjb25zdCB2
b2lkICogLCBzaXplX3QgX3NpemUsIHNpemVfdCBfbiwgRklMRSAqKTsKaW50IGZnZXRwb3MgKEZJ
TEUgKiwgZnBvc190ICopOwppbnQgZnNlZWsgKEZJTEUgKiwgbG9uZywgaW50KTsKaW50IGZzZXRw
b3MgKEZJTEUgKiwgY29uc3QgZnBvc190ICopOwpsb25nIGZ0ZWxsICggRklMRSAqKTsKdm9pZCBy
ZXdpbmQgKEZJTEUgKik7CnZvaWQgY2xlYXJlcnIgKEZJTEUgKik7CmludCBmZW9mIChGSUxFICop
OwppbnQgZmVycm9yIChGSUxFICopOwp2b2lkIHBlcnJvciAoY29uc3QgY2hhciAqKTsKCkZJTEUg
KiBmb3BlbiAoY29uc3QgY2hhciAqX25hbWUsIGNvbnN0IGNoYXIgKl90eXBlKTsKaW50IHNwcmlu
dGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgcmVtb3ZlIChjb25zdCBjaGFyICop
OwppbnQgcmVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKaW50IHZmaXByaW50
ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IGlwcmludGYgKGNv
bnN0IGNoYXIgKiwgLi4uKTsKaW50IGZpcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4u
KTsKaW50IHNpcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKY2hhciAqIHRlbXBu
YW0gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IHZzbnByaW50ZiAoY2hhciAqLCBz
aXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgdmZzY2FuZiAoRklMRSAq
LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IHZzY2FuZiAoY29uc3QgY2hhciAq
LCBfX2dudWNfdmFfbGlzdCk7CmludCB2c3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
KiwgX19nbnVjX3ZhX2xpc3QpOwoKaW50IHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3Qg
Y2hhciAqLCAuLi4pOwojIDIyMiAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdGRpby5oIiAzCkZJTEUg
KiBmZG9wZW4gKGludCwgY29uc3QgY2hhciAqKTsKCmludCBmaWxlbm8gKEZJTEUgKik7CmludCBn
ZXR3IChGSUxFICopOwppbnQgcGNsb3NlIChGSUxFICopOwpGSUxFICogcG9wZW4gKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKaW50IHB1dHcgKGludCwgRklMRSAqKTsKdm9pZCBzZXRidWZm
ZXIgKEZJTEUgKiwgY2hhciAqLCBpbnQpOwppbnQgc2V0bGluZWJ1ZiAoRklMRSAqKTsKaW50IGdl
dGNfdW5sb2NrZWQgKEZJTEUgKik7CmludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKTsKdm9pZCBm
bG9ja2ZpbGUgKEZJTEUgKik7CmludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKik7CnZvaWQgZnVubG9j
a2ZpbGUgKEZJTEUgKik7CmludCBwdXRjX3VubG9ja2VkIChpbnQsIEZJTEUgKik7CmludCBwdXRj
aGFyX3VubG9ja2VkIChpbnQpOwoKCgoKCgpGSUxFICogX2Zkb3Blbl9yIChzdHJ1Y3QgX3JlZW50
ICosIGludCwgY29uc3QgY2hhciAqKTsKRklMRSAqIF9mb3Blbl9yIChzdHJ1Y3QgX3JlZW50ICos
IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9mc2NhbmZfciAoc3RydWN0IF9yZWVu
dCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9nZXRjaGFyX3IgKHN0cnVjdCBf
cmVlbnQgKik7CmNoYXIgKiBfZ2V0c19yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBf
aXByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9ta3N0
ZW1wX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKTsKY2hhciAqIF9ta3RlbXBfciAoc3RydWN0
IF9yZWVudCAqLCBjaGFyICopOwp2b2lkIF9wZXJyb3JfciAoc3RydWN0IF9yZWVudCAqLCBjb25z
dCBjaGFyICopOwppbnQgX3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwg
Li4uKTsKaW50IF9wdXRjaGFyX3IgKHN0cnVjdCBfcmVlbnQgKiwgaW50KTsKaW50IF9wdXRzX3Ig
KHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKaW50IF9yZW1vdmVfciAoc3RydWN0IF9y
ZWVudCAqLCBjb25zdCBjaGFyICopOwppbnQgX3JlbmFtZV9yIChzdHJ1Y3QgX3JlZW50ICosIGNv
bnN0IGNoYXIgKl9vbGQsIGNvbnN0IGNoYXIgKl9uZXcpOwoKaW50IF9zY2FuZl9yIChzdHJ1Y3Qg
X3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9zcHJpbnRmX3IgKHN0cnVjdCBfcmVl
bnQgKiwgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfc25wcmludGZfciAoc3RydWN0
IF9yZWVudCAqLCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX3NzY2Fu
Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpj
aGFyICogX3RlbXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CkZJTEUgKiBfdG1wZmlsZV9yIChzdHJ1Y3QgX3JlZW50ICopOwpjaGFyICogX3RtcG5h
bV9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBfdmZwcmludGZfciAoc3RydWN0IF9y
ZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX3Zwcmlu
dGZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50
IF92c3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2du
dWNfdmFfbGlzdCk7CmludCBfdnNucHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBz
aXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX3Zmc2NhbmZfciAoc3Ry
dWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQg
X3ZzY2FuZl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3Qp
OwppbnQgX3Zzc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKCgoKCmludCBfX3NyZ2V0IChGSUxFICopOwppbnQgX19z
d2J1ZiAoaW50LCBGSUxFICopOwoKCgoKCgpGSUxFICpmdW5vcGVuIChjb25zdCB2b2lkICogX2Nv
b2tpZSwgaW50ICgqcmVhZGZuKSh2b2lkICogX2Nvb2tpZSwgY2hhciAqX2J1ZiwgaW50IF9uKSwg
aW50ICgqd3JpdGVmbikodm9pZCAqIF9jb29raWUsIGNvbnN0IGNoYXIgKl9idWYsIGludCBfbiks
IGZwb3NfdCAoKnNlZWtmbikodm9pZCAqIF9jb29raWUsIGZwb3NfdCBfb2ZmLCBpbnQgX3doZW5j
ZSksIGludCAoKmNsb3NlZm4pKHZvaWQgKiBfY29va2llKSk7CiMgMzg2ICIvdXNyL3NoLWVsZi9p
bmNsdWRlL3N0ZGlvLmgiIDMKfQojIDUzICIvdXNyL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMiAz
CiMgOTcgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz
aW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2lu
ZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpm
Zmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0
czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwog
IHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNp
bmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcg
OjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRj
aGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsK
ICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2lu
ZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6
OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNw
cmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1w
bmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJp
bnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAzNiAiL3Vzci9pbmNsdWRlL2crKy12My9zaC1l
bGYvYml0cy9jKytpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9zaC1lbGYvYml0
cy9ndGhyLmgiIDEgMwojIDEwMiAiL3Vzci9pbmNsdWRlL2crKy12My9zaC1lbGYvYml0cy9ndGhy
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2d0aHItc2luZ2xlLmgi
IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2d0aHItc2luZ2xlLmgi
IDMKdHlwZWRlZiBpbnQgX19ndGhyZWFkX211dGV4X3Q7CiMgMjExICIvdXNyL2luY2x1ZGUvZysr
LXYzL3NoLWVsZi9iaXRzL2d0aHItc2luZ2xlLmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhy
ZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f
Z3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkKewogIHJldHVybiAwOwp9
CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211
dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211
dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQojIDEwMyAi
L3Vzci9pbmNsdWRlL2crKy12My9zaC1lbGYvYml0cy9ndGhyLmgiIDIgMwojIDM4ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog
IHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsK
CgoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9t
dXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9f
aW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgw
MDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2ll
bnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2Ug
PSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0
MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Owog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAw
NDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4
MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0g
MHgyMDsKICB9Owp9CiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoj
IDEgIi91c3IvaW5jbHVkZS9nKystdjMvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9jd2NoYXIiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2N0aW1lIiAxIDMKIyA0
OCAiL3Vzci9pbmNsdWRlL2crKy12My9jdGltZSIgMwoKCgojIDEgIi91c3Ivc2gtZWxmL2luY2x1
ZGUvdGltZS5oIiAxIDMKIyAxNCAiL3Vzci9zaC1lbGYvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJu
ICJDIiB7CgoKCgoKCgojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvbWFjaGluZS90aW1lLmgiIDEg
MwojIDIzICIvdXNyL3NoLWVsZi9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgMzEgIi91c3Ivc2gtZWxm
L2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzIgIi91c3Ivc2gtZWxmL2luY2x1ZGUvdGltZS5oIiAyIDMK
CiMgMSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzEgIi91c3Ivc2gt
ZWxmL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL3NoLWVsZi8z
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMiAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMiAzCiMgMSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDEg
MwojIDkgIi91c3Ivc2gtZWxmL2luY2x1ZGUvbWFjaGluZS90eXBlcy5oIiAzCnR5cGVkZWYgbG9u
ZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBsb25nIGxvbmcgaW50IF9fbG9mZl90OwojIDMzICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy90
eXBlcy5oIiAyIDMKIyA1NCAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25n
OwoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dWludDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGNsb2NrX3Q7CgoKCgp0eXBlZGVmIGxvbmcg
dGltZV90OwoKCgoKc3RydWN0IHRpbWVzcGVjIHsKICB0aW1lX3QgdHZfc2VjOwogIGxvbmcgdHZf
bnNlYzsKfTsKCnN0cnVjdCBpdGltZXJzcGVjIHsKICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2
YWw7CiAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwp9OwoKCnR5cGVkZWYgbG9uZyBkYWRkcl90
Owp0eXBlZGVmIGNoYXIgKiBjYWRkcl90OwoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bm9fdDsKIyAxMjkgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBz
aG9ydCBkZXZfdDsKCgoKCnR5cGVkZWYgbG9uZyBvZmZfdDsKCnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgZ2lkX3Q7CgoKdHlwZWRlZiBpbnQgcGlk
X3Q7CnR5cGVkZWYgbG9uZyBrZXlfdDsKdHlwZWRlZiBsb25nIHNzaXplX3Q7CiMgMTU1ICIvdXNy
L3NoLWVsZi9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IG1vZGVf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBubGlua190OwojIDE4MSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
Mwp0eXBlZGVmIGxvbmcgZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF90eXBlc19mZF9z
ZXQgewogICAgICAgIGZkX21hc2sgZmRzX2JpdHNbKCgoNjQpKygoKHNpemVvZiAoZmRfbWFzaykg
KiA4KSktMSkpLygoc2l6ZW9mIChmZF9tYXNrKSAqIDgpKSldOwp9IF90eXBlc19mZF9zZXQ7CiMg
MzQgIi91c3Ivc2gtZWxmL2luY2x1ZGUvdGltZS5oIiAyIDMKCnN0cnVjdCB0bQp7CiAgaW50IHRt
X3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0
bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50
IHRtX2lzZHN0Owp9OwoKY2xvY2tfdCBjbG9jayAodm9pZCk7CmRvdWJsZSBkaWZmdGltZSAodGlt
ZV90IF90aW1lMiwgdGltZV90IF90aW1lMSk7CnRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX3Rp
bWVwdHIpOwp0aW1lX3QgdGltZSAodGltZV90ICpfdGltZXIpOwoKY2hhciAqYXNjdGltZSAoY29u
c3Qgc3RydWN0IHRtICpfdGJsb2NrKTsKY2hhciAqY3RpbWUgKGNvbnN0IHRpbWVfdCAqX3RpbWUp
OwpzdHJ1Y3QgdG0gKmdtdGltZSAoY29uc3QgdGltZV90ICpfdGltZXIpOwpzdHJ1Y3QgdG0gKmxv
Y2FsdGltZSAoY29uc3QgdGltZV90ICpfdGltZXIpOwoKc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpf
cywgc2l6ZV90IF9tYXhzaXplLCBjb25zdCBjaGFyICpfZm10LCBjb25zdCBzdHJ1Y3QgdG0gKl90
KTsKCmNoYXIgKmFzY3RpbWVfciAoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKik7CmNoYXIgKmN0
aW1lX3IgKGNvbnN0IHRpbWVfdCAqLCBjaGFyICopOwpzdHJ1Y3QgdG0gKmdtdGltZV9yIChjb25z
dCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwpzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0
aW1lX3QgKiwgc3RydWN0IHRtICopOwoKCmNoYXIgKnN0cnB0aW1lIChjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiwgc3RydWN0IHRtICopOwp2b2lkIHR6c2V0ICh2b2lkKTsKdm9pZCBfdHpzZXRf
ciAoc3RydWN0IF9yZWVudCAqKTsKCgpleHRlcm4gdGltZV90IF90aW1lem9uZTsKZXh0ZXJuIGlu
dCBfZGF5bGlnaHQ7CmV4dGVybiBjaGFyICpfdHpuYW1lWzJdOwojIDk1ICIvdXNyL3NoLWVsZi9p
bmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL2ZlYXR1cmVzLmgi
IDEgMwojIDI1ICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy9mZWF0dXJlcy5oIiAzCmV4dGVybiAi
QyIgewojIDkzICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy9mZWF0dXJlcy5oIiAzCn0KIyA5NiAi
L3Vzci9zaC1lbGYvaW5jbHVkZS90aW1lLmgiIDIgMwojIDE5NSAiL3Vzci9zaC1lbGYvaW5jbHVk
ZS90aW1lLmgiIDMKfQojIDUyICIvdXNyL2luY2x1ZGUvZysrLXYzL2N0aW1lIiAyIDMKIyA2NCAi
L3Vzci9pbmNsdWRlL2crKy12My9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNs
b2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsK
ICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1
c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2lu
ZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi91c3IvaW5jbHVkZS9n
KystdjMvY3djaGFyIiAyIDMKIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9jd2NoYXIiIDMKZXh0
ZXJuICJDIgp7CiAgdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX19maWxsWzZdOwogIH0gbWJz
dGF0ZV90Owp9CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyA0NiAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgog
ICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVi
bGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9z
dDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9
IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0
YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBl
IF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0
KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsg
fQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2Zm
ICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0o
c3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAg
ICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBm
cG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7
CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAg
ICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAg
ICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0
IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2Zm
OyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9m
ZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9p
ZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0K
ICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgoKCn0KIyA0NyAi
L3Vzci9pbmNsdWRlL2crKy12My9pb3Nmd2QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVz
LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs
aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f
dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQ4ICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi
YXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0
cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAg
ICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh
c2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAg
dHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNo
YXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3Ry
ZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmlu
Z2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBp
ZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKICB0eXBlZGVmIGJhc2ljX2lvczx3Y2hh
cl90PiB3aW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+IHdzdHJlYW1idWY7
CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+IHdpc3RyZWFtOwogIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTx3Y2hhcl90PiB3b3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPHdj
aGFyX3Q+IHdpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90PiB3c3Ry
aW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PiB3aXN0cmluZ3N0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08d2NoYXJfdD4gd29zdHJpbmdzdHJl
YW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD4gd3N0cmluZ3N0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD4gd2ZpbGVidWY7CiAgdHlwZWRlZiBiYXNp
Y19pZnN0cmVhbTx3Y2hhcl90PiB3aWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTx3
Y2hhcl90PiB3b2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPHdjaGFyX3Q+IHdmc3Ry
ZWFtOwp9CiMgNzEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBm
aXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1Qy
IHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihj
b25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikg
e30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8
X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kp
CnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5z
ZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3ku
Zmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJu
ICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu
ZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9U
MSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194
KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195
KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGlu
ZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVy
biBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
dHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3Ry
YWl0cy5oIiAzCiMgOTAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAz
CnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlwZSB7fTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDExMyAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoK
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNo
YXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxp
bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu
c2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFp
dHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFy
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVk
IHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu
dGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBs
b25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3Jt
YWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVz
cGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUg
X0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0
b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewoj
IDgwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIg
MwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0
b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRf
aXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBw
dWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EaXN0
YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9UcCosIHR5
cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgogICAgc3RydWN0IGl0ZXJhdG9yIHsKCiAgICAgIHR5
cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgICAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsKCiAgICAgIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKCiAgICAg
IHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsKCiAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZl
cmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBz
dHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6
Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICAgICAg
dHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAg
ICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAm
IHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBp
dGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgY29uc3QgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNl
OwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKTsgfQoKfQojIDc0ICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsK
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2Uo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVy
YXRvcl90YWcpCiAgewoKICAgCgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAg
fQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCiAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnKQogIHsKCiAgIAogICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQojIDExMSAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNlKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAgcmV0dXJuIF9f
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK
ICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg
aW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBp
bnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsrX19pOwogIH0K
CnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0
YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBf
X2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwog
ICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lk
CiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAog
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIF9faSAr
PSBfX247CiAgfQojIDE2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1l
IF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwg
X0Rpc3RhbmNlIF9fbikKICB7CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9faSkpOwogIH0KCn0KIyA3NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0
b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNsYXNzIHJldmVyc2Vf
aXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAg
X0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9JdGVyYXRvciBp
dGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpw
b2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKCkg
eyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5
cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29u
c3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHsg
fQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVyc2VfaXRl
cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgICAgICA6IGN1cnJl
bnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAgIGJhc2UoKSBj
b25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVy
YXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsK
ICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcG9pbnRlcgogICAg
ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgoKCgoKICAg
ICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICAt
LWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVy
c2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNl
X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVy
biBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkKICAg
ICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICArK2N1
cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2Vf
aXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoKCgoKICAgICAg
cmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKQog
ICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRpZmZlcmVu
Y2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVu
dCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3It
PShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCArPSBfX247CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv
cGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBf
X24pOyB9CiAgICB9OwojIDI2OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv
ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyBy
ZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy
biAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9f
eSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1l
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRv
ci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3ku
YmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5h
bWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAg
ICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMg
MzI3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAg
IDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQs
IHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsK
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoK
ICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194
KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7
CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
KigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyAzODQg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gYmFj
a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDM5NyAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh
aW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0
b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAg
IHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBm
cm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7
IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAg
ICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFp
bmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+
cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAg
ICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz
OyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyBy
ZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0
b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDQ1MyAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5l
cj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250
X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDcwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xh
c3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3Jf
dGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBf
Q29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y
IGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90
eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1l
IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIo
X19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAz
CiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9D
b250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgaXRlciA9
IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgICAgICsraXRlcjsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3Im
CiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA1NDQgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9y
IF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoK
CgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNs
YXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAg
ewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRl
cjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7
IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRv
ciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFz
ZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBv
cGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3Jt
YWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJh
dG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3Bl
cmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv
cihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29u
c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRb
X19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3Qg
ZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAq
dGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRp
ZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv
cihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAt
PSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3Bl
cmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBf
X25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgZGlmZmVyZW5jZV90
eXBlCiAgICAgIG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVyYXRvciYgX19pKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgICAgIGNvbnN0
IF9JdGVyYXRvciYKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAg
IH07CiMgNjQ5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFt
ZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25z
dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyBy
ZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRv
cj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhz
LAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp
bmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg
eyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy
YXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwg
dHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK
ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl
cmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5
cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg
eyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh
dG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xo
cywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp
bmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVu
YW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7
IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh
dG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5
cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK
ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w
ZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgogIG9wZXJh
dG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQp9CiMgNzYgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7
CiMgOTEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBp
bmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIy
IF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoK
CiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7
CiAgICAgICpfX2EgPSAqX19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpCiAgICB7
CgogICAgIAoKICAgICAgX1RwIF9fdG1wID0gX19hOwogICAgICBfX2EgPSBfX2I7CiAgICAgIF9f
YiA9IF9fdG1wOwogICAgfQojIDE0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYK
ICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAg
ICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxNjYgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNv
bnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBf
X2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
JiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19iLCBfX2Ep
KSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIwNCAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21w
KF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg
ICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAg
ICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJz
dCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX091
dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CiAgICAgIGZvciAoX0Rp
c3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICsrX19yZXN1
bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgIHsKICAgICAgbWVt
bW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkp
OwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s
aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFs
c2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAg
X19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJu
IF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAg
X19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9U
cCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw
KiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAg
IHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg
aW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3Ry
dWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfT3V0cHV0SXRlcihf
X2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlf
bmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAg
ICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl
VHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFs
OwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgp
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3Jt
YWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4g
X19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9y
bWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICBy
ZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK
ICAgIH0KIyAzMzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg
aW5saW5lIF9PdXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9y
bWFsIF9fTm9ybWFsOwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBpbmxpbmUg
X0JpZGlyZWN0aW9uYWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBf
X2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsK
ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9fbjsKICAgICAgZm9yIChfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAw
OyAtLV9fbikKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9f
cmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9C
b29sVHlwZT4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKICAgIHsKICAgICAg
c3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgICAgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjIgX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2ZpcnN0KSk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0
cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAg
ICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z
dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIGNvbnN0IHB0cmRp
ZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g
X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgICAgICByZXR1cm4gX19yZXN1
bHQgLSBfTnVtOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBz
dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90
eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJz
dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1
cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAg
ICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIK
ICAgIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBf
X3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvciBfVHJpdmlhbDsKICAg
ICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4K
ICAgICAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAg
fQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBf
QkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmly
c3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfQkkyKF9fY29weV9i
YWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsgfQoKICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBf
X2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBf
X3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg
dHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRf
bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O
b3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1h
bF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgp
KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp
bmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkx
IF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAg
ICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA0NzcgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBl
bmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0
LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1h
bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRl
cmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAg
IHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQojIDUzMSAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIs
IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgZmlsbF9u
KF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAg
ewoKICAgICAKCiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAg
ICAqX19maXJzdCA9IF9fdmFsdWU7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgogIGlu
bGluZSB2b2lkCiAgZmlsbCh1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBf
X2xhc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFyIF9f
dG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsK
ICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNo
YXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICBzaWduZWQgY2hhciBf
X3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKGNo
YXIqIF9fZmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQogIHsKICAgIGNoYXIg
X190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9T
aXplPgogICAgaW5saW5lIHVuc2lnbmVkIGNoYXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hhciog
X19maXJzdCwgX1NpemUgX19uLCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAg
IGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3Qg
KyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25l
ZCBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVk
IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2Mp
OwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1NpemU+CiAgICBpbmxpbmUgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBf
X24sIGNvbnN0IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsg
X19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEs
IF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAg
ICsrX19maXJzdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1
dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgfQojIDY0MCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg
cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmlu
YXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBf
SW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NjggIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlm
ICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA2OTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBf
SW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAg
ICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0g
X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3By
ZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBy
ZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJz
dDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l
IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3Qy
KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQoKICBpbmxpbmUgYm9vbAogIGxleGlj
b2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLCBjb25zdCB1
bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQogIHsK
ICAgIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgICBjb25zdCBz
aXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogICAgY29uc3QgaW50IF9fcmVzdWx0
ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgICBy
ZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKICB9
CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19m
aXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCiAgewoKICAgIHJldHVybiBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hh
ciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgogIH0KCn0KIyA1NCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9leHQvc2xpc3QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs
b2MuaCIgMSAzCiMgODQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9n
KystdjMvY2Fzc2VydCIgMwoKIyAxICIvdXNyL3NoLWVsZi9pbmNsdWRlL2Fzc2VydC5oIiAxIDMK
CgoKCgpleHRlcm4gIkMiIHsKIyAyNSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9hc3NlcnQuaCIgMwp2
b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKTsKCgp9CiMgNDkg
Ii91c3IvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
cHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz
CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo
dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h
aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1
bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p
b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgODYgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90
aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMu
aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlCiAgewoKICAg
IHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7
CgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwoKICAgIF9SZWZjb3Vu
dF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhy
ZWFkX211dGV4X3QgX190bXAgPSAwOwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoK
CgoKCiAgICB9CgogICAgdm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9t
dXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50OwogICAg
ICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9CgogICAg
X1JDX3QKICAgIF9NX2RlY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01f
cmVmX2NvdW50X2xvY2spOwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2Nv
dW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAg
ICAgIHJldHVybiBfX3RtcDsKICAgIH0KICB9OwojIDEwOSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF90aHJlYWRzLmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIHN0cnVjdCBf
U3dhcF9sb2NrX3N0cnVjdAogICAgeyBzdGF0aWMgX19ndGhyZWFkX211dGV4X3QgX1Nfc3dhcF9s
b2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIF9fZ3RocmVhZF9tdXRleF90CiAg
ICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9sb2NrID0gMDsKCgoKICBpbmxp
bmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19wLCB1bnNp
Z25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX1N3YXBfbG9ja19z
dHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBsb25nIF9fcmVzdWx0ID0gKl9f
cDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfU3dhcF9sb2Nr
X3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CiMgMTUx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RM
X211dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAg
dm9pZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTg0ICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVfbG9j
aygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAgIH0K
CiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyMCAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAg
ICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7CgogICAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRl
eF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWly
ZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9s
b2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19s
b2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogIH07Cgp9
CiMgODcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKIyA5OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCiAg
Y2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxv
Y2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gOjpvcGVyYXRvciBuZXcoX19uKTsgfQoKICAg
IHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90KQogICAgeyA6Om9w
ZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAxMjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgY2xhc3MgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGUKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkKiBf
U19vb21fbWFsbG9jKHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2
b2lkKiwgc2l6ZV90KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hh
bmRsZXIpKCk7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUo
c2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7
CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24p
OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg
ICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9Cgog
ICAgICBzdGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNp
emVfdCBfX25ld19zeikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhf
X3AsIF9fbmV3X3N6KTsKICAgICAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19v
b21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg
IH0KCiAgICAgIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2Yp
KCkpKSgpCiAgICAgIHsKICAgICAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nf
b29tX2hhbmRsZXI7CiAgICAgICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAg
ICAgICAgcmV0dXJuKF9fb2xkKTsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlIDxpbnQgX19p
bnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxv
Y19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAg
dm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Mo
c2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwog
ICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAg
X19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAg
ICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAgc3RkOjpfX3Rocm93
X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAg
ICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAg
ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlIDxpbnQg
X19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9T
X29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBf
X215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAo
OzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikK
ICAgICAgICAgICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21h
bGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsK
ICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAg
ICAgICB9CiAgICB9CgoKCgoKCiAgdHlwZWRlZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7
CiMgMjE5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0
ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBw
dWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g
MCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHAp
KTsgfQoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxs
b2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRl
KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxv
Y2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9j
YXRlKF9UcCogX19wKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkp
OyB9CiAgfTsKIyAyNTEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwog
IHRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19kZWJ1Z19hbGxvYwogIHsKICBwcml2
YXRlOgogICAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9p
ZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hh
ciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90
KilfX3Jlc3VsdCA9IF9fbjsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7
CiAgICB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24p
CiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJh
OwogICAgICAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pID8gKHZvaWQpMCA6IF9fYXNzZXJ0
KCIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzAsICIqKHNpemVfdCop
X19yZWFsX3AgPT0gX19uIikpOwogICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9f
biArIChpbnQpIF9TX2V4dHJhKTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2
b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICBj
aGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgKCgqKHNp
emVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gKHZvaWQpMCA6IF9fYXNzZXJ0KCIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzcsICIqKHNpemVfdCopX19yZWFsX3Ag
PT0gX19vbGRfc3oiKSk7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICAgIF9B
bGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0
cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgICAgcmV0dXJuIF9f
cmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CiAgfTsKIyAzMjQgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4KICBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUKICB7CiAgcHJpdmF0ZToKICAg
IGVudW0ge19BTElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVt
IHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgIHVuaW9uIF9PYmoKICAg
IHsKICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgIGNoYXIgX01fY2xp
ZW50X2RhdGFbMV07CiAgICB9OwoKICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xp
c3RbX05GUkVFTElTVFNdOwoKCiAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAgIHN0
YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoK
ICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsKCiAgICBz
dGF0aWMgc2l6ZV90CiAgICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJu
ICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAx
KSk7IH0KCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19i
eXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVf
dClfQUxJR04gLSAxKTsgfQoKCgogICAgc3RhdGljIHZvaWQqCiAgICBfU19yZWZpbGwoc2l6ZV90
IF9fbik7CgoKCiAgICBzdGF0aWMgY2hhcioKICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3Np
emUsIGludCYgX19ub2Jqcyk7CgoKCiAgICBjbGFzcyBfTG9jawogICAgewogICAgcHVibGljOgog
ICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9h
Y3F1aXJlX2xvY2soKTsgfQogICAgICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVf
YWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KICAgIH0gX19hdHRyaWJ1dGVfXyAo
KF9fdW51c2VkX18pKTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCiAgcHVibGljOgoKICAgIHN0
YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCogX19y
ZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgX19y
ZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7
CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QK
ICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAgX0xvY2sg
X19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0g
Kl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgICAg
IF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgZWxzZQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01f
ZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfTsKCgogICAgc3RhdGljIHZv
aWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICBpZiAo
X19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxs
b2NhdGUoX19wLCBfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09iaiogdm9s
YXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJl
ZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCiAg
ICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfX3EgLT4gX01fZnJlZV9s
aXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBf
X3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0ZSh2b2lk
KiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAgdGVtcGxh
dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwK
ICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNv
bnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyBy
ZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0
PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCiAg
ICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9f
c2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAt
IF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMp
CiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3Rh
cnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAg
IH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAg
ICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3Rv
dGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3Rh
cnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAg
ICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAg
ICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0
ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0
ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSog
X19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxp
c3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9m
cmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAg
ICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQog
ICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjphbGxvY2F0
ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2
b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAg
ICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXpl
X3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJl
ZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlz
dF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7
CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7
CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25v
YmpzKSk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hh
ciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAg
ICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAg
X1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICBy
ZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAgfQogICAgfQoK
CgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNp
emVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1
bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSog
X19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJl
bnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYg
KDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9T
X2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAo
X09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2Jq
KikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAg
IF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiop
KChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19p
KSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAg
ICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+
IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0KICAgICAg
cmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgdGhyZWFkcywgaW50IGlu
c3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+
OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQog
ICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAg
IGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90
KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwog
ICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19u
ZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7
CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdf
c3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9j
YXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoKICB0ZW1w
bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBfU1RMX211dGV4X2xvY2sKICBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRv
cl9sb2NrCiAgPSB7IDAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf
c3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog
IGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2Vu
ZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgc2l6
ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBf
c2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5cGVu
YW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZv
bGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf
ZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxm
YWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRv
cgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl
ZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwog
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg
cmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9j
YXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7
fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+
JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVz
cyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBh
ZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBf
VHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJu
IF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXpl
b2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0
ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f
cCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRo
cm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNv
bnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192
YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0
ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAg
dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg
cmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVy
biBmYWxzZTsKfQojIDY5NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAz
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yCnsK
ICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiBy
ZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVm
IF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7
CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19h
bGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9f
YSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxv
Yykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9j
YXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9j
KF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoK
ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQog
IGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy
biAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g
MCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3Vu
ZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsK
ICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7
IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9
CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVf
dCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29u
c3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBv
aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj
bGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCog
cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2
b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK
ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5f
X3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRl
cmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKCgp0ZW1wbGF0
ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8aW50IF9f
aW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsK
ICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KIyA4
NDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7CiAgc3RhdGlj
IGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25zdCBib29sIF9BbGxv
Y190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9y
PF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAg
dHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVk
ZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz
ID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVk
ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8
X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAg
ICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAg
c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2lt
cGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlw
ZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90
eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5zdD4K
c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRv
cjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNv
bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9j
PF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
YWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9v
bCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAg
ICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0
YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBs
ZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAg
ICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVj
dCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1Z19hbGxvYzxfQWxs
b2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9j
X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+
IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRv
cjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdjaGFyX3Q+OwoKCgog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD47
Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9nKystdjMvZXh0L3NsaXN0IiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0
cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcgKHN0YXRpY19jYXN0
PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9U
MT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wKQogICAgeyBuZXcgKHN0
YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQojIDk4ICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQoj
IDExMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJv
eV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAg
ICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9E
ZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1
ZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rlc3RydWN0
b3IKICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKCiAgICAg
IF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvcigp
KTsKICAgIH0KfQojIDU2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4dC9zbGlzdCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G
b3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19y
ZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0LCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7
CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7
CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAg
ICAgICAgfQogICAgfQojIDEwNiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRp
YWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJu
IF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNf
UE9EKCkpOwogICAgfQoKICBpbmxpbmUgY2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qg
Y2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAg
ICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVy
biBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90Kgog
IHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90
KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAg
IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBf
X2ZpcnN0KSk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5s
aW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg
dm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9f
Zmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19j
dXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0
Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAg
ICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxs
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f
eCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0
aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0K
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmls
bF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICBy
ZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0Zvcndh
cmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJz
dDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQog
ICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsK
ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19m
aXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omlz
X1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1
eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAg
ewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEs
IF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFs
aXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2go
Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAg
ICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9G
b3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmls
bChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRj
aCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAg
ICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
dm9pZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBf
SW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQy
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAg
IHRyeSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsK
ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19m
aXJzdDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNTcg
Ii91c3IvaW5jbHVkZS9nKystdjMvZXh0L3NsaXN0IiAyIDMKCgpuYW1lc3BhY2UgX19nbnVfY3h4
CnsKdXNpbmcgc3RkOjpzaXplX3Q7CnVzaW5nIHN0ZDo6cHRyZGlmZl90Owp1c2luZyBzdGQ6Ol9B
bGxvY190cmFpdHM7CnVzaW5nIHN0ZDo6X0NvbnN0cnVjdDsKdXNpbmcgc3RkOjpfRGVzdHJveTsK
dXNpbmcgc3RkOjphbGxvY2F0b3I7CgpzdHJ1Y3QgX1NsaXN0X25vZGVfYmFzZQp7CiAgX1NsaXN0
X25vZGVfYmFzZSogX01fbmV4dDsKfTsKCmlubGluZSBfU2xpc3Rfbm9kZV9iYXNlKgpfX3NsaXN0
X21ha2VfbGluayhfU2xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9kZSwKICAgICAgICAgICAgICAg
ICAgX1NsaXN0X25vZGVfYmFzZSogX19uZXdfbm9kZSkKewogIF9fbmV3X25vZGUtPl9NX25leHQg
PSBfX3ByZXZfbm9kZS0+X01fbmV4dDsKICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV3X25v
ZGU7CiAgcmV0dXJuIF9fbmV3X25vZGU7Cn0KCmlubGluZSBfU2xpc3Rfbm9kZV9iYXNlKgpfX3Ns
aXN0X3ByZXZpb3VzKF9TbGlzdF9ub2RlX2Jhc2UqIF9faGVhZCwKICAgICAgICAgICAgICAgICBj
b25zdCBfU2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCnsKICB3aGlsZSAoX19oZWFkICYmIF9faGVh
ZC0+X01fbmV4dCAhPSBfX25vZGUpCiAgICBfX2hlYWQgPSBfX2hlYWQtPl9NX25leHQ7CiAgcmV0
dXJuIF9faGVhZDsKfQoKaW5saW5lIGNvbnN0IF9TbGlzdF9ub2RlX2Jhc2UqCl9fc2xpc3RfcHJl
dmlvdXMoY29uc3QgX1NsaXN0X25vZGVfYmFzZSogX19oZWFkLAogICAgICAgICAgICAgICAgIGNv
bnN0IF9TbGlzdF9ub2RlX2Jhc2UqIF9fbm9kZSkKewogIHdoaWxlIChfX2hlYWQgJiYgX19oZWFk
LT5fTV9uZXh0ICE9IF9fbm9kZSkKICAgIF9faGVhZCA9IF9faGVhZC0+X01fbmV4dDsKICByZXR1
cm4gX19oZWFkOwp9CgppbmxpbmUgdm9pZCBfX3NsaXN0X3NwbGljZV9hZnRlcihfU2xpc3Rfbm9k
ZV9iYXNlKiBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NsaXN0X25v
ZGVfYmFzZSogX19iZWZvcmVfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9TbGlzdF9ub2RlX2Jhc2UqIF9fYmVmb3JlX2xhc3QpCnsKICBpZiAoX19wb3MgIT0gX19iZWZv
cmVfZmlyc3QgJiYgX19wb3MgIT0gX19iZWZvcmVfbGFzdCkgewogICAgX1NsaXN0X25vZGVfYmFz
ZSogX19maXJzdCA9IF9fYmVmb3JlX2ZpcnN0LT5fTV9uZXh0OwogICAgX1NsaXN0X25vZGVfYmFz
ZSogX19hZnRlciA9IF9fcG9zLT5fTV9uZXh0OwogICAgX19iZWZvcmVfZmlyc3QtPl9NX25leHQg
PSBfX2JlZm9yZV9sYXN0LT5fTV9uZXh0OwogICAgX19wb3MtPl9NX25leHQgPSBfX2ZpcnN0Owog
ICAgX19iZWZvcmVfbGFzdC0+X01fbmV4dCA9IF9fYWZ0ZXI7CiAgfQp9CgppbmxpbmUgdm9pZApf
X3NsaXN0X3NwbGljZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNlKiBfX3BvcywgX1NsaXN0X25vZGVf
YmFzZSogX19oZWFkKQp7CiAgX1NsaXN0X25vZGVfYmFzZSogX19iZWZvcmVfbGFzdCA9IF9fc2xp
c3RfcHJldmlvdXMoX19oZWFkLCAwKTsKICBpZiAoX19iZWZvcmVfbGFzdCAhPSBfX2hlYWQpIHsK
ICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fYWZ0ZXIgPSBfX3Bvcy0+X01fbmV4dDsKICAgIF9fcG9z
LT5fTV9uZXh0ID0gX19oZWFkLT5fTV9uZXh0OwogICAgX19oZWFkLT5fTV9uZXh0ID0gMDsKICAg
IF9fYmVmb3JlX2xhc3QtPl9NX25leHQgPSBfX2FmdGVyOwogIH0KfQoKaW5saW5lIF9TbGlzdF9u
b2RlX2Jhc2UqIF9fc2xpc3RfcmV2ZXJzZShfU2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCnsKICBf
U2xpc3Rfbm9kZV9iYXNlKiBfX3Jlc3VsdCA9IF9fbm9kZTsKICBfX25vZGUgPSBfX25vZGUtPl9N
X25leHQ7CiAgX19yZXN1bHQtPl9NX25leHQgPSAwOwogIHdoaWxlKF9fbm9kZSkgewogICAgX1Ns
aXN0X25vZGVfYmFzZSogX19uZXh0ID0gX19ub2RlLT5fTV9uZXh0OwogICAgX19ub2RlLT5fTV9u
ZXh0ID0gX19yZXN1bHQ7CiAgICBfX3Jlc3VsdCA9IF9fbm9kZTsKICAgIF9fbm9kZSA9IF9fbmV4
dDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgppbmxpbmUgc2l6ZV90IF9fc2xpc3Rfc2l6ZShf
U2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCnsKICBzaXplX3QgX19yZXN1bHQgPSAwOwogIGZvciAo
IDsgX19ub2RlICE9IDA7IF9fbm9kZSA9IF9fbm9kZS0+X01fbmV4dCkKICAgICsrX19yZXN1bHQ7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX1NsaXN0
X25vZGUgOiBwdWJsaWMgX1NsaXN0X25vZGVfYmFzZQp7CiAgX1RwIF9NX2RhdGE7Cn07CgpzdHJ1
Y3QgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBzdGQ6OmZvcndhcmRf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICBfU2xpc3Rfbm9kZV9iYXNlKiBfTV9u
b2RlOwoKICBfU2xpc3RfaXRlcmF0b3JfYmFzZShfU2xpc3Rfbm9kZV9iYXNlKiBfX3gpIDogX01f
bm9kZShfX3gpIHt9CiAgdm9pZCBfTV9pbmNyKCkgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4
dDsgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7CiAgfQogIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBfU2xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1NsaXN0X2l0ZXJhdG9yIDogcHVibGljIF9T
bGlzdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcjxfVHAsIF9UcCYs
IF9UcCo+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgY29uc3QgX1Rw
JiwgY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfU2xpc3RfaXRlcmF0b3I8
X1RwLCBfUmVmLCBfUHRyPiBfU2VsZjsKCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX1Ns
aXN0X25vZGU8X1RwPiBfTm9kZTsKCiAgX1NsaXN0X2l0ZXJhdG9yKF9Ob2RlKiBfX3gpIDogX1Ns
aXN0X2l0ZXJhdG9yX2Jhc2UoX194KSB7fQogIF9TbGlzdF9pdGVyYXRvcigpIDogX1NsaXN0X2l0
ZXJhdG9yX2Jhc2UoMCkge30KICBfU2xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkg
OiBfU2xpc3RfaXRlcmF0b3JfYmFzZShfX3guX01fbm9kZSkge30KCiAgcmVmZXJlbmNlIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICgoX05vZGUqKSBfTV9ub2RlKS0+X01fZGF0YTsgfQogIHBv
aW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9T
ZWxmJiBvcGVyYXRvcisrKCkKICB7CiAgICBfTV9pbmNyKCk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIF9TZWxmIG9wZXJhdG9yKysoaW50KQogIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg
ICBfTV9pbmNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwojIDIxMyAiL3Vzci9pbmNsdWRl
L2crKy12My9leHQvc2xpc3QiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv
ciwgYm9vbCBfSXNTdGF0aWM+CmNsYXNzIF9TbGlzdF9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90
eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX1NsaXN0X2FsbG9j
X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2Ep
IHt9Cgpwcm90ZWN0ZWQ6CiAgX1NsaXN0X25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyBy
ZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2Rl
KF9TbGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgIHsgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0
ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfU2xpc3Rf
bm9kZTxfVHA+LF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9NX25vZGVf
YWxsb2NhdG9yOwogIF9TbGlzdF9ub2RlX2Jhc2UgX01faGVhZDsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfU2xpc3RfYWxsb2NfYmFzZTxfVHAsX0Fs
bG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
PF9UcCxfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBl
OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0
b3JfdHlwZSgpOyB9CgogIF9TbGlzdF9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikg
e30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1NsaXN0X25v
ZGU8X1RwPiwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsK
ICBfU2xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjph
bGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1NsaXN0X25vZGU8X1RwPiogX19wKSB7
IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KCnByb3RlY3RlZDoKICBfU2xpc3Rf
bm9kZV9iYXNlIF9NX2hlYWQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgpzdHJ1Y3QgX1NsaXN0X2Jhc2UKICA6IHB1YmxpYyBfU2xpc3RfYWxsb2NfYmFzZTxfVHAsIF9B
bGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs
bG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfU2xpc3RfYWxsb2NfYmFzZTxfVHAs
IF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1NsaXN0X2Jhc2Uo
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSB7IHRoaXMtPl9NX2hl
YWQuX01fbmV4dCA9IDA7IH0KICB+X1NsaXN0X2Jhc2UoKSB7IF9NX2VyYXNlX2FmdGVyKCZ0aGlz
LT5fTV9oZWFkLCAwKTsgfQoKcHJvdGVjdGVkOgoKICBfU2xpc3Rfbm9kZV9iYXNlKiBfTV9lcmFz
ZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNlKiBfX3BvcykKICB7CiAgICBfU2xpc3Rfbm9kZTxfVHA+
KiBfX25leHQgPSAoX1NsaXN0X25vZGU8X1RwPiopIChfX3Bvcy0+X01fbmV4dCk7CiAgICBfU2xp
c3Rfbm9kZV9iYXNlKiBfX25leHRfbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKICAgIF9fcG9zLT5f
TV9uZXh0ID0gX19uZXh0X25leHQ7CiAgICBfRGVzdHJveSgmX19uZXh0LT5fTV9kYXRhKTsKICAg
IF9NX3B1dF9ub2RlKF9fbmV4dCk7CiAgICByZXR1cm4gX19uZXh0X25leHQ7CiAgfQogIF9TbGlz
dF9ub2RlX2Jhc2UqIF9NX2VyYXNlX2FmdGVyKF9TbGlzdF9ub2RlX2Jhc2UqLCBfU2xpc3Rfbm9k
ZV9iYXNlKik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cl9TbGlzdF9u
b2RlX2Jhc2UqCl9TbGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpfTV9lcmFzZV9hZnRlcihfU2xpc3Rf
bm9kZV9iYXNlKiBfX2JlZm9yZV9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fbGFzdF9ub2RlKSB7CiAgX1NsaXN0X25vZGU8
X1RwPiogX19jdXIgPSAoX1NsaXN0X25vZGU8X1RwPiopIChfX2JlZm9yZV9maXJzdC0+X01fbmV4
dCk7CiAgd2hpbGUgKF9fY3VyICE9IF9fbGFzdF9ub2RlKSB7CiAgICBfU2xpc3Rfbm9kZTxfVHA+
KiBfX3RtcCA9IF9fY3VyOwogICAgX19jdXIgPSAoX1NsaXN0X25vZGU8X1RwPiopIF9fY3VyLT5f
TV9uZXh0OwogICAgX0Rlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9f
dG1wKTsKICB9CiAgX19iZWZvcmVfZmlyc3QtPl9NX25leHQgPSBfX2xhc3Rfbm9kZTsKICByZXR1
cm4gX19sYXN0X25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFs
bG9jYXRvcjxfVHA+ID4KY2xhc3Mgc2xpc3QgOiBwcml2YXRlIF9TbGlzdF9iYXNlPF9UcCxfQWxs
b2M+CnsKCiAKCnByaXZhdGU6CiAgdHlwZWRlZiBfU2xpc3RfYmFzZTxfVHAsX0FsbG9jPiBfQmFz
ZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBl
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0
eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUm
IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcjxfVHAs
IF9UcCYsIF9UcCo+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgY29u
c3QgX1RwJiwgY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIHR5cGVkZWYgdHlwZW5hbWUg
X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpw
cml2YXRlOgogIHR5cGVkZWYgX1NsaXN0X25vZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVmIF9TbGlz
dF9ub2RlX2Jhc2UgX05vZGVfYmFzZTsKICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcl9iYXNlIF9J
dGVyYXRvcl9iYXNlOwoKICBfTm9kZSogX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYg
X194KSB7CiAgICBfTm9kZSogX19ub2RlID0gdGhpcy0+X01fZ2V0X25vZGUoKTsKICAgIHRyeSB7
CiAgICAgIF9Db25zdHJ1Y3QoJl9fbm9kZS0+X01fZGF0YSwgX194KTsKICAgICAgX19ub2RlLT5f
TV9uZXh0ID0gMDsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIHRoaXMtPl9N
X3B1dF9ub2RlKF9fbm9kZSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIHJldHVybiBfX25v
ZGU7CiAgfQoKICBfTm9kZSogX01fY3JlYXRlX25vZGUoKSB7CiAgICBfTm9kZSogX19ub2RlID0g
dGhpcy0+X01fZ2V0X25vZGUoKTsKICAgIHRyeSB7CiAgICAgIF9Db25zdHJ1Y3QoJl9fbm9kZS0+
X01fZGF0YSk7CiAgICAgIF9fbm9kZS0+X01fbmV4dCA9IDA7CiAgICB9CiAgICBjYXRjaCguLi4p
CiAgICAgIHsKICAgICAgICB0aGlzLT5fTV9wdXRfbm9kZShfX25vZGUpOwogICAgICAgIHRocm93
OwogICAgICB9CiAgICByZXR1cm4gX19ub2RlOwogIH0KCnB1YmxpYzoKICBleHBsaWNpdCBzbGlz
dChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShf
X2EpIHt9CgogIHNsaXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCwKICAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFz
ZShfX2EpCiAgICB7IF9NX2luc2VydF9hZnRlcl9maWxsKCZ0aGlzLT5fTV9oZWFkLCBfX24sIF9f
eCk7IH0KCiAgZXhwbGljaXQgc2xpc3Qoc2l6ZV90eXBlIF9fbikgOiBfQmFzZShhbGxvY2F0b3Jf
dHlwZSgpKQogICAgeyBfTV9pbnNlcnRfYWZ0ZXJfZmlsbCgmdGhpcy0+X01faGVhZCwgX19uLCB2
YWx1ZV90eXBlKCkpOyB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHNs
aXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShf
X2EpCiAgICB7IF9NX2luc2VydF9hZnRlcl9yYW5nZSgmdGhpcy0+X01faGVhZCwgX19maXJzdCwg
X19sYXN0KTsgfQoKICBzbGlzdChjb25zdCBzbGlzdCYgX194KSA6IF9CYXNlKF9feC5nZXRfYWxs
b2NhdG9yKCkpCiAgICB7IF9NX2luc2VydF9hZnRlcl9yYW5nZSgmdGhpcy0+X01faGVhZCwgX194
LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KCiAgc2xpc3QmIG9wZXJhdG9yPSAoY29uc3Qgc2xpc3Qm
IF9feCk7CgogIH5zbGlzdCgpIHt9CgpwdWJsaWM6CgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3R5
cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKQogICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFs
KTsgfQoKICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192
YWwpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh
bDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRj
aChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmls
bF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2ZhbHNlX3R5cGUpOwoKcHVibGljOgoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IGl0ZXJhdG9yKChfTm9kZSopdGhpcy0+X01faGVhZC5fTV9uZXh0KTsgfQogIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKChfTm9kZSopdGhp
cy0+X01faGVhZC5fTV9uZXh0KTt9CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9y
KDApOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0
b3IoMCk7IH0KIyA0MTkgIi91c3IvaW5jbHVkZS9nKystdjMvZXh0L3NsaXN0IiAzCiAgaXRlcmF0
b3IgYmVmb3JlX2JlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgJnRoaXMtPl9NX2hl
YWQpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVmb3JlX2JlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJu
IGNvbnN0X2l0ZXJhdG9yKChfTm9kZSopICZ0aGlzLT5fTV9oZWFkKTsgfQoKICBzaXplX3R5cGUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9fc2xpc3Rfc2l6ZSh0aGlzLT5fTV9oZWFkLl9NX25leHQp
OyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7
IH0KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9
PSAwOyB9CgogIHZvaWQgc3dhcChzbGlzdCYgX194KQogICAgeyBzdGQ6OnN3YXAodGhpcy0+X01f
aGVhZC5fTV9uZXh0LCBfX3guX01faGVhZC5fTV9uZXh0KTsgfQoKcHVibGljOgoKICByZWZlcmVu
Y2UgZnJvbnQoKSB7IHJldHVybiAoKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0KS0+X01f
ZGF0YTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0CiAgICB7IHJldHVybiAoKF9O
b2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0KS0+X01fZGF0YTsgfQogIHZvaWQgcHVzaF9mcm9u
dChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIF9fc2xpc3RfbWFrZV9saW5rKCZ0aGlzLT5f
TV9oZWFkLCBfTV9jcmVhdGVfbm9kZShfX3gpKTsKICB9CiAgdm9pZCBwdXNoX2Zyb250KCkgeyBf
X3NsaXN0X21ha2VfbGluaygmdGhpcy0+X01faGVhZCwgX01fY3JlYXRlX25vZGUoKSk7IH0KICB2
b2lkIHBvcF9mcm9udCgpIHsKICAgIF9Ob2RlKiBfX25vZGUgPSAoX05vZGUqKSB0aGlzLT5fTV9o
ZWFkLl9NX25leHQ7CiAgICB0aGlzLT5fTV9oZWFkLl9NX25leHQgPSBfX25vZGUtPl9NX25leHQ7
CiAgICBfRGVzdHJveSgmX19ub2RlLT5fTV9kYXRhKTsKICAgIHRoaXMtPl9NX3B1dF9ub2RlKF9f
bm9kZSk7CiAgfQoKICBpdGVyYXRvciBwcmV2aW91cyhjb25zdF9pdGVyYXRvciBfX3Bvcykgewog
ICAgcmV0dXJuIGl0ZXJhdG9yKChfTm9kZSopIF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hl
YWQsIF9fcG9zLl9NX25vZGUpKTsKICB9CiAgY29uc3RfaXRlcmF0b3IgcHJldmlvdXMoY29uc3Rf
aXRlcmF0b3IgX19wb3MpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9pdGVyYXRvcigoX05vZGUq
KSBfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3MuX01fbm9kZSkpOwogIH0KCnByaXZh
dGU6CiAgX05vZGUqIF9NX2luc2VydF9hZnRlcihfTm9kZV9iYXNlKiBfX3BvcywgY29uc3QgdmFs
dWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gKF9Ob2RlKikgKF9fc2xpc3RfbWFrZV9saW5rKF9f
cG9zLCBfTV9jcmVhdGVfbm9kZShfX3gpKSk7CiAgfQoKICBfTm9kZSogX01faW5zZXJ0X2FmdGVy
KF9Ob2RlX2Jhc2UqIF9fcG9zKSB7CiAgICByZXR1cm4gKF9Ob2RlKikgKF9fc2xpc3RfbWFrZV9s
aW5rKF9fcG9zLCBfTV9jcmVhdGVfbm9kZSgpKSk7CiAgfQoKICB2b2lkIF9NX2luc2VydF9hZnRl
cl9maWxsKF9Ob2RlX2Jhc2UqIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICBmb3IgKHNpemVfdHlwZSBf
X2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQogICAgICBfX3BvcyA9IF9fc2xpc3RfbWFrZV9saW5r
KF9fcG9zLCBfTV9jcmVhdGVfbm9kZShfX3gpKTsKICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
SXRlcj4KICB2b2lkIF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5JdGVyIF9fZmlyc3QsIF9Jbkl0ZXIgX19sYXN0
KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xh
c3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lk
IF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywgX0ludGVnZXIgX19uLCBf
SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsK
ICAgIF9NX2luc2VydF9hZnRlcl9maWxsKF9fcG9zLCBfX24sIF9feCk7CiAgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0luSXRlcj4KICB2b2lkIF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNl
KiBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5JdGVyIF9fZmlyc3QsIF9J
bkl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkg
ewogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9fcG9zID0gX19zbGlzdF9t
YWtlX2xpbmsoX19wb3MsIF9NX2NyZWF0ZV9ub2RlKCpfX2ZpcnN0KSk7CiAgICAgICsrX19maXJz
dDsKICAgIH0KICB9CgpwdWJsaWM6CgogIGl0ZXJhdG9yIGluc2VydF9hZnRlcihpdGVyYXRvciBf
X3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gaXRlcmF0b3IoX01faW5z
ZXJ0X2FmdGVyKF9fcG9zLl9NX25vZGUsIF9feCkpOwogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0X2Fm
dGVyKGl0ZXJhdG9yIF9fcG9zKSB7CiAgICByZXR1cm4gaW5zZXJ0X2FmdGVyKF9fcG9zLCB2YWx1
ZV90eXBlKCkpOwogIH0KCiAgdm9pZCBpbnNlcnRfYWZ0ZXIoaXRlcmF0b3IgX19wb3MsIHNpemVf
dHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgX01faW5zZXJ0X2FmdGVyX2Zp
bGwoX19wb3MuX01fbm9kZSwgX19uLCBfX3gpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
SXRlcj4KICB2b2lkIGluc2VydF9hZnRlcihpdGVyYXRvciBfX3BvcywgX0luSXRlciBfX2ZpcnN0
LCBfSW5JdGVyIF9fbGFzdCkgewogICAgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9fcG9zLl9NX25v
ZGUsIF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19w
b3MsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2luc2Vy
dF9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zLl9NX25vZGUpLAogICAg
ICAgICAgICAgICAgICAgIF9feCkpOwogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zKSB7CiAgICByZXR1cm4gaXRlcmF0b3IoX01faW5zZXJ0X2FmdGVyKF9fc2xpc3RfcHJldmlv
dXMoJnRoaXMtPl9NX2hlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19wb3MuX01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlX3R5cGUoKSkpOwogIH0KCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19w
b3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgX01faW5zZXJ0
X2FmdGVyX2ZpbGwoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9k
ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICBfX24sIF9feCk7CiAgfQoKCgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5JdGVyPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5JdGVyIF9f
Zmlyc3QsIF9Jbkl0ZXIgX19sYXN0KSB7CiAgICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19zbGlz
dF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9kZSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19maXJzdCwgX19sYXN0KTsKICB9CgpwdWJsaWM6CiAgaXRlcmF0b3IgZXJh
c2VfYWZ0ZXIoaXRlcmF0b3IgX19wb3MpIHsKICAgIHJldHVybiBpdGVyYXRvcigoX05vZGUqKSB0
aGlzLT5fTV9lcmFzZV9hZnRlcihfX3Bvcy5fTV9ub2RlKSk7CiAgfQogIGl0ZXJhdG9yIGVyYXNl
X2FmdGVyKGl0ZXJhdG9yIF9fYmVmb3JlX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIHJl
dHVybiBpdGVyYXRvcigoX05vZGUqKSB0aGlzLT5fTV9lcmFzZV9hZnRlcihfX2JlZm9yZV9maXJz
dC5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGFzdC5fTV9ub2RlKSk7CiAgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bv
cykgewogICAgcmV0dXJuIChfTm9kZSopIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fc2xpc3RfcHJl
dmlvdXMoJnRoaXMtPl9NX2hlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3Bvcy5fTV9ub2RlKSk7CiAgfQogIGl0ZXJhdG9yIGVy
YXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgcmV0dXJuIChfTm9k
ZSopIHRoaXMtPl9NX2VyYXNlX2FmdGVyKAogICAgICBfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5f
TV9oZWFkLCBfX2ZpcnN0Ll9NX25vZGUpLCBfX2xhc3QuX01fbm9kZSk7CiAgfQoKICB2b2lkIHJl
c2l6ZShzaXplX3R5cGUgbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJlc2l6ZShz
aXplX3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5ld19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNs
ZWFyKCkgeyB0aGlzLT5fTV9lcmFzZV9hZnRlcigmdGhpcy0+X01faGVhZCwgMCk7IH0KCnB1Ymxp
YzoKCgogIHZvaWQgc3BsaWNlX2FmdGVyKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAg
ICAgIGl0ZXJhdG9yIF9fYmVmb3JlX2ZpcnN0LCBpdGVyYXRvciBfX2JlZm9yZV9sYXN0KQogIHsK
ICAgIGlmIChfX2JlZm9yZV9maXJzdCAhPSBfX2JlZm9yZV9sYXN0KQogICAgICBfX3NsaXN0X3Nw
bGljZV9hZnRlcihfX3Bvcy5fTV9ub2RlLCBfX2JlZm9yZV9maXJzdC5fTV9ub2RlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2JlZm9yZV9sYXN0Ll9NX25vZGUpOwogIH0KCgoKICB2b2lk
IHNwbGljZV9hZnRlcihpdGVyYXRvciBfX3BvcywgaXRlcmF0b3IgX19wcmV2KQogIHsKICAgIF9f
c2xpc3Rfc3BsaWNlX2FmdGVyKF9fcG9zLl9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ByZXYuX01fbm9kZSwgX19wcmV2Ll9NX25vZGUtPl9NX25leHQpOwogIH0KCgoKCgogIHZv
aWQgc3BsaWNlX2FmdGVyKGl0ZXJhdG9yIF9fcG9zLCBzbGlzdCYgX194KQogIHsKICAgIF9fc2xp
c3Rfc3BsaWNlX2FmdGVyKF9fcG9zLl9NX25vZGUsICZfX3guX01faGVhZCk7CiAgfQoKCiAgdm9p
ZCBzcGxpY2UoaXRlcmF0b3IgX19wb3MsIHNsaXN0JiBfX3gpIHsKICAgIGlmIChfX3guX01faGVh
ZC5fTV9uZXh0KQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0
aGlzLT5fTV9oZWFkLCBfX3Bvcy5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jl9feC5fTV9oZWFkLCBfX3NsaXN0X3ByZXZpb3VzKCZfX3guX01faGVhZCwgMCkpOwogIH0KCgog
IHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zLCBzbGlzdCYgX194LCBpdGVyYXRvciBfX2kpIHsK
ICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQs
IF9fcG9zLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgX19zbGlzdF9wcmV2aW91
cygmX194Ll9NX2hlYWQsIF9faS5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
aS5fTV9ub2RlKTsKICB9CgoKCiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3MsIHNsaXN0JiBf
X3gsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBpZiAoX19maXJz
dCAhPSBfX2xhc3QpCiAgICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fc2xpc3RfcHJldmlvdXMo
JnRoaXMtPl9NX2hlYWQsIF9fcG9zLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3NsaXN0X3ByZXZpb3VzKCZfX3guX01faGVhZCwgX19maXJzdC5fTV9ub2RlKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zbGlzdF9wcmV2aW91cyhfX2ZpcnN0Ll9NX25vZGUsIF9f
bGFzdC5fTV9ub2RlKSk7CiAgfQoKcHVibGljOgogIHZvaWQgcmV2ZXJzZSgpIHsKICAgIGlmICh0
aGlzLT5fTV9oZWFkLl9NX25leHQpCiAgICAgIHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9IF9fc2xp
c3RfcmV2ZXJzZSh0aGlzLT5fTV9oZWFkLl9NX25leHQpOwogIH0KCiAgdm9pZCByZW1vdmUoY29u
c3QgX1RwJiBfX3ZhbCk7CiAgdm9pZCB1bmlxdWUoKTsKICB2b2lkIG1lcmdlKHNsaXN0JiBfX3gp
OwogIHZvaWQgc29ydCgpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KICB2b2lkIHJl
bW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJl
ZGljYXRlPgogIHZvaWQgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUgX19wcmVkKTsKCiAgdGVtcGxh
dGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgdm9pZCBtZXJnZShzbGlzdCYsIF9TdHJp
Y3RXZWFrT3JkZXJpbmcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4K
ICB2b2lkIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzbGlzdDxfVHAsX0FsbG9jPiYgc2xpc3Q8X1RwLF9BbGxv
Yz46Om9wZXJhdG9yPShjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3gg
IT0gdGhpcykgewogICAgX05vZGVfYmFzZSogX19wMSA9ICZ0aGlzLT5fTV9oZWFkOwogICAgX05v
ZGUqIF9fbjEgPSAoX05vZGUqKSB0aGlzLT5fTV9oZWFkLl9NX25leHQ7CiAgICBjb25zdCBfTm9k
ZSogX19uMiA9IChjb25zdCBfTm9kZSopIF9feC5fTV9oZWFkLl9NX25leHQ7CiAgICB3aGlsZSAo
X19uMSAmJiBfX24yKSB7CiAgICAgIF9fbjEtPl9NX2RhdGEgPSBfX24yLT5fTV9kYXRhOwogICAg
ICBfX3AxID0gX19uMTsKICAgICAgX19uMSA9IChfTm9kZSopIF9fbjEtPl9NX25leHQ7CiAgICAg
IF9fbjIgPSAoY29uc3QgX05vZGUqKSBfX24yLT5fTV9uZXh0OwogICAgfQogICAgaWYgKF9fbjIg
PT0gMCkKICAgICAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19wMSwgMCk7CiAgICBlbHNlCiAgICAg
IF9NX2luc2VydF9hZnRlcl9yYW5nZShfX3AxLCBjb25zdF9pdGVyYXRvcigoX05vZGUqKV9fbjIp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IoMCkpOwog
IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCBzbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNv
bnN0IF9UcCYgX192YWwpIHsKICBfTm9kZV9iYXNlKiBfX3ByZXYgPSAmdGhpcy0+X01faGVhZDsK
ICBfTm9kZSogX19ub2RlID0gKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0OwogIGZvciAo
IDsgX19ub2RlICE9IDAgJiYgX19uID4gMCA7IC0tX19uKSB7CiAgICBfX25vZGUtPl9NX2RhdGEg
PSBfX3ZhbDsKICAgIF9fcHJldiA9IF9fbm9kZTsKICAgIF9fbm9kZSA9IChfTm9kZSopIF9fbm9k
ZS0+X01fbmV4dDsKICB9CiAgaWYgKF9fbiA+IDApCiAgICBfTV9pbnNlcnRfYWZ0ZXJfZmlsbChf
X3ByZXYsIF9fbiwgX192YWwpOwogIGVsc2UKICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fcHJl
diwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXI+CnZvaWQKc2xpc3Q8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fZGlzcGF0
Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgX05vZGVfYmFzZSogX19w
cmV2ID0gJnRoaXMtPl9NX2hlYWQ7CiAgX05vZGUqIF9fbm9kZSA9IChfTm9kZSopIHRoaXMtPl9N
X2hlYWQuX01fbmV4dDsKICB3aGlsZSAoX19ub2RlICE9IDAgJiYgX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgIF9fbm9kZS0+X01fZGF0YSA9ICpfX2ZpcnN0OwogICAgX19wcmV2ID0gX19ub2RlOwog
ICAgX19ub2RlID0gKF9Ob2RlKikgX19ub2RlLT5fTV9uZXh0OwogICAgKytfX2ZpcnN0OwogIH0K
ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCiAgICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19wcmV2
LCBfX2ZpcnN0LCBfX2xhc3QpOwogIGVsc2UKICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fcHJl
diwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wK
b3BlcmF0b3I9PShjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1Rw
LF9BbGxvYz4mIF9TTDIpCnsKICB0eXBlZGVmIHR5cGVuYW1lIHNsaXN0PF9UcCxfQWxsb2M+Ojpj
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBf
U0wxLmVuZCgpOwogIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMiA9IF9TTDIuZW5kKCk7CgogIGNvbnN0
X2l0ZXJhdG9yIF9faTEgPSBfU0wxLmJlZ2luKCk7CiAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9T
TDIuYmVnaW4oKTsKICB3aGlsZSAoX19pMSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYg
Kl9faTEgPT0gKl9faTIpIHsKICAgICsrX19pMTsKICAgICsrX19pMjsKICB9CiAgcmV0dXJuIF9f
aTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3Qgc2xpc3Q8X1RwLF9BbGxv
Yz4mIF9TTDEsIGNvbnN0IHNsaXN0PF9UcCxfQWxsb2M+JiBfU0wyKQp7CiAgcmV0dXJuIHN0ZDo6
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX1NMMS5iZWdpbigpLCBfU0wxLmVuZCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TTDIuYmVnaW4oKSwgX1NMMi5lbmQoKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0
b3IhPShjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxv
Yz4mIF9TTDIpIHsKICByZXR1cm4gIShfU0wxID09IF9TTDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBzbGlzdDxfVHAs
X0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDIpIHsKICByZXR1cm4g
X1NMMiA8IF9TTDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wKb3BlcmF0b3I8PShjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xp
c3Q8X1RwLF9BbGxvYz4mIF9TTDIpIHsKICByZXR1cm4gIShfU0wyIDwgX1NMMSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25z
dCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDIp
IHsKICByZXR1cm4gIShfU0wxIDwgX1NMMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChzbGlzdDxfVHAsX0FsbG9jPiYgX194LCBzbGlzdDxf
VHAsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6cmVzaXplKHNpemVfdHlw
ZSBfX2xlbiwgY29uc3QgX1RwJiBfX3gpCnsKICBfTm9kZV9iYXNlKiBfX2N1ciA9ICZ0aGlzLT5f
TV9oZWFkOwogIHdoaWxlIChfX2N1ci0+X01fbmV4dCAhPSAwICYmIF9fbGVuID4gMCkgewogICAg
LS1fX2xlbjsKICAgIF9fY3VyID0gX19jdXItPl9NX25leHQ7CiAgfQogIGlmIChfX2N1ci0+X01f
bmV4dCkKICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyLCAwKTsKICBlbHNlCiAgICBfTV9p
bnNlcnRfYWZ0ZXJfZmlsbChfX2N1ciwgX19sZW4sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9U
cCYgX192YWwpCnsKICBfTm9kZV9iYXNlKiBfX2N1ciA9ICZ0aGlzLT5fTV9oZWFkOwogIHdoaWxl
IChfX2N1ciAmJiBfX2N1ci0+X01fbmV4dCkgewogICAgaWYgKCgoX05vZGUqKSBfX2N1ci0+X01f
bmV4dCktPl9NX2RhdGEgPT0gX192YWwpCiAgICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3Vy
KTsKICAgIGVsc2UKICAgICAgX19jdXIgPSBfX2N1ci0+X01fbmV4dDsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6dW5pcXVl
KCkKewogIF9Ob2RlX2Jhc2UqIF9fY3VyID0gdGhpcy0+X01faGVhZC5fTV9uZXh0OwogIGlmIChf
X2N1cikgewogICAgd2hpbGUgKF9fY3VyLT5fTV9uZXh0KSB7CiAgICAgIGlmICgoKF9Ob2RlKilf
X2N1ciktPl9NX2RhdGEgPT0KICAgICAgICAgICgoX05vZGUqKShfX2N1ci0+X01fbmV4dCkpLT5f
TV9kYXRhKQogICAgICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKICAgICAgZWxzZQog
ICAgICAgIF9fY3VyID0gX19jdXItPl9NX25leHQ7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgc2xpc3Q8X1RwLF9BbGxvYz46Om1lcmdlKHNsaXN0
PF9UcCxfQWxsb2M+JiBfX3gpCnsKICBfTm9kZV9iYXNlKiBfX24xID0gJnRoaXMtPl9NX2hlYWQ7
CiAgd2hpbGUgKF9fbjEtPl9NX25leHQgJiYgX194Ll9NX2hlYWQuX01fbmV4dCkgewogICAgaWYg
KCgoX05vZGUqKSBfX3guX01faGVhZC5fTV9uZXh0KS0+X01fZGF0YSA8CiAgICAgICAgKChfTm9k
ZSopIF9fbjEtPl9NX25leHQpLT5fTV9kYXRhKQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihf
X24xLCAmX194Ll9NX2hlYWQsIF9feC5fTV9oZWFkLl9NX25leHQpOwogICAgX19uMSA9IF9fbjEt
Pl9NX25leHQ7CiAgfQogIGlmIChfX3guX01faGVhZC5fTV9uZXh0KSB7CiAgICBfX24xLT5fTV9u
ZXh0ID0gX194Ll9NX2hlYWQuX01fbmV4dDsKICAgIF9feC5fTV9oZWFkLl9NX25leHQgPSAwOwog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHNsaXN0PF9UcCxf
QWxsb2M+Ojpzb3J0KCkKewogIGlmICh0aGlzLT5fTV9oZWFkLl9NX25leHQgJiYgdGhpcy0+X01f
aGVhZC5fTV9uZXh0LT5fTV9uZXh0KSB7CiAgICBzbGlzdCBfX2NhcnJ5OwogICAgc2xpc3QgX19j
b3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAg
ICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKCZfX2NhcnJ5Ll9NX2hlYWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZ0aGlzLT5fTV9oZWFkLCB0aGlzLT5fTV9oZWFkLl9NX25leHQpOwogICAg
ICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUgKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19f
aV0uZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnkpOwogICAg
ICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgICAgKytfX2k7CiAgICAgIH0K
ICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgaWYgKF9faSA9PSBfX2Zp
bGwpCiAgICAgICAgKytfX2ZpbGw7CiAgICB9CgogICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwg
X19maWxsOyArK19faSkKICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0x
XSk7CiAgICB0aGlzLT5zd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4Kdm9p
ZCBzbGlzdDxfVHAsX0FsbG9jPjo6cmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQp7CiAgX05v
ZGVfYmFzZSogX19jdXIgPSAmdGhpcy0+X01faGVhZDsKICB3aGlsZSAoX19jdXItPl9NX25leHQp
IHsKICAgIGlmIChfX3ByZWQoKChfTm9kZSopIF9fY3VyLT5fTV9uZXh0KS0+X01fZGF0YSkpCiAg
ICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKICAgIGVsc2UKICAgICAgX19jdXIgPSBf
X2N1ci0+X01fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g
dGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnZvaWQgc2xpc3Q8X1RwLF9BbGxvYz46
OnVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fcHJlZCkKewogIF9Ob2RlKiBfX2N1ciA9IChfTm9k
ZSopIHRoaXMtPl9NX2hlYWQuX01fbmV4dDsKICBpZiAoX19jdXIpIHsKICAgIHdoaWxlIChfX2N1
ci0+X01fbmV4dCkgewogICAgICBpZiAoX19wcmVkKCgoX05vZGUqKV9fY3VyKS0+X01fZGF0YSwK
ICAgICAgICAgICAgICAgICAoKF9Ob2RlKikoX19jdXItPl9NX25leHQpKS0+X01fZGF0YSkpCiAg
ICAgICAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19jdXIpOwogICAgICBlbHNlCiAgICAgICAgX19j
dXIgPSAoX05vZGUqKSBfX2N1ci0+X01fbmV4dDsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+
CnZvaWQgc2xpc3Q8X1RwLF9BbGxvYz46Om1lcmdlKHNsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7
CiAgX05vZGVfYmFzZSogX19uMSA9ICZ0aGlzLT5fTV9oZWFkOwogIHdoaWxlIChfX24xLT5fTV9u
ZXh0ICYmIF9feC5fTV9oZWFkLl9NX25leHQpIHsKICAgIGlmIChfX2NvbXAoKChfTm9kZSopIF9f
eC5fTV9oZWFkLl9NX25leHQpLT5fTV9kYXRhLAogICAgICAgICAgICAgICAoKF9Ob2RlKikgX19u
MS0+X01fbmV4dCktPl9NX2RhdGEpKQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX24xLCAm
X194Ll9NX2hlYWQsIF9feC5fTV9oZWFkLl9NX25leHQpOwogICAgX19uMSA9IF9fbjEtPl9NX25l
eHQ7CiAgfQogIGlmIChfX3guX01faGVhZC5fTV9uZXh0KSB7CiAgICBfX24xLT5fTV9uZXh0ID0g
X194Ll9NX2hlYWQuX01fbmV4dDsKICAgIF9feC5fTV9oZWFkLl9NX25leHQgPSAwOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmlj
dFdlYWtPcmRlcmluZz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6c29ydChfU3RyaWN0V2Vha09y
ZGVyaW5nIF9fY29tcCkKewogIGlmICh0aGlzLT5fTV9oZWFkLl9NX25leHQgJiYgdGhpcy0+X01f
aGVhZC5fTV9uZXh0LT5fTV9uZXh0KSB7CiAgICBzbGlzdCBfX2NhcnJ5OwogICAgc2xpc3QgX19j
b3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAg
ICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKCZfX2NhcnJ5Ll9NX2hlYWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZ0aGlzLT5fTV9oZWFkLCB0aGlzLT5fTV9oZWFkLl9NX25leHQpOwogICAg
ICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUgKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19f
aV0uZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29t
cCk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgICArK19faTsK
ICAgICAgfQogICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICBpZiAoX19p
ID09IF9fZmlsbCkKICAgICAgICArK19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAx
OyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50
ZXJbX19pLTFdLCBfX2NvbXApOwogICAgdGhpcy0+c3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsK
ICB9Cn0KCn0KCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CmNsYXNzIGluc2VydF9pdGVyYXRvcjxfX2dudV9jeHg6OnNsaXN0PF9UcCwgX0FsbG9j
PiA+IHsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX19nbnVfY3h4OjpzbGlzdDxfVHAsIF9BbGxvYz4g
X0NvbnRhaW5lcjsKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNl
cnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRv
ciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSB7CiAgICBpZiAoX19pID09IF9feC5iZWdpbigp
KQogICAgICBpdGVyID0gX194LmJlZm9yZV9iZWdpbigpOwogICAgZWxzZQogICAgICBpdGVyID0g
X194LnByZXZpb3VzKF9faSk7CiAgfQoKICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAg
b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUp
IHsKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydF9hZnRlcihpdGVyLCBfX3ZhbHVlKTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRv
ciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3Bl
cmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCn0KIyA1ICJzdGRjeHgvbG9j
YWxzbGlzdC5oIiAyCgoKIyAxICJoZWFwLmgiIDEKCgoKIyAxICJsbGlzdC5oIiAxCgoKCgoKCnRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBub2RlCiAgICAgICAgewogICAgICAgIHByaXZhdGU6
CiAgICAgICAgICAgICAgICBub2RlIDxUPiAqbmV4dDsKICAgICAgICAgICAgICAgIG5vZGUgPFQ+
ICpwcmV2OwogICAgICAgIHB1YmxpYzoKICAgICAgICBUIGRhdGE7CiAgICAgICAgbm9kZSgpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgfQogICAgICAgIG5vZGUobm9kZSA8VD4gKm4sbm9kZSA8
VD4gKnApCiAgICAgICAgICAgIDoKICAgICAgICAgICAgbmV4dChuKSwKICAgICAgICAgICAgcHJl
dihwKQogICAgICAgICAgICB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZvaWQgcmVt
b3ZlKCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBw
cmV2LT5uZXh0PW5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQtPnByZXY9cHJldjsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbm9kZSA8VD4gKnN1Y2Mo
KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbmV4dC0+bmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
MEw7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgbm9kZSA8VD4gKnByZWQoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldi0+cHJldikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMEw7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgdm9pZCBhZGRhZnRlcihub2RlIDxUPiAqbmV3YWRk
KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld2Fk
ZC0+cHJldj10aGlzOwogICAgICAgICAgICAgICAgICAgICAgICBuZXdhZGQtPm5leHQ9bmV4dDsK
ICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC0+cHJldj1uZXdhZGQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgIG5leHQ9bmV3YWRkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB2b2lkIGFkZGJlZm9yZShub2RlIDxUPiAqbmV3YWRkKQogICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgIG5ld2FkZC0+cHJldj1wcmV2OwogICAgICAgICAgICBuZXdh
ZGQtPm5leHQ9dGhpczsKICAgICAgICAgICAgcHJldi0+bmV4dD1uZXdhZGQ7CiAgICAgICAgICAg
IHByZXY9bmV3YWRkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCnRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBsbGlzdAogICAgICAgIHsKICAgICAgICBwcml2YXRlOgog
ICAgICAgICAgICAgICAgVCBoZWFkbjsKICAgICAgICAgICAgICAgIFQgdGFpbG47CiAgICAgICAg
cHVibGljOgogICAgICAgICAgICAgICAgbGxpc3QoKQogICAgICAgICAgICA6CiAgICAgICAgICAg
IGhlYWRuKCZ0YWlsbiwwKSwKICAgICAgICAgICAgdGFpbG4oMCwmaGVhZG4pCiAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAg
ICBib29sIGVtcHR5KCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKGhlYWRuLnN1Y2MoKSE9MCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH07CgogICAgICAgICAgICAgICAgVCAqaGVhZCgpIGNvbnN0CiAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBoZWFkbi5zdWNjKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgVCAqdGFpbCgpIGNvbnN0CiAgICAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0YWlsbi5wcmVkKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgdm9pZCBhcHBlbmQo
VCAqbmV3YWRkKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgIHRhaWxuLmFk
ZGJlZm9yZShuZXdhZGQpOwogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg
ICAgIHZvaWQgcHJlcGVuZChUICpuZXdhZGQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgaGVhZG4uYWRkYWZ0ZXIobmV3YWRkKTsKICAgICAgICAgICAgICAgICAgICAgICAg
fTsKICAgICAgICB9OwojIDUgImhlYXAuaCIgMgoKCgpjbGFzcyB0aGVhcAogICAgICAgIHsKICAg
ICAgICBwcml2YXRlOgogICAgICAgIGludCBmdG90YWxzcGFjZTsKICAgICAgICB0eXBlZGVmIG5v
ZGU8c2l6ZV90PiBmcmVlbWVtaGRyOwogICAgICAgICAgICAgICAgbGxpc3Q8ZnJlZW1lbWhkcj4g
ZnJlZWxpc3Q7CgogICAgICAgICAgICAgICAgdm9pZCBtZXJnZShmcmVlbWVtaGRyICpsb2NhdGlv
bik7CiAgICAgICAgdm9pZCBpbnNlcnRmcmVlYmxvY2soZnJlZW1lbWhkciAqbG9jYXRpb24pOwoK
ICAgICAgICBmcmVlbWVtaGRyICogcGxhY2Vmb3JuZXh0ZnJlZWhkcihmcmVlbWVtaGRyICpmcmVl
bWVtYmxrKQogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGZyZWVtZW1oZHIgKj4oICZyZWludGVycHJldF9jYXN0PGNoYXIgKj4oZnJlZW1lbWJsaylbZnJl
ZW1lbWJsay0+ZGF0YV0pOwogICAgICAgICAgICB9CgogICAgICAgIHNpemVfdCBzaXplb2ZmcmVl
YmxvY2sodm9pZCAqZnJlZW1lbWJsayx2b2lkICptZW1lbmQpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIgKj4obWVtZW5kKS1zdGF0aWNfY2FzdDxjaGFy
ICo+KGZyZWVtZW1ibGspOwogICAgICAgICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZp
cnR1YWwgdm9pZCB0aHJlYWRwcm90ZWN0KCk9MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgdGhyZWFk
dW5wcm90ZWN0KCk9MDsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0aGVhcCh2b2lk
ICptZW0sc2l6ZV90IHNpemUpOwogICAgICAgICAgICAgICAgdGhlYXAoKTsKICAgICAgICB2b2lk
ICphbGxvY2F0ZShzaXplX3Qgc2l6ZSk7CiAgICAgICAgdm9pZCBkZWFsbG9jYXRlKHZvaWQgKm1l
bSxzaXplX3Qgc2l6ZSk7CgogICAgICAgICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAgICAgaW50
IHRvdGFsZnJlZXNwYWNlKCk7CiAgICAgICAgaW50IHRvdGFsc3BhY2UoKSB7cmV0dXJuIGZ0b3Rh
bHNwYWNlO30KICAgIH07CgoKZXh0ZXJuIHRoZWFwICZkZWZhdWx0aGVhcDsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpjbGFzcyB0aGVhcGFsbG9jYXRvcgogICAgewogICAgcHVibGljOgogICAgICAg
IHRoZWFwICZoZWFwOwoKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAg
dHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICB0eXBlZGVmIF9UcCYgcmVmZXJl
bmNlOwogICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CgogICAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgICBzdHJ1Y3QgcmVi
aW5kCiAgICAgICAgewogICAgICAgIHR5cGVkZWYgdGhlYXBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7
CiAgICAgICAgfTsKCiAgICB0aGVhcGFsbG9jYXRvcigpCiAgICAgICAgOgogICAgICAgIGhlYXAo
ZGVmYXVsdGhlYXApCiAgICAgICAgewogICAgICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgT1RI
RVI+CiAgICB0aGVhcGFsbG9jYXRvcih0aGVhcGFsbG9jYXRvcjxPVEhFUj4gY29uc3QgJiBvdGhl
cikKICAgICAgICA6CiAgICAgICAgaGVhcChvdGhlci5oZWFwKQogICAgICAgIHsKICAgICAgICB9
CgogICAgYm9vbCBvcGVyYXRvcj09KHRoZWFwYWxsb2NhdG9yPF9UcD4gY29uc3QgJiBvdGhlcikg
Y29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuICZoZWFwPT0mKG90aGVyLmhlYXApOwogICAg
ICAgIH0KCiAgICB0aGVhcGFsbG9jYXRvcih0aGVhcCAmYWhlYXApCiAgICAgICAgOgogICAgICAg
IGhlYXAoYWhlYXApCiAgICAgICAgewogICAgICAgIH0KCiAgICBfVHAqIGFsbG9jYXRlKHNpemVf
dHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgICB7CiAgICAgICAgcmV0dXJuCiAgICAg
ICAgX19uICE9IDAgPwogICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X1RwKj4oaGVhcC5hbGxv
Y2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgIDogMDsKICAgICAgICB9CiAgICB2
b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICAgICAgewogICAg
ICAgIGhlYXAuZGVhbGxvY2F0ZShfX3AsX19uICogc2l6ZW9mKF9UcCkpOwogICAgICAgIH0KICAg
IH07CiMgOCAic3RkY3h4L2xvY2Fsc2xpc3QuaCIgMgoKCm5hbWVzcGFjZSBsb2NhbAogICAgewoK
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULAogICAgICAgICAgICAgICAgdHlwZW5hbWUgQUxMT0M9
dGhlYXBhbGxvY2F0b3I8VD4gPgogICAgY2xhc3Mgc2xpc3QgOiBwdWJsaWMgX19nbnVfY3h4Ojpz
bGlzdDxULEFMTE9DPgogICAgICAgIHsKICAgICAgICB9OwoKCgogICAgfTsKIyA1ICJlbmdpbmUu
aCIgMgojIDEgInN0ZGN4eC9sb2NhbGxpc3QuaCIgMQoKCgojIDEgIi91c3IvaW5jbHVkZS9nKyst
djMvbGlzdCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvbGlzdCIgMwoKIyAxICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9l
eGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9l
eGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2
b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVp
ZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v
dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2
NyAiL3Vzci9pbmNsdWRlL2crKy12My9saXN0IiAyIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2xpc3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCiAgc3RydWN0IF9MaXN0X25vZGVfYmFzZQog
IHsKICAgIF9MaXN0X25vZGVfYmFzZSogX01fbmV4dDsKICAgIF9MaXN0X25vZGVfYmFzZSogX01f
cHJldjsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX0xpc3Rfbm9k
ZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2UKICAgIHsKICAgICAgX1RwIF9NX2RhdGE7CiAgICB9
OwoKICBzdHJ1Y3QgX0xpc3RfaXRlcmF0b3JfYmFzZQogIHsKICAgIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVk
ZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgX0xp
c3Rfbm9kZV9iYXNlKiBfTV9ub2RlOwoKICAgIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX0xpc3Rfbm9k
ZV9iYXNlKiBfX3gpCiAgICA6IF9NX25vZGUoX194KQogICAgeyB9CgogICAgX0xpc3RfaXRlcmF0
b3JfYmFzZSgpCiAgICB7IH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsgX01fbm9kZSA9
IF9NX25vZGUtPl9NX25leHQ7IH0KCiAgICB2b2lkCiAgICBfTV9kZWNyKCkKICAgIHsgX01fbm9k
ZSA9IF9NX25vZGUtPl9NX3ByZXY7IH0KCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9M
aXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194
Ll9NX25vZGU7IH0KCiAgICBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9MaXN0X2l0ZXJhdG9y
X2Jhc2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7IH0K
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9Q
dHI+CiAgICBzdHJ1Y3QgX0xpc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0xpc3RfaXRlcmF0b3JfYmFz
ZQogICAgewogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJh
dG9yOwogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9U
cCo+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfUmVm
LF9QdHI+IF9TZWxmOwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRl
ZiBfUHRyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgICAgIHR5cGVk
ZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwoKICAgICAgX0xpc3RfaXRlcmF0b3IoX05vZGUqIF9f
eCkKICAgICAgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feCkKICAgICAgeyB9CgogICAgICBfTGlz
dF9pdGVyYXRvcigpCiAgICAgIHsgfQoKICAgICAgX0xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0
b3ImIF9feCkKICAgICAgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9ub2RlKQogICAgICB7
IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7IHJldHVy
biAoKF9Ob2RlKikgX01fbm9kZSktPl9NX2RhdGE7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3Bl
cmF0b3ItPigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBf
U2VsZiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICB0aGlzLT5fTV9pbmNyKCk7
CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRv
cisrKGludCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgdGhp
cy0+X01faW5jcigpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX1NlbGYm
CiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7CiAgICAgICAgdGhpcy0+X01fZGVjcigpOwogICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3ItLShp
bnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIHRoaXMtPl9N
X2RlY3IoKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KICAgIH07CiMgMTg1ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CiAgICBjbGFzcyBfTGlzdF9h
bGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgICAgIGFs
bG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvcjsgfQoKICAgICAgX0xpc3RfYWxs
b2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9Ob2RlX2FsbG9jYXRv
cihfX2EpCiAgICAgIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+Kgog
ICAgICBfTV9nZXRfbm9kZSgpCiAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0
ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9f
cCkKICAgICAgeyBfTm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0Fs
bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsK
CiAgICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY2xhc3MgX0xpc3RfYWxsb2NfYmFz
ZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog
ICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K
CiAgICAgIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgICB7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlz
dF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgICAgIF9BbGxv
Y190eXBlOwoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpCiAgICAg
IHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBf
TV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfQWxsb2NfdHlwZTo6ZGVh
bGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBfTGlzdF9ub2RlPF9UcD4q
IF9NX25vZGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGNsYXNzIF9MaXN0X2Jhc2UKICAgICAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxf
VHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewogICAgcHVibGljOgogICAgICB0
eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgog
ICAgICAgICAgICAgIF9CYXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9MaXN0X2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsKICAgICAgICBfTV9ub2RlID0g
X01fZ2V0X25vZGUoKTsKICAgICAgICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgICAg
ICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsKICAgICAgfQoKICAgICAgfl9MaXN0X2Jhc2Uo
KQogICAgICB7CiAgICAgICAgY2xlYXIoKTsKICAgICAgICBfTV9wdXRfbm9kZShfTV9ub2RlKTsK
ICAgICAgfQoKICAgICAgdm9pZCBjbGVhcigpOwogICAgfTsKIyAyODkgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CiAgICBjbGFzcyBsaXN0IDogcHJvdGVjdGVkIF9M
aXN0X2Jhc2U8X1RwLCBfQWxsb2M+CiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiBfTGlzdF9i
YXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICAgIHByb3RlY3RlZDoKICAgICAgdHlwZWRlZiB2b2lk
KiBfVm9pZF9wb2ludGVyOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw
ZTsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0
IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVm
ZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsK
ICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7
CgogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwog
ICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNv
bnN0X2l0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh
dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJvdGVjdGVkOgogICAgICB1c2lu
ZyBfQmFzZTo6X01fbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2RlOwogICAgICB1
c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CgogICAgcHJvdGVjdGVkOgogICAgICBfTm9kZSoKICAg
ICAgX01fY3JlYXRlX25vZGUoY29uc3QgX1RwJiBfX3gpCiAgICAgIHsKICAgICAgICBfTm9kZSog
X19wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkgewogICAgICAgICAgX0NvbnN0cnVjdCgm
X19wLT5fTV9kYXRhLCBfX3gpOwogICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAg
ewogICAgICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0K
ICAgICAgICByZXR1cm4gX19wOwogICAgICB9CgogICAgICBfTm9kZSoKICAgICAgX01fY3JlYXRl
X25vZGUoKQogICAgICB7CiAgICAgICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAg
ICAgdHJ5IHsKICAgICAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSk7CiAgICAgICAgfQog
ICAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfTV9wdXRfbm9kZShfX3ApOwog
ICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX3A7CiAgICAgIH0KCiAg
ICBwdWJsaWM6CiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25z
dAogICAgICB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogICAgICBleHBsaWNp
dAogICAgICBsaXN0KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgICA6IF9CYXNlKF9fYSkKICAgICAgeyB9CgogICAgICBpdGVyYXRvcgogICAgICBiZWdp
bigpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZS0+X01fbmV4dCk7
IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlLT5fTV9uZXh0KTsgfQoKICAgICAgaXRlcmF0
b3IKICAgICAgZW5kKCkKICAgICAgeyByZXR1cm4gX01fbm9kZTsgfQoKICAgICAgY29uc3RfaXRl
cmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbm9kZTsgfQoKICAgICAg
cmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0
ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVn
aW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsg
fQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi
ZWdpbigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX25vZGUtPl9NX25leHQgPT0gX01fbm9kZTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNp
emUoKSBjb25zdAogICAgICB7IHJldHVybiBkaXN0YW5jZShiZWdpbigpLCBlbmQoKSk7IH0KCiAg
ICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHNpemVf
dHlwZSgtMSk7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBmcm9udCgpCiAgICAgIHsgcmV0dXJu
ICpiZWdpbigpOyB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgZnJvbnQoKSBjb25zdAog
ICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGJhY2soKQog
ICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAg
YmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAgICAgIHZvaWQKICAg
ICAgc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgICB7IHN0ZDo6c3dhcChfTV9ub2Rl
LCBfX3guX01fbm9kZSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKICAgICAgewogICAgICAgIF9Ob2RlKiBfX3RtcCA9
IF9NX2NyZWF0ZV9ub2RlKF9feCk7CiAgICAgICAgX190bXAtPl9NX25leHQgPSBfX3Bvc2l0aW9u
Ll9NX25vZGU7CiAgICAgICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9N
X3ByZXY7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX190
bXA7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7CiAgICAgICAg
cmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0
b3IgX19wb3NpdGlvbikKICAgICAgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIF9UcCgpKTsg
fQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICAgIHZvaWQKICAgICAg
ICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVn
ZXIgX194LCBfX3RydWVfdHlwZSkKICAgICAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6
ZV90eXBlKSBfX24sIChfVHApIF9feCk7IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0
b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19m
YWxzZV90eXBlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAg
ICAgIHZvaWQKICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh
bDsKICAgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBf
SW50ZWdyYWwoKSk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3Ig
X19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgICB7IF9NX2ZpbGxfaW5z
ZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fZmlsbF9pbnNlcnQo
aXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsKCiAgICAgIHZv
aWQKICAgICAgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkKICAgICAgeyBpbnNlcnQoYmVnaW4o
KSwgX194KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2Zyb250KCkKICAgICAgeyBpbnNlcnQo
YmVnaW4oKSk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KQog
ICAgICB7IGluc2VydChlbmQoKSwgX194KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2so
KQogICAgICB7IGluc2VydChlbmQoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0
ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fbmV4
dF9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0OwogICAgICAgIF9MaXN0X25vZGVf
YmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAgICAgICAg
X05vZGUqIF9fbiA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19wb3NpdGlvbi5fTV9ub2RlKTsKICAg
ICAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9ub2RlOwogICAgICAgIF9fbmV4dF9u
b2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICAgICAgX0Rlc3Ryb3koJl9fbi0+X01fZGF0
YSk7CiAgICAgICAgX01fcHV0X25vZGUoX19uKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3Ioc3Rh
dGljX2Nhc3Q8X05vZGUqPihfX25leHRfbm9kZSkpOwogICAgICB9CgogICAgICBpdGVyYXRvcgog
ICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwoKICAgICAgdm9p
ZAogICAgICBjbGVhcigpCiAgICAgIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgICAgIHZvaWQKICAg
ICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCk7CgogICAgICB2
b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkKICAgICAgeyB0aGlzLT5yZXNp
emUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHBvcF9mcm9udCgpCiAg
ICAgIHsgZXJhc2UoYmVnaW4oKSk7IH0KCiAgICAgIHZvaWQKICAgICAgcG9wX2JhY2soKQogICAg
ICB7CiAgICAgICAgaXRlcmF0b3IgX190bXAgPSBlbmQoKTsKICAgICAgICBlcmFzZSgtLV9fdG1w
KTsKICAgICAgfQoKICAgICAgbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUs
CiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp
CiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7IGluc2VydChiZWdpbigpLCBfX24sIF9fdmFsdWUp
OyB9CgogICAgICBleHBsaWNpdAogICAgICBsaXN0KHNpemVfdHlwZSBfX24pCiAgICAgIDogX0Jh
c2UoYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfVHAoKSk7
IH0KCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIGxpc3Qo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9C
YXNlKF9fYSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAg
ICAgbGlzdChjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgICA6IF9CYXNlKF9feC5n
ZXRfYWxsb2NhdG9yKCkpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feC5iZWdpbigpLCBfX3gu
ZW5kKCkpOyB9CgogICAgICB+bGlzdCgpCiAgICAgIHsgfQoKICAgICAgbGlzdDxfVHAsIF9BbGxv
Yz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KTsKCiAgICBw
dWJsaWM6CgoKCgoKICAgICAgdm9pZAogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X1RwJiBfX3ZhbCkKICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQoKICAgICAg
dm9pZAogICAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFs
KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQK
ICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0KQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lu
cHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgX01fYXNzaWduX2Rp
c3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCiAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICAgIHZvaWQKICAgICAgICBfTV9hc3NpZ25f
ZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAg
ICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZAogICAgICAg
IF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogICAg
cHJvdGVjdGVkOgogICAgICB2b2lkCiAgICAgIF9NX3RyYW5zZmVyKGl0ZXJhdG9yIF9fcG9zaXRp
b24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAgIGlm
IChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewoKICAgICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9w
cmV2LT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgICAgICAgX19maXJzdC5fTV9u
b2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgICAgICBfX3Bvc2l0
aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7CgoKICAgICAg
ICAgIF9MaXN0X25vZGVfYmFzZSogX190bXAgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7
CiAgICAgICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3QuX01fbm9kZS0+
X01fcHJldjsKICAgICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX19maXJzdC5fTV9u
b2RlLT5fTV9wcmV2OwogICAgICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7
CiAgICAgICAgfQogICAgICB9CgogICAgcHVibGljOgogICAgICB2b2lkCiAgICAgIHNwbGljZShp
dGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpCiAgICAgIHsKICAgICAgICBpZiAoIV9feC5l
bXB0eSgpKQogICAgICAgICAgdGhpcy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwgX194LmJlZ2lu
KCksIF9feC5lbmQoKSk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3BsaWNlKGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2kpCiAgICAgIHsKICAgICAgICBpdGVyYXRv
ciBfX2ogPSBfX2k7CiAgICAgICAgKytfX2o7CiAgICAgICAgaWYgKF9fcG9zaXRpb24gPT0gX19p
IHx8IF9fcG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICAgICAgdGhpcy0+X01fdHJhbnNmZXIo
X19wb3NpdGlvbiwgX19pLCBfX2opOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIHNwbGljZShp
dGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
YXN0KQogICAgICB7CiAgICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAgICAgdGhp
cy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0KTsKICAgICAgfQoKICAg
ICAgdm9pZAogICAgICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKTsKCiAgICAgIHZvaWQKICAg
ICAgdW5pcXVlKCk7CgogICAgICB2b2lkCiAgICAgIG1lcmdlKGxpc3QmIF9feCk7CgogICAgICB2
b2lkCiAgICAgIHJldmVyc2UoKTsKCiAgICAgIHZvaWQKICAgICAgc29ydCgpOwoKICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgICB2b2lkCiAgICAgICAgcmVtb3ZlX2lm
KF9QcmVkaWNhdGUpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4K
ICAgICAgICB2b2lkCiAgICAgICAgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUpOwoKICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgICB2b2lkCiAgICAgICAg
bWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgICB2b2lkCiAgICAgICAgc29ydChfU3RyaWN0
V2Vha09yZGVyaW5nKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0Fs
bG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICAgICAgY29uc3Rf
aXRlcmF0b3IgX19lbmQyID0gX195LmVuZCgpOwoKICAgICAgY29uc3RfaXRlcmF0b3IgX19pMSA9
IF9feC5iZWdpbigpOwogICAgICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2luKCk7CiAg
ICAgIHdoaWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAq
X19pMikgewogICAgICAgICsrX19pMTsKICAgICAgICArK19faTI7CiAgICAgIH0KICAgICAgcmV0
dXJuIF9faTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBf
X3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4o
KSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJl
Z2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAs
X0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAh
KF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBf
X3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlz
dDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxs
b2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChsaXN0PF9U
cCwgX0FsbG9jPiYgX194LCBsaXN0PF9UcCwgX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChf
X3kpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2
b2lkIF9MaXN0X2Jhc2U8X1RwLF9BbGxvYz46OgogICAgY2xlYXIoKQogICAgewogICAgICBfTGlz
dF9ub2RlPF9UcD4qIF9fY3VyID0gc3RhdGljX2Nhc3Q8X0xpc3Rfbm9kZTxfVHA+Kj4oX01fbm9k
ZS0+X01fbmV4dCk7CiAgICAgIHdoaWxlIChfX2N1ciAhPSBfTV9ub2RlKSB7CiAgICAgICAgX0xp
c3Rfbm9kZTxfVHA+KiBfX3RtcCA9IF9fY3VyOwogICAgICAgIF9fY3VyID0gc3RhdGljX2Nhc3Q8
X0xpc3Rfbm9kZTxfVHA+Kj4oX19jdXItPl9NX25leHQpOwogICAgICAgIF9EZXN0cm95KCZfX3Rt
cC0+X01fZGF0YSk7CiAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAgICB9CiAgICAgIF9N
X25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9k
ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9j
Pjo6CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAgIGluc2VydChfX3Bvc2l0aW9u
LCAqX19maXJzdCk7CgogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBfTV9maWxsX2luc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsK
ICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgICAgICBpbnNlcnQoX19wb3NpdGlvbiwg
X194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVyYXRvciBsaXN0PF9UcCwgX0FsbG9jPjo6
CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAg
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBlcmFzZShfX2ZpcnN0KyspOwogICAg
ICByZXR1cm4gX19sYXN0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgcmVzaXplKHNpemVfdHlw
ZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19pID0g
YmVnaW4oKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgICAgZm9yICggOyBfX2kgIT0g
ZW5kKCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAgICAgICA7CiAg
ICAgIGlmIChfX2xlbiA9PSBfX25ld19zaXplKQogICAgICAgIGVyYXNlKF9faSwgZW5kKCkpOwog
ICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgbGlz
dDxfVHAsIF9BbGxvYz4mIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIG9wZXJhdG9yPShjb25zdCBs
aXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KSB7CiAg
ICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFz
dDEgPSBlbmQoKTsKICAgICAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigp
OwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgICAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICAg
ICpfX2ZpcnN0MSsrID0gKl9fZmlyc3QyKys7CiAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICAgICAgZWxzZQogICAg
ICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fzc2lnbihzaXpl
X3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2lu
KCk7CiAgICAgIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbiA+IDA7ICsrX19pLCAtLV9fbikK
ICAgICAgICAqX19pID0gX192YWw7CiAgICAgIGlmIChfX24gPiAwKQogICAgICAgIGluc2VydChl
bmQoKSwgX19uLCBfX3ZhbCk7CiAgICAgIGVsc2UKICAgICAgICBlcmFzZShfX2ksIGVuZCgpKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6
CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
IF9fbGFzdDIsIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3Qx
ID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgZm9y
ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7ICsrX19maXJz
dDEsICsrX19maXJzdDIpCiAgICAgICAgICAqX19maXJzdDEgPSAqX19maXJzdDI7CiAgICAgICAg
aWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0
MSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xh
c3QyKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1
ZSkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9y
IF9fbGFzdCA9IGVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAg
ICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICsrX19uZXh0OwogICAgICAgIGlm
ICgqX19maXJzdCA9PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0KTsKICAgICAgICBfX2ZpcnN0ID0g
X19uZXh0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICB1bmlxdWUoKQogICAgewog
ICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3IgX19sYXN0ID0g
ZW5kKCk7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBpdGVyYXRv
ciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAg
ICAgICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICBlcmFzZShfX25leHQpOwog
ICAgICAgIGVsc2UKICAgICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgICAgX19uZXh0ID0g
X19maXJzdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgbWVyZ2UobGlzdDxfVHAs
IF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwog
ICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QyID0g
X194LmJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAg
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0g
X19maXJzdDI7CiAgICAgICAgICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19u
ZXh0KTsKICAgICAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgX01f
dHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgfQoKICBpbmxpbmUgdm9p
ZAogIF9fTGlzdF9iYXNlX3JldmVyc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3ApCiAgewogICAgX0xp
c3Rfbm9kZV9iYXNlKiBfX3RtcCA9IF9fcDsKICAgIGRvIHsKICAgICAgc3RkOjpzd2FwKF9fdG1w
LT5fTV9uZXh0LCBfX3RtcC0+X01fcHJldik7CiAgICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7
CiAgICB9IHdoaWxlIChfX3RtcCAhPSBfX3ApOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogIHJl
dmVyc2UoKQogIHsgX19MaXN0X2Jhc2VfcmV2ZXJzZSh0aGlzLT5fTV9ub2RlKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9B
bGxvYz46OgogICAgc29ydCgpCiAgICB7CgogICAgICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBf
TV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkgewogICAgICAg
IGxpc3Q8X1RwLCBfQWxsb2M+IF9fY2Fycnk7CiAgICAgICAgbGlzdDxfVHAsIF9BbGxvYz4gX19j
b3VudGVyWzY0XTsKICAgICAgICBpbnQgX19maWxsID0gMDsKICAgICAgICB3aGlsZSAoIWVtcHR5
KCkpIHsKICAgICAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJl
Z2luKCkpOwogICAgICAgICAgaW50IF9faSA9IDA7CiAgICAgICAgICB3aGlsZShfX2kgPCBfX2Zp
bGwgJiYgIV9fY291bnRlcltfX2ldLmVtcHR5KCkpIHsKICAgICAgICAgICAgX19jb3VudGVyW19f
aV0ubWVyZ2UoX19jYXJyeSk7CiAgICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19p
KytdKTsKICAgICAgICAgIH0KICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7
CiAgICAgICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICAgICAgfQoKICAgICAg
ICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICAgICAgX19jb3Vu
dGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSk7CiAgICAgICAgc3dhcChfX2NvdW50ZXJb
X19maWxsLTFdKTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgICB2b2lk
IGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQog
ICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0
b3IgX19sYXN0ID0gZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAg
ICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX25leHQ7CiAg
ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgZXJhc2UoX19maXJzdCk7CiAgICAgICAgICBf
X2ZpcnN0ID0gX19uZXh0OwogICAgICAgIH0KICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfQmluYXJ5UHJlZGlj
YXRlPgogICAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgICAgdW5pcXVlKF9CaW5hcnlQ
cmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3Qg
PSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmly
c3Q7CiAgICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9f
YmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgICBlcmFzZShfX25leHQp
OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgICAg
X19uZXh0ID0gX19maXJzdDsKICAgICAgICB9CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1N0cmljdFdlYWtP
cmRlcmluZz4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIG1lcmdlKGxpc3Q8
X1RwLCBfQWxsb2M+JiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQogICAgICB7CiAg
ICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFz
dDEgPSBlbmQoKTsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAg
ICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9f
Zmlyc3QyOwogICAgICAgICAgICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19u
ZXh0KTsKICAgICAgICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QyICE9IF9f
bGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6
CiAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQogICAgewoKICAgICAgaWYgKF9N
X25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9
IF9NX25vZGUpIHsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgICAgIGxp
c3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICAgICAgaW50IF9fZmlsbCA9IDA7CiAg
ICAgICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5
LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgICAgIGludCBfX2kgPSAwOwogICAgICAg
ICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAg
ICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29tcCk7CiAgICAgICAgICAg
IF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pKytdKTsKICAgICAgICAgIH0KICAgICAgICAgIF9f
Y2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgICAgICBpZiAoX19pID09IF9fZmlsbCkg
KytfX2ZpbGw7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2Zp
bGw7ICsrX19pKQogICAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0x
XSwgX19jb21wKTsKICAgICAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogICAgICB9CiAg
ICB9Cgp9CiMgNzIgIi91c3IvaW5jbHVkZS9nKystdjMvbGlzdCIgMiAzCiMgNSAic3RkY3h4L2xv
Y2FsbGlzdC5oIiAyCgoKCgoKbmFtZXNwYWNlIGxvY2FsCiAgICB7CgogICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsCiAgICAgICAgICAgICAgICB0eXBlbmFtZSBBTExPQz10aGVhcGFsbG9jYXRvcjxU
PiA+CiAgICBjbGFzcyBsaXN0IDogcHVibGljIHN0ZDo6bGlzdDxULEFMTE9DPgogICAgICAgIHsK
ICAgICAgICB9OwoKCgogICAgfTsKIyA2ICJlbmdpbmUuaCIgMgojIDEgInN0ZGN4eC9sb2NhbHZl
Y3Rvci5oIiAxCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDY1ICIv
dXNyL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5j
dGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5o
IiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf
Y2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlk
X2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Ro
cm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL3Vzci9pbmNsdWRlL2cr
Ky12My92ZWN0b3IiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Zl
Y3Rvci5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2
b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJv
d19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3Jhbmdl
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciog
X19zKTsKfQojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMK
CgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UKewpwdWJs
aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFs
bG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgYWxsb2NhdG9yX3R5cGUK
ICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAg
X1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2Rh
dGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9z
dG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9j
YXRvcjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29m
X3N0b3JhZ2U7CgogIF9UcCoKICBfTV9hbGxvY2F0ZShzaXplX3QgX19uKSB7IHJldHVybiBfTV9k
YXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CgogIHZvaWQKICBfTV9kZWFsbG9jYXRlKF9U
cCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFs
bG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Y2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CnsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CgogIGFsbG9jYXRvcl90
eXBlCiAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K
CiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3Rh
cnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVk
OgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3Rv
cmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46
Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwoKICBfVHAqCiAgX01fYWxsb2NhdGUoc2l6ZV90IF9f
bikgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KCiAgdm9pZAogIF9NX2Rl
YWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUo
X19wLCBfX24pO30KfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
c3RydWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9B
bGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9B
bGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9U
cCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1Rw
LCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9i
YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSkge30KICBfVmVj
dG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jh
c2UoX19hKQogIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2Zpbmlz
aCA9IF9NX3N0YXJ0OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICB9
CgogIH5fVmVjdG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9z
dG9yYWdlIC0gX01fc3RhcnQpOyB9Cn07CiMgMTg1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9j
YXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9B
bGxvYz4KewoKIAoKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAg
dHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwoKcHVibGljOgogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVk
ZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fZ251X2N4eDo6
X19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+IGl0ZXJhdG9yOwogIHR5cGVk
ZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCB2ZWN0b3JfdHlw
ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0
b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0
ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNl
OwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7Cgpw
cm90ZWN0ZWQ6CgoKCgoKCgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFz
ZTo6X01fZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6
Ol9NX2ZpbmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6
CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194
KTsKCgoKCnB1YmxpYzoKCgoKCgogIGV4cGxpY2l0CiAgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CiMgMjQ2ICIv
dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdmVjdG9yKHNpemVfdHlw
ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoj
IDI1OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGV4cGxpY2l0
CiAgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwg
X1RwKCkpOyB9CiMgMjcxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAz
CiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKICAgIDogX0Jhc2UoX194
LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs
aXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQojIDI4OCAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICB7CgogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh
bDsKICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7
CiAgICB9Cgpwcm90ZWN0ZWQ6CiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAg
ICBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1
ZV90eXBlKQogICAgewogICAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICAgIF9NX2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0
ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemVfYXV4KF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsX0lucHV0SXRlcmF0b3IgX19sYXN0LF9fZmFsc2VfdHlwZSkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0
b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgICAgICAgICAgICAgIF9JdGVyQ2F0ZWdv
cnk7CiAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVn
b3J5KCkpOwogICAgfQoKcHVibGljOgoKCgoKCgoKICB+dmVjdG9yKCkgeyBfRGVzdHJveShfTV9z
dGFydCwgX01fZmluaXNoKTsgfQojIDMzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92
ZWN0b3IuaCIgMwogIHZlY3RvcjxfVHAsIF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feCk7CiMgMzQ4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X3ZlY3Rvci5oIiAzCiAgdm9pZAogIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f
dmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9Cgpwcm90ZWN0ZWQ6CiAgdm9pZAog
IF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKcHVibGlj
OgojIDM2OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHRlbXBs
YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7
CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK
ICAgIH0KCnByb3RlY3RlZDoKICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQKICAg
ICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl
X3R5cGUpCiAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs
KTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyPgogICAgdm9pZAogICAgX01fYXNzaWdu
X2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2Vf
dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICAgICAgICAgICAgICAgX0l0ZXJDYXRl
Z29yeTsKICAgICAgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnko
KSk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAg
IF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9hdXgoX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKcHVibGljOgoKICBhbGxvY2F0b3JfdHlwZQog
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9
CgoKCgoKCiAgaXRlcmF0b3IKICBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7
IH0KCgoKCgogIGNvbnN0X2l0ZXJhdG9yCiAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9p
dGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBpdGVyYXRvcgogIGVuZCgpIHsgcmV0dXJuIGl0
ZXJhdG9yIChfTV9maW5pc2gpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvcgogIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9CgoKCgoKICByZXZlcnNlX2l0
ZXJhdG9yCiAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCgoK
CgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3IKICBy
ZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCgoKCgogIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IKICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcihiZWdpbigpKTsgfQoKCgogIHNpemVfdHlwZQogIHNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQoKCiAgc2l6ZV90eXBlCiAgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KIyA0ODQgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgcmVzaXplKHNp
emVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkKICB7CiAgICBpZiAoX19uZXdfc2l6
ZSA8IHNpemUoKSkKICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbmV3X3NpemUsIGVuZCgpKTsKICAg
IGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogIH0K
IyA1MDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAg
cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7
IH0KCgoKCgogIHNpemVfdHlwZQogIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVf
dHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQoKCgoK
ICBib29sCiAgZW1wdHkoKSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CiMgNTM0
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZAogIHJlc2Vy
dmUoc2l6ZV90eXBlIF9fbikKICB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBj
b25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9
IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9E
ZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0
LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsK
ICAgICAgX01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0KIyA1NTggIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKHNpemVfdHlw
ZSBfX24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KIyA1NzAgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBjb25zdF9yZWZlcmVuY2UKICBvcGVyYXRvcltd
KHNpemVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCnByb3Rl
Y3RlZDoKCiAgdm9pZAogIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgewog
ICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2
ZWN0b3IgW10gYWNjZXNzIG91dCBvZiByYW5nZSIpOwogIH0KCnB1YmxpYzoKIyA1OTMgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2UKICBhdChzaXpl
X3R5cGUgX19uKSB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0K
IyA2MDYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBjb25zdF9y
ZWZlcmVuY2UKICBhdChzaXplX3R5cGUgX19uKSBjb25zdCB7IF9NX3JhbmdlX2NoZWNrKF9fbik7
IHJldHVybiAoKnRoaXMpW19fbl07IH0KCgoKCgogIHJlZmVyZW5jZQogIGZyb250KCkgeyByZXR1
cm4gKmJlZ2luKCk7IH0KCgoKCgogIGNvbnN0X3JlZmVyZW5jZQogIGZyb250KCkgY29uc3QgeyBy
ZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogIHJlZmVyZW5jZQogIGJhY2soKSB7IHJldHVybiAqKGVu
ZCgpIC0gMSk7IH0KCgoKCgogIGNvbnN0X3JlZmVyZW5jZQogIGJhY2soKSBjb25zdCB7IHJldHVy
biAqKGVuZCgpIC0gMSk7IH0KIyA2NDcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVj
dG9yLmgiIDMKICB2b2lkCiAgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KQogIHsKICAgIGlmIChf
TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5p
c2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl
cnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KIyA2NjYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgcG9wX2JhY2soKQogIHsKICAgIC0tX01fZmluaXNoOwog
ICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICB9CiMgNjg0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IKICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwgY29uc3QgX1RwJiBfX3gpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBi
ZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0
aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICAr
K19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihf
X3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KIyA3MzkgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgaW5zZXJ0IChp
dGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2Zp
bGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCnByb3RlY3RlZDoKICB2b2lkCiAgX01fZmls
bF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7
CgpwdWJsaWM6CiMgNzYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAz
CiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICBpbnNlcnQoaXRl
cmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0
ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2go
X19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICB9Cgpwcm90ZWN0ZWQ6
CiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9f
cG9zLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxfVHA+KF9fdmFsKSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9f
cG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAg
ICAgICAgICAgICAgICAgICAgICAgX0l0ZXJDYXRlZ29yeTsKICAgICAgX01fcmFuZ2VfaW5zZXJ0
KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICB9CgpwdWJsaWM6
CiMgODA0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0
b3IKICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogIHsKICAgIGlmIChfX3Bvc2l0aW9uICsg
MSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24p
OwogICAgLS1fTV9maW5pc2g7CiAgICBfRGVzdHJveShfTV9maW5pc2gpOwogICAgcmV0dXJuIF9f
cG9zaXRpb247CiAgfQojIDgzMCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3Iu
aCIgMwogIGl0ZXJhdG9yCiAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KQogIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKICAg
IF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFz
dCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQojIDg0OCAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQKICBzd2FwKHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feCkKICB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAg
ICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgIHN0ZDo6c3dhcChfTV9l
bmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgoKCgoKCgogIHZvaWQK
ICBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CiAgdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlcgogICAgX01fYWxsb2NhdGVfYW5k
X2NvcHkoc2l6ZV90eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgewogICAgcG9pbnRlciBf
X3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkKICAgICAgewogICAgICAgIHVuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9NX2RlYWxs
b2NhdGUoX19yZXN1bHQsIF9fbik7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkCiAgICBfTV9yYW5nZV9pbml0aWFsaXpl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRp
YWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgewogICAg
c2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICBfTV9zdGFydCA9
IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u
OwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f
c3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01f
cmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKfTsK
IyA5MjYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7
CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3gu
YmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KIyA5NDUgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194
LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYg
X194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNv
bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg
X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kg
PCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
Cm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7
CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAg
ICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBj
YXBhY2l0eSgpKSB7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShf
X3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBfRGVzdHJveShfTV9zdGFydCwg
X01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3Jh
Z2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkgPj0g
X194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks
IGJlZ2luKCkpKTsKICAgICAgX0Rlc3Ryb3koX19pLCBlbmQoKSk7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBzaXplKCksIF9NX3N0YXJ0KTsK
ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsgc2l6ZSgpLCBfX3guZW5kKCks
IF9NX2ZpbmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsKICB9
CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZv
aWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgY29uc3Qg
dmFsdWVfdHlwZSYgX192YWwpCnsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9y
PF9UcCwgX0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190
bXAuc3dhcCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChi
ZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxs
X24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2Uo
ZmlsbF9uKGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgdmVjdG9y
PF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf
aXRlcmF0b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAg
Kl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19j
dXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0g
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKCiAgaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewog
ICAgcG9pbnRlciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19s
YXN0KSk7CiAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2Nh
dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQg
PSBfX3RtcDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBf
X2xlbjsKICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25l
d19maW5pc2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBfRGVzdHJveShf
X25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7
CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFkdmFu
Y2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7CiAg
ICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNo
KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8
X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9U
cCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgX0Nv
bnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAg
ICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGl0ZXJh
dG9yKF9NX2ZpbmlzaCAtIDIpLCBpdGVyYXRvcihfTV9maW5pc2gtIDEpKTsKICAgICpfX3Bvc2l0
aW9uID0gX194X2NvcHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np
emUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAg
PyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0
ZShfX2xlbikpOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgIHRy
eSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9z
dGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX25ld19zdGFydCk7CiAgICAgIF9Db25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194
KTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4u
LikKICAgICAgewogICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAg
ICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pOwogICAgICAgIHRo
cm93OwogICAgICB9CiAgICBfRGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9j
YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0
ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2Uo
KTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAg
fQp9CiMgMTE0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6
X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlm
IChfX24gIT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2Zp
bmlzaCkgPj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9y
IF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikg
ewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwg
X01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dh
cmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAg
IGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAg
ICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0g
X19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2Vs
ZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9m
aW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAg
ICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQog
ICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgp
OwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3Np
emUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7
CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAg
ICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRp
b24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp
bGxfbihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAg
ICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gp
OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf
X25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19z
dGFydC5iYXNlKCksX19sZW4pOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfRGVz
dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg
X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh
cnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2lu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7
CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24p
IHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRp
b247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19l
bGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2gg
LSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwog
ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29s
ZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAg
ICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJz
dDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2gg
Kz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2Vs
ZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAg
ICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz
aXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19v
bGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19s
ZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5
IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01f
c3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0
aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gK
ICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zp
bmlzaCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK
ICAgICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICBf
TV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSwgX19sZW4pOwogICAgICAgICAgdGhyb3c7
CiAgICAgICAgfQogICAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01f
ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAg
IF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19m
aW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2Uo
KSArIF9fbGVuOwogICAgfQogIH0KfQoKfQojIDcyICIvdXNyL2luY2x1ZGUvZysrLXYzL3ZlY3Rv
ciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9yLmgiIDEgMwoj
IDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0JpdF90eXBlOwogIGVudW0geyBfTV93b3Jk
X2JpdCA9IGludCg4ICogc2l6ZW9mKF9CaXRfdHlwZSkpIH07CgpzdHJ1Y3QgX0JpdF9yZWZlcmVu
Y2UgewoKICBfQml0X3R5cGUgKiBfTV9wOwogIF9CaXRfdHlwZSBfTV9tYXNrOwogIF9CaXRfcmVm
ZXJlbmNlKF9CaXRfdHlwZSAqIF9feCwgX0JpdF90eXBlIF9feSkKICAgIDogX01fcChfX3gpLCBf
TV9tYXNrKF9feSkge30KCnB1YmxpYzoKICBfQml0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01f
bWFzaygwKSB7fQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhISgqX01fcCAmIF9N
X21hc2spOyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBp
ZiAoX194KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0
X3JlZmVyZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KICBib29s
IG9wZXJhdG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJu
IGJvb2woKnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRf
cmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAhYm9vbCgqdGhpcykgJiYgYm9vbChf
X3gpOyB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9p
ZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBf
X3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0
ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgaXRlcmF0b3I8cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcs
IGJvb2w+CnsKICBfQml0X3R5cGUgKiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7Cgog
IF9CaXRfaXRlcmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg
ICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewog
ICAgaWYgKF9NX29mZnNldCsrID09IF9NX3dvcmRfYml0IC0gMSkgewogICAgICBfTV9vZmZzZXQg
PSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAg
aWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX01fd29yZF9iaXQgLSAx
OwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkg
ewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0g
X19uIC8gX01fd29yZF9iaXQ7CiAgICBfX24gPSBfX24gJSBfTV93b3JkX2JpdDsKICAgIGlmIChf
X24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9NX3dvcmRf
Yml0OwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVk
IGludCkgX19uOwogIH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFz
ZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQg
PT0gX19pLl9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9pdGVyYXRv
cl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3Ag
PT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNldCk7CiAgfQogIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJu
ICEoKnRoaXMgPT0gX19pKTsKICB9CiAgYm9vbCBvcGVyYXRvcj4oY29uc3QgX0JpdF9pdGVyYXRv
cl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfX2kgPCAqdGhpczsKICB9CiAgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1
cm4gIShfX2kgPCAqdGhpcyk7CiAgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfQml0X2l0ZXJh
dG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOwogIH0KfTsK
CmlubGluZSBwdHJkaWZmX3QKb3BlcmF0b3ItKGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX194
LCBjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feSkgewogIHJldHVybiBfTV93b3JkX2JpdCAq
IChfX3guX01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9
CgoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0
eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNl
KiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVy
YXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcihfQml0
X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShf
X3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVy
ZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7
CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJh
dG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgp
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9N
X2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0t
KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh
dG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5
cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9f
dG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp
IGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g
X19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyBy
ZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9y
KyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCAr
IF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0
b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3Rf
cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRf
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6
IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoX0JpdF90
eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194
LCBfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gp
CiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3guX01fcCwgX194Ll9NX29mZnNldCkge30KCiAg
Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0X3JlZmVy
ZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0
b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3Rf
aXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJh
dG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRv
ciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAg
fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAg
IF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w
ZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw
ZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1
cm4gX190bXAgKz0gX19pOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5j
ZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg
IHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRp
ZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsKICB9Cn07Cgpp
bmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3Qg
X0JpdF9jb25zdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0KCgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9y
X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJv
b2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7
CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFf
YWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNo
KCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgX0JpdF90eXBlICogX01f
Yml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxv
Y2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2b2lkIF9NX2Rl
YWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX01fZGF0YV9hbGxvY2F0
b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICB0eXBlbmFt
ZSBfQWxsb2NfdHJhaXRzPF9CaXRfdHlwZSwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg
ICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9C
aXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRfdHlwZSAqIF9NX2VuZF9vZl9zdG9yYWdlOwp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNl
PF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRv
cl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBh
bGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2Uo
MCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90
eXBlLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBf
Qml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190
eXBlOjphbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2
b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9j
X3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRl
cmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICog
X01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZl
Y3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2lu
c3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1Nf
aW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l
IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFz
ZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCgpuYW1lc3BhY2Ugc3RkCnsK
CnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4g
OiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYg
Ym9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSBy
ZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBf
Qml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9p
bnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9C
aXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgdHlwZWRlZiByZXZlcnNlX2l0
ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRl
ZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAg
IHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAg
cHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7
CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2lu
ZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFz
ZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9N
X2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6
ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9f
TV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9m
aW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQogICAgdm9pZCBf
TV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAgICAgIGlmIChf
TV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dh
cmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3Np
dGlvbiA9IF9feDsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkKICAgICAgICAgICAgICAgICAgICAgICAgICA/
IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAg
ICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9y
IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg
ICAgKl9faSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5k
KCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9y
YWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAg
ICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0
ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0g
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAg
ICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewog
ICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytfX3BvczsK
ICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg
dm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAg
ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBf
X24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2Zpbmlz
aCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19u
KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBz
aXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgX0JpdF90eXBlICogX19xID0gX01f
Yml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwg
X19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwg
ZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRf
b2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7
CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9
CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7
IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0K
ICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRv
ciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXpl
X3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg
eyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qg
ewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl
LCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJl
Z2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19u
KQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAg
IGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsg
cmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01f
cmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19uID49IHRoaXMt
PnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAg
ICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hl
Y2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgq
dGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19h
KSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAg
ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDog
X0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24p
OwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8g
fjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAg
OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01f
aW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9y
YWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpIDogX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01faW5pdGlhbGl6ZShf
X3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7
CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRp
YWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7
CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9l
bmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9f
Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8
X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lu
cHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rp
c3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIH52ZWN0b3Io
KSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkgewogICAgICBp
ZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2Fw
YWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9pbml0aWFsaXpl
KF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwg
YmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194
LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmls
bF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkg
ewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4w
IDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7CiAgICAgIH0K
ICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAg
IGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAg
ICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgeyBfTV9m
aWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVy
YXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2Zp
cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
dGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2Vy
IF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24s
IChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZv
aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0
ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz
dCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQo
ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29w
eShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgICAgIGVsc2UgewogICAgICAg
IF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQs
IHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAg
aW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVz
ZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAg
ICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNo
ID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVh
bGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRf
Yml0OwogICAgICB9CiAgICB9CgogICAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu
KCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigp
OyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29u
c3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZv
aWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAg
ICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rv
cjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01f
c3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICAg
c3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAg
fQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9v
bCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsK
ICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRp
b24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAg
ICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgICByZXR1cm4gYmVnaW4oKSAr
IF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01f
aW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2Zp
bGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5
cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRl
Z3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2Zp
cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2b2lkIF9NX2ZpbGxfaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIGlm
IChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24p
IHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBk
aWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9u
ICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgICAgX01fZmluaXNoICs9IGRpZmZl
cmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBf
X2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgX0JpdF90eXBlICogX19x
ID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2lu
KCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9f
biwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93
b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAg
IH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBi
b29sIF9feCkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24sIF9feCk7CiAg
ICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICAgIGl0ZXJhdG9yIGVy
YXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVu
ZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAg
ICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJuIF9fcG9zaXRpb247CiAgICB9CiAgICBpdGVy
YXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgICAgX01f
ZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3gg
PSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgICAgZXJhc2Uo
YmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkpOwogICAgICBlbHNl
CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogICAgfQog
ICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKF9CaXRfdHlwZSAqIF9fcCA9IF9NX3N0YXJ0Ll9N
X3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19w
OwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07
CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgX19hbGxvYz4gYml0X3ZlY3RvcjsKCn0KIyA3MyAiL3Vz
ci9pbmNsdWRlL2crKy12My92ZWN0b3IiIDIgMwojIDUgInN0ZGN4eC9sb2NhbHZlY3Rvci5oIiAy
CgoKCgoKbmFtZXNwYWNlIGxvY2FsCiAgICB7CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBBTExPQz10aGVhcGFsbG9jYXRvcjxUPiA+CiAgICBjbGFz
cyB2ZWN0b3IgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8VCxBTExPQz4KICAgICAgICB7CiAgICAgICAg
fTsKCgoKICAgIH07CiMgNyAiZW5naW5lLmgiIDIKIyAxICJlbmdwcm9mLmgiIDEKCgoKIyAxICJh
bmdsZS5oIiAxCgoKCnR5cGVkZWYgaW50IHRhbmdsZTsKIyAzMyAiYW5nbGUuaCIKZXh0ZXJuIHRh
bmdsZSBhbmdsZWFkZCh0YW5nbGUgYSx0YW5nbGUgYix0YW5nbGUgbW9kKTsKZXh0ZXJuIHRhbmds
ZSBhbmdsZXN1Yih0YW5nbGUgYSx0YW5nbGUgYix0YW5nbGUgbW9kKTsKIyA1ICJlbmdwcm9mLmgi
IDIKCiMgMSAiaGFyZGF0dHIuaCIgMQoKCgoKIyAxICJzdGRjeHgvbG9jYWxzdHJpbmcuaCIgMQoK
CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRl
L2crKy12My9zdHJpbmciIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90
cmFpdHMuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5o
IiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBz
dHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoK
ICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVh
bXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5
cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3Np
Z24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9
IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19j
MSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0K
CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3Qg
Y2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3Rh
dGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90
eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgZm9yIChzaXplX3QgX19pID0g
MDsgX19pIDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19f
aV0pKQogICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBfX3MyW19faV0pID8gLTEgOiAx
OwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxl
bmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19wID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsKICAgICAgICByZXR1cm4g
KF9fcCAtIF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYg
X19hKQogICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsgc2l6
ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAgaWYgKCpfX3AgPT0gX19hKSBy
ZXR1cm4gX19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90
eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz
aXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBfX3My
LCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg
ICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBf
X24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19uICog
c2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3Np
Z24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsKICAg
ICAgICBmb3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQog
ICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJuIF9fczsKICAgICAgfQoK
ICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUm
IF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRf
dHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50
X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3Qg
aW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx
ID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg
bm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShf
X2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1w
b3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBl
ZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWdu
KGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBf
X2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEs
IGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog
ICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo
YXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRp
YyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw
ZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9f
bik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog
X19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29u
c3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJf
dHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq
CiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf
dCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19z
MSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hh
cl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsg
fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBz
aXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
X3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl
CiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBlCiAg
ICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0KCiAg
ICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBj
b25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAg
ICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5
cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBp
bnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7IH0K
ICB9OwojIDI2OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX0No
YXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBfQ2hhcl90cmFp
dHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAgICAgYm9vbAog
ICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJhaXRzOjplcShf
TV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMSAzCiMgNTMgIi91c3IvaW5jbHVk
ZS9nKystdjMvbWVtb3J5IiAzCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9p
dGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwg
dm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVy
YXRvciBfTV9pdGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3Jh
Z2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAg
ICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7
IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1Rw
JiBfX2VsZW1lbnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVt
ZW50KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0
ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7
CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAg
cmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRv
cisrKGludCkKICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRl
cmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0
dXJuIF9fdG1wOwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvaW5jbHVkZS9nKystdjMvbWVt
b3J5IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgog
IHBhaXI8X1RwKiwgcHRyZGlmZl90PgogIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90
IF9fbGVuLCBfVHAqKQogIHsKICAgIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8g
c2l6ZW9mKF9UcCkpKQogICAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAg
ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgIF9UcCogX190bXAgPSAoX1RwKikgc3RkOjptYWxs
b2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX190bXAgIT0g
MCkKICAgICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAg
ICAgIF9fbGVuIC89IDI7CiAgICB9CgogICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90Pigo
X1RwKikwLCAwKTsKICB9CiMgMTAyICIvdXNyL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMwogIHRl
bXBsYXRlIDxjbGFzcyBfVHA+CiAgaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVt
cG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsKICAgIHJldHVybiBfX2dldF90ZW1wb3Jh
cnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAgfQojIDExNCAiL3Vzci9pbmNsdWRlL2crKy12
My9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogIHZvaWQgcmV0dXJuX3RlbXBvcmFy
eV9idWZmZXIoX1RwKiBfX3ApIHsKICAgIHN0ZDo6ZnJlZShfX3ApOwogIH0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVmCnsKICAgX1RwMSogX01fcHRyOwogICBh
dXRvX3B0cl9yZWYoX1RwMSogX19wKSA6IF9NX3B0cihfX3ApIHt9Cn07CgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsKCnB1
YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgogIGV4cGxpY2l0IGF1dG9fcHRyKF9U
cCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0b19wdHIm
IF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX1RwMT4gYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgOiBfTV9w
dHIoX19hLnJlbGVhc2UoKSkge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0ciYgX19h
KSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwog
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0
cjxfVHAxPiYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0
dXJuICp0aGlzOwogIH0KCgoKCgogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQoKICBf
VHAmIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuICpfTV9wdHI7CiAgfQog
IF9UcCogb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuIF9NX3B0cjsKICB9
CiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9U
cCogcmVsZWFzZSgpIHRocm93KCkgewogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsKICAgIF9NX3B0
ciA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQgcmVzZXQoX1RwKiBfX3AgPSAwKSB0
aHJvdygpIHsKICAgIGlmIChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAg
ICAgIF9NX3B0ciA9IF9fcDsKICAgIH0KICB9CgpwdWJsaWM6CiAgYXV0b19wdHIoYXV0b19wdHJf
cmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAg
YXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3coKSB7CiAg
ICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7
CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9
CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0
aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwPih0aGlzLT5yZWxlYXNlKCkpOyB9
CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3co
KQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQp9OwoKfQoj
IDQ5ICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBj
bGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1
bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCgoKCnRlbXBsYXRl
IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlf
ZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm
IF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlw
ZTsKfTsKIyAxMjcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsK
ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0
aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4K
ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9
Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0
IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+
CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z
dCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBf
X3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9
OwojIDIyMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9
Cn07CiMgMjcxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsK
cHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5
X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3Qg
X1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihf
X3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdh
dGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3Rf
YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRp
Y2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0
IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQog
IGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVu
dF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6
OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVk
KF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBi
aW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7
CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf
T3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBl
bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAg
X09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBl
IHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAg
ICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195
KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpy
ZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwog
IH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBl
bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv
biwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3Qg
X09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9P
cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVy
MXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6
CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAg
ICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBl
JiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRp
b246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpm
aXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVl
KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCko
dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJh
dGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29u
c3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJp
bmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9B
cmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJs
aWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAo
Kl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30K
ICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9Bcmcp
KSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7
IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBf
UmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBw
dHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlf
ZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwg
Y2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0
aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJv
dGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAg
cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19i
aW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9w
dHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBj
b25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVy
X3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQg
KCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rp
b248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYg
b3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6
OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f
eC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9y
KCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFt
ZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAg
cmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlw
ZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNl
Y29uZDsKICB9Cn07CiMgNTI4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9u
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt
X2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBf
VHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6
OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3Qg
X1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1Jl
dCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0
PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkp
IDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1
cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZf
dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChf
X3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m
dW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19w
Zikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVy
biAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9Bcmcp
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz
IGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0Fy
ZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6
Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29u
c3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9f
eCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9y
ZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihf
X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0
dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJn
KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcs
X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1Rw
OjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7
IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChf
VHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3Ap
IGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgp
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBf
VHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19w
LT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVu
X3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0
b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAo
X1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1f
ZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZiko
KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19y
KSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgp
IGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m
dW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJn
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZiko
X0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBf
X3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBj
b25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2
b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9B
cmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194
KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9m
KShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25z
dF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Jl
Zl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lk
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2Yp
KF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQs
X1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1Jl
dCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBj
b25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0
KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1l
bV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9S
ZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUg
Y29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19m
KSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBt
ZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkK
ICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7
IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZf
dDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsg
cmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9y
ZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNv
bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7
IH0KCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv
c2gtZWxmL2JpdHMvYXRvbWljaXR5LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZysrLXYzL3No
LWVsZi9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRp
YyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNo
YW5nZV9hbmRfYWRkIChfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfQXRvbWlj
X3dvcmQgX19yZXN1bHQgPSAqX19tZW07CiAgKl9fbWVtICs9IF9fdmFsOwogIHJldHVybiBfX3Jl
c3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkK
X19hdG9taWNfYWRkIChfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICAqX19tZW0g
Kz0gX192YWw7Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1
YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxv
YyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw
ZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5
cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJl
bmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVy
ZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2lu
dGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVy
IGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRv
cjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4
eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9y
PiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAogICAg
ICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hh
cj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21h
eF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAg
IHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAg
ICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01f
aXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoK
ICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVy
biBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtl
ZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAg
IF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAg
ICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAg
ICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01f
cmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0
IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewogICAg
ICAgICAgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpCiAg
ICAgICAgICAgICAgICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwogICAg
ICAgIH0KCgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNv
bnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxs
b2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9y
ZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAg
IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3co
KTsKCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAg
ewogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJl
dHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01f
Y2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAg
ICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hp
ZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9f
YSksIF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAg
cHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlk
ZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0
b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkg
LSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAg
ICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9w
ID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1
cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAg
ICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01f
ZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAg
X01fbGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkK
ICAgICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBf
TV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3Mg
PiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry
aW5nOjpfTV9jaGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAg
ICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYg
PCB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rl
c3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01f
aWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxj
bGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJz
KF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewog
ICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAg
dHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGlj
IHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRl
cmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIu
YmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQq
IF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBf
U19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3Rh
dGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBf
Q2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0g
X19rMSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBf
X3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0
c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAg
IF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBf
X2xlbjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBf
UmVwJgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxfUmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAg
IGlubGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2lj
X3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f
biA9IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X0FsbG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2Mo
KSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBf
X2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2Jl
ZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxv
YyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVw
KCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4g
dGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRv
cj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlz
LT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAg
ewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsK
ICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7
IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAg
ICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJh
dG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2Rh
dGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJl
Z2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAg
ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVy
c2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io
dGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVu
ZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVn
aW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsg
fQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7Cgog
ICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24s
IF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUo
c2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01f
bXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBj
b25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5j
ZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNp
emVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4g
X01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0
KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNp
emUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7
CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UK
ICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgp
KQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAg
ICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBw
ZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQg
X19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4g
dGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf
X2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19j
KQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19w
b3MgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry
aW5nOjphc3NpZ24iKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNp
emUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/
IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19z
dHIuX01fZGF0YSgpICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAg
ICB7CiAgICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93
X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVw
KCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEo
KSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMt
PnNpemUoKSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2lu
KCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsK
CiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAg
ICAgICAgICAgaWYgKF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAg
ICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25d
ID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAg
IH0KICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJU
KiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCks
IF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5y
ZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAg
IHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f
YykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRl
bXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9y
IF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAg
IHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9f
c3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlw
ZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5
cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXpl
KQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7
CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwog
ICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJz
aXplIC0gX19wb3MyOwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5f
TV9kYXRhKCkgKyBfX3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0
aGlzLT5tYXhfc2l6ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh
c2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQo
KSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8
IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAg
ICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigp
ICsgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19u
KTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX29mZiA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAw
LCBfX24pOwogICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAg
X0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9f
biA8PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7
CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5
cGU6OmNvcHkoX19wLCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0g
X19zKTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3Mp
LCBfX3AgKyBfX24sIF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQo
X01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9
CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0g
X0NoYXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVn
aW4oKTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSks
IF9fYyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4g
dGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAg
ICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9s
ZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9N
X2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9f
cG9zaXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9N
X2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiAr
IDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtl
ZCgpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRl
cmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAg
ICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAg
ICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwog
ICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2lu
KCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBf
X3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90
eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAg
ICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEs
IGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7
CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBp
ZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf
c3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEgPCBf
X3NpemUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rlc3Ru
MSA/IF9fbjEgOiBfX3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xkbjEg
PiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9y
KCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3No
YXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAg
ICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAg
ICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4x
LCBfX3MsIF9fcyArIF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAgICBf
TV9yZXBsYWNlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2Zv
bGRuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+
OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCog
X19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0
c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJU
IF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2Zv
bGQoX19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5f
TV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw
bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhp
cy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
X2kxLCBfX2kyLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXpl
X3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs
IGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5w
dXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwg
X19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEs
IF9DaGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9p
YmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sx
LCBfX2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFy
VCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4o
KSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2sy
IC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBf
X2kxLCBpdGVyYXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICAg
IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7
CiAgICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9f
azIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9f
aTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9f
azIgLSBfX2sxKTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Uo
aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7Cgog
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg
X0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMg
X0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBf
X2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl
X3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1Nf
Y29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRl
bXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19j
b25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYg
X19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAg
ICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19l
bmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAg
ICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0lu
SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
ICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdy
YWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAg
c3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0
ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRf
aXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAg
c3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJ
dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0
KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1
YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0
IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBf
X24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClb
X19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAg
IH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2Rh
dGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAg
ICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf
dHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0
YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g
MCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBv
cykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9
IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3Bvcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
Zmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp
bmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBu
cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgp
LCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFz
dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj
b25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZp
bmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3Bv
cyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9
CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsg
fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBf
X24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9f
Yywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu
ZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Mg
PSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3Ry
LmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Mg
PSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywg
X19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv
bnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAw
LCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+
IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBf
X24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBz
aXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9
IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAg
ICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAg
IHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7Cgog
ICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwg
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3My
LCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBf
Q2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGlu
dAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D
aGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZj
b3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5k
KF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xo
cywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+
CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9f
c3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAg
ICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90
eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf
X3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0
IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo
cykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg
ICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg
PT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl
dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy
biBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo
X19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
ID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJU
KiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy
biBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBf
X2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMu
Y29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
KQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v
cywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+Jgog
ICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAg
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQg
X19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+
JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAg
ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQoj
IDU0ICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYWxnb3JpdGht
IiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2
NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+
CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5k
ZXgsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xl
SW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYg
KihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9f
aG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9
IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAg
ICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAg
ICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAg
IAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFz
dCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9W
YWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAg
ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAy
OwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmly
c3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5k
ZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJl
bnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAg
ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu
bGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1
c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBf
RGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0g
MSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19h
ZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9s
ZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQog
ICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlz
dGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChf
X3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRD
aGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vj
b25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3Qg
KyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAg
ICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAg
ICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19o
b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19o
b2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChf
X2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5s
aW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9o
ZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBf
X3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
PgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f
bGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0
YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p
ZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3Rh
bmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBf
X3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4
ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9s
ZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAg
IGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3Nl
Y29uZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9f
Zmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAg
ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIg
KiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09
IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg
KF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxk
IC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190
b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
aW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2Uo
X19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVU
eXBlOwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9W
YWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYg
KF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4g
PSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVu
IC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2Zp
cnN0LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7
CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwog
ICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAg
ICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VU
eXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAg
ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFu
Y2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAg
ICAgICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAg
ICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAg
ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAg
IHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxl
IChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3Qt
LSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m
aXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAg
ICB9Cgp9CiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVmZmVy
CnsKCiAKCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwog
IF9UcCogX01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9v
cmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4g
PiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAy
MTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAg
X01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlm
IChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0K
CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30K
ICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUp
IHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0K
CnB1YmxpYzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KCiAg
cHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVu
OyB9CgogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQoKSB7
IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAg
ICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwg
X1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBmcmVlKF9N
X2J1ZmZlcik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAgICBfTV9sZW4gPSAwOwogICAg
ICAgIHRocm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBfRGVz
dHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7
CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZm
ZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsK
Cn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1l
c3BhY2Ugc3RkCnsKIyA4NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7Cgog
ICAgIAogICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAg
ICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVy
biBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAo
X19hIDwgX19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykK
ICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0K
IyAxMTggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAg
ICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19j
LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAoX19jb21wKF9fYSwgX19i
KSkKICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2I7CiAg
ICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2M7CiAg
ICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9f
YSwgX19jKSkKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19iLCBf
X2MpKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwog
ICAgfQojIDE1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVuY3Rp
b24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9G
dW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAg
IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2Zp
cnN0ID09IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVk
aWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICBy
ZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykK
ICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3Qp
ID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkg
ewogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg
KytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1
cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBz
d2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpfX2Zp
cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNh
c2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg
ICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3Zh
bCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAg
IGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgog
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAg
Zm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAg
ICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2Zp
cnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19m
aXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy
biBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChf
X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IGNhc2UgMToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0
dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAK
ICAgICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19s
YXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMyOSAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoK
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAg
IF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBf
X2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJu
IF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJl
ZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl
ZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIg
X19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAg
ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4g
X19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291
bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh
bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192
YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQxMSAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAg
ICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICsrX19uOwog
ICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEg
X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIy
IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAg
IAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0
MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChf
X2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAg
ICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogICAgICBf
Rm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoK
ICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBf
X2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAg
ICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJy
ZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAg
ICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkg
ewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2Zp
cnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICBy
ZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAg
ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcjEK
ICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190
bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0Mikg
ewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIHJldHVybiBf
X2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAg
IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQg
PSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICAgIGlmIChfX3ByZWRpY2F0ZSgq
X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9f
cHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsK
CiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAg
ICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdo
aWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICAgICAgaWYgKCsrX19w
ID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgr
K19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAg
ICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwog
ICAgfQojIDU5NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBf
VHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3Qg
X1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fY291bnQg
PD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19maXJz
dCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAgICAg
ICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAg
ICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAg
IGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAg
fQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMgIi91c3IvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgIHR5cGVuYW1l
IF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291
bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9w
cmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAg
IHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KICAgICAgICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291
bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICAr
K19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmlu
YXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAt
LV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKF9faSAhPSBf
X2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICArK19faTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBy
ZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBzd2FwX3JhbmdlcyhfRm9y
d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAg
IAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19m
aXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHJldHVy
biBfX2ZpcnN0MjsKICAgIH0KIyA3MzIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0
ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zv
cm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7Cgog
ICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs
ICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAg
ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3NjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l
IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBf
QmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgX0JpbmFyeU9w
ZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jl
c3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0
Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBj
b25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJz
dCA9PSBfX29sZF92YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9
CiMgODI1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1Rw
PgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg
X19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
CiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDg1NiAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIK
ICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAg
IAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFs
dWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9
CiMgODg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJl
ZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBs
YWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBf
UHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAg
ICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdf
dmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDkxOCAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lkCiAgICBnZW5lcmF0ZShf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dl
bikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgIH0KIyA5NDIgIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091
dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgX091dHB1
dEl0ZXIKICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2Vu
ZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9f
biwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICB9CiMgOTY5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0
eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgog
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEo
Kl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg
IH0KIyAxMDAzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf
UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYg
KCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9
CiMgMTAzOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgog
ICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgICAgIF9Gb3J3
YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBf
X2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19p
LCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMgIi91c3IvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmVfaWYoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1By
ZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBmaW5k
X2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwgX19m
aXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9y
X3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6
dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7
CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKF9fdmFsdWUg
PT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICAgICAq
KytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4gKytfX3Jlc3VsdDsK
ICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zv
cndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7
CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgICAgICAgICor
K19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEx
NDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1
dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAg
ICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRw
dXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMTcwICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl
PgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAg
ICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0g
Kl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmly
c3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJz
dCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0
ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEx
OTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5
UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkLAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAg
CgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9
IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkp
ICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoj
IDEyMzIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5h
cnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlf
cHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9f
dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LApfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwgX0l0
ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVy
CiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAg
ICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9m
aW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkwICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h
bWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIF9fZmlyc3Qg
PSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CiAgICAgIHJl
dHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQp
OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAg
ICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBpdGVyX3N3
YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAo
X19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xh
c3QpOwogICAgfQojIDEzNDkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQK
ICAgIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwg
X19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog
ICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh
c3QpIHsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAg
ICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEz
OTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50CiAg
ICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVjbGlkZWFuUmluZ0VsZW1lbnQg
X19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAgICAgICBfRXVjbGlkZWFuUmlu
Z0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9IF9fbjsKICAgICAgICBfX24g
PSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
CiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21p
ZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19t
aWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsK
ICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19m
aXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogICAgICBfX2ZpcnN0
MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgICAg
IHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgICBlbHNlIGlmIChf
X2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICB9
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAg
dm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQog
ICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3Qg
PT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBf
X21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIF9fcmV2ZXJzZShf
X21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgICAgICBz
d2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRk
bGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19yZXZlcnNlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p
ZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7Cgog
ICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21p
ZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2Zp
cnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0OwogICAgICBfRGlz
dGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBfX2wpIHsKICAgICAgICBz
d2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsK
ICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgICAgIGZv
ciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgICAgICBfVmFsdWVU
eXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19m
aXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAgICAgZm9yIChfRGlzdGFuY2Ug
X19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA+IF9f
Zmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAg
ICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICpfX3AgPSAqKF9f
cCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICB9CiAgICAgICAgfQoK
ICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9f
ay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykg
ewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgICAgX19wICs9
IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAg
ICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAqX19w
ID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTU2MSAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAg
IAoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAg
CiAgICAgCgoKICAgICAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRk
bGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKICAgIH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlu
bGluZSBfRGlzdGFuY2UKICAgIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKQogICAgewoK
CgogICAgICByZXR1cm4gcmFuZCgpICUgX19uOwoKICAgIH0KIyAxNjM0ICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAg
ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0
ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsg
MSkpOwogICAgfQojIDE2NjAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21O
dW1iZXJHZW5lcmF0b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy
IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3
YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl
PgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAog
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2Zp
cnN0KSkKICAgICAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7Cgog
ICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4
dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dh
cCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVy
CiAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAg
ICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkKICAgICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBicmVhazsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsK
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVy
CiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAg
ICAgIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAg
X0ZvcndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAgIGlmIChf
X2xlbiA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19m
aXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgYWR2YW5j
ZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX2lu
cGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAy
KTsKICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o
X19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0ZShfX2Jl
Z2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9f
bWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBf
UHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRl
cgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk
aWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZl
cl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICAg
ICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7
CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3Vs
dDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVzdWx0MiA9
ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAgICAgICBj
b3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJuIF9fcmVz
dWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUg
PSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgICAg
X0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJz
dCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2Fk
YXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxl
LCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19l
bmQpKTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDggIi91c3Iv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFi
bGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAg
CgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1Zh
bHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgp
ID4gMCkKICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJz
dCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNp
emUoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFy
dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkp
OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9w
YXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAq
X19sYXN0KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFz
dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwg
X19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZv
dCkpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUg
KF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlm
ICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg
aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg
ICB9CiMgMTkyOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVt
IHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg
d2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAg
ICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19s
YXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3Vu
Z3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFs
LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9
IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25l
eHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0
OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg
IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK
CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf
X2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9f
dmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBf
X2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAg
IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7
IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAg
ICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJk
KF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAg
ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9f
aSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNl
cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9t
QWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBf
X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7
IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAg
ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAg
ICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBf
X2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
aWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAg
X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0
LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
U2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9T
aXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsK
ICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29w
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9s
ZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxf
c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAg
fQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1
dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50
cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0
ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog
ICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQs
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3
aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2Rl
cHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1f
X2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAg
IF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7
CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBf
X2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3Qg
LSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs
IF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9fZmluYWxfaW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICB9CgoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19p
bnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewog
ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICByZXR1cm47
CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3Qs
IF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qp
OwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewog
ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAg
IHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmly
c3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
X19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChf
X21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19t
aWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVy
Z2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVz
dWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19z
dGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0g
X190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCAr
IF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9z
aXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAgICAgIF9fc3Rl
cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwog
ICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0
ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIy
LAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9
IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdv
X3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0
ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg
X19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3
b19zdGVwOwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3Qg
LSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCAr
IF9fc3RlcF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwK
ICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIGVudW0g
eyBfTV9jaHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25f
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCiAgICB7
CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAg
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICAg
ICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK
ICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX2ZpcnN0
ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhf
YnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19s
YXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsg
X19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAg
ICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoK
ICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRf
bG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19z
dGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZm
ZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7
CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5
cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vf
c29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm
ZXIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoK
ICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIg
X19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVw
X3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAoX19zdGVwX3Np
emUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwg
X19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7
CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmly
c3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0
X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0
YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0
IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBf
X2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAg
ICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19i
dWZmZXJfc2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19s
YXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg
ICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7
CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm
ZmVyKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5j
ZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZm
ZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRk
bGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xh
c3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0
aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21w
KTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh
c3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAog
ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vzci9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg
IAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+
IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAg
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgZWxzZQogICAg
ICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwg
X0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vzci9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIF9UZW1wb3JhcnlfYnVm
ZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0
KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3Nv
cnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShi
dWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9
CiMgMjUwMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtl
X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f
aSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9f
Zmlyc3QpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1
ZVR5cGUoKl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQoj
IDI1NDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog
ICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFw
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy
IF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmIChfX2NvbXAo
Kl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwg
X19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwg
X19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5w
dXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBpZiAo
X19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0
OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0g
X19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsK
ICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0K
ICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAg
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19y
ZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlz
dGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVz
dWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg
ICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAg
cmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMzICIvdXNyL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21B
Y2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
ZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jl
c3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVf
dHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgoK
ICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3Vs
dF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jl
c3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVh
bF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0g
Kl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0
OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s
YXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBp
ZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICAgICAgX19hZGp1c3Rf
aGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCks
CiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCksCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg
ICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXAp
OwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2ODYgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMp
IHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRl
ZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAg
IF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsK
ICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMg
MjcyOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQg
PQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2Zp
cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQog
ICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9
IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf
X2NvbXApOwogICAgfQojIDI3NjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBf
Rm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAgIAoKICAg
ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
IF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAg
ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK
ICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsK
ICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg
bG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAg
ICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxl
OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7
CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9f
aGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAg
X19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4g
PSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9f
bGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4NTYg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVy
X2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu
Y2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg
ICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19t
aWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAg
IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19m
aXJzdDsKICAgIH0KIyAyOTAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUg
X19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f
aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4g
MCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2Zp
cnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29t
cChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVs
c2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0Owog
ICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAg
ICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFu
Z2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg
X192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5
cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlz
dGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAg
IF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9f
bGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUg
PSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYg
KCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAg
ICAgICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xl
biA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5k
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9f
bGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0
LCBfX3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl
cj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8
X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMw
MDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlz
dGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3Rh
bmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3Jp
Z2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+
IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUs
IF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAg
ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19s
ZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29t
cChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVs
c2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9f
dmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgICAg
ICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29t
cCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19s
ZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0Zvcndh
cmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwNTIgIi91
c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgX0Zv
cndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAg
ICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMgMzA4MyAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s
CiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93
ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9f
aSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vzci9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg
X091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp
IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7
CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg
ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFy
ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAg
ICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAg
IGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4g
Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp
KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5
cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8
IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9
PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAgICAgICAgIGl0
ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVu
MTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBf
X2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9f
Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChf
X21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5j
ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBf
X2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4y
Mik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwg
Kl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly
c3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl
Y29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJz
dF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwgX19z
ZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJz
dF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEx
LCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9f
c2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAt
IF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp
c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAgICAgcmV0
dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAoX19jb21w
KCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBf
X21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u
ZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlz
dGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBf
X2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjEx
KTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAq
X19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxl
LCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBf
X2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAg
ICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRf
Y3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNv
bmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3Rf
Y3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj
b25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3Rf
Y3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwg
X19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRk
bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0
aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xl
bjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk
bGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19t
aWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2Vu
ZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3Np
emUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1
ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICBy
ZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpKTsK
ICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCiAgICB7CiAg
ICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJk
KF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh
c3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAgICAqLS1fX3Jl
c3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAg
ICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0
KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEs
IF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0KICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBf
QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19tZXJn
ZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19m
aXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICBy
ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAgICBp
ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp
cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0
MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19s
YXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAo
X19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m
aXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAg
IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAg
ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3Qy
OwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlcj4KICAg
IHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAg
ICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAg
ICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsK
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf
X21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYg
KF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
X2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21l
cmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf
X2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAg
IGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVu
MSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwog
ICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s
YXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2Uo
X19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAg
ICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmly
c3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwog
ICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRk
bGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0
aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog
ICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBf
X2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgfQogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUg
X0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg
ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAgICBpZiAoX19s
ZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBf
UG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7
CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xh
c3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xl
bjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQg
PSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9i
YWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog
ICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAw
OwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xl
bjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAg
ICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAg
ICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m
aXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShf
X21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAgICAg
IGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19maXJz
dF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19j
b21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly
c3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19u
ZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9j
dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJn
ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9z
aXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwg
X19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9f
Y29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAg
ICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAg
ICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlw
ZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlk
ZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
MSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
bjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVy
PF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVm
ZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAgZWxz
ZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19s
ZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlz
dGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi91c3IvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ
dGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlCiAg
ICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5j
ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwg
X19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUg
X19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBl
IF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9i
dWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xh
c3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fY29t
cCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgX19idWYu
YmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
MSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAK
CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAg
ICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2Zp
cnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAK
CgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRl
cjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg
ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24oX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly
c3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2Zp
cnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAg
ICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0
MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAg
IAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAg
ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3Qx
KQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qy
OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0
MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz
dDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAg
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIK
ICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3Qx
IDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAg
ICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxz
ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAg
ICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAg
ICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAK
CiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAg
ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmly
c3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAg
ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAg
cmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2Uo
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVs
c2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19m
aXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29w
eShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
ciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRf
c3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBp
ZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNv
cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7
CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJk
SXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg
ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19yZXN1bHQgPCAq
X19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVz
dWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0
LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy
biBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1
bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBf
X2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGls
ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19y
ZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAg
IGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xh
c3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19p
OwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7
CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19paSkgewogICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCpfX2kgPCAq
LS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAg
ICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBf
Q29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAg
ICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAg
ICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgq
X19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19q
KTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVy
c2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAg
ICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAg
Ym9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFz
dCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7
CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsK
ICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19pKSB7CiAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKi0tX19qIDwg
Kl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAg
ICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAg
ICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAg
ICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21wKCot
LV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2op
OwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJz
ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAg
ICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G
b3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBf
X2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogICAg
ICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0
MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgICAg
ICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0
SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAg
ICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogICAg
ICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0
MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAg
ICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CiMg
NDIwMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0Zvcndh
cmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3
YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZv
cndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikK
ICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVy
MSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9Gb3J3
YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xh
c3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9f
bGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgX19maXJzdDEgPSBf
X25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICB9CiAgICAgICAg
fQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4K
ICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg
X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0
b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAg
IHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVz
dWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgX0ZvcndhcmRJdGVy
MSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBf
X2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0g
X19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQogICAgICAg
IH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
MSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEK
ICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmly
c3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJ
dGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0
aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3Qx
KTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jldkl0ZXIxIF9f
cnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoK
ICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsK
ICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJl
c3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3Qy
LCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAg
IAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl
cjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlv
bmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7
CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3Jy
ZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAgICBpZiAoX19ycmVz
dWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAg
ICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAg
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIF9Gb3J3
YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk
SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBf
X2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAg
ICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRl
cjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIg
X19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFz
dDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9
Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9nKystdjMvYWxnb3JpdGhtIiAyIDMKIyA1NyAiL3Vzci9p
bmNsdWRlL2crKy12My9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9i
YXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2lj
X3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXpl
ID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0
IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlw
ZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1w
dHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXpl
b2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19i
ZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYm
IF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZj
b3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kg
PSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYp
IC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9
ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBf
X3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9
IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0
YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9f
ci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAo
OzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0g
X19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9f
ci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAg
ICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5
cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAq
IF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAg
ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAg
ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9f
YW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAg
ICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAg
ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
fQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5k
LCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVf
dHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAgICBpZiAoX19idWlsdGluX2V4
cGVjdChfX2JlZyA9PSBfSW5JdGVyKDApLCAwKSkKICAgICAgICAgIF9fdGhyb3dfbG9naWNfZXJy
b3IoImF0dGVtcHQgdG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRlciIpOwoKICAgICAg
ICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJu
IF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6
Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlf
Y2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCgu
Li4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsK
CiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwog
ICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFy
VCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1NfY29u
c3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg
ewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgIHJldHVybiBf
U19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCogX19yID0gX1JlcDo6X1Nf
Y3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9fbikK
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19uLCBf
X2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9fci0+
X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfX3ItPl9N
X2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rl
cm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIuX01fcmVw
KCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAgICAgICAg
ICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0Fs
bG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0No
YXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0YXBsdXMo
X1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9jKCkp
CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2Ep
CiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBf
X2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChf
X3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJU
KiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo
X19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykgOiAwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90
eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVz
KF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0
ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1
Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CiAg
ICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAgICB7CgogICAgICAgICAg
YWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0No
YXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9j
YXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBf
TV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVw
OjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93ICgpCiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAxKSAqIHNp
emVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShyZWlu
dGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lk
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQo
KQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIF9NX211
dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgIH0KCgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNp
emVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBf
X2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBf
X3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9z
aXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp
IHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoKICAgICAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19o
ZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKCiAgICAgICAgICBjb25zdCBzaXplX3R5
cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZihfUmVw
KSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX1JlcCogX19yOwogICAgICAgICAg
aWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpICYmIF9fbmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNp
dHkpCgogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSA+IDIqY2Fw
YWNpdHkoKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zaXplIDog
MipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3IgPSBfUmVw
OjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICAgIGlm
IChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9y
ZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goLi4u
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0
b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX3Jl
cCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgp
KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIp
CiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9fcG9z
ICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQogICAgICBfTV9yZXAoKS0+
X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXpl
OwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRoaXMt
PmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAgICAg
ICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgIF9fdGhyb3dfbGVu
Z3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKCiAgICAgICAgICBpZiAoX19yZXMg
PCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICAgICAg
ICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJU
KiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsK
ICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9f
dG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAgICBp
ZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hh
cmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAg
X19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9hbGxv
Y2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFy
VCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwog
ICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAg
ICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCks
IF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihfX3Mu
X01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAgICAg
ICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVfdCBf
X2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwoKCiAgICAg
IGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoKCiAgICAgICAgX190aHJvd19sZW5ndGhf
ZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7CgoKCgogICAgICBzaXplX3QgX19zaXpl
ID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwojIDQy
MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICAgICAgY29u
c3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdl
c2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAq
IHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXpl
KSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAg
ICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUg
X19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNp
dHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2Fw
YWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KICAg
ICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBz
aXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXplIC0gKChfX3NpemUgKyBf
X21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3N1
YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFy
VCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkg
KyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19i
eXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBu
ZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5Owog
ICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAg
ICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxs
b2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlw
ZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hl
YWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
cGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6
ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFy
VCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFj
aXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0g
X1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBf
X2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVl
c3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEo
KSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3Ro
ID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVz
aXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhf
c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6
ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19z
aXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAg
IGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0K
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy
YXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBf
X2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9f
cyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIs
IF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p
MiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0g
X19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7
CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAgICAgX190aHJvd19sZW5ndGhf
ZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlwZSBfX29m
ZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9fZG9sZCwg
X19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9N
X2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXpl
X3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwK
ICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3Bv
czIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu
Zzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6
ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBf
X24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3Bv
czEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9f
cG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBz
aXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBf
X3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkp
CiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3Nh
ZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwog
ICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUo
X19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgp
LCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
dHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog
ICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlm
IChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7
CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywg
X19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh
Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29u
c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3Np
emVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5
cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAg
ICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQo
X19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmlu
Z190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBf
X3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUg
X19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAg
ICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVu
ZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
IHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9
IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigp
OwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQog
ICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg
ICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAg
ICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
biwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0aGlzLT5z
aXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29weSIp
OwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9fbiA9IHRo
aXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRh
KCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBv
cyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAg
Zm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFp
dHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAg
ICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJU
IF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAo
X19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEg
PSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9f
cG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9f
cCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5k
KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf
X24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXpl
IC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEo
KTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5
cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAg
ICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+
IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h
bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBf
X2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXpl
X3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAg
ICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9z
LS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBv
c10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24g
JiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19f
cG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAg
ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19u
KQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBf
X3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAg
ICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf
X3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf
dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5k
X2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZv
ciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRz
X3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVy
biBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihf
Q2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hw
b3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3Mp
CiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAg
ICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s
YXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9z
KQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb
X19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg
ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z
dAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo
X19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAg
ICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAgICAg
ICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf
X3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBf
X3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFy
ZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQg
X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEo
KSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6
ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3Mx
LCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg
c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19z
dHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUp
CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoK
ICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsKICAg
ICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAg
ICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19y
ID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAg
ICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0
dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGludCBfX3Ig
PSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsKICAgICAgaWYg
KCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwog
ICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAg
ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6
ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5
cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNf
dHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICgh
X19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25z
dCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAg
ICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9f
c2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJl
Iik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3Bvcywg
X19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAg
ICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3Ms
IF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7
CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNz
IF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAg
ICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZz
aXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90
eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXpl
X3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFp
dHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0
ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z
dHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p
c3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwg
Y2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0
bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p
c3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwg
d3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJpbmcmKTsK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5l
KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3Ry
ZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwp9CiMgNTggIi91c3IvaW5jbHVkZS9nKystdjMvc3Ry
aW5nIiAyIDMKIyA1ICJzdGRjeHgvbG9jYWxzdHJpbmcuaCIgMgoKCgoKCm5hbWVzcGFjZSBsb2Nh
bAogICAgewoKCiAgICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc3RkOjpiYXNpY19zdHJpbmc8Y2hh
cixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHRoZWFwYWxsb2NhdG9yPGNoYXI+ID47CgogICAgdHlw
ZWRlZiBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sdGhlYXBh
bGxvY2F0b3I8Y2hhcj4gPiBzdHJpbmc7CgoKCiAgICB9OwojIDYgImhhcmRhdHRyLmgiIDIKIyAx
ICJhdHRyLmgiIDEKCgoKIyAxICJzZXJpYWxpc2UuaCIgMQoKCgpjbGFzcyB0d3JpdGVzZXJpYWxz
dHJlYW0KICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdmlydHVhbCB2
b2lkIGJlZ2lud3JpdGUoKT0wOwogICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0Z3Jv
dXAodW5zaWduZWQgaW50IGdyb3VwbmFtZWNyYyxpbnQgbSxpbnQgdmVyc2lvbm51bSk9MDsKICAg
ICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydGRhdGFzZXQodm9pZCBjb25zdCAqcGhkcixp
bnQgbik9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZSh2b2lkIGNvbnN0ICpw
LGludCBuKT0wOwogICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGVuZGRhdGFzZXQoKT0wOwog
ICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGVuZGdyb3VwKCk9MDsKICAgICAgICAgICAgICAg
IHZpcnR1YWwgdm9pZCBlbmR3cml0ZSgpPTA7CiAgICAgICAgfTsKCmNsYXNzIHRyZWFkc2VyaWFs
c3RyZWFtCiAgICAgICAgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHZpcnR1YWwg
Ym9vbCBiZWdpbnJlYWQoKT0wOwogICAgICAgICAgICAgICAgdmlydHVhbCBib29sIHJlYWQodm9p
ZCAqcCxpbnQgbik9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBzdGFydHJlYWRkYXRh
c2V0KHZvaWQgKnBoZHIsaW50IG4pPTA7CiAgICAgICAgICAgICAgICB2aXJ0dWFsIGludCBmaW5k
Z3JvdXAodW5zaWduZWQgaW50IGdyb3VwbmFtZWNyYyxpbnQgbSk9MDsKICAgICAgICB9OwoKY2xh
c3MgdG1lbW9yeXN0cmVhbSA6IHB1YmxpYyB0d3JpdGVzZXJpYWxzdHJlYW0sIHB1YmxpYyB0cmVh
ZHNlcmlhbHN0cmVhbQogICAgICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAg
dm9pZCAqYXJlYXN0YXJ0OwogICAgICAgICAgICAgICAgaW50IGFyZWFzaXplOwoKICAgICAgICB1
bnNpZ25lZCBpbnQgZW5kbWFya2VyOwoKCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp3
cml0ZXB0cjsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmxhc3RkYXRhZ3JvdXA7CiAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpsYXN0ZGF0YXNldDsKICAgICAgICAgICAgICAg
IGludCBncm91cHNpemU7CiAgICAgICAgICAgICAgICBpbnQgZGF0YXNldHNpemU7CiAgICAgICAg
ICAgICAgICBpbnQgd3JpdGVuZXN0Y291bnQ7CgoKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgKnJlYWRwdHI7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpuZXh0ZGF0YXNldDsK
ICAgICAgICAgICAgICAgIGludCBncm91cGxlZnQ7CiAgICAgICAgICAgICAgICBpbnQgZGF0YXNl
dGxlZnQ7CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRtZW1vcnlzdHJlYW0odm9p
ZCAqZGF0YWFyZWEsaW50IHNpemUpOwoKCiAgICAgICAgICAgICAgICB2b2lkIGJlZ2lud3JpdGUo
KTsKICAgICAgICAgICAgICAgIHZvaWQgc3RhcnRncm91cCh1bnNpZ25lZCBpbnQgZ3JvdXBuYW1l
Y3JjLGludCBtLGludCB2ZXJzaW9ubnVtKTsKICAgICAgICAgICAgICAgIHZvaWQgc3RhcnRkYXRh
c2V0KHZvaWQgY29uc3QgKnBoZHIsaW50IG4pOwogICAgICAgICAgICAgICAgdm9pZCB3cml0ZSh2
b2lkIGNvbnN0ICpwLGludCBuKTsKICAgICAgICAgICAgICAgIHZvaWQgZW5kZGF0YXNldCgpOwog
ICAgICAgICAgICAgICAgdm9pZCBlbmRncm91cCgpOwogICAgICAgICAgICAgICAgdm9pZCBlbmR3
cml0ZSgpOwoKCiAgICAgICAgICAgICAgICBib29sIGJlZ2lucmVhZCgpOwogICAgICAgICAgICAg
ICAgYm9vbCByZWFkKHZvaWQgKnAsaW50IG4pOwogICAgICAgICAgICAgICAgYm9vbCBzdGFydHJl
YWRkYXRhc2V0KHZvaWQgKnBoZHIsaW50IG4pOwogICAgICAgICAgICAgICAgaW50IGZpbmRncm91
cCh1bnNpZ25lZCBpbnQgZ3JvdXBuYW1lY3JjLGludCBtKTsKICAgICAgICB9OwojIDUgImF0dHIu
aCIgMgojIDEgInN0cmNvbnYuaCIgMQoKCgoKCmNsYXNzIHRzdHJjb252cmVzdWx0CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgICAgZW51bSByZWFkdmFsdWVyZXN1bHRzCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgIG9rPTAsCiAgICAgICAgICAgICAgICAgICAgICAgIGJhZGZvcm1hdD0xLAog
ICAgICAgICAgICAgICAgICAgICAgICBvdXRvZnJhbmdlPTIKICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKICAgIH07CgpjbGFzcyB0c3RyY29udmdlbmVyaWMKICAgIHsKICAgIHB1YmxpYzoKICAg
ICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsdmFsdWVzdHJpbmdmcm9tdm9pZChsb2NhbDo6
c3RyaW5nICZzLHZvaWQgKnYpIGNvbnN0PTA7CiAgICB9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGNsYXNzIHRzdHJpbmdjb252ZXJ0b3IgOiBwdWJsaWMgdHN0cmNvbnZnZW5lcmljLCBwdWJsaWMg
dHN0cmNvbnZyZXN1bHQKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAg
dmlydHVhbCBsb2NhbDo6c3RyaW5nIHVuaXRzKCkgY29uc3Q9MDsKICAgICAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBmaWxsdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyAmcyxUIGNvbnN0ICYpIGNv
bnN0PTA7CiAgICAgICAgICAgICAgICB2aXJ0dWFsIHJlYWR2YWx1ZXJlc3VsdHMgcmVhZHZhbHVl
c3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsVCAmKSBjb25zdD0wOwogICAgICAgICAgICAg
ICAgdmlydHVhbCBib29sIGluYyhib29sIGxvdHMsVCAmKSBjb25zdD0wOwogICAgICAgICAgICAg
ICAgdmlydHVhbCBib29sIGRlYyhib29sIGxvdHMsVCAmKSBjb25zdD0wOwogICAgICAgIHZpcnR1
YWwgaW50IHZhbHVlZmllbGRsZW5ndGgoKSBjb25zdD0wOwoKICAgICAgICBib29sIGZpbGx2YWx1
ZXN0cmluZ2Zyb212b2lkKGxvY2FsOjpzdHJpbmcgJnMsdm9pZCAqdikgY29uc3QKICAgICAgICAg
ICAgewogICAgICAgICAgICBmaWxsdmFsdWVzdHJpbmcocywqc3RhdGljX2Nhc3Q8VCAqPih2KSk7
CiAgICAgICAgICAgIH0KICAgICAgICB9OwojIDYgImF0dHIuaCIgMgoKCmNsYXNzIHRhdHRycHJv
Y2Vzc29yCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yKCko
bG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSxib29sIHN1YmRpcik9MDsKICAgIH07Cgp0eXBlZGVm
IHRzdHJjb252Z2VuZXJpYyB0YXR0cnZhbHVlcHJpbnRlcjsKCgpjbGFzcyB0d2l0aGF0dHIKICAg
ICAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgZW51bSByZWFkdmFsdWVyZXN1bHRzCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBvaz0wLAogICAgICAgICAgICAgICAgYmFkZm9ybWF0
PTEsCiAgICAgICAgICAgICAgICBvdXRvZnJhbmdlPTIsCiAgICAgICAgICAgICAgICBhdHRycmVh
ZG9ubHk9MywKICAgICAgICAgICAgbm90Zm91bmQ9NAogICAgICAgICAgICAgICAgfTsKCiAgICAg
ICAgdmlydHVhbCBib29sIGZvcmVhY2gobG9jYWw6OnN0cmluZyBjb25zdCAmZGlybmFtZSx0YXR0
cnByb2Nlc3NvciAmZG90aGlzKT0wOwoKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBmaWxs
dmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUsbG9jYWw6OnN0cmluZyAm
cyxsb2NhbDo6c3RyaW5nICZ1bml0cyk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgcmVhZHZh
bHVlcmVzdWx0cyByZWFkdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUs
bG9jYWw6OnN0cmluZyBjb25zdCAmcyk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBy
ZWFkb25seShsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSk9MDsKICAgICAgICAgICAgICAg
IHZpcnR1YWwgYm9vbCBkaXJ0eShib29sIHJlc2V0KT0wOwogICAgICAgICAgICAgICAgdmlydHVh
bCB2b2lkIGluYyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxib29sIGxvdHMpPTA7CiAg
ICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJu
YW1lLGJvb2wgbG90cyk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBhZGRuYW1lZGF0
dHJpYnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxsb2NhbDo6c3RyaW5nIGNvbnN0
ICZ2YWx1ZSk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCByZW1vdmVuYW1lZGF0dHJp
YnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSk9MDsKCiAgICAgICAgICAgICAgICB2
aXJ0dWFsIHZvaWQgc2F2ZSh0d3JpdGVzZXJpYWxzdHJlYW0gKndyaXRlc3RyZWFtLHVuc2lnbmVk
IGludCBvYmpuYW1lY3JjKSBjb25zdD0wOwogICAgICAgICAgICAgICAgdmlydHVhbCBib29sIGxv
YWQodHJlYWRzZXJpYWxzdHJlYW0gKnJlYWRzdHJlYW0sdW5zaWduZWQgaW50IG9iam5hbWVjcmMp
PTA7CiAgICAgICAgdmlydHVhbCB2b2lkIGFmdGVybG9hZCgpPTA7CgogICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRsb2dpbmZvKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICogJmF0dHJw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAmc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZXByaW50ZXIg
Y29uc3QgKiZzdHJjb252LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
bDo6c3RyaW5nICZ1bml0cykgY29uc3Q9MDsKICAgIH07CiMgNyAiaGFyZGF0dHIuaCIgMgoKY2xh
c3MgdGhhcmRhdHRyaWJ1dGUKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgIGxvY2FsOjpzdHJpbmcgZm5hbWU7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAg
dGhhcmRhdHRyaWJ1dGUobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUoYXR0cm5hbWUpCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgICAgIHRoYXJkYXR0cmlidXRlKHRoYXJkYXR0cmlidXRlIGNvbnN0ICZvdGhlcikKICAg
ICAgICAgICAgOgogICAgICAgICAgICBmbmFtZShvdGhlci5mbmFtZSkKICAgICAgICAgICAgewog
ICAgICAgICAgICB9OwogICAgICAgIHZpcnR1YWwgfnRoYXJkYXR0cmlidXRlKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg
ICAgIHZpcnR1YWwgbG9jYWw6OnN0cmluZyB1bml0cygpIGNvbnN0PTA7CiAgICAgICAgdmlydHVh
bCBib29sIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nICZzKSBjb25zdD0wOwogICAgICAg
IHZpcnR1YWwgdHdpdGhhdHRyOjpyZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2Nh
bDo6c3RyaW5nIGNvbnN0ICZzKT0wOwogICAgICAgICAgICAgICAgdmlydHVhbCBib29sIHNhdmUo
dHdyaXRlc2VyaWFsc3RyZWFtICpzKSBjb25zdD0wOwogICAgICAgICAgICAgICAgdmlydHVhbCBi
b29sIGxvYWQodHJlYWRzZXJpYWxzdHJlYW0gKnMpPTA7CiAgICAgICAgICAgICAgICB2aXJ0dWFs
IGJvb2wgcmVhZG9ubHkoKSBjb25zdD0wOwogICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGlu
Yyhib29sIGxvdHMpPTA7CiAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjKGJvb2wgbG90
cyk9MDsKICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0bG9naW5mbyggdW5zaWduZWQgY2hhciB2b2xh
dGlsZSAqICZhdHRycHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgJnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhdHRy
dmFsdWVwcmludGVyIGNvbnN0IComc3RyY29udikgY29uc3Q9MDsKCiAgICAgICAgdmlydHVhbCBi
b29sIHdvcnRoc2F2aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICBsb2NhbDo6
c3RyaW5nIG5hbWUoKSB7cmV0dXJuIGZuYW1lO30gY29uc3QKICAgICAgICBib29sIG9wZXJhdG9y
PT0gKHRoYXJkYXR0cmlidXRlIGNvbnN0ICZvdGhlcikgY29uc3QKICAgICAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKHRoaXM9PSZvdGhlcik7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoK
CgpjbGFzcyB0d2l0aGhhcmRhdHRyIDogcHVibGljIHR3aXRoYXR0cgogICAgICAgIHsKICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgICAgdHlwZWRlZiBsb2NhbDo6dmVjdG9yPHRoYXJkYXR0
cmlidXRlICo+IHZhbHVlc3R5cGU7CiAgICAgICAgICAgICAgICB2YWx1ZXN0eXBlIHZhbHVlczsK
CiAgICAgICAgc3RydWN0IHRzdWJkaXIKICAgICAgICAgICAgewogICAgICAgICAgICBsb2NhbDo6
c3RyaW5nIG5hbWU7CiAgICAgICAgICAgIHR3aXRoYXR0ciAqc3ViOwogICAgICAgICAgICBib29s
IHNhdmU7CiAgICAgICAgICAgIHRzdWJkaXIobG9jYWw6OnN0cmluZyBjb25zdCAmYSx0d2l0aGF0
dHIgKmIsYm9vbCBjKQogICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgbmFtZShhKSwK
ICAgICAgICAgICAgICAgIHN1YihiKSwKICAgICAgICAgICAgICAgIHNhdmUoYykKICAgICAgICAg
ICAgICAgIHt9CiAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PSh0c3ViZGlyIGNvbnN0ICZvKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHN1Yj09by5zdWIgJiYKICAg
ICAgICAgICAgICAgICAgICAobmFtZS5lbXB0eSgpIHx8IHN0cmNhc2VjbXAobmFtZS5jX3N0cigp
LG8ubmFtZS5jX3N0cigpKT09MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGJvb2wg
b3BlcmF0b3IhPSh0c3ViZGlyIGNvbnN0ICZvKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgcmV0dXJuICFvcGVyYXRvcj09KG8pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgICAgIHR5cGVkZWYgbG9jYWw6OnZlY3Rvcjx0c3ViZGlyPiBzdWJj
b2xsZWN0aW9uc3R5cGU7CiAgICAgICAgICAgICAgICBzdWJjb2xsZWN0aW9uc3R5cGUgc3ViY29s
bGVjdGlvbnM7CiAgICAgICAgYm9vbCBpc2RpcnR5OwoKICAgICAgICB2YWx1ZXN0eXBlOjppdGVy
YXRvciBmaW5kdmFsdWUobG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSk7CiAgICAgICAgdmFsdWVz
dHlwZTo6Y29uc3RfaXRlcmF0b3IgZmluZGNvbnN0dmFsdWUobG9jYWw6OnN0cmluZyBjb25zdCAm
bmFtZSkgY29uc3Q7CiAgICAgICAgc3ViY29sbGVjdGlvbnN0eXBlOjpjb25zdF9pdGVyYXRvciBm
aW5kc3ViY29sbGVjdGlvbihsb2NhbDo6c3RyaW5nIGNvbnN0ICZuYW1lLGxvY2FsOjpzdHJpbmcg
JnJlc3RvZm5hbWUpIGNvbnN0OwogICAgcHJvdGVjdGVkOgogICAgICAgIHZvaWQgYWRkYXR0cmli
dXRlKHRoYXJkYXR0cmlidXRlICphKTsKICAgICAgICB2b2lkIHJlbW92ZWF0dHJpYnV0ZSh0aGFy
ZGF0dHJpYnV0ZSAqYSk7CiAgICAgICAgdm9pZCBhZGRvdGhlcnNhdHRyaWJ1dGVzKHR3aXRoaGFy
ZGF0dHIgJm90aGVyKTsKICAgICAgICB2b2lkIGFkZGNvbGxlY3Rpb24obG9jYWw6OnN0cmluZyBj
b25zdCAmbmFtZSx0d2l0aGF0dHIgKmEsYm9vbCBzYXZlKTsKICAgICAgICB2b2lkIHJlbW92ZWNv
bGxlY3Rpb24odHdpdGhhdHRyICphKTsKCiAgICAgICAgdmlydHVhbCB2b2lkIGNoYW5nZWQodGhh
cmRhdHRyaWJ1dGUgKmEpIHt9OwogICAgICAgIHB1YmxpYzoKICAgICAgICB0d2l0aGhhcmRhdHRy
KCk7CiAgICAgICAgdHdpdGhoYXJkYXR0cih0d2l0aGhhcmRhdHRyIGNvbnN0ICZvdGhlcik7CiAg
ICAgICAgdHdpdGhoYXJkYXR0ciAmb3BlcmF0b3I9KHR3aXRoaGFyZGF0dHIgY29uc3QgJik7CiAg
ICAgICAgYm9vbCBmb3JlYWNoKGxvY2FsOjpzdHJpbmcgY29uc3QgJmRpcm5hbWUsdGF0dHJwcm9j
ZXNzb3IgJmRvdGhpcyk7CiAgICAgICAgYm9vbCBmaWxsdmFsdWVzdHJpbmcobG9jYWw6OnN0cmlu
ZyBjb25zdCAmYXR0cm5hbWUsbG9jYWw6OnN0cmluZyAmcyxsb2NhbDo6c3RyaW5nICZ1bml0cyk7
CiAgICAgICAgICAgICAgICByZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6
c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxsb2NhbDo6c3RyaW5nIGNvbnN0ICZzKTsKICAgICAgICAg
ICAgICAgIGJvb2wgcmVhZG9ubHkobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUpOwogICAg
ICAgICAgICAgICAgYm9vbCBkaXJ0eShib29sIHJlc2V0KTsKICAgICAgICAgICAgICAgIHZvaWQg
aW5jKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLGJvb2wgbG90cyk7CiAgICAgICAgICAg
ICAgICB2b2lkIGRlYyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxib29sIGxvdHMpOwog
ICAgICAgICAgICAgICAgYm9vbCBhZGRuYW1lZGF0dHJpYnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0
ICZuYW1lLGxvY2FsOjpzdHJpbmcgY29uc3QgJnZhbHVlKTsKICAgICAgICAgICAgICAgIGJvb2wg
cmVtb3ZlbmFtZWRhdHRyaWJ1dGUobG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSk7CgogICAgICAg
ICAgICAgICAgdm9pZCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqd3JpdGVzdHJlYW0sdW5zaWdu
ZWQgaW50IG9iam5hbWVjcmMpIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBsb2FkKHRyZWFk
c2VyaWFsc3RyZWFtICpyZWFkc3RyZWFtLHVuc2lnbmVkIGludCBvYmpuYW1lY3JjKTsKICAgICAg
ICB2b2lkIGFmdGVybG9hZCgpOwoKICAgICAgICBib29sIGdldGxvZ2luZm8obG9jYWw6OnN0cmlu
ZyBjb25zdCAmYXR0cm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgdm9sYXRpbGUgKiAmYXR0cnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50ICZzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXR0cnZhbHVlcHJpbnRlciBjb25zdCAqJnN0cmNvbnYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsOjpzdHJpbmcgJnVuaXRzKSBjb25zdDsKICAg
IH07CiMgNyAiZW5ncHJvZi5oIiAyCiMgMSAibWFwLmgiIDEKCgoKCiMgMSAiZGVsYW4uaCIgMQoK
CgoKIyAxICJzdGRjeHgvbG9jYWxzdGFjay5oIiAxCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12
My9zdGFjayIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvc3RhY2siIDMKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMSAzCiMgNzIgIi91c3IvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA4NSAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCmlubGluZSBzaXplX3QKX19kZXF1
ZV9idWZfc2l6ZShzaXplX3QgX19zaXplKQp7IHJldHVybiBfX3NpemUgPCA1MTIgPyBzaXplX3Qo
NTEyIC8gX19zaXplKSA6IHNpemVfdCgxKTsgfQojIDEwMSAiL3Vzci9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNz
IF9QdHI+CnN0cnVjdCBfRGVxdWVfaXRlcmF0b3IKewogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9y
PF9UcCwgX1RwJiwgX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1Rw
LCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKICBzdGF0aWMgc2l6ZV90
IF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7
IH0KCiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5
cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVk
ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRl
cjsKICB0eXBlZGVmIF9EZXF1ZV9pdGVyYXRvciBfU2VsZjsKCiAgX1RwKiBfTV9jdXI7CiAgX1Rw
KiBfTV9maXJzdDsKICBfVHAqIF9NX2xhc3Q7CiAgX01hcF9wb2ludGVyIF9NX25vZGU7CgogIF9E
ZXF1ZV9pdGVyYXRvcihfVHAqIF9feCwgX01hcF9wb2ludGVyIF9feSkKICAgIDogX01fY3VyKF9f
eCksIF9NX2ZpcnN0KCpfX3kpLAogICAgICBfTV9sYXN0KCpfX3kgKyBfU19idWZmZXJfc2l6ZSgp
KSwgX01fbm9kZShfX3kpIHt9CiAgX0RlcXVlX2l0ZXJhdG9yKCkgOiBfTV9jdXIoMCksIF9NX2Zp
cnN0KDApLCBfTV9sYXN0KDApLCBfTV9ub2RlKDApIHt9CiAgX0RlcXVlX2l0ZXJhdG9yKGNvbnN0
IGl0ZXJhdG9yJiBfX3gpCiAgICA6IF9NX2N1cihfX3guX01fY3VyKSwgX01fZmlyc3QoX194Ll9N
X2ZpcnN0KSwKICAgICAgX01fbGFzdChfX3guX01fbGFzdCksIF9NX25vZGUoX194Ll9NX25vZGUp
IHt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VyOyB9CiAg
cG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VyOyB9CgogIGRpZmZlcmVu
Y2VfdHlwZSBvcGVyYXRvci0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgewogICAgcmV0dXJuIGRp
ZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKSAqIChfTV9ub2RlIC0gX194Ll9NX25vZGUg
LSAxKSArCiAgICAgIChfTV9jdXIgLSBfTV9maXJzdCkgKyAoX194Ll9NX2xhc3QgLSBfX3guX01f
Y3VyKTsKICB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgKytfTV9jdXI7CiAgICBpZiAo
X01fY3VyID09IF9NX2xhc3QpIHsKICAgICAgX01fc2V0X25vZGUoX01fbm9kZSArIDEpOwogICAg
ICBfTV9jdXIgPSBfTV9maXJzdDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg
b3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArKyp0aGlzOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICBpZiAoX01f
Y3VyID09IF9NX2ZpcnN0KSB7CiAgICAgIF9NX3NldF9ub2RlKF9NX25vZGUgLSAxKTsKICAgICAg
X01fY3VyID0gX01fbGFzdDsKICAgIH0KICAgIC0tX01fY3VyOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
IC0tKnRoaXM7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3IrPShkaWZm
ZXJlbmNlX3R5cGUgX19uKQogIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fbiAr
IChfTV9jdXIgLSBfTV9maXJzdCk7CiAgICBpZiAoX19vZmZzZXQgPj0gMCAmJiBfX29mZnNldCA8
IGRpZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKSkKICAgICAgX01fY3VyICs9IF9fbjsK
ICAgIGVsc2UgewogICAgICBkaWZmZXJlbmNlX3R5cGUgX19ub2RlX29mZnNldCA9CiAgICAgICAg
X19vZmZzZXQgPiAwID8gX19vZmZzZXQgLyBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUo
KSkKICAgICAgICAgICAgICAgICAgIDogLWRpZmZlcmVuY2VfdHlwZSgoLV9fb2Zmc2V0IC0gMSkg
LyBfU19idWZmZXJfc2l6ZSgpKSAtIDE7CiAgICAgIF9NX3NldF9ub2RlKF9NX25vZGUgKyBfX25v
ZGVfb2Zmc2V0KTsKICAgICAgX01fY3VyID0gX01fZmlyc3QgKwogICAgICAgIChfX29mZnNldCAt
IF9fbm9kZV9vZmZzZXQgKiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkpOwogICAg
fQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw
ZSBfX24pIGNvbnN0CiAgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3Rt
cCArPSBfX247CiAgfQoKICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7
IHJldHVybiAqdGhpcyArPSAtX19uOyB9CgogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5
cGUgX19uKSBjb25zdCB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1w
IC09IF9fbjsKICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24p
IGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9CgoKCgoKCgogIHZvaWQgX01fc2V0X25v
ZGUoX01hcF9wb2ludGVyIF9fbmV3X25vZGUpIHsKICAgIF9NX25vZGUgPSBfX25ld19ub2RlOwog
ICAgX01fZmlyc3QgPSAqX19uZXdfbm9kZTsKICAgIF9NX2xhc3QgPSBfTV9maXJzdCArIGRpZmZl
cmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKTsKICB9Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0
IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgY29uc3Qg
X0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feSkKewogIHJldHVybiBfX3guX01f
Y3VyID09IF9feS5fTV9jdXI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWZMLCBj
bGFzcyBfUHRyTCwgY2xhc3MgX1JlZlIsIGNsYXNzIF9QdHJSPgppbmxpbmUgYm9vbApvcGVyYXRv
cj09KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKICAgICAg
ICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmUiwgX1B0clI+JiBfX3kpCnsKICBy
ZXR1cm4gX194Ll9NX2N1ciA9PSBfX3kuX01fY3VyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfUmVmLCBjbGFzcyBfUHRyPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IF9EZXF1
ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVl
X2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBfX3kp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmTCwgY2xhc3MgX1B0ckwsIGNsYXNz
IF9SZWZSLCBjbGFzcyBfUHRyUj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfRGVxdWVf
aXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVl
X2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQp7CiAgcmV0dXJuICEoX194ID09IF9f
eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGlu
ZSBib29sCm9wZXJhdG9yPChjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYg
X194LAogICAgICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBf
X3kpCnsKICByZXR1cm4gKF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlKSA/CiAgICAoX194Ll9N
X2N1ciA8IF9feS5fTV9jdXIpIDogKF9feC5fTV9ub2RlIDwgX195Ll9NX25vZGUpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmTCwgY2xhc3MgX1B0ckwsIGNsYXNzIF9SZWZSLCBj
bGFzcyBfUHRyUj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxf
VHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKICAgICAgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8
X1RwLCBfUmVmUiwgX1B0clI+JiBfX3kpCnsKICByZXR1cm4gKF9feC5fTV9ub2RlID09IF9feS5f
TV9ub2RlKSA/CiAgICAoX194Ll9NX2N1ciA8IF9feS5fTV9jdXIpIDogKF9feC5fTV9ub2RlIDwg
X195Ll9NX25vZGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBf
UHRyPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1Jl
ZiwgX1B0cj4mIF9feCwKICAgICAgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVm
LCBfUHRyPiYgX195KQp7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX1JlZkwsIGNsYXNzIF9QdHJMLCBjbGFzcyBfUmVmUiwgY2xhc3MgX1B0clI+Cmlu
bGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0
ckw+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9Q
dHJSPiYgX195KQp7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCBfRGVx
dWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAgICAgIGNvbnN0IF9EZXF1
ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3kpCnsKICByZXR1cm4gIShfX3kgPCBfX3gp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmTCwgY2xhc3MgX1B0ckwsIGNsYXNz
IF9SZWZSLCBjbGFzcyBfUHRyUj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCBfRGVxdWVf
aXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVl
X2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQp7CiAgcmV0dXJuICEoX195IDwgX194
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5l
IGJvb2wKb3BlcmF0b3I+PShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYg
X194LAogICAgICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBf
X3kpCnsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfUmVmTCwgY2xhc3MgX1B0ckwsIGNsYXNzIF9SZWZSLCBjbGFzcyBfUHRyUj4KaW5saW5lIGJv
b2wKb3BlcmF0b3I+PShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBf
X3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYg
X195KQp7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9Q
dHI+Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBf
UmVmLCBfUHRyPiYgX194KQp7CiAgcmV0dXJuIF9feCArIF9fbjsKfQojIDMzMCAiL3Vzci9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYywgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0RlcXVlX2FsbG9jX2Jhc2UKewpwdWJs
aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCxfQWxsb2M+OjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX0RlcXVlX2FsbG9jX2Jhc2Uo
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19hKSwg
X01fbWFwX2FsbG9jYXRvcihfX2EpLAogICAgICBfTV9tYXAoMCksIF9NX21hcF9zaXplKDApCiAg
e30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwKiwgX0Fs
bG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NYXBfYWxsb2NhdG9yX3R5cGU7CgogIGFs
bG9jYXRvcl90eXBlIF9NX25vZGVfYWxsb2NhdG9yOwogIF9NYXBfYWxsb2NhdG9yX3R5cGUgX01f
bWFwX2FsbG9jYXRvcjsKCiAgX1RwKiBfTV9hbGxvY2F0ZV9ub2RlKCkgewogICAgcmV0dXJuIF9N
X25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsK
ICB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX25vZGUoX1RwKiBfX3ApIHsKICAgIF9NX25vZGVfYWxs
b2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKSk7CiAg
fQogIF9UcCoqIF9NX2FsbG9jYXRlX21hcChzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fbWFw
X2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX21hcChfVHAq
KiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9NX21hcF9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3As
IF9fbik7IH0KCiAgX1RwKiogX01fbWFwOwogIHNpemVfdCBfTV9tYXBfc2l6ZTsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9EZXF1ZV9hbGxvY19iYXNlPF9U
cCwgX0FsbG9jLCB0cnVlPgp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X1RwLF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9
CgogIF9EZXF1ZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9tYXAoMCks
IF9NX21hcF9zaXplKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jPjo6X0FsbG9jX3R5cGUgX05vZGVfYWxsb2NfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwKiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUgX01h
cF9hbGxvY190eXBlOwoKICBfVHAqIF9NX2FsbG9jYXRlX25vZGUoKSB7CiAgICByZXR1cm4gX05v
ZGVfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkpOwog
IH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbm9kZShfVHAqIF9fcCkgewogICAgX05vZGVfYWxsb2Nf
dHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsKICB9
CiAgX1RwKiogX01fYWxsb2NhdGVfbWFwKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTWFwX2Fs
bG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbWFwKF9UcCoq
IF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX01hcF9hbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwg
X19uKTsgfQoKICBfVHAqKiBfTV9tYXA7CiAgc2l6ZV90IF9NX21hcF9zaXplOwp9OwojIDQwNCAi
L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KY2xhc3MgX0RlcXVlX2Jhc2UKICA6IHB1YmxpYyBfRGVxdWVfYWxs
b2NfYmFzZTxfVHAsX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CnB1YmxpYzoKICB0eXBlZGVm
IF9EZXF1ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAg
IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9y
OwogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNv
bnN0X2l0ZXJhdG9yOwoKICBfRGVxdWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hLCBz
aXplX3QgX19udW1fZWxlbWVudHMpCiAgICA6IF9CYXNlKF9fYSksIF9NX3N0YXJ0KCksIF9NX2Zp
bmlzaCgpCiAgICB7IF9NX2luaXRpYWxpemVfbWFwKF9fbnVtX2VsZW1lbnRzKTsgfQogIF9EZXF1
ZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX3N0
YXJ0KCksIF9NX2ZpbmlzaCgpIHt9CiAgfl9EZXF1ZV9iYXNlKCk7Cgpwcm90ZWN0ZWQ6CiAgdm9p
ZCBfTV9pbml0aWFsaXplX21hcChzaXplX3QpOwogIHZvaWQgX01fY3JlYXRlX25vZGVzKF9UcCoq
IF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwogIHZvaWQgX01fZGVzdHJveV9ub2RlcyhfVHAq
KiBfX25zdGFydCwgX1RwKiogX19uZmluaXNoKTsKICBlbnVtIHsgX1NfaW5pdGlhbF9tYXBfc2l6
ZSA9IDggfTsKCnByb3RlY3RlZDoKICBpdGVyYXRvciBfTV9zdGFydDsKICBpdGVyYXRvciBfTV9m
aW5pc2g7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpfRGVxdWVfYmFz
ZTxfVHAsX0FsbG9jPjo6fl9EZXF1ZV9iYXNlKCkKewogIGlmIChfTV9tYXApIHsKICAgIF9NX2Rl
c3Ryb3lfbm9kZXMoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAg
IF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01fbWFwX3NpemUpOwogIH0KfQojIDQ1NCAiL3Vz
ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kdm9pZApfRGVxdWVfYmFzZTxfVHAsX0FsbG9jPjo6X01faW5pdGlhbGl6
ZV9tYXAoc2l6ZV90IF9fbnVtX2VsZW1lbnRzKQp7CiAgc2l6ZV90IF9fbnVtX25vZGVzID0KICAg
IF9fbnVtX2VsZW1lbnRzIC8gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkgKyAxOwoKICBf
TV9tYXBfc2l6ZSA9IG1heCgoc2l6ZV90KSBfU19pbml0aWFsX21hcF9zaXplLCBfX251bV9ub2Rl
cyArIDIpOwogIF9NX21hcCA9IF9NX2FsbG9jYXRlX21hcChfTV9tYXBfc2l6ZSk7CgogIF9UcCoq
IF9fbnN0YXJ0ID0gX01fbWFwICsgKF9NX21hcF9zaXplIC0gX19udW1fbm9kZXMpIC8gMjsKICBf
VHAqKiBfX25maW5pc2ggPSBfX25zdGFydCArIF9fbnVtX25vZGVzOwoKICB0cnkKICAgIHsgX01f
Y3JlYXRlX25vZGVzKF9fbnN0YXJ0LCBfX25maW5pc2gpOyB9CiAgY2F0Y2goLi4uKQogICAgewog
ICAgICBfTV9kZWFsbG9jYXRlX21hcChfTV9tYXAsIF9NX21hcF9zaXplKTsKICAgICAgX01fbWFw
ID0gMDsKICAgICAgX01fbWFwX3NpemUgPSAwOwogICAgICB0aHJvdzsKICAgIH0KCiAgX01fc3Rh
cnQuX01fc2V0X25vZGUoX19uc3RhcnQpOwogIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfX25maW5p
c2ggLSAxKTsKICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9maXJzdDsKICBfTV9maW5p
c2guX01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0ICsKICAgICAgICAgICAgICAgX19udW1fZWxl
bWVudHMgJSBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIF9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9jcmVh
dGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCkKewogIF9UcCoqIF9fY3Vy
OwogIHRyeSB7CiAgICBmb3IgKF9fY3VyID0gX19uc3RhcnQ7IF9fY3VyIDwgX19uZmluaXNoOyAr
K19fY3VyKQogICAgICAqX19jdXIgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgfQogIGNhdGNoKC4u
LikKICAgIHsKICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25zdGFydCwgX19jdXIpOwogICAgICB0
aHJvdzsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCl9E
ZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBf
VHAqKiBfX25maW5pc2gpCnsKICBmb3IgKF9UcCoqIF9fbiA9IF9fbnN0YXJ0OyBfX24gPCBfX25m
aW5pc2g7ICsrX19uKQogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX24pOwp9CiMgNTg4ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2RlcXVlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpjbGFzcyBkZXF1ZSA6IHByb3RlY3RlZCBf
RGVxdWVfYmFzZTxfVHAsIF9BbGxvYz4KewoKIAoKICB0eXBlZGVmIF9EZXF1ZV9iYXNlPF9UcCwg
X0FsbG9jPiBfQmFzZTsKCnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0
X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25z
dCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBl
OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFt
ZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0K
CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnBy
b3RlY3RlZDoKICB0eXBlZGVmIHBvaW50ZXIqIF9NYXBfcG9pbnRlcjsKICBzdGF0aWMgc2l6ZV90
IF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7
IH0KCgogIHVzaW5nIF9CYXNlOjpfTV9pbml0aWFsaXplX21hcDsKICB1c2luZyBfQmFzZTo6X01f
Y3JlYXRlX25vZGVzOwogIHVzaW5nIF9CYXNlOjpfTV9kZXN0cm95X25vZGVzOwogIHVzaW5nIF9C
YXNlOjpfTV9hbGxvY2F0ZV9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlX25vZGU7
CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlX21hcDsKICB1c2luZyBfQmFzZTo6X01fZGVhbGxv
Y2F0ZV9tYXA7CgoKCgoKCgogIHVzaW5nIF9CYXNlOjpfTV9tYXA7CiAgdXNpbmcgX0Jhc2U6Ol9N
X21hcF9zaXplOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmlu
aXNoOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICBjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9maW5pc2gpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9zdGFydCk7IH0KICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25z
dAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihfTV9zdGFydCk7IH0KCiAgcmVm
ZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKICAgIHsgcmV0dXJuIF9NX3N0YXJ0W2Rp
ZmZlcmVuY2VfdHlwZShfX24pXTsgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVf
dHlwZSBfX24pIGNvbnN0CiAgICB7IHJldHVybiBfTV9zdGFydFtkaWZmZXJlbmNlX3R5cGUoX19u
KV07IH0KCiAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICBp
ZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgX190aHJvd19yYW5nZV9lcnJvcigiZGVxdWUi
KTsKICB9CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVj
ayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVf
dHlwZSBfX24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMp
W19fbl07IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKl9NX3N0YXJ0OyB9CiAgcmVm
ZXJlbmNlIGJhY2soKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2ZpbmlzaDsKICAgIC0tX190
bXA7CiAgICByZXR1cm4gKl9fdG1wOwogIH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25z
dCB7IHJldHVybiAqX01fc3RhcnQ7IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsK
ICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX01fZmluaXNoOwogICAgLS1fX3RtcDsKICAgIHJl
dHVybiAqX190bXA7CiAgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2Zp
bmlzaCAtIF9NX3N0YXJ0OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g
c2l6ZV90eXBlKC0xKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2gg
PT0gX01fc3RhcnQ7IH0KCnB1YmxpYzoKICBleHBsaWNpdCBkZXF1ZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hLCAwKSB7fQogIGRl
cXVlKGNvbnN0IGRlcXVlJiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSwgX194LnNp
emUoKSkKICAgIHsgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9N
X3N0YXJ0KTsgfQogIGRlcXVlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFs
dWUsCiAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp
IDogX0Jhc2UoX19hLCBfX24pCiAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZShfX3ZhbHVlKTsgfQoK
ICBleHBsaWNpdAogIGRlcXVlKHNpemVfdHlwZSBfX24pCiAgOiBfQmFzZShhbGxvY2F0b3JfdHlw
ZSgpLCBfX24pCiAgeyBfTV9maWxsX2luaXRpYWxpemUodmFsdWVfdHlwZSgpKTsgfQoKCiAgdGVt
cGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICBkZXF1ZShfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
bnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9J
bnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAg
ICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3Ry
dWVfdHlwZSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZV9tYXAoX19uKTsKICAgICAgX01fZmls
bF9pbml0aWFsaXplKF9feCk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXI+CiAg
ICB2b2lkCiAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0
ZWdvcnk7CiAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNh
dGVnb3J5KCkpOwogICAgfQoKICB+ZGVxdWUoKQogIHsgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2Zp
bmlzaCk7IH0KCiAgZGVxdWUmIG9wZXJhdG9yPSAoY29uc3QgZGVxdWUmIF9feCkgewogICAgY29u
c3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOwogICAgaWYgKCZfX3ggIT0gdGhpcykgewogICAg
ICBpZiAoX19sZW4gPj0gX194LnNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9feC5iZWdpbigp
LCBfX3guZW5kKCksIF9NX3N0YXJ0KSwgX01fZmluaXNoKTsKICAgICAgZWxzZSB7CiAgICAgICAg
Y29uc3RfaXRlcmF0b3IgX19taWQgPSBfX3guYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX2xl
bik7CiAgICAgICAgY29weShfX3guYmVnaW4oKSwgX19taWQsIF9NX3N0YXJ0KTsKICAgICAgICBp
bnNlcnQoX01fZmluaXNoLCBfX21pZCwgX194LmVuZCgpKTsKICAgICAgfQogICAgfQogICAgcmV0
dXJuICp0aGlzOwogIH0KCiAgdm9pZCBzd2FwKGRlcXVlJiBfX3gpIHsKICAgIHN0ZDo6c3dhcChf
TV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9m
aW5pc2gpOwogICAgc3RkOjpzd2FwKF9NX21hcCwgX194Ll9NX21hcCk7CiAgICBzdGQ6OnN3YXAo
X01fbWFwX3NpemUsIF9feC5fTV9tYXBfc2l6ZSk7CiAgfQoKcHVibGljOgoKCgoKCiAgdm9pZCBf
TV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICBpZiAo
X19uID4gc2l6ZSgpKSB7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgICAg
aW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICAgIH0KICAgIGVsc2UgewogICAg
ICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCks
IF9fdmFsKTsKICAgIH0KICB9CgogIHZvaWQKICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X1RwJiBfX3ZhbCkKICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CgogIHRlbXBsYXRl
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAg
ICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg
IH0KCnByaXZhdGU6CgogIHRlbXBsYXRlPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZAogICAgX01f
YXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBl
KQogICAgeyBfTV9maWxsX2Fzc2lnbihzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIHN0YXRp
Y19jYXN0PF9UcD4oX192YWwpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29y
eSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0l0
ZXJDYXRlZ29yeSgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
IHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0g
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgIGlmIChfX2xlbiA+IHNpemUoKSkgewogICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwg
c2l6ZSgpKTsKICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgIGluc2Vy
dChlbmQoKSwgX19taWQsIF9fbGFzdCk7CiAgICB9CiAgICBlbHNlCiAgICAgIGVyYXNlKGNvcHko
X19maXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogIH0KCnB1YmxpYzoKCiAgdm9pZAog
IHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3QpCiAgewogICAgaWYgKF9NX2ZpbmlzaC5f
TV9jdXIgIT0gX01fZmluaXNoLl9NX2xhc3QgLSAxKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmlu
aXNoLl9NX2N1ciwgX190KTsKICAgICAgKytfTV9maW5pc2guX01fY3VyOwogICAgfQogICAgZWxz
ZQogICAgICBfTV9wdXNoX2JhY2tfYXV4KF9fdCk7CiAgfQoKICB2b2lkCiAgcHVzaF9iYWNrKCkK
ICB7CiAgICBpZiAoX01fZmluaXNoLl9NX2N1ciAhPSBfTV9maW5pc2guX01fbGFzdCAtIDEpIHsK
ICAgICAgX0NvbnN0cnVjdChfTV9maW5pc2guX01fY3VyKTsKICAgICAgKytfTV9maW5pc2guX01f
Y3VyOwogICAgfQogICAgZWxzZQogICAgICBfTV9wdXNoX2JhY2tfYXV4KCk7CiAgfQoKICB2b2lk
CiAgcHVzaF9mcm9udChjb25zdCB2YWx1ZV90eXBlJiBfX3QpCiAgewogICAgaWYgKF9NX3N0YXJ0
Ll9NX2N1ciAhPSBfTV9zdGFydC5fTV9maXJzdCkgewogICAgICBfQ29uc3RydWN0KF9NX3N0YXJ0
Ll9NX2N1ciAtIDEsIF9fdCk7CiAgICAgIC0tX01fc3RhcnQuX01fY3VyOwogICAgfQogICAgZWxz
ZQogICAgICBfTV9wdXNoX2Zyb250X2F1eChfX3QpOwogIH0KCiAgdm9pZAogIHB1c2hfZnJvbnQo
KQogIHsKICAgIGlmIChfTV9zdGFydC5fTV9jdXIgIT0gX01fc3RhcnQuX01fZmlyc3QpIHsKICAg
ICAgX0NvbnN0cnVjdChfTV9zdGFydC5fTV9jdXIgLSAxKTsKICAgICAgLS1fTV9zdGFydC5fTV9j
dXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KCk7CiAgfQoKCiAgdm9p
ZAogIHBvcF9iYWNrKCkKICB7CiAgICBpZiAoX01fZmluaXNoLl9NX2N1ciAhPSBfTV9maW5pc2gu
X01fZmlyc3QpIHsKICAgICAgLS1fTV9maW5pc2guX01fY3VyOwogICAgICBfRGVzdHJveShfTV9m
aW5pc2guX01fY3VyKTsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcG9wX2JhY2tfYXV4KCk7CiAg
fQoKICB2b2lkCiAgcG9wX2Zyb250KCkKICB7CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9N
X3N0YXJ0Ll9NX2xhc3QgLSAxKSB7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0Ll9NX2N1cik7CiAg
ICAgICsrX01fc3RhcnQuX01fY3VyOwogICAgfQogICAgZWxzZQogICAgICBfTV9wb3BfZnJvbnRf
YXV4KCk7CiAgfQoKcHVibGljOgoKICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBwb3NpdGlv
biwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogIHsKICAgIGlmIChwb3NpdGlvbi5fTV9jdXIgPT0g
X01fc3RhcnQuX01fY3VyKSB7CiAgICAgIHB1c2hfZnJvbnQoX194KTsKICAgICAgcmV0dXJuIF9N
X3N0YXJ0OwogICAgfQogICAgZWxzZSBpZiAocG9zaXRpb24uX01fY3VyID09IF9NX2ZpbmlzaC5f
TV9jdXIpIHsKICAgICAgcHVzaF9iYWNrKF9feCk7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01f
ZmluaXNoOwogICAgICAtLV9fdG1wOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgICBlbHNl
IHsKICAgICAgcmV0dXJuIF9NX2luc2VydF9hdXgocG9zaXRpb24sIF9feCk7CiAgICB9CiAgfQoK
ICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKQogIHsgcmV0dXJuIGluc2Vy
dChfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlKCkpOyB9CgogIHZvaWQKICBpbnNlcnQoaXRlcmF0b3Ig
X19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7IF9NX2ZpbGxf
aW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgdm9pZAogIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKCiAgdGVt
cGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICBpbnNlcnQoaXRlcmF0b3Ig
X19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9J
bnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJz
dCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnRlZ2Vy
PgogICAgdm9pZAogICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdl
ciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f
cG9zLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+
KF9feCkpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAg
X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJD
YXRlZ29yeTsKICAgICAgaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdv
cnkoKSk7CiAgICB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCB2
YWx1ZV90eXBlJiBfX3gpIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKTsKICAg
IGlmIChfX25ld19zaXplIDwgX19sZW4pCiAgICAgIGVyYXNlKF9NX3N0YXJ0ICsgX19uZXdfc2l6
ZSwgX01fZmluaXNoKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KF9NX2ZpbmlzaCwgX19uZXdfc2l6
ZSAtIF9fbGVuLCBfX3gpOwogIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIG5ld19zaXplKSB7
IHJlc2l6ZShuZXdfc2l6ZSwgdmFsdWVfdHlwZSgpKTsgfQoKcHVibGljOgogIGl0ZXJhdG9yIGVy
YXNlKGl0ZXJhdG9yIF9fcG9zKSB7CiAgICBpdGVyYXRvciBfX25leHQgPSBfX3BvczsKICAgICsr
X19uZXh0OwogICAgc2l6ZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIF9NX3N0YXJ0OwogICAgaWYg
KF9faW5kZXggPCAoc2l6ZSgpID4+IDEpKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX01fc3RhcnQs
IF9fcG9zLCBfX25leHQpOwogICAgICBwb3BfZnJvbnQoKTsKICAgIH0KICAgIGVsc2UgewogICAg
ICBjb3B5KF9fbmV4dCwgX01fZmluaXNoLCBfX3Bvcyk7CiAgICAgIHBvcF9iYWNrKCk7CiAgICB9
CiAgICByZXR1cm4gX01fc3RhcnQgKyBfX2luZGV4OwogIH0KCiAgaXRlcmF0b3IgZXJhc2UoaXRl
cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKICB2b2lkIGNsZWFyKCk7Cgpwcm90ZWN0
ZWQ6CgogIHZvaWQgX01fZmlsbF9pbml0aWFsaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUp
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0
aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCnByb3RlY3RlZDoKCiAgdm9pZCBfTV9w
dXNoX2JhY2tfYXV4KGNvbnN0IHZhbHVlX3R5cGUmKTsKICB2b2lkIF9NX3B1c2hfYmFja19hdXgo
KTsKICB2b2lkIF9NX3B1c2hfZnJvbnRfYXV4KGNvbnN0IHZhbHVlX3R5cGUmKTsKICB2b2lkIF9N
X3B1c2hfZnJvbnRfYXV4KCk7CiAgdm9pZCBfTV9wb3BfYmFja19hdXgoKTsKICB2b2lkIF9NX3Bv
cF9mcm9udF9hdXgoKTsKCnByb3RlY3RlZDoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRl
cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7
CgogIGl0ZXJhdG9yIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5
cGUmIF9feCk7CiAgaXRlcmF0b3IgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvcyk7CiAgdm9p
ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1
ZV90eXBlJiBfX3gpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lk
IF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdHlwZSBfX24pOwoKICBpdGVyYXRvciBfTV9yZXNlcnZlX2VsZW1lbnRz
X2F0X2Zyb250KHNpemVfdHlwZSBfX24pIHsKICAgIHNpemVfdHlwZSBfX3ZhY2FuY2llcyA9IF9N
X3N0YXJ0Ll9NX2N1ciAtIF9NX3N0YXJ0Ll9NX2ZpcnN0OwogICAgaWYgKF9fbiA+IF9fdmFjYW5j
aWVzKQogICAgICBfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQoX19uIC0gX192YWNhbmNpZXMpOwog
ICAgcmV0dXJuIF9NX3N0YXJ0IC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgfQoKICBpdGVyYXRv
ciBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soc2l6ZV90eXBlIF9fbikgewogICAgc2l6ZV90
eXBlIF9fdmFjYW5jaWVzID0gKF9NX2ZpbmlzaC5fTV9sYXN0IC0gX01fZmluaXNoLl9NX2N1cikg
LSAxOwogICAgaWYgKF9fbiA+IF9fdmFjYW5jaWVzKQogICAgICBfTV9uZXdfZWxlbWVudHNfYXRf
YmFjayhfX24gLSBfX3ZhY2FuY2llcyk7CiAgICByZXR1cm4gX01fZmluaXNoICsgZGlmZmVyZW5j
ZV90eXBlKF9fbik7CiAgfQoKICB2b2lkIF9NX25ld19lbGVtZW50c19hdF9mcm9udChzaXplX3R5
cGUgX19uZXdfZWxlbWVudHMpOwogIHZvaWQgX01fbmV3X2VsZW1lbnRzX2F0X2JhY2soc2l6ZV90
eXBlIF9fbmV3X2VsZW1lbnRzKTsKCnByb3RlY3RlZDoKCgoKCgogIHZvaWQgX01fcmVzZXJ2ZV9t
YXBfYXRfYmFjayAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAgaWYgKF9fbm9k
ZXNfdG9fYWRkICsgMSA+IF9NX21hcF9zaXplIC0gKF9NX2ZpbmlzaC5fTV9ub2RlIC0gX01fbWFw
KSkKICAgICAgX01fcmVhbGxvY2F0ZV9tYXAoX19ub2Rlc190b19hZGQsIGZhbHNlKTsKICB9Cgog
IHZvaWQgX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQgKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCA9
IDEpIHsKICAgIGlmIChfX25vZGVzX3RvX2FkZCA+IHNpemVfdHlwZShfTV9zdGFydC5fTV9ub2Rl
IC0gX01fbWFwKSkKICAgICAgX01fcmVhbGxvY2F0ZV9tYXAoX19ub2Rlc190b19hZGQsIHRydWUp
OwogIH0KCiAgdm9pZCBfTV9yZWFsbG9jYXRlX21hcChzaXplX3R5cGUgX19ub2Rlc190b19hZGQs
IGJvb2wgX19hZGRfYXRfZnJvbnQpOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIGRlcXVlPF9UcCwgX0FsbG9j
PgogIDo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2Zp
cnN0KQogICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg
ZXJhc2UoX19jdXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9f
bGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxf
VHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlw
ZSYgX194KQp7CiAgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9zdGFydC5fTV9jdXIpIHsKICAgIGl0
ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwog
ICAgdHJ5IHsKICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbmV3X3N0YXJ0LCBfTV9zdGFydCwg
X194KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIH0KICAgIGNhdGNoKC4uLikK
ICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwgX01f
c3RhcnQuX01fbm9kZSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CiAgZWxzZSBpZiAoX19w
b3MuX01fY3VyID09IF9NX2ZpbmlzaC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2Zpbmlz
aCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgdHJ5IHsKICAgICAgdW5p
bml0aWFsaXplZF9maWxsKF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoLCBfX3gpOwogICAgICBfTV9m
aW5pc2ggPSBfX25ld19maW5pc2g7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAg
ICBfTV9kZXN0cm95X25vZGVzKF9NX2ZpbmlzaC5fTV9ub2RlICsgMSwgX19uZXdfZmluaXNoLl9N
X25vZGUgKyAxKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KICBlbHNlCiAgICBfTV9pbnNl
cnRfYXV4KF9fcG9zLCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KdHlwZW5hbWUgZGVxdWU8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxs
b2M+OjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19m
aXJzdCA9PSBfTV9zdGFydCAmJiBfX2xhc3QgPT0gX01fZmluaXNoKSB7CiAgICBjbGVhcigpOwog
ICAgcmV0dXJuIF9NX2ZpbmlzaDsKICB9CiAgZWxzZSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19u
ID0gX19sYXN0IC0gX19maXJzdDsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9yZSA9
IF9fZmlyc3QgLSBfTV9zdGFydDsKICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fZWxl
bXNfYmVmb3JlKSA8IChzaXplKCkgLSBfX24pIC8gMikgewogICAgICBjb3B5X2JhY2t3YXJkKF9N
X3N0YXJ0LCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9N
X3N0YXJ0ICsgX19uOwogICAgICBfRGVzdHJveShfTV9zdGFydCwgX19uZXdfc3RhcnQpOwogICAg
ICBfTV9kZXN0cm95X25vZGVzKF9NX3N0YXJ0Ll9NX25vZGUsIF9fbmV3X3N0YXJ0Ll9NX25vZGUp
OwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgfQogICAgZWxzZSB7CiAgICAgIGNv
cHkoX19sYXN0LCBfTV9maW5pc2gsIF9fZmlyc3QpOwogICAgICBpdGVyYXRvciBfX25ld19maW5p
c2ggPSBfTV9maW5pc2ggLSBfX247CiAgICAgIF9EZXN0cm95KF9fbmV3X2ZpbmlzaCwgX01fZmlu
aXNoKTsKICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19maW5pc2guX01fbm9kZSArIDEsIF9N
X2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAg
IH0KICAgIHJldHVybiBfTV9zdGFydCArIF9fZWxlbXNfYmVmb3JlOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpjbGVhcigp
CnsKICBmb3IgKF9NYXBfcG9pbnRlciBfX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlICsgMTsKICAg
ICAgIF9fbm9kZSA8IF9NX2ZpbmlzaC5fTV9ub2RlOwogICAgICAgKytfX25vZGUpIHsKICAgIF9E
ZXN0cm95KCpfX25vZGUsICpfX25vZGUgKyBfU19idWZmZXJfc2l6ZSgpKTsKICAgIF9NX2RlYWxs
b2NhdGVfbm9kZSgqX19ub2RlKTsKICB9CgogIGlmIChfTV9zdGFydC5fTV9ub2RlICE9IF9NX2Zp
bmlzaC5fTV9ub2RlKSB7CiAgICBfRGVzdHJveShfTV9zdGFydC5fTV9jdXIsIF9NX3N0YXJ0Ll9N
X2xhc3QpOwogICAgX0Rlc3Ryb3koX01fZmluaXNoLl9NX2ZpcnN0LCBfTV9maW5pc2guX01fY3Vy
KTsKICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9maW5pc2guX01fZmlyc3QpOwogIH0KICBlbHNl
CiAgICBfRGVzdHJveShfTV9zdGFydC5fTV9jdXIsIF9NX2ZpbmlzaC5fTV9jdXIpOwoKICBfTV9m
aW5pc2ggPSBfTV9zdGFydDsKfQojIDExNDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
ZGVxdWUuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8
X1RwLF9BbGxvYz46Ol9NX2ZpbGxfaW5pdGlhbGl6ZShjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVl
KQp7CiAgX01hcF9wb2ludGVyIF9fY3VyOwogIHRyeSB7CiAgICBmb3IgKF9fY3VyID0gX01fc3Rh
cnQuX01fbm9kZTsgX19jdXIgPCBfTV9maW5pc2guX01fbm9kZTsgKytfX2N1cikKICAgICAgdW5p
bml0aWFsaXplZF9maWxsKCpfX2N1ciwgKl9fY3VyICsgX1NfYnVmZmVyX3NpemUoKSwgX192YWx1
ZSk7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX01fZmluaXNoLl9NX2ZpcnN0LCBfTV9maW5pc2gu
X01fY3VyLCBfX3ZhbHVlKTsKICB9CiAgY2F0Y2goLi4uKQogICAgewogICAgICBfRGVzdHJveShf
TV9zdGFydCwgaXRlcmF0b3IoKl9fY3VyLCBfX2N1cikpOwogICAgICB0aHJvdzsKICAgIH0KfQoj
IDExNzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
dm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfTV9pbml0aWFsaXplX21hcCgwKTsKICB0
cnkgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNo
X2JhY2soKl9fZmlyc3QpOwogIH0KICBjYXRjaCguLi4pCiAgICB7CiAgICAgIGNsZWFyKCk7CiAg
ICAgIHRocm93OwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+Ojpf
TV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykKewogIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwog
IF9NX2luaXRpYWxpemVfbWFwKF9fbik7CgogIF9NYXBfcG9pbnRlciBfX2N1cl9ub2RlOwogIHRy
eSB7CiAgICBmb3IgKF9fY3VyX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlOwogICAgICAgICBfX2N1
cl9ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICAgICsrX19jdXJfbm9kZSkgewogICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwg
X1NfYnVmZmVyX3NpemUoKSk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX21p
ZCwgKl9fY3VyX25vZGUpOwogICAgICBfX2ZpcnN0ID0gX19taWQ7CiAgICB9CiAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2guX01fZmlyc3QpOwogIH0KICBj
YXRjaCguLi4pCiAgICB7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBpdGVyYXRvcigqX19jdXJf
bm9kZSwgX19jdXJfbm9kZSkpOwogICAgICB0aHJvdzsKICAgIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfYmFj
a19hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9f
dDsKICBfTV9yZXNlcnZlX21hcF9hdF9iYWNrKCk7CiAgKihfTV9maW5pc2guX01fbm9kZSArIDEp
ID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaC5f
TV9jdXIsIF9fdF9jb3B5KTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01f
bm9kZSArIDEpOwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdDsKICB9
CiAgY2F0Y2goLi4uKQogICAgewogICAgICBfTV9kZWFsbG9jYXRlX25vZGUoKihfTV9maW5pc2gu
X01fbm9kZSArIDEpKTsKICAgICAgdGhyb3c7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfYmFja19hdXgo
KQp7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjaygpOwogICooX01fZmluaXNoLl9NX25vZGUgKyAx
KSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB0cnkgewogICAgX0NvbnN0cnVjdChfTV9maW5pc2gu
X01fY3VyKTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01fbm9kZSArIDEp
OwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdDsKICB9CiAgY2F0Y2go
Li4uKQogICAgewogICAgICBfTV9kZWFsbG9jYXRlX25vZGUoKihfTV9maW5pc2guX01fbm9kZSAr
IDEpKTsKICAgICAgdGhyb3c7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfZnJvbnRfYXV4KGNvbnN0IHZh
bHVlX3R5cGUmIF9fdCkKewogIHZhbHVlX3R5cGUgX190X2NvcHkgPSBfX3Q7CiAgX01fcmVzZXJ2
ZV9tYXBfYXRfZnJvbnQoKTsKICAqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSA9IF9NX2FsbG9jYXRl
X25vZGUoKTsKICB0cnkgewogICAgX01fc3RhcnQuX01fc2V0X25vZGUoX01fc3RhcnQuX01fbm9k
ZSAtIDEpOwogICAgX01fc3RhcnQuX01fY3VyID0gX01fc3RhcnQuX01fbGFzdCAtIDE7CiAgICBf
Q29uc3RydWN0KF9NX3N0YXJ0Ll9NX2N1ciwgX190X2NvcHkpOwogIH0KICBjYXRjaCguLi4pCiAg
ICB7CiAgICAgICsrX01fc3RhcnQ7CiAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKF9NX3N0YXJ0
Ll9NX25vZGUgLSAxKSk7CiAgICAgIHRocm93OwogICAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgp2b2lkCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wdXNoX2Zyb250X2F1
eCgpCnsKICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCgpOwogICooX01fc3RhcnQuX01fbm9kZSAt
IDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBfTV9zdGFydC5fTV9zZXRfbm9k
ZShfTV9zdGFydC5fTV9ub2RlIC0gMSk7CiAgICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5f
TV9sYXN0IC0gMTsKICAgIF9Db25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyKTsKICB9CiAgY2F0Y2go
Li4uKQogICAgewogICAgICArK19NX3N0YXJ0OwogICAgICBfTV9kZWFsbG9jYXRlX25vZGUoKihf
TV9zdGFydC5fTV9ub2RlIC0gMSkpOwogICAgICB0aHJvdzsKICAgIH0KfQoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcG9wX2Jh
Y2tfYXV4KCkKewogIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9maW5pc2guX01fZmlyc3QpOwogIF9N
X2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01fbm9kZSAtIDEpOwogIF9NX2ZpbmlzaC5f
TV9jdXIgPSBfTV9maW5pc2guX01fbGFzdCAtIDE7CiAgX0Rlc3Ryb3koX01fZmluaXNoLl9NX2N1
cik7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8
X1RwLF9BbGxvYz46Ol9NX3BvcF9mcm9udF9hdXgoKQp7CiAgX0Rlc3Ryb3koX01fc3RhcnQuX01f
Y3VyKTsKICBfTV9kZWFsbG9jYXRlX25vZGUoX01fc3RhcnQuX01fZmlyc3QpOwogIF9NX3N0YXJ0
Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUgKyAxKTsKICBfTV9zdGFydC5fTV9jdXIgPSBf
TV9zdGFydC5fTV9maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Omlu
c2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGNvcHkoX19maXJzdCwgX19s
YXN0LCBpbnNlcnRlcigqdGhpcywgX19wb3MpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApkZXF1ZTxf
VHAsX0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5
cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19wb3MuX01fY3VyID09
IF9NX3N0YXJ0Ll9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZl
X2VsZW1lbnRzX2F0X2Zyb250KF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX25ld19zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdf
c3RhcnQ7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZXN0cm95X25v
ZGVzKF9fbmV3X3N0YXJ0Ll9NX25vZGUsIF9NX3N0YXJ0Ll9NX25vZGUpOwogICAgICAgIHRocm93
OwogICAgICB9CiAgfQogIGVsc2UgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9maW5pc2guX01fY3Vy
KSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Jh
Y2soX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAg
IGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fZmluaXNoLl9N
X25vZGUgKyAxLCBfX25ld19maW5pc2guX01fbm9kZSArIDEpOwogICAgICAgIHRocm93OwogICAg
ICB9CiAgfQogIGVsc2UKICAgIF9NX2luc2VydF9hdXgoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwg
X19uKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1
ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4
KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBkaWZmZXJlbmNlX3R5
cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9f
eDsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2luZGV4KSA8IHNpemUoKSAvIDIpIHsK
ICAgIHB1c2hfZnJvbnQoZnJvbnQoKSk7CiAgICBpdGVyYXRvciBfX2Zyb250MSA9IF9NX3N0YXJ0
OwogICAgKytfX2Zyb250MTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQyID0gX19mcm9udDE7CiAgICAr
K19fZnJvbnQyOwogICAgX19wb3MgPSBfTV9zdGFydCArIF9faW5kZXg7CiAgICBpdGVyYXRvciBf
X3BvczEgPSBfX3BvczsKICAgICsrX19wb3MxOwogICAgY29weShfX2Zyb250MiwgX19wb3MxLCBf
X2Zyb250MSk7CiAgfQogIGVsc2UgewogICAgcHVzaF9iYWNrKGJhY2soKSk7CiAgICBpdGVyYXRv
ciBfX2JhY2sxID0gX01fZmluaXNoOwogICAgLS1fX2JhY2sxOwogICAgaXRlcmF0b3IgX19iYWNr
MiA9IF9fYmFjazE7CiAgICAtLV9fYmFjazI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRl
eDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fYmFjazIsIF9fYmFjazEpOwogIH0KICAqX19w
b3MgPSBfX3hfY29weTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4KdHlwZW5hbWUgZGVxdWU8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9U
cCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zKQp7CiAgZGlmZmVyZW5jZV90
eXBlIF9faW5kZXggPSBfX3BvcyAtIF9NX3N0YXJ0OwogIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KF9faW5kZXgpIDwgc2l6ZSgpIC8gMikgewogICAgcHVzaF9mcm9udChmcm9udCgpKTsKICAg
IGl0ZXJhdG9yIF9fZnJvbnQxID0gX01fc3RhcnQ7CiAgICArK19fZnJvbnQxOwogICAgaXRlcmF0
b3IgX19mcm9udDIgPSBfX2Zyb250MTsKICAgICsrX19mcm9udDI7CiAgICBfX3BvcyA9IF9NX3N0
YXJ0ICsgX19pbmRleDsKICAgIGl0ZXJhdG9yIF9fcG9zMSA9IF9fcG9zOwogICAgKytfX3BvczE7
CiAgICBjb3B5KF9fZnJvbnQyLCBfX3BvczEsIF9fZnJvbnQxKTsKICB9CiAgZWxzZSB7CiAgICBw
dXNoX2JhY2soYmFjaygpKTsKICAgIGl0ZXJhdG9yIF9fYmFjazEgPSBfTV9maW5pc2g7CiAgICAt
LV9fYmFjazE7CiAgICBpdGVyYXRvciBfX2JhY2syID0gX19iYWNrMTsKICAgIC0tX19iYWNrMjsK
ICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2luZGV4OwogICAgY29weV9iYWNrd2FyZChfX3Bvcywg
X19iYWNrMiwgX19iYWNrMSk7CiAgfQogICpfX3BvcyA9IHZhbHVlX3R5cGUoKTsKICByZXR1cm4g
X19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxf
VHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKewogIGNvbnN0IGRpZmZl
cmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9yZSA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgc2l6ZV90eXBl
IF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgpOwogIHZhbHVlX3R5cGUgX194X2NvcHkgPSBfX3g7CiAg
aWYgKF9fZWxlbXNfYmVmb3JlIDwgZGlmZmVyZW5jZV90eXBlKF9fbGVuZ3RoIC8gMikpIHsKICAg
IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24p
OwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9fcG9zID0gX01fc3Rh
cnQgKyBfX2VsZW1zX2JlZm9yZTsKICAgIHRyeSB7CiAgICAgIGlmIChfX2VsZW1zX2JlZm9yZSA+
PSBkaWZmZXJlbmNlX3R5cGUoX19uKSkgewogICAgICAgIGl0ZXJhdG9yIF9fc3RhcnRfbiA9IF9N
X3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5
KF9NX3N0YXJ0LCBfX3N0YXJ0X24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfTV9zdGFydCA9IF9f
bmV3X3N0YXJ0OwogICAgICAgIGNvcHkoX19zdGFydF9uLCBfX3BvcywgX19vbGRfc3RhcnQpOwog
ICAgICAgIGZpbGwoX19wb3MgLSBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX19wb3MsIF9feF9jb3B5
KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxs
KF9NX3N0YXJ0LCBfX3BvcywgX19uZXdfc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfTV9zdGFydCwgX194X2NvcHkpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh
cnQ7CiAgICAgICAgZmlsbChfX29sZF9zdGFydCwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQog
ICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25l
d19zdGFydC5fTV9ub2RlLCBfTV9zdGFydC5fTV9ub2RlKTsKICAgICAgICB0aHJvdzsKICAgICAg
fQogIH0KICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxl
bWVudHNfYXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNo
OwogICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPQogICAgICBkaWZmZXJl
bmNlX3R5cGUoX19sZW5ndGgpIC0gX19lbGVtc19iZWZvcmU7CiAgICBfX3BvcyA9IF9NX2Zpbmlz
aCAtIF9fZWxlbXNfYWZ0ZXI7CiAgICB0cnkgewogICAgICBpZiAoX19lbGVtc19hZnRlciA+IGRp
ZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19maW5pc2hfbiA9IF9NX2Zp
bmlzaCAtIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf
X2ZpbmlzaF9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19u
ZXdfZmluaXNoOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fZmluaXNoX24sIF9fb2xk
X2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNlX3R5cGUoX19u
KSwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5pbml0aWFsaXpl
ZF9maWxsX2NvcHkoX01fZmluaXNoLCBfX3BvcyArIGRpZmZlcmVuY2VfdHlwZShfX24pLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX194X2NvcHksIF9fcG9zLCBfTV9maW5pc2gp
OwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBmaWxsKF9fcG9zLCBf
X29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgY2F0Y2goLi4uKQogICAg
ICB7CiAgICAgICAgX01fZGVzdHJveV9ub2RlcyhfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3
X2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19w
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdHlwZSBfX24pCnsKICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc2JlZm9yZSA9IF9f
cG9zIC0gX01fc3RhcnQ7CiAgc2l6ZV90eXBlIF9fbGVuZ3RoID0gc2l6ZSgpOwogIGlmIChzdGF0
aWNfY2FzdDxzaXplX3R5cGU+KF9fZWxlbXNiZWZvcmUpIDwgX19sZW5ndGggLyAyKSB7CiAgICBp
dGVyYXRvciBfX25ld19zdGFydCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsK
ICAgIGl0ZXJhdG9yIF9fb2xkX3N0YXJ0ID0gX01fc3RhcnQ7CiAgICBfX3BvcyA9IF9NX3N0YXJ0
ICsgX19lbGVtc2JlZm9yZTsKICAgIHRyeSB7CiAgICAgIGlmIChfX2VsZW1zYmVmb3JlID49IGRp
ZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19zdGFydF9uID0gX01fc3Rh
cnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01f
c3RhcnQsIF9fc3RhcnRfbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdf
c3RhcnQ7CiAgICAgICAgY29weShfX3N0YXJ0X24sIF9fcG9zLCBfX29sZF9zdGFydCk7CiAgICAg
ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zIC0gZGlmZmVyZW5jZV90eXBlKF9fbikpOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp
cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIGRpZmZlcmVuY2VfdHlwZShfX24pIC0gX19lbGVt
c2JlZm9yZSk7CiAgICAgICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfTV9zdGFydCwgX19w
b3MsIF9fZmlyc3QsIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19u
ZXdfc3RhcnQpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgY29weShf
X21pZCwgX19sYXN0LCBfX29sZF9zdGFydCk7CiAgICAgIH0KICAgIH0KICAgIGNhdGNoKC4uLikK
ICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwgX01f
c3RhcnQuX01fbm9kZSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CiAgZWxzZSB7CiAgICBp
dGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soX19uKTsK
ICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaCA9IF9NX2ZpbmlzaDsKICAgIGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSBfX2VsZW1zYWZ0ZXIgPQogICAgICBkaWZmZXJlbmNlX3R5cGUoX19sZW5ndGgpIC0g
X19lbGVtc2JlZm9yZTsKICAgIF9fcG9zID0gX01fZmluaXNoIC0gX19lbGVtc2FmdGVyOwogICAg
dHJ5IHsKICAgICAgaWYgKF9fZWxlbXNhZnRlciA+IGRpZmZlcmVuY2VfdHlwZShfX24pKSB7CiAg
ICAgICAgaXRlcmF0b3IgX19maW5pc2hfbiA9IF9NX2ZpbmlzaCAtIGRpZmZlcmVuY2VfdHlwZShf
X24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpbmlzaF9uLCBfTV9maW5pc2gsIF9N
X2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgICAgIGNvcHlf
YmFja3dhcmQoX19wb3MsIF9fZmluaXNoX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcG9zKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2Vs
ZW1zYWZ0ZXIpOwogICAgICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX19taWQsIF9fbGFz
dCwgX19wb3MsIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggPSBfX25l
d19maW5pc2g7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3MpOwogICAgICB9CiAg
ICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZXN0cm95X25vZGVzKF9NX2Zp
bmlzaC5fTV9ub2RlICsgMSwgX19uZXdfZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgICB0aHJv
dzsKICAgICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
IGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBlIF9f
bmV3X2VsZW1zKQp7CiAgc2l6ZV90eXBlIF9fbmV3X25vZGVzCiAgICAgID0gKF9fbmV3X2VsZW1z
ICsgX1NfYnVmZmVyX3NpemUoKSAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKTsKICBfTV9yZXNlcnZl
X21hcF9hdF9mcm9udChfX25ld19ub2Rlcyk7CiAgc2l6ZV90eXBlIF9faTsKICB0cnkgewogICAg
Zm9yIChfX2kgPSAxOyBfX2kgPD0gX19uZXdfbm9kZXM7ICsrX19pKQogICAgICAqKF9NX3N0YXJ0
Ll9NX25vZGUgLSBfX2kpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIH0KICBjYXRjaCguLi4pIHsK
ICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDE7IF9faiA8IF9faTsgKytfX2opCiAgICAgIF9NX2Rl
YWxsb2NhdGVfbm9kZSgqKF9NX3N0YXJ0Ll9NX25vZGUgLSBfX2opKTsKICAgIHRocm93OwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxs
b2M+OjpfTV9uZXdfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdfZWxlbXMpCnsKICBz
aXplX3R5cGUgX19uZXdfbm9kZXMKICAgICAgPSAoX19uZXdfZWxlbXMgKyBfU19idWZmZXJfc2l6
ZSgpIC0gMSkgLyBfU19idWZmZXJfc2l6ZSgpOwogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soX19u
ZXdfbm9kZXMpOwogIHNpemVfdHlwZSBfX2k7CiAgdHJ5IHsKICAgIGZvciAoX19pID0gMTsgX19p
IDw9IF9fbmV3X25vZGVzOyArK19faSkKICAgICAgKihfTV9maW5pc2guX01fbm9kZSArIF9faSkg
PSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgfQogIGNhdGNoKC4uLikgewogICAgZm9yIChzaXplX3R5
cGUgX19qID0gMTsgX19qIDwgX19pOyArK19faikKICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKCoo
X01fZmluaXNoLl9NX25vZGUgKyBfX2opKTsKICAgIHRocm93OwogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9yZWFsbG9j
YXRlX21hcChzaXplX3R5cGUgX19ub2Rlc190b19hZGQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgX19hZGRfYXRfZnJvbnQpCnsKICBzaXplX3R5cGUgX19v
bGRfbnVtX25vZGVzID0gX01fZmluaXNoLl9NX25vZGUgLSBfTV9zdGFydC5fTV9ub2RlICsgMTsK
ICBzaXplX3R5cGUgX19uZXdfbnVtX25vZGVzID0gX19vbGRfbnVtX25vZGVzICsgX19ub2Rlc190
b19hZGQ7CgogIF9NYXBfcG9pbnRlciBfX25ld19uc3RhcnQ7CiAgaWYgKF9NX21hcF9zaXplID4g
MiAqIF9fbmV3X251bV9ub2RlcykgewogICAgX19uZXdfbnN0YXJ0ID0gX01fbWFwICsgKF9NX21h
cF9zaXplIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKICAgICAgICAgICAgICAgICAgICAgKyAoX19h
ZGRfYXRfZnJvbnQgPyBfX25vZGVzX3RvX2FkZCA6IDApOwogICAgaWYgKF9fbmV3X25zdGFydCA8
IF9NX3N0YXJ0Ll9NX25vZGUpCiAgICAgIGNvcHkoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNo
Ll9NX25vZGUgKyAxLCBfX25ld19uc3RhcnQpOwogICAgZWxzZQogICAgICBjb3B5X2JhY2t3YXJk
KF9NX3N0YXJ0Ll9NX25vZGUsIF9NX2ZpbmlzaC5fTV9ub2RlICsgMSwKICAgICAgICAgICAgICAg
ICAgICBfX25ld19uc3RhcnQgKyBfX29sZF9udW1fbm9kZXMpOwogIH0KICBlbHNlIHsKICAgIHNp
emVfdHlwZSBfX25ld19tYXBfc2l6ZSA9CiAgICAgIF9NX21hcF9zaXplICsgbWF4KF9NX21hcF9z
aXplLCBfX25vZGVzX3RvX2FkZCkgKyAyOwoKICAgIF9NYXBfcG9pbnRlciBfX25ld19tYXAgPSBf
TV9hbGxvY2F0ZV9tYXAoX19uZXdfbWFwX3NpemUpOwogICAgX19uZXdfbnN0YXJ0ID0gX19uZXdf
bWFwICsgKF9fbmV3X21hcF9zaXplIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKICAgICAgICAgICAg
ICAgICAgICAgICAgICsgKF9fYWRkX2F0X2Zyb250ID8gX19ub2Rlc190b19hZGQgOiAwKTsKICAg
IGNvcHkoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19uc3Rh
cnQpOwogICAgX01fZGVhbGxvY2F0ZV9tYXAoX01fbWFwLCBfTV9tYXBfc2l6ZSk7CgogICAgX01f
bWFwID0gX19uZXdfbWFwOwogICAgX01fbWFwX3NpemUgPSBfX25ld19tYXBfc2l6ZTsKICB9Cgog
IF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbmV3X25zdGFydCk7CiAgX01fZmluaXNoLl9NX3NldF9u
b2RlKF9fbmV3X25zdGFydCArIF9fb2xkX251bV9ub2RlcyAtIDEpOwp9CgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVx
dWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8
X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYm
CiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29t
cGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYg
X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kp
IHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkg
ewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIHZvaWQgc3dhcChkZXF1ZTxfVHAsX0FsbG9jPiYgX194LCBkZXF1ZTxfVHAs
X0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDcxICIvdXNyL2luY2x1ZGUv
ZysrLXYzL3N0YWNrIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3N0YWNr
LmgiIDEgMwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3N0YWNrLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfU2Vx
dWVuY2UgPSBkZXF1ZTxfVHA+ID4KY2xhc3Mgc3RhY2s7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNv
bnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9T
ZXE+CmJvb2wgb3BlcmF0b3I8KGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX194LCBjb25zdCBzdGFj
azxfVHAsX1NlcT4mIF9feSk7CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcXVlbmNl
PgpjbGFzcyBzdGFjawp7CgogCiAKICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVf
dHlwZSBfU2VxdWVuY2VfdmFsdWVfdHlwZTsKICA7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxLCBj
bGFzcyBfU2VxMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBzdGFjazxfVHAxLCBf
U2VxMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrPF9UcDEsIF9TZXEx
PiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfVHAxLCBjbGFzcyBfU2VxMT4KICBmcmllbmQgYm9vbCBv
cGVyYXRvcjwgKGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGFjazxfVHAxLCBfU2VxMT4mKTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
U2VxdWVuY2U6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiBfU2VxdWVuY2UgY29udGFp
bmVyX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rf
cmVmZXJlbmNlOwpwcm90ZWN0ZWQ6CiAgX1NlcXVlbmNlIGM7CnB1YmxpYzoKICBzdGFjaygpIDog
YygpIHt9CiAgZXhwbGljaXQgc3RhY2soY29uc3QgX1NlcXVlbmNlJiBfX3MpIDogYyhfX3MpIHt9
CgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBjLmVtcHR5KCk7IH0KICBzaXplX3R5cGUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGMuc2l6ZSgpOyB9CiAgcmVmZXJlbmNlIHRvcCgpIHsgcmV0
dXJuIGMuYmFjaygpOyB9CiAgY29uc3RfcmVmZXJlbmNlIHRvcCgpIGNvbnN0IHsgcmV0dXJuIGMu
YmFjaygpOyB9CiAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyBjLnB1c2hfYmFj
ayhfX3gpOyB9CiAgdm9pZCBwb3AoKSB7IGMucG9wX2JhY2soKTsgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcj09KGNvbnN0IHN0YWNrPF9UcCxfU2Vx
PiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiBfX3guYyA9PSBf
X3kuYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcjwo
Y29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7
CiAgcmV0dXJuIF9feC5jIDwgX195LmM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9T
ZXE+CmJvb2wgb3BlcmF0b3IhPShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3Rh
Y2s8X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcj4oY29uc3Qgc3RhY2s8X1RwLF9T
ZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7CiAgcmV0dXJuIF9feSA8IF9f
eDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IHN0YWNrPF9UcCxfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewog
IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9TZXE+
CmJvb2wgb3BlcmF0b3I+PShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8
X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp9CiMgNzIgIi91c3Iv
aW5jbHVkZS9nKystdjMvc3RhY2siIDIgMwojIDUgInN0ZGN4eC9sb2NhbHN0YWNrLmgiIDIKCgoK
CgpuYW1lc3BhY2UgbG9jYWwKICAgIHsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIEFMTE9DPXRoZWFwYWxsb2NhdG9yPFQ+ID4KICAgIGNsYXNzIHN0
YWNrIDogcHVibGljIHN0ZDo6c3RhY2s8VCxBTExPQz4KICAgICAgICB7CiAgICAgICAgfTsKCgoK
ICAgIH07CiMgNiAiZGVsYW4uaCIgMgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgpfSW5w
dXRJdGVyIG5lYXJlc3Rwb2ludChfSW5wdXRJdGVyIGZpcnN0LCBfSW5wdXRJdGVyIGxhc3QsaW50
IHRhcmdldHgsaW50IHRhcmdldHkpCiAgICAgICAgewogICAgICAgIF9JbnB1dEl0ZXIgcj1sYXN0
OwogICAgICAgIHVuc2lnbmVkIGludCBtZD0weEZGRkZGRkZGOwogICAgICAgIGZvciAoX0lucHV0
SXRlciBpPWZpcnN0O2khPWxhc3Q7aSsrKQogICAgICAgICAgICAgICAgewogICAgICAgIHVuc2ln
bmVkIGludCBkPWktPmRpc3QyKHRhcmdldHgsdGFyZ2V0eSk7CiAgICAgICAgICAgICAgICBpZiAo
ZDxtZCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBt
ZD1kOwogICAgICAgICAgICAgICAgICAgICAgICByPWk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICByZXR1cm4gcjsKICAgICAgICB9CgpzdHJ1Y3Qg
dHRyaWFuZ2xlCiAgICAgICAgewogICAgICAgIHNob3J0IG5leHQ7CiAgICAgICAgc2hvcnQgdjE7
CiAgICAgICAgc2hvcnQgdjI7CiAgICAgICAgc2hvcnQgdjM7CiAgICAgICAgfTsKCnN0cnVjdCB0
dHJpZ3JvdXAKICAgICAgICB7CiAgICAgICAgc2hvcnQgbHRyZWU7CiAgICAgICAgc2hvcnQgcnRy
ZWU7CiAgICAgICAgc2hvcnQgc3BsaXR4bDsKICAgICAgICBzaG9ydCBzcGxpdHhyOwogICAgICAg
IH07CgpzdHJ1Y3QgdHRyaQogICAgICAgIHsKICAgICAgICB1bmlvbgogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgdHRyaWFuZ2xlIHQ7CiAgICAgICAgICAgICAgICB0dHJpZ3JvdXAg
dGc7CiAgICAgICAgICAgICAgICB9OwogICAgICAgIGJvb2wgcmVhbHRyaWFuZ2xlKCkgY29uc3Qg
e3JldHVybiB0Lm5leHQ+PTA7fTsKICAgICAgICBzaG9ydCBuZXh0aW5jaGFpbigpIGNvbnN0IHty
ZXR1cm4gKHQubmV4dD09MHg3RkZGPy0xOnQubmV4dCk7fTsKICAgICAgICBzaG9ydCBsZWZ0dHJl
ZSgpIGNvbnN0IHtyZXR1cm4gKHRnLmx0cmVlPT0tMT90Zy5sdHJlZToodGcubHRyZWUgJiAweDdG
RkYpKTt9OwogICAgICAgIHNob3J0IHJpZ2h0dHJlZSgpIGNvbnN0IHtyZXR1cm4gKHRnLnJ0cmVl
PT0tMT90Zy5ydHJlZToodGcucnRyZWUgJiAweDdGRkYpKTt9OwogICAgICAgIHZvaWQgc2V0bmV4
dChzaG9ydCBuKSB7dC5uZXh0PShuPT0tMSk/MHg3RkZGOm47fTsKICAgICAgICB2b2lkIHNldGxl
ZnQoc2hvcnQgbikge3RnLmx0cmVlPW58MHg4MDAwO307CiAgICAgICAgdm9pZCBzZXRyaWdodChz
aG9ydCBuKSB7dGcucnRyZWU9bnwweDgwMDA7fTsKICAgICAgICB9OwoKCmludCBoYWxmc3BhY2Uo
c2hvcnQgYXgsc2hvcnQgYXksc2hvcnQgYngsc2hvcnQgYnksc2hvcnQgdHgsc2hvcnQgdHkpOwpi
b29sIGludHJpYW5nbGUoc2hvcnQgYXgsc2hvcnQgYXksc2hvcnQgYngsc2hvcnQgYnksc2hvcnQg
Y3gsc2hvcnQgY3ksc2hvcnQgdHgsc2hvcnQgdHksaW50ICpqb3V0LGludCAqa291dCk7CmludCBz
d2FwZGlhZyhzaG9ydCB4MSxzaG9ydCB5MSxzaG9ydCB4MixzaG9ydCB5MixzaG9ydCB4MyxzaG9y
dCB5MyxzaG9ydCB4NCxzaG9ydCB5NCk7CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgWFlDT0xMRUNUPiBj
bGFzcyB0dHJpYW5ndWxhdGlvbgogICAgICAgIHsKICAgIHByaXZhdGU6CiAgICAgICAgWFlDT0xM
RUNUIGNvbnN0ICZwb2ludHM7CgogICAgICAgIHR5cGVkZWYgbG9jYWw6OnZlY3Rvcjx0dHJpPiB0
cmlzdHlwZTsKICAgICAgICB0cmlzdHlwZSB0cmlzOwogICAgICAgIHNob3J0IGZyZWV0cmlsaXN0
OwoKICAgICAgICAgICAgICAgIHR5cGVkZWYgbG9jYWw6OnZlY3RvcjxzaG9ydD4gY29udmh1bGx0
eXBlOwogICAgICAgIGNvbnZodWxsdHlwZSBjb252aHVsbDsKCiAgICAgICAgaW50IGhlYWR0cmk7
CgogICAgICAgIGJvb2wgdHJpYW5ndWxhdGVwZW5kaW5nOwogICAgICAgICAgICAgICAgdm9pZCB0
cmlhbmd1bGF0ZSgpOwoKICAgICAgICBib29sIGlzbGVmdHRhbmdlbnQoc2hvcnQgbG93LHNob3J0
IGhpZ2gsc2hvcnQgY3VycixzaG9ydCBjdXJyZml4ZWQpOwogICAgICAgIGJvb2wgaXNyaWdodHRh
bmdlbnQoc2hvcnQgbG93LHNob3J0IGhpZ2gsc2hvcnQgY3VycixzaG9ydCBjdXJyZml4ZWQpOwog
ICAgICAgIGludCBmaW5kdHJpKHNob3J0IHRuLHNob3J0IGEsc2hvcnQgYixzaG9ydCAqb3RoZXJw
b2ludCxzaG9ydCAqcHJldnRyaSk7CiAgICAgICAgaW5saW5lIHZvaWQgZGVsYW5kYnVpbGRtZXJn
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgdHJpYW5nbGVzb25sZWZ0LAogICAgICAg
ICAgICAgICAgICAgICAgICBzaG9ydCB0cmlhbmdsZXNvbnJpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICBzaG9ydCAqdHJpb3V0LAogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBjaDEs
CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGNoMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBidWlsZGZvcnJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGMxY29s
aW5lYXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYzJjb2xpbmVhciwKICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCAqcmVzdWx0Y29saW5lYXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNob3J0ICpsZWRnZXEsCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpyZWRnZXEp
OwogICAgICAgIHNob3J0IGFsbG9jdHJpKCk7CiAgICAgICAgdm9pZCBkZWx0cmkoc2hvcnQgZGVs
LHNob3J0ICZoZWFkcmVmLHNob3J0IHByZXZ0cmkpOwogICAgcHVibGljOgoKICAgICAgICAgICAg
ICAgIHR0cmlhbmd1bGF0aW9uKFhZQ09MTEVDVCBjb25zdCAmeHkpOwogICAgICAgIHZvaWQgaW52
YWxpZGF0ZSgpIHt0cmlhbmd1bGF0ZXBlbmRpbmc9dHJ1ZTt9CgogICAgICAgICAgICAgICAgaW50
IGZpbmRpbnRyaShzaG9ydCB4LHNob3J0IHksaW50ICpqb3V0LGludCAqa291dCkgY29uc3Q7CiAg
ICAgICAgICAgICAgICBpbnQgdHJpYW5nbGVpbnRlcnBvbGF0ZShpbnQgdGFyZ2V0eCxpbnQgdGFy
Z2V0eSxib29sICpvaykgY29uc3Q7CiAgICAgICAgICAgICAgICBib29sIHRyaWFuZ2xlcG9pbnRz
KCBpbnQgdGFyZ2V0eCxpbnQgdGFyZ2V0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICppLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICppd2VpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgKmp3ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqa3dlaWdodAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKSBjb25zdDsKCiAgICAgICAgICAgICAgICBjbGFzcyB0cmlh
bmdsZWl0ZXJhdG9yCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dHJpYW5ndWxh
dGlvbiBjb25zdCAmbzsKICAgICAgICAgICAgICAgIGxvY2FsOjpzdGFjazxpbnQ+IGRmc3N0YWNr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJyZW50dHJpOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyaWFuZ2xlaXRlcmF0b3IodHRyaWFuZ3VsYXRpb24gY29uc3QgJmEpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB0dHJpICZvcGVyYXRvciAqKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBvLnRyaXNbY3VycmVudHRyaV07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHR0cmkgKm9wZXJhdG9yIC0+KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAmb3BlcmF0b3IgKigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZWl0ZXJhdG9yICZvcGVy
YXRvcisrKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlaXRlcmF0
b3IgJm9wZXJhdG9yKysoaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dG9yKysoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvaygpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKGN1cnJlbnR0cmk+PTApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgdHlwZWRl
ZiBjb252aHVsbHR5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnZodWxsaXRlcmF0b3I7CiAgICAgICBj
b252aHVsbGl0ZXJhdG9yIGJlZ2luaHVsbCgpIGNvbnN0CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIGNvbnZodWxsLmJlZ2luKCk7CiAgICAgICAgICAgIH07CgogICAgICAgY29udmh1
bGxpdGVyYXRvciBlbmRodWxsKCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gY29udmh1bGwuZW5kKCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCnRlbXBsYXRlIDxj
bGFzcyBYWUNPTExFQ1Q+IGJvb2wgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD4gOjppc2xlZnR0
YW5nZW50KHNob3J0IGxvdyxzaG9ydCBoaWdoLHNob3J0IGN1cnIsc2hvcnQgY3VycmZpeGVkKQoK
ICAgICAgICB7CiAgICAgICAgc2hvcnQgZng9cG9pbnRzW2NvbnZodWxsW2N1cnJmaXhlZF1dLng7
CiAgICAgICAgc2hvcnQgZnk9cG9pbnRzW2NvbnZodWxsW2N1cnJmaXhlZF1dLnk7CgogICAgICAg
IHNob3J0IG5wPWN1cnIrMTsKICAgICAgICBzaG9ydCBwcD1jdXJyLTE7CiAgICAgICAgaWYgKG5w
Pj1oaWdoKQogICAgICAgICAgICAgICAgbnA9bG93OwogICAgICAgIGlmIChwcDxsb3cpCiAgICAg
ICAgICAgICAgICBwcD1oaWdoLTE7CgogICAgICAgIHNob3J0IGN4PXBvaW50c1tjb252aHVsbFtj
dXJyXV0ueDsKICAgICAgICBzaG9ydCBjeT1wb2ludHNbY29udmh1bGxbY3Vycl1dLnk7CgogICAg
ICAgIHNob3J0IHB4PXBvaW50c1tjb252aHVsbFtwcF1dLng7CiAgICAgICAgc2hvcnQgcHk9cG9p
bnRzW2NvbnZodWxsW3BwXV0ueTsKICAgICAgICBzaG9ydCBoc3A9aGFsZnNwYWNlKGZ4LGZ5LGN4
LGN5LHB4LHB5KTsKCiAgICAgICAgc2hvcnQgbng9cG9pbnRzW2NvbnZodWxsW25wXV0ueDsKICAg
ICAgICBzaG9ydCBueT1wb2ludHNbY29udmh1bGxbbnBdXS55OwogICAgICAgIHNob3J0IGhzbj1o
YWxmc3BhY2UoZngsZnksY3gsY3ksbngsbnkpOwoKICAgICAgICBpZiAoaHNuPT0tMSAmJiBoc3A8
PTApCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBlbHNlIGlmIChoc248PTAg
JiYgaHNwPT0tMSkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWFlD
T0xMRUNUPiBib29sIHR0cmlhbmd1bGF0aW9uIDxYWUNPTExFQ1Q+IDo6aXNyaWdodHRhbmdlbnQo
c2hvcnQgbG93LHNob3J0IGhpZ2gsc2hvcnQgY3VycixzaG9ydCBjdXJyZml4ZWQpCgogICAgICAg
IHsKICAgICAgICBzaG9ydCBmeD1wb2ludHNbY29udmh1bGxbY3VycmZpeGVkXV0ueDsKICAgICAg
ICBzaG9ydCBmeT1wb2ludHNbY29udmh1bGxbY3VycmZpeGVkXV0ueTsKCiAgICAgICAgc2hvcnQg
bnA9Y3VycisxOwogICAgICAgIHNob3J0IHBwPWN1cnItMTsKICAgICAgICBpZiAobnA+PWhpZ2gp
CiAgICAgICAgICAgICAgICBucD1sb3c7CiAgICAgICAgaWYgKHBwPGxvdykKICAgICAgICAgICAg
ICAgIHBwPWhpZ2gtMTsKCiAgICAgICAgc2hvcnQgY3g9cG9pbnRzW2NvbnZodWxsW2N1cnJdXS54
OwogICAgICAgIHNob3J0IGN5PXBvaW50c1tjb252aHVsbFtjdXJyXV0ueTsKCiAgICAgICAgc2hv
cnQgcHg9cG9pbnRzW2NvbnZodWxsW3BwXV0ueDsKICAgICAgICBzaG9ydCBweT1wb2ludHNbY29u
dmh1bGxbcHBdXS55OwogICAgICAgIHNob3J0IGhzcD1oYWxmc3BhY2UoZngsZnksY3gsY3kscHgs
cHkpOwoKICAgICAgICBzaG9ydCBueD1wb2ludHNbY29udmh1bGxbbnBdXS54OwogICAgICAgIHNo
b3J0IG55PXBvaW50c1tjb252aHVsbFtucF1dLnk7CiAgICAgICAgc2hvcnQgaHNuPWhhbGZzcGFj
ZShmeCxmeSxjeCxjeSxueCxueSk7CgogICAgICAgIGlmIChoc249PTEgJiYgaHNwPj0wKQogICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgZWxzZSBpZiAoaHNuPj0wICYmIGhzcD09
MSkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWFlDT0xMRUNUPiBp
bnQgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD4gOjpmaW5kdHJpKHNob3J0IHRuLHNob3J0IGEs
c2hvcnQgYixzaG9ydCAqb3RoZXJwb2ludCxzaG9ydCAqcHJldnRyaSkKICAgICAgICB7CiAgICAg
ICAgc2hvcnQgdD10bjsKICAgICAgICAqcHJldnRyaT0tMTsKCiAgICAgICAgc2hvcnQgeDE9cG9p
bnRzW2FdLng7CiAgICAgICAgc2hvcnQgeDI9cG9pbnRzW2JdLng7CiAgICAgICAgd2hpbGUgKHQ+
PTApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgd2hpbGUgKHRyaXNbdF0ucmVh
bHRyaWFuZ2xlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyaXNbdF0udC52MT09YSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyaXNbdF0udC52Mj09YikK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpvdGhlcnBvaW50PXRyaXNbdF0udC52MzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHRyaXNbdF0udC52Mz09YikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpv
dGhlcnBvaW50PXRyaXNbdF0udC52MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodHJpc1t0XS50LnYyPT1hKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJpc1t0XS50LnYxPT1i
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKm90aGVycG9pbnQ9dHJpc1t0XS50LnYzOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodHJpc1t0XS50LnYzPT1iKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Km90aGVycG9pbnQ9dHJpc1t0XS50LnYxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0cmlzW3RdLnQudjM9PWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmlzW3RdLnQudjE9
PWIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3RoZXJwb2ludD10cmlzW3RdLnQudjI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmICh0cmlzW3RdLnQudjI9PWIpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqb3RoZXJwb2ludD10cmlzW3RdLnQudjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICpwcmV2dHJpPXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHQ9dHJpc1t0XS5uZXh0
aW5jaGFpbigpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodDwwKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
CiAgICAgICAgICAgICAgICBpZiAoeDE8PXRyaXNbdF0udGcuc3BsaXR4bCAmJiB4Mjw9dHJpc1t0
XS50Zy5zcGxpdHhsKQogICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAg
ICAgICAgICAqcHJldnRyaT10OwogICAgICAgICAgICAgICAgICAgICAgICB0PXRyaXNbdF0ubGVm
dHRyZWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBp
ZiAoeDE+PXRyaXNbdF0udGcuc3BsaXR4ciAmJiB4Mj49dHJpc1t0XS50Zy5zcGxpdHhyKQogICAg
ICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcHJldnRyaT10
OwogICAgICAgICAgICAgICAgICAgICAgICB0PXRyaXNbdF0ucmlnaHR0cmVlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICAg
IH0KCnRlbXBsYXRlIDxjbGFzcyBYWUNPTExFQ1Q+IHR0cmlhbmd1bGF0aW9uIDxYWUNPTExFQ1Q+
Ojp0dHJpYW5ndWxhdGlvbihYWUNPTExFQ1QgY29uc3QgJnh5KQogICAgOgogICAgcG9pbnRzKHh5
KSwKICAgIHRyaWFuZ3VsYXRlcGVuZGluZyh0cnVlKQogICAgewogICAgfQoKdGVtcGxhdGUgPGNs
YXNzIFhZQ09MTEVDVD4gaW50IHR0cmlhbmd1bGF0aW9uIDxYWUNPTExFQ1Q+Ojp0dHJpYW5ndWxh
dGlvbjo6ZmluZGludHJpKHNob3J0IHgsc2hvcnQgeSxpbnQgKmpvdXQsaW50ICprb3V0KSBjb25z
dAogICAgICAgIHsKICAgIGlmICh0cmlhbmd1bGF0ZXBlbmRpbmcpCiAgICAgICAgY29uc3RfY2Fz
dDx0dHJpYW5ndWxhdGlvbiA8WFlDT0xMRUNUPiAqPih0aGlzKS0+dHJpYW5ndWxhdGUoKTsKCiAg
ICAgICAgc2hvcnQgdD1oZWFkdHJpOwoKICAgICAgICB3aGlsZSAodD49MCkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIHdoaWxlICh0cmlzW3RdLnJlYWx0cmlhbmdsZSgpKQogICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Pj1wb2lu
dHNbdHJpc1t0XS50LnYxXS54ICYmIHg8PXBvaW50c1t0cmlzW3RdLnQudjNdLngpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeT49cG9pbnRzW3RyaXNbdF0udC52MV0ueSB8fCB5Pj1wb2ludHNbdHJpc1t0XS50LnYy
XS55IHx8IHk+PXBvaW50c1t0cmlzW3RdLnQudjNdLnkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHk8PXBvaW50c1t0cmlzW3RdLnQudjFdLnkgfHwgeTw9cG9pbnRzW3RyaXNbdF0udC52
Ml0ueSB8fCB5PD1wb2ludHNbdHJpc1t0XS50LnYzXS55KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW50cmlhbmdsZSggcG9pbnRzW3RyaXNbdF0udC52MV0u
eCxwb2ludHNbdHJpc1t0XS50LnYxXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3RyaXNbdF0udC52Ml0ueCxw
b2ludHNbdHJpc1t0XS50LnYyXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3RyaXNbdF0udC52M10ueCxwb2lu
dHNbdHJpc1t0XS50LnYzXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeCx5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam91dCxrb3V0KSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdD10cmlzW3RdLm5leHRpbmNo
YWluKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0PDApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg
ICAgICAgICAgICAgaWYgKHg8PXRyaXNbdF0udGcuc3BsaXR4bCkKICAgICAgICAgICAgICAgICAg
ICAgICAgdD10cmlzW3RdLmxlZnR0cmVlKCk7CiAgICAgICAgICAgICAgICBlbHNlIGlmICh4Pj10
cmlzW3RdLnRnLnNwbGl0eHIpCiAgICAgICAgICAgICAgICAgICAgICAgIHQ9dHJpc1t0XS5yaWdo
dHRyZWUoKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIC0xOwogICAgICAgICAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgICB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgWFlDT0xMRUNUPiBpbnQgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD46
OnRyaWFuZ2xlaW50ZXJwb2xhdGUoaW50IHRhcmdldHgsaW50IHRhcmdldHksYm9vbCAqb2spIGNv
bnN0CiAgICAgICAgewogICAgaWYgKHRyaWFuZ3VsYXRlcGVuZGluZykKICAgICAgICBjb25zdF9j
YXN0PHR0cmlhbmd1bGF0aW9uIDxYWUNPTExFQ1Q+ICo+KHRoaXMpLT50cmlhbmd1bGF0ZSgpOwoK
ICAgICAgICBpbnQgam91dCxrb3V0OwogICAgICAgIGludCB0PWZpbmRpbnRyaSh0YXJnZXR4LHRh
cmdldHksJmpvdXQsJmtvdXQpOwogICAgICAgIGlmICh0IT0tMSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICpvaz10cnVlOwogICAgICAgICAgICAgICAgaW50IGlvdXQ9NjU1MzYt
am91dC1rb3V0OwogICAgICAgICAgICAgICAgcmV0dXJuIGlzY2FsZShwb2ludHNbdHJpc1t0XS50
LnYxXS56LGlvdXQsNjU1MzYpKwogICAgICAgICAgICAgICAgICAgICAgICBpc2NhbGUocG9pbnRz
W3RyaXNbdF0udC52Ml0ueixqb3V0LDY1NTM2KSsKICAgICAgICAgICAgICAgICAgICAgICAgaXNj
YWxlKHBvaW50c1t0cmlzW3RdLnQudjNdLnosa291dCw2NTUzNik7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgKm9rPWZhbHNlOwogICAgICAgIH0KCnRlbXBs
YXRlIDxjbGFzcyBYWUNPTExFQ1Q+IGJvb2wgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD4gOjp0
cmlhbmdsZXBvaW50cyggaW50IHRhcmdldHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXR5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ICprLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKml3ZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAqandlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICprd2VpZ2h0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkg
Y29uc3QKICAgICAgICB7CiAgICBpZiAodHJpYW5ndWxhdGVwZW5kaW5nKQogICAgICAgIGNvbnN0
X2Nhc3Q8dHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD4gKj4odGhpcyktPnRyaWFuZ3VsYXRlKCk7
CgogICAgICAgIGludCBqb3V0LGtvdXQ7CiAgICAgICAgaW50IHQ9ZmluZGludHJpKHRhcmdldHgs
dGFyZ2V0eSwmam91dCwma291dCk7CiAgICAgICAgaWYgKHQhPS0xKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgKmk9dHJpc1t0XS50LnYxOwogICAgICAgICAgICAgICAgKml3ZWln
aHQ9NjU1MzYtam91dC1rb3V0OwogICAgICAgICAgICAgICAgKmo9dHJpc1t0XS50LnYyOwogICAg
ICAgICAgICAgICAgKmp3ZWlnaHQ9am91dDsKICAgICAgICAgICAgICAgICprPXRyaXNbdF0udC52
MzsKICAgICAgICAgICAgICAgICprd2VpZ2h0PWtvdXQ7CiAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFhZQ09MTEVDVD4gc2hv
cnQgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD46OmFsbG9jdHJpKCkKICAgICAgICB7CiAgICAg
ICAgaWYgKGZyZWV0cmlsaXN0PT0tMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGludCBuPXRyaXMuc2l6ZSgpOwogICAgICAgICAgICAgICAgdHRyaSBkdW1teXRyaTsKICAgICAg
ICAgICAgICAgIHRyaXMucHVzaF9iYWNrKGR1bW15dHJpKTsKICAgICAgICAgICAgICAgIHJldHVy
biBuOwogICAgICAgICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIHNob3J0IHI9ZnJlZXRyaWxpc3Q7CiAgICAgICAgICAgICAgICBmcmVldHJp
bGlzdD10cmlzW2ZyZWV0cmlsaXN0XS5uZXh0aW5jaGFpbigpOwogICAgICAgICAgICAgICAgcmV0
dXJuIHI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKdGVtcGxhdGUgPGNsYXNzIFhZQ09M
TEVDVD4gdm9pZCB0dHJpYW5ndWxhdGlvbiA8WFlDT0xMRUNUPjo6ZGVsdHJpKHNob3J0IGRlbCxz
aG9ydCAmaGVhZHJlZixzaG9ydCBwcmV2dHJpKQogICAgICAgIHsKICAgICAgICBpZiAoaGVhZHJl
Zj09ZGVsKQogICAgICAgICAgICAgICAgaGVhZHJlZj10cmlzW2RlbF0ubmV4dGluY2hhaW4oKTsK
ICAgICAgICBlbHNlIGlmICh0cmlzW3ByZXZ0cmldLnJlYWx0cmlhbmdsZSgpKQogICAgICAgICAg
ICAgICAgdHJpc1twcmV2dHJpXS5zZXRuZXh0KHRyaXNbZGVsXS5uZXh0aW5jaGFpbigpKTsKICAg
ICAgICBlbHNlIGlmICh0cmlzW3ByZXZ0cmldLmxlZnR0cmVlKCk9PWRlbCkKICAgICAgICAgICAg
ICAgIHRyaXNbcHJldnRyaV0uc2V0bGVmdCh0cmlzW2RlbF0ubmV4dGluY2hhaW4oKSk7CiAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgdHJpc1twcmV2dHJpXS5zZXRyaWdodCh0cmlzW2RlbF0u
bmV4dGluY2hhaW4oKSk7CgogICAgICAgIHRyaXNbZGVsXS5zZXRuZXh0KGZyZWV0cmlsaXN0KTsK
ICAgICAgICBmcmVldHJpbGlzdD1kZWw7CiAgICAgICAgfQoKdGVtcGxhdGUgPGNsYXNzIFhZQ09M
TEVDVD4gdm9pZCB0dHJpYW5ndWxhdGlvbiA8WFlDT0xMRUNUPjo6ZGVsYW5kYnVpbGRtZXJnZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgdHJpYW5nbGVzb25sZWZ0LAogICAgICAgICAg
ICAgICAgICAgICAgICBzaG9ydCB0cmlhbmdsZXNvbnJpZ2h0LAogICAgICAgICAgICAgICAgICAg
ICAgICBzaG9ydCAqdHJpb3V0LAogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBjaDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGNoMiwKICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBidWlsZGZvcnJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGMxY29saW5l
YXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYzJjb2xpbmVhciwKICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCAqcmVzdWx0Y29saW5lYXIsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNob3J0ICpsZWRnZXEsCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpyZWRnZXEpCiAg
ICAgICAgewogICAgICAgIGludCBjaG49Y29udmh1bGwuc2l6ZSgpOwoKICAgICAgICBpZiAoYzFj
b2xpbmVhciAmJiBjMmNvbGluZWFyICYmIGhhbGZzcGFjZShwb2ludHNbY29udmh1bGxbY2gxXV0u
eCxwb2ludHNbY29udmh1bGxbY2gxXV0ueSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnRzW2NvbnZodWxsW2NoMi0xXV0ueCxwb2ludHNbY29udmh1
bGxbY2gyLTFdXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwb2ludHNbY29udmh1bGxbY2gyXV0ueCxwb2ludHNbY29udmh1bGxbY2gyXV0ueSk9PTAg
JiYKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbGZz
cGFjZShwb2ludHNbY29udmh1bGxbY2gxXV0ueCxwb2ludHNbY29udmh1bGxbY2gxXV0ueSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2NvbnZo
dWxsW2NoMi0xXV0ueCxwb2ludHNbY29udmh1bGxbY2gyLTFdXS55LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbY29udmh1bGwuYmFjaygpXS54
LHBvaW50c1tjb252aHVsbC5iYWNrKCldLnkpPT0wICkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICpyZXN1bHRjb2xpbmVhcj10cnVlOwoKCgogICAgICAgICAgICAgICAgc2hvcnQg
Y3BsLGNwcjsKICAgICAgICAgICAgICAgIGlmIChidWlsZGZvcnJpZ2h0KQogICAgICAgICAgICAg
ICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBjcGw9Y2gyLTE7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChjcGw+PWNoMSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbY3BsLS1dKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgY3ByPWNoMjsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNwcjxj
aG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNv
bnZodWxsW2NwcisrXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGVsc2UKCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Y3ByPWNobi0xOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3ByPj1jaDIpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNvbnZodWxsW2Nw
ci0tXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNwbD1jaDE7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChjcGw8Y2gyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnZodWxsLnB1c2hfYmFjayhjb252aHVsbFtjcGwrK10pOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAqdHJpb3V0PS0xOwogICAgICAgICAgICAgICAgfQogICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICpyZXN1bHRjb2xpbmVhcj1m
YWxzZTsKCgogICAgICAgICAgICAgICAgc2hvcnQgY3BsPWNoMTsKICAgICAgICAgICAgICAgIHNo
b3J0IGNwcj1jaDI7CgogICAgICAgICAgICAgICAgYm9vbCBsdGw7CiAgICAgICAgICAgICAgICBi
b29sIGx0cjsKICAgICAgICAgICAgICAgIGx0bD1pc3JpZ2h0dGFuZ2VudChjaDEsY2gyLGNwbCxj
cHIpOwogICAgICAgICAgICAgICAgbHRyPWlzbGVmdHRhbmdlbnQoY2gyLGNobixjcHIsY3BsKTsK
ICAgICAgICAgICAgICAgIHdoaWxlICghKGx0bCAmJiBsdHIpKQogICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbHRsKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNwbCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNwbD09Y2gyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNwbD1jaDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGx0bD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0bD1pc3Jp
Z2h0dGFuZ2VudChjaDEsY2gyLGNwbCxjcHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghbHRs
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdHI9aXNsZWZ0dGFuZ2VudChjaDIs
Y2huLGNwcixjcGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghbHRyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNwcisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGNwcj09Y2huKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwcj1j
aDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0cj10
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0cj1pc2xlZnR0YW5nZW50KGNoMixj
aG4sY3ByLGNwbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFsdHIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGx0bD1pc3JpZ2h0dGFuZ2VudChjaDEsY2gyLGNwbCxjcHIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgc2hvcnQgbG93ZXJsZWZ0PWNwbDsKICAgICAgICAgICAgICAgIHNo
b3J0IGxvd2VycmlnaHQ9Y3ByOwoKICAgICAgICAgICAgICAgIGNwbD1jaDE7CiAgICAgICAgICAg
ICAgICBjcHI9Y2gyOwoKICAgICAgICAgICAgICAgIGJvb2wgdXRsOwogICAgICAgICAgICAgICAg
Ym9vbCB1dHI7CiAgICAgICAgICAgICAgICB1dGw9aXNsZWZ0dGFuZ2VudChjaDEsY2gyLGNwbCxj
cHIpOwogICAgICAgICAgICAgICAgdXRyPWlzcmlnaHR0YW5nZW50KGNoMixjaG4sY3ByLGNwbCk7
CiAgICAgICAgICAgICAgICB3aGlsZSAoISh1dGwgJiYgdXRyKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0bCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcGwtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjcGw8Y2gxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcGw9Y2gyLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY3BsPT1jaDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHV0bD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1dGw9aXNsZWZ0dGFuZ2VudChjaDEsY2gyLGNwbCxjcHIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlICghdXRsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dHI9aXNyaWdo
dHRhbmdlbnQoY2gyLGNobixjcHIsY3BsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRyKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNwci0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNwcjxjaDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNwcj1jaG4tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjcHI9PWNoMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXRyPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHV0cj1pc3JpZ2h0dGFuZ2VudChjaDIsY2huLGNwcixjcGwpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICghdXRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGw9aXNsZWZ0dGFu
Z2VudChjaDEsY2gyLGNwbCxjcHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNob3J0IHVwcGVybGVm
dD1jcGw7CiAgICAgICAgICAgICAgICBzaG9ydCB1cHBlcnJpZ2h0PWNwcjsKCgoKCgogICAgICAg
ICAgICAgICAgc2hvcnQgc3BsaXR4cj1wb2ludHNbY29udmh1bGxbY2gyXV0ueDsKICAgICAgICAg
ICAgICAgIHNob3J0IHNwbGl0eGw9cG9pbnRzW2NvbnZodWxsW2NoMV1dLng7CgoKCiAgICAgICAg
ICAgICAgICBpZiAoYnVpbGRmb3JyaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgbGVmdHA9LTE7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjMWNvbGluZWFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRw
PWNoMi0xOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGxlZnR4
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGNwbD1sb3dlcmxlZnQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNob3J0IGN4PXBvaW50c1tjb252aHVsbFtjcGxdXS54OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxlZnRwPT0tMSB8fCBjeDxsZWZ0eCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0eD1jeDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdHA9Y3BsOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY3BsPT11cHBlcmxlZnQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3BsKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY3BsPT1jaDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNwbD1jaDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBz
aG9ydCBscD1sZWZ0cDsKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkb25lOwoKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjMWNvbGluZWFyKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdHA9PWxv
d2VybGVmdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZodWxs
LnB1c2hfYmFjayhjb252aHVsbFtsb3dlcmxlZnRdKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Io
aW50IGk9dXBwZXJsZWZ0O2k+PWxvd2VybGVmdDtpLS0pCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZodWxsLnB1c2hfYmFjayhjb252aHVsbFtpXSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbmU9ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCFkb25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9i
YWNrKGNvbnZodWxsW2xwXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobHA9PWxvd2VybGVmdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9uZT10cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChscD09Y2gxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBscD1jaDItMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bHAtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMy
Y29saW5lYXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChsb3dlcnJpZ2h0PHVwcGVycmlnaHQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPWxvd2VycmlnaHQ7aTw9dXBw
ZXJyaWdodDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnZodWxsLnB1c2hfYmFjayhjb252aHVsbFtpXSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaT1sb3dlcnJpZ2h0O2k+PXVwcGVycmlnaHQ7aS0tKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1
bGxbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBycD1sb3dlcnJpZ2h0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvbmU9ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCFkb25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVz
aF9iYWNrKGNvbnZodWxsW3JwXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocnA9PXVwcGVycmlnaHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbmU9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJwKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocnA9PWNobikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcnA9Y2gyOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjMWNvbGluZWFyKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdHA9PWxvd2Vy
bGVmdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaT11
cHBlcmxlZnQ7aTxsb3dlcmxlZnQ7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbaV0pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBscD11cHBlcmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9u
ZT1mYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobHAhPWxlZnRw
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNvbnZodWxsW2xw
XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHA9PWNoMSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHA9Y2gyLTE7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwLS07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCByaWdo
dHA9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjMmNvbGluZWFyKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0cD1jaG4tMTsKICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaG9ydCByaWdodHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2hvcnQgY3ByPWxvd2VycmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGN4PXBvaW50c1tjb252aHVsbFtj
cHJdXS54OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0
cD09LTEgfHwgY3g+cmlnaHR4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJpZ2h0eD1jeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmlnaHRwPWNwcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNw
cj09dXBwZXJyaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHIr
KzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcHI9PWNobikK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ByPWNoMjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHJwPXJpZ2h0cDsKICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBkb25lOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjMmNvbGluZWFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRwPT1sb3dlcnJpZ2h0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNvbnZodWxs
W2xvd2VycmlnaHRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9dXBwZXJyaWdodDtp
Pj1sb3dlcnJpZ2h0O2ktLSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNvbnZodWxsW2ldKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9uZT1mYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIWRvbmUp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbcnBd
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChycD09bG93ZXJy
aWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9u
ZT10cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChycD09
Y2gyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycD1j
aG4tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnAtLTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMxY29saW5lYXIpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChsb3dlcmxlZnQ8dXBwZXJsZWZ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaT1sb3dlcmxlZnQ7aTw9dXBwZXJsZWZ0O2krKykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9i
YWNrKGNvbnZodWxsW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPWxvd2VybGVm
dDtpPj11cHBlcmxlZnQ7aS0tKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbaV0pOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaG9ydCBscD1sb3dlcmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9u
ZT1mYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIWRvbmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbbHBdKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChscD09dXBwZXJsZWZ0
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lPXRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscCsrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxwPT1jaDIpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwPWNoMTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMyY29saW5lYXIpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyaWdodHA9PWxvd2VycmlnaHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IoaW50IGk9dXBwZXJyaWdodDtpPGxvd2VycmlnaHQ7aSsrKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2so
Y29udmh1bGxbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycD11cHBlcnJpZ2h0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvbmU9ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKHJwIT1yaWdodHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVs
bC5wdXNoX2JhY2soY29udmh1bGxbcnBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChycD09Y2gyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBycD1jaG4tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcnAtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgoK
CiAgICAgICAgICAgICAgICBzaG9ydCBsZWRnZWNvdW50PTA7CgogICAgICAgICAgICAgICAgaWYg
KGMxY29saW5lYXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxvd2VybGVmdDx1cHBlcmxlZnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaT11cHBlcmxlZnQ7aT49bG93ZXJsZWZ0O2ktLSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlcVtsZWRnZWNvdW50KytdPWNvbnZodWxs
W2ldOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaT11cHBlcmxlZnQ7aTw9bG93ZXJsZWZ0O2krKykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlcVtsZWRnZWNvdW50KytdPWNvbnZo
dWxsW2ldOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgY3Bp
bD11cHBlcmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlcVts
ZWRnZWNvdW50KytdPWNvbnZodWxsW2NwaWxdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNwaWwrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3BpbD09Y2gy
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BpbD1jaDE7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoY3BpbCE9bG93ZXJsZWZ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgbGVkZ2VxW2xlZGdl
Y291bnQrK109Y29udmh1bGxbbG93ZXJsZWZ0XTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK
CiAgICAgICAgICAgICAgICBzaG9ydCByZWRnZWNvdW50PTA7CgogICAgICAgICAgICAgICAgaWYg
KGMyY29saW5lYXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxvd2VycmlnaHQ8dXBwZXJyaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpPXVwcGVycmlnaHQ7aT49bG93ZXJyaWdodDtpLS0pCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRnZXFbcmVkZ2Vjb3VudCsrXT1jb252
aHVsbFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGk9dXBwZXJyaWdodDtpPD1sb3dlcnJpZ2h0O2krKykKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGdlcVtyZWRnZWNvdW50Kytd
PWNvbnZodWxsW2ldOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hv
cnQgY3Bpcj11cHBlcnJpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWRnZXFbcmVkZ2Vjb3VudCsrXT1jb252aHVsbFtjcGlyXTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcGlyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNw
aXI9PWNobikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwaXI9Y2gy
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKGNwaXIhPWxvd2VycmlnaHQpOwogICAgICAgICAgICAgICAgICAgICAgICByZWRn
ZXFbcmVkZ2Vjb3VudCsrXT1jb252aHVsbFtsb3dlcnJpZ2h0XTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHNob3J0IGZpcnN0dHJpYnVpbGQ9LTE7CiAgICAgICAg
ICAgICAgICBzaG9ydCBsYXN0dHJpYnVpbGQ9LTE7CgogICAgICAgICAgICAgICAgc2hvcnQgdDE9
dHJpYW5nbGVzb25sZWZ0OwogICAgICAgICAgICAgICAgc2hvcnQgdDI9dHJpYW5nbGVzb25yaWdo
dDsKCgogICAgICAgICAgICAgICAgd2hpbGUgKGxlZGdlY291bnQ+PTIgfHwgcmVkZ2Vjb3VudD49
MikKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGxlZGdlY291bnQ+PTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgb3RoZXJwb2ludDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHByZXZ0cmk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVmdHRyaT1maW5kdHJpKHQxLGxlZGdlcVts
ZWRnZWNvdW50LTFdLGxlZGdlcVtsZWRnZWNvdW50LTJdLCZvdGhlcnBvaW50LCZwcmV2dHJpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0dHJpPDApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzd2FwZGlhZyggcG9pbnRz
W2xlZGdlcVtsZWRnZWNvdW50LTFdXS54LHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0xXV0ueSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b2ludHNbcmVkZ2VxW3JlZGdlY291bnQtMV1dLngscG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTFd
XS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0yXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291
bnQtMl1dLnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9pbnRzW290aGVycG9pbnRdLngscG9pbnRzW290aGVycG9pbnRdLnkgKT09LTEp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdHJpKGxlZnR0cmks
dDEscHJldnRyaSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZWRnZXFbbGVkZ2Vjb3VudF09bGVkZ2VxW2xlZGdlY291bnQtMV07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlcVtsZWRnZWNvdW50LTFd
PW90aGVycG9pbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZGdlY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmKHJlZGdlY291bnQ+PTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUoMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBvdGhlcnBvaW50OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgcHJldnRyaTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByaWdodHRyaT1maW5kdHJpKHQy
LHJlZGdlcVtyZWRnZWNvdW50LTFdLHJlZGdlcVtyZWRnZWNvdW50LTJdLCZvdGhlcnBvaW50LCZw
cmV2dHJpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdo
dHRyaTwwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3dhcGRp
YWcoIHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0xXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291
bnQtMV1dLnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTFdXS54LHBvaW50c1tyZWRnZXFbcmVk
Z2Vjb3VudC0xXV0ueSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb2ludHNbb3RoZXJwb2ludF0ueCxwb2ludHNbb3RoZXJwb2ludF0ueSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b2ludHNbcmVkZ2VxW3JlZGdlY291bnQtMl1dLngscG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTJd
XS55ICk9PTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdHJp
KHJpZ2h0dHJpLHQyLHByZXZ0cmkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVkZ2VxW3JlZGdlY291bnRdPXJlZGdlcVtyZWRnZWNvdW50LTFdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRnZXFbcmVk
Z2Vjb3VudC0xXT1vdGhlcnBvaW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWRnZWNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGxlZnR0b3JpZ2h0OwoKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBsZWRnZWNvdW50PDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dHRvcmlnaHQ9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVkZ2Vjb3Vu
dDwyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnR0b3JpZ2h0PWZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcj0gc3dhcGRpYWcoIHBv
aW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0xXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMV1d
LnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTFdXS54LHBvaW50c1tyZWRnZXFbcmVkZ2Vjb3Vu
dC0xXV0ueSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb2ludHNbcmVkZ2VxW3JlZGdlY291bnQtMl1dLngscG9pbnRzW3JlZGdlcVtyZWRn
ZWNvdW50LTJdXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0yXV0ueCxwb2ludHNbbGVkZ2Vx
W2xlZGdlY291bnQtMl1dLnkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3I9PTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0dG9yaWdo
dD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNyPT0tMSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnR0b3JpZ2h0PWZhbHNl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFsZnNwYWNlKCBwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMV1dLngscG9p
bnRzW2xlZGdlcVtsZWRnZWNvdW50LTFdXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3JlZGdlcVtyZWRnZWNv
dW50LTFdXS54LHBvaW50c1tyZWRnZXFbcmVkZ2Vjb3VudC0xXV0ueSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1ts
ZWRnZXFbbGVkZ2Vjb3VudC0yXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMl1dLnkgKT09
LTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnR0
b3JpZ2h0PWZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0dG9y
aWdodD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsZWZ0dG9yaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYWxmc3BhY2UoIHBvaW50c1tsZWRnZXFbbGVk
Z2Vjb3VudC0xXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMV1dLnksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3JlZGdl
cVtyZWRnZWNvdW50LTFdXS54LHBvaW50c1tyZWRnZXFbcmVkZ2Vjb3VudC0xXV0ueSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNb
cmVkZ2VxW3JlZGdlY291bnQtMl1dLngscG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTJdXS55ICkh
PTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB0aGlzdHJpYnVpbGQ9YWxsb2N0cmko
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0dHJpYnVp
bGQ8MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3R0cmlidWlsZD10aGlzdHJpYnVpbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyaXNbbGFzdHRyaWJ1aWxkXS5zZXRuZXh0KHRoaXN0cmlidWlsZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0dHJpYnVpbGQ9dGhpc3RyaWJ1aWxkOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaXNbdGhpc3RyaWJ1aWxk
XS5zZXRuZXh0KC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
aXNbdGhpc3RyaWJ1aWxkXS50LnYxPWxlZGdlcVtsZWRnZWNvdW50LTFdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGdlcVtyZWRnZWNvdW50LTJdPD1yZWRn
ZXFbcmVkZ2Vjb3VudC0xXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cmlzW3RoaXN0cmlidWlsZF0udC52Mj1yZWRnZXFbcmVkZ2Vjb3VudC0yXTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpc1t0aGlzdHJpYnVpbGRd
LnQudjM9cmVkZ2VxW3JlZGdlY291bnQtMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlzW3Ro
aXN0cmlidWlsZF0udC52Mj1yZWRnZXFbcmVkZ2Vjb3VudC0xXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpc1t0aGlzdHJpYnVpbGRdLnQudjM9cmVk
Z2VxW3JlZGdlY291bnQtMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRnZWNvdW50LS07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFsZnNwYWNlKCBwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMV1dLngscG9pbnRzW2xl
ZGdlcVtsZWRnZWNvdW50LTFdXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tyZWRnZXFbcmVkZ2Vjb3VudC0xXV0ueCxwb2lu
dHNbcmVkZ2VxW3JlZGdlY291bnQtMV1dLnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2xlZGdlcVtsZWRnZWNvdW50LTJdXS54
LHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0yXV0ueSApIT0wKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2hvcnQgdGhpc3RyaWJ1aWxkPWFsbG9jdHJpKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobGFzdHRyaWJ1aWxkPDApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0dHJpYnVpbGQ9dGhpc3RyaWJ1aWxk
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlzW2xhc3R0cmlidWlsZF0u
c2V0bmV4dCh0aGlzdHJpYnVpbGQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdHRyaWJ1aWxkPXRoaXN0cmlidWlsZDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cmlzW3RoaXN0cmlidWlsZF0uc2V0bmV4dCgtMSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVkZ2VxW2xlZGdlY291bnQtMV08
PWxlZGdlcVtsZWRnZWNvdW50LTJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyaXNbdGhpc3RyaWJ1aWxkXS50LnYxPWxlZGdlcVtsZWRnZWNvdW50LTFdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlzW3RoaXN0cmli
dWlsZF0udC52Mj1sZWRnZXFbbGVkZ2Vjb3VudC0yXTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
aXNbdGhpc3RyaWJ1aWxkXS50LnYxPWxlZGdlcVtsZWRnZWNvdW50LTJdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlzW3RoaXN0cmlidWlsZF0udC52
Mj1sZWRnZXFbbGVkZ2Vjb3VudC0xXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJpc1t0aGlzdHJpYnVpbGRdLnQudjM9cmVkZ2VxW3JlZGdlY291bnQtMV07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGVkZ2Vjb3VudC0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0MT49MCB8fCB0Mj49
MCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzaG9y
dCB0aGlzdHJpPWFsbG9jdHJpKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0dHJp
YnVpbGQ8MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdHRyaWJ1aWxkPXRo
aXN0cmk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmlzW2xhc3R0cmlidWlsZF0uc2V0bmV4dCh0aGlzdHJpKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3R0cmlidWlsZD10aGlzdHJpOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgdHJpc1t0aGlzdHJpXS5zZXRsZWZ0KHQxKTsKICAgICAgICAgICAgICAgICAgICAgICAg
dHJpc1t0aGlzdHJpXS5zZXRyaWdodCh0Mik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyaXNb
dGhpc3RyaV0udGcuc3BsaXR4bD1zcGxpdHhsOwogICAgICAgICAgICAgICAgICAgICAgICB0cmlz
W3RoaXN0cmldLnRnLnNwbGl0eHI9c3BsaXR4cjsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgKnRyaW91dD1maXJzdHRyaWJ1aWxkOwogICAgICAgICAgICAgICAgfQoK
CiAgICAgICAgaW50IG49Y29udmh1bGwuc2l6ZSgpLWNobjsKICAgICAgICBmb3IgKGludCBpPTA7
aTxuO2krKykKICAgICAgICAgICAgICAgIGNvbnZodWxsW2NoMStpXT1jb252aHVsbFtjaG4raV07
CiAgICAgICAgY29udmh1bGwucmVzaXplKGNoMStuKTsKCiAgICAgICAgfQoKCnRlbXBsYXRlIDxj
bGFzcyBYWUNPTExFQ1Q+IHZvaWQgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD46OnRyaWFuZ3Vs
YXRlKCkKICAgICAgICB7CiMgMTA1MCAiZGVsYW4uaCIKICAgICAgICBlbnVtIHByb2Nlc3NzdGF0
ZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZG9sZWZ0LAogICAgICAgICAgICAg
ICAgZG9yaWdodCwKICAgICAgICAgICAgICAgIGRvbWVyZ2UKICAgICAgICAgICAgICAgIH07Cgog
ICAgICAgIHN0cnVjdCBkZWxhbnN0YWNrCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBwcm9jZXNzc3RhdGUgc3RhdGU7CiAgICAgICAgICAgICAgICBzaG9ydCBmcm9tOwogICAgICAg
ICAgICAgICAgc2hvcnQgbjsKCiAgICAgICAgICAgICAgICBzaG9ydCB0MTsKICAgICAgICAgICAg
ICAgIHNob3J0IGNoMTsKICAgICAgICAgICAgICAgIHNob3J0IGNoMjsKCiAgICAgICAgICAgICAg
ICBib29sIGxjbDsKICAgICAgICAgICAgICAgIGJvb2wgYnVpbGRmb3JyaWdodDsKICAgICAgICAg
ICAgICAgIH0gZHN0YWNrWzldOwoKCiAgICAgICAgc2hvcnQgKmxlZGdlcT1uZXcgc2hvcnQgWyhw
b2ludHMuc2l6ZSgpKzUpLzJdOwogICAgICAgIHNob3J0ICpyZWRnZXE9bmV3IHNob3J0IFsocG9p
bnRzLnNpemUoKSs1KS8yXTsKCiAgICAgICAgY29udmh1bGwuY2xlYXIoKTsKICAgICAgICBjb252
aHVsbC5yZXNlcnZlKHBvaW50cy5zaXplKCkqMik7CiAgICAgICAgdHJpcy5jbGVhcigpOwogICAg
ICAgIHRyaXMucmVzZXJ2ZShwb2ludHMuc2l6ZSgpKzIpOwoKICAgICAgICBpbnQgc3RhY2twdHI9
MDsKCiAgICAgICAgc2hvcnQgZnJvbT0wOwogICAgICAgIHNob3J0IG49cG9pbnRzLnNpemUoKTsK
ICAgICAgICBib29sIGJ1aWxkZm9ycmlnaHQ7CgogICAgICAgIGludCBzdGF0ZT1kb2xlZnQ7CiAg
ICAgICAgc2hvcnQgY2gxLGNoMjsKICAgICAgICBib29sIGxjbDsKICAgICAgICBzaG9ydCB0MTsK
CiAgICAgICAgc2hvcnQgdHJpaGVhZDsKICAgICAgICBib29sIGNvbGluZWFyOwoKICAgICAgICBm
cmVldHJpbGlzdD0tMTsKICAgIHRyaWFuZ3VsYXRlcGVuZGluZz1mYWxzZTsKCiAgICAgICAgd2hp
bGUgKDEpCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgaWYgKG4+PTQpCiAgICAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlPT1k
b2xlZnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkc3RhY2tbc3RhY2twdHJdLnN0YXRlPWRvcmlnaHQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNrcHRyXS5mcm9tPWZyb207CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNrcHRyXS5uPW47CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNrcHRyXS5idWlsZGZvcnJpZ2h0PWJ1
aWxkZm9ycmlnaHQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdGFja1tzdGFj
a3B0cl0udDE9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNr
cHRyXS5jaDE9Y29udmh1bGwuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRzdGFja1tzdGFja3B0cl0uY2gyPS0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRzdGFja1tzdGFja3B0cl0ubGNsPWZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFja3B0cisrOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU9
ZG9sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb209ZnJvbTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuPShuKzEpLzI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVpbGRmb3JyaWdodD1mYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZT09ZG9yaWdodCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRz
dGFja1tzdGFja3B0cl0uc3RhdGU9ZG9tZXJnZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkc3RhY2tbc3RhY2twdHJdLmZyb209ZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkc3RhY2tbc3RhY2twdHJdLm49bjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkc3RhY2tbc3RhY2twdHJdLmJ1aWxkZm9ycmlnaHQ9YnVpbGRmb3JyaWdodDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNrcHRyXS50MT10cmloZWFkOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdGFja1tzdGFja3B0cl0uY2gxPWNoMTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RhY2tbc3RhY2twdHJdLmNoMj1jb252
aHVsbC5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNr
cHRyXS5sY2w9Y29saW5lYXI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
cHRyKys7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZT1kb2xlZnQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbT1mcm9tKyhuKzEpLzI7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbj1uLzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVpbGRmb3JyaWdodD10cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGFuZGJ1aWxkbWVyZ2UoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpaGVhZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
dHJpaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2gyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1aWxkZm9ycmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGNsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGluZWFyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb2xpbmVhciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWRn
ZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVkZ2VxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKG49PTMpCiAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGE9ZnJvbTsKICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGI9ZnJvbSsxOwogICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYz1mcm9tKzI7CgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgaHM9aGFsZnNwYWNlKHBv
aW50c1thXS54LHBvaW50c1thXS55LHBvaW50c1tiXS54LHBvaW50c1tiXS55LHBvaW50c1tjXS54
LHBvaW50c1tjXS55KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhzIT0wKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaG9ydCB0aGlzdHJpPWFsbG9jdHJpKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJpc1t0aGlzdHJpXS50LnYxPWE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJpc1t0aGlzdHJpXS50LnYyPWI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJp
c1t0aGlzdHJpXS50LnYzPWM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpc1t0
aGlzdHJpXS5zZXRuZXh0KC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlo
ZWFkPXRoaXN0cmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29saW5lYXI9ZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbGluZWFyPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJpaGVhZD0tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVpbGRmb3JyaWdodCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZo
dWxsLnB1c2hfYmFjayhhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHMh
PTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soYik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soYyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwu
cHVzaF9iYWNrKGMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dmh1bGwucHVzaF9iYWNrKGIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGMpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChocz09MSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnZodWxsLnB1c2hfYmFjayhhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnZodWxsLnB1c2hfYmFjayhiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soYik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soYSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlm
IChuPT0yKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbGluZWFyPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWhlYWQ9LTE7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChidWlsZGZvcnJpZ2h0KQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwu
cHVzaF9iYWNrKGZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZodWxs
LnB1c2hfYmFjayhmcm9tKzEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGZy
b20rMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNr
KGZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAobj09MSkKICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xpbmVhcj10cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICB0cmloZWFkPS0xOwogICAgICAgICAgICAgICAgICAgICAgICBjb252
aHVsbC5wdXNoX2JhY2soZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoc3RhY2twdHI9PTApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoK
ICAgICAgICAgICAgICAgIHN0YWNrcHRyLS07CgogICAgICAgICAgICAgICAgZnJvbT1kc3RhY2tb
c3RhY2twdHJdLmZyb207CiAgICAgICAgICAgICAgICBuPWRzdGFja1tzdGFja3B0cl0ubjsKICAg
ICAgICAgICAgICAgIGJ1aWxkZm9ycmlnaHQ9ZHN0YWNrW3N0YWNrcHRyXS5idWlsZGZvcnJpZ2h0
OwoKICAgICAgICAgICAgICAgIHN0YXRlPWRzdGFja1tzdGFja3B0cl0uc3RhdGU7CgogICAgICAg
ICAgICAgICAgdDE9ZHN0YWNrW3N0YWNrcHRyXS50MTsKICAgICAgICAgICAgICAgIGNoMT1kc3Rh
Y2tbc3RhY2twdHJdLmNoMTsKICAgICAgICAgICAgICAgIGNoMj1kc3RhY2tbc3RhY2twdHJdLmNo
MjsKICAgICAgICAgICAgICAgIGxjbD1kc3RhY2tbc3RhY2twdHJdLmxjbDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICBoZWFkdHJpPXRyaWhlYWQ7CiAgICAgICAgZGVsZXRlW10gbGVkZ2VxOwog
ICAgICAgIGRlbGV0ZVtdIHJlZGdlcTsKICAgICAgICB9CgoKdGVtcGxhdGUgPGNsYXNzIFhZQ09M
TEVDVD4gdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD46OnRyaWFuZ2xlaXRlcmF0b3I6OnRyaWFu
Z2xlaXRlcmF0b3IodHRyaWFuZ3VsYXRpb24gY29uc3QgJmEpCiAgICAgICAgOgogICAgICAgIG8o
YSksCiAgICAgICAgY3VycmVudHRyaShhLmhlYWR0cmkpCiAgICAgICAgewogICAgICAgIGlmIChj
dXJyZW50dHJpPj0wKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2hvcnQgdD1j
dXJyZW50dHJpOwogICAgICAgICAgICAgICAgd2hpbGUgKCFvLnRyaXNbdF0ucmVhbHRyaWFuZ2xl
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG8udHJpc1t0XS5yaWdodHRyZWUoKT49MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZnNzdGFjay5wdXNoKG8udHJpc1t0XS5yaWdodHRyZWUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChvLnRyaXNbdF0ubGVmdHRyZWUoKT49MCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZnNzdGFjay5wdXNoKG8udHJpc1t0XS5sZWZ0dHJlZSgpKTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChkZnNzdGFjay5lbXB0eSgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0PS0xOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdD1kZnNzdGFjay50b3AoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgZGZzc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIGN1cnJlbnR0cmk9dDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWFlDT0xMRUNUPiB0eXBlbmFtZSB0dHJpYW5ndWxhdGlv
biA8WFlDT0xMRUNUPjo6dHJpYW5nbGVpdGVyYXRvciAmIHR0cmlhbmd1bGF0aW9uIDxYWUNPTExF
Q1Q+Ojp0cmlhbmdsZWl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKICAgICAgICB7CiAgICAgICAgc2hv
cnQgdD1jdXJyZW50dHJpOwoKICAgICAgICBpZiAodD09LTEpCiAgICAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CgogICAgICAgIHQ9by50cmlzW3RdLm5leHRpbmNoYWluKCk7CiAgICAgICAgd2hp
bGUgKHQ9PS0xKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGRmc3N0YWNr
LmVtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudHRyaT0tMTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdD1kZnNzdGFjay50b3AoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgZGZzc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCFvLnRyaXNbdF0ucmVh
bHRyaWFuZ2xlKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoby50cmlz
W3RdLnJpZ2h0dHJlZSgpPj0wKQogICAgICAgICAgICAgICAgICAgICAgICBkZnNzdGFjay5wdXNo
KG8udHJpc1t0XS5yaWdodHRyZWUoKSk7CiAgICAgICAgICAgICAgICBpZiAoby50cmlzW3RdLmxl
ZnR0cmVlKCk+PTApCiAgICAgICAgICAgICAgICAgICAgICAgIGRmc3N0YWNrLnB1c2goby50cmlz
W3RdLmxlZnR0cmVlKCkpOwoKICAgICAgICAgICAgICAgIGlmIChkZnNzdGFjay5lbXB0eSgpKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQ9LTE7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB0PWRmc3N0YWNrLnRvcCgpOwogICAgICAgICAgICAgICAgZGZzc3RhY2su
cG9wKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgY3VycmVudHRyaT10OwoKICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgfQojIDYgIm1hcC5oIiAyCiMgMSAieHkuaCIgMQoKCgppbmxp
bmUgdW5zaWduZWQgaW50IGRpc3QyKHNob3J0IHgxLHNob3J0IHkxLHNob3J0IHgyLHNob3J0IHky
KQogICAgICAgIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkeCxkeTsKICAgICAgICBpZiAoeDE8
eDIpCiAgICAgICAgICAgICAgICBkeD14Mi14MTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICBkeD14MS14MjsKCiAgICAgICAgaWYgKHkxPHkyKQogICAgICAgICAgICAgICAgZHk9eTIteTE7
CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZHk9eTEteTI7CgogICAgICAgIHJldHVybiAo
KHVuc2lnbmVkIGludClkeCkqKCh1bnNpZ25lZCBpbnQpZHgpKygodW5zaWduZWQgaW50KWR5KSoo
KHVuc2lnbmVkIGludClkeSk7CiAgICAgICAgfQoKc3RydWN0IHh5CiAgICAgICAgewoKCgoKCiAg
ICB0eXBlZGVmIHNob3J0IHh0eXBlOwogICAgdHlwZWRlZiBzaG9ydCB5dHlwZTsKCiAgICAgICAg
eHR5cGUgeDsKICAgICAgICB5dHlwZSB5OwoKICAgIHh0eXBlIGdldHgoKSB7cmV0dXJuIHg7fQog
ICAgeXR5cGUgZ2V0eSgpIHtyZXR1cm4geTt9CgogICAgICAgIHNob3J0IHo7CiAgICAgICAgYm9v
bCBmaXhlZDsKCiAgICAgICAgYm9vbCBsdChjb25zdCB4eSAmb3RoZXIpIGNvbnN0IHtyZXR1cm4g
KHg8b3RoZXIueCB8fCAoeD09b3RoZXIueCAmJiB5PG90aGVyLnkpKTt9OwogICAgICAgIGJvb2wg
Z3QoY29uc3QgeHkgJm90aGVyKSBjb25zdCB7cmV0dXJuICh4Pm90aGVyLnggfHwgKHg9PW90aGVy
LnggJiYgeT5vdGhlci55KSk7fTsKCiAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgeHkgJnJp
Z2h0KSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGx0KHJp
Z2h0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgeHkg
JnJpZ2h0KSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICFs
dChyaWdodCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
eHkgJnJpZ2h0KSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu
IGd0KHJpZ2h0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBib29sIG9wZXJhdG9yPD0oY29u
c3QgeHkgJnJpZ2h0KSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuICFndChyaWdodCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IHh5JiBvdGhlcikgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiAoeD09b3RoZXIueCAmJiB5PT1vdGhlci55KTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgeHkmIG90aGVyKSBjb25zdAogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgcmV0dXJuICh4IT1vdGhlci54IHx8IHkhPW90aGVyLnkpOwog
ICAgICAgICAgICAgICAgfQogICAgdW5zaWduZWQgaW50IGRpc3QyKGNvbnN0IHh5JiBvdGhlcikg
Y29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIDo6ZGlzdDIoeCx5LG90aGVyLngsb3RoZXIu
eSk7CiAgICAgICAgfTsKICAgIHVuc2lnbmVkIGludCBkaXN0Mih4dHlwZSBvdGhlcngseXR5cGUg
b3RoZXJ5KSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4gOjpkaXN0Mih4LHksb3RoZXJ4
LG90aGVyeSk7CiAgICAgICAgfTsKICAgICAgICB9OwojIDcgIm1hcC5oIiAyCgpjbGFzcyB0bWFw
CiAgICAgICAgewogICAgICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIGNvbnN0IHh5ICogY29u
c3RfaXRlcmF0b3I7CiAgICAgICAgdmlydHVhbCBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
OwogICAgICAgIHZpcnR1YWwgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Q7CiAgICAgICAgICAg
ICAgICB2aXJ0dWFsIGJvb2wgbG9va3VwKHNob3J0IHgsc2hvcnQgeSxzaG9ydCAqeikgY29uc3Q9
MDsKICAgICAgICB9OwoKY2xhc3MgdHN0YXRpY21hcCA6IHB1YmxpYyB0bWFwCiAgICAgICAgewog
ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICB4eSBjb25zdCAqY29udHJvbHBvaW50czsK
ICAgICAgICAgICAgICAgIGludCBuY29udHJvbHBvaW50czsKICAgICAgICBwdWJsaWM6CiAgICAg
ICAgICAgICAgICB0c3RhdGljbWFwKHh5IGNvbnN0IGluaXRpYWxjb250cm9scG9pbnRzW10saW50
IG51bWJlcm9mY29udHJvbHBvaW50cyk7CgogICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoY29u
dHJvbHBvaW50cyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoY29u
dHJvbHBvaW50cytuY29udHJvbHBvaW50cyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBib29sIGxvb2t1cChzaG9ydCB4LHNob3J0IHksc2hvcnQgKnopIGNvbnN0CiAgICAgICAgICAg
IHsKCiAgICAgICAgICAgICp6PXgreTsKICAgICAgICAgICAgfQogICAgICAgIH07CgpjbGFzcyB0
ZHluYW1pY21hcCA6IHB1YmxpYyB0bWFwCiAgICAgICAgewogICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICB0eXBlZGVmIGxvY2FsOjp2ZWN0b3I8eHk+IGNvbnRyb2xwb2ludHN0eXBlOwog
ICAgICAgICAgICAgICAgY29udHJvbHBvaW50c3R5cGUgY29udHJvbHBvaW50czsKICAgICAgICB0
eXBlZGVmIHR0cmlhbmd1bGF0aW9uPGNvbnRyb2xwb2ludHN0eXBlPiB0cmlhbmd1bGF0aW9udHlw
ZWludGVybmFsOwogICAgICAgICAgICAgICAgdHJpYW5ndWxhdGlvbnR5cGVpbnRlcm5hbCB0cmlh
bmdsZXM7CgogICAgICAgICAgICAgICAgc2hvcnQgeG1pbmxlYXJuYWJsZTsKICAgICAgICAgICAg
ICAgIHNob3J0IHhtYXhsZWFybmFibGU7CiAgICAgICAgICAgICAgICBzaG9ydCB5bWlubGVhcm5h
YmxlOwogICAgICAgICAgICAgICAgc2hvcnQgeW1heGxlYXJuYWJsZTsKCiAgICAgICAgICAgICAg
ICB2b2lkIGFkanVzdHBvaW50KGludCBwdCxpbnQgdGFyZ2V0dmFsdWUsaW50IHdlaWdodGluZyxp
bnQgbWlubW92ZSxpbnQgbWF4bW92ZSk7CiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgICAgICAg
ICAgYm9vbCBva3RvbW92ZShjb25zdCB4eSAmIHB0KSBjb25zdDsKICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgICAgICB0ZHluYW1pY21hcCgpOwogICAgICAgICAgICAgICAgdGR5bmFtaWNtYXAo
eHkgY29uc3QgaW5pdGlhbGNvbnRyb2xwb2ludHNbXSxpbnQgbnVtYmVyb2Zjb250cm9scG9pbnRz
KTsKICAgICAgICAgICAgICAgIHRkeW5hbWljbWFwICZvcGVyYXRvcj0odGR5bmFtaWNtYXAgY29u
c3QgJm90aGVyKTsKICAgICAgICAgICAgICAgIHRkeW5hbWljbWFwICZvcGVyYXRvcj0odG1hcCBj
b25zdCAmb3RoZXIpOwoKICAgICAgICB4eSBjb25zdCAmIG9wZXJhdG9yW10oaW50IGluZGV4KSBj
b25zdAogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBjb250cm9scG9pbnRzW2luZGV4
XTsKICAgICAgICAgICAgfQoKICAgICAgICB0eXBlZGVmIHRyaWFuZ3VsYXRpb250eXBlaW50ZXJu
YWwgdHJpYW5ndWxhdGlvbnR5cGU7CiAgICAgICAgdHJpYW5ndWxhdGlvbnR5cGUgY29uc3QgJiB0
cmlhbmd1bGF0aW9uICgpIGNvbnN0CiAgICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHRy
aWFuZ2xlczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZvaWQgc2V0bGVhcm5hYmxl
YXJlYSggc2hvcnQgYXhtaW5sZWFybmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNob3J0IGF4bWF4bGVhcm5hYmxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBheW1pbmxlYXJuYWJsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgYXltYXhs
ZWFybmFibGUgKTsKICAgICAgICAgICAgICAgIHZvaWQgY2xlYXIoKTsKICAgICAgICAgICAgICAg
IHZvaWQgYWRkY29udHJvbHBvaW50KHh5IGNvbnN0ICZwdCk7CiAgICAgICAgICAgICAgICB2b2lk
IHJlbW92ZWNvbnRyb2xwb2ludCh4eSBjb25zdCAmcHQpOwogICAgICAgICAgICAgICAgYm9vbCBt
b3ZlbWFwdG93YXJkcyggeHkgY29uc3QgJnBvaW50LCBpbnQgd2VpZ2h0aW5nLGludCBtaW5tb3Zl
LGludCBtYXhtb3ZlICk7CiAgICAgICAgICAgICAgICBib29sIGxvb2t1cChzaG9ydCB4LHNob3J0
IHksc2hvcnQgKnopIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBzZXRjbG9zZXN0cG9pbnQo
IHh5IGNvbnN0ICZwb2ludCApOwoKICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgY29udHJvbHBvaW50c3R5cGUgY29uc3QgJmNwPWNv
bnRyb2xwb2ludHM7CiAgICAgICAgICAgIHJldHVybiAmKmNwLmJlZ2luKCk7CiAgICAgICAgICAg
IH0KCiAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICAgICAgICAgewogICAg
ICAgICAgICBjb250cm9scG9pbnRzdHlwZSBjb25zdCAmY3A9Y29udHJvbHBvaW50czsKICAgICAg
ICAgICAgcmV0dXJuICYqY3AuZW5kKCk7CiAgICAgICAgICAgIH0KICAgIH07CiMgOCAiZW5ncHJv
Zi5oIiAyCiMgMSAibWFwY29uc3QuaCIgMQojIDkgImVuZ3Byb2YuaCIgMgojIDEgIm1hcGVkaXQu
aCIgMQoKCgoKCgoKIyAxICJhdHRydmFsdWUuaCIgMQojIDkgImF0dHJ2YWx1ZS5oIgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gY2xhc3MgdGF0dHJ2YWx1ZWJhc2UgOiBwdWJsaWMgdGhhcmRhdHRyaWJ1
dGUKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIFQgZnZhbHVlOwog
ICAgICAgIHRzdHJpbmdjb252ZXJ0b3I8VD4gY29uc3QgJmZjb252ZXJ0b3I7CiAgICAgICAgICAg
ICAgICBib29sIGZyZWFkb25seTsKICAgIHByb3RlY3RlZDoKICAgICAgICB0c3RyaW5nY29udmVy
dG9yPFQ+IGNvbnN0ICZnZXRjb252ZXJ0b3IoKSBjb25zdCB7cmV0dXJuIGZjb252ZXJ0b3I7fQog
ICAgICAgICAgICAgICAgdm9pZCBzZXR2YWx1ZShUIGNvbnN0IHYpIHsgZnZhbHVlPXY7IH0KICAg
ICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0YXR0cnZhbHVlYmFzZShsb2NhbDo6c3RyaW5n
IGNvbnN0ICZhdHRybmFtZSx0c3RyaW5nY29udmVydG9yPFQ+IGNvbnN0ICZjb252ZXJ0b3IsYm9v
bCByZWFkb25seSwgVCBjb25zdCBpbml0aWFsdmFsdWUpOwogICAgICAgICAgICAgICAgdGF0dHJ2
YWx1ZWJhc2UobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUsdHN0cmluZ2NvbnZlcnRvcjxU
PiBjb25zdCAmY29udmVydG9yLGJvb2wgcmVhZG9ubHkpOwoKICAgICAgICAgICAgICAgIGJvb2wg
ZmlsbHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgJnMpIGNvbnN0OwogICAgICAgIHR3aXRoYXR0
cjo6cmVhZHZhbHVlcmVzdWx0cyByZWFkdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAm
cyk7CgoKICAgICAgICAgICAgICAgIG9wZXJhdG9yIFQoKSBjb25zdCB7IHJldHVybiBmdmFsdWU7
IH0KICAgICAgICBUIGNvbnN0ICZ2YWx1ZWNvbnN0cmVmKCkgY29uc3QgeyByZXR1cm4gZnZhbHVl
OyB9CiAgICAgICAgVCAmdmFsdWVyZWYoKSB7IHJldHVybiBmdmFsdWU7IH0KCiAgICAgICAgICAg
ICAgICB0YXR0cnZhbHVlYmFzZSA8VD4gJiBvcGVyYXRvcj0oVCBjb25zdCB2KSB7IHNldHZhbHVl
KHYpOyByZXR1cm4gKnRoaXM7fQogICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZWJhc2UgPFQ+ICYg
b3BlcmF0b3I9KHRhdHRydmFsdWViYXNlIDxUPiBjb25zdCAmb3RoZXIpIHtmdmFsdWU9b3RoZXIu
ZnZhbHVlO30KCiAgICAgICAgYm9vbCByZWFkb25seSgpIGNvbnN0IHtyZXR1cm4gZnJlYWRvbmx5
O30KICAgICAgICBsb2NhbDo6c3RyaW5nIHVuaXRzKCkgY29uc3Qge3JldHVybiBmY29udmVydG9y
LnVuaXRzKCk7fQoKICAgICAgICAgICAgICAgIHZvaWQgaW5jKGJvb2wgbG90cyk7CiAgICAgICAg
ICAgICAgICB2b2lkIGRlYyhib29sIGxvdHMpOwogICAgfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBU
PiB0YXR0cnZhbHVlYmFzZSA8VD46OnRhdHRydmFsdWViYXNlIChsb2NhbDo6c3RyaW5nIGNvbnN0
ICZhdHRybmFtZSwgdHN0cmluZ2NvbnZlcnRvcjxUPiBjb25zdCAmY29udmVydG9yLGJvb2wgcmVh
ZG9ubHksIFQgY29uc3QgaW5pdGlhbHZhbHVlKQogICAgICAgIDogdGhhcmRhdHRyaWJ1dGUoYXR0
cm5hbWUpLAogICAgICAgIGZyZWFkb25seShyZWFkb25seSksCiAgICAgICAgZmNvbnZlcnRvcihj
b252ZXJ0b3IpLAogICAgICAgICAgICAgICAgZnZhbHVlKGluaXRpYWx2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRhdHRydmFsdWViYXNlIDxUPjo6dGF0
dHJ2YWx1ZWJhc2UgKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLCB0c3RyaW5nY29udmVy
dG9yPFQ+IGNvbnN0ICZjb252ZXJ0b3IsYm9vbCByZWFkb25seSkKICAgICAgICA6IHRoYXJkYXR0
cmlidXRlKGF0dHJuYW1lKSwKICAgICAgICBmcmVhZG9ubHkocmVhZG9ubHkpLAogICAgICAgIGZj
b252ZXJ0b3IoY29udmVydG9yKQogICAgICAgIHsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gYm9vbCB0YXR0cnZhbHVlYmFzZSA8VD46OmZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3Ry
aW5nICZzKSBjb25zdAogICAgICAgIHsKICAgICAgICBmY29udmVydG9yLmZpbGx2YWx1ZXN0cmlu
ZyhzLGZ2YWx1ZSk7CiAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gdHdpdGhhdHRyOjpyZWFkdmFsdWVyZXN1bHRzIHRhdHRydmFsdWViYXNlIDxUPjo6cmVh
ZHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMpCiAgICAgICAgewogICAgICAgIGlm
IChmcmVhZG9ubHkpCiAgICAgICAgICAgICAgICByZXR1cm4gdHdpdGhhdHRyOjphdHRycmVhZG9u
bHk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHN0cmNv
bnZyZXN1bHQ6OnJlYWR2YWx1ZXJlc3VsdHMgcmVzOwogICAgICAgICAgICAgICAgVCB0ZW1wOwog
ICAgICAgICAgICAgICAgcmVzPWZjb252ZXJ0b3IucmVhZHZhbHVlc3RyaW5nKHMsdGVtcCk7Cgog
ICAgICAgICAgICAgICAgaWYgKHJlcz09dHN0cmNvbnZyZXN1bHQ6Om9rKQogICAgICAgICAgICAg
ICAgICAgICAgICBmdmFsdWU9dGVtcDsKICAgICAgICBzd2l0Y2ggKHJlcykKICAgICAgICAgICAg
ewogICAgICAgICAgICBjYXNlIHRzdHJjb252cmVzdWx0OjpvazoKICAgICAgICAgICAgICAgIHJl
dHVybiB0d2l0aGF0dHI6Om9rOwogICAgICAgICAgICBjYXNlIHRzdHJjb252cmVzdWx0OjpvdXRv
ZnJhbmdlOgogICAgICAgICAgICAgICAgcmV0dXJuIHR3aXRoYXR0cjo6b3V0b2ZyYW5nZTsKICAg
ICAgICAgICAgY2FzZSB0c3RyY29udnJlc3VsdDo6YmFkZm9ybWF0OgogICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIHR3aXRoYXR0cjo6YmFkZm9ybWF0OwogICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHZvaWQgdGF0dHJ2YWx1ZWJhc2UgPFQ+OjppbmMoYm9vbCBsb3RzKQogICAgICAgIHsKICAgICAg
ICBpZiAoZnJlYWRvbmx5KQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGZjb252ZXJ0
b3IuaW5jKGxvdHMsZnZhbHVlKTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9p
ZCB0YXR0cnZhbHVlYmFzZSA8VD46OmRlYyhib29sIGxvdHMpCiAgICAgICAgewogICAgICAgIGlm
IChmcmVhZG9ubHkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgZmNvbnZlcnRvci5k
ZWMobG90cyxmdmFsdWUpOwogICAgICAgIH0KCgoKCgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBj
bGFzcyB0YXR0cnZhbHVlIDogcHVibGljIHRhdHRydmFsdWViYXNlPFQ+CiAgICB7CiAgICBwdWJs
aWM6CiAgICAgICAgICAgICAgICB0YXR0cnZhbHVlKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJu
YW1lLHRzdHJpbmdjb252ZXJ0b3I8VD4gY29uc3QgJmNvbnZlcnRvcixib29sIHJlYWRvbmx5LCBU
IGNvbnN0IGluaXRpYWx2YWx1ZSkKICAgICAgICAgICAgOiB0YXR0cnZhbHVlYmFzZTxUPihhdHRy
bmFtZSxjb252ZXJ0b3IscmVhZG9ubHksaW5pdGlhbHZhbHVlICkge30KICAgICAgICAgICAgICAg
IHRhdHRydmFsdWUobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUsdHN0cmluZ2NvbnZlcnRv
cjxUPiBjb25zdCAmY29udmVydG9yLGJvb2wgcmVhZG9ubHkpCiAgICAgICAgICAgIDogdGF0dHJ2
YWx1ZWJhc2U8VD4oYXR0cm5hbWUsY29udmVydG9yLHJlYWRvbmx5ICkge30KCiAgICAgICAgICAg
ICAgICBib29sIHNhdmUodHdyaXRlc2VyaWFsc3RyZWFtICpzKSBjb25zdDsKICAgICAgICAgICAg
ICAgIGJvb2wgbG9hZCh0cmVhZHNlcmlhbHN0cmVhbSAqcyk7CiAgICAgICAgYm9vbCBnZXRsb2dp
bmZvKCB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICogJmF0dHJwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAmc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZXByaW50ZXIgY29uc3QgKiZzdHJjb252KSBjb25z
dDsKICAgICAgICAgICAgICAgIHRhdHRydmFsdWUgPFQ+JiBvcGVyYXRvcj0oVCBjb25zdCB2KSB7
IHNldHZhbHVlKHYpOyByZXR1cm4gKnRoaXM7fQogICAgfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBib29sIHRhdHRydmFsdWUgPFQ+OjpzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqcykgY29uc3QK
ICAgICAgICB7CiAgICAgICAgcy0+d3JpdGUoJnZhbHVlY29uc3RyZWYoKSxzaXplb2YoVCkpOwog
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBib29s
IHRhdHRydmFsdWUgPFQ+Ojpsb2FkKHRyZWFkc2VyaWFsc3RyZWFtICpzKQogICAgICAgIHsKICAg
ICAgICBpZiAoIXJlYWRvbmx5KCkpCiAgICAgICAgICAgICAgICByZXR1cm4gcy0+cmVhZCgmdmFs
dWVyZWYoKSxzaXplb2YoVCkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cgp0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCB0YXR0cnZhbHVlIDxUPjo6Z2V0bG9naW5mbyggdW5zaWdu
ZWQgY2hhciB2b2xhdGlsZSAqICZhdHRycHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAmc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXR0cnZhbHVlcHJpbnRlciBjb25zdCAqJnN0cmNvbnYp
IGNvbnN0CiAgICB7CiAgICBhdHRycHRyPSh1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICopJnZhbHVl
Y29uc3RyZWYoKTsKICAgIHNpemU9c2l6ZW9mKFQpOwogICAgc3RyY29udj0mZ2V0Y29udmVydG9y
KCk7CiAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCgoKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs
YXNzIHRzdHJpbmdhdHRydmFsdWUgOiBwdWJsaWMgdGF0dHJ2YWx1ZWJhc2U8VD4KICAgIHsKICAg
IHB1YmxpYzoKICAgICAgICAgICAgICAgIHRzdHJpbmdhdHRydmFsdWUobG9jYWw6OnN0cmluZyBj
b25zdCAmYXR0cm5hbWUsdHN0cmluZ2NvbnZlcnRvcjxUPiBjb25zdCAmY29udmVydG9yLGJvb2wg
cmVhZG9ubHksIFQgY29uc3QgaW5pdGlhbHZhbHVlKQogICAgICAgICAgICA6IHRhdHRydmFsdWVi
YXNlPFQ+KGF0dHJuYW1lLGNvbnZlcnRvcixyZWFkb25seSxpbml0aWFsdmFsdWUgKSB7fQogICAg
ICAgICAgICAgICAgdHN0cmluZ2F0dHJ2YWx1ZShsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFt
ZSx0c3RyaW5nY29udmVydG9yPFQ+IGNvbnN0ICZjb252ZXJ0b3IsYm9vbCByZWFkb25seSkKICAg
ICAgICAgICAgOiB0YXR0cnZhbHVlYmFzZTxUPihhdHRybmFtZSxjb252ZXJ0b3IscmVhZG9ubHkg
KSB7fQogICAgICAgICAgICAgICAgYm9vbCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqcykgY29u
c3Q7CiAgICAgICAgICAgICAgICBib29sIGxvYWQodHJlYWRzZXJpYWxzdHJlYW0gKnMpOwogICAg
ICAgIGJvb2wgZ2V0bG9naW5mbyggdW5zaWduZWQgY2hhciB2b2xhdGlsZSAqICZhdHRycHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgJnNpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhdHRydmFsdWVwcmludGVyIGNvbnN0
IComc3RyY29udikgY29uc3Q7CiAgICAgICAgICAgICAgICB0c3RyaW5nYXR0cnZhbHVlIDxUPiYg
b3BlcmF0b3I9KFQgY29uc3QgdikgeyBzZXR2YWx1ZSh2KTsgcmV0dXJuICp0aGlzO30KICAgIH07
Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCB0c3RyaW5nYXR0cnZhbHVlIDxUPjo6c2F2ZSh0
d3JpdGVzZXJpYWxzdHJlYW0gKnMpIGNvbnN0CiAgICAgICAgewogICAgdW5zaWduZWQgY2hhciB1
Y0xlbj12YWx1ZWNvbnN0cmVmKCkuc2l6ZSgpOwogICAgcy0+d3JpdGUoJnVjTGVuLHNpemVvZih1
Y0xlbikpOwogICAgcy0+d3JpdGUodmFsdWVjb25zdHJlZigpLmNfc3RyKCksdWNMZW4pOwogICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBib29sIHRz
dHJpbmdhdHRydmFsdWUgPFQ+Ojpsb2FkKHRyZWFkc2VyaWFsc3RyZWFtICpzKQogICAgICAgIHsK
ICAgIHVuc2lnbmVkIGNoYXIgdWNMZW47CiAgICBzLT5yZWFkKCZ1Y0xlbixzaXplb2YodWNMZW4p
KTsKICAgIGNoYXIgc3RyWzI1Nl07CiAgICBzLT5yZWFkKHN0cix1Y0xlbik7CiAgICBzdHJbdWNM
ZW5dPTA7CiAgICB2YWx1ZXJlZigpPWxvY2FsOjpzdHJpbmcoc3RyKTsKICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCB0c3RyaW5nYXR0cnZh
bHVlIDxUPjo6Z2V0bG9naW5mbyggdW5zaWduZWQgY2hhciB2b2xhdGlsZSAqICZhdHRycHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAm
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXR0cnZh
bHVlcHJpbnRlciBjb25zdCAqJnN0cmNvbnYpIGNvbnN0CiAgICB7CiAgICByZXR1cm4gZmFsc2U7
CiAgICB9CiMgOSAibWFwZWRpdC5oIiAyCgpjbGFzcyB0bWFwd3JhcHBlciA6IHB1YmxpYyB0d2l0
aGF0dHIKICAgIHsKICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBtYXBwb2ludGRlc2Ny
aXB0aW9uKHh5IGNvbnN0ICZtYXBwb2ludCxsb2NhbDo6c3RyaW5nICZzKSBjb25zdDsKICAgICAg
ICBib29sIHB0ZnJvbWF0dHJuYW1lKGxvY2FsOjpzdHJpbmcgY29uc3QgJm5hbWUseHkgJnB0KSBj
b25zdDsKICAgICAgICAgICAgICAgIHRtYXAgY29uc3QgJm1hcDsKICAgICAgICAgICAgICAgIHRz
dHJpbmdjb252ZXJ0b3I8c2hvcnQ+ICZ4dHlwZTsKICAgICAgICAgICAgICAgIHRzdHJpbmdjb252
ZXJ0b3I8c2hvcnQ+ICZ5dHlwZTsKICAgICAgICB0c3RyaW5nY29udmVydG9yPHNob3J0PiAmenR5
cGU7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdG1hcHdyYXBwZXIoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG1hcCBjb25zdCAmYW1hcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0c3RyaW5nY29udmVydG9yPHNob3J0PiAmYXh0eXBlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRzdHJpbmdjb252ZXJ0b3I8c2hvcnQ+ICZheXR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0cmluZ2NvbnZlcnRvcjxzaG9ydD4g
JmF6dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgYm9vbCBm
b3JlYWNoKGxvY2FsOjpzdHJpbmcgY29uc3QgJmRpcm5hbWUsdGF0dHJwcm9jZXNzb3IgJmRvdGhp
cyk7CiAgICAgICAgYm9vbCBmaWxsdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0
cm5hbWUsbG9jYWw6OnN0cmluZyAmcyxsb2NhbDo6c3RyaW5nICZ1bml0cyk7CiAgICAgICAgdm9p
ZCBhZnRlcmxvYWQoKSB7fQogICAgfTsKCmNsYXNzIHRjb25zdG1hcHdyYXBwZXIgOiBwdWJsaWMg
dG1hcHdyYXBwZXIKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGNv
bnN0bWFwd3JhcHBlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bWFwIGNvbnN0
ICZhbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdHJpbmdjb252ZXJ0b3I8
c2hvcnQ+ICZheHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0cmluZ2Nv
bnZlcnRvcjxzaG9ydD4gJmF5dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
c3RyaW5nY29udmVydG9yPHNob3J0PiAmYXp0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKQogICAgICAgICAgICA6CiAgICAgICAgICAgIHRtYXB3cmFwcGVyKGFtYXAsYXh0eXBl
LGF5dHlwZSxhenR5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgdHdpdGhhdHRyOjpyZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6c3Ry
aW5nIGNvbnN0ICZhdHRybmFtZSxsb2NhbDo6c3RyaW5nIGNvbnN0ICZzKTsKICAgICAgICAgICAg
ICAgIGJvb2wgcmVhZG9ubHkobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUpOwogICAgICAg
ICAgICAgICAgYm9vbCBkaXJ0eShib29sIHJlc2V0KTsKICAgICAgICAgICAgICAgIHZvaWQgaW5j
KGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLGJvb2wgbG90cyk7CiAgICAgICAgICAgICAg
ICB2b2lkIGRlYyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxib29sIGxvdHMpOwogICAg
ICAgICAgICAgICAgYm9vbCBhZGRuYW1lZGF0dHJpYnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0ICZu
YW1lLGxvY2FsOjpzdHJpbmcgY29uc3QgJnZhbHVlKTsKICAgICAgICAgICAgICAgIGJvb2wgcmVt
b3ZlbmFtZWRhdHRyaWJ1dGUobG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSk7CgogICAgICAgICAg
ICAgICAgdm9pZCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqd3JpdGVzdHJlYW0sdW5zaWduZWQg
aW50IG9iam5hbWVjcmMpIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBsb2FkKHRyZWFkc2Vy
aWFsc3RyZWFtICpyZWFkc3RyZWFtLHVuc2lnbmVkIGludCBvYmpuYW1lY3JjKTsKCiAgICAgICAg
Ym9vbCBnZXRsb2dpbmZvKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICogJmF0dHJw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAmc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZXByaW50ZXIg
Y29uc3QgKiZzdHJjb252LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
bDo6c3RyaW5nICZ1bml0cykgY29uc3Q7CiAgICAgICAgfTsKCgpjbGFzcyB0ZHluYW1pY21hcHdy
YXBwZXIgOiBwdWJsaWMgdG1hcHdyYXBwZXIKICAgICAgICB7CiAgICAgICAgcHJvdGVjdGVkOgog
ICAgICAgICAgICAgICAgdGR5bmFtaWNtYXAgJmRtYXA7CiAgICAgICAgYm9vbCBpc2RpcnR5Owog
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRkeW5hbWljbWFwd3JhcHBlcigKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHluYW1pY21hcCAmYW1hcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0c3RyaW5nY29udmVydG9yPHNob3J0PiAmYXh0eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdHJpbmdjb252ZXJ0b3I8c2hvcnQ+ICZheXR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0cmluZ2NvbnZlcnRvcjxzaG9y
dD4gJmF6dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAg
ICAgICAgdHdpdGhhdHRyOjpyZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6
c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxsb2NhbDo6c3RyaW5nIGNvbnN0ICZzKTsKICAgICAgICAg
ICAgICAgIGJvb2wgcmVhZG9ubHkobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUpOwogICAg
ICAgICAgICAgICAgYm9vbCBkaXJ0eShib29sIHJlc2V0KTsKICAgICAgICAgICAgICAgIHZvaWQg
aW5jKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLGJvb2wgbG90cyk7CiAgICAgICAgICAg
ICAgICB2b2lkIGRlYyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxib29sIGxvdHMpOwog
ICAgICAgICAgICAgICAgYm9vbCBhZGRuYW1lZGF0dHJpYnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0
ICZuYW1lLGxvY2FsOjpzdHJpbmcgY29uc3QgJnZhbHVlKTsKICAgICAgICAgICAgICAgIGJvb2wg
cmVtb3ZlbmFtZWRhdHRyaWJ1dGUobG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSk7CgogICAgICAg
ICAgICAgICAgdm9pZCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqd3JpdGVzdHJlYW0sdW5zaWdu
ZWQgaW50IG9iam5hbWVjcmMpIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBsb2FkKHRyZWFk
c2VyaWFsc3RyZWFtICpyZWFkc3RyZWFtLHVuc2lnbmVkIGludCBvYmpuYW1lY3JjKTsKCiAgICAg
ICAgYm9vbCBnZXRsb2dpbmZvKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICogJmF0
dHJwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAm
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZXByaW50
ZXIgY29uc3QgKiZzdHJjb252LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b2NhbDo6c3RyaW5nICZ1bml0cykgY29uc3Q7CiAgICAgICAgfTsKIyAxMCAiZW5ncHJvZi5oIiAy
CiMgMSAiZWN1dHlwZXMuaCIgMQoKCgoKIyAxICJzdHJjb252cy5oIiAxCgoKCgoKCiMgMSAic3Ry
ZnVuY3MuaCIgMQoKCgoKCmxvY2FsOjpzdHJpbmcgdW5zaWduZWRudW1iZXIodW5zaWduZWQgaW50
IGksaW50IGZpZWxkbGVuPTAsY2hhciBwYWRjaGFyPScgJyxpbnQgYmFzZW49MTApOwpsb2NhbDo6
c3RyaW5nIHNpZ25lZG51bWJlcihpbnQgaSxpbnQgZmllbGRsZW49MCxjaGFyIHBhZGNoYXI9JyAn
LGludCBiYXNlbj0xMCk7CmxvY2FsOjpzdHJpbmcgZml4ZWRwdDE2MTYoaW50IHZhbHVlLHNob3J0
IGZyYWN0aW9uYWxzaXplLGludCBmaWVsZGxlbixjaGFyIHBhZGNoYXI9JyAnLGludCBiYXNlbj0x
MCk7CmxvY2FsOjpzdHJpbmcgZnJhY3Rpb25hbChpbnQgdixzaG9ydCBmcmFjdGlvbmFsc2l6ZSxz
aG9ydCBkaWdpdHNzaGlmdGVkLGludCBmaWVsZGxlbixjaGFyIHBhZGNoYXI9JyAnLGludCBiYXNl
bj0xMCk7Cgpib29sIHN0cmluZ3RvbnVtYmVyKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsaW50IGJh
c2UsaW50ICpyZXN1bHQpOwpib29sIGZpeGVkcHQxNjE2c3RyaW5ndG9udW1iZXIobG9jYWw6OnN0
cmluZyBjb25zdCAmcyxpbnQgKnJlc3VsdG91dCk7CmJvb2wgZnJhY3Rpb25hbHN0cmluZ3RvbnVt
YmVyKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsaW50IHBvd2VyMTAsaW50ICpyZXN1bHRvdXQpOwoj
IDggInN0cmNvbnZzLmgiIDIKCgoKY2xhc3MgdGN5Y2xpY2FuZ2xldHlwZSA6IHB1YmxpYyB0c3Ry
aW5nY29udmVydG9yPHRhbmdsZT4KICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgIGludCBmaWVsZGxlbjsKICAgICAgICAgICAgICAgIGludCBmcmFjc2l6ZTsKICAgICAg
ICAgICAgICAgIHRhbmdsZSBjeWNsZTsKICAgICAgICAgICAgICAgIHRhbmdsZSBpbmNyZW1lbnQ7
CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGN5Y2xpY2FuZ2xldHlwZSggaW50IGFm
aWVsZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZnJh
Y3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YW5nbGUgY3lj
bGVsZW5ndGggKTsKCiAgICAgICAgICAgICAgICB2b2lkIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6
c3RyaW5nICZzLHRhbmdsZSBjb25zdCAmKSBjb25zdDsKICAgICAgICAgICAgICAgIHJlYWR2YWx1
ZXJlc3VsdHMgcmVhZHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsdGFuZ2xlICYp
IGNvbnN0OwogICAgICAgIGxvY2FsOjpzdHJpbmcgdW5pdHMoKSBjb25zdDsKICAgICAgICAgICAg
ICAgIGJvb2wgaW5jKGJvb2wgbG90cyx0YW5nbGUgJikgY29uc3Q7CiAgICAgICAgICAgICAgICBi
b29sIGRlYyhib29sIGxvdHMsdGFuZ2xlICYpIGNvbnN0OwogICAgICAgIGludCB2YWx1ZWZpZWxk
bGVuZ3RoKCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gZmllbGRsZW47
CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKCgpjbGFzcyB0ZGVsdGFhbmdsZXR5cGUgOiBwdWJs
aWMgdHN0cmluZ2NvbnZlcnRvcjx0YW5nbGU+CiAgICAgICAgewogICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICBpbnQgZmllbGRsZW47CiAgICAgICAgICAgICAgICBpbnQgZnJhY3NpemU7
CiAgICAgICAgICAgICAgICB0YW5nbGUgbG93ZXJsaW1pdDsKICAgICAgICAgICAgICAgIHRhbmds
ZSB1cHBlcmxpbWl0OwogICAgICAgICAgICAgICAgdGFuZ2xlIGluY3JlbWVudDsKICAgICAgICBw
dWJsaWM6CiAgICAgICAgICAgICAgICB0ZGVsdGFhbmdsZXR5cGUoIGludCBhZmllbGRsZW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWZyYWNzaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlIGFsb3dlcmxpbWl0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlIGF1cHBlcmxpbWl0
KTsKCiAgICAgICAgICAgICAgICB2b2lkIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nICZz
LHRhbmdsZSBjb25zdCAmKSBjb25zdDsKICAgICAgICAgICAgICAgIHJlYWR2YWx1ZXJlc3VsdHMg
cmVhZHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsdGFuZ2xlICYpIGNvbnN0Owog
ICAgICAgICAgICAgICAgbG9jYWw6OnN0cmluZyB1bml0cygpIGNvbnN0OwogICAgICAgICAgICAg
ICAgYm9vbCBpbmMoYm9vbCBsb3RzLHRhbmdsZSAmKSBjb25zdDsKICAgICAgICAgICAgICAgIGJv
b2wgZGVjKGJvb2wgbG90cyx0YW5nbGUgJikgY29uc3Q7CiAgICAgICAgaW50IHZhbHVlZmllbGRs
ZW5ndGgoKSBjb25zdAogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBmaWVsZGxlbjsK
ICAgICAgICAgICAgfQogICAgICAgIH07CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyB0
aW50dHlwZSA6IHB1YmxpYyB0c3RyaW5nY29udmVydG9yPFQ+CiAgICAgICAgewogICAgICAgIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICBsb2NhbDo6c3RyaW5nIGZ1bml0czsKICAgICAgICAgICAg
ICAgIHNob3J0IGZpZWxkbGVuOwogICAgICAgICAgICAgICAgc2hvcnQgZnJhY3NpemU7CiAgICAg
ICAgICAgICAgICBzaG9ydCBwb3dlcjEwOwogICAgICAgICAgICAgICAgc2hvcnQgaW5jcmVtZW50
OwogICAgICAgICAgICAgICAgVCBsb3dlcmxpbWl0OwogICAgICAgICAgICAgICAgVCB1cHBlcmxp
bWl0OwogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRpbnR0eXBlKCBsb2NhbDo6c3Ry
aW5nIGNvbnN0ICZhdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFm
aWVsZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWZyYWNzaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcG93ZXIxMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgYWluY3JlbWVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUIGFsb3dlcmxpbWl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFQgYXVwcGVybGltaXQpOwoKICAgICAgICAgICAgICAgIHZvaWQgZmlsbHZhbHVlc3RyaW5nKGxv
Y2FsOjpzdHJpbmcgJnMsVCBjb25zdCAmKSBjb25zdDsKICAgICAgICB0c3RyY29udnJlc3VsdDo6
cmVhZHZhbHVlcmVzdWx0cyByZWFkdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmcyxU
ICYpIGNvbnN0OwogICAgICAgICAgICAgICAgbG9jYWw6OnN0cmluZyB1bml0cygpIGNvbnN0Owog
ICAgICAgICAgICAgICAgYm9vbCBpbmMoYm9vbCBsb3RzLFQgJikgY29uc3Q7CiAgICAgICAgICAg
ICAgICBib29sIGRlYyhib29sIGxvdHMsVCAmKSBjb25zdDsKICAgICAgICBpbnQgdmFsdWVmaWVs
ZGxlbmd0aCgpIGNvbnN0CiAgICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGZpZWxkbGVu
OwogICAgICAgICAgICB9CiAgICAgICAgfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0aW50dHlw
ZTxUPjo6CiAgICAgICAgICAgICAgICB0aW50dHlwZSggbG9jYWw6OnN0cmluZyBjb25zdCAmYXVu
aXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZmllbGRsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFmcmFjc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgYXBvd2VyMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGFpbmNyZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCBh
bG93ZXJsaW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUIGF1cHBlcmxpbWl0
KQogICAgICAgIDogZmllbGRsZW4oYWZpZWxkbGVuKSwKICAgICAgICAgICAgICAgIGZyYWNzaXpl
KGFmcmFjc2l6ZSksCiAgICAgICAgICAgICAgICBwb3dlcjEwKGFwb3dlcjEwKSwKICAgICAgICAg
ICAgICAgIGluY3JlbWVudChhaW5jcmVtZW50KSwKICAgICAgICAgICAgICAgIGxvd2VybGltaXQo
YWxvd2VybGltaXQpLAogICAgICAgICAgICAgICAgdXBwZXJsaW1pdChhdXBwZXJsaW1pdCksCiAg
ICAgICAgICAgICAgICBmdW5pdHMoYXVuaXRzKQogICAgICAgIHsKICAgICAgICBpZiAocG93ZXIx
MD5mcmFjc2l6ZSkKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPHBvd2VyMTAtZnJhY3Np
emU7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnQqPTEwOwogICAgICAgIH0K
CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIHRpbnR0eXBlPFQ+OjpmaWxsdmFsdWVzdHJpbmco
bG9jYWw6OnN0cmluZyAmcyxUIGNvbnN0ICZwKSBjb25zdAogICAgICAgIHsKICAgICAgICBzPWZy
YWN0aW9uYWwocCxmcmFjc2l6ZSxwb3dlcjEwLGZpZWxkbGVuKTsKICAgICAgICB9Cgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gdHN0cmNvbnZyZXN1bHQ6OnJlYWR2YWx1ZXJlc3VsdHMgdGludHR5cGU8
VD46OnJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZzLFQgJnApIGNvbnN0CiAg
ICAgICAgewogICAgICAgIGludCByZXN1bHQ7CgogICAgICAgIGJvb2wgcj1mcmFjdGlvbmFsc3Ry
aW5ndG9udW1iZXIocyxwb3dlcjEwLCZyZXN1bHQpOwogICAgICAgIGlmIChyKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgaWYgKHJlc3VsdD49bG93ZXJsaW1pdCAmJiByZXN1bHQ8
PXVwcGVybGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcD1yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gb3V0b2ZyYW5nZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICByZXR1cm4gYmFkZm9ybWF0OwogICAgICAgIH0KCnRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBsb2NhbDo6c3RyaW5nIHRpbnR0eXBlPFQ+Ojp1bml0cygpIGNvbnN0CiAgICAg
ICAgewogICAgICAgIHJldHVybiBmdW5pdHM7CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGJvb2wgdGludHR5cGU8VD46OmluYyhib29sIGxvdHMsVCAmcCkgY29uc3QKICAgICAgICB7
CiAgICAgICAgVCBuPXAgKyBpbmNyZW1lbnQqKGxvdHM/MTA6MSk7CiAgICAgICAgaWYgKG4+PWxv
d2VybGltaXQgJiYgbjw9dXBwZXJsaW1pdCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIHA9bjsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQog
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cgp0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCB0aW50dHlwZTxUPjo6ZGVjKGJvb2wgbG90cyxUICZwKSBj
b25zdAogICAgICAgIHsKICAgICAgICBUIG49cCAtIGluY3JlbWVudCoobG90cz8xMDoxKTsKICAg
ICAgICBpZiAobj49bG93ZXJsaW1pdCAmJiBuPD11cHBlcmxpbWl0KQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgcD1uOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgIH0KCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIHRzY2FsZWRpbnR0eXBlIDog
cHVibGljIHRzdHJpbmdjb252ZXJ0b3I8VD4KICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgIGxvY2FsOjpzdHJpbmcgZnVuaXRzOwogICAgICAgICAgICAgICAgc2hvcnQg
ZmllbGRsZW47CiAgICAgICAgICAgICAgICBzaG9ydCBmcmFjc2l6ZTsKICAgICAgICAgICAgICAg
IHNob3J0IHBvd2VyMTA7CiAgICAgICAgICAgICAgICBzaG9ydCBpbmNyZW1lbnQ7CiAgICAgICAg
ICAgICAgICBUIG11bHRpcGxpZXI7CiAgICAgICAgICAgICAgICBUIGRpdmlzb3I7CiAgICAgICAg
ICAgICAgICBUIGxvd2VybGltaXQ7CiAgICAgICAgICAgICAgICBUIHVwcGVybGltaXQ7CiAgICAg
ICAgcHVibGljOgogICAgICAgICAgICAgICAgdHNjYWxlZGludHR5cGUoIGxvY2FsOjpzdHJpbmcg
Y29uc3QgJmF1bml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUIGFtdWx0aXBs
aWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgYWRpdmlzb3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFmaWVsZGxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgYWZyYWNzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBhcG93ZXIxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWlu
Y3JlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUIGFsb3dlcmxpbWl0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgYXVwcGVybGltaXQpOwoKICAgICAgICAg
ICAgICAgIHZvaWQgZmlsbHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgJnMsVCBjb25zdCAmKSBj
b25zdDsKICAgICAgICB0c3RyY29udnJlc3VsdDo6cmVhZHZhbHVlcmVzdWx0cyByZWFkdmFsdWVz
dHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmcyxUICYpIGNvbnN0OwogICAgICAgICAgICAgICAg
bG9jYWw6OnN0cmluZyB1bml0cygpIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBpbmMoYm9v
bCBsb3RzLFQgJikgY29uc3Q7CiAgICAgICAgICAgICAgICBib29sIGRlYyhib29sIGxvdHMsVCAm
KSBjb25zdDsKICAgICAgICBpbnQgdmFsdWVmaWVsZGxlbmd0aCgpIGNvbnN0CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIGZpZWxkbGVuOwogICAgICAgICAgICB9CiAgICAgICAgfTsK
CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0c2NhbGVkaW50dHlwZTxUPjo6CiAgICAgICAgICAgICAg
ICB0c2NhbGVkaW50dHlwZSggbG9jYWw6OnN0cmluZyBjb25zdCAmYXVuaXRzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFQgYW11bHRpcGxpZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVCBhZGl2aXNvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYWZpZWxkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZnJhY3Np
emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFwb3dlcjEwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhaW5jcmVtZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFQgYWxvd2VybGltaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVCBhdXBwZXJsaW1pdCkKICAgICAgICA6IG11bHRpcGxpZXIoYW11bHRpcGxpZXIpLAog
ICAgICAgICAgICAgICAgZGl2aXNvcihhZGl2aXNvciksCiAgICAgICAgICAgICAgICBmaWVsZGxl
bihhZmllbGRsZW4pLAogICAgICAgICAgICAgICAgZnJhY3NpemUoYWZyYWNzaXplKSwKICAgICAg
ICAgICAgICAgIHBvd2VyMTAoYXBvd2VyMTApLAogICAgICAgICAgICAgICAgaW5jcmVtZW50KGFp
bmNyZW1lbnQpLAogICAgICAgICAgICAgICAgbG93ZXJsaW1pdChhbG93ZXJsaW1pdCksCiAgICAg
ICAgICAgICAgICB1cHBlcmxpbWl0KGF1cHBlcmxpbWl0KSwKICAgICAgICAgICAgICAgIGZ1bml0
cyhhdW5pdHMpCiAgICAgICAgewogICAgICAgIGlmIChwb3dlcjEwPmZyYWNzaXplKQogICAgICAg
ICAgICAgICAgZm9yIChpbnQgaT0wO2k8cG93ZXIxMC1mcmFjc2l6ZTtpKyspCiAgICAgICAgICAg
ICAgICAgICAgICAgIGluY3JlbWVudCo9MTA7CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IHZvaWQgdHNjYWxlZGludHR5cGU8VD46OmZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5n
ICZzLFQgY29uc3QgJnApIGNvbnN0CiAgICAgICAgewogICAgICAgIGludCBwdD1pc2NhbGUocCxt
dWx0aXBsaWVyLGRpdmlzb3IpOwogICAgICAgIHM9ZnJhY3Rpb25hbChwdCxmcmFjc2l6ZSxwb3dl
cjEwLGZpZWxkbGVuKTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdHN0cmNvbnZy
ZXN1bHQ6OnJlYWR2YWx1ZXJlc3VsdHMgdHNjYWxlZGludHR5cGU8VD46OnJlYWR2YWx1ZXN0cmlu
Zyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZzLFQgJnApIGNvbnN0CiAgICAgICAgewogICAgICAgIGlu
dCByZXN1bHQ7CiAgICAgICAgYm9vbCByPWZyYWN0aW9uYWxzdHJpbmd0b251bWJlcihzLHBvd2Vy
MTAsJnJlc3VsdCk7CiAgICAgICAgcmVzdWx0PWlzY2FsZShyZXN1bHQsZGl2aXNvcixtdWx0aXBs
aWVyKTsKICAgICAgICBpZiAocikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQ+PWxvd2VybGltaXQgJiYgcmVzdWx0PD11cHBlcmxpbWl0KQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHA9cmVzdWx0OwogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gb2s7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dG9mcmFuZ2U7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIGJh
ZGZvcm1hdDsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gbG9jYWw6OnN0cmluZyB0
c2NhbGVkaW50dHlwZTxUPjo6dW5pdHMoKSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4g
ZnVuaXRzOwogICAgICAgIH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBib29sIHRzY2FsZWRpbnR0
eXBlPFQ+OjppbmMoYm9vbCBsb3RzLFQgJnApIGNvbnN0CiAgICAgICAgewogICAgICAgIFQgbj1w
ICsgaW5jcmVtZW50Kihsb3RzPzEwOjEpOwogICAgICAgIGlmIChuPj1sb3dlcmxpbWl0ICYmIG48
PXVwcGVybGltaXQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwPW47CiAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGJvb2wgdHNjYWxlZGludHR5cGU8VD46OmRlYyhib29sIGxvdHMsVCAmcCkgY29uc3QKICAg
ICAgICB7CiAgICAgICAgVCBuPXAgLSBpbmNyZW1lbnQqKGxvdHM/MTA6MSk7CiAgICAgICAgaWYg
KG4+PWxvd2VybGltaXQgJiYgbjw9dXBwZXJsaW1pdCkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIHA9bjsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9
CgoKCmNsYXNzIHRib29sdHlwZSA6IHB1YmxpYyB0c3RyaW5nY29udmVydG9yPGJvb2w+CiAgICAg
ICAgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBsb2NhbDo6c3RyaW5nIHRydWVz
dHJpbmc7CiAgICAgICAgICAgICAgICBsb2NhbDo6c3RyaW5nIGZhbHNlc3RyaW5nOwogICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgICAgIHRib29sdHlwZSggbG9jYWw6OnN0cmluZyBjb25zdCAm
dHJ1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWw6OnN0cmluZyBjb25z
dCAmZmFsc2VzKTsKCiAgICAgICAgICAgICAgICB2b2lkIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6
c3RyaW5nICZzLGJvb2wgY29uc3QgJikgY29uc3Q7CiAgICAgICAgICAgICAgICByZWFkdmFsdWVy
ZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZzLGJvb2wgJikgY29u
c3Q7CiAgICAgICAgICAgICAgICBsb2NhbDo6c3RyaW5nIHVuaXRzKCkgY29uc3Q7CiAgICAgICAg
ICAgICAgICBib29sIGluYyhib29sIGxvdHMsYm9vbCAmKSBjb25zdDsKICAgICAgICAgICAgICAg
IGJvb2wgZGVjKGJvb2wgbG90cyxib29sICYpIGNvbnN0OwogICAgICAgIGludCB2YWx1ZWZpZWxk
bGVuZ3RoKCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gc3RkOjptYXgo
dHJ1ZXN0cmluZy5zaXplKCksZmFsc2VzdHJpbmcuc2l6ZSgpKTsKICAgICAgICAgICAgfQogICAg
ICAgIH07CgoKY2xhc3MgdHN0cmluZ3R5cGUgOiBwdWJsaWMgdHN0cmluZ2NvbnZlcnRvcjxsb2Nh
bDo6c3RyaW5nPgogICAgewogICAgcHJpdmF0ZToKICAgICAgICBpbnQgZmllbGRsZW47CiAgICBw
dWJsaWM6CiAgICAgICAgdHN0cmluZ3R5cGUoaW50IGFmaWVsZGxlbik7CiAgICAgICAgICAgICAg
ICB2b2lkIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nICZzLGxvY2FsOjpzdHJpbmcgY29u
c3QgJikgY29uc3Q7CiAgICAgICAgICAgICAgICByZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0
cmluZyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZzLGxvY2FsOjpzdHJpbmcgJikgY29uc3Q7CiAgICAg
ICAgICAgICAgICBsb2NhbDo6c3RyaW5nIHVuaXRzKCkgY29uc3Q7CiAgICAgICAgICAgICAgICBi
b29sIGluYyhib29sIGxvdHMsbG9jYWw6OnN0cmluZyAmKSBjb25zdDsKICAgICAgICAgICAgICAg
IGJvb2wgZGVjKGJvb2wgbG90cyxsb2NhbDo6c3RyaW5nICYpIGNvbnN0OwogICAgICAgIGludCB2
YWx1ZWZpZWxkbGVuZ3RoKCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
ZmllbGRsZW47CiAgICAgICAgICAgIH0KICAgIH07CiMgNiAiZWN1dHlwZXMuaCIgMgoKdHlwZWRl
ZiB0YXR0cnZhbHVlPHNob3J0PiB0c2hvcnR2YWx1ZTsKZXh0ZXJuIHRpbnR0eXBlPHNob3J0PiBz
aG9ydHR5cGU7Cgp0eXBlZGVmIHRhdHRydmFsdWU8dW5zaWduZWQgc2hvcnQgPiB0dW5zaWduZWRz
aG9ydHZhbHVlOwpleHRlcm4gdGludHR5cGU8dW5zaWduZWQgc2hvcnQ+IHVuc2lnbmVkc2hvcnR0
eXBlOwoKdHlwZWRlZiB0YXR0cnZhbHVlPGludD4gdGludHZhbHVlOwpleHRlcm4gdGludHR5cGU8
aW50PiBpbnR0eXBlOwoKdHlwZWRlZiB0YXR0cnZhbHVlPHVuc2lnbmVkIGludD4gdHVuc2lnbmVk
aW50dmFsdWU7CmV4dGVybiB0aW50dHlwZTx1bnNpZ25lZCBpbnQ+IHVuc2lnbmVkaW50dHlwZTsK
CnR5cGVkZWYgdGF0dHJ2YWx1ZTx0YW5nbGU+IHRjeWNsaWNhbmdsZXZhbHVlOwpleHRlcm4gdGN5
Y2xpY2FuZ2xldHlwZSBjcmFua3Bvc3R5cGUxMHRoczsKCnR5cGVkZWYgdGF0dHJ2YWx1ZTx0YW5n
bGU+IHRkZWx0YWFuZ2xldmFsdWU7CmV4dGVybiB0ZGVsdGFhbmdsZXR5cGUgaWduaXRpb250cmlt
dHlwZTsKZXh0ZXJuIHRkZWx0YWFuZ2xldHlwZSBpZ25jdXRyYXRldHlwZTsKZXh0ZXJuIHRkZWx0
YWFuZ2xldHlwZSBkdXR5Y3ljbGV0eXBlOwoKdHlwZWRlZiB0YXR0cnZhbHVlPGJvb2w+IHRib29s
dmFsdWU7CmV4dGVybiB0Ym9vbHR5cGUgb25vZmZ0eXBlOwpleHRlcm4gdGJvb2x0eXBlIHRydWVm
YWxzZXR5cGU7CgpleHRlcm4gdGludHR5cGU8aW50PiBpbmplY3RvcnJhdGV0eXBlOwpleHRlcm4g
dGludHR5cGU8aW50PiBpbmp0aW1ldHlwZWNhbmJlbmVnOwpleHRlcm4gdGludHR5cGU8aW50PiBp
bmp0aW1ldHlwZTsKZXh0ZXJuIHRpbnR0eXBlPGludD4gcGVyY2VudHRyaW10eXBlOwpleHRlcm4g
dGludHR5cGU8aW50PiBwZXJjZW50bWF4MTAwdHlwZTsKZXh0ZXJuIHRpbnR0eXBlPGludD4gaWdu
dGltZXR5cGU7CgpleHRlcm4gdGludHR5cGU8aW50PiBjeWx2b2x1bWVpbmNjdHlwZTsKCmV4dGVy
biB0aW50dHlwZTxpbnQ+IGludHJwbXR5cGU7CgoKZXh0ZXJuIHRpbnR0eXBlPGludD4gbWFuaWZv
bGRhYnNvbHV0ZXByZXNzdXJldHlwZTsKZXh0ZXJuIHRpbnR0eXBlPGludD4gbWFuaWZvbGRyZWxh
dGl2ZXByZXNzdXJldHlwZTsKCmV4dGVybiB0aW50dHlwZTxpbnQ+IHRlbXBlcmF0dXJldHlwZTsK
ZXh0ZXJuIHRpbnR0eXBlPGludD4gdm9sdGFnZXR5cGU7CmV4dGVybiB0aW50dHlwZTxpbnQ+IG94
eXZvbHR0eXBlOwoKZXh0ZXJuIHRpbnR0eXBlPGludD4gaW50dmV0eXBlOwoKZXh0ZXJuIHRpbnR0
eXBlPHVuc2lnbmVkIGludD4gcnVudGltZXR5cGU7CmV4dGVybiB0aW50dHlwZTxpbnQ+IHN0YXJ0
dGltZXR5cGU7CgpleHRlcm4gdGludHR5cGU8aW50PiBhZnJhdGlvdHlwZTsKZXh0ZXJuIHRpbnR0
eXBlPGludD4gc21hbGxhaXJtYXNzdHlwZTsKCmV4dGVybiB0aW50dHlwZTxpbnQ+IHNhbXBsZXN0
eXBlOwpleHRlcm4gdGludHR5cGU8aW50PiBwZXJjZW50cGVyc2VjdHlwZTsKCmV4dGVybiB0aW50
dHlwZTxzaG9ydD4gc2hvcnRycG10eXBlOwpleHRlcm4gdGludHR5cGU8c2hvcnQ+IHNob3J0dmV0
eXBlOwoKZXh0ZXJuIHRzY2FsZWRpbnR0eXBlPHNob3J0PiBzaG9ydG1hcHR5cGU7CmV4dGVybiB0
c2NhbGVkaW50dHlwZTxzaG9ydD4gc2hvcnRhZHZ0eXBlOwoKZXh0ZXJuIHRpbnR0eXBlPGludD4g
ZnJlcTEwdGhzdHlwZTsKCmV4dGVybiB0c3RyaW5ndHlwZSBsb2djb2xzdHJpbmd0eXBlOwpleHRl
cm4gdHN0cmluZ3R5cGUgbG9nZXhwcnN0cmluZ3R5cGU7CiMgMTEgImVuZ3Byb2YuaCIgMgoKY2xh
c3MgdGVuZ2luZXByb2ZpbGUgOiBwdWJsaWMgdHdpdGhoYXJkYXR0cgogICAgICAgIHsKICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgICAgdGR5bmFtaWNtYXAgaWduaXRpb25tYXA7CiAgICAg
ICAgICAgICAgICB0ZHluYW1pY21hcCBkeW5hbWljdmU7CgogICAgICAgICAgICAgICAgdG1hcCAm
aW5pdGlhbHZlOwogICAgICAgICAgICAgICAgdG1hcCAmaW5pdGlhbGFkdjsKCiAgICAgICAgICAg
ICAgICB0aW50dmFsdWUgY3lsaW5kZXJ2b2x1bWU7CgogICAgICAgICAgICAgICAgdGR5bmFtaWNt
YXB3cmFwcGVyIGluam1hcHdyYXA7CiAgICAgICAgICAgICAgICB0ZHluYW1pY21hcHdyYXBwZXIg
aWdubWFwd3JhcDsKCiAgICAgICAgICAgICAgICB0c2hvcnR2YWx1ZSBtaW5sZWFybnJwbTsKICAg
ICAgICAgICAgICAgIHRzaG9ydHZhbHVlIG1heGxlYXJucnBtOwogICAgICAgICAgICAgICAgdHNo
b3J0dmFsdWUgbWlubGVhcm5tYXA7CiAgICAgICAgICAgICAgICB0c2hvcnR2YWx1ZSBtYXhsZWFy
bm1hcDsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0ZW5naW5lcHJvZmlsZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdGN5bHZvbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0bWFwICZkZWZhdWx0dmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG1hcCAmZGVmYXVsdGFkdiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZGVmYXVsdGxlYXJubWlucnBtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZWZhdWx0bGVhcm5tYXhycG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGRlZmF1bHRsZWFybm1pbm1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZGVmYXVsdGxlYXJubWF4bWFwICk7CiAgICAgICAgICAgICAgICB2b2lkIHNlZWR0
YWJsZXMoKTsKCiAgICAgICAgICAgICAgICB2b2lkIGNhbGNjb25kKCBpbnQgcnBtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFp
cm1hc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlICpvcHRpbWFsaWdu
YW5nbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp2ZSk7CgogICAgICAg
ICAgICAgICAgdm9pZCBsZWFybnZlcG9pbnQoaW50IHJwbSxpbnQgbWFwLGludCB2ZSk7CgogICAg
ICAgICAgICAgICAgaW50IHR5cGljYWxhaXJtYXNzcGVyY3lsKGludCBpYXQpOwogICAgICAgIH07
CiMgOCAiZW5naW5lLmgiIDIKIyAxICJldmVudGNoYW4uaCIgMQoKCgojIDEgImV2ZW50LmgiIDEK
CgoKCgpjbGFzcyB0ZXZlbnQKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAg
ICAgdGV2ZW50ICpuZXh0OwogICAgICAgICAgICAgICAgaW50IGFuZ2xlc3RlcDsKICAgICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB2b2xhdGlsZSAqcG9ydGFk
ZHJlc3M7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0c2FuZG1hc2s7CiAgICAgICAg
ICAgICAgICBib29sIHNhZmU7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgYm9vbCBv
bGRldmVudDsKCgogICAgICAgICAgICAgICAgdm9pZCBzZXRwcm9wZXJ0aWVzKCB1bnNpZ25lZCBz
aG9ydCB2b2xhdGlsZSAqcG9ydGFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCBtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c2FmZSApOwoKICAgICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZSgpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYml0cz1iaXRzYW5kbWFzazsKICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgbWFzaz1iaXRzYW5kbWFzaz4+MTY7CiAgICAgICAgICAg
ICAgICAgICAgICAgICpwb3J0YWRkcmVzcz0qcG9ydGFkZHJlc3MgJiBtYXNrIHwgYml0czsKICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICB2b2lkIGV4ZWN1dGVpZnNh
ZmUoKSB7aWYgKHNhZmUpIGV4ZWN1dGUoKTt9OwogICAgICAgIH07CgpjbGFzcyB0ZXZlbnRwb29s
CiAgICAgICAgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHZpcnR1YWwgdGV2ZW50
ICphbGxvY2V2ZW50KCB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcG9ydGFkZHJlc3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IGJpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IG1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2FmZSk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBmcmVl
ZXZlbnQodGV2ZW50ICpldmVudCk9MDsKICAgICAgICB9OwoKY2xhc3MgdGFuZ2xldHJhbnNsYXRv
cgogICAgICAgIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB2aXJ0dWFsIGludCB0
cmFuc2xhdGVhbmdsZXRvc3RlcCh0YW5nbGUgYW5nbGUpPTA7CiAgICAgICAgICAgICAgICB2aXJ0
dWFsIGJvb2wgaW5vcmRlciggdGV2ZW50ICphLHRldmVudCAqYiApPTA7CiAgICAgICAgICAgICAg
ICBib29sIGluYmV0d2VlbiggdGV2ZW50ICpiZWZvcmUsdGV2ZW50ICpuLHRldmVudCAqYWZ0ZXIg
KTsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdGFuZ2xlIGN5Y2xlYW5nbGUoKT0wOwogICAgICAg
IH07CgpjbGFzcyB0Y2hhbmdlcmVjb3JkZXIKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAg
ICAgICAgICAgICAgdmlydHVhbCBib29sIGlzb2xkZXZlbnQoKT0wOwogICAgICAgICAgICAgICAg
dmlydHVhbCB2b2lkIGNoYW5nZWlmc2NoZWR1bGVkKHRldmVudCAqb2xkLHRldmVudCAqbmV3ZSk9
MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VpZnNjaGVkdWxlZGFuZG5vdHRv
b2Zhcih0ZXZlbnQgKnByZXYsdGV2ZW50ICpvbGQsdGV2ZW50ICpuZXdlKT0wOwogICAgICAgIH07
CgpjbGFzcyB0ZXZlbnRzb3VyY2UKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAg
ICAgICAgdmlydHVhbCB0ZXZlbnQgKnJlc2NoZWR1bGUodGNoYW5nZXJlY29yZGVyICYsdGFuZ2xl
dHJhbnNsYXRvciAmKT0wOwogICAgICAgIH07CiMgNSAiZXZlbnRjaGFuLmgiIDIKCgoKY2xhc3Mg
dG9ub2ZmY2hhbm5lbDsKCmNsYXNzIHRvbm9mZmFuZ2xlcwogICAgewogICAgcHVibGljOgogICAg
ICAgICAgICAgICAgdGFuZ2xlIG9wZW4sY2xvc2U7CiAgICB9OwoKY2xhc3MgdG9ub2ZmY2hhbm5l
bCA6IHB1YmxpYyB0ZXZlbnRzb3VyY2UKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlICpwb3J0YWRkcmVzczsKICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IG9wZW5iaXRzOwogICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgb3Blbm1hc2s7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjbG9zZWJpdHM7
CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjbG9zZW1hc2s7CiAgICAgICAgICAgICAg
ICBib29sIGlzc2FmZXRvY2xvc2U7CgogICAgICAgICAgICAgICAgdGV2ZW50ICpvbGRzdHVmZmhl
YWQ7CiAgICAgICAgICAgICAgICB0ZXZlbnQgKm5ld3N0dWZmaGVhZDsKICAgICAgICAgICAgICAg
IGJvb2wgaGFzb2xkZXZlbnRzOwogICAgICAgICAgICAgICAgYm9vbCBoYXNuZXdldmVudHM7CiAg
ICAgICAgICAgICAgICB0ZXZlbnRwb29sICZwb29sOwoKCiAgICAgICAgY2xhc3MgdG9ub2ZmY2hh
bm5lbHRhc2sKICAgICAgICB7CiAgICAgICAgICAgICAgICBwdWJsaWM6CgogICAgICAgICAgICAg
ICAgICAgICAgICB0ZXZlbnQgKm9sZHRyYW5zaXRpb247CiAgICAgICAgICAgICAgICAgICAgICAg
IHRldmVudCAqb3BlbmV2ZW50LCpjbG9zZWV2ZW50OwoKICAgICAgICAgICAgICAgICAgICAgICAg
dGV2ZW50ICp0cmFuc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB0ZXZlbnQgKm5ld29w
ZW5ldmVudCwqbmV3Y2xvc2VldmVudDsKCgogICAgICAgICAgICAgICAgdG9ub2ZmYW5nbGVzICZh
bmdsZXM7CgoKICAgICAgICAgICAgICAgIHRvbm9mZmNoYW5uZWx0YXNrKHRvbm9mZmFuZ2xlcyAm
YWFuZ2xlcyk7CiAgICAgICAgfTsKCgogICAgICAgIHR5cGVkZWYgbG9jYWw6Omxpc3Q8dG9ub2Zm
Y2hhbm5lbHRhc2s+IHRhc2tzdHlwZTsKICAgICAgICB0YXNrc3R5cGUgdGFza3M7CgoKICAgICAg
ICAgICAgICAgIHRldmVudCAqY3JlYXRlZXZlbnRhdChpbnQgYW5nbGVzdGVwLGJvb2wgZG9vcGVu
KTsKICAgICAgICAgICAgICAgIHRldmVudCAqY3JlYXRlZHVtbXlldmVudCggdGV2ZW50ICpldiAp
OwogICAgICAgICAgICAgICAgdm9pZCBmcmVlZXZlbnQoIHRldmVudCAqZXYgKTsKCgogICAgICAg
ICAgICAgICAgdm9pZCBwYXJ0aXRpb25vbGRmcm9tbmV3KCk7CiAgICAgICAgICAgICAgICB2b2lk
IGZyZWVuZXdzdHVmZigpOwogICAgICAgICAgICAgICAgdm9pZCB0dXJubmV3c3R1ZmZpbnRvb2xk
c3R1ZmYoKTsKICAgICAgICAgICAgICAgIGJvb2wgY3JlYXRlbmV3ZXZlbnRzKHRhbmdsZXRyYW5z
bGF0b3IgJmFuZ2xldHJhbnNsYXRvcik7CiAgICAgICAgICAgICAgICB2b2lkIGhvb2tvbGRldmVu
dHN0b25ld2V2ZW50cyh0Y2hhbmdlcmVjb3JkZXIgJmNoYW5nZXJlY29yZGVyLHRhbmdsZXRyYW5z
bGF0b3IgJmFuZ2xldHJhbnNsYXRvcik7CiAgICAgICAgICAgICAgICB0ZXZlbnQgKmZpcnN0bmV3
ZXZlbnQoKTsKICAgICAgICAgICAgICAgIHZvaWQgZGVhZGVuZG9sZCh0Y2hhbmdlcmVjb3JkZXIg
JmNoYW5nZXJlY29yZGVyKTsKICAgICAgICAgICAgICAgIHRldmVudCAqbmV4dG9sZG9wZW4odGFz
a3N0eXBlOjppdGVyYXRvciB0YXNrbnVtKTsKICAgICAgICAgICAgICAgIHRldmVudCAqbmV4dG5l
d29wZW4odGFza3N0eXBlOjppdGVyYXRvciB0YXNrbnVtKTsKCiAgICAgICAgcHVibGljOgogICAg
ICAgICAgICAgICAgdG9ub2ZmY2hhbm5lbCh0ZXZlbnRwb29sICZldmVudGhlYXAsdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgKmFkZHIsdW5zaWduZWQgc2hvcnQgYml0c3Rvc2V0LGJvb2wgcmV2ZXJz
ZWQsYm9vbCBzYWZldG9jbG9zZSk7CiAgICAgICAgICAgICAgICB2b2lkIGFkZHB1bHNlKHRvbm9m
ZmFuZ2xlcyAmYW5nbGVzKTsKICAgICAgICAgICAgICAgIHZvaWQgcmVtb3ZlcHVsc2UodG9ub2Zm
YW5nbGVzICZhbmdsZXMpOwoKICAgICAgICAgICAgICAgIHZvaWQgb24oKTsKICAgICAgICAgICAg
ICAgIHZvaWQgb2ZmKCk7CgogICAgICAgICAgICAgICAgdGV2ZW50ICpyZXNjaGVkdWxlKHRjaGFu
Z2VyZWNvcmRlciAmY2hhbmdlcmVjb3JkZXIsdGFuZ2xldHJhbnNsYXRvciAmYW5nbGV0cmFuc2xh
dG9yKTsKICAgICAgICB9OwojIDkgImVuZ2luZS5oIiAyCiMgMSAiaW5qZmlyaW5nLmgiIDEKCgoK
CgojIDEgImluanByb2YuaCIgMQoKCgoKCgoKY2xhc3MgdGluamVjdG9ycHJvZmlsZSA6IHB1Ymxp
YyB0d2l0aGhhcmRhdHRyCiAgICAgICAgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICB0aW50dmFsdWUgb3BlbnRpbWU7CiAgICAgICAgICAgICAgICB0aW50dmFsdWUgcmF0ZTsKICAg
ICAgICAgICAgICAgIHRpbnR2YWx1ZSBsaW5lYXJzdGFydHRpbWU7CiAgICAgICAgICAgICAgICB0
Y3ljbGljYW5nbGV2YWx1ZSBjbG9zZWFuZ2xlOwogICAgICAgICAgICAgICAgdGRlbHRhYW5nbGV2
YWx1ZSBtYXhkdXR5OwogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRpbmplY3RvcnBy
b2ZpbGUoIGludCBkZWZhdWx0cmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZWZhdWx0b3BlbnRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdGxp
bmVhcnN0YXJ0dGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbmdsZSBkZWZhdWx0
Y2xvc2VhbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbmds
ZSBkZWZhdWx0bWF4ZHV0eSk7CiAgICAgICAgICAgICAgICBpbnQgdGltZWZvcmZ1ZWwoaW50IHJw
bSxpbnQgbWFwLGludCBiYXR2b2x0LGludCBtYXNzLGludCAmbWFzc2xlZnQpOwoKICAgICAgICB0
YW5nbGUgZ2V0Y2xvc2VhbmdsZSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGNs
b3NlYW5nbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9OwojIDcgImluamZpcmluZy5oIiAyCgpj
bGFzcyB0aW5qZWN0b3JldmVudGZpcmluZ3BhcmFtZXRlcnMgOiBwdWJsaWMgdHdpdGhoYXJkYXR0
cgogICAgICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgIHRpbmplY3RvcnByb2ZpbGUgJmlu
anNldDsKICAgICAgICAgICAgICAgIGJvb2wgZG91YmxlZmlyZTsKICAgICAgICAgICAgICAgIHRh
bmdsZSB0ZGNvZmZzZXQ7CiAgICAgICAgICAgICAgICB0aW50dmFsdWUgdHJpbTsKICAgICAgICAg
ICAgICAgIHRhbmdsZSBvZmZzZXR0b3NlY29uZGZpcmluZzsKICAgIHB1YmxpYzoKICAgICAgICAg
ICAgICAgIHRpbmplY3RvcmV2ZW50ZmlyaW5ncGFyYW1ldGVycyggY29uc3QgY2hhciAqY2hhbnRy
aW1uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhbmdsZSBhdGRjb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGluamVjdG9ycHJvZmlsZSAmcHJvZmlsZSk7CgogICAgICAgIHZvaWQgZ2V0YW5n
bGVzKCBpbnQgcnBtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hcCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBiYXR2b2x0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1hc3NyZXF1aXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbmds
ZSBmdWxsc3luY2N5Y2xlYW5nbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJm1h
c3NsZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlICZvcGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlICZjbG9zZSApIDsKICAgICAgICB9OwojIDEwICJl
bmdpbmUuaCIgMgojIDEgImlnbmZpcmluZy5oIiAxCgoKCgoKCgojIDEgImlnbml0ZXJwcm9mLmgi
IDEKCgoKCgoKCmNsYXNzIHRpZ25pdGVycHJvZmlsZTogcHVibGljIHR3aXRoaGFyZGF0dHIKICAg
ICAgICB7CiAgICAgICAgcHJpdmF0ZToKCiAgICAgICAgICAgICAgICB0aW50dmFsdWUgZHdlbGw7
CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGlnbml0ZXJwcm9maWxlKCBpbnQgZGVm
YXVsdGR3ZWxsKTsKICAgICAgICBpbnQgZ2V0ZHdlbGwoKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBkd2VsbDsKICAgICAgICAgICAgfQogICAgICAgIH07CiMgOSAiaWduZmlyaW5n
LmgiIDIKCmNsYXNzIHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJzIDogcHVibGljIHR3aXRo
aGFyZGF0dHIKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICB0YW5nbGUgdGRjb2Zm
c2V0OwogICAgICAgICAgICAgICAgdGRlbHRhYW5nbGV2YWx1ZSB0cmltOwogICAgICAgIHRhbmds
ZSBvcGVuYW5nbGUsY2xvc2VhbmdsZTsKICAgICAgICB0aWduaXRlcnByb2ZpbGUgJmlnbnByb2Y7
CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGlnbml0aW9uZXZlbnRmaXJpbmdwYXJh
bXRlcnMoY29uc3QgY2hhciAqY3lsaW5kZXJkZXNjLHRhbmdsZSBhdGRjb2Zmc2V0LHRpZ25pdGVy
cHJvZmlsZSAmYWlnbnByb2YpOwogICAgICAgIHZvaWQgZ2V0YW5nbGVzKGludCBycG0sIHRhbmds
ZSBhZHZhbmNlLHRhbmdsZSBmdWxsY3ljbGVhbmdsZSwgdGFuZ2xlICZvcGVuLCB0YW5nbGUgJmNs
b3NlKTsKICAgICAgICB9OwojIDExICJlbmdpbmUuaCIgMgoKCgojIDEgImV2ZW50dXNlci5oIiAx
CiMgMTAgImV2ZW50dXNlci5oIgpjbGFzcyB0ZXZlbnR1c2VyOiBwdWJsaWMgdGFuZ2xldHJhbnNs
YXRvcixwdWJsaWMgdGNoYW5nZXJlY29yZGVyCiAgICAgICAgewogICAgICAgIHByb3RlY3RlZDoK
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuZXh0ZXZlbnRhbmdsZTsKICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBudW1iZXJvZmNoYWluczsKICAgICAgICAgICAgICAgIHRldmVudCog
bmV4dGV2ZW50WzIwXTsKCgogICAgICAgICAgICAgICAgdm9pZCBjaGFuZ2VpZnNjaGVkdWxlZCh0
ZXZlbnQgKm9sZCx0ZXZlbnQgKm5ld2UpOwogICAgICAgICAgICAgICAgdm9pZCBjaGFuZ2VpZnNj
aGVkdWxlZGFuZG5vdHRvb2Zhcih0ZXZlbnQgKnByZXYsdGV2ZW50ICpvbGQsdGV2ZW50ICpuZXdl
KTsKICAgICAgICAgICAgICAgIGJvb2wgaXNvbGRldmVudCgpOwogICAgICAgIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICBpbnQgY3VycmVudGNhbGxiYWNrY2hhaW47CiAgICAgICAgbG9jYWw6OnZl
Y3Rvcjx0ZXZlbnRzb3VyY2UqPiBzb3VyY2VzOwogICAgICAgICAgICAgICAgdGFuZ2xlIGZ1bGxz
eW5jY3ljbGVhbmdsZTsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0ZXZlbnR1c2Vy
KHRhbmdsZSBhZnVsbHN5bmNjeWNsZWFuZ2xlKTsKICAgICAgICAgICAgICAgIH50ZXZlbnR1c2Vy
KCk7CiAgICAgICAgICAgICAgICB2b2lkIHJlc2NoZWR1bGUoKTsKICAgICAgICAgICAgICAgIHZv
aWQgYXR0YWNoZXZlbnRzb3VyY2UodGV2ZW50c291cmNlICZzb3VyY2UpOwogICAgICAgICAgICAg
ICAgdGFuZ2xlIGN5Y2xlYW5nbGUoKSB7cmV0dXJuIGZ1bGxzeW5jY3ljbGVhbmdsZTt9OwogICAg
ICAgIH07CiMgMTUgImVuZ2luZS5oIiAyCiMgMSAiZmVlZGJhY2suaCIgMQoKCgoKCiMgMSAibWFw
bGVhcm4uaCIgMQoKCgpzdHJ1Y3QgdGdlbmVyaWNtYXBsb2NhdGlvbgogICAgICAgIHsKICAgICAg
ICBpbnQgYTsKICAgICAgICBpbnQgYjsKICAgICAgICBpbnQgYzsKICAgIHRnZW5lcmljbWFwbG9j
YXRpb24oKQogICAgICAgIHsKICAgICAgICB9CiAgICB0Z2VuZXJpY21hcGxvY2F0aW9uKGludCBh
YSxpbnQgYmIsaW50IGNjKQogICAgICAgIDoKICAgICAgICBhKGFhKSwKICAgICAgICBiKGJiKSwK
ICAgICAgICBjKGNjKQogICAgICAgIHsKICAgICAgICB9CiAgICAgICAgfTsKCmNsYXNzIHRtYXBs
ZWFybmVyCiAgICAgICAgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBsZWFybnZlcG9pbnQodGdlbmVyaWNtYXBsb2NhdGlvbiAmbG9jYXRpb24pPTA7CiAgICAg
ICAgfTsKIyA3ICJmZWVkYmFjay5oIiAyCiMgMSAic3RkY3h4L2xvY2FsZGVxdWUuaCIgMQoKCgoj
IDEgIi91c3IvaW5jbHVkZS9nKystdjMvZGVxdWUiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvZysr
LXYzL2RlcXVlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5o
IiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNy
L2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93
X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2
b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292
ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxv
d19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUo
Y29uc3QgY2hhciogX19zKTsKfQojIDY3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2RlcXVlIiAyIDMK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAxIDMKIyA3MiAi
L3Vzci9pbmNsdWRlL2crKy12My9kZXF1ZSIgMiAzCiMgNSAic3RkY3h4L2xvY2FsZGVxdWUuaCIg
MgoKCgoKCm5hbWVzcGFjZSBsb2NhbAogICAgewoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULAog
ICAgICAgICAgICAgICAgdHlwZW5hbWUgQUxMT0M9dGhlYXBhbGxvY2F0b3I8VD4gPgogICAgY2xh
c3MgZGVxdWUgOiBwdWJsaWMgc3RkOjpkZXF1ZTxULEFMTE9DPgogICAgICAgIHsKICAgICAgICB9
OwoKCgogICAgfTsKIyA4ICJmZWVkYmFjay5oIiAyCgpjbGFzcyB0ZmVlZGJhY2tsb29wIDogcHVi
bGljIHR3aXRoaGFyZGF0dHIKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgIGludCB2ZXR3aWRkbGU7CiAgICAgICAgICAgICAgICBib29sIGxhc3RveHl3YXNsZWFuOwoK
ICAgICAgICAgICAgICAgIHRib29sdmFsdWUgY2xvc2VkbG9vcDsKICAgICAgICAgICAgICAgIHRi
b29sdmFsdWUgbGVhcm5vbjsKCiAgICAgICAgICAgICAgICB0aW50dmFsdWUgdGltZXVudGlsaG90
OwogICAgICAgICAgICAgICAgdGludHZhbHVlIGNoYW5nZWNvdW50OwogICAgICAgICAgICAgICAg
dGludHZhbHVlIHN0b2ljOwogICAgICAgICAgICAgICAgdGludHZhbHVlIHN0b2ljcmFuZ2U7Cgog
ICAgICAgICAgICAgICAgdGludHZhbHVlIG94eXRhcmdldDsKICAgICAgICAgICAgICAgIHRpbnR2
YWx1ZSBsZWFub3h5dm9sdDsKICAgICAgICAgICAgICAgIHRpbnR2YWx1ZSB2ZXR3aWRkbGVyYXRl
OwoKICAgICAgICAgICAgICAgIHRpbnR2YWx1ZSBtaW5jbGVhbmhpc3RvcnlsZW47CgogICAgICAg
ICAgICAgICAgYm9vbCBoYWR2b2x0YWdleWV0OwogICAgICAgICAgICAgICAgYm9vbCBsb29wY2xv
c2FibGU7CiAgICAgICAgICAgICAgICBpbnQgY2xlYW5oaXN0b3J5bGVuOwoKICAgICAgICBzdHJ1
Y3QgeHl6bG9jCiAgICAgICAgICAgIHsKICAgICAgICAgICAgc2hvcnQgeDsKICAgICAgICAgICAg
c2hvcnQgeTsKICAgICAgICAgICAgc2hvcnQgejsKICAgICAgICAgICAgfTsKICAgICAgICBsb2Nh
bDo6ZGVxdWU8eHl6bG9jPiBsZWFybmxvY2F0aW9uaGlzdG9yeTsKICAgICAgICAgICAgICAgIHRn
ZW5lcmljbWFwbG9jYXRpb24gbGFzdGxlYXJudHBvaW50OwogICAgICAgICAgICAgICAgYm9vbCBs
ZWFybnB0dmFsaWQ7CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRmZWVkYmFja2xv
b3AoIGJvb2wgZGVmYXVsdGNsb3NlZGxvb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBkZWZhdWx0bGVhcm5vbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGRlZmF1bHRsZWFybmFsd2F5cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVmYXVsdHRpbWV1bnRpbGhvdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVmYXVsdHN0b2ljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZh
dWx0c3RvaWNtYXJnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVmYXVsdG94eXRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZGVmYXVsdGxlYW5veHl2b2x0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZWZhdWx0dmV0d2lkZGxlcmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZGVmYXVsdGxlYXJuZGVsYXkgKTsKCiAgICAgICAgICAgICAgICB2b2lkIG1hbnVhbGxlYW5lcigp
OwogICAgICAgICAgICAgICAgdm9pZCBtYW51YWxyaWNoZXIoKTsKCiAgICAgICAgICAgICAgICBp
bnQgcGVyaW9kaWMoIHVuc2lnbmVkIGludCBmcmVxLAogICAgICAgICAgICAgICAgICAgICAgICBp
bnQgcnBtLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3h5dm9sdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBveHlkaXNhYmxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0bWFwbGVhcm5lciAmbWFwbGVhcm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0Z2VuZXJpY21hcGxvY2F0aW9uICZtYXBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG1hcGxvY2F0aW9udmFsaWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHRhcmdldGFmcmF0aW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHRpbWVzaW5jZXN0YXJ0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bGVhcm5vayk7CgogICAgICAgICAgICAgICAgYm9vbCBpc2xlYXJub24oKSB7cmV0dXJuIGxlYXJu
b247fTsKICAgICAgICB9OwojIDE2ICJlbmdpbmUuaCIgMgoKY2xhc3MgdGVuZ2luZXBhcnRzCiAg
ICB7CiAgICBwdWJsaWM6CiAgICAgICAgY2xhc3MgdGluamVjdG9yY2hhbm5lbAogICAgICAgICAg
ICB7CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICB0b25vZmZjaGFubmVsIGNo
YW5uZWw7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRpbmplY3RvcmNoYW5u
ZWwodGV2ZW50cG9vbCAmZXZlbnRoZWFwLHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphZGRyLHVu
c2lnbmVkIHNob3J0IGJpdHN0b3NldCxib29sIHJldmVyc2VkKQogICAgICAgICAgICAgICAgICAg
IDoKICAgICAgICAgICAgICAgICAgICBjaGFubmVsKGV2ZW50aGVhcCxhZGRyLGJpdHN0b3NldCxy
ZXZlcnNlZCx0cnVlKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB2b2lkIGFkZGZpcmluZyh0b25vZmZhbmdsZXMgJmFuZ2xlcykKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbC5hZGRwdWxzZShh
bmdsZXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZvaWQgcmVtb3Zl
ZmlyaW5nKHRvbm9mZmFuZ2xlcyAmYW5nbGVzKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICBjaGFubmVsLnJlbW92ZXB1bHNlKGFuZ2xlcyk7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgdGV2ZW50c291cmNlICZnZXRjaGFubmVsKCkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWw7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgICAgICBjbGFzcyB0aWduaXRpb25j
aGFubmVsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
IHRvbm9mZmNoYW5uZWwgY2hhbm5lbDsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAg
ICAgdGlnbml0aW9uY2hhbm5lbCh0ZXZlbnRwb29sICZldmVudGhlYXAsdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgKmFkZHIsdW5zaWduZWQgc2hvcnQgYml0c3Rvc2V0LGJvb2wgcmV2ZXJzZWQpCiAg
ICAgICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgICAgIGNoYW5uZWwoZXZlbnRoZWFw
LGFkZHIsYml0c3Rvc2V0LHJldmVyc2VkLGZhbHNlKQogICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2b2lkIGFkZGZpcmluZyh0b25vZmZh
bmdsZXMgJmFuZ2xlcykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
Y2hhbm5lbC5hZGRwdWxzZShhbmdsZXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIHZvaWQgcmVtb3ZlZmlyaW5nKHRvbm9mZmFuZ2xlcyAmYW5nbGVzKQogICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjaGFubmVsLnJlbW92ZXB1bHNlKGFuZ2xl
cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGV2ZW50c291cmNlICZn
ZXRjaGFubmVsKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNoYW5uZWw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgIHBy
aXZhdGU6CiAgICAgICAgY2xhc3MgdGZlZWRiYWNrY2hhbm5lbAogICAgICAgICAgICB7CiAgICAg
ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBpbnQgY3VycmVudHR3aWRkbGU7CiAgICAg
ICAgICAgICAgICB0ZmVlZGJhY2tsb29wICZsb29wOwogICAgICAgICAgICBwdWJsaWM6CiAgICAg
ICAgICAgICAgICB0ZmVlZGJhY2tjaGFubmVsKCB0ZmVlZGJhY2tsb29wICZhbG9vcCApCiAgICAg
ICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgICAgIGxvb3AoYWxvb3ApCiAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGludCBn
ZXRmdWVsbWFzc3R3aWRkbGUoKSB7cmV0dXJuIGN1cnJlbnR0d2lkZGxlO30KICAgICAgICAgICAg
ICAgIGJvb2wgaXN0aGlzKCB0ZmVlZGJhY2tsb29wICZhbG9vcCApIHtyZXR1cm4gJmxvb3A9PSZh
bG9vcDt9CiAgICAgICAgICAgICAgICB2b2lkIHNldHZhbHVlKCBpbnQgdmFsdWUgKSB7Y3VycmVu
dHR3aWRkbGU9dmFsdWU7fQogICAgICAgICAgICB9OwoKICAgICAgICBjbGFzcyB0aW5qZWN0b3Jm
aXJpbmcKICAgICAgICAgICAgewogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAg
dG9ub2ZmYW5nbGVzIGFuZ2xlczsKICAgICAgICAgICAgICAgIHRpbmplY3RvcmV2ZW50ZmlyaW5n
cGFyYW1ldGVycyAmZmlyaW5nOwogICAgICAgICAgICAgICAgdGluamVjdG9yY2hhbm5lbCAmY2hh
bm5lbDsKICAgICAgICAgICAgICAgIHRpbmplY3RvcmZpcmluZyogc2Vjb25kYXJ5ZmlyaW5nOwog
ICAgICAgICAgICAgICAgaW50IGZ1ZWxkaXZpc29yOwogICAgICAgICAgICAgICAgdGZlZWRiYWNr
Y2hhbm5lbCAmZmVlZGJhY2s7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRp
bmplY3RvcmZpcmluZyggdGluamVjdG9yY2hhbm5lbCAmYWNoYW5uZWwsdGluamVjdG9yZXZlbnRm
aXJpbmdwYXJhbWV0ZXJzICZhZmlyaW5nLGludCBmdWVsZGl2aXNvcix0ZmVlZGJhY2tjaGFubmVs
ICZmZWVkYmFjayApOwogICAgICAgICAgICAgICAgfnRpbmplY3RvcmZpcmluZygpOwogICAgICAg
ICAgICAgICAgdm9pZCBhZGRzZWNvbmRhcnlmaXJpbmcoIHRpbmplY3RvcmNoYW5uZWwgJmFjaGFu
bmVsLHRpbmplY3RvcmV2ZW50ZmlyaW5ncGFyYW1ldGVycyAmYWZpcmluZyApOwogICAgICAgICAg
ICAgICAgdm9pZCBzZXRhbmdsZXMoaW50IHJwbSxpbnQgbWFwLGludCBiYXR2b2x0LGludCBtYXNz
LHRhbmdsZSBmdWxsY3ljbGVhbmdsZSk7CiAgICAgICAgICAgICAgICBib29sIGlzdGhpcyh0aW5q
ZWN0b3JjaGFubmVsICZhY2hhbm5lbCx0aW5qZWN0b3JldmVudGZpcmluZ3BhcmFtZXRlcnMgJmFm
aXJpbmcgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g
JmNoYW5uZWw9PSZhY2hhbm5lbCAmJiAmZmlyaW5nPT0mYWZpcmluZzsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9OwoKICAgICAgICBjbGFzcyB0aWduaXRpb25maXJpbmcKICAg
ICAgICAgICAgewogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgdG9ub2ZmYW5n
bGVzIGFuZ2xlczsKICAgICAgICAgICAgICAgIHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJz
ICZmaXJpbmc7CiAgICAgICAgICAgICAgICB0aWduaXRpb25jaGFubmVsICZjaGFubmVsOwogICAg
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0aWduaXRpb25maXJpbmcoIHRpZ25pdGlv
bmNoYW5uZWwgJmFjaGFubmVsLHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJzICZhZmlyaW5n
ICk7CiAgICAgICAgICAgICAgICB+dGlnbml0aW9uZmlyaW5nKCk7CiAgICAgICAgICAgICAgICB2
b2lkIHNldGFuZ2xlcyhpbnQgcnBtLHRhbmdsZSBhZHZhbmNlLHRhbmdsZSBmdWxsY3ljbGVhbmds
ZSk7CiAgICAgICAgICAgICB9OwoKCiAgICAgICAgbG9jYWw6OnNsaXN0PHRpbmplY3RvcmZpcmlu
Zz4gaW5qZWN0b3JmaXJpbmdzOwogICAgICAgIGxvY2FsOjpzbGlzdDx0aWduaXRpb25maXJpbmc+
IGlnbml0aW9uZmlyaW5nczsKICAgICAgICBsb2NhbDo6dmVjdG9yPHRpbmplY3RvcmNoYW5uZWwg
Kj4gaW5qZWN0b3JjaGFubmVsczsKICAgICAgICBsb2NhbDo6dmVjdG9yPHRpZ25pdGlvbmNoYW5u
ZWwgKj4gaWduaXRpb25jaGFubmVsczsKICAgICAgICBsb2NhbDo6c2xpc3Q8dGZlZWRiYWNrY2hh
bm5lbD4gZmVlZGJhY2tjaGFubmVsczsKICAgICAgICB0ZXZlbnR1c2VyICZldmVudHVzZXI7CiAg
ICAgICAgdGVuZ2luZXByb2ZpbGUgJmVuZ2luZXByb2ZpbGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgdm9pZCBhZGRjaGFubmVsKHRpbmplY3RvcmNoYW5uZWwgJmNoYW5uZWwpOwogICAgICAgIHZv
aWQgYWRkY2hhbm5lbCh0aWduaXRpb25jaGFubmVsICZjaGFubmVsKTsKICAgICAgICBib29sIGFk
ZGV2ZW50KHRpbmplY3RvcmV2ZW50ZmlyaW5ncGFyYW1ldGVycyAmZmlyaW5nLHRpbmplY3RvcmNo
YW5uZWwgJmNoYW5uZWwsaW50IGZ1ZWxkaXZpc29yLHRmZWVkYmFja2xvb3AgJmZlZWRiYWNrKTsK
ICAgICAgICB2b2lkIGFkZGV2ZW50KHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJzICZmaXJp
bmcsdGlnbml0aW9uY2hhbm5lbCAmY2hhbm5lbCk7CiAgICAgICAgYm9vbCBhZGRzZWNvbmRhcnll
dmVudCggdGluamVjdG9yZXZlbnRmaXJpbmdwYXJhbWV0ZXJzICZmaXJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW5qZWN0b3JjaGFubmVsICZjaGFubmVsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluamVjdG9yZXZlbnRmaXJpbmdwYXJhbWV0ZXJz
ICZmaXJpbmdwcmltYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluamVj
dG9yY2hhbm5lbCAmY2hhbm5lbHByaW1hcnkgKTsKCiAgICAgICAgdm9pZCBzZXRpbmplY3RvcmFu
Z2xlcyhpbnQgcnBtLGludCBtYXAsaW50IGJhdHZvbHQsaW50IG1hc3MpOwogICAgICAgIHZvaWQg
c2V0aWduaXRpb25hbmdsZXMoaW50IHJwbSwgdGFuZ2xlIGFkdmFuY2UpOwogICAgcHVibGljOgog
ICAgICAgIHRlbmdpbmVwYXJ0cyh0ZXZlbnR1c2VyICZhZXZlbnR1c2VyLHRlbmdpbmVwcm9maWxl
ICZhZW5naW5lcHJvZmlsZSk7CiAgICAgICAgdm9pZCBzZXRhbmdsZXMoaW50IHJwbSxpbnQgbWFw
LGludCBiYXR2b2x0LHRhbmdsZSBhZHZhbmNlLGludCBmdWVsbWFzc3BlcmN5bHBlcmN5Y2xlKTsK
ICAgICAgICB2b2lkIHNldGZlZWRiYWNrdmFsdWUodGZlZWRiYWNrbG9vcCAmZmVlZGJhY2tsb29w
LGludCB2YWx1ZSk7CiAgICB9OwojIDIgImk0ZW5naW5lLmgiIDIKIyAxICJldmVudHBvb2wuaCIg
MQoKCgoKCmNsYXNzIHRhcnJheWV2ZW50cG9vbCA6IHB1YmxpYyB0ZXZlbnRwb29sCiAgICAgICAg
ewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBuZXh0ZXZl
bnQ7CiAgICAgICAgICAgICAgICB0ZXZlbnQgKmZyZWVoZWFkOwogICAgICAgIHByb3RlY3RlZDoK
ICAgICAgICAgICAgICAgIHZvaWQgYWRkZXZlbnRhcnJheSh0ZXZlbnQgZXZlbnRzW10saW50IG51
bWJlcm9mZXZlbnRzKTsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0YXJyYXlldmVu
dHBvb2woKTsKICAgICAgICAgICAgICAgIHRhcnJheWV2ZW50cG9vbCh0ZXZlbnQgZXZlbnRzW10s
aW50IG51bWJlcm9mZXZlbnRzKTsKCiAgICAgICAgICAgICAgICB0ZXZlbnQgKmFsbG9jZXZlbnQo
IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwb3J0YWRkcmVzcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJpdHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBtYXNrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzYWZlKTsKCiAgICAgICAgICAgICAg
ICB2b2lkIGZyZWVldmVudCh0ZXZlbnQgKmV2ZW50KTsKICAgICAgICB9OwoKdGVtcGxhdGUgPGlu
dCBOPiBjbGFzcyB0c3RhdGljZXZlbnRwb29sIDogcHVibGljIHRhcnJheWV2ZW50cG9vbAogICAg
ICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgdGV2ZW50IGV2ZW50c1tOXTsK
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0c3RhdGljZXZlbnRwb29sKCkgOiB0YXJy
YXlldmVudHBvb2woZXZlbnRzLE4pIHsgfTsKICAgICAgICB9OwojIDMgImk0ZW5naW5lLmgiIDIK
IyAxICJpbml0aWFsbWFwLmgiIDEKCgoKCgpleHRlcm4gdHN0YXRpY21hcCBpbml0aWFsdmU7CmV4
dGVybiB0c3RhdGljbWFwIGluaXRpYWxhZHY7CiMgNCAiaTRlbmdpbmUuaCIgMgoKdW5zaWduZWQg
c2hvcnQgZHVtbXk7CgpjbGFzcyB0aTRlbmdpbmUgOiBwdWJsaWMgdGVuZ2luZXBhcnRzCiAgICB7
CiAgICBwcml2YXRlOgogICAgICAgdHN0YXRpY2V2ZW50cG9vbDwxNTA+IGV2ZW50cG9vbDsKICAg
ICAgIHRldmVudHVzZXIgJmV2ZW50c3lzdGVtOwogICAgICAgdGVuZ2luZXByb2ZpbGUgZW5naW5l
cHJvZmlsZTsKCiAgICAgICB0aWduaXRlcnByb2ZpbGUgaWducHJvZjsKICAgICAgIHRpZ25pdGlv
bmNoYW5uZWwgaWduY2hhbm5lbDsKICAgICAgIHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJz
IGlnbjE0LGlnbjIzOwoKICAgICAgIHRpbmplY3RvcnByb2ZpbGUgaW5qcHJvZjsKICAgICAgIHRp
bmplY3RvcmNoYW5uZWwgaW5qY2hhbjEsaW5qY2hhbjIsaW5qY2hhbjMsaW5qY2hhbjQ7CiAgICAg
ICB0aW5qZWN0b3JldmVudGZpcmluZ3BhcmFtZXRlcnMgaW5qZmlyaW5nMSxpbmpmaXJpbmcyLGlu
amZpcmluZzMsaW5qZmlyaW5nNDsKCiAgICAgICB0aW5qZWN0b3Jwcm9maWxlIGluanByb2ZzZWM7
CiAgICAgICB0aW5qZWN0b3JjaGFubmVsIGluamNoYW4xc2VjLGluamNoYW4yc2VjLGluamNoYW4z
c2VjLGluamNoYW40c2VjOwogICAgICAgdGluamVjdG9yZXZlbnRmaXJpbmdwYXJhbWV0ZXJzIGlu
amZpcmluZzFzZWMsaW5qZmlyaW5nMnNlYyxpbmpmaXJpbmczc2VjLGluamZpcmluZzRzZWM7Cgog
ICAgICAgdGZlZWRiYWNrbG9vcCBmZWVkYmFjazsKCiAgICAgICAgcHVibGljOgogICAgICAgdGk0
ZW5naW5lKHRldmVudHVzZXIgJmV2ZW50ZXhlYykKICAgICAgICAgICA6CiAgICAgICAgICAgdGVu
Z2luZXBhcnRzKGV2ZW50ZXhlYyxlbmdpbmVwcm9maWxlKSwKICAgICAgICAgICBldmVudHN5c3Rl
bShldmVudGV4ZWMpLAoKICAgICAgICAgICBlbmdpbmVwcm9maWxlKDUxNyxpbml0aWFsdmUsaW5p
dGlhbGFkdiwyMDAsNjUwMCwxMDAwLDE0NzAwKSwKCiAgICAgICAgICAgZmVlZGJhY2soZmFsc2Us
ZmFsc2UsZmFsc2UsMjAwMDAsMTQ3MDAsMTAwLDYwMCwxMDAsMjAwMDAsMjApICwKCiAgICAgICAg
ICAgaWducHJvZigyNDAwKSwKICAgICAgICAgICBpZ25jaGFubmVsKGV2ZW50cG9vbCwmZHVtbXks
MHgwMDAxLGZhbHNlKSwKICAgICAgICAgICBpZ24xNCgiMWFuZDQiLCgodGFuZ2xlKSgoKGludCkw
KTw8MTYpKSxpZ25wcm9mKSwKICAgICAgICAgICBpZ24yMygiMmFuZDMiLCgodGFuZ2xlKSgoKGlu
dCkxODApPDwxNikpLGlnbnByb2YpLAoKICAgICAgICAgICBpbmpwcm9mKCAyNDAsIDUwMCwgMTAw
MCwoKHRhbmdsZSkoKChpbnQpMTgwKTw8MTYpKSwgKCh0YW5nbGUpKCgoaW50KTMzMCk8PDE2KSkp
LAogICAgICAgICAgIGluamNoYW4xKGV2ZW50cG9vbCwgJmR1bW15LCAweDAxMDAsIGZhbHNlKSwK
ICAgICAgICAgICBpbmpjaGFuMihldmVudHBvb2wsICZkdW1teSwgMHgwMjAwLCBmYWxzZSksCiAg
ICAgICAgICAgaW5qY2hhbjMoZXZlbnRwb29sLCAmZHVtbXksIDB4MDQwMCwgZmFsc2UpLAogICAg
ICAgICAgIGluamNoYW40KGV2ZW50cG9vbCwgJmR1bW15LCAweDA4MDAsIGZhbHNlKSwKICAgICAg
ICAgICBpbmpmaXJpbmcxKCJUcmltMSIsKCh0YW5nbGUpKCgoaW50KTApPDwxNikpLGluanByb2Yp
LAogICAgICAgICAgIGluamZpcmluZzIoIlRyaW0yIiwoKHRhbmdsZSkoKChpbnQpMTgwKTw8MTYp
KSxpbmpwcm9mKSwKICAgICAgICAgICBpbmpmaXJpbmczKCJUcmltMyIsKCh0YW5nbGUpKCgoaW50
KTE4MCk8PDE2KSksaW5qcHJvZiksCiAgICAgICAgICAgaW5qZmlyaW5nNCgiVHJpbTQiLCgodGFu
Z2xlKSgoKGludCkwKTw8MTYpKSxpbmpwcm9mKSwKCiAgICAgICAgICAgaW5qcHJvZnNlYyggMjQw
LCA1MDAsIDEwMDAsKCh0YW5nbGUpKCgoaW50KTE4MCk8PDE2KSksICgodGFuZ2xlKSgoKGludCkz
NTUpPDwxNikpKSwKICAgICAgICAgICBpbmpjaGFuMXNlYyhldmVudHBvb2wsICZkdW1teSwgMHgx
MDAwLCBmYWxzZSksCiAgICAgICAgICAgaW5qY2hhbjJzZWMoZXZlbnRwb29sLCAmZHVtbXksIDB4
MjAwMCwgZmFsc2UpLAogICAgICAgICAgIGluamNoYW4zc2VjKGV2ZW50cG9vbCwgJmR1bW15LCAw
eDQwMDAsIGZhbHNlKSwKICAgICAgICAgICBpbmpjaGFuNHNlYyhldmVudHBvb2wsICZkdW1teSwg
MHg4MDAwLCBmYWxzZSksCiAgICAgICAgICAgaW5qZmlyaW5nMXNlYygiVHJpbTEiLCgodGFuZ2xl
KSgoKGludCkwKTw8MTYpKSxpbmpwcm9mc2VjKSwKICAgICAgICAgICBpbmpmaXJpbmcyc2VjKCJU
cmltMiIsKCh0YW5nbGUpKCgoaW50KTE4MCk8PDE2KSksaW5qcHJvZnNlYyksCiAgICAgICAgICAg
aW5qZmlyaW5nM3NlYygiVHJpbTMiLCgodGFuZ2xlKSgoKGludCkxODApPDwxNikpLGluanByb2Zz
ZWMpLAogICAgICAgICAgIGluamZpcmluZzRzZWMoIlRyaW00IiwoKHRhbmdsZSkoKChpbnQpMCk8
PDE2KSksaW5qcHJvZnNlYykKICAgICAgICAgICB7CiAgICAgICAgICAgYWRkY2hhbm5lbChpZ25j
aGFubmVsKTsKCiAgICAgICAgICAgYWRkZXZlbnQoaWduMTQsaWduY2hhbm5lbCk7CiAgICAgICAg
ICAgYWRkZXZlbnQoaWduMjMsaWduY2hhbm5lbCk7CgogICAgICAgICAgIGFkZGNoYW5uZWwoaW5q
Y2hhbjEpOwogICAgICAgICAgIGFkZGNoYW5uZWwoaW5qY2hhbjIpOwogICAgICAgICAgIGFkZGNo
YW5uZWwoaW5qY2hhbjMpOwogICAgICAgICAgIGFkZGNoYW5uZWwoaW5qY2hhbjQpOwoKICAgICAg
ICAgICBhZGRldmVudChpbmpmaXJpbmcxLGluamNoYW4xLDEsZmVlZGJhY2spOwogICAgICAgICAg
IGFkZGV2ZW50KGluamZpcmluZzIsaW5qY2hhbjIsMSxmZWVkYmFjayk7CiAgICAgICAgICAgYWRk
ZXZlbnQoaW5qZmlyaW5nMyxpbmpjaGFuMywxLGZlZWRiYWNrKTsKICAgICAgICAgICBhZGRldmVu
dChpbmpmaXJpbmc0LGluamNoYW40LDEsZmVlZGJhY2spOwoKICAgICAgICAgICBhZGRjaGFubmVs
KGluamNoYW4xc2VjKTsKICAgICAgICAgICBhZGRjaGFubmVsKGluamNoYW4yc2VjKTsKICAgICAg
ICAgICBhZGRjaGFubmVsKGluamNoYW4zc2VjKTsKICAgICAgICAgICBhZGRjaGFubmVsKGluamNo
YW40c2VjKTsKCiAgICAgICAgICAgYWRkc2Vjb25kYXJ5ZXZlbnQoaW5qZmlyaW5nMXNlYyxpbmpj
aGFuMXNlYyxpbmpmaXJpbmcxLGluamNoYW4xKTsKICAgICAgICAgICBhZGRzZWNvbmRhcnlldmVu
dChpbmpmaXJpbmcyc2VjLGluamNoYW4yc2VjLGluamZpcmluZzIsaW5qY2hhbjIpOwogICAgICAg
ICAgIGFkZHNlY29uZGFyeWV2ZW50KGluamZpcmluZzNzZWMsaW5qY2hhbjNzZWMsaW5qZmlyaW5n
MyxpbmpjaGFuMyk7CiAgICAgICAgICAgYWRkc2Vjb25kYXJ5ZXZlbnQoaW5qZmlyaW5nNHNlYyxp
bmpjaGFuNHNlYyxpbmpmaXJpbmc0LGluamNoYW40KTsKICAgICAgICAgICB9CiAgICB9OwojIDIg
ImNvbmZpZy5jYyIgMgojIDEgImV2ZW50ZXhlLmgiIDEKCgoKIyAxICJ0b290aHdoZWVsLmgiIDEK
CgoKCgojIDEgImFsYXJtLmgiIDEKCgoKCgoKCmNsYXNzIHRhbGFybXNvdXJjZSA6IHB1YmxpYyB0
aGFyZGF0dHJpYnV0ZQogICAgICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAg
aW50ICpldmVudGNvdW50ZXI7CiAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdGNvdW50ZXI7CiAg
ICAgICAgICAgICAgICBib29sIGlzc2V0OwogICAgICAgIHByb3RlY3RlZDoKICAgICAgICBsb2Nh
bDo6c3RyaW5nIHVuaXRzKCkgY29uc3Q7CiAgICAgICAgICAgICAgICBib29sIGZpbGx2YWx1ZXN0
cmluZyhsb2NhbDo6c3RyaW5nICZzKSBjb25zdDsKICAgICAgICB0d2l0aGF0dHI6OnJlYWR2YWx1
ZXJlc3VsdHMgcmVhZHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMpOwogICAgICAg
ICAgICAgICAgYm9vbCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqcykgY29uc3Q7CiAgICAgICAg
ICAgICAgICBib29sIGxvYWQodHJlYWRzZXJpYWxzdHJlYW0gKnMpOwogICAgICAgICAgICAgICAg
Ym9vbCByZWFkb25seSgpIGNvbnN0OwoKICAgICAgICAgICAgICAgIHZvaWQgaW5jKGJvb2wgbG90
cyk7CiAgICAgICAgICAgICAgICB2b2lkIGRlYyhib29sIGxvdHMpOwogICAgICAgIGJvb2wgZ2V0
bG9naW5mbyggdW5zaWduZWQgY2hhciB2b2xhdGlsZSogJmF0dHJwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgJnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0YXR0cnZhbHVlcHJpbnRlciBjb25zdCAqJnN0cmNvbnYpIGNvbnN0OwogICAgcHVibGlj
OgogICAgICAgICAgICAgICAgdGFsYXJtc291cmNlKGxvY2FsOjpzdHJpbmcgY29uc3QgJmRlc2Mp
OwogICAgICAgICAgICAgICAgdm9pZCBzZXRjb3VudGVybWVtb3J5KGludCAqY291bnRlcik7Cgog
ICAgICAgICAgICAgICAgdm9pZCBzZXRhbGFybWNvbmQoYm9vbCBhbGFybW9uKTsKICAgICAgICAg
ICAgICAgIHZvaWQgYWxhcm1ldmVudCgpOwogICAgICAgIH07CgpjbGFzcyB0YWxhcm1zY2FubmVy
IDogcHVibGljIHR3aXRoaGFyZGF0dHIKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAg
ICB0eXBlZGVmIGxvY2FsOjp2ZWN0b3I8dGFsYXJtc291cmNlICo+IHNvdXJjZXN0eXBlOwogICAg
ICAgICAgICAgICAgc291cmNlc3R5cGUgc291cmNlczsKICAgICAgICAgICAgICAgIGludCAqZXZl
bnRjb3VudGVyYXJyYXk7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGFsYXJtc2Nh
bm5lcihpbnQgYWV2ZW50Y291bnRlcmFycmF5W10pOwogICAgICAgICAgICAgICAgdm9pZCBhZGRz
b3VyY2UodGFsYXJtc291cmNlICopOwogICAgICAgICAgICAgICAgdm9pZCBjbGVhcmFsbCgpOwog
ICAgICAgIH07CiMgNyAidG9vdGh3aGVlbC5oIiAyCgojIDEgImltYXRoLmgiIDEKCgpleHRlcm4g
dW5zaWduZWQgaW50IGlzcXJ0KHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgaXNjYWxlKGludCBp
bixpbnQgbnVtZXIsaW50IGRlbm9tKTsKCmlubGluZSB1bnNpZ25lZCBpbnQgbXVsdDE2MzIodW5z
aWduZWQgaW50IGEsdW5zaWduZWQgc2hvcnQgYikKICAgICAgICB7CiAgICByZXR1cm4gYSpiOwoK
ICAgICAgICB9CiMgOSAidG9vdGh3aGVlbC5oIiAyCiMgMTggInRvb3Rod2hlZWwuaCIKY29uc3Qg
aW50IHNzbm90aW1pbmc9MDsKY29uc3QgaW50IHNzd2FpdGluZ2ZvcmVub3VnaHRlZXRoPTE7CmNv
bnN0IGludCBzc2xvb2tpbmdmb3JnYXA9MjsKY29uc3QgaW50IHNzbG9va2luZ2ZvcmdhcDI9MzsK
Y29uc3QgaW50IHNzc3luY2VkPTQ7CgoKCmNsYXNzIHR0b290aHdoZWVscHJvdG8gOiBwdWJsaWMg
dGV2ZW50dXNlciwgcHVibGljIHR3aXRoaGFyZGF0dHIKICAgICAgICB7CiAgICAgICAgcHJvdGVj
dGVkOgogICAgICAgICAgICAgICAgdHNob3J0dmFsdWUgc3luY3N0YXRlOwoKICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB0aWNrc3BlcmFuZ2xlc3RlcDsKICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzdGVwc3Rha2VuOwoKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvdmVyZmxv
d25jbGlja3M7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtYmVydG9za2lwOwoKICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0ZWV0aHNpbmNlbWlzc2luZ3Rvb3RoOwogICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhdGltZTsKICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBsYXN0dGltZXN0ZXA7CgogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5leHRldmVu
dHN0ZXBtb25vdG9uaWM7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGFzdGtub3duc3Rl
cG1vbm90b25pYzsKCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdG90YWxzYW1wbGV0aW1l
OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpZm92YWxpZGNvdW50OwogICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGZpZm9pbnB0cjsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB0b290aHRpbWVmaWZvWzRdOwoKICAgICAgICAgICAgICAgIHRjeWNsaWNhbmdsZXZhbHVlIGZy
ZWZlcmVuY2VhbmdsZTsKCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZXZzcGVyc3lu
Y2N5Y2xlOwogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRhbGFybXNvdXJjZSB0b29s
b25nYWxhcm07CiAgICAgICAgICAgICAgICB0YWxhcm1zb3VyY2UgZ2FwbGF0ZWFsYXJtOwogICAg
ICAgICAgICAgICAgdGFsYXJtc291cmNlIGdhcGVhcmx5YWxhcm07CiAgICAgICAgcHVibGljOgog
ICAgICAgICAgICAgICAgdHRvb3Rod2hlZWxwcm90byhpbnQgYXJldnNwZXJzeW5jY3ljbGUpOwog
ICAgICAgIH07CiMgNzMgInRvb3Rod2hlZWwuaCIKdGVtcGxhdGUgPGNsYXNzIElOVEVSUE9MQVRF
VElNRVIsIGludCBJTlRFUlBPTEFURVRJTUVSRElWLCBjbGFzcyBUT09USEVER0VDQVBUVVJFVElN
RVIsIGludCBUT09USEVER0VDQVBUVVJFVElNRVJESVYsIGludCBOVU1CRVJPRlRFRVRILCBpbnQg
U1RFUFNQRVJUT09USCx0YW5nbGUgRlVMTENZQ0xFQU5HTEUsaW50IEJBU0VDUFVGUkVRPiBjbGFz
cyB0dG9vdGh3aGVlbCA6IHB1YmxpYyB0dG9vdGh3aGVlbHByb3RvCiAgICAgICAgewogICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgICAgICB2b2lkIHNjaGVkdWxlbmV4dCgpOwogICAgICAgICAg
ICAgICAgdm9pZCB1bnNjaGVkdWxlbmV4dCgpOwogICAgICAgIGJvb2wgc3RhcnRlZDsKICAgICAg
ICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0dG9vdGh3aGVlbCggdm9pZCAoKnRpbWVyZXhwaXJl
ZGludGVycnVwdCkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgdGltZXJwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAoKnRvb3RoaW50ZXJydXB0KSgpLAogICAgICAgICAgICAgICAgIHZvaWQgKCp0b290aHRvb2xv
bmdpbnRlcnJ1cHQpKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHRvb3RocHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IGFyZXZzcGVyc3luY2N5Y2xlICk7CiAgICAgICAgICAgICAgICB2b2lkIHN0
YXJ0KCk7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBzYW1wbGVycG0odW5zaWduZWQg
c2hvcnQgc2FtcGxlZnJlcSk7CgoKCiAgICAgICAgICAgICAgICBpbnQgdHJhbnNsYXRlYW5nbGV0
b3N0ZXAodGFuZ2xlIGFuZ2xlKTsKICAgICAgICAgICAgICAgIGJvb2wgaW5vcmRlcih0ZXZlbnQg
KmEsdGV2ZW50ICpiKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkPWItPmFuZ2xlc3RlcC1hLT5hbmdsZXN0ZXA7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChkPDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCs9KE5VTUJF
Uk9GVEVFVEgqU1RFUFNQRVJUT09USCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
ZDwoKE5VTUJFUk9GVEVFVEgqU1RFUFNQRVJUT09USCkvMikpOwogICAgICAgICAgICAgICAgICAg
ICAgICB9OwoKCiAgICAgICAgICAgICAgICBpbmxpbmUgdm9pZCBkb3Rvb3RoaW50ZXJydXB0KCk7
CiAgICAgICAgICAgICAgICBpbmxpbmUgdm9pZCBkb3Rvb3RodG9vbG9uZ2ludGVycnVwdCgpOwog
ICAgICAgICAgICAgICAgaW5saW5lIHZvaWQgZG90aW1lcmV4cGlyZWRpbnRlcnJ1cHQoKTsKICAg
ICAgICB9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIElOVEVSUE9MQVRFVElNRVIsIGludCBJTlRF
UlBPTEFURVRJTUVSRElWLCBjbGFzcyBUT09USEVER0VDQVBUVVJFVElNRVIsIGludCBUT09USEVE
R0VDQVBUVVJFVElNRVJESVYsIGludCBOVU1CRVJPRlRFRVRILCBpbnQgU1RFUFNQRVJUT09USCx0
YW5nbGUgRlVMTENZQ0xFQU5HTEUsaW50IEJBU0VDUFVGUkVRPiB0dG9vdGh3aGVlbCA8SU5URVJQ
T0xBVEVUSU1FUixJTlRFUlBPTEFURVRJTUVSRElWLFRPT1RIRURHRUNBUFRVUkVUSU1FUixUT09U
SEVER0VDQVBUVVJFVElNRVJESVYsTlVNQkVST0ZURUVUSCxTVEVQU1BFUlRPT1RILEZVTExDWUNM
RUFOR0xFLEJBU0VDUFVGUkVRPiA6OnR0b290aHdoZWVsKHZvaWQgKCp0aW1lcmV4cGlyZWRpbnRl
cnJ1cHQpKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRpbWVycHJpb3JpdHksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnRvb3RoaW50ZXJydXB0KSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCp0b290aHRvb2xvbmdpbnRlcnJ1cHQpKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IHRvb3RocHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZXZzcGVyc3luY2N5
Y2xlICkKICAgICAgICA6CiAgICAgICAgdHRvb3Rod2hlZWxwcm90byhhcmV2c3BlcnN5bmNjeWNs
ZSksCiAgICBzdGFydGVkKGZhbHNlKQogICAgICAgIHsKCgogICAgSU5URVJQT0xBVEVUSU1FUjo6
c3RvcCgpOwogICAgICAgIElOVEVSUE9MQVRFVElNRVI6OnNldGludGVycnVwdHZlY3RvcnMoCiAg
ICAgICAgICAgICAgICAgICAgdGltZXJleHBpcmVkaW50ZXJydXB0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVycHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAg
ICAgICAgSU5URVJQT0xBVEVUSU1FUjo6c2V0dXAoY29tcGFyZW5vb3V0cHV0LG5vdHVzZWQsZGlz
YWJsZWQscmlzaW5nLElOVEVSUE9MQVRFVElNRVJESVYpOwogICAgSU5URVJQT0xBVEVUSU1FUjo6
Y2xlYXJpbnRzb3VyY2VzKHRydWUsdHJ1ZSx0cnVlKTsKCgoKCgogICAgVE9PVEhFREdFQ0FQVFVS
RVRJTUVSOjpzdG9wKCk7CiAgICAgICAgVE9PVEhFREdFQ0FQVFVSRVRJTUVSOjpzZXRpbnRlcnJ1
cHR2ZWN0b3JzKAogICAgICAgICAgICAgICAgICAgIHRvb3RoaW50ZXJydXB0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vdGh0b29sb25naW50ZXJydXB0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vdGhwcmlvcml0eSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICBUT09USEVER0VDQVBUVVJFVElNRVI6OnNl
dHVwKGlucHV0bWF0Y2hmYWxsaW5nLGNvbXBhcmVub291dHB1dCxjaGFuYSxyaXNpbmcsVE9PVEhF
REdFQ0FQVFVSRVRJTUVSRElWKTsKICAgIFRPT1RIRURHRUNBUFRVUkVUSU1FUjo6Y2xlYXJpbnRz
b3VyY2VzKHRydWUsdHJ1ZSx0cnVlKTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSU5URVJQ
T0xBVEVUSU1FUiwgaW50IElOVEVSUE9MQVRFVElNRVJESVYsIGNsYXNzIFRPT1RIRURHRUNBUFRV
UkVUSU1FUiwgaW50IFRPT1RIRURHRUNBUFRVUkVUSU1FUkRJViwgaW50IE5VTUJFUk9GVEVFVEgs
IGludCBTVEVQU1BFUlRPT1RILHRhbmdsZSBGVUxMQ1lDTEVBTkdMRSxpbnQgQkFTRUNQVUZSRVE+
IHVuc2lnbmVkIHNob3J0IHR0b290aHdoZWVsIDxJTlRFUlBPTEFURVRJTUVSLElOVEVSUE9MQVRF
VElNRVJESVYsVE9PVEhFREdFQ0FQVFVSRVRJTUVSLFRPT1RIRURHRUNBUFRVUkVUSU1FUkRJVixO
VU1CRVJPRlRFRVRILFNURVBTUEVSVE9PVEgsRlVMTENZQ0xFQU5HTEUsQkFTRUNQVUZSRVE+IDo6
c2FtcGxlcnBtKHVuc2lnbmVkIHNob3J0IHNhbXBsZWZyZXEpCiAgICAgICAgewogICAgICAgIHVu
c2lnbmVkIGludCBjdXJyZW50c3RlcHM7CiAgICAgICAgdW5zaWduZWQgaW50IHRvdGFsdGltZSxj
b3VudDsKCiAgICBpZiAoc3RhcnRlZCkKICAgICAgICB7CiAgICAgICAgVE9PVEhFREdFQ0FQVFVS
RVRJTUVSOjplbmFibGVpbnRzKGZhbHNlLGZhbHNlLGZhbHNlKTsKICAgICAgICBjdXJyZW50c3Rl
cHM9c3RlcHN0YWtlbjsKICAgICAgICAgICAgc3RlcHN0YWtlbj0wOwogICAgICAgIHRvdGFsdGlt
ZT10b3RhbHNhbXBsZXRpbWU7CiAgICAgICAgY291bnQ9Zmlmb3ZhbGlkY291bnQ7CiAgICAgICAg
ICAgIFRPT1RIRURHRUNBUFRVUkVUSU1FUjo6ZW5hYmxlaW50cyh0cnVlLHRydWUsZmFsc2UpOwog
ICAgICAgIH0KICAgIGVsc2UKICAgICAgICBjb3VudD0wOwoKICAgICAgICBpZiAoIGN1cnJlbnRz
dGVwczxTVEVQU1BFUlRPT1RIKjQgJiYKICAgICAgICAgICAgICAgIGNvdW50PT00KQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIChCQVNFQ1BVRlJFUS9UT09USEVER0VD
QVBUVVJFVElNRVJESVYpKnJldnNwZXJzeW5jY3ljbGUvU1RFUFNQRVJUT09USCo2MCo0L3RvdGFs
dGltZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlcGZyZXE9Y3VycmVudHN0ZXBzKnNhbXBsZWZy
ZXE7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RlcGZyZXEqNjAqcmV2c3BlcnN5bmNjeWNsZS8o
TlVNQkVST0ZURUVUSCpTVEVQU1BFUlRPT1RIKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgSU5URVJQT0xBVEVUSU1FUiwgaW50IElOVEVSUE9MQVRFVElN
RVJESVYsIGNsYXNzIFRPT1RIRURHRUNBUFRVUkVUSU1FUiwgaW50IFRPT1RIRURHRUNBUFRVUkVU
SU1FUkRJViwgaW50IE5VTUJFUk9GVEVFVEgsIGludCBTVEVQU1BFUlRPT1RILHRhbmdsZSBGVUxM
Q1lDTEVBTkdMRSxpbnQgQkFTRUNQVUZSRVE+IHZvaWQgdHRvb3Rod2hlZWwgPElOVEVSUE9MQVRF
VElNRVIsSU5URVJQT0xBVEVUSU1FUkRJVixUT09USEVER0VDQVBUVVJFVElNRVIsVE9PVEhFREdF
Q0FQVFVSRVRJTUVSRElWLE5VTUJFUk9GVEVFVEgsU1RFUFNQRVJUT09USCxGVUxMQ1lDTEVBTkdM
RSxCQVNFQ1BVRlJFUT4gOjpzdGFydCgpCiAgICAgICAgewogICAgICAgIFRPT1RIRURHRUNBUFRV
UkVUSU1FUjo6ZW5hYmxlaW50cyhmYWxzZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgSU5URVJQT0xB
VEVUSU1FUjo6ZW5hYmxlaW50cyhmYWxzZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgVE9PVEhFREdF
Q0FQVFVSRVRJTUVSOjpzZXRjb3VudCgwKTsKICAgICAgICBUT09USEVER0VDQVBUVVJFVElNRVI6
OnNldGdyYigweEZGRkYpOwogICAgICAgIG92ZXJmbG93bmNsaWNrcz0wOwogICAgICAgIFRPT1RI
RURHRUNBUFRVUkVUSU1FUjo6Y2xlYXJpbnRzb3VyY2VzKHRydWUgLHRydWUgLHRydWUgKTsKICAg
ICAgICBUT09USEVER0VDQVBUVVJFVElNRVI6OnN0YXJ0KCk7CiAgICAgICAgVE9PVEhFREdFQ0FQ
VFVSRVRJTUVSOjplbmFibGVpbnRzKHRydWUsdHJ1ZSxmYWxzZSk7CiAgICAgICAgSU5URVJQT0xB
VEVUSU1FUjo6ZW5hYmxlaW50cyh0cnVlLGZhbHNlLGZhbHNlKTsKICAgIHN0YXJ0ZWQ9dHJ1ZTsK
ICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSU5URVJQT0xBVEVUSU1FUiwgaW50IElOVEVSUE9M
QVRFVElNRVJESVYsIGNsYXNzIFRPT1RIRURHRUNBUFRVUkVUSU1FUiwgaW50IFRPT1RIRURHRUNB
UFRVUkVUSU1FUkRJViwgaW50IE5VTUJFUk9GVEVFVEgsIGludCBTVEVQU1BFUlRPT1RILHRhbmds
ZSBGVUxMQ1lDTEVBTkdMRSxpbnQgQkFTRUNQVUZSRVE+IGludCB0dG9vdGh3aGVlbCA8SU5URVJQ
T0xBVEVUSU1FUixJTlRFUlBPTEFURVRJTUVSRElWLFRPT1RIRURHRUNBUFRVUkVUSU1FUixUT09U
SEVER0VDQVBUVVJFVElNRVJESVYsTlVNQkVST0ZURUVUSCxTVEVQU1BFUlRPT1RILEZVTExDWUNM
RUFOR0xFLEJBU0VDUFVGUkVRPiA6OnRyYW5zbGF0ZWFuZ2xldG9zdGVwKHRhbmdsZSBhbmdsZSkK
ICAgICAgICB7CiAgICAgICAgdGFuZ2xlIGFuPWFuZ2xlLWZyZWZlcmVuY2VhbmdsZTsKICAgICAg
ICB3aGlsZSAoYW4+PUZVTExDWUNMRUFOR0xFKQogICAgICAgICAgICAgICAgYW4tPUZVTExDWUNM
RUFOR0xFOwogICAgICAgIHdoaWxlIChhbjwwKQogICAgICAgICAgICAgICAgYW4rPUZVTExDWUNM
RUFOR0xFOwogICAgICAgIHJldHVybiAoKHNob3J0KSgoKGFuKS8zNjAqKChOVU1CRVJPRlRFRVRI
KlNURVBTUEVSVE9PVEgpL3JldnNwZXJzeW5jY3ljbGUpKT4+MTYpKTsKICAgICAgICB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSU5URVJQT0xBVEVUSU1FUiwgaW50IElOVEVSUE9MQVRFVElNRVJESVYsIGNs
YXNzIFRPT1RIRURHRUNBUFRVUkVUSU1FUiwgaW50IFRPT1RIRURHRUNBUFRVUkVUSU1FUkRJViwg
aW50IE5VTUJFUk9GVEVFVEgsIGludCBTVEVQU1BFUlRPT1RILHRhbmdsZSBGVUxMQ1lDTEVBTkdM
RSxpbnQgQkFTRUNQVUZSRVE+IHZvaWQgdHRvb3Rod2hlZWwgPElOVEVSUE9MQVRFVElNRVIsSU5U
RVJQT0xBVEVUSU1FUkRJVixUT09USEVER0VDQVBUVVJFVElNRVIsVE9PVEhFREdFQ0FQVFVSRVRJ
TUVSRElWLE5VTUJFUk9GVEVFVEgsU1RFUFNQRVJUT09USCxGVUxMQ1lDTEVBTkdMRSxCQVNFQ1BV
RlJFUT4gOjp1bnNjaGVkdWxlbmV4dCgpCiAgICAgICAgewogICAgICAgIElOVEVSUE9MQVRFVElN
RVI6OnN0b3AoKTsKICAgIElOVEVSUE9MQVRFVElNRVI6OnNldGNvdW50KDApOwogICAgICAgIElO
VEVSUE9MQVRFVElNRVI6OmNsZWFyaW50c291cmNlcyh0cnVlLHRydWUsdHJ1ZSk7CiAgICAgICAg
Zm9yIChpbnQgY2g9MDtjaDxudW1iZXJvZmNoYWlucztjaCsrKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgaW50IHBhc3Njb3VudD0wOwogICAgICAgICAgICAgICAgd2hpbGUgKHBh
c3Njb3VudDwyICYmIG5leHRldmVudFtjaF0pCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHRoaXNhbmdsZT1uZXh0ZXZlbnRbY2hdLT5hbmdsZXN0
ZXA7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRldmVudFtjaF0tPmV4ZWN1dGVpZnNhZmUo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dGV2ZW50W2NoXT1uZXh0ZXZlbnRbY2hdLT5u
ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dGV2ZW50W2NoXSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG5leHRhbmdsZT1uZXh0ZXZlbnRbY2hdLT5hbmdsZXN0ZXA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5leHRhbmdsZTw9dGhpc2FuZ2xlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQoKdGVtcGxhdGUgPGNsYXNzIElOVEVSUE9MQVRFVElNRVIsIGludCBJTlRFUlBP
TEFURVRJTUVSRElWLCBjbGFzcyBUT09USEVER0VDQVBUVVJFVElNRVIsIGludCBUT09USEVER0VD
QVBUVVJFVElNRVJESVYsIGludCBOVU1CRVJPRlRFRVRILCBpbnQgU1RFUFNQRVJUT09USCx0YW5n
bGUgRlVMTENZQ0xFQU5HTEUsaW50IEJBU0VDUFVGUkVRPiBpbmxpbmUgdm9pZCB0dG9vdGh3aGVl
bCA8SU5URVJQT0xBVEVUSU1FUixJTlRFUlBPTEFURVRJTUVSRElWLFRPT1RIRURHRUNBUFRVUkVU
SU1FUixUT09USEVER0VDQVBUVVJFVElNRVJESVYsTlVNQkVST0ZURUVUSCxTVEVQU1BFUlRPT1RI
LEZVTExDWUNMRUFOR0xFLEJBU0VDUFVGUkVRPiA6OnNjaGVkdWxlbmV4dCgpCiAgICAgICAgewog
ICAgICAgIGludCBuZXh0ZXZlbnRkZWx0YT1uZXh0ZXZlbnRzdGVwbW9ub3RvbmljLWxhc3Rrbm93
bnN0ZXBtb25vdG9uaWM7CgogICAgICAgIGlmIChuZXh0ZXZlbnRkZWx0YTw9MCkKICAgICAgICAg
ICAgICAgIHsKCiAgICAgICAgICAgICAgICBsYXN0dGltZXN0ZXA9MDsKICAgICAgICAgICAgICAg
IG51bWJlcnRvc2tpcD0wOwogICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6c3RvcCgp
OwogICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6c2V0Y291bnQoMCk7CiAgICAgICAg
ICAgICAgICBJTlRFUlBPTEFURVRJTUVSOjpzZXRncmEoMSk7CiAgICAgICAgICAgICAgICBJTlRF
UlBPTEFURVRJTUVSOjpzdGFydCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIHsKICAgICAgICB1bnNpZ25lZCBpbnQgdGltZWZyb21sYXN0dG9vdGg9dGlj
a3NwZXJhbmdsZXN0ZXAqKCh1bnNpZ25lZCBpbnQpbmV4dGV2ZW50ZGVsdGEpLzE2OwogICAgICAg
ICAgICAgICAgaWYgKGRlbHRhdGltZT49dGltZWZyb21sYXN0dG9vdGgpCiAgICAgICAgICAgICAg
ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3R0aW1lc3RlcD0wOwogICAg
ICAgICAgICAgICAgICAgICAgICBudW1iZXJ0b3NraXA9MDsKICAgICAgICAgICAgICAgIElOVEVS
UE9MQVRFVElNRVI6OnN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJQT0xBVEVU
SU1FUjo6c2V0Y291bnQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSUE9MQVRFVElN
RVI6OnNldGdyYSgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6
c3RhcnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3R0aW1l
c3RlcD10aW1lZnJvbWxhc3R0b290aC1kZWx0YXRpbWU7CiAgICAgICAgICAgICAgICAgICAgICAg
IElOVEVSUE9MQVRFVElNRVI6OnN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJQ
T0xBVEVUSU1FUjo6Y2xlYXJpbnRzb3VyY2VzKHRydWUsdHJ1ZSx0cnVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtYmVydG9za2lwPWxhc3R0aW1lc3RlcD4+MTY7CiAgICAgICAgICAgICAg
ICAgICAgICAgIElOVEVSUE9MQVRFVElNRVI6OnNldGdyYShsYXN0dGltZXN0ZXAgJiAweEZGRkYp
OwogICAgICAgICAgICAgICAgICAgICAgICBJTlRFUlBPTEFURVRJTUVSOjpzZXRjb3VudCgwKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6c3RhcnQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCnRlbXBsYXRl
IDxjbGFzcyBJTlRFUlBPTEFURVRJTUVSLCBpbnQgSU5URVJQT0xBVEVUSU1FUkRJViwgY2xhc3Mg
VE9PVEhFREdFQ0FQVFVSRVRJTUVSLCBpbnQgVE9PVEhFREdFQ0FQVFVSRVRJTUVSRElWLCBpbnQg
TlVNQkVST0ZURUVUSCwgaW50IFNURVBTUEVSVE9PVEgsdGFuZ2xlIEZVTExDWUNMRUFOR0xFLGlu
dCBCQVNFQ1BVRlJFUT4gaW5saW5lIHZvaWQgdHRvb3Rod2hlZWwgPElOVEVSUE9MQVRFVElNRVIs
SU5URVJQT0xBVEVUSU1FUkRJVixUT09USEVER0VDQVBUVVJFVElNRVIsVE9PVEhFREdFQ0FQVFVS
RVRJTUVSRElWLE5VTUJFUk9GVEVFVEgsU1RFUFNQRVJUT09USCxGVUxMQ1lDTEVBTkdMRSxCQVNF
Q1BVRlJFUT4gOjpkb3Rvb3RoaW50ZXJydXB0KCkKICAgICAgICB7CiAgICB1bnNpZ25lZCBpbnQg
Y291bnRlcnY9VE9PVEhFREdFQ0FQVFVSRVRJTUVSOjpnZXRncmEoKStvdmVyZmxvd25jbGlja3M7
CgoKICAgICAgICB1bnNpZ25lZCBpbnQgbWF4cHVsc2U9dG90YWxzYW1wbGV0aW1lKig4KjE1MC8x
MDApLyg0KjgpOwogICAgICAgIHVuc2lnbmVkIGludCBtYXhnYXA9dG90YWxzYW1wbGV0aW1lKig4
KjI1MC8xMDApLyg0KjgpOwogICAgICAgIHVuc2lnbmVkIGludCBtaW5wdWxzZTsKCiAgICAgICAg
aWYgKHRvdGFsc2FtcGxldGltZT4gNCAqIDYwICogKEJBU0VDUFVGUkVRL1RPT1RIRURHRUNBUFRV
UkVUSU1FUkRJVikgLyA1MDAgL05VTUJFUk9GVEVFVEggKQogICAgICAgICAgICAgICAgbWlucHVs
c2U9dG90YWxzYW1wbGV0aW1lKig4KjM4LzEwMCkvKDQqOCk7CiAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgbWlucHVsc2U9dG90YWxzYW1wbGV0aW1lKig4KjYzLzEwMCkvKDQqOCk7CgogICAg
ICAgIHRpY2tzcGVyYW5nbGVzdGVwPXRvdGFsc2FtcGxldGltZSoxNi8oNCpTVEVQU1BFUlRPT1RI
KTsKCiAgICAgICAgYm9vbCBnYXA9ZmFsc2U7CiAgICAgICAgYm9vbCBpZ25vcmU9ZmFsc2U7CgoK
ICAgICAgICBzd2l0Y2ggKHN5bmNzdGF0ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGNhc2Ugc3Nub3RpbWluZzoKICAgICAgICAgICAgbWF4Z2FwPTB4ODAwMDA7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHN5bmNzdGF0ZT1zc3dhaXRpbmdmb3Jlbm91Z2h0ZWV0aDsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWdub3JlPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBzc3dhaXRpbmdmb3Jlbm91Z2h0ZWV0aDoKICAgICAg
ICAgICAgbWF4Z2FwPTB4ODAwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWZvdmFs
aWRjb3VudD09NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jc3RhdGU9c3Ns
b29raW5nZm9yZ2FwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2Ugc3Nsb29raW5nZm9yZ2FwOgogICAgICAgICAgICBtYXhnYXA9MHg4MDAwMDsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJ2ID4gbWF4cHVsc2UpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZWV0aHNpbmNlbWlzc2luZ3Rvb3RoPTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3luY3N0YXRlPXNzbG9va2luZ2ZvcmdhcDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2FwPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ugc3Nsb29raW5nZm9yZ2Fw
MjoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJ2ID4gbWF4cHVsc2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIGlmICh0ZWV0aHNp
bmNlbWlzc2luZ3Rvb3RoPT1OVU1CRVJPRlRFRVRILTEpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3luY3N0YXRlPXNzc3luY2VkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVldGhzaW5jZW1pc3Npbmd0b290aD0xOwogICAgICAgICAgICAgICAgICAgIElOVEVS
UE9MQVRFVElNRVI6OmVuYWJsZWludHMoZmFsc2UsZmFsc2UsZmFsc2UpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdGtub3duc3RlcG1vbm90b25pYz0oKDAgKyhT
VEVQU1BFUlRPT1RIKjIpKSUoTlVNQkVST0ZURUVUSCpTVEVQU1BFUlRPT1RIKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXRpbWU9VE9PVEhFREdFQ0FQVFVS
RVRJTUVSOjpnZXRjb3VudCgpOwoKICAgICAgICAgICAgICAgICAgICBuZXh0ZXZlbnRhbmdsZT1s
YXN0a25vd25zdGVwbW9ub3RvbmljKzE7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRldmVu
dGFuZ2xlPj0oTlVNQkVST0ZURUVUSCpTVEVQU1BFUlRPT1RIKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgbmV4dGV2ZW50YW5nbGUtPShOVU1CRVJPRlRFRVRIKlNURVBTUEVSVE9PVEgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRldmVudHN0ZXBtb25vdG9uaWM9bmV4dGV2
ZW50YW5nbGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRldmVudHN0
ZXBtb25vdG9uaWM8bGFzdGtub3duc3RlcG1vbm90b25pYykKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5leHRldmVudHN0ZXBtb25vdG9uaWMrPShOVU1CRVJPRlRFRVRI
KlNURVBTUEVSVE9PVEgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2NoZWR1bGVuZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6ZW5h
YmxlaW50cyh0cnVlLGZhbHNlLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdhcD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZWV0aHNpbmNlbWlzc2luZ3Rvb3RoPTE7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3VudGVydiA8IG1pbnB1bHNlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3luY3N0YXRlPXNzbG9va2luZ2ZvcmdhcDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZ25vcmU9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlZXRoc2luY2VtaXNzaW5ndG9vdGghPU5V
TUJFUk9GVEVFVEgtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlZXRoc2luY2VtaXNzaW5ndG9vdGgrKzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN5bmNzdGF0ZT1zc2xvb2tpbmdmb3JnYXA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAg
ICAgICBjYXNlIHNzc3luY2VkOgogICAgICAgICAgICBpZiAoY291bnRlcnYgPiBtYXhwdWxzZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgaWYgKHRl
ZXRoc2luY2VtaXNzaW5ndG9vdGg9PU5VTUJFUk9GVEVFVEgtMSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZWV0aHNpbmNlbWlzc2luZ3Rvb3RoPTE7CiAgICAgICAgICAgICAgICAgICAgSU5U
RVJQT0xBVEVUSU1FUjo6ZW5hYmxlaW50cyhmYWxzZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0a25vd25zdGVwbW9ub3RvbmljKz0oU1RF
UFNQRVJUT09USCoyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
bHRhdGltZT1UT09USEVER0VDQVBUVVJFVElNRVI6OmdldGNvdW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZW5leHQoKTsKICAgICAgICAgICAgICAg
ICAgICBJTlRFUlBPTEFURVRJTUVSOjplbmFibGVpbnRzKHRydWUsZmFsc2UsZmFsc2UpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwPXRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNzdGF0ZT1zc2xvb2tpbmdm
b3JnYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNjaGVkdWxl
bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwZWFybHlh
bGFybS5hbGFybWV2ZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjb3VudGVydiA8IG1pbnB1bHNlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE9PVEhFREdF
Q0FQVFVSRVRJTUVSOjpzZXRjb3VudChUT09USEVER0VDQVBUVVJFVElNRVI6OmdldGNvdW50KCkr
Y291bnRlcnYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZT10cnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodGVldGhzaW5jZW1pc3Npbmd0b290aCE9TlVNQkVST0ZURUVUSC0xKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVldGhzaW5jZW1pc3Npbmd0b290aCsrOwogICAgICAgICAgICAgICAgSU5URVJQT0xBVEVU
SU1FUjo6ZW5hYmxlaW50cyhmYWxzZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGFzdGtub3duc3RlcG1vbm90b25pYys9U1RFUFNQRVJUT09USDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXRpbWU9VE9PVEhFREdFQ0FQVFVSRVRJTUVS
OjpnZXRjb3VudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlbmV4
dCgpOwogICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6ZW5hYmxlaW50cyh0cnVlLGZh
bHNlLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNzdGF0ZT1zc2xvb2tpbmdmb3JnYXA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zY2hlZHVsZW5leHQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnYXBsYXRlYWxhcm0uYWxhcm1ldmVudCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICB9CgoKCiAgICB1bnNpZ25lZCBpbnQgbWF4Z2FwaGlnaD1tYXhnYXA+
PjE2OwogICAgaWYgKG1heGdhcGhpZ2gpCiAgICAgICAgewoKCiAgICAgICAgdW5zaWduZWQgaW50
IHJlbT1tYXhnYXAgJiAweEZGRkY7CiAgICAgICAgdW5zaWduZWQgaW50IGN1cnJlbnQ9VE9PVEhF
REdFQ0FQVFVSRVRJTUVSOjpnZXRjb3VudCgpOwogICAgICAgIG92ZXJmbG93bmNsaWNrcz1tYXhn
YXBoaWdoOwogICAgICAgIGlmIChjdXJyZW50KzB4ODA+cmVtKQogICAgICAgICAgICBUT09USEVE
R0VDQVBUVVJFVElNRVI6OnNldGdyYihjdXJyZW50KzB4ODApOwogICAgICAgIGVsc2UKICAgICAg
ICAgICAgVE9PVEhFREdFQ0FQVFVSRVRJTUVSOjpzZXRncmIocmVtKTsKICAgICAgICB9CiAgICBl
bHNlCiAgICAgICAgewogICAgICAgIG92ZXJmbG93bmNsaWNrcz0wOwogICAgICAgIFRPT1RIRURH
RUNBUFRVUkVUSU1FUjo6c2V0Z3JiKG1heGdhcCk7CiAgICAgICAgfQoKCiAgICAgICAgaWYgKCFp
Z25vcmUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdG9v
dGh0aW1lOwoKICAgICAgICAgICAgICAgIGlmIChnYXApCiAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9vdGh0aW1lPWNvdW50ZXJ2LzI7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZXBzdGFrZW4rPShTVEVQU1BFUlRPT1RIKjIpOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9vdGh0aW1lPWNvdW50ZXJ2OwogICAgICAg
ICAgICAgICAgICAgICAgICBzdGVwc3Rha2VuKz1TVEVQU1BFUlRPT1RIOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdG90YWxzYW1wbGV0aW1lKz10b290aHRpbWU7
CiAgICAgICAgICAgICAgICBpZiAoZmlmb3ZhbGlkY291bnQ9PTQpCiAgICAgICAgICAgICAgICAg
ICAgICAgIHRvdGFsc2FtcGxldGltZS09dG9vdGh0aW1lZmlmb1tmaWZvaW5wdHJdOwogICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBmaWZvdmFsaWRjb3VudCsrOwoK
ICAgICAgICAgICAgICAgIHRvb3RodGltZWZpZm9bZmlmb2lucHRyXT10b290aHRpbWU7CiAgICAg
ICAgICAgICAgICBmaWZvaW5wdHI9KGZpZm9pbnB0cisxKSAmICg0IC0xKTsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgVE9PVEhFREdFQ0FQVFVSRVRJTUVSOjpjbGVhcmludHNvdXJjZXModHJ1
ZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgfQoKCnRlbXBsYXRlIDxjbGFzcyBJTlRFUlBPTEFURVRJ
TUVSLCBpbnQgSU5URVJQT0xBVEVUSU1FUkRJViwgY2xhc3MgVE9PVEhFREdFQ0FQVFVSRVRJTUVS
LCBpbnQgVE9PVEhFREdFQ0FQVFVSRVRJTUVSRElWLCBpbnQgTlVNQkVST0ZURUVUSCwgaW50IFNU
RVBTUEVSVE9PVEgsdGFuZ2xlIEZVTExDWUNMRUFOR0xFLGludCBCQVNFQ1BVRlJFUT4gaW5saW5l
IHZvaWQgdHRvb3Rod2hlZWwgPElOVEVSUE9MQVRFVElNRVIsSU5URVJQT0xBVEVUSU1FUkRJVixU
T09USEVER0VDQVBUVVJFVElNRVIsVE9PVEhFREdFQ0FQVFVSRVRJTUVSRElWLE5VTUJFUk9GVEVF
VEgsU1RFUFNQRVJUT09USCxGVUxMQ1lDTEVBTkdMRSxCQVNFQ1BVRlJFUT4gOjpkb3Rvb3RodG9v
bG9uZ2ludGVycnVwdCgpCiAgICB7CiAgICBpZiAob3ZlcmZsb3duY2xpY2tzKQogICAgICAgIHsK
ICAgICAgICBvdmVyZmxvd25jbGlja3MtLTsKICAgICAgICBUT09USEVER0VDQVBUVVJFVElNRVI6
OmNsZWFyaW50c291cmNlcyhmYWxzZSx0cnVlLGZhbHNlKTsKICAgICAgICB9CiAgICBlbHNlCiAg
ICAgICAgewogICAgICAgICAgICAgICAgdG9vbG9uZ2FsYXJtLmFsYXJtZXZlbnQoKTsKICAgICAg
ICBUT09USEVER0VDQVBUVVJFVElNRVI6OnN0b3AoKTsKICAgICAgICAgICAgVE9PVEhFREdFQ0FQ
VFVSRVRJTUVSOjpzZXRjb3VudCgwKTsKICAgICAgICAgICAgVE9PVEhFREdFQ0FQVFVSRVRJTUVS
OjpjbGVhcmludHNvdXJjZXModHJ1ZSx0cnVlLHRydWUpOwoKICAgICAgICAgICAgc3luY3N0YXRl
PXNzbm90aW1pbmc7CiAgICAgICAgICAgIGZpZm92YWxpZGNvdW50PTA7CiAgICAgICAgZmlmb2lu
cHRyPTA7CiAgICAgICAgICAgIHRvdGFsc2FtcGxldGltZT0wOwogICAgICAgICAgICB1bnNjaGVk
dWxlbmV4dCgpOwoKICAgICAgICAgICAgb3ZlcmZsb3duY2xpY2tzPTA7CiAgICAgICAgVE9PVEhF
REdFQ0FQVFVSRVRJTUVSOjpzZXRncmIoMHhGRkZGKTsKCiAgICAgICAgVE9PVEhFREdFQ0FQVFVS
RVRJTUVSOjpzdGFydCgpOwogICAgICAgIH0KICAgIH0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIElO
VEVSUE9MQVRFVElNRVIsIGludCBJTlRFUlBPTEFURVRJTUVSRElWLCBjbGFzcyBUT09USEVER0VD
QVBUVVJFVElNRVIsIGludCBUT09USEVER0VDQVBUVVJFVElNRVJESVYsIGludCBOVU1CRVJPRlRF
RVRILCBpbnQgU1RFUFNQRVJUT09USCx0YW5nbGUgRlVMTENZQ0xFQU5HTEUsaW50IEJBU0VDUFVG
UkVRPiBpbmxpbmUgdm9pZCB0dG9vdGh3aGVlbCA8SU5URVJQT0xBVEVUSU1FUixJTlRFUlBPTEFU
RVRJTUVSRElWLFRPT1RIRURHRUNBUFRVUkVUSU1FUixUT09USEVER0VDQVBUVVJFVElNRVJESVYs
TlVNQkVST0ZURUVUSCxTVEVQU1BFUlRPT1RILEZVTExDWUNMRUFOR0xFLEJBU0VDUFVGUkVRPiA6
OmRvdGltZXJleHBpcmVkaW50ZXJydXB0KCkKICAgICAgICB7CiAgICAgICAgaWYgKG51bWJlcnRv
c2tpcCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG51bWJlcnRvc2tpcC0tOwog
ICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6Y2xlYXJpbnRzb3VyY2VzKHRydWUsdHJ1
ZSx0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7
CgogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoaXNhbmdsZT1uZXh0ZXZlbnRhbmdsZTsK
CgogICAgICAgICAgICAgICAgaW50IGNsb3Nlc3RkaXN0PShOVU1CRVJPRlRFRVRIKlNURVBTUEVS
VE9PVEgpKjI7CiAgICAgICAgICAgICAgICBmb3IgKGludCBjaD0wO2NoPG51bWJlcm9mY2hhaW5z
O2NoKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRpc3Q7CgoKICAgICAgICAgICAgd2hpbGUgKG5leHRldmVudFtjaF0pCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdD1uZXh0ZXZlbnRbY2hd
LT5hbmdsZXN0ZXAtdGhpc2FuZ2xlOwogICAgICAgICAgICAgICAgaWYgKGRpc3QpCiAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRldmVudFtjaF0t
PmV4ZWN1dGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ZXZlbnRbY2hd
PW5leHRldmVudFtjaF0tPm5leHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAo
bmV4dGV2ZW50W2NoXSkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChkaXN0PDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCs9KE5VTUJF
Uk9GVEVFVEgqU1RFUFNQRVJUT09USCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChkaXN0PGNsb3Nlc3RkaXN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
b3Nlc3RkaXN0PWRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgIGlmIChjbG9zZXN0ZGlzdD49KE5VTUJFUk9GVEVF
VEgqU1RFUFNQRVJUT09USCkpCiAgICAgICAgICAgIGNsb3Nlc3RkaXN0PShOVU1CRVJPRlRFRVRI
KlNURVBTUEVSVE9PVEgpLzg7CgogICAgICAgIG5leHRldmVudGFuZ2xlKz1jbG9zZXN0ZGlzdDsK
ICAgICAgICBpZiAobmV4dGV2ZW50YW5nbGU+PShOVU1CRVJPRlRFRVRIKlNURVBTUEVSVE9PVEgp
KQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0ZXZlbnRhbmdsZS09KE5VTUJFUk9GVEVFVEgq
U1RFUFNQRVJUT09USCk7CiAgICAgICAgbmV4dGV2ZW50c3RlcG1vbm90b25pYys9Y2xvc2VzdGRp
c3Q7CgogICAgICAgICAgICAgICAgZGVsdGF0aW1lKz0obGFzdHRpbWVzdGVwKyg0MDAqKEJBU0VD
UFVGUkVRL0lOVEVSUE9MQVRFVElNRVJESVYpL0JBU0VDUFVGUkVRKSk7CiAgICAgICAgICAgICAg
ICBzY2hlZHVsZW5leHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiMgNSAiZXZlbnRl
eGUuaCIgMgojIDEgIm1rNmJvYXJkL2h3YWxsb2MuaCIgMQoKCgojIDEgImNwdS9zaDIuaCIgMQoj
IDE2MiAiY3B1L3NoMi5oIgp0eXBlZGVmIHZvaWQgKCppbnRmdW5jdGlvbikoKTsKZXh0ZXJuICJD
IiB2b2lkIGp1bXB0b3Jlc2V0KCk7CgogICAgICAgIGVudW0gcGludHlwZQogICAgICAgIHsKICAg
ICAgICAgICAgbm90dXNlZCwKICAgICAgICAgICAgaW5wdXRtYXRjaHJpc2luZywKICAgICAgICAg
ICAgaW5wdXRtYXRjaGZhbGxpbmcsCiAgICAgICAgICAgIGlucHV0bWF0Y2hib3RoLAogICAgICAg
ICAgICBvdXRwdXRjb21wYXJldG9nZ2xlLAogICAgICAgICAgICBvdXRwdXRjb21wYXJlcHVsc2Uw
LAogICAgICAgICAgICBvdXRwdXRjb21wYXJlcHVsc2UxLAogICAgICAgICAgICBjb21wYXJlbm9v
dXRwdXQKICAgICAgICB9OwoKICAgICAgICBlbnVtIGNsZWFyc291cmNlCiAgICAgICAgewogICAg
ICAgICAgICBkaXNhYmxlZCwKICAgICAgICAgICAgY2hhbmEsCiAgICAgICAgICAgIGNoYW5iLAog
ICAgICAgICAgICBzeW5jCiAgICAgICAgfTsKCiAgICAgICAgZW51bSBlZGdlbW9kZQogICAgICAg
IHsKICAgICAgICAgICAgcmlzaW5nLAogICAgICAgICAgICBmYWxsaW5nLAogICAgICAgICAgICBi
b3RoCiAgICAgICAgfTsKCiAgICAgICAgZW51bSBjbGtzcmMKICAgICAgICB7CiAgICAgICAgICAg
IGNsa3NyY2V4dGE9LTEsCiAgICAgICAgICAgIGNsa3NyY2V4dGI9LTIsCiAgICAgICAgICAgIGNs
a3NyY2V4dGM9LTMsCiAgICAgICAgICAgIGNsa3NyY2V4dGQ9LTQsCiAgICAgICAgICAgIGNsa3Ny
Y3Qxb3ZmPS01LAogICAgICAgICAgICBjbGtzcmN0Mm92Zj0tNgogICAgICAgICB9OwoKCmNsYXNz
IHRwcm9jZXNzb3IKICAgIHsKICAgIHB1YmxpYzoKICAgICAgICBzdGF0aWMgaW50ZnVuY3Rpb24g
dmVjdG9ydGFibGVbMjU2XTsKCiAgICAgICAgc3RhdGljIHZvaWQgbWFza2FsbGludGVycnVwdHMo
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop
KDB4RkZGRjgzNDgpKT0wOwogICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq
KSgweEZGRkY4MzRBKSk9MDsKICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
KikoMHhGRkZGODM0QykpPTA7CiAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
ICopKDB4RkZGRjgzNEUpKT0wOwogICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCAqKSgweEZGRkY4MzUwKSk9MDsKICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgKikoMHhGRkZGODM1MikpPTA7CiAgICAgICAgICAgIH0KCiAgICAgICAgc3RhdGljIHZvaWQg
aW5pdGlhbGlzZSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgbWFza2FsbGludGVycnVwdHMo
KTsKICAgICAgICAgICAgYXNtICgibGRjICUwLHZiciIgOiA6ICJyIigmdmVjdG9ydGFibGUpICk7
CgogICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4NjIwKSk9
MHgwMjsKICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODYy
MikpPTB4MDA7CiAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZG
Rjg2MjQpKT0weDExOwogICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgw
eEZGRkY4NjI2KSk9MHgwMTsKCiAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
ICopKDB4RkZGRjgzOUEpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzlB
KSkgJiAweENGRkYgfCAweDIwMDA7CiAgICAgICAgICAgIH0KCgoKICAgICAgICBzdGF0aWMgdm9p
ZCBlbmFibGVpbnRzKCkKICAgICAgICAgICAgewogICAgICAgICAgICBhc20gKCJsZGMgJTAsc3Ii
IDogOiAiciIoMCkgOiAiY2MiLCJ0Iik7CiAgICAgICAgICAgIH0KCgoKICAgICAgICBzdGF0aWMg
dm9pZCBkaXNhYmxlaW50cygpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgYXNtICgibGRjICUw
LHNyIiA6IDogInIiKDB4RjApIDogImNjIiwidCIpOwogICAgICAgICAgICB9CgoKCiAgICAgICAg
c3RhdGljIHZvaWQgc2ltdWxhdGVyZXNldCgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgbWFz
a2FsbGludGVycnVwdHMoKTsKICAgICAgICAgICAganVtcHRvcmVzZXQoKTsKICAgICAgICAgICAg
fQoKICAgICAgICBjbGFzcyBtYXNraW50ZXJydXB0cwogICAgICAgICAgICB7CiAgICAgICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2F2ZWRfc3I7CiAgICAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIG1hc2tpbnRlcnJ1cHRzKCkKICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYXNtKCJzdGMgc3IsJTAiIDogIj1yIihzYXZl
ZF9zcikpOwogICAgICAgICAgICAgICAgICAgIGFzbSAoImxkYyAlMCxzciIgOiA6ICJyIihzYXZl
ZF9zcnwweEYwKSA6ICJjYyIsInQiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBtYXNraW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgbGV2KQogICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICBhc20oInN0YyBzciwlMCIgOiAiPXIiKHNhdmVkX3NyKSk7
CiAgICAgICAgICAgICAgICAgICAgaWYgKChzYXZlZF9zciAmIDB4RjApPChsZXY8PDQpKQogICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBuZXdzdGF0ZT1zYXZlZF9zciAmIH4weEYwIHwgKGxldjw8NCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGFzbSAoImxkYyAlMCxzciIgOiA6ICJyIihuZXdzdGF0ZSkgOiAiY2MiLCJ0Iik7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB+bWFza2ludGVycnVwdHMoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBhc20gKCJsZGMgJTAsc3IiIDogOiAiciIoc2F2ZWRfc3IpIDogImNjIiwidCIpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgdHRpbWVy
MAogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHN0YXRp
YyB2b2lkIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
KCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy
NDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjQwKSkgfCAweDAxOwog
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBzdG9wKCkK
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hh
ciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNDApKSk9KCoodm9sYXRp
bGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjQwKSkgJiB+MHgwMTsKICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0dXAocGludHlwZSBjb25zdCBw
aW5hLCBwaW50eXBlIGNvbnN0IHBpbmIsIGNsZWFyc291cmNlIGNvbnN0IGNsZWFyLGVkZ2Vtb2Rl
IGNvbnN0IGVkZ2UsIGludCBjb25zdCBjbGspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyNDEpKSAmPSB+MHgwMTsKICAgICAgICAgICAgICAgICAgICAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjMpKT0weDAwOwogICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAocGluYSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIGlucHV0bWF0Y2hyaXNpbmc6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgJj0g
fjB4MDAwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4
RkZGRjgzQkEpKSAmICh+MHgwMDAzKSB8IDB4MDAwMTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MikpID0gKCoodm9sYXRp
bGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYyKSkgJiAofjB4MEYpIHwgMHgwODsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IGlucHV0bWF0Y2hmYWxsaW5nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpICY9IH4weDAwMDE7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB
KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDAw
MykgfCAweDAwMDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko
MHhGRkZGODI2MikpICYgKH4weDBGKSB8IDB4MDk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNoYm90aDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4
RkZGRjgzQjQpKSAmPSB+MHgwMDAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDAwMDMpIHwgMHgwMDAxOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYy
KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHgwRikg
fCAweDBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXRvZ2dsZToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAw
MDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCAqKSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4
M0JBKSkgJiAofjB4MDAwMykgfCAweDAwMDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSA9ICgqKHZvbGF0aWxlIHVu
c2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MikpICYgKH4weDBGKSB8IDB4MDM7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRw
dXRjb21wYXJlcHVsc2UwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpIHw9IDB4MDAwMTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9
ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMDAzKSB8
IDB4MDAwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk
IGNoYXIgKikoMHhGRkZGODI2MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4MjYyKSkgJiAofjB4MEYpIHwgMHgwNTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTE6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgw
eEZGRkY4M0I0KSkgfD0gMHgwMDAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDAwMDMpIHwgMHgwMDAxOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYy
KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHgwRikg
fCAweDAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGls
ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo
YXIgKikoMHhGRkZGODI2MikpICYgKH4weDBGKSB8IDB4MDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBpbmIpCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKiko
MHhGRkZGODNCNCkpICY9IH4weDAwMDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNp
Z25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDAwQykgfCAweDAwMDQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy
NjIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MikpICYgKH4weEYw
KSB8IDB4ODA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNoZmFsbGluZzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgw
MDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG
ODNCQSkpICYgKH4weDAwMEMpIHwgMHgwMDA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYyKSkgPSAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHhGMCkgfCAweDkwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5w
dXRtYXRjaGJvdGg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp
Z25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgJj0gfjB4MDAwMjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgq
KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMDBDKSB8IDB4
MDAwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo
YXIgKikoMHhGRkZGODI2MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4
MjYyKSkgJiAofjB4RjApIHwgMHhBMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmV0b2dnbGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZG
RkY4M0I0KSkgfD0gMHgwMDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQg
c2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDAwMEMpIHwgMHgwMDA0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYyKSkg
PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHhGMCkgfCAw
eDMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXB1bHNlMDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwMDI7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq
KSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB
KSkgJiAofjB4MDAwQykgfCAweDAwMDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2
b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSA9ICgqKHZvbGF0aWxlIHVuc2ln
bmVkIGNoYXIgKikoMHhGRkZGODI2MikpICYgKH4weEYwKSB8IDB4NTA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRj
b21wYXJlcHVsc2UxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpIHw9IDB4MDAwMjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgq
KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMDBDKSB8IDB4
MDAwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo
YXIgKikoMHhGRkZGODI2MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4
MjYyKSkgJiAofjB4RjApIHwgMHgxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYyKSkgPSAoKih2b2xh
dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHhGMCkgfCAweDAwOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2xlYXIp
CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBk
aXNhYmxlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk
IGNoYXIgKikoMHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4MjYwKSkgJiAofjB4RTApIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNoYW5hOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgPSAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHhFMCkgfCAweDIw
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgY2hhbmI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg
KikoMHhGRkZGODI2MCkpICYgKH4weEUwKSB8IDB4NDA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzeW5jOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYw
KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHhFMCkg
fCAweDYwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goZWRnZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHJpc2luZzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgJiAofjB4
MTgpIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIGZhbGxpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSA9ICgqKHZvbGF0aWxlIHVu
c2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MCkpICYgKH4weDE4KSB8IDB4MDg7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBib3Ro
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAq
KSgweEZGRkY4MjYwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjAp
KSAmICh+MHgxOCkgfCAweDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goY2xrKQog
ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko
MHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkg
JiAofjB4MDcpIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSA9ICgqKHZvbGF0aWxlIHVu
c2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MCkpICYgKH4weDA3KSB8IDB4MDE7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko
MHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkg
JiAofjB4MDcpIHwgMHgwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDY0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgPSAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHgwNykgfCAweDAzOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2xr
c3JjZXh0YToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk
IGNoYXIgKikoMHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4MjYwKSkgJiAofjB4MDcpIHwgMHgwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNsa3NyY2V4dGI6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjAp
KSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MCkpICYgKH4weDA3KSB8
IDB4MDU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBjbGtzcmNleHRjOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoo
dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgPSAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHgwNykgfCAweDA2OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2xrc3Jj
ZXh0ZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo
YXIgKikoMHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4
MjYwKSkgJiAofjB4MDcpIHwgMHgwNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgPSAoKih2b2xh
dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHgwNykgfCAweDAwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0Z3Jh
KHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICgqKHVuc2lnbmVkIHNob3J0ICopJigqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
ICopKDB4RkZGRjgyNjgpKSk9eDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldGdyYSgpCiAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgw
eEZGRkY4MjY4KSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRp
YyB2b2lkIHNldGdyYih1bnNpZ25lZCBzaG9ydCBjb25zdCB4KQogICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1
bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MjZBKSkpPXg7CiAgICAgICAgICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRncmIoKQogICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgKikoMHhGRkZGODI2QSkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBzdGF0aWMgdm9pZCBzZXRjb3VudCh1bnNpZ25lZCBzaG9ydCBjb25zdCB4KQogICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAq
KSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MjY2KSkpPXg7CiAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRj
b3VudCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MjY2KSk7CiAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIGVuYWJsZWludHMoIGJvb2wgY29u
c3QgcGluYSxib29sIGNvbnN0IHBpbmIsYm9vbCBjb25zdCBvdmVyZmxvdyApCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2lnbmVkIGNoYXIgKikmKCoodm9s
YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjY0KSkpID0gKHBpbmE/MHgwMToweDAwKSB8
IChwaW5iPzB4MDI6MHgwMCkgfCAob3ZlcmZsb3c/MHgxMDoweDAwKTsKICAgICAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJpbnRzb3VyY2VzKCBib29s
IGNvbnN0IHBpbmEsYm9vbCBjb25zdCBwaW5iLGJvb2wgY29uc3Qgb3ZlcmZsb3cgKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBjaGFyICopJigq
KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI2NSkpKSA9ICgqKHZvbGF0aWxlIHVu
c2lnbmVkIGNoYXIgKikoMHhGRkZGODI2NSkpICYgfiggKHBpbmE/MHgwMToweDAwKSB8IChwaW5i
PzB4MDI6MHgwMCkgfCAob3ZlcmZsb3c/MHgxMDoweDAwKSk7CiAgICAgICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIHN0YXRpYyBib29sIGNoYW5haW50KCkKICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo
YXIgKikoMHhGRkZGODI2NSkpICYgMHgwMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgc3RhdGljIGJvb2wgY2hhbmJpbnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4MjY1KSkgJiAweDAyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBz
dGF0aWMgYm9vbCBvdmZpbnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjY1KSkgJiAw
eDEwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRpbnRlcnJ1cHR2ZWN0b3JzKCBpbnRmdW5jdGlvbiBwaW5hLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZnVuY3Rpb24gcGluYiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGNv
bnN0IHBpbnByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ZnVuY3Rpb24gb3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjb25zdCBvdmVyZmxvd3ByaW9y
aXR5KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGls
ZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzRFKSk9KCgqKHZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0ICopKDB4RkZGRjgzNEUpKSAmICh+MHhGRjAwKSkgfCAocGlucHJpb3JpdHk8PDEyKSB8IChv
dmVyZmxvd3ByaW9yaXR5PDw4KTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0
b3J0YWJsZVs4OF09cGluYTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0
YWJsZVs4OV09cGluYjsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJs
ZVs5Ml09b3ZlcmZsb3c7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKCiAg
ICAgICAgY2xhc3MgdHRpbWVyMQogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAg
ICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25l
ZCBjaGFyICopKDB4RkZGRjgyNDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4MjQwKSkgfCAweDAyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBz
dGF0aWMgdm9pZCBzdG9wKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZG
RjgyNDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjQwKSkgJiB+MHgw
MjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0
dXAocGludHlwZSBjb25zdCBwaW5hLCBwaW50eXBlIGNvbnN0IHBpbmIsIGNsZWFyc291cmNlIGNv
bnN0IGNsZWFyLGVkZ2Vtb2RlIGNvbnN0IGVkZ2UsIGludCBjb25zdCBjbGspCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgICAgICAgICAg
ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNDEpKSAmPSB+MHgwMjsKICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBpbmEpCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNC
NCkpICY9IH4weDAwMTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1
bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDEwMCkgfCAweDAxMDA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSA9ICgq
KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MikpICYgKH4weDBGKSB8IDB4MDg7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBpbnB1dG1hdGNoZmFsbGluZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq
KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgwMDEwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG
RkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYg
KH4weDAxMDApIHwgMHgwMTAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp
bGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBj
aGFyICopKDB4RkZGRjgyODIpKSAmICh+MHgwRikgfCAweDA5OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGJv
dGg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCAqKSgweEZGRkY4M0I0KSkgJj0gfjB4MDAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxl
IHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMTAwKSB8IDB4MDEwMDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG
RkZGODI4MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAo
fjB4MEYpIHwgMHgwQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmV0b2dnbGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkg
fD0gMHgwMDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKiko
MHhGRkZGODNCQSkpICYgKH4weDAxMDApIHwgMHgwMTAwOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgPSAoKih2b2xh
dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSAmICh+MHgwRikgfCAweDAzOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2Ugb3V0cHV0Y29tcGFyZXB1bHNlMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZv
bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwMTA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4
M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4
MDEwMCkgfCAweDAxMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg
KikoMHhGRkZGODI4MikpICYgKH4weDBGKSB8IDB4MDU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVs
c2UxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgKikoMHhGRkZGODNCNCkpIHw9IDB4MDAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxl
IHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMTAwKSB8IDB4MDEwMDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG
RkZGODI4MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAo
fjB4MEYpIHwgMHgwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoo
dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgPSAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyODIpKSAmICh+MHgwRikgfCAweDAwOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwaW5iKQogICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaHJp
c2luZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgwMDIwOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDA0MDApIHwgMHgwNDAwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgw
eEZGRkY4MjgyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSAm
ICh+MHhGMCkgfCAweDgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGZhbGxpbmc6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkg
Jj0gfjB4MDAyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln
bmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop
KDB4RkZGRjgzQkEpKSAmICh+MHgwNDAwKSB8IDB4MDQwMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MikpID0gKCoodm9s
YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAofjB4RjApIHwgMHg5MDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIGlucHV0bWF0Y2hib3RoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpICY9IH4weDAwMjA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB
KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDQw
MCkgfCAweDA0MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyODIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko
MHhGRkZGODI4MikpICYgKH4weEYwKSB8IDB4QTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJldG9nZ2xl
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
KikoMHhGRkZGODNCNCkpIHw9IDB4MDAyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq
KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVu
c2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwNDAwKSB8IDB4MDQwMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODI4MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAofjB4
RjApIHwgMHgzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTA6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgfD0g
MHgwMDIwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg
c2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG
RkZGODNCQSkpICYgKH4weDA0MDApIHwgMHgwNDAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgPSAoKih2b2xhdGls
ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSAmICh+MHhGMCkgfCAweDUwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
b3V0cHV0Y29tcGFyZXB1bHNlMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0
aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwMjA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB
KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDQw
MCkgfCAweDA0MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyODIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko
MHhGRkZGODI4MikpICYgKH4weEYwKSB8IDB4MTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MikpID0g
KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAofjB4RjApIHwgMHgw
MDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGNsZWFyKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgZGlzYWJsZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg
KikoMHhGRkZGODI4MCkpICYgKH4weEUwKSB8IDB4MDA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjaGFuYToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4
MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgJiAofjB4RTAp
IHwgMHgyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIGNoYW5iOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s
YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25l
ZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+MHhFMCkgfCAweDQwOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc3luYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG
RkZGODI4MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgJiAo
fjB4RTApIHwgMHg2MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVkZ2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSByaXNpbmc6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICop
KDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MCkp
ICYgKH4weDE4KSB8IDB4MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBmYWxsaW5nOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgPSAoKih2b2xh
dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+MHgxOCkgfCAweDA4OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgYm90aDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk
IGNoYXIgKikoMHhGRkZGODI4MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4MjgwKSkgJiAofjB4MTgpIHwgMHgxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNo
KGNsaykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBj
aGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODI4MCkpICYgKH4weDA3KSB8IDB4MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgPSAoKih2b2xh
dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+MHgwNykgfCAweDAxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMTY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBj
aGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODI4MCkpICYgKH4weDA3KSB8IDB4MDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2NDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MCkpID0gKCoodm9s
YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgJiAofjB4MDcpIHwgMHgwMzsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIGNsa3NyY2V4dGE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg
KikoMHhGRkZGODI4MCkpICYgKH4weDA3KSB8IDB4MDQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjbGtzcmNleHRiOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4MjgwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+
MHgwNykgfCAweDA1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjU2OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoo
dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgPSAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+MHgwNykgfCAweDA2OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2xrc3Jj
dDJvdmY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBj
aGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODI4MCkpICYgKH4weDA3KSB8IDB4MDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MCkpID0gKCoodm9s
YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgJiAofjB4MDcpIHwgMHgwMDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBzZXRn
cmEodW5zaWduZWQgc2hvcnQgY29uc3QgeCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgKikoMHhGRkZGODI4OCkpKT14OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0Z3JhKCkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop
KDB4RkZGRjgyODgpKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3Rh
dGljIHZvaWQgc2V0Z3JiKHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2lnbmVkIHNob3J0ICopJigqKHZvbGF0aWxl
IHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgyOEEpKSk9eDsKICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldGdyYigpCiAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNp
Z25lZCBzaG9ydCAqKSgweEZGRkY4MjhBKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHN0YXRpYyB2b2lkIHNldGNvdW50KHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2lnbmVkIHNob3J0
ICopJigqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgyODYpKSk9eDsKICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdl
dGNvdW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgyODYpKTsKICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgZW5hYmxlaW50cyggYm9vbCBj
b25zdCBwaW5hLGJvb2wgY29uc3QgcGluYixib29sIGNvbnN0IG92ZXJmbG93ICkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2
b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODQpKSkgPSAocGluYT8weDAxOjB4MDAp
IHwgKHBpbmI/MHgwMjoweDAwKSB8IChvdmVyZmxvdz8weDEwOjB4MDApOwogICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBjbGVhcmludHNvdXJjZXMoIGJv
b2wgY29uc3QgcGluYSxib29sIGNvbnN0IHBpbmIsYm9vbCBjb25zdCBvdmVyZmxvdyApCiAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2lnbmVkIGNoYXIgKikm
KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4Mjg1KSkpID0gKCoodm9sYXRpbGUg
dW5zaWduZWQgY2hhciAqKSgweEZGRkY4Mjg1KSkgJiB+KChwaW5hPzB4MDE6MHgwMCkgfCAocGlu
Yj8weDAyOjB4MDApIHwgKG92ZXJmbG93PzB4MTA6MHgwMCkpOwogICAgICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBjaGFuYWludCgpCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBj
aGFyICopKDB4RkZGRjgyODUpKSAmIDB4MDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHN0YXRpYyBib29sIGNoYW5iaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG
RkZGODI4NSkpICYgMHgwMjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
c3RhdGljIGJvb2wgb3ZmaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4NSkpICYg
MHgxMDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQg
c2V0aW50ZXJydXB0dmVjdG9ycyggaW50ZnVuY3Rpb24gcGluYSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGZ1bmN0aW9uIHBpbmIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBj
b25zdCBwaW5wcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludGZ1bmN0aW9uIG92ZXJmbG93LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgY29uc3Qgb3ZlcmZsb3dwcmlv
cml0eSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM0RSkpPSgoKih2b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCAqKSgweEZGRkY4MzRFKSkgJiAofjB4MDBGRikpIHwgKHBpbnByaW9yaXR5PDw0KSB8IChv
dmVyZmxvd3ByaW9yaXR5KTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0
YWJsZVs5Nl09cGluYTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJs
ZVs5N109cGluYjsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJsZVsx
MDBdPW92ZXJmbG93OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAg
ICAgY2xhc3MgdHRpbWVyMgogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgICAgIHN0YXRpYyB2b2lkIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBj
aGFyICopKDB4RkZGRjgyNDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4
MjQwKSkgfCAweDA0OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0
aWMgdm9pZCBzdG9wKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
KCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy
NDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjQwKSkgJiB+MHgwNDsK
ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0dXAo
cGludHlwZSBjb25zdCBwaW5hLCBwaW50eXBlIGNvbnN0IHBpbmIsIGNsZWFyc291cmNlIGNvbnN0
IGNsZWFyLGVkZ2Vtb2RlIGNvbnN0IGVkZ2UsIGludCBjb25zdCBjbGspCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNDEpKSAmPSB+MHgwNDsKICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHBpbmEpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkp
ICY9IH4weDAwNDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp
Z25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq
KSgweEZGRkY4M0JBKSkgJiAofjB4MTAwMCkgfCAweDEwMDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSA9ICgqKHZv
bGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMikpICYgKH4weDBGKSB8IDB4MDg7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBpbnB1dG1hdGNoZmFsbGluZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZv
bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgwMDQwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG
ODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4w
eDEwMDApIHwgMHgxMDAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg
dW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy
ICopKDB4RkZGRjgyQTIpKSAmICh+MHgwRikgfCAweDA5OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGJvdGg6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq
KSgweEZGRkY4M0I0KSkgJj0gfjB4MDA0MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq
KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVu
c2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgxMDAwKSB8IDB4MTAwMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODJBMikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4
MEYpIHwgMHgwQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmV0b2dnbGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgfD0g
MHgwMDQwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg
c2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG
RkZGODNCQSkpICYgKH4weDEwMDApIHwgMHgxMDAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgPSAoKih2b2xhdGls
ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSAmICh+MHgwRikgfCAweDAzOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
b3V0cHV0Y29tcGFyZXB1bHNlMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0
aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwNDA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB
KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MTAw
MCkgfCAweDEwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko
MHhGRkZGODJBMikpICYgKH4weDBGKSB8IDB4MDU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2Ux
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
KikoMHhGRkZGODNCNCkpIHw9IDB4MDA0MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq
KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVu
c2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgxMDAwKSB8IDB4MTAwMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODJBMikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4
MEYpIHwgMHgwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s
YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25l
ZCBjaGFyICopKDB4RkZGRjgyQTIpKSAmICh+MHgwRikgfCAweDAwOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwaW5iKQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaHJpc2lu
ZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgwMDgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDQwMDApIHwgMHg0MDAwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4MkEyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSAmICh+
MHhGMCkgfCAweDgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGZhbGxpbmc6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgJj0g
fjB4MDA4MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4
RkZGRjgzQkEpKSAmICh+MHg0MDAwKSB8IDB4NDAwMDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMikpID0gKCoodm9sYXRp
bGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4RjApIHwgMHg5MDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IGlucHV0bWF0Y2hib3RoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpICY9IH4weDAwODA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkg
PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4NDAwMCkg
fCAweDQwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25l
ZCBjaGFyICopKDB4RkZGRjgyQTIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG
RkZGODJBMikpICYgKH4weEYwKSB8IDB4QTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJldG9nZ2xlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKiko
MHhGRkZGODNCNCkpIHw9IDB4MDA4MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZv
bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVuc2ln
bmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHg0MDAwKSB8IDB4NDAwMDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJB
MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4RjAp
IHwgMHgzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTA6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgfD0gMHgw
MDgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG
ODNCQSkpICYgKH4weDQwMDApIHwgMHg0MDAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgPSAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSAmICh+MHhGMCkgfCAweDUwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0
cHV0Y29tcGFyZXB1bHNlMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxl
IHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwODA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkg
PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4NDAwMCkg
fCAweDQwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25l
ZCBjaGFyICopKDB4RkZGRjgyQTIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG
RkZGODJBMikpICYgKH4weEYwKSB8IDB4MTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMikpID0gKCoo
dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4RjApIHwgMHgwMDsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2xl
YXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBkaXNhYmxlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln
bmVkIGNoYXIgKikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgw
eEZGRkY4MkEwKSkgJiAofjB4RTApIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNoYW5hOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkg
PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHhFMCkgfCAw
eDIwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgY2hhbmI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGls
ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo
YXIgKikoMHhGRkZGODJBMCkpICYgKH4weEUwKSB8IDB4NDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzeW5jOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4
MkEwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHhF
MCkgfCAweDYwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goZWRnZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHJpc2luZzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG
RkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkgJiAo
fjB4MTgpIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIGZhbGxpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSA9ICgqKHZvbGF0aWxl
IHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMCkpICYgKH4weDE4KSB8IDB4MDg7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBi
b3RoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hh
ciAqKSgweEZGRkY4MkEwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy
QTApKSAmICh+MHgxOCkgfCAweDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goY2xr
KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg
KikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEw
KSkgJiAofjB4MDcpIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSA9ICgqKHZvbGF0aWxl
IHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMCkpICYgKH4weDA3KSB8IDB4MDE7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAx
NjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg
KikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEw
KSkgJiAofjB4MDcpIHwgMHgwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY0OgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkgPSAoKih2b2xhdGls
ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHgwNykgfCAweDAzOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Y2xrc3JjZXh0YToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln
bmVkIGNoYXIgKikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgw
eEZGRkY4MkEwKSkgJiAofjB4MDcpIHwgMHgwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNsa3NyY2V4dGI6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy
QTApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMCkpICYgKH4weDA3
KSB8IDB4MDU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBjbGtzcmNleHRjOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkgPSAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHgwNykgfCAweDA2OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTAy
NDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg
KikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEw
KSkgJiAofjB4MDcpIHwgMHgwNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkgPSAoKih2b2xhdGls
ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHgwNykgfCAweDAwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHNldGdyYSh1
bnNpZ25lZCBzaG9ydCBjb25zdCB4KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq
KSgweEZGRkY4MkE4KSkpPXg7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRncmEoKQogICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG
RkZGODJBOCkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMg
dm9pZCBzZXRncmIodW5zaWduZWQgc2hvcnQgY29uc3QgeCkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgKikoMHhGRkZGODJBQSkpKT14OwogICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0Z3JiKCkKICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0ICopKDB4RkZGRjgyQUEpKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgc3RhdGljIHZvaWQgc2V0Y291bnQodW5zaWduZWQgc2hvcnQgY29uc3QgeCkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikm
KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODJBNikpKT14OwogICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0Y291
bnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoo
dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODJBNikpOwogICAgICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBlbmFibGVpbnRzKCBib29sIGNvbnN0
IHBpbmEsYm9vbCBjb25zdCBwaW5iLGJvb2wgY29uc3Qgb3ZlcmZsb3cgKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBjaGFyICopJigqKHZvbGF0
aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBNCkpKSA9IChwaW5hPzB4MDE6MHgwMCkgfCAo
cGluYj8weDAyOjB4MDApIHwgKG92ZXJmbG93PzB4MTA6MHgwMCk7CiAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyaW50c291cmNlcyggYm9vbCBj
b25zdCBwaW5hLGJvb2wgY29uc3QgcGluYixib29sIGNvbnN0IG92ZXJmbG93ICkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2
b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTUpKSkgPSAoKih2b2xhdGlsZSB1bnNp
Z25lZCBjaGFyICopKDB4RkZGRjgyQTUpKSAmIH4oIChwaW5hPzB4MDE6MHgwMCkgfCAocGluYj8w
eDAyOjB4MDApIHwgKG92ZXJmbG93PzB4MTA6MHgwMCkpOwogICAgICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBjaGFuYWludCgpCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy
ICopKDB4RkZGRjgyQTUpKSAmIDB4MDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHN0YXRpYyBib29sIGNoYW5iaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODJBNSkpICYgMHgwMjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3Rh
dGljIGJvb2wgb3ZmaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBNSkpICYgMHgx
MDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0
aW50ZXJydXB0dmVjdG9ycyggaW50ZnVuY3Rpb24gcGluYSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGZ1bmN0aW9uIHBpbmIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjb25z
dCBwaW5wcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludGZ1bmN0aW9uIG92ZXJmbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgY29uc3Qgb3ZlcmZsb3dwcmlvcml0
eSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM1MCkpPSgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCAqKSgweEZGRkY4MzUwKSkgJiAofjB4RkYwMCkpIHwgKHBpbnByaW9yaXR5PDwxMikgfCAob3Zl
cmZsb3dwcmlvcml0eTw8OCk7CiAgICAgICAgICAgICAgICAgICAgdHByb2Nlc3Nvcjo6dmVjdG9y
dGFibGVbMTA0XT1waW5hOwogICAgICAgICAgICAgICAgICAgIHRwcm9jZXNzb3I6OnZlY3RvcnRh
YmxlWzEwNV09cGluYjsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJs
ZVsxMDhdPW92ZXJmbG93OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCgoK
ICAgICAgICBjbGFzcyBjbXRpbWVyMAogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoK
ICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgKikoMHhGRkZGODNEMCkpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq
KSgweEZGRkY4M0QwKSkgfCAweDAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBzdGF0aWMgdm9pZCBzdG9wKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
KikoMHhGRkZGODNEMCkpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Qw
KSkgJiB+MHgwMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGlj
IHZvaWQgc2V0dXAocGludHlwZSBjb25zdCBwaW5hLCBwaW50eXBlIGNvbnN0IHBpbmIsIGNsZWFy
c291cmNlIGNvbnN0IGNsZWFyLGVkZ2Vtb2RlIGNvbnN0IGVkZ2UsIGludCBjb25zdCBjbGspCiAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHBpbmEpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgogICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIGlucHV0bWF0Y2hmYWxsaW5nOgogICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIGlucHV0bWF0Y2hib3RoOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNv
bXBhcmV0b2dnbGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXB1
bHNlMDoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2UxOgog
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHBpbmIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IGlucHV0bWF0Y2hmYWxsaW5nOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGlucHV0bWF0
Y2hib3RoOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmV0b2dnbGU6
CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXB1bHNlMDoKICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2UxOgogICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNsZWFy
KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
ZGlzYWJsZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2hhbmE6CiAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgY2hhbmI6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc3lu
YzoKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoKGVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBkaXNhYmxlZDoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjaGFu
YToKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjaGFuYjoKICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBzeW5jOgogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKGNsaykKICAgICAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgPSAoKih2b2xhdGls
ZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgJiAofjB4MDMpIHwgMHgwMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDMyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv
cnQgKikoMHhGRkZGODNEMikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG
ODNEMikpICYgKH4weDAzKSB8IDB4MDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjg6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgPSAoKih2
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgJiAofjB4MDMpIHwgMHgwMjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDUxMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln
bmVkIHNob3J0ICopKDB4RkZGRjgzRDIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop
KDB4RkZGRjgzRDIpKSAmICh+MHgwMykgfCAweDAzOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkg
PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgJiAofjB4MDMpIHwg
MHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBzdGF0aWMg
dm9pZCBzZXRncmEodW5zaWduZWQgc2hvcnQgY29uc3QgeCkKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgKikoMHhGRkZGODNENikpKT14OwogICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0Z3JhKCkKICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0ICopKDB4RkZGRjgzRDYpKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgc3RhdGljIHZvaWQgc2V0Z3JiKHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldGdyYigpCiAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBzZXRjb3VudCh1bnNpZ25lZCBz
aG9ydCBjb25zdCB4KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAo
Kih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4
M0Q0KSkpPXg7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBzaG9ydCBnZXRjb3VudCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Q0
KSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIGVu
YWJsZWludHMoIGJvb2wgY29uc3QgcGluYSxib29sIGNvbnN0IHBpbmIsYm9vbCBjb25zdCBvdmVy
ZmxvdyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2ln
bmVkIHNob3J0ICopJigqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRDIpKSkg
PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgJiAofjB4NDApIHwg
KHBpbmE/MHg0MDoweDAwKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
c3RhdGljIHZvaWQgY2xlYXJpbnRzb3VyY2VzKCBib29sIGNvbnN0IHBpbmEsYm9vbCBjb25zdCBw
aW5iLGJvb2wgY29uc3Qgb3ZlcmZsb3cgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCAqKSgweEZGRkY4M0QyKSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG
ODNEMikpICYgfihwaW5hPzB4ODA6MHgwMCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHN0YXRpYyBib29sIGNoYW5haW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4
RkZGRjgzRDIpKSAmIDB4ODA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHN0YXRpYyBib29sIGNoYW5iaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBzdGF0aWMgYm9vbCBvdmZpbnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHN0YXRpYyB2b2lkIHNldGludGVycnVwdHZlY3RvcnMoIGludGZ1bmN0aW9uIHBpbmEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRmdW5j
dGlvbiBwaW5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgY29uc3QgcGlucHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRmdW5jdGlvbiBvdmVyZmxvdywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IGNvbnN0IG92ZXJmbG93cHJpb3JpdHkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzNTQpKT0oKih2
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzU0KSkgJiAofjB4MDBGMCkgfCAocGlu
cHJpb3JpdHk8PDQpOwogICAgICAgICAgICAgICAgICAgIHRwcm9jZXNzb3I6OnZlY3RvcnRhYmxl
WzE0NF09cGluYTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CgogICAgICAg
IGNsYXNzIGNtdGltZXIxCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAg
ICAgICAgICAgc3RhdGljIHZvaWQgc3RhcnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCAqKSgweEZGRkY4M0QwKSkpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZG
RjgzRDApKSB8IDB4MDI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0
YXRpYyB2b2lkIHN0b3AoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZG
RkY4M0QwKSkpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRDApKSAmIH4w
eDAyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBz
ZXR1cChwaW50eXBlIGNvbnN0IHBpbmEsIHBpbnR5cGUgY29uc3QgcGluYiwgY2xlYXJzb3VyY2Ug
Y29uc3QgY2xlYXIsZWRnZW1vZGUgY29uc3QgZWRnZSwgaW50IGNvbnN0IGNsaykKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RvcCgpOwogICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAocGluYSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIGlucHV0bWF0Y2hyaXNpbmc6CiAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgaW5wdXRtYXRjaGZhbGxpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5w
dXRtYXRjaGJvdGg6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXRv
Z2dsZToKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2UwOgog
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTE6CiAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
cGluYikKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIGlucHV0bWF0Y2hyaXNpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRt
YXRjaGZhbGxpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGJvdGg6
CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXRvZ2dsZToKICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2UwOgogICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTE6CiAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2xlYXIpCiAgICAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBkaXNhYmxl
ZDoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjaGFuYToKICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBjaGFuYjoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzeW5jOgogICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0
Y2goZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIGRpc2FibGVkOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNoYW5hOgogICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIGNoYW5iOgogICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIHN5bmM6CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIHN3aXRjaChjbGspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpID0gKCoodm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpICYgKH4weDAzKSB8IDB4MDA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4
RkZGRjgzRDgpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRDgpKSAm
ICh+MHgwMykgfCAweDAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTI4OgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpID0gKCoodm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpICYgKH4weDAzKSB8IDB4MDI7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1
MTI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCAqKSgweEZGRkY4M0Q4KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4
M0Q4KSkgJiAofjB4MDMpIHwgMHgwMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpID0gKCoodm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpICYgKH4weDAzKSB8IDB4MDA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0
Z3JhKHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICgqKHVuc2lnbmVkIHNob3J0ICopJigqKHZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0ICopKDB4RkZGRjgzREMpKSk9eDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldGdyYSgpCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq
KSgweEZGRkY4M0RDKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0
YXRpYyB2b2lkIHNldGdyYih1bnNpZ25lZCBzaG9ydCBjb25zdCB4KQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRncmIoKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0Y291bnQodW5zaWduZWQgc2hvcnQgY29u
c3QgeCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWdu
ZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEQSkpKT14
OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQg
c2hvcnQgZ2V0Y291bnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEQSkpOwogICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBlbmFibGVpbnRz
KCBib29sIGNvbnN0IHBpbmEsYm9vbCBjb25zdCBwaW5iLGJvb2wgY29uc3Qgb3ZlcmZsb3cgKQog
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9y
dCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Q4KSkpID0gKCoodm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpICYgKH4weDQwKSB8IChwaW5hPzB4
NDA6MHgwMCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2
b2lkIGNsZWFyaW50c291cmNlcyggYm9vbCBjb25zdCBwaW5hLGJvb2wgY29uc3QgcGluYixib29s
IGNvbnN0IG92ZXJmbG93ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG
RkZGODNEOCkpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRDgpKSAm
IH4ocGluYT8weDgwOjB4MDApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBzdGF0aWMgYm9vbCBjaGFuYWludCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Q4
KSkgJiAweDgwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMg
Ym9vbCBjaGFuYmludCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3Rh
dGljIGJvb2wgb3ZmaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBz
dGF0aWMgdm9pZCBzZXRpbnRlcnJ1cHR2ZWN0b3JzKCBpbnRmdW5jdGlvbiBwaW5hLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZnVuY3Rpb24gcGlu
YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IGNvbnN0IHBpbnByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZnVuY3Rpb24gb3ZlcmZsb3csCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjb25zdCBv
dmVyZmxvd3ByaW9yaXR5KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzU0KSk9KCoodm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM1NCkpICYgKH4weDAwMEYpIHwgKHBpbnByaW9yaXR5
KTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJsZVsxNDhdPXBpbmE7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgICAgICBjbGFzcyBzZXJp
YWwwCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgc3Rh
dGljIHZvaWQgaW5pdHBvcnQoIGludGZ1bmN0aW9uIHJ4ZXJyaW50ZXJydXB0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGZ1bmN0aW9uIHJ4aW50ZXJydXB0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGZ1bmN0aW9uIHR4aW50ZXJydXB0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHBy
aW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IGJpdHJhdGUgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzhFKSk9KCoodm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgKikoMHhGRkZGODM4RSkpICYgMHhGRkYwIHwgMHgwMDA1OwogICAgICAgICAg
ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzODYpKT0oKih2
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4Mzg2KSkgJiAweEZGRkMgfCAweDAwMDI7
CgogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG
ODFBMCkpPTB4MDA7CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hh
ciAqKSgweEZGRkY4MUEyKSk9MHgzMDsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1
bnNpZ25lZCBjaGFyICopKDB4RkZGRjgxQTQpKT0weDg0OwogICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoYml0cmF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDM4NDAwOgogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZG
RjgxQTEpKT0yMzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJsZVsxMjhdPXJ4ZXJyaW50ZXJydXB0OwogICAgICAgICAg
ICAgICAgICAgIHRwcm9jZXNzb3I6OnZlY3RvcnRhYmxlWzEyOV09cnhpbnRlcnJ1cHQ7CiAgICAg
ICAgICAgICAgICAgICAgdHByb2Nlc3Nvcjo6dmVjdG9ydGFibGVbMTMwXT10eGludGVycnVwdDsK
CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG
ODM1MikpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzNTIpKSAmIDB4RkYw
RiB8IChwcmlvcml0eTw8NCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHN0YXRpYyB2b2lkIHB1dGNoYXIoY2hhciBjKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAoKih2b2xhdGlsZSBjaGFyICopKDB4RkZGRjgxQTMpKT1jOwogICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBnZXRjaGFyKCkKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxl
IGNoYXIgKikoMHhGRkZGODFBNSkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICBzdGF0aWMgdm9pZCBjbGVhcmludHNvdXJjZXMoYm9vbCB0eCxib29sIHJ4LGJvb2wgcnhl
cnIpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxl
IHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODFBNCkpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg
KikoMHhGRkZGODFBNCkpICYgfiggKHR4PzB4ODA6MHgwMCkgfCAocng/MHg0MDoweDAwKSB8IChy
eGVycj8weDM4OjB4MDApKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
c3RhdGljIHZvaWQgZW5hYmxlaW50KGJvb2wgdHgsYm9vbCByeCApCiAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG
RkZGODFBMikpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODFBMikpICYgKH4w
eEMwKSB8ICh0eD8weDgwOjB4MDApIHwgKHJ4PzB4NDA6MHgwMCk7CiAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyBib29sIHJ4Y2hhcmF2YWlsKCkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2ln
bmVkIGNoYXIgKikoMHhGRkZGODFBNCkpICYgMHg0MDsKICAgICAgICAgICAgICAgICAgICB9Cgog
ICAgICAgICAgICAgICAgc3RhdGljIGJvb2wgdHhzbG90YXZhaWwoKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hh
ciAqKSgweEZGRkY4MUE0KSkgJiAweDgwOwogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAg
ICAgICB9OwoKICAgICAgICBjbGFzcyBzZXJpYWwxCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
cHVibGljOgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgaW5pdHBvcnQoIGludGZ1bmN0aW9u
IHJ4ZXJyaW50ZXJydXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGZ1bmN0aW9uIHJ4aW50ZXJydXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludGZ1bmN0aW9uIHR4aW50ZXJydXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJpdHJhdGUgKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgw
eEZGRkY4MzhFKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM4RSkpICYg
MHhGQzNGIHwgMHgwMTQwOwogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0ICopKDB4RkZGRjgzODYpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZG
RkY4Mzg2KSkgJiAweEZGRTcgfCAweDAwMTA7CgogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0
aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODFCMCkpPTB4MDA7CiAgICAgICAgICAgICAgICAg
ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUIyKSk9MHgzMDsKICAgICAg
ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgxQjQpKT0w
eDg0OwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYml0cmF0ZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM4NDAwOgogICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2
b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgxQjEpKT0yMzsKICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKCgogICAgICAgICAgICAgICAgICAgIHRwcm9jZXNzb3I6OnZlY3RvcnRhYmxl
WzEzMl09cnhlcnJpbnRlcnJ1cHQ7CiAgICAgICAgICAgICAgICAgICAgdHByb2Nlc3Nvcjo6dmVj
dG9ydGFibGVbMTMzXT1yeGludGVycnVwdDsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29y
Ojp2ZWN0b3J0YWJsZVsxMzRdPXR4aW50ZXJydXB0OwoKICAgICAgICAgICAgICAgICAgICAoKih2
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzUyKSk9KCoodm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgKikoMHhGRkZGODM1MikpICYgMHhGRkYwIHwgKHByaW9yaXR5KTsKICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHV0Y2hhcihjaGFyIGMp
CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIGNo
YXIgKikoMHhGRkZGODFCMykpPWM7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHN0YXRpYyBjaGFyIGdldGNoYXIoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgY2hhciAqKSgweEZGRkY4MUI1KSk7CiAgICAg
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyaW50c291
cmNlcyhib29sIHR4LGJvb2wgcngsYm9vbCByeGVycikKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUI0
KSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUI0KSkgJiB+KCAodHg/MHg4
MDoweDAwKSB8IChyeD8weDQwOjB4MDApIHwgKHJ4ZXJyPzB4Mzg6MHgwMCkpOwogICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBlbmFibGVpbnQoYm9vbCB0
eCxib29sIHJ4ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoo
dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUIyKSk9KCoodm9sYXRpbGUgdW5zaWdu
ZWQgY2hhciAqKSgweEZGRkY4MUIyKSkgJiAofjB4QzApIHwgKHR4PzB4ODA6MHgwMCkgfCAocng/
MHg0MDoweDAwKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGlj
IGJvb2wgcnhjaGFyYXZhaWwoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUI0KSkgJiAw
eDQwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCB0
eHNsb3RhdmFpbCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJl
dHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgxQjQpKSAmIDB4ODA7CiAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfTsKCgoKICAgICAgICBjbGFzcyBod2Fk
YwogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHN0YXRp
YyB2b2lkIHNldHVwKCBpbnRmdW5jdGlvbiBpbnRmbixpbnQgaW50cHJpb3JpdHksIGJvb2wgc2Nh
bm1vZGUgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih2b2xh
dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgzRTApKT0weDFGOwogICAgICAgICAgICAgICAg
ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODNFMSkpPTB4NDAgfCAoc2Nh
bm1vZGU/MHg4OjB4MCk7CiAgICAgICAgICAgICAgICAgICAgdHByb2Nlc3Nvcjo6dmVjdG9ydGFi
bGVbMTM2XT1pbnRmbjsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJs
ZVsxMzhdPWludGZuOwogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0ICopKDB4RkZGRjgzNTQpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4
MzU0KSkgJiAweDBGRkYgfCAoaW50cHJpb3JpdHk8PDEyKTsKICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJlYWRjaGFubmVsKGludCBj
aGFubmVsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGNoYW5uZWwpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xh
dGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0YwKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNGMikpOwogICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZv
bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRjQpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Y2KSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoo
dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNGOCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgq
KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRkEpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
Kih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0ZDKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNGRSkpOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0
aWMgdW5zaWduZWQgc2hvcnQgcGVyaW9kKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5uZWxzcmVhZHkoKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHhGRjsKICAgICAgICAgICAgICAgICAg
ICB9CgoKCiAgICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzZWxlY3RuZXh0Y2hh
bm5lbHNldCgpCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICB9CgoK
CiAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBpbnRwZW5kaW5nKCkKICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo
YXIgKikoMHhGRkZGODNFMCkpICYgMHg4MDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJpbnRzb3VyY2VzKCkKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG
RkY4M0UwKSkgJj0gfjB4ODA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHN0YXRpYyBib29sIGVuYWJsZWludChib29sIGVuYSkKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4M0Uw
KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgzRTApKSAmICh+MHg0MCkg
fCAoZW5hPzB4NDA6MHgwMCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg
IHN0YXRpYyBib29sIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4M0UwKSkgPSAoKih2b2xh
dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgzRTApKSB8IDB4MjA7CiAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyBib29sIHN0b3AoKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICop
KDB4RkZGRjgzRTApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODNFMCkp
ICYgKH4weDIwKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiMgMTUwMiAi
Y3B1L3NoMi5oIgogICAgICAgIGNsYXNzIGRyYW0KICAgICAgICAgICAgewogICAgICAgICAgICBw
dWJsaWM6CiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBpbml0KGludCAmZHJhbXNpemUsYm9v
bCAmZHJhbWJ1cnN0KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBl
eHRlcm4gdW5zaWduZWQgY2hhciBfZHJhbWZyZWVbXTsKCiAgICAgICAgICAgICAgICAgICAgKCoo
dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM5QSkpIHw9IDB4MEZGMDsKICAgICAg
ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4Mzk0KSkg
fD0gMHgzQzsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq
KSgweEZGRkY4NjJDKSkgPSAweDBBOwogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVu
c2lnbmVkIHNob3J0ICopKDB4RkZGRjg2MzApKSA9IDB4ODA7CgogICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgdm9sYXRpbGUgKmQ9X2RyYW1mcmVlOwogICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IFdhaXRTdGF0ZXM9MDsKCgogICAgICAgICAgICAgICAgICAgICgqKHZv
bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjg2MkEpKT1XYWl0U3RhdGVzIHwgMHg2Owog
ICAgICAgICAgICAgICAgICAgIGRbMF09MHhBQTsKICAgICAgICAgICAgICAgICAgICBkWzQqMTAy
NCoxMDI0XT0weDU1OwoKICAgICAgICAgICAgICAgICAgICBpZiAoZFswXT09MHhBQSAmJiBkWzQq
MTAyNCoxMDI0XT09MHg1NSkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhbXNpemU9OCoxMDI0KjEwMjQ7CiAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gY2hlY2tidXJzdDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKCgogICAgICAgICAg
ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjg2MkEpKT1XYWl0
U3RhdGVzIHwgMHg1OwogICAgICAgICAgICAgICAgICAgIGRbMF09MHgzMzsKICAgICAgICAgICAg
ICAgICAgICBkWzEqMTAyNCoxMDI0XT0weENDOwoKICAgICAgICAgICAgICAgICAgICBpZiAoZFsw
XT09MHgzMyAmJiBkWzEqMTAyNCoxMDI0XT09MHhDQykKICAgICAgICAgICAgICAgICAgICAgICAg
ewoKICAgICAgICAgICAgICAgICAgICAgICAgZHJhbXNpemU9MioxMDI0KjEwMjQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gY2hlY2tidXJzdDsKICAgICAgICAgICAgICAgICAgICAgICAg
fQoKCiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG
RkZGODYyQSkpPVdhaXRTdGF0ZXMgfCAweDQ7CiAgICAgICAgICAgICAgICAgICAgZFswXT0weDIy
OwogICAgICAgICAgICAgICAgICAgIGRbMjU2KjEwMjRdPTB4RUU7CgogICAgICAgICAgICAgICAg
ICAgIGlmIChkWzBdPT0weDIyICYmIGRbMjU2KjEwMjRdPT0weEVFKQogICAgICAgICAgICAgICAg
ICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBkcmFtc2l6ZT0yKjEwMjQqMTAyNDsK
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjaGVja2J1cnN0OwogICAgICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGRyYW1zaXplPTA7CiAgICAgICAgICAgICAg
ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODYyQSkpPTA7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgICAgICAgICBjaGVja2J1cnN0Ogoj
IDE1ODQgImNwdS9zaDIuaCIKICAgICAgICAgICAgICAgICAgICBkcmFtYnVyc3Q9ZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgfTsKIyA1ICJtazZib2FyZC9o
d2FsbG9jLmgiIDIKIyA2ICJldmVudGV4ZS5oIiAyCgojIDEgImNvbmZpZy5oIiAxCiMgMSAiZGF0
c3VuY29uZmlnLmgiIDEKIyAyICJjb25maWcuaCIgMgojIDggImV2ZW50ZXhlLmgiIDIKIyAyNyAi
ZXZlbnRleGUuaCIKdHlwZWRlZiB0dG9vdGh3aGVlbDwKICAgICAgICAgICAgICAgICAgICAgICAg
dHByb2Nlc3Nvcjo6dHRpbWVyMCwxNiwKICAgICAgICAgICAgICAgICAgICAgICAgdHByb2Nlc3Nv
cjo6dHRpbWVyMSwxNiwKICAgICAgICAgICAgICAgICAgICAgICAgNjAsCiAgICAgICAgICAgICAg
ICAgICAgICAgIDY0LAogICAgICAgICAgICAgICAgICAgICAgICAoKHRhbmdsZSkoKChpbnQpMzYw
KTw8MTYpKSoxLAogICAgICAgICAgICAyOTUwMDAwMAogICAgICAgICAgICAgICAgPiB0ZXZlbnRl
eGVjdXRvcjsKCmV4dGVybiB0ZXZlbnRleGVjdXRvciBldmVudGV4ZWN1dG9yOwojIDMgImNvbmZp
Zy5jYyIgMgoKCnZvaWQgeCgpCiAgICB7CiAgICB0aTRlbmdpbmUgZW5naW5lKGV2ZW50ZXhlY3V0
b3IpOwogICAgfQo=


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

* Re: c++/7086: g++ -O2 locks up
@ 2002-09-14 14:36 nathan
  0 siblings, 0 replies; 3+ messages in thread
From: nathan @ 2002-09-14 14:36 UTC (permalink / raw)
  To: brd, gcc-bugs, gcc-prs, nobody

Synopsis: g++ -O2 locks up

State-Changed-From-To: open->analyzed
State-Changed-By: nathan
State-Changed-When: Sat Sep 14 14:36:48 2002
State-Changed-Why:
    yes, this is a pretty severe time regression

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7086


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

* Re: c++/7086: g++ -O2 locks up
@ 2002-06-26  8:16 Reichelt
  0 siblings, 0 replies; 3+ messages in thread
From: Reichelt @ 2002-06-26  8:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/7086; it has been noted by GNATS.

From: Reichelt <reichelt@igpm.rwth-aachen.de>
To: gcc-gnats@gcc.gnu.org, brd@paradise.net.nz, gcc-bugs@gcc.gnu.org,
        nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/7086: g++ -O2 locks up
Date: Wed, 26 Jun 2002 16:23:26 +0200

 Hi,
 
 the compiler does not actually hang up, it just takes *much* longer
 (almost 50 times):
 
   compile time with 3.1: 3.6s
   compile time with trunk: 169s
 
 using a 600 MHz Pentium III (i686-pc-linux-gnu).
 
 Greetings,
 Volker Reichelt
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7086
 
 


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

end of thread, other threads:[~2002-09-14 21:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-06-20  7:26 c++/7086: g++ -O2 locks up brd
2002-06-26  8:16 Reichelt
2002-09-14 14:36 nathan

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