public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* target/10592: apcs frame causing register mishandling
@ 2003-05-01 23:56 ryan.pipkin
  0 siblings, 0 replies; only message in thread
From: ryan.pipkin @ 2003-05-01 23:56 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10592
>Category:       target
>Synopsis:       apcs frame causing register mishandling
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Thu May 01 23:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Ryan Pipkin
>Release:        gcc version 3.2.1
>Organization:
>Environment:
Compiler environment - 
Mandrake 8.2
Solaris 2.8
same results on both.
target environment
arm-xinu-elf
>Description:
apcs32 defined scratch register and/or argument registers are being used after a function call without restoring from stack.

str ip, [fp, #-44]
bl  strncpy
add r7, r9, #156
str r7, [ip, #540]
>How-To-Repeat:
Configured with: ../gcc-3.2.1/configure --target=arm-xinu-elf --prefix=/opt/INETagnu/arm-3.2.1-xinu --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-gxx-include-dir=/opt/INETagnu/arm-3.2.1-xinu/arm-xinu-elf/include --without-fp -v


Command Line:
/opt/INETagnu/arm-3.2.1-xinu/bin/arm-xinu-elf-gcc -c -S -nostdinc -O3 -D__LIB_KAL_LEGACY__ -D__LITTLE_ENDIAN__ -D__XINU -mcpu=xscale -msoft-float -mapcs-32 -D__APIFIX -D__APPS3 -fno-rtti -fno-exceptions -fsigned-char -fno-builtin -DNEW_MANGLE -mno-thumb-interwork -b arm-xinu-elf -V 3.2.1 -I . -I /home/rlp/xscale/probe/v5/os/src/geoXinu/src/drivers/dev/pci/xscale -I /home/rlp/xscale/probe/v5/os/src/geoXinu/src/drivers/dev/pci/xscale/../i -I /home/rlp/xscale/probe/v5/os/src/geoXinu/src/drivers/dev/pci/xscale/../common   -I /home/rlp/xscale/probe/v5/os/xscale-xinu/include -I /home/rlp/xscale/probe/v5/os/xscale-xinu/include/sys -I /home/rlp/xscale/probe/v5/os/xscale-xinu/include/apps3 -I /home/rlp/xscale/probe/v5/os/src/geoXinu/apps3-xscale/os -I /opt/INETagnu/arm-3.2.1-xinu/arm-xinu-elf/include -I /opt/INETagnu/arm-3.2.1-xinu/lib/gcc-lib/arm-xinu-elf/3.2.1/include -save-temps a.cc -o a.lst

>Fix:
use -mno-apcs-fram compiler option.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="a.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="a.ii"

IyAxICJhLmNjIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAiYS5j
YyIKIyAxOCAiYS5jYyIKI3ByYWdtYSBpbXBsZW1lbnRhdGlvbgoKCiMgMSAiYS5oIiAxCgoKCiMg
MSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9k
ZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIgMQojIDIzICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1
L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaURldi5oIgojcHJh
Z21hIGludGVyZmFjZQoKIyAxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14
aW51L2luY2x1ZGUvTXV0ZXguaCIgMQojIDM1ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29z
L3hzY2FsZS14aW51L2luY2x1ZGUvTXV0ZXguaCIKIyAxICIvaG9tZS9ybHAveHNjYWxlL3Byb2Jl
L3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL2RlZnMuaCIgMQojIDMwICIvaG9tZS9ybHAv
eHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL2RlZnMuaCIKI3ByYWdt
YSBpbnRlcmZhY2UKIyA0MCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGlu
dS9pbmNsdWRlL3N5cy9kZWZzLmgiCnR5cGVkZWYgaW50IEludDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgVUludDsKCnR5cGVkZWYgY2hhciBJbnQ4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7
Cgp0eXBlZGVmIHNob3J0IEludDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJbnQxNjsKCnR5
cGVkZWYgaW50IEludDMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBVSW50MzI7Cgp0eXBlZGVmIHVu
c2lnbmVkIGludCBCaXRGaWVsZDMyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEJpdEZpZWxkMTY7
CnR5cGVkZWYgdW5zaWduZWQgY2hhciBCaXRGaWVsZDg7CgoKCgoKCnR5cGVkZWYgc2hvcnQgSUJv
b2w7CiMgOTMgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVk
ZS9zeXMvZGVmcy5oIgplbnVtIElTdGF0dXMKICAgICAgICB7CiAgICAgICAgRXJyb3IgPSAtMSwK
ICAgICAgICBBb2sgPSAwCiAgICAgICAgfTsKIyAxMTggIi9ob21lL3JscC94c2NhbGUvcHJvYmUv
djUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvZGVmcy5oIgogICAgICAgIHRlbXBsYXRlIDxj
bGFzcyBUMSwgY2xhc3MgVDI+CiAgICAgICAgICAgIFQxIG1heCAoVDEgYSwgVDIgYikgeyByZXR1
cm4gYSA+IGIgPyBhIDogYjsgfTsKCiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBU
Mj4KICAgICAgICAgICAgVDEgbWluIChUMSBhLCBUMiBiKSB7IHJldHVybiBhIDwgYiA/IGEgOiBi
OyB9OwojIDE0MCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNs
dWRlL3N5cy9kZWZzLmgiCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUt
eGludS9pbmNsdWRlL3N5cy9LZGVmcy5oIiAxCiMgMzYgIi9ob21lL3JscC94c2NhbGUvcHJvYmUv
djUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvS2RlZnMuaCIKIyAxICIvaG9tZS9ybHAveHNj
YWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvYXBwczMvY3B1LmgiIDEKIyA0MiAi
L2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2FwcHMzL2Nw
dS5oIgojIDEgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVk
ZS9hcHBzMy9BUk0uaCIgMQojIDE1ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2Fs
ZS14aW51L2luY2x1ZGUvYXBwczMvQVJNLmgiCnR5cGVkZWYgaW50IFdPUkQ7CnR5cGVkZWYgdW5z
aWduZWQgaW50IFVXT1JEOwp0eXBlZGVmIHVuc2lnbmVkIGludCBEV09SRDsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgUkVHOwoKCgp1bmlvbiBBUk1Qcm9ncmFtU3RhdHVzUmVnaXN0ZXIKICAgICAgICB7
CiAgICAgICAgc3RydWN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbW9kZSA6NTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aHVtYiA6MTsKICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXFEaXNhYmxlIDoxOwogICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGlycURpc2FibGUgOjE7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
OjIwOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG92ZXJmbG93IDoxOwogICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGNhcnJ5IDoxOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHplcm8gOjE7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmVnYXRpdmUgOjE7CiAgICAg
ICAgICAgICAgICB9IGJpdFZhbDsKICAgICAgICBEV09SRCBpbnRWYWw7CiAgICAgICAgfTsKCgpp
bmxpbmUgaW50IHZhbGlkUG9pbnRlciAoIHZvaWQqIHB0ciApCiAgICB7CiAgICBpZiAoICggKCAo
IHVuc2lnbmVkIGludCApIHB0ciApICYgMHgzICkgKQogICAgICAgIHsKICAgICAgICByZXR1cm4g
MDsKICAgICAgICB9CiAgICBlbHNlCiAgICAgICAgewogICAgICAgIHJldHVybiAxOwogICAgICAg
IH0KICAgIH0KIyA0MyAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9p
bmNsdWRlL2FwcHMzL2NwdS5oIiAyCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94
c2NhbGUteGludS9pbmNsdWRlL2FwcHMzL2lvcDgwMzIxLmgiIDEKIyA0NyAiL2hvbWUvcmxwL3hz
Y2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2FwcHMzL2lvcDgwMzIxLmgiCiMg
MSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9k
ZWZzLmgiIDEKIyA0OCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9p
bmNsdWRlL2FwcHMzL2lvcDgwMzIxLmgiIDIKIyAxMDUgIi9ob21lL3JscC94c2NhbGUvcHJvYmUv
djUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9hcHBzMy9pb3A4MDMyMS5oIgpzdGF0aWMgaW5saW5l
IHZvaWQgQ1BXQUlUKHZvaWQpIHsKICAgIFVJbnQzMiB0bXA7CiAgICBhc20gdm9sYXRpbGUgKCJt
cmMgIHAxNSwwLCUwLGMyLGMwLDBcbiIKICAgICAgICAgICAgICAgICAgIm1vdiAgJTAsJTBcbiIK
ICAgICAgICAgICAgICAgICAgInN1YiAgcGMscGMsIzQiIDogIj1yIiAodG1wKSk7Cn0KIyA3ODAg
Ii9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9hcHBzMy9p
b3A4MDMyMS5oIgpzdGF0aWMgaW5saW5lIHZvaWQgVE1SMF9XUklURShVSW50MzIgdmFsKSB7IGFz
bSB2b2xhdGlsZSAoIm1jciBwNiwgMCwgJTAsIGMwLCBjMSwgMCIgOiA6ICJyIiAodmFsKSk7IH0K
c3RhdGljIGlubGluZSB2b2lkIFRNUjFfV1JJVEUoVUludDMyIHZhbCkgeyBhc20gdm9sYXRpbGUg
KCJtY3IgcDYsIDAsICUwLCBjMSwgYzEsIDAiIDogOiAiciIgKHZhbCkpOyB9CnN0YXRpYyBpbmxp
bmUgdm9pZCBUQ1IwX1dSSVRFKFVJbnQzMiB2YWwpIHsgYXNtIHZvbGF0aWxlICgibWNyIHA2LCAw
LCAlMCwgYzIsIGMxLCAwIiA6IDogInIiICh2YWwpKTsgfQpzdGF0aWMgaW5saW5lIHZvaWQgVENS
MV9XUklURShVSW50MzIgdmFsKSB7IGFzbSB2b2xhdGlsZSAoIm1jciBwNiwgMCwgJTAsIGMzLCBj
MSwgMCIgOiA6ICJyIiAodmFsKSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIFRSUjBfV1JJVEUoVUlu
dDMyIHZhbCkgeyBhc20gdm9sYXRpbGUgKCJtY3IgcDYsIDAsICUwLCBjNCwgYzEsIDAiIDogOiAi
ciIgKHZhbCkpOyB9CnN0YXRpYyBpbmxpbmUgdm9pZCBUUlIxX1dSSVRFKFVJbnQzMiB2YWwpIHsg
YXNtIHZvbGF0aWxlICgibWNyIHA2LCAwLCAlMCwgYzUsIGMxLCAwIiA6IDogInIiICh2YWwpKTsg
fQpzdGF0aWMgaW5saW5lIHZvaWQgVElTUl9XUklURShVSW50MzIgdmFsKSB7IGFzbSB2b2xhdGls
ZSAoIm1jciBwNiwgMCwgJTAsIGM2LCBjMSwgMCIgOiA6ICJyIiAodmFsKSk7IH0Kc3RhdGljIGlu
bGluZSB2b2lkIENDTlRfV1JJVEUoVUludDMyIHZhbCkgeyBhc20gdm9sYXRpbGUgKCJtY3IgcDE0
LCAwLCAlMCwgYzEsIGMwLCAwIiA6IDogInIiICh2YWwpKTsgfQpzdGF0aWMgaW5saW5lIHZvaWQg
UE1OQ19XUklURShVSW50MzIgdmFsKSB7IGFzbSB2b2xhdGlsZSAoIm1jciBwMTQsIDAsICUwLCBj
MCwgYzAsIDAiIDogOiAiciIgKHZhbCkpOyB9CiMgODA3ICIvaG9tZS9ybHAveHNjYWxlL3Byb2Jl
L3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvYXBwczMvaW9wODAzMjEuaCIKc3RhdGljIGlubGlu
ZSB2b2lkIElOVENUTF9XUklURShVSW50MzIgdmFsKSB7IGFzbSB2b2xhdGlsZSAoIm1jciBwNiwg
MCwgJTAsIGMwLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIElO
VFNUUl9XUklURShVSW50MzIgdmFsKSB7IGFzbSB2b2xhdGlsZSAoIm1jciBwNiwgMCwgJTAsIGM0
LCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7IH0KIyA5OTQgIi9ob21lL3JscC94c2NhbGUvcHJvYmUv
djUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9hcHBzMy9pb3A4MDMyMS5oIgpzdGF0aWMgaW5saW5l
IHZvaWQgRENBQ0hFX0xPQ0tfV1JJVEUoVUludDMyIHZhbCkgeyBhc20gdm9sYXRpbGUgKCJtY3Ig
cDE1LCAwLCAlMCwgYzksIGMyLCAwIiA6IDogInIiICh2YWwpKTsgfQojIDEwMDUgIi9ob21lL3Js
cC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9hcHBzMy9pb3A4MDMyMS5o
IgpzdGF0aWMgaW5saW5lIHZvaWQgQ1AxNV9DNV9XUklURShVSW50MzIgdmFsKSB7IGFzbSB2b2xh
dGlsZSAoIm1jciBwMTUsIDAsICUwLCBjNSwgYzAsIDAiIDogOiAiciIgKHZhbCkpOyB9CnN0YXRp
YyBpbmxpbmUgdm9pZCBDUDE1X0M2X1dSSVRFKFVJbnQzMiB2YWwpIHsgYXNtIHZvbGF0aWxlICgi
bWNyIHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7IH0KIyA0NCAiL2hvbWUv
cmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2FwcHMzL2NwdS5oIiAy
CiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2Fw
cHMzL0tjcHUuaCIgMQojIDU0ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14
aW51L2luY2x1ZGUvYXBwczMvS2NwdS5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCBTVEFUV09SRFsx
XTsKCgp0eXBlZGVmIFVXT1JEICogSU5TVFJVQ1RJT05fUFRSOwp0eXBlZGVmIFVXT1JEIElOU1RS
VUNUSU9OOwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgVFJJR0dFUk1BU0s7CiMgODEgIi9ob21lL3Js
cC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9hcHBzMy9LY3B1LmgiCiMg
MSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9i
eXRlb3JkZXIuaCIgMQojIDYzICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14
aW51L2luY2x1ZGUvc3lzL2J5dGVvcmRlci5oIgogICAgICAgIGlubGluZSBVSW50MzIgbnRvaGwg
KCBVSW50MzIgdmFsdWUgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIFVJbnQz
MiB0ZW1wID0gKCgodmFsdWUpPj4oMTYpKXwoKHZhbHVlKTw8KDMyLSgxNikpKSkgXiB2YWx1ZTsK
ICAgICAgICAgICAgICAgIHRlbXAgJj0gfjB4RkYwMDAwOwogICAgICAgICAgICAgICAgdmFsdWUg
PSAoKCh2YWx1ZSk+Pig4KSl8KCh2YWx1ZSk8PCgzMi0oOCkpKSk7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgXiAoIHRlbXAgPj4gOCApOwoKCgoKCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgaW5saW5lIEludDMyIG50b2hsICggSW50MzIgdmFsdWUgKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgcmV0dXJuICggKEludDMyKSBudG9obCAoICggVUludDMyKSB2YWx1ZSAp
ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgaW5saW5lIFVJbnQxNiBudG9ocyAoIFVJbnQx
NiB2YWx1ZSApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgcmV0dXJuIChVSW50
MTYpICggKCB2YWx1ZSA+PiA4ICkgfCAoIHZhbHVlIDw8IDggKSApOwogICAgICAgICAgICAgICAg
fQogICAgICAgIGlubGluZSBJbnQxNiBudG9ocyAoIEludDE2IHZhbHVlICkKICAgICAgICAgICAg
ICAgIHsKCiAgICAgICAgICAgICAgICByZXR1cm4gKCAoSW50MTYpIG50b2hzICggKCBVSW50MTYp
IHZhbHVlICkgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBpbmxpbmUgVUludDMyIGh0b25s
ICggVUludDMyIHZhbHVlICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBVSW50
MzIgdGVtcCA9ICgoKHZhbHVlKT4+KDE2KSl8KCh2YWx1ZSk8PCgzMi0oMTYpKSkpIF4gdmFsdWU7
CiAgICAgICAgICAgICAgICB0ZW1wICY9IH4weEZGMDAwMDsKICAgICAgICAgICAgICAgIHZhbHVl
ID0gKCgodmFsdWUpPj4oOCkpfCgodmFsdWUpPDwoMzItKDgpKSkpOwogICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlIF4gKCB0ZW1wID4+IDggKTsKCgoKCgogICAgICAgICAgICAgICAgfQogICAg
ICAgIGlubGluZSBJbnQzMiBodG9ubCAoIEludDMyIHZhbHVlICkKICAgICAgICB7CiAgICAgICAg
cmV0dXJuICggKEludDMyKSBodG9ubCAoICggVUludDMyKSB2YWx1ZSApICk7CiAgICAgICAgfQoK
ICAgICAgICBpbmxpbmUgVUludDE2IGh0b25zICggVUludDE2IHZhbHVlICkKICAgICAgICAgICAg
ICAgIHsKCiAgICAgICAgICAgICAgICByZXR1cm4gKFVJbnQxNikgKCAoIHZhbHVlID4+IDggKSB8
ICggdmFsdWUgPDwgOCApICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgaW5saW5lIEludDE2
IGh0b25zICggSW50MTYgdmFsdWUgKQogICAgICAgICAgICAgICAgewoKICAgICAgICByZXR1cm4g
KCAoSW50MTYpIGh0b25zICggKCBVSW50MTYpIHZhbHVlICkgKTsKICAgICAgICAgICAgICAgIH0K
IyA4MiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2Fw
cHMzL0tjcHUuaCIgMgoKaW5saW5lIHVuc2lnbmVkIHNob3J0IGhzMm5ldCAoIHVuc2lnbmVkIHNo
b3J0IHggKSB7IHJldHVybiBodG9ucyAoeCk7IH07CmlubGluZSB1bnNpZ25lZCBzaG9ydCBuZXQy
aHMgKCB1bnNpZ25lZCBzaG9ydCB4ICkgeyByZXR1cm4gbnRvaHMgKHgpOyB9OwoKaW5saW5lIHVu
c2lnbmVkIGxvbmcgaGwybmV0ICggdW5zaWduZWQgbG9uZyB4ICkgeyByZXR1cm4gaHRvbmwgKChV
SW50MzIpIHgpOyB9OwppbmxpbmUgdW5zaWduZWQgbG9uZyBuZXQyaGwgKCB1bnNpZ25lZCBsb25n
IHggKSB7IHJldHVybiBudG9obCAoKFVJbnQzMikgeCk7IH07Cgp0eXBlZGVmIHZvaWQgKCpEb29y
QmVsbEhhbmRsZXIpICggdm9pZCAqIHBhcm0sIFVJbnQzMiBkb29yYmVsbCApOwoKZXh0ZXJuIHZv
aWQgZGlzYWJsZUlycVZlY3RvciAoIFVJbnQzMiApOwpleHRlcm4gdm9pZCBlbmFibGVJcnFWZWN0
b3IgKCBVSW50MzIgKTsKCmV4dGVybiB2b2lkIGRpc2FibGVGaXFWZWN0b3IgKCBVSW50MzIgKTsK
ZXh0ZXJuIHZvaWQgZW5hYmxlRmlxVmVjdG9yICggVUludDMyICk7CgpleHRlcm4gSVN0YXR1cyBp
bnN0YWxsRG9vcmJlbGwKICAgICAgICAoCiAgICAgICAgVUludDMyIGRvb3JiZWxsLAogICAgICAg
IERvb3JCZWxsSGFuZGxlciBpc3IsCiAgICAgICAgdm9pZCAqIHBhcm0KICAgICAgICApOwoKZXh0
ZXJuIElTdGF0dXMgcmVtb3ZlRG9vcmJlbGwKICAgICAgICAoCiAgICAgICAgVUludDMyIGRvb3Ji
ZWxsCiAgICAgICAgKTsKCmV4dGVybiBJQm9vbCBkb29yYmVsbEluc3RhbGxlZAogICAgICAgICgK
ICAgICAgICBVSW50MzIgZG9vcmJlbGwKICAgICAgICApOwoKZXh0ZXJuIElCb29sIGNwdUlzQm9h
cmRDb250cm9sbGVyICggdm9pZCApOwoKCgoKCgoKZXh0ZXJuIGludCBmYXN0WG9yICggY29uc3Qg
VUludDggKiBidWYxLCBjb25zdCBVSW50OCAqIGJ1ZjIsIFVJbnQ4ICogZGVzdCwgVUludDMyIGJ5
dGVzICk7CiMgNDUgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5j
bHVkZS9hcHBzMy9jcHUuaCIgMgojIDM3ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hz
Y2FsZS14aW51L2luY2x1ZGUvc3lzL0tkZWZzLmgiIDIKCgoKCgoKdHlwZWRlZiBJQm9vbCBCb29s
OwoKCgoKCgp0eXBlZGVmIElTdGF0dXMgU3RhdHVzOwojIDY2ICIvaG9tZS9ybHAveHNjYWxlL3By
b2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0tkZWZzLmgiCnR5cGVkZWYgc3RydWN0
CiAgICAgICAgewogICAgICAgIH0gRklMRTsKIyAxNjIgIi9ob21lL3JscC94c2NhbGUvcHJvYmUv
djUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvS2RlZnMuaCIKdHlwZWRlZiBsb25nIHRpbWVf
dDsKCgp0eXBlZGVmIFVJbnQzMiBUaWNrczsKdHlwZWRlZiB0aW1lX3QgU2Vjb25kczsKdHlwZWRl
ZiBJbnQxNiBNaWxsaXNlY29uZHM7CiMgMTgzICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29z
L3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0tkZWZzLmgiCmNsYXNzIFByb2Nlc3M7CnR5cGVkZWYg
UHJvY2VzcyAqIFRocmVhZElkOwpleHRlcm4gVGhyZWFkSWQgS2dldE15VGhyZWFkSWQgKCB2b2lk
ICk7Cgp0eXBlZGVmIFVJbnQzMiBQcm9jZXNzSWQ7CmV4dGVybiBQcm9jZXNzSWQgS2dldE15UHJv
Y2Vzc0lkICggdm9pZCApOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKiBLZ2V0TXlQcm9jZXNzTmFtZSAo
IHZvaWQgKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBLZ2V0TXlVc2VyTmFtZSAoIHZvaWQgKTsKZXh0
ZXJuIGNvbnN0IGNoYXIgKiBLZ2V0TXlIb3N0TmFtZSAoIHZvaWQgKTsKCmlubGluZSBjb25zdCBj
aGFyICogS2dldE15T3NOYW1lICggdm9pZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICogcE9zTmFt
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcE9zTmFtZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKZXh0ZXJuIGNvbnN0IGNoYXIgKiBLZ2V0RXJy
b3JTdHIgKCBJbnQzMiB0aGVFcnJvciApOwoKCgoKCgp0eXBlZGVmIHZvaWQgKCAqIFBURENsZWFu
dXBSb3V0aW5lICkgKCB2b2lkICogKTsKdHlwZWRlZiB2b2lkICggKiBQVERJbml0Um91dGluZSAp
ICggdm9pZCApOwoKc3RydWN0IEtlcm5lbFRocmVhZERhdGEKICAgICAgICB7CiAgICAgICAgY29u
c3QgY2hhciAqIHBOYW1lOwogICAgICAgIEludDMyIGluZGV4OwogICAgICAgIFBURENsZWFudXBS
b3V0aW5lIHBDbGVhbnVwOwogICAgICAgIH07CgoKCmV4dGVybiB2b2lkIGtlcm5lbFNldFRocmVh
ZERhdGEgKCBLZXJuZWxUaHJlYWREYXRhICYga3RkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKiBwRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVERDbGVhbnVwUm91dGluZSBwQ2xl
YW51cEluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBUREluaXRSb3V0aW5lIHBJbml0ICk7Cgpl
eHRlcm4gdm9pZCBrZXJuZWxSZW1vdmVUaHJlYWREYXRhICggS2VybmVsVGhyZWFkRGF0YSAmIGt0
ZCApOwoKZXh0ZXJuIHZvaWQgKiBrZXJuZWxHZXRUaHJlYWREYXRhCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsVGhyZWFkRGF0YSAmIGt0ZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VzcyAqIHBQcm9jID0g
KDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgpl
eHRlcm4gdm9pZCBrZXJuZWxDcmVhdGVLZXkgKCBLZXJuZWxUaHJlYWREYXRhICYga3RkICk7CgoK
CgoKCgppbmxpbmUgSW50MzIgVG9Ib3N0ICggSW50MzIgdmFsdWUgKSB7IHJldHVybiBudG9obCAo
dmFsdWUpOyB9OwppbmxpbmUgVUludDMyIFRvSG9zdCAoIFVJbnQzMiB2YWx1ZSApIHsgcmV0dXJu
IG50b2hsICh2YWx1ZSk7IH07CmlubGluZSBJbnQxNiBUb0hvc3QgKCBJbnQxNiB2YWx1ZSApIHsg
cmV0dXJuIG50b2hzICh2YWx1ZSk7IH07CmlubGluZSBVSW50MTYgVG9Ib3N0ICggVUludDE2IHZh
bHVlICkgeyByZXR1cm4gbnRvaHMgKHZhbHVlKTsgfTsKaW5saW5lIEludDggVG9Ib3N0ICggSW50
OCB2YWx1ZSApIHsgcmV0dXJuIHZhbHVlOyB9OwppbmxpbmUgVUludDggVG9Ib3N0ICggVUludDgg
dmFsdWUgKSB7IHJldHVybiB2YWx1ZTsgfTsKCmlubGluZSBJbnQzMiBUb0J1ZmZlciggSW50MzIg
dmFsdWUgKSB7IHJldHVybiBodG9ubCAodmFsdWUpOyB9OwppbmxpbmUgVUludDMyIFRvQnVmZmVy
KCBVSW50MzIgdmFsdWUgKSB7IHJldHVybiBodG9ubCAodmFsdWUpOyB9OwppbmxpbmUgSW50MTYg
VG9CdWZmZXIoIEludDE2IHZhbHVlICkgeyByZXR1cm4gaHRvbnMgKHZhbHVlKTsgfTsKaW5saW5l
IFVJbnQxNiBUb0J1ZmZlciggVUludDE2IHZhbHVlICkgeyByZXR1cm4gaHRvbnMgKHZhbHVlKTsg
fTsKaW5saW5lIEludDggVG9CdWZmZXIoIEludDggdmFsdWUgKSB7IHJldHVybiB2YWx1ZTsgfTsK
aW5saW5lIFVJbnQ4IFRvQnVmZmVyKCBVSW50OCB2YWx1ZSApIHsgcmV0dXJuIHZhbHVlOyB9Owoj
IDE0MSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5
cy9kZWZzLmgiIDIKIyAxNTEgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhp
bnUvaW5jbHVkZS9zeXMvZGVmcy5oIgppbmxpbmUgVGhyZWFkSWQgZ2V0TXlUaHJlYWRJZCAoIHZv
aWQgKQogICAgICAgIHsKICAgICAgICByZXR1cm4gS2dldE15VGhyZWFkSWQgKCApOwogICAgICAg
IH07CgppbmxpbmUgUHJvY2Vzc0lkIGdldE15UHJvY2Vzc0lkICggdm9pZCApCiAgICAgICAgewog
ICAgICAgIHJldHVybiBLZ2V0TXlQcm9jZXNzSWQgKCk7CiAgICAgICAgfTsKCmlubGluZSBjb25z
dCBjaGFyICogZ2V0TXlQcm9jZXNzTmFtZSAoIHZvaWQgKQogICAgICAgIHsKICAgICAgICByZXR1
cm4gS2dldE15UHJvY2Vzc05hbWUgKCk7CiAgICAgICAgfTsKCmlubGluZSBjb25zdCBjaGFyICog
Z2V0TXlVc2VyTmFtZSAoIHZvaWQgKQogICAgICAgIHsKICAgICAgICByZXR1cm4gS2dldE15VXNl
ck5hbWUgKCk7CiAgICAgICAgfTsKCmlubGluZSBjb25zdCBjaGFyICogZ2V0TXlIb3N0TmFtZSAo
IHZvaWQgKQogICAgICAgIHsKICAgICAgICByZXR1cm4gS2dldE15SG9zdE5hbWUgKCk7CiAgICAg
ICAgfTsKCmlubGluZSBjb25zdCBjaGFyICogZ2V0TXlPc05hbWUgKCB2b2lkICkKICAgICAgICB7
CiAgICAgICAgcmV0dXJuIEtnZXRNeU9zTmFtZSAoKTsKICAgICAgICB9OwojIDE5MSAiL2hvbWUv
cmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9kZWZzLmgiCmlu
bGluZSBjaGFyICogZm9ybWF0UGF0aCAoIGNoYXIgKiBwYXRoICkKICAgICAgICB7CiAgICAgICAg
Y2hhciAqIHN0ciA9IHBhdGg7CgogICAgICAgIGZvciAoIDsgKnN0ciAhPSAnXDAnOyBzdHIrKyAp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoICpzdHIgPT0gJy8nIHx8ICpz
dHIgPT0gJ1xcJyApCiAgICAgICAgICAgICAgICAgICAgICAgICAqc3RyID0gJy8nOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICByZXR1cm4gcGF0aDsKICAgICAgICB9CgoKCgoKCgppbmxpbmUg
Y2hhciAqIGdldE5vdERpckZyb21QYXRoICggY2hhciAqIHBhdGggKQogICAgICAgIHsKICAgICAg
ICBjaGFyICogc3RyID0gcGF0aDsKCiAgICAgICAgZm9yICggOyAqc3RyICE9ICdcMCc7IHN0cisr
ICk7CgogICAgICAgIGZvciAoIDsgKnN0ciAhPSAnLyc7IHN0ci0tICkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGlmICggc3RyID09IHBhdGggKQogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcGF0aDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChzdHIg
KyAxKTsKICAgICAgICB9CgoKCgoKCmlubGluZSBjb25zdCBjaGFyICogZ2V0RXJyb3JTdHIgKCBJ
bnQzMiB0aGVFcnJvciApCiAgICAgICAgewogICAgICAgIHJldHVybiBLZ2V0RXJyb3JTdHIgKCB0
aGVFcnJvciApOwogICAgICAgIH07CiMgMzYgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mv
eHNjYWxlLXhpbnUvaW5jbHVkZS9NdXRleC5oIiAyCiMgNDUgIi9ob21lL3JscC94c2NhbGUvcHJv
YmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9NdXRleC5oIgojcHJhZ21hIGludGVyZmFjZQoj
IDU5ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvTXV0
ZXguaCIKIyAxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1
ZGUvc3lzL0tNdXRleC5oIiAxCiMgMzEgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNj
YWxlLXhpbnUvaW5jbHVkZS9zeXMvS011dGV4LmgiCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKIyAx
ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0tT
ZW1hcGhvcmUuaCIgMQojIDM4ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14
aW51L2luY2x1ZGUvc3lzL0tTZW1hcGhvcmUuaCIKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCiMgMSAi
L2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9xLmgi
IDEKIyAzNyAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRl
L3N5cy9xLmgiCmNsYXNzIFFlbnRyeQogICAgICAgIHsKcHJpdmF0ZToKICAgICAgICBpbnQgcWtl
eTsKICAgICAgICBRZW50cnkgKnFuZXh0OwogICAgICAgIFFlbnRyeSAqcXByZXY7CgogICAgICAg
IGZyaWVuZCBjbGFzcyBRdWV1ZTsKIyA1NiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94
c2NhbGUteGludS9pbmNsdWRlL3N5cy9xLmgiCnByb3RlY3RlZDoKICAgICAgICBpbmxpbmUgdm9p
ZCBkZXF1ZXVlICgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKIyA3MiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNs
dWRlL3N5cy9xLmgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHFwcmV2LT5xbmV4dCA9cW5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHFuZXh0LT5xcHJldiA9IHFwcmV2OwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKcHVibGljOgogICAgICAgIGludCBLZXkg
KCB2b2lkICkgY29uc3Q7CiAgICAgICAgUWVudHJ5ICogTmV4dCAoIHZvaWQgKSBjb25zdDsKICAg
ICAgICBRZW50cnkgKiBQcmV2ICggdm9pZCApIGNvbnN0OwogICAgICAgIHN0YXRpYyBRZW50cnkg
KiBOdWxsICgpIHsgcmV0dXJuIChRZW50cnkgKikgKDApOyB9OwogICAgICAgIH07CgppbmxpbmUg
aW50IFFlbnRyeTo6S2V5ICggdm9pZCApIGNvbnN0CiAgICAgICAgewogICAgICAgIHJldHVybiBx
a2V5OwogICAgICAgIH0KCmlubGluZSBRZW50cnkgKiBRZW50cnk6Ok5leHQgKCB2b2lkICkgY29u
c3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIHFuZXh0OwogICAgICAgIH0KCmlubGluZSBRZW50
cnkgKiBRZW50cnk6OlByZXYgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJu
IHFwcmV2OwogICAgICAgIH0KCmNsYXNzIFF1ZXVlCiAgICAgICAgewpwcml2YXRlOgogICAgICAg
IFFlbnRyeSBoZWFkOwogICAgICAgIFFlbnRyeSB0YWlsOwoKICAgICAgICBmcmllbmQgY2xhc3Mg
UHJvY2VzczsKCnB1YmxpYzoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFF1ZXVlKCk7CiAgICAgICAgaW5saW5lIGludCBpc2VtcHR5ICgpIHtyZXR1cm4g
KGhlYWQucW5leHQgPT0gJnRhaWwpO30KICAgICAgICBpbmxpbmUgaW50IG5vbmVtcHR5KCkge3Jl
dHVybiAoaGVhZC5xbmV4dCAhPSAmdGFpbCk7fQogICAgICAgIGlubGluZSBpbnQgZmlyc3RrZXko
KSB7cmV0dXJuIGhlYWQucW5leHQtPnFrZXk7fQogICAgICAgIGlubGluZSBpbnQgbGFzdGtleSgp
IHtyZXR1cm4gdGFpbC5xcHJldi0+cWtleTt9CiAgICAgICAgaW5saW5lIFFlbnRyeSAqbGFzdEVs
ZW1lbnQoKSB7cmV0dXJuIHRhaWwucXByZXY7fQogICAgICAgIGlubGluZSBRZW50cnkgKmZpcnN0
RWxlbWVudCgpIHtyZXR1cm4gaGVhZC5xbmV4dDt9CiAgICAgICAgaW5saW5lIHZvaWQgZW5xdWV1
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBRZW50cnkgKml0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewojIDEzMCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2Nh
bGUteGludS9pbmNsdWRlL3N5cy9xLmgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cW5leHQgPSAmdGFpbDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5xcHJldiA9
IHRhaWwucXByZXY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGl0ZW0tPnFwcmV2LT5xbmV4dCA9IGl0ZW07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbC5xcHJldiA9IGl0ZW07
CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICBpbmxpbmUgdm9pZCBlbnF1ZXVlV2l0aEtleQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRZW50cnkgKml0ZW0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbS0+cWtleSA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlKGl0ZW0pOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICB2b2lkIGluc2Vy
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBRZW50cnkgKml0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgaW5saW5lIFFlbnRyeSAqIGdldGZpcnN0
ICgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFFlbnRyeSAqbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoKG0gPSBoZWFkLnFuZXh0KSA9PSAmdGFpbCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBRZW50cnk6Ok51bGwgKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbS0+ZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIGlubGlu
ZSBRZW50cnkgKiBnZXRsYXN0ICgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFFlbnRyeSAqbTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG0gPSB0YWlsLnFwcmV2KSA9PSAm
aGVhZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBRZW50cnk6Ok51bGwgKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS0+ZGVxdWV1ZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
bSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgIH07CiMgNDQgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxl
LXhpbnUvaW5jbHVkZS9zeXMvS1NlbWFwaG9yZS5oIiAyCgpjbGFzcyBLU2VtYXBob3JlIDogcHJp
dmF0ZSBRdWV1ZQogICAgICAgIHsKcHJpdmF0ZToKICAgICAgICBpbnQgaW5pdGlhbHNjb3VudDsK
ICAgICAgICBtdXRhYmxlIGludCBzY291bnQ7CgogICAgICAgIGZyaWVuZCBjbGFzcyBQcm9jZXNz
OwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBLU2VtYXBob3JlICggSW50MzIgaW5pdGlhbFZhbHVlID0gMCApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfiBLU2VtYXBob3JlICggKTsKCgoKCiAgICAgICAgSVN0
YXR1cyBXYWl0ICggdm9pZCApIGNvbnN0OwogICAgICAgIElTdGF0dXMgV2FpdCAoIE1pbGxpc2Vj
b25kcyBtYXhXYWl0VGltZSApIGNvbnN0OwoKCgogICAgICAgIElTdGF0dXMgR2l2ZSAoIFVJbnQz
MiBudW1iZXJPZkdpdmVzID0gMSApIGNvbnN0OwoKCgoKICAgICAgICBJU3RhdHVzIEJyb2FkY2Fz
dCAoIHZvaWQgKSBjb25zdDsKCgoKCgogICAgICAgIElTdGF0dXMgVHJ5V2FpdCAoIHZvaWQgKSBj
b25zdDsKCgoKCgogICAgICAgIFVJbnQzMiBIYW5kbGUgKCB2b2lkICkgY29uc3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgg
dW5zaWduZWQgaW50ICkgdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CgoKCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9v
cy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9LU2VtTGVnYWN5LmgiIDEKIyAzMSAiL2hvbWUvcmxw
L3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9LU2VtTGVnYWN5Lmgi
CnB1YmxpYzoKICAgICAgICBpbmxpbmUgaW50IHdhaXQgKCkgY29uc3QgeyByZXR1cm4gKGludCkg
V2FpdCAoKTsgfTsKICAgICAgICBpbmxpbmUgaW50IHNpZ25hbCAoKSBjb25zdCB7IHJldHVybiAo
aW50KSBHaXZlICgpOyB9OwogICAgICAgIGlubGluZSBpbnQgc2lnbmFsbiAoaW50IG4pIGNvbnN0
eyByZXR1cm4gKGludCkgR2l2ZSAobik7IH07CiAgICAgICAgaW50IHJlc2V0IChpbnQgbj0wKSBj
b25zdDsKICAgICAgICBpbnQgZGVjcmVtZW50ICgpIGNvbnN0OwogICAgICAgIGlubGluZSBpbnQg
Y291bnQgKCkgY29uc3QgeyByZXR1cm4gc2NvdW50O30KIyA5MCAiL2hvbWUvcmxwL3hzY2FsZS9w
cm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9LU2VtYXBob3JlLmgiIDIKCiAgICAg
ICAgfTsKIyAzOCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNs
dWRlL3N5cy9LTXV0ZXguaCIgMgoKY2xhc3MgUHJvY2VzczsKCmNsYXNzIEtNdXRleAogICAgICAg
IHsKcHJvdGVjdGVkOgogICAgICAgIG11dGFibGUgS1NlbWFwaG9yZSB0aGVMb2NrOwogICAgICAg
IG11dGFibGUgVGhyZWFkSWQgcExvY2tPd25lcjsKCiAgICAgICAgbXV0YWJsZSBVSW50MzIgbG9j
a0xldmVsOwoKcHJvdGVjdGVkOgogICAgICAgIFRocmVhZElkIEdldExvY2tPd25lciAoIHZvaWQg
KSBjb25zdDsKICAgICAgICBVSW50MzIgR2V0TG9ja0xldmVsICggdm9pZCApIGNvbnN0OwoKcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLTXV0
ZXggKCB2b2lkICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+IEtN
dXRleCAoICk7CgoKCgoKICAgICAgICBJU3RhdHVzIExvY2sgKCB2b2lkICkgY29uc3Q7CgoKCgoK
ICAgICAgICBJU3RhdHVzIFRyeUxvY2sgKCB2b2lkICkgY29uc3Q7CgoKCgoKICAgICAgICBJU3Rh
dHVzIFVubG9jayAoIHZvaWQgKSBjb25zdDsKCgoKCgogICAgICAgIFVJbnQzMiBIYW5kbGUgKCB2
b2lkICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICggdW5zaWduZWQgaW50ICkgJiB0aGVMb2NrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
fTsKIyA2MCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRl
L011dGV4LmgiIDIKCmNsYXNzIE11dGV4IDogcHJpdmF0ZSBLTXV0ZXgKICAgICAgICB7CnByaXZh
dGU6Cgpwcm90ZWN0ZWQ6CiAgICBUaHJlYWRJZCBHZXRMb2NrT3duZXIgKCB2b2lkICkgY29uc3Q7
CgogICAgVUludDMyIEdldExvY2tMZXZlbCAoIHZvaWQgKSBjb25zdDsKCiAgICAgICAgZnJpZW5k
IGNsYXNzIENvbmRWYXI7CgpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNdXRleCAoIHZvaWQgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fiBNdXRleCAoICk7CgoKCgoKICAgIElTdGF0dXMgTG9jayAoIHZvaWQgKSBjb25zdDsKCgoKCgog
ICAgSVN0YXR1cyBUcnlMb2NrICggdm9pZCApIGNvbnN0OwoKCgoKCiAgICBJU3RhdHVzIFVubG9j
ayAoIHZvaWQgKSBjb25zdDsKCgoKCgogICAgVUludDMyIEhhbmRsZSAoIHZvaWQgKSBjb25zdDsK
CiAgICAgICAgfTsKCgoKCgoKaW5saW5lIE11dGV4OjpNdXRleCAoIHZvaWQgKQogICAgICAgIHsK
ICAgICAgICB9OwoKaW5saW5lIE11dGV4Ojp+TXV0ZXggKCApCiAgICAgICAgewogICAgICAgIH07
CgoKaW5saW5lIFRocmVhZElkIE11dGV4OjpHZXRMb2NrT3duZXIgKCB2b2lkICkgY29uc3QKICAg
ICAgICB7CiAgICAgICAgcmV0dXJuIEtNdXRleDo6R2V0TG9ja093bmVyICggKTsKICAgICAgICB9
CgppbmxpbmUgVUludDMyIE11dGV4OjpHZXRMb2NrTGV2ZWwgKCB2b2lkICkgY29uc3QKICAgICAg
ICB7CiAgICAgICAgcmV0dXJuIEtNdXRleDo6R2V0TG9ja0xldmVsICggKTsKICAgICAgICB9Cgpp
bmxpbmUgSVN0YXR1cyBNdXRleDo6TG9jayAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAg
ICByZXR1cm4gS011dGV4OjpMb2NrICggKTsKICAgICAgICB9CgppbmxpbmUgSVN0YXR1cyBNdXRl
eDo6VHJ5TG9jayAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4gS011dGV4
OjpUcnlMb2NrICggKTsKICAgICAgICB9CgppbmxpbmUgSVN0YXR1cyBNdXRleDo6VW5sb2NrICgg
dm9pZCApIGNvbnN0CiAgICAgICAgewogICAgICAgIHJldHVybiBLTXV0ZXg6OlVubG9jayAoICk7
CiAgICAgICAgfQoKaW5saW5lIFVJbnQzMiBNdXRleDo6SGFuZGxlICggdm9pZCApIGNvbnN0CiAg
ICAgICAgewogICAgICAgIHJldHVybiBLTXV0ZXg6OkhhbmRsZSAoICk7CiAgICAgICAgfQojIDI2
ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rl
di9wY2kvY29tbW9uL1BjaURldi5oIiAyCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9v
cy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2kuaCIgMQojIDQwICIv
aG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9w
Y2kvY29tbW9uL1BjaS5oIgojcHJhZ21hIGludGVyZmFjZQoKCgoKCgp0eXBlZGVmIHVuaW9uIHdv
cmQzMgp7CiAgICAgICAgVUludDMyIHZhbDMyOwogICAgICAgIHN0cnVjdCBiaXRzMzIKICAgICAg
ICB7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDAgOiAxOwogICAgICAgICAgICAgICAg
Qml0RmllbGQzMiBiaXQxIDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMzIgYml0MiA6IDE7
CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDMgOiAxOwogICAgICAgICAgICAgICAgQml0
RmllbGQzMiBiaXQ0IDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMzIgYml0NSA6IDE7CiAg
ICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDYgOiAxOwogICAgICAgICAgICAgICAgQml0Rmll
bGQzMiBiaXQ3IDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMzIgYml0OCA6IDE7CiAgICAg
ICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDkgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQz
MiBiaXQxMCA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDExIDogMTsKICAgICAg
ICAgICAgICAgIEJpdEZpZWxkMzIgYml0MTIgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQz
MiBiaXQxMyA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDE0IDogMTsKICAgICAg
ICAgICAgICAgIEJpdEZpZWxkMzIgYml0MTUgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQz
MiBiaXQxNiA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDE3IDogMTsKICAgICAg
ICAgICAgICAgIEJpdEZpZWxkMzIgYml0MTggOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQz
MiBiaXQxOSA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDIwIDogMTsKICAgICAg
ICAgICAgICAgIEJpdEZpZWxkMzIgYml0MjEgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQz
MiBiaXQyMiA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDIzIDogMTsKICAgICAg
ICAgICAgICAgIEJpdEZpZWxkMzIgYml0MjQgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQz
MiBiaXQyNSA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDI2IDogMTsKICAgICAg
ICAgICAgICAgIEJpdEZpZWxkMzIgYml0MjcgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQz
MiBiaXQyOCA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDMyIGJpdDI5IDogMTsKICAgICAg
ICAgICAgICAgIEJpdEZpZWxkMzIgYml0MzAgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQz
MiBiaXQzMSA6IDE7CiAgICAgICAgfSBiaXRzMzI7Cn0gcmVnaXN0ZXIzMjsKCnR5cGVkZWYgdW5p
b24gc2hvcnQxNgp7CiAgICAgICAgVUludDE2IHZhbDE2OwoKCiAgICAgICAgc3RydWN0IGJpdHMx
NgogICAgICAgIHsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0MCA6IDE7CiAgICAgICAg
ICAgICAgICBCaXRGaWVsZDE2IGJpdDEgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQxNiBi
aXQyIDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0MyA6IDE7CiAgICAgICAgICAg
ICAgICBCaXRGaWVsZDE2IGJpdDQgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQxNiBiaXQ1
IDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0NiA6IDE7CiAgICAgICAgICAgICAg
ICBCaXRGaWVsZDE2IGJpdDcgOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQxNiBiaXQ4IDog
MTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0OSA6IDE7CiAgICAgICAgICAgICAgICBC
aXRGaWVsZDE2IGJpdDEwIDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0MTEgOiAx
OwogICAgICAgICAgICAgICAgQml0RmllbGQxNiBiaXQxMiA6IDE7CiAgICAgICAgICAgICAgICBC
aXRGaWVsZDE2IGJpdDEzIDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0MTQgOiAx
OwogICAgICAgICAgICAgICAgQml0RmllbGQxNiBiaXQxNSA6IDE7CiAgICAgICAgfSBiaXRzMTY7
CgoKICAgICAgICBzdHJ1Y3Qgc3RhdHVzYml0czE2CiAgICAgICAgewogICAgICAgICAgICAgICAg
Qml0RmllbGQxNiBiaXQwIDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0MSA6IDE7
CiAgICAgICAgICAgICAgICBCaXRGaWVsZDE2IGJpdDIgOiAxOwogICAgICAgICAgICAgICAgQml0
RmllbGQxNiBiaXQzIDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0NCA6IDE7CiAg
ICAgICAgICAgICAgICBCaXRGaWVsZDE2IGJpdDUgOiAxOwogICAgICAgICAgICAgICAgQml0Rmll
bGQxNiBiaXQ2IDogMTsKICAgICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0NyA6IDE7CiAgICAg
ICAgICAgICAgICBCaXRGaWVsZDE2IGJpdDggOiAxOwogICAgICAgICAgICAgICAgQml0RmllbGQx
NiBiaXRzOV8xMCA6IDI7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDE2IGJpdDExIDogMTsKICAg
ICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0MTIgOiAxOwogICAgICAgICAgICAgICAgQml0Rmll
bGQxNiBiaXQxMyA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDE2IGJpdDE0IDogMTsKICAg
ICAgICAgICAgICAgIEJpdEZpZWxkMTYgYml0MTUgOiAxOwogICAgICAgIH0gc3RhdGJpdHMxNjsK
fSByZWdpc3RlcjE2OwoKdHlwZWRlZiB1bmlvbiBieXRlOAp7CiAgICAgICAgVUludDggdmFsODsK
ICAgICAgICBzdHJ1Y3QgYml0czgKICAgICAgICB7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDgg
Yml0MCA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDggYml0MSA6IDE7CiAgICAgICAgICAg
ICAgICBCaXRGaWVsZDggYml0MiA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDggYml0MyA6
IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDggYml0NCA6IDE7CiAgICAgICAgICAgICAgICBC
aXRGaWVsZDggYml0NSA6IDE7CiAgICAgICAgICAgICAgICBCaXRGaWVsZDggYml0NiA6IDE7CiAg
ICAgICAgICAgICAgICBCaXRGaWVsZDggYml0NyA6IDE7CiAgICAgICAgfSBiaXRzODsKfSByZWdp
c3Rlcjg7CiMgNDc4ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3Ny
Yy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaS5oIgpjb25zdCBVSW50IFBDSV9CYXNlQWRkcmVz
c0NvdW50ID0gNjsKY29uc3QgVUludCBQQ0lfQ29uZmlnSGVhZGVyU2l6ZSA9IDI1NjsKY29uc3Qg
VUludCBQQ0lfQ29uZmlnME9mZnNldCA9IDB4ODAwOwoKCgoKZW51bSBQY2lCYXNlQWRkcmVzc1R5
cGUKICAgICAgICB7CiAgICAgICAgUGNpQmFzZUFkZHJlc3NfVW5kZWZpbmVkID0gLTEsCiAgICAg
ICAgUGNpQmFzZUFkZHJlc3NfQ3NyTWVtb3J5QmFzZSA9IDAsCiAgICAgICAgUGNpQmFzZUFkZHJl
c3NfQ3NySW9CYXNlID0gMSwKICAgICAgICBQY2lCYXNlQWRkcmVzc19TZHJhbUJhc2UgPSAyLAog
ICAgICAgIFBjaUJhc2VBZGRyZXNzX1Jlc2VydmVkMyA9IDMsCiAgICAgICAgUGNpQmFzZUFkZHJl
c3NfUmVzZXJ2ZWQ0ID0gNCwKICAgICAgICBQY2lCYXNlQWRkcmVzc19SZXNlcnZlZDUgPSA1LAog
ICAgICAgIH07CgoKCmVudW0gUGNpNjRCYXNlQWRkcmVzc1R5cGUKICAgICAgICB7CiAgICAgICAg
UGNpNjRCYXNlQWRkcmVzc19VbmRlZmluZWQgPSAtMSwKICAgICAgICBQY2k2NEJhc2VBZGRyZXNz
X0luQmFzZTAgPSAwLAogICAgICAgIFBjaTY0QmFzZUFkZHJlc3NfVXBwZXJJbkJhc2UwID0gMSwK
ICAgICAgICBQY2k2NEJhc2VBZGRyZXNzX0luQmFzZTEgPSAyLAogICAgICAgIFBjaTY0QmFzZUFk
ZHJlc3NfVXBwZXJJbkJhc2UxID0gMywKICAgICAgICBQY2k2NEJhc2VBZGRyZXNzX0luQmFzZTIg
PSA0LAogICAgICAgIFBjaTY0QmFzZUFkZHJlc3NfVXBwZXJJbkJhc2UyID0gNSwKICAgICAgICB9
OwoKCmNvbnN0IFVJbnQgUENJX0Jhc2VBZGRyZXNzSW9NYXNrID0gMTsKCgoKCmNvbnN0IFVJbnQg
UENJX0Jhc2VBZGRyZXNzTWVtTWFzayA9IDc7CgoKY29uc3QgVUludCBQQ0lfV29yZE1hc2sgPSAz
Owpjb25zdCBVSW50IFBDSV9TaG9ydE1hc2sgPSAxOwoKCmNvbnN0IEJpdEZpZWxkMTYgUENJX05v
RGV2ID0gKH4wKTsKIyAyNyAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGlu
dS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIgMgojIDEgIi9ob21lL3JscC94
c2NhbGUvcHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24v
UGNpRGV2SW5mby5oIiAxCiMgMjIgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mvc3JjL2dl
b1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpRGV2SW5mby5oIgojcHJhZ21hIGlu
dGVyZmFjZQoKCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9p
bmNsdWRlL0xpc3QuaCIgMQojIDQyICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2Fs
ZS14aW51L2luY2x1ZGUvTGlzdC5oIgojcHJhZ21hIGludGVyZmFjZQojIDU3ICIvaG9tZS9ybHAv
eHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvTGlzdC5oIgpzdHJ1Y3QgTm9k
ZQogICAgewogICAgTm9kZSAqIG5leHROb2RlOwogICAgTm9kZSAqIHByZXZOb2RlOwoKICAgICAg
ICBOb2RlICggKSA6IG5leHROb2RlICggKDApICksIHByZXZOb2RlICggKDApICkgeyB9CiAgICAg
ICAgfiBOb2RlICggKSB7IH07CiAgICB9OwoKdHlwZWRlZiBOb2RlIE5PREU7CnR5cGVkZWYgTm9k
ZSAqIE5PREVfUFRSOwoKc3RydWN0IEROb2RlIDogcHVibGljIE5vZGUKICAgIHsKICAgIHZvaWQg
KiBkYXRhOwoKICAgIGlubGluZSBETm9kZSAoIHZvaWQgKSB7IGRhdGEgPSAoMCk7IH07CiAgICBp
bmxpbmUgRE5vZGUgKCB2b2lkICogcERhdGEgKSB7IFNldERhdGEocERhdGEpOyB9OwogICAgaW5s
aW5lIHZvaWQgKiBEYXRhICggdm9pZCApIGNvbnN0IHsgcmV0dXJuIGRhdGE7IH07CiAgICBpbmxp
bmUgdm9pZCBTZXREYXRhICggdm9pZCAqIHBEYXRhICkgeyBkYXRhID0gcERhdGE7IH07CiAgICB9
OwoKCgp0eXBlZGVmIEludDMyIChMaXN0Q21wUm91dGluZSkoIGNvbnN0IE5vZGUgKmxocywgY29u
c3QgTm9kZSAqcmhzKTsKCgoKY2xhc3MgTGlzdAogICAgewogIHByb3RlY3RlZDoKICAgIE5vZGUg
aGVhZE5vZGU7CiAgICBVSW50MzIgbm9Ob2RlczsKCiAgICBpbmxpbmUgdm9pZCBJbml0ICggKTsK
CiAgcHVibGljOgoKCgogICAgIGlubGluZSBMaXN0ICggKTsKCiAgICAgICAgaW5saW5lIHZpcnR1
YWwgfkxpc3QgKCApIHsgfTsKCgoKICAgIGlubGluZSB2b2lkIFJlc2V0ICggKTsKICAgIHZvaWQg
QWRkTGlzdFRvRnJvbnQgKCBMaXN0ICogZnJvbUxpc3QgKTsKICAgIHZvaWQgQWRkTGlzdFRvRW5k
ICggTGlzdCAqIGZyb21MaXN0ICk7CiAgICB2b2lkIEFkZExpc3RCZWZvcmUgKCBOb2RlICogYmVm
b3JlTm9kZSwgTGlzdCAqIGZyb21MaXN0ICk7CiAgICB2b2lkIEFkZExpc3RBZnRlciAoIE5vZGUg
KiBhZnRlck5vZGUsIExpc3QgKiBmcm9tTGlzdCApOwoKCgogICAgaW5saW5lIEludDMyIENvdW50
ICggKSBjb25zdDsKICAgIGlubGluZSBJbnQzMiBHZXROdW1iZXJPZk5vZGVzKCApIGNvbnN0OwoK
CgogICAgaW5saW5lIE5vZGUgKiBSZW1vdmUgKCBOb2RlICogbm9kZSApOwogICAgaW5saW5lIHZv
aWQgSW5zZXJ0QWZ0ZXIgKCBOb2RlICogYWZ0ZXIsIE5vZGUgKiBub2RlICk7CiAgICBpbmxpbmUg
dm9pZCBJbnNlcnRCZWZvcmUgKCBOb2RlICogYmVmb3JlLCBOb2RlICogbm9kZSApOwogICAgaW5s
aW5lIHZvaWQgSW5zZXJ0TGFzdCAoIE5vZGUgKiBub2RlICk7CiAgICBpbmxpbmUgdm9pZCBJbnNl
cnRGaXJzdCAoIE5vZGUgKiBub2RlICk7CgogICAgaW5saW5lIE5vZGUgKiBHZXRGaXJzdCAoICkg
Y29uc3Q7CiAgICBpbmxpbmUgTm9kZSAqIEdldExhc3QgKCApIGNvbnN0OwogICAgaW5saW5lIE5v
ZGUgKiBHZXROZXh0ICggY29uc3QgTm9kZSAqIG5vZGUgKSBjb25zdDsKICAgIGlubGluZSBOb2Rl
ICogR2V0UHJldiAoIGNvbnN0IE5vZGUgKiBub2RlICkgY29uc3Q7CiAgICBpbmxpbmUgTm9kZSAq
IFJlbW92ZUZpcnN0ICggKTsKICAgIGlubGluZSBOb2RlICogUmVtb3ZlTGFzdCAoICk7CiAgICAg
ICAgICAgTm9kZSAqIEdldFBvc2l0aW9uICggVUludDMyIHBvc2l0aW9uICkgY29uc3Q7CgoKCiAg
ICBpbmxpbmUgdm9pZCBvcGVyYXRvciArPSAoIE5vZGUgKiBuZXdOb2RlICk7CiAgICBpbmxpbmUg
dm9pZCBvcGVyYXRvciAtPSAoIE5vZGUgKiBhTm9kZSApOwogICAgaW5saW5lIHZvaWQgb3BlcmF0
b3IgKz0gKCBOb2RlJiBuZXdOb2RlICk7CiAgICBpbmxpbmUgdm9pZCBvcGVyYXRvciAtPSAoIE5v
ZGUmIGFOb2RlICk7CgogICAgaW5saW5lIExpc3QmIG9wZXJhdG9yICs9ICggTGlzdCYgYUxpc3Qg
KTsKCgoKICAgIHZvaWQgTWVyZ2VTb3J0ICggTGlzdENtcFJvdXRpbmUgKiBjbXAgKTsKCgoKIyAx
ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0xp
c3RMZWdhY3kuaCIgMQojIDIyICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14
aW51L2luY2x1ZGUvc3lzL0xpc3RMZWdhY3kuaCIKcHVibGljOgogICAgICAgIGlubGluZSB2b2lk
IHJlc2V0ICggKTsKICAgICAgICBpbmxpbmUgdm9pZCBpbnNlcnRBZnRlciAoTm9kZSAqIGFmdGVy
VGhpc05vZGUsIE5vZGUgKiBub2RlKTsKICAgICAgICBpbmxpbmUgdm9pZCBpbnNlcnRCZWZvcmUg
KE5vZGUgKiBiZWZvcmVUaGlzTm9kZSwgTm9kZSAqIG5vZGUpOwogICAgICAgIGlubGluZSB2b2lk
IGluc2VydExhc3QgKE5vZGUgKiBub2RlKTsKICAgICAgICBpbmxpbmUgdm9pZCBpbnNlcnRGaXJz
dCAoTm9kZSAqIG5vZGUpOwogICAgICAgIGlubGluZSBOb2RlICogcmVtb3ZlIChOb2RlICogbm9k
ZSk7CiAgICAgICAgaW5saW5lIE5vZGUgKiByZW1vdmVGaXJzdCAoKTsKICAgICAgICBpbmxpbmUg
Tm9kZSAqIHJlbW92ZUxhc3QgKCk7CiAgICAgICAgaW5saW5lIE5vZGUgKiBnZXRGaXJzdCAoKSBj
b25zdDsKICAgICAgICBpbmxpbmUgTm9kZSAqIGdldExhc3QgKCkgY29uc3Q7CiAgICAgICAgaW5s
aW5lIE5vZGUgKiBnZXROZXh0IChjb25zdCBOb2RlICogYWZ0ZXJUaGlzTm9kZSkgY29uc3Q7CiAg
ICAgICAgaW5saW5lIE5vZGUgKiBnZXRQcmV2aW91cyAoY29uc3QgTm9kZSAqIGJlZm9yZVRoaXNO
b2RlKSBjb25zdDsKICAgICAgICBpbmxpbmUgaW50IGdldE51bWJlck9mTm9kZXMgKCkgY29uc3Q7
CiAgICAgICAgaW5saW5lIE5vZGUgKiBnZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pIGNvbnN0Owog
ICAgICAgIGlubGluZSBOb2RlICogcmVtb3ZlUG9zaXRpb24gKGludCBwb3NpdGlvbik7CgogICAg
ICAgIGlubGluZSB2b2lkIG1lcmdlU29ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAoKmNtcCkoTm9kZSAqbGhzLCBOb2RlICpyaHMpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiMgMTQ2ICIvaG9tZS9ybHAveHNj
YWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvTGlzdC5oIiAyCgogICAgICAgIH07
CgoKCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRl
L3N5cy9MaXN0TGVnYWN5SW1wLmgiIDEKIyAyMCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9v
cy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9MaXN0TGVnYWN5SW1wLmgiCnR5cGVkZWYgTGlzdCBM
SVNUOwp0eXBlZGVmIExpc3QgKiBMSVNUX1BUUjsKCmlubGluZSB2b2lkIExpc3Q6OnJlc2V0ICgg
KQogICAgICAgIHsKICAgICAgICBSZXNldCAoICk7CiAgICAgICAgfTsKCmlubGluZSB2b2lkIExp
c3Q6Omluc2VydEFmdGVyIChOb2RlICogYWZ0ZXJUaGlzTm9kZSwgTm9kZSAqIG5vZGUpCiAgICAg
ICAgewogICAgICAgIEluc2VydEFmdGVyICggYWZ0ZXJUaGlzTm9kZSwgbm9kZSApOwogICAgICAg
IH07CgppbmxpbmUgdm9pZCBMaXN0OjppbnNlcnRCZWZvcmUgKE5vZGUgKiBiZWZvcmVUaGlzTm9k
ZSwgTm9kZSAqIG5vZGUpCiAgICAgICAgewogICAgICAgIEluc2VydEJlZm9yZSAoIGJlZm9yZVRo
aXNOb2RlLCBub2RlICk7CiAgICAgICAgfTsKCmlubGluZSB2b2lkIExpc3Q6Omluc2VydExhc3Qg
KE5vZGUgKiBub2RlKQogICAgICAgIHsKICAgICAgICBJbnNlcnRMYXN0ICggbm9kZSApOwogICAg
ICAgIH07CgppbmxpbmUgdm9pZCBMaXN0OjppbnNlcnRGaXJzdCAoTm9kZSAqIG5vZGUpCiAgICAg
ICAgewogICAgICAgIEluc2VydEZpcnN0ICggbm9kZSApOwogICAgICAgIH07CgppbmxpbmUgTm9k
ZSAqIExpc3Q6OnJlbW92ZSAoTm9kZSAqIG5vZGUpCiAgICAgICAgewogICAgICAgIHJldHVybiBS
ZW1vdmUgKCBub2RlICk7CiAgICAgICAgfTsKCmlubGluZSBOb2RlICogTGlzdDo6cmVtb3ZlRmly
c3QgKCkKICAgICAgICB7CiAgICAgICAgcmV0dXJuIFJlbW92ZUZpcnN0ICggKTsKICAgICAgICB9
OwoKaW5saW5lIE5vZGUgKiBMaXN0OjpyZW1vdmVMYXN0ICgpCiAgICAgICAgewogICAgICAgIHJl
dHVybiBSZW1vdmVMYXN0ICggKTsKICAgICAgICB9OwoKaW5saW5lIE5vZGUgKiBMaXN0OjpnZXRG
aXJzdCAoKSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4gR2V0Rmlyc3QgKCApOwogICAg
ICAgIH07CgppbmxpbmUgTm9kZSAqIExpc3Q6OmdldExhc3QgKCkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgcmV0dXJuIEdldExhc3QgKCApOwogICAgICAgIH07CgppbmxpbmUgTm9kZSAqIExpc3Q6
OmdldE5leHQgKGNvbnN0IE5vZGUgKiBhZnRlclRoaXNOb2RlKSBjb25zdAogICAgICAgIHsKICAg
ICAgICByZXR1cm4gR2V0TmV4dCAoIGFmdGVyVGhpc05vZGUgKTsKICAgICAgICB9OwoKaW5saW5l
IE5vZGUgKiBMaXN0OjpnZXRQcmV2aW91cyAoY29uc3QgTm9kZSAqIGJlZm9yZVRoaXNOb2RlKSBj
b25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4gR2V0UHJldiAoIGJlZm9yZVRoaXNOb2RlICk7
CiAgICAgICAgfTsKCmlubGluZSBpbnQgTGlzdDo6Z2V0TnVtYmVyT2ZOb2RlcyAoKSBjb25zdAog
ICAgICAgIHsKICAgICAgICByZXR1cm4gKG5vTm9kZXMpOwogICAgICAgIH07CgppbmxpbmUgTm9k
ZSAqIExpc3Q6OmdldFBvc2l0aW9uKGludCBwb3NpdGlvbikgY29uc3QKICAgICAgICB7CiAgICAg
ICAgcmV0dXJuIEdldFBvc2l0aW9uICggKFVJbnQzMikgcG9zaXRpb24gKTsKICAgICAgICB9OwoK
aW5saW5lIE5vZGUgKiBMaXN0OjpyZW1vdmVQb3NpdGlvbiAoaW50IHBvc2l0aW9uKQogICAgICAg
IHsKICAgICAgICBOb2RlICpub2RlOwoKICAgICAgICBub2RlID0gZ2V0UG9zaXRpb24ocG9zaXRp
b24pOwogICAgICAgIGlmIChub2RlKQogICAgICAgICAgICAgICAgcmV0dXJuKHJlbW92ZShub2Rl
KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuKChOb2RlICopICgwKSk7CiAg
ICAgICAgfTsKCmlubGluZSB2b2lkIExpc3Q6Om1lcmdlU29ydAogICAgICAgICgKICAgICAgICBp
bnQgKCpjbXApKE5vZGUgKmxocywgTm9kZSAqcmhzKQogICAgICAgICkKICAgICAgICB7CiAgICAg
ICAgTGlzdENtcFJvdXRpbmUgKiBwQ21wUnRuID0gKExpc3RDbXBSb3V0aW5lICopIGNtcDsKCiAg
ICAgICAgTWVyZ2VTb3J0ICggcENtcFJ0biApOwogICAgICAgIH07CiMgMTUyICIvaG9tZS9ybHAv
eHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvTGlzdC5oIiAyCgoKCgoKCmlu
bGluZSB2b2lkIExpc3Q6OkluaXQoICkKICAgIHsKICAgIG5vTm9kZXMgPSAwOwogICAgaGVhZE5v
ZGUubmV4dE5vZGUgPSAmaGVhZE5vZGU7CiAgICBoZWFkTm9kZS5wcmV2Tm9kZSA9ICZoZWFkTm9k
ZTsKICAgIH07CgppbmxpbmUgTGlzdDo6TGlzdCggKQogICAgewogICAgSW5pdCAoICk7CiAgICB9
OwoKaW5saW5lIHZvaWQgTGlzdDo6UmVzZXQoICkKICAgIHsKICAgIEluaXQoICk7CiAgICB9OwoK
aW5saW5lIE5vZGUgKiBMaXN0OjpHZXRGaXJzdCgpIGNvbnN0CiAgICB7CiAgICByZXR1cm4gKCBo
ZWFkTm9kZS5uZXh0Tm9kZSA9PSAmaGVhZE5vZGUgKSA/IChOb2RlKikgMCA6IGhlYWROb2RlLm5l
eHROb2RlOwogICAgfTsKCmlubGluZSBOb2RlICogTGlzdDo6R2V0TGFzdCgpIGNvbnN0CiAgICB7
CiAgICByZXR1cm4gKCBoZWFkTm9kZS5wcmV2Tm9kZSA9PSAmaGVhZE5vZGUgKSA/IChOb2RlKikg
MCA6IGhlYWROb2RlLnByZXZOb2RlOwogICAgfQoKaW5saW5lIE5vZGUgKiBMaXN0OjpHZXROZXh0
KCBjb25zdCBOb2RlICogbm9kZSApIGNvbnN0CiAgICB7CiAgICByZXR1cm4gKCBub2RlLT5uZXh0
Tm9kZSA9PSAmaGVhZE5vZGUgKSA/IChOb2RlKikgMCA6IG5vZGUtPm5leHROb2RlOwogICAgfTsK
CmlubGluZSBOb2RlICogTGlzdDo6R2V0UHJldiggY29uc3QgTm9kZSAqIG5vZGUgKSBjb25zdAog
ICAgewogICAgcmV0dXJuICggbm9kZS0+cHJldk5vZGUgPT0gJmhlYWROb2RlICkgPyAoTm9kZSop
IDAgOiBub2RlLT5wcmV2Tm9kZTsKICAgIH07CgppbmxpbmUgTm9kZSAqIExpc3Q6OlJlbW92ZSAo
IE5vZGUgKiBub2RlICkKICAgIHsKICAgIG5vTm9kZXMgLT0gMTsKICAgIG5vZGUtPnByZXZOb2Rl
LT5uZXh0Tm9kZSA9IG5vZGUtPm5leHROb2RlOwogICAgbm9kZS0+bmV4dE5vZGUtPnByZXZOb2Rl
ID0gbm9kZS0+cHJldk5vZGU7CiAgICByZXR1cm4gbm9kZTsKICAgIH07CgppbmxpbmUgTm9kZSAq
IExpc3Q6OlJlbW92ZUZpcnN0KCApCiAgICB7CiAgICByZXR1cm4gKCBoZWFkTm9kZS5uZXh0Tm9k
ZSA9PSAmaGVhZE5vZGUgKSA/IChOb2RlKikwIDogUmVtb3ZlICggaGVhZE5vZGUubmV4dE5vZGUg
KTsKICAgIH07CgppbmxpbmUgTm9kZSAqIExpc3Q6OlJlbW92ZUxhc3QoICkKICAgIHsKICAgIHJl
dHVybiAoIGhlYWROb2RlLnByZXZOb2RlID09ICZoZWFkTm9kZSApID8gKE5vZGUqKTAgOiBSZW1v
dmUgKCBoZWFkTm9kZS5wcmV2Tm9kZSApOwogICAgfTsKCmlubGluZSBJbnQzMiBMaXN0OjpDb3Vu
dCggKSBjb25zdAogICAgewogICAgcmV0dXJuIChJbnQzMikgbm9Ob2RlczsKICAgIH07Cgppbmxp
bmUgSW50MzIgTGlzdDo6R2V0TnVtYmVyT2ZOb2RlcyggKSBjb25zdAogICAgewogICAgcmV0dXJu
IENvdW50KCk7CiAgICB9OwoKaW5saW5lIHZvaWQgTGlzdDo6SW5zZXJ0QWZ0ZXIgKCBOb2RlICog
YWZ0ZXJUaGlzTm9kZSwgTm9kZSAqIG5vZGUgKQogICAgewogICAgbm9kZS0+bmV4dE5vZGUgPSBh
ZnRlclRoaXNOb2RlLT5uZXh0Tm9kZTsKICAgIG5vZGUtPnByZXZOb2RlID0gYWZ0ZXJUaGlzTm9k
ZTsKICAgIGFmdGVyVGhpc05vZGUtPm5leHROb2RlID0gbm9kZTsKICAgIG5vZGUtPm5leHROb2Rl
LT5wcmV2Tm9kZSA9IG5vZGU7CiAgICBub05vZGVzICs9IDE7CiAgICB9CgppbmxpbmUgdm9pZCBM
aXN0OjpJbnNlcnRCZWZvcmUgKCBOb2RlICogYmVmb3JlVGhpc05vZGUsIE5vZGUgKiBub2RlICkK
ICAgIHsKICAgIG5vZGUtPnByZXZOb2RlID0gYmVmb3JlVGhpc05vZGUtPnByZXZOb2RlOwogICAg
bm9kZS0+bmV4dE5vZGUgPSBiZWZvcmVUaGlzTm9kZTsKICAgIGJlZm9yZVRoaXNOb2RlLT5wcmV2
Tm9kZSA9IG5vZGU7CiAgICBub2RlLT5wcmV2Tm9kZS0+bmV4dE5vZGUgPSBub2RlOwogICAgbm9O
b2RlcyArPSAxOwogICAgfQoKaW5saW5lIHZvaWQgTGlzdDo6SW5zZXJ0TGFzdCAoIE5vZGUgKiBu
b2RlICkKICAgIHsKICAgIG5vZGUtPm5leHROb2RlID0gJmhlYWROb2RlOwogICAgbm9kZS0+cHJl
dk5vZGUgPSBoZWFkTm9kZS5wcmV2Tm9kZTsKICAgIGhlYWROb2RlLnByZXZOb2RlID0gbm9kZTsK
ICAgIG5vZGUtPnByZXZOb2RlLT5uZXh0Tm9kZSA9IG5vZGU7CiAgICBub05vZGVzICs9IDE7CiAg
ICB9CgppbmxpbmUgdm9pZCBMaXN0OjpJbnNlcnRGaXJzdCAoIE5vZGUgKiBub2RlICkKICAgIHsK
ICAgIG5vZGUtPnByZXZOb2RlID0gJmhlYWROb2RlOwogICAgbm9kZS0+bmV4dE5vZGUgPSBoZWFk
Tm9kZS5uZXh0Tm9kZTsKICAgIGhlYWROb2RlLm5leHROb2RlID0gbm9kZTsKICAgIG5vZGUtPm5l
eHROb2RlLT5wcmV2Tm9kZSA9IG5vZGU7CiAgICBub05vZGVzICs9IDE7CiAgICB9CgppbmxpbmUg
dm9pZCBMaXN0OjpvcGVyYXRvciArPSAoTm9kZSAqIG5ld05vZGUpCiAgICB7CiAgICBJbnNlcnRM
YXN0ICggbmV3Tm9kZSApOwogICAgfTsKCmlubGluZSB2b2lkIExpc3Q6Om9wZXJhdG9yIC09IChO
b2RlICogYU5vZGUpCiAgICB7CiAgICBSZW1vdmUgKCBhTm9kZSApOwogICAgfTsKCmlubGluZSB2
b2lkIExpc3Q6Om9wZXJhdG9yICs9IChOb2RlJiBuZXdOb2RlKQogICAgewogICAgSW5zZXJ0TGFz
dCAoICZuZXdOb2RlICk7CiAgICB9OwoKaW5saW5lIHZvaWQgTGlzdDo6b3BlcmF0b3IgLT0gKE5v
ZGUmIGFOb2RlKQogICAgewogICAgUmVtb3ZlICggJmFOb2RlICk7CiAgICB9OwoKaW5saW5lIExp
c3QmIExpc3Q6Om9wZXJhdG9yICs9IChMaXN0JiBhTGlzdCkKICAgIHsKICAgIEFkZExpc3RUb0Vu
ZCAoICZhTGlzdCApOwogICAgcmV0dXJuICp0aGlzOwogICAgfTsKIyAzMjQgIi9ob21lL3JscC94
c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9MaXN0LmgiCnRlbXBsYXRlIDxj
bGFzcyBUPiBjbGFzcyBUTGlzdCA6IHByaXZhdGUgTGlzdAogICAgewogIHB1YmxpYzoKCgoKICAg
IHZvaWQgUmVzZXQgKCB2b2lkICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgTGlzdDo6UmVzZXQgKCApOwogICAgICAgICAgICAgICAgICAgIH07CgogICAgdm9pZCBB
ZGRMaXN0VG9Gcm9udCAoIFRMaXN0PFQ+KiBmcm9tTGlzdCApCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgIExpc3Q6OkFkZExpc3RUb0Zyb250ICggZnJvbUxpc3QgKTsK
ICAgICAgICAgICAgICAgICAgICB9OwoKICAgIHZvaWQgQWRkTGlzdFRvRW5kICggVExpc3Q8VD4q
IGZyb21MaXN0ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGlz
dDo6QWRkTGlzdFRvRW5kICggZnJvbUxpc3QgKTsKICAgICAgICAgICAgICAgICAgICB9OwoKCiAg
ICB2b2lkIEFkZExpc3RCZWZvcmUgKCBUICogYmVmb3JlTm9kZSwgVExpc3Q8VD4qIGZyb21MaXN0
ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGlzdDo6QWRkTGlz
dEJlZm9yZSAoIGJlZm9yZU5vZGUsIGZyb21MaXN0ICk7CiAgICAgICAgICAgICAgICAgICAgfTsK
CiAgICB2b2lkIEFkZExpc3RBZnRlciAoIFQgKiBhZnRlck5vZGUsIFRMaXN0PFQ+KiBmcm9tTGlz
dCApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExpc3Q6OkFkZExp
c3RBZnRlciAoIGFmdGVyTm9kZSwgZnJvbUxpc3QgKTsKICAgICAgICAgICAgICAgICAgICB9OwoK
CgogICAgSW50MzIgQ291bnQgKCApIGNvbnN0IHsgcmV0dXJuIExpc3Q6OkNvdW50KCk7IH07CiAg
ICBJbnQzMiBHZXROdW1iZXJPZk5vZGVzKCApIGNvbnN0IHsgcmV0dXJuIExpc3Q6OkNvdW50KCk7
IH07CgoKCiAgICBUICogUmVtb3ZlICggVCAqIG5vZGUgKQogICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFQgKikgTGlzdDo6UmVtb3ZlICggbm9kZSApOwog
ICAgICAgICAgICAgICAgICAgIH07CgogICAgdm9pZCBJbnNlcnRBZnRlciAoIFQgKiBhZnRlciwg
VCAqIG5vZGUgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMaXN0
OjpJbnNlcnRBZnRlciAoIGFmdGVyLCBub2RlICk7CiAgICAgICAgICAgICAgICAgICAgfTsKCiAg
ICB2b2lkIEluc2VydEJlZm9yZSAoIFQgKiBiZWZvcmUsIFQgKiBub2RlICkKICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGlzdDo6SW5zZXJ0QmVmb3JlICggYmVmb3Jl
LCBub2RlICk7CiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICB2b2lkIEluc2VydExhc3QgKCBU
ICogbm9kZSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExpc3Q6
Okluc2VydExhc3QgKCBub2RlICk7CiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICB2b2lkIElu
c2VydEZpcnN0ICggVCAqIG5vZGUgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBMaXN0OjpJbnNlcnRGaXJzdCAoIG5vZGUgKTsKICAgICAgICAgICAgICAgICAgICB9
OwoKICAgIFQgKiBSZW1vdmVGaXJzdCAoIHZvaWQgKQogICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKFQgKikgTGlzdDo6UmVtb3ZlRmlyc3QgKCk7CiAgICAg
ICAgICAgICAgICAgICAgfTsKCiAgICBUICogUmVtb3ZlTGFzdCAoIHZvaWQgKQogICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFQgKikgTGlzdDo6UmVtb3Zl
TGFzdCAoKTsKICAgICAgICAgICAgICAgICAgICB9OwoKICAgIFQgKiBHZXRGaXJzdCAoIHZvaWQg
KSBjb25zdAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KFQgKikgTGlzdDo6R2V0Rmlyc3QgKCk7CiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICBUICog
R2V0TGFzdCAoIHZvaWQgKSBjb25zdAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKFQgKikgTGlzdDo6R2V0TGFzdCAoKTsKICAgICAgICAgICAgICAgICAg
ICB9OwoKICAgIFQgKiBHZXROZXh0ICggY29uc3QgVCAqIGFmdGVyVGhpcyApIGNvbnN0CiAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoVCAqKSBMaXN0OjpH
ZXROZXh0IChhZnRlclRoaXMpOwogICAgICAgICAgICAgICAgICAgIH07CgogICAgVCAqIEdldFBy
ZXYgKCBjb25zdCBUICogYmVmb3JlVGhpcyApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoVCAqKSBMaXN0OjpHZXRQcmV2IChiZWZvcmVUaGlz
KTsKICAgICAgICAgICAgICAgICAgICB9OwoKICAgIFQgKiBHZXRQb3NpdGlvbiAoIFVJbnQzMiBw
b3NpdGlvbiApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IHJldHVybiAoVCAqKSBMaXN0OjpHZXRQb3NpdGlvbiAocG9zaXRpb24pOwogICAgICAgICAgICAg
ICAgICAgIH07CgogICAgdm9pZCBvcGVyYXRvciArPSAoIFQmIG5ld05vZGUpCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEluc2VydExhc3QgKCAmbmV3Tm9kZSApOwog
ICAgICAgICAgICAgICAgICAgIH07CgogICAgdm9pZCBvcGVyYXRvciArPSAoIFQgKiBuZXdOb2Rl
KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBJbnNlcnRMYXN0ICgg
bmV3Tm9kZSApOwogICAgICAgICAgICAgICAgICAgIH07CgogICAgdm9pZCBvcGVyYXRvciAtPSAo
IFQmIG5ld05vZGUpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFJl
bW92ZSAoICZuZXdOb2RlICk7CiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICB2b2lkIG9wZXJh
dG9yIC09ICggVCAqIG5ld05vZGUpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIFJlbW92ZSAoIG5ld05vZGUgKTsKICAgICAgICAgICAgICAgICAgICB9OwoKICAgIFRM
aXN0JiBvcGVyYXRvciArPSAoIFRMaXN0PFQ+JiBhTGlzdCApCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoVExpc3QmKSBMaXN0OjpvcGVyYXRvciArPSAo
YUxpc3QpOwogICAgICAgICAgICAgICAgICAgIH07CgogICAgdm9pZCBNZXJnZVNvcnQgKCBMaXN0
Q21wUm91dGluZSAqIGNtcCApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIExpc3Q6Ok1lcmdlU29ydCAoY21wKTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgfTsK
IyAyNiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVy
cy9kZXYvcGNpL2NvbW1vbi9QY2lEZXZJbmZvLmgiIDIKIyAxICIvaG9tZS9ybHAveHNjYWxlL3By
b2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3RyaW5nLmgiIDEKIyAyMSAiL2hvbWUvcmxw
L3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N0cmluZy5oIgojIDEgIi9v
cHQvSU5FVGFnbnUvYXJtLTMuMi4xLXhpbnUvYXJtLXhpbnUtZWxmL2luY2x1ZGUvc3RkZGVmLmgi
IDEKIyAxMTggIi9vcHQvSU5FVGFnbnUvYXJtLTMuMi4xLXhpbnUvYXJtLXhpbnUtZWxmL2luY2x1
ZGUvc3RkZGVmLmgiCnR5cGVkZWYgbG9uZyBpbnQgcHRyZGlmZl90OwojIDE2OCAiL29wdC9JTkVU
YWdudS9hcm0tMy4yLjEteGludS9hcm0teGludS1lbGYvaW5jbHVkZS9zdGRkZWYuaCIKdHlwZWRl
ZiBsb25nIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMjY3ICIvb3B0L0lORVRhZ251L2FybS0zLjIu
MS14aW51L2FybS14aW51LWVsZi9pbmNsdWRlL3N0ZGRlZi5oIgp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB3aW50X3Q7CiMgMjIgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUv
aW5jbHVkZS9zdHJpbmcuaCIgMgojIDEgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNj
YWxlLXhpbnUvaW5jbHVkZS9tZW1vcnkuaCIgMQoKCgoKCgojIDEgIi9vcHQvSU5FVGFnbnUvYXJt
LTMuMi4xLXhpbnUvYXJtLXhpbnUtZWxmL2luY2x1ZGUvc3RkZGVmLmgiIDEKIyA4ICIvaG9tZS9y
bHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvbWVtb3J5LmgiIDIKCgoK
IyAxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvTWVt
VXRpbHMuaCIgMQojIDQxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51
L2luY2x1ZGUvTWVtVXRpbHMuaCIKI3ByYWdtYSBpbnRlcmZhY2UKIyA1OCAiL2hvbWUvcmxwL3hz
Y2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL01lbVV0aWxzLmgiCiB2b2lkIG1l
bW9yeVNldCAoIFVJbnQ4ICpkc3QsIFVJbnQ4IHZhbCwgVUludDMyIGJ5dGVMZW5ndGggKTsKIHZv
aWQgbWVtb3J5U2V0ICggSW50OCAqZHN0LCBJbnQ4IHZhbCwgVUludDMyIGJ5dGVMZW5ndGggKTsK
IHZvaWQgbWVtb3J5U2V0ICggVUludDE2ICpkc3QsIFVJbnQxNiB2YWwsIFVJbnQzMiBieXRlTGVu
Z3RoICk7CiB2b2lkIG1lbW9yeVNldCAoIEludDE2ICpkc3QsIEludDE2IHZhbCwgVUludDMyIGJ5
dGVMZW5ndGggKTsKIHZvaWQgbWVtb3J5U2V0ICggVUludDMyICpkc3QsIFVJbnQzMiB2YWwsIFVJ
bnQzMiBieXRlTGVuZ3RoICk7CiB2b2lkIG1lbW9yeVNldCAoIEludDMyICpkc3QsIEludDMyIHZh
bCwgVUludDMyIGJ5dGVMZW5ndGggKTsKCgoKIHZvaWQgbWVtb3J5Q29weSAoIFVJbnQ4ICpkc3Qs
IGNvbnN0IFVJbnQ4ICpzcmMsIFVJbnQzMiBieXRlTGVuZ3RoICk7CiB2b2lkIG1lbW9yeUNvcHkg
KCBJbnQ4ICpkc3QsIGNvbnN0IEludDggKnNyYywgVUludDMyIGJ5dGVMZW5ndGggKTsKIHZvaWQg
bWVtb3J5Q29weSAoIFVJbnQxNiAqZHN0LCBjb25zdCBVSW50MTYgKnNyYywgVUludDMyIGJ5dGVM
ZW5ndGggKTsKIHZvaWQgbWVtb3J5Q29weSAoIEludDE2ICpkc3QsIGNvbnN0IEludDE2ICpzcmMs
IFVJbnQzMiBieXRlTGVuZ3RoICk7CiB2b2lkIG1lbW9yeUNvcHkgKCBVSW50MzIgKmRzdCwgY29u
c3QgVUludDMyICpzcmMsIFVJbnQzMiBieXRlTGVuZ3RoICk7CiB2b2lkIG1lbW9yeUNvcHkgKCBJ
bnQzMiAqZHN0LCBjb25zdCBJbnQzMiAqc3JjLCBVSW50MzIgYnl0ZUxlbmd0aCApOwoKCgogdm9p
ZCBtZW1vcnlDbGVhciAoIFVJbnQ4ICpkc3QsIFVJbnQzMiBieXRlTGVuZ3RoICk7CiB2b2lkIG1l
bW9yeUNsZWFyICggSW50OCAqZHN0LCBVSW50MzIgYnl0ZUxlbmd0aCApOwogdm9pZCBtZW1vcnlD
bGVhciAoIFVJbnQxNiAqZHN0LCBVSW50MzIgYnl0ZUxlbmd0aCApOwogdm9pZCBtZW1vcnlDbGVh
ciAoIEludDE2ICpkc3QsIFVJbnQzMiBieXRlTGVuZ3RoICk7CiB2b2lkIG1lbW9yeUNsZWFyICgg
VUludDMyICpkc3QsIFVJbnQzMiBieXRlTGVuZ3RoICk7CiB2b2lkIG1lbW9yeUNsZWFyICggSW50
MzIgKmRzdCwgVUludDMyIGJ5dGVMZW5ndGggKTsKCgoKCgoKIEludDMyIG1lbW9yeUNvbXBhcmUg
KCBVSW50OCAqbGVmdCwgY29uc3QgVUludDggKnJpZ2h0LCBVSW50MzIgYnl0ZUxlbmd0aCApOwog
SW50MzIgbWVtb3J5Q29tcGFyZSAoIEludDggKmxlZnQsIGNvbnN0IEludDggKnJpZ2h0LCBVSW50
MzIgYnl0ZUxlbmd0aCApOwogSW50MzIgbWVtb3J5Q29tcGFyZSAoIFVJbnQxNiAqbGVmdCwgY29u
c3QgVUludDE2ICpyaWdodCwgVUludDMyIGJ5dGVMZW5ndGggKTsKIEludDMyIG1lbW9yeUNvbXBh
cmUgKCBJbnQxNiAqbGVmdCwgY29uc3QgSW50MTYgKnJpZ2h0LCBVSW50MzIgYnl0ZUxlbmd0aCAp
OwogSW50MzIgbWVtb3J5Q29tcGFyZSAoIFVJbnQzMiAqbGVmdCwgY29uc3QgVUludDMyICpyaWdo
dCwgVUludDMyIGJ5dGVMZW5ndGggKTsKIEludDMyIG1lbW9yeUNvbXBhcmUgKCBJbnQzMiAqbGVm
dCwgY29uc3QgSW50MzIgKnJpZ2h0LCBVSW50MzIgYnl0ZUxlbmd0aCApOwoKCgoKCmlubGluZSB2
b2lkIG1lbW9yeVNldCAoIEludDggKiBkc3QsIEludDggdmFsLCBVSW50MzIgYnl0ZUxlbmd0aCAp
CiAgICB7CiAgICBtZW1vcnlTZXQgKCAoIFVJbnQ4ICogKSBkc3QsICggVUludDggKSB2YWwsIGJ5
dGVMZW5ndGggKTsKICAgIH07CgppbmxpbmUgdm9pZCBtZW1vcnlTZXQgKCBJbnQxNiAqIGRzdCwg
SW50MTYgdmFsLCBVSW50MzIgYnl0ZUxlbmd0aCApCiAgICB7CiAgICBtZW1vcnlTZXQgKCAoIFVJ
bnQxNiAqICkgZHN0LCAoIFVJbnQxNiApIHZhbCwgYnl0ZUxlbmd0aCApOwogICAgfTsKCmlubGlu
ZSB2b2lkIG1lbW9yeVNldCAoIEludDMyICogZHN0LCBJbnQzMiB2YWwsIFVJbnQzMiBieXRlTGVu
Z3RoICkKICAgIHsKICAgIG1lbW9yeVNldCAoICggVUludDMyICogKSBkc3QsICggVUludDMyICkg
dmFsLCBieXRlTGVuZ3RoICk7CiAgICB9OwoKaW5saW5lIHZvaWQgbWVtb3J5Q29weSAoIEludDgg
KiBkc3QsIGNvbnN0IEludDggKiBzcmMsIFVJbnQzMiBieXRlTGVuZ3RoICkKICAgIHsKICAgIG1l
bW9yeUNvcHkgKCAoIFVJbnQ4ICogKSBkc3QsICggY29uc3QgVUludDggKiApIHNyYywgYnl0ZUxl
bmd0aCApOwogICAgfTsKCmlubGluZSB2b2lkIG1lbW9yeUNvcHkgKCBJbnQxNiAqIGRzdCwgY29u
c3QgSW50MTYgKiBzcmMsIFVJbnQzMiBieXRlTGVuZ3RoICkKICAgIHsKICAgIG1lbW9yeUNvcHkg
KCAoIFVJbnQxNiAqICkgZHN0LCAoIGNvbnN0IFVJbnQxNiAqICkgc3JjLCBieXRlTGVuZ3RoICk7
CiAgICB9OwoKaW5saW5lIHZvaWQgbWVtb3J5Q29weSAoIEludDMyICogZHN0LCBjb25zdCBJbnQz
MiAqIHNyYywgVUludDMyIGJ5dGVMZW5ndGggKQogICAgewogICAgbWVtb3J5Q29weSAoICggVUlu
dDMyICogKSBkc3QsICggY29uc3QgVUludDMyICogKSBzcmMsIGJ5dGVMZW5ndGggKTsKICAgIH07
CgppbmxpbmUgdm9pZCBtZW1vcnlDbGVhciAoIFVJbnQ4ICpkc3QsIFVJbnQzMiBieXRlTGVuZ3Ro
ICkKICAgICAgICB7CiAgICAgICAgbWVtb3J5U2V0ICggZHN0LCAwLCBieXRlTGVuZ3RoICk7CiAg
ICAgICAgfQoKaW5saW5lIHZvaWQgbWVtb3J5Q2xlYXIgKCBJbnQ4ICpkc3QsIFVJbnQzMiBieXRl
TGVuZ3RoICkKICAgICAgICB7CiAgICAgICAgbWVtb3J5U2V0ICggZHN0LCAwLCBieXRlTGVuZ3Ro
ICk7CiAgICAgICAgfQoKaW5saW5lIHZvaWQgbWVtb3J5Q2xlYXIgKCBVSW50MTYgKmRzdCwgVUlu
dDMyIGJ5dGVMZW5ndGggKQogICAgICAgIHsKICAgICAgICBtZW1vcnlTZXQgKCBkc3QsIDAsIGJ5
dGVMZW5ndGggKTsKICAgICAgICB9CgppbmxpbmUgdm9pZCBtZW1vcnlDbGVhciAoIEludDE2ICpk
c3QsIFVJbnQzMiBieXRlTGVuZ3RoICkKICAgICAgICB7CiAgICAgICAgbWVtb3J5U2V0ICggZHN0
LCAwLCBieXRlTGVuZ3RoICk7CiAgICAgICAgfQoKaW5saW5lIHZvaWQgbWVtb3J5Q2xlYXIgKCBV
SW50MzIgKmRzdCwgVUludDMyIGJ5dGVMZW5ndGggKQogICAgICAgIHsKICAgICAgICBtZW1vcnlT
ZXQgKCBkc3QsIDAsIGJ5dGVMZW5ndGggKTsKICAgICAgICB9CgppbmxpbmUgdm9pZCBtZW1vcnlD
bGVhciAoIEludDMyICpkc3QsIFVJbnQzMiBieXRlTGVuZ3RoICkKICAgICAgICB7CiAgICAgICAg
bWVtb3J5U2V0ICggZHN0LCAwLCBieXRlTGVuZ3RoICk7CiAgICAgICAgfQojIDEyICIvaG9tZS9y
bHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvbWVtb3J5LmgiIDIKCmV4
dGVybiAiQyIgdm9pZCAqIG1lbWNjcHkgKHZvaWQgKnMxLGNvbnN0IHZvaWQgKnMyLGludCBjLCBz
aXplX3Qgbik7CmV4dGVybiAiQyIgdm9pZCAqIG1lbWNociAoY29uc3Qgdm9pZCAqczEsaW50IGMs
c2l6ZV90IG4pOwoKCgoKaW5saW5lIHZvaWQgKiBtZW1jcHkgKHZvaWQgKnMxLGNvbnN0IHZvaWQg
KnMyLHNpemVfdCBuKQogICAgICAgIHsKICAgICAgICBtZW1vcnlDb3B5ICggKFVJbnQ4ICopIHMx
LCAoVUludDggKikgczIsIG4gKTsKICAgICAgICByZXR1cm4gczE7CiAgICAgICAgfTsKCmlubGlu
ZSB2b2lkICogbWVtc2V0ICh2b2lkICpzMSxpbnQgYyAsIHNpemVfdCBuKQogICAgICAgIHsKICAg
ICAgICBtZW1vcnlTZXQgKCAoVUludDggKikgczEsIGMsIG4gKTsKICAgICAgICByZXR1cm4gczE7
CiAgICAgICAgfTsKCmlubGluZSBpbnQgbWVtY21wIChjb25zdCB2b2lkICpzMSxjb25zdCB2b2lk
ICpzMixzaXplX3QgbikKICAgICAgICB7CiAgICAgICAgcmV0dXJuIChpbnQpIG1lbW9yeUNvbXBh
cmUgKCAoVUludDggKikgczEsIChVSW50OCAqKSBzMiwgbiApOwogICAgICAgIH07CiMgMjMgIi9o
b21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zdHJpbmcuaCIg
MgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBjaGFyICogc3RyY3B5IChjaGFyICpzMSxjb25zdCBj
aGFyKnMyKTsKZXh0ZXJuIGNoYXIgKiBzdHJuY3B5IChjaGFyICpzMSxjb25zdCBjaGFyICpzMixz
aXplX3Qgbik7CmV4dGVybiBjaGFyICogc3RybmNweXRvbG93ZXIoY2hhciAqczEsY29uc3QgY2hh
ciAqczIsc2l6ZV90IG4pOwpleHRlcm4gY2hhciAqIHN0cm5jcHl0b3VwcGVyKGNoYXIgKnMxLGNv
bnN0IGNoYXIgKnMyLHNpemVfdCBuKTsKZXh0ZXJuIGNoYXIgKiBzdHJjYXQgKGNoYXIgKnMxLGNv
bnN0IGNoYXIqczIpOwpleHRlcm4gY2hhciAqIHN0cm5jYXQgKGNoYXIgKnMxLGNvbnN0IGNoYXIq
czIsc2l6ZV90IG4pOwpleHRlcm4gY2hhciAqIHN0cmNociAoY29uc3QgY2hhciAqczEsaW50IGMp
OwpleHRlcm4gY2hhciAqIHN0cnBicmsgKGNvbnN0IGNoYXIgKnMxLGNvbnN0IGNoYXIgKnMyKTsK
ZXh0ZXJuIGNoYXIgKiBzdHJ0b2sgKGNoYXIgKnMxLGNvbnN0IGNoYXIgKnMyKTsKCmV4dGVybiBp
bnQgc3RyY21wIChjb25zdCBjaGFyICpzMSxjb25zdCBjaGFyICpzMik7CmV4dGVybiBpbnQgc3Ry
bmNtcCAoY29uc3QgY2hhciAqczEsY29uc3QgY2hhciAqczIsc2l6ZV90IG4pOwpleHRlcm4gaW50
IHN0cmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CmV4dGVybiBpbnQg
c3RybmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMixzaXplX3Qgbik7CgoK
CgoKCmV4dGVybiBsb25nIHVuc2lnbmVkIGludCBzdHJsZW4gKGNvbnN0IGNoYXIgKnMxKTsKCgoK
CmV4dGVybiBzaXplX3Qgc3Ryc3BuIChjb25zdCBjaGFyICpzMSxjb25zdCBjaGFyICpzMik7CmV4
dGVybiBzaXplX3Qgc3RyY3NwbiAoY29uc3QgY2hhciAqczEsY29uc3QgY2hhciAqczIpOwoKZXh0
ZXJuIGNoYXIgKiBzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cik7CgpleHRlcm4gY2hhciAqIHN0cnJj
aHIgKGNvbnN0IGNoYXIgKnMxLGludCBjKTsKZXh0ZXJuIGNoYXIgKiBzdHJzdHIgKGNvbnN0IGNo
YXIgKnMsIGNvbnN0IGNoYXIgKmZpbmQpOwoKCmV4dGVybiB2b2lkIGJjb3B5IChjb25zdCB2b2lk
ICogc3JjLCB2b2lkICogZHN0LCBzaXplX3QgbGVuKTsKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQg
KnBjaCwgc2l6ZV90IGxlbik7CmV4dGVybiBpbnQgYmNtcCAoY29uc3Qgdm9pZCAqIHAxLCBjb25z
dCB2b2lkICogcDIsIHNpemVfdCBsZW4pOwoKCmV4dGVybiBjaGFyICogaW5kZXggKGNoYXIgKnNw
LGNoYXIgYyk7CgoKCmV4dGVybiBjaGFyICogcmluZGV4IChjaGFyICpzcCxjaGFyIGMpOwoKCmV4
dGVybiBjaGFyICogc3RyZXJyb3IgKGludCk7CgoKfQojIDI3ICIvaG9tZS9ybHAveHNjYWxlL3By
b2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaURldklu
Zm8uaCIgMgoKCgoKY2xhc3MgUGNpRGV2SW5mbyA6IHB1YmxpYyBOb2RlCiAgICAgICAgewogICAg
ICAgIHByaXZhdGUgOgogICAgICAgICAgICAgICAgVUludDMyIHBjaUFjY2Vzc1R5cGU7CiAgICAg
ICAgICAgICAgICBVSW50MzIgY2ZnQWRkcmVzczsKICAgICAgICAgICAgICAgIFVJbnQzMiBkZXZp
Y2VJZDsKICAgICAgICAgICAgICAgIEludDMyIGZ1bmN0aW9uOwogICAgICAgICAgICAgICAgVUlu
dDMyIHZlbmRvcklkOwoKCgoKICAgICAgICAgICAgICAgIFVJbnQzMiBwY2lCYXNlQWRkcmVzc2Vz
IFsgNiBdOwogICAgICAgICAgICAgICAgUGNpQmFzZUFkZHJlc3NUeXBlIGJhc2VBZGRyVHlwZTsK
ICAgICAgICAgICAgICAgIFVJbnQ4IGxhdGVuY3lUaW1lcjsKICAgICAgICAgICAgICAgIGNoYXIg
ZGV2TmFtZSBbIDUwIF07CgogICAgICAgIHB1YmxpYyA6CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGNpRGV2SW5mbyAoIHZvaWQgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB+IFBjaURldkluZm8gKCB2b2lkICkgeyB9OwoKICAgICAgICBpbmxpbmUg
VUludDMyIENmZ0FkZHIgKCB2b2lkICkgY29uc3QgeyByZXR1cm4gY2ZnQWRkcmVzcyA7IH07CiAg
ICAgICAgaW5saW5lIFVJbnQzMiBEZXZpY2VJZCAoIHZvaWQgKSBjb25zdCB7IHJldHVybiBkZXZp
Y2VJZCA7IH07CiAgICAgICAgaW5saW5lIEludDMyIEZ1bmN0aW9uICggdm9pZCApIGNvbnN0IHsg
cmV0dXJuIGZ1bmN0aW9uIDsgfTsKICAgICAgICBpbmxpbmUgVUludDMyIFZlbmRvcklkICggdm9p
ZCApIGNvbnN0IHsgcmV0dXJuIHZlbmRvcklkIDsgfTsKICAgICAgICBpbmxpbmUgVUludDMyIFBj
aUJhc2VBZGRyICggdm9pZCApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBiYXNlQWRkclR5cGUgPj0gMCAmJiBiYXNlQWRkclR5cGUgPCA2ICkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcGNpQmFzZUFkZHJlc3NlcyBbYmFzZUFkZHJUeXBlXTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgIGlubGluZSBQY2lCYXNl
QWRkcmVzc1R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VB
ZGRyVHlwZSggdm9pZCApIGNvbnN0IHsgcmV0dXJuIGJhc2VBZGRyVHlwZTsgfTsKICAgICAgICBp
bmxpbmUgY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEZXZOYW1lICggdm9pZCApIGNvbnN0IHsgcmV0dXJuIChjaGFyICopZGV2TmFtZTsgfTsKICAg
ICAgICBpbmxpbmUgVUludDggTGF0ZW5jeSAoIHZvaWQgKSBjb25zdCB7IHJldHVybiBsYXRlbmN5
VGltZXI7IH07CgogICAgICAgIGlubGluZSBVSW50MzIgUGNpQWRkcmVzcyAoIFVJbnQzMiByZWdO
dW0gKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cmVnTnVtID49IDAgJiYgcmVnTnVtIDwgNiApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBjaUJhc2VBZGRyZXNzZXMgW3JlZ051
bV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fTsKICAgICAgICBpbmxpbmUgVUludDMyIFBjaUNtZE1hc2sgKCB2b2lkICkgY29uc3QgeyByZXR1
cm4gcGNpQWNjZXNzVHlwZTsgfTsKICAgICAgICBpbmxpbmUgVUludDMyIFBjaUNtZE1hc2sgKCBV
SW50MzIgdmFsICkgeyBwY2lBY2Nlc3NUeXBlID0gdmFsOyB9OwoKICAgICAgICBpbmxpbmUgdm9p
ZCBDZmdBZGRyICggVUludDMyIGFkZHIgKSB7IGNmZ0FkZHJlc3MgPSBhZGRyIDsgfTsKICAgICAg
ICBpbmxpbmUgdm9pZCBEZXZpY2VJZCAoIFVJbnQzMiBkSWQgKSB7IGRldmljZUlkID0gZElkIDsg
fTsKICAgICAgICBpbmxpbmUgdm9pZCBGdW5jdGlvbiAoIEludDMyIGZ1bmMgKSB7IGZ1bmN0aW9u
ID0gZnVuYyA7IH07CiAgICAgICAgaW5saW5lIHZvaWQgVmVuZG9ySWQgKCBVSW50MzIgdklkICkg
eyB2ZW5kb3JJZCA9IHZJZCA7IH07CiAgICAgICAgaW5saW5lIHZvaWQgUGNpQmFzZUFkZHIgKCBV
SW50MzIgYWRkciApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBiYXNlQWRkclR5cGUgPj0gMCAmJiBiYXNlQWRkclR5cGUgPCA2ICkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lCYXNlQWRkcmVzc2Vz
IFtiYXNlQWRkclR5cGVdID0gYWRkcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKICAgICAgICBpbmxpbmUgdm9pZCBCYXNlQWRkclR5cGUoIFBjaUJh
c2VBZGRyZXNzVHlwZSB0ICkgeyBiYXNlQWRkclR5cGUgPSB0OyB9OwoKICAgICAgICBpbmxpbmUg
dm9pZCBQY2lBZGRyZXNzICggVUludDMyIHJlZ051bSwgVUludDMyIHZhbHVlICkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlZ051bSA+PSAwICYmIHJlZ051
bSA8IDYgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBjaUJhc2VBZGRyZXNzZXMgW3JlZ051bV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgaW5saW5lIHZvaWQg
RGV2TmFtZSAoIGNvbnN0IGNoYXIgKiBwTmFtZSApCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RybmNweSAoIGRldk5hbWUscE5hbWUsNTAgKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICBpbmxpbmUgY2hh
ciAqIERldk5hbWUgKCB2b2lkICkgeyByZXR1cm4gZGV2TmFtZTsgfQogICAgICAgIGlubGluZSB2
b2lkIExhdGVuY3kgKCBVSW50OCB0aW1lciApIHsgbGF0ZW5jeVRpbWVyID0gdGltZXI7IH07Cgog
ICAgICAgIGlubGluZSB2b2lkIEVuYWJsZU1lbW9yeSggdm9pZCApIHsgcGNpQWNjZXNzVHlwZSB8
PSAweDI7IH07CiAgICAgICAgaW5saW5lIHZvaWQgRGlzYWJsZU1lbW9yeSggdm9pZCApIHsgcGNp
QWNjZXNzVHlwZSAmPSB+MHgyOyB9OwoKICAgICAgICBpbmxpbmUgdm9pZCBFbmFibGVJTyAoIHZv
aWQgKSB7IHBjaUFjY2Vzc1R5cGUgfD0gMHgxOyB9OwogICAgICAgIGlubGluZSB2b2lkIERpc2Fi
bGVJTyAoIHZvaWQgKSB7IHBjaUFjY2Vzc1R5cGUgJj0gfjB4MTsgfTsKCgogICAgICAgICAgICAg
ICAgICAgIHZvaWQgU2hvdyAoIHZvaWQgKSBjb25zdDsKICAgICAgICB9OwojIDI4ICIvaG9tZS9y
bHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29t
bW9uL1BjaURldi5oIiAyCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2Vv
WGludS9zcmMvZHJpdmVycy9kZXYvcGNpL3hzY2FsZS9QY2lDb25maWcuaCIgMQojIDIzICIvaG9t
ZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kv
eHNjYWxlL1BjaUNvbmZpZy5oIgojcHJhZ21hIGludGVyZmFjZQoKIyAxICIvaG9tZS9ybHAveHNj
YWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1Bj
aUNvbmZpZ0Jhc2UuaCIgMQojIDIwICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9n
ZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaUNvbmZpZ0Jhc2UuaCIKI3ByYWdt
YSBpbnRlcmZhY2UKIyAzMCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGlu
dS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lDb25maWdCYXNlLmgiCiMgMSAiL2hvbWUv
cmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9TeXNNc2cuaCIg
MQojIDMyICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUv
c3lzL1N5c01zZy5oIgojcHJhZ21hIGludGVyZmFjZQoKIyAxICIvaG9tZS9ybHAveHNjYWxlL3By
b2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL2lzci5oIiAxCiMgNDkgIi9ob21lL3Js
cC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvaXNyLmgiCnR5cGVk
ZWYgdm9pZCAoKklzckhhbmRsZXIpICggdm9pZCAqIHBhcm0gKTsKCmV4dGVybiBJU3RhdHVzIGlu
c3RhbGxJc3IKICAgICAgICAoCiAgICAgICAgaW50IHZlY3RvciwKICAgICAgICBJc3JIYW5kbGVy
IGlzciwKICAgICAgICB2b2lkICpwYXJtPV9fbnVsbAoKCgogICAgICAgICk7CgpleHRlcm4gSVN0
YXR1cyByZW1vdmVJc3IKICAgICAgICAoCiAgICAgICAgaW50IHZlY3RvcgogICAgICAgICk7Cgpl
eHRlcm4gSUJvb2wgaXNySW5zdGFsbGVkCiAgICAgICAgKAogICAgICAgIGludCB2ZWN0b3IKICAg
ICAgICApOwoKZXh0ZXJuICJDIiB1bnNpZ25lZCBpbnQgZGlzYWJsZUludGVycnVwdFRhZ0FkZHJl
c3MgKCk7CmV4dGVybiAiQyIgdW5zaWduZWQgaW50IHJlc3RvcmVJbnRlcnJ1cHRUYWdBZGRyZXNz
ICgpOwpleHRlcm4gIkMiIHZvaWQgZGlzYWJsZUludFNldFN0YXRGbGFnICggdW5zaWduZWQgaW50
ICk7CmV4dGVybiAiQyIgdW5zaWduZWQgaW50IGRpc2FibGVJbnRHZXRTdGF0RmxhZyAoIHZvaWQg
KTsKCmV4dGVybiAiQyIgdm9pZCBkaXNhYmxlIChTVEFUV09SRCBwcyk7CmV4dGVybiAiQyIgdm9p
ZCByZXN0b3JlIChTVEFUV09SRCBwcyk7CmV4dGVybiAiQyIgdm9pZCBnZXRTdGF0V29yZCAoU1RB
VFdPUkQgcHMpOwpleHRlcm4gIkMiIHZvaWQgZW5hYmxlQWxsSW50ZXJydXB0cyAodm9pZCk7CmV4
dGVybiAiQyIgdm9pZCBkaXNhYmxlQWxsSW50ZXJydXB0cyh2b2lkKTsKZXh0ZXJuICJDIiB1bnNp
Z25lZCBpbnQgaW50TGV2ZWwgKHZvaWQpOwpleHRlcm4gIkMiIHVuc2lnbmVkIGludCBod0ludGVy
cnVwdExldmVsICh2b2lkKTsKZXh0ZXJuICJDIiB2b2lkIGRpc2FibGVBbGwgKFNUQVRXT1JEIHBz
KTsKIyA5NSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRl
L3N5cy9pc3IuaCIKZXh0ZXJuIHZvaWQgcmVib290ICh2b2lkKTsKZXh0ZXJuIElTdGF0dXMgYWRk
UmVib290Q2IgKElzckhhbmRsZXIsIHZvaWQgKiBoYW5kbGVyUGFybSk7CmV4dGVybiBJU3RhdHVz
IGV4ZWNSZWJvb3RMaXN0ICh2b2lkKTsKIyAzNSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9v
cy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9TeXNNc2cuaCIgMgojIDEgIi9ob21lL3JscC94c2Nh
bGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9pby5oIiAxCiMgMzEgIi9ob21lL3Js
cC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9pby5oIgojIDEgIi9vcHQv
SU5FVGFnbnUvYXJtLTMuMi4xLXhpbnUvYXJtLXhpbnUtZWxmL2luY2x1ZGUvc3RkYXJnLmgiIDEK
IyA3MCAiL29wdC9JTkVUYWdudS9hcm0tMy4yLjEteGludS9hcm0teGludS1lbGYvaW5jbHVkZS9z
dGRhcmcuaCIKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsKIyA5MyAiL29wdC9JTkVUYWdu
dS9hcm0tMy4yLjEteGludS9hcm0teGludS1lbGYvaW5jbHVkZS9zdGRhcmcuaCIKdm9pZCB2YV9l
bmQgKF9fZ251Y192YV9saXN0KTsKIyAxODEgIi9vcHQvSU5FVGFnbnUvYXJtLTMuMi4xLXhpbnUv
YXJtLXhpbnUtZWxmL2luY2x1ZGUvc3RkYXJnLmgiCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFf
bGlzdDsKIyAzMiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNs
dWRlL2lvLmgiIDIKCmV4dGVybiBpbnQgZ2V0c3RkaW4gKCk7CmV4dGVybiBpbnQgZ2V0c3Rkb3V0
ICgpOwpleHRlcm4gaW50IGdldHN0ZGVyciAoKTsKIyA0NiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9i
ZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2lvLmgiCmV4dGVybiBpbnQgY2xvc2UgKGludCBm
ZCk7CmV4dGVybiBpbnQgZ2V0YyAoaW50IGZkKTsKZXh0ZXJuIGludCBpb2N0bCAoaW50IGZkLCBp
bnQgZnVuYywgLi4uKTsKZXh0ZXJuIGludCBsc2VlayAoaW50IGZkLCBsb25nIG9mZnNldCwgaW50
IG9yaWdpbik7CmV4dGVybiBpbnQgb3BlbiAoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpOwpl
eHRlcm4gaW50IHB1dGMgKGludCBmZCwgY2hhciBjaCk7CmV4dGVybiBpbnQgcmVhZCAoaW50IGZk
LCB2b2lkICpidWZmLCB1bnNpZ25lZCBjb3VudCk7CmV4dGVybiBpbnQgcmVuYW1lIChjb25zdCBj
aGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKTsKZXh0ZXJuIGludCBybWRpciAoY29u
c3QgY2hhciAqcGF0aCk7CmV4dGVybiBpbnQgd3JpdGUgKGludCBmZCwgY29uc3Qgdm9pZCAqYnVm
ZiwgdW5zaWduZWQgY291bnQpOwpleHRlcm4gaW50IHVubGluayAoY29uc3QgY2hhciAqcGF0aCk7
CgoKCgoKCgpleHRlcm4gSW50MzIgcmVhZHggKGludCBmZCwgY2hhciAqYnVmZiwgdW5zaWduZWQg
Y291bnQpOwojIDk5ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2lu
Y2x1ZGUvaW8uaCIKZXh0ZXJuIGNoYXIgKiBmZ2V0cyAoaW50IGZkLCBjaGFyKiBidWZmLCBpbnQg
bWF4bGVuKTsKZXh0ZXJuIGludCBmcHV0cyAoaW50IGZkLCBjb25zdCBjaGFyICpidWZmKTsKZXh0
ZXJuIGludCBmZmx1c2ggKGludCBmZCk7CmV4dGVybiBjaGFyICogZ2V0cyAoY2hhciAqcyk7CmV4
dGVybiBpbnQgcHV0cyAoY2hhciAqcyk7CmV4dGVybiBpbnQgZnByaW50ZiAoaW50IGRldiwgY29u
c3QgY2hhciAqZm10LCAuLi4pOwpleHRlcm4gaW50IHByaW50ZiAoY29uc3QgY2hhciAqZm10LC4u
Lik7CmV4dGVybiBpbnQgdnByaW50ZiAoY29uc3QgY2hhciAqZm10LHZhX2xpc3QgYXJncyk7CmV4
dGVybiBpbnQga3ByaW50ZiAoY29uc3QgY2hhciAqZm10LC4uLik7CmV4dGVybiBpbnQgc3ByaW50
ZiAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmbXQsLi4uKTsKZXh0ZXJuIGludCB2ZnByaW50Zihp
bnQgZGV2LCBjb25zdCBjaGFyICpmbXQsdmFfbGlzdCBhcmdzKTsKZXh0ZXJuIGludCB2c3ByaW50
ZihjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZtdCx2YV9saXN0IGFyZ3MpOwpleHRlcm4gaW50IHNj
YW5mIChjb25zdCBjaGFyICpmbXQsIC4uLik7CmV4dGVybiBpbnQgc3NjYW5mIChjb25zdCBjaGFy
ICpzdHIsY29uc3QgY2hhciAqZm10LC4uLik7CmV4dGVybiB2b2lkIGR1bXAgKHVuc2lnbmVkIGNo
YXIgKmFkZHIsIGludCBieXRlcyk7CmV4dGVybiB2b2lkIGtkdW1wICh1bnNpZ25lZCBjaGFyICph
ZGRyLCBpbnQgYnl0ZXMpOwpleHRlcm4gdm9pZCBkdW1wICh1bnNpZ25lZCBsb25nICphZGRyLCBp
bnQgYnl0ZXMpOwpleHRlcm4gaW50IGRpciAoY2hhciAqcGF0aCwgQm9vbCBhZmxhZywgQm9vbCBs
ZmxhZyk7CmV4dGVybiBpbnQgZmRpciAoaW50IGZkLCBjaGFyICpwYXRoLCBCb29sIGFmbGFnLCBC
b29sIGxmbGFnKTsKZXh0ZXJuIGludCBjb3B5ZmlsZShjb25zdCBjaGFyICpvbGRwYXRoLCBjb25z
dCBjaGFyICpuZXdwYXRoKTsKZXh0ZXJuIGludCBjb3B5ZmlsZShjb25zdCBjaGFyICpvbGRwYXRo
LCBjb25zdCBjaGFyICpuZXdwYXRoLCBVSW50MzIgY29weVNpemUsIFVJbnQzMiBkb3RTaXplKTsK
ZXh0ZXJuIGludCBmaWxlbm8gKGludCBmZCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAq
KTsKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKik7CmV4dGVybiBGSUxFICogZm9wZW4gKGNvbnN0
IGNoYXIgKiBmaWxlbmFtZSwgY29uc3QgY2hhciAqIG1vZGUgKTsKZXh0ZXJuIGludCBmcHV0cyAo
Y29uc3QgY2hhciAqIGJ1ZmYsIEZJTEUgKik7CmV4dGVybiBjaGFyICogZmdldHMgKGNoYXIqIGJ1
ZmYsIGludCBtYXhsZW4sIEZJTEUgKik7CmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqLCBjb25z
dCBjaGFyICpmbXQsIC4uLik7CmV4dGVybiBpbnQgdmZwcmludGYoRklMRSAqLCBjb25zdCBjaGFy
ICpmbXQsIHZhX2xpc3QgYXJncyk7CmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKiwgbG9uZyBvZmZz
ZXQsIGludCBwdHJuYW1lKTsKZXh0ZXJuIHZvaWQgY2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJuIGlu
dCBmaWxlbm8gKEZJTEUgKik7CiMgMzYgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNj
YWxlLXhpbnUvaW5jbHVkZS9zeXMvU3lzTXNnLmgiIDIKIyAxICIvaG9tZS9ybHAveHNjYWxlL3By
b2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL3BvcnRzLmgiIDEKIyA0MSAiL2hvbWUv
cmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9wb3J0cy5oIgoj
IDEgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMv
c2VtYXBob3JlLmgiIDEKIyAxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14
aW51L2luY2x1ZGUvU2VtYXBob3JlLmgiIDEKIyA0NyAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92
NS9vcy94c2NhbGUteGludS9pbmNsdWRlL1NlbWFwaG9yZS5oIgojcHJhZ21hIGludGVyZmFjZQoj
IDY3ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvU2Vt
YXBob3JlLmgiCmNsYXNzIFNlbWFwaG9yZSA6IHB1YmxpYyBLU2VtYXBob3JlCiAgICAgICAgewpw
cml2YXRlOgoKcHJvdGVjdGVkOgoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNlbWFwaG9yZSAoIEludDMyIGluaXRpYWxWYWx1ZSA9IDAgKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIH4gU2VtYXBob3JlICggKTsKCgoKCiAgICBJU3RhdHVzIFdhaXQgKCB2b2lkICkg
Y29uc3Q7CgogICAgICAgIElTdGF0dXMgV2FpdCAoIE1pbGxpc2Vjb25kcyApIGNvbnN0OwoKCgoK
ICAgICAgICBJU3RhdHVzIEdpdmUgKCBJbnQzMiBudW1iZXJPZkdpdmVzID0gMSApIGNvbnN0OwoK
CgoKCiAgICAgICAgSVN0YXR1cyBUcnlXYWl0ICggdm9pZCApIGNvbnN0OwoKCgoKCiAgICAgICAg
VUludDMyIEhhbmRsZSAoIHZvaWQgKSBjb25zdDsKICAgICAgICB9OwoKCgoKCgppbmxpbmUgU2Vt
YXBob3JlOjpTZW1hcGhvcmUgKCBJbnQzMiBpbml0aWFsVmFsdWUgKSA6CiAgICAgICAgICAgICAg
ICBLU2VtYXBob3JlICggaW5pdGlhbFZhbHVlICkKICAgICAgICB7CiAgICAgICAgfQoKaW5saW5l
IFNlbWFwaG9yZTo6flNlbWFwaG9yZSAoICkKICAgICAgICB7CiAgICAgICAgfTsKCmlubGluZSBJ
U3RhdHVzIFNlbWFwaG9yZTo6V2FpdCAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICBy
ZXR1cm4gS1NlbWFwaG9yZTo6V2FpdCAoICk7CiAgICAgICAgfQoKCmlubGluZSBJU3RhdHVzIFNl
bWFwaG9yZTo6V2FpdCAoIE1pbGxpc2Vjb25kcyBtYXhNc2VjICkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgcmV0dXJuIEtTZW1hcGhvcmU6OldhaXQgKCBtYXhNc2VjICk7CiAgICAgICAgfQoKCmlu
bGluZSBJU3RhdHVzIFNlbWFwaG9yZTo6R2l2ZSAoIEludDMyIG51bWJlck9mR2l2ZXMgKSBjb25z
dAogICAgICAgIHsKICAgICAgICByZXR1cm4gS1NlbWFwaG9yZTo6R2l2ZSAoIG51bWJlck9mR2l2
ZXMgKTsKICAgICAgICB9CgppbmxpbmUgSVN0YXR1cyBTZW1hcGhvcmU6OlRyeVdhaXQgKCB2b2lk
ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIEtTZW1hcGhvcmU6OlRyeVdhaXQgKCAp
OwogICAgICAgIH0KCmlubGluZSBVSW50MzIgU2VtYXBob3JlOjpIYW5kbGUgKCB2b2lkICkgY29u
c3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIEtTZW1hcGhvcmU6OkhhbmRsZSAoICk7CiAgICAg
ICAgfQojIDIgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVk
ZS9zeXMvc2VtYXBob3JlLmgiIDIKIyA0MiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94
c2NhbGUteGludS9pbmNsdWRlL3N5cy9wb3J0cy5oIiAyCgoKCiMgMSAiL2hvbWUvcmxwL3hzY2Fs
ZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3Byb2Nlc3MuaCIgMQojIDk3ICIvaG9t
ZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvcHJvY2Vzcy5oIgoj
cHJhZ21hIGludGVyZmFjZQoKCgoKCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94
c2NhbGUteGludS9pbmNsdWRlL3N5cy9kZWJ1Zy5oIiAxCiMgMTggIi9ob21lL3JscC94c2NhbGUv
cHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvZGVidWcuaCIKI3ByYWdtYSBpbnRl
cmZhY2UKCiMgMSAiL29wdC9JTkVUYWdudS9hcm0tMy4yLjEteGludS9hcm0teGludS1lbGYvaW5j
bHVkZS9zdGRkZWYuaCIgMQojIDIxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2Fs
ZS14aW51L2luY2x1ZGUvc3lzL2RlYnVnLmgiIDIKCgpjbGFzcyBQcm9jZXNzOwoKY2xhc3MgQnJl
YWtQb2ludAogICAgICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgY2xhc3Mg
UHJvY2VzcyAqYWZmZWN0ZWRQcm9jZXNzOwogICAgICAgICAgICAgICAgQm9vbCB0dXJuZWRPbjsK
ICAgICAgICAgICAgICAgIEJvb2wgbm90VGhpc1RpbWU7CiAgICAgICAgICAgICAgICBpbnQgZGV2
OwogICAgICAgICAgICAgICAgSU5TVFJVQ1RJT05fUFRSIGFkZHJlc3M7CiAgICAgICAgICAgICAg
ICBCb29sIHZhbGlkOwogICAgICAgICAgICAgICAgQnJlYWtQb2ludCAqdGFza05leHQ7CiAgICAg
ICAgICAgICAgICBJTlNUUlVDVElPTiBvbGRJbnN0cnVjdGlvbjsKCiAgICAgICAgICAgICAgICBm
cmllbmQgY2xhc3MgUHJvY2VzczsKCiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgaW50
IGlkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmVh
a1BvaW50KGludCBpZD0wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQnJlYWtQb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VzcyAqYWZmZWN0ZWRQcm9j
ZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSU5TVFJVQ1RJT05fUFRSIGFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQ9MAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgICAgICAgICAgICAgIGludCB3aGVyZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VzcyAq
YWZmZWN0ZWRQcm9jZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSU5TVFJVQ1RJT05fUFRSIGFkZHJlc3MKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CgogICAgICAgICAgICAgICAgdmlydHVhbCB+QnJlYWtQb2ludCgpOwogICAgICAgICAgICAgICAg
aW50IGNhbmNlbCgpOwogICAgICAgICAgICAgICAgaW5saW5lIEJvb2wgaXNWYWxpZCAoKXtyZXR1
cm4gdmFsaWQ7fQogICAgICAgICAgICAgICAgaW5saW5lIFByb2Nlc3MgKmdldFByb2Nlc3MgKCl7
cmV0dXJuIGFmZmVjdGVkUHJvY2Vzczt9CiAgICAgICAgICAgICAgICBpbmxpbmUgSU5TVFJVQ1RJ
T05fUFRSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
dEFkZHJlc3MgKCl7cmV0dXJuIGFkZHJlc3M7fQogICAgICAgICB9OwojIDEwNCAiL2hvbWUvcmxw
L3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3Byb2Nlc3MuaCIgMgojIDEg
Ii9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9pbnRyVGlt
ZXIuaCIgMQojIDMzICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2lu
Y2x1ZGUvaW50clRpbWVyLmgiCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgojIDEgIi9ob21lL3JscC94
c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvS1RpbWUuaCIgMQojIDI1
ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0tU
aW1lLmgiCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgojIDEgIi9ob21lL3JscC94c2NhbGUvcHJvYmUv
djUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS90aW1lLmgiIDEKIyAyNSAiL2hvbWUvcmxwL3hzY2Fs
ZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3RpbWUuaCIKIyAxICIvaG9tZS9ybHAv
eHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEKCgoK
CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IHVzaG9ydF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyB1bG9uZ190Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCB1aW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Cgp0eXBl
ZGVmIGNoYXIgKiBjYWRkcl90OwoKdHlwZWRlZiB1bG9uZ190IGRldl90Owp0eXBlZGVmIHVsb25n
X3QgaW5vX3Q7CnR5cGVkZWYgdWxvbmdfdCBtb2RlX3Q7CnR5cGVkZWYgdWxvbmdfdCBubGlua190
Owp0eXBlZGVmIGxvbmcgb2ZmX3Q7CnR5cGVkZWYgbG9uZyBwaWRfdDsKIyAzMiAiL2hvbWUvcmxw
L3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy90eXBlcy5oIgp0eXBl
ZGVmIGxvbmcgY2xvY2tfdDsKIyA1MCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2Nh
bGUteGludS9pbmNsdWRlL3N5cy90eXBlcy5oIgp0eXBlZGVmIGludCBzc2l6ZV90OwoKCgoKCnR5
cGVkZWYgbG9uZyB1aWRfdDsKCgp0eXBlZGVmIHVpZF90IGdpZF90OwojIDI2ICIvaG9tZS9ybHAv
eHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvdGltZS5oIiAyCgoKCgoKc3Ry
dWN0IHRpbWV2YWwKICAgICAgICB7CiAgICAgICAgbG9uZyB0dl9zZWM7CiAgICAgICAgbG9uZyB0
dl91c2VjOwogICAgICAgIH07CgpzdHJ1Y3QgdG0KICAgICAgICB7CiAgICAgICAgaW50IHRtX3Nl
YzsKICAgICAgICBpbnQgdG1fbWluOwogICAgICAgIGludCB0bV9ob3VyOwogICAgICAgIGludCB0
bV9tZGF5OwogICAgICAgIGludCB0bV9tb247CiAgICAgICAgaW50IHRtX3llYXI7CiAgICAgICAg
aW50IHRtX3dkYXk7CiAgICAgICAgaW50IHRtX3lkYXk7CiAgICAgICAgaW50IHRtX2lzZHN0Owog
ICAgICAgIH07CgoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKiBnbXRpbWVfciAo
IGNvbnN0IHRpbWVfdCAqIGNsb2NrLCBzdHJ1Y3QgdG0gKiByZXN1bHQgKTsKZXh0ZXJuIHN0cnVj
dCB0bSAqIGxvY2FsdGltZSggY29uc3QgdGltZV90ICogY2xvY2ssIHN0cnVjdCB0bSAqIHJlc3Vs
dCApOwoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoIGNoYXIgKnRpbWVCdWZmZXIsIHNpemVfdCBz
aXplLCBjb25zdCBjaGFyICpwRm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0qIHJlc3VsdCApOwoKZXh0
ZXJuIGNoYXIqIHN0cnB0aW1lICggY29uc3QgY2hhciAqdGltZUJ1ZmZlciwgY29uc3QgY2hhciAq
cEZvcm1hdCwgc3RydWN0IHRtKiByZXN1bHQgKTsKCmV4dGVybiB0aW1lX3QgbWt0aW1lICggc3Ry
dWN0IHRtICpwVG0gKTsKCmV4dGVybiB0aW1lX3QgdGltZSAoIHRpbWVfdCAqIHRsb2MgKTsKCmV4
dGVybiBpbnQgZ2V0dGltZW9mZGF5ICggc3RydWN0IHRpbWV2YWwgKnRwLCB2b2lkICogKTsKCmV4
dGVybiBpbnQgZ2V0Z210b2Zmc2V0ICggKTsKCgp9CiMgMzEgIi9ob21lL3JscC94c2NhbGUvcHJv
YmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvS1RpbWUuaCIgMgojIDQ1ICIvaG9tZS9y
bHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0tUaW1lLmgiCmV4
dGVybiB2b2lkIGdldEdtdFRpbWUgKCBTZWNvbmRzICYsIE1pbGxpc2Vjb25kcyAmICk7CmV4dGVy
biBUaWNrcyBnZXRTeXN0ZW1UaWNrICggdm9pZCApOwpleHRlcm4gVGlja3MgZ2V0U3lzdGVtU2Vj
VGljayAoIHZvaWQgKTsKZXh0ZXJuIFRpY2tzIGdldFN5c3RlbVRpY2tEZWx0YSAoIFRpY2tzIHJl
ZlRpY2sgKTsKZXh0ZXJuIFRpY2tzIGdldFN5c3RlbVRpY2tPZlNlY29uZCAoIHZvaWQgKTsKZXh0
ZXJuIFRpY2tzIGdldFN5c3RlbVRpY2tSYXRlICggdm9pZCApOwpleHRlcm4gVUludDMyIGdldFN5
c3RlbUNsb2NrUmF0ZSAoIHZvaWQgKTsKCmV4dGVybiBJU3RhdHVzIGdldFN5c0dtdFRpbWUgKCBT
ZWNvbmRzICYgc2Vjb25kcywgTWlsbGlzZWNvbmRzICYgbWlsbHMgKTsKZXh0ZXJuIElTdGF0dXMg
Z2V0U3lzR210VGltZUZyb21UaWNrKCBUaWNrcywgU2Vjb25kcyAmLCBNaWxsaXNlY29uZHMgJiAp
OwpleHRlcm4gSVN0YXR1cyBzZXRTeXNHbXRUaW1lICggU2Vjb25kcywgTWlsbGlzZWNvbmRzICk7
CgoKCmNvbnN0IFVJbnQzMiBOQU5PID0gMTAwMDAwMDAwMDsKY29uc3QgVUludDMyIE1JQ1JPID0g
MTAwMDAwMDsKY29uc3QgVUludDMyIE1JTExJID0gMTAwMDsKY29uc3QgVUludDMyIE5BTk9TX1BF
Ul9NSUxMSSA9IChOQU5PIC8gTUlMTEkpOwpjb25zdCBVSW50MzIgTUlDUk9TX1BFUl9NSUxMSSA9
IChNSUNSTyAvIE1JTExJKTsKCmlubGluZSB2b2lkIE1JTExJX1RPX1RJTUVWQUwgKCBzdHJ1Y3Qg
dGltZXZhbCAmIHRzLCBVSW50MzIgbWlsbGkgKQogICAgICAgIHsKICAgICAgICB0cy50dl9zZWMg
PSAoIG1pbGxpICkgLyBNSUxMSTsKICAgICAgICB0cy50dl91c2VjID0gKCBtaWxsaSAlIE1JTExJ
ICkgKiBNSUNST1NfUEVSX01JTExJOwogICAgICAgIH0KCgoKCmV4dGVybiBJU3RhdHVzIGdldFN5
c0dtdFRpbWUgKCB1bnNpZ25lZCBsb25nICYgc2Vjb25kcywgdW5zaWduZWQgbG9uZyAmIG1pbGxz
ICk7CiMgMzkgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVk
ZS9pbnRyVGltZXIuaCIgMgoKY2xhc3MgSW50clRpbWVyCiAgICAgICAgewogICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgICAgICBJbnRyVGltZXIgKm5leHQ7CiAgICAgICAgICAgICAgICBJbnRy
VGltZXIgKnByZXY7CiAgICAgICAgICAgICAgICB2b2lkICgqcm91dGluZSkgKHZvaWQgKnBhcm0p
OwogICAgICAgICAgICAgICAgdm9pZCAqcGFybTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgZGVsdGFUaW1lOwogICAgICAgICAgICAgICAgaW50IHBlbmRpbmc7CiAgICAgICAgICAgICAg
ICBCb29sIHZhbGlkOwoKICAgICAgICAgICAgICAgIGZyaWVuZCBpbnQgaW50clRpbWVySW5pdCgp
OwogICAgICAgICAgICAgICAgZnJpZW5kIHZvaWQgaW50clRpbWVyUHJvY2VzcwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlRpY2tzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRyVGltZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW50clRpbWVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyb3V0aW5lKSh2b2lkICpwYXJtKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpw
YXJtID0gX19udWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHZpcnR1YWwgfkludHJUaW1lciAoKTsKICAg
ICAgICAgICAgICAgIHZvaWQgZGVmaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyb3V0aW5lKSh2b2lkICpwYXJtKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpwYXJtID0gX19udWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB2b2lkIHN0YXJ0ICh1bnNpZ25lZCBs
b25nIHRpbWUpOwogICAgICAgICAgICAgICAgdm9pZCBzdG9wICh2b2lkKTsKICAgICAgICAgICAg
ICAgIGlubGluZSBpbnQgc3RhdHVzKCkgY29uc3Qge3JldHVybiBwZW5kaW5nO30KICAgICAgICAg
ICAgICAgIGlubGluZSBCb29sIGlzVmFsaWQoKSBjb25zdCB7cmV0dXJuIHZhbGlkO30KICAgICAg
ICAgICAgICAgIElTdGF0dXMgU2hvdyAoIHZvaWQgKSBjb25zdDsKICAgICAgICB9OwoKCmV4dGVy
biBJQm9vbCBpc1RpbWVLbm93biAoIHZvaWQgKTsKIyAxMDUgIi9ob21lL3JscC94c2NhbGUvcHJv
YmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9wcm9jZXNzLmgiIDIKCgpjbGFzcyBLRXZlbnRM
aXN0OwpjbGFzcyBLVGltZXJMaXN0OwpjbGFzcyBLRW52aXJvbm1lbnQ7CmNsYXNzIEtUaHJlYWQ7
CmNsYXNzIFByb2Nlc3NlczsKCgp0eXBlZGVmIHZvaWQgKCpQcm9jZXNzRGVhdGhSb3V0aW5lKSh2
b2lkKik7CgoKCgoKCgplbnVtIFByb2Nlc3NTdGF0ZQogICAgICAgIHsKICAgICAgICBQUkRPUk1B
TlQgPSAweDAwLAogICAgICAgIFBSUkVBRFkgPSAweDAxLAogICAgICAgIFBSUkVDViA9IDB4MDIs
CiAgICAgICAgUFJTTEVFUCA9IDB4MDMsCiAgICAgICAgUFJXQUlUX1NFTSA9IDB4MDQsCiAgICAg
ICAgUFJUUkVDViA9IDB4MDUsCiAgICAgICAgUFJXQUlUX1RSSUcgPSAweDA2LAogICAgICAgIFBS
RVhQSVJJTkcgPSAweDA3LAogICAgICAgIFBSRVhDRVBUSU9OID0gMHgwOCwKICAgICAgICBQUlNU
T1BQRUQgPSAweDA5CiAgICAgICAgfTsKIyAxNzkgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUv
b3MveHNjYWxlLXhpbnUvaW5jbHVkZS9wcm9jZXNzLmgiCnN0cnVjdCBDb250ZXh0VmFyaWFibGUg
OiBwdWJsaWMgS2VybmVsVGhyZWFkRGF0YQogICAgICAgIHsKICAgICAgICB2b2lkICogdmFsdWU7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0
VmFyaWFibGUgKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+IENv
bnRleHRWYXJpYWJsZSAoKTsKCiAgICAgICAgdm9pZCByZXNldCAoIElCb29sIERlc3RydWN0ID0g
KChJQm9vbCkgMCkgKTsKICAgICAgICB9OwoKCgoKCgp0eXBlZGVmIHZvaWQgKCpFTlRSWV9QT0lO
VCkoLi4uKTsKCmNsYXNzIFByb2Nlc3MgOiBwdWJsaWMgUWVudHJ5CiAgICAgICAgewogICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgICAgICBOT0RFIG5vZGU7CgoKICAgICAgICAgICAgICAgIFdP
UkQgKiBiYXNpY0V4cEZyYW1lOwogICAgICAgICAgICAgICAgVVdPUkQgZXh0ZW5kZWRFeHBGcmFt
ZVsyMF07CgoKICAgICAgICAgICAgICAgIFByb2Nlc3NTdGF0ZSBwc3RhdGU7CiAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgZXhpdFN0YXR1czsKICAgICAgICAgICAgICAgIGludCBwcHJpbzsK
ICAgICAgICAgICAgICAgIGludCBzYXZlZFByaW9yaXR5OwogICAgICAgICAgICAgICAgS1NlbWFw
aG9yZSAqIHBzZW07CiAgICAgICAgICAgICAgICBQcm9jZXNzICogcG54dGtpbjsKICAgICAgICAg
ICAgICAgIGludCBwZGV2c1szXTsKICAgICAgICAgICAgICAgIGNoYXIgcG5hbWVbMzJdOwogICAg
ICAgICAgICAgICAgUkVHIHByZWdzWzIwXTsKICAgICAgICAgICAgICAgIHNob3J0IHBmbGFnczsK
CgoKICAgICAgICAgICAgICAgIFRSSUdHRVJNQVNLIHRyaWdnZXJzOwogICAgICAgICAgICAgICAg
VFJJR0dFUk1BU0sgd2FpdE1hc2s7CiAgICAgICAgICAgICAgICBUUklHR0VSTUFTSyB0cmlnZ2Vy
c0FsbG9jYXRlZDsKCiAgICAgICAgICAgICAgICBLVGhyZWFkICogbXlUaHJlYWQ7CiAgICAgICAg
ICAgICAgICBLRXZlbnRMaXN0ICogbXlFdmVudExpc3Q7CiAgICAgICAgICAgICAgICBLVGltZXJM
aXN0ICogbXlUaW1lckxpc3Q7CiAgICAgICAgICAgICAgICBLRW52aXJvbm1lbnQgKiBteUVudmly
b25tZW50OwoKICAgICAgICAgICAgICAgIGludCBfZXJybnVtYmVyOwoKCiAgICAgICAgICAgICAg
ICBpbnQgbWVzc2FnZUNvdW50OwogICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VRdWV1ZVNpemU7
CiAgICAgICAgICAgICAgICBXT1JEICogbWVzc2FnZUJhc2U7CiAgICAgICAgICAgICAgICBXT1JE
ICogbWVzc2FnZVRvcDsKICAgICAgICAgICAgICAgIFdPUkQgKiBtZXNzYWdlSW5wdXQ7CiAgICAg
ICAgICAgICAgICBXT1JEICogbWVzc2FnZU91dHB1dDsKCgoKICAgICAgICAgICAgICAgIEtTZW1h
cGhvcmUgZGVhdGhTZW07CgoKCiAgICAgICAgICAgICAgICBQcm9jZXNzRGVhdGhSb3V0aW5lIGRl
YXRoUm91dGluZTsKICAgICAgICAgICAgICAgIHZvaWQgKiBkZWF0aFBhcm07CgoKICAgICAgICAg
ICAgICAgIEludHJUaW1lciB0aW1lcjsKICAgICAgICAgICAgICAgIFVXT1JEIGNwdVRpbWU7CiAg
ICAgICAgICAgICAgICBVV09SRCBtaXNzZWRUaWNrczsKCgoKICAgICAgICAgICAgICAgIGludCBt
ZW1Vc2FnZUluZGV4UDsKICAgICAgICAgICAgICAgIGludCBtZW1Vc2FnZUluZGV4OwoKCgogICAg
ICAgICAgICAgICAgV09SRCAqIHBiYXNlOwogICAgICAgICAgICAgICAgaW50IHBzdGtsZW47CiAg
ICAgICAgICAgICAgICBXT1JEICogcGxpbWl0OwogICAgICAgICAgICAgICAgV09SRCAqIHBzdGtl
bmQ7CiAgICAgICAgICAgICAgICBpbnQgcGFyZ3M7CiAgICAgICAgICAgICAgICBXT1JEIGFyZ3Nb
OF07CiAgICAgICAgICAgICAgICBFTlRSWV9QT0lOVCBwYWRkcjsKCgogICAgICAgICAgICAgICAg
Q29udGV4dFZhcmlhYmxlIHZhcmlhYmxlc1szMl07CgoKICAgICAgICAgICAgICAgIElCb29sIHB0
Y3B1bW9kZTsKCgogICAgICAgICAgICAgICAgQnJlYWtQb2ludCAqIGJyZWFrUG9pbnRzOwogICAg
ICAgICAgICAgICAgQnJlYWtQb2ludCBzdGVwQnJlYWtzWzJdOwoKCiAgICAgICAgICAgICAgICBj
aGFyIGN3ZFsxMzJdOwojIDI4OSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUt
eGludS9pbmNsdWRlL3Byb2Nlc3MuaCIKICAgICAgICAgICAgICAgIHZvaWQgKiBwRGlzYWJsZUlu
dFN0YWNrOwogICAgICAgICAgICAgICAgVUludDMyIGRpc2FibGVJbnRDb3VudDsKICAgICAgICAg
ICAgICAgIHZvaWQgKiBwRGlzYWJsZUludE1heDsKICAgICAgICAgICAgICAgIHZvaWQgKiBwUmVz
dG9yZUludEludmFsaWQ7CgoKCiAgICAgICAgICAgICAgICBVSW50MzIga2luQ291bnQ7CgoKCgog
ICAgICAgICAgICAgICAgVUludDMyIGtpbkNvdW50TWF4OwoKICAgICAgICAgICAgICAgIGludCBy
b29tVG9Hcm93NjsKICAgICAgICAgICAgICAgIGludCByb29tVG9Hcm93NzsKICAgICAgICAgICAg
ICAgIGludCByb29tVG9Hcm93ODsKICAgICAgICAgICAgICAgIGludCByb29tVG9Hcm93OTsKCgoK
ICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBLU2VtYXBob3JlOwogICAgICAgICAgICAgICAg
ZnJpZW5kIGNsYXNzIEJyZWFrUG9pbnQ7CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgS1Ro
cmVhZE1hbmFnZXI7CiAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgUHJvY2Vzc2VzOwojIDMy
MiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3Byb2Nl
c3MuaCIKICAgICAgICAgICAgICAgIHZvaWQgcmVhZHkgKCBpbnQgcmVzY2ggKTsKICAgICAgICAg
ICAgICAgIHZvaWQgaW5zdGFsbEJyZWFrUG9pbnRzKCk7CiAgICAgICAgICAgICAgICB2b2lkIHJl
bW92ZUJyZWFrUG9pbnRzKCk7CiAgICAgICAgICAgICAgICBpbnQgcHJpbnRQcm9jZXNzRXhjZXB0
aW9uSW5mbyAoIGludCApOwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQcm9jZXNzICgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQcm9jZXNzIChLVGhyZWFkKiBjcmVhdG9yKTsKICAgICAgICB2
aXJ0dWFsIH4gUHJvY2VzcyAoKTsKICAgICAgICBJU3RhdHVzIHNwYXduCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVFJZX1BPSU5UIHBy
b2NhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBzc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5h
cmdzPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKICAgICAgICBJU3RhdHVzIGtpbGwgKCB1bnNpZ25lZCBpbnQgc3RhdHVzID0g
MCApOwogICAgICAgIElTdGF0dXMgc3VzcGVuZCAoIHZvaWQgKTsKICAgICAgICBJU3RhdHVzIHJl
c3VtZSAoIHZvaWQgKTsKICAgICAgICBpbmxpbmUgc2hvcnQgZ2V0cHJpbyAoIHZvaWQgKSBjb25z
dCB7cmV0dXJuIHBwcmlvO30KICAgICAgICBpbnQgY2hwcmlvICggaW50IHBwcmlvICk7CiAgICAg
ICAgSVN0YXR1cyBjaG5hbWUgKCBjb25zdCBjaGFyICpuYW1lKTsKICAgICAgICBJU3RhdHVzIHNl
dG5vayAoIHZvaWQgKTsKICAgICAgICBJU3RhdHVzIHNldG5vayAoIFByb2Nlc3MgKnByb2MpOwoK
ICAgICAgICBpbmxpbmUgUHJvY2Vzc1N0YXRlIGdldFN0YXRlICggdm9pZCApIGNvbnN0IHtyZXR1
cm4gcHN0YXRlO30KICAgICAgICBpbmxpbmUgY29uc3QgY2hhciAqIGdldE5hbWUgKCB2b2lkICkg
Y29uc3Qge3JldHVybiBwbmFtZTt9CiAgICAgICAgaW5saW5lIHVuc2lnbmVkIGludCBnZXRFeGl0
U3RhdHVzICggdm9pZCApIGNvbnN0IHtyZXR1cm4gZXhpdFN0YXR1czsgfTsKCiAgICAgICAgaW5s
aW5lIFVXT1JEIGdldENwdVRpbWUgKCB2b2lkICkgY29uc3QgeyByZXR1cm4gY3B1VGltZTsgfTsK
ICAgICAgICBpbmxpbmUgdm9pZCBSZXNldENwdVRpbWUgKCB2b2lkICkgeyBjcHVUaW1lID0gMDsg
fTsKCiAgICAgICAgaW5saW5lIFVXT1JEIGdldE1pc3NlZFRpY2tzICggdm9pZCApIGNvbnN0IHsg
cmV0dXJuIG1pc3NlZFRpY2tzOyB9OwogICAgICAgIGlubGluZSB2b2lkIFJlc2V0TWlzc2VkVGlj
a3MgKCB2b2lkICkgeyBtaXNzZWRUaWNrcyA9IDA7IH07CgogICAgICAgIGlubGluZSBpbnQgKiBn
ZXRFcnJvck51bWJlciAoIHZvaWQgKSB7IHJldHVybiAmX2Vycm51bWJlcjsgfTsKICAgICAgICBp
bmxpbmUgdm9pZCBzZXRFcnJvck51bWJlciAoIGludCBlICl7IF9lcnJudW1iZXIgPSBlOyB9Owog
ICAgICAgIGlubGluZSBLRXZlbnRMaXN0ICogZ2V0RXZlbnRMaXN0ICggdm9pZCApIHsgcmV0dXJu
IG15RXZlbnRMaXN0OyB9OwogICAgICAgIGlubGluZSBLVGltZXJMaXN0ICogZ2V0VGltZXJMaXN0
ICggdm9pZCApIHsgcmV0dXJuIG15VGltZXJMaXN0OyB9OwogICAgICAgIGlubGluZSBLVGhyZWFk
ICogZ2V0VGhyZWFkICggdm9pZCApIHsgcmV0dXJuIG15VGhyZWFkOyB9OwogICAgICAgIGlubGlu
ZSBLRW52aXJvbm1lbnQqIGdldEVudmlyb25tZW50ICggdm9pZCApIHsgcmV0dXJuIG15RW52aXJv
bm1lbnQ7IH07CiAgICAgICAgaW5saW5lIFByb2Nlc3NJZCBnZXRQcm9jZXNzSWQgKCB2b2lkICkg
eyByZXR1cm4gKFByb2Nlc3NJZCkgdGhpczsgfTsKCiAgICAgICAgaW5saW5lIFByb2Nlc3MgKiBn
ZXRub2sgKCB2b2lkICkgeyByZXR1cm4gcG54dGtpbjsgfQoKCgogICAgICAgIElTdGF0dXMgc2V0
ZGV2ICggaW50IF9zdGRpbixpbnQgX3N0ZG91dCxpbnQgX3N0ZGVyciApOwogICAgICAgIGludCBn
ZXRkZXYgKCBpbnQgaW5kZXgpOwoKCgogICAgICAgIGlubGluZSBjb25zdCBjaGFyICogZ2V0Y3dk
ICggdm9pZCApIGNvbnN0IHtyZXR1cm4gY3dkO30KICAgICAgICBpbmxpbmUgY29uc3QgY2hhciAq
IHNldGN3ZCAoIGNvbnN0IGNoYXIgKm5ld2N3ZCApIHtyZXR1cm4gc3RybmNweSAoY3dkLCBuZXdj
d2QsIDEzMik7fQogICAgICAgIElTdGF0dXMgQ2hkaXIgKCBjb25zdCBjaGFyICogbmV3ZGlyICk7
CgoKCiAgICAgICAgdm9pZCB0cmlnU2V0ICggVFJJR0dFUk1BU0sgbWFzayApOwogICAgICAgIHZv
aWQgdHJpZ1NldEZyb21Jc3IgKCBUUklHR0VSTUFTSyBtYXNrICk7CiAgICAgICAgdm9pZCB0cmln
Q2xlYXIgKCBUUklHR0VSTUFTSyBtYXNrICk7CiAgICAgICAgdm9pZCB0cmlnQ2xlYXJGcm9tSXNy
KCBUUklHR0VSTUFTSyBtYXNrICl7dHJpZ2dlcnMgJj0gfm1hc2s7fQogICAgICAgIFRSSUdHRVJN
QVNLIHRyaWdUZXN0ICggVFJJR0dFUk1BU0sgbWFzayApIGNvbnN0IHtyZXR1cm4gKHRyaWdnZXJz
ICYgbWFzayk7fQogICAgICAgIFRSSUdHRVJNQVNLIFRyaWdXYWl0ICggVFJJR0dFUk1BU0sgbWFz
ayA9IDB4RkZGRkZGRkYgKTsKICAgICAgICBUUklHR0VSTUFTSyBUcmlnQWxsb2MgKCB2b2lkICk7
CiAgICAgICAgVFJJR0dFUk1BU0sgVHJpZ0FsbG9jICggSW50MzIgdGhlRmQgKTsKICAgICAgICB2
b2lkIFRyaWdGcmVlICggVFJJR0dFUk1BU0sgKTsKCgoKICAgICAgICBpbmxpbmUgSUJvb2wgZ2V0
VGNwVXJnZW50TW9kZSAoIHZvaWQgKSBjb25zdCB7IHJldHVybiBwdGNwdW1vZGU7IH0KICAgICAg
ICBpbmxpbmUgdm9pZCBzZXRUY3BVcmdlbnRNb2RlICggSUJvb2wgbW9kZSApIHsgcHRjcHVtb2Rl
PW1vZGU7IH0KCgoKICAgICAgICBJU3RhdHVzIFNsZWVwVGlja3MgKCB1bnNpZ25lZCBpbnQgbWls
bGlzICk7CgoKCiAgICAgICAgaW5saW5lIGludCBhbGxvY2F0ZVZhcmlhYmxlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KiBwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICgqcENsZWFudXApKFdPUkQgdmFsdWUpID0gX19udWxsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgdmFsdWUg
PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgICAgICBpbnQgYWxsb2NhdGVWYXJpYWJsZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcE5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFRE
Q2xlYW51cFJvdXRpbmUgcENsZWFudXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIHZhbHVlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICBJU3RhdHVzIHJl
bW92ZVZhcmlhYmxlICggY29uc3QgY2hhciAqcE5hbWUgKTsKICAgICAgICBJU3RhdHVzIHJlbW92
ZVZhcmlhYmxlICggaW50IGluZGV4ICk7CiAgICAgICAgV09SRCBnZXRWYXJpYWJsZSAoIGNvbnN0
IGNoYXIgKnBOYW1lICkgY29uc3Q7CiAgICAgICAgV09SRCBnZXRWYXJpYWJsZSAoIGludCBpbmRl
eCApIGNvbnN0OwogICAgICAgIElTdGF0dXMgc2V0VmFyaWFibGUgKCBjb25zdCBjaGFyICpwTmFt
ZSwgV09SRCB2YWx1ZSA9IDAgKTsKICAgICAgICBJU3RhdHVzIHNldFZhcmlhYmxlICggaW50IGlu
ZGV4LCBXT1JEIHZhbHVlID0gMCApOwoKCgoKICAgICAgICBXT1JEIFJlY2VpdmUgKCB2b2lkICk7
CiAgICAgICAgSVN0YXR1cyBzZW5kICggV09SRCBtc2cgKSB7IHJldHVybiBTZW5kIChtc2cpOyB9
OwogICAgICAgIElTdGF0dXMgU2VuZCAoIFdPUkQgbXNnICk7CiAgICAgICAgaW5saW5lIGludCBS
ZWN2TXNnQ291bnQgKCB2b2lkICkgY29uc3QgeyByZXR1cm4gbWVzc2FnZUNvdW50OyB9CiAgICAg
ICAgSVN0YXR1cyBSZWN2Q2xlYXIgKCB2b2lkICk7CiAgICAgICAgV09SRCBSZWN2U3RhdHVzICgg
dm9pZCApIGNvbnN0IHsgcmV0dXJuIG1lc3NhZ2VDb3VudDsgfTsKICAgICAgICBXT1JEIFJlY3ZU
aW1lZFdhaXQgKCBpbnQgbWF4V2FpdEluMTB0aHNPZlNlY29uZCApOwogICAgICAgIElTdGF0dXMg
U2V0UmVjdlF1ZVNpemUgKCBpbnQgbm9PdXRzdGFuZGluZ01lc3NhZ2VzICk7CgoKCiAgICAgICAg
SVN0YXR1cyBJbnN0YWxsRGVhdGhSb3V0aW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NEZWF0aFJvdXRpbmUgcm91dGluZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICogcGFybSA9IF9fbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgSVN0YXR1cyBSZW1vdmVEZWF0aFJvdXRpbmUo
IHZvaWQgKTsKCgoKICAgICAgICB2b2lkIGRlbGV0ZUJyZWFrUG9pbnRzICggdm9pZCApOwogICAg
ICAgIEJyZWFrUG9pbnQgKiBmaW5kQnJlYWtQb2ludCAoIElOU1RSVUNUSU9OX1BUUiBhZGRyZXNz
ICk7CiAgICAgICAgSVN0YXR1cyBjb250ICggdm9pZCApOwogICAgICAgIElTdGF0dXMgc3RlcCAo
IHZvaWQgKTsKICAgICAgICB2b2lkIGR1bXBTdGFjayAoIHZvaWQgKTsKICAgICAgICBpbnQgY2hl
Y2tTdGFjayAoIHZvaWQgKTsKICAgICAgICBpbmxpbmUgaW50IE1lbVVzYWdlSW5kZXggKCB2b2lk
ICkgeyByZXR1cm4gbWVtVXNhZ2VJbmRleDsgfQogICAgICAgIGlubGluZSBpbnQgTWVtVXNhZ2VJ
bmRleFAgKCB2b2lkICkgeyByZXR1cm4gbWVtVXNhZ2VJbmRleFA7IH0KICAgICAgICBpbmxpbmUg
aW50IFBzdGtsZW4gKCB2b2lkICkgeyByZXR1cm4gcHN0a2xlbjsgfQogICAgICAgIGlubGluZSB2
b2lkICogRGlzYWJsZUludFN0YWNrICggdm9pZCApIHsgcmV0dXJuIHBEaXNhYmxlSW50U3RhY2s7
IH0KICAgICAgICBpbmxpbmUgVUludDMyIERpc2FibGVJbnRDb3VudCAoIHZvaWQgKSB7IHJldHVy
biBkaXNhYmxlSW50Q291bnQ7IH0KICAgICAgICBpbmxpbmUgdm9pZCBEaXNhYmxlSW50Q291bnQg
KCBVSW50MzIgYyApIHsgZGlzYWJsZUludENvdW50ID0gYzsgfQogICAgICAgIGlubGluZSB2b2lk
ICogRGlzYWJsZUludE1heCAoIHZvaWQgKSB7IHJldHVybiBwRGlzYWJsZUludE1heDsgfQogICAg
ICAgIGlubGluZSB2b2lkICogUmVzdG9yZUludEludmFsaWQgKCB2b2lkICkgeyByZXR1cm4gcFJl
c3RvcmVJbnRJbnZhbGlkOyB9CiAgICAgICAgaW5saW5lIEludDMyIE1lc3NhZ2VRdWV1ZVNpemUo
IHZvaWQgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIG1lc3NhZ2VRdWV1ZVNpemU7IH0KICAgICAgICBpbmxpbmUg
VUludDMyIEtpbkNvdW50ICggdm9pZCApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4ga2luQ291bnQ7IH0KICAgICAg
ICBpbmxpbmUgVUludDMyIEtpbkNvdW50TWF4ICggdm9pZCApIGNvbnN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4ga2luQ291
bnRNYXg7IH0KICAgICAgICB9OwoKCgoKCgpleHRlcm4gUHJvY2VzcyAqZ2V0UHJvY2Vzc0Zyb21O
YW1lKGNoYXIgKm5hbWUpOwpleHRlcm4gUHJvY2VzcyAqZ2V0UHJvY2Vzc0Zyb21TdHJpbmcoY2hh
ciAqbmFtZSk7CmlubGluZSBQcm9jZXNzICpnZXRQcm9jZXNzICggdm9pZCApCiAgICAgICAgewog
ICAgICAgIGV4dGVybiBQcm9jZXNzICogY3VycmVudFByb2Nlc3M7CiAgICAgICAgcmV0dXJuIGN1
cnJlbnRQcm9jZXNzOwogICAgICAgIH07CmV4dGVybiBJQm9vbCBpc1ZhbGlkUHJvY2VzcyAoIFBy
b2Nlc3MgKiBwUHJvY2VzcyApOwoKCgoKaW5saW5lIGludCBQcm9jZXNzOjphbGxvY2F0ZVZhcmlh
YmxlCiAgICAgICAgKAogICAgICAgIGNvbnN0IGNoYXIgKiBwTmFtZSwKICAgICAgICB2b2lkICgq
cENsZWFudXApKFdPUkQpLAogICAgICAgIFdPUkQgdmFsdWUKICAgICAgICApCiAgICAgICAgewog
ICAgICAgIHJldHVybiBhbGxvY2F0ZVZhcmlhYmxlICggcE5hbWUsIChQVERDbGVhbnVwUm91dGlu
ZSkgcENsZWFudXAsICh2b2lkICopIHZhbHVlICk7CiAgICAgICAgfTsKIyA1MDMgIi9ob21lL3Js
cC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9wcm9jZXNzLmgiCmlubGlu
ZSBJU3RhdHVzIGluc3RhbGxEZWF0aFJvdXRpbmUKICAgICAgICAgICAgICAgICgKICAgICAgICAg
ICAgICAgIFByb2Nlc3NEZWF0aFJvdXRpbmUgcm91dGluZSwKICAgICAgICAgICAgICAgIHZvaWQg
KiBwYXJtID0gX19udWxsCiAgICAgICAgICAgICAgICApCiAgICAgICAgewogICAgICAgIHJldHVy
biBnZXRQcm9jZXNzICgpLT5JbnN0YWxsRGVhdGhSb3V0aW5lICggcm91dGluZSwgcGFybSApOwog
ICAgICAgIH07CgppbmxpbmUgSVN0YXR1cyByZW1vdmVEZWF0aFJvdXRpbmUoIHZvaWQgKQogICAg
ICAgIHsKICAgICAgICByZXR1cm4gZ2V0UHJvY2VzcyAoKS0+UmVtb3ZlRGVhdGhSb3V0aW5lICgg
KTsKICAgICAgICB9OwojIDUyNCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUt
eGludS9pbmNsdWRlL3Byb2Nlc3MuaCIKaW5saW5lIFdPUkQgcmVjZWl2ZSggdm9pZCApCiAgICAg
ICAgewogICAgICAgIHJldHVybiBnZXRQcm9jZXNzICgpLT5SZWNlaXZlICggKTsKICAgICAgICB9
OwoKaW5saW5lIFdPUkQgcmVjdmNsciggdm9pZCApCiAgICAgICAgewogICAgICAgIHJldHVybiBn
ZXRQcm9jZXNzICgpLT5SZWN2Q2xlYXIgKCApOwogICAgICAgIH07CgppbmxpbmUgV09SRCByZWN2
c3RzKCB2b2lkICkKICAgICAgICB7CiAgICAgICAgcmV0dXJuIGdldFByb2Nlc3MgKCktPlJlY3ZT
dGF0dXMgKCApOwogICAgICAgIH07CgppbmxpbmUgV09SRCByZWN2dGltKGludCBtYXh3YWl0KQoK
ICAgICAgICB7CiAgICAgICAgcmV0dXJuIGdldFByb2Nlc3MgKCktPlJlY3ZUaW1lZFdhaXQgKCBt
YXh3YWl0ICk7CiAgICAgICAgfTsKCmlubGluZSBJU3RhdHVzIHNldFJlY2VpdmVRdWV1ZVNpemUK
ICAgICAgICAoCiAgICAgICAgaW50IG5vT3V0c3RhbmRpbmdNZXNzYWdlcwogICAgICAgICkKICAg
ICAgICB7CiAgICAgICAgcmV0dXJuIGdldFByb2Nlc3MgKCktPlNldFJlY3ZRdWVTaXplICggbm9P
dXRzdGFuZGluZ01lc3NhZ2VzICk7CiAgICAgICAgfTsKCgoKCmlubGluZSBUUklHR0VSTUFTSyB0
cmlnV2FpdCAoIFRSSUdHRVJNQVNLIG1hc2sgPSAweEZGRkZGRkZGICkKICAgICAgICB7CiAgICAg
ICAgcmV0dXJuIGdldFByb2Nlc3MgKCktPlRyaWdXYWl0ICggbWFzayApOwogICAgICAgIH07CgoK
CgppbmxpbmUgSVN0YXR1cyBTbGVlcFRpY2sgKCB1bnNpZ25lZCBpbnQgdGlja3NUb1NsZWVwICkK
ICAgICAgICB7CiAgICAgICAgcmV0dXJuIGdldFByb2Nlc3MgKCktPlNsZWVwVGlja3MgKCB0aWNr
c1RvU2xlZXAgKTsKICAgICAgICB9CgoKCmlubGluZSBJU3RhdHVzIHNsZWVwICh1bnNpZ25lZCBp
bnQgbikKICAgICAgICB7CiAgICAgICAgcmV0dXJuIGdldFByb2Nlc3MgKCktPlNsZWVwVGlja3Mg
KCBnZXRTeXN0ZW1UaWNrUmF0ZSAoKSAqIG4gKTsKICAgICAgICB9CgoKCmlubGluZSBJU3RhdHVz
IHNsZWVwMTAgKHVuc2lnbmVkIGludCBuKQogICAgICAgIHsKICAgICAgICByZXR1cm4gZ2V0UHJv
Y2VzcyAoKS0+U2xlZXBUaWNrcyAoICggZ2V0U3lzdGVtVGlja1JhdGUgKCkgLyAxMCApICogbiAp
OwogICAgICAgIH0KCgoKCgoKaW5saW5lIElTdGF0dXMgY2hkaXIgKGNvbnN0IGNoYXIgKmRpcikK
ICAgICAgICB7CiAgICAgICAgcmV0dXJuIGdldFByb2Nlc3MgKCktPkNoZGlyICggZGlyICk7CiAg
ICAgICAgfTsKCgoKCnN0cnVjdCBEaXNhYmxlSW50U3RhY2tOb2RlCiAgICAgICAgewogICAgICAg
IFVJbnQzMiByZXR1cm5BZGRyZXNzOwogICAgICAgIFVJbnQzMiBzdWJ0aWNrczsKICAgICAgICB9
OwoKdm9pZCBwcm9jZXNzRGlzYWJsZUludGVycnVwdFB1c2ggKCBVSW50MzIgcmV0dXJuQWRkcmVz
cyApOwp2b2lkIHByb2Nlc3NEaXNhYmxlSW50ZXJydXB0UG9wICggVUludDMyIHJldHVybkFkZHJl
c3MgKTsKdm9pZCBwcm9jZXNzRGlzYWJsZUludGVycnVwdFNob3cgKCBQcm9jZXNzICogcFByb2Mg
KTsKIyA0NiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRl
L3N5cy9wb3J0cy5oIiAyCgp0eXBlZGVmIHZvaWQgKCpQb3J0RGlzcG9zZSkgKCB2b2lkICogKTsK
CmNsYXNzIFBvcnQKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIEJv
b2wgdmFsaWQ7CiAgICAgICAgICAgICAgICBTZW1hcGhvcmUgcHRzc2VtOwogICAgICAgICAgICAg
ICAgU2VtYXBob3JlIHB0cnNlbTsKICAgICAgICAgICAgICAgIGludCBwdE1heEluZGV4OwogICAg
ICAgICAgICAgICAgaW50IHB0c2VuZDsKICAgICAgICAgICAgICAgIGludCBwdHJlY2VpdmU7CiAg
ICAgICAgICAgICAgICB2b2lkICoqcHRxdWV1ZTsKICAgICAgICAgICAgICAgIFBvcnREaXNwb3Nl
IGRpc3Bvc2U7CgogICAgICAgICAgICAgICAgUHJvY2VzcyAqdHJpZ2dlclNldFByb2Nlc3M7CiAg
ICAgICAgICAgICAgICBQcm9jZXNzICp0cmlnZ2VyQ2xyUHJvY2VzczsKICAgICAgICAgICAgICAg
IFRSSUdHRVJNQVNLIHRyaWdnZXJNYXNrOwoKICAgICAgICAgICAgICAgIFByb2Nlc3MgKnJlY3ZQ
cm9jZXNzOwogICAgICAgICAgICAgICAgQm9vbCBpc1RpbWluZ1JlY2VpdmU7CgoKICAgICAgICAg
ICAgICAgIHZvaWQgZmx1c2goKTsKCiAgICAgICAgICAgICAgICBJU3RhdHVzIEluaXQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUG9ydERpc3Bvc2UgZGlzcG9zZUZ1bmMgPSBfX251bGwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnQoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQb3J0RGlzcG9zZSBkaXNwb3NlRnVuYyA9IF9fbnVsbAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB+IFBvcnQoKTsKCgoKICAgICAgICAgICAgICAgIElTdGF0dXMg
QXNzaWduCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBvcnREaXNwb3NlIGRpc3Bvc2VGdW5jID0gX19udWxsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAg
ICAgICAgICAgIElTdGF0dXMgcmVzZXQoKTsKICAgICAgICAgICAgICAgIEludCBjb3VudCgpOwog
ICAgICAgICAgICAgICAgSVN0YXR1cyBzZW5kKHZvaWQgKm1zZyk7CiAgICAgICAgICAgICAgICB2
b2lkICogcmVjZWl2ZSgpOwogICAgICAgICAgICAgICAgdm9pZCAqIHBlZWsoKTsKICAgICAgICAg
ICAgICAgIElTdGF0dXMgc2VuZE5CKHZvaWQgKm1zZyk7CiAgICAgICAgICAgICAgICB2b2lkICog
cmVjZWl2ZU5CKCk7CgogICAgICAgICAgICAgICAgdm9pZCAqcmVjZWl2ZVRpbWVkKGludCB0ZW50
aHNPZlNlY29uZHMpOwoKCiAgICAgICAgICAgICAgICBpbmxpbmUgQm9vbCBpc1ZhbGlkKCl7cmV0
dXJuIHZhbGlkO30KCgogICAgICAgICAgICAgICAgSVN0YXR1cyBlbmFibGVUcmlnIChUUklHR0VS
TUFTSyBtYXNrLCBCb29sIGNsZWFyRmxhZyk7CiAgICAgICAgfTsKIyAzNyAiL2hvbWUvcmxwL3hz
Y2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9TeXNNc2cuaCIgMgoKIyAx
ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL2xp
c3QuaCIgMQojIDM5ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2lu
Y2x1ZGUvc3lzL1N5c01zZy5oIiAyCiMgMSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94
c2NhbGUteGludS9pbmNsdWRlL0lTdHJpbmcuaCIgMQojIDM3ICIvaG9tZS9ybHAveHNjYWxlL3By
b2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvSVN0cmluZy5oIgojIDEgIi9ob21lL3JscC94
c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9pb1V0aWxzLmgiIDEKIyAzNiAi
L2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2lvVXRpbHMu
aCIKI3ByYWdtYSBpbnRlcmZhY2UKIyA1MyAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94
c2NhbGUteGludS9pbmNsdWRlL2lvVXRpbHMuaCIKI3ByYWdtYSBpbnRlcmZhY2UKIyA2NiAiL2hv
bWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2lvVXRpbHMuaCIK
IyAxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lz
L0tpb1V0aWxzLmgiIDEKIyAzNSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUt
eGludS9pbmNsdWRlL3N5cy9LaW9VdGlscy5oIgojcHJhZ21hIGludGVyZmFjZQoKCgoKIyAxICIv
aG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvZXJybm8uaCIg
MQojIDQxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUv
c3lzL0tpb1V0aWxzLmgiIDIKIyA1NSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2Nh
bGUteGludS9pbmNsdWRlL3N5cy9LaW9VdGlscy5oIgojcHJhZ21hIGludGVyZmFjZQojIDg1ICIv
aG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0tpb1V0
aWxzLmgiCmlubGluZSBJbnQzMiBLcmVhZGkgKCBpbnQgZmQsIHZvaWQgKiBidWZmLCBpbnQgbmJ5
dGVzICkKICAgICAgICB7CiAgICAgICAgaW50IHN0czsKCiAgICAgICAgd2hpbGUgKCgoc3RzID0g
cmVhZCAoZmQsIGJ1ZmYsIG5ieXRlcykpIDwgMCkgJiYgKCpnZXRQcm9jZXNzKCktPmdldEVycm9y
TnVtYmVyKCkpID09IDQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIHJldHVybiAoc3RzKTsKICAg
ICAgICB9OwojIDExNyAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9p
bmNsdWRlL3N5cy9LaW9VdGlscy5oIgppbmxpbmUgSW50MzIgS3dyaXRlaSAoIGludCBmZCwgdm9p
ZCAqIGJ1ZmYsIGludCBuYnl0ZXMgKQogICAgICAgIHsKICAgICAgICBpbnQgc3RzOwoKICAgICAg
ICB3aGlsZSAoKChzdHMgPSB3cml0ZSAoZmQsIChjaGFyICopIGJ1ZmYsIG5ieXRlcykpIDwgMCkg
JiYgKCpnZXRQcm9jZXNzKCktPmdldEVycm9yTnVtYmVyKCkpID09IDQpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9
CgogICAgICAgIHJldHVybiAoc3RzKTsKICAgICAgICB9CiMgMTQ4ICIvaG9tZS9ybHAveHNjYWxl
L3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0tpb1V0aWxzLmgiCmlubGluZSBJ
bnQzMiBLcmVhZG4gKCBpbnQgZmQsIHZvaWQgKiBidWZmLCBpbnQgbmJ5dGVzICkKICAgICAgICB7
CiAgICAgICAgdW5zaWduZWQgY2hhciAqcHRyOwogICAgICAgIGludCBubGVmdDsKICAgICAgICBp
bnQgcmVhZHJjOwoKICAgICAgICBwdHIgPSAodW5zaWduZWQgY2hhciAqKSBidWZmOwogICAgICAg
IG5sZWZ0ID0gbmJ5dGVzOwoKICAgICAgICB3aGlsZSAobmxlZnQgPiAwKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgcmVhZHJjID0gS3JlYWRpIChmZCwgcHRyLCBubGVmdCk7CiAg
ICAgICAgICAgICAgICBpZiAocmVhZHJjIDw9IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAocmVhZHJjKTsKCiAgICAgICAgICAgICAgICBubGVmdCAtPSByZWFkcmM7CiAgICAgICAg
ICAgICAgICBwdHIgKz0gcmVhZHJjOwogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4g
KG5ieXRlcyAtIG5sZWZ0KTsKICAgICAgICB9OwoKCgoKCgppbmxpbmUgSW50MzIgS3JlYWR4CiAg
ICAgICAgKAogICAgICAgIGludCBmZCwKICAgICAgICBjaGFyICpidWZmLAogICAgICAgIHVuc2ln
bmVkIGludCBuYnl0ZXMKICAgICAgICApCiAgICAgICAgewogICAgICAgIGNoYXIgKnB0cjsKICAg
ICAgICBpbnQgbmxlZnQsIG5yZWFkOwoKICAgICAgICBwdHIgPSBidWZmOwogICAgICAgIG5sZWZ0
ID0gbmJ5dGVzOwogICAgICAgIHdoaWxlIChubGVmdCA+IDApCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBucmVhZCA9IEtyZWFkaSAoZmQsIHB0ciwgbmxlZnQpOwogICAgICAgICAg
ICAgICAgaWYgKG5yZWFkID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgaWYgKG5yZWFkIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IChucmVhZCk7CgogICAgICAgICAgICAgICAgbmxlZnQgLT0gbnJlYWQ7CiAgICAgICAgICAgICAg
ICBwdHIgKz0gbnJlYWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIHJldHVybiAobmJ5dGVz
IC0gbmxlZnQpOwogICAgICAgIH0KIyAyMjAgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mv
eHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvS2lvVXRpbHMuaCIKaW5saW5lIEludDMyIEt3cml0ZW4g
KCBpbnQgZmQsIHZvaWQgKiBwdHIsIGludCBuYnl0ZXMgKQogICAgICAgIHsKICAgICAgICBpbnQg
bmxlZnQsIG53cml0dGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKiB0ID0gKHVuc2lnbmVkIGNo
YXIgKikgcHRyOwoKICAgICAgICBubGVmdCA9IG5ieXRlczsKICAgICAgICB3aGlsZSAobmxlZnQg
PiAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbndyaXR0ZW4gPSBLd3JpdGVp
IChmZCwgdCwgbmxlZnQpOwogICAgICAgICAgICAgICAgaWYgKG53cml0dGVuIDw9IDApCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAobndyaXR0ZW4pOwoKICAgICAgICAgICAgICAgIG5s
ZWZ0IC09IG53cml0dGVuOwogICAgICAgICAgICAgICAgdCArPSBud3JpdHRlbjsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChuYnl0ZXMgLSBubGVmdCk7CiAgICAgICAgfTsKIyAy
NTggIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMv
S2lvVXRpbHMuaCIKaW5saW5lIEludDMyIEtyZWN2aSAoIGludCBzb2NrZXRGZCwgY2hhciAqIGJ1
ZmYsIGludCBsZW4sIGludCBmbGFncyApCiAgICAgICAgewogICAgICAgIGludCBzdHM7CgoKICAg
ICAgICB3aGlsZSAoKChzdHMgPSByZWFkIChzb2NrZXRGZCwgYnVmZiwgbGVuKSkgPCAwKSAmJiAo
KmdldFByb2Nlc3MoKS0+Z2V0RXJyb3JOdW1iZXIoKSkgPT0gNCkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgcmV0dXJuIChzdHMpOwogICAgICAgIH07CiMgMjkxICIvaG9tZS9ybHAveHNjYWxlL3By
b2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0tpb1V0aWxzLmgiCmlubGluZSBJU3Rh
dHVzIEtzZXROb25CbG9ja2luZyAoIGludCBmZCApCiAgICAgICAgewoKCiAgICAgICAgcmV0dXJu
IEVycm9yOwoKICAgICAgICB9CgppbmxpbmUgSVN0YXR1cyBLc2V0QmxvY2tpbmcgKCBpbnQgZmQg
KQogICAgICAgIHsKCgogICAgICAgIHJldHVybiBFcnJvcjsKCiAgICAgICAgfQojIDMyNyAiL2hv
bWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9LaW9VdGls
cy5oIgppbmxpbmUgSW50MzIgS3NlbmRpICggaW50IHNvY2tldEZkLCBjb25zdCBjaGFyICogbXNn
LCBpbnQgbGVuLCBpbnQgZmxhZ3MgKQogICAgICAgIHsKICAgICAgICBpbnQgc3RzOwoKCiAgICAg
ICAgd2hpbGUgKCgoc3RzID0gd3JpdGUgKHNvY2tldEZkLCBtc2csIGxlbikpIDwgMCkgJiYgKCpn
ZXRQcm9jZXNzKCktPmdldEVycm9yTnVtYmVyKCkpID09IDQpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgIHJldHVybiAoc3RzKTsKICAgICAgICB9CiMgNjcgIi9ob21lL3JscC94c2NhbGUvcHJvYmUv
djUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9pb1V0aWxzLmgiIDIKIyA4NiAiL2hvbWUvcmxwL3hz
Y2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL2lvVXRpbHMuaCIKaW5saW5lIElu
dDMyIHJlYWRuICggaW50IGZkLCB2b2lkICogYnVmZiwgaW50IG5ieXRlcyApCiAgICAgICAgewog
ICAgICAgIHJldHVybiBLcmVhZG4gKGZkLCBidWZmLCBuYnl0ZXMpOwogICAgICAgIH07CiMgMTA5
ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvaW9VdGls
cy5oIgppbmxpbmUgSW50MzIgd3JpdGVuICggaW50IGZkLCB2b2lkICogYnVmZiwgaW50IG5ieXRl
cyApCiAgICAgICAgewogICAgICAgIHJldHVybiBLd3JpdGVuIChmZCwgYnVmZiwgbmJ5dGVzKTsK
ICAgICAgICB9OwojIDEzMiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGlu
dS9pbmNsdWRlL2lvVXRpbHMuaCIKaW5saW5lIEludDMyIHJlYWRpICggaW50IGZkLCB2b2lkICog
YnVmZiwgaW50IG5ieXRlcyApCiAgICAgICAgewogICAgICAgIHJldHVybiBLcmVhZGkgKGZkLCBi
dWZmLCBuYnl0ZXMpOwogICAgICAgIH07CiMgMTU4ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1
L29zL3hzY2FsZS14aW51L2luY2x1ZGUvaW9VdGlscy5oIgppbmxpbmUgaW50IHdyaXRlaSAoIGlu
dCBmZCwgdm9pZCAqIGJ1ZmYsIGludCBuYnl0ZXMgKQogICAgICAgIHsKICAgICAgICByZXR1cm4g
S3dyaXRlaSAoZmQsIGJ1ZmYsIG5ieXRlcyk7CiAgICAgICAgfTsKIyAxODIgIi9ob21lL3JscC94
c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9pb1V0aWxzLmgiCmlubGluZSBJ
bnQzMiByZWN2aSAoIGludCBmZCwgY2hhciAqIGJ1ZmYsIGludCBsZW4sIGludCBmbGFncyApCiAg
ICAgICAgewogICAgICAgIHJldHVybiBLcmVjdmkgKGZkLCBidWZmLCBsZW4sIGZsYWdzKTsKICAg
ICAgICB9OwojIDIwOCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9p
bmNsdWRlL2lvVXRpbHMuaCIKaW5saW5lIEludDMyIHNlbmRpICggaW50IHNvY2tldEZkLCBjb25z
dCBjaGFyICogbXNnLCBpbnQgbGVuLCBpbnQgZmxhZ3MgKQogICAgICAgIHsKICAgICAgICByZXR1
cm4gS3NlbmRpICggc29ja2V0RmQsIG1zZywgbGVuLCBmbGFncyApOwogICAgICAgIH07CiMgMjMx
ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvaW9VdGls
cy5oIgppbmxpbmUgSVN0YXR1cyBzZXROb25CbG9ja2luZyAoIGludCBmZCApCiAgICAgICAgewog
ICAgICAgIHJldHVybiBLc2V0Tm9uQmxvY2tpbmcgKGZkKTsKICAgICAgICB9OwoKaW5saW5lIElT
dGF0dXMgc2V0QmxvY2tpbmcgKCBpbnQgZmQgKQogICAgICAgIHsKICAgICAgICByZXR1cm4gS3Nl
dEJsb2NraW5nIChmZCk7CiAgICAgICAgfTsKIyAzOCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92
NS9vcy94c2NhbGUteGludS9pbmNsdWRlL0lTdHJpbmcuaCIgMgoKIyAxICIvaG9tZS9ybHAveHNj
YWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvREFycmF5LmgiIDEKIyAxNjQgIi9o
b21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9EQXJyYXkuaCIK
I3ByYWdtYSBpbnRlcmZhY2UKIyAxODEgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNj
YWxlLXhpbnUvaW5jbHVkZS9EQXJyYXkuaCIKY2xhc3MgREFycmF5CiAgICB7CiAgcHJvdGVjdGVk
OgogICAgc3RhdGljIFVJbnQ4IGJhZDsKCiAgcHJvdGVjdGVkOgogICAgbXV0YWJsZSBVSW50OCAq
IGRhdGE7CiAgICBVSW50MzIgbm9FbGVtZW50czsKICAgIFVJbnQzMiBlbGVtZW50U2l6ZTsKICAg
IFVJbnQzMiBhbGxvY05vRWxlbXM7CiAgICBVSW50MzIgZ3Jvd3RoUmF0ZTsKICAgIElCb29sIGZp
eGVkOwoKCiAgICB2b2lkIFJlc2V0ICggSUJvb2wgZnJlZU1lbW9yeSA9ICgoSUJvb2wpIDEpICk7
CiAgICB2b2lkIEluaXQgKCB2b2lkICk7CgogICAgdmlydHVhbCB2b2lkICogQWxsb2NBcnJheSAo
IFVJbnQzMiBub0VsZW1zICk7CiAgICB2aXJ0dWFsIHZvaWQgRnJlZUFycmF5ICggdm9pZCAqYXJy
YXksIFVJbnQzMiBub0VsZW1zICk7CiAgICB2aXJ0dWFsIHZvaWQgQ29weUFycmF5ICggdm9pZCAq
c3JjLCB2b2lkICpkc3QsIFVJbnQzMiBub0VsZW1zICk7CgogIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERBcnJheSAoIHZvaWQgKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERBcnJheSAoIGNvbnN0IERBcnJheSYgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERBcnJheSAoIFVJbnQzMiBlbG1TaXplICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
QXJyYXkgKCBVSW50MzIgZWxtU2l6ZSwgVUludDMyIG5vRWxtcyApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgREFycmF5ICggVUludDMyIGVsbVNpemUsIFVJbnQzMiBub0VsbXMsIFVJbnQz
MiBncm93dGggKTsKCiAgICB2aXJ0dWFsIH4gREFycmF5ICggdm9pZCApOwoKCgoKCiAgICB2b2lk
IFNldEdyb3d0aFJhdGUgKCBVSW50MzIgbmV3UmF0ZSApOwogICAgVUludDMyIEdyb3d0aFJhdGUg
KCB2b2lkICkgY29uc3Q7CgoKCiAgICBJU3RhdHVzIEV4dGVuZCAoIFVJbnQzMiB0b05vRWxlbXMg
KTsKCgoKCgoKICAgIElTdGF0dXMgVHJ1bmNhdGUgKCBVSW50MzIgdG9Ob0VsZW1zICk7CgoKCgoK
CiAgICBJU3RhdHVzIFNldENvdW50ICggVUludDMyIG5ld05vRWxtcyApOwoKCgoKICAgIHZvaWQg
RGVsZXRlICggVUludDMyIHBvcyApOwoKCgoKICAgIHZvaWQgUmVsZWFzZSAoIHZvaWQgKTsKCgoK
CiAgICB2b2lkICogRXh0cmFjdCAoIHZvaWQgKTsKCgoKCgogICAgdm9pZCBTZXRBcnJheVB0ciAo
IHZvaWQgKiBkYXRhLCBVSW50MzIgbWVtU2l6ZSwgSUJvb2wgZml4ZWQgPSAoKElCb29sKSAwKSAp
OwoKCgoKICAgIElCb29sIFNldEZpeGVkICggSUJvb2wgdHJ1ZUZhbHNlICk7CgoKCiAgICBJQm9v
bCBGaXhlZCAoIHZvaWQgKSBjb25zdCB7IHJldHVybiBmaXhlZDsgfTsKICAgIEludDMyIENvdW50
ICggdm9pZCApIGNvbnN0IHsgcmV0dXJuIG5vRWxlbWVudHM7IH07CiAgICBVSW50MzIgRWxlbVNp
emUgKCB2b2lkICkgY29uc3QgeyByZXR1cm4gZWxlbWVudFNpemU7IH07CiAgICBVSW50MzIgQnl0
ZVNpemUgKCB2b2lkICkgY29uc3QgeyByZXR1cm4gQ291bnQoKSpFbGVtU2l6ZSgpO307CiAgICB2
b2lkICogQXJyYXlQdHIgKCB2b2lkICkgY29uc3QgeyByZXR1cm4gKHZvaWQgKikgZGF0YTsgfTsK
ICAgIFVJbnQzMiBBbGxvY1NpemUgKCB2b2lkICkgY29uc3Q7CgogICAgY29uc3QgVUludDggKiBJ
bmRleCAoIEludDMyIHBvcyApIGNvbnN0OwogICAgVUludDggKiBFbGVtZW50ICggSW50MzIgcG9z
ICk7CiAgICBVSW50OCYgb3BlcmF0b3IgW10gKCBJbnQzMiBwb3MgKSA7CgogICAgREFycmF5JiBv
cGVyYXRvciA9ICggY29uc3QgREFycmF5JiByaHMgKTsKCiAgICBJU3RhdHVzIFNob3cgKCBJQm9v
bCBkZXRhaWxlZCA9ICgoSUJvb2wpIDApICkgY29uc3Q7CiAgICB9OwoKCnRlbXBsYXRlIDxjbGFz
cyBUPiBjbGFzcyBUREFycmF5IDogcHVibGljIERBcnJheQogICAgewogIHByb3RlY3RlZDoKCiAg
ICB2aXJ0dWFsIHZvaWQgKiBBbGxvY0FycmF5ICggVUludDMyIG5vRWxlbXMgKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
ICogdG1wID0gKCBub0VsZW1zICkgPyBuZXcgVCBbIG5vRWxlbXMgXSA6IChUKikgX19udWxsOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKCiAgICB2aXJ0dWFsIHZvaWQgQ29weUFycmF5ICggdm9pZCAq
c3JjLCB2b2lkICpkc3QsIFVJbnQzMiBub0VsZW1zICkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCogdFNyYyA9IChUKikg
c3JjOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQqIHREc3QgPSAoVCopIGRzdDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggVUludDMyIFRjbnQ9MDsgVGNu
dCA8IG5vRWxlbXM7IFRjbnQrKyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHREc3QgWyBUY250IF0gPSB0U3JjIFsgVGNudCBdOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH07CgogICAgdmlydHVhbCB2b2lkIEZyZWVBcnJheSAoIHZvaWQgKmFycmF5LCBVSW50
MzIgbm9FbGVtcyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJyYXkgJiYgbm9FbGVtcyApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIFtdICgoVCopIGFycmF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJyYXkgPSAoVCopIF9fbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUREFycmF5ICggdm9pZCApIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEQXJyYXkgKCBzaXplb2YoVCkgKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUREFy
cmF5ICggVUludDMyIG5vRWxtcyApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
QXJyYXkgKCBzaXplb2YoVCksIG5vRWxtcyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREQXJyYXkgKCBVSW50MzIgbm9F
bG1zLCBVSW50MzIgZ3Jvd3RoUmF0ZSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEQXJyYXkgKCBzaXplb2YoVCksIG5vRWxtcywgZ3Jvd3RoUmF0ZSApCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREQXJy
YXkgKCBjb25zdCBUREFycmF5PFQ+JiByaHMgKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgREFycmF5ICggc2l6ZW9mKFQpLCByaHMuQ291bnQoKSwgcmhzLkdyb3d0aFJhdGUgKCAp
ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBub0VsZW1lbnRzICkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUKiB0U3JjID0g
KFQqKSByaHMuZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCogdERz
dCA9IChUKikgZGF0YTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IFVJbnQzMiBUY250PTA7IFRjbnQgPCBub0VsZW1lbnRzOyBUY250KysgKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdERzdCBbIFRjbnQgXSA9IHRTcmMgWyBUY250IF07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB+VERBcnJheSAo
ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFJlc2V0ICggKChJQm9vbCkgMSkg
KTsgfTsKCiAgICBUICogQXJyYXlQdHIgKCB2b2lkICkgY29uc3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IHJldHVybiAoVCAqKSBEQXJyYXk6OkFycmF5UHRyKCk7IH07CgogICAg
Y29uc3QgVCAqIEluZGV4ICggSW50MzIgcG9zICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChUICop
IERBcnJheTo6SW5kZXggKHBvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsK
CiAgICBUICogRWxlbWVudCAoIEludDMyIHBvcyApCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoVCAqKSBEQXJy
YXk6OkVsZW1lbnQgKHBvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAg
ICBUICYgb3BlcmF0b3IgW10gKCBJbnQzMiBwb3MgKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFQgJikgKigo
VCopIERBcnJheTo6RWxlbWVudChwb3MpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9OwoKICAgIFREQXJyYXk8VD4mIG9wZXJhdG9yKz0gKCBjb25zdCBUJiByaHMgKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRvciBbXSAoIENvdW50KCkgKSA9IHJoczsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsK
CiAgICBUREFycmF5PFQ+JiBvcGVyYXRvcis9ICggY29uc3QgVERBcnJheTxUPiYgcmhzICkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBTZXRDb3VudCAoIENvdW50KCkgKyByaHMuQ291bnQoKSApID09IEFvayApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBub0VsZW1lbnRzICkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFQqIHRTcmMgPSAoVCopIHJocy5kYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVCogdERzdCA9IChUKikgZGF0YTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCBVSW50MzIgVGNudD0wOyBUY250IDwgbm9FbGVtZW50czsgVGNu
dCsrICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0RHN0IFsg
VGNudCBdID0gdFNyYyBbIFRjbnQgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9OwoKICAgIFREQXJyYXk8VD4mIG9wZXJhdG9yID0gKCBjb25zdCBUREFy
cmF5PFQ+JiByaHMgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTZXRDb3VudCAoIDAgKTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBTZXRDb3VudCAoIHJocy5Db3VudCgpICkgPT0gQW9rICkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG5vRWxlbWVudHMgKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VCogdFNyYyA9IChUKikgcmhzLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUKiB0RHN0ID0gKFQqKSBkYXRhOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIFVJbnQzMiBUY250PTA7IFRjbnQgPCBub0VsZW1lbnRzOyBUY250
KysgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREc3QgWyBU
Y250IF0gPSB0U3JjIFsgVGNudCBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CiAgICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQREFycmF5
IDogcHVibGljIFREQXJyYXkgPFQ+CiAgICAgewogIHByb3RlY3RlZDoKICAgICBUICogcHJvdG9U
eXBlOwoKICAgICB2aXJ0dWFsIHZvaWQqIEFsbG9jQXJyYXkgKCBVSW50MzIgbm9FbGVtcyApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIW5vRWxlbXMgKSByZXR1cm4gKFQqKV9fbnVsbDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVCAqIHBUID0gbmV3IFQgWyBub0VsZW1zIF07CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvdG9UeXBlICkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggVUludDMyIFRjbnQ9MDsgVGNudCA8IG5vRWxlbXM7IFRj
bnQrKyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVCBbIFRjbnQg
XSA9ICpwcm90b1R5cGU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
VDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgIHZpcnR1YWwgdm9pZCBD
b3B5QXJyYXkgKCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgVUludDMyIG5vRWxlbXMgKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUKiB0U3JjID0gKFQqKSBzcmM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCog
dERzdCA9IChUKikgZHN0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBV
SW50MzIgVGNudD0wOyBUY250IDwgbm9FbGVtczsgVGNudCsrICkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdERzdCBbIFRjbnQgXSA9IHRTcmMgWyBUY250IF07CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUERBcnJheSAoIHZvaWQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgcHJvdG9UeXBlID0gKFQqKSBfX251bGw7IH07CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUERBcnJheSAoIFQgKiBwVCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBw
cm90b1R5cGUgPSBwVDsgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQREFycmF5ICgg
VUludDMyIG5vRWxtcyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvVHlwZSA9IF9fbnVsbDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG5vRWxtcyApIEV4dGVuZCAobm9FbG1zKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBEQXJyYXkgKCBUICogcFQsIFVJbnQzMiBub0VsbXMgKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b1R5cGUgPSBw
VDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vRWxtcyApIEV4dGVuZCAo
bm9FbG1zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBEQXJyYXkgKCBUICpwVCwgVUludDMyIG5vRWxtcywgVUludDMyIGdy
b3d0aFJhdGUgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTZXRHcm93dGhSYXRlICggZ3Jvd3RoUmF0ZSApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvVHlwZSA9IHBUOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9FbG1zICkgRXh0ZW5kIChub0VsbXMpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH07CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5Q
REFycmF5ICggdm9pZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDbGVhclBy
b3RvVHlwZSAoKTsgUmVzZXQoKChJQm9vbCkgMSkpOyB9OwoKCiAgICAgdm9pZCBDbGVhclByb3Rv
VHlwZSAoIHZvaWQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHByb3RvVHlwZSApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm90b1R5cGU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdG9UeXBlID0gKCBUICogKSBfX251bGw7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKCiAgICAgdm9pZCBTZXRQcm90b1R5cGUgKCBUICpwVCApCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcHJvdG9UeXBlICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIHByb3RvVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b1R5
cGUgPSBwVDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICBjb25zdCBU
ICogUHJvdG9UeXBlICggdm9pZCApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyByZXR1cm4gcHJvdG9UeXBlOyB9OwoKICAgICBQREFycmF5PFQ+JiBvcGVyYXRvciA9ICgg
Y29uc3QgUERBcnJheTxUPiYgcmhzICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVERBcnJheTxUPjo6b3BlcmF0b3IgPSAo
IHJocyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgIH07CgoKCgoKaW5saW5lIElTdGF0
dXMgREFycmF5OjpTZXRDb3VudCAoIFVJbnQzMiBuZXdOb0VsbXMgKQogICAgewogICAgaWYgKCBu
ZXdOb0VsbXMgPD0gYWxsb2NOb0VsZW1zICkKICAgICAgICB7CiAgICAgICAgbm9FbGVtZW50cyA9
IG5ld05vRWxtczsKICAgICAgICByZXR1cm4gQW9rOwogICAgICAgIH07CgogICAgcmV0dXJuIEV4
dGVuZCAoIG5ld05vRWxtcyApOwogICAgfQoKCgoKaW5saW5lIFVJbnQzMiBEQXJyYXk6OkFsbG9j
U2l6ZSAoIHZvaWQgKSBjb25zdAogICAgewogICAgcmV0dXJuIGFsbG9jTm9FbGVtcyAqIEVsZW1T
aXplKCk7CiAgICB9OwoKCgoKCgppbmxpbmUgSUJvb2wgREFycmF5OjpTZXRGaXhlZCAoIElCb29s
IGZpeGVkRmxhZyApCiAgICB7CiAgICBJQm9vbCBvcmlnRmxhZyA9IGZpeGVkOwoKICAgIGZpeGVk
ID0gZml4ZWRGbGFnOwogICAgcmV0dXJuIG9yaWdGbGFnOwogICAgfTsKCgoKCmlubGluZSB2b2lk
IERBcnJheTo6U2V0R3Jvd3RoUmF0ZSAoIFVJbnQzMiBuZXdSYXRlICkKICAgIHsKICAgIGdyb3d0
aFJhdGUgPSBuZXdSYXRlOwogICAgfTsKCgoKCmlubGluZSBVSW50MzIgREFycmF5OjpHcm93dGhS
YXRlICggdm9pZCApIGNvbnN0CiAgICB7CiAgICByZXR1cm4gZ3Jvd3RoUmF0ZTsKICAgIH07CgoK
CgppbmxpbmUgdm9pZCBEQXJyYXk6OlJlbGVhc2UgKCB2b2lkICkKICAgIHsKICAgIFJlc2V0ICgg
KChJQm9vbCkgMSkgKTsKICAgIH07CgoKCgppbmxpbmUgdm9pZCAqIERBcnJheTo6RXh0cmFjdCAo
IHZvaWQgKQogICAgewogICAgdm9pZCAqIHJldHVybkRhdGEgPSBkYXRhOwoKICAgIGRhdGEgPSAo
VUludDgqKSBfX251bGw7CiAgICBhbGxvY05vRWxlbXMgPSAwOwogICAgZml4ZWQgPSAoKElCb29s
KSAwKTsKICAgIG5vRWxlbWVudHMgPSAwOwoKICAgIHJldHVybiByZXR1cm5EYXRhOwogICAgfTsK
CgoKCmlubGluZSBVSW50OCYgREFycmF5OjpvcGVyYXRvciBbXSAoIEludDMyIHBvcyApCiAgICB7
CiAgICBpZiAoIHBvcyA+PSBDb3VudCgpICYmIEV4dGVuZCAoIHBvcysxICkgPT0gRXJyb3IgKQog
ICAgICAgIHJldHVybiBEQXJyYXk6OmJhZDsKCiAgICByZXR1cm4gZGF0YVtwb3MgKiBFbGVtU2l6
ZSgpXTsKICAgIH0KCgoKCmlubGluZSBVSW50OCAqIERBcnJheTo6RWxlbWVudCAoIEludDMyIHBv
cyApCiAgICB7CiAgICBpZiAoIHBvcyA+PSBDb3VudCgpICYmIEV4dGVuZCAoIHBvcysxICkgPT0g
RXJyb3IgKQogICAgICAgIHJldHVybiAoVUludDgqKSBfX251bGw7CgogICAgcmV0dXJuICZkYXRh
W3BvcyAqIEVsZW1TaXplKCldOwogICAgfQoKaW5saW5lIGNvbnN0IFVJbnQ4ICogREFycmF5OjpJ
bmRleCAoIEludDMyIHBvcyApIGNvbnN0CiAgICB7CiAgICBpZiAoIHBvcyA+PSBDb3VudCgpICkK
ICAgICAgICByZXR1cm4gKFVJbnQ4KikgX19udWxsOwoKICAgIHJldHVybiAmZGF0YVtwb3MgKiBF
bGVtU2l6ZSgpXTsKICAgIH0KCgoKCmlubGluZSB2b2lkIERBcnJheTo6SW5pdCAoIHZvaWQgKQog
ICAgewogICAgZGF0YSA9IChVSW50OCopIF9fbnVsbDsKICAgIG5vRWxlbWVudHMgPSBhbGxvY05v
RWxlbXMgPSAwOwogICAgZWxlbWVudFNpemUgPSAxOwogICAgZ3Jvd3RoUmF0ZSA9IDg7CiAgICBm
aXhlZCA9ICgoSUJvb2wpIDApOwogICAgfTsKCgoKCmlubGluZSBEQXJyYXk6OkRBcnJheSAoICkK
ICAgIHsKICAgIEluaXQgKCk7CiAgICB9OwoKCgoKaW5saW5lIERBcnJheTo6REFycmF5ICggY29u
c3QgREFycmF5JiByaHMgKQogICAgewogICAgSW5pdCAoKTsKCiAgICBlbGVtZW50U2l6ZSA9IHJo
cy5lbGVtZW50U2l6ZTsKICAgIGdyb3d0aFJhdGUgPSByaHMuZ3Jvd3RoUmF0ZTsKCiAgICBpZiAo
IHJocy5Db3VudCgpICYmIEV4dGVuZCAoIHJocy5Db3VudCgpICkgPT0gQW9rICkKICAgICAgICBD
b3B5QXJyYXkgKCByaHMuZGF0YSwgZGF0YSwgbm9FbGVtZW50cyApOwogICAgfTsKCgoKCmlubGlu
ZSBEQXJyYXk6OkRBcnJheSAoIFVJbnQzMiBlbG1TaXplICkKICAgIHsKICAgIEluaXQgKCk7CiAg
ICBlbGVtZW50U2l6ZSA9ICggZWxtU2l6ZSApID8gZWxtU2l6ZSA6IGVsZW1lbnRTaXplOwogICAg
fTsKCgoKCgppbmxpbmUgREFycmF5JiBEQXJyYXk6Om9wZXJhdG9yID0gKCBjb25zdCBEQXJyYXkm
IHJocyApCiAgICB7CiAgICBTZXRDb3VudCAoIDAgKTsKICAgIFNldENvdW50ICggcmhzLkNvdW50
KCkgKTsKCiAgICBpZiAoIG5vRWxlbWVudHMgKQogICAgICAgIENvcHlBcnJheSAoIHJocy5kYXRh
LCBkYXRhLCBub0VsZW1lbnRzICk7CgogICAgcmV0dXJuICp0aGlzOwogICAgfTsKIyA0MCAiL2hv
bWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL0lTdHJpbmcuaCIg
MgojIDQ5ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUv
SVN0cmluZy5oIgojcHJhZ21hIGludGVyZmFjZQojIDY3ICIvaG9tZS9ybHAveHNjYWxlL3Byb2Jl
L3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvSVN0cmluZy5oIgpjbGFzcyBJU3RyaW5nIDogcHJp
dmF0ZSBEQXJyYXkKICAgIHsKICBwdWJsaWM6CiAgICAgICAgaW5saW5lIElTdHJpbmcgKCApOwog
ICAgICAgIGlubGluZSBJU3RyaW5nICggY29uc3QgSVN0cmluZyAmIHN0ciApOwogICAgICAgIGlu
bGluZSBJU3RyaW5nICggY29uc3QgY2hhciAqIGNzdHIgKTsKICAgICAgICBpbmxpbmUgSVN0cmlu
ZyAoIGNoYXIgY2ggKTsKICAgICAgICBpbmxpbmUgSVN0cmluZyAoIEludDMyIGNvdW50ICk7CiAg
ICAgICAgaW5saW5lIElTdHJpbmcgKCBJbnQzMiBjb3VudCwgY2hhciBmaWxsQ2ggKTsKCiAgICAg
ICAgaW5saW5lIHZpcnR1YWwgfiBJU3RyaW5nICggKTsKCgoKCgogICAgSW50MzIgQWxsb2NhdGUg
KCBJbnQzMiBsZW5ndGhOZWVkZWQgKTsKICAgIHZvaWQgRmlsbCAoIGNoYXIgZmlsbENoICk7Cgog
ICAgaW5saW5lIElCb29sIEVtcHR5ICggdm9pZCApIGNvbnN0OwogICAgaW5saW5lIEludDMyIExl
bmd0aCAoIHZvaWQgKSBjb25zdDsKICAgIGlubGluZSBJbnQzMiBTaXplICggdm9pZCApIGNvbnN0
OwoKCgoKICAgIGlubGluZSBJQm9vbCBJc0Nhc2VTZW5zaXRpdmUgKCB2b2lkICkgY29uc3Q7CiAg
ICBpbmxpbmUgdm9pZCBTZXRDYXNlU2Vuc2l0aXZlICggdm9pZCApOwogICAgaW5saW5lIHZvaWQg
U2V0Q2FzZUluc2Vuc2l0aXZlICggdm9pZCApOwoKICAgIGlubGluZSBjaGFyJiBvcGVyYXRvciBb
XSAoIEludDMyIHBvcyApOwogICAgaW5saW5lIGNoYXIgRWxlbWVudCAoIEludDMyIHBvcyApIGNv
bnN0OwogICAgaW5saW5lIG9wZXJhdG9yIGNvbnN0IGNoYXIgKiAoKSBjb25zdDsKICAgIGlubGlu
ZSBvcGVyYXRvciBjaGFyICogKCkgY29uc3Q7CgogICAgaW5saW5lIGNoYXIqIGNoYXJzICggdm9p
ZCApIGNvbnN0OwogICAgaW5saW5lIGNoYXIqIFByaW50U3RyaW5nICggdm9pZCApIGNvbnN0OwoK
CgogICAgICAgICAgIElTdHJpbmcmIG9wZXJhdG9yID0gKCBjb25zdCBJU3RyaW5nICYgc3RyICk7
CiAgICAgICAgICAgSVN0cmluZyYgb3BlcmF0b3IgPSAoIGNvbnN0IGNoYXIqIGNzdHIgKTsKICAg
ICAgICAgICBJU3RyaW5nJiBvcGVyYXRvciA9ICggY2hhciBjaCApOwoKCgoKCiAgICAgICAgICAg
SVN0cmluZyYgVHJhbnNmZXIgKCBJU3RyaW5nICZ0b1N0cmluZyApOwoKCgogICAgICAgIElTdHJp
bmcgb3BlcmF0b3IgKyAoY29uc3QgSVN0cmluZyAmIHN0cjEpIGNvbnN0OwogICAgICAgIElTdHJp
bmcgb3BlcmF0b3IgKyAoY29uc3QgY2hhciogc3RyMSkgY29uc3Q7CiAgICBJU3RyaW5nIG9wZXJh
dG9yICsgKGNoYXIgY2gpIGNvbnN0OwoKICAgIGZyaWVuZCBJU3RyaW5nIG9wZXJhdG9yICsgKGNv
bnN0IGNoYXIgKiwgY29uc3QgSVN0cmluZyYpOwogICAgZnJpZW5kIElTdHJpbmcgb3BlcmF0b3Ig
KyAoY29uc3QgY2hhciwgY29uc3QgSVN0cmluZyYpOwoKICAgIGZyaWVuZCBJU3RyaW5nIG9wZXJh
dG9yIC0gKGNvbnN0IGNoYXIgKiwgY29uc3QgSVN0cmluZyYpOwogICAgZnJpZW5kIElTdHJpbmcg
b3BlcmF0b3IgLSAoY2hhciwgY29uc3QgSVN0cmluZyYpOwoKCgogICAgaW5saW5lIElTdHJpbmcm
IG9wZXJhdG9yICs9IChjb25zdCBJU3RyaW5nICYgc3RyKTsKICAgIGlubGluZSBJU3RyaW5nJiBv
cGVyYXRvciArPSAoY29uc3QgY2hhciogY3N0cik7CiAgICBpbmxpbmUgSVN0cmluZyYgb3BlcmF0
b3IgKz0gKGNoYXIgY2gpOwoKCgogICAgaW5saW5lIElTdHJpbmcmIG9wZXJhdG9yIC09IChjb25z
dCBJU3RyaW5nICYgc3RyKTsKICAgIGlubGluZSBJU3RyaW5nJiBvcGVyYXRvciAtPSAoY29uc3Qg
Y2hhciogY3N0cik7CiAgICBpbmxpbmUgSVN0cmluZyYgb3BlcmF0b3IgLT0gKGNoYXIgY2gpOwoK
CgogICAgaW5saW5lIElTdHJpbmcmIG9wZXJhdG9yIC0tICgpOwoKCgogICAgaW5saW5lIElTdHJp
bmcmIG9wZXJhdG9yIDw8PSAoSVN0cmluZyAmIHN0cik7CgoKCgogICAgaW5saW5lIEludDMyIG9w
ZXJhdG9yIDwgKGNvbnN0IElTdHJpbmcgJiBzdHIpIGNvbnN0OwogICAgaW5saW5lIEludDMyIG9w
ZXJhdG9yID4gKGNvbnN0IElTdHJpbmcgJiBzdHIpIGNvbnN0OwogICAgaW5saW5lIEludDMyIG9w
ZXJhdG9yIDw9IChjb25zdCBJU3RyaW5nICYgc3RyKSBjb25zdDsKICAgIGlubGluZSBJbnQzMiBv
cGVyYXRvciA+PSAoY29uc3QgSVN0cmluZyAmIHN0cikgY29uc3Q7CiAgICBpbmxpbmUgSW50MzIg
b3BlcmF0b3IgPT0gKGNvbnN0IElTdHJpbmcgJiBzdHIpIGNvbnN0OwogICAgaW5saW5lIEludDMy
IG9wZXJhdG9yICE9IChjb25zdCBJU3RyaW5nICYgc3RyKSBjb25zdDsKCiAgICBpbmxpbmUgSW50
MzIgb3BlcmF0b3IgPCAoY29uc3QgY2hhciogY3N0cikgY29uc3Q7CiAgICBpbmxpbmUgSW50MzIg
b3BlcmF0b3IgPiAoY29uc3QgY2hhciogY3N0cikgY29uc3Q7CiAgICBpbmxpbmUgSW50MzIgb3Bl
cmF0b3IgPD0gKGNvbnN0IGNoYXIqIGNzdHIpIGNvbnN0OwogICAgaW5saW5lIEludDMyIG9wZXJh
dG9yID49IChjb25zdCBjaGFyKiBjc3RyKSBjb25zdDsKICAgIGlubGluZSBJbnQzMiBvcGVyYXRv
ciA9PSAoY29uc3QgY2hhciogY3N0cikgY29uc3Q7CiAgICBpbmxpbmUgSW50MzIgb3BlcmF0b3Ig
IT0gKGNvbnN0IGNoYXIqIGNzdHIpIGNvbnN0OwoKCgogICAgICAgICAgIEludDMyIENvbXBhcmUg
KCBjb25zdCBJU3RyaW5nJiBzdHIgKSBjb25zdDsKICAgICAgICAgICBJbnQzMiBDb21wYXJlICgg
Y29uc3QgY2hhciogY3N0ciApIGNvbnN0OwoKCgoKICAgIGlubGluZSBJQm9vbCBDb250YWlucygg
Y29uc3QgSVN0cmluZyYgKSBjb25zdDsKICAgIGlubGluZSBJQm9vbCBDb250YWlucyggY29uc3Qg
Y2hhciogKSBjb25zdDsKICAgIGlubGluZSBJQm9vbCBDb250YWlucyggY2hhciApIGNvbnN0OwoK
CgoKICAgICAgICAgICBJbnQzMiBGaW5kICggY29uc3QgSVN0cmluZyYsIEludDMyIHBvcyA9IDAg
KSBjb25zdDsKICAgICAgICAgICBJbnQzMiBGaW5kICggY29uc3QgY2hhciosIEludDMyIHBvcyA9
IDAgKSBjb25zdDsKICAgICAgICAgICBJbnQzMiBGaW5kICggY2hhciwgSW50MzIgcG9zID0gMCAp
IGNvbnN0OwoKCgoKICAgIEludDMyIEluc2VydCAoIEludDMyIHBvcywgY29uc3QgY2hhciosIElu
dDMyIGxlbiApOwogICAgaW5saW5lIEludDMyIEluc2VydCAoIEludDMyIHBvcywgY29uc3QgSVN0
cmluZyAmIHN0ciApOwogICAgaW5saW5lIEludDMyIEluc2VydCAoIEludDMyIHBvcywgY29uc3Qg
Y2hhciogKTsKICAgIGlubGluZSBJbnQzMiBJbnNlcnQgKCBJbnQzMiBwb3MsIGNoYXIgY2ggKTsK
CgoKCiAgICBJbnQzMiBSZXBsYWNlICggSW50MzIgcG9zLCBjb25zdCBjaGFyKiwgSW50MzIgbGVu
ICk7CiAgICBpbmxpbmUgSW50MzIgUmVwbGFjZSAoIEludDMyIHBvcywgY29uc3QgSVN0cmluZyAm
IHN0ciApOwogICAgaW5saW5lIEludDMyIFJlcGxhY2UgKCBJbnQzMiBwb3MsIGNvbnN0IGNoYXIq
ICk7CiAgICBpbmxpbmUgSW50MzIgUmVwbGFjZSAoIEludDMyIHBvcywgY2hhciBjaCApOwoKCgog
ICAgICAgICAgIHZvaWQgVHJpbUxlZnQgKCApOwogICAgICAgICAgIHZvaWQgVHJpbVJpZ2h0ICgg
KTsKCgoKCiAgICAgICAgICAgSW50MzIgRGVsZXRlICggY29uc3QgSVN0cmluZyYgc3Vic3RyICk7
CiAgICAgICAgICAgSW50MzIgRGVsZXRlICggY29uc3QgY2hhciogY3N0ciApOwogICAgICAgICAg
IEludDMyIERlbGV0ZSAoIEludDMyIHBvcywgSW50MzIgY291bnQgKTsKCgoKCgoKICAgICAgICAg
ICBJU3RyaW5nJiBFeHRyYWN0ICggSW50MzIgc3RhcnQsIEludDMyIGNvdW50LCBJU3RyaW5nICZp
bnRvU3RyaW5nICkgY29uc3Q7CiAgICAgICAgICAgSVN0cmluZyYgRXh0cmFjdCAoIEludDMyIHN0
YXJ0LCBJU3RyaW5nICZpbnRvU3RyaW5nICkgY29uc3Q7CiAgICAgICAgICAgSVN0cmluZyYgSGVh
ZCAoIEludDMyIGNvdW50LCBJU3RyaW5nICZpbnRvU3RyaW5nICkgY29uc3Q7CiAgICAgICAgICAg
SVN0cmluZyYgVGFpbCAoIEludDMyIGNvdW50LCBJU3RyaW5nICZpbnRvU3RyaW5nICkgY29uc3Q7
CgoKCgogICAgICAgICAgIElTdHJpbmcmIEV4dHJhY3QgKCBJU3RyaW5nICZpbnRvU3RyaW5nICk7
CgoKCgoKICAgICAgICAgICBJU3RyaW5nJiBCZWZvcmUgKCBjb25zdCBJU3RyaW5nJiBzdHIsIElT
dHJpbmcmIGludG9TdHIgKSBjb25zdDsKICAgICAgICAgICBJU3RyaW5nJiBCZWZvcmUgKCBjb25z
dCBjaGFyKiBjc3RyLCBJU3RyaW5nJiBpbnRvU3RyICkgY29uc3Q7CiAgICAgICAgICAgSVN0cmlu
ZyYgQmVmb3JlICggY29uc3QgY2hhciwgSVN0cmluZyYgaW50b1N0ciApIGNvbnN0OwoKCgoKCiAg
ICAgICAgICAgSVN0cmluZyYgQWZ0ZXIgKCBjb25zdCBJU3RyaW5nJiBzdHIsIElTdHJpbmcgJmlu
dG9TdHIgKSBjb25zdDsKICAgICAgICAgICBJU3RyaW5nJiBBZnRlciAoIGNvbnN0IGNoYXIqIGNz
dHIsIElTdHJpbmcgJmludG9TdHIgKSBjb25zdDsKICAgICAgICAgICBJU3RyaW5nJiBBZnRlciAo
IGNvbnN0IGNoYXIsIElTdHJpbmcgJmludG9TdHIgKSBjb25zdDsKCiAgICAgICAgICAgdm9pZCBU
b1VwcGVyICggdm9pZCApOwogICAgICAgICAgIHZvaWQgVG9Mb3dlciAoIHZvaWQgKTsKCiAgICAg
ICAgICAgSVN0cmluZyYgQXNVcHBlciAoIElTdHJpbmcgJiBpbnRvU3RyaW5nICkgY29uc3Q7CiAg
ICAgICAgICAgSVN0cmluZyYgQXNMb3dlciAoIElTdHJpbmcgJiBpbnRvU3RyaW5nICkgY29uc3Q7
CgogICAgICAgICAgIHZvaWQgUmVzZXQgKCB2b2lkICk7CgogICAgICAgICAgIGNoYXIgKiBWRm9y
bWF0ICggSW50MzIgbWF4c2l6ZSwgY29uc3QgY2hhciAqIGZvcm1hdCwgdmFfbGlzdCApOwogICAg
ICAgICAgIGNoYXIgKiBGb3JtYXQgKCBJbnQzMiBtYXhzaXplLCBjb25zdCBjaGFyICogZm9ybWF0
LCAuLi4gKTsKCnByaXZhdGU6CiAgICBJbnQzMiBMZW47CiAgICBJQm9vbCBjYXNlSW5zZW5zaXRp
dmU7CgoKICAgICAgICAgICAgICAgICAgIHZvaWQgVGVybWluYXRlKCB2b2lkICk7CgoKCiMgMSAi
L2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUteGludS9pbmNsdWRlL3N5cy9JU3Ry
aW5nTGVnYWN5LmgiIDEKIyAxNCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy94c2NhbGUt
eGludS9pbmNsdWRlL3N5cy9JU3RyaW5nTGVnYWN5LmgiCnB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJU3RyaW5nICggc2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKiBm
b3JtYXQsIC4uLiApOwogICAgICAgIGlubGluZSBJU3RyaW5nIFRyYW5zZmVyICggdm9pZCApOwoK
ICAgICAgICBpbmxpbmUgdm9pZCBJbml0ICggdm9pZCApOwoKICAgICAgICBpbmxpbmUgSVN0cmlu
ZyBFeHRyYWN0ICggc2l6ZV90IHN0YXJ0LCBzaXplX3QgY291bnQgKSBjb25zdDsKICAgICAgICBp
bmxpbmUgSVN0cmluZyBFeHRyYWN0ICggc2l6ZV90IHN0YXJ0ICkgY29uc3Q7CiAgICAgICAgaW5s
aW5lIElTdHJpbmcgSGVhZCAoIHNpemVfdCBjb3VudCApIGNvbnN0OwogICAgICAgIGlubGluZSBJ
U3RyaW5nIFRhaWwgKCBzaXplX3QgY291bnQgKSBjb25zdDsKCiAgICAgICAgaW5saW5lIElTdHJp
bmcgRXh0cmFjdCAoIHZvaWQgKTsKICAgICAgICBpbmxpbmUgSVN0cmluZyBCZWZvcmUgKCBjb25z
dCBJU3RyaW5nJiBzdHIgKSBjb25zdDsKICAgICAgICBpbmxpbmUgSVN0cmluZyBCZWZvcmUgKCBj
b25zdCBjaGFyKiBjc3RyICkgY29uc3Q7CiAgICAgICAgaW5saW5lIElTdHJpbmcgQmVmb3JlICgg
Y29uc3QgY2hhciApIGNvbnN0OwoKICAgICAgICBpbmxpbmUgSVN0cmluZyBBZnRlciAoIGNvbnN0
IElTdHJpbmcmIHN0ciApIGNvbnN0OwogICAgICAgIGlubGluZSBJU3RyaW5nIEFmdGVyICggY29u
c3QgY2hhciogY3N0ciApIGNvbnN0OwogICAgICAgIGlubGluZSBJU3RyaW5nIEFmdGVyICggY29u
c3QgY2hhciApIGNvbnN0OwoKICAgICAgICBpbmxpbmUgSVN0cmluZyBBc1VwcGVyICggdm9pZCAp
IGNvbnN0OwogICAgICAgIGlubGluZSBJU3RyaW5nIEFzTG93ZXIgKCB2b2lkICkgY29uc3Q7Cgog
ICAgICAgIHZvaWQgUHJpbnQgKCBjaGFyKiBwcmVmaXggPSBfX251bGwgKSBjb25zdDsKIyAyNjUg
Ii9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9JU3RyaW5n
LmgiIDIKCiAgICAgICAgfTsKCgoKIyAxICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hz
Y2FsZS14aW51L2luY2x1ZGUvc3lzL0lTdHJpbmdMZWdhY3lJbXAuaCIgMQojIDE4ICIvaG9tZS9y
bHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0lTdHJpbmdMZWdh
Y3lJbXAuaCIKaW5saW5lIElTdHJpbmcgSVN0cmluZzo6VHJhbnNmZXIgKCB2b2lkICkKICAgIHsK
ICAgIElTdHJpbmcgdGVtcDsKICAgIFRyYW5zZmVyICggdGVtcCApOwogICAgcmV0dXJuIHRlbXA7
CiAgICB9CgoKCgppbmxpbmUgdm9pZCBJU3RyaW5nOjpJbml0ICggdm9pZCApCiAgICAgICAgewog
ICAgICAgIExlbiA9IDA7CiAgICAgICAgY2FzZUluc2Vuc2l0aXZlID0gKChJQm9vbCkgMSk7CiAg
ICAgICAgREFycmF5OjpJbml0ICggKTsKICAgICAgICB9OwoKCgoKaW5saW5lIElTdHJpbmcgSVN0
cmluZzo6RXh0cmFjdCAoIHNpemVfdCBwb3MsIHNpemVfdCBjb3VudCApIGNvbnN0CiAgICB7CiAg
ICBJU3RyaW5nIHJlc3VsdDsKICAgIEV4dHJhY3QgKCBwb3MsIGNvdW50LCByZXN1bHQgKTsKICAg
IHJldHVybiByZXN1bHQ7CiAgICB9CgoKCgppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpFeHRyYWN0
ICggdm9pZCApCiAgICB7CiAgICBJU3RyaW5nIHJlc3VsdDsKICAgIEV4dHJhY3QgKCByZXN1bHQg
KTsKICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgoKCmlubGluZSBJU3RyaW5nIElTdHJpbmc6OkJl
Zm9yZSAoIGNvbnN0IElTdHJpbmcmIHN0ciApIGNvbnN0CiAgICAgICAgewogICAgICAgIElTdHJp
bmcgdGVtcDsKICAgICAgICBCZWZvcmUgKCBzdHIsIHRlbXAgKTsKICAgICAgICByZXR1cm4gdGVt
cDsKICAgICAgICB9CgppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpCZWZvcmUgKCBjb25zdCBjaGFy
KiBjc3RyICkgY29uc3QKICAgICAgICB7CiAgICAgICAgSVN0cmluZyB0ZW1wOwogICAgICAgIEJl
Zm9yZSAoIGNzdHIsIHRlbXAgKTsKICAgICAgICByZXR1cm4gdGVtcDsKICAgICAgICB9Cgppbmxp
bmUgSVN0cmluZyBJU3RyaW5nOjpCZWZvcmUgKCBjb25zdCBjaGFyIGNoICkgY29uc3QKICAgICAg
ICB7CiAgICAgICAgSVN0cmluZyB0ZW1wOwogICAgICAgIEJlZm9yZSAoIGNoLCB0ZW1wICk7CiAg
ICAgICAgcmV0dXJuIHRlbXA7CiAgICAgICAgfQoKCgoKaW5saW5lIElTdHJpbmcgSVN0cmluZzo6
QWZ0ZXIgKCBjb25zdCBJU3RyaW5nJiBzdHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICBJU3Ry
aW5nIHRlbXA7CiAgICAgICAgQWZ0ZXIgKCBzdHIsIHRlbXAgKTsKICAgICAgICByZXR1cm4gdGVt
cDsKICAgICAgICB9CgppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpBZnRlciAoIGNvbnN0IGNoYXIq
IGNzdHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICBJU3RyaW5nIHRlbXA7CiAgICAgICAgQWZ0
ZXIgKCBjc3RyLCB0ZW1wICk7CiAgICAgICAgcmV0dXJuIHRlbXA7CiAgICAgICAgfQoKaW5saW5l
IElTdHJpbmcgSVN0cmluZzo6QWZ0ZXIgKCBjb25zdCBjaGFyIGNoICkgY29uc3QKICAgICAgICB7
CiAgICAgICAgSVN0cmluZyB0ZW1wOwogICAgICAgIEFmdGVyICggY2gsIHRlbXAgKTsKICAgICAg
ICByZXR1cm4gdGVtcDsKICAgICAgICB9CgppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpIZWFkICgg
c2l6ZV90IGNvdW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgSVN0cmluZyB0ZW1wOwogICAg
ICAgIHRlbXAgPSBFeHRyYWN0ICggMCwgY291bnQgKTsKICAgICAgICByZXR1cm4gdGVtcDsKICAg
ICAgICB9CgppbmxpbmUgSVN0cmluZyBJU3RyaW5nOjpUYWlsICggc2l6ZV90IGNvdW50ICkgY29u
c3QKICAgICAgICB7CiAgICAgICAgSVN0cmluZyB0ZW1wOwogICAgICAgIHRlbXAgPSBFeHRyYWN0
ICggTGVuIC0gY291bnQsIGNvdW50ICk7CiAgICAgICAgcmV0dXJuIHRlbXA7CiAgICAgICAgfQoK
aW5saW5lIElTdHJpbmcgSVN0cmluZzo6RXh0cmFjdCAoIHNpemVfdCBpbmRleCApIGNvbnN0CiAg
ICAgICAgewogICAgICAgIElTdHJpbmcgdGVtcDsKICAgICAgICB0ZW1wID0gRXh0cmFjdCAoIGlu
ZGV4LCBMZW4gLSBpbmRleCApOwogICAgICAgIHJldHVybiB0ZW1wOwogICAgICAgIH07Cgppbmxp
bmUgSVN0cmluZyBJU3RyaW5nOjpBc1VwcGVyICggdm9pZCApIGNvbnN0CiAgICB7CiAgICBJU3Ry
aW5nIHRlbXA7CiAgICB0ZW1wID0gKnRoaXM7CiAgICAgICAgdGVtcC5Ub1VwcGVyICggKTsKICAg
IHJldHVybiB0ZW1wOwogICAgfQoKaW5saW5lIElTdHJpbmcgSVN0cmluZzo6QXNMb3dlciAoIHZv
aWQgKSBjb25zdAogICAgewogICAgSVN0cmluZyB0ZW1wOwogICAgdGVtcCA9ICp0aGlzOwogICAg
ICAgIHRlbXAuVG9Mb3dlciAoICk7CiAgICByZXR1cm4gdGVtcDsKICAgIH0KIyAyNzEgIi9ob21l
L3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9JU3RyaW5nLmgiIDIK
CgoKCgoKY2xhc3MgUGFyc2VkU3RyaW5nCiAgICB7CiAgcHJvdGVjdGVkOgogICAgSW50MzIgbnVt
QXJnczsKICAgIElTdHJpbmcqIGFyZ3M7CgogIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgUGFyc2VkU3RyaW5nICggdm9pZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3MgPSAwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoSVN0cmluZyopX19udWxsOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICBQYXJzZWRT
dHJpbmcgKCBjb25zdCBQYXJzZWRTdHJpbmcmIHJocyApCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3MgPSAwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoSVN0cmluZyopX19udWxsOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzID0gcmhzOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICAgICBQYXJzZWRTdHJp
bmcgKCBjb25zdCBjaGFyKiBpbnB1dCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3MgPSAwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoSVN0cmluZyopX19udWxsOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhcnNlICggaW5wdXQgKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgIH5QYXJzZWRTdHJpbmcgKCApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggYXJncyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gYXJnczsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoSVN0cmluZyopX19udWxsOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CgoKCiAg
ICBQYXJzZWRTdHJpbmcmIG9wZXJhdG9yID0oIGNvbnN0IFBhcnNlZFN0cmluZyYgKTsKCiAgICBJ
bnQzMiBQYXJzZSAoIGNvbnN0IGNoYXIqIGlucHV0ICk7CiAgICBjb25zdCBJU3RyaW5nJiBvcGVy
YXRvciBbXSAoIEludDMyIGluZGV4ICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MgW2luZGV4
XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgIEludDMyIENvdW50ICgg
dm9pZCApIGNvbnN0IHsgcmV0dXJuIG51bUFyZ3M7IH07CiAgICB9OwoKCgoKCgoKIGNoYXIqIGZp
bmRQYXJtU3RhcnQgKCBjaGFyICpzdHIgKTsKIGNoYXIqIGZpbmRQYXJtRW5kICggY2hhciAqc3Ry
ICk7CgoKCgoKCgogSW50MzIgUGFyc2VFbnZWYXIgKCBJU3RyaW5nJiBwYXRoICk7CgogY2hhciog
U3RyaW5nRmluZAogICAgICAgICgKICAgICAgICBjb25zdCBjaGFyKiBzdHJpbmcsCiAgICAgICAg
Y29uc3QgY2hhciogc3ViU3RyaW5nLAogICAgICAgIElCb29sIGNhc2VJbnNlbnNpdGl2ZQogICAg
ICAgICk7CgoKCgppbmxpbmUgSVN0cmluZzo6SVN0cmluZyAoKQogICAgewogICAgTGVuID0gMDsK
ICAgICAgICBjYXNlSW5zZW5zaXRpdmUgPSAoKElCb29sKSAxKTsKICAgIH0KCmlubGluZSBJU3Ry
aW5nOjpJU3RyaW5nICggY29uc3QgSVN0cmluZyAmIHN0ciApCiAgICB7CiAgICBMZW4gPSAwOwog
ICAgY2FzZUluc2Vuc2l0aXZlID0gKChJQm9vbCkgMSk7CiAgICAqdGhpcyA9IHN0cjsKICAgIH0K
CmlubGluZSBJU3RyaW5nOjpJU3RyaW5nICggY29uc3QgY2hhciAqIGNzdHIgKQogICAgewogICAg
TGVuID0gMDsKICAgIGNhc2VJbnNlbnNpdGl2ZSA9ICgoSUJvb2wpIDEpOwoKICAgIGlmICggY3N0
ciAmJiAqY3N0ciApCiAgICAgICAgKnRoaXMgPSBjc3RyOwogICAgfQoKaW5saW5lIElTdHJpbmc6
OklTdHJpbmcgKCBjaGFyIGNoICkKICAgIHsKICAgIExlbiA9IDA7CiAgICBjYXNlSW5zZW5zaXRp
dmUgPSAoKElCb29sKSAxKTsKCiAgICBpZiAoIGNoICkKICAgICAgICAqdGhpcyA9IGNoOwogICAg
fQoKaW5saW5lIElTdHJpbmc6On5JU3RyaW5nKCkKICAgIHsKICAgIH0KCmlubGluZSB2b2lkIElT
dHJpbmc6OlJlc2V0ICggdm9pZCApCiAgICB7CiAgICBEQXJyYXk6OlJlc2V0ICggKTsKICAgIExl
biA9IDA7CiAgICB9CgppbmxpbmUgSW50MzIgSVN0cmluZzo6TGVuZ3RoKCkgY29uc3QKICAgIHsK
ICAgIHJldHVybiBMZW47CiAgICB9OwoKaW5saW5lIElCb29sIElTdHJpbmc6OkVtcHR5KCkgY29u
c3QKICAgIHsKICAgIHJldHVybiAoTGVuZ3RoKCkpID8gKChJQm9vbCkgMCkgOiAoKElCb29sKSAx
KTsKICAgIH07CgppbmxpbmUgSW50MzIgSVN0cmluZzo6U2l6ZSgpIGNvbnN0CiAgICB7CiAgICBy
ZXR1cm4gKEludDMyKSBEQXJyYXk6OkFsbG9jU2l6ZSgpOwogICAgfTsKCmlubGluZSBjaGFyICog
SVN0cmluZzo6Y2hhcnMgKCB2b2lkICkgY29uc3QKICAgIHsKICAgIGNoYXIgKiByZXRWYWwgPSAi
IjsKICAgICAgICBpZiAoIExlbiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBV
SW50OCAqIHBEYXRhID0gREFycmF5OjpkYXRhOwogICAgICAgICAgICAgICAgcmV0VmFsID0gKGNo
YXIgKikgKCBjb25zdF9jYXN0IDwgVUludDggKiA+IChwRGF0YSkgKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgcmV0dXJuIHJldFZhbDsKICAgIH07CgppbmxpbmUgY2hhciAqIElTdHJpbmc6
OlByaW50U3RyaW5nICh2b2lkKSBjb25zdAogICAgewogICAgICAgIGNoYXIgKiByZXRWYWwgPSAi
IjsKICAgICAgICBpZiAoIExlbiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBV
SW50OCAqIHBEYXRhID0gREFycmF5OjpkYXRhOwogICAgICAgICAgICAgICAgcmV0VmFsID0gKGNo
YXIgKikgKCBjb25zdF9jYXN0IDwgVUludDggKiA+IChwRGF0YSkgKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgcmV0dXJuIHJldFZhbDsKICAgIH07CgppbmxpbmUgSVN0cmluZzo6b3BlcmF0
b3IgY29uc3QgY2hhciAqICgpIGNvbnN0CiAgICB7CiAgICByZXR1cm4gTGVuID8gKGNvbnN0IGNo
YXIgKikgREFycmF5OjpkYXRhIDogIiI7CiAgICB9OwoKaW5saW5lIElTdHJpbmc6Om9wZXJhdG9y
IGNoYXIgKiAoKSBjb25zdAogICAgewogICAgICAgIGNoYXIgKiByZXRWYWwgPSAiIjsKICAgICAg
ICBpZiAoIExlbiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBVSW50OCAqIHBE
YXRhID0gREFycmF5OjpkYXRhOwogICAgICAgICAgICAgICAgcmV0VmFsID0gKGNoYXIgKikgKCBj
b25zdF9jYXN0IDwgVUludDggKiA+IChwRGF0YSkgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgcmV0dXJuIHJldFZhbDsKICAgIH07CgppbmxpbmUgdm9pZCBJU3RyaW5nOjpTZXRDYXNlSW5z
ZW5zaXRpdmUgKCB2b2lkICkKICAgIHsKICAgIGNhc2VJbnNlbnNpdGl2ZSA9ICgoSUJvb2wpIDEp
OwogICAgfTsKCmlubGluZSB2b2lkIElTdHJpbmc6OlNldENhc2VTZW5zaXRpdmUgKCB2b2lkICkK
ICAgIHsKICAgIGNhc2VJbnNlbnNpdGl2ZSA9ICgoSUJvb2wpIDApOwogICAgfTsKCmlubGluZSBJ
Qm9vbCBJU3RyaW5nOjpJc0Nhc2VTZW5zaXRpdmUgKCB2b2lkICkgY29uc3QKICAgIHsKICAgIHJl
dHVybiBjYXNlSW5zZW5zaXRpdmUgPyAoKElCb29sKSAwKSA6ICgoSUJvb2wpIDEpOwogICAgfTsK
CgoKCgoKaW5saW5lIHZvaWQgSVN0cmluZzo6VGVybWluYXRlICggdm9pZCApCiAgICB7CiAgICBp
ZiAoIChMZW4gPj0gMCkgJiYgZGF0YSApCiAgICAgICAgZGF0YVtMZW5dID0gJ1wwJzsKICAgIH07
CgoKCgppbmxpbmUgSVN0cmluZyYgSVN0cmluZzo6b3BlcmF0b3IgLT0gKCBjb25zdCBJU3RyaW5n
ICYgc3RyICkKICAgIHsKICAgIERlbGV0ZSAoIHN0ciApOwogICAgcmV0dXJuICp0aGlzOwogICAg
fQoKaW5saW5lIElTdHJpbmcmIElTdHJpbmc6Om9wZXJhdG9yIC09ICggY29uc3QgY2hhciogY3N0
ciApCiAgICB7CiAgICBpZiAoIGNzdHIgKQogICAgICAgIERlbGV0ZSAoIGNzdHIgKTsKICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCmlubGluZSBJU3RyaW5nJiBJU3RyaW5nOjpvcGVyYXRvciAtPSAo
IGNoYXIgY2ggKQogICAgewogICAgY2hhciB0bXBbMl0gPSB7IGNoLCAnXDAnIH07CiAgICBEZWxl
dGUgKCB0bXAgKTsKICAgIHJldHVybiAqdGhpczsKICAgIH0KCmlubGluZSBJU3RyaW5nJiBJU3Ry
aW5nOjpvcGVyYXRvciAtLSAoICkKICAgIHsKICAgIGlmICggTGVuID4gMCApCiAgICAgICAgZGF0
YVstLUxlbl0gPSAnXDAnOwogICAgcmV0dXJuICp0aGlzOwogICAgfTsKCgoKCmlubGluZSBJU3Ry
aW5nJiBJU3RyaW5nOjpvcGVyYXRvciArPSAoY29uc3QgSVN0cmluZyAmIHN0cikKICAgIHsKICAg
IEluc2VydCAoIExlbiwgKGNvbnN0IGNoYXIqKSBzdHIsIHN0ci5MZW4gKTsKICAgIHJldHVybiAq
dGhpczsKICAgIH0KCmlubGluZSBJU3RyaW5nJiBJU3RyaW5nOjpvcGVyYXRvciArPSAoY29uc3Qg
Y2hhciogY3N0cikKICAgIHsKICAgIGlmICggY3N0ciApCiAgICAgICAgSW5zZXJ0ICggTGVuLCBj
c3RyLCBzdHJsZW4gKGNzdHIpICk7CiAgICByZXR1cm4gKnRoaXM7CiAgICB9CgppbmxpbmUgSVN0
cmluZyYgSVN0cmluZzo6b3BlcmF0b3IgKz0gKGNoYXIgY2gpCiAgICB7CiAgICBJbnNlcnQgKCBM
ZW4sICZjaCwgMSApOwogICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKaW5saW5lIElTdHJpbmcg
b3BlcmF0b3IgKyAoY29uc3QgY2hhciAqIHN0cjEsIGNvbnN0IElTdHJpbmcmIHN0cjIpCiAgICB7
CiAgICBJU3RyaW5nIHJ0bihzdHIxKTsKICAgIHJ0biArPSBzdHIyOwogICAgcmV0dXJuIHJ0bjsK
ICAgIH0KCmlubGluZSBJU3RyaW5nIG9wZXJhdG9yICsgKGNoYXIgY2gxLCBjb25zdCBJU3RyaW5n
JiBzdHIyKQogICAgewogICAgSVN0cmluZyBydG4oY2gxKTsKICAgIHJ0biArPSBzdHIyOwogICAg
cmV0dXJuIHJ0bjsKICAgIH0KCgoKCmlubGluZSBJU3RyaW5nIG9wZXJhdG9yIC0gKGNvbnN0IGNo
YXIgKiBzdHIxLCBjb25zdCBJU3RyaW5nJiBzdHIyKQogICAgewogICAgSVN0cmluZyBydG4oc3Ry
MSk7CiAgICBydG4gLT0gc3RyMjsKICAgIHJldHVybiBydG47CiAgICB9CgppbmxpbmUgSVN0cmlu
ZyBvcGVyYXRvciAtIChjaGFyIGNoMSwgY29uc3QgSVN0cmluZyYgc3RyMikKICAgIHsKICAgIElT
dHJpbmcgcnRuKGNoMSk7CiAgICBydG4gLT0gc3RyMjsKICAgIHJldHVybiBydG47CiAgICB9CgoK
CgoKaW5saW5lIElTdHJpbmcmIElTdHJpbmc6Om9wZXJhdG9yIDw8PSAoSVN0cmluZyAmIHN0cikK
ICAgIHsKICAgIHN0ci5UcmFuc2ZlcigqdGhpcyk7CiAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoK
CgppbmxpbmUgSUJvb2wgSVN0cmluZzo6Q29udGFpbnMgKCBjb25zdCBJU3RyaW5nJiBzdHIgKSBj
b25zdAogICAgewogICAgcmV0dXJuIChGaW5kICggc3RyICkgPj0gMCA/ICgoSUJvb2wpIDEpIDog
KChJQm9vbCkgMCkpOwogICAgfTsKCmlubGluZSBJQm9vbCBJU3RyaW5nOjpDb250YWlucyAoIGNv
bnN0IGNoYXIqIGNzdHIgKSBjb25zdAogICAgewogICAgcmV0dXJuIChGaW5kICggY3N0ciApID49
IDAgPyAoKElCb29sKSAxKSA6ICgoSUJvb2wpIDApKTsKICAgIH07CgppbmxpbmUgSUJvb2wgSVN0
cmluZzo6Q29udGFpbnMgKCBjaGFyIGNoICkgY29uc3QKICAgIHsKICAgIHJldHVybiAoRmluZCAo
IGNoICkgPj0gMCA/ICgoSUJvb2wpIDEpIDogKChJQm9vbCkgMCkpOwogICAgfTsKCgoKCmlubGlu
ZSBJbnQzMiBJU3RyaW5nOjpvcGVyYXRvciA8IChjb25zdCBJU3RyaW5nICYgc3RyKSBjb25zdAog
ICAgewogICAgcmV0dXJuIENvbXBhcmUgKCBzdHIgKSA8IDAgPyAxIDogMDsKICAgIH0KCmlubGlu
ZSBJbnQzMiBJU3RyaW5nOjpvcGVyYXRvciA+IChjb25zdCBJU3RyaW5nICYgc3RyKSBjb25zdAog
ICAgewogICAgcmV0dXJuIENvbXBhcmUgKCBzdHIgKSA+IDAgPyAxIDogMDsKICAgIH0KCmlubGlu
ZSBJbnQzMiBJU3RyaW5nOjpvcGVyYXRvciA8PSAoY29uc3QgSVN0cmluZyAmIHN0cikgY29uc3QK
ICAgIHsKICAgIHJldHVybiBDb21wYXJlICggc3RyICkgPD0gMCA/IDEgOiAwOwogICAgfQoKaW5s
aW5lIEludDMyIElTdHJpbmc6Om9wZXJhdG9yID49IChjb25zdCBJU3RyaW5nICYgc3RyKSBjb25z
dAogICAgewogICAgcmV0dXJuIENvbXBhcmUgKCBzdHIgKSA+PSAwID8gMSA6IDA7CiAgICB9Cgpp
bmxpbmUgSW50MzIgSVN0cmluZzo6b3BlcmF0b3IgPT0gKGNvbnN0IElTdHJpbmcgJiBzdHIpIGNv
bnN0CiAgICB7CiAgICByZXR1cm4gKExlbiAhPSBzdHIuTGVuKSA/IDAgOiBDb21wYXJlICggc3Ry
ICkgPT0gMCA/IDEgOiAwOwogICAgfQoKaW5saW5lIEludDMyIElTdHJpbmc6Om9wZXJhdG9yICE9
IChjb25zdCBJU3RyaW5nICYgc3RyKSBjb25zdAogICAgewogICAgcmV0dXJuIChMZW4gIT0gc3Ry
LkxlbikgPyAxIDogQ29tcGFyZSAoIHN0ciApICE9IDAgPyAxIDogMDsKICAgIH0KCgoKCmlubGlu
ZSBJbnQzMiBJU3RyaW5nOjpvcGVyYXRvciA8IChjb25zdCBjaGFyKiBjc3RyKSBjb25zdAogICAg
ewogICAgcmV0dXJuIENvbXBhcmUgKCBjc3RyICkgPCAwID8gMSA6IDA7CiAgICB9CgppbmxpbmUg
SW50MzIgSVN0cmluZzo6b3BlcmF0b3IgPiAoY29uc3QgY2hhciogY3N0cikgY29uc3QKICAgIHsK
ICAgIHJldHVybiBDb21wYXJlICggY3N0ciApID4gMCA/IDEgOiAwOwogICAgfQoKaW5saW5lIElu
dDMyIElTdHJpbmc6Om9wZXJhdG9yIDw9IChjb25zdCBjaGFyKiBjc3RyKSBjb25zdAogICAgewog
ICAgcmV0dXJuIENvbXBhcmUgKCBjc3RyICkgPD0gMCA/IDEgOiAwOwogICAgfQoKaW5saW5lIElu
dDMyIElTdHJpbmc6Om9wZXJhdG9yID49IChjb25zdCBjaGFyKiBjc3RyKSBjb25zdAogICAgewog
ICAgcmV0dXJuIENvbXBhcmUgKCBjc3RyICkgPj0gMCA/IDEgOiAwOwogICAgfQoKaW5saW5lIElu
dDMyIElTdHJpbmc6Om9wZXJhdG9yID09IChjb25zdCBjaGFyKiBjc3RyKSBjb25zdAogICAgewog
ICAgcmV0dXJuIENvbXBhcmUgKCBjc3RyICkgPT0gMCA/IDEgOiAwOwogICAgfQoKaW5saW5lIElu
dDMyIElTdHJpbmc6Om9wZXJhdG9yICE9IChjb25zdCBjaGFyKiBjc3RyKSBjb25zdAogICAgewog
ICAgcmV0dXJuIENvbXBhcmUgKCBjc3RyICkgIT0gMCA/IDEgOiAwOwogICAgfQoKCgoKaW5saW5l
IEludDMyIElTdHJpbmc6Okluc2VydCAoIEludDMyIHBvcywgY29uc3QgSVN0cmluZyAmIHN0ciAp
CiAgICB7CiAgICBpZiAoIHN0ci5MZW4gKQogICAgICAgIHJldHVybiBJbnNlcnQgKCBwb3MsIChj
b25zdCBjaGFyKikgc3RyLCBzdHIuTGVuICk7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIC0xOwog
ICAgfTsKCmlubGluZSBJbnQzMiBJU3RyaW5nOjpJbnNlcnQgKCBJbnQzMiBwb3MsIGNoYXIgY2gg
KQogICAgewogICAgcmV0dXJuIEluc2VydCAoIHBvcywgJmNoLCAxICk7CiAgICB9OwoKaW5saW5l
IEludDMyIElTdHJpbmc6Okluc2VydCAoIEludDMyIHBvcywgY29uc3QgY2hhciogY3N0ciApCiAg
ICB7CiAgICBpZiAoIGNzdHIgKQogICAgICAgIHJldHVybiBJbnNlcnQgKCBwb3MsIGNzdHIsIHN0
cmxlbiAoY3N0cikgKTsKICAgIGVsc2UKICAgICAgICByZXR1cm4gLTE7CiAgICB9OwoKCgoKaW5s
aW5lIEludDMyIElTdHJpbmc6OlJlcGxhY2UgKCBJbnQzMiBwb3MsIGNvbnN0IElTdHJpbmcgJiBz
dHIgKQogICAgewogICAgaWYgKCBzdHIuTGVuICkKICAgICAgICByZXR1cm4gUmVwbGFjZSAoIHBv
cywgKGNvbnN0IGNoYXIqKSBzdHIsIHN0ci5MZW4gKTsKICAgIGVsc2UKICAgICAgICByZXR1cm4g
LTE7CiAgICB9OwoKaW5saW5lIEludDMyIElTdHJpbmc6OlJlcGxhY2UgKCBJbnQzMiBwb3MsIGNo
YXIgY2ggKQogICAgewogICAgcmV0dXJuIFJlcGxhY2UgKCBwb3MsICZjaCwgMSApOwogICAgfTsK
CmlubGluZSBJbnQzMiBJU3RyaW5nOjpSZXBsYWNlICggSW50MzIgcG9zLCBjb25zdCBjaGFyKiBj
c3RyICkKICAgIHsKICAgIGlmICggY3N0ciApCiAgICAgICAgcmV0dXJuIFJlcGxhY2UgKCBwb3Ms
IGNzdHIsIHN0cmxlbiAoY3N0cikgKTsKICAgIGVsc2UKICAgICAgICByZXR1cm4gLTE7CiAgICB9
OwoKCgoKaW5saW5lIElTdHJpbmcmIElTdHJpbmc6OkhlYWQgKCBJbnQzMiBjb3VudCwgSVN0cmlu
ZyAmcmVzdWx0ICkgY29uc3QKICAgIHsKICAgIHJldHVybiBFeHRyYWN0ICggMCwgY291bnQsIHJl
c3VsdCApOwogICAgfQoKaW5saW5lIElTdHJpbmcmIElTdHJpbmc6OlRhaWwgKCBJbnQzMiBjb3Vu
dCwgSVN0cmluZyAmcmVzdWx0ICkgY29uc3QKICAgIHsKICAgIHJldHVybiBFeHRyYWN0ICggTGVu
IC0gY291bnQsIGNvdW50LCByZXN1bHQgKTsKICAgIH0KCmlubGluZSBJU3RyaW5nJiBJU3RyaW5n
OjpFeHRyYWN0ICggSW50MzIgaW5kZXgsIElTdHJpbmcgJnJlc3VsdCApIGNvbnN0CiAgICB7CiAg
ICByZXR1cm4gRXh0cmFjdCAoIGluZGV4LCBMZW4gLSBpbmRleCwgcmVzdWx0ICk7CiAgICB9OwoK
CgoKaW5saW5lIElTdHJpbmcmIElTdHJpbmc6OkFzVXBwZXIgKCBJU3RyaW5nJiBpbnRvU3RyaW5n
ICkgY29uc3QKICAgIHsKICAgIGludG9TdHJpbmcgPSAqdGhpczsKICAgIGludG9TdHJpbmcuVG9V
cHBlciAoICk7CiAgICByZXR1cm4gaW50b1N0cmluZzsKICAgIH0KCmlubGluZSBJU3RyaW5nJiBJ
U3RyaW5nOjpBc0xvd2VyICggSVN0cmluZyYgaW50b1N0cmluZyApIGNvbnN0CiAgICB7CiAgICBp
bnRvU3RyaW5nID0gKnRoaXM7CiAgICBpbnRvU3RyaW5nLlRvTG93ZXIgKCApOwogICAgcmV0dXJu
IGludG9TdHJpbmc7CiAgICB9CgoKCgppbmxpbmUgY2hhciYgSVN0cmluZzo6b3BlcmF0b3IgW10g
KEludDMyIHBvcykKICAgIHsKICAgIGlmICggcG9zID4gTGVuICkKICAgICAgICByZXR1cm4gKGNo
YXImKSBEQXJyYXk6OmJhZDsKCiAgICByZXR1cm4gKGNoYXImKURBcnJheTo6b3BlcmF0b3JbXShw
b3MpOwogICAgfQoKaW5saW5lIGNoYXIgSVN0cmluZzo6RWxlbWVudCAoSW50MzIgcG9zKSBjb25z
dAogICAgewogICAgaWYgKCBwb3MgPiBMZW4gKQogICAgICAgIHJldHVybiBEQXJyYXk6OmJhZDsK
CiAgICByZXR1cm4gREFycmF5OjpkYXRhIFsgcG9zIF07CiAgICB9CiMgNDAgIi9ob21lL3JscC94
c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvU3lzTXNnLmgiIDIKIyAx
ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51L2luY2x1ZGUvc3lzL0xv
Y2tTZW0uaCIgMQojIDI0ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3hzY2FsZS14aW51
L2luY2x1ZGUvc3lzL0xvY2tTZW0uaCIKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgpjbGFzcyBQcm9j
ZXNzOwoKCgoKY2xhc3MgTG9ja1NlbSA6IHB1YmxpYyBLTXV0ZXgKICAgICAgICB7CnB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2tTZW0gKCBpbnQgbG9j
a0ZsYWcgPSAoKElCb29sKSAwKSApOwoKICAgICAgICBVSW50IENvdW50ICggdm9pZCApIGNvbnN0
IHsgcmV0dXJuIEdldExvY2tMZXZlbCAoKTsgfTsKCiAgICAgICAgUHJvY2VzcyAqIE93bmVyICgg
dm9pZCApIGNvbnN0IHsgcmV0dXJuIEdldExvY2tPd25lciAoKTsgfTsKCiAgICAgICAgdm9pZCBT
aG93ICggdm9pZCApOwogICAgICAgIH07CiMgNDEgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUv
b3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvU3lzTXNnLmgiIDIKCgojIDEgIi9ob21lL3JscC94
c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9TeXNUeXBlcy5oIiAxCiMgNDQg
Ii9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3MveHNjYWxlLXhpbnUvaW5jbHVkZS9zeXMvU3lz
TXNnLmgiIDIKCgoKY29uc3QgSW50IG1zZ0VudHJ5QnVmZmVyTGVuZ3RoID0gMjU2Owpjb25zdCBJ
bnQgcHJlZml4QnVmZmVyTGVuZ3RoID0gMTI7CgoKCmNsYXNzIE1zZ0VudHJ5CiAgICAgICAgewpw
dWJsaWM6CiAgICAgICAgVUludDMyIHNlY29uZHM7CiAgICAgICAgVUludDE2IHRpY2tzOwogICAg
ICAgIFVJbnQxNiBtc2dOdW1iZXI7CiAgICAgICAgVUludDE2IG1zZ0xlbmd0aDsKICAgICAgICBJ
Qm9vbCB3YWxsRmxhZzsKICAgICAgICBjaGFyIHByZWZpeCBbIHByZWZpeEJ1ZmZlckxlbmd0aCAr
IDEgXTsKICAgICAgICBjaGFyIGJ1ZmZlciBbIG1zZ0VudHJ5QnVmZmVyTGVuZ3RoIF07CgogICAg
ICAgIE1zZ0VudHJ5ICggdm9pZCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBt
c2dOdW1iZXIgPSAwOwogICAgICAgICAgICAgICAgbXNnTGVuZ3RoID0gMDsKICAgICAgICAgICAg
ICAgIGJ1ZmZlciBbIDAgXSA9IDA7CiAgICAgICAgICAgICAgICB3YWxsRmxhZyA9ICgoSUJvb2wp
IDApOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgfTsKCgoKY2xhc3MgRmRFbnRyeSA6IHB1
YmxpYyBOb2RlCiAgICAgICAgewpwcml2YXRlOgogICAgICAgIGludCBmZDsKICAgICAgICBJQm9v
bCBiRW5hYmxlZDsKICAgICAgICBVSW50IG92ZXJmbG93Q291bnQ7CiAgICAgICAgVUludCBjdXJy
ZW50T3ZlckZsb3c7CgoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZk
RW50cnkgKCBpbnQgdGhlRmQgKTsKCiAgICAgICAgaW50IEZkICggdm9pZCApIHsgcmV0dXJuIGZk
OyB9CiAgICAgICAgdm9pZCBGZCAoIGludCB0aGVGZCApIHsgZmQgPSB0aGVGZDsgfQoKICAgICAg
ICB2b2lkIEVuYWJsZSAoIElCb29sIGZsYWcgKSB7IGJFbmFibGVkID0gZmxhZzsgfTsKICAgICAg
ICBJQm9vbCBFbmFibGVkICggdm9pZCApIGNvbnN0IHsgcmV0dXJuIGJFbmFibGVkOyB9OwoKCiAg
ICAgICAgdm9pZCBXcml0ZSAoIGNoYXIgKiBwTXNnLCBjaGFyICogcEhlYWRlciApOwogICAgICAg
IElCb29sIFdpbGxCbG9jayAoIFVJbnQzMiBsZW5ndGggKTsKICAgICAgICB2b2lkIFNob3cgKCB2
b2lkICk7CiAgICAgICAgdm9pZCBTaG93SGVhZGVyICggdm9pZCApOwoKICAgICAgICB2b2lkIElu
Y092ZXJGbG93ICggdm9pZCApOwogICAgICAgIH07CgoKCgoKCmNsYXNzIFN5c01zZwogICAgICAg
IHsKcHJpdmF0ZToKCnByb3RlY3RlZDoKICAgICAgICBpbnQgdmFsaWQ7CiAgICAgICAgVUludDE2
IGxhc3RNc2dOdW1iZXI7CiAgICAgICAgVUludCBvdmVyZmxvd0NvdW50OwogICAgICAgIFVJbnQg
Y3VycmVudE92ZXJGbG93OwogICAgICAgIFVJbnQzMiBjb25zb2xlV2FpdDsKICAgICAgICBQb3J0
IGZyZWVRdWV1ZTsKICAgICAgICBQb3J0IHVzZWRRdWV1ZTsKCgogICAgICAgIHN0YXRpYyBjb25z
dCBJbnQgc3lzTXNnU3RhY2sgPSAyMDQ4OwogICAgICAgIHN0YXRpYyBjb25zdCBJbnQgc3lzTXNn
UHJpb3JpdHkgPSAyMDA7CiAgICAgICAgc3RhdGljIGNvbnN0IEludCBzeXNNc2dGbGFncyA9IDA7
CgogICAgICAgIFByb2Nlc3MgKiBwTW9uaXRvclByb2Nlc3M7CgogICAgICAgIExvY2tTZW0gbG9j
a1NlbTsKCiAgICAgICAgTXNnRW50cnkgKiBNc2dBbGxvYyAoIEludCBibG9ja0ZsYWcgPSAoKElC
b29sKSAwKSApOwoKICAgICAgICBJbnQgTXNnRnJlZSAoIE1zZ0VudHJ5ICogcE1zZywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludCBi
bG9ja0ZsYWcgPSAoKElCb29sKSAwKSApOwoKICAgICAgICBNc2dFbnRyeSAqIE1zZ1BlbmQgKCBJ
bnQgYmxvY2tGbGFnID0gKChJQm9vbCkgMSkgKTsKCiAgICAgICAgSW50IE1zZ1Bvc3QgKCBNc2dF
bnRyeSAqIHBNc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnQgYmxvY2tGbGFnID0gKChJQm9vbCkgMCkgKTsKCiAgICAgICAgRmRF
bnRyeSAqIHBDb25zb2xlRmQ7CiAgICAgICAgSW50IGJ1ZmZlcmVkTGltaXQ7CiAgICAgICAgTGlz
dCBmZExpc3Q7CgogICAgICAgIHZvaWQgTG9jayAoIHZvaWQgKTsKICAgICAgICB2b2lkIFVubG9j
ayAoIHZvaWQgKTsKCiAgICAgICAgTGlzdCB3YWxsRmRMaXN0OwogICAgICAgIElCb29sIHdhbGxG
bGFnOwoKcHVibGljOgogICAgICAgIHN0cnVjdCBMb2dJbmZvCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBjaGFyICogcFdydDsKICAgICAgICAgICAgICAgIEludCBzcGFjZUxlZnQ7
CiAgICAgICAgICAgICAgICB9OwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lz
TXNnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50IG1heEVudHJ5cwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCgogICAgICAgIEludCBBZGRGZCAoIGludCB0
aGVGZCApOwogICAgICAgIEludCBGaXJzdEZkICggaW50IHRoZUZkICk7CiAgICAgICAgRmRFbnRy
eSAqIEZpbmRGZCAoIGludCB0aGVGZCApOwoKICAgICAgICBJbnQgaXNWYWxpZCAoIHZvaWQgKSBj
b25zdDsKCiAgICAgICAgSW50IExvZyAoIGNvbnN0IGNoYXIgKiBwRm9ybWF0LCAuLi4gKTsKICAg
ICAgICBJbnQgTG9nTGlzdCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJQm9vbCB3YWxsRmxhZ1Bhcm0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcEZv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhX2xpc3QgYXJnTGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgIEludCBMb2dMaXN0ICgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKiBwRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdMaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgdm9pZCBNb25pdG9yICgg
SW50IHRoZUZkICk7CgogICAgICAgIEludCBSZWFkCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICogZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludCBt
YXhMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQgYmxv
Y2tGbGFnID0gKChJQm9vbCkgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CiAgICAgICAgSW50IFJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludCAmIG1z
Z051bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQzMiAm
IHNlY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludCAmIHRp
Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogZGVzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludCBtYXhMZW5ndGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQgYmxvY2tGbGFnID0gKChJ
Qm9vbCkgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAg
ICAgIEludCBSZW1vdmVGZCAoIGludCB0aGVGZCApOwoKICAgICAgICBJbnQgU2hvdyAoIHZvaWQg
KTsKCiAgICAgICAgSW50IFNwYXduTW9uaXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
IHRoZUZkID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQg
dGhlUHJpb3JpdHkgPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwoKCiAgICAgICAgRmRFbnRyeSAqIFdhbGxGaW5kRmQgKCBpbnQgdGhlRmQgKTsKICAgICAgICBJ
bnQgV2FsbEFkZEZkICggaW50IHRoZUZkICk7CiAgICAgICAgSW50IFdhbGxSZW1vdmVGZCAoIGlu
dCB0aGVGZCApOwoKICAgICAgICBJbnQgTWVzc2FnZUNvdW50ICggdm9pZCApIHsgcmV0dXJuIHVz
ZWRRdWV1ZS5jb3VudCAoICk7IH0KICAgICAgICB9OwoKCgpleHRlcm4gU3lzTXNnICogcFN5c01z
ZzsKCmV4dGVybiBJbnQgc3lzTXNnSW5pdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzTXNn
ICogcFN5c01zZ01vbml0b3IgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50IHRoZUZkID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEludCBtYXhNZXNzYWdlcyA9IDUxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVJbnQgdGhlUHJpb3JpdHkgPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwoKZXh0ZXJuIEludCBzeXNNc2cKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHBGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgpl
eHRlcm4gSW50IHdhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBGb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgpleHRlcm4gSW50IHZzeXNNc2cKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBGb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CgpleHRlcm4gSW50IHN5c1ByaW50ZgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHBGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CgpleHRlcm4gSW50IHN5c01zZ0J1ZmZlckxlbmd0aCAoIHZvaWQgKTsKCgoKZXh0
ZXJuIEludCBzeXNNc2dBZGRGZCAoIHZvaWQgKTsKZXh0ZXJuIEludCBzeXNNc2dSZW1GZCAoIElu
dCB0aGVGZCApOwpleHRlcm4gSW50IHN5c01zZ1JlbU15RmQgKCB2b2lkICk7CmV4dGVybiBJbnQg
d2FsbE1zZ0FkZEZkICggdm9pZCApOwpleHRlcm4gSW50IHdhbGxNc2dSZW1GZCAoIEludCB0aGVG
ZCApOwpleHRlcm4gSW50IHdhbGxNc2dSZW1NeUZkICggdm9pZCApOwoKCgoKZXh0ZXJuIEludCBz
eXNNc2dEaXNhYmxlTXlGZCAoIHZvaWQgKTsKZXh0ZXJuIEludCBzeXNNc2dFbmFibGVNeUZkICgg
dm9pZCApOwpleHRlcm4gSW50IHdhbGxNc2dEaXNhYmxlTXlGZCAoIHZvaWQgKTsKZXh0ZXJuIElu
dCB3YWxsTXNnRW5hYmxlTXlGZCAoIHZvaWQgKTsKCgoKZXh0ZXJuIEludCBzeXNNc2dEaXNhYmxl
Q29uc29sZSAoIHZvaWQgKTsKZXh0ZXJuIEludCBzeXNNc2dFbmFibGVDb25zb2xlICggdm9pZCAp
OwoKZXh0ZXJuIEludCBzeXNNc2dQZW5kaW5nQ291bnQgKCB2b2lkICk7CmV4dGVybiB2b2lkIHBl
bmRGb3JTeXNNc2cgKCB2b2lkICk7CgoKCgoKaW5saW5lIEludCBTeXNNc2c6OmlzVmFsaWQgKCB2
b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIHZhbGlkOwogICAgICAgIH07Cgpp
bmxpbmUgdm9pZCBTeXNNc2c6OkxvY2sgKCB2b2lkICkKICAgICAgICB7CiAgICAgICAgbG9ja1Nl
bS5Mb2NrICgpOwogICAgICAgIH07CgppbmxpbmUgdm9pZCBTeXNNc2c6OlVubG9jayAoIHZvaWQg
KQogICAgICAgIHsKICAgICAgICBsb2NrU2VtLlVubG9jayAoKTsKICAgICAgICB9OwojIDMxICIv
aG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9w
Y2kvY29tbW9uL1BjaUNvbmZpZ0Jhc2UuaCIgMgojIDM5ICIvaG9tZS9ybHAveHNjYWxlL3Byb2Jl
L3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaUNvbmZpZ0Jh
c2UuaCIKc3RydWN0IFBjaUhlYWRlcgogICAgICAgIHsKICAgICAgICBVSW50MTYgX2NmZ1ZpZDsK
ICAgICAgICBVSW50MTYgX2NmZ0RpZDsKICAgICAgICBVSW50MTYgX2NmZ0NtZDsKICAgICAgICBV
SW50MTYgX2NmZ1N0YXQ7CiAgICAgICAgVUludDggX2NmZ1JpZDsKICAgICAgICBVSW50OCBfY2Zn
Q2xhc3NbM107CiAgICAgICAgVUludDggX2NmZ0NhTG47CiAgICAgICAgVUludDggX2NmZ0xhdDsK
ICAgICAgICBVSW50OCBfY2ZnSGVhZHI7CiAgICAgICAgVUludDggX2NmZ0Jpc3Q7CiAgICAgICAg
VUludDMyIF9jZmdCYWRyIFsgUENJX0Jhc2VBZGRyZXNzQ291bnQgXTsKICAgICAgICBVSW50MzIg
X2NmZ0NpczsKICAgICAgICBVSW50MTYgX2NmZ1N1YlZpZDsKICAgICAgICBVSW50MTYgX2NmZ1N1
QmlkOwogICAgICAgIFVJbnQzMiBfY2ZnRXhSb207CiAgICAgICAgVUludDMyIF9jZmdSZXNbMl07
CiAgICAgICAgVUludDggX2NmZ0ludExuOwogICAgICAgIFVJbnQ4IF9jZmdJbnRQaW47CiAgICAg
ICAgVUludDggX2NmZ01pbkdudDsKICAgICAgICBVSW50OCBfY2ZnTWF4TGF0OwogICAgICAgIH07
CgoKdW5pb24gUGNpQ29uZmlnCiAgICAgICAgewogICAgICAgIFVJbnQ4IGNmZ0J5dGVzIFsgUENJ
X0NvbmZpZ0hlYWRlclNpemUgXTsKICAgICAgICBVSW50MzIgY2ZnV29yZHMgWyAoIFBDSV9Db25m
aWdIZWFkZXJTaXplIC8gc2l6ZW9mIChVSW50MzIpICkgXTsKICAgICAgICBQY2lIZWFkZXIgY2Zn
SGRyOwogICAgICAgIH07CgoKY2xhc3MgUGNpQ29uZmlndXJhdG9yQmFzZQogICAgICAgIHsKcHJv
dGVjdGVkOgogICAgICAgIG11dGFibGUgUGNpQ29uZmlnIGNvbmZpZzsKCiAgICAgICAgVUludDMy
IGFkZHJlc3M7CgoKcHVibGljOgogICAgICAgICAgICAgICAgUGNpQ29uZmlndXJhdG9yQmFzZSAo
IHZvaWQgKTsKICAgICAgICAgICAgICAgIH5QY2lDb25maWd1cmF0b3JCYXNlICggdm9pZCApOwoK
ICAgICAgICB2b2lkIEFkZHJlc3MgKCBVSW50MzIgYWRkcmVzc1Bhcm0gKSB7IGFkZHJlc3MgPSBh
ZGRyZXNzUGFybTsgfQogICAgICAgIFVJbnQzMiBBZGRyZXNzICggdm9pZCApIGNvbnN0IHsgcmV0
dXJuIGFkZHJlc3M7IH0KCiAgICAgICAgdmlydHVhbCB2b2lkIFJlYWRXb3JkICggVUludDMyICkg
Y29uc3QgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBXcml0ZVdvcmQgKCBVSW50MzIgKSA9IDA7
CgoKCiAgICAgICAgdmlydHVhbCBJQm9vbCBQY2lWYWxpZERldmljZSAoIHZvaWQgKSA9IDA7CgoK
ICAgICAgICBpbmxpbmUgSUJvb2wgUGNpVmFsaWRJb0Jhc2VBZGRyZXNzUmVnaXN0ZXIgKCBVSW50
MzIgcmVnVmFsdWUgKTsKICAgICAgICBpbmxpbmUgSUJvb2wgUGNpVmFsaWRNZW1CYXNlQWRkcmVz
c1JlZ2lzdGVyICggVUludDMyIHJlZ1ZhbHVlICk7CgogICAgICAgIGlubGluZSBzdGF0aWMgSUJv
b2wgQWxpZ25lZCAoIFVJbnQzMiBwQWRkcmVzcyApOwogICAgICAgIGlubGluZSBzdGF0aWMgSUJv
b2wgQWxpZ25lZCAoIFVJbnQxNiBwQWRkcmVzcyApOwogICAgICAgIGlubGluZSBzdGF0aWMgSUJv
b2wgQWxpZ25lZCAoIFVJbnQ4IHBBZGRyZXNzICk7CgoKCgogICAgICAgIGlubGluZSBJQm9vbCBQ
Y2lNdWx0aUZ1bmMgKCB2b2lkICk7CgoKCiAgICAgICAgaW5saW5lIHN0YXRpYyBJQm9vbCBQY2lW
YWxpZENmZ09mZiAoIFVJbnQzMiBvZmYgKTsKCgoKICAgICAgICBpbmxpbmUgc3RhdGljIElCb29s
IFBjaVZhbGlkQmFzZVJlZyAoIFVJbnQzMiBvZmYgKTsKCgogICAgICAgIGlubGluZSB2b2lkIFN0
ZXBGdW5jdGlvbiAoIHZvaWQgKTsKCgoKICAgICAgICBpbmxpbmUgdm9pZCBDZmdJbnRMbiAoIFVJ
bnQ4ICk7CiAgICAgICAgaW5saW5lIFVJbnQ4IENmZ0ludExuICggdm9pZCApIGNvbnN0OwogICAg
ICAgIGlubGluZSBVSW50OCBDZmdJbnRQaW4gKCB2b2lkICkgY29uc3Q7CiAgICAgICAgaW5saW5l
IHZvaWQgQ2ZnQ21kICggVUludDE2ICk7CiAgICAgICAgaW5saW5lIFVJbnQxNiBDZmdDbWQgKCB2
b2lkICkgY29uc3Q7CiAgICAgICAgaW5saW5lIFVJbnQ4IENmZ1JpZCAoIHZvaWQgKSBjb25zdDsK
ICAgICAgICBpbmxpbmUgVUludDggQ2ZnQ2FMbiAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxp
bmUgdm9pZCBDZmdDYUxuICggVUludDggdmFsICk7CiAgICAgICAgaW5saW5lIFVJbnQ4IENmZ0xh
dCAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgdm9pZCBDZmdMYXQgKCBVSW50OCB2YWwg
KTsKICAgICAgICBpbmxpbmUgVUludDggQ2ZnSGVhZHIgKCB2b2lkICkgY29uc3Q7CiAgICAgICAg
aW5saW5lIFVJbnQ4IENmZ0Jpc3QgKCB2b2lkICkgY29uc3Q7CiAgICAgICAgaW5saW5lIHZvaWQg
Q2ZnQmlzdCAoIFVJbnQ4IHZhbCApIDsKICAgICAgICBpbmxpbmUgVUludDggQ2ZnTWluR250ICgg
dm9pZCApIGNvbnN0OwogICAgICAgIGlubGluZSB2b2lkIENmZ01pbkdudCAoIFVJbnQ4IHZhbCAp
OwogICAgICAgIGlubGluZSBVSW50OCBDZmdNYXhMYXQgKCB2b2lkICkgY29uc3Q7CiAgICAgICAg
aW5saW5lIHZvaWQgQ2ZnTWF4TGF0ICggVUludDggdmFsICk7CiAgICAgICAgaW5saW5lIFVJbnQz
MiBDZmdDaXMgKCB2b2lkICkgY29uc3QgOwogICAgICAgIGlubGluZSBVSW50MTYgQ2ZnU3ViSUQg
KCB2b2lkICkgY29uc3Q7CiAgICAgICAgaW5saW5lIFVJbnQxNiBDZmdTdWJWaWQgKCB2b2lkICkg
Y29uc3Q7CiAgICAgICAgaW5saW5lIFVJbnQxNiBDZmdTdGF0ICggdm9pZCApIGNvbnN0OwogICAg
ICAgIGlubGluZSBVSW50MzIgQ2ZnQmFkciAoIFVJbnQzMiBpbmRleCApIGNvbnN0OwogICAgICAg
IGlubGluZSB2b2lkIENmZ0JhZHIgKCBVSW50MzIsIFVJbnQzMiApOwoKCiAgICAgICAgaW5saW5l
IFVJbnQxNiBEZXZpY2VJRCAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgVUludDE2IFZl
bmRvcklEICggdm9pZCApIGNvbnN0OwoKICAgICAgICBpbmxpbmUgVUludDggUmVhZDggKCBVSW50
MzIgb2Zmc2V0SW5CeXRlcyApIGNvbnN0OwogICAgICAgIGlubGluZSBVSW50MTYgUmVhZDE2ICgg
VUludDMyIG9mZnNldEluQnl0ZXMgKSBjb25zdDsKICAgICAgICBpbmxpbmUgVUludDMyIFJlYWQz
MiAoIFVJbnQzMiBvZmZzZXRJbkJ5dGVzICkgY29uc3Q7CgogICAgICAgIGlubGluZSB2b2lkIFdy
aXRlOCAoIFVJbnQzMiBvZmZzZXRJbkJ5dGVzLCBVSW50OCB2YWwgKTsKICAgICAgICBpbmxpbmUg
dm9pZCBXcml0ZTE2ICggVUludDMyIG9mZnNldEluQnl0ZXMsIFVJbnQxNiB2YWwgKTsKICAgICAg
ICBpbmxpbmUgdm9pZCBXcml0ZTMyICggVUludDMyIG9mZnNldEluQnl0ZXMsIFVJbnQzMiB2YWwg
KTsKICAgICAgICB9OwojIDE2NCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2Vv
WGludS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lDb25maWdCYXNlLmgiCmlubGluZSBV
SW50OCBQY2lDb25maWd1cmF0b3JCYXNlOjpSZWFkOCAoIFVJbnQzMiBvZmZzZXRJbkJ5dGVzICkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgUmVhZFdvcmQgKCBvZmZzZXRJbkJ5dGVzICk7CgogICAg
ICAgIFVJbnQ4ICogcEhkciA9IGNvbmZpZy5jZmdCeXRlczsKCiAgICAgICAgVUludDggcmVhZFZh
bHVlOwogICAgICAgIHJlYWRWYWx1ZSA9ICooIChVSW50OCAqKSAocEhkciArIG9mZnNldEluQnl0
ZXMgKSApOwogICAgICAgIHJldHVybiByZWFkVmFsdWU7CiAgICAgICAgfQoKaW5saW5lIHZvaWQg
UGNpQ29uZmlndXJhdG9yQmFzZTo6V3JpdGU4ICggVUludDMyIG9mZnNldEluQnl0ZXMsIFVJbnQ4
IHZhbCApCiAgICAgICAgewogICAgICAgIFJlYWRXb3JkICggb2Zmc2V0SW5CeXRlcyApOwoKICAg
ICAgICBVSW50OCAqIHBIZHIgPSBjb25maWcuY2ZnQnl0ZXM7CgogICAgICAgICooIChVSW50OCAq
KSAocEhkciArIG9mZnNldEluQnl0ZXMpICkgPSB2YWw7CgogICAgICAgIFdyaXRlV29yZCAoIG9m
ZnNldEluQnl0ZXMgKTsKICAgICAgICB9CgppbmxpbmUgVUludDE2IFBjaUNvbmZpZ3VyYXRvckJh
c2U6OlJlYWQxNiAoIFVJbnQzMiBvZmZzZXRJbkJ5dGVzICkgY29uc3QKICAgICAgICB7CiAgICAg
ICAgUmVhZFdvcmQgKCBvZmZzZXRJbkJ5dGVzICk7CiAgICAgICAgVUludDggKiBwSGRyID0gY29u
ZmlnLmNmZ0J5dGVzOwoKICAgICAgICBVSW50MTYgcmVhZFZhbHVlOwogICAgICAgIHJlYWRWYWx1
ZSA9ICooIChVSW50MTYgKikgKHBIZHIgKyBvZmZzZXRJbkJ5dGVzICkgKTsKICAgICAgICByZXR1
cm4gcmVhZFZhbHVlOwogICAgICAgIH0KCmlubGluZSB2b2lkIFBjaUNvbmZpZ3VyYXRvckJhc2U6
OldyaXRlMTYgKCBVSW50MzIgb2Zmc2V0SW5CeXRlcywgVUludDE2IHZhbCApCiAgICAgICAgewog
ICAgICAgIFJlYWRXb3JkICggb2Zmc2V0SW5CeXRlcyApOwoKICAgICAgICBVSW50OCAqIHBIZHIg
PSBjb25maWcuY2ZnQnl0ZXM7CgogICAgICAgICooIChVSW50MTYgKikgKHBIZHIgKyBvZmZzZXRJ
bkJ5dGVzKSApID0gdmFsOwoKICAgICAgICBXcml0ZVdvcmQgKCBvZmZzZXRJbkJ5dGVzICk7CiAg
ICAgICAgfQoKaW5saW5lIFVJbnQzMiBQY2lDb25maWd1cmF0b3JCYXNlOjpSZWFkMzIgKCBVSW50
MzIgb2Zmc2V0SW5CeXRlcyApIGNvbnN0CiAgICAgICAgewogICAgICAgIFJlYWRXb3JkICggb2Zm
c2V0SW5CeXRlcyApOwoKICAgICAgICBVSW50OCAqIHBIZHIgPSBjb25maWcuY2ZnQnl0ZXM7Cgog
ICAgICAgIFVJbnQzMiByZWFkVmFsdWU7CiAgICAgICAgcmVhZFZhbHVlID0gKiggKFVJbnQzMiAq
KSAocEhkciArIG9mZnNldEluQnl0ZXMgKSApOwoKICAgICAgICByZXR1cm4gcmVhZFZhbHVlOwog
ICAgICAgIH0KCmlubGluZSB2b2lkIFBjaUNvbmZpZ3VyYXRvckJhc2U6OldyaXRlMzIgKCBVSW50
MzIgb2Zmc2V0SW5CeXRlcywgVUludDMyIHZhbCApCiAgICAgICAgewogICAgICAgIFJlYWRXb3Jk
ICggb2Zmc2V0SW5CeXRlcyApOwoKICAgICAgICBVSW50OCAqIHBIZHIgPSBjb25maWcuY2ZnQnl0
ZXM7CgogICAgICAgICooIChVSW50MzIgKikgKHBIZHIgKyBvZmZzZXRJbkJ5dGVzKSApID0gdmFs
OwoKICAgICAgICBXcml0ZVdvcmQgKCBvZmZzZXRJbkJ5dGVzICk7CiAgICAgICAgfQojIDIzOSAi
L2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYv
cGNpL2NvbW1vbi9QY2lDb25maWdCYXNlLmgiCmlubGluZSBVSW50OCBQY2lDb25maWd1cmF0b3JC
YXNlOjpDZmdJbnRMbiAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICBSZWFkV29yZCAo
ICgoc2l6ZV90KSAmKChQY2lIZWFkZXIgKikwKS0+X2NmZ0ludExuKSApOwogICAgICAgIHJldHVy
biBjb25maWcuY2ZnSGRyLl9jZmdJbnRMbjsKICAgICAgICB9CgoKaW5saW5lIHZvaWQgUGNpQ29u
ZmlndXJhdG9yQmFzZTo6Q2ZnSW50TG4gKCBVSW50OCB2YWwgKQogICAgICAgIHsKICAgICAgICBV
SW50MzIgb2Zmc2V0SW5CeXRlcyA9ICgoc2l6ZV90KSAmKChQY2lIZWFkZXIgKikwKS0+X2NmZ0lu
dExuKTsKCiAgICAgICAgUmVhZFdvcmQgKCBvZmZzZXRJbkJ5dGVzICk7CiAgICAgICAgY29uZmln
LmNmZ0hkci5fY2ZnSW50TG4gPSB2YWw7CiAgICAgICAgV3JpdGVXb3JkICggb2Zmc2V0SW5CeXRl
cyApOwogICAgICAgIH0KCmlubGluZSBVSW50OCBQY2lDb25maWd1cmF0b3JCYXNlOjpDZmdJbnRQ
aW4gKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgUmVhZFdvcmQgKCAoKHNpemVfdCkg
JigoUGNpSGVhZGVyICopMCktPl9jZmdJbnRQaW4pICk7CiAgICAgICAgcmV0dXJuIGNvbmZpZy5j
ZmdIZHIuX2NmZ0ludFBpbjsKICAgICAgICB9CgoKaW5saW5lIFVJbnQxNiBQY2lDb25maWd1cmF0
b3JCYXNlOjpDZmdDbWQgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgUmVhZFdvcmQg
KCAoKHNpemVfdCkgJigoUGNpSGVhZGVyICopMCktPl9jZmdDbWQpICk7CiAgICAgICAgcmV0dXJu
IGNvbmZpZy5jZmdIZHIuX2NmZ0NtZDsKICAgICAgICB9CgppbmxpbmUgdm9pZCBQY2lDb25maWd1
cmF0b3JCYXNlOjpDZmdDbWQgKCBVSW50MTYgdmFsICkKICAgICAgICB7CiAgICAgICAgVUludDMy
IG9mZnNldEluQnl0ZXMgPSAoKHNpemVfdCkgJigoUGNpSGVhZGVyICopMCktPl9jZmdDbWQpOwog
ICAgICAgIFJlYWRXb3JkICggb2Zmc2V0SW5CeXRlcyApOwogICAgICAgIGNvbmZpZy5jZmdIZHIu
X2NmZ0NtZCA9IHZhbDsKICAgICAgICBXcml0ZVdvcmQgKCBvZmZzZXRJbkJ5dGVzICk7CiAgICAg
ICAgfQoKaW5saW5lIFVJbnQ4IFBjaUNvbmZpZ3VyYXRvckJhc2U6OkNmZ1JpZCAoIHZvaWQgKSBj
b25zdAogICAgICAgIHsKICAgICAgICBSZWFkV29yZCAoICgoc2l6ZV90KSAmKChQY2lIZWFkZXIg
KikwKS0+X2NmZ1JpZCkgKTsKICAgICAgICByZXR1cm4gY29uZmlnLmNmZ0hkci5fY2ZnUmlkOwog
ICAgICAgIH0KCmlubGluZSBVSW50MTYgUGNpQ29uZmlndXJhdG9yQmFzZTo6VmVuZG9ySUQgKCB2
b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgUmVhZFdvcmQgKCAoKHNpemVfdCkgJigoUGNp
SGVhZGVyICopMCktPl9jZmdWaWQpICk7CiAgICAgICAgcmV0dXJuIGNvbmZpZy5jZmdIZHIuX2Nm
Z1ZpZDsKICAgICAgICB9CgppbmxpbmUgVUludDE2IFBjaUNvbmZpZ3VyYXRvckJhc2U6OkRldmlj
ZUlEICggdm9pZCApIGNvbnN0CiAgICAgICAgewogICAgICAgIFJlYWRXb3JkICggKChzaXplX3Qp
ICYoKFBjaUhlYWRlciAqKTApLT5fY2ZnRGlkKSApOwogICAgICAgIHJldHVybiBjb25maWcuY2Zn
SGRyLl9jZmdEaWQ7CiAgICAgICAgfQoKaW5saW5lIFVJbnQ4IFBjaUNvbmZpZ3VyYXRvckJhc2U6
OkNmZ0NhTG4gKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgUmVhZFdvcmQgKCAoKHNp
emVfdCkgJigoUGNpSGVhZGVyICopMCktPl9jZmdDYUxuKSApOwogICAgICAgIHJldHVybiBjb25m
aWcuY2ZnSGRyLl9jZmdDYUxuOwogICAgICAgIH0KCmlubGluZSB2b2lkIFBjaUNvbmZpZ3VyYXRv
ckJhc2U6OkNmZ0NhTG4gKCBVSW50OCB2YWwgKQogICAgICAgIHsKICAgICAgICBVSW50MzIgb2Zm
c2V0SW5CeXRlcyA9ICgoc2l6ZV90KSAmKChQY2lIZWFkZXIgKikwKS0+X2NmZ0NhTG4pOwoKICAg
ICAgICBSZWFkV29yZCAoIG9mZnNldEluQnl0ZXMgKTsKICAgICAgICBjb25maWcuY2ZnSGRyLl9j
ZmdDYUxuID0gdmFsOwogICAgICAgIFdyaXRlV29yZCAoIG9mZnNldEluQnl0ZXMgKTsKICAgICAg
ICB9CgppbmxpbmUgVUludDggUGNpQ29uZmlndXJhdG9yQmFzZTo6Q2ZnTGF0ICggdm9pZCApIGNv
bnN0CiAgICAgICAgewogICAgICAgIFJlYWRXb3JkICggKChzaXplX3QpICYoKFBjaUhlYWRlciAq
KTApLT5fY2ZnTGF0KSApOwogICAgICAgIHJldHVybiBjb25maWcuY2ZnSGRyLl9jZmdMYXQ7CiAg
ICAgICAgfQoKaW5saW5lIHZvaWQgUGNpQ29uZmlndXJhdG9yQmFzZTo6Q2ZnTGF0ICggVUludDgg
dmFsICkKICAgICAgICB7CiAgICAgICAgVUludDMyIG9mZnNldEluQnl0ZXMgPSAoKHNpemVfdCkg
JigoUGNpSGVhZGVyICopMCktPl9jZmdMYXQpOwoKICAgICAgICBSZWFkV29yZCAoIG9mZnNldElu
Qnl0ZXMgKTsKICAgICAgICBjb25maWcuY2ZnSGRyLl9jZmdMYXQgPSB2YWw7CiAgICAgICAgV3Jp
dGVXb3JkICggb2Zmc2V0SW5CeXRlcyApOwogICAgICAgIH0KCmlubGluZSBVSW50OCBQY2lDb25m
aWd1cmF0b3JCYXNlOjpDZmdIZWFkciAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICBS
ZWFkV29yZCAoICgoc2l6ZV90KSAmKChQY2lIZWFkZXIgKikwKS0+X2NmZ0hlYWRyKSApOwogICAg
ICAgIHJldHVybiBjb25maWcuY2ZnSGRyLl9jZmdIZWFkcjsKICAgICAgICB9CgppbmxpbmUgVUlu
dDggUGNpQ29uZmlndXJhdG9yQmFzZTo6Q2ZnQmlzdCAoIHZvaWQgKSBjb25zdAogICAgICAgIHsK
ICAgICAgICBSZWFkV29yZCAoICgoc2l6ZV90KSAmKChQY2lIZWFkZXIgKikwKS0+X2NmZ0Jpc3Qp
ICk7CiAgICAgICAgcmV0dXJuIGNvbmZpZy5jZmdIZHIuX2NmZ0Jpc3Q7CiAgICAgICAgfQoKaW5s
aW5lIHZvaWQgUGNpQ29uZmlndXJhdG9yQmFzZTo6Q2ZnQmlzdCAoIFVJbnQ4IHZhbCApCiAgICAg
ICAgewogICAgICAgIFVJbnQzMiBvZmZzZXRJbkJ5dGVzID0gKChzaXplX3QpICYoKFBjaUhlYWRl
ciAqKTApLT5fY2ZnQmlzdCk7CgogICAgICAgIFJlYWRXb3JkICggb2Zmc2V0SW5CeXRlcyApOwog
ICAgICAgIGNvbmZpZy5jZmdIZHIuX2NmZ0Jpc3QgPSB2YWw7CiAgICAgICAgV3JpdGVXb3JkICgg
b2Zmc2V0SW5CeXRlcyApOwogICAgICAgIH0KCmlubGluZSBVSW50OCBQY2lDb25maWd1cmF0b3JC
YXNlOjpDZmdNaW5HbnQgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgUmVhZFdvcmQg
KCAoKHNpemVfdCkgJigoUGNpSGVhZGVyICopMCktPl9jZmdNaW5HbnQpICk7CiAgICAgICAgcmV0
dXJuIGNvbmZpZy5jZmdIZHIuX2NmZ01pbkdudDsKICAgICAgICB9CgppbmxpbmUgdm9pZCBQY2lD
b25maWd1cmF0b3JCYXNlOjpDZmdNaW5HbnQgKCBVSW50OCB2YWwgKQogICAgICAgIHsKICAgICAg
ICBVSW50MzIgb2Zmc2V0SW5CeXRlcyA9ICgoc2l6ZV90KSAmKChQY2lIZWFkZXIgKikwKS0+X2Nm
Z01pbkdudCk7CgogICAgICAgIFJlYWRXb3JkICggb2Zmc2V0SW5CeXRlcyApOwogICAgICAgIGNv
bmZpZy5jZmdIZHIuX2NmZ01pbkdudCA9IHZhbDsKICAgICAgICBXcml0ZVdvcmQgKCBvZmZzZXRJ
bkJ5dGVzICk7CiAgICAgICAgfQoKaW5saW5lIFVJbnQ4IFBjaUNvbmZpZ3VyYXRvckJhc2U6OkNm
Z01heExhdCAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICBSZWFkV29yZCAoICgoc2l6
ZV90KSAmKChQY2lIZWFkZXIgKikwKS0+X2NmZ01heExhdCkgKTsKICAgICAgICByZXR1cm4gY29u
ZmlnLmNmZ0hkci5fY2ZnTWF4TGF0OwogICAgICAgIH0KCmlubGluZSB2b2lkIFBjaUNvbmZpZ3Vy
YXRvckJhc2U6OkNmZ01heExhdCAoIFVJbnQ4IHZhbCApCiAgICAgICAgewogICAgICAgIFVJbnQz
MiBvZmZzZXRJbkJ5dGVzID0gKChzaXplX3QpICYoKFBjaUhlYWRlciAqKTApLT5fY2ZnTWF4TGF0
KTsKCiAgICAgICAgUmVhZFdvcmQgKCBvZmZzZXRJbkJ5dGVzICk7CiAgICAgICAgY29uZmlnLmNm
Z0hkci5fY2ZnTWF4TGF0ID0gdmFsOwogICAgICAgIFdyaXRlV29yZCAoIG9mZnNldEluQnl0ZXMg
KTsKICAgICAgICB9CgppbmxpbmUgVUludDMyIFBjaUNvbmZpZ3VyYXRvckJhc2U6OkNmZ0NpcyAo
IHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICBSZWFkV29yZCAoICgoc2l6ZV90KSAmKChQ
Y2lIZWFkZXIgKikwKS0+X2NmZ0NpcykgKTsKICAgICAgICByZXR1cm4gY29uZmlnLmNmZ0hkci5f
Y2ZnQ2lzOwogICAgICAgIH0KCmlubGluZSBVSW50MTYgUGNpQ29uZmlndXJhdG9yQmFzZTo6Q2Zn
U3ViSUQgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgUmVhZFdvcmQgKCAoKHNpemVf
dCkgJigoUGNpSGVhZGVyICopMCktPl9jZmdTdUJpZCkgKTsKICAgICAgICByZXR1cm4gY29uZmln
LmNmZ0hkci5fY2ZnU3VCaWQ7CiAgICAgICAgfQoKaW5saW5lIFVJbnQxNiBQY2lDb25maWd1cmF0
b3JCYXNlOjpDZmdTdWJWaWQgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgUmVhZFdv
cmQgKCAoKHNpemVfdCkgJigoUGNpSGVhZGVyICopMCktPl9jZmdTdWJWaWQpICk7CiAgICAgICAg
cmV0dXJuIGNvbmZpZy5jZmdIZHIuX2NmZ1N1YlZpZDsKICAgICAgICB9CgppbmxpbmUgVUludDE2
IFBjaUNvbmZpZ3VyYXRvckJhc2U6OkNmZ1N0YXQgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgUmVhZFdvcmQgKCAoKHNpemVfdCkgJigoUGNpSGVhZGVyICopMCktPl9jZmdTdGF0KSAp
OwogICAgICAgIHJldHVybiBjb25maWcuY2ZnSGRyLl9jZmdTdGF0OwogICAgICAgIH0KCmlubGlu
ZSBVSW50MzIgUGNpQ29uZmlndXJhdG9yQmFzZTo6Q2ZnQmFkciAoIFVJbnQzMiBpbmRleFBhcm0g
KSBjb25zdAogICAgICAgIHsKICAgICAgICBVSW50MzIgb2Zmc2V0SW5CeXRlcyA9ICgoc2l6ZV90
KSAmKChQY2lIZWFkZXIgKikwKS0+X2NmZ0JhZHIpOwoKICAgICAgICBvZmZzZXRJbkJ5dGVzICs9
IHNpemVvZiAoIFVJbnQzMiApICogaW5kZXhQYXJtOwoKICAgICAgICBSZWFkV29yZCAoIG9mZnNl
dEluQnl0ZXMgKTsKICAgICAgICByZXR1cm4gY29uZmlnLmNmZ0hkci5fY2ZnQmFkciBbIGluZGV4
UGFybSBdOwogICAgICAgIH0KCmlubGluZSB2b2lkIFBjaUNvbmZpZ3VyYXRvckJhc2U6OkNmZ0Jh
ZHIgKCBVSW50MzIgaW5kZXhQYXJtLCBVSW50MzIgdmFsICkKICAgICAgICB7CiAgICAgICAgVUlu
dDMyIG9mZnNldEluQnl0ZXMgPSAoKHNpemVfdCkgJigoUGNpSGVhZGVyICopMCktPl9jZmdCYWRy
KTsKCiAgICAgICAgb2Zmc2V0SW5CeXRlcyArPSBzaXplb2YgKCBVSW50MzIgKSAqIGluZGV4UGFy
bTsKCiAgICAgICAgUmVhZFdvcmQgKCBvZmZzZXRJbkJ5dGVzICk7CiAgICAgICAgY29uZmlnLmNm
Z0hkci5fY2ZnQmFkciBbIGluZGV4UGFybSBdID0gdmFsOwogICAgICAgIFdyaXRlV29yZCAoIG9m
ZnNldEluQnl0ZXMgKTsKICAgICAgICB9Cgp2b2lkIFBjaUNvbmZpZ3VyYXRvckJhc2U6OlN0ZXBG
dW5jdGlvbiAoIHZvaWQgKQogICAgICAgIHsKICAgICAgICBhZGRyZXNzICs9IHNpemVvZiAoIGNv
bmZpZyApOwogICAgICAgIH0KIyA0MzUgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mvc3Jj
L2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpQ29uZmlnQmFzZS5oIgppbmxp
bmUgSUJvb2wgUGNpQ29uZmlndXJhdG9yQmFzZTo6UGNpVmFsaWRJb0Jhc2VBZGRyZXNzUmVnaXN0
ZXIgKCBVSW50MzIgcmVnVmFsdWUgKQogICAgICAgIHsKICAgICAgICBpZiAoICggcmVnVmFsdWUg
JiBQQ0lfQmFzZUFkZHJlc3NJb01hc2sgKSA9PSBQQ0lfQmFzZUFkZHJlc3NJb01hc2sgKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICgoSUJvb2wpIDEpOwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICByZXR1cm4gKChJQm9vbCkgMCk7CiAgICAgICAgfQojIDQ1MyAi
L2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYv
cGNpL2NvbW1vbi9QY2lDb25maWdCYXNlLmgiCmlubGluZSBJQm9vbCBQY2lDb25maWd1cmF0b3JC
YXNlOjpQY2lWYWxpZE1lbUJhc2VBZGRyZXNzUmVnaXN0ZXIgKCBVSW50MzIgcmVnVmFsdWUgKQog
ICAgICAgIHsKICAgICAgICBpZiAoICggcmVnVmFsdWUgJiBQQ0lfQmFzZUFkZHJlc3NNZW1NYXNr
ICkgPT0gMCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gKChJQm9v
bCkgMSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIHJldHVybiAoKElCb29sKSAwKTsKICAg
ICAgICB9CiMgNDc1ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3Ny
Yy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaUNvbmZpZ0Jhc2UuaCIKaW5saW5lIElCb29sIFBj
aUNvbmZpZ3VyYXRvckJhc2U6OlBjaVZhbGlkRGV2aWNlICggdm9pZCApCiAgICAgICAgewogICAg
ICAgIFJlYWRXb3JkICggMCApOwoKICAgICAgICBpZiAoICggY29uZmlnLmNmZ0hkci5fY2ZnVmlk
ID09IFBDSV9Ob0RldiApIHx8CiAgICAgICAgICAgICAgICAgKCBjb25maWcuY2ZnSGRyLl9jZmdE
aWQgPT0gUENJX05vRGV2ICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuICgoSUJvb2wpIDApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gKChJQm9v
bCkgMSk7CiAgICAgICAgfQojIDQ5OSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMv
Z2VvWGludS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lDb25maWdCYXNlLmgiCmlubGlu
ZSBJQm9vbCBQY2lDb25maWd1cmF0b3JCYXNlOjpQY2lNdWx0aUZ1bmMgKCApCiAgICAgICAgewog
ICAgICAgIFJlYWRXb3JkICggKChzaXplX3QpICYoKFBjaUhlYWRlciAqKTApLT5fY2ZnSGVhZHIp
ICk7CiAgICAgICAgcmV0dXJuICggY29uZmlnLmNmZ0hkci5fY2ZnSGVhZHIgJiAweDgwID8gKChJ
Qm9vbCkgMSkgOiAoKElCb29sKSAwKSApOwogICAgICAgIH0KIyA1MTYgIi9ob21lL3JscC94c2Nh
bGUvcHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNp
Q29uZmlnQmFzZS5oIgppbmxpbmUgSUJvb2wgUGNpQ29uZmlndXJhdG9yQmFzZTo6QWxpZ25lZCAo
IFVJbnQzMiBwQWRkcmVzcyApCiAgICAgICAgewogICAgICAgIHJldHVybiAoICggKCAoIFVJbnQz
MiApIHBBZGRyZXNzICYgUENJX1dvcmRNYXNrICkgPT0gMCApID8gKChJQm9vbCkgMSkgOiAoKElC
b29sKSAwKSApOwogICAgICAgIH0KIyA1MzIgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mv
c3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpQ29uZmlnQmFzZS5oIgpp
bmxpbmUgSUJvb2wgUGNpQ29uZmlndXJhdG9yQmFzZTo6QWxpZ25lZCAoIFVJbnQxNiBwQWRkcmVz
cyApCiAgICAgICAgewogICAgICAgIHJldHVybiAoICggKCAoIFVJbnQzMiApIHBBZGRyZXNzICYg
UENJX1Nob3J0TWFzayApID09IDAgKSA/ICgoSUJvb2wpIDEpIDogKChJQm9vbCkgMCkgKTsKICAg
ICAgICB9CiMgNTQ4ICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3Ny
Yy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaUNvbmZpZ0Jhc2UuaCIKaW5saW5lIElCb29sIFBj
aUNvbmZpZ3VyYXRvckJhc2U6OkFsaWduZWQgKCBVSW50OCBwQWRkcmVzcyApCiAgICAgICAgewog
ICAgICAgIHJldHVybiAoKElCb29sKSAxKTsKICAgICAgICB9CiMgNTY0ICIvaG9tZS9ybHAveHNj
YWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1Bj
aUNvbmZpZ0Jhc2UuaCIKaW5saW5lIElCb29sIFBjaUNvbmZpZ3VyYXRvckJhc2U6OlBjaVZhbGlk
Q2ZnT2ZmICggVUludDMyIG9mZiApCiAgICAgICAgewogICAgICAgIHJldHVybiAoIG9mZiA+PSAw
ICkgJiYgKCBvZmYgPCBQQ0lfQ29uZmlnSGVhZGVyU2l6ZSApOwogICAgICAgIH0KIyA1ODAgIi9o
b21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3Bj
aS9jb21tb24vUGNpQ29uZmlnQmFzZS5oIgppbmxpbmUgSUJvb2wgUGNpQ29uZmlndXJhdG9yQmFz
ZTo6UGNpVmFsaWRCYXNlUmVnICggVUludDMyIG9mZiApCiAgICAgICAgewogICAgICAgIHJldHVy
biAoIFBjaVZhbGlkQ2ZnT2ZmICggb2ZmICkgKSAmJiAoIEFsaWduZWQgKCBvZmYgKSApOwogICAg
ICAgIH0KIyAyNiAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMv
ZHJpdmVycy9kZXYvcGNpL3hzY2FsZS9QY2lDb25maWcuaCIgMgojIDM2ICIvaG9tZS9ybHAveHNj
YWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kveHNjYWxlL1Bj
aUNvbmZpZy5oIgpjbGFzcyBQY2lDb25maWd1cmF0b3IgOiBwdWJsaWMgUGNpQ29uZmlndXJhdG9y
QmFzZQogICAgICAgIHsKcHJpdmF0ZToKICAgICAgICBzdGF0aWMgY29uc3QgVUludDMyIHJlZ0Fj
Y2Vzc1RocmVzaCA9IDB4MDEwMDAwMDA7CiAgICAgICAgSUJvb2wgYklnbm9yZURhdGFBYm9ydDsK
ICAgICAgICBtdXRhYmxlIElCb29sIGJBYm9ydGVkOwoKcHVibGljOgogICAgICAgICAgICAgICAg
UGNpQ29uZmlndXJhdG9yICggdm9pZCApIHsgYklnbm9yZURhdGFBYm9ydCA9ICgoSUJvb2wpIDAp
OyB9OwogICAgICAgICAgICAgICAgflBjaUNvbmZpZ3VyYXRvciAoIHZvaWQgKSB7IH07CgogICAg
ICAgIHZpcnR1YWwgdm9pZCBSZWFkV29yZCAoIFVJbnQzMiApIGNvbnN0OwogICAgICAgIHZpcnR1
YWwgdm9pZCBXcml0ZVdvcmQgKCBVSW50MzIgKTsKCgoKICAgICAgICB2aXJ0dWFsIElCb29sIFBj
aVZhbGlkRGV2aWNlICggdm9pZCApOwogICAgICAgIH07CiMgMjkgIi9ob21lL3JscC94c2NhbGUv
cHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpRGV2
LmgiIDIKIyA0MCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMv
ZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIKY2xhc3MgUGNpRGV2IDogcHVibGljIFBj
aURldkluZm8KICAgICAgICB7CiBwcml2YXRlOgogICAgICAgIHN0YXRpYyBpbnQgdmVjdG9yTWFw
IFsgNCBdOwoKICAgICAgICBQY2lDb25maWd1cmF0b3IgY29uZmlndXJhdG9yOwoKCiAgICAgICAg
TXV0ZXggZGV2TG9jazsKICAgICAgICBJQm9vbCBpc1ZhbGlkOwogICAgICAgIElCb29sIGlzTWFw
cGVkOwoKICAgICAgICBpbmxpbmUgdm9pZCBMb2NrRGV2ICggdm9pZCApIGNvbnN0OwogICAgICAg
IGlubGluZSB2b2lkIFVubG9ja0RldiAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgSUJv
b2wgUGNpVmFsaWREZXZpY2UgKCB2b2lkICk7CgogICAgICAgIGZyaWVuZCBjbGFzcyBQY2lCdXND
b21tb247CgogcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGNpRGV2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDMyIGNv
bmZpZ0FkZHJlc3MgPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGNpRGV2
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDE2IHZpZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDE2IGRpZAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAg
IGlubGluZSB+IFBjaURldiAoICk7CgoKCgoKICAgICAgICBpbmxpbmUgaW50IFJkQ2ZnT2Zmc2V0
ICggaW50IGNmZ09mZiwgVUludDMyJiB2YWwgKSBjb25zdDsKICAgICAgICBpbmxpbmUgaW50IFJk
Q2ZnT2Zmc2V0ICggaW50IGNmZ09mZiwgVUludDE2JiB2YWwgKSBjb25zdDsKICAgICAgICBpbmxp
bmUgaW50IFJkQ2ZnT2Zmc2V0ICggaW50IGNmZ09mZiwgVUludDgmIHZhbCApIGNvbnN0OwoKCgoK
ICAgICAgICBpbmxpbmUgaW50IFdyQ2ZnT2Zmc2V0ICggaW50IGNmZ09mZiwgVUludDMyIHZhbCAp
OwogICAgICAgIGlubGluZSBpbnQgV3JDZmdPZmZzZXQgKCBpbnQgY2ZnT2ZmLCBVSW50MTYgdmFs
ICk7CiAgICAgICAgaW5saW5lIGludCBXckNmZ09mZnNldCAoIGludCBjZmdPZmYsIFVJbnQ4IHZh
bCApOwoKCgoKICAgICAgICBpbmxpbmUgdm9pZCBDb21tYW5kQml0ICggSUJvb2wgZW5hYmxlLCBV
SW50MTYgdmFsdWUgKTsKICAgICAgICBpbmxpbmUgSUJvb2wgQ29tbWFuZEJpdCAoIFVJbnQxNiB2
YWx1ZSApIGNvbnN0OwoKICAgICAgICBpbmxpbmUgVUludDE2IERldmljZUlEICggdm9pZCApIGNv
bnN0OwogICAgICAgIGlubGluZSBVSW50MTYgVmVuZG9ySUQgKCB2b2lkICkgY29uc3Q7CgogICAg
ICAgIGlubGluZSB2b2lkIElPU3BhY2VFbmFibGUgKCBJQm9vbCBlbmFibGUgKTsKICAgICAgICBp
bmxpbmUgSUJvb2wgSU9TcGFjZUVuYWJsZSAoIHZvaWQgKSBjb25zdDsKCiAgICAgICAgaW5saW5l
IHZvaWQgTWVtU3BhY2VFbmFibGUgKCBJQm9vbCBlbmFibGUgKTsKICAgICAgICBpbmxpbmUgSUJv
b2wgTWVtU3BhY2VFbmFibGUgKCB2b2lkICkgY29uc3Q7CgogICAgICAgIGlubGluZSB2b2lkIFNw
ZWNpYWxDeWNsZUVuYWJsZSAoIElCb29sIGVuYWJsZSApOwogICAgICAgIGlubGluZSBJQm9vbCBT
cGVjaWFsQ3ljbGVFbmFibGUgKCB2b2lkICkgY29uc3Q7CgogICAgICAgIGlubGluZSB2b2lkIE1l
bVdyaXRlSW52YWxpZGF0ZUVuYWJsZSAoIElCb29sIGVuYWJsZSApOwogICAgICAgIGlubGluZSBJ
Qm9vbCBNZW1Xcml0ZUludmFsaWRhdGVFbmFibGUgKCB2b2lkICkgY29uc3Q7CgogICAgICAgIGlu
bGluZSB2b2lkIFZnYVBhbGV0dGVTbm9vcEVuYWJsZSAoIElCb29sIGVuYWJsZSApOwogICAgICAg
IGlubGluZSBJQm9vbCBWZ2FQYWxldHRlU25vb3BFbmFibGUgKCB2b2lkICkgY29uc3Q7CgogICAg
ICAgIGlubGluZSB2b2lkIFBhcml0eUVyclJlc3BvbnNlRW5hYmxlICggSUJvb2wgZW5hYmxlICk7
CiAgICAgICAgaW5saW5lIElCb29sIFBhcml0eUVyclJlc3BvbmVFbmFibGUgKCB2b2lkICkgY29u
c3Q7CgogICAgICAgIGlubGluZSBJQm9vbCBXYWl0Q3ljbGVDb250cm9sICggdm9pZCApIGNvbnN0
OwoKICAgICAgICBpbmxpbmUgdm9pZCBTZXJyRW5hYmxlICggSUJvb2wgZW5hYmxlICk7CiAgICAg
ICAgaW5saW5lIElCb29sIFNlcnJFbmFibGUgKCB2b2lkICkgY29uc3Q7CgogICAgICAgIGlubGlu
ZSB2b2lkIEZhc3RCYWNrVG9CYWNrRW5hYmxlICggSUJvb2wgZW5hYmxlICk7CiAgICAgICAgaW5s
aW5lIElCb29sIEZhc3RCYWNrVG9CYWNrRW5hYmxlICggdm9pZCApIGNvbnN0OwoKICAgICAgICBp
bmxpbmUgdm9pZCBCdXNNYXN0ZXJFbmFibGUgKCBJQm9vbCBlbmFibGUgKTsKICAgICAgICBpbmxp
bmUgSUJvb2wgQnVzTWFzdGVyRW5hYmxlICggdm9pZCApIGNvbnN0OwoKCgogICAgICAgIGlubGlu
ZSBJQm9vbCBTdGF0dXNCaXQgKCBVSW50MTYgdmFsdWUgKSBjb25zdDsKCiAgICAgICAgaW5saW5l
IElCb29sIERhdGFQYXJpdHlFcnJvciAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgSUJv
b2wgUmVjZWl2ZWRUYXJnZXRBYm9ydCAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgSUJv
b2wgUmVjZWl2ZWRNYXN0ZXJBYm9ydCAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgSUJv
b2wgU2lnbmFsZWRTZXJyICggdm9pZCApIGNvbnN0OwogICAgICAgIGlubGluZSBJQm9vbCBEZXRl
Y3RlZFBhcml0eUVycm9yICggdm9pZCApIGNvbnN0OwoKCgogICAgICAgIGlubGluZSBVSW50MzIg
UmV2aXNpb25JRCAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgVUludDMyIENsYXNzQ29k
ZSAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgdm9pZCBDYWNoZUxpbmVTaXplICggVUlu
dDggc2l6ZSApOwogICAgICAgIGlubGluZSBVSW50OCBDYWNoZUxpbmVTaXplICggdm9pZCApIGNv
bnN0OwogICAgICAgIGlubGluZSB2b2lkIExhdGVuY3lUaW1lciAoIFVJbnQ4IHZhbHVlICk7CiAg
ICAgICAgaW5saW5lIFVJbnQ4IExhdGVuY3lUaW1lciAoIHZvaWQgKSBjb25zdDsKICAgICAgICBp
bmxpbmUgVUludDggSGVhZGVyVHlwZSAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgdm9p
ZCBCaXN0U3RhcnQgKCBJQm9vbCBlbmFibGUgKTsKICAgICAgICBpbmxpbmUgSUJvb2wgQmlzdFN0
YXJ0ICggdm9pZCApIGNvbnN0OwogICAgICAgIGlubGluZSBJQm9vbCBCaXN0Q2FwYWJsZSAoIHZv
aWQgKSBjb25zdDsKCiAgICAgICAgaW5saW5lIHZvaWQgTWluR3JhbnQgKCBVSW50OCB2YWx1ZSAp
OwogICAgICAgIGlubGluZSBVSW50OCBNaW5HcmFudCAoIHZvaWQgKSBjb25zdDsKICAgICAgICBp
bmxpbmUgdm9pZCBNYXhMYXRlbmN5ICggVUludDggdmFsdWUgKTsKICAgICAgICBpbmxpbmUgVUlu
dDggTWF4TGF0ZW5jeSAoIHZvaWQgKSBjb25zdDsKCiAgICAgICAgaW5saW5lIFVJbnQzMiBCYXNl
QWRkcmVzcyAoIFBjaUJhc2VBZGRyZXNzVHlwZSBiYXNlUmVnICkgY29uc3Q7CgogICAgICAgIGlu
bGluZSBVSW50MzIgQ2FyZEJ1c0NpcyAoIHZvaWQgKSBjb25zdDsKICAgICAgICBpbmxpbmUgVUlu
dDE2IFN1YlN5c3RlbUlEICggdm9pZCApIGNvbnN0OwogICAgICAgIGlubGluZSBVSW50MTYgU3Vi
U3lzdGVtVmVuZG9ySUQgKCB2b2lkICkgY29uc3Q7CgoKCgogICAgICAgICAgICAgICAgICAgaW50
IE1hcFRvUGNpICggVUludDgqICZwcE1lbUFkZHIgKTsKCiAgICAgICAgICAgICAgICAgICBpbnQg
TWFwTWVtICggSW50MzIgYmFzZVJlZywgVUludDMyIHdoZXJlLCBVSW50OCogJnBwTWVtQWRkciAp
OwogICAgICAgICAgICAgICAgICAgaW50IE1hcE1lbSAoIEludDMyIGJhc2VSZWcsIFVJbnQ4KiAm
cHBNZW1BZGRyICk7CgoKICAgICAgICB2b2lkIFNob3cgKCB2b2lkICkgY29uc3QgOwoKICAgICAg
ICBpbmxpbmUgSUJvb2wgRGV2aWNlVmFsaWQgKCB2b2lkICkgY29uc3QgeyByZXR1cm4gaXNWYWxp
ZDsgfTsKICAgICAgICBpbmxpbmUgSUJvb2wgRGV2aWNlTWFwcGVkICggdm9pZCApIGNvbnN0IHsg
cmV0dXJuIGlzTWFwcGVkOyB9OwoKCiAgICAgICAgaW5saW5lIGludCBQY2lHZXRJU1JWZWN0b3Ig
KCB2b2lkICk7CiAgICAgICAgfTsKCgoKY2xhc3MgUGNpTG9jYWxEZXYgOiBwdWJsaWMgUGNpRGV2
CiAgICAgICAgewpwdWJsaWM6CiAgICAgICAgaW5saW5lIFBjaUxvY2FsRGV2ICggVUludDMyIHBj
aUNzckFkZHJlc3MgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogUGNpRGV2ICggcGNpQ3NyQWRkcmVzcyApIHsgfQoKICAgICAgICB2aXJ0
dWFsIGlubGluZSBVSW50MzIgTG9jYWxUb1BjaSAoIFVJbnQzMiBsb2NhbFNkcmFtQWRkcmVzcyAp
IGNvbnN0ID0gMDsKICAgICAgICB2aXJ0dWFsIGlubGluZSBVSW50MzIgUGNpVG9Mb2NhbCAoIFVJ
bnQzMiBwY2lTZHJhbUFkZHJlc3MgKSBjb25zdCA9IDA7CiAgICAgICAgdmlydHVhbCBpbmxpbmUg
SVN0YXR1cyBTaG93ICggdm9pZCApIGNvbnN0ID0gMDsKICAgICAgICB9OwojIDE5OCAiL2hvbWUv
cmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYvcGNpL2Nv
bW1vbi9QY2lEZXYuaCIKZXh0ZXJuIFBjaURldiAqIGdldFBjaURldmljZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50MzIgdmVuZG9y
SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVUludDMyIGRldmljZUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVJbnQzMiBmdW5jID0gMHhGRkZGRkZGRgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgpleHRlcm4gUGNp
RGV2ICogZ2V0UGNpRGV2aWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRldmljZU5hbWUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKZXh0ZXJuIFBjaURl
diAqIGFkZFBjaURldmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVSW50MzIgdmVuZG9ySWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDMyIGRldmljZUlkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQzMiBm
dW5jID0gMHhGRkZGRkZGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcE5hbWUgPSAiUGNpRGV2aWNlLU5vTmFtZSIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwoKZXh0ZXJuIFBjaURldiAqIGFkZFBjaVJhbURldmljZSAoIFVJbnQzMiBwcm9jTm8gKTsKZXh0
ZXJuIHZvaWQgcGNpRGV2U2hvdyAoIHZvaWQgKTsKZXh0ZXJuIFVJbnQzMiogcGNpRGV2Q1NSQWRk
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVSW50MzIgdmVuZG9ySWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVUludDMyIGRldmljZUlkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQzMiBmdW5jID0gMHhGRkZGRkZG
RgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CgppbmxpbmUgSUJvb2wgUGNpRGV2OjpQY2lWYWxpZERldmljZSAoIHZvaWQgKQogICAgICAg
IHsKICAgICAgICBpZiAoICEgaXNWYWxpZCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gKChJQm9vbCkgMCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIHJldHVy
biBjb25maWd1cmF0b3IuUGNpVmFsaWREZXZpY2UgKCApOwogICAgICAgIH07CiMgMjQ5ICIvaG9t
ZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kv
Y29tbW9uL1BjaURldi5oIgppbmxpbmUgaW50IFBjaURldjo6UmRDZmdPZmZzZXQgKCBpbnQgb2Zm
LCBVSW50MzIgJiB2YWwgKSBjb25zdAogICAgICAgIHsKICAgICAgICBpZiAoICEgY29uZmlndXJh
dG9yLlBjaVZhbGlkQ2ZnT2ZmICggb2ZmICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgeyBzeXNNc2cgKCAiRVJST1I6ICVzOiVkICRJZDogUGNpRGV2LmgsdiAxLjIgMjAwMy8w
NC8yMyAxNDozOTo1MSBqbGF3c29uIEV4cCAkXG4iLCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92
NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIsIDI1
MyApOyB9OwogICAgICAgICAgICAgICAgcmV0dXJuIDE0OwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICBMb2NrRGV2ICggKTsKCiAgICAgICAgVUludDMyIHJlYWRWYWx1ZTsKICAgICAgICByZWFk
VmFsdWUgPSBjb25maWd1cmF0b3IuUmVhZDMyICggb2ZmICk7CgogICAgICAgIHZhbCA9IHJlYWRW
YWx1ZTsKCiAgICAgICAgVW5sb2NrRGV2ICggKTsKCiAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
fQojIDI4MSAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJp
dmVycy9kZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIKaW5saW5lIGludCBQY2lEZXY6OlJkQ2ZnT2Zm
c2V0ICggaW50IG9mZiwgVUludDE2ICYgdmFsICkgY29uc3QKICAgICAgICB7CiAgICAgICAgaWYg
KCAhIGNvbmZpZ3VyYXRvci5QY2lWYWxpZENmZ09mZiAoIG9mZiApICk7CiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICB7IHN5c01zZyAoICJFUlJPUjogJXM6JWQgJElkOiBQY2lEZXYu
aCx2IDEuMiAyMDAzLzA0LzIzIDE0OjM5OjUxIGpsYXdzb24gRXhwICRcbiIsICIvaG9tZS9ybHAv
eHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9u
L1BjaURldi5oIiwgMjg1ICk7IH07CiAgICAgICAgICAgICAgICByZXR1cm4gMTQ7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgIExvY2tEZXYgKCApOwoKICAgICAgICBVSW50MTYgcmVhZFZhbHVl
OwogICAgICAgIHJlYWRWYWx1ZSA9IGNvbmZpZ3VyYXRvci5SZWFkMTYgKCBvZmYgKTsKICAgICAg
ICB2YWwgPSByZWFkVmFsdWU7CgogICAgICAgIFVubG9ja0RldiAoICk7CgogICAgICAgIHJldHVy
biAwOwogICAgICAgIH0KIyAzMTIgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mvc3JjL2dl
b1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpRGV2LmgiCmlubGluZSBpbnQgUGNp
RGV2OjpSZENmZ09mZnNldCAoIGludCBvZmYsIFVJbnQ4ICYgdmFsICkgY29uc3QKICAgICAgICB7
CiAgICAgICAgaWYgKCAhIGNvbmZpZ3VyYXRvci5QY2lWYWxpZENmZ09mZiAoIG9mZiApICkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHsgc3lzTXNnICggIkVSUk9SOiAlczolZCAk
SWQ6IFBjaURldi5oLHYgMS4yIDIwMDMvMDQvMjMgMTQ6Mzk6NTEgamxhd3NvbiBFeHAgJFxuIiwg
Ii9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2
L3BjaS9jb21tb24vUGNpRGV2LmgiLCAzMTYgKTsgfTsKICAgICAgICAgICAgICAgIHJldHVybiAx
NDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgTG9ja0RldiAoICk7CgogICAgICAgIFVJbnQ4
IHJlYWRWYWx1ZTsKICAgICAgICByZWFkVmFsdWUgPSBjb25maWd1cmF0b3IuUmVhZDggKCBvZmYg
KTsKICAgICAgICB2YWwgPSByZWFkVmFsdWU7CgogICAgICAgIFVubG9ja0RldiAoICk7CgogICAg
ICAgIHJldHVybiAwOwogICAgICAgIH0KIyAzNDMgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUv
b3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpRGV2LmgiCmlubGlu
ZSBpbnQgUGNpRGV2OjpXckNmZ09mZnNldCAoIGludCBvZmYsIFVJbnQzMiB2YWwgKQogICAgICAg
IHsKICAgICAgICBpZiAoICEgY29uZmlndXJhdG9yLlBjaVZhbGlkQ2ZnT2ZmICggb2ZmICkgKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeyBzeXNNc2cgKCAiRVJST1I6ICVzOiVk
ICRJZDogUGNpRGV2LmgsdiAxLjIgMjAwMy8wNC8yMyAxNDozOTo1MSBqbGF3c29uIEV4cCAkXG4i
LCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9k
ZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIsIDM0NyApOyB9OwogICAgICAgICAgICAgICAgcmV0dXJu
IDE0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICBMb2NrRGV2ICggKTsKCiAgICAgICAgY29u
ZmlndXJhdG9yLldyaXRlMzIgKCBvZmYsIHZhbCApOwoKICAgICAgICBVbmxvY2tEZXYgKCApOwoK
ICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiMgMzcyICIvaG9tZS9ybHAveHNjYWxlL3Byb2Jl
L3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaURldi5oIgpp
bmxpbmUgaW50IFBjaURldjo6V3JDZmdPZmZzZXQgKCBpbnQgb2ZmLCBVSW50MTYgdmFsICkKICAg
ICAgICB7CiAgICAgICAgaWYgKCAhIGNvbmZpZ3VyYXRvci5QY2lWYWxpZENmZ09mZiAoIG9mZiAp
ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHsgc3lzTXNnICggIkVSUk9SOiAl
czolZCAkSWQ6IFBjaURldi5oLHYgMS4yIDIwMDMvMDQvMjMgMTQ6Mzk6NTEgamxhd3NvbiBFeHAg
JFxuIiwgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZl
cnMvZGV2L3BjaS9jb21tb24vUGNpRGV2LmgiLCAzNzYgKTsgfTsKICAgICAgICAgICAgICAgIHJl
dHVybiAxNDsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgIExvY2tEZXYgKCApOwoKICAgICAg
ICBjb25maWd1cmF0b3IuV3JpdGUxNiAoIG9mZiwgdmFsICk7CgogICAgICAgIFVubG9ja0RldiAo
ICk7CgogICAgICAgIHJldHVybiAwOwogICAgICAgIH0KIyA0MDIgIi9ob21lL3JscC94c2NhbGUv
cHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpRGV2
LmgiCmlubGluZSBpbnQgUGNpRGV2OjpXckNmZ09mZnNldCAoIGludCBvZmYsIFVJbnQ4IHZhbCAp
CiAgICAgICAgewogICAgICAgIGlmICggISBjb25maWd1cmF0b3IuUGNpVmFsaWRDZmdPZmYgKCBv
ZmYgKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB7IHN5c01zZyAoICJFUlJP
UjogJXM6JWQgJElkOiBQY2lEZXYuaCx2IDEuMiAyMDAzLzA0LzIzIDE0OjM5OjUxIGpsYXdzb24g
RXhwICRcbiIsICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9k
cml2ZXJzL2Rldi9wY2kvY29tbW9uL1BjaURldi5oIiwgNDA2ICk7IH07CiAgICAgICAgICAgICAg
ICByZXR1cm4gMTQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIExvY2tEZXYgKCApOwoKICAg
ICAgICBjb25maWd1cmF0b3IuV3JpdGU4ICggb2ZmLCB2YWwgKTsKCiAgICAgICAgVW5sb2NrRGV2
ICggKTsKCiAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQojIDQzMSAiL2hvbWUvcmxwL3hzY2Fs
ZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lE
ZXYuaCIKaW5saW5lIHZvaWQgUGNpRGV2OjpMb2NrRGV2ICggKSBjb25zdAogICAgICAgIHsKICAg
ICAgICBkZXZMb2NrLkxvY2sgKCApOwogICAgICAgIH0KIyA0NDcgIi9ob21lL3JscC94c2NhbGUv
cHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpRGV2
LmgiCmlubGluZSB2b2lkIFBjaURldjo6VW5sb2NrRGV2ICggKSBjb25zdAogICAgICAgIHsKICAg
ICAgICBkZXZMb2NrLlVubG9jayAoICk7CiAgICAgICAgfQojIDQ2MiAiL2hvbWUvcmxwL3hzY2Fs
ZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lE
ZXYuaCIKaW5saW5lIFBjaURldjo6flBjaURldiAoICkKICAgICAgICB7CiAgICAgICAgaXNWYWxp
ZCA9ICgoSUJvb2wpIDApOwogICAgICAgIGlzTWFwcGVkID0gKChJQm9vbCkgMCk7CiAgICAgICAg
fQoKaW5saW5lIFVJbnQxNiBQY2lEZXY6OkRldmljZUlEICggdm9pZCApIGNvbnN0CiAgICAgICAg
ewogICAgICAgIGlmICggISBpc1ZhbGlkICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIHsgc3lzTXNnICggIkVSUk9SOiAlczolZCAkSWQ6IFBjaURldi5oLHYgMS4yIDIwMDMvMDQv
MjMgMTQ6Mzk6NTEgamxhd3NvbiBFeHAgJFxuIiwgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUv
b3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpRGV2LmgiLCA0NzIg
KTsgfTsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICByZXR1cm4gY29uZmlndXJhdG9yLkRldmljZUlEICggKTsKICAgICAgICB9OwoKaW5saW5lIFVJ
bnQxNiBQY2lEZXY6OlZlbmRvcklEICggdm9pZCApIGNvbnN0CiAgICAgICAgewogICAgICAgIGlm
ICggISBpc1ZhbGlkICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHsgc3lzTXNn
ICggIkVSUk9SOiAlczolZCAkSWQ6IFBjaURldi5oLHYgMS4yIDIwMDMvMDQvMjMgMTQ6Mzk6NTEg
amxhd3NvbiBFeHAgJFxuIiwgIi9ob21lL3JscC94c2NhbGUvcHJvYmUvdjUvb3Mvc3JjL2dlb1hp
bnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21tb24vUGNpRGV2LmgiLCA0ODMgKTsgfTsKICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gY29u
ZmlndXJhdG9yLlZlbmRvcklEICggKTsKICAgICAgICB9OwoKCgppbmxpbmUgdm9pZCBQY2lEZXY6
OkNvbW1hbmRCaXQgKCBJQm9vbCBlbmFibGUsIFVJbnQxNiB2YWx1ZSApCiAgICAgICAgewogICAg
ICAgIGlmICggaXNWYWxpZCApCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICBM
b2NrRGV2ICggKTsKCiAgICAgICAgICAgICAgICBVSW50MTYgcGNpQ21kID0gY29uZmlndXJhdG9y
LkNmZ0NtZCAoICk7CgogICAgICAgICAgICAgICAgcGNpQ21kID0gZW5hYmxlID8gKCBwY2lDbWQg
fCB2YWx1ZSApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoIHBjaUNtZCAmIH52YWx1ZSApOwoKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRvci5D
ZmdDbWQgKCBwY2lDbWQgKTsKCiAgICAgICAgICAgICAgICBVbmxvY2tEZXYgKCApOwogICAgICAg
ICAgICAgICAgfQogICAgICAgIH07CgppbmxpbmUgSUJvb2wgUGNpRGV2OjpDb21tYW5kQml0ICgg
VUludDE2IHZhbHVlICkgY29uc3QKICAgICAgICB7CiAgICAgICAgaWYgKCAhIGlzVmFsaWQgKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeyBzeXNNc2cgKCAiRVJST1I6ICVzOiVk
ICRJZDogUGNpRGV2LmgsdiAxLjIgMjAwMy8wNC8yMyAxNDozOTo1MSBqbGF3c29uIEV4cCAkXG4i
LCAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9k
ZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIsIDUxNiApOyB9OwogICAgICAgICAgICAgICAgcmV0dXJu
ICgoSUJvb2wpIDApOwogICAgICAgICAgICAgICAgfQoKCgogICAgICAgIExvY2tEZXYgKCApOwog
ICAgICAgIFVJbnQxNiBwY2lDbWQgPSBjb25maWd1cmF0b3IuQ2ZnQ21kICggKTsKICAgICAgICBV
bmxvY2tEZXYgKCApOwoKICAgICAgICByZXR1cm4gcGNpQ21kICYgdmFsdWUgPyAoKElCb29sKSAx
KSA6ICgoSUJvb2wpIDApOwogICAgICAgIH07CgppbmxpbmUgdm9pZCBQY2lEZXY6OklPU3BhY2VF
bmFibGUgKCBJQm9vbCBlbmFibGUgKQogICAgICAgIHsKICAgICAgICBDb21tYW5kQml0ICggZW5h
YmxlLCAweDEgKTsKICAgICAgICB9CgppbmxpbmUgSUJvb2wgUGNpRGV2OjpJT1NwYWNlRW5hYmxl
ICggdm9pZCApIGNvbnN0CiAgICAgICAgewogICAgICAgIHJldHVybiBDb21tYW5kQml0ICggMHgx
ICk7CiAgICAgICAgfQoKaW5saW5lIHZvaWQgUGNpRGV2OjpNZW1TcGFjZUVuYWJsZSAoIElCb29s
IGVuYWJsZSApCiAgICAgICAgewogICAgICAgIENvbW1hbmRCaXQgKCBlbmFibGUsIDB4MiApOwog
ICAgICAgIH0KaW5saW5lIElCb29sIFBjaURldjo6TWVtU3BhY2VFbmFibGUgKCB2b2lkICkgY29u
c3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIENvbW1hbmRCaXQgKCAweDIgKTsKICAgICAgICB9
CgppbmxpbmUgdm9pZCBQY2lEZXY6OlNwZWNpYWxDeWNsZUVuYWJsZSAoIElCb29sIGVuYWJsZSAp
CiAgICAgICAgewogICAgICAgIENvbW1hbmRCaXQgKCBlbmFibGUsIDB4OCApOwogICAgICAgIH0K
aW5saW5lIElCb29sIFBjaURldjo6U3BlY2lhbEN5Y2xlRW5hYmxlICggdm9pZCApIGNvbnN0CiAg
ICAgICAgewogICAgICAgIHJldHVybiBDb21tYW5kQml0ICggMHg4ICk7CiAgICAgICAgfQoKaW5s
aW5lIHZvaWQgUGNpRGV2OjpNZW1Xcml0ZUludmFsaWRhdGVFbmFibGUgKCBJQm9vbCBlbmFibGUg
KQogICAgICAgIHsKICAgICAgICBDb21tYW5kQml0ICggZW5hYmxlLCAweDEwICk7CiAgICAgICAg
fQppbmxpbmUgSUJvb2wgUGNpRGV2OjpNZW1Xcml0ZUludmFsaWRhdGVFbmFibGUgKCB2b2lkICkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIENvbW1hbmRCaXQgKCAweDEwICk7CiAgICAg
ICAgfQoKaW5saW5lIHZvaWQgUGNpRGV2OjpWZ2FQYWxldHRlU25vb3BFbmFibGUgKCBJQm9vbCBl
bmFibGUgKQogICAgICAgIHsKICAgICAgICBDb21tYW5kQml0ICggZW5hYmxlLCAweDIwICk7CiAg
ICAgICAgfQppbmxpbmUgSUJvb2wgUGNpRGV2OjpWZ2FQYWxldHRlU25vb3BFbmFibGUgKCB2b2lk
ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIENvbW1hbmRCaXQgKCAweDIwICk7CiAg
ICAgICAgfQoKaW5saW5lIHZvaWQgUGNpRGV2OjpQYXJpdHlFcnJSZXNwb25zZUVuYWJsZSAoIElC
b29sIGVuYWJsZSApCiAgICAgICAgewogICAgICAgIENvbW1hbmRCaXQgKCBlbmFibGUsIDB4NDAg
KTsKICAgICAgICB9CmlubGluZSBJQm9vbCBQY2lEZXY6OlBhcml0eUVyclJlc3BvbmVFbmFibGUg
KCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIENvbW1hbmRCaXQgKCAweDQw
ICk7CiAgICAgICAgfQoKaW5saW5lIElCb29sIFBjaURldjo6V2FpdEN5Y2xlQ29udHJvbCAoIHZv
aWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4gQ29tbWFuZEJpdCAoIDB4ODAgKTsK
ICAgICAgICB9CgppbmxpbmUgdm9pZCBQY2lEZXY6OlNlcnJFbmFibGUgKCBJQm9vbCBlbmFibGUg
KQogICAgICAgIHsKICAgICAgICBDb21tYW5kQml0ICggZW5hYmxlLCAweDEwMCApOwogICAgICAg
IH0KaW5saW5lIElCb29sIFBjaURldjo6U2VyckVuYWJsZSAoIHZvaWQgKSBjb25zdAogICAgICAg
IHsKICAgICAgICByZXR1cm4gQ29tbWFuZEJpdCAoIDB4MTAwICk7CiAgICAgICAgfQoKaW5saW5l
IHZvaWQgUGNpRGV2OjpGYXN0QmFja1RvQmFja0VuYWJsZSAoIElCb29sIGVuYWJsZSApCiAgICAg
ICAgewogICAgICAgIENvbW1hbmRCaXQgKCBlbmFibGUsIDB4MjAwICk7CiAgICAgICAgfQppbmxp
bmUgSUJvb2wgUGNpRGV2OjpGYXN0QmFja1RvQmFja0VuYWJsZSAoIHZvaWQgKSBjb25zdAogICAg
ICAgIHsKICAgICAgICByZXR1cm4gQ29tbWFuZEJpdCAoIDB4MjAwICk7CiAgICAgICAgfQoKaW5s
aW5lIHZvaWQgUGNpRGV2OjpCdXNNYXN0ZXJFbmFibGUgKCBJQm9vbCBlbmFibGUgKQogICAgICAg
IHsKICAgICAgICBDb21tYW5kQml0ICggZW5hYmxlLCAweDQgKTsKICAgICAgICB9CmlubGluZSBJ
Qm9vbCBQY2lEZXY6OkJ1c01hc3RlckVuYWJsZSAoICkgY29uc3QKICAgICAgICB7CiAgICAgICAg
cmV0dXJuIENvbW1hbmRCaXQgKCAweDQgKTsKICAgICAgICB9CiMgNjI4ICIvaG9tZS9ybHAveHNj
YWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2ZXJzL2Rldi9wY2kvY29tbW9uL1Bj
aURldi5oIgppbmxpbmUgVUludDMyIFBjaURldjo6UmV2aXNpb25JRCAoIHZvaWQgKSBjb25zdAog
ICAgICAgIHsKICAgICAgICBVSW50OCByZXZJZCA9IDA7CgogICAgICAgIGlmICggaXNWYWxpZCAp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMb2NrRGV2ICggKTsKICAgICAgICAg
ICAgICAgIHJldklkID0gY29uZmlndXJhdG9yLkNmZ1JpZCAoICk7CiAgICAgICAgICAgICAgICBV
bmxvY2tEZXYgKCApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmV2SWQ7CiAg
ICAgICAgfTsKCmlubGluZSBVSW50MzIgUGNpRGV2OjpDbGFzc0NvZGUgKCB2b2lkICkgY29uc3QK
ICAgICAgICB7CgoKICAgICAgICBVSW50MzIgdmFsdWU7CgogICAgICAgIGlmICggUmRDZmdPZmZz
ZXQgKCAweDA4LCB2YWx1ZSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gdmFsdWUgPj4gODsKICAg
ICAgICB9OwoKaW5saW5lIHZvaWQgUGNpRGV2OjpDYWNoZUxpbmVTaXplICggVUludDggc2l6ZSAp
CiAgICAgICAgewogICAgICAgIGlmICggaXNWYWxpZCApCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBMb2NrRGV2ICggKTsKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRvci5DZmdD
YUxuICggc2l6ZSApOwoKICAgICAgICAgICAgICAgIFVubG9ja0RldiAoICk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfTsKaW5saW5lIFVJbnQ4IFBjaURldjo6Q2FjaGVMaW5lU2l6ZSAoIHZv
aWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICBVSW50OCBzaXplID0gMDsKCiAgICAgICAgaWYg
KCBpc1ZhbGlkICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIExvY2tEZXYgKCAp
OwogICAgICAgICAgICAgICAgc2l6ZSA9IGNvbmZpZ3VyYXRvci5DZmdDYUxuICggKTsKICAgICAg
ICAgICAgICAgIFVubG9ja0RldiAoICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIHJldHVy
biBzaXplOwogICAgICAgIH07CmlubGluZSB2b2lkIFBjaURldjo6TGF0ZW5jeVRpbWVyICggVUlu
dDggdGltZXIgKQogICAgICAgIHsKICAgICAgICBpZiAoIGlzVmFsaWQgKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgTG9ja0RldiAoICk7CiAgICAgICAgICAgICAgICBjb25maWd1
cmF0b3IuQ2ZnTGF0ICggdGltZXIgKTsKICAgICAgICAgICAgICAgIFVubG9ja0RldiAoICk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgfTsKaW5saW5lIFVJbnQ4IFBjaURldjo6TGF0ZW5jeVRp
bWVyICggdm9pZCApIGNvbnN0CiAgICAgICAgewogICAgICAgIFVJbnQ4IHRpbWVyID0gMDsKCiAg
ICAgICAgaWYgKCBpc1ZhbGlkICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIExv
Y2tEZXYgKCApOwogICAgICAgICAgICAgICAgdGltZXIgPSBjb25maWd1cmF0b3IuQ2ZnTGF0ICgg
KTsKICAgICAgICAgICAgICAgIFVubG9ja0RldiAoICk7CiAgICAgICAgICAgICAgICB9CgogICAg
ICAgIHJldHVybiB0aW1lcjsKICAgICAgICB9OwppbmxpbmUgVUludDggUGNpRGV2OjpIZWFkZXJU
eXBlICggdm9pZCApIGNvbnN0CiAgICAgICAgewogICAgICAgIFVJbnQ4IGhlYWRlciA9IDA7Cgog
ICAgICAgIGlmICggaXNWYWxpZCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBM
b2NrRGV2ICggKTsKICAgICAgICAgICAgICAgIGhlYWRlciA9IGNvbmZpZ3VyYXRvci5DZmdIZWFk
ciAoICk7CiAgICAgICAgICAgICAgICBVbmxvY2tEZXYgKCApOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICByZXR1cm4gaGVhZGVyOwogICAgICAgIH07CmlubGluZSB2b2lkIFBjaURldjo6Qmlz
dFN0YXJ0ICggSUJvb2wgZW5hYmxlICkKICAgICAgICB7CiAgICAgICAgaWYgKCBpc1ZhbGlkICkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIExvY2tEZXYgKCApOwoKICAgICAgICAg
ICAgICAgIFVJbnQ4IGJpc3Q7CiAgICAgICAgICAgICAgICBiaXN0ID0gY29uZmlndXJhdG9yLkNm
Z0Jpc3QgKCApOwogICAgICAgICAgICAgICAgYmlzdCB8PSAweDQwOwogICAgICAgICAgICAgICAg
Y29uZmlndXJhdG9yLkNmZ0Jpc3QgKCBiaXN0ICk7CgogICAgICAgICAgICAgICAgVW5sb2NrRGV2
ICggKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwppbmxpbmUgSUJvb2wgUGNpRGV2OjpC
aXN0U3RhcnQgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgVUludDggYmlzdCA9IDA7
CgogICAgICAgIGlmICggaXNWYWxpZCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBMb2NrRGV2ICggKTsKICAgICAgICAgICAgICAgIGJpc3QgPSBjb25maWd1cmF0b3IuQ2ZnQmlz
dCAoICk7CiAgICAgICAgICAgICAgICBVbmxvY2tEZXYgKCApOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICByZXR1cm4gYmlzdCAmIDB4NDAgPyAoKElCb29sKSAxKSA6ICgoSUJvb2wpIDApOwog
ICAgICAgIH07CgppbmxpbmUgSUJvb2wgUGNpRGV2OjpCaXN0Q2FwYWJsZSAoIHZvaWQgKSBjb25z
dAogICAgICAgIHsKICAgICAgICBVSW50OCBiaXN0ID0gMDsKCiAgICAgICAgaWYgKCBpc1ZhbGlk
ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIExvY2tEZXYgKCApOwogICAgICAg
ICAgICAgICAgYmlzdCA9IGNvbmZpZ3VyYXRvci5DZmdCaXN0ICggKTsKICAgICAgICAgICAgICAg
IFVubG9ja0RldiAoICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIHJldHVybiBiaXN0ICYg
MHg4MCA/ICgoSUJvb2wpIDEpIDogKChJQm9vbCkgMCk7CiAgICAgICAgfTsKCmlubGluZSB2b2lk
IFBjaURldjo6TWluR3JhbnQgKCBVSW50OCBncmFudCApCiAgICAgICAgewogICAgICAgIGlmICgg
aXNWYWxpZCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMb2NrRGV2ICggKTsK
ICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRvci5DZmdNaW5HbnQgKCBncmFudCApOwogICAgICAg
ICAgICAgICAgVW5sb2NrRGV2ICggKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Owppbmxp
bmUgVUludDggUGNpRGV2OjpNaW5HcmFudCAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAg
ICBVSW50OCBncmFudCA9IDA7CgogICAgICAgIGlmICggaXNWYWxpZCApCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBMb2NrRGV2ICggKTsKICAgICAgICAgICAgICAgIGdyYW50ID0g
Y29uZmlndXJhdG9yLkNmZ01pbkdudCAoICk7CiAgICAgICAgICAgICAgICBVbmxvY2tEZXYgKCAp
OwogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gZ3JhbnQ7CiAgICAgICAgfTsKaW5s
aW5lIHZvaWQgUGNpRGV2OjpNYXhMYXRlbmN5ICggVUludDggbGF0ICkKICAgICAgICB7CiAgICAg
ICAgaWYgKCBpc1ZhbGlkICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIExvY2tE
ZXYgKCApOwogICAgICAgICAgICAgICAgY29uZmlndXJhdG9yLkNmZ01heExhdCAoIGxhdCApOwog
ICAgICAgICAgICAgICAgVW5sb2NrRGV2ICggKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
OwppbmxpbmUgVUludDggUGNpRGV2OjpNYXhMYXRlbmN5ICggdm9pZCApIGNvbnN0CiAgICAgICAg
ewogICAgICAgIFVJbnQ4IGxhdCA9IDA7CgogICAgICAgIGlmICggaXNWYWxpZCApCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBMb2NrRGV2ICggKTsKICAgICAgICAgICAgICAgIGxh
dCA9IGNvbmZpZ3VyYXRvci5DZmdNYXhMYXQgKCApOwogICAgICAgICAgICAgICAgVW5sb2NrRGV2
ICggKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGxhdDsKICAgICAgICB9OwoK
aW5saW5lIFVJbnQzMiBQY2lEZXY6OkNhcmRCdXNDaXMgKCB2b2lkICkgY29uc3QKICAgICAgICB7
CiAgICAgICAgVUludDMyIGNpcyA9IDA7CgogICAgICAgIGlmICggaXNWYWxpZCApCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBjaXMgPSBjb25maWd1cmF0b3IuQ2ZnQ2lzICggKTsK
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNpczsKICAgICAgICB9OwoKaW5saW5l
IFVJbnQxNiBQY2lEZXY6OlN1YlN5c3RlbUlEICggdm9pZCApIGNvbnN0CiAgICAgICAgewogICAg
ICAgIFVJbnQzMiBzdWJzeXNJZCA9IDA7CgogICAgICAgIGlmICggaXNWYWxpZCApCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBzdWJzeXNJZCA9IGNvbmZpZ3VyYXRvci5DZmdTdWJJ
RCAoICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIHJldHVybiBzdWJzeXNJZDsKICAgICAg
ICB9OwoKaW5saW5lIFVJbnQxNiBQY2lEZXY6OlN1YlN5c3RlbVZlbmRvcklEICggdm9pZCApIGNv
bnN0CiAgICAgICAgewogICAgICAgIFVJbnQxNiBzdWJzeXNWZW5kb3JJZCA9IDA7CgogICAgICAg
IGlmICggaXNWYWxpZCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdWJzeXNW
ZW5kb3JJZCA9IGNvbmZpZ3VyYXRvci5DZmdTdWJWaWQgKCApOwogICAgICAgICAgICAgICAgfQoK
ICAgICAgICByZXR1cm4gc3Vic3lzVmVuZG9ySWQ7CiAgICAgICAgfTsKIyA4NDggIi9ob21lL3Js
cC94c2NhbGUvcHJvYmUvdjUvb3Mvc3JjL2dlb1hpbnUvc3JjL2RyaXZlcnMvZGV2L3BjaS9jb21t
b24vUGNpRGV2LmgiCmlubGluZSBJQm9vbCBQY2lEZXY6OlN0YXR1c0JpdCAoIFVJbnQxNiB2YWx1
ZSApIGNvbnN0CiAgICAgICAgewogICAgICAgIGlmICggaXNWYWxpZCApCiAgICAgICAgICAgICAg
ICB7CgoKCiAgICAgICAgICAgICAgICBMb2NrRGV2ICggKTsKICAgICAgICAgICAgICAgIFVJbnQx
NiBzdGF0dXMgPSBjb25maWd1cmF0b3IuQ2ZnU3RhdCAoICk7CiAgICAgICAgICAgICAgICBVbmxv
Y2tEZXYgKCApOwoKICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXMgJiB2YWx1ZSA/ICgoSUJv
b2wpIDEpIDogKChJQm9vbCkgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeyBzeXNNc2cgKCAiRVJST1I6ICVzOiVkICRJ
ZDogUGNpRGV2LmgsdiAxLjIgMjAwMy8wNC8yMyAxNDozOTo1MSBqbGF3c29uIEV4cCAkXG4iLCAi
L2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYv
cGNpL2NvbW1vbi9QY2lEZXYuaCIsIDg2MyApOyB9OwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICByZXR1cm4gKChJQm9vbCkgMCk7CiAgICAgICAgfTsKCmlubGluZSBJQm9vbCBQY2lEZXY6OkRh
dGFQYXJpdHlFcnJvciAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4gU3Rh
dHVzQml0ICggMHgxMDAgKTsKICAgICAgICB9OwoKaW5saW5lIElCb29sIFBjaURldjo6UmVjZWl2
ZWRUYXJnZXRBYm9ydCAoIHZvaWQgKSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4gU3Rh
dHVzQml0ICggMHgxMDAwICk7CiAgICAgICAgfTsKCmlubGluZSBJQm9vbCBQY2lEZXY6OlJlY2Vp
dmVkTWFzdGVyQWJvcnQgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIFN0
YXR1c0JpdCAoIDB4MjAwMCApOwogICAgICAgIH07CgppbmxpbmUgSUJvb2wgUGNpRGV2OjpTaWdu
YWxlZFNlcnIgKCB2b2lkICkgY29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIFN0YXR1c0Jp
dCAoIDB4NDAwMCApOwogICAgICAgIH07CgppbmxpbmUgSUJvb2wgUGNpRGV2OjpEZXRlY3RlZFBh
cml0eUVycm9yICggdm9pZCApIGNvbnN0CiAgICAgICAgewogICAgICAgIHJldHVybiBTdGF0dXNC
aXQgKCAweDgwMDAgKTsKICAgICAgICB9OwojIDkwNyAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92
NS9vcy9zcmMvZ2VvWGludS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIKaW5s
aW5lIFVJbnQzMiBQY2lEZXY6OkJhc2VBZGRyZXNzICggUGNpQmFzZUFkZHJlc3NUeXBlIGJhc2VS
ZWcgKSBjb25zdAogICAgICAgIHsKICAgICAgICBpbnQgcmVnID0gKGludCkgYmFzZVJlZzsKICAg
ICAgICBVSW50MzIgYmFzZSA9IDA7CgogICAgICAgIGlmICggcmVnID49IDAgKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgaWYgKCBpc1ZhbGlkICkKICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBMb2NrRGV2ICggKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZSA9IGNvbmZpZ3VyYXRvci5DZmdCYWRyICggYmFzZVJlZyApICYgMHhG
RkZGRkZGMDsKICAgICAgICAgICAgICAgICAgICAgICAgVW5sb2NrRGV2ICggKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmFzZTsK
ICAgICAgICB9OwojIDkzNyAiL2hvbWUvcmxwL3hzY2FsZS9wcm9iZS92NS9vcy9zcmMvZ2VvWGlu
dS9zcmMvZHJpdmVycy9kZXYvcGNpL2NvbW1vbi9QY2lEZXYuaCIKaW5saW5lIGludCBQY2lEZXY6
OlBjaUdldElTUlZlY3RvciAoIHZvaWQgKQogICAgICAgIHsKICAgICAgICBpZiAoICEgaXNWYWxp
ZCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB7IHN5c01zZyAoICJFUlJPUjog
JXM6JWQgJElkOiBQY2lEZXYuaCx2IDEuMiAyMDAzLzA0LzIzIDE0OjM5OjUxIGpsYXdzb24gRXhw
ICRcbiIsICIvaG9tZS9ybHAveHNjYWxlL3Byb2JlL3Y1L29zL3NyYy9nZW9YaW51L3NyYy9kcml2
ZXJzL2Rldi9wY2kvY29tbW9uL1BjaURldi5oIiwgOTQxICk7IH07CiAgICAgICAgICAgICAgICBy
ZXR1cm4gOTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgaW50IHZlY3RvcjsKICAgICAgICBV
SW50OCBsaW5lOwogICAgICAgIFVJbnQ4IHBpbjsKCiAgICAgICAgTG9ja0RldiAoICk7CgogICAg
ICAgIGxpbmUgPSBjb25maWd1cmF0b3IuQ2ZnSW50TG4gKCApOwogICAgICAgIHBpbiA9IGNvbmZp
Z3VyYXRvci5DZmdJbnRQaW4gKCApOwoKICAgICAgICBVbmxvY2tEZXYgKCApOwoKICAgICAgICB2
ZWN0b3IgPSB2ZWN0b3JNYXAgWyAoICggcGluICsgbGluZSApICUgNCApIF07CgogICAgICAgIHJl
dHVybiB2ZWN0b3I7CiAgICAgICAgfQojIDUgImEuaCIgMgoKY2xhc3MgUGNpWFNjYWxlRGV2IDog
cHVibGljIFBjaUxvY2FsRGV2CiAgICAgICAgewpwcm90ZWN0ZWQ6CgoKCgoKCiAgICAgICAgbXV0
YWJsZSBVSW50MzIgYmFzZTA7CiAgICAgICAgbXV0YWJsZSBVSW50MzIgdXBwZXJCYXNlMDsKICAg
ICAgICBtdXRhYmxlIFVJbnQzMiBsaW1pdDA7CiAgICAgICAgbXV0YWJsZSBVSW50MzIgdmFsdWUw
OwoKCiAgICAgICAgbXV0YWJsZSBVSW50MzIgYmFzZTE7CiAgICAgICAgbXV0YWJsZSBVSW50MzIg
dXBwZXJCYXNlMTsKICAgICAgICBtdXRhYmxlIFVJbnQzMiBsaW1pdDE7CgogICAgICAgIG11dGFi
bGUgVUludDMyIGJhc2UyOwogICAgICAgIG11dGFibGUgVUludDMyIHVwcGVyQmFzZTI7CiAgICAg
ICAgbXV0YWJsZSBVSW50MzIgbGltaXQyOwogICAgICAgIG11dGFibGUgVUludDMyIHZhbHVlMjsK
CgogICAgICAgIG11dGFibGUgVUludDMyIGJhc2UzOwogICAgICAgIG11dGFibGUgVUludDMyIHVw
cGVyQmFzZTM7CiAgICAgICAgbXV0YWJsZSBVSW50MzIgbGltaXQzOwogICAgICAgIG11dGFibGUg
VUludDMyIHZhbHVlMzsKCgogICAgICAgIFVJbnQzMiAqIHBCYXNlMDsKICAgICAgICBVSW50MzIg
KiBwQmFzZTE7CiAgICAgICAgVUludDMyICogcEJhc2UyOwogICAgICAgIFVJbnQzMiAqIHBCYXNl
MzsKCiAgICAgICAgVUludDMyICogcFVwcGVyQmFzZTA7CiAgICAgICAgVUludDMyICogcFVwcGVy
QmFzZTE7CiAgICAgICAgVUludDMyICogcFVwcGVyQmFzZTI7CiAgICAgICAgVUludDMyICogcFVw
cGVyQmFzZTM7CgogICAgICAgIFVJbnQzMiAqIHBMaW1pdDA7CiAgICAgICAgVUludDMyICogcExp
bWl0MTsKICAgICAgICBVSW50MzIgKiBwTGltaXQyOwogICAgICAgIFVJbnQzMiAqIHBMaW1pdDM7
CgogICAgICAgIFVJbnQzMiAqIHBWYWx1ZTA7CiAgICAgICAgVUludDMyICogcFZhbHVlMjsKICAg
ICAgICBVSW50MzIgKiBwVmFsdWUzOwoKCnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBjaVhTY2FsZURldiAoIFVJbnQzMiBwY2lDc3JBZGRyZXNzICk7Cgog
ICAgICAgIHZvaWQgUmVhZFZhbHVlcyAoIHZvaWQgKSBjb25zdDsKICAgICAgICBVSW50MzIgTG9j
YWxUb1BjaSAoIFVJbnQzMiBsb2NhbFNkcmFtQWRkcmVzcyApIGNvbnN0OwogICAgICAgIFVJbnQz
MiBQY2lUb0xvY2FsICggVUludDMyIHBjaVNkcmFtQWRkcmVzcyApIGNvbnN0OwogICAgICAgIElT
dGF0dXMgTG9jYWxQY2lSYW5nZSggVUludDMyJiBtaW5BZGRyLCBVSW50MzImIG1heEFkZHIgKSBj
b25zdDsKCiAgICAgICAgdm9pZCBCb290ICggY29uc3QgY2hhciAqIHBGaWxlTmFtZSApOwogICAg
ICAgIHZvaWQgUmVzZXQgKCB2b2lkICk7CiAgICAgICAgSUJvb2wgSXNFbmFibGVkICggdm9pZCAp
OwoKICAgICAgICBVSW50MzIgQ2FsY0VudHJ5ICggY29uc3QgY2hhciAqIHBGaWxlTmFtZSApOwoK
ICAgICAgICBJU3RhdHVzIFNob3cgKCB2b2lkICkgY29uc3Q7CiAgICAgICAgfTsKIyAyMiAiYS5j
YyIgMgojIDQyICJhLmNjIgpQY2lYU2NhbGVEZXY6OlBjaVhTY2FsZURldiAoIFVJbnQzMiBiYXNl
ICkKICAgICAgICA6IFBjaUxvY2FsRGV2ICggYmFzZSApCiAgICAgICAgewogICAgICAgIExhdGVu
Y3kgKCBQY2lEZXY6OkxhdGVuY3lUaW1lciAoICkgKTsKCgoKICAgICAgICBCYXNlQWRkclR5cGUg
KCAoUGNpQmFzZUFkZHJlc3NUeXBlKSAwICk7CgogICAgICAgIERldk5hbWUgKCAiTG9jYWxQcm9j
ZXNzb3IiICk7CgoKICAgICAgICBwQmFzZTAgPSAoVUludDMyICopIChiYXNlICsgMHgxMCk7CiAg
ICAgICAgcEJhc2UxID0gKFVJbnQzMiAqKSAoYmFzZSArIDB4MTgpOwogICAgICAgIHBCYXNlMiA9
IChVSW50MzIgKikgKGJhc2UgKyAweDIwKTsKICAgICAgICBwQmFzZTMgPSAoVUludDMyICopIChi
YXNlICsgMHg5MCk7CgogICAgICAgIHBVcHBlckJhc2UwID0gKFVJbnQzMiAqKSAoYmFzZSArIDB4
MTQpOwogICAgICAgIHBVcHBlckJhc2UxID0gKFVJbnQzMiAqKSAoYmFzZSArIDB4MWMpOwogICAg
ICAgIHBVcHBlckJhc2UyID0gKFVJbnQzMiAqKSAoYmFzZSArIDB4MjQpOwogICAgICAgIHBVcHBl
ckJhc2UzID0gKFVJbnQzMiAqKSAoYmFzZSArIDB4OTQpOwoKICAgICAgICBwTGltaXQwID0gKFVJ
bnQzMiAqKSAoYmFzZSArIDB4NDApOwogICAgICAgIHBMaW1pdDEgPSAoVUludDMyICopIChiYXNl
ICsgMHg1MCk7CiAgICAgICAgcExpbWl0MiA9IChVSW50MzIgKikgKGJhc2UgKyAweDU0KTsKICAg
ICAgICBwTGltaXQzID0gKFVJbnQzMiAqKSAoYmFzZSArIDB4OTgpOwoKICAgICAgICBwVmFsdWUw
ID0gKFVJbnQzMiAqKSAoYmFzZSArIDB4NDQpOwogICAgICAgIHBWYWx1ZTIgPSAoVUludDMyICop
IChiYXNlICsgMHg1OCk7CiAgICAgICAgcFZhbHVlMyA9IChVSW50MzIgKikgKGJhc2UgKyAweDlj
KTsKCgogICAgICAgIGJhc2UwID0gKFVJbnQzMikgLTE7CiAgICAgICAgdXBwZXJCYXNlMCA9IChV
SW50MzIpIC0xOwogICAgICAgIGxpbWl0MCA9IChVSW50MzIpIC0xOwogICAgICAgIHZhbHVlMCA9
IChVSW50MzIpIC0xOwoKICAgICAgICBiYXNlMSA9IChVSW50MzIpIC0xOwogICAgICAgIHVwcGVy
QmFzZTEgPSAoVUludDMyKSAtMTsKICAgICAgICBsaW1pdDEgPSAoVUludDMyKSAtMTsKCgogICAg
ICAgIGJhc2UyID0gKFVJbnQzMikgLTE7CiAgICAgICAgdXBwZXJCYXNlMiA9IChVSW50MzIpIC0x
OwogICAgICAgIGxpbWl0MiA9IChVSW50MzIpIC0xOwogICAgICAgIHZhbHVlMiA9IChVSW50MzIp
IC0xOwoKICAgICAgICBiYXNlMyA9IChVSW50MzIpIC0xOwogICAgICAgIHVwcGVyQmFzZTMgPSAo
VUludDMyKSAtMTsKICAgICAgICBsaW1pdDMgPSAoVUludDMyKSAtMTsKICAgICAgICB2YWx1ZTMg
PSAoVUludDMyKSAtMTsKCiAgICAgICAgfTsK


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-05-01 23:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-01 23:56 target/10592: apcs frame causing register mishandling ryan.pipkin

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