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


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

c++/9589: Segmentation fault on missing semicolon after class definition.


>Number:         9589
>Category:       c++
>Synopsis:       Segmentation fault on missing semicolon after class definition.
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Wed Feb 05 19:46:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     bmiller@txcorp.com
>Release:        3.2
>Organization:
>Environment:
GNU CPP version 3.2 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.2 (i686-pc-linux-gnu)
        compiled by GNU C version 3.2.

RedHat 7.2
>Description:
The attached .ii file causes g++ to segfault.  Search for "xxx" and see that the end of the class definition is missing a semicolon.
>How-To-Repeat:

>Fix:

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

IyAxICJUeFZvcnBhbEdVSS5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5l
PiIKIyAxICJUeFZvcnBhbEdVSS5jcHAiCiMgMTMgIlR4Vm9ycGFsR1VJLmNwcCIKIyAxICJUeFZv
cnBhbEdVSS5oIiAxCiMgMTYgIlR4Vm9ycGFsR1VJLmgiCiMgMSAiL2hvbWUvcmVzZWFyY2gvYm1p
bGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cUVkaXRUYWJsZS5oIiAxCiMgMTkg
Ii9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFF
ZGl0VGFibGUuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXRhYmxlLmgiIDEK
IyA0MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0YWJsZS5oIgojIDEgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xc2Nyb2xsdmlldy5oIiAxCiMgNDEgIi91c3IvbG9jYWwvcXQt
My4xLjEvaW5jbHVkZS9xc2Nyb2xsdmlldy5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j
bHVkZS9xZnJhbWUuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWZyYW1l
LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRnZXQuaCIgMQojIDQyICIv
dXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXdpZGdldC5oIgojIDEgIi91c3IvbG9jYWwvcXQt
My4xLjEvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAxCiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xd2luZG93ZGVmcy5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9x
b2JqZWN0ZGVmcy5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xb2JqZWN0
ZGVmcy5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA1
NzMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB1Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5z
aWduZWQgdWludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwp0eXBlZGVmIGNoYXIgKnBj
aGFyOwp0eXBlZGVmIHVjaGFyICpwdWNoYXI7CnR5cGVkZWYgY29uc3QgY2hhciAqcGNjaGFyOwoK
CgoKCgoKY29uc3QgYm9vbCBGQUxTRSA9IDA7CmNvbnN0IGJvb2wgVFJVRSA9ICEwOwojIDYzMCAi
L3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIKaW5saW5lIGludCBxUm91bmQo
IGRvdWJsZSBkICkKewogICAgcmV0dXJuIGQgPj0gMC4wID8gaW50KGQgKyAwLjUpIDogaW50KCBk
IC0gKChpbnQpZC0xKSArIDAuNSApICsgKChpbnQpZC0xKTsKfQojIDY0MiAiL3Vzci9sb2NhbC9x
dC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBJTlQ4Owp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgVUlOVDg7CnR5cGVkZWYgc2hvcnQgSU5UMTY7CnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgVUlOVDE2Owp0eXBlZGVmIGludCBJTlQzMjsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgVUlOVDMyOwoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgUV9JTlQ4Owp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgUV9VSU5UODsKdHlwZWRlZiBzaG9ydCBRX0lOVDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IFFfVUlOVDE2Owp0eXBlZGVmIGludCBRX0lOVDMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBR
X1VJTlQzMjsKCgoKCgoKdHlwZWRlZiBsb25nIFFfTE9ORzsKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IFFfVUxPTkc7CiMgNjc4ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWdsb2JhbC5oIgog
ICAgdHlwZWRlZiBRX1VMT05HIFF0T2Zmc2V0OwoKCgoKCgoKY2xhc3MgUURhdGFTdHJlYW07CiMg
NzEwICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWdsb2JhbC5oIgojIDEgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xY29uZmlnLmgiIDEKIyA3MTEgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDIKIyA3MjAgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVk
ZS9xZ2xvYmFsLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Ftb2R1bGVzLmgi
IDEKIyA3MjEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDIKIyA3NzMg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiCiMgMSAiL3Vzci9sb2NhbC9x
dC0zLjEuMS9pbmNsdWRlL3FmZWF0dXJlcy5oIiAxCiMgNzc0ICIvdXNyL2xvY2FsL3F0LTMuMS4x
L2luY2x1ZGUvcWdsb2JhbC5oIiAyCiMgODQwICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv
cWdsb2JhbC5oIgogY29uc3QgY2hhciAqcVZlcnNpb24oKTsKIGJvb2wgcVN5c0luZm8oIGludCAq
d29yZFNpemUsIGJvb2wgKmJpZ0VuZGlhbiApOwojIDkwMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p
bmNsdWRlL3FnbG9iYWwuaCIKIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAg
X19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxV2Fybmlu
ZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50
ZiwgMSwgMikpKQoKOwoKIHZvaWQgcUZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19h
dHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxU3lzdGVtV2Fy
bmluZyggY29uc3QgY2hhciAqLCBpbnQgY29kZSA9IC0xICk7CgoKCiB2b2lkIGRlYnVnKCBjb25z
dCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAy
KSkpCgo7Cgogdm9pZCB3YXJuaW5nKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1
dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBmYXRhbCggY29uc3QgY2hh
ciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoK
OwojIDk2NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIKIGJvb2wgcXRf
Y2hlY2tfcG9pbnRlciggYm9vbCBjLCBjb25zdCBjaGFyICosIGludCApOwojIDk3OSAiL3Vzci9s
b2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIKZW51bSBRdE1zZ1R5cGUgeyBRdERlYnVn
TXNnLCBRdFdhcm5pbmdNc2csIFF0RmF0YWxNc2cgfTsKCnR5cGVkZWYgdm9pZCAoKlF0TXNnSGFu
ZGxlcikoUXRNc2dUeXBlLCBjb25zdCBjaGFyICopOwogUXRNc2dIYW5kbGVyIHFJbnN0YWxsTXNn
SGFuZGxlciggUXRNc2dIYW5kbGVyICk7CgoKdHlwZWRlZiBRdE1zZ0hhbmRsZXIgbXNnX2hhbmRs
ZXI7CgoKIHZvaWQgcVN1cHByZXNzT2Jzb2xldGVXYXJuaW5ncyggYm9vbCA9IFRSVUUgKTsKCiB2
b2lkIHFPYnNvbGV0ZSggY29uc3QgY2hhciAqb2JqLCBjb25zdCBjaGFyICpvbGRmdW5jLAogICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmV3ZnVuYyApOwogdm9pZCBxT2Jzb2xldGUoIGNv
bnN0IGNoYXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYyApOwogdm9pZCBxT2Jzb2xldGUoIGNv
bnN0IGNoYXIgKm1lc3NhZ2UgKTsKCgoKCgoKIGNvbnN0IGNoYXIgKnFJbnN0YWxsUGF0aCgpOwog
Y29uc3QgY2hhciAqcUluc3RhbGxQYXRoRG9jcygpOwogY29uc3QgY2hhciAqcUluc3RhbGxQYXRo
SGVhZGVycygpOwogY29uc3QgY2hhciAqcUluc3RhbGxQYXRoTGlicygpOwogY29uc3QgY2hhciAq
cUluc3RhbGxQYXRoQmlucygpOwogY29uc3QgY2hhciAqcUluc3RhbGxQYXRoUGx1Z2lucygpOwog
Y29uc3QgY2hhciAqcUluc3RhbGxQYXRoRGF0YSgpOwojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4x
L2luY2x1ZGUvcW9iamVjdGRlZnMuaCIgMgojIDcyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1
ZGUvcW9iamVjdGRlZnMuaCIKc3RydWN0IFFVT2JqZWN0OwojIDE1MiAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3FvYmplY3RkZWZzLmgiCmNsYXNzIFFPYmplY3Q7CmNsYXNzIFFNZXRhT2Jq
ZWN0OwpjbGFzcyBRU2lnbmFsOwpjbGFzcyBRQ29ubmVjdGlvbjsKY2xhc3MgUUV2ZW50OwpzdHJ1
Y3QgUU1ldGFEYXRhOwpjbGFzcyBRQ29ubmVjdGlvbkxpc3Q7CmNsYXNzIFFDb25uZWN0aW9uTGlz
dEl0OwpjbGFzcyBRU2lnbmFsVmVjOwpjbGFzcyBRT2JqZWN0TGlzdDsKY2xhc3MgUU9iamVjdExp
c3RJdDsKY2xhc3MgUU1lbWJlckRpY3Q7Cgogdm9pZCAqcXRfZmluZF9vYmpfY2hpbGQoIFFPYmpl
Y3QgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKIyA0NCAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu
Y2x1ZGUvcXN0cmluZy5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc3Ry
aW5nLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fjc3RyaW5nLmgiIDEKIyA0
MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fjc3RyaW5nLmgiCiMgMSAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3FtZW1hcnJheS5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xbWVtYXJyYXkuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv
cWdhcnJheS5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2FycmF5Lmgi
CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FzaGFyZWQuaCIgMQojIDQyICIvdXNy
L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXNoYXJlZC5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl
L3FzaGFyZWQuaCIgMgoKCgpzdHJ1Y3QgUVNoYXJlZAp7CiAgICBRU2hhcmVkKCkgOiBjb3VudCgg
MSApIHsgfQogICAgdm9pZCByZWYoKSB7IGNvdW50Kys7IH0KICAgIGJvb2wgZGVyZWYoKSB7IHJl
dHVybiAhLS1jb3VudDsgfQogICAgdWludCBjb3VudDsKfTsKIyA0MyAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3FnYXJyYXkuaCIgMgoKCgpjbGFzcyBRR0FycmF5CnsKZnJpZW5kIGNsYXNz
IFFCdWZmZXI7CnB1YmxpYzoKCiAgICBzdHJ1Y3QgYXJyYXlfZGF0YSA6IHB1YmxpYyBRU2hhcmVk
IHsKICAgICAgICBhcnJheV9kYXRhKCk6ZGF0YSgwKSxsZW4oMCkKCgoKICAgICAgICAgICAge30K
ICAgICAgICBjaGFyICpkYXRhOwogICAgICAgIHVpbnQgbGVuOwoKCgogICAgfTsKICAgIFFHQXJy
YXkoKTsKICAgIGVudW0gT3B0aW1pemF0aW9uIHsgTWVtT3B0aW0sIFNwZWVkT3B0aW0gfTsKcHJv
dGVjdGVkOgogICAgUUdBcnJheSggaW50LCBpbnQgKTsKICAgIFFHQXJyYXkoIGludCBzaXplICk7
CiAgICBRR0FycmF5KCBjb25zdCBRR0FycmF5ICZhICk7CiAgICB2aXJ0dWFsIH5RR0FycmF5KCk7
CgogICAgUUdBcnJheSAmb3BlcmF0b3I9KCBjb25zdCBRR0FycmF5ICZhICkgeyByZXR1cm4gYXNz
aWduKCBhICk7IH0KCiAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCkgeyBkdXBsaWNhdGUoKnRoaXMp
OyB9CgoKICAgIGNoYXIgKmRhdGEoKSBjb25zdCB7IHJldHVybiBzaGQtPmRhdGE7IH0KICAgIHVp
bnQgbnJlZnMoKSBjb25zdCB7IHJldHVybiBzaGQtPmNvdW50OyB9CiAgICB1aW50IHNpemUoKSBj
b25zdCB7IHJldHVybiBzaGQtPmxlbjsgfQogICAgYm9vbCBpc0VxdWFsKCBjb25zdCBRR0FycmF5
ICZhICkgY29uc3Q7CgogICAgYm9vbCByZXNpemUoIHVpbnQgbmV3c2l6ZSwgT3B0aW1pemF0aW9u
IG9wdGltICk7CiAgICBib29sIHJlc2l6ZSggdWludCBuZXdzaXplICk7CgogICAgYm9vbCBmaWxs
KCBjb25zdCBjaGFyICpkLCBpbnQgbGVuLCB1aW50IHN6ICk7CgogICAgUUdBcnJheSAmYXNzaWdu
KCBjb25zdCBRR0FycmF5ICZhICk7CiAgICBRR0FycmF5ICZhc3NpZ24oIGNvbnN0IGNoYXIgKmQs
IHVpbnQgbGVuICk7CiAgICBRR0FycmF5ICZkdXBsaWNhdGUoIGNvbnN0IFFHQXJyYXkgJmEgKTsK
ICAgIFFHQXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIHZv
aWQgc3RvcmUoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CgogICAgYXJyYXlfZGF0YSAqc2hh
cmVkQmxvY2soKSBjb25zdCB7IHJldHVybiBzaGQ7IH0KICAgIHZvaWQgc2V0U2hhcmVkQmxvY2so
IGFycmF5X2RhdGEgKnAgKSB7IHNoZD0oYXJyYXlfZGF0YSopcDsgfQoKICAgIFFHQXJyYXkgJnNl
dFJhd0RhdGEoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAgICB2b2lkIHJlc2V0UmF3RGF0
YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAgICBpbnQgZmluZCggY29uc3QgY2hhciAq
ZCwgdWludCBpbmRleCwgdWludCBzeiApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjb25zdCBj
aGFyICpkLCB1aW50IHN6ICkgY29uc3Q7CgogICAgdm9pZCBzb3J0KCB1aW50IHN6ICk7CiAgICBp
bnQgYnNlYXJjaCggY29uc3QgY2hhciAqZCwgdWludCBzeiApIGNvbnN0OwoKICAgIGNoYXIgKmF0
KCB1aW50IGluZGV4ICkgY29uc3Q7CgogICAgYm9vbCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNv
bnN0IGNoYXIgKmQsIHVpbnQgc3ogKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgYXJyYXlfZGF0
YSAqbmV3RGF0YSgpOwogICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGEoIGFycmF5X2RhdGEgKnAg
KTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCBtc2dfaW5kZXgoIHVpbnQgKTsKICAgIGFycmF5
X2RhdGEgKnNoZDsKfTsKCgppbmxpbmUgY2hhciAqUUdBcnJheTo6YXQoIHVpbnQgaW5kZXggKSBj
b25zdAp7CgogICAgaWYgKCBpbmRleCA+PSBzaXplKCkgKSB7CiAgICAgICAgbXNnX2luZGV4KCBp
bmRleCApOwogICAgICAgIGluZGV4ID0gMDsKICAgIH0KCiAgICByZXR1cm4gJnNoZC0+ZGF0YVtp
bmRleF07Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZW1hcnJheS5oIiAy
CgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNzIFFNZW1BcnJheSA6IHB1YmxpYyBRR0FycmF5
CnsKcHVibGljOgogICAgdHlwZWRlZiB0eXBlKiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgY29uc3Qg
dHlwZSogQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZSBWYWx1ZVR5cGU7Cgpwcm90ZWN0
ZWQ6CiAgICBRTWVtQXJyYXkoIGludCwgaW50ICkgOiBRR0FycmF5KCAwLCAwICkge30KCnB1Ymxp
YzoKICAgIFFNZW1BcnJheSgpIHt9CiAgICBRTWVtQXJyYXkoIGludCBzaXplICkgOiBRR0FycmF5
KHNpemUqc2l6ZW9mKHR5cGUpKSB7fQogICAgUU1lbUFycmF5KCBjb25zdCBRTWVtQXJyYXk8dHlw
ZT4gJmEgKSA6IFFHQXJyYXkoYSkge30KICAgflFNZW1BcnJheSgpIHt9CiAgICBRTWVtQXJyYXk8
dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRTWVtQXJyYXk8dHlwZT4gJmEpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6YXNz
aWduKGEpOyB9CiAgICB0eXBlICpkYXRhKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0FycmF5
OjpkYXRhKCk7IH0KICAgIHVpbnQgbnJlZnMoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpucmVm
cygpOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpzaXplKCkvc2l6
ZW9mKHR5cGUpOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9CiAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpzaXplKCkgPT0gMDsgfQog
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpkYXRhKCkgPT0gMDsgfQog
ICAgYm9vbCByZXNpemUoIHVpbnQgc2l6ZSApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShzaXpl
KnNpemVvZih0eXBlKSk7IH0KICAgIGJvb2wgcmVzaXplKCB1aW50IHNpemUsIE9wdGltaXphdGlv
biBvcHRpbSApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShzaXplKnNpemVvZih0eXBlKSwgb3B0
aW0pOyB9CiAgICBib29sIHRydW5jYXRlKCB1aW50IHBvcyApIHsgcmV0dXJuIFFHQXJyYXk6OnJl
c2l6ZShwb3Mqc2l6ZW9mKHR5cGUpKTsgfQogICAgYm9vbCBmaWxsKCBjb25zdCB0eXBlICZkLCBp
bnQgc2l6ZSA9IC0xICkKICAgICAgICB7IHJldHVybiBRR0FycmF5OjpmaWxsKChjaGFyKikmZCxz
aXplLHNpemVvZih0eXBlKSApOyB9CiAgICB2b2lkIGRldGFjaCgpIHsgUUdBcnJheTo6ZGV0YWNo
KCk7IH0KICAgIFFNZW1BcnJheTx0eXBlPiBjb3B5KCkgY29uc3QKICAgICAgICB7IFFNZW1BcnJh
eTx0eXBlPiB0bXA7IHJldHVybiB0bXAuZHVwbGljYXRlKCp0aGlzKTsgfQogICAgUU1lbUFycmF5
PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFNZW1BcnJheTx0eXBlPiYgYSApCiAgICAgICAgeyByZXR1
cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICBRTWVtQXJyYXk8
dHlwZT4mIGFzc2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAo
UU1lbUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEsbipzaXplb2YodHlwZSkp
OyB9CiAgICBRTWVtQXJyYXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUU1lbUFycmF5PHR5cGU+
JiBhICkKICAgICAgICB7IHJldHVybiAoUU1lbUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBsaWNh
dGUoYSk7IH0KICAgIFFNZW1BcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBlICphLCB1
aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRTWVtQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxp
Y2F0ZSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFNZW1BcnJheTx0eXBlPiYgc2V0
UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUU1lbUFy
cmF5PHR5cGU+JilRR0FycmF5OjpzZXRSYXdEYXRhKChjaGFyKilhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQog
ICAgdm9pZCByZXNldFJhd0RhdGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAgICAgeyBR
R0FycmF5OjpyZXNldFJhd0RhdGEoKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBpbnQg
ZmluZCggY29uc3QgdHlwZSAmZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFH
QXJyYXk6OmZpbmQoKGNoYXIqKSZkLGksc2l6ZW9mKHR5cGUpKTsgfQogICAgaW50IGNvbnRhaW5z
KCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpjb250YWlu
cygoY2hhciopJmQsc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpz
b3J0KHNpemVvZih0eXBlKSk7IH0KICAgIGludCBic2VhcmNoKCBjb25zdCB0eXBlICZkICkgY29u
c3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpic2VhcmNoKChjb25zdCBjaGFyKikmZCxzaXpl
b2YodHlwZSkpOyB9CgogICAgdHlwZSYgb3BlcmF0b3JbXSggaW50IGkgKSBjb25zdAogICAgICAg
IHsgcmV0dXJuICh0eXBlICYpKCoodHlwZSAqKVFHQXJyYXk6OmF0KGkqc2l6ZW9mKHR5cGUpKSk7
IH0KICAgIHR5cGUmIGF0KCB1aW50IGkgKSBjb25zdAogICAgICAgIHsgcmV0dXJuICh0eXBlICYp
KCoodHlwZSAqKVFHQXJyYXk6OmF0KGkqc2l6ZW9mKHR5cGUpKSk7IH0KICAgICAgICAgb3BlcmF0
b3IgY29uc3QgdHlwZSooKSBjb25zdCB7IHJldHVybiAoY29uc3QgdHlwZSAqKVFHQXJyYXk6OmRh
dGEoKTsgfQogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRTWVtQXJyYXk8dHlwZT4gJmEgKSBj
b25zdCB7IHJldHVybiBpc0VxdWFsKGEpOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFN
ZW1BcnJheTx0eXBlPiAmYSApIGNvbnN0IHsgcmV0dXJuICFpc0VxdWFsKGEpOyB9CiAgICBJdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQogICAgSXRlcmF0b3IgZW5kKCkgeyByZXR1
cm4gZGF0YSgpICsgc2l6ZSgpOyB9CiAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gZGF0YSgpOyB9CiAgICBDb25zdEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGRh
dGEoKSArIHNpemUoKTsgfQp9OwojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWNz
dHJpbmcuaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4
MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZz
LmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMiAiL3Vzci9p
bmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwoj
IDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEg
Ii91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNCAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmlj
dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZv
aWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9f
Y29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2
b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVt
Y21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAq
bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVt
Y2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBp
bnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hh
ciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNh
dCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny
YywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAo
X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xs
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVk
ZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2Nh
bGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0
IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpf
X2xvY2FsZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50
IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19s
b2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19z
cmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAq
c3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hy
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g
c2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXpl
X3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJw
YnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9f
Y29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2Vz
dHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0
cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl
bGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19y
ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9f
aGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUs
IHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3Ry
aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmlj
dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAo
X19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3Qg
X19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpl
eHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBj
aGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs
ZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMs
IHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8g
KHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2Nv
bnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9f
Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChp
bnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
aW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu
dCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5j
YXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4g
aW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAo
X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIg
KipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21w
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQg
X19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmlj
dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsK
ZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3Rw
bmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVy
biBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4
dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cg
KCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDQ3ICIvdXNyL2xvY2FsL3F0
LTMuMS4xL2luY2x1ZGUvcWNzdHJpbmcuaCIgMgoKCgoKCgogdm9pZCAqcW1lbW1vdmUoIHZvaWQg
KmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1aW50IGxlbiApOwoKIGNoYXIgKnFzdHJkdXAoIGNvbnN0
IGNoYXIgKiApOwoKIGlubGluZSB1aW50IHFzdHJsZW4oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0
dXJuIHN0ciA/ICh1aW50KXN0cmxlbihzdHIpIDogMDsgfQoKIGlubGluZSBjaGFyICpxc3RyY3B5
KCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyApCnsgcmV0dXJuIHNyYyA/IHN0cmNweShkc3Qs
IHNyYykgOiAwOyB9CgogY2hhciAqcXN0cm5jcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj
LCB1aW50IGxlbiApOwoKIGlubGluZSBpbnQgcXN0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29u
c3QgY2hhciAqc3RyMiApCnsKICAgIHJldHVybiAoIHN0cjEgJiYgc3RyMiApID8gc3RyY21wKCBz
dHIxLCBzdHIyICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCBzdHIxID8gMSA6ICgg
c3RyMiA/IC0xIDogMCApICk7Cn0KCiBpbmxpbmUgaW50IHFzdHJuY21wKCBjb25zdCBjaGFyICpz
dHIxLCBjb25zdCBjaGFyICpzdHIyLCB1aW50IGxlbiApCnsKICAgIHJldHVybiAoIHN0cjEgJiYg
c3RyMiApID8gc3RybmNtcCggc3RyMSwgc3RyMiwgbGVuICkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogKCBzdHIxID8gMSA6ICggc3RyMiA/IC0xIDogMCApICk7Cn0KCiBpbnQgcXN0cmlj
bXAoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CgogaW50IHFzdHJuaWNtcCggY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7CgoKIGlubGluZSB1aW50IGNzdHJsZW4o
IGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuICh1aW50KXN0cmxlbihzdHIpOyB9CgogaW5saW5l
IGNoYXIgKmNzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1cm4gc3Ry
Y3B5KGRzdCxzcmMpOyB9CgogaW5saW5lIGludCBjc3RyY21wKCBjb25zdCBjaGFyICpzdHIxLCBj
b25zdCBjaGFyICpzdHIyICkKeyByZXR1cm4gc3RyY21wKHN0cjEsc3RyMik7IH0KCiBpbmxpbmUg
aW50IGNzdHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBjaGFyICpzdHIyLCB1aW50IGxl
biApCnsgcmV0dXJuIHN0cm5jbXAoc3RyMSxzdHIyLGxlbik7IH0KCgoKCgogUV9VSU5UMTYgcUNo
ZWNrc3VtKCBjb25zdCBjaGFyICpzLCB1aW50IGxlbiApOwojIDEyMCAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3Fjc3RyaW5nLmgiCnR5cGVkZWYgUU1lbUFycmF5PGNoYXI+IFFCeXRlQXJy
YXk7CgoKCiBRQnl0ZUFycmF5IHFDb21wcmVzcyggY29uc3QgdWNoYXIqIGRhdGEsIGludCBuYnl0
ZXMgKTsKIFFCeXRlQXJyYXkgcVVuY29tcHJlc3MoIGNvbnN0IHVjaGFyKiBkYXRhLCBpbnQgbmJ5
dGVzICk7CiBpbmxpbmUgUUJ5dGVBcnJheSBxQ29tcHJlc3MoIGNvbnN0IFFCeXRlQXJyYXkmIGRh
dGEpCnsgcmV0dXJuIHFDb21wcmVzcyggKGNvbnN0IHVjaGFyKilkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCkgKTsgfQogaW5saW5lIFFCeXRlQXJyYXkgcVVuY29tcHJlc3MoIGNvbnN0IFFCeXRlQXJy
YXkmIGRhdGEgKQp7IHJldHVybiBxVW5jb21wcmVzcyggKGNvbnN0IHVjaGFyKilkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCkgKTsgfQoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh
U3RyZWFtICYsIGNvbnN0IFFCeXRlQXJyYXkgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o
IFFEYXRhU3RyZWFtICYsIFFCeXRlQXJyYXkgJiApOwoKCgoKCgpjbGFzcyBRUmVnRXhwOwoKY2xh
c3MgUUNTdHJpbmcgOiBwdWJsaWMgUUJ5dGVBcnJheQp7CnB1YmxpYzoKICAgIFFDU3RyaW5nKCkg
e30KICAgIFFDU3RyaW5nKCBpbnQgc2l6ZSApOwogICAgUUNTdHJpbmcoIGNvbnN0IFFDU3RyaW5n
ICZzICkgOiBRQnl0ZUFycmF5KCBzICkge30KICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIg
KTsKICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIsIHVpbnQgbWF4bGVuICk7CiAgICB+UUNT
dHJpbmcoKTsKCiAgICBRQ1N0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyApOwog
ICAgUUNTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqc3RyICk7CgogICAgYm9vbCBpc051
bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBj
b25zdDsKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld2xlbiApOwogICAgYm9vbCB0cnVuY2F0ZSgg
dWludCBwb3MgKTsKICAgIGJvb2wgZmlsbCggY2hhciBjLCBpbnQgbGVuID0gLTEgKTsKCiAgICBR
Q1N0cmluZyBjb3B5KCkgY29uc3Q7CgogICAgUUNTdHJpbmcgJnNwcmludGYoIGNvbnN0IGNoYXIg
KmZvcm1hdCwgLi4uICk7CgogICAgaW50IGZpbmQoIGNoYXIgYywgaW50IGluZGV4PTAsIGJvb2wg
Y3M9VFJVRSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4
PTAsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGludCBmaW5kKCBjb25zdCBRUmVnRXhwICYs
IGludCBpbmRleD0wICkgY29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4
PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IGNoYXIgKnN0
ciwgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBj
b25zdCBRUmVnRXhwICYsIGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBjb250YWlucygg
Y2hhciBjLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgY2hh
ciAqc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFS
ZWdFeHAgJiApIGNvbnN0OwoKICAgIFFDU3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAg
ICBRQ1N0cmluZyByaWdodCggdWludCBsZW4gKSBjb25zdDsKICAgIFFDU3RyaW5nIG1pZCggdWlu
dCBpbmRleCwgdWludCBsZW49MHhmZmZmZmZmZikgY29uc3Q7CgogICAgUUNTdHJpbmcgbGVmdEp1
c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsIGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7
CiAgICBRQ1N0cmluZyByaWdodEp1c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsYm9v
bCB0cnVuYz1GQUxTRSljb25zdDsKCiAgICBRQ1N0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUUNT
dHJpbmcgdXBwZXIoKSBjb25zdDsKCiAgICBRQ1N0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25z
dDsKICAgIFFDU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFDU3RyaW5n
ICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJmluc2Vy
dCggdWludCBpbmRleCwgY2hhciApOwogICAgUUNTdHJpbmcgJmFwcGVuZCggY29uc3QgY2hhciAq
ICk7CiAgICBRQ1N0cmluZyAmcHJlcGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAm
cmVtb3ZlKCB1aW50IGluZGV4LCB1aW50IGxlbiApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIHVp
bnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCBjaGFyICogKTsKCiAgICBRQ1N0cmluZyAmcmVwbGFj
ZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBjaGFyICogKTsKCiAgICBRQ1N0cmluZyAmcmVwbGFj
ZSggY2hhciBjLCBjb25zdCBjaGFyICphZnRlciApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcmVwbGFjZSggY2hhciwg
Y2hhciApOwoKICAgIHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVzaG9y
dCB0b1VTaG9ydCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgaW50IHRvSW50KCBib29sICpvaz0w
ICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgbG9uZyB0
b0xvbmcoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9rPTAg
KSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGRvdWJs
ZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0OwoKICAgIFFDU3RyaW5nICZzZXRTdHIoIGNv
bnN0IGNoYXIgKnMgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHNob3J0ICk7CiAgICBRQ1N0cmlu
ZyAmc2V0TnVtKCB1c2hvcnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGludCApOwogICAgUUNT
dHJpbmcgJnNldE51bSggdWludCApOwogICAgUUNTdHJpbmcgJnNldE51bSggbG9uZyApOwogICAg
UUNTdHJpbmcgJnNldE51bSggdWxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGZsb2F0LCBj
aGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBkb3VibGUsIGNo
YXIgZj0nZycsIGludCBwcmVjPTYgKTsKCiAgICBib29sIHNldEV4cGFuZCggdWludCBpbmRleCwg
Y2hhciBjICk7CgogICAgICAgICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3Q7
CiAgICBRQ1N0cmluZyAmb3BlcmF0b3IrPSggY29uc3QgY2hhciAqc3RyICk7CiAgICBRQ1N0cmlu
ZyAmb3BlcmF0b3IrPSggY2hhciBjICk7CnByaXZhdGU6CiAgICBpbnQgZmluZCggY29uc3QgY2hh
ciAqc3RyLCBpbnQgaW5kZXgsIGJvb2wgY3MsIHVpbnQgbCApIGNvbnN0Owp9OwoKCgoKCgogUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDU3RyaW5nICYgKTsK
IFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ1N0cmluZyAmICk7CgoK
CgoKCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcg
JnMgKQp7IHJldHVybiAoUUNTdHJpbmcmKWFzc2lnbiggcyApOyB9CgppbmxpbmUgUUNTdHJpbmcg
JlFDU3RyaW5nOjpvcGVyYXRvcj0oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIChRQ1N0cmlu
ZyYpZHVwbGljYXRlKCBzdHIsIHFzdHJsZW4oc3RyKSsxICk7IH0KCmlubGluZSBib29sIFFDU3Ry
aW5nOjppc051bGwoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMDsgfQoKaW5saW5lIGJvb2wg
UUNTdHJpbmc6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMCB8fCAqZGF0YSgp
ID09ICdcMCc7IH0KCmlubGluZSB1aW50IFFDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAp7IHJldHVy
biBxc3RybGVuKCBkYXRhKCkgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OnRydW5jYXRlKCB1
aW50IHBvcyApCnsgcmV0dXJuIHJlc2l6ZShwb3MrMSk7IH0KCmlubGluZSBRQ1N0cmluZyBRQ1N0
cmluZzo6Y29weSgpIGNvbnN0CnsgcmV0dXJuIFFDU3RyaW5nKCBkYXRhKCkgKTsgfQoKaW5saW5l
IFFDU3RyaW5nICZRQ1N0cmluZzo6cHJlcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJuIGlu
c2VydCgwLHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjphcHBlbmQoIGNvbnN0IGNo
YXIgKnMgKQp7IHJldHVybiBvcGVyYXRvcis9KHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3Ry
aW5nOjpzZXROdW0oIHNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlubGlu
ZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggdXNob3J0IG4gKQp7IHJldHVybiBzZXROdW0o
KHVsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIGludCBuICkK
eyByZXR1cm4gc2V0TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpz
ZXROdW0oIHVpbnQgbiApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlubGluZSBRQ1N0
cmluZyAmUUNTdHJpbmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQgcHJlYyApCnsgcmV0
dXJuIHNldE51bSgoZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFDU3RyaW5nOjpvcGVyYXRv
ciBjb25zdCBjaGFyICooKSBjb25zdAp7IHJldHVybiAoY29uc3QgY2hhciAqKWRhdGEoKTsgfQoK
CgoKCgogaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBR
Q1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyLmRhdGEoKSApID09
IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0
IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMiApID09IDA7IH0KCiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMy
ICkKeyByZXR1cm4gcXN0cmNtcCggczEsIHMyLmRhdGEoKSApID09IDA7IH0KCiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsg
cmV0dXJuIHFzdHJjbXAoIHMxLmRhdGEoKSwgczIuZGF0YSgpICkgIT0gMDsgfQoKIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJl
dHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyICkgIT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJh
dG9yIT0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3Ry
Y21wKCBzMSwgczIuZGF0YSgpICkgIT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29u
c3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyYgczIgKQp7IHJldHVybiBxc3RyY21wKCBz
MS5kYXRhKCksIHMyLmRhdGEoKSApIDwgMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29u
c3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMxLmRh
dGEoKSwgczIgKSA8IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IGNoYXIgKnMx
LCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKCBzMSwgczIuZGF0YSgpICkg
PCAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25z
dCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyLmRhdGEoKSAp
IDw9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRQ1N0cmluZyAmczEsIGNv
bnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMiApIDw9IDA7IH0K
CiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcg
JnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEsIHMyLmRhdGEoKSApIDw9IDA7IH0KCiBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkK
eyByZXR1cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMi5kYXRhKCkgKSA+IDA7IH0KCiBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJl
dHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyICkgPiAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0
b3I+KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNt
cCggczEsIHMyLmRhdGEoKSApID4gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0
IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcmIHMyICkKeyByZXR1cm4gcXN0cmNtcCggczEu
ZGF0YSgpLCBzMi5kYXRhKCkgKSA+PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29u
c3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMxLmRh
dGEoKSwgczIgKSA+PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAq
czEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMxLCBzMi5kYXRhKCkg
KSA+PSAwOyB9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJp
bmcgJnMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
Q1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1wICs9
IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBjb25zdCBRQ1N0cmluZyBvcGVyYXRvciso
IGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7CiAgICBRQ1N0cmluZyB0bXAo
IHMxLmRhdGEoKSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBj
b25zdCBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAm
czIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4g
dG1wOwp9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcg
JnMxLCBjaGFyIGMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCAr
PSBjMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgY29uc3QgUUNTdHJpbmcgb3BlcmF0b3Ir
KCBjaGFyIGMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXA7CiAgICB0
bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CiMgNDMgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xc3RyaW5nLmgiIDIKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL3N0cmluZyIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwoj
IDQ2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMg
NDMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmluZ2Z3ZC5oIiAz
CgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBj
aGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CgogIHRl
bXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5
cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmlu
ZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwogIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cn0KIyA0NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVk
ZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv
My4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs
dWRlL2MrKy8zLjIvY3N0cmluZyIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvY3N0ZGRlZiIgMSAzCiMgNDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu
Mi9jc3RkZGVmIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbG9jYWwvZ2Nj
My4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyA0OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7
CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA1MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv
My4yL2NzdHJpbmciIDIgMwojIDc3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
Y3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1l
bW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3Ry
Y2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNt
cDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZy
bTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7
CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsK
CiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGlu
dCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9p
ZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIq
CiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNo
cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBi
cms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19z
MikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihf
X3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJy
Y2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29u
c3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7Cgog
IGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f
czIpOyB9Cn0KIyA0NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hh
cl90cmFpdHMuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvZnBvcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMuMi9p
bmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMSAzCiMgNDggIi91c3IvbG9j
YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9n
Y2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIg
MSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9sb2NhbC9n
Y2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDQ0ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xvY2Fs
L2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5z
aWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9u
ZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFk
X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7
CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGlu
dCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVk
ZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7
CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90Owpf
X2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoK
dHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7
CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRl
ZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191
X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRf
dCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0
eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsK
dHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFs
WzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIg
Kl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYg
bG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRl
ZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVm
IGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoK
Cgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Js
a2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n
IF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVk
ZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0
X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9f
b2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNs
dWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3Nj
aGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o
IiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwog
IGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3Ry
dWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9z
CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19z
Y2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Nj
b3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQg
Kl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoK
dHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBf
cHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBz
dHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVu
c2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19t
X3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwog
IGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRo
cmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0
aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9j
ayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dy
aXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNj
ciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVk
Owp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2lu
ZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2
b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGlu
dCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRf
YmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRf
YmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsK
IyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDQ2ICIvdXNyL2xvY2FsL2dj
YzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAy
IDMKIyA1NCAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4yL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0
ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5j
bHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3NCAiL3Vz
ci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv
c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIv
dXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk
ZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK
ewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBf
X3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19t
YnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0
X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vz
ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwoj
IDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAx
IDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
NDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252Lmgi
IDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIg
MiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19H
Q09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19H
Q09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNP
TVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lO
VEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBf
X0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsK
c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0Owpz
dHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAo
c3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1
bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
ICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2Zj
dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2Zj
dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu
c19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWdu
ZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsK
Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29u
c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVk
ZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25z
dCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBj
b25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lk
ICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9f
dHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2Zj
dDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0
YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2dj
b252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxl
OwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpf
X2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9f
Z2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoK
CgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50
IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVm
dWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1
bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoK
ICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9f
aW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19z
dGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBl
ZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19n
Y29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9k
YXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3Ry
dWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZf
c3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYg
aW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk
ZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj
IDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAi
L3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsK
IyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9f
bWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpf
c2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoK
ZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRp
YWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBf
SU9fY29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2
dCAqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0
IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBf
X2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVj
dnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bWJzdGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgq
X19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoq
LCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChz
dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYp
IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0
cnVjdCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2Nv
ZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZf
dCBfX2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2Rh
dGEKewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAg
d2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hh
cl90ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAq
X0lPX2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2
ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVf
ZW5kOwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3Rh
dGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1Zlsx
XTsKCiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJ
TEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9f
cmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsK
ICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lP
X2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwog
IGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBf
SU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBf
ZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2ln
bmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNo
YXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2
dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGlu
dCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2Yg
KHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3Qg
X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz
IF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk
ZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9f
aW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMp
OwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUs
IF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tp
ZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m
biAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRf
ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90
Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9f
aW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewog
IF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtf
Zm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlv
bnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9p
bml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRl
cmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhy
b3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
ZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50
X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDI2ICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl
eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVy
biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBf
SU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5
bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z
dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf
SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf
SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6
ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0
ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f
b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJ
TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3dj
LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklM
RSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwpleHRlcm4gaW50IF9JT192ZndzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z
dCB3Y2hhcl90ICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192
YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192Zndwcmlu
dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9f
c3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxFICosIHdpbnRfdCwgX19zc2l6ZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAo
KTsKCgoKfQojIDc1ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3Qg
X19ub3RfdmFfbGlzdF9fOwojIDg5ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvc190IGZw
b3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM4ICIvdXNyL2xvY2Fs
L2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOSAiL3Vzci9s
b2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3Rk
aW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0
ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTMgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUg
KF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAo
X19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTY5ICIvdXNyL2xvY2FsL2dj
YzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAz
CmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICp0
bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNo
YXIgKl9fcykgdGhyb3cgKCk7CiMgMTg5ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1w
bmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVu
YW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVz
KSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkgdGhyb3cgKCk7CiMgMjMzICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJ
TEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg
ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmlj
dCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2ll
X2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVt
b3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhy
b3cgKCk7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0
IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmlj
dCBfX3NpemVsb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0
cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYg
KGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRm
IChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4s
CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f
LCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBp
bnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAw
KSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAz
KSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7
CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7
CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3By
aW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNj
YW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0
ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBm
Z2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
cHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0
Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2Vk
IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNf
dW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBw
dXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhy
b3cgKCk7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBf
X3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0
aHJvdyAoKTsKIyA0MzcgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGlt
IChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBf
X2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipf
X3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
X19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6
ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRlcm4g
c2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQg
KF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcg
aW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxs
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKIyA1MDAgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28g
KEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoK
ZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3Ry
aWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0
cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MzQgIi91c3IvbG9jYWwv
Z2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgi
IDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwg
aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4
dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19w
b3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBj
bGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZl
b2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3Jf
dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJv
ciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsK
ZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQg
X3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoK
CgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIg
Kl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1
Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAq
X19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0
YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDY0
NCAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2lu
Y2x1ZGUvc3RkaW8uaCIgMwp9CiMgNTMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu
Mi9jc3RkaW8iIDIgMwojIDk3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0
ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsK
CiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAg
dXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2lu
ZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6
ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVh
ZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsK
ICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1
c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6
OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRj
aGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsK
ICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVz
aW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNp
bmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5n
IDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAx
NTMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKbmFtZXNwYWNl
IF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNp
bmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9Cgpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251
X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9j
eHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzNiAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8u
aCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMgOTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVs
dC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAxIDMKIyAyMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9zY2hlZC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRp
bWVzcGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9
OwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3Qg
c2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJD
IiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQg
Kl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCB2b2lkICpfX2Fy
ZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKCgpleHRl
cm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2Nv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f
cGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3BpZF90
IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
Y2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
c2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9y
aXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dl
dF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
Y2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190
KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJu
ICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0MyAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgNTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRl
ZiBfX2Nsb2NrX3QgY2xvY2tfdDsKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVm
IF9fdGltZV90IHRpbWVfdDsKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9f
Y2xvY2tpZF90IGNsb2NraWRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVm
IF9fdGltZXJfdCB0aW1lcl90OwojIDExOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3Qg
dG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1f
bWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0
bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0
IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1
Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAg
fTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgoK
ZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGlt
ZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0
aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHAp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0
cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQogICAg
IHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3Qg
Kl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29u
c3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGlt
ZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgpleHRl
cm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190
aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVj
dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVf
dCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29u
c3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChf
X2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX190em5h
bWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7
CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9u
ZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAo
KTsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0
cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVj
dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9z
bGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGlt
ZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2Nr
aWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9z
bGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2Nr
X2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19j
bG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0
cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3Qg
X190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBf
X3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBf
X3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0
aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRv
dmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAq
Z2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJp
Y3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk
ZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0
LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBf
X3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBp
bnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0g
X19zaWdzZXRfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA0OCAiL3Vzci9p
bmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKIyAzNzEgIi91
c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaW5pdHNwaW4uaCIg
MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDU5
ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5B
QkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5I
RVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJF
QURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQ
VEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBU
SFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgog
ICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRI
UkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhS
RUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRI
UkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JNQUwKCgoKICAsIFBUSFJFQURf
TVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCn07CgplbnVtCnsKICBQ
VEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCgpl
bnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05QLAogIFBUSFJFQURfUldMT0NL
X1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OT05SRUNV
UlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVGQVVMVF9OUCA9IFBUSFJFQURfUldMT0NLX1BS
RUZFUl9XUklURVJfTlAKfTsKIyAxMzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKc3RydWN0
IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKTsK
ICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVhZF9jbGVh
bnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUs
CgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RF
RkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTYzICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAq
X19yZXN0cmljdCBfX3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBw
dGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJl
YWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9l
cXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7
CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
am9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRl
dGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0
YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFy
YW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJp
Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhy
ZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0
IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGlu
aGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIs
IGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3Bl
KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2Nv
bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6
ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2Nv
bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUpCiAgICAg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBf
X3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z
ZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0
cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tz
aXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAg
ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJlYWRfdCBf
X3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3Bv
bGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNj
aGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9n
ZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFy
YW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAo
dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQg
X19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQgKHZvaWQp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9t
dXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0
ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1l
ZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmlj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQg
KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBw
dGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVk
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRl
eGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90
ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRf
dCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0
aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25k
X2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0
IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2Fp
dCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2Nv
bmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy
X2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRy
X3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJf
c2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmlj
dCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJl
YWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kg
KHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpf
X3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxv
Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry
aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9j
a190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3
cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmlj
dCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3
bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAq
X19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95
IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90
ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2th
dHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVh
ZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xv
Y2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93ICgpOwoj
IDUwOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9p
bml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9fcHNoYXJlZCkKICAgICB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2Nr
X3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9jayAocHRo
cmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9z
cGluX3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfc3Bpbl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFy
cmllcl90ICpfX3Jlc3RyaWN0IF9fYmFycmllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkgdGhy
b3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJp
ZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0
cl9pbml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHB0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dldHBzaGFy
ZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhy
b3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVh
ZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9i
YXJyaWVyX3dhaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwojIDU1
NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0
ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5
KSB0aHJvdyAoKTsKIyA1NzYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBw
dGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpf
X29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUg
KGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg
cHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2MTAgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0
aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lk
IF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkg
dGhyb3cgKCk7CiMgNjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9w
dGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVy
ICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNjQyICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBf
cHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgp
OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3Iv
aW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChp
bnQgX19ob3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3Qg
Kl9fcmVzdHJpY3QgX19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdz
ZXRfdCAqX19yZXN0cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY1NiAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgNjcxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93
ICgpOwoKfQojIDM4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3Qg
X19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7
CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21h
IHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdt
YSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZp
YwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9j
cmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhy
ZWFkX211dGV4X3RyeWxvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4
MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9w
ICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRyID0gKHZv
aWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAw
Owp9CiMgNDM3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRf
b25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkKewogIGlm
IChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBm
dW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh
ZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICop
KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3RhdGljIGlu
bGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2b2lkICpw
dHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIDAp
OwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5
X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2tleV9kZWxl
dGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVjaWZpYyAo
X19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChrZXkp
Owp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9r
ZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmlj
IChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChf
X2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQog
ICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAw
Owp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFk
X211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVy
biBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoK
c3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4
X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhy
ZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CiMgOTkgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0
aHIuaCIgMiAzCiMgMzggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYg
bG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRl
ZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7
CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKICB0eXBlZGVmIEZJTEUg
X19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9f
aW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgw
MDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQg
PSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3Mg
PSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAw
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAg
fCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAw
MDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9h
dGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0g
MHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0NSAiL3Vzci9sb2NhbC9nY2Mz
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL2N3Y2hhciIgMwoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9jdGltZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu
Mi9jdGltZSIgMwojIDY0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3RpbWUi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5nIDo6dGltZV90Owog
IHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1c2lu
ZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1lOwogIHVzaW5nIDo6
Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcgOjpz
dHJmdGltZTsKfQojIDUyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFy
IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19tYnN0
YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0IHRt
OwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4
dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93
ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2Nv
bnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3
Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNt
cCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z
dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19j
b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFy
X3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9f
d2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4
dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBf
X2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90
ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3
Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3
Y3NyY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hy
bnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2Nv
bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChf
X2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3Bi
cmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAq
d2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19u
ZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy
biB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3
Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGlt
LAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVu
IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hh
cl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90
ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hh
cl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0
cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19w
KSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1i
c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4g
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg
ICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjk3ICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9f
cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1i
c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Ny
dG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1i
c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Nu
cnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IHdjd2lkdGggKHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAo
X19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBk
b3VibGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoK
CgpleHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCB3Y3N0b2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdXEgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyA0MTAgIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAzCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9sIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBfX3djc3RvdWxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9f
bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsK
CmV4dGVybiBkb3VibGUgX193Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3dj
c3RvZl9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19s
b2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJs
ZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX193Y3N0b2Zf
aW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVy
bmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f
d2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1MjggIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25z
dCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3
Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJTEUgKl9fZnAsIGludCBfX21v
ZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3ByaW50ZiAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoK
ZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24s
CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZmd3ByaW50ZiAoX19GSUxFICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9f
YXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndwcmludGYgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdnN3cHJpbnRmICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKZXh0ZXJuIGludCBmd3NjYW5m
IChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0
ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4gaW50IHZmd3Nj
YW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndzY2FuZiAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9f
Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdnN3c2NhbmYg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIHdpbnRfdCBm
Z2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjIChf
X0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lk
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3QgX193Yywg
X19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2No
YXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3cyAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBfX0ZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHVuZ2V0d2Mg
KHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2lu
dF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdp
bnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBm
Z2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50
X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3
Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzX3VubG9ja2Vk
ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0
cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CiMgNjgwICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMwp9CiMgNTUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9jd2NoYXIiIDIgMwojIDY5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
Y3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwogIHVzaW5nIDo6ZmdldHdjOwog
IHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVzaW5nIDo6ZnB1dHdzOwogIHVz
aW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2luZyA6OmZ3c2NhbmY7CiAgdXNp
bmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5nIDo6bWJybGVuOwogIHVzaW5n
IDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcgOjptYnNydG93Y3M7CiAgdXNp
bmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5nIDo6c3dwcmludGY7CiAgdXNp
bmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2luZyA6OnZmd3ByaW50ZjsKICB1
c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwogIHVzaW5nIDo6dnN3c2NhbmY7
CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7CiAgdXNpbmcgOjp3Y3J0b21i
OwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwogIHVzaW5nIDo6d2NzY29sbDsK
ICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAgdXNpbmcgOjp3Y3NmdGltZTsK
ICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAgdXNpbmcgOjp3Y3NuY21wOwog
IHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsKICB1c2luZyA6Ondjc3NwbjsK
ICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1c2luZyA6Ondjc3RvazsKICB1
c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNpbmcgOjp3Y3N4ZnJtOwogIHVz
aW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5nIDo6d21lbWNweTsKICB1c2lu
ZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2luZyA6OndwcmludGY7CiAgdXNp
bmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3Nj
aHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NjaHIoY29uc3RfY2Fz
dDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3Bicms7CgogIGlu
bGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7
IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsg
fQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3JjaHIod2NoYXJf
dCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qg
d2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NzdHI7CgogIGlubGluZSB3Y2hh
cl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdj
c3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcg
Ojp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2No
YXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNocihjb25zdF9jYXN0PGNvbnN0
IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4
eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9sbDsKICB1c2luZyA6Ondjc3Rv
dWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGQ7CiAgdXNp
bmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG91bGw7Cn0KIyA0
NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBm
cG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBl
OwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVfdHlw
ZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlw
ZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1v
ZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9f
b2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29mZihf
X29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3Qg
eyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9m
ZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYK
ICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1
cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikK
ICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7CiAg
ICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0oc3Ry
ZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9f
dCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29sCiAgICAg
IG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29m
ZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBm
cG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsg
fQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01f
b2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBf
TV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVh
bXBvczsKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0NyAiL3Vz
ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hh
cl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3Nf
dHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJz
dGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90
eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAg
ICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAg
ICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy
X3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJf
dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0
YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAgIHN0
YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNp
emVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq
CiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf
dCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9f
czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hh
cl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlw
ZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3Qg
aW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUo
Y29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5
cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAgIHN0
YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBu
b3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBz
dHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBv
c190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBt
YnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFy
X3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsg
fQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25z
dCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAg
c3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5
cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50
CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9f
czIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9
CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykK
ICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNo
YXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUq
PihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAg
ICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19u
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9f
czIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlw
ZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAg
ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90
IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl
Kj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAg
ICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0
b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBz
dGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3Qg
aW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh
dGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigo
LTEpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5
cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsK
CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAg
ICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5
cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJl
YW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAg
ICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5
cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAg
IGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7
IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0
IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBf
X2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJf
dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJl
dHVybiB3bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAg
ICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19z
KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFy
X3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0
dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg
ICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBl
IF9fbikKICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAg
c3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf
dHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3My
LCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBl
KiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQo
X19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90
eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAg
ICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2Mp
IHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2lu
dF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAg
eyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9m
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAg
ICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAg
ICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9D
aGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJh
aXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wK
ICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEo
X01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
bWVtb3J5IiAxIDMKIyA1MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9y
eSIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY2xp
bWl0cyIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTEgIi91c3IvbG9jYWwvZ2NjMy4yL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1
ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzIgIi91
c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRl
L2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxNDQgIi91c3Iv
aW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIg
MSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs
X2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAiL3Vz
ci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkgIi91c3IvaW5jbHVk
ZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEg
MwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGlt
LmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91c3IvaW5jbHVkZS9iaXRzL3hv
cGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMzICIv
dXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk
ZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2Fs
L2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMu
aCIgMiAzCiMgNTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAy
IDMKIyA2NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGli
IiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDMK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZs
YWdzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRz
dGF0dXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAz
OCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvd2Fp
dHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1
Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1
bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRj
b2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVy
bWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3Rv
cHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2ln
bmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoK
dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwog
IH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25n
IGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMz
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9j
dXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNo
YXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
aW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRv
ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7
CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoK
CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNp
b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgp
OwojIDIxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGludCBfX3N0cnRv
bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1
bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2Nh
bGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0
ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7
CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs
ZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91
cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91
bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CiMgMzg0ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgp0
eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRl
ZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRf
dCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBm
c2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlu
b190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90
IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBt
b2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90
IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0
X3Qgb2ZmNjRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9f
aWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9f
ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYg
X19rZXlfdCBrZXlfdDsKIyAxMzYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVm
IF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNv
bmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMg
MTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVf
aW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
U0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMg
MzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKIyA0
NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Rp
bWUuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZh
bAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9
OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKIyA1NSAiL3Vzci9pbmNsdWRl
L3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVk
ZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVv
ZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNr
IGZkX21hc2s7CiMgOTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7
CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3Qg
X19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVm
ZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jl
c3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3Qg
X193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNl
cHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry
aWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jl
c3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIx
OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3Qg
Ymxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYg
X19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250
X3Q7CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0
X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVk
ZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAzOTEgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9f
c3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAo
KTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBp
bnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAg
aW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9
OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1
Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3Ig
KHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBz
cmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9y
ICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRy
YW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAo
dm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
eHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2Vl
ZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWdu
ZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDgg
KHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJh
bmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVk
IHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVu
c2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsK
ICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0
cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs
b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0
OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIs
CiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz
XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg
X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jl
c3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZh
bCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4g
aW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CiMg
NTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90
IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2
b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2Mg
KHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19t
YWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpl
eHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5j
bHVkZS9hbGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAi
QyIgewoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoK
CgoKCn0KIyA1NDcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAq
dmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf
XykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXpl
X3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQg
KCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQg
KCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50
IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpl
eHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpf
X3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVh
cmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjIzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY0MCAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRl
KSB0aHJvdyAoKTsKIyA2NTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq
bWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3Rl
bSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAq
Y2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoj
IDY3MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9f
Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYg
X19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2gg
KF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19j
b21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVt
Yiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21w
YXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25n
IGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVy
LCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9f
IGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpn
Y3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg
KnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRf
ciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAg
ICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cg
KCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz
dHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3Qg
Y2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2No
YXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21i
IChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg
bWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNo
YXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDgwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoK
CgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
dW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChp
bnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwg
Y2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRw
dCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9f
bG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvbG9jYWwvZ2Nj
My4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6
ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7
CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2lu
ZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6
ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAg
dXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6
Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpx
c29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7
CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwog
IHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7Cgog
IGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5s
aW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBf
X2opOyB9Cn0KIyAxMzYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGli
IiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9F
eGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9f
eCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBs
b25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRp
dl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsg
X19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0K
CiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQog
IHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19k
OyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNp
bmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9Cgpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVf
Y3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6Omxs
YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAg
dXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2lu
ZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2lu
ZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9p
bmNsdWRlL2MrKy8zLjIvbmV3IiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL25ldyIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9leGNl
cHRpb24iIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0
aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNl
cHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1
YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgp
IGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4
Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgog
ICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9p
ZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9o
YW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRl
X2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4
cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CiMgOTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9leGNlcHRpb24iIDMKICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0K
Cm5hbWVzcGFjZSBfX2dudV9jeHgKewojIDExMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgp
Owp9Cgp9CiMgNDMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9uZXciIDIgMwoK
ZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVi
bGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoK
CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93
X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9p
ZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hh
bmRsZXIpIHRocm93KCk7Cn0KIyA3OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L25ldyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9h
bGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRf
YWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsKdm9pZCBvcGVyYXRv
ciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90
LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0
ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0
b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxp
bmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyBy
ZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9p
ZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2b2lkIG9wZXJhdG9yIGRl
bGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVs
ZXRlW10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKCn0KIyA3MCAiL3Vzci9sb2NhbC9nY2Mz
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDEgMwojIDQzICIvdXNyL2xvY2FsL2dj
YzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zZndkIiAzCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQp
OwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3df
YmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2
b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52
YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAg
X190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvbG9jYWwv
Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
c3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs
b2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAog
ICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0Fs
bG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0
b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFz
cyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJh
c2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNo
YXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlw
ZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu
Z2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+
IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJp
bmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNf
aWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBv
ZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCiAgdHlwZWRl
ZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hh
cl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdi
dWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2No
YXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFy
X3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+
IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVm
OwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVh
bTx3Y2hhcl90PiB3ZnN0cmVhbTsKfQojIDcxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEg
Zmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9U
MiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIo
Y29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2Ip
IHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWly
PF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7
fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195
KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3ku
c2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195
LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVy
biAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9f
eCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh
dG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f
eSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh
c3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9f
eSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vz
ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgi
IDEgMwojIDUzICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3Ry
YWl0cy5oIiAzCiMgOTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5
cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1Y3QgX19mYWxzZV90eXBl
IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEzICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAg
IHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19m
YWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu
c2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRv
dWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu
dGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J
c19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAg
dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf
aW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9u
ZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0
ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu
ZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05v
cm1hbDsKfTsKIyA3MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1l
c3BhY2Ugc3RkCnsKIyA4MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcg
e307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9p
dGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307
CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90
LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5j
ZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkg
aXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAg
dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRl
ciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90
cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdv
cnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2
YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpk
aWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv
cjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2
YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxj
b25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBv
aW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShj
b25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2
OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh
c2VfZnVuY3MuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCgoKCm5hbWVz
cGFjZSBzdGQKewp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAg
X19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
IGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgIHdoaWxlIChf
X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICArK19fZmlyc3Q7ICsrX19uOwogICAgfQogICAgcmV0
dXJuIF9fbjsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAg
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojpk
aWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICB9
CiMgMTExICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0
b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKICBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpCiAgewoKICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9JbnB1dEl0
ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAg
d2hpbGUgKF9fbi0tKSArK19faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2Uo
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICBpZiAoX19uID4gMCkKICAg
ICAgd2hpbGUgKF9fbi0tKSArK19faTsKICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisrKSAtLV9f
aTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l
IF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0
b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpCiAgewoKICAgCiAgICBfX2kgKz0gX19uOwogIH0KIyAxNjQgIi91c3IvbG9jYWwvZ2Nj
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxp
bmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7
CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0K
Cn0KIyA3NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9pdGVyYXRvci5oIiAxIDMKIyA2OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvbG9jYWwv
Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAgOiBwdWJs
aWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9y
X2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3VycmVudDsK
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAg
ICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChf
X3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9y
JiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7IH0K
CgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJl
bnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAg
IHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVybiAqLS1f
X3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBv
cGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoK
CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7CiAg
ICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAg
ICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJz
ZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1
cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVy
YXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgog
ICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJy
ZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2
ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QK
ICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoKCgoKCgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf
X24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5j
ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07CiMgMjY5
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg
ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJu
IF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
IT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg
IGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShf
X3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194
LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog
ICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2Uo
KSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5s
aW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAg
ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyNyAi
L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRl
cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv
aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv
bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRh
aW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVm
ZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3Zh
bHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9p
dGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNr
X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoK
ICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgICB9OwojIDM4NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgog
ICAgaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2Vy
dGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+KF9feCk7IH0KIyAzOTcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0
cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3Rl
Y3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9p
bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0
MjIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5o
IiAzCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1l
IF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29u
dGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
fQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1
cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
KysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgogICAg
ICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDUzICIvdXNyL2xv
Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJl
dHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQ3MCAiL3Vz
ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAg
ICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lk
LCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7
CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2Vy
dF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y
IF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAg
aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29udGFp
bmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Iq
KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh
dG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci9sb2Nh
bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9J
dGVyYXRvciBfX2kpCiAgICB7CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4oX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IF9Db250YWluZXI6Oml0ZXJhdG9yKF9faSkpOwogICAgfQp9CgpuYW1lc3BhY2UgX19nbnVfY3h4
CnsKCgoKCgoKCiAgdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CiAgdXNpbmcgc3RkOjppdGVy
YXRvcjsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgICBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2
YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5j
ZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAg
cHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVy
IHBvaW50ZXI7CgogICAgICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0
b3IoKSkgeyB9CgogICAgICBleHBsaWNpdAogICAgICBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBf
SXRlcmF0b3ImIF9faSkgOiBfTV9jdXJyZW50KF9faSkgeyB9CgoKICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXI+CiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgICAgICA6IF9NX2N1cnJlbnQo
X19pLmJhc2UoKSkgeyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAg
IF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1h
bF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBf
X25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxf
aXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRv
cltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfTV9j
dXJyZW50W19fbl07IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9
KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyBy
ZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhj
b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxf
aXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgog
ICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1
cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAg
ICAgIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyBy
ZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KCiAgICAgIGNvbnN0
IF9JdGVyYXRvciYKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAg
IH07CiMgNjQ1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy
YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAg
ICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+
JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg
Ym9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19y
aHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J
dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9
KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK
ICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu
ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp
bmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0g
X19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt
ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0
b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo
cywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s
aW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBf
X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y
Pihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu
ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu
ZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jo
cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0
ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0o
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog
ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l
cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu
ZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBf
X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y
Pj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhz
LAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu
bGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+
PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5
cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1l
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5
cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRh
aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhz
LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250
YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4K
ICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp
bmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSB2b2lkCiAgICBpdGVyX3N3
YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlMTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyMj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CgoKICAgICAKICAgICAKICAgICAKICAg
ICAKCiAgICAgIF9WYWx1ZVR5cGUxIF9fdG1wID0gKl9fYTsKICAgICAgKl9fYSA9ICpfX2I7CiAg
ICAgICpfX2IgPSBfX3RtcDsKICAgIH0KIyAxMTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAK
CiAgICAgIF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3Rt
cDsKICAgIH0KIyAxNDYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0
IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAg
IAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAx
NjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1h
eChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYg
KF9fYSA8IF9fYikgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxODYgIi91c3IvbG9j
YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAm
CiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f
YTsKICAgIH0KIyAyMDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U
cCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19i
KSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0
ZXIKICAgIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh
ZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytf
X2ZpcnN0KQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKICAgICAgZm9y
IChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsKICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgKytf
X3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfdHJpdmlhbChjb25zdCBf
VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgewogICAg
ICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xhc3QgLSBfX2Zp
cnN0KSk7CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg
ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy
CiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyBy
ZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAq
CiAgICBfX2NvcHlfYXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LAogICAgICAgICAgICAg
ICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlh
bChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z
dCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBl
KQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
IF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9PdXRwdXRJ
dGVyKF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Ucml2aWFsKCkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9f
Y29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAg
ICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf
VmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1Ry
aXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Ucml2
aWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJl
dHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwg
X19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg
ICAgIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFs
KCkpOwogICAgfQojIDMzOSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK
CiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv
cjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkx
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2Fy
ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRp
cmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0
IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh
c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAg
ICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rp
c3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHko
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwK
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAg
cmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9U
cCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0
IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsK
ICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAg
bWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAg
ICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29w
eShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQog
ICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAq
LCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ
Mj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwg
X0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJ
MSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1l
IF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxf
aXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyBy
ZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQu
YmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAg
ICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3Io
X0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19j
b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVz
dWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs
X2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNl
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0
eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9u
b3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O
b3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1h
bF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9C
STIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jl
c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJu
IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAK
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAqX19m
aXJzdCA9IF9fdmFsdWU7CiAgICB9CiMgNTMxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJ
dGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZp
bGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkK
ICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAg
ICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoK
ICBpbmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hh
ciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hh
ciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJz
dCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25l
ZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNo
YXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmls
bChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBj
aGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfU2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNo
YXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewog
ICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2Zp
cnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBz
aWduZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNp
Z25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg
X19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1Np
emUgX19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJz
dCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAg
IHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsKICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8
X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgfQojIDY0
MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs
IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJ
dGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICBfQmlu
YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2Zp
cnN0MikpIHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0K
ICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19m
aXJzdDIpOwogICAgfQojIDY2OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19maXJz
dDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRy
dWU7CiAgICB9CiMgNjk5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29s
CiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
X2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5
X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIp
CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3Qx
KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CiMgNzY3ICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAg
IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAg
ICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9f
Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
IH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1
bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29u
c3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0g
X19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBf
X2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJz
dDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jl
c3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dy
YXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBj
aGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNv
bnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoK
CgoKICB9Cgp9CiMgNTUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnki
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv
Yy5oIiAxIDMKIyA4NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsbG9jLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY2Fzc2Vy
dCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAz
CgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9hc3Nl
cnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0
IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9u
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4g
dm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xp
bmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVu
Y3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoK
ZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFy
ICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9y
ZXR1cm5fXykpOwoKCn0KIyA0OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Nh
c3NlcnQiIDIgMwojIDg1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl
L2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJv
d19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2lj
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v
dmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJl
KGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA4NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2xvY2FsL2djYzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoK
ICBzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoK
ICAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3Qg
X01fcmVmX2NvdW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3Jl
Zl9jb3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHswLCAw
LCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAgIF9NX3JlZl9jb3Vu
dF9sb2NrID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsK
ICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgKytf
TV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9s
b2NrKTsKICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7CiAgICAgIF9fZ3RocmVh
ZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0aWxlIF9SQ190IF9f
dG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3Jl
Zl9jb3VudF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMTA5ICIvdXNy
L2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVt
cGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3Rh
dGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9f
ZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1t
eT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAs
IDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQg
bG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xv
Y2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9u
ZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3Vu
bG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgfQojIDE1MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAgIF9f
Z3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgpCiAg
ICB7CiMgMTg0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhy
ZWFkcy5oIiAzCiAgICB9CgogICAgdm9pZAogICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoK
ICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAg
IF9NX3JlbGVhc2VfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2so
Jl9NX2xvY2spOwogICAgfQogIH07CiMgMjIwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewog
ICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0
ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVp
cmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2Vf
bG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9f
bG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoK
fQojIDg3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2Mu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA5OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwogIHsKICBwdWJs
aWM6CiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy
biA6Om9wZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KICB9Owoj
IDEyMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgi
IDMKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhz
aXplX3QpOwogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7
CiAgICAgIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAg
IHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg
ICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmICgw
ID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QgKQogICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZv
aWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3op
CiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7
CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19w
LCBfX25ld19zeik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0
aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7
CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwog
ICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybihf
X29sZCk7CiAgICAgIH0KICAgIH07CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQg
KCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hh
bmRsZXIpKCkgPSAwOwoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21h
bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAg
ICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19y
ZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hh
bmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9f
bXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsK
ICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0g
bWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihf
X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZv
aWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2
b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFu
ZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsK
ICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxl
cjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0
ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlciko
KTsKICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAo
X19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoK
CgoKCgogIHR5cGVkZWYgX19uZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIxOSAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0
ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBw
dWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g
MCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHAp
KTsgfQoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxs
b2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRl
KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxv
Y2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9j
YXRlKF9UcCogX19wKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkp
OyB9CiAgfTsKIyAyNTEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX2RlYnVnX2Fs
bG9jCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCiAgcHVibGljOgoK
ICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBf
X3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsK
ICAgICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAo
aW50KSBfU19leHRyYTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9f
cCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0g
KGludCkgX1NfZXh0cmE7CiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3Jl
YWxfcCA9PSBfX24pID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09
IF9fbiIsICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2Mu
aCIsIDI3MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIF9BbGxvYzo6ZGVhbGxv
Y2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgfQoKICAgIHN0YXRpYyB2
b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdf
c3opCiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4
dHJhOwogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19v
bGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xk
X3N6IiwgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5o
IiwgMjc3LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgY2hhciogX19yZXN1bHQg
PSAoY2hhciopCiAgICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiAr
IChpbnQpIF9TX2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19u
ZXdfc3ogKyAoaW50KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3
X3N6OwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgIH0KICB9Owoj
IDMyNCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgi
IDMKdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2xhc3MgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAg
IGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZ
VEVTIC8gX0FMSUdOfTsKCiAgICB1bmlvbiBfT2JqCiAgICB7CiAgICAgIHVuaW9uIF9PYmoqIF9N
X2ZyZWVfbGlzdF9saW5rOwogICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogICAgfTsKCiAg
ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCgogICAg
c3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7
CiAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9s
b2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgogICAgc3RhdGljIHNpemVfdAogICAgX1Nfcm91
bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3Qp
IF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgc3RhdGljIHNpemVf
dAogICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChf
X2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAg
IHN0YXRpYyB2b2lkKgogICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgc3RhdGljIGNo
YXIqCiAgICBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCgog
ICAgY2xhc3MgX0xvY2sKICAgIHsKICAgIHB1YmxpYzoKICAgICAgX0xvY2soKSB7IGlmIChfX3Ro
cmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAg
fl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVh
c2VfbG9jaygpOyB9CiAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICBmcmll
bmQgY2xhc3MgX0xvY2s7CgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRl
KHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCiAgICAgIGlmIChfX24g
PiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICAgIF9fcmV0ID0gX19tZW1faW50ZXJmYWNlOjph
bGxvY2F0ZShfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRp
bGUqIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICAgICAgICsgX1NfZnJlZWxp
c3RfaW5kZXgoX19uKTsKCgoKICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAg
ICAgIF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAg
ICAgIGlmIChfX3Jlc3VsdCA9PSAwKQogICAgICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19y
b3VuZF91cChfX24pKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAg
ICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH07CgoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQq
IF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllU
RVMpCiAgICAgICAgX19tZW1faW50ZXJmYWNlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAog
ICAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg
ICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2lu
c3RhbmNlOwogICAgICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9s
aXN0OwogICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwogICAgICAgIH0KICAgIH0KCiAg
ICBzdGF0aWMgdm9pZCoKICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3os
IHNpemVfdCBfX25ld19zeik7CiAgfTsKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4g
dHJ1ZTsgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CgoKCgoKICB0
ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqCiAgICBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXpl
X3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQogICAgewogICAgICBjaGFyKiBfX3Jlc3Vs
dDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICBz
aXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICAgICAg
aWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQogICAgICB7CiAgICAgICAgX19yZXN1
bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRl
czsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYnl0
ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19ub2JqcyA9IChpbnQpKF9f
Ynl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9f
bm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19z
dGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwog
ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2J5dGVzX3Rv
X2dldCA9CiAgICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVh
cF9zaXplID4+IDQpOwoKICAgICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAg
ICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7
CgogICAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xp
bmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9P
YmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUg
PSAoY2hhciopIF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwogICAg
ICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IHNpemVfdCBfX2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAgICAgICBfX2kgPSBfX3NpemU7
CiAgICAgICAgICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBfX2kgKz0g
KHNpemVfdCkgX0FMSUdOKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX215
X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAg
ICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgICAgaWYg
KDAgIT0gX19wKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpf
X215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAg
ICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgICAg
X1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwoKCiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsK
ICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbWVtX2ludGVyZmFjZTo6YWxs
b2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAgIH0KICAgICAgICAgIF9TX2hlYXBf
c2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRf
ZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9f
c2l6ZSwgX19ub2JqcykpOwogICAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBp
bnQgX19ub2JqcyA9IDIwOwogICAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19u
LCBfX25vYmpzKTsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBf
T2JqKiBfX3Jlc3VsdDsKICAgICAgX09iaiogX19jdXJyZW50X29iajsKICAgICAgX09iaiogX19u
ZXh0X29iajsKICAgICAgaW50IF9faTsKCiAgICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihf
X2NodW5rKTsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz
dF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpf
X215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAg
ICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0
X29iajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9f
bik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgX19jdXJyZW50
X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9
IGVsc2UgewogICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9f
bmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9
CgoKICB0ZW1wbGF0ZTxib29sIHRocmVhZHMsIGludCBpbnN0PgogICAgdm9pZCoKICAgIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3As
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKICAgIHsKICAgICAgdm9pZCogX19yZXN1
bHQ7CiAgICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90
KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAg
IHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgICAgfQogICAgICBpZiAoX1Nfcm91
bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7CiAg
ICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgICBfX2NvcHlfc3ogPSBfX25l
d19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgICBtZW1jcHkoX19yZXN1
bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsKICAg
ICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CiAgX1NUTF9tdXRleF9sb2NrCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogID0geyB7MCwgMCwgMCwg
UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgogIHRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4KICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz
LCBpbnQgX19pbnN0PgogIHNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywg
aW50IF9faW5zdD4KICB0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+OjpfT2JqKiB2b2xhdGlsZQogIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHR5cGVkZWYgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+IF9fYWxsb2M7CiAgdHlwZWRlZiBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2MTMg
Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvcgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9B
bGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRp
ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBj
b25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7
CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxs
b2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxv
Y2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0
b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7
IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf
X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBf
X24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8
X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAg
ICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBl
IF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9
CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVf
dCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29u
c3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBv
aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRv
cjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBl
ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxs
b2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3Qg
YWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYs
IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQojIDY5NSAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3IKewogIF9BbGxvYyBf
X3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlw
ZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsK
ICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigp
IHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygp
CiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRl
bXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEs
IF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5k
ZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIg
YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9p
bnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K
CgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICBy
ZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWluZ19h
bGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAwOwogIH0KCgogIHZv
aWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5
aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90
eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNp
emVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9f
dmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3Ap
IHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9fYWxs
b2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwog
IHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgdmFsdWVf
dHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxv
Y2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f
YWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWlu
Z19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9y
PF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j
YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxs
b2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5z
dD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxp
bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4m
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiB0
cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDg0MCAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0
YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBl
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBf
QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9j
YXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVl
OwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlwZTsKICB0
eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl
bGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U
cCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3Qg
X0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f
aW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2Nh
dG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4K
ewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBf
X3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwog
IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0
b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2lu
c3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxv
Y2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRp
YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9h
bGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsK
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
IGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAg
ICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsK
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19z
aW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+
CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5
cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpz
dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8
X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B
bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxv
Yz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxv
Y2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsK
CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUs
IDA+OwoKfQojIDU2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAy
IDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3Ry
dWN0LmgiIDEgMwojIDY3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3As
IGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkg
X1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUg
dm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lk
Kj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQoj
IDExMiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVj
dC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9p
ZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBf
X3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxp
bmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9U
cCgpOyB9CiMgMTM0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
Y29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlu
bGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAg
IF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl
X3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hh
c190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFz
dCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA1NyAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNy
L2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAz
Cm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs
aXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6
ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIg
X19jdXIgPSBfX3Jlc3VsdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIs
ICpfX2ZpcnN0KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u
KQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CiAgICAgICAg
ICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTA2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRl
cgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90
eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAgaW5saW5lIGNoYXIqCiAg
dW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNoYXIqIF9fbGFz
dCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19s
YXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7
CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJf
dCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl
b2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsg
KF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmls
bF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBm
aWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1
eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAg
ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAo
IDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3Vy
LCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVz
dHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMg
MTY0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFs
aXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw
ZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf
X2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxp
bmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4gZmlsbF9uKF9fZmly
c3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5p
dGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkK
ICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAg
ICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVj
dCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRj
aCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAg
ICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9E
X3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9f
Zmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAgfQojIDIyNyAiL3Vzci9sb2NhbC9nY2Mz
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Zv
cndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2Nv
cHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJu
IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogICAgICB9CiAg
ICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19t
aWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAg
IGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0Zvcndh
cmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQogICAgewogICAgICB1bmluaXRp
YWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICB0cnkgewogICAgICAgIHJl
dHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgICAgIH0K
ICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBf
X21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBf
X2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgX0ZvcndhcmRJ
dGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJz
dDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFz
dDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9E
ZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg
fQoKfQojIDU5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3Jh
Z2VfaXRlci5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFn
ZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9p
ZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfTV9pdGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0
b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9Cgog
ICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3Qg
X1RwJiBfX2VsZW1lbnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19l
bGVtZW50KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdl
X2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAg
ICB7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAg
ICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVy
YXRvcisrKGludCkKICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJk
SXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAg
cmV0dXJuIF9fdG1wOwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGUgPHR5cGVuYW1l
IF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlm
Zl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBz
aXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hp
bGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3Rk
OjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAg
cmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0g
MjsKICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KIyAx
MDYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogIGlubGluZSBwYWlyPF9UcCoscHRyZGlmZl90PgogIGdldF90ZW1wb3Jh
cnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikKICB7CiAgICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5
X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwogIH0KIyAxMjAgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIHZvaWQKICBy
ZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKICB7CiAgICBzdGQ6OmZyZWUoX19wKTsK
ICB9CiMgMTM1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRl
bXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9UcDEqIF9N
X3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApCiAgIDogX01fcHRy
KF9fcCkge30KfTsKIyAxNzUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1v
cnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToK
ICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfVHAgZWxlbWVudF90eXBlOwoKCgoK
CgoKICBleHBsaWNpdAogIGF1dG9fcHRyKGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQog
IDogX01fcHRyKF9fcCkgeyB9CiMgMjAyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z
LjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKQogIDogX01fcHRy
KF9fYS5yZWxlYXNlKCkpIHsgfQojIDIxNCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv
My4yL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0cihhdXRv
X3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0K
IyAyMjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBhdXRv
X3B0ciYKICBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3coKQogICAgewogICAgICByZXNl
dChfX2EucmVsZWFzZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDI0MyAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfVHAxPgogICAgYXV0b19wdHImCiAgICBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkg
dGhyb3coKQogICAgewogICAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQojIDI2MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9y
eSIgMwogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQojIDI3MyAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSYKICBvcGVyYXRv
ciooKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgZWxlbWVudF90
eXBlKgogIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDI5
NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRf
dHlwZSoKICBnZXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDMwOSAiL3Vz
ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSoK
ICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01f
cHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiMgMzI0ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgdm9pZAogIHJlc2V0
KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19wICE9IF9N
X3B0cikKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgX01fcHRyOwogICAgICAgICAgX01fcHRy
ID0gX19wOwogICAgICAgIH0KICAgIH0KIyAzNDUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBf
X3JlZikgdGhyb3coKQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYK
ICBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAg
IHsKICAgICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKICAgICAgICB7CiAgICAg
ICAgICBkZWxldGUgX01fcHRyOwogICAgICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOwogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx
PgogICAgb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBhdXRvX3B0cl9yZWY8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAxPgogICAgb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCn07Cgp9CiMgNDkgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2
NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgi
IDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jl
c3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlw
ZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9u
IHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBz
ZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMg
MTI3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt
X194OyB9Cn07CiMgMTczICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29s
Pgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29u
c3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl
dHVybiBfX3ggPD0gX195OyB9Cn07CiMgMjIyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNh
bF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVk
OgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShj
b25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGlj
YXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0
ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRf
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vj
b25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJv
dGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9u
ZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBf
X3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9h
cmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195
KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVn
YXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJu
IGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3Rl
ZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50
X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAog
ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBl
JiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRp
b246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpz
ZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9f
eCk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl
cmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChj
b25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBi
aW5kZXIxc3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3Rl
Y3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1
bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9f
eCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwg
dmFsdWUpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0
b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
T3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJu
ZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1
cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0Mzgg
Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAz
CnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3Vu
YXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJv
dGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191
bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihf
UmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3Io
KShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rp
b248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVy
biBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2lu
dGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxf
QXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBf
QXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4
cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBf
QXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJn
MSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsK
ICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVz
dWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3Vs
dD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50
ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9f
eDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1
cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4g
ewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpm
aXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVj
dDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29u
ZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWly
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFt
ZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U
cCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYp
KCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyBy
ZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5f
dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2Yo
X19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJu
IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBt
ZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQg
b3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2
YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0
IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9S
ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
X1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBj
b25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChf
VHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qo
X1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0K
cHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gp
IGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6
OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1f
ZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90
KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0
b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog
IHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xh
c3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2
b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYp
KCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAo
X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9
CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2Yp
KF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9U
cCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZiko
X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAq
IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2
b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l
bV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9f
eCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBf
VHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9B
cmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lk
IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6
Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+
IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m
dW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K
aW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9f
ZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0
LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNv
bnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+
IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9S
ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o
X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu
X3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9S
ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1f
ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21l
bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzCiMgNDQgIi91c3IvbG9j
YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgojIDEgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2F0
b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193
b3JkOwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2Vk
X18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGlu
dCBfX3ZhbCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9f
dm9sYXRpbGVfXyAoImxvY2s7IHhhZGRsICUwLCUyIgogICAgICAgICAgICAgICAgICAgICAgICA6
ICI9ciIgKF9fcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX192YWwpLCAi
bSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJu
IF9fcmVzdWx0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2Vk
X18pKQpfX2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3Zh
bCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAg
ICAgICAgICAgICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIp
Owp9CiMgNDYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0
cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDg4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs
dWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNf
c3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7
CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9j
eHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAg
ICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBi
YXNpY19zdHJpbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRl
cmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2
YXRlOgojIDEyMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf
c3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2Fs
bG9jOwojIDE0MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf
c3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwog
ICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAgIHNpemVfdHlw
ZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9t
aWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01faXNfbGVha2Vk
KCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBi
b29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZl
cmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAg
ICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9z
aGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQq
CiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAgICAgb3Bl
cmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgp
IFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYg
X19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewogICAgICAgICAgcmV0
dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpCiAgICAgICAgICAg
ICAgICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwogICAgICAgIH0KCgog
ICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxv
YyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkK
ICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2Vz
LCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAg
ICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAg
ICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAg
ICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9y
ZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29u
c3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0
IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFy
VCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3Ao
X19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoK
CgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0
YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNp
emVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXpl
b2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2Rh
dGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsg
fQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVp
bnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0
b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsg
fQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygp
CiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAg
IF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhz
aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5z
aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9j
aGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAg
ICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29m
ZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5z
aXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBf
X29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkg
KyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRl
cmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog
X19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAg
Zm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5
cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg
ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19r
MikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsg
fQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29u
c3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2No
YXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQK
ICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9f
azIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0K
CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0
IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpj
b3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoK
ICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAg
ICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4o
Jl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQog
ICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhj
b25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3Mp
OwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBf
X2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
LAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAg
IGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs
b2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z
dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0
SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0g
X0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rp
c3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNz
aWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3Qg
X0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24o
MSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAg
IF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoK
ICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBj
b25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQog
ICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2Rh
dGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAg
IGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRo
aXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAg
ICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0
b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVn
aW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0K
CiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAg
dm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lk
CiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgp
KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01f
cmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBl
IF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAs
IHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJl
dHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBv
cGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEo
KVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBf
X3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgp
W19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlw
ZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAg
ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAg
cmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQo
c2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9s
ZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsg
cmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
b3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJl
dHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVu
ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBw
ZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBw
ZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAg
ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBf
X2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7
IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3N0
cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3Np
Z24iKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3Bv
czsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9f
c3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0
YSgpICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAg
ICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9l
cnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lz
X3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAg
ICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwg
X19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCksIF9NX2ll
bmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCiAgICAgICAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAg
aWYgKF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9kYXRh
KCksIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAgICAgICAgICAg
dHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIF9NX3Jl
cCgpLT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25dID0gX1JlcDo6
X1NfdGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFy
VCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQo
KSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
X2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAg
ICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAg
eyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lu
cHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+
cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK
ICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUo
KSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEs
IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3My
LCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6
ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAg
Y29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19w
b3MyOwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5fTV9kYXRhKCkg
KyBfX3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
aW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p
CiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0aGlzLT5tYXhf
c2l6ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmlu
Zzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNz
PGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29u
c3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1cm4g
X01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsKICAgICAg
ICBlbHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9
IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAwLCBfX24pOwog
ICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAgX0NoYXJUKiBf
X3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9fbiA8PSBfX3Ap
CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7CiAgICAgICAg
ICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X19wLCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0gX19zKTsKICAg
ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3MpLCBfX3AgKyBf
X24sIF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
aW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2so
X19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBp
dGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkp
CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAg
ICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAg
ICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01f
aWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFz
ZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAg
ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3Bvcywg
X19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7
CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24p
CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigp
OwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2Rh
dGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAg
ICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAg
ICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAg
ICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5y
ZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9N
X3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7
CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXpl
KCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z
MSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D
aGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19wb3Mg
PiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpy
ZXBsYWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEgPCBfX3NpemUgLSBf
X3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rlc3RuMSA/IF9fbjEg
OiBfX3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xkbjEgPiB0aGlzLT5t
YXhfc2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z
dHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8
IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVz
czxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJl
dHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLCBfX3MsIF9f
cyArIF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAgICBfTV9yZXBsYWNl
KF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+OjppdGVyYXRv
cl9jYXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl
KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAg
ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3Ms
IF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo
aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK
ICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9kYXRhKCks
IF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFj
ZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBj
b25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2ky
LCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRv
ciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19r
MiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46
Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw
bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEsIF9DaGFyVCog
X19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwg
X19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0g
X19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikK
ICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAt
IF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19rMSk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy
YXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJh
dG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sx
KTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1w
bGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
ICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJ
dGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2syKTsK
CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAg
ICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRl
cj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0
KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3Rf
YXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgcmV0
dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2Ep
OwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGlj
IF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2Vu
ZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJl
dHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAg
ICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9D
aGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs
IGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9D
aGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5k
LCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlw
ZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAg
ICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXpl
X3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoK
ICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlz
LT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1Jl
cDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAg
IGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoK
ICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3Bv
cywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7
CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQo
X19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmlu
ZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7
CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m
aW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp
bmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2Yo
X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v
Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bvcywg
X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAg
ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9v
ZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3Mp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9m
aXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0
OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25v
dF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwg
X19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf
bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k
X2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRy
YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh
c3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAg
ICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5
cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNp
emUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0
ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAg
ICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBj
b25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg
ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXplX3R5cGUg
X19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0c190
eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYg
KCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJldHVybiBf
X3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQK
ICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5
cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9f
cykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBj
b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
LAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z
dHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9B
bGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsK
ICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVy
YXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
bG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQog
ICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9f
bGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmlu
Z190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBf
X3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCog
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf
X3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo
cy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs
CiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5j
b21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMp
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5j
b21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0o
Y29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf
X2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBy
ZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9p
ZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
ICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
dHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGlu
ZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0
bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDU0ICIvdXNy
L2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgojIDEgIi91c3IvbG9j
YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDEgMwojIDY1ICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi91c3IvbG9jYWwv
Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDEgMwojIDY0ICIvdXNyL2xv
Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0
eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7CiAg
ICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hp
bGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBf
X3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg
X19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJl
bnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19o
b2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
Pjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wdXNoX2hl
YXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3Rh
bmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h
bWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcElu
ZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2Ug
X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRl
eCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkp
IHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVu
dCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9IChf
X2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl
eCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUK
ICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rp
c3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5j
ZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAg
ICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl
LCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3Rv
cEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAq
IF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewog
ICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3Nl
Y29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19m
aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAg
IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAq
IChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0g
X19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAo
X19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQg
LSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3Rv
cEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192
YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDAp
LCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcG9w
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAg
ICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1Zh
bHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rp
c3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAo
X19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBf
X3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICAg
ICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICoo
X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRD
aGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAg
ICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmly
c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAg
ICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVz
aF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXAp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVh
cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAg
X192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp
c3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChf
X2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZv
aWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoK
ICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAoX19m
aXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwg
X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
PgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAg
ICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5j
ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJl
dHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAg
IF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1Zh
bHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0g
MCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu
bGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBpZiAo
X19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4g
LSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmly
c3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihf
X2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkg
cmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQog
ICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQog
ICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK
ICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7Cgog
ICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVh
cChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF90ZW1wYnVmLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNz
IF9UcD4KICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcgp7CgogCgogIHB0cmRpZmZfdCBfTV9vcmln
aW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCgogIHZvaWQg
X01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAg
X01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAv
IHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoK
ICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2Mo
X01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVmZmVyKQogICAgICAgIGJyZWFr
OwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZm
ZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZl
cihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGxf
bihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6CgogIHB0cmRpZmZfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CgogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQoKICBfVHAqIGJlZ2luKCkgeyByZXR1
cm4gX01fYnVmZmVyOyB9CgogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVu
OyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlh
bDsKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAg
X01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgY2F0
Y2goLi4uKQogICAgICB7CiAgICAgICAgZnJlZShfTV9idWZmZXIpOwogICAgICAgIF9NX2J1ZmZl
ciA9IDA7CiAgICAgICAgX01fbGVuID0gMDsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KCiAg
fl9UZW1wb3JhcnlfYnVmZmVyKCkgewogICAgX0Rlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIg
KyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3Jh
cnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShj
b25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07Cgp9CiMgNjYgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsK
IyA4NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRp
YW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKICAgIHsK
CiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykKICAgICAg
ICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgICAgcmV0
dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlm
IChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19j
KQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAg
fQojIDExOCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp
bmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19i
LCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAgaWYg
KF9fY29tcChfX2EsIF9fYikpCiAgICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAg
ICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAg
ICByZXR1cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVs
c2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBp
ZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAg
ICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxNTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVuY3Rpb24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAog
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpf
X2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmlu
ZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBf
VHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkKICAgICAgICArK19f
Zmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRl
cgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJz
dCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAg
ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3Vu
dAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJp
cF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAg
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmly
c3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewog
ICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz
dDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAx
OgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg
KytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9f
bGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZp
bmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChf
X2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsg
LS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpf
X2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAg
ICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAg
ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJz
dDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAgICBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNl
IDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoj
IDI4OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAg
cmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2ZpcnN0KSk7CiAgICB9CiMgMzA5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9f
bGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMjkg
Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFj
ZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7
CgogICAgIAogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVy
biBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGls
ZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkK
ICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAg
IH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsK
CiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVy
biBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGls
ZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJz
dCwgKl9fbmV4dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0g
X19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvdXNyL2xv
Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgIAogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICAg
ICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0MTEgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAg
ICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICsrX19uOwog
ICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2go
X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2Zp
cnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09
IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0
Mik7CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmly
c3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoK
ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZp
bmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09
IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsK
ICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0g
X19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3Vy
cmVudCA9PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAg
ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp
CiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0Jp
bmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp
cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m
aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3By
ZWRpY2F0ZSkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEg
PT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0
MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsK
ICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIH0KCgoKICAgICAgX0Zv
cndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAg
ICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7
CiAgICAgICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0
MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3Qx
KQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAg
X19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp
IHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwg
Kl9fcCkpIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1
cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAg
ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAg
ICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1OTYgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2Fy
ZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICBy
ZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19maXJz
dCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAg
ICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9
IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19p
OwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkK
ICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f
Zmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVy
biBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUg
X0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3Vu
dCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3Vu
dCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsr
X19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5h
cnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0t
X19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1
cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9f
bGFzdCkgewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJl
dHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMgogICAgc3dh
cF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f
Zmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19maXJzdDIp
OwogICAgICByZXR1cm4gX19maXJzdDI7CiAgICB9CiMgNzMyICIvdXNyL2xvY2FsL2djYzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4K
ICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3Bl
cmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0
ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3
NjUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+
CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5
X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgICAgICpf
X3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29u
c3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3Qg
PT0gX19vbGRfdmFsdWUpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQoj
IDgyNSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwg
dHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJl
ZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDg1
NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl
bmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1Rw
JiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1
bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAg
ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAg
ICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA5MTggIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lkCiAgICBnZW5lcmF0ZShfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikK
ICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgIH0KIyA5NDIgIi91c3IvbG9j
YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+
CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAoKCgogICAgICBmb3IgKCA7IF9f
biA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAg
ICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAg
IHJlbW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAwMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX091
dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRp
Y2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3Qp
KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7
CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAzOSAiL3Vzci9sb2Nh
bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBy
ZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg
X19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmly
c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9f
bGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVt
b3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBfX2Zp
cnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgICAgIF9Gb3J3YXJkSXRl
ciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBf
X2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIF9f
dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIG91dHB1
dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQg
PSBfX3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAo
IShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0Owog
ICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsr
X19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKQogICAgewoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19f
Zmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKCpfX3Jlc3VsdCA9PSAqX19maXJzdCkpCiAg
ICAgICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsK
ICAgIH0KIyAxMTQ1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJU
eXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAg
IHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlw
ZSgpKTsKICAgIH0KIyAxMTcwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgog
ICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
X0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBvdXRwdXRf
aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9f
cmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAg
ICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICAgICAgX192
YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAg
IH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE5OSAiL3Vzci9sb2NhbC9nY2Mz
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRp
Y2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwK
ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xh
c3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMjMy
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVu
YW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5
cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAg
cmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LApfX3Jlc3VsdCwgX19iaW5hcnlf
cHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAogICAgICAgICAKCgogICAgICAg
ICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJl
dHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAg
Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQp
CiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2Zp
cnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19m
aXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAg
ewogICAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0
KTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg
ICB2b2lkCiAgICBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKQogICAgewogICAgICAgICAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAg
ICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAgIH0KIyAxMzQ5ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJl
dmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QpCiAgICB7CgogICAgICAgICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0
LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRw
dXRJdGVyCiAgICByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xh
c3Q7CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICB9CiMgMTM5OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9FdWNsaWRlYW5SaW5nRWxlbWVudD4KICAgIF9F
dWNsaWRlYW5SaW5nRWxlbWVudAogICAgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwg
X0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKICAgIHsKICAgICAgd2hpbGUgKF9fbiAhPSAwKSB7
CiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgICAgICBf
X20gPSBfX247CiAgICAgICAgX19uID0gX190OwogICAgICB9CiAgICAgIHJldHVybiBfX207CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgdm9pZAogICAg
X19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19taWRkbGUsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk
bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9Gb3J3
YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICBkbyB7CiAgICAgICAgc3dhcCgqX19m
aXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAg
ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBf
X2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MiAhPSBfX2xhc3QpIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAg
ICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19maXJz
dDI7CiAgICAgICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQogICAgICAgICAgX19maXJz
dDIgPSBfX21pZGRsZTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09
IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAg
ICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KCkpOwogICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAmJiBfX21pZGRs
ZSAhPSBfX2xhc3QpCiAgICAgICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsKCiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBf
X2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICAgIGVsc2Ug
ewogICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk
bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9EaXN0YW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBfRGlzdGFu
Y2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxl
IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsKCiAgICAgIGlmIChf
X2sgPT0gX19sKSB7CiAgICAgICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlk
ZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9EaXN0YW5jZSBfX2QgPSBfX2dj
ZChfX24sIF9fayk7CgogICAgICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9f
aSsrKSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OwogICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgICAgIGlmIChfX2sgPCBfX2wpIHsKICAg
ICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAg
ICAgICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAgICAgKl9fcCA9
ICooX19wIC0gX19sKTsKICAgICAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgICBfX3AgKz0gX19rOwog
ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICBmb3IgKF9EaXN0
YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAgICAgIGlm
IChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2sp
OwogICAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICpf
X3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgICAgfQog
ICAgICAgIH0KCiAgICAgICAgKl9fcCA9IF9fdG1wOwogICAgICAgICsrX19maXJzdDsKICAgICAg
fQogICAgfQojIDE1NjEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUg
dm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRk
bGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0
ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5
cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAK
CgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19s
YXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2MTIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGlzdGFuY2U+
CiAgICBpbmxpbmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikK
ICAgIHsKCiAgICAgIHJldHVybiBscmFuZDQ4KCkgJSBfX247CgoKCiAgICB9CiMgMTYzNCAiL3Vz
ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJhbmRv
bV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47
CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf
X2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9u
dW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQojIDE2NjAgIi91c3IvbG9jYWwvZ2Nj
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KICAg
IHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5l
cmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7
IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBf
X3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgIGlmICgr
K19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIF9Gb3J3YXJkSXRlciBf
X25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgICAg
ICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0
KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICByZXR1cm4gX19maXJzdDsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu
YW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fcGFydGl0aW9uKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGls
ZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg
ICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAg
IC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKCFf
X3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAgICAgICAgZWxzZQogICAg
ICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAg
ICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAg
cGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBy
ZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3
YXJkSXRlcgogICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQogICAgewogICAgICBpZiAoX19sZW4g
PT0gMSkKICAgICAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7
CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19t
aWRkbGUsIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19pbnBsYWNl
X3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMik7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlk
ZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpOwogICAgICByb3RhdGUoX19iZWdpbiwg
X19taWRkbGUsIF9fZW5kKTsKICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRs
ZSwgX19lbmQpKTsKICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRp
Y2F0ZSwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6
ZSkgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgICAgIF9Q
b2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3QgOyArK19fZmlyc3QpCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAg
ICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQxOwog
ICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDIgPSAqX19m
aXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAgICAgY29weShf
X2J1ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDE7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19m
aXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICAgIF9Gb3J3
YXJkSXRlciBfX2JlZ2luID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp
OwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2
ZSggX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19l
bmQpOwogICAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7
CiAgICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICAgIH0KICAgIH0KIyAxODQ4ICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVy
CiAgICBzdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJk
SXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19i
dWYuc2l6ZSgpID4gMCkKICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRp
dmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCks
IF9fYnVmLnNpemUoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9z
dGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVk
X3NpemUoKSkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3Vu
Z3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAg
ewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3Qp
CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9f
cGl2b3QgPCAqX19sYXN0KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJz
dCA8IF9fbGFzdCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAo
X19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0
aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJz
dCwgX19waXZvdCkpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAg
ICAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0Owog
ICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0Owog
ICAgICB9CiAgICB9CiMgMTkyOSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lk
CiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg
X1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7
CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAgICAg
Kl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19u
ZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hp
bGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsK
ICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAg
Kl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFs
ID0gKl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29weV9i
YWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3Zh
bDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2lu
c2VydChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNz
SXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAg
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsK
ICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAg
ICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5n
dWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZv
aWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5
cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBf
X2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFs
dWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJk
ZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191
bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lk
CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg
PiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmly
c3QgKyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lk
CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9s
ZCkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVz
aG9sZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0
ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xnKF9T
aXplIF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9fbiAh
PSAxOyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAgIHZv
aWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xp
bWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0g
MCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAg
ICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlv
bihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVl
VHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0
IC0gMSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRo
X2xpbWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNo
b2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlh
bF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0dXJu
OwogICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFu
KCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21w
KSksCiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBf
X2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAg
ICAgIH0KICAgIH0KIyAyMTY2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg
ICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAg
CgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3Nv
cnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsKICAg
ICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KICAg
IH0KIyAyMTk3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0g
X19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGco
X19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAg
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICByZXR1cm47CiAgICAg
IH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAt
IF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlk
ZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogICAg
ICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lk
CiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAg
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgIHJldHVy
bjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAo
X19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz
dCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRs
ZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUg
LSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIy
LAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29y
dF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBf
RGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0g
MiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29f
c3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl
cF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBf
X2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsK
ICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAgICAgIF9fc3RlcF9zaXpl
ID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogICAgICBt
ZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAg
ICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg
ICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
MiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBf
X3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXAp
IHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJz
dCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVw
OwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2Zp
cnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl
cF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAg
ICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIGVudW0geyBfTV9j
aHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCiAgICB7CiAgICAg
IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICAgICAgX19m
aXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
ciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f
Y2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19j
aHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBf
X2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJz
dCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9f
Y2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz
dCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0g
X19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47
CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2No
dW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICAgICAg
d2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChf
X2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3Np
emUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFz
dCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93
aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAg
X0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZm
ZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUg
PSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBf
X2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZm
ZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAg
ICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9f
c3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2lu
dGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0
aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf
X2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19m
aXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0
ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0
YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19t
ZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAg
ICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsK
ICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs
IF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2lu
dGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xl
biA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6
ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZm
ZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgIF9fbWVyZ2Vf
c29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21wKTsKICAg
ICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9E
aXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAg
ICAKCiAgICAgCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1Zh
bHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAw
KQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBl
bHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5i
ZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvdXNyL2xv
Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l
IHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAK
CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4g
YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAg
IF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIGVs
c2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJl
Z2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbXApOwogICAgfQojIDI1MDIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlcj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRk
bGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBf
X2xhc3Q7ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Bv
cF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgICBz
b3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQojIDI1NDAgIi91c3IvbG9jYWwvZ2Nj
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBwYXJ0
aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBtYWtlX2hlYXAoX19maXJz
dCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g
X19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAq
X19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9W
YWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlh
bF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5
cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAg
ICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9s
YXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3Vs
dF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9s
YXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9f
Zmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0Owog
ICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0
KTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0
IDwgKl9fcmVzdWx0X2ZpcnN0KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJz
dCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlw
ZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCkpOwogICAgICAgICsrX19maXJzdDsKICAg
ICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7
CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYzMyAiL3Vzci9sb2Nh
bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf
Q29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf
T3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAg
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0
X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jl
c3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBf
X2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAq
X19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xh
c3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9m
aXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3Qp
KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgw
KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xh
c3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVl
VHlwZSgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAg
KytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1
bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owog
ICAgfQojIDI2ODYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQK
ICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAK
CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlh
bigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAg
ICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAg
ICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAyNzI4ICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgbnRoX2Vs
ZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAg
ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf
X2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAg
IF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsK
ICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsK
ICAgIH0KIyAyNzY4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1
ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAg
IAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7
CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7
CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsK
ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19o
YWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3Qg
PSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4g
LSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9f
aGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2xv
Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh
bmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAg
X19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAg
YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwg
X192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmly
c3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICB9CiMgMjg1NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h
bWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw
ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAK
ICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk
ZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+
IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUs
IF9faGFsZik7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAgX19sZW4g
PSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAg
ICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK
ICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjkwMSAiL3Vz
ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAg
ICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg
ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg
ICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwg
Kl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAg
ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAg
X19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVh
bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg
X1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh
bmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4g
PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsK
ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGls
ZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21p
ZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAg
ICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsK
ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAx
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAg
IF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJf
Ym91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJz
dCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9f
Zmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zvcndh
cmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4g
cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9
CiMgMzAwMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBl
cXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u
c3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAg
IAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f
bGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19t
aWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAg
ICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxl
LCBfX3ZhbCkpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19m
aXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAg
ICAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9
IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJz
dCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9f
Zmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVy
LCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAg
IHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0
KTsKICAgIH0KIyAzMDUyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAg
ewoKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2Jv
dW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAm
JiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMgMzA4MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFy
eV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFz
dCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K
ICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmly
c3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7
CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgMzE2NiAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7
CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg
ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAg
aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYg
KF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0
KQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0
dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmly
c3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
ICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsK
ICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9j
dXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAg
IF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9f
c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChf
X2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9j
dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19u
ZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0
YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm
ZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZl
cihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3Rh
bmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm
ZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4y
ID09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsK
ICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0
ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVu
MTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBf
X2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9f
Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChf
X21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9
IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2Ugewog
ICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0
LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9f
bWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5j
ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0
LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3
X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFu
Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29t
cCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFu
Y2U+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFu
Y2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAg
ewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVu
MSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVy
X2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFj
a3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19i
dWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19s
ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBf
X2ZpcnN0KTsKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJf
ZW5kLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9f
bWlkZGxlLCBfX2xhc3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
Mz4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0
aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMg
X19yZXN1bHQpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJl
dHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlm
IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly
c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3Qy
OwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7
CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3Qx
ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCAr
K19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYg
KF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
Zmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAg
ICB9CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9u
YWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx
LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0g
X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0Miwg
X19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz
dDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19j
b21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz
dDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJu
IGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAg
LS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0
ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAg
ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwog
ICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl
bmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwK
ICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZl
cl9zaXplKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9
IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZl
ciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg
IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIp
OwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl
ciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4y
MiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAg
ICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJz
dF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i
b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBf
X2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAy
OwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAg
ICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
ICpfX3NlY29uZF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19m
aXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2
ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAg
ICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUs
IF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRs
ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp
OwogICAgICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9f
bGVuMiwKICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf
X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6
ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9l
bmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9p
bnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg
ICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9f
YnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
ICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4x
MSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f
bGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21p
ZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9f
bGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7
CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAg
ICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwg
Kl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVf
YWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsK
ICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdf
bWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0
aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2Uo
X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly
ZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAg
aWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJl
dHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19t
aWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBf
X2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFs
dWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9
PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX19sZW4xLCBfX2xlbjIpOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7
CiAgICB9CiMgMzU1OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs
CiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh
bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0
aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAg
ICAgCgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09
IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRp
c3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBk
aXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRp
cmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAg
aWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogICAgICBl
bHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBf
X2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9E
aXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l
IF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgog
ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog
ICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmly
c3QxOwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAg
ICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoK
ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK
ICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg
ICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsr
X19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24oX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAg
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAg
ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlm
ICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAg
cmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgog
ICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAg
ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAg
ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAg
ICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIs
IGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1
dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAg
ICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg
ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h
bWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0
SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgog
ICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz
dDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlm
ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0
MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg
IHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUg
X091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRl
cgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgog
ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog
ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jl
c3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly
c3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg
ICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg
ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg
ICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAg
ICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEs
IF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19k
aWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgq
X19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK
ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAg
ICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytf
X3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwog
ICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3Qy
LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1h
eF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAg
ewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2Zp
cnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAo
KytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAg
ICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7Cgog
ICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0
OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytf
X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3Qp
KSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxl
bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsK
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19m
aXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQogICAgICAg
ICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK
ICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJz
dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAg
ICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBu
ZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p
ID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZv
cig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0t
X19pOwogICAgICAgIGlmICgqX19pIDwgKl9faWkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAg
ICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZl
cnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAg
ICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m
aXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7Oykg
ewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwog
ICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19q
KSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAg
ICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9
CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIHBy
ZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kg
PSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9y
KDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1f
X2k7CiAgICAgICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAg
ICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVy
c2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAg
ICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0
KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2Zp
cnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7
CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAg
ICAgICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kp
KQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAg
IHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0K
ICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwg
X19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0K
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9J
bnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3Qy
LCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAg
IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9G
b3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVy
KQogICAgICAgICAgaWYgKCpfX2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgICAgICByZXR1cm4g
X19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVk
aWNhdGU+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJz
dDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
Zmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAg
IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9G
b3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVy
KQogICAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQogICAgICAgICAgICBy
ZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQojIDQyMDEgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0Zv
cndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy
ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G
b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcs
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0
MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJ
dGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9G
b3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09
IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgX19maXJzdDEg
PSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0
ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0
MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f
Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRl
cmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAg
ICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIxIF9f
cmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgX0ZvcndhcmRJ
dGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9
PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3Qx
ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ
dGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0
aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
Zmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsK
CiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u
YWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGly
ZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmly
c3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jldkl0ZXIx
IF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIp
OwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0
MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9f
cnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmly
c3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp
cnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7Cgog
ICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFs
SXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVj
dGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0
MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBf
X3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAgICBpZiAoX19y
cmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsK
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsK
ICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsK
ICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIF9G
b3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJk
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3
YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVy
biBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwK
ICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJk
SXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9f
bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICB9Cgp9CiMgNzAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0i
IDIgMwojIDU3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcu
dGNjIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFz
aWNfc3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFt
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3Np
emUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29u
c3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19l
bXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNp
emVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf
X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQg
JiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3Jl
ZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9f
aSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1
ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytd
ID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAq
IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3Ro
ID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZk
YXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0g
X19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9y
ICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9
PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
X19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1Jl
cCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAg
ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAg
ICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19yID0g
X19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAg
ICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAg
ICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l
bmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6
ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5f
ZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCiAgICAg
ICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVy
biBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBfUmVw
OjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19jb3B5
X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0Y2go
Li4uKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7
CgogICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsK
ICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hh
clQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2Nv
bnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAg
IHsKICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4g
X1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9T
X2NyZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24p
CiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwg
X19jKTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3It
Pl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5f
TV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190
ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5n
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3Jl
cCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAg
ICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9B
bGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9D
aGFyVCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVz
KF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygp
KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl
IF9fcG9zLAogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19h
KQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwg
X19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo
X19zLCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFy
VCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
KF9fcywgX19zID8gX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDogMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKHNpemVf
dHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1
cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJ
dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3Ry
dWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewog
ICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAgewoKICAgICAgICAg
IGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9D
aGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9hbGxv
Y2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAg
X01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1Jl
cDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQogICAgewogICAg
ICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsgMSkgKiBz
aXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9p
ZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01fbGVha19oYXJk
KCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICBfTV9t
dXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICB9CgoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBz
aXplX3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMt
PnNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsg
X19sZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsg
X19wb3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRf
c2l6ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQo
KSB8fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2Nh
dG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwoKCiAgICAgICAgICBjb25zdCBzaXplX3R5
cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2Nf
aGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fcGFnZV9jYXBhY2l0eSA9IChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzaXplb2YoX1Jl
cCkgLSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9SZXAqIF9fcjsKICAgICAgICAg
IGlmIChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4gX19wYWdlX2NhcGFj
aXR5KQoKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUgPiAyKmNh
cGFjaXR5KCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc2l6ZSA6
IDIqY2FwYWNpdHkoKSwgX19hKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yID0gX1Jl
cDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpj
b3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgICAgICAgICBp
ZiAoX19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01f
cmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4u
LikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRfYWxsb2Nh
dG9yKCkpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9y
ZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEo
KSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4y
KQogICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3Bv
cyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgIH0KICAgICAgX01fcmVwKCkt
Pl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6
ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBpZiAoX19yZXMgPiB0aGlz
LT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICB7CiAgICAg
ICAgICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgICBfX3Rocm93X2xl
bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7CgogICAgICAgICAgaWYgKF9fcmVz
IDwgdGhpcy0+c2l6ZSgpKQogICAgICAgICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsKICAgICAg
ICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFy
VCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7
CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShf
X3RtcCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAg
aWYgKF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3No
YXJhYmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAg
IF9fcy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxs
b2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hh
clQqIF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsK
ICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgp
LCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19z
Ll9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAg
ICAgICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3Qg
X19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAg
ICBpZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3Ro
X2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6
ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKIyA0
MjEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50
Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBz
aXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hl
YWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFs
bG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90
IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2Nf
aGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAg
ICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAg
X19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXAp
OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAg
ICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXpl
IC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAg
ICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJh
IC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICog
c2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBf
X3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAg
ICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkg
PSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9N
X2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9j
bG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21h
bGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAg
IC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVk
X2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkK
CiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2Fw
YWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAy
Kl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9T
X2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShf
X3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBj
YXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h
bGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRh
KCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAg
IGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNp
Y19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3Np
emUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFz
ZShfX24pOwoKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLAogICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CgogICAgICAg
IGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vf
c2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkpOwogICAgICB9
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLAogICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0g
c3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7CiAgICAgICAgc2l6
ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0
aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgICAgICAg
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAg
ICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRl
KF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3KQogICAgICAgICAg
X1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7CgogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBf
X24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgp
OwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMiA9
IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRu
MiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0
ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK
ICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6
ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0
aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1
cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4o
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoK
CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSAr
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAg
ICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9p
ZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+
c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMt
PnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwg
X01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7
CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9f
bGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAg
ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX24sIF9fYyk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgog
ICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVf
dHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwog
ICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19y
aHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAg
ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhf
Q2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190
eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAg
ICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZl
KF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwog
ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAg
c2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9f
aTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0g
X19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5n
OjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAg
IGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYx
LCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h
bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHkoX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgaWYg
KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp
Y19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykK
ICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0c190eXBlOjpj
b3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICByZXR1cm4gX19uOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBf
TV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykK
ICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9zLCBfX3MsIF9f
bikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAg
c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fcmV0ID0g
bnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9f
c2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6
ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9fcCkKICAgICAg
ICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX3BvcyA9
IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0g
MCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQogICAgICAgICAg
d2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNp
emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAg
ewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194
cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAo
KytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx
KF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAg
ICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewog
ICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAg
IHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBf
X24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0
dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFz
dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj
b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBp
ZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3Bv
cykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb
X19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg
ICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBv
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9
IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAg
ICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkp
CiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl
X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmlu
ZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewog
ICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5z
aXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtf
X3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAo
LS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBk
bwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3Ms
IF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsK
ICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAg
IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf
dHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUg
PiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6
ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg
ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg
ICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp
Y19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXpl
IC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29z
aXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9f
cG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0g
X19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAog
ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5
cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBf
X3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9f
cG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19w
b3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9f
cG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19y
b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFy
VCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9f
c2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg
ICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAog
ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19w
b3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6
Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24x
KTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBp
bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19s
ZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAg
ICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24y
KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRz
X3R5cGU6Omxlbmd0aChfX3MpLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4o
X19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6
ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRh
KCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9f
cnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19z
dHJpbmdfY29weShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3N0ciwKICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6
c2l6ZV90eXBlIF9fYnVmc2l6KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6
c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNp
emUoKTsKICAgICAgc2l6ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAt
IDEpOwogICAgICBfVHJhaXRzOjpjb3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0ZXMpOwog
ICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf
aXN0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmlu
ZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTxjaGFyPiYKICAgIG9wZXJh
dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyPiYsIGNvbnN0IHN0cmluZyYpOwogIGV4dGVybiB0ZW1w
bGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxj
aGFyPiYsIHN0cmluZyYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVh
bTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwoKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w
bGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0
cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29z
dHJlYW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBj
b25zdCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFy
X3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFy
X3QpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdl
dGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKfQojIDU4ICIvdXNyL2xv
Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyA0NyAiL3Vzci9sb2NhbC9x
dC0zLjEuMS9pbmNsdWRlL3FzdHJpbmcuaCIgMgojIDU3ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu
Y2x1ZGUvcXN0cmluZy5oIgpjbGFzcyBRUmVnRXhwOwpjbGFzcyBRU3RyaW5nOwpjbGFzcyBRQ2hh
clJlZjsKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFFEZWVwQ29weTsKCmNsYXNzIFFDaGFyIHsK
cHVibGljOgogICAgUUNoYXIoKTsKICAgIFFDaGFyKCBjaGFyIGMgKTsKICAgIFFDaGFyKCB1Y2hh
ciBjICk7CiAgICBRQ2hhciggdWNoYXIgYywgdWNoYXIgciApOwogICAgUUNoYXIoIGNvbnN0IFFD
aGFyJiBjICk7CiAgICBRQ2hhciggdXNob3J0IHJjICk7CiAgICBRQ2hhciggc2hvcnQgcmMgKTsK
ICAgIFFDaGFyKCB1aW50IHJjICk7CiAgICBRQ2hhciggaW50IHJjICk7CgogICAgc3RhdGljIGNv
bnN0IFFDaGFyIG51bGw7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgcmVwbGFjZW1lbnQ7CiAgICBz
dGF0aWMgY29uc3QgUUNoYXIgYnl0ZU9yZGVyTWFyazsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBi
eXRlT3JkZXJTd2FwcGVkOwogICAgc3RhdGljIGNvbnN0IFFDaGFyIG5ic3A7CgoKCiAgICBlbnVt
IENhdGVnb3J5CiAgICB7CiAgICAgICAgTm9DYXRlZ29yeSwKCiAgICAgICAgTWFya19Ob25TcGFj
aW5nLAogICAgICAgIE1hcmtfU3BhY2luZ0NvbWJpbmluZywKICAgICAgICBNYXJrX0VuY2xvc2lu
ZywKCiAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCwKICAgICAgICBOdW1iZXJfTGV0dGVyLAog
ICAgICAgIE51bWJlcl9PdGhlciwKCiAgICAgICAgU2VwYXJhdG9yX1NwYWNlLAogICAgICAgIFNl
cGFyYXRvcl9MaW5lLAogICAgICAgIFNlcGFyYXRvcl9QYXJhZ3JhcGgsCgogICAgICAgIE90aGVy
X0NvbnRyb2wsCiAgICAgICAgT3RoZXJfRm9ybWF0LAogICAgICAgIE90aGVyX1N1cnJvZ2F0ZSwK
ICAgICAgICBPdGhlcl9Qcml2YXRlVXNlLAogICAgICAgIE90aGVyX05vdEFzc2lnbmVkLAoKICAg
ICAgICBMZXR0ZXJfVXBwZXJjYXNlLAogICAgICAgIExldHRlcl9Mb3dlcmNhc2UsCiAgICAgICAg
TGV0dGVyX1RpdGxlY2FzZSwKICAgICAgICBMZXR0ZXJfTW9kaWZpZXIsCiAgICAgICAgTGV0dGVy
X090aGVyLAoKICAgICAgICBQdW5jdHVhdGlvbl9Db25uZWN0b3IsCiAgICAgICAgUHVuY3R1YXRp
b25fRGFzaCwKICAgICAgICBQdW5jdHVhdGlvbl9EYXNrID0gUHVuY3R1YXRpb25fRGFzaCwKICAg
ICAgICBQdW5jdHVhdGlvbl9PcGVuLAogICAgICAgIFB1bmN0dWF0aW9uX0Nsb3NlLAogICAgICAg
IFB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZSwKICAgICAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3Rl
LAogICAgICAgIFB1bmN0dWF0aW9uX090aGVyLAoKICAgICAgICBTeW1ib2xfTWF0aCwKICAgICAg
ICBTeW1ib2xfQ3VycmVuY3ksCiAgICAgICAgU3ltYm9sX01vZGlmaWVyLAogICAgICAgIFN5bWJv
bF9PdGhlcgogICAgfTsKCiAgICBlbnVtIERpcmVjdGlvbgogICAgewogICAgICAgIERpckwsIERp
clIsIERpckVOLCBEaXJFUywgRGlyRVQsIERpckFOLCBEaXJDUywgRGlyQiwgRGlyUywgRGlyV1Ms
IERpck9OLAogICAgICAgIERpckxSRSwgRGlyTFJPLCBEaXJBTCwgRGlyUkxFLCBEaXJSTE8sIERp
clBERiwgRGlyTlNNLCBEaXJCTgogICAgfTsKCiAgICBlbnVtIERlY29tcG9zaXRpb24KICAgIHsK
ICAgICAgICBTaW5nbGUsIENhbm9uaWNhbCwgRm9udCwgTm9CcmVhaywgSW5pdGlhbCwgTWVkaWFs
LAogICAgICAgIEZpbmFsLCBJc29sYXRlZCwgQ2lyY2xlLCBTdXBlciwgU3ViLCBWZXJ0aWNhbCwK
ICAgICAgICBXaWRlLCBOYXJyb3csIFNtYWxsLCBTcXVhcmUsIENvbXBhdCwgRnJhY3Rpb24KICAg
IH07CgogICAgZW51bSBKb2luaW5nCiAgICB7CiAgICAgICAgT3RoZXJKb2luaW5nLCBEdWFsLCBS
aWdodCwgQ2VudGVyCiAgICB9OwoKICAgIGVudW0gQ29tYmluaW5nQ2xhc3MKICAgIHsKICAgICAg
ICBDb21iaW5pbmdfQmVsb3dMZWZ0QXR0YWNoZWQgPSAyMDAsCiAgICAgICAgQ29tYmluaW5nX0Jl
bG93QXR0YWNoZWQgPSAyMDIsCiAgICAgICAgQ29tYmluaW5nX0JlbG93UmlnaHRBdHRhY2hlZCA9
IDIwNCwKICAgICAgICBDb21iaW5pbmdfTGVmdEF0dGFjaGVkID0gMjA4LAogICAgICAgIENvbWJp
bmluZ19SaWdodEF0dGFjaGVkID0gMjEwLAogICAgICAgIENvbWJpbmluZ19BYm92ZUxlZnRBdHRh
Y2hlZCA9IDIxMiwKICAgICAgICBDb21iaW5pbmdfQWJvdmVBdHRhY2hlZCA9IDIxNCwKICAgICAg
ICBDb21iaW5pbmdfQWJvdmVSaWdodEF0dGFjaGVkID0gMjE2LAoKICAgICAgICBDb21iaW5pbmdf
QmVsb3dMZWZ0ID0gMjE4LAogICAgICAgIENvbWJpbmluZ19CZWxvdyA9IDIyMCwKICAgICAgICBD
b21iaW5pbmdfQmVsb3dSaWdodCA9IDIyMiwKICAgICAgICBDb21iaW5pbmdfTGVmdCA9IDIyNCwK
ICAgICAgICBDb21iaW5pbmdfUmlnaHQgPSAyMjYsCiAgICAgICAgQ29tYmluaW5nX0Fib3ZlTGVm
dCA9IDIyOCwKICAgICAgICBDb21iaW5pbmdfQWJvdmUgPSAyMzAsCiAgICAgICAgQ29tYmluaW5n
X0Fib3ZlUmlnaHQgPSAyMzIsCgogICAgICAgIENvbWJpbmluZ19Eb3VibGVCZWxvdyA9IDIzMywK
ICAgICAgICBDb21iaW5pbmdfRG91YmxlQWJvdmUgPSAyMzQsCiAgICAgICAgQ29tYmluaW5nX0lv
dGFTdWJzY3JpcHQgPSAyNDAKICAgIH07CgoKCiAgICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0Owog
ICAgUUNoYXIgbG93ZXIoKSBjb25zdDsKICAgIFFDaGFyIHVwcGVyKCkgY29uc3Q7CgogICAgQ2F0
ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsKICAgIERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsK
ICAgIEpvaW5pbmcgam9pbmluZygpIGNvbnN0OwogICAgYm9vbCBtaXJyb3JlZCgpIGNvbnN0Owog
ICAgUUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3Q7CiAgICBjb25zdCBRU3RyaW5nICZkZWNvbXBv
c2l0aW9uKCkgY29uc3Q7CiAgICBEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25z
dDsKICAgIHVuc2lnbmVkIGNoYXIgY29tYmluaW5nQ2xhc3MoKSBjb25zdDsKCiAgICBjaGFyIGxh
dGluMSgpIGNvbnN0IHsgcmV0dXJuIHVjcyA+IDB4ZmYgPyAwIDogKGNoYXIpIHVjczsgfQogICAg
dXNob3J0IHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiB1Y3M7IH0KICAgIHVzaG9ydCAmdW5pY29k
ZSgpIHsgcmV0dXJuIHVjczsgfQoKCiAgICBvcGVyYXRvciBjaGFyKCkgY29uc3QgeyByZXR1cm4g
bGF0aW4xKCk7IH0KCgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1bmljb2RlKCk9
PTA7IH0KICAgIGJvb2wgaXNQcmludCgpIGNvbnN0OwogICAgYm9vbCBpc1B1bmN0KCkgY29uc3Q7
CiAgICBib29sIGlzU3BhY2UoKSBjb25zdDsKICAgIGJvb2wgaXNNYXJrKCkgY29uc3Q7CiAgICBi
b29sIGlzTGV0dGVyKCkgY29uc3Q7CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CiAgICBib29s
IGlzTGV0dGVyT3JOdW1iZXIoKSBjb25zdDsKICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0OwogICAg
Ym9vbCBpc1N5bWJvbCgpIGNvbnN0OwoKICAgIHVjaGFyIGNlbGwoKSBjb25zdCB7IHJldHVybiAo
KHVjaGFyKSB1Y3MgJiAweGZmKTsgfQogICAgdWNoYXIgcm93KCkgY29uc3QgeyByZXR1cm4gKCh1
Y2hhcikgKHVjcz4+OCkmMHhmZik7IH0KICAgIHZvaWQgc2V0Q2VsbCggdWNoYXIgY2VsbCApIHsg
dWNzID0gKHVjcyAmIDB4ZmYwMCkgKyBjZWxsOyB9CiAgICB2b2lkIHNldFJvdyggdWNoYXIgcm93
ICkgeyB1Y3MgPSAoKCh1c2hvcnQpIHJvdyk8PDgpICsgKHVjcyYweGZmKTsgfQoKICAgIHN0YXRp
YyBib29sIG5ldHdvcmtPcmRlcmVkKCkgewogICAgICAgIGludCB3b3JkU2l6ZTsKICAgICAgICBi
b29sIGJpZ0VuZGlhbiA9IEZBTFNFOwogICAgICAgIHFTeXNJbmZvKCAmd29yZFNpemUsICZiaWdF
bmRpYW4gKTsKICAgICAgICByZXR1cm4gYmlnRW5kaWFuOwogICAgfQoKICAgIGZyaWVuZCBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KCBjaGFyIGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PSggUUNoYXIgYywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBi
b29sIG9wZXJhdG9yPT0oIFFDaGFyIGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oIFFDaGFyIGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGJvb2wg
b3BlcmF0b3I8PSggUUNoYXIgYywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9w
ZXJhdG9yPD0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KCBRQ2hhciBjMSwgUUNoYXIgYzIgKTsKCnByaXZhdGU6CiAgICB1c2hvcnQgdWNzOwoK
Cgp9IDsKCmlubGluZSBRQ2hhcjo6UUNoYXIoKSA6IHVjcyggMCApCgoKCnsKfQppbmxpbmUgUUNo
YXI6OlFDaGFyKCBjaGFyIGMgKSA6IHVjcyggKHVjaGFyKWMgKQoKCgp7Cn0KaW5saW5lIFFDaGFy
OjpRQ2hhciggdWNoYXIgYyApIDogdWNzKCBjICkKCgoKewp9CmlubGluZSBRQ2hhcjo6UUNoYXIo
IHVjaGFyIGMsIHVjaGFyIHIgKSA6IHVjcyggKHIgPDwgOCkgfCBjICkKCgoKewp9CmlubGluZSBR
Q2hhcjo6UUNoYXIoIGNvbnN0IFFDaGFyJiBjICkgOiB1Y3MoIGMudWNzICkKCgoKewp9Cgppbmxp
bmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQgcmMgKSA6IHVjcyggcmMgKQoKCgp7Cn0KaW5saW5lIFFD
aGFyOjpRQ2hhciggc2hvcnQgcmMgKSA6IHVjcyggKHVzaG9ydCkgcmMgKQoKCgp7Cn0KaW5saW5l
IFFDaGFyOjpRQ2hhciggdWludCByYyApIDogdWNzKCAodXNob3J0ICkgKHJjICYgMHhmZmZmKSAp
CgoKCnsKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBpbnQgcmMgKSA6IHVjcyggKHVzaG9ydCkgKHJj
ICYgMHhmZmZmKSApCgoKCnsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNo
YXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBjaCkgPT0gYy51Y3M7Cn0KCmlubGluZSBib29s
IG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gKCh1Y2hhcikgY2gp
ID09IGMudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIg
KQp7CiAgICByZXR1cm4gYzEudWNzID09IGMyLnVjczsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAgcmV0dXJuIGMxLnVjcyAhPSBjMi51Y3M7Cn0K
CmlubGluZSBib29sIG9wZXJhdG9yIT0oIGNoYXIgY2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4g
KCh1Y2hhciljaCkgIT0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMs
IGNoYXIgY2ggKQp7CiAgICByZXR1cm4gKCh1Y2hhcikgY2gpICE9IGMudWNzOwp9CgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuIGMudWNzIDw9
ICgodWNoYXIpIGNoKTsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIg
YyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBjaCkgPD0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9w
ZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBjMS51Y3MgPD0gYzIu
dWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1
cm4gY2ggPD0gYzsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj49KCBjaGFyIGNoLCBRQ2hhciBjICkg
eyByZXR1cm4gYyA8PSBjaDsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNo
YXIgYzIgKSB7IHJldHVybiBjMiA8PSBjMTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFy
IGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPD1jKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwo
IGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiAhKGM8PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPj1jKTsgfQpp
bmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiAhKGM+PWNo
KTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJu
ICEoYzI+PWMxKTsgfQoKCnN0cnVjdCBRU3RyaW5nRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAg
IFFTdHJpbmdEYXRhKCkgOgogICAgICAgIFFTaGFyZWQoKSwgdW5pY29kZSgwKSwgYXNjaWkoMCks
IGxlbigwKSwgaXNzaW1wbGV0ZXh0KFRSVUUpLCBtYXhsKDApLCBpc2xhdGluMShGQUxTRSkgeyBy
ZWYoKTsgfQogICAgUVN0cmluZ0RhdGEoUUNoYXIgKnUsIHVpbnQgbCwgdWludCBtKSA6CiAgICAg
ICAgUVNoYXJlZCgpLCB1bmljb2RlKHUpLCBhc2NpaSgwKSwgbGVuKGwpLCBpc3NpbXBsZXRleHQo
RkFMU0UpLCBtYXhsKG0pLCBpc2xhdGluMShGQUxTRSkgeyB9CiAgICB+UVN0cmluZ0RhdGEoKSB7
IGlmICggdW5pY29kZSApIGRlbGV0ZVtdICgoY2hhciopdW5pY29kZSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICggYXNjaWkgKSBkZWxldGVbXSBhc2NpaTsgfQoKICAgIHZvaWQgZGVsZXRlU2Vs
ZigpOwogICAgUUNoYXIgKnVuaWNvZGU7CiAgICBjaGFyICphc2NpaTsKICAgIHZvaWQgc2V0RGly
dHkoKSB7CiAgICAgICAgaWYgKCBhc2NpaSApIHsKICAgICAgICAgICAgZGVsZXRlIFtdIGFzY2lp
OwogICAgICAgICAgICBhc2NpaSA9IDA7CiAgICAgICAgfQogICAgICAgIGlzc2ltcGxldGV4dCA9
IEZBTFNFOwogICAgfQoKCgogICAgdWludCBsZW4gOiAzMDsKCiAgICB1aW50IGlzc2ltcGxldGV4
dCA6IDE7CgoKCiAgICB1aW50IG1heGwgOiAzMDsKCiAgICB1aW50IGlzbGF0aW4xIDogMTsKCnBy
aXZhdGU6CgogICAgUVN0cmluZ0RhdGEoIGNvbnN0IFFTdHJpbmdEYXRhJiApOwogICAgUVN0cmlu
Z0RhdGEmIG9wZXJhdG9yPSggY29uc3QgUVN0cmluZ0RhdGEmICk7Cgp9OwoKCmNsYXNzIFFTdHJp
bmcKewpwdWJsaWM6CiAgICBRU3RyaW5nKCk7CiAgICBRU3RyaW5nKCBRQ2hhciApOwogICAgUVN0
cmluZyggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nKCBjb25zdCBRQnl0ZUFycmF5JiAp
OwogICAgUVN0cmluZyggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuZ3RoICk7CgogICAg
UVN0cmluZyggY29uc3QgY2hhciAqc3RyICk7CgoKICAgIFFTdHJpbmcoIGNvbnN0IHN0ZDo6c3Ry
aW5nJiApOwoKICAgIH5RU3RyaW5nKCk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBR
U3RyaW5nICYgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqICk7CgogICAg
UVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBzdGQ6OnN0cmluZyYgKTsKCiAgICBRU3RyaW5nICZv
cGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nJiApOwogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBRQ2hh
ciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNoYXIgYyApOwoKICAgIHN0YXRpYyBjb25z
dCBRU3RyaW5nIG51bGw7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgIHZvaWQgdHJ1bmNhdGUoIHVp
bnQgcG9zICk7CgogICAgUVN0cmluZyAmIGZpbGwoIFFDaGFyIGMsIGludCBsZW4gPSAtMSApOwoK
ICAgIFFTdHJpbmcgY29weSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgYXJnKCBsb25nIGEsIGludCBm
aWVsZHdpZHRoPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyggdWxvbmcg
YSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJn
KCBpbnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJp
bmcgYXJnKCB1aW50IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAg
ICBRU3RyaW5nIGFyZyggc2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBj
b25zdDsKICAgIFFTdHJpbmcgYXJnKCB1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJh
c2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBjaGFyIGEsIGludCBmaWVsZHdpZHRoPTAg
KSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBRQ2hhciBhLCBpbnQgZmllbGR3aWR0aD0wICkgY29u
c3Q7CiAgICBRU3RyaW5nIGFyZyggY29uc3QgUVN0cmluZyYgYSwgaW50IGZpZWxkd2lkdGg9MCAp
IGNvbnN0OwogICAgUVN0cmluZyBhcmcoIGRvdWJsZSBhLCBpbnQgZmllbGR3aWR0aD0wLCBjaGFy
IGZtdD0nZycsIGludCBwcmVjPS0xICkgY29uc3Q7CgoKICAgIFFTdHJpbmcgJnNwcmludGYoIGNv
bnN0IGNoYXIqIGZvcm1hdCwgLi4uICkKCiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAo
cHJpbnRmLCAyLCAzKSkpCgogICAgICAgIDsKCgogICAgaW50IGZpbmQoIFFDaGFyIGMsIGludCBp
bmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjaGFyIGMsIGludCBp
bmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjb25zdCBRU3RyaW5n
ICZzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgZmluZCgg
Y29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKCiAgICBpbnQgZmluZCggY29u
c3QgY2hhciogc3RyLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBRQ2hh
ciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldigg
Y2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJl
diggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7
CgogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGluZGV4PS0xICkgY29uc3Q7
CgoKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0tMSApIGNvbnN0
OwoKICAgIGludCBjb250YWlucyggUUNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBp
bnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3QKICAgICAgICAgICAgICAg
ICAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwgY3MpOyB9CgogICAgaW50IGNvbnRhaW5z
KCBjb25zdCBjaGFyKiBzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGludCBjb250YWlu
cyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgY29u
dGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwoKCiAgICBlbnVtIFNlY3Rpb25GbGFncyB7
CiAgICAgICAgU2VjdGlvbkRlZmF1bHQgPSAweDAwLAogICAgICAgIFNlY3Rpb25Ta2lwRW1wdHkg
PSAweDAxLAogICAgICAgIFNlY3Rpb25JbmNsdWRlTGVhZGluZ1NlcCA9IDB4MDIsCiAgICAgICAg
U2VjdGlvbkluY2x1ZGVUcmFpbGluZ1NlcCA9IDB4MDQsCiAgICAgICAgU2VjdGlvbkNhc2VJbnNl
bnNpdGl2ZVNlcHMgPSAweDA4CiAgICB9OwogICAgUVN0cmluZyBzZWN0aW9uKCBRQ2hhciBzZXAs
IGludCBzdGFydCwgaW50IGVuZCA9IDB4ZmZmZmZmZmYsIGludCBmbGFncyA9IFNlY3Rpb25EZWZh
dWx0ICkgY29uc3Q7CiAgICBRU3RyaW5nIHNlY3Rpb24oIGNoYXIgc2VwLCBpbnQgc3RhcnQsIGlu
dCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoK
ICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3QgY2hhciAqaW5fc2VwLCBpbnQgc3RhcnQsIGludCBl
bmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKICAg
IFFTdHJpbmcgc2VjdGlvbiggY29uc3QgUVN0cmluZyAmaW5fc2VwLCBpbnQgc3RhcnQsIGludCBl
bmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKICAg
IFFTdHJpbmcgc2VjdGlvbiggY29uc3QgUVJlZ0V4cCAmcmVnLCBpbnQgc3RhcnQsIGludCBlbmQg
PSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKCiAgICBR
U3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRU3RyaW5nIHJpZ2h0KCB1aW50IGxl
biApIGNvbnN0OwogICAgUVN0cmluZyBtaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZm
ZmYpIGNvbnN0OwoKICAgIFFTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZp
bGw9JyAnLCBib29sIHRydW5jPUZBTFNFKWNvbnN0OwogICAgUVN0cmluZyByaWdodEp1c3RpZnko
IHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CgogICAg
UVN0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUVN0cmluZyB1cHBlcigpIGNvbnN0OwoKICAgIFFT
dHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICBRU3RyaW5nIHNpbXBsaWZ5V2hpdGVT
cGFjZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY29uc3QgUVN0
cmluZyAmICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IFFDaGFyKiwg
dWludCBsZW4gKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgUUNoYXIgKTsKICAg
IFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciBjICkgeyByZXR1cm4gaW5zZXJ0KGlu
ZGV4LFFDaGFyKGMpKTsgfQogICAgUVN0cmluZyAmYXBwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5n
ICZhcHBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiAp
OwoKICAgIFFTdHJpbmcgJmFwcGVuZCggY29uc3QgUUJ5dGVBcnJheSAmICk7CiAgICBRU3RyaW5n
ICZhcHBlbmQoIGNvbnN0IGNoYXIgKiApOwoKCiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IHN0
ZDo6c3RyaW5nJiApOwoKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNoYXIgKTsKICAgIFFTdHJpbmcg
JnByZXBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYg
KTsKCiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKICAgIFFTdHJp
bmcgJnByZXBlbmQoIGNvbnN0IGNoYXIgKiApOwoKCiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25z
dCBzdGQ6OnN0cmluZyYgKTsKCiAgICBRU3RyaW5nICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQg
bGVuICk7CiAgICBRU3RyaW5nICZyZW1vdmUoIFFDaGFyIGMgKTsKICAgIFFTdHJpbmcgJnJlbW92
ZSggY2hhciBjICkgeyByZXR1cm4gcmVtb3ZlKCBRQ2hhcihjKSApOyB9CiAgICBRU3RyaW5nICZy
ZW1vdmUoIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIFFTdHJpbmcgJnJlbW92ZSggY29uc3QgUVJl
Z0V4cCAmICk7CgoKICAgIFFTdHJpbmcgJnJlbW92ZSggY29uc3QgY2hhciAqICk7CgogICAgUVN0
cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFTdHJpbmcgJiApOwog
ICAgUVN0cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFDaGFyKiwg
dWludCBjbGVuICk7CiAgICBRU3RyaW5nICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwg
UUNoYXIgKTsKICAgIFFTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjaGFy
IGMgKQogICAgeyByZXR1cm4gcmVwbGFjZSggaW5kZXgsIGxlbiwgUUNoYXIoYykgKTsgfQogICAg
UVN0cmluZyAmcmVwbGFjZSggUUNoYXIgYywgY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5n
ICZyZXBsYWNlKCBjaGFyIGMsIGNvbnN0IFFTdHJpbmcgJiBhZnRlciApCiAgICB7IHJldHVybiBy
ZXBsYWNlKCBRQ2hhcihjKSwgYWZ0ZXIgKTsgfQogICAgUVN0cmluZyAmcmVwbGFjZSggY29uc3Qg
UVN0cmluZyAmLCBjb25zdCBRU3RyaW5nICYgKTsKCiAgICBRU3RyaW5nICZyZXBsYWNlKCBjb25z
dCBRUmVnRXhwICYsIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIFFTdHJpbmcgJnJlcGxhY2UoIFFD
aGFyLCBRQ2hhciApOwoKICAgIHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEw
ICkgY29uc3Q7CiAgICB1c2hvcnQgdG9VU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkg
Y29uc3Q7CiAgICBpbnQgdG9JbnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAg
ICB1aW50IHRvVUludCggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGxvbmcg
dG9Mb25nKCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWxvbmcgdG9VTG9u
ZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJv
b2wgKm9rPTAgKSBjb25zdDsKICAgIGRvdWJsZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0
OwoKICAgIFFTdHJpbmcgJnNldE51bSggc2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5n
ICZzZXROdW0oIHVzaG9ydCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggaW50
LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1aW50LCBpbnQgYmFzZT0xMCAp
OwogICAgUVN0cmluZyAmc2V0TnVtKCBsb25nLCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAm
c2V0TnVtKCB1bG9uZywgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZmxvYXQs
IGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZG91YmxlLCBj
aGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBsb25n
LCBpbnQgYmFzZT0xMCApOwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCB1bG9uZywgaW50IGJh
c2U9MTApOwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBpbnQsIGludCBiYXNlPTEwICk7CiAg
ICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIHVpbnQsIGludCBiYXNlPTEwKTsKICAgIHN0YXRpYyBR
U3RyaW5nIG51bWJlciggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgdm9p
ZCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIFFDaGFyIGMgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRv
cis9KCBjb25zdCBRU3RyaW5nICZzdHIgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjb25z
dCBRQnl0ZUFycmF5ICZzdHIgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yKz0oIGNvbnN0IGNoYXIg
KnN0ciApOwoKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjb25zdCBzdGQ6OnN0cmluZyYgKTsK
CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRv
cis9KCBjaGFyIGMgKTsKCiAgICBRQ2hhciBhdCggdWludCBpICkgY29uc3QKICAgICAgICB7IHJl
dHVybiBpIDwgZC0+bGVuID8gZC0+dW5pY29kZVtpXSA6IFFDaGFyOjpudWxsOyB9CiAgICBRQ2hh
ciBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0IHsgcmV0dXJuIGF0KCh1aW50KWkpOyB9CiAgICBR
Q2hhclJlZiBhdCggdWludCBpICk7CiAgICBRQ2hhclJlZiBvcGVyYXRvcltdKCBpbnQgaSApOwoK
ICAgIFFDaGFyIGNvbnN0cmVmKHVpbnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiBhdChpKTsg
fQogICAgUUNoYXImIHJlZih1aW50IGkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoIGQtPmNv
dW50ICE9IDEgfHwgaSA+PSBkLT5sZW4gKQogICAgICAgICAgICAgICAgc3ViYXQoIGkgKTsKICAg
ICAgICAgICAgZC0+c2V0RGlydHkoKTsKICAgICAgICAgICAgcmV0dXJuIGQtPnVuaWNvZGVbaV07
CiAgICAgICAgfQoKICAgIGNvbnN0IFFDaGFyKiB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gZC0+
dW5pY29kZTsgfQogICAgY29uc3QgY2hhciogYXNjaWkoKSBjb25zdDsKICAgIHN0YXRpYyBRU3Ry
aW5nIGZyb21Bc2NpaShjb25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CiAgICBjb25zdCBjaGFyKiBs
YXRpbjEoKSBjb25zdDsKICAgIHN0YXRpYyBRU3RyaW5nIGZyb21MYXRpbjEoY29uc3QgY2hhcios
IGludCBsZW49LTEpOwogICAgUUNTdHJpbmcgdXRmOCgpIGNvbnN0OwogICAgc3RhdGljIFFTdHJp
bmcgZnJvbVV0ZjgoY29uc3QgY2hhciosIGludCBsZW49LTEpOwogICAgUUNTdHJpbmcgbG9jYWw4
Qml0KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0KGNvbnN0IGNoYXIq
LCBpbnQgbGVuPS0xKTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CgogICAgb3BlcmF0b3Ig
Y29uc3QgY2hhciAqKCkgY29uc3QgeyByZXR1cm4gYXNjaWkoKTsgfQoKCiAgICBvcGVyYXRvciBz
dGQ6OnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGFzY2lpKCk7IH0KCgogICAgc3RhdGljIFFTdHJp
bmcgZnJvbVVjczIoIGNvbnN0IHVuc2lnbmVkIHNob3J0ICp1Y3MyICk7CiAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqdWNzMigpIGNvbnN0OwoKICAgIFFTdHJpbmcgJnNldFVuaWNvZGUoIGNvbnN0
IFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmc2V0VW5pY29kZUNvZGVz
KCBjb25zdCB1c2hvcnQqIHVuaWNvZGVfYXNfdXNob3J0cywgdWludCBsZW4gKTsKICAgIFFTdHJp
bmcgJnNldEFzY2lpKCBjb25zdCBjaGFyKiwgaW50IGxlbj0tMSApOwogICAgUVN0cmluZyAmc2V0
TGF0aW4xKCBjb25zdCBjaGFyKiwgaW50IGxlbj0tMSApOwoKICAgIGludCBjb21wYXJlKCBjb25z
dCBRU3RyaW5nJiBzICkgY29uc3Q7CiAgICBzdGF0aWMgaW50IGNvbXBhcmUoIGNvbnN0IFFTdHJp
bmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICB7IHJldHVybiBzMS5jb21wYXJlKCBzMiAp
OyB9CgogICAgaW50IGxvY2FsZUF3YXJlQ29tcGFyZSggY29uc3QgUVN0cmluZyYgcyApIGNvbnN0
OwogICAgc3RhdGljIGludCBsb2NhbGVBd2FyZUNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMxLCBj
b25zdCBRU3RyaW5nJiBzMiApCiAgICB7IHJldHVybiBzMS5sb2NhbGVBd2FyZUNvbXBhcmUoIHMy
ICk7IH0KCgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAm
LCBRU3RyaW5nICYgKTsKCgogICAgdm9pZCBjb21wb3NlKCk7CgoKICAgIGNvbnN0IGNoYXIqIGRh
dGEoKSBjb25zdCB7IHJldHVybiBhc2NpaSgpOyB9CgoKICAgIGJvb2wgc3RhcnRzV2l0aCggY29u
c3QgUVN0cmluZyYgKSBjb25zdDsKICAgIGJvb2wgZW5kc1dpdGgoIGNvbnN0IFFTdHJpbmcmICkg
Y29uc3Q7CgogICAgdm9pZCBzZXRMZW5ndGgoIHVpbnQgbmV3TGVuZ3RoICk7CgogICAgYm9vbCBz
aW1wbGVUZXh0KCkgY29uc3QgeyBpZiAoICFkLT5pc3NpbXBsZXRleHQgKSBjaGVja1NpbXBsZVRl
eHQoKTsgcmV0dXJuIChib29sKWQtPmlzc2ltcGxldGV4dDsgfQogICAgYm9vbCBpc1JpZ2h0VG9M
ZWZ0KCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFTdHJpbmcoIGludCBzaXplLCBib29sICk7Cgog
ICAgdm9pZCBkZXJlZigpOwogICAgdm9pZCByZWFsX2RldGFjaCgpOwogICAgdm9pZCBzdWJhdCgg
dWludCApOwogICAgYm9vbCBmaW5kQXJnKGludCYgcG9zLCBpbnQmIGxlbikgY29uc3Q7CgogICAg
dm9pZCBjaGVja1NpbXBsZVRleHQoKSBjb25zdDsKCiAgICBzdGF0aWMgUUNoYXIqIGxhdGluMVRv
VW5pY29kZSggY29uc3QgY2hhciosIHVpbnQgKiBsZW4sIHVpbnQgbWF4bGVuPSh1aW50KS0xICk7
CiAgICBzdGF0aWMgUUNoYXIqIGxhdGluMVRvVW5pY29kZSggY29uc3QgUUJ5dGVBcnJheSYsIHVp
bnQgKiBsZW4gKTsKICAgIHN0YXRpYyBjaGFyKiB1bmljb2RlVG9MYXRpbjEoIGNvbnN0IFFDaGFy
KiwgdWludCBsZW4gKTsKCiAgICBRU3RyaW5nRGF0YSAqZDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0
YSogc2hhcmVkX251bGw7CiAgICBzdGF0aWMgUVN0cmluZ0RhdGEqIG1ha2VTaGFyZWROdWxsKCk7
CgogICAgZnJpZW5kIGNsYXNzIFFDb25zdFN0cmluZzsKICAgIGZyaWVuZCBjbGFzcyBRVGV4dFN0
cmVhbTsKICAgIFFTdHJpbmcoIFFTdHJpbmdEYXRhKiBkZCwgYm9vbCApIDogZChkZCkgeyB9CgoK
ICAgIHZvaWQgZGV0YWNoKCk7CiAgICBmcmllbmQgY2xhc3MgUURlZXBDb3B5PFFTdHJpbmc+Owp9
OwoKY2xhc3MgUUNoYXJSZWYgewogICAgZnJpZW5kIGNsYXNzIFFTdHJpbmc7CiAgICBRU3RyaW5n
JiBzOwogICAgdWludCBwOwogICAgUUNoYXJSZWYoUVN0cmluZyogc3RyLCB1aW50IHBvcykgOiBz
KCpzdHIpLCBwKHBvcykgeyB9CgpwdWJsaWM6CgoKCgogICAgdXNob3J0IHVuaWNvZGUoKSBjb25z
dCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVuaWNvZGUoKTsgfQogICAgY2hhciBsYXRpbjEoKSBj
b25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmxhdGluMSgpOyB9CgoKICAgIFFDaGFyUmVmIG9w
ZXJhdG9yPShjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJS
ZWYgb3BlcmF0b3I9KHVjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAg
UUNoYXJSZWYgb3BlcmF0b3I9KFFDaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsg
fQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGNvbnN0IFFDaGFyUmVmJiBjICkgeyBzLnJlZihwKT1j
LnVuaWNvZGUoKTsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odXNob3J0
IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRv
cj0oc2hvcnQgcmMgKSB7IHMucmVmKHApPXJjOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVm
IG9wZXJhdG9yPSh1aW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBR
Q2hhclJlZiBvcGVyYXRvcj0oaW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9
CgogICAgb3BlcmF0b3IgUUNoYXIgKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKTsgfQoK
CiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQogICAgYm9v
bCBpc1ByaW50KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc1ByaW50KCk7IH0KICAg
IGJvb2wgaXNQdW5jdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNQdW5jdCgpOyB9
CiAgICBib29sIGlzU3BhY2UoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzU3BhY2Uo
KTsgfQogICAgYm9vbCBpc01hcmsoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTWFy
aygpOyB9CiAgICBib29sIGlzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5p
c0xldHRlcigpOyB9CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJl
ZihwKS5pc051bWJlcigpOyB9CiAgICBib29sIGlzTGV0dGVyT3JOdW1iZXIoKSB7IHJldHVybiBz
LmNvbnN0cmVmKHApLmlzTGV0dGVyT3JOdW1iZXIoKTsgfQogICAgYm9vbCBpc0RpZ2l0KCkgY29u
c3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0RpZ2l0KCk7IH0KCiAgICBpbnQgZGlnaXRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlnaXRWYWx1ZSgpOyB9CiAgICBRQ2hh
ciBsb3dlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkubG93ZXIoKTsgfQogICAgUUNo
YXIgdXBwZXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVwcGVyKCk7IH0KCiAgICBR
Q2hhcjo6Q2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmNh
dGVnb3J5KCk7IH0KICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gcy5jb25zdHJlZihwKS5kaXJlY3Rpb24oKTsgfQogICAgUUNoYXI6OkpvaW5pbmcgam9pbmlu
ZygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuam9pbmluZygpOyB9CiAgICBib29sIG1p
cnJvcmVkKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5taXJyb3JlZCgpOyB9CiAgICBR
Q2hhciBtaXJyb3JlZENoYXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLm1pcnJvcmVk
Q2hhcigpOyB9CiAgICBjb25zdCBRU3RyaW5nICZkZWNvbXBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gcy5jb25zdHJlZihwKS5kZWNvbXBvc2l0aW9uKCk7IH0KICAgIFFDaGFyOjpEZWNvbXBvc2l0
aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRlY29t
cG9zaXRpb25UYWcoKTsgfQogICAgdW5zaWduZWQgY2hhciBjb21iaW5pbmdDbGFzcygpIGNvbnN0
IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuY29tYmluaW5nQ2xhc3MoKTsgfQoKCiAgICB1Y2hhciBj
ZWxsKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jZWxsKCk7IH0KICAgIHVjaGFyIHJv
dygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkucm93KCk7IH0KCn07CgppbmxpbmUgUUNo
YXJSZWYgUVN0cmluZzo6YXQoIHVpbnQgaSApIHsgcmV0dXJuIFFDaGFyUmVmKHRoaXMsaSk7IH0K
aW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6Om9wZXJhdG9yW10oIGludCBpICkgeyByZXR1cm4gYXQo
KHVpbnQpaSk7IH0KCgpjbGFzcyBRQ29uc3RTdHJpbmcgOiBwcml2YXRlIFFTdHJpbmcgewpwdWJs
aWM6CiAgICBRQ29uc3RTdHJpbmcoIGNvbnN0IFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbmd0aCAp
OwogICAgflFDb25zdFN0cmluZygpOwogICAgY29uc3QgUVN0cmluZyYgc3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0
YVN0cmVhbSAmLCBjb25zdCBRU3RyaW5nICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
RGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKIyA3NjEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j
bHVkZS9xc3RyaW5nLmgiCmlubGluZSBRU3RyaW5nOjpRU3RyaW5nKCkgOgogICAgZChzaGFyZWRf
bnVsbCA/IHNoYXJlZF9udWxsIDogbWFrZVNoYXJlZE51bGwoKSkKewogICAgZC0+cmVmKCk7Cn0K
CmlubGluZSBRU3RyaW5nOjp+UVN0cmluZygpCnsKICAgIGlmICggZC0+ZGVyZWYoKSApIHsKICAg
ICAgICBpZiAoIGQgIT0gc2hhcmVkX251bGwgKQogICAgICAgICAgICBkLT5kZWxldGVTZWxmKCk7
CiAgICB9Cn0KCgppbmxpbmUgdm9pZCBRU3RyaW5nOjpkZXRhY2goKQp7IHJlYWxfZGV0YWNoKCk7
IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OnNlY3Rpb24oIFFDaGFyIHNlcCwgaW50IHN0YXJ0
LCBpbnQgZW5kLCBpbnQgZmxhZ3MgKSBjb25zdAp7IHJldHVybiBzZWN0aW9uKFFTdHJpbmcoc2Vw
KSwgc3RhcnQsIGVuZCwgZmxhZ3MpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjpzZWN0aW9u
KCBjaGFyIHNlcCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgZmxhZ3MgKSBjb25zdAp7IHJldHVy
biBzZWN0aW9uKFFDaGFyKHNlcCksIHN0YXJ0LCBlbmQsIGZsYWdzKTsgfQoKCmlubGluZSBRU3Ry
aW5nIFFTdHJpbmc6OnNlY3Rpb24oIGNvbnN0IGNoYXIgKmluX3NlcCwgaW50IHN0YXJ0LCBpbnQg
ZW5kLCBpbnQgZmxhZ3MgKSBjb25zdAp7IHJldHVybiBzZWN0aW9uKFFTdHJpbmcoaW5fc2VwKSwg
c3RhcnQsIGVuZCwgZmxhZ3MpOyB9CgoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6Om9wZXJhdG9y
PSggUUNoYXIgYyApCnsgKnRoaXMgPSBRU3RyaW5nKGMpOyByZXR1cm4gKnRoaXM7IH0KCmlubGlu
ZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIGNoYXIgYyApCnsgKnRoaXMgPSBRU3RyaW5n
KFFDaGFyKGMpKTsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc051bGwo
KSBjb25zdAp7IHJldHVybiB1bmljb2RlKCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUVN0cmluZzo6
b3BlcmF0b3IhKCkgY29uc3QKeyByZXR1cm4gaXNOdWxsKCk7IH0KCmlubGluZSB1aW50IFFTdHJp
bmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJuIGQtPmxlbjsgfQoKaW5saW5lIGJvb2wgUVN0cmlu
Zzo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIGxlbmd0aCgpID09IDA7IH0KCmlubGluZSBRU3Ry
aW5nIFFTdHJpbmc6OmNvcHkoKSBjb25zdAp7IHJldHVybiBRU3RyaW5nKCAqdGhpcyApOyB9Cgpp
bmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY29uc3QgUVN0cmluZyAmIHMgKQp7IHJl
dHVybiBpbnNlcnQoMCxzKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnByZXBlbmQoIFFD
aGFyIGMgKQp7IHJldHVybiBpbnNlcnQoMCxjKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6
OnByZXBlbmQoIGNoYXIgYyApCnsgcmV0dXJuIGluc2VydCgwLGMpOyB9CgoKaW5saW5lIFFTdHJp
bmcgJlFTdHJpbmc6OnByZXBlbmQoIGNvbnN0IFFCeXRlQXJyYXkgJiBzICkKeyByZXR1cm4gaW5z
ZXJ0KDAscy5kYXRhKCkpOyB9CgoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpwcmVwZW5kKCBj
b25zdCBzdGQ6OnN0cmluZyYgcyApCnsgcmV0dXJuIGluc2VydCgwLCBzKTsgfQoKCmlubGluZSBR
U3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiBzICkKeyByZXR1cm4gb3Bl
cmF0b3IrPShzKTsgfQoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IFFC
eXRlQXJyYXkgJnMgKQp7IHJldHVybiBvcGVyYXRvcis9KHMuZGF0YSgpKTsgfQoKaW5saW5lIFFT
dHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggY29uc3QgY2hhciAqIHMgKQp7IHJldHVybiBvcGVyYXRv
cis9KHMpOyB9CgoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggUUNoYXIgYyApCnsg
cmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQo
IGNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCgppbmxpbmUgUVN0cmluZyAmUVN0
cmluZzo6b3BlcmF0b3IrPSggY29uc3QgUUJ5dGVBcnJheSAmcyApCnsgcmV0dXJuIG9wZXJhdG9y
Kz0ocy5kYXRhKCkpOyB9CgoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0
IHN0ZDo6c3RyaW5nJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQppbmxpbmUgUVN0cmlu
ZyAmUVN0cmluZzo6b3BlcmF0b3IrPSggY29uc3Qgc3RkOjpzdHJpbmcmIHMgKQp7IHJldHVybiBv
cGVyYXRvcis9KHMuY19zdHIoKSk7IH0KCgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVt
KCBzaG9ydCBuLCBpbnQgYmFzZSApCnsgcmV0dXJuIHNldE51bSgobG9uZyluLCBiYXNlKTsgfQoK
aW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSggdXNob3J0IG4sIGludCBiYXNlICkKeyBy
ZXR1cm4gc2V0TnVtKCh1bG9uZyluLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6
OnNldE51bSggaW50IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2Up
OyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCB1aW50IG4sIGludCBiYXNlICkK
eyByZXR1cm4gc2V0TnVtKCh1bG9uZyluLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJp
bmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQgcHJlYyApCnsgcmV0dXJuIHNldE51bSgo
ZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKGludCBhLCBp
bnQgZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVs
ZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKHVpbnQgYSwgaW50
IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJldHVybiBhcmcoKHVsb25nKWEsIGZpZWxk
d2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoc2hvcnQgYSwgaW50
IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJldHVybiBhcmcoKGxvbmcpYSwgZmllbGR3
aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyh1c2hvcnQgYSwgaW50
IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJldHVybiBhcmcoKHVsb25nKWEsIGZpZWxk
d2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgaW50IFFTdHJpbmc6OmZpbmQoIGNoYXIgYywgaW50IGlu
ZGV4LCBib29sIGNzICkgY29uc3QKeyByZXR1cm4gZmluZChRQ2hhcihjKSwgaW5kZXgsIGNzKTsg
fQoKaW5saW5lIGludCBRU3RyaW5nOjpmaW5kUmV2KCBjaGFyIGMsIGludCBpbmRleCwgYm9vbCBj
cykgY29uc3QKeyByZXR1cm4gZmluZFJldiggUUNoYXIoYyksIGluZGV4LCBjcyApOyB9CgoKaW5s
aW5lIGludCBRU3RyaW5nOjpmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0
CnsgcmV0dXJuIGZpbmQoUVN0cmluZzo6ZnJvbUFzY2lpKHN0ciksIGluZGV4KTsgfQoKaW5saW5l
IGludCBRU3RyaW5nOjpmaW5kUmV2KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0
CnsgcmV0dXJuIGZpbmRSZXYoUVN0cmluZzo6ZnJvbUFzY2lpKHN0ciksIGluZGV4KTsgfQoKCgoK
CgoKIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMy
ICk7CiBib29sIG9wZXJhdG9yPCggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMy
ICk7CiBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZz
MiApOwogYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAm
czIgKTsKIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAm
czIgKTsKIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcg
JnMyICk7CgogYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAq
czIgKTsKIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIg
KTsKIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7
CiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwog
Ym9vbCBvcGVyYXRvcj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9v
bCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJvb2wg
b3BlcmF0b3IhPSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9w
ZXJhdG9yPCggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJh
dG9yPD0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVyYXRv
cj09KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKCiBib29sIG9wZXJhdG9y
Pj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKCiBpbmxpbmUgY29uc3Qg
UVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiAp
CnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsK
fQoKCiBpbmxpbmUgY29uc3QgUVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBj
b25zdCBjaGFyICpzMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IFFTdHJp
bmc6OmZyb21Bc2NpaShzMik7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJp
bmcgb3BlcmF0b3IrKCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBR
U3RyaW5nIHRtcCA9IFFTdHJpbmc6OmZyb21Bc2NpaSggczEgKTsKICAgIHRtcCArPSBzMjsKICAg
IHJldHVybiB0bXA7Cn0KCgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBR
U3RyaW5nICZzMSwgUUNoYXIgYzIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEgKTsKICAgIHRtcCAr
PSBjMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgY29uc3QgUVN0cmluZyBvcGVyYXRvciso
IGNvbnN0IFFTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAg
ICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3Bl
cmF0b3IrKCBRQ2hhciBjMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3RyaW5nIHRtcDsK
ICAgIHRtcCArPSBjMTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUg
Y29uc3QgUVN0cmluZyBvcGVyYXRvcisoIGNoYXIgYzEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewog
ICAgUVN0cmluZyB0bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4g
dG1wOwp9CiMgNDUgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAy
CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FuYW1lc3BhY2UuaCIgMQojIDQyICIv
dXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW5hbWVzcGFjZS5oIgojIDEgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p
bmNsdWRlL3FuYW1lc3BhY2UuaCIgMgoKCgpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDdXJzb3I7CgoK
Y2xhc3MgUXQgewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgY29sb3IwOwogICAg
c3RhdGljIGNvbnN0IFFDb2xvciAmIGNvbG9yMTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBi
bGFjazsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiB3aGl0ZTsKICAgIHN0YXRpYyBjb25zdCBR
Q29sb3IgJiBkYXJrR3JheTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBncmF5OwogICAgc3Rh
dGljIGNvbnN0IFFDb2xvciAmIGxpZ2h0R3JheTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBy
ZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZ3JlZW47CiAgICBzdGF0aWMgY29uc3QgUUNv
bG9yICYgYmx1ZTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBjeWFuOwogICAgc3RhdGljIGNv
bnN0IFFDb2xvciAmIG1hZ2VudGE7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgeWVsbG93Owog
ICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtSZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9y
ICYgZGFya0dyZWVuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtCbHVlOwogICAgc3Rh
dGljIGNvbnN0IFFDb2xvciAmIGRhcmtDeWFuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRh
cmtNYWdlbnRhOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtZZWxsb3c7CgoKICAgIGVu
dW0gQnV0dG9uU3RhdGUgewogICAgICAgIE5vQnV0dG9uID0gMHgwMDAwLAogICAgICAgIExlZnRC
dXR0b24gPSAweDAwMDEsCiAgICAgICAgUmlnaHRCdXR0b24gPSAweDAwMDIsCiAgICAgICAgTWlk
QnV0dG9uID0gMHgwMDA0LAogICAgICAgIE1vdXNlQnV0dG9uTWFzayA9IDB4MDAwNywKICAgICAg
ICBTaGlmdEJ1dHRvbiA9IDB4MDEwMCwKICAgICAgICBDb250cm9sQnV0dG9uID0gMHgwMjAwLAog
ICAgICAgIEFsdEJ1dHRvbiA9IDB4MDQwMCwKICAgICAgICBNZXRhQnV0dG9uID0gMHgwODAwLAog
ICAgICAgIEtleUJ1dHRvbk1hc2sgPSAweDBmMDAsCiAgICAgICAgS2V5cGFkID0gMHg0MDAwCiAg
ICB9OwoKCgogICAgZW51bSBPcmllbnRhdGlvbiB7CiAgICAgICAgSG9yaXpvbnRhbCA9IDAsCiAg
ICAgICAgVmVydGljYWwKICAgIH07CgoKCgoKCiAgICBlbnVtIEFsaWdubWVudEZsYWdzIHsKICAg
ICAgICBBbGlnbkF1dG8gPSAweDAwMDAsCiAgICAgICAgQWxpZ25MZWZ0ID0gMHgwMDAxLAogICAg
ICAgIEFsaWduUmlnaHQgPSAweDAwMDIsCiAgICAgICAgQWxpZ25IQ2VudGVyID0gMHgwMDA0LAog
ICAgICAgIEFsaWduSnVzdGlmeSA9IDB4MDAwOCwKICAgICAgICBBbGlnbkhvcml6b250YWxfTWFz
ayA9IEFsaWduTGVmdCB8IEFsaWduUmlnaHQgfCBBbGlnbkhDZW50ZXIgfCBBbGlnbkp1c3RpZnks
CiAgICAgICAgQWxpZ25Ub3AgPSAweDAwMTAsCiAgICAgICAgQWxpZ25Cb3R0b20gPSAweDAwMjAs
CiAgICAgICAgQWxpZ25WQ2VudGVyID0gMHgwMDQwLAogICAgICAgIEFsaWduVmVydGljYWxfTWFz
ayA9IEFsaWduVG9wIHwgQWxpZ25Cb3R0b20gfCBBbGlnblZDZW50ZXIsCiAgICAgICAgQWxpZ25D
ZW50ZXIgPSBBbGlnblZDZW50ZXIgfCBBbGlnbkhDZW50ZXIKICAgIH07CgoKICAgIGVudW0gVGV4
dEZsYWdzIHsKICAgICAgICBTaW5nbGVMaW5lID0gMHgwMDgwLAogICAgICAgIERvbnRDbGlwID0g
MHgwMTAwLAogICAgICAgIEV4cGFuZFRhYnMgPSAweDAyMDAsCiAgICAgICAgU2hvd1ByZWZpeCA9
IDB4MDQwMCwKICAgICAgICBXb3JkQnJlYWsgPSAweDA4MDAsCiAgICAgICAgQnJlYWtBbnl3aGVy
ZSA9IDB4MTAwMCwKICAgICAgICBEb250UHJpbnQgPSAweDIwMDAsCiAgICAgICAgTm9BY2NlbCA9
IDB4NDAwMAogICAgfTsKCgogICAgdHlwZWRlZiB1aW50IFdTdGF0ZTsKCgogICAgZW51bSBXaWRn
ZXRTdGF0ZSB7CiAgICAgICAgV1N0YXRlX0NyZWF0ZWQgPSAweDAwMDAwMDAxLAogICAgICAgIFdT
dGF0ZV9EaXNhYmxlZCA9IDB4MDAwMDAwMDIsCiAgICAgICAgV1N0YXRlX1Zpc2libGUgPSAweDAw
MDAwMDA0LAogICAgICAgIFdTdGF0ZV9Gb3JjZUhpZGUgPSAweDAwMDAwMDA4LAogICAgICAgIFdT
dGF0ZV9Pd25DdXJzb3IgPSAweDAwMDAwMDEwLAogICAgICAgIFdTdGF0ZV9Nb3VzZVRyYWNraW5n
ID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3RhdGVfQ29tcHJlc3NLZXlzID0gMHgwMDAwMDA0MCwK
ICAgICAgICBXU3RhdGVfQmxvY2tVcGRhdGVzID0gMHgwMDAwMDA4MCwKICAgICAgICBXU3RhdGVf
SW5QYWludEV2ZW50ID0gMHgwMDAwMDEwMCwKICAgICAgICBXU3RhdGVfUmVwYXJlbnRlZCA9IDB4
MDAwMDAyMDAsCiAgICAgICAgV1N0YXRlX0NvbmZpZ1BlbmRpbmcgPSAweDAwMDAwNDAwLAogICAg
ICAgIFdTdGF0ZV9SZXNpemVkID0gMHgwMDAwMDgwMCwKICAgICAgICBXU3RhdGVfQXV0b01hc2sg
PSAweDAwMDAxMDAwLAogICAgICAgIFdTdGF0ZV9Qb2xpc2hlZCA9IDB4MDAwMDIwMDAsCiAgICAg
ICAgV1N0YXRlX0RORCA9IDB4MDAwMDQwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMCA9IDB4
MDAwMDgwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMSA9IDB4MDAwMTAwMDAsCiAgICAgICAg
V1N0YXRlX1Jlc2VydmVkMiA9IDB4MDAwMjAwMDAsCiAgICAgICAgV1N0YXRlX0NyZWF0ZWRIaWRk
ZW4gPSAweDAwMDQwMDAwLAogICAgICAgIFdTdGF0ZV9NYXhpbWl6ZWQgPSAweDAwMDgwMDAwLAog
ICAgICAgIFdTdGF0ZV9NaW5pbWl6ZWQgPSAweDAwMTAwMDAwLAogICAgICAgIFdTdGF0ZV9Gb3Jj
ZURpc2FibGVkID0gMHgwMDIwMDAwMCwKICAgICAgICBXU3RhdGVfRXhwb3NlZCA9IDB4MDA0MDAw
MDAsCiAgICAgICAgV1N0YXRlX0hhc01vdXNlID0gMHgwMDgwMDAwMAogICAgfTsKCgogICAgdHlw
ZWRlZiB1aW50IFdGbGFnczsKCgogICAgZW51bSBXaWRnZXRGbGFncyB7CiAgICAgICAgV1R5cGVf
VG9wTGV2ZWwgPSAweDAwMDAwMDAxLAogICAgICAgIFdUeXBlX0RpYWxvZyA9IDB4MDAwMDAwMDIs
CiAgICAgICAgV1R5cGVfUG9wdXAgPSAweDAwMDAwMDA0LAogICAgICAgIFdUeXBlX0Rlc2t0b3Ag
PSAweDAwMDAwMDA4LAogICAgICAgIFdUeXBlX01hc2sgPSAweDAwMDAwMDBmLAoKICAgICAgICBX
U3R5bGVfQ3VzdG9taXplID0gMHgwMDAwMDAxMCwKICAgICAgICBXU3R5bGVfTm9ybWFsQm9yZGVy
ID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3R5bGVfRGlhbG9nQm9yZGVyID0gMHgwMDAwMDA0MCwK
ICAgICAgICBXU3R5bGVfTm9Cb3JkZXIgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdHlsZV9UaXRs
ZSA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0eWxlX1N5c01lbnUgPSAweDAwMDAwMTAwLAogICAg
ICAgIFdTdHlsZV9NaW5pbWl6ZSA9IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0eWxlX01heGltaXpl
ID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3R5bGVfTWluTWF4ID0gV1N0eWxlX01pbmltaXplIHwg
V1N0eWxlX01heGltaXplLAogICAgICAgIFdTdHlsZV9Ub29sID0gMHgwMDAwMDgwMCwKICAgICAg
ICBXU3R5bGVfU3RheXNPblRvcCA9IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0eWxlX0NvbnRleHRI
ZWxwID0gMHgwMDAwNDAwMCwKICAgICAgICBXU3R5bGVfUmVzZXJ2ZWQgPSAweDAwMDA4MDAwLAog
ICAgICAgIFdTdHlsZV9NYXNrID0gMHgwMDAwZmZmMCwKCiAgICAgICAgV0Rlc3RydWN0aXZlQ2xv
c2UgPSAweDAwMDEwMDAwLAogICAgICAgIFdQYWludERlc2t0b3AgPSAweDAwMDIwMDAwLAogICAg
ICAgIFdQYWludFVuY2xpcHBlZCA9IDB4MDAwNDAwMDAsCiAgICAgICAgV1BhaW50Q2xldmVyID0g
MHgwMDA4MDAwMCwKICAgICAgICBXUmVzaXplTm9FcmFzZSA9IDB4MDAxMDAwMDAsCiAgICAgICAg
V01vdXNlTm9NYXNrID0gMHgwMDIwMDAwMCwKICAgICAgICBXU3RhdGljQ29udGVudHMgPSAweDAw
NDAwMDAwLAogICAgICAgIFdSZXBhaW50Tm9FcmFzZSA9IDB4MDA4MDAwMDAsCgogICAgICAgIFdY
MTFCeXBhc3NXTSA9IDB4MDEwMDAwMDAsCiAgICAgICAgV1dpbk93bkRDID0gMHgwMDAwMDAwMCwK
ICAgICAgICBXTWFjU2hlZXQgPSAweDAwMDAwMDAwLAojIDIwMyAiL3Vzci9sb2NhbC9xdC0zLjEu
MS9pbmNsdWRlL3FuYW1lc3BhY2UuaCIKICAgICAgICBXR3JvdXBMZWFkZXIgPSAweDAyMDAwMDAw
LAogICAgICAgIFdTaG93TW9kYWwgPSAweDA0MDAwMDAwLAogICAgICAgIFdOb01vdXNlUHJvcGFn
YXRpb24gPSAweDA4MDAwMDAwLAogICAgICAgIFdTdWJXaW5kb3cgPSAweDEwMDAwMDAwLAogICAg
ICAgIFdTdHlsZV9TcGxhc2ggPSBXU3R5bGVfTm9Cb3JkZXIgfCBXU3R5bGVfU3RheXNPblRvcAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBXU3R5bGVfVG9vbCB8IFdYMTFCeXBh
c3NXTSB8IFdXaW5Pd25EQwoKICAgICAgICAsCiAgICAgICAgV05vcnRoV2VzdEdyYXZpdHkgPSBX
U3RhdGljQ29udGVudHMsCiAgICAgICAgV1R5cGVfTW9kYWwgPSBXVHlwZV9EaWFsb2cgfCBXU2hv
d01vZGFsLAogICAgICAgIFdTdHlsZV9EaWFsb2cgPSBXVHlwZV9EaWFsb2csCiAgICAgICAgV1N0
eWxlX05vQm9yZGVyRXggPSBXU3R5bGVfTm9Cb3JkZXIKCiAgICB9OwoKCgoKCiAgICBlbnVtIElt
YWdlQ29udmVyc2lvbkZsYWdzIHsKICAgICAgICBDb2xvck1vZGVfTWFzayA9IDB4MDAwMDAwMDMs
CiAgICAgICAgQXV0b0NvbG9yID0gMHgwMDAwMDAwMCwKICAgICAgICBDb2xvck9ubHkgPSAweDAw
MDAwMDAzLAogICAgICAgIE1vbm9Pbmx5ID0gMHgwMDAwMDAwMiwKCgogICAgICAgIEFscGhhRGl0
aGVyX01hc2sgPSAweDAwMDAwMDBjLAogICAgICAgIFRocmVzaG9sZEFscGhhRGl0aGVyID0gMHgw
MDAwMDAwMCwKICAgICAgICBPcmRlcmVkQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA0LAogICAgICAg
IERpZmZ1c2VBbHBoYURpdGhlciA9IDB4MDAwMDAwMDgsCiAgICAgICAgTm9BbHBoYSA9IDB4MDAw
MDAwMGMsCgogICAgICAgIERpdGhlcl9NYXNrID0gMHgwMDAwMDAzMCwKICAgICAgICBEaWZmdXNl
RGl0aGVyID0gMHgwMDAwMDAwMCwKICAgICAgICBPcmRlcmVkRGl0aGVyID0gMHgwMDAwMDAxMCwK
ICAgICAgICBUaHJlc2hvbGREaXRoZXIgPSAweDAwMDAwMDIwLAoKCiAgICAgICAgRGl0aGVyTW9k
ZV9NYXNrID0gMHgwMDAwMDBjMCwKICAgICAgICBBdXRvRGl0aGVyID0gMHgwMDAwMDAwMCwKICAg
ICAgICBQcmVmZXJEaXRoZXIgPSAweDAwMDAwMDQwLAogICAgICAgIEF2b2lkRGl0aGVyID0gMHgw
MDAwMDA4MAogICAgfTsKCgogICAgZW51bSBCR01vZGUgewogICAgICAgIFRyYW5zcGFyZW50TW9k
ZSwKICAgICAgICBPcGFxdWVNb2RlCiAgICB9OwoKCgogICAgZW51bSBQYWludFVuaXQgewogICAg
ICAgIFBpeGVsVW5pdCwKICAgICAgICBMb01ldHJpY1VuaXQsCiAgICAgICAgSGlNZXRyaWNVbml0
LAogICAgICAgIExvRW5nbGlzaFVuaXQsCiAgICAgICAgSGlFbmdsaXNoVW5pdCwKICAgICAgICBU
d2lwc1VuaXQKICAgIH07CiMgMjcyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW5hbWVz
cGFjZS5oIgogICAgZW51bSBHVUlTdHlsZSB7CiAgICAgICAgTWFjU3R5bGUsCiAgICAgICAgV2lu
ZG93c1N0eWxlLAogICAgICAgIFdpbjNTdHlsZSwKICAgICAgICBQTVN0eWxlLAogICAgICAgIE1v
dGlmU3R5bGUKICAgIH07CgoKCiAgICBlbnVtIFNlcXVlbmNlTWF0Y2ggewogICAgICAgIE5vTWF0
Y2gsCiAgICAgICAgUGFydGlhbE1hdGNoLAogICAgICAgIElkZW50aWNhbAogICAgfTsKCgogICAg
ZW51bSBNb2RpZmllciB7CiAgICAgICAgTUVUQSA9IDB4MDAxMDAwMDAsCiAgICAgICAgU0hJRlQg
PSAweDAwMjAwMDAwLAogICAgICAgIENUUkwgPSAweDAwNDAwMDAwLAogICAgICAgIEFMVCA9IDB4
MDA4MDAwMDAsCiAgICAgICAgTU9ESUZJRVJfTUFTSyA9IDB4MDBmMDAwMDAsCiAgICAgICAgVU5J
Q09ERV9BQ0NFTCA9IDB4MTAwMDAwMDAsCgogICAgICAgIEFTQ0lJX0FDQ0VMID0gVU5JQ09ERV9B
Q0NFTAogICAgfTsKCgogICAgZW51bSBLZXkgewogICAgICAgIEtleV9Fc2NhcGUgPSAweDEwMDAs
CiAgICAgICAgS2V5X1RhYiA9IDB4MTAwMSwKICAgICAgICBLZXlfQmFja3RhYiA9IDB4MTAwMiwg
S2V5X0JhY2tUYWIgPSBLZXlfQmFja3RhYiwKICAgICAgICBLZXlfQmFja3NwYWNlID0gMHgxMDAz
LCBLZXlfQmFja1NwYWNlID0gS2V5X0JhY2tzcGFjZSwKICAgICAgICBLZXlfUmV0dXJuID0gMHgx
MDA0LAogICAgICAgIEtleV9FbnRlciA9IDB4MTAwNSwKICAgICAgICBLZXlfSW5zZXJ0ID0gMHgx
MDA2LAogICAgICAgIEtleV9EZWxldGUgPSAweDEwMDcsCiAgICAgICAgS2V5X1BhdXNlID0gMHgx
MDA4LAogICAgICAgIEtleV9QcmludCA9IDB4MTAwOSwKICAgICAgICBLZXlfU3lzUmVxID0gMHgx
MDBhLAogICAgICAgIEtleV9DbGVhciA9IDB4MTAwYiwKICAgICAgICBLZXlfSG9tZSA9IDB4MTAx
MCwKICAgICAgICBLZXlfRW5kID0gMHgxMDExLAogICAgICAgIEtleV9MZWZ0ID0gMHgxMDEyLAog
ICAgICAgIEtleV9VcCA9IDB4MTAxMywKICAgICAgICBLZXlfUmlnaHQgPSAweDEwMTQsCiAgICAg
ICAgS2V5X0Rvd24gPSAweDEwMTUsCiAgICAgICAgS2V5X1ByaW9yID0gMHgxMDE2LCBLZXlfUGFn
ZVVwID0gS2V5X1ByaW9yLAogICAgICAgIEtleV9OZXh0ID0gMHgxMDE3LCBLZXlfUGFnZURvd24g
PSBLZXlfTmV4dCwKICAgICAgICBLZXlfU2hpZnQgPSAweDEwMjAsCiAgICAgICAgS2V5X0NvbnRy
b2wgPSAweDEwMjEsCiAgICAgICAgS2V5X01ldGEgPSAweDEwMjIsCiAgICAgICAgS2V5X0FsdCA9
IDB4MTAyMywKICAgICAgICBLZXlfQ2Fwc0xvY2sgPSAweDEwMjQsCiAgICAgICAgS2V5X051bUxv
Y2sgPSAweDEwMjUsCiAgICAgICAgS2V5X1Njcm9sbExvY2sgPSAweDEwMjYsCiAgICAgICAgS2V5
X0YxID0gMHgxMDMwLAogICAgICAgIEtleV9GMiA9IDB4MTAzMSwKICAgICAgICBLZXlfRjMgPSAw
eDEwMzIsCiAgICAgICAgS2V5X0Y0ID0gMHgxMDMzLAogICAgICAgIEtleV9GNSA9IDB4MTAzNCwK
ICAgICAgICBLZXlfRjYgPSAweDEwMzUsCiAgICAgICAgS2V5X0Y3ID0gMHgxMDM2LAogICAgICAg
IEtleV9GOCA9IDB4MTAzNywKICAgICAgICBLZXlfRjkgPSAweDEwMzgsCiAgICAgICAgS2V5X0Yx
MCA9IDB4MTAzOSwKICAgICAgICBLZXlfRjExID0gMHgxMDNhLAogICAgICAgIEtleV9GMTIgPSAw
eDEwM2IsCiAgICAgICAgS2V5X0YxMyA9IDB4MTAzYywKICAgICAgICBLZXlfRjE0ID0gMHgxMDNk
LAogICAgICAgIEtleV9GMTUgPSAweDEwM2UsCiAgICAgICAgS2V5X0YxNiA9IDB4MTAzZiwKICAg
ICAgICBLZXlfRjE3ID0gMHgxMDQwLAogICAgICAgIEtleV9GMTggPSAweDEwNDEsCiAgICAgICAg
S2V5X0YxOSA9IDB4MTA0MiwKICAgICAgICBLZXlfRjIwID0gMHgxMDQzLAogICAgICAgIEtleV9G
MjEgPSAweDEwNDQsCiAgICAgICAgS2V5X0YyMiA9IDB4MTA0NSwKICAgICAgICBLZXlfRjIzID0g
MHgxMDQ2LAogICAgICAgIEtleV9GMjQgPSAweDEwNDcsCiAgICAgICAgS2V5X0YyNSA9IDB4MTA0
OCwKICAgICAgICBLZXlfRjI2ID0gMHgxMDQ5LAogICAgICAgIEtleV9GMjcgPSAweDEwNGEsCiAg
ICAgICAgS2V5X0YyOCA9IDB4MTA0YiwKICAgICAgICBLZXlfRjI5ID0gMHgxMDRjLAogICAgICAg
IEtleV9GMzAgPSAweDEwNGQsCiAgICAgICAgS2V5X0YzMSA9IDB4MTA0ZSwKICAgICAgICBLZXlf
RjMyID0gMHgxMDRmLAogICAgICAgIEtleV9GMzMgPSAweDEwNTAsCiAgICAgICAgS2V5X0YzNCA9
IDB4MTA1MSwKICAgICAgICBLZXlfRjM1ID0gMHgxMDUyLAogICAgICAgIEtleV9TdXBlcl9MID0g
MHgxMDUzLAogICAgICAgIEtleV9TdXBlcl9SID0gMHgxMDU0LAogICAgICAgIEtleV9NZW51ID0g
MHgxMDU1LAogICAgICAgIEtleV9IeXBlcl9MID0gMHgxMDU2LAogICAgICAgIEtleV9IeXBlcl9S
ID0gMHgxMDU3LAogICAgICAgIEtleV9IZWxwID0gMHgxMDU4LAogICAgICAgIEtleV9EaXJlY3Rp
b25fTCA9IDB4MTA1OSwKICAgICAgICBLZXlfRGlyZWN0aW9uX1IgPSAweDEwNjAsCiAgICAgICAg
S2V5X1NwYWNlID0gMHgyMCwKICAgICAgICBLZXlfQW55ID0gS2V5X1NwYWNlLAogICAgICAgIEtl
eV9FeGNsYW0gPSAweDIxLAogICAgICAgIEtleV9RdW90ZURibCA9IDB4MjIsCiAgICAgICAgS2V5
X051bWJlclNpZ24gPSAweDIzLAogICAgICAgIEtleV9Eb2xsYXIgPSAweDI0LAogICAgICAgIEtl
eV9QZXJjZW50ID0gMHgyNSwKICAgICAgICBLZXlfQW1wZXJzYW5kID0gMHgyNiwKICAgICAgICBL
ZXlfQXBvc3Ryb3BoZSA9IDB4MjcsCiAgICAgICAgS2V5X1BhcmVuTGVmdCA9IDB4MjgsCiAgICAg
ICAgS2V5X1BhcmVuUmlnaHQgPSAweDI5LAogICAgICAgIEtleV9Bc3RlcmlzayA9IDB4MmEsCiAg
ICAgICAgS2V5X1BsdXMgPSAweDJiLAogICAgICAgIEtleV9Db21tYSA9IDB4MmMsCiAgICAgICAg
S2V5X01pbnVzID0gMHgyZCwKICAgICAgICBLZXlfUGVyaW9kID0gMHgyZSwKICAgICAgICBLZXlf
U2xhc2ggPSAweDJmLAogICAgICAgIEtleV8wID0gMHgzMCwKICAgICAgICBLZXlfMSA9IDB4MzEs
CiAgICAgICAgS2V5XzIgPSAweDMyLAogICAgICAgIEtleV8zID0gMHgzMywKICAgICAgICBLZXlf
NCA9IDB4MzQsCiAgICAgICAgS2V5XzUgPSAweDM1LAogICAgICAgIEtleV82ID0gMHgzNiwKICAg
ICAgICBLZXlfNyA9IDB4MzcsCiAgICAgICAgS2V5XzggPSAweDM4LAogICAgICAgIEtleV85ID0g
MHgzOSwKICAgICAgICBLZXlfQ29sb24gPSAweDNhLAogICAgICAgIEtleV9TZW1pY29sb24gPSAw
eDNiLAogICAgICAgIEtleV9MZXNzID0gMHgzYywKICAgICAgICBLZXlfRXF1YWwgPSAweDNkLAog
ICAgICAgIEtleV9HcmVhdGVyID0gMHgzZSwKICAgICAgICBLZXlfUXVlc3Rpb24gPSAweDNmLAog
ICAgICAgIEtleV9BdCA9IDB4NDAsCiAgICAgICAgS2V5X0EgPSAweDQxLAogICAgICAgIEtleV9C
ID0gMHg0MiwKICAgICAgICBLZXlfQyA9IDB4NDMsCiAgICAgICAgS2V5X0QgPSAweDQ0LAogICAg
ICAgIEtleV9FID0gMHg0NSwKICAgICAgICBLZXlfRiA9IDB4NDYsCiAgICAgICAgS2V5X0cgPSAw
eDQ3LAogICAgICAgIEtleV9IID0gMHg0OCwKICAgICAgICBLZXlfSSA9IDB4NDksCiAgICAgICAg
S2V5X0ogPSAweDRhLAogICAgICAgIEtleV9LID0gMHg0YiwKICAgICAgICBLZXlfTCA9IDB4NGMs
CiAgICAgICAgS2V5X00gPSAweDRkLAogICAgICAgIEtleV9OID0gMHg0ZSwKICAgICAgICBLZXlf
TyA9IDB4NGYsCiAgICAgICAgS2V5X1AgPSAweDUwLAogICAgICAgIEtleV9RID0gMHg1MSwKICAg
ICAgICBLZXlfUiA9IDB4NTIsCiAgICAgICAgS2V5X1MgPSAweDUzLAogICAgICAgIEtleV9UID0g
MHg1NCwKICAgICAgICBLZXlfVSA9IDB4NTUsCiAgICAgICAgS2V5X1YgPSAweDU2LAogICAgICAg
IEtleV9XID0gMHg1NywKICAgICAgICBLZXlfWCA9IDB4NTgsCiAgICAgICAgS2V5X1kgPSAweDU5
LAogICAgICAgIEtleV9aID0gMHg1YSwKICAgICAgICBLZXlfQnJhY2tldExlZnQgPSAweDViLAog
ICAgICAgIEtleV9CYWNrc2xhc2ggPSAweDVjLAogICAgICAgIEtleV9CcmFja2V0UmlnaHQgPSAw
eDVkLAogICAgICAgIEtleV9Bc2NpaUNpcmN1bSA9IDB4NWUsCiAgICAgICAgS2V5X1VuZGVyc2Nv
cmUgPSAweDVmLAogICAgICAgIEtleV9RdW90ZUxlZnQgPSAweDYwLAogICAgICAgIEtleV9CcmFj
ZUxlZnQgPSAweDdiLAogICAgICAgIEtleV9CYXIgPSAweDdjLAogICAgICAgIEtleV9CcmFjZVJp
Z2h0ID0gMHg3ZCwKICAgICAgICBLZXlfQXNjaWlUaWxkZSA9IDB4N2UsCgoKCiAgICAgICAgS2V5
X25vYnJlYWtzcGFjZSA9IDB4MGEwLAogICAgICAgIEtleV9leGNsYW1kb3duID0gMHgwYTEsCiAg
ICAgICAgS2V5X2NlbnQgPSAweDBhMiwKICAgICAgICBLZXlfc3RlcmxpbmcgPSAweDBhMywKICAg
ICAgICBLZXlfY3VycmVuY3kgPSAweDBhNCwKICAgICAgICBLZXlfeWVuID0gMHgwYTUsCiAgICAg
ICAgS2V5X2Jyb2tlbmJhciA9IDB4MGE2LAogICAgICAgIEtleV9zZWN0aW9uID0gMHgwYTcsCiAg
ICAgICAgS2V5X2RpYWVyZXNpcyA9IDB4MGE4LAogICAgICAgIEtleV9jb3B5cmlnaHQgPSAweDBh
OSwKICAgICAgICBLZXlfb3JkZmVtaW5pbmUgPSAweDBhYSwKICAgICAgICBLZXlfZ3VpbGxlbW90
bGVmdCA9IDB4MGFiLAogICAgICAgIEtleV9ub3RzaWduID0gMHgwYWMsCiAgICAgICAgS2V5X2h5
cGhlbiA9IDB4MGFkLAogICAgICAgIEtleV9yZWdpc3RlcmVkID0gMHgwYWUsCiAgICAgICAgS2V5
X21hY3JvbiA9IDB4MGFmLAogICAgICAgIEtleV9kZWdyZWUgPSAweDBiMCwKICAgICAgICBLZXlf
cGx1c21pbnVzID0gMHgwYjEsCiAgICAgICAgS2V5X3R3b3N1cGVyaW9yID0gMHgwYjIsCiAgICAg
ICAgS2V5X3RocmVlc3VwZXJpb3IgPSAweDBiMywKICAgICAgICBLZXlfYWN1dGUgPSAweDBiNCwK
ICAgICAgICBLZXlfbXUgPSAweDBiNSwKICAgICAgICBLZXlfcGFyYWdyYXBoID0gMHgwYjYsCiAg
ICAgICAgS2V5X3BlcmlvZGNlbnRlcmVkID0gMHgwYjcsCiAgICAgICAgS2V5X2NlZGlsbGEgPSAw
eDBiOCwKICAgICAgICBLZXlfb25lc3VwZXJpb3IgPSAweDBiOSwKICAgICAgICBLZXlfbWFzY3Vs
aW5lID0gMHgwYmEsCiAgICAgICAgS2V5X2d1aWxsZW1vdHJpZ2h0ID0gMHgwYmIsCiAgICAgICAg
S2V5X29uZXF1YXJ0ZXIgPSAweDBiYywKICAgICAgICBLZXlfb25laGFsZiA9IDB4MGJkLAogICAg
ICAgIEtleV90aHJlZXF1YXJ0ZXJzID0gMHgwYmUsCiAgICAgICAgS2V5X3F1ZXN0aW9uZG93biA9
IDB4MGJmLAogICAgICAgIEtleV9BZ3JhdmUgPSAweDBjMCwKICAgICAgICBLZXlfQWFjdXRlID0g
MHgwYzEsCiAgICAgICAgS2V5X0FjaXJjdW1mbGV4ID0gMHgwYzIsCiAgICAgICAgS2V5X0F0aWxk
ZSA9IDB4MGMzLAogICAgICAgIEtleV9BZGlhZXJlc2lzID0gMHgwYzQsCiAgICAgICAgS2V5X0Fy
aW5nID0gMHgwYzUsCiAgICAgICAgS2V5X0FFID0gMHgwYzYsCiAgICAgICAgS2V5X0NjZWRpbGxh
ID0gMHgwYzcsCiAgICAgICAgS2V5X0VncmF2ZSA9IDB4MGM4LAogICAgICAgIEtleV9FYWN1dGUg
PSAweDBjOSwKICAgICAgICBLZXlfRWNpcmN1bWZsZXggPSAweDBjYSwKICAgICAgICBLZXlfRWRp
YWVyZXNpcyA9IDB4MGNiLAogICAgICAgIEtleV9JZ3JhdmUgPSAweDBjYywKICAgICAgICBLZXlf
SWFjdXRlID0gMHgwY2QsCiAgICAgICAgS2V5X0ljaXJjdW1mbGV4ID0gMHgwY2UsCiAgICAgICAg
S2V5X0lkaWFlcmVzaXMgPSAweDBjZiwKICAgICAgICBLZXlfRVRIID0gMHgwZDAsCiAgICAgICAg
S2V5X050aWxkZSA9IDB4MGQxLAogICAgICAgIEtleV9PZ3JhdmUgPSAweDBkMiwKICAgICAgICBL
ZXlfT2FjdXRlID0gMHgwZDMsCiAgICAgICAgS2V5X09jaXJjdW1mbGV4ID0gMHgwZDQsCiAgICAg
ICAgS2V5X090aWxkZSA9IDB4MGQ1LAogICAgICAgIEtleV9PZGlhZXJlc2lzID0gMHgwZDYsCiAg
ICAgICAgS2V5X211bHRpcGx5ID0gMHgwZDcsCiAgICAgICAgS2V5X09vYmxpcXVlID0gMHgwZDgs
CiAgICAgICAgS2V5X1VncmF2ZSA9IDB4MGQ5LAogICAgICAgIEtleV9VYWN1dGUgPSAweDBkYSwK
ICAgICAgICBLZXlfVWNpcmN1bWZsZXggPSAweDBkYiwKICAgICAgICBLZXlfVWRpYWVyZXNpcyA9
IDB4MGRjLAogICAgICAgIEtleV9ZYWN1dGUgPSAweDBkZCwKICAgICAgICBLZXlfVEhPUk4gPSAw
eDBkZSwKICAgICAgICBLZXlfc3NoYXJwID0gMHgwZGYsCiAgICAgICAgS2V5X2FncmF2ZSA9IDB4
MGUwLAogICAgICAgIEtleV9hYWN1dGUgPSAweDBlMSwKICAgICAgICBLZXlfYWNpcmN1bWZsZXgg
PSAweDBlMiwKICAgICAgICBLZXlfYXRpbGRlID0gMHgwZTMsCiAgICAgICAgS2V5X2FkaWFlcmVz
aXMgPSAweDBlNCwKICAgICAgICBLZXlfYXJpbmcgPSAweDBlNSwKICAgICAgICBLZXlfYWUgPSAw
eDBlNiwKICAgICAgICBLZXlfY2NlZGlsbGEgPSAweDBlNywKICAgICAgICBLZXlfZWdyYXZlID0g
MHgwZTgsCiAgICAgICAgS2V5X2VhY3V0ZSA9IDB4MGU5LAogICAgICAgIEtleV9lY2lyY3VtZmxl
eCA9IDB4MGVhLAogICAgICAgIEtleV9lZGlhZXJlc2lzID0gMHgwZWIsCiAgICAgICAgS2V5X2ln
cmF2ZSA9IDB4MGVjLAogICAgICAgIEtleV9pYWN1dGUgPSAweDBlZCwKICAgICAgICBLZXlfaWNp
cmN1bWZsZXggPSAweDBlZSwKICAgICAgICBLZXlfaWRpYWVyZXNpcyA9IDB4MGVmLAogICAgICAg
IEtleV9ldGggPSAweDBmMCwKICAgICAgICBLZXlfbnRpbGRlID0gMHgwZjEsCiAgICAgICAgS2V5
X29ncmF2ZSA9IDB4MGYyLAogICAgICAgIEtleV9vYWN1dGUgPSAweDBmMywKICAgICAgICBLZXlf
b2NpcmN1bWZsZXggPSAweDBmNCwKICAgICAgICBLZXlfb3RpbGRlID0gMHgwZjUsCiAgICAgICAg
S2V5X29kaWFlcmVzaXMgPSAweDBmNiwKICAgICAgICBLZXlfZGl2aXNpb24gPSAweDBmNywKICAg
ICAgICBLZXlfb3NsYXNoID0gMHgwZjgsCiAgICAgICAgS2V5X3VncmF2ZSA9IDB4MGY5LAogICAg
ICAgIEtleV91YWN1dGUgPSAweDBmYSwKICAgICAgICBLZXlfdWNpcmN1bWZsZXggPSAweDBmYiwK
ICAgICAgICBLZXlfdWRpYWVyZXNpcyA9IDB4MGZjLAogICAgICAgIEtleV95YWN1dGUgPSAweDBm
ZCwKICAgICAgICBLZXlfdGhvcm4gPSAweDBmZSwKICAgICAgICBLZXlfeWRpYWVyZXNpcyA9IDB4
MGZmLAoKCgogICAgICAgIEtleV9CYWNrID0gMHgxMDYxLAogICAgICAgIEtleV9Gb3J3YXJkID0g
MHgxMDYyLAogICAgICAgIEtleV9TdG9wID0gMHgxMDYzLAogICAgICAgIEtleV9SZWZyZXNoID0g
MHgxMDY0LAoKICAgICAgICBLZXlfVm9sdW1lRG93biA9IDB4MTA3MCwKICAgICAgICBLZXlfVm9s
dW1lTXV0ZSA9IDB4MTA3MSwKICAgICAgICBLZXlfVm9sdW1lVXAgPSAweDEwNzIsCiAgICAgICAg
S2V5X0Jhc3NCb29zdCA9IDB4MTA3MywKICAgICAgICBLZXlfQmFzc1VwID0gMHgxMDc0LAogICAg
ICAgIEtleV9CYXNzRG93biA9IDB4MTA3NSwKICAgICAgICBLZXlfVHJlYmxlVXAgPSAweDEwNzYs
CiAgICAgICAgS2V5X1RyZWJsZURvd24gPSAweDEwNzcsCgogICAgICAgIEtleV9NZWRpYVBsYXkg
PSAweDEwODAsCiAgICAgICAgS2V5X01lZGlhU3RvcCA9IDB4MTA4MSwKICAgICAgICBLZXlfTWVk
aWFQcmV2ID0gMHgxMDgyLAogICAgICAgIEtleV9NZWRpYU5leHQgPSAweDEwODMsCiAgICAgICAg
S2V5X01lZGlhUmVjb3JkID0gMHgxMDg0LAoKICAgICAgICBLZXlfSG9tZVBhZ2UgPSAweDEwOTAs
CiAgICAgICAgS2V5X0Zhdm9yaXRlcyA9IDB4MTA5MSwKICAgICAgICBLZXlfU2VhcmNoID0gMHgx
MDkyLAogICAgICAgIEtleV9TdGFuZGJ5ID0gMHgxMDkzLAogICAgICAgIEtleV9PcGVuVXJsID0g
MHgxMDk0LAoKICAgICAgICBLZXlfTGF1bmNoTWFpbCA9IDB4MTBhMCwKICAgICAgICBLZXlfTGF1
bmNoTWVkaWEgPSAweDEwYTEsCiAgICAgICAgS2V5X0xhdW5jaDAgPSAweDEwYTIsCiAgICAgICAg
S2V5X0xhdW5jaDEgPSAweDEwYTMsCiAgICAgICAgS2V5X0xhdW5jaDIgPSAweDEwYTQsCiAgICAg
ICAgS2V5X0xhdW5jaDMgPSAweDEwYTUsCiAgICAgICAgS2V5X0xhdW5jaDQgPSAweDEwYTYsCiAg
ICAgICAgS2V5X0xhdW5jaDUgPSAweDEwYTcsCiAgICAgICAgS2V5X0xhdW5jaDYgPSAweDEwYTgs
CiAgICAgICAgS2V5X0xhdW5jaDcgPSAweDEwYTksCiAgICAgICAgS2V5X0xhdW5jaDggPSAweDEw
YWEsCiAgICAgICAgS2V5X0xhdW5jaDkgPSAweDEwYWIsCiAgICAgICAgS2V5X0xhdW5jaEEgPSAw
eDEwYWMsCiAgICAgICAgS2V5X0xhdW5jaEIgPSAweDEwYWQsCiAgICAgICAgS2V5X0xhdW5jaEMg
PSAweDEwYWUsCiAgICAgICAgS2V5X0xhdW5jaEQgPSAweDEwYWYsCiAgICAgICAgS2V5X0xhdW5j
aEUgPSAweDEwYjAsCiAgICAgICAgS2V5X0xhdW5jaEYgPSAweDEwYjEsCgogICAgICAgIEtleV9N
ZWRpYUxhc3QgPSAweDFmZmYsCgogICAgICAgIEtleV91bmtub3duID0gMHhmZmZmCiAgICB9OwoK
CiAgICBlbnVtIEFycm93VHlwZSB7CiAgICAgICAgVXBBcnJvdywKICAgICAgICBEb3duQXJyb3cs
CiAgICAgICAgTGVmdEFycm93LAogICAgICAgIFJpZ2h0QXJyb3cKICAgIH07CgoKICAgIGVudW0g
UmFzdGVyT3AgewogICAgICAgIENvcHlST1AsCiAgICAgICAgT3JST1AsCiAgICAgICAgWG9yUk9Q
LAogICAgICAgIE5vdEFuZFJPUCwgRXJhc2VST1A9Tm90QW5kUk9QLAogICAgICAgIE5vdENvcHlS
T1AsCiAgICAgICAgTm90T3JST1AsCiAgICAgICAgTm90WG9yUk9QLAogICAgICAgIEFuZFJPUCwg
Tm90RXJhc2VST1A9QW5kUk9QLAogICAgICAgIE5vdFJPUCwKICAgICAgICBDbGVhclJPUCwKICAg
ICAgICBTZXRST1AsCiAgICAgICAgTm9wUk9QLAogICAgICAgIEFuZE5vdFJPUCwKICAgICAgICBP
ck5vdFJPUCwKICAgICAgICBOYW5kUk9QLAogICAgICAgIE5vclJPUCwgTGFzdFJPUD1Ob3JST1AK
ICAgIH07CgoKICAgIGVudW0gUGVuU3R5bGUgewogICAgICAgIE5vUGVuLAogICAgICAgIFNvbGlk
TGluZSwKICAgICAgICBEYXNoTGluZSwKICAgICAgICBEb3RMaW5lLAogICAgICAgIERhc2hEb3RM
aW5lLAogICAgICAgIERhc2hEb3REb3RMaW5lLAogICAgICAgIE1QZW5TdHlsZSA9IDB4MGYKICAg
IH07CgoKICAgIGVudW0gUGVuQ2FwU3R5bGUgewogICAgICAgIEZsYXRDYXAgPSAweDAwLAogICAg
ICAgIFNxdWFyZUNhcCA9IDB4MTAsCiAgICAgICAgUm91bmRDYXAgPSAweDIwLAogICAgICAgIE1Q
ZW5DYXBTdHlsZSA9IDB4MzAKICAgIH07CgoKICAgIGVudW0gUGVuSm9pblN0eWxlIHsKICAgICAg
ICBNaXRlckpvaW4gPSAweDAwLAogICAgICAgIEJldmVsSm9pbiA9IDB4NDAsCiAgICAgICAgUm91
bmRKb2luID0gMHg4MCwKICAgICAgICBNUGVuSm9pblN0eWxlID0gMHhjMAogICAgfTsKCgogICAg
ZW51bSBCcnVzaFN0eWxlIHsKICAgICAgICBOb0JydXNoLAogICAgICAgIFNvbGlkUGF0dGVybiwK
ICAgICAgICBEZW5zZTFQYXR0ZXJuLAogICAgICAgIERlbnNlMlBhdHRlcm4sCiAgICAgICAgRGVu
c2UzUGF0dGVybiwKICAgICAgICBEZW5zZTRQYXR0ZXJuLAogICAgICAgIERlbnNlNVBhdHRlcm4s
CiAgICAgICAgRGVuc2U2UGF0dGVybiwKICAgICAgICBEZW5zZTdQYXR0ZXJuLAogICAgICAgIEhv
clBhdHRlcm4sCiAgICAgICAgVmVyUGF0dGVybiwKICAgICAgICBDcm9zc1BhdHRlcm4sCiAgICAg
ICAgQkRpYWdQYXR0ZXJuLAogICAgICAgIEZEaWFnUGF0dGVybiwKICAgICAgICBEaWFnQ3Jvc3NQ
YXR0ZXJuLAogICAgICAgIEN1c3RvbVBhdHRlcm49MjQKICAgIH07CgoKICAgIGVudW0gTWFjaW50
b3NoVmVyc2lvbiB7CgogICAgICAgIE1WX1Vua25vd24gPSAweDAwMDAsCgoKICAgICAgICBNVl85
ID0gMHgwMDAxLAogICAgICAgIE1WXzEwX0RPVF8xID0gMHgwMDAyLAogICAgICAgIE1WXzEwX0RP
VF8yID0gMHgwMDAzLAoKCiAgICAgICAgTVZfSkFHVUFSID0gTVZfMTBfRE9UXzIKICAgIH07CgoK
ICAgIGVudW0gV2luZG93c1ZlcnNpb24gewogICAgICAgIFdWXzMycyA9IDB4MDAwMSwKICAgICAg
ICBXVl85NSA9IDB4MDAwMiwKICAgICAgICBXVl85OCA9IDB4MDAwMywKICAgICAgICBXVl9NZSA9
IDB4MDAwNCwKICAgICAgICBXVl9ET1NfYmFzZWQgPSAweDAwMGYsCgogICAgICAgIFdWX05UID0g
MHgwMDEwLAogICAgICAgIFdWXzIwMDAgPSAweDAwMjAsCiAgICAgICAgV1ZfWFAgPSAweDAwMzAs
CiAgICAgICAgV1ZfTlRfYmFzZWQgPSAweDAwZjAKICAgIH07CgoKICAgIGVudW0gVUlFZmZlY3Qg
ewogICAgICAgIFVJX0dlbmVyYWwsCiAgICAgICAgVUlfQW5pbWF0ZU1lbnUsCiAgICAgICAgVUlf
RmFkZU1lbnUsCiAgICAgICAgVUlfQW5pbWF0ZUNvbWJvLAogICAgICAgIFVJX0FuaW1hdGVUb29s
dGlwLAogICAgICAgIFVJX0ZhZGVUb29sdGlwCiAgICB9OwoKCiAgICBlbnVtIEN1cnNvclNoYXBl
IHsKICAgICAgICBBcnJvd0N1cnNvciwKICAgICAgICBVcEFycm93Q3Vyc29yLAogICAgICAgIENy
b3NzQ3Vyc29yLAogICAgICAgIFdhaXRDdXJzb3IsCiAgICAgICAgSWJlYW1DdXJzb3IsCiAgICAg
ICAgU2l6ZVZlckN1cnNvciwKICAgICAgICBTaXplSG9yQ3Vyc29yLAogICAgICAgIFNpemVCRGlh
Z0N1cnNvciwKICAgICAgICBTaXplRkRpYWdDdXJzb3IsCiAgICAgICAgU2l6ZUFsbEN1cnNvciwK
ICAgICAgICBCbGFua0N1cnNvciwKICAgICAgICBTcGxpdFZDdXJzb3IsCiAgICAgICAgU3BsaXRI
Q3Vyc29yLAogICAgICAgIFBvaW50aW5nSGFuZEN1cnNvciwKICAgICAgICBGb3JiaWRkZW5DdXJz
b3IsCiAgICAgICAgV2hhdHNUaGlzQ3Vyc29yLAogICAgICAgIExhc3RDdXJzb3IgPSBXaGF0c1Ro
aXNDdXJzb3IsCiAgICAgICAgQml0bWFwQ3Vyc29yID0gMjQKICAgIH07CgoKCiAgICBzdGF0aWMg
Y29uc3QgUUN1cnNvciAmIGFycm93Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiB1
cEFycm93Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBjcm9zc0N1cnNvcjsKICAg
IHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgd2FpdEN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vy
c29yICYgaWJlYW1DdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVWZXJDdXJz
b3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVIb3JDdXJzb3I7CiAgICBzdGF0aWMg
Y29uc3QgUUN1cnNvciAmIHNpemVCRGlhZ0N1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29y
ICYgc2l6ZUZEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzaXplQWxsQ3Vy
c29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBibGFua0N1cnNvcjsKICAgIHN0YXRpYyBj
b25zdCBRQ3Vyc29yICYgc3BsaXRWQ3Vyc29yOwoKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYg
c3BsaXRIQ3Vyc29yOwoKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgcG9pbnRpbmdIYW5kQ3Vy
c29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBmb3JiaWRkZW5DdXJzb3I7CiAgICBzdGF0
aWMgY29uc3QgUUN1cnNvciAmIHdoYXRzVGhpc0N1cnNvcjsKCgogICAgZW51bSBUZXh0Rm9ybWF0
IHsKICAgICAgICBQbGFpblRleHQsCiAgICAgICAgUmljaFRleHQsCiAgICAgICAgQXV0b1RleHQs
CiAgICAgICAgTG9nVGV4dAogICAgfTsKCgogICAgZW51bSBBbmNob3JBdHRyaWJ1dGUgewogICAg
ICAgIEFuY2hvck5hbWUsCiAgICAgICAgQW5jaG9ySHJlZgogICAgfTsKCgogICAgZW51bSBEb2Nr
IHsKICAgICAgICBEb2NrVW5tYW5hZ2VkLAogICAgICAgIERvY2tUb3JuT2ZmLAogICAgICAgIERv
Y2tUb3AsCiAgICAgICAgRG9ja0JvdHRvbSwKICAgICAgICBEb2NrUmlnaHQsCiAgICAgICAgRG9j
a0xlZnQsCiAgICAgICAgRG9ja01pbmltaXplZAoKICAgICAgICAsCiAgICAgICAgVW5tYW5hZ2Vk
ID0gRG9ja1VubWFuYWdlZCwKICAgICAgICBUb3JuT2ZmID0gRG9ja1Rvcm5PZmYsCiAgICAgICAg
VG9wID0gRG9ja1RvcCwKICAgICAgICBCb3R0b20gPSBEb2NrQm90dG9tLAogICAgICAgIFJpZ2h0
ID0gRG9ja1JpZ2h0LAogICAgICAgIExlZnQgPSBEb2NrTGVmdCwKICAgICAgICBNaW5pbWl6ZWQg
PSBEb2NrTWluaW1pemVkCgogICAgfTsKCiAgICB0eXBlZGVmIERvY2sgVG9vbEJhckRvY2s7CgoK
ICAgIGVudW0gRGF0ZUZvcm1hdCB7CiAgICAgICAgVGV4dERhdGUsCiAgICAgICAgSVNPRGF0ZSwK
ICAgICAgICBMb2NhbERhdGUKICAgIH07CgoKICAgIGVudW0gVGltZVNwZWMgewogICAgICAgIExv
Y2FsVGltZSwKICAgICAgICBVVEMKICAgIH07CgoKICAgIGVudW0gQmFja2dyb3VuZE1vZGUgewog
ICAgICAgIEZpeGVkQ29sb3IsCiAgICAgICAgRml4ZWRQaXhtYXAsCiAgICAgICAgTm9CYWNrZ3Jv
dW5kLAogICAgICAgIFBhbGV0dGVGb3JlZ3JvdW5kLAogICAgICAgIFBhbGV0dGVCdXR0b24sCiAg
ICAgICAgUGFsZXR0ZUxpZ2h0LAogICAgICAgIFBhbGV0dGVNaWRsaWdodCwKICAgICAgICBQYWxl
dHRlRGFyaywKICAgICAgICBQYWxldHRlTWlkLAogICAgICAgIFBhbGV0dGVUZXh0LAogICAgICAg
IFBhbGV0dGVCcmlnaHRUZXh0LAogICAgICAgIFBhbGV0dGVCYXNlLAogICAgICAgIFBhbGV0dGVC
YWNrZ3JvdW5kLAogICAgICAgIFBhbGV0dGVTaGFkb3csCiAgICAgICAgUGFsZXR0ZUhpZ2hsaWdo
dCwKICAgICAgICBQYWxldHRlSGlnaGxpZ2h0ZWRUZXh0LAogICAgICAgIFBhbGV0dGVCdXR0b25U
ZXh0LAogICAgICAgIFBhbGV0dGVMaW5rLAogICAgICAgIFBhbGV0dGVMaW5rVmlzaXRlZCwKICAg
ICAgICBYMTFQYXJlbnRSZWxhdGl2ZQogICAgfTsKCiAgICB0eXBlZGVmIHVpbnQgQ29tcGFyaXNv
bkZsYWdzOwoKCiAgICBlbnVtIFN0cmluZ0NvbXBhcmlzb25Nb2RlIHsKICAgICAgICBDYXNlU2Vu
c2l0aXZlID0gMHgwMDAwMSwKICAgICAgICBCZWdpbnNXaXRoID0gMHgwMDAwMiwKICAgICAgICBF
bmRzV2l0aCA9IDB4MDAwMDQsCiAgICAgICAgQ29udGFpbnMgPSAweDAwMDA4LAogICAgICAgIEV4
YWN0TWF0Y2ggPSAweDAwMDEwCiAgICB9OwojIDg0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs
dWRlL3FuYW1lc3BhY2UuaCIKICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBIQU5ETEU7CgoKCn07
CgoKY2xhc3MgUUludGVybmFsIHsKcHVibGljOgogICAgZW51bSBQYWludERldmljZUZsYWdzIHsK
ICAgICAgICBVbmRlZmluZWREZXZpY2UgPSAweDAwLAogICAgICAgIFdpZGdldCA9IDB4MDEsCiAg
ICAgICAgUGl4bWFwID0gMHgwMiwKICAgICAgICBQcmludGVyID0gMHgwMywKICAgICAgICBQaWN0
dXJlID0gMHgwNCwKICAgICAgICBTeXN0ZW0gPSAweDA1LAogICAgICAgIERldmljZVR5cGVNYXNr
ID0gMHgwZiwKICAgICAgICBFeHRlcm5hbERldmljZSA9IDB4MTAsCgogICAgICAgIENvbXBhdGli
aWxpdHlNb2RlID0gMHgyMAogICAgfTsKfTsKIyA0NiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs
dWRlL3F3aW5kb3dkZWZzLmgiIDIKCgoKCmNsYXNzIFFQYWludERldmljZTsKY2xhc3MgUVBhaW50
RGV2aWNlTWV0cmljczsKY2xhc3MgUVdpZGdldDsKY2xhc3MgUVdpZGdldE1hcHBlcjsKY2xhc3Mg
UURpYWxvZzsKY2xhc3MgUUNvbG9yOwpjbGFzcyBRQ29sb3JHcm91cDsKY2xhc3MgUVBhbGV0dGU7
CmNsYXNzIFFDdXJzb3I7CmNsYXNzIFFQb2ludDsKY2xhc3MgUVNpemU7CmNsYXNzIFFSZWN0Owpj
bGFzcyBRUG9pbnRBcnJheTsKY2xhc3MgUVBhaW50ZXI7CmNsYXNzIFFSZWdpb247CmNsYXNzIFFG
b250OwpjbGFzcyBRRm9udE1ldHJpY3M7CmNsYXNzIFFGb250SW5mbzsKY2xhc3MgUVBlbjsKY2xh
c3MgUUJydXNoOwpjbGFzcyBRV01hdHJpeDsKY2xhc3MgUVBpeG1hcDsKY2xhc3MgUUJpdG1hcDsK
Y2xhc3MgUU1vdmllOwpjbGFzcyBRSW1hZ2U7CmNsYXNzIFFJbWFnZUlPOwpjbGFzcyBRUGljdHVy
ZTsKY2xhc3MgUVByaW50ZXI7CmNsYXNzIFFBY2NlbDsKY2xhc3MgUVRpbWVyOwpjbGFzcyBRVGlt
ZTsKY2xhc3MgUUNsaXBib2FyZDsKCgoKCmNsYXNzIFFXaWRnZXRMaXN0OwpjbGFzcyBRV2lkZ2V0
TGlzdEl0OwojIDE0MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aW5kb3dkZWZzLmgi
CnR5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5Owp0eXBlZGVmIHVuaW9uIF9YRXZlbnQg
WEV2ZW50Owp0eXBlZGVmIHN0cnVjdCBfWEdDICpHQzsKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24g
KlJlZ2lvbjsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFdJZDsKCiBEaXNwbGF5ICpxdF94ZGlzcGxh
eSgpOwogaW50IHF0X3hzY3JlZW4oKTsKIFdJZCBxdF94cm9vdHdpbigpOwogV0lkIHF0X3hyb290
d2luKCBpbnQgc2NybiApOwogR0MgcXRfeGdldF9yZWFkb25seV9nYyggaW50IHNjcm4sIGJvb2wg
bW9ub2Nocm9tZSApOwogR0MgcXRfeGdldF90ZW1wX2djKCBpbnQgc2NybiwgYm9vbCBtb25vY2hy
b21lICk7CiMgMTY0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIK
Y2xhc3MgUUFwcGxpY2F0aW9uOwoKCgoKCgoKdHlwZWRlZiBRX0lOVDMyIFFDT09SRDsKY29uc3Qg
UUNPT1JEIFFDT09SRF9NQVggPSAyMTQ3NDgzNjQ3Owpjb25zdCBRQ09PUkQgUUNPT1JEX01JTiA9
IC1RQ09PUkRfTUFYIC0gMTsKCnR5cGVkZWYgdW5zaWduZWQgaW50IFFSZ2I7CgogY29uc3QgY2hh
ciAqcUFwcE5hbWUoKTsKCgoKdHlwZWRlZiB2b2lkICgqUXRDbGVhblVwRnVuY3Rpb24pKCk7CiB2
b2lkIHFBZGRQb3N0Um91dGluZSggUXRDbGVhblVwRnVuY3Rpb24gKTsKIHZvaWQgcVJlbW92ZVBv
c3RSb3V0aW5lKCBRdENsZWFuVXBGdW5jdGlvbiApOwoKCgp0eXBlZGVmIFF0Q2xlYW5VcEZ1bmN0
aW9uIFFfQ2xlYW5VcEZ1bmN0aW9uOwojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv
cXdpZGdldC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FvYmplY3QuaCIg
MQojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW9iamVjdC5oIgojIDEgIi91c3Iv
bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZXZlbnQuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMu
MS4xL2luY2x1ZGUvcWV2ZW50LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fy
ZWdpb24uaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXJlZ2lvbi5oIgoj
IDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcmVjdC5oIiAxCiMgNDIgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xcmVjdC5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j
bHVkZS9xc2l6ZS5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc2l6ZS5o
IgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcG9pbnQuaCIgMQojIDQ2ICIvdXNy
L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBvaW50LmgiCmNsYXNzIFFQb2ludAp7CnB1YmxpYzoK
ICAgIFFQb2ludCgpOwogICAgUVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3MgKTsKCiAgICBib29s
IGlzTnVsbCgpIGNvbnN0OwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNvbnN0Owog
ICAgdm9pZCBzZXRYKCBpbnQgeCApOwogICAgdm9pZCBzZXRZKCBpbnQgeSApOwoKICAgIGludCBt
YW5oYXR0YW5MZW5ndGgoKSBjb25zdDsKCiAgICBRQ09PUkQgJnJ4KCk7CiAgICBRQ09PUkQgJnJ5
KCk7CgogICAgUVBvaW50ICZvcGVyYXRvcis9KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIFFQb2lu
dCAmb3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0o
IGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGRvdWJsZSBjICk7CiAgICBRUG9pbnQg
Jm9wZXJhdG9yLz0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0oIGRvdWJsZSBjICk7
CgogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQb2ludCAmLCBjb25z
dCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQ
b2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQg
b3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBp
bmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2lu
dCAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQ
b2ludCAmLCBpbnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yKigg
aW50LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3Bl
cmF0b3IqKCBjb25zdCBRUG9pbnQgJiwgZG91YmxlICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0
IFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBp
bmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVu
ZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICYsIGludCApOwog
ICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJiwg
ZG91YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgd2FybmluZ0RpdkJ5WmVybygpOwoK
CgoKCiAgICBRQ09PUkQgeHA7CiAgICBRQ09PUkQgeXA7Cgp9OwoKCgoKCgogUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFQb2ludCAmICk7CiBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBvaW50ICYgKTsKCgoKCgoKaW5saW5lIFFQ
b2ludDo6UVBvaW50KCkKeyB4cD0wOyB5cD0wOyB9CgppbmxpbmUgUVBvaW50OjpRUG9pbnQoIGlu
dCB4cG9zLCBpbnQgeXBvcyApCnsgeHA9KFFDT09SRCl4cG9zOyB5cD0oUUNPT1JEKXlwb3M7IH0K
CmlubGluZSBib29sIFFQb2ludDo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4geHAgPT0gMCAmJiB5
cCA9PSAwOyB9CgppbmxpbmUgaW50IFFQb2ludDo6eCgpIGNvbnN0CnsgcmV0dXJuIHhwOyB9Cgpp
bmxpbmUgaW50IFFQb2ludDo6eSgpIGNvbnN0CnsgcmV0dXJuIHlwOyB9CgppbmxpbmUgdm9pZCBR
UG9pbnQ6OnNldFgoIGludCB4ICkKeyB4cCA9IChRQ09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVBv
aW50OjpzZXRZKCBpbnQgeSApCnsgeXAgPSAoUUNPT1JEKXk7IH0KCmlubGluZSBRQ09PUkQgJlFQ
b2ludDo6cngoKQp7IHJldHVybiB4cDsgfQoKaW5saW5lIFFDT09SRCAmUVBvaW50OjpyeSgpCnsg
cmV0dXJuIHlwOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKz0oIGNvbnN0IFFQ
b2ludCAmcCApCnsgeHArPXAueHA7IHlwKz1wLnlwOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBR
UG9pbnQgJlFQb2ludDo6b3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICkKeyB4cC09cC54cDsg
eXAtPXAueXA7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRv
cio9KCBpbnQgYyApCnsgeHAqPShRQ09PUkQpYzsgeXAqPShRQ09PUkQpYzsgcmV0dXJuICp0aGlz
OyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKj0oIGRvdWJsZSBjICkKeyB4cD0o
UUNPT1JEKSh4cCpjKTsgeXA9KFFDT09SRCkoeXAqYyk7IHJldHVybiAqdGhpczsgfQoKaW5saW5l
IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsg
cmV0dXJuIHAxLnhwID09IHAyLnhwICYmIHAxLnlwID09IHAyLnlwOyB9CgppbmxpbmUgYm9vbCBv
cGVyYXRvciE9KCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4g
cDEueHAgIT0gcDIueHAgfHwgcDEueXAgIT0gcDIueXA7IH0KCmlubGluZSBjb25zdCBRUG9pbnQg
b3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4g
UVBvaW50KHAxLnhwK3AyLnhwLCBwMS55cCtwMi55cCk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQg
b3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4g
UVBvaW50KHAxLnhwLXAyLnhwLCBwMS55cC1wMi55cCk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQg
b3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJnAsIGludCBjICkKeyByZXR1cm4gUVBvaW50KHAueHAq
YywgcC55cCpjKTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGludCBjLCBjb25z
dCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQocC54cCpjLCBwLnlwKmMpOyB9CgppbmxpbmUg
Y29uc3QgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICZwLCBkb3VibGUgYyApCnsgcmV0
dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwKmMpLCAoUUNPT1JEKShwLnlwKmMpKTsgfQoKaW5saW5l
IGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSBjLCBjb25zdCBRUG9pbnQgJnAgKQp7IHJl
dHVybiBRUG9pbnQoKFFDT09SRCkocC54cCpjKSwgKFFDT09SRCkocC55cCpjKSk7IH0KCmlubGlu
ZSBjb25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9p
bnQoLXAueHAsIC1wLnlwKTsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvci89KCBp
bnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVybygpOwoK
ICAgIHhwLz0oUUNPT1JEKWM7CiAgICB5cC89KFFDT09SRCljOwogICAgcmV0dXJuICp0aGlzOwp9
CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLz0oIGRvdWJsZSBjICkKewoKICAgIGlm
ICggYyA9PSAwLjAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB4cD0oUUNPT1JE
KSh4cC9jKTsKICAgIHlwPShRQ09PUkQpKHlwL2MpOwogICAgcmV0dXJuICp0aGlzOwp9Cgppbmxp
bmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICZwLCBpbnQgYyApCnsKCiAg
ICBpZiAoIGMgPT0gMCApCiAgICAgICAgUVBvaW50Ojp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAg
cmV0dXJuIFFQb2ludChwLnhwL2MsIHAueXAvYyk7Cn0KCmlubGluZSBjb25zdCBRUG9pbnQgb3Bl
cmF0b3IvKCBjb25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9PSAwLjAg
KQogICAgICAgIFFQb2ludDo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRUG9pbnQo
KFFDT09SRCkocC54cC9jKSwgKFFDT09SRCkocC55cC9jKSk7Cn0KIyA0MyAiL3Vzci9sb2NhbC9x
dC0zLjEuMS9pbmNsdWRlL3FzaXplLmgiIDIKCgpjbGFzcyBRU2l6ZQoKewpwdWJsaWM6CgogICAg
ZW51bSBTY2FsZU1vZGUgewogICAgICAgIFNjYWxlRnJlZSwKICAgICAgICBTY2FsZU1pbiwKICAg
ICAgICBTY2FsZU1heAogICAgfTsKCiAgICBRU2l6ZSgpOwogICAgUVNpemUoIGludCB3LCBpbnQg
aCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwoKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50
IGhlaWdodCgpIGNvbnN0OwogICAgdm9pZCBzZXRXaWR0aCggaW50IHcgKTsKICAgIHZvaWQgc2V0
SGVpZ2h0KCBpbnQgaCApOwogICAgdm9pZCB0cmFuc3Bvc2UoKTsKCiAgICB2b2lkIHNjYWxlKCBp
bnQgdywgaW50IGgsIFNjYWxlTW9kZSBtb2RlICk7CiAgICB2b2lkIHNjYWxlKCBjb25zdCBRU2l6
ZSAmcywgU2NhbGVNb2RlIG1vZGUgKTsKCiAgICBRU2l6ZSBleHBhbmRlZFRvKCBjb25zdCBRU2l6
ZSAmICkgY29uc3Q7CiAgICBRU2l6ZSBib3VuZGVkVG8oIGNvbnN0IFFTaXplICYgKSBjb25zdDsK
CiAgICBRQ09PUkQgJnJ3aWR0aCgpOwogICAgUUNPT1JEICZyaGVpZ2h0KCk7CgogICAgUVNpemUg
Jm9wZXJhdG9yKz0oIGNvbnN0IFFTaXplICYgKTsKICAgIFFTaXplICZvcGVyYXRvci09KCBjb25z
dCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggaW50IGMgKTsKICAgIFFTaXplICZv
cGVyYXRvcio9KCBkb3VibGUgYyApOwogICAgUVNpemUgJm9wZXJhdG9yLz0oIGludCBjICk7CiAg
ICBRU2l6ZSAmb3BlcmF0b3IvPSggZG91YmxlIGMgKTsKCiAgICBmcmllbmQgaW5saW5lIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAg
IGZyaWVuZCBpbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3IrKCBjb25zdCBRU2l6ZSAmLCBjb25z
dCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yLSggY29u
c3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6
ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25z
dCBRU2l6ZSBvcGVyYXRvciooIGludCwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlubGlu
ZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGRvdWJsZSApOwogICAgZnJp
ZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGRvdWJsZSwgY29uc3QgUVNpemUgJiAp
OwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFTaXplICYs
IGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFT
aXplICYsIGRvdWJsZSApOwoKcHJpdmF0ZToKICAgIHN0YXRpYyB2b2lkIHdhcm5pbmdEaXZCeVpl
cm8oKTsKCiAgICBRQ09PUkQgd2Q7CiAgICBRQ09PUkQgaHQ7Cn07CgoKCgoKCiBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVNpemUgJiApOwogUURhdGFTdHJl
YW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTaXplICYgKTsKCgoKCgoKaW5saW5lIFFT
aXplOjpRU2l6ZSgpCnsgd2QgPSBodCA9IC0xOyB9CgppbmxpbmUgUVNpemU6OlFTaXplKCBpbnQg
dywgaW50IGggKQp7IHdkPShRQ09PUkQpdzsgaHQ9KFFDT09SRCloOyB9CgppbmxpbmUgYm9vbCBR
U2l6ZTo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gd2Q9PTAgJiYgaHQ9PTA7IH0KCmlubGluZSBi
b29sIFFTaXplOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4gd2Q8MSB8fCBodDwxOyB9Cgppbmxp
bmUgYm9vbCBRU2l6ZTo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHdkPj0wICYmIGh0Pj0wOyB9
CgppbmxpbmUgaW50IFFTaXplOjp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIHdkOyB9CgppbmxpbmUg
aW50IFFTaXplOjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBodDsgfQoKaW5saW5lIHZvaWQgUVNp
emU6OnNldFdpZHRoKCBpbnQgdyApCnsgd2Q9KFFDT09SRCl3OyB9CgppbmxpbmUgdm9pZCBRU2l6
ZTo6c2V0SGVpZ2h0KCBpbnQgaCApCnsgaHQ9KFFDT09SRCloOyB9CgppbmxpbmUgUUNPT1JEICZR
U2l6ZTo6cndpZHRoKCkKeyByZXR1cm4gd2Q7IH0KCmlubGluZSBRQ09PUkQgJlFTaXplOjpyaGVp
Z2h0KCkKeyByZXR1cm4gaHQ7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yKz0oIGNv
bnN0IFFTaXplICZzICkKeyB3ZCs9cy53ZDsgaHQrPXMuaHQ7IHJldHVybiAqdGhpczsgfQoKaW5s
aW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3ItPSggY29uc3QgUVNpemUgJnMgKQp7IHdkLT1zLndk
OyBodC09cy5odDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRv
cio9KCBpbnQgYyApCnsgd2QqPShRQ09PUkQpYzsgaHQqPShRQ09PUkQpYzsgcmV0dXJuICp0aGlz
OyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvcio9KCBkb3VibGUgYyApCnsgd2Q9KFFD
T09SRCkod2QqYyk7IGh0PShRQ09PUkQpKGh0KmMpOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBi
b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1
cm4gczEud2QgPT0gczIud2QgJiYgczEuaHQgPT0gczIuaHQ7IH0KCmlubGluZSBib29sIG9wZXJh
dG9yIT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1cm4gczEud2Qg
IT0gczIud2QgfHwgczEuaHQgIT0gczIuaHQ7IH0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRv
cisoIGNvbnN0IFFTaXplICYgczEsIGNvbnN0IFFTaXplICYgczIgKQp7IHJldHVybiBRU2l6ZShz
MS53ZCtzMi53ZCwgczEuaHQrczIuaHQpOyB9CgppbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3It
KCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiApCnsgcmV0dXJuIFFTaXplKHMxLndk
LXMyLndkLCBzMS5odC1zMi5odCk7IH0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGNv
bnN0IFFTaXplICZzLCBpbnQgYyApCnsgcmV0dXJuIFFTaXplKHMud2QqYywgcy5odCpjKTsgfQoK
aW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yKiggaW50IGMsIGNvbnN0IFFTaXplICZzICkKeyBy
ZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0
b3IqKCBjb25zdCBRU2l6ZSAmcywgZG91YmxlIGMgKQp7IHJldHVybiBRU2l6ZSgoUUNPT1JEKShz
LndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoKaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9y
KiggZG91YmxlIGMsIGNvbnN0IFFTaXplICZzICkKeyByZXR1cm4gUVNpemUoKFFDT09SRCkocy53
ZCpjKSwgKFFDT09SRCkocy5odCpjKSk7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9y
Lz0oIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAgICB3YXJuaW5nRGl2QnlaZXJv
KCk7CgogICAgd2QvPShRQ09PUkQpYzsgaHQvPShRQ09PUkQpYzsKICAgIHJldHVybiAqdGhpczsK
fQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSggZG91YmxlIGMgKQp7CgogICAgaWYg
KCBjID09IDAuMCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHdkPShRQ09PUkQp
KHdkL2MpOyBodD0oUUNPT1JEKShodC9jKTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNv
bnN0IFFTaXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJnMsIGludCBjICkKewoKICAgIGlmICgg
YyA9PSAwICkKICAgICAgICBRU2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBR
U2l6ZShzLndkL2MsIHMuaHQvYyk7Cn0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8oIGNv
bnN0IFFTaXplICZzLCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICBR
U2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRU2l6ZSgoUUNPT1JEKShzLndk
L2MpLCAoUUNPT1JEKShzLmh0L2MpKTsKfQoKaW5saW5lIFFTaXplIFFTaXplOjpleHBhbmRlZFRv
KCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggKChv
dGhlclNpemUud2QpIDwgKHdkKSA/ICh3ZCkgOiAob3RoZXJTaXplLndkKSksICgob3RoZXJTaXpl
Lmh0KSA8IChodCkgPyAoaHQpIDogKG90aGVyU2l6ZS5odCkpICk7Cn0KCmlubGluZSBRU2l6ZSBR
U2l6ZTo6Ym91bmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0CnsKICAgIHJl
dHVybiBRU2l6ZSggKCh3ZCkgPCAob3RoZXJTaXplLndkKSA/ICh3ZCkgOiAob3RoZXJTaXplLndk
KSksICgoaHQpIDwgKG90aGVyU2l6ZS5odCkgPyAoaHQpIDogKG90aGVyU2l6ZS5odCkpICk7Cn0K
IyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FyZWN0LmgiIDIKCgoKCgoKCmNsYXNz
IFFSZWN0CnsKcHVibGljOgogICAgUVJlY3QoKSB7IHgxID0geTEgPSAwOyB4MiA9IHkyID0gLTE7
IH0KICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNvbnN0IFFQb2ludCAmYm90dG9t
cmlnaHQgKTsKICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNvbnN0IFFTaXplICZz
aXplICk7CiAgICBRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdo
dCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgUVJlY3Qgbm9ybWFsaXplKCkgY29uc3Q7Cgog
ICAgaW50IGxlZnQoKSBjb25zdDsKICAgIGludCB0b3AoKSBjb25zdDsKICAgIGludCByaWdodCgp
IGNvbnN0OwogICAgaW50IGJvdHRvbSgpIGNvbnN0OwoKICAgIFFDT09SRCAmckxlZnQoKTsKICAg
IFFDT09SRCAmclRvcCgpOwogICAgUUNPT1JEICZyUmlnaHQoKTsKICAgIFFDT09SRCAmckJvdHRv
bSgpOwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNvbnN0OwogICAgdm9pZCBzZXRM
ZWZ0KCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFRvcCggaW50IHBvcyApOwogICAgdm9pZCBzZXRS
aWdodCggaW50IHBvcyApOwogICAgdm9pZCBzZXRCb3R0b20oIGludCBwb3MgKTsKICAgIHZvaWQg
c2V0WCggaW50IHggKTsKICAgIHZvaWQgc2V0WSggaW50IHkgKTsKCiAgICB2b2lkIHNldFRvcExl
ZnQoIGNvbnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBzZXRCb3R0b21SaWdodCggY29uc3QgUVBv
aW50ICZwICk7CiAgICB2b2lkIHNldFRvcFJpZ2h0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZv
aWQgc2V0Qm90dG9tTGVmdCggY29uc3QgUVBvaW50ICZwICk7CgogICAgUVBvaW50IHRvcExlZnQo
KSBjb25zdDsKICAgIFFQb2ludCBib3R0b21SaWdodCgpIGNvbnN0OwogICAgUVBvaW50IHRvcFJp
Z2h0KCkgY29uc3Q7CiAgICBRUG9pbnQgYm90dG9tTGVmdCgpIGNvbnN0OwogICAgUVBvaW50IGNl
bnRlcigpIGNvbnN0OwoKICAgIHZvaWQgcmVjdCggaW50ICp4LCBpbnQgKnksIGludCAqdywgaW50
ICpoICkgY29uc3Q7CiAgICB2b2lkIGNvb3JkcyggaW50ICp4MSwgaW50ICp5MSwgaW50ICp4Miwg
aW50ICp5MiApIGNvbnN0OwoKICAgIHZvaWQgbW92ZUxlZnQoIGludCBwb3MgKTsKICAgIHZvaWQg
bW92ZVRvcCggaW50IHBvcyApOwogICAgdm9pZCBtb3ZlUmlnaHQoIGludCBwb3MgKTsKICAgIHZv
aWQgbW92ZUJvdHRvbSggaW50IHBvcyApOwogICAgdm9pZCBtb3ZlVG9wTGVmdCggY29uc3QgUVBv
aW50ICZwICk7CiAgICB2b2lkIG1vdmVCb3R0b21SaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAg
ICB2b2lkIG1vdmVUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCb3R0
b21MZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUNlbnRlciggY29uc3QgUVBv
aW50ICZwICk7CiAgICB2b2lkIG1vdmVCeSggaW50IGR4LCBpbnQgZHkgKTsKCiAgICB2b2lkIHNl
dFJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIHNldENvb3Jkcygg
aW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CiAgICB2b2lkIGFkZENvb3JkcyggaW50
IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CgogICAgUVNpemUgc2l6ZSgpIGNvbnN0Owog
ICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAgICB2b2lkIHNl
dFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRIZWlnaHQoIGludCBoICk7CiAgICB2b2lkIHNl
dFNpemUoIGNvbnN0IFFTaXplICZzICk7CgogICAgUVJlY3Qgb3BlcmF0b3J8KGNvbnN0IFFSZWN0
ICZyKSBjb25zdDsKICAgIFFSZWN0IG9wZXJhdG9yJihjb25zdCBRUmVjdCAmcikgY29uc3Q7CiAg
ICBRUmVjdCYgb3BlcmF0b3J8PShjb25zdCBRUmVjdCAmcik7CiAgICBRUmVjdCYgb3BlcmF0b3Im
PShjb25zdCBRUmVjdCAmcik7CgogICAgYm9vbCBjb250YWlucyggY29uc3QgUVBvaW50ICZwLCBi
b29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggaW50IHgsIGludCB5
ICkgY29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBpbnQgeCwgaW50IHksIGJvb2wgcHJvcGVyICkg
Y29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUmVjdCAmciwgYm9vbCBwcm9wZXI9RkFM
U0UgKSBjb25zdDsKICAgIFFSZWN0IHVuaXRlKCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwogICAg
UVJlY3QgaW50ZXJzZWN0KCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwogICAgYm9vbCBpbnRlcnNl
Y3RzKCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwoKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0o
IGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
IT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKCnByaXZhdGU6CgoKCgoKCiAgICBR
Q09PUkQgeDE7CiAgICBRQ09PUkQgeTE7CiAgICBRQ09PUkQgeDI7CiAgICBRQ09PUkQgeTI7Cgp9
OwoKIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlY3QgJiwgY29uc3QgUVJlY3QgJiApOwogYm9v
bCBvcGVyYXRvciE9KCBjb25zdCBRUmVjdCAmLCBjb25zdCBRUmVjdCAmICk7CgoKCgoKCiBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJlY3QgJiApOwogUURh
dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFSZWN0ICYgKTsKCgoKCgoKaW5s
aW5lIFFSZWN0OjpRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdo
dCApCnsKICAgIHgxID0gKFFDT09SRClsZWZ0OwogICAgeTEgPSAoUUNPT1JEKXRvcDsKICAgIHgy
ID0gKFFDT09SRCkobGVmdCt3aWR0aC0xKTsKICAgIHkyID0gKFFDT09SRCkodG9wK2hlaWdodC0x
KTsKfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHgyID09IHgx
LTEgJiYgeTIgPT0geTEtMTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzRW1wdHkoKSBjb25zdAp7
IHJldHVybiB4MSA+IHgyIHx8IHkxID4geTI7IH0KCmlubGluZSBib29sIFFSZWN0Ojppc1ZhbGlk
KCkgY29uc3QKeyByZXR1cm4geDEgPD0geDIgJiYgeTEgPD0geTI7IH0KCmlubGluZSBpbnQgUVJl
Y3Q6OmxlZnQoKSBjb25zdAp7IHJldHVybiB4MTsgfQoKaW5saW5lIGludCBRUmVjdDo6dG9wKCkg
Y29uc3QKeyByZXR1cm4geTE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnJpZ2h0KCkgY29uc3QKeyBy
ZXR1cm4geDI7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmJvdHRvbSgpIGNvbnN0CnsgcmV0dXJuIHky
OyB9CgppbmxpbmUgUUNPT1JEICZRUmVjdDo6ckxlZnQoKQp7IHJldHVybiB4MTsgfQoKaW5saW5l
IFFDT09SRCAmIFFSZWN0OjpyVG9wKCkKeyByZXR1cm4geTE7IH0KCmlubGluZSBRQ09PUkQgJiBR
UmVjdDo6clJpZ2h0KCkKeyByZXR1cm4geDI7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6ckJv
dHRvbSgpCnsgcmV0dXJuIHkyOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp4KCkgY29uc3QKeyByZXR1
cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnkoKSBjb25zdAp7IHJldHVybiB5MTsgfQoKaW5s
aW5lIHZvaWQgUVJlY3Q6OnNldExlZnQoIGludCBwb3MgKQp7IHgxID0gKFFDT09SRClwb3M7IH0K
CmlubGluZSB2b2lkIFFSZWN0OjpzZXRUb3AoIGludCBwb3MgKQp7IHkxID0gKFFDT09SRClwb3M7
IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRSaWdodCggaW50IHBvcyApCnsgeDIgPSAoUUNPT1JE
KXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldEJvdHRvbSggaW50IHBvcyApCnsgeTIgPSAo
UUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFgoIGludCB4ICkKeyB4MSA9IChR
Q09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFkoIGludCB5ICkKeyB5MSA9IChRQ09P
UkQpeTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6dG9wTGVmdCgpIGNvbnN0CnsgcmV0dXJuIFFQ
b2ludCh4MSwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojpib3R0b21SaWdodCgpIGNvbnN0
CnsgcmV0dXJuIFFQb2ludCh4MiwgeTIpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojp0b3BSaWdo
dCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MiwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0
Ojpib3R0b21MZWZ0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgxLCB5Mik7IH0KCmlubGluZSBR
UG9pbnQgUVJlY3Q6OmNlbnRlcigpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCgoeDEreDIpLzIsICh5
MSt5MikvMik7IH0KCmlubGluZSBpbnQgUVJlY3Q6OndpZHRoKCkgY29uc3QKeyByZXR1cm4geDIg
LSB4MSArIDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIHky
IC0geTEgKyAxOyB9CgppbmxpbmUgUVNpemUgUVJlY3Q6OnNpemUoKSBjb25zdAp7IHJldHVybiBR
U2l6ZSh4Mi14MSsxLCB5Mi15MSsxKTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmNvbnRhaW5zKCBp
bnQgeCwgaW50IHksIGJvb2wgcHJvcGVyICkgY29uc3QKewogICAgaWYgKCBwcm9wZXIgKQogICAg
ICAgIHJldHVybiB4ID4geDEgJiYgeCA8IHgyICYmCiAgICAgICAgICAgICAgIHkgPiB5MSAmJiB5
IDwgeTI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIHggPj0geDEgJiYgeCA8PSB4MiAmJgogICAg
ICAgICAgICAgICB5ID49IHkxICYmIHkgPD0geTI7Cn0KCmlubGluZSBib29sIFFSZWN0Ojpjb250
YWlucyggaW50IHgsIGludCB5ICkgY29uc3QKewogICAgcmV0dXJuIHggPj0geDEgJiYgeCA8PSB4
MiAmJgogICAgICAgICAgIHkgPj0geTEgJiYgeSA8PSB5MjsKfQojIDQ0ICIvdXNyL2xvY2FsL3F0
LTMuMS4xL2luY2x1ZGUvcXJlZ2lvbi5oIiAyCgoKCnN0cnVjdCBRUmVnaW9uUHJpdmF0ZTsKCgpj
bGFzcyBRUmVnaW9uCnsKcHVibGljOgogICAgZW51bSBSZWdpb25UeXBlIHsgUmVjdGFuZ2xlLCBF
bGxpcHNlIH07CgogICAgUVJlZ2lvbigpOwogICAgUVJlZ2lvbiggaW50IHgsIGludCB5LCBpbnQg
dywgaW50IGgsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNvbnN0IFFS
ZWN0ICYsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNvbnN0IFFQb2lu
dEFycmF5ICYsIGJvb2wgd2luZGluZz1GQUxTRSApOwogICAgUVJlZ2lvbiggY29uc3QgUVJlZ2lv
biAmICk7CiAgICBRUmVnaW9uKCBjb25zdCBRQml0bWFwICYgKTsKICAgflFSZWdpb24oKTsKICAg
IFFSZWdpb24gJm9wZXJhdG9yPSggY29uc3QgUVJlZ2lvbiAmICk7CgogICAgYm9vbCBpc051bGwo
KSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwoKICAgIGJvb2wgY29udGFpbnMoIGNv
bnN0IFFQb2ludCAmcCApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggY29uc3QgUVJlY3QgJnIg
KSBjb25zdDsKCiAgICB2b2lkIHRyYW5zbGF0ZSggaW50IGR4LCBpbnQgZHkgKTsKCiAgICBRUmVn
aW9uIHVuaXRlKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24gaW50ZXJzZWN0
KCBjb25zdCBRUmVnaW9uICYpIGNvbnN0OwogICAgUVJlZ2lvbiBzdWJ0cmFjdCggY29uc3QgUVJl
Z2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIGVvciggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7
CgogICAgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICBRTWVtQXJyYXk8UVJlY3Q+IHJl
Y3RzKCkgY29uc3Q7CiAgICB2b2lkIHNldFJlY3RzKCBjb25zdCBRUmVjdCAqLCBpbnQgKTsKCiAg
ICBjb25zdCBRUmVnaW9uIG9wZXJhdG9yfCggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBj
b25zdCBRUmVnaW9uIG9wZXJhdG9yKyggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBjb25z
dCBRUmVnaW9uIG9wZXJhdG9yJiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBjb25zdCBR
UmVnaW9uIG9wZXJhdG9yLSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBjb25zdCBRUmVn
aW9uIG9wZXJhdG9yXiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uJiBvcGVy
YXRvcnw9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yKz0oIGNvbnN0
IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0b3ImPSggY29uc3QgUVJlZ2lvbiAmICk7
CiAgICBRUmVnaW9uJiBvcGVyYXRvci09KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24m
IG9wZXJhdG9yXj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29u
c3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFSZWdpb24g
JnIgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0o
cikpOyB9CgoKCgogICAgUmVnaW9uIGhhbmRsZSgpIGNvbnN0IHsgaWYoIWRhdGEtPnJnbikgdXBk
YXRlWDExUmVnaW9uKCk7IHJldHVybiBkYXRhLT5yZ247IH0KIyAxMDggIi91c3IvbG9jYWwvcXQt
My4xLjEvaW5jbHVkZS9xcmVnaW9uLmgiCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9y
PDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWdpb24gJiApOwogICAgZnJpZW5kIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAg
ICBRUmVnaW9uKCBib29sICk7CiAgICBRUmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0
YWNoKCk7CgoKCgogICAgdm9pZCB1cGRhdGVYMTFSZWdpb24oKSBjb25zdDsKICAgIHZvaWQgKmNs
aXBSZWN0YW5nbGVzKCBpbnQgJm51bSApIGNvbnN0OwogICAgZnJpZW5kIHZvaWQgKnF0X2dldENs
aXBSZWN0cyggY29uc3QgUVJlZ2lvbiAmLCBpbnQgJiApOwoKICAgIHZvaWQgZXhlYyggY29uc3Qg
UUJ5dGVBcnJheSAmLCBpbnQgdmVyID0gMCApOwogICAgc3RydWN0IFFSZWdpb25EYXRhIDogcHVi
bGljIFFTaGFyZWQgewoKCgogICAgICAgIFJlZ2lvbiByZ247CiAgICAgICAgdm9pZCAqeHJlY3Rh
bmdsZXM7CiAgICAgICAgUVJlZ2lvblByaXZhdGUgKnJlZ2lvbjsKCgoKCgoKCiAgICAgICAgYm9v
bCBpc19udWxsOwogICAgfSAqZGF0YTsKCgoKCgoKCn07CiMgMTY3ICIvdXNyL2xvY2FsL3F0LTMu
MS4xL2luY2x1ZGUvcXJlZ2lvbi5oIgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3Ry
ZWFtICYsIGNvbnN0IFFSZWdpb24gJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRh
U3RyZWFtICYsIFFSZWdpb24gJiApOwojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv
cWV2ZW50LmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtaW1lLmgiIDEK
IyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtaW1lLmgiCiMgMSAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3FtYXAuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu
Y2x1ZGUvcW1hcC5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgi
IDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtYXAuaCIgMgoKIyAxICIvdXNy
L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMQojIDQyICIvdXNyL2xvY2Fs
L3F0LTMuMS4xL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4x
L2luY2x1ZGUvcWlvZGV2aWNlLmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl
L3Fpb2RldmljZS5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgi
IDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fpb2RldmljZS5oIiAyCiMgODgg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xaW9kZXZpY2UuaCIKY2xhc3MgUUlPRGV2aWNl
CnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRX1VMT05HIE9mZnNldDsKCgogICAgUUlPRGV2aWNl
KCk7CiAgICB2aXJ0dWFsIH5RSU9EZXZpY2UoKTsKCiAgICBpbnQgZmxhZ3MoKSBjb25zdCB7IHJl
dHVybiBpb01vZGU7IH0KICAgIGludCBtb2RlKCkgY29uc3QgeyByZXR1cm4gaW9Nb2RlICYgMHgw
MGZmOyB9CiAgICBpbnQgc3RhdGUoKSBjb25zdCB7IHJldHVybiBpb01vZGUgJiAweGYwMDA7IH0K
CiAgICBib29sIGlzRGlyZWN0QWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAx
MDApID09IDB4MDEwMCk7IH0KICAgIGJvb2wgaXNTZXF1ZW50aWFsQWNjZXNzKCkgY29uc3QgeyBy
ZXR1cm4gKChpb01vZGUgJiAweDAyMDApID09IDB4MDIwMCk7IH0KICAgIGJvb2wgaXNDb21iaW5l
ZEFjY2VzcygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMzAwKSA9PSAweDAzMDApOyB9
CiAgICBib29sIGlzQnVmZmVyZWQoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA0MCkg
IT0gMHgwMDQwKTsgfQogICAgYm9vbCBpc1JhdygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYg
MHgwMDQwKSA9PSAweDAwNDApOyB9CiAgICBib29sIGlzU3luY2hyb25vdXMoKSBjb25zdCB7IHJl
dHVybiAoKGlvTW9kZSAmIDB4MDA4MCkgIT0gMHgwMDgwKTsgfQogICAgYm9vbCBpc0FzeW5jaHJv
bm91cygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDgwKSA9PSAweDAwODApOyB9CiAg
ICBib29sIGlzVHJhbnNsYXRlZCgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDEwKSA9
PSAweDAwMTApOyB9CiAgICBib29sIGlzUmVhZGFibGUoKSBjb25zdCB7IHJldHVybiAoKGlvTW9k
ZSAmIDB4MDAwMSkgPT0gMHgwMDAxKTsgfQogICAgYm9vbCBpc1dyaXRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gKChpb01vZGUgJiAweDAwMDIpID09IDB4MDAwMik7IH0KICAgIGJvb2wgaXNSZWFkV3Jp
dGUoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMykgPT0gMHgwMDAzKTsgfQogICAg
Ym9vbCBpc0luYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAwOyB9CiAgICBib29s
IGlzT3BlbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gMHgxMDAwOyB9CgogICAgaW50IHN0
YXR1cygpIGNvbnN0IHsgcmV0dXJuIGlvU3Q7IH0KICAgIHZvaWQgcmVzZXRTdGF0dXMoKSB7IGlv
U3QgPSAwOyB9CgogICAgdmlydHVhbCBib29sIG9wZW4oIGludCBtb2RlICkgPSAwOwogICAgdmly
dHVhbCB2b2lkIGNsb3NlKCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGZsdXNoKCkgPSAwOwoKICAg
IHZpcnR1YWwgT2Zmc2V0IHNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIE9mZnNldCBhdCgp
IGNvbnN0OwogICAgdmlydHVhbCBib29sIGF0KCBPZmZzZXQgKTsKICAgIHZpcnR1YWwgYm9vbCBh
dEVuZCgpIGNvbnN0OwogICAgYm9vbCByZXNldCgpIHsgcmV0dXJuIGF0KDApOyB9CgogICAgdmly
dHVhbCBRX0xPTkcgcmVhZEJsb2NrKCBjaGFyICpkYXRhLCBRX1VMT05HIG1heGxlbiApID0gMDsK
ICAgIHZpcnR1YWwgUV9MT05HIHdyaXRlQmxvY2soIGNvbnN0IGNoYXIgKmRhdGEsIFFfVUxPTkcg
bGVuICkgPSAwOwogICAgdmlydHVhbCBRX0xPTkcgcmVhZExpbmUoIGNoYXIgKmRhdGEsIFFfVUxP
TkcgbWF4bGVuICk7CiAgICBRX0xPTkcgd3JpdGVCbG9jayggY29uc3QgUUJ5dGVBcnJheSYgZGF0
YSApOwogICAgdmlydHVhbCBRQnl0ZUFycmF5IHJlYWRBbGwoKTsKCiAgICB2aXJ0dWFsIGludCBn
ZXRjaCgpID0gMDsKICAgIHZpcnR1YWwgaW50IHB1dGNoKCBpbnQgKSA9IDA7CiAgICB2aXJ0dWFs
IGludCB1bmdldGNoKCBpbnQgKSA9IDA7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNldEZsYWdzKCBp
bnQgZiApIHsgaW9Nb2RlID0gZjsgfQogICAgdm9pZCBzZXRUeXBlKCBpbnQgKTsKICAgIHZvaWQg
c2V0TW9kZSggaW50ICk7CiAgICB2b2lkIHNldFN0YXRlKCBpbnQgKTsKICAgIHZvaWQgc2V0U3Rh
dHVzKCBpbnQgKTsKICAgIE9mZnNldCBpb0luZGV4OwoKcHJpdmF0ZToKICAgIGludCBpb01vZGU7
CiAgICBpbnQgaW9TdDsKCnByaXZhdGU6CgogICAgUUlPRGV2aWNlKCBjb25zdCBRSU9EZXZpY2Ug
JiApOwogICAgUUlPRGV2aWNlICZvcGVyYXRvcj0oIGNvbnN0IFFJT0RldmljZSAmICk7Cgp9Owoj
IDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMgoKCgoKY2xh
c3MgUURhdGFTdHJlYW0KewpwdWJsaWM6CiAgICBRRGF0YVN0cmVhbSgpOwogICAgUURhdGFTdHJl
YW0oIFFJT0RldmljZSAqICk7CiAgICBRRGF0YVN0cmVhbSggUUJ5dGVBcnJheSwgaW50IG1vZGUg
KTsKICAgIHZpcnR1YWwgflFEYXRhU3RyZWFtKCk7CgogICAgUUlPRGV2aWNlICpkZXZpY2UoKSBj
b25zdDsKICAgIHZvaWQgc2V0RGV2aWNlKCBRSU9EZXZpY2UgKiApOwogICAgdm9pZCB1bnNldERl
dmljZSgpOwoKICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgZW9mKCkgY29uc3Q7Cgog
ICAgZW51bSBCeXRlT3JkZXIgeyBCaWdFbmRpYW4sIExpdHRsZUVuZGlhbiB9OwogICAgaW50IGJ5
dGVPcmRlcigpIGNvbnN0OwogICAgdm9pZCBzZXRCeXRlT3JkZXIoIGludCApOwoKICAgIGJvb2wg
aXNQcmludGFibGVEYXRhKCkgY29uc3Q7CiAgICB2b2lkIHNldFByaW50YWJsZURhdGEoIGJvb2wg
KTsKCiAgICBpbnQgdmVyc2lvbigpIGNvbnN0OwogICAgdm9pZCBzZXRWZXJzaW9uKCBpbnQgKTsK
CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQ4ICZpICk7CiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I+PiggUV9VSU5UOCAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o
IFFfSU5UMTYgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQxNiAmaSAp
OwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMzIgJmkgKTsKICAgIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9y
Pj4oIFFfTE9ORyAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUxPTkcgJmkg
KTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQgJmYgKTsKICAgIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBkb3VibGUgJmYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+
KCBjaGFyIComc3RyICk7CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UOCBpICk7
CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UOCBpICk7CiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUV9JTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg
UV9VSU5UMTYgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UMzIgaSApOwog
ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDMyIGkgKTsKICAgIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBRX0xPTkcgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFf
VUxPTkcgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGZsb2F0IGYgKTsKICAgIFFE
YXRhU3RyZWFtICZvcGVyYXRvcjw8KCBkb3VibGUgZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPDwoIGNvbnN0IGNoYXIgKnN0ciApOwoKICAgIFFEYXRhU3RyZWFtICZyZWFkQnl0ZXMoIGNo
YXIgKiYsIHVpbnQgJmxlbiApOwogICAgUURhdGFTdHJlYW0gJnJlYWRSYXdCeXRlcyggY2hhciAq
LCB1aW50IGxlbiApOwoKICAgIFFEYXRhU3RyZWFtICZ3cml0ZUJ5dGVzKCBjb25zdCBjaGFyICos
IHVpbnQgbGVuICk7CiAgICBRRGF0YVN0cmVhbSAmd3JpdGVSYXdCeXRlcyggY29uc3QgY2hhciAq
LCB1aW50IGxlbiApOwoKcHJpdmF0ZToKICAgIFFJT0RldmljZSAqZGV2OwogICAgYm9vbCBvd25k
ZXY7CiAgICBpbnQgYnl0ZW9yZGVyOwogICAgYm9vbCBwcmludGFibGU7CiAgICBib29sIG5vc3dh
cDsKICAgIGludCB2ZXI7Cgpwcml2YXRlOgoKICAgIFFEYXRhU3RyZWFtKCBjb25zdCBRRGF0YVN0
cmVhbSAmICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRRGF0YVN0cmVhbSAm
ICk7Cgp9OwoKCgoKCgppbmxpbmUgUUlPRGV2aWNlICpRRGF0YVN0cmVhbTo6ZGV2aWNlKCkgY29u
c3QKeyByZXR1cm4gZGV2OyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0cmVhbTo6YXRFbmQoKSBjb25z
dAp7IHJldHVybiBkZXYgPyBkZXYtPmF0RW5kKCkgOiBUUlVFOyB9CgppbmxpbmUgYm9vbCBRRGF0
YVN0cmVhbTo6ZW9mKCkgY29uc3QKeyByZXR1cm4gYXRFbmQoKTsgfQoKaW5saW5lIGludCBRRGF0
YVN0cmVhbTo6Ynl0ZU9yZGVyKCkgY29uc3QKeyByZXR1cm4gYnl0ZW9yZGVyOyB9CgppbmxpbmUg
Ym9vbCBRRGF0YVN0cmVhbTo6aXNQcmludGFibGVEYXRhKCkgY29uc3QKeyByZXR1cm4gcHJpbnRh
YmxlOyB9CgppbmxpbmUgdm9pZCBRRGF0YVN0cmVhbTo6c2V0UHJpbnRhYmxlRGF0YSggYm9vbCBw
ICkKeyBwcmludGFibGUgPSBwOyB9CgppbmxpbmUgaW50IFFEYXRhU3RyZWFtOjp2ZXJzaW9uKCkg
Y29uc3QKeyByZXR1cm4gdmVyOyB9CgppbmxpbmUgdm9pZCBRRGF0YVN0cmVhbTo6c2V0VmVyc2lv
biggaW50IHYgKQp7IHZlciA9IHY7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06
Om9wZXJhdG9yPj4oIFFfVUlOVDggJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQ4JilpOyB9
CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQxNiAm
aSApCnsgcmV0dXJuICp0aGlzID4+IChRX0lOVDE2JilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0g
JlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQzMiAmaSApCnsgcmV0dXJuICp0aGlzID4+
IChRX0lOVDMyJilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRv
cj4+KCBRX1VMT05HICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfTE9ORyYpaTsgfQoKaW5saW5l
IFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UOCBpICkKeyByZXR1
cm4gKnRoaXMgPDwgKFFfSU5UOClpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFt
OjpvcGVyYXRvcjw8KCBRX1VJTlQxNiBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UMTYpaTsg
fQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UMzIg
aSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDMyKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAm
UURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUxPTkcgaSApCnsgcmV0dXJuICp0aGlzIDw8IChR
X0xPTkcpaTsgfQojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW1hcC5oIiAyCiMg
MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwYWlyLmgiIDEKIyA0MCAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3FwYWlyLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs
dWRlL3FnbG9iYWwuaCIgMQojIDQxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBhaXIu
aCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgpzdHJ1Y3QgUVBhaXIKewogICAg
dHlwZWRlZiBUMSBmaXJzdF90eXBlOwogICAgdHlwZWRlZiBUMiBzZWNvbmRfdHlwZTsKCiAgICBR
UGFpcigpCiAgICAgICAgOiBmaXJzdCggVDEoKSApLCBzZWNvbmQoIFQyKCkgKQogICAge30KICAg
IFFQYWlyKCBjb25zdCBUMSYgdDEsIGNvbnN0IFQyJiB0MiApCiAgICAgICAgOiBmaXJzdCggdDEg
KSwgc2Vjb25kKCB0MiApCiAgICB7fQoKICAgIFQxIGZpcnN0OwogICAgVDIgc2Vjb25kOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBh
aXI8VDEsIFQyPiYgeCwgY29uc3QgUVBhaXI8VDEsIFQyPiYgeSApCnsKICAgIHJldHVybiB4LmZp
cnN0ID09IHkuZmlyc3QgJiYgeC5zZWNvbmQgPT0geS5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUMSwgY2xhc3MgVDI+CiBib29sIG9wZXJhdG9yPCggY29uc3QgUVBhaXI8VDEsIFQyPiYgeCwg
Y29uc3QgUVBhaXI8VDEsIFQyPiYgeSApCnsKICAgIHJldHVybiB4LmZpcnN0IDwgeS5maXJzdCB8
fAogICAgICAgICAgICggISggeS5maXJzdCA8IHguZmlyc3QgKSAmJiB4LnNlY29uZCA8IHkuc2Vj
b25kICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiBRUGFpcjxUMSwgVDI+IHFN
YWtlUGFpciggY29uc3QgVDEmIHgsIGNvbnN0IFQyJiB5ICkKewogICAgcmV0dXJuIFFQYWlyPFQx
LCBUMj4oIHgsIHkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CmlubGluZSBR
RGF0YVN0cmVhbSYgb3BlcmF0b3I+PiggUURhdGFTdHJlYW0mIHMsIFFQYWlyPFQxLCBUMj4mIHAg
KQp7CiAgICBzID4+IHAuZmlyc3QgPj4gcC5zZWNvbmQ7CiAgICByZXR1cm4gczsKfQoKdGVtcGxh
dGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KCBR
RGF0YVN0cmVhbSYgcywgY29uc3QgUVBhaXI8VDEsIFQyPiYgcCApCnsKICAgIHMgPDwgcC5maXJz
dCA8PCBwLnNlY29uZDsKICAgIHJldHVybiBzOwp9CiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xbWFwLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVl
bGlzdC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmFsdWVsaXN0Lmgi
CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0bC5oIiAxCiMgNDIgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xdGwuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1
ZGUvcWdsb2JhbC5oIiAxCiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGwuaCIg
MgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGV4dHN0cmVhbS5oIiAxCiMgNDgg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGV4dHN0cmVhbS5oIgpjbGFzcyBRVGV4dENv
ZGVjOwpjbGFzcyBRVGV4dERlY29kZXI7CgpjbGFzcyBRVGV4dFN0cmVhbVByaXZhdGU7CgpjbGFz
cyBRVGV4dFN0cmVhbQp7CnB1YmxpYzoKICAgIGVudW0gRW5jb2RpbmcgeyBMb2NhbGUsIExhdGlu
MSwgVW5pY29kZSwgVW5pY29kZU5ldHdvcmtPcmRlciwKICAgICAgICAgICAgICAgICAgICBVbmlj
b2RlUmV2ZXJzZSwgUmF3VW5pY29kZSwgVW5pY29kZVVURjggfTsKCiAgICB2b2lkIHNldEVuY29k
aW5nKCBFbmNvZGluZyApOwoKICAgIHZvaWQgc2V0Q29kZWMoIFFUZXh0Q29kZWMqICk7CiAgICBR
VGV4dENvZGVjICpjb2RlYygpOwoKCiAgICBRVGV4dFN0cmVhbSgpOwogICAgUVRleHRTdHJlYW0o
IFFJT0RldmljZSAqICk7CiAgICBRVGV4dFN0cmVhbSggUVN0cmluZyosIGludCBtb2RlICk7CiAg
ICBRVGV4dFN0cmVhbSggUVN0cmluZyYsIGludCBtb2RlICk7CiAgICBRVGV4dFN0cmVhbSggUUJ5
dGVBcnJheSwgaW50IG1vZGUgKTsKICAgIFFUZXh0U3RyZWFtKCBGSUxFICosIGludCBtb2RlICk7
CiAgICB2aXJ0dWFsIH5RVGV4dFN0cmVhbSgpOwoKICAgIFFJT0RldmljZSAqZGV2aWNlKCkgY29u
c3Q7CiAgICB2b2lkIHNldERldmljZSggUUlPRGV2aWNlICogKTsKICAgIHZvaWQgdW5zZXREZXZp
Y2UoKTsKCiAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIGVvZigpIGNvbnN0OwoKICAg
IFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBRQ2hhciAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3Bl
cmF0b3I+PiggY2hhciAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2lnbmVkIHNo
b3J0ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCB1bnNpZ25lZCBzaG9ydCAmICk7
CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2lnbmVkIGludCAmICk7CiAgICBRVGV4dFN0
cmVhbSAmb3BlcmF0b3I+PiggdW5zaWduZWQgaW50ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVy
YXRvcj4+KCBzaWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggdW5z
aWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQgJiApOwog
ICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmICk7CiAgICBRVGV4dFN0cmVhbSAm
b3BlcmF0b3I+PiggY2hhciAqICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUVN0cmlu
ZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUUNTdHJpbmcgJiApOwoKICAgIFFU
ZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBRQ2hhciApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9y
PDwoIGNoYXIgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBzaWduZWQgc2hvcnQgKTsK
ICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCB1bnNpZ25lZCBzaG9ydCApOwogICAgUVRleHRT
dHJlYW0gJm9wZXJhdG9yPDwoIHNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRv
cjw8KCB1bnNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBzaWduZWQg
bG9uZyApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHVuc2lnbmVkIGxvbmcgKTsKICAg
IFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBmbG9hdCApOwogICAgUVRleHRTdHJlYW0gJm9wZXJh
dG9yPDwoIGRvdWJsZSApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIGNvbnN0IGNoYXIq
ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUVN0cmluZyAmICk7CiAgICBR
VGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUUNTdHJpbmcgJiApOwogICAgUVRleHRTdHJl
YW0gJm9wZXJhdG9yPDwoIHZvaWQgKiApOwoKICAgIFFUZXh0U3RyZWFtICZyZWFkUmF3Qnl0ZXMo
IGNoYXIgKiwgdWludCBsZW4gKTsKICAgIFFUZXh0U3RyZWFtICZ3cml0ZVJhd0J5dGVzKCBjb25z
dCBjaGFyKiAsIHVpbnQgbGVuICk7CgogICAgUVN0cmluZyByZWFkTGluZSgpOwogICAgUVN0cmlu
ZyByZWFkKCk7CiAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKCk7CgogICAgZW51bSB7CiAgICAgICAg
c2tpcHdzID0gMHgwMDAxLAogICAgICAgIGxlZnQgPSAweDAwMDIsCiAgICAgICAgcmlnaHQgPSAw
eDAwMDQsCiAgICAgICAgaW50ZXJuYWwgPSAweDAwMDgsCiAgICAgICAgYmluID0gMHgwMDEwLAog
ICAgICAgIG9jdCA9IDB4MDAyMCwKICAgICAgICBkZWMgPSAweDAwNDAsCiAgICAgICAgaGV4ID0g
MHgwMDgwLAogICAgICAgIHNob3diYXNlID0gMHgwMTAwLAogICAgICAgIHNob3dwb2ludCA9IDB4
MDIwMCwKICAgICAgICB1cHBlcmNhc2UgPSAweDA0MDAsCiAgICAgICAgc2hvd3BvcyA9IDB4MDgw
MCwKICAgICAgICBzY2llbnRpZmljPSAweDEwMDAsCiAgICAgICAgZml4ZWQgPSAweDIwMDAKICAg
IH07CgogICAgc3RhdGljIGNvbnN0IGludCBiYXNlZmllbGQ7CiAgICBzdGF0aWMgY29uc3QgaW50
IGFkanVzdGZpZWxkOwogICAgc3RhdGljIGNvbnN0IGludCBmbG9hdGZpZWxkOwoKICAgIGludCBm
bGFncygpIGNvbnN0OwogICAgaW50IGZsYWdzKCBpbnQgZiApOwogICAgaW50IHNldGYoIGludCBi
aXRzICk7CiAgICBpbnQgc2V0ZiggaW50IGJpdHMsIGludCBtYXNrICk7CiAgICBpbnQgdW5zZXRm
KCBpbnQgYml0cyApOwoKICAgIHZvaWQgcmVzZXQoKTsKCiAgICBpbnQgd2lkdGgoKSBjb25zdDsK
ICAgIGludCB3aWR0aCggaW50ICk7CiAgICBpbnQgZmlsbCgpIGNvbnN0OwogICAgaW50IGZpbGwo
IGludCApOwogICAgaW50IHByZWNpc2lvbigpIGNvbnN0OwogICAgaW50IHByZWNpc2lvbiggaW50
ICk7Cgpwcml2YXRlOgogICAgbG9uZyBpbnB1dF9pbnQoKTsKICAgIHZvaWQgaW5pdCgpOwogICAg
UVRleHRTdHJlYW0gJm91dHB1dF9pbnQoIGludCwgdWxvbmcsIGJvb2wgKTsKICAgIFFJT0Rldmlj
ZSAqZGV2OwoKICAgIGludCBmZmxhZ3M7CiAgICBpbnQgZndpZHRoOwogICAgaW50IGZpbGxjaGFy
OwogICAgaW50IGZwcmVjOwogICAgYm9vbCBkb1VuaWNvZGVIZWFkZXI7CiAgICBib29sIG93bmRl
djsKICAgIFFUZXh0Q29kZWMgKm1hcHBlcjsKICAgIFFUZXh0U3RyZWFtUHJpdmF0ZSAqIGQ7CiAg
ICBRQ2hhciB1bnVzZWQxOwogICAgYm9vbCBsYXRpbjE7CiAgICBib29sIGludGVybmFsT3JkZXI7
CiAgICBib29sIG5ldHdvcmtPcmRlcjsKICAgIHZvaWQgKnVudXNlZDI7CgogICAgUUNoYXIgZWF0
X3dzKCk7CiAgICB1aW50IHRzX2dldGxpbmUoIFFDaGFyKiApOwogICAgdm9pZCB0c191bmdldGMo
IFFDaGFyICk7CiAgICBRQ2hhciB0c19nZXRjKCk7CiAgICB1aW50IHRzX2dldGJ1ZiggUUNoYXIq
LCB1aW50ICk7CiAgICB2b2lkIHRzX3B1dGMoaW50KTsKICAgIHZvaWQgdHNfcHV0YyhRQ2hhcik7
CiAgICBib29sIHRzX2lzc3BhY2UoUUNoYXIpOwogICAgYm9vbCB0c19pc2RpZ2l0KFFDaGFyKTsK
ICAgIHVsb25nIGlucHV0X2JpbigpOwogICAgdWxvbmcgaW5wdXRfb2N0KCk7CiAgICB1bG9uZyBp
bnB1dF9kZWMoKTsKICAgIHVsb25nIGlucHV0X2hleCgpOwogICAgZG91YmxlIGlucHV0X2RvdWJs
ZSgpOwogICAgUVRleHRTdHJlYW0gJndyaXRlQmxvY2soIGNvbnN0IGNoYXIqIHAsIHVpbnQgbGVu
ICk7CiAgICBRVGV4dFN0cmVhbSAmd3JpdGVCbG9jayggY29uc3QgUUNoYXIqIHAsIHVpbnQgbGVu
ICk7Cgpwcml2YXRlOgoKICAgIFFUZXh0U3RyZWFtKCBjb25zdCBRVGV4dFN0cmVhbSAmICk7CiAg
ICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRVGV4dFN0cmVhbSAmICk7Cgp9OwoKdHlw
ZWRlZiBRVGV4dFN0cmVhbSBRVFM7CgpjbGFzcyBRVGV4dElTdHJlYW0gOiBwdWJsaWMgUVRleHRT
dHJlYW0gewpwdWJsaWM6CiAgICBRVGV4dElTdHJlYW0oIGNvbnN0IFFTdHJpbmcqIHMgKSA6CiAg
ICAgICAgUVRleHRTdHJlYW0oKFFTdHJpbmcqKXMsMHgwMDAxKSB7IH0KICAgIFFUZXh0SVN0cmVh
bSggUUJ5dGVBcnJheSBiYSApIDoKICAgICAgICBRVGV4dFN0cmVhbShiYSwweDAwMDEpIHsgfQog
ICAgUVRleHRJU3RyZWFtKCBGSUxFICpmICkgOgogICAgICAgIFFUZXh0U3RyZWFtKGYsMHgwMDAx
KSB7IH0KCnByaXZhdGU6CgogICAgUVRleHRJU3RyZWFtKCBjb25zdCBRVGV4dElTdHJlYW0gJiAp
OwogICAgUVRleHRJU3RyZWFtICZvcGVyYXRvcj0oIGNvbnN0IFFUZXh0SVN0cmVhbSAmICk7Cgp9
OwoKY2xhc3MgUVRleHRPU3RyZWFtIDogcHVibGljIFFUZXh0U3RyZWFtIHsKcHVibGljOgogICAg
UVRleHRPU3RyZWFtKCBRU3RyaW5nKiBzICkgOgogICAgICAgIFFUZXh0U3RyZWFtKHMsMHgwMDAy
KSB7IH0KICAgIFFUZXh0T1N0cmVhbSggUUJ5dGVBcnJheSBiYSApIDoKICAgICAgICBRVGV4dFN0
cmVhbShiYSwweDAwMDIpIHsgfQogICAgUVRleHRPU3RyZWFtKCBGSUxFICpmICkgOgogICAgICAg
IFFUZXh0U3RyZWFtKGYsMHgwMDAyKSB7IH0KCnByaXZhdGU6CgogICAgUVRleHRPU3RyZWFtKCBj
b25zdCBRVGV4dE9TdHJlYW0gJiApOwogICAgUVRleHRPU3RyZWFtICZvcGVyYXRvcj0oIGNvbnN0
IFFUZXh0T1N0cmVhbSAmICk7Cgp9OwoKCgoKCmlubGluZSBRSU9EZXZpY2UgKlFUZXh0U3RyZWFt
OjpkZXZpY2UoKSBjb25zdAp7IHJldHVybiBkZXY7IH0KCmlubGluZSBib29sIFFUZXh0U3RyZWFt
OjphdEVuZCgpIGNvbnN0CnsgcmV0dXJuIGRldiA/IGRldi0+YXRFbmQoKSA6IEZBTFNFOyB9Cgpp
bmxpbmUgYm9vbCBRVGV4dFN0cmVhbTo6ZW9mKCkgY29uc3QKeyByZXR1cm4gYXRFbmQoKTsgfQoK
aW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmxhZ3MoKSBjb25zdAp7IHJldHVybiBmZmxhZ3M7IH0K
CmlubGluZSBpbnQgUVRleHRTdHJlYW06OmZsYWdzKCBpbnQgZiApCnsgaW50IG9sZGYgPSBmZmxh
Z3M7IGZmbGFncyA9IGY7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpz
ZXRmKCBpbnQgYml0cyApCnsgaW50IG9sZGYgPSBmZmxhZ3M7IGZmbGFncyB8PSBiaXRzOyByZXR1
cm4gb2xkZjsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6c2V0ZiggaW50IGJpdHMsIGludCBt
YXNrICkKeyBpbnQgb2xkZiA9IGZmbGFnczsgZmZsYWdzID0gKGZmbGFncyAmIH5tYXNrKSB8IChi
aXRzICYgbWFzayk7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjp1bnNl
dGYoIGludCBiaXRzICkKeyBpbnQgb2xkZiA9IGZmbGFnczsgZmZsYWdzICY9IH5iaXRzOyByZXR1
cm4gb2xkZjsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6d2lkdGgoKSBjb25zdAp7IHJldHVy
biBmd2lkdGg7IH0KCmlubGluZSBpbnQgUVRleHRTdHJlYW06OndpZHRoKCBpbnQgdyApCnsgaW50
IG9sZHcgPSBmd2lkdGg7IGZ3aWR0aCA9IHc7IHJldHVybiBvbGR3OyB9CgppbmxpbmUgaW50IFFU
ZXh0U3RyZWFtOjpmaWxsKCkgY29uc3QKeyByZXR1cm4gZmlsbGNoYXI7IH0KCmlubGluZSBpbnQg
UVRleHRTdHJlYW06OmZpbGwoIGludCBmICkKeyBpbnQgb2xkYyA9IGZpbGxjaGFyOyBmaWxsY2hh
ciA9IGY7IHJldHVybiBvbGRjOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpwcmVjaXNpb24o
KSBjb25zdAp7IHJldHVybiBmcHJlYzsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6cHJlY2lz
aW9uKCBpbnQgcCApCnsgaW50IG9sZHAgPSBmcHJlYzsgZnByZWMgPSBwOyByZXR1cm4gb2xkcDsg
fQoKCgoKaW5saW5lIFFDaGFyIFFUZXh0U3RyZWFtOjp0c19nZXRjKCkKeyBRQ2hhciByOyByZXR1
cm4gKCB0c19nZXRidWYoICZyLDEgKSA9PSAxID8gciA6IFFDaGFyKCh1c2hvcnQpMHhmZmZmKSAp
OyB9CgoKCgoKdHlwZWRlZiBRVGV4dFN0cmVhbSAmICgqUVRTRlVOQykoUVRleHRTdHJlYW0gJik7
CnR5cGVkZWYgaW50IChRVGV4dFN0cmVhbTo6KlFUU01GSSkoaW50KTsKCmNsYXNzIFFUU01hbmlw
IHsKcHVibGljOgogICAgUVRTTWFuaXAoIFFUU01GSSBtLCBpbnQgYSApIHsgbWY9bTsgYXJnPWE7
IH0KICAgIHZvaWQgZXhlYyggUVRleHRTdHJlYW0gJnMgKSB7IChzLiptZikoYXJnKTsgfQpwcml2
YXRlOgogICAgUVRTTUZJIG1mOwogICAgaW50IGFyZzsKfTsKCiBpbmxpbmUgUVRleHRTdHJlYW0g
Jm9wZXJhdG9yPj4oIFFUZXh0U3RyZWFtICZzLCBRVFNGVU5DIGYgKQp7IHJldHVybiAoKmYpKCBz
ICk7IH0KCiBpbmxpbmUgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIFFUZXh0U3RyZWFtICZzLCBR
VFNGVU5DIGYgKQp7IHJldHVybiAoKmYpKCBzICk7IH0KCiBpbmxpbmUgUVRleHRTdHJlYW0gJm9w
ZXJhdG9yPDwoIFFUZXh0U3RyZWFtICZzLCBRVFNNYW5pcCBtICkKeyBtLmV4ZWMocyk7IHJldHVy
biBzOyB9CgogUVRleHRTdHJlYW0gJmJpbiggUVRleHRTdHJlYW0gJnMgKTsKIFFUZXh0U3RyZWFt
ICZvY3QoIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAmZGVjKCBRVGV4dFN0cmVhbSAm
cyApOwogUVRleHRTdHJlYW0gJmhleCggUVRleHRTdHJlYW0gJnMgKTsKIFFUZXh0U3RyZWFtICZl
bmRsKCBRVGV4dFN0cmVhbSAmcyApOwogUVRleHRTdHJlYW0gJmZsdXNoKCBRVGV4dFN0cmVhbSAm
cyApOwogUVRleHRTdHJlYW0gJndzKCBRVGV4dFN0cmVhbSAmcyApOwogUVRleHRTdHJlYW0gJnJl
c2V0KCBRVGV4dFN0cmVhbSAmcyApOwoKIGlubGluZSBRVFNNYW5pcCBxU2V0VyggaW50IHcgKQp7
CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6d2lkdGg7CiAgICByZXR1cm4gUVRTTWFu
aXAoZnVuYyx3KTsKfQoKIGlubGluZSBRVFNNYW5pcCBxU2V0RmlsbCggaW50IGYgKQp7CiAgICBR
VFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6ZmlsbDsKICAgIHJldHVybiBRVFNNYW5pcChmdW5j
LGYpOwp9CgogaW5saW5lIFFUU01hbmlwIHFTZXRQcmVjaXNpb24oIGludCBwICkKewogICAgUVRT
TUZJIGZ1bmMgPSAmUVRleHRTdHJlYW06OnByZWNpc2lvbjsKICAgIHJldHVybiBRVFNNYW5pcChm
dW5jLHApOwp9CiMgNDQgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGwuaCIgMgoKCgoK
dGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFUZXh0T1N0cmVhbUl0ZXJhdG9yCnsKcHJvdGVjdGVk
OgogICAgUVRleHRPU3RyZWFtJiBzdHJlYW07CiAgICBRU3RyaW5nIHNlcGFyYXRvcjsKCnB1Ymxp
YzoKICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9yKCBRVGV4dE9TdHJlYW0mIHMpIDogc3RyZWFtKCBz
ICkge30KICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9yKCBRVGV4dE9TdHJlYW0mIHMsIGNvbnN0IFFT
dHJpbmcmIHNlcCApCiAgICAgICAgOiBzdHJlYW0oIHMgKSwgc2VwYXJhdG9yKCBzZXAgKSB7fQog
ICAgUVRleHRPU3RyZWFtSXRlcmF0b3I8VD4mIG9wZXJhdG9yPSAoIGNvbnN0IFQmIHggKSB7CiAg
ICAgICAgc3RyZWFtIDw8IHg7CiAgICAgICAgaWYgKCAhc2VwYXJhdG9yLmlzRW1wdHkoKSApCiAg
ICAgICAgICAgIHN0cmVhbSA8PCBzZXBhcmF0b3I7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQogICAgUVRleHRPU3RyZWFtSXRlcmF0b3I8VD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz
OyB9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0
aGlzOyB9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0
dXJuICp0aGlzOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91
dHB1dEl0ZXJhdG9yPgppbmxpbmUgT3V0cHV0SXRlcmF0b3IgcUNvcHkoIElucHV0SXRlcmF0b3Ig
X2JlZ2luLCBJbnB1dEl0ZXJhdG9yIF9lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3V0cHV0SXRlcmF0b3IgX2Rlc3QgKQp7CiAgICB3aGlsZSggX2JlZ2luICE9IF9lbmQgKQogICAg
ICAgICpfZGVzdCsrID0gKl9iZWdpbisrOwogICAgcmV0dXJuIF9kZXN0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgQmlJdGVyYXRvciwgY2xhc3MgQmlPdXRwdXRJdGVyYXRvcj4KaW5saW5lIEJpT3V0cHV0
SXRlcmF0b3IgcUNvcHlCYWNrd2FyZCggQmlJdGVyYXRvciBfYmVnaW4sIEJpSXRlcmF0b3IgX2Vu
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlPdXRwdXRJdGVyYXRv
ciBfZGVzdCApCnsKICAgIHdoaWxlICggX2JlZ2luICE9IF9lbmQgKQogICAgICAgICotLV9kZXN0
ID0gKi0tX2VuZDsKICAgIHJldHVybiBfZGVzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRl
cmF0b3IxLCBjbGFzcyBJbnB1dEl0ZXJhdG9yMj4KaW5saW5lIGJvb2wgcUVxdWFsKCBJbnB1dEl0
ZXJhdG9yMSBmaXJzdDEsIElucHV0SXRlcmF0b3IxIGxhc3QxLCBJbnB1dEl0ZXJhdG9yMiBmaXJz
dDIgKQp7CgogICAgZm9yICggOyBmaXJzdDEgIT0gbGFzdDE7ICsrZmlyc3QxLCArK2ZpcnN0MiAp
CiAgICAgICAgaWYgKCAqZmlyc3QxICE9ICpmaXJzdDIgKQogICAgICAgICAgICByZXR1cm4gRkFM
U0U7CiAgICByZXR1cm4gVFJVRTsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvciwg
Y2xhc3MgVD4KaW5saW5lIHZvaWQgcUZpbGwoIEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2Fy
ZEl0ZXJhdG9yIGxhc3QsIGNvbnN0IFQmIHZhbCApCnsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFz
dDsgKytmaXJzdCApCiAgICAgICAgKmZpcnN0ID0gdmFsOwp9CiMgMTIxICIvdXNyL2xvY2FsL3F0
LTMuMS4xL2luY2x1ZGUvcXRsLmgiCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFz
cyBUPgppbmxpbmUgSW5wdXRJdGVyYXRvciBxRmluZCggSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5w
dXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgdmFs
ICkKewogICAgd2hpbGUgKCBmaXJzdCAhPSBsYXN0ICYmICpmaXJzdCAhPSB2YWwgKQogICAgICAg
ICsrZmlyc3Q7CiAgICByZXR1cm4gZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJh
dG9yLCBjbGFzcyBULCBjbGFzcyBTaXplPgppbmxpbmUgdm9pZCBxQ291bnQoIElucHV0SXRlcmF0
b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwgY29uc3QgVCYgdmFsdWUsCiAgICAgICAgICAg
ICAgICAgICAgU2l6ZSYgbiApCnsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCAp
CiAgICAgICAgaWYgKCAqZmlyc3QgPT0gdmFsdWUgKQogICAgICAgICAgICArK247Cn0KCnRlbXBs
YXRlIDxjbGFzcyBUPgppbmxpbmUgdm9pZCBxU3dhcCggVCYgX3ZhbHVlMSwgVCYgX3ZhbHVlMiAp
CnsKICAgIFQgdG1wID0gX3ZhbHVlMTsKICAgIF92YWx1ZTEgPSBfdmFsdWUyOwogICAgX3ZhbHVl
MiA9IHRtcDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogdm9pZCBxQnViYmxl
U29ydCggSW5wdXRJdGVyYXRvciBiLCBJbnB1dEl0ZXJhdG9yIGUgKQp7CgogICAgSW5wdXRJdGVy
YXRvciBsYXN0ID0gZTsKICAgIC0tbGFzdDsKCiAgICBpZiAoIGxhc3QgPT0gYiApCiAgICAgICAg
cmV0dXJuOwoKCiAgICB3aGlsZSggYiAhPSBsYXN0ICkgewogICAgICAgIGJvb2wgc3dhcHBlZCA9
IEZBTFNFOwogICAgICAgIElucHV0SXRlcmF0b3Igc3dhcF9wb3MgPSBiOwogICAgICAgIElucHV0
SXRlcmF0b3IgeCA9IGU7CiAgICAgICAgSW5wdXRJdGVyYXRvciB5ID0geDsKICAgICAgICB5LS07
CiAgICAgICAgZG8gewogICAgICAgICAgICAtLXg7CiAgICAgICAgICAgIC0teTsKICAgICAgICAg
ICAgaWYgKCAqeCA8ICp5ICkgewogICAgICAgICAgICAgICAgc3dhcHBlZCA9IFRSVUU7CiAgICAg
ICAgICAgICAgICBxU3dhcCggKngsICp5ICk7CiAgICAgICAgICAgICAgICBzd2FwX3BvcyA9IHk7
CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlKCB5ICE9IGIgKTsKICAgICAgICBpZiAoICFz
d2FwcGVkICkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGIgPSBzd2FwX3BvczsKICAgICAg
ICBiKys7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUgdm9pZCBx
QnViYmxlU29ydCggQ29udGFpbmVyICZjICkKewogIHFCdWJibGVTb3J0KCBjLmJlZ2luKCksIGMu
ZW5kKCkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4KIHZvaWQgcUhlYXBTb3J0UHVzaERv
d24oIFZhbHVlKiBoZWFwLCBpbnQgZmlyc3QsIGludCBsYXN0ICkKewogICAgaW50IHIgPSBmaXJz
dDsKICAgIHdoaWxlICggciA8PSBsYXN0IC8gMiApIHsKICAgICAgICBpZiAoIGxhc3QgPT0gMiAq
IHIgKSB7CgogICAgICAgICAgICBpZiAoIGhlYXBbMiAqIHJdIDwgaGVhcFtyXSApCiAgICAgICAg
ICAgICAgICBxU3dhcCggaGVhcFtyXSwgaGVhcFsyICogcl0gKTsKICAgICAgICAgICAgciA9IGxh
c3Q7CiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgIGlmICggaGVhcFsyICogcl0gPCBoZWFw
W3JdICYmICEoaGVhcFsyICogciArIDFdIDwgaGVhcFsyICogcl0pICkgewoKICAgICAgICAgICAg
ICAgIHFTd2FwKCBoZWFwW3JdLCBoZWFwWzIgKiByXSApOwogICAgICAgICAgICAgICAgciAqPSAy
OwogICAgICAgICAgICB9IGVsc2UgaWYgKCBoZWFwWzIgKiByICsgMV0gPCBoZWFwW3JdCiAgICAg
ICAgICAgICAgICAgICAgICAgICYmIGhlYXBbMiAqIHIgKyAxXSA8IGhlYXBbMiAqIHJdICkgewoK
ICAgICAgICAgICAgICAgIHFTd2FwKCBoZWFwW3JdLCBoZWFwWzIgKiByICsgMV0gKTsKICAgICAg
ICAgICAgICAgIHIgPSAyICogciArIDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICByID0gbGFzdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKCnRlbXBsYXRl
IDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBWYWx1ZT4KIHZvaWQgcUhlYXBTb3J0SGVscGVy
KCBJbnB1dEl0ZXJhdG9yIGIsIElucHV0SXRlcmF0b3IgZSwgVmFsdWUsIHVpbnQgbiApCnsKCiAg
ICBJbnB1dEl0ZXJhdG9yIGluc2VydCA9IGI7CiAgICBWYWx1ZSogcmVhbGhlYXAgPSBuZXcgVmFs
dWVbbl07CgogICAgVmFsdWUqIGhlYXAgPSByZWFsaGVhcCAtIDE7CiAgICBpbnQgc2l6ZSA9IDA7
CiAgICBmb3IoIDsgaW5zZXJ0ICE9IGU7ICsraW5zZXJ0ICkgewogICAgICAgIGhlYXBbKytzaXpl
XSA9ICppbnNlcnQ7CiAgICAgICAgaW50IGkgPSBzaXplOwogICAgICAgIHdoaWxlKCBpID4gMSAm
JiBoZWFwW2ldIDwgaGVhcFtpIC8gMl0gKSB7CiAgICAgICAgICAgIHFTd2FwKCBoZWFwW2ldLCBo
ZWFwW2kgLyAyXSApOwogICAgICAgICAgICBpIC89IDI7CiAgICAgICAgfQogICAgfQoKCiAgICBm
b3IoIHVpbnQgaSA9IG47IGkgPiAwOyBpLS0gKSB7CiAgICAgICAgKmIrKyA9IGhlYXBbMV07CiAg
ICAgICAgaWYgKCBpID4gMSApIHsKICAgICAgICAgICAgaGVhcFsxXSA9IGhlYXBbaV07CiAgICAg
ICAgICAgIHFIZWFwU29ydFB1c2hEb3duKCBoZWFwLCAxLCAoaW50KWkgLSAxICk7CiAgICAgICAg
fQogICAgfQoKICAgIGRlbGV0ZVtdIHJlYWxoZWFwOwp9CgoKdGVtcGxhdGUgPGNsYXNzIElucHV0
SXRlcmF0b3I+CiB2b2lkIHFIZWFwU29ydCggSW5wdXRJdGVyYXRvciBiLCBJbnB1dEl0ZXJhdG9y
IGUgKQp7CgogICAgaWYgKCBiID09IGUgKQogICAgICAgIHJldHVybjsKCgogICAgSW5wdXRJdGVy
YXRvciBpdCA9IGI7CiAgICB1aW50IG4gPSAwOwogICAgd2hpbGUgKCBpdCAhPSBlICkgewogICAg
ICAgICsrbjsKICAgICAgICArK2l0OwogICAgfQoKCgogICAgcUhlYXBTb3J0SGVscGVyKCBiLCBl
LCAqYiwgbiApOwp9CgoKdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KIHZvaWQgcUhlYXBTb3J0
KCBDb250YWluZXIgJmMgKQp7CiAgICBpZiAoIGMuYmVnaW4oKSA9PSBjLmVuZCgpICkKICAgICAg
ICByZXR1cm47CgoKCiAgICBxSGVhcFNvcnRIZWxwZXIoIGMuYmVnaW4oKSwgYy5lbmQoKSwgKihj
LmJlZ2luKCkpLCAodWludCljLmNvdW50KCkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5l
cj4KY2xhc3MgUUJhY2tJbnNlcnRJdGVyYXRvcgp7CnB1YmxpYzoKICAgIGV4cGxpY2l0IFFCYWNr
SW5zZXJ0SXRlcmF0b3IoIENvbnRhaW5lciAmYyApCiAgICAgICAgOiBjb250YWluZXIoICZjICkK
ICAgIHsKICAgIH0KCiAgICBRQmFja0luc2VydEl0ZXJhdG9yPENvbnRhaW5lcj4mCiAgICBvcGVy
YXRvcj0oIGNvbnN0IHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAmdmFsdWUgKQogICAg
ewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKCB2YWx1ZSApOwogICAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgICBRQmFja0luc2VydEl0ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9y
KigpCiAgICB7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFCYWNrSW5zZXJ0SXRl
cmF0b3I8Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpCiAgICB7CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICAgIFFCYWNrSW5zZXJ0SXRlcmF0b3I8Q29udGFpbmVyPiYgb3BlcmF0b3IrKyhp
bnQpCiAgICB7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKcHJvdGVjdGVkOgogICAgQ29u
dGFpbmVyICpjb250YWluZXI7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUg
UUJhY2tJbnNlcnRJdGVyYXRvcjxDb250YWluZXI+IHFCYWNrSW5zZXJ0ZXIoIENvbnRhaW5lciAm
YyApCnsKICAgIHJldHVybiBRQmFja0luc2VydEl0ZXJhdG9yPENvbnRhaW5lcj4oIGMgKTsKfQoj
IDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAyCgoKCgoKIyAx
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDEgMwojIDY1ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDMKCgoKCgojIDEgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAxIDMKIyA0NCAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9pb3MiIDMKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAxIDMK
IyAzNiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z
LjIvY2xvY2FsZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9j
bG9jYWxlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5j
bHVkZS9sb2NhbGUuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcg
Ii91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAzCmVudW0KewogIF9fTENfQ1RZUEUgPSAwLAog
IF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NPTExBVEUgPSAzLAog
IF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9fTENfQUxMID0gNiwK
ICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQUREUkVTUyA9IDksCiAg
X19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEsCiAgX19MQ19JREVO
VElGSUNBVElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgpleHRl
cm4gIkMiIHsKIyA1MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCnN0cnVjdCBsY29udgp7CgoK
ICBjaGFyICpkZWNpbWFsX3BvaW50OwogIGNoYXIgKnRob3VzYW5kc19zZXA7CgoKCgoKICBjaGFy
ICpncm91cGluZzsKCgoKCgogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5j
eV9zeW1ib2w7CiAgY2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5k
c19zZXA7CiAgY2hhciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hh
ciAqbmVnYXRpdmVfc2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGln
aXRzOwoKICBjaGFyIHBfY3NfcHJlY2VkZXM7CgogIGNoYXIgcF9zZXBfYnlfc3BhY2U7CgogIGNo
YXIgbl9jc19wcmVjZWRlczsKCiAgY2hhciBuX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIHBf
c2lnbl9wb3NuOwogIGNoYXIgbl9zaWduX3Bvc247CgoKICBjaGFyIGludF9wX2NzX3ByZWNlZGVz
OwoKICBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBpbnRfbl9jc19wcmVjZWRlczsK
CiAgY2hhciBpbnRfbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBpbnRfcF9zaWduX3Bvc247
CiAgY2hhciBpbnRfbl9zaWduX3Bvc247CiMgMTE5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMK
fTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hh
ciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYg
KHZvaWQpIHRocm93ICgpOwojIDE0OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCmV4dGVybiBf
X2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRlZ29yeV9tYXNrLCBfX2NvbnN0IGNoYXIg
Kl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2Jh
c2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1cGxvY2FsZSAoX19sb2NhbGVf
dCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9j
YWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMgNTAgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAyIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6
Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9jYWxlY29udjsKfQojIDM3
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDEgMwojIDI0
ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5o
IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKdHlw
ZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVkZWYgaW50IG5sX2l0ZW07CgoKZXh0ZXJuIG5sX2Nh
dGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpfX2NhdF9uYW1lLCBpbnQgX19mbGFnKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQs
IGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHJp
bmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSB0
aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o
IiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZW51
bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJEQVlf
MiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAgQUJE
QVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZXzUs
CgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1PTl8z
LAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBBQk1P
Tl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEyLAoK
CgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAgTU9O
XzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzExLAoK
ICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1ULAoK
ICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBFUkFf
RF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoKICBf
TkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9OTF9X
QUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlfNCwK
ICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9OTF9X
REFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05MX1dE
QVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAgX05M
X1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1PTl81
LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9OTF9X
QUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1PTl8x
MiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9XTU9O
XzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dNT05f
OCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9XTU9O
XzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAogIF9O
TF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJBX1lF
QVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0RfVF9G
TVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJTUVf
V0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNUX1dF
RUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNUSU9O
LAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1ULAoK
ICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xMQVRF
X05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFURV9S
VUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLAog
IF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxfQ09M
TEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBfTkxf
Q09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRFX0VY
VFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hBU0hf
U0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1CX0VY
VFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFXQywK
ICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05MX0NU
WVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVfVE9V
UFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZUEVf
R0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZUEVf
R0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVfQ0xB
U1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAgX05M
X0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VUID0g
X05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxfQ1RZ
UEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01BUF9P
RkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMw
X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9NQiwK
ICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAgX05M
X0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9DVFlQ
RV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVfSU5E
SUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lORElH
SVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJf
V0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dDLAog
IF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywKICBfTkxf
Q1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NUWVBF
X0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9PVVRE
SUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQz
X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9NQiwK
ICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAgX05M
X0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9DVFlQ
RV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVfT1VU
RElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJR0lU
NF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZfV0Ms
CiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAogIF9O
TF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAogIF9O
TF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkws
CiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJM
LAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQRV9U
UkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9MRU4s
CiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEsCiAg
X05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxfQ1RZ
UEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9FWFRS
QV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01BUF84
LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAogIF9O
TF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxfQ1RZ
UEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9MQ19D
VFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAxNikg
fCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9JTlQs
CgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoKICBfX1BP
U0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElHSVRT
LAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9TRVBf
QllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0UsCgoK
CiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9D
Uk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9TUEFD
RSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNFLAoK
CgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9OTF9N
T05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVOQ1lf
U1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFS
WV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAogIF9O
TF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NTX1BS
RUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZ
X0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9CWV9T
UEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFS
WV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BPU04s
CiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9Q
X1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxfTU9O
RVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBfTkxf
TU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywKICBf
TkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5U
X1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9DT0RF
U0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgoX19M
Q19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9QT0lO
VCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAsCgog
IF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTlVN
RVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05VTV9M
Q19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAoMCkp
LAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVTU0FH
RVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hUID0g
KCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05MX1BB
UEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQgPSAo
KChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05MX05B
TUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01JU1MsCiAg
X05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFNRSwK
CiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwgKDAp
KSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9QT1NU
LAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIzLAog
IF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAogIF9O
TF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05MX0FE
RFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1NfTEFO
R19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgogIF9O
TF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwgKDAp
KSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NFTEVD
VCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VULAog
IF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQgPSAo
KChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9DT0RF
U0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9USVRM
RSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5USUZJ
Q0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxfSURFTlRJ
RklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lERU5U
SUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVOVElGSUNB
VElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9JREVO
VElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJT04sCiAg
X05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05fUkVW
SVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NB
VEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURFTlRJ
RklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIg
MwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0gX19pdGVtKSB0aHJvdyAoKTsKIyA1
ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpfX25sX2xhbmdpbmZv
X2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyAzOCAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9pY29udi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2lj
b252LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9pY29udi5o
IiAyIDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4g
aWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNoYXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIg
Kl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IGljb252IChpY29u
dl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9faW5idWYsCiAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNsZWZ0LAogICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpleHRlcm4gaW50IGljb252X2Nsb3NlIChpY29u
dl90IF9fY2QpIHRocm93ICgpOwoKfQojIDM5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2xpYmludGwuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0
ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hhciAqZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lk
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9t
YWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hh
ciAqX19kZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAq
X19tc2dpZCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIp
KSk7CgoKCmV4dGVybiBjaGFyICpkY2dldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2Nh
dGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIg
Kl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
bXNnaWQsIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv
cm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4dGVybiBjaGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFy
ICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21zZ2lkMiwKICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Zm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsK
CgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9f
Y29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2Fy
Z19fICgzKSkpOwoKCgpleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2Rv
bWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19f
ICgzKSkpOwoKCgoKCmV4dGVybiBjaGFyICp0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9t
YWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25z
dCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX2Rpcm5hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9t
YWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsK
IyAxMTUgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKfQojIDQwICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAz
CgoKCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgX19sb2NhbGVfdCBfX2NfbG9jYWxlOwp9CiMg
NDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAy
IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NjdHlwZSIgMSAzCiMg
NDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMKCgojIDEgIi91
c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0
ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmVudW0KewogIF9JU3VwcGVy
ID0gKCgwKSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBf
SVNsb3dlciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4
KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgy
KSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgo
MSA8PCAoMykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8
IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwg
KDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8g
KCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcp
IDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5r
ID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBf
SVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4
KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwg
KDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgp
IDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpl
eHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29u
c3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAq
X19jdHlwZV90b3VwcGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50
IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYSAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXQg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3Nw
YWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChp
bnQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBf
X2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDIyMyAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDMKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX2lzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93
ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp
OwojIDI3NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAyIDMKIyA2NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07
CiAgdXNpbmcgOjppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7
CiAgdXNpbmcgOjppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7
CiAgdXNpbmcgOjppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7
CiAgdXNpbmcgOjppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVy
Owp9CiMgNDkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3
ZC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z
LjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZv
aWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf
YWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAog
IF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxv
d19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0
IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvbG9jYWxlZndkLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNh
bHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hh
clQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25z
dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0
b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNs
YXNzIGN0eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFz
cyBjb2RlY3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNfdHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNz
IGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVf
dD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu
YW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVt
X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4K
ICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz
IHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIg
PSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1l
OwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9u
ZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBv
c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlw
dW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAg
IGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUK
ICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBj
bGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNs
YXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0
IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJv
b2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMg
Y29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUg
PSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwog
ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNv
bnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1v
bmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFM
IDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgYWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8
IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxv
Y2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAgIGxv
Y2FsZShjb25zdCBjaGFyKiBfX3MpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwg
Y29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2Fs
ZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVy
LCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxl
JgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxv
Y2FsZSYgX19vdGhlcikgY29uc3Q7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAg
IGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAo
KTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIp
IGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikp
OyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBz
dGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0
IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsK
CgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2ds
b2JhbDsKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9jYXRlZ29yaWVzID0gNjsKCiAg
ICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5l
IHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAg
ICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFs
aXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBs
b2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07
CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNz
IGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0
KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJp
ZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZh
dGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0
czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsKICAgIGNvbnN0IGNoYXIqIF9NX25hbWVzW19T
X251bV9jYXRlZ29yaWVzXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19p
ZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVy
aWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107
CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3Rh
dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMg
Y29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25z
dCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlu
bGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21pY19h
ZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9y
ZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9N
X3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQog
ICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1w
bChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7
CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9p
ZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2No
ZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgX19yZXQgJiYgaSA8IF9TX251bV9jYXRlZ29yaWVzIC0gMTsgKytpKQog
ICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNbaV0sIF9NX25hbWVzW2kgKyAxXSkgPT0g
MCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2Nh
dGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fcmVwbGFj
ZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAg
dm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQq
KTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNl
dCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgaW5saW5lIHZvaWQKICAg
ICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNl
dCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj
ZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19m
KQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwog
ICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBm
b3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19udW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAg
ICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIqIjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6
ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQg
Y2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAg
cHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBfU19jX2xvY2FsZTsKCiAgICBleHBs
aWNpdAogICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAog
ICAgfmZhY2V0KCk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2Nf
bG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAgICAgICAgICBf
X2NfbG9jYWxlIF9fb2xkID0gMCk7CgogICAgc3RhdGljIF9fY19sb2NhbGUKICAgIF9TX2Nsb25l
X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Rl
c3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToKICAgIHZvaWQK
ICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9y
ZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAog
ICAgb3BlcmF0b3I9KGNvbnN0IGZhY2V0Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAg
ewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxv
Y2FsZTo6X0ltcGw7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBj
b25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0
IGxvY2FsZSYpIHRocm93ICgpOwoKCgoKICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAg
ICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2hpZ2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRv
cj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25zdCBpZCYpOwoKICBwdWJsaWM6CgoKICAgIGlkKCk7
CgogICAgaW5saW5lIHNpemVfdAogICAgX01faWQoKSBjb25zdAogICAgewogICAgICBpZiAoIV9N
X2luZGV4KQogICAgICAgIF9NX2luZGV4ID0gMSArIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGln
aHdhdGVyLCAxKTsKICAgICAgcmV0dXJuIF9NX2luZGV4IC0gMTsKICAgIH0KICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29u
c3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wK
ICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDkgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj
My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2Fs
L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAzCgoKCm5hbWVzcGFjZSBz
dGQKewoKCgoKICBlbnVtIF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0gMUwg
PDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRmbGFn
cyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGlj
X2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lv
c19GbXRmbGFncwogIG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBf
X2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0
aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3Je
KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0Zt
dGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0K
CiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwg
X0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGlu
ZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10
ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19G
bXRmbGFncwogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9f
YikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MK
ICBvcGVyYXRvcn4oX0lvc19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+
c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9z
X29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3Bl
cmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBf
SW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19i
KSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBf
X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nh
c3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19P
cGVubW9kZQogIG9wZXJhdG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2Ip
CiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNf
Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8PShf
SW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9f
YSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19PcGVu
bW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7
IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUmIF9f
YSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlu
bGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsgcmV0
dXJuIF9Jb3NfT3Blbm1vZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lv
c19Jb3N0YXRlIHsgX01faW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9J
b3NfSW9zdGF0ZQogIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19i
KQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf
Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwoX0lv
c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUo
c3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp
bmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0
ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0
YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9y
fD0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0g
X19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3NfSW9z
dGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsg
fQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwg
X0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5l
IF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJuIF9J
b3NfSW9zdGF0ZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vla2Rp
ciB7IF9NX2lvc19zZWVrZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFzZQog
IHsKICBwdWJsaWM6CgoKICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAgICB7
CiAgICBwdWJsaWM6CgoKICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcm
IF9fc3RyKSB0aHJvdygpOwoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3co
KTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7
CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hh
ciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFn
cyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
ZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZs
YWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwog
ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3Mp
OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwog
ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19iYXNlZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19J
b3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRl
KF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0
ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0
YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRp
YyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3Nf
T3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1v
ZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0g
b3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg
YmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qg
b3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNv
bnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3Rh
dGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5j
KTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBz
ZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBz
ZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAy
MjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDMK
ICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAgICAgIGltYnVlX2V2ZW50
LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2Nh
bGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCiAgICB2b2lkCiAgICByZWdpc3Rlcl9j
YWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7CgogIHByb3RlY3RlZDoK
CiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAgIHN0cmVhbXNpemUgX01fd2lkdGg7CiAg
ICBmbXRmbGFncyBfTV9mbGFnczsKICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwogICAgaW9zdGF0
ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsK
CiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2Fs
bGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAgICAgX0F0b21pY193b3JkIF9NX3Jl
ZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9f
Zm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCogX19j
YikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5kZXgoX19pbmRleCks
IF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkg
eyBfX2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQoKCiAgICAgIGludAogICAgICBfTV9y
ZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZjb3Vu
dCwgLTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOwoKICAg
IHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7CgogICAgdm9p
ZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29yZHMKICAg
IHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICAgIF9Xb3Jk
cygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQogICAgfTsKCgogICAgX1dvcmRzIF9N
X3dvcmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93b3JkX3NpemUgPSA4
OwogICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9jYWxfd29yZF9zaXplXTsKCgogICAgaW50
IF9NX3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29yZDsKCiAgICBfV29yZHMmCiAgICBfTV9n
cm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7CgogICAg
dm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoKICAgIGNsYXNzIEluaXQKICAgIHsK
ICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVibGljOgogICAgICBJbml0KCk7CiAg
ICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfY3JlYXRlKGJvb2wg
X19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19kZXN0cm95KCk7CgogICAg
cHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0aWMg
Ym9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoKICAgIGlubGluZSBmbXRmbGFncwog
ICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQoKICAgIGlubGluZSBmbXRmbGFn
cwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg
PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7
CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpCiAg
ICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzIHw9IF9f
Zm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAg
IHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNrKQogICAgewogICAgICBmbXRm
bGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyAmPSB+X19tYXNrOwogICAgICBf
TV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K
CiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZsYWdzIF9fbWFzaykgeyBfTV9mbGFncyAm
PSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNvbnN0
IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVj
aXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBf
TV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJlYzsKICAgICAgcmV0dXJuIF9f
b2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKHN0cmVhbXNp
emUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7CiAgICAg
IF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgc3RhdGlj
IGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRydWUpOwoKCiAgICBsb2Nh
bGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgIGlubGluZSBsb2NhbGUKICAg
IGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7IH0KCgogICAgc3RhdGljIGlu
dAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxpbmUgbG9uZyYKICAgIGl3b3JkKGludCBf
X2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQog
ICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9f
aXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOwogICAgfQoKICAgIGlubGluZSB2b2lk
KiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4
IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19peF0g
OiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAg
fQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsKCgoKICBw
cml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBpb3NfYmFzZSYKICAg
IG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCiAgaW5saW5lIGlvc19iYXNlJgog
IGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNl
Ojpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9z
X2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i
YXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYo
aW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo
aW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu
c2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu
c2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYo
aW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i
YXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv
c19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNl
dGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS51
bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5s
aW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFz
ZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgICBy
ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGxlZnQoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVz
dGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgcmln
aHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQs
IGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGlu
ZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp
b3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4g
X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG9jdChpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOwog
ICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNl
OjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19i
YXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNl
OwogIH0KCn0KIyA1MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMSAzCiMg
NDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKCgoKCgoK
Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5
cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBl
Ojpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6
b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5
cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNf
dHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9z
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVh
bTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJl
YW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVm
X2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mgb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVuZCBz
dHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwg
dHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1
Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVk
OgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6
ZTsKCgogICAgICBzaXplX3QgX01fYnVmX3NpemVfb3B0OwoKCgogICAgICBib29sIF9NX2J1Zl91
bmlmaWVkOwoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90eXBl
KiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5cGUq
IF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90eXBl
KiBfTV9vdXRfZW5kOwoKCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOwoKCiAgICAg
IGxvY2FsZSBfTV9idWZfbG9jYWxlOwoKCiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0OwoK
CgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX3BiYWNrX3NpemUgPSAxOwogICAgICBj
aGFyX3R5cGUgX01fcGJhY2tbX1NfcGJhY2tfc2l6ZV07CiAgICAgIGNoYXJfdHlwZSogX01fcGJh
Y2tfY3VyX3NhdmU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAgIGJv
b2wgX01fcGJhY2tfaW5pdDsKCgogICAgICBmcG9zPF9fc3RhdGVfdHlwZT4gX01fcG9zOwoKCgoK
ICAgICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFf
TV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICBzaXplX3QgX19kaXN0ID0gX01f
aW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX1NfcGJh
Y2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ss
IF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2lu
X2N1cjsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAg
ICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAg
ICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAg
ICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01f
cGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9jdXIgPSBf
TV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBzaXplX3QgX19vZmZfZW5kID0gMDsK
ICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAg
ICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7
CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAgICAg
X19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhpcy0+
c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAgICAg
ICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAgX01f
cGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0g
X19udWxsOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAgICAgICB9CiAg
ICAgIH0KCgoKICAgICAgdm9pZAogICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAg
ICAgIHsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAgICAgX01faW5f
Y3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQogICAg
ICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgIH0KIyAyMDIgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3Vy
X21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2lu
X2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYm
IF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAo
X01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9l
bmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAg
IF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBl
CiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9
IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAo
X01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsg
X01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
IF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0
dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNf
c3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAg
ICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAg
X01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9idWZfbG9jYWxlX2lu
aXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBs
b2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygp
KTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg
ICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAgewogICAgICAgIGlm
IChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAg
ICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0
cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CgogICAgICBwb3Nf
dHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBf
X3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jh
c2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29m
ZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9z
X3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3Bv
cyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQKICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRo
aXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2YWlsKCkKICAgICAg
ewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9p
bl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9wYmFja19p
bml0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0g
X01fcGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIHNp
emVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAg
X19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0
cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hv
d21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQog
ICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+
c2J1bXBjKCksIF9fZW9mKQogICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkp
OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBl
CiAgICAgIHNnZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlm
IChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0
cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAg
ICAgICAgICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsK
ICAgICAgfQoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgog
ICAgICBpbnRfdHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRf
dHlwZQogICAgICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90
eXBlIF9fYyk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19u
KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9i
dWYoX19udWxsKSwgX01fYnVmX3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCg4MTkyKSwKICAgICAg
X01fYnVmX3VuaWZpZWQoZmFsc2UpLCBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5f
ZW5kKDApLAogICAgICBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDAp
LAogICAgICBfTV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9j
YWxlKCkpLAogICAgICBfTV9idWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19jdXJfc2F2
ZSgwKSwgX01fcGJhY2tfZW5kX3NhdmUoMCksCiAgICAgIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAg
ICAgIHsgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBf
TV9pbl9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJu
IF9NX2luX2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0
dXJuIF9NX2luX2VuZDsgfQoKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2lu
X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywg
Y2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9N
X2luX2JlZyA9IF9fZ2JlZzsKICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9N
X2luX2VuZCA9IF9fZ2VuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAm
JiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9k
ZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2Uo
KSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBw
dHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAg
IGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBw
YnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNl
dHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAg
X01fb3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9f
cGVuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYm
IF9fcGVuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAg
ICAgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xv
YykKICAgICAgewogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYg
KF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7
CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0
cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0
aGlzOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlv
c19iYXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19i
YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBl
KC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFz
ZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2
aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3Ry
ZWFtc2l6ZQogICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0
cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7Cgog
ICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRy
YWl0c190eXBlOjplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1Zmxvdygp
CiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAg
ICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRl
cmZsb3coKSwgX19yZXQpOwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAm
JiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0
cGVuZGluZykKICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f
aW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAg
ICBpZiAoX01fYnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAg
ICAgICAgKytfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAg
ICAgfQoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0g
dHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0K
CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJm
bG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNf
dHlwZTo6ZW9mKCk7IH0KIyA0ODUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9z
dHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0
cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0
b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVybiAqdGhpczsgfTsKCiAgICB9Owp9
CgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1i
dWYudGNjIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYg
KF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAg
Y2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3Zl
KDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Omlu
dF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFj
a2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wg
X190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9v
bCBfX3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0
cigpWy0xXSk7CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0
ID0gcGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQog
ICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0g
dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAg
cmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6
aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdl
dGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBf
TV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUo
LTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1
cik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwo
KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7
CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUoKSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0
X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0
ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19j
KSk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8
IF9fbikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0g
X01faW5fY3VyOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAg
ICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAg
ICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAg
ICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAg
ICAgX01faW5fY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9f
cmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhp
cy0+dWZsb3coKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
X2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBl
KF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdo
aWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4g
PSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsK
ICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5n
KTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVu
KTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19s
ZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoK
ICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlu
dF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19z
KSk7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFp
dHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19f
cmV0OwogICAgICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMo
YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAg
ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0
cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+
aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1
dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7
CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIo
KSwgX19idWZzaXplKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0OwogICAgICAgICAg
ICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAgICAgICAgICAgaWYgKF9f
eHRyY3QgPT0gX19idWZzaXplKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBp
ZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19zYmluLT5zZ2V0YygpLCBfVHJhaXRzOjplb2YoKSkp
CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIF9fYnVmc2l6ZSA9
IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUo
aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z
dHJlYW1idWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2Nv
cHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8Y2hhcj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAog
ICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+Kik7CgogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4m
LCBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
c3RyZWFtYnVmPHdjaGFyX3Q+Kik7Cn0KIyA0OTkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9zdHJlYW1idWYiIDIgMwojIDUxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9iYXNpY19pb3MuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2Jhc2ljX2lvcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2Mz
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMKCm5hbWVzcGFj
ZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9p
dGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1f
dHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlwZSog
X01fc2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1i
dWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZigwKSwgX01fYyh0cmFpdHNfdHlw
ZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9f
cykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190eXBl
Ojplb2YoKSkgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBf
X3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigp
KSB7IH0KCgogICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0KCiAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgY29uc3Qg
aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaWYgKF9NX3NidWYg
JiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX3NidWYtPnNidW1wYygpLCBfX2VvZikpCiAg
ICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19lb2Y7
CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9y
CiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciBfX29s
ZCA9ICp0aGlzOwogICAgICAgIGlmIChfTV9zYnVmCiAgICAgICAgICAgICYmIHRyYWl0c190eXBl
OjplcV9pbnRfdHlwZSgoX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYg
PSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4g
X19vbGQ7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29uc3QgaXN0cmVhbWJ1
Zl9pdGVyYXRvciYgX19iKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSB0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICBib29sIF9fYmVvZiA9
IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2IuX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICBy
ZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwog
ICAgICB9CgoKICAgIHByaXZhdGU6CiAgICAgIGludF90eXBlCiAgICAgIF9NX2dldCgpIGNvbnN0
CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo
KTsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IF9fZW9mOwogICAgICAgIGlmIChfTV9zYnVmKQog
ICAgICAgICAgewogICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9j
LCBfX2VvZikpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9jOwogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19yZXQgPSBfTV9zYnVm
LT5zZ2V0YygpKSwgX19lb2YpKQogICAgICAgICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAg
ICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAg
ICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBf
X2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj
b25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAg
ICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAg
ICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBw
dWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9p
ZD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAg
ICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGJvb2wgX01fZmFpbGVkOwoKICAgIHB1
YmxpYzoKICAgICAgaW5saW5lCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Iob3N0cmVhbV90eXBl
JiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxlZCgh
X01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBf
X3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsg
fQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2Mp
OwoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3IrKyhpbnQpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9z
dHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuICp0aGlzOyB9CgogICAgICBib29sCiAgICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkKICAg
ICAgeyByZXR1cm4gX01fZmFpbGVkOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+JgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+Ojpv
cGVyYXRvcj0oX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKCFfTV9mYWlsZWQgJiYKICAgICAg
ICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksIF9UcmFpdHM6OmVv
ZigpKSkKICAgICAgICBfTV9mYWlsZWQgPSB0cnVlOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
Cn0KIyA0MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2xvY2FsZV9mYWNldHMuaCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL2N3Y3R5cGUiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z
LjIvY3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMwojIDM1ICIv
dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYgIi91c3Iv
aW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNjEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdjdHlwZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvd2N0eXBl
LmgiIDMKZW51bQp7CiAgX19JU3d1cHBlciA9IDAsCiAgX19JU3dsb3dlciA9IDEsCiAgX19JU3dh
bHBoYSA9IDIsCiAgX19JU3dkaWdpdCA9IDMsCiAgX19JU3d4ZGlnaXQgPSA0LAogIF9fSVN3c3Bh
Y2UgPSA1LAogIF9fSVN3cHJpbnQgPSA2LAogIF9fSVN3Z3JhcGggPSA3LAogIF9fSVN3Ymxhbmsg
PSA4LAogIF9fSVN3Y250cmwgPSA5LAogIF9fSVN3cHVuY3QgPSAxMCwKICBfX0lTd2FsbnVtID0g
MTEsCgogIF9JU3d1cHBlciA9ICgoX19JU3d1cHBlcikgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3dXBwZXIpKSA8PCAyNCkgOiAoKF9fSVN3dXBwZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAo
X19JU3d1cHBlcikpIDw8IDgpIDogKChfX0lTd3VwcGVyKSA8IDI0ID8gKGludCkgKCgxVUwgPDwg
KF9fSVN3dXBwZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gMjQp
KSkpLAogIF9JU3dsb3dlciA9ICgoX19JU3dsb3dlcikgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3bG93ZXIpKSA8PCAyNCkgOiAoKF9fSVN3bG93ZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAo
X19JU3dsb3dlcikpIDw8IDgpIDogKChfX0lTd2xvd2VyKSA8IDI0ID8gKGludCkgKCgxVUwgPDwg
KF9fSVN3bG93ZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gMjQp
KSkpLAogIF9JU3dhbHBoYSA9ICgoX19JU3dhbHBoYSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3YWxwaGEpKSA8PCAyNCkgOiAoKF9fSVN3YWxwaGEpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAo
X19JU3dhbHBoYSkpIDw8IDgpIDogKChfX0lTd2FscGhhKSA8IDI0ID8gKGludCkgKCgxVUwgPDwg
KF9fSVN3YWxwaGEpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gMjQp
KSkpLAogIF9JU3dkaWdpdCA9ICgoX19JU3dkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAo
X19JU3dkaWdpdCkpIDw8IDgpIDogKChfX0lTd2RpZ2l0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwg
KF9fSVN3ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gMjQp
KSkpLAogIF9JU3d4ZGlnaXQgPSAoKF9fSVN3eGRpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAo
X19JU3d4ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwg
PDwgKF9fSVN3eGRpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDI0ID8gKGludCkgKCgx
VUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQp
KSA+PiAyNCkpKSksCiAgX0lTd3NwYWNlID0gKChfX0lTd3NwYWNlKSA8IDggPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dzcGFjZSkpIDw8IDI0KSA6ICgoX19JU3dzcGFjZSkgPCAxNiA/IChpbnQpICgo
MVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgOCkgOiAoKF9fSVN3c3BhY2UpIDwgMjQgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2Up
KSA+PiAyNCkpKSksCiAgX0lTd3ByaW50ID0gKChfX0lTd3ByaW50KSA8IDggPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dwcmludCkpIDw8IDI0KSA6ICgoX19JU3dwcmludCkgPCAxNiA/IChpbnQpICgo
MVVMIDw8IChfX0lTd3ByaW50KSkgPDwgOCkgOiAoKF9fSVN3cHJpbnQpIDwgMjQgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dwcmludCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQp
KSA+PiAyNCkpKSksCiAgX0lTd2dyYXBoID0gKChfX0lTd2dyYXBoKSA8IDggPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dncmFwaCkpIDw8IDI0KSA6ICgoX19JU3dncmFwaCkgPCAxNiA/IChpbnQpICgo
MVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgOCkgOiAoKF9fSVN3Z3JhcGgpIDwgMjQgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgp
KSA+PiAyNCkpKSksCiAgX0lTd2JsYW5rID0gKChfX0lTd2JsYW5rKSA8IDggPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dibGFuaykpIDw8IDI0KSA6ICgoX19JU3dibGFuaykgPCAxNiA/IChpbnQpICgo
MVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgOCkgOiAoKF9fSVN3YmxhbmspIDwgMjQgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dibGFuaykpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Ymxhbmsp
KSA+PiAyNCkpKSksCiAgX0lTd2NudHJsID0gKChfX0lTd2NudHJsKSA8IDggPyAoaW50KSAoKDFV
TCA8PCAoX19JU3djbnRybCkpIDw8IDI0KSA6ICgoX19JU3djbnRybCkgPCAxNiA/IChpbnQpICgo
MVVMIDw8IChfX0lTd2NudHJsKSkgPDwgOCkgOiAoKF9fSVN3Y250cmwpIDwgMjQgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3djbnRybCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwp
KSA+PiAyNCkpKSksCiAgX0lTd3B1bmN0ID0gKChfX0lTd3B1bmN0KSA8IDggPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dwdW5jdCkpIDw8IDI0KSA6ICgoX19JU3dwdW5jdCkgPCAxNiA/IChpbnQpICgo
MVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgOCkgOiAoKF9fSVN3cHVuY3QpIDwgMjQgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3Qp
KSA+PiAyNCkpKSksCiAgX0lTd2FsbnVtID0gKChfX0lTd2FsbnVtKSA8IDggPyAoaW50KSAoKDFV
TCA8PCAoX19JU3dhbG51bSkpIDw8IDI0KSA6ICgoX19JU3dhbG51bSkgPCAxNiA/IChpbnQpICgo
MVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgOCkgOiAoKF9fSVN3YWxudW0pIDwgMjQgPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0p
KSA+PiAyNCkpKSkKfTsKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gaW50IGlzd2FsbnVt
ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2ludF90
IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBfX3djKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGlzd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3dwcmludCAo
d2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90IF9f
d2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9fd2MpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IGlzd2JsYW5rICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTc4ICIvdXNyL2luY2x1ZGUv
d2N0eXBlLmgiIDMKZXh0ZXJuIHdjdHlwZV90IHdjdHlwZSAoX19jb25zdCBjaGFyICpfX3Byb3Bl
cnR5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZSAod2ludF90IF9fd2MsIHdjdHlw
ZV90IF9fZGVzYykgdGhyb3cgKCk7CiMgMjQ5ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKdHlw
ZWRlZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93
ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50
X3QgX193YykgdGhyb3cgKCk7CiMgMjc1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKfQojIDI4
OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiAiQyIgewoKCgpleHRlcm4gd2N0cmFu
c190IHdjdHJhbnMgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHdpbnRfdCB0b3djdHJhbnMgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBpbnQgX19pc3dhbG51bV9sICh3aW50X3QgX193YywgX19sb2NhbGVf
dCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdpbnRf
dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3
Y250cmxfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IF9faXN3ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9j
YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2xvd2VyX2wgKHdp
bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9f
aXN3cHJpbnRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBfX2lzd3B1bmN0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j
YWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dzcGFjZV9sICh3aW50X3QgX193Yywg
X19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3dXBwZXJf
bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBfX2lzd3hkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl
X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0eXBlX3QgX193Y3R5cGVfbCAoX19j
b25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IF9faXN3Y3R5cGVfbCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVz
YywgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB3aW50
X3QgX190b3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90
IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHJhbnNfdCBfX3djdHJhbnNfbCAoX19j
b25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgp
OwoKCmV4dGVybiB3aW50X3QgX190b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBf
X2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKCn0KIyA1MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2N3
Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djdHlw
ZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVf
dDsKICB1c2luZyA6OndjdHJhbnNfdDsKCiAgdXNpbmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlz
d2FscGhhOwogIHVzaW5nIDo6aXN3Ymxhbms7CiAgdXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6
Omlzd2RpZ2l0OwogIHVzaW5nIDo6aXN3Z3JhcGg7CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2lu
ZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1
c2luZyA6Omlzd3NwYWNlOwogIHVzaW5nIDo6aXN3dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7
CiAgdXNpbmcgOjppc3djdHlwZTsKICB1c2luZyA6OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBw
ZXI7CiAgdXNpbmcgOjp0b3djdHJhbnM7CiAgdXNpbmcgOjp3Y3RyYW5zOwogIHVzaW5nIDo6d2N0
eXBlOwp9CiMgNDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2lv
cyIgMSAzCiMgNDggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkOwoKCgojIDEgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0
eXBlX2Jhc2UuaCIgMSAzCiMgNTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNl
CiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9JU3VwcGVy
OwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRpYyBjb25z
dCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IF9J
U2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0OwogICAgc3Rh
dGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHBy
aW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dyYXBoOwog
ICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBjb25zdCBt
YXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9IF9JU2Fs
bnVtOwogIH07CiMgNjQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0
eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90
eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19o
aSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9f
aGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sg
X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAg
ICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAg
IHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91
cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90
eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xv
d2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIo
X19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hh
ciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAg
IGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9f
aGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4o
X19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBf
X2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhf
X2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29u
c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAg
Y2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
bmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAw
KTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlw
ZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFz
ayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFy
X3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3Qo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg
ICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rv
bG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hh
cikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj
b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5
cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJv
dyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z
dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciog
X19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lz
KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193
aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRv
X3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19k
ZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBl
LCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog
ICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0Owog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxf
Q2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGlj
IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9N
X2NfbG9jYWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3Rv
dXBwZXI7CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90
YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9
IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGlj
aXQKICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAw
LCBib29sIF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg
ICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAg
ICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hh
ciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAg
ICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkp
IGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19t
LCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7
IHJldHVybiBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNz
aWNfdGFibGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAg
IHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNv
bnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hh
cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190
b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hh
cl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBj
aGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFy
cm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19k
ZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+Jgog
ICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVt
cGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFj
dF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3Qg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShz
aXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxl
IF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFz
a190eXBlCiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoK
ICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk
b19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVu
KGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj
b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBf
X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
bmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAg
ICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoK
ICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlw
ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvbG9jYWwvZ2Nj
My4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5o
IiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46OgogIGlz
KG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNo
YXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBf
X3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysr
ID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKICAgIHJl
dHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX2lz
KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAog
IHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmICEoX01fdGFibGVbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pKQogICAgICArK19fbG93Owog
ICAgcmV0dXJuIF9fbG93OwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nh
bl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNv
bnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgKF9NX3RhYmxl
W3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSAhPSAwKQogICAgICAr
K19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyA0MDEgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJU
PgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAg
ICBleHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y
ZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5h
bWUoKSB7IH07CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+Ojpj
dHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAg
Y3R5cGVfYnluYW1lPHdjaGFyX3Q+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBy
ZWZzKTsKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVj
dnQuaCIgMSAzCiMgNDUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Nv
ZGVjdnQuaCIgMwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0g
cmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAg
bm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJz
dHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBy
ZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg
X0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoK
CiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj
b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBf
X2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAg
ICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f
dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2Vu
ZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGlu
dGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2lu
KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBp
bnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRo
cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBp
bnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf
dCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9f
ZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25z
dCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh
bAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVz
dWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190
bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv
X25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQo
c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAg
ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAw
OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg
IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGlu
dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAg
ICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAg
ICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwg
aW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90
IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro
KCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl
cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj
dnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJu
VCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNl
OjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAg
ICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3Rh
dGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0
X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJl
c3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z
dCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190
b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rp
bmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19u
b2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3Ro
KGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu
YW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf
U3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNo
YXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog
ICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4
dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f
dHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg
Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq
IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBj
b25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYo
KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0
IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0
ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAg
IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf
dD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsK
ICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBz
dGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v
dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom
IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg
ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAog
ICAgICBpbnQgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAg
ICBib29sIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAog
ICAgICBpbnQgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6
ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgo
KSBjb25zdCB0aHJvdygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5
bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY29kZWN2dF9zcGVjaWFsaXph
dGlvbnMuaCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgiIDMKICBjbGFzcyBf
X2VuY190cmFpdHMKICB7CiAgcHVibGljOgoKCgogICAgdHlwZWRlZiBpY29udl90IF9fZGVzY190
eXBlOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbWF4X3NpemUgPSAz
MjsKCiAgICBjaGFyIF9NX2ludF9lbmNbX1NfbWF4X3NpemVdOwoKICAgIGNoYXIgX01fZXh0X2Vu
Y1tfU19tYXhfc2l6ZV07CgoKICAgIF9fZGVzY190eXBlIF9NX2luX2Rlc2M7CgogICAgX19kZXNj
X3R5cGUgX01fb3V0X2Rlc2M7CgoKICAgIGludCBfTV9leHRfYm9tOwoKCiAgICBpbnQgX01faW50
X2JvbTsKCiAgcHVibGljOgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKCkKICAgIDogX01faW5f
ZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAg
IHsKICAgICAgbWVtc2V0KF9NX2ludF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgICAgbWVtc2V0
KF9NX2V4dF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgIH0KCiAgICBleHBsaWNpdCBfX2VuY190
cmFpdHMoY29uc3QgY2hhciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2lib20gPSAwLCBpbnQgX19lYm9tID0gMCkKICAgIDogX01faW5f
ZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAg
IHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwogICAgICBz
dHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoKCiAgICBf
X2VuY190cmFpdHMoY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaik6IF9NX2luX2Rlc2MoMCksIF9N
X291dF9kZXNjKDApCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19vYmouX01faW50
X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4
dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4dF9ib207
CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgfQoKCiAgICBfX2VuY190
cmFpdHMmCiAgICBvcGVyYXRvcj0oY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaikKICAgIHsKICAg
ICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAg
ICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwog
ICAgICBfTV9pbl9kZXNjID0gMDsKICAgICAgX01fb3V0X2Rlc2MgPSAwOwogICAgICBfTV9leHRf
Ym9tID0gX19vYmouX01fZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9i
b207CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB+X19lbmNfdHJhaXRzKCkKICAgIHsK
ICAgICAgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsK
ICAgICAgaWYgKF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycikKICAgICAgICBpY29u
dl9jbG9zZShfTV9pbl9kZXNjKTsKICAgICAgaWYgKF9NX291dF9kZXNjICYmIF9NX291dF9kZXNj
ICE9IF9fZXJyKQogICAgICAgIGljb252X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0KCiAgICB2
b2lkCiAgICBfTV9pbml0KCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19lcnIgPSBy
ZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgaWYgKCFfTV9pbl9kZXNjKQogICAg
ICAgIHsKICAgICAgICAgIF9NX2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMsIF9NX2V4
dF9lbmMpOwogICAgICAgICAgaWYgKF9NX2luX2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9f
dGhyb3dfcnVudGltZV9lcnJvcigiY3JlYXRpbmcgaWNvbnYgaW5wdXQgZGVzY3JpcHRvciBmYWls
ZWQuIik7CiAgICAgICAgfQogICAgICBpZiAoIV9NX291dF9kZXNjKQogICAgICAgIHsKICAgICAg
ICAgIF9NX291dF9kZXNjID0gaWNvbnZfb3BlbihfTV9leHRfZW5jLCBfTV9pbnRfZW5jKTsKICAg
ICAgICAgIGlmIChfTV9vdXRfZGVzYyA9PSBfX2VycikKICAgICAgICAgICAgX190aHJvd19ydW50
aW1lX2Vycm9yKCJjcmVhdGluZyBpY29udiBvdXRwdXQgZGVzY3JpcHRvciBmYWlsZWQuIik7CiAg
ICAgICAgfQogICAgfQoKICAgIGJvb2wKICAgIF9NX2dvb2QoKQogICAgewogICAgICBjb25zdCBf
X2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBi
b29sIF9fdGVzdCA9IF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycjsKICAgICAgX190
ZXN0ICY9IF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyOwogICAgICByZXR1cm4g
X190ZXN0OwogICAgfQoKICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01fZ2V0X2luX2Rlc2Ny
aXB0b3IoKQogICAgeyByZXR1cm4gJl9NX2luX2Rlc2M7IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlw
ZSoKICAgIF9NX2dldF9vdXRfZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01fb3V0X2Rlc2M7
IH0KCiAgICBpbnQKICAgIF9NX2dldF9leHRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01fZXh0
X2JvbTsgfQoKICAgIGludAogICAgX01fZ2V0X2ludGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBf
TV9pbnRfYm9tOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQog
ICAgeyByZXR1cm4gX01faW50X2VuYzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0
ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9lbmM7IH0KICB9OwoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0
PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0
X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAg
ICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBl
eHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAg
dHlwZWRlZiBfX2VuY190cmFpdHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBl
ZGVmIF9fZW5jX3RyYWl0cyBfX2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
OwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAg
OiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRl
X3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9f
ZW5jX3R5cGUqIF9fZW5jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJz
dHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykK
ICAgICAgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkg
eyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90
eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAg
ICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0
CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8s
CiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9f
dG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90
eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4
dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwK
ICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBi
b29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVh
bCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlw
ZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl
X3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgp
IGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQ+CiAgICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0
ZXJuVCwgX19lbmNfdHJhaXRzPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAg
IGlubGluZSBzaXplX3QKICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYykoaWNvbnZf
dCwgX1QsIHNpemVfdCosIGNoYXIqKiwgc2l6ZV90KiksCiAgICAgICAgICAgICAgICAgICAgaWNv
bnZfdCBfX2NkLCBjaGFyKiogX19pbmJ1Ziwgc2l6ZV90KiBfX2luYnl0ZXMsCiAgICAgICAgICAg
ICAgICAgICAgY2hhcioqIF9fb3V0YnVmLCBzaXplX3QqIF9fb3V0Ynl0ZXMpCiAgICB7IHJldHVy
biBfX2Z1bmMoX19jZCwgKF9UKV9faW5idWYsIF9faW5ieXRlcywgX19vdXRidWYsIF9fb3V0Ynl0
ZXMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K
ICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg
X19lbmNfdHJhaXRzPjo6CiAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50
ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2Vu
ZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICBleHRlcm5fdHlw
ZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgIGV4dGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAg
aWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVf
dHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlw
ZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNv
bnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBz
aXplX3QgX19mYnl0ZXMgPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAg
ICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAg
ICAgICAgICBzaXplX3QgX190Ynl0ZXMgPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8p
OwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3Rv
KTsKICAgICAgICAgIGNoYXIqIF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoK
CgogICAgICAgICAgaW50IF9faW50X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgp
OwogICAgICAgICAgaWYgKF9faW50X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNp
emVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90
eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9j
YShzaXplb2YoaW50ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19j
Zml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAg
ICAgICBjaGFyX3RyYWl0czxpbnRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20s
IF9fc2l6ZSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYs
ICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJl9fZmJ5dGVzLCAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9
IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20g
PSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252
ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRlcyk7
CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgaW50ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWlu
dGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0g
b2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlmIChfX2ZieXRlcyA8IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICAgICAg
X190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAg
ICAgICAgICAgICAgX19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gZXJyb3I7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNv
ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQo
c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgIGV4
dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7
CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkp
CiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rl
c2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9N
X2dldF9pbl9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUg
PSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRp
cGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgc2l6ZV90IF9fY29udiA9IF9faWNv
bnZfYWRhcHRvcihpY29udiwqX19kZXNjLCBfX251bGwsIF9fbnVsbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fY3RvLCAmX190bGVuKTsKCiAgICAgICAgICBp
ZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3Rv
X25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAg
ICAgIGlmIChfX3RsZW4gPT0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKSkKICAgICAg
ICAgICAgICAgIF9fcmV0ID0gbm9jb252OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9
PSAwKQogICAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgog
ICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf
X2VuY190cmFpdHM+OjoKICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg
Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGludGVybl90eXBlKiBf
X3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChf
X3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6
Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9f
ZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNp
emVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3Qg
X19mbGVuID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBj
b25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAg
c2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAg
ICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAg
ICAgY2hhciogX19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAg
ICBpbnQgX19leHRfYm9tID0gX19zdGF0ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAg
ICBpZiAoX19leHRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6
ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2Zp
eGVkID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihl
eHRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9
IHN0YXRpY19jYXN0PGV4dGVybl90eXBlPihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJf
dHJhaXRzPGV4dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsK
ICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQp
OwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywg
Jl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4s
ICZfX2N0bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0
ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFw
dG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAg
ICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihf
X2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVy
bl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2ZsZW4gPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KF9fZnJvbV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19y
ZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIF9fcmV0ID0gZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf
dHJhaXRzPjo6CiAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50
IF9fcmV0ID0gMDsKICAgICAgaWYgKHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5U
KSkKICAgICAgICBfX3JldCA9IHNpemVvZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQ+CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg
X19lbmNfdHJhaXRzPjo6CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAg
eyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf
dHJhaXRzPjo6CiAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl
X3QgX19tYXgpIGNvbnN0CiAgICB7IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVf
dD4oX19lbmQgLSBfX2Zyb20pKTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0
eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs
IF9fZW5jX3RyYWl0cz46OgogICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsg
cmV0dXJuIDE7IH0KIyAzMzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2NvZGVjdnQuaCIgMiAzCiMgNDI2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCgogIGNsYXNzIF9fbnVtX2Jhc2UKICB7CiAgcHJv
dGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgY2hhciBfU19hdG9tc1tdOwoKICAgIGVudW0KICAg
IHsKICAgICAgX01femVybywKICAgICAgX01fZSA9IF9NX3plcm8gKyAxMCwKICAgICAgX01fRSA9
IF9NX3plcm8gKyAxMSwKICAgICAgX01fc2l6ZSA9IDIxICsgMQogICAgfTsKCgoKICAgIHN0YXRp
YyBib29sCiAgICBfU19mb3JtYXRfZmxvYXQoY29uc3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIqIF9f
ZnB0ciwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7
CgoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfaW50KGNvbnN0IGlvc19iYXNlJiBfX2lv
LCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsKTsKICB9OwoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3Rh
dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2lt
YWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBj
aGFyKiBfTV9ncm91cGluZzsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV90cnVlbmFtZTsKICAg
ICAgY29uc3QgY2hhcl90eXBlKiBfTV9mYWxzZW5hbWU7CgogICAgcHVibGljOgogICAgICBleHBs
aWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9f
cmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0
CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBs
b2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY2xv
Yyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAg
ICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5k
c19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1
ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cnVlbmFtZSgpOyB9CgogICAg
ICBzdHJpbmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19mYWxzZW5hbWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
bnVtcHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9p
bnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3Jv
dXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVh
bCBzdHJpbmdfdHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N
X3RydWVuYW1lOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFt
ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAg
ICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxl
KTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbnVt
cHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVt
cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2lu
aXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8PgogICAg
bnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg
ICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9f
Y2xvYyk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdF9i
eW5hbWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJUPgogICAgewoKICAgICAgX19jX2xvY2FsZSBf
TV9jX2xvY2FsZV9udW1wdW5jdDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNp
emVfdCBfX3JlZnMgPSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7
CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwog
ICAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAg
ICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUo
KQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBj
bGFzcyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm
YWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p
biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo
aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z
aWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChf
X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAg
Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3Vi
bGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB+bnVtX2dldCgpIHsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfZmxvYXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICAg
IHN0cmluZyYgX194dHJjKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0
X2ludChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYs
CiAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAg
IHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUm
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUs
IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg
ICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46
OmlkOwojIDcyMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl
X2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVt
X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjpp
ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDog
bG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg
Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg
ICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f
cywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg
fQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
ZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAg
ICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0
KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNv
bnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19m
LCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVydF9mbG9hdChpdGVy
X3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2lu
dChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3Q7
CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5fZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFz
ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9pbnQo
aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywK
ICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAg
ICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fd3MsIGludCBfX2xlbikgY29uc3Q7
CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxs
LCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo
aXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNl
JiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUg
X19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWdu
ZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w
dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFy
X3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9w
dXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2Nh
bGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6
OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRl
ID0gX1NfY19sb2NhbGU7IH0KCgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKF9fY19sb2Nh
bGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9j
KTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3Qg
X0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBf
Q2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8x
LCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNm
b3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAg
ICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAgIGludAogICAg
ICBfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0OwoKICAgICAg
c2l6ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3Qp
IGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGUoKQogICAg
ICB7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2NvbGxhdGUgIT0gX1NfY19sb2NhbGUpCiAgICAg
ICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUpOwogICAgICB9Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv
bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg
Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg
ICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9f
bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0
ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciosIGNv
bnN0IGNoYXIqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPGNo
YXI+OjpfTV90cmFuc2Zvcm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpIGNvbnN0OwoKCiAg
dGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0
IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVf
dAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqLCBjb25zdCB3Y2hh
cl90Kiwgc2l6ZV90KSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgogICAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRl
X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvbGxh
dGU8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBpZiAoX01fY19sb2NhbGVfY29sbGF0
ZSAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2Nh
bGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxh
dGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNv
bGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1Ymxp
YzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9Owog
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fdGltZXB1bmN0IDog
cHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3Ry
aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAgICBzdGF0aWMgY29u
c3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xv
Y2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IGNoYXIqIF9NX25hbWVfdGlt
ZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBjb25zdCBf
Q2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2Zv
cm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0
IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRl
X3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7CgoKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk0Owog
ICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NjsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5
X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAgIGNvbnN0
IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMTsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo
MDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMDsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMzsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGlt
ZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwg
X01fbmFtZV90aW1lcHVuY3QoIkMiKQogICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7
IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBj
b25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQo
X19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3QoX19zKQogICAgICB7IF9NX2luaXRpYWxpemVfdGlt
ZXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBz
aXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAgICAgICAgICBjb25z
dCB0bSogX190bSkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25z
dCBfQ2hhclQqKiBfX2RhdGUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kYXRlWzBdID0gX01f
ZGF0ZV9mb3JtYXQ7CiAgICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAg
ICB9CgogICAgICB2b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3Rp
bWUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX190aW1lWzBdID0gX01fdGltZV9mb3JtYXQ7CiAg
ICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lk
CiAgICAgIF9NX2FtcG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAogICAgICB7CiAgICAg
ICAgX19hbXBtWzBdID0gX01fYW07CiAgICAgICAgX19hbXBtWzFdID0gX01fcG07CiAgICAgIH0K
CiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19k
dCkgY29uc3QKICAgICAgewoKICAgICAgICBfX2R0WzBdID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsK
ICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAg
IHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7
CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5MzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0
OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheTU7CiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5
NjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXk3OwogICAgICB9CgogICAgICB2b2lkCiAgICAg
IF9NX2RheXNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAgICB7
CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5X2ExOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2Rh
eV9hMjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXlfYTM7CiAgICAgICAgX19kYXlzWzNdID0g
X01fZGF5X2E0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheV9hNTsKICAgICAgICBfX2RheXNb
NV0gPSBfTV9kYXlfYTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3OwogICAgICB9Cgog
ICAgICB2b2lkCiAgICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QK
ICAgICAgewogICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKICAgICAgICBfX21vbnRo
c1sxXSA9IF9NX21vbnRoMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aDAzOwogICAg
ICAgIF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21v
bnRoMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aDA2OwogICAgICAgIF9fbW9udGhz
WzZdID0gX01fbW9udGgwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoMDg7CiAgICAg
ICAgX19tb250aHNbOF0gPSBfTV9tb250aDA5OwogICAgICAgIF9fbW9udGhzWzldID0gX01fbW9u
dGgxMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOwogICAgICAgIF9fbW9udGhz
WzExXSA9IF9NX21vbnRoMTI7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzX2Fi
YnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAg
X19tb250aHNbMF0gPSBfTV9tb250aF9hMDE7CiAgICAgICAgX19tb250aHNbMV0gPSBfTV9tb250
aF9hMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7CiAgICAgICAgX19tb250
aHNbM10gPSBfTV9tb250aF9hMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBfTV9tb250aF9hMDU7
CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aF9hMDY7CiAgICAgICAgX19tb250aHNbNl0g
PSBfTV9tb250aF9hMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aF9hMDg7CiAgICAg
ICAgX19tb250aHNbOF0gPSBfTV9tb250aF9hMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9t
b250aF9hMTA7CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGhfYTExOwogICAgICAgIF9f
bW9udGhzWzExXSA9IF9NX21vbnRoX2ExMjsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+X190aW1lcHVuY3QoKTsKCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRp
YWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2NhbGUpOwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBfX3RpbWVwdW5jdDxf
Q2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIF9fdGltZXB1bmN0PGNoYXI+Ojp+X190aW1l
cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY2hhcioKICAgIF9fdGltZXB1bmN0PGNo
YXI+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVw
dW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoK
ICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0KGNoYXIq
LCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0OwoKCiAgdGVtcGxhdGU8Pgog
ICAgX190aW1lcHVuY3Q8d2NoYXJfdD46On5fX3RpbWVwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAg
ICBjb25zdCB3Y2hhcl90KgogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9TX3RpbWV6b25lc1sx
NF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9p
bml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAg
IHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9wdXQod2NoYXJfdCosIHNpemVfdCwg
Y29uc3Qgd2NoYXJfdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRt
KikgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgX0NoYXJU
KiBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNbMTRdOwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXQgOiBwdWJs
aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7Cgog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0
KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9Cgog
ICAgICBkYXRlb3JkZXIKICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2RhdGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF90aW1lKGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZ2V0X3RpbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9k
YXRlKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfd2Vla2RheShfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9t
b250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9tb250aG5hbWUoX19iZWcsIF9fZW5k
LCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfeWVhcihp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2dldF95ZWFyKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0p
OyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldCgpIHsgfQoK
ICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRlcigpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRf
d2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRy
YWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVy
LAogICAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVu
LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCgogICAg
ICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUm
IF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU
KiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFj
dF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19mb3JtYXQpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp
ZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xh
c3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0X2J5
bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9nZXQ8X0No
YXJULCBfSW5JdGVyPihfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXQgOiBwdWJsaWMgbG9j
YWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsK
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9w
dXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg
Y2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAg
ICAgICAgICBjb25zdCB0bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCA9IDApIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9fZmlsbCwgX190bSwg
X19mb3JtYXQsIF9fbW9kKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
dGltZV9wdXQoKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qg
dG0qIF9fdG0sCiAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdDsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5
bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPgogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVy
IGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0X2J5bmFtZShjb25zdCBj
aGFyKiAsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0
ZXI+KF9fcmVmcykKICAgICAgeyB9OwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+dGltZV9wdXRfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgbW9uZXlfYmFzZQogIHsK
ICBwdWJsaWM6CiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2YWx1
ZSB9OwogICAgc3RydWN0IHBhdHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRpYyBj
b25zdCBwYXR0ZXJuIF9TX2RlZmF1bHRfcGF0dGVybjsKCgoKICAgIHN0YXRpYyBwYXR0ZXJuCiAg
ICBfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hh
ciBfX3Bvc24pOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4K
ICAgIGNsYXNzIG1vbmV5cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5
X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNoYXJf
dHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsK
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9jdXJyX3N5bWJvbDsKICAgICAgY29uc3QgY2hhcl90
eXBlKiBfTV9wb3NpdGl2ZV9zaWduOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX25lZ2F0aXZl
X3NpZ247CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAgICAgcGF0dGVybiBfTV9wb3NfZm9y
bWF0OwogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7CgogICAgcHVibGljOgogICAgICBleHBs
aWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQo
X19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgpOyB9CgogICAgICBleHBs
aWNpdAogICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3Ms
IHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7
IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MsIF9fcyk7IH0KCiAgICAgIGNoYXJfdHlw
ZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVj
aW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3Ry
aW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBp
bmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQog
ICAgICBwb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRp
dmVfc2lnbigpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQK
ICAgICAgZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mcmFjX2Rp
Z2l0cygpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgbmVn
X2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19mb3JtYXQoKTsgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdCgpOwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg
IGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2Vw
OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAg
IGRvX2N1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0K
CiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5n
X3R5cGUKICAgICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25l
Z2F0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRzKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAgIHZpcnR1YWwgcGF0
dGVybgogICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zX2Zv
cm1hdDsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19mb3JtYXQoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgIHZvaWQKICAgICAgIF9N
X2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSA9IF9fbnVs
bCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBs
b2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJU
LCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46
On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+
Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNo
YXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hh
ciopOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6
X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIqKTsKCgogIHRl
bXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCk7Cgog
IHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgp
OwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojpf
TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7CgogIHRlbXBs
YXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFs
aXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBw
dWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9N
X2NfbG9jYWxlX21vbmV5cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAog
ICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAw
KQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAg
ICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAg
ICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAg
ICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFt
ZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsg
fQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29u
c3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBs
b2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3Jl
ZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91Ymxl
JiBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwg
X19pbnRsLCBfX2lvLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBf
X2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9f
aW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcg
ZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5
cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRl
cj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVy
IGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlw
ZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9u
ZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0
cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBf
X2ZpbGwsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf
X3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2Zp
bGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgbG9uZyBkb3VibGUg
X191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRl
cl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2Nh
bGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICBzdHJ1Y3QgbWVzc2Fn
ZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CiAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXMgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg
cHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdf
dHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNz
YWdlczsKCgogICAgICBjb25zdCBjaGFyKiBfTV9uYW1lX21lc3NhZ2VzOwoKCiAgICBwdWJsaWM6
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2Fn
ZXMoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9u
YW1lX21lc3NhZ2VzKCJDIikKICAgICAgeyBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2NfbG9j
YWxlOyB9CgoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2Ms
IGNvbnN0IGNoYXIqIF9fbmFtZSwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpm
YWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX19uYW1lOwog
ICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsK
ICAgICAgfQoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFy
PiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19vcGVuKF9fcywgX19sb2MpOyB9CgoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJh
c2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYsIGNvbnN0IGNoYXIqKSBjb25zdDsKCiAg
ICAgIHN0cmluZ190eXBlCiAgICAgIGdldChjYXRhbG9nIF9fYywgaW50IF9fc2V0LCBpbnQgX19t
c2dpZCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fZ2V0KF9fYywgX19zZXQsIF9fbXNnaWQsIF9fcyk7IH0KCiAgICAgIHZvaWQKICAgICAgY2xv
c2UoY2F0YWxvZyBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Nsb3NlKF9fYyk7
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzKCkKICAgICAg
IHsKICAgICAgICAgaWYgKF9NX2NfbG9jYWxlX21lc3NhZ2VzICE9IF9TX2NfbG9jYWxlKQogICAg
ICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgICAg
fQoKICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5n
PGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl
CiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZh
dWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBj
b25zdDsKCgogICAgICBjaGFyKgogICAgICBfTV9jb252ZXJ0X3RvX2NoYXIoY29uc3Qgc3RyaW5n
X3R5cGUmIF9fbXNnKSBjb25zdAogICAgICB7CgogICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihjb25zdF9jYXN0PF9DaGFyVCo+KF9fbXNnLmNfc3RyKCkpKTsKICAgICAgfQoK
CiAgICAgIHN0cmluZ190eXBlCiAgICAgIF9NX2NvbnZlcnRfZnJvbV9jaGFyKGNoYXIqIF9fbXNn
KSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPGNoYXI+
OjpsZW5ndGgoX19tc2cpIC0gMTsKIyAxNzMwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAgICByZXR1cm4gc3RyaW5nX3R5cGUo
KTsKICAgICAgfQogICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2Fs
ZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAg
IG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYp
IGNvbnN0OwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvbWVzc2FnZXNfbWVt
YmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2Fn
ZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNp
Y19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CiAgICB7CiAgICAgIGJpbmR0ZXh0
ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CiAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9f
cywgX19sb2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFt
ZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVu
KGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgewoKCiAgICAgIHRleHRkb21haW4oX19zLmNf
c3RyKCkpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6c3RyaW5nX3R5cGUKICAgIG1lc3NhZ2Vz
PF9DaGFyVD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0CiAgICB7CgoKCgoKCiAg
ICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAg
ICAgIHNldGxvY2FsZShfX0xDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CiAgICAgIGNoYXIqIF9f
bXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKICAgICAgc2V0bG9j
YWxlKF9fTENfQUxMLCBfX29sZCk7CiAgICAgIGZyZWUoX19vbGQpOwogICAgICByZXR1cm4gX01f
Y29udmVydF9mcm9tX2NoYXIoX19tc2cpOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgdm9pZAogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29u
c3QKICAgIHsgfQojIDE3NDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2xvY2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3Nh
Z2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1l
c3NhZ2VzPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9
IF9fczsKICAgICAgICBpZiAoX01fY19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpCiAg
ICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAg
ICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAgIH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpCiAg
ICAgIHsgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg
eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6
c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50
LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19j
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1
cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hh
clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9f
YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh
clQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
ZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5p
cyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0
eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i
YXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9s
b3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U
cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90
eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg
dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5
cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwog
ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl
YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0
ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7
CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBl
KiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAg
ICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9w
ZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNv
bnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Ih
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAg
ICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0K
CiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAg
ICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVh
cih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wK
ICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp
dCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4g
KHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9v
bAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFk
Yml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhp
b3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7
CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAg
dmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0K
CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9
IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoK
ICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoK
ICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFf
TV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRl
bignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAg
ICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChj
aGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZp
bGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg
IH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAg
ICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsK
CiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVj
dGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9p
ZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAg
ICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBj
b25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0
KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2Fj
aGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvbG9j
YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDM0ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAzCgpu
YW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0
ZSBfX3N0YXRlKQogICAgewogICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJl
YW1idWZfc3RhdGUgPSBfX3N0YXRlOwogICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZf
c3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRo
aXMtPmV4Y2VwdGlvbnMoKSkpCiAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9z
OjpjbGVhcihpb3N0YXRlKSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0
cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
Pjo6Y29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRz
KiBfX3dvcmRzID0gKF9fcmhzLl9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8K
ICAgICAgICBfTV9sb2NhbF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoK
CiAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBp
ZiAoX19jYikKICAgICAgICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxf
Y2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29y
ZCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dv
cmQgPSAwOwogICAgICAgIH0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9N
X2NhbGxiYWNrcyA9IF9fY2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9N
X3dvcmRfc2l6ZTsgKytfX2kpCiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtf
X2ldOwogICAgICBpZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAg
ICAgIGRlbGV0ZSBbXSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQog
ICAgICBfTV93b3JkID0gX193b3JkczsKICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29y
ZF9zaXplOwoKICAgICAgdGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndp
ZHRoKF9fcmhzLndpZHRoKCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9u
KCkpOwogICAgICB0aGlzLT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhz
LmZpbGwoKSk7CgogICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7Cgog
ICAgICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjaGFyCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBf
X2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVs
dDsKICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBf
TV9mY3R5cGUtPm5hcnJvdyhfX2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hh
clQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QK
ICAgIHsKICAgICAgY2hhcl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mY3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihf
X2MpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19v
bGQodGhpcy0+Z2V0bG9jKCkpOwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBf
TV9jYWNoZV9mYWNldHMoX19sb2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAg
ICAgIHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2
b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7
CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfTV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsK
IyAxNTkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy50
Y2MiIDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxz
ZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9f
c2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0Owog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2
b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0
IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihf
X2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9j
KTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0
PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxf
X251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsK
ICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51
bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAg
ICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNp
Y19pb3M8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90PjsK
fQojIDIwOCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z
LmgiIDIgMwojIDUyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMK
IyA0NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlw
ZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAg
ICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQK
ICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMt
PmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0K
CgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAg
IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYp
KF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
PDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAg
ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAg
IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlv
c19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZp
ZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz
ZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0
aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAg
IHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19u
KSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAg
ICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYg
aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8
IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAg
ICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAg
ICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGlu
dCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19j
YXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0
ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAoKTsKCiAg
ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07
CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xh
c3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAgICAgIGJv
b2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9vczsKCiAg
ICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAgICBpZiAo
X01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNlcHRpb24o
KSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJk
YnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3IgYm9vbCgp
CiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9D
aGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyByZXR1cm4g
KF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj
X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxj
bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBjaGFyIF9f
YykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0
ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2ln
bmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9f
YykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJh
c2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAg
dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25z
dCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg
cmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdc
bicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoK
IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIg
MSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0u
dGNjIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDEg
MwojIDQzICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbG9jYWxlIiAzCgoKCiMg
MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50
Y2MiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh
bGVfZmFjZXRzLnRjYyIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
Y2Vycm5vIiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NlcnJu
byIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9l
cnJuby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgi
IDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAz
CiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUv
Yml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRl
cm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5v
LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3Jh
bV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQoj
IDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDQ5ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoK
CiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAxIDMKIyA0OCAi
L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuICJD
IiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91c3Iv
aW5jbHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMK
IyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRl
ZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0
MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2lu
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nv
cyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFu
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194
LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBf
X3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBz
aW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91
YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h
dGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEw
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4
cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQg
Kl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gs
IGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUg
X194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYg
KGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21v
ZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs
ZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xv
Z2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91
YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChk
b3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu
IGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9v
ciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192
YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQg
X19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192
YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3Vi
bGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs
ZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWdu
aWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWdu
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBu
YW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRv
dWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4
dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBk
b3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQs
IGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195biAo
aW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2Ft
bWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdh
bW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQg
KGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy
biBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19p
bG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRv
dWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxu
IChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5l
YXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVv
IChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJv
dW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0
aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0
IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUg
X196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSwgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoj
IDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh
bGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g
ZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm
bG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNp
bmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29z
ZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0
ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nv
c3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5o
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
ZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQp
IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25l
bnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhw
b25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h
dCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQg
Kl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0
ICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9n
MXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Nx
cnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19jZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0
IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQg
X19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp
bnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBm
bG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg
c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZp
Y2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19j
b25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGlu
dCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2owZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChp
bnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJv
dyAoKTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195
MGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50
LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0
IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQp
IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZ2Ft
bWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1w
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25n
YW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVy
biBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYg
KGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQg
X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBf
X24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19u
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24p
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2Fs
YmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19z
Y2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxv
YXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5
aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCByZW1xdW9m
IChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25n
IGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBf
X2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRm
IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9hdCBf
X3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVl
KSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZs
b2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAo
KTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwg
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChs
b25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg
c2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lu
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgp
OyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9f
c2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRv
dWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg
c2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np
bmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9f
eCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBs
IChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19l
eHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVy
biBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIHBvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk
b3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxv
b3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9v
cmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2Rs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxv
bmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmlj
YW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBj
b3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIg
Kl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4g
aW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4
dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBq
bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwg
KGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19lcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAo
bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXAp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBp
bnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2Nh
bGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwg
aW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91
YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5s
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n
IGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBp
bnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxv
bmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBs
b25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
Zm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25n
IGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg
Zm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDEwMCAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQg
c2lnbmdhbTsKIyAxNTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05B
TiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAg
ICBGUF9OT1JNQUwKCiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBl
bnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9J
U09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9M
SUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhjZXB0
aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7
CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1h
dGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDQxMSAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMwp9CiMgNTIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu
Mi9jbWF0aCIgMiAzCiMgNzkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jbWF0
aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21h
dGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJs
ZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQK
ICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlu
bGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls
dGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJl
dHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgogIGlubGluZSBsb25n
IGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0K
CgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQgX194KSB7
IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2lu
KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoKICB1c2luZyA6
OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFu
ZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBf
X3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuMjsKCgogIGlu
bGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4y
ZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBk
b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9feSwgX194KTsg
fQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194
KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBj
ZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoKCgoKICB1c2lu
ZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1
aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJs
ZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1c2luZyA6OmNvc2g7
CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gp
OyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsg
cmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoKICBpbmxpbmUgZmxv
YXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwbChfX3gp
OyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJs
ZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gp
OyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gp
IHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBm
bG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoKCgogIHVz
aW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJs
ZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1v
ZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlubGluZSBmbG9hdAog
IGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGYoX194LCBfX2V4
cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gs
IGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNp
bmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhw
KSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4gOjpsZGV4
cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlubGluZSBmbG9hdAog
IGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxv
bmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2dsKF9feCk7IH0K
CgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9hdCBfX3gp
IHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBs
b2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7IH0KCgoKCgogIHVz
aW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19p
cHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAiL3Vzci9sb2NhbC9n
Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbW9k
Zihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwo
X194LCBfX2lwdHIpOyB9CiMgMzg4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
Y21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bv
d19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAg
ICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9fY21hdGhf
cG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2luZyA6OnBvdzsKCgogIGlubGluZSBmbG9hdAog
IHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpwb3dmKF9feCwgX195KTsgfQoK
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZG91
YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9f
eCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBpbnQgX19uKQogIHsg
cmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
cG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194
LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9
CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJl
dHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnNx
cnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp
bl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUg
X194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgogIHVzaW5nIDo6dGFuOwoK
CiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5mKF9feCk7IH0K
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVy
biA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAg
dGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuaGYoX194KTsgfQoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7
IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAo
c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNp
emVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2Zw
Y2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg
IF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNp
emVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAo
ZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19maW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJl
dHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBz
aXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZs
IChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVy
ZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQp
ID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19p
c25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChfVHAgX19mKSB7IHJldHVybiAoKHNpemVv
ZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2Yg
KF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNz
aWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9f
ZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09
IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRl
cihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5
cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7
ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9m
X18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f
ZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m
cGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXpl
b2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9m
IChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFz
c2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+IF9feTsgfSkpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwo
X1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlw
ZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsg
IShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2Zf
XyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19m
cGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zw
Y2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVv
ZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2Yg
KF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNz
aWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194ID49IF9feTsgfSkpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNzKF9UcCBfX2Yx
LCBfVHAgX19mMikgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBf
X3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9u
X18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0g
KF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChf
X3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191
KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNp
emVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXpl
b2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9
PSBGUF9OQU47IH0pKSAmJiBfX3ggPCBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19m
MikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9
IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAo
eyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195
KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkg
OiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDog
X19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9m
IChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAo
ZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQ
X05BTjsgfSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2Yy
KQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0g
KF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7
IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kp
OyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6
IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBf
X2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2Yg
KGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChk
b3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBf
TkFOOyB9KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBfX3gpOyB9KSk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfVHAgX19m
MSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhf
X2YxKSBfX3UgPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX192ID0gKF9fZjIpOyAoc2l6ZW9m
IChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAo
X191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3Np
ZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/
IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8g
X19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7
IH0KfQojIDU4MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCm5h
bWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg
ZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikg
eyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYo
X19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBf
X2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGludAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lz
bm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWdu
Yml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2Yy
KSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBf
X2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBf
VHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAg
X19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9f
ZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwg
X19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJl
ZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQo
X19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNs
YXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojpp
c2luZjsKICB1c2luZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3Jt
YWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVh
dGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4
Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9j
eHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoK
IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDEg
MwojIDM1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2Mi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBf
X2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBf
X3kgPSBfX24gJSAyID8gX194IDogMTsKCiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAg
ewogICAgICAgICAgX194ID0gX194ICogX194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAg
ICAgICAgIF9feSA9IF9feSAqIF9feDsKICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAg
fQp9CiMgNjU1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwoj
IDQyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRz
LnRjYyIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9saW1pdHMi
IDEgMwojIDQ3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCgoj
IDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2NwdV9saW1pdHMuaCIgMSAzCiMgNDkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9saW1pdHMiIDIgMwojIDg4NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxlCiAgewog
ICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJkX3plcm8gPSAwLAog
ICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAog
ICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVtIGZsb2F0X2Rlbm9y
bV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICBkZW5vcm1fYWJz
ZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0cnVjdCBfX251bWVy
aWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs
c2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9
IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh
c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7
CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9
IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7CiAgICAgIHN0YXRp
YyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAg
IHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9
CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJv
dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBxdWll
dF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh
dGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
aWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y
bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl
OwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3JtX21pbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll
YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoKCgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAgICAgfHwgdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Y2hhcj4KICAg
IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
c3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hhcikoLTEyNyAtIDEp
OyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIp
MTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7
IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBj
aGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTA3MSAi
L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBj
aGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBzdGF0
aWMgc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMxMCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp
YyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQog
ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQg
Y2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWdu
ZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMTI4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl
L2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRz
PHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
emVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln
bmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNo
YXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGlj
IHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkyMTQ3NDgzNjQ3
TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz
dGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgp
OyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBkZW5v
cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAx
MjQxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0PgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTMyNzY3IC0gMSk7IH0KICAgICAgc3RhdGljIHNo
b3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3Rh
dGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh
dGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hv
cnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAg
ICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQo
KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf
emVybzsKICAgIH07CiMgMTI5OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xp
bWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBz
aG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7
IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gMTY7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBz
aG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0
IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2ln
bmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IG51bWVyaWNfbGltaXRzPGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBpbnQgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg
IHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgaW50IGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBp
bnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDAp
OyB9CiAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVl
OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE0
MTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5z
aWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCko
MjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2ln
bmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5
bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWdu
ZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9u
Zz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2
NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy
biAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu
aXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog
ICAgICBzdGF0aWMgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBz
aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigw
KTsgfQogICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl
Zm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTUyMiAiL3Vzci9sb2NhbC9nY2Mz
LjIvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQog
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxv
bmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgw
N0xMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSA2MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcg
bG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBs
b25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHko
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAg
ICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxp
bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDAp
OyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5
bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTYzNCAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0
cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoOTIyMzM3
MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBz
aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs
b25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNf
bGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl
ZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNjsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGZsb2F0
IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQogICAg
ICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEY7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGZs
b2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRp
YyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAg
c3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7
IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDAuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf
dG93YXJkX3plcm87CiAgICB9OwojIDE3NjUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91
YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7
CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUw
NzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0
YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDky
NTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3Owog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQog
ICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxp
bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJs
ZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
c2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAgICAgICAgICAgICByb3VuZF90b3dhcmRf
emVybzsKICAgIH07CiMgMTg0NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xp
bWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJs
ZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy4z
NjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1h
eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICBzdGF0aWMg
bG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEw7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPQogICAgICAgICAgICAgICAgZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAg
ICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAgZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBk
b3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3Rh
dGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsg
fQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxOTI0ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCn0KIyA0NCAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoK
IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDEgMwojIDQw
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKZXh0ZXJuICJD
KysiIHsKCm5hbWVzcGFjZSBfX2N4eGFiaXYxCnsKICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsK
fQojIDU1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKbmFt
ZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2
aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9y
PShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAg
cHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBs
aWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1Ymxp
YzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9
CiMgOTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMwogICAg
Ym9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9f
bmFtZSA8IF9fYXJnLl9fbmFtZTsgfQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5m
byYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9Cgog
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJl
dHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wg
X19pc19wb2ludGVyX3AoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9w
KCkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9p
bmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgX19vdXRlcikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3Vw
Y2FzdChjb25zdCBfX2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoK
ICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFk
X2Nhc3QoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAg
fTsKCgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK
ICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgp
IHRocm93KCk7CiAgfTsKfQoKfQojIDQ2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z
LjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2FsZTo6Y29tYmluZShjb25zdCBs
b2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9JbXBsKiBfX3RtcCA9IG5ldyBfSW1w
bCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01f
aW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4gbG9jYWxlKF9fdG1wKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdAogICAg
ewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOwogICAg
ICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0gdXNlX2ZhY2V0PF9fY29sbGF0ZV90
eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRlLmNvbXBhcmUoX19zMS5kYXRhKCks
IF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgpKSA8IDApOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2Vf
ZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNl
dDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01f
aW1wbC0+X01fZmFjZXRzOwogICAgICBpZiAoIShfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNl
dHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKSkKICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNldHNbX19pXSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChj
b25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFj
ZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9N
X2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9m
YWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9mbG9hdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVy
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBj
aGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0No
YXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAg
IGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0
IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICBpbnQgX19wb3Mg
PSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBpZiAoKF9fdHJhaXRzX3R5
cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQog
ICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9
IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUgX196
ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGJvb2wgX19mb3Vu
ZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVy
bykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgfQogICAgICBpZiAoX19m
b3VuZF96ZXJvKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJv
XTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IHNpemVfdCBfX2xl
biA9IF9NX0UgLSBfTV96ZXJvICsgMTsKICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19fbGVuXTsK
ICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMp
OwogICAgICBib29sIF9fZm91bmRfZGVjID0gZmFsc2U7CiAgICAgIGJvb2wgX19mb3VuZF9zY2kg
PSBmYWxzZTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fZGVjID0gX19ucC5kZWNpbWFsX3BvaW50
KCk7CgogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9f
Z3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9
IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsKICAgICAgY29uc3Qg
Y2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CgogICAgICB3aGlsZSAoX19i
ZWcgIT0gX19lbmQpCiAgICAgICAgewoKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0g
X190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9fYyk7CgoKICAgICAgICAgIGlmIChf
X3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAgICB7
CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21z
W19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Ry
YWl0c190eXBlOjplcShfX2MsIF9fc2VwKQogICAgICAgICAgICAgICAgICAgJiYgX19jaGVja19n
cm91cGluZyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIGlm
IChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZm91bmRf
Z3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAg
ICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBp
ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2RlYykgJiYgIV9fZm91bmRfZGVjKQogICAgICAg
ICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAg
ICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9w
b3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJjICs9ICcuJzsK
ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIF9fZm91bmRfZGVj
ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoKF9fdHJhaXRzX3R5cGU6
OmVxKF9fYywgX193YXRvbXNbX01fZV0pCiAgICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNf
dHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9FXSkpCiAgICAgICAgICAgICAgICAgICAmJiAhX19m
b3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgKytfX3BvczsK
ICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAg
ICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAgICAgICAgICAgICBpZiAoX190cmFpdHNf
dHlwZTo6ZXEoX19jLCBfX3BsdXMpCiAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6
OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsr
X19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNo
YXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAgICAgIGlmIChfX2No
ZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAg
ICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0
YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3Vw
aW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8PSBp
b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAg
ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7
CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
c3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNo
YXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9j
ID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hh
clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAgICAg
aW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6
OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpCiAgICAg
ICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Omhl
eCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQogICAgICAgIF9fYmFzZSA9IDEwOwoK
CiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAg
IGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0
IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwoKICAgICAgaWYgKChfX3Ry
YWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21p
bnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9f
eHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwog
ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90
eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBjb25z
dCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbigneCcpOwogICAgICBjb25zdCBjaGFyX3R5
cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAgICBpZiAoX19iYXNlID09IDEwKQogICAg
ICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgICAgICB3aGls
ZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBf
X2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19mb3VuZF96
ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3pl
cm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxk
ID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICgoX190cmFpdHNf
dHlwZTo6ZXEoX19jLCBfX3gpCiAgICAgICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNfdHlw
ZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQp
CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9f
Y3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgICAgICsrX19wb3M7
CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg
ICAgICAgX19iYXNlID0gMTY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iYXNlID0gODsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19iYXNlID09IDE2KQogICAg
ICAgIHsKICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19i
ZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRv
bXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAq
KCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gp
IHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkKICAgICAgICAgICAgICAgICAgJiYgX19i
ZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9feHRyYyAr
PSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICsrX19wb3M7
CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9CgoKCiAgICAgIHNpemVfdCBfX2xlbjsKICAgICAgaWYgKF9f
YmFzZSA9PSAxNikKICAgICAgICBfX2xlbiA9IF9NX3NpemU7CiAgICAgIGVsc2UKICAgICAgICBf
X2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX01fc2l6ZV07CiAgICAg
IF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAg
ICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5n
ID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3Vw
aW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlw
ZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19l
bmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190
eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsKCgogICAgICAgICAgaWYgKF9fcCAmJiAh
X190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgIF9fYyA9
ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5
cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tfZ3JvdXBpbmcpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsK
ICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgX19jID0g
KigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAo
X19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7Cgog
ICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3Mp
OwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dy
b3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAg
fQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu
SXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICBpZiAoIShf
X2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkKICAgICAgICB7CgoKICAgICAgICAg
IHN0cmluZyBfX3h0cmM7CiAgICAgICAgICBpbnQgX19iYXNlOwogICAgICAgICAgX19iZWcgPSBf
TV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7
CgogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICAgICAgX19jb252ZXJ0X3RvX3Yo
X194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpICYmIF9fdWwgPD0gMSkKICAgICAg
ICAgICAgX192ID0gX191bDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgICAgICBsb2Nh
bGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJU
PiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAg
Y29uc3QgX19zdHJpbmdfdHlwZSBfX3RydWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgICAgICBj
b25zdCBfX3N0cmluZ190eXBlIF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX3RydWVzID0gX190cnVlLmNfc3RyKCk7CiAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9fZmFsc2VzID0gX19mYWxzZS5jX3N0cigpOwogICAgICAgICAgY29uc3Qg
c2l6ZV90IF9fdHJ1ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsKICAgICAgICAgIGNvbnN0IHNpemVf
dCBfX2ZhbHNlbiA9IF9fZmFsc2Uuc2l6ZSgpIC0gMTsKCiAgICAgICAgICBmb3IgKHNpemVfdCBf
X24gPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RmID0g
X19uIDw9IF9fZmFsc2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3RyYWl0c190
eXBlOjplcShfX2MsIF9fZmFsc2VzW19fbl0pIDogZmFsc2U7CiAgICAgICAgICAgICAgYm9vbCBf
X3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9f
dHJhaXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAgICAg
IGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RmICYmIF9f
biA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0g
MDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVlbikKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkK
ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgICB9CiAgICAgIHJl
dHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk
b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAg
ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9N
X2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsK
ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9j
YWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAg
ICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsK
ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xv
Y2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAg
ICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptYXgoKSkK
ICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAgIGVs
c2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVn
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAgewog
ICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4
dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAg
ICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIo
KSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAm
IGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xpbWl0czx1
bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp
bnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25n
JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7
CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg
X194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192
LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0
ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9f
YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmlu
ZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQo
X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZl
cnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7
CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25n
IGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9f
YmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigp
LCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgewogICAgICBzdHJp
bmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0
cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2Nv
bnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0
CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAg
ICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
eHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBf
U19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs
b25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBf
X3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMu
Y19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J
bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgIHsKCiAgICAgIHR5cGVk
ZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAgICBmbXRmbGFncyBfX2ZtdCA9IF9f
aW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFzZTo6c2hvd3Bv
cyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlv
c19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdz
KF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2Up
KTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0g
X01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2Up
OwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwog
ICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9j
YWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKICAg
ICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3VsKTsKICAgICAgZWxzZQogICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CiMgNjE4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1f
cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9mbG9hdChfT3V0SXRlciBf
X3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAg
ICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKICAgICAgICBjb25zdCBp
bnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICsgMTsK
ICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICAgIGlm
IChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9kaWdpdHMpKQogICAgICAg
ICAgX19wcmVjID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKTsKCgogICAg
ICAgIGNoYXIgX19mYnVmWzE2XTsKCgogICAgICAgIGludCBfX2xlbjsKCgoKICAgICAgICBpbnQg
X19jc19zaXplID0gX19tYXhfZGlnaXRzICogMzsKICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CgogICAgICAgIGNvbnN0
IGJvb2wgX19mcCA9IF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2ZidWYsIF9fbW9kLCBfX3ByZWMp
OwogICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f
Y3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4g
PSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsIF9TX2NfbG9j
YWxlKTsKCgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRpY19j
YXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBpZiAo
X19mcCkKICAgICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19z
aXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2xl
biA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgICAg
fQojIDY4MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh
Y2V0cy50Y2MiIDMKICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2Zp
bGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091
dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRf
aW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19t
b2QsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QK
ICAgICAgewoKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50
KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0g
NjQ7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs
b2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19j
cywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAg
ICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBf
X2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAg
ICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1
ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUp
OwogICAgICAgICAgfQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lv
LCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj46OgogICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19p
bywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xl
bikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRz
X3R5cGU7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg
Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0
aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193
czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVu
LCBfX3dzKTsKCgogICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8
X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBpZiAoX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRl
bignLicpKSkKICAgICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7
CgoKCgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jh
c2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAg
ICAgICAgIF9DaGFyVCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAt
IF9fd3MgOiBfX2xlbjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19u
cC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91
cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcu
Y19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3Ay
IC0gX193czI7CgoKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAg
ICAgICAgICAgX19uZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAg
ICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAg
IH0KCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVu
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K
ICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVu
X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBf
X2NzLAogICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25z
dCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFy
VCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D
aGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsK
ICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNv
bnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+
KF9fbG9jKTsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7
CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3Mo
KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg
ICAgICB7CgoKCiAgICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmIChf
X2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgIGlmIChfX2Jhc2Vm
aWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9f
b2ZmID0gMTsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193
czIgPSAqX193czsKICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwog
ICAgICAgICAgICAgIH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19h
ZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVu
KTsKICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3My
OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193
cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwg
Y29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsK
ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBz
dHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cp
KTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAg
ICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywg
X19maWxsLCBfX3dzMiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nh
c3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9f
aW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19f
aiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P
dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0
CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwog
ICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsK
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2Nv
bnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo
KTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVt
cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwog
ICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwog
ICAgICAgICAgZWxzZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAg
ICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwg
X19uYW1lLnNpemUoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg
IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0
dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lv
LCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJf
dHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0
X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3Yp
IGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3Un
LCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRv
dWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywg
X19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+
OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j
b252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1f
cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNv
bnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygp
OwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg
aW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxh
Z3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2Up
KTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19z
LCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8u
ZmxhZ3MoX19mbGFncyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAg
ICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg
ICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRs
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsK
ICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9f
ZXJyLCBfX3N0cik7CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBk
b3VibGU+OjpkaWdpdHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf
X2J1aWx0aW5fYWxsb2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdl
dGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5j
X3N0cigpOwogICAgICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkg
KyAxLCBjaGFyKCksIF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBf
X2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7Cgog
ICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAg
IHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0
eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJp
bmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9
IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFj
ZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBm
ID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0No
YXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAg
Y29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0
KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5u
ZWdfZm9ybWF0KCk7CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwg
PyBfX21wdC5wb3NpdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlw
ZSBfX25lZ19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwog
ICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50
KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5k
c19zZXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91
c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9f
bXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9f
c2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3Mg
PSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRl
Y2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAg
Y2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nh
c3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAo
aW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsr
X19pKQogICAgICAgIHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+
KF9fcC5maWVsZFtfX2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAg
ICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAg
ICAgICAgICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAg
ICAgICAgICB8fCAoKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFz
ZTo6bm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAg
ICAgICAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlw
ZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5
bWJvbCgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wu
c2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiBfX2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2Jl
Zyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5m
bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190
ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAg
ICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAg
ICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2ln
blswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19z
aWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChf
X2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAg
X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6
ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdf
c2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
bW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9f
ZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpk
aWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYm
ICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0g
X19zZXApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChf
X2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6
ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz
dHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNl
OgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAg
ICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2Vu
ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNw
YWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlm
IChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4g
PSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBm
b3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hp
bGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAg
IF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5p
dHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShf
X3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24g
PT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5i
ZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo
KSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Zl
cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9f
dGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlk
IHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
Yml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAg
ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv
LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0
CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNv
bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKTsKCgogICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0
aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9f
bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAg
IGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0g
X19sZW4gKyAxOwogICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f
YWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f
Y3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCog
X193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy
VCkgKiBfX2NzX3NpemUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4s
IF9fd3MpOwogICAgICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRo
aXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg
X19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg
ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBl
ZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f
aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8
c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hh
clQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwg
ZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1
c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2Um
IF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoK
CgogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1v
bmV5X2Jhc2U6OnBhdHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlm
ICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9
IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAg
ICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRp
dmVfc2lnbigpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9
IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAg
ICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRp
dmVfc2lnbigpOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBf
X2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBp
ZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19y
ZXM7CiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5n
X3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7
CgoKICAgICAgICAgIGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0
cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdp
dHMoKTsKICAgICAgICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFs
X3BvaW50KCk7CiAgICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19l
bmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192
YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAg
ICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAg
ICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAg
ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywg
X196ZXJvKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp
LCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9f
bXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6
ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUg
X19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7
CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBp
bmcuc2l6ZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19i
ZWcpICogMjsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJU
KSAqIF9fbikpOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3Jv
dXBpbmcoX193czIsIF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAg
ICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmlu
c2VydCgwLCBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAg
ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFk
anVzdGZpZWxkOwogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBf
X3NpZ24uc2l6ZSgpOwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl
OjpzaG93YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3Rp
cGFkID0gX19mID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAg
ICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19f
aV0pOwogICAgICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBp
ZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAg
IF9fcmVzICs9IF9fc3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2ln
bi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6
CiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAg
ICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3Ry
aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9u
ZToKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAg
X19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAg
ICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBl
KF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBf
X3Jlcy5zaXplKCk7CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAg
ICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVs
c2UKCiAgICAgICAgICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAt
IF9fbGVuLCBfX2ZpbGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAg
ICAgIH0KCgogICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsr
X19qLCArK19fcykKICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAg
ICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3Jk
ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAog
ICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVy
X3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAg
PSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwog
ICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQp
OwoKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19s
ZW4gJiYgIV9fZXJyOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9y
bWF0W19faV07CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAg
ICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9
IDA7CiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09
ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf
X21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBf
Q2hhclQgX193Y3NbMTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAu
X01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX19kYXlzMls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIp
OwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50
bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l
cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgog
ICAgICAgICAgICAgICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fbW9udGhzMVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJl
dmlhdGVkKF9fbW9udGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl
ZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICBjYXNlICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19t
b250aHMyWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f
bW9uLCBfX21vbnRoczIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l
cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAg
ICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAg
ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAg
ICAgICAgX19jcyA9ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4o
X19jcywgX19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFf
Zm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251
bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0
X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRy
YWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9f
ZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwg
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAg
ICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAg
ICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6
JU0iOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3dj
cyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J1MnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3Rt
LT50bV9zZWMsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0
eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSAndCc6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09
ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAg
ICBfX2NzID0gIiVIOiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2Nz
LCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3Jt
YXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICBjYXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19kYXRlc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRl
cyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19kYXRlc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSAnWCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07
CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAg
ICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNb
MF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95
ZWFyLCAwLCA5OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwg
X19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1kn
OgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwg
MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCksIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJy
KTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3Rt
LT50bV95ZWFyID0gX19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5
cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u
YW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAg
IGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJy
ICYmIF9fdG1wID09IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5
cGUud2lkZW4oJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19j
dHlwZS53aWRlbignKycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vy
cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k
LCBfX3RtcCwgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAg
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7Cgog
ICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAg
ICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9l
eHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVt
YmVyLAogICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xl
biwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0
dmFsaWQgPSB0cnVlOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAo
X19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMo
Y3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0g
X19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewog
ICAgICAgICAgaW50IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAg
aWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19t
ZW1iZXIgPSBfX3ZhbHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9
IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7
CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0
X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRl
eGxlbiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0
CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwog
ICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsK
ICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAg
ICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2Jl
ZzsKCiAgICAgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kx
KQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hl
c1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAg
ICAgIHsKCiAgICAgICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6
ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21p
bmxlbiA9IG1pbihfX21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChf
X3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hl
c1tfX2kzXV07CiAgICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAg
ICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVz
XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBicmVhazsKICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAg
IHsKCiAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBj
b25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAg
ICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bv
c10gPT0gKl9fYmVnKQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlm
IChfX2xlbiA9PSBfX3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2
YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt
ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193
Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2Mg
PSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg
X19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu
SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAg
ICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBf
X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUu
d2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0
KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVn
ID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVy
biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n
ZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt
KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNf
dHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVu
Y3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4o
X19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9k
YXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4
dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoK
CgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9
IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3Rw
Ll9NX2RheXMoX19kYXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19k
YXlzW19fdG1wd2RheV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAg
ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4g
JiYgX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9
PSAqX19iZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAg
IGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBf
X3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9f
ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21v
bnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p
IGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190
eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5j
dDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihf
X2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9N
X21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAg
X01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19l
cnIpOwoKCgoKCgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3Qg
X19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAg
ICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19uYW1lID0gX19tb250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10g
PT0gKl9fYmVnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xl
biA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChf
X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9f
bmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsK
ICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikK
ICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYg
KF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt
KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBj
b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0g
MDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAh
PSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsK
ICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19p
ID09IDIgfHwgX19pID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAg
ICBfX2NvbnZlcnRfdG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2Fs
ZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0g
MjE0NzQ4MzY0NykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8g
X19sIDogX19sIC0gMTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nh
c3Q8aW50PihfX2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0
SXRlcgogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNv
bnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAg
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3Qm
IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUg
KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5u
YXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09
ICclJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAg
ICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAg
ICAgICAgICAgICBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAg
ICsrX19iZWc7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAg
ICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICBfX2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19w
dXQoX19zLCBfX2lvLCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19f
czsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hh
ciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNv
bnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAg
ICAgIGNvbnN0IHNpemVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0K
ICAgICAgICBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihj
aGFyX3R5cGUpICogX19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwog
ICAgICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAg
ICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0g
PSBjaGFyX3R5cGUoKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBf
X2ZtdFsxXSA9IF9fbW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAg
IF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19y
ZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90
cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0g
MDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsK
ICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25z
dCBfQ2hhclQqKSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hh
clQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAg
IGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29u
c3QKICAgIHsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAg
ICAgY29uc3Qgc3RyaW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9N
X2NvbXBhcmUoX19vbmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlw
ZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9f
bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0g
KF9faGkgLSBfX2xvKSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nh
c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAg
ICAgIHNpemVfdCBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAg
IGlmIChfX3JlcyA+PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAg
ICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
KF9fcmVzICsgMSkpKTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsg
MSk7CiAgICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAg
ZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg
IHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19o
aTsgKytfX2xvKQogICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAg
ICAgICAgICAgICAgICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+
OjpkaWdpdHMgLSA3KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwog
ICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRf
dG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jh
c2UgPSAxMCk7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29u
dmVydF9mcm9tX3YoY2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9f
Zm10LAogICAgICAgICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50
IF9fcHJlYyA9IC0xKQogICAgewogICAgICBpbnQgX19yZXQ7CiAgICAgIGNoYXIqIF9fb2xkID0g
c3RyZHVwKHNldGxvY2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAgICAgIHNldGxvY2FsZShfX0xD
X0FMTCwgIkMiKTsKICAgICAgaWYgKF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmlu
dGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAg
IF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiAgICAgIHNldGxv
Y2FsZShfX0xDX0FMTCwgX19vbGQpOwogICAgICBmcmVlKF9fb2xkKTsKICAgICAgcmV0dXJuIF9f
cmV0OwogICAgfQojIDIwMTkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkCiAgICB7CiAgICAgIHN0YXRpYyB2b2lkCiAgICAg
IF9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsCiAg
ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fb2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xl
biwKICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19u
dW0pOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgdm9pZAogICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBf
X2lvLCBfQ2hhclQgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9D
aGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQqIF9fb2xkcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wg
X19udW0pCiAgICB7CiAgICAgIHNpemVfdCBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9f
bmV3bGVuIC0gX19vbGRsZW4pOwogICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsKICAgICAg
X1RyYWl0czo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2ZpbGwpOwoKICAgICAgX0NoYXJUKiBf
X2JlZzsKICAgICAgX0NoYXJUKiBfX2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAg
c2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lv
LmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CgogICAgICBpZiAoX19hZGp1c3QgPT0g
aW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxf
Q2hhclQqPihfX29sZHMpOwogICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAg
IF9fZW5kID0gX19wYWRzOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9z
X2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQogICAgICAgIHsKCgoKICAgICAgICAgIGxvY2FsZSBf
X2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0
eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBf
Q2hhclQgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgICAgIGNvbnN0IF9DaGFy
VCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24g
PSBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fbWludXMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fcGx1cyk7CgogICAgICAgICAgYm9vbCBf
X3Rlc3RoZXggPSBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCcwJyksIF9fb2xkc1swXSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gn
KSwgX19vbGRzWzFdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX1RyYWl0czo6
ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29sZHNbMV0pKTsKICAgICAgICAgIGlmIChfX3Rlc3Ro
ZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAg
ICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9
IDI7CiAgICAgICAgICAgICAgX19uZXdzICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3Bh
ZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQg
PSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9U
cmFpdHM6OmVxKChfX25ld3NbMF0gPSBfX29sZHNbMF0pLCBfX3BsdXMpID8gX19wbHVzIDogX19t
aW51czsKICAgICAgICAgICAgICArK19fbW9kOwogICAgICAgICAgICAgICsrX19uZXdzOwogICAg
ICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVu
OwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21v
ZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAg
ICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IF9f
cGFkczsKICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgX19lbmQgPSBjb25z
dF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgfQogICAgICBfVHJhaXRzOjpjb3B5KF9f
bmV3cywgX19iZWcsIF9fYmVnbGVuKTsKICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBfX2Jl
Z2xlbiwgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdsZW4gLSBfX2JlZ2xl
biAtIF9fbW9kKTsKICAgIH0KIyAyMTE0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z
LjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGJvb2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5nKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+
JiBfX2dyb3VwaW5nLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4m
IF9fZ3JvdXBpbmdfdG1wKQogICAgewogICAgICBpbnQgX19pID0gMDsKICAgICAgaW50IF9faiA9
IDA7CiAgICAgIGNvbnN0IGludCBfX2xlbiA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25z
dCBpbnQgX19uID0gX19ncm91cGluZ190bXAuc2l6ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRy
dWU7CgoKCgogICAgICB3aGlsZSAoX190ZXN0ICYmIF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9y
IChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2os
KytfX2kpCiAgICAgICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdf
dG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7
CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91cGluZ190bXBbX19uIC0g
X19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUKgogICAgX19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3Ms
IF9DaGFyVCBfX3NlcCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29u
c3QgY2hhciogX19nZW5kLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0
LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg
PiAqX19nYmVnKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywg
X19zZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dl
bmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZ2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0g
X19sYXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAg
ICAgZG8KICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwogICAgICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1v
bmV5cHVuY3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Rf
YnluYW1lPGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9i
eW5hbWU8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFy
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgbW9uZXlfZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8
d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PGNoYXI+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIG51bV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8Y2hh
cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIG51bV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8
d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNoYXI+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgdGltZV9wdXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dl
dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPGNoYXI+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRp
bWVfcHV0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8
d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bWVzc2FnZXM8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFt
ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf
dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBj
b2xsYXRlPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3
Y2hhcl90PjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxj
aGFyPiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVt
cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z
dCBudW1fcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNl
X2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVu
Y3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj
b25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNo
YXIsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0
IG1vbmV5X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBs
b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAg
ICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1l
cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z
dCB0aW1lX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAg
dXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w
bGF0ZQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hh
cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0
PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90
LCBjaGFyLCBtYnN0YXRlX3Q+ID4obG9jYWxlIGNvbnN0Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgY29sbGF0ZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8
d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fcHV0PHdjaGFyX3Q+JgogICAgdXNl
X2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBjb25zdCBudW1fZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25l
eXB1bmN0PHdjaGFyX3QsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwg
dHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25l
eXB1bmN0PHdjaGFyX3QsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3Qs
IGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1v
bmV5X3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8d2NoYXJf
dD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2Vf
ZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1lX3B1
dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0
IHRpbWVfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8d2NoYXJf
dD4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNv
ZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0
PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg
aGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNo
YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz
X2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hh
cj4gPihjb25zdCBsb2NhbGUmKTsKCiBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fcHV0PHdjaGFy
X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz
X2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9w
dXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPHdj
aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cn0KIyA0NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVk
ZS9jKysvMy4yL2xvY2FsZSIgMiAzCiMgMzggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh
aXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoK
ICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2go
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v
c3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhp
cyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9f
aW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz
ZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghX19jb3B5
X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRidWYoKSkpCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikK
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp
KQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMt
PmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwo
bG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
Y2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10
ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlm
ICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9f
bCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAg
ICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZh
aWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs
ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAg
ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNl
OjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYg
aW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAg
IF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFp
bGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0
aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAg
ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgp
LCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRv
dWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2Zu
dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAg
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0
aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpw
dXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19wdXQgPSByZGJ1Zigp
LT5zcHV0YyhfX2MpOwogICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1
dCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3Jp
dGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJl
YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAg
aWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3lu
YygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAg
ICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNl
ZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGlmICghdGhp
cy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5y
ZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYg
KF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19k
KQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBv
c190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl
OjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkK
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJU
IF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19j
ZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsK
ICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp
bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX193ICsgMSkpKTsKICAgICAgICAgICAgICBf
X3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAg
ICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwg
X19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVu
KTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9f
b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQu
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj
aGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9f
Y2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7
CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRp
bl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAg
ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19s
ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFp
dHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsK
ICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lk
dGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25z
dCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9
IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2Fz
dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAg
ICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFp
dHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3Bh
ZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAg
ICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAg
ICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0
LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVm
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAgICAg
dHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUg
X19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYm
IF9fcykKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX190cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQq
PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAg
ICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2NsZW47ICsrX19pKQogICAgICAgICAg
ICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9f
c3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAg
ICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hh
clQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m
KF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19w
YWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAg
ICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVu
KTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9f
b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQu
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAg
IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAg
ICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNo
YXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19j
YXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNp
emUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7
CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmls
bCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19w
YWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53
aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBf
X29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAg
ICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9f
cGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy
VCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJl
YW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9f
b3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgX19z
ID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9CiAgICAg
ICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBfX2xlbik7
CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBfX2xlbikK
ICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz
aWNfb3N0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kbChvc3RyZWFt
Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYpOwogIGV4dGVybiB0
ZW1wbGF0ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJl
YW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFt
JiBvcGVyYXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUg
b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1w
bGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJu
IHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNo
YXIqKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29u
c3Qgc2lnbmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFt
PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOwog
IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kcyh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1w
bGF0ZSB3b3N0cmVhbSYgZmx1c2god29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJl
YW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxhdGUgd29z
dHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgd29z
dHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuIHRl
bXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY2hhciopOwoKfQoj
IDI3NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwojIDcx
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQK
ewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dl
dDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVm
IGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVh
bXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2lj
X2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmlu
aXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAg
ICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3Ry
ZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNl
bnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFt
X3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3Nf
YmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBf
X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYg
X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24p
OwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcg
bG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9h
dCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYg
X19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91Ymxl
JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9f
cCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBn
ZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19j
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5
cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBf
X2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFt
YnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRl
bignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlw
ZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5l
IF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4o
J1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUg
X19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBp
bnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJl
YWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAg
ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7Cgog
ICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2co
b2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl
YW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2Vu
dHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdz
ID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAg
cHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwg
X0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJh
aXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVy
biAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2lu
ID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJh
c2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg
cmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19p
b3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAg
ICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6
CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpv
ZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgog
ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFt
X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwg
X19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNp
Y19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdz
KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzNiAi
L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDMKCgoK
Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNl
bnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3
cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChf
X2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYg
KCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRi
dWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg
ICAgICAgICAgIGlmIChfX2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkKICAgICAg
ICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAg
ICAgICAgICAgICAgICAgICAgICAgJiYgX19pbi5fTV9mY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNw
YWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9fYykpKQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5z
bmV4dGMoKTsKCgoKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f
YywgX19lb2YpKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0
KTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAg
ICAgX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01fb2sgPSBm
YWxzZTsKICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19p
c3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190
eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7
CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv
cGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z
dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq
dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq
dGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl
OjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+Ojpt
aW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0
czxzaG9ydD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
Pj4oaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z
X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlm
IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQt
PmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEo
X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNf
bGltaXRzPGludD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9
IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsK
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6
aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAw
LCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9u
ZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl
Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp
CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N
X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp
b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9N
X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0
KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGZs
b2F0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jh
c2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy
LCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m
bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNl
Ojppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs
IDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy
cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lkKiYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg
ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQogICAgewog
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICAgewogICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9feHRyY3QgPSAwOwogICAgICAgICAgICAgICBpZiAoX19zYm91dCkKICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0
aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1i
dWZzKCp0aGlzLCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVu
YW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAgY29uc3Qg
aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBlIF9fYyA9
IF9fZW9mOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0
cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAg
ICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAg
ICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQogICAgewog
ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg
ICAgICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7Cgog
ICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYnVmdmFsLCBfX2Vv
ZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAg
ICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19idWZ2YWwp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
X19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAg
ICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg
ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAg
aW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2dj
b3VudCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAg
ICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2dj
b3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3Vu
dCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFy
X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9
IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh
bWJ1Zl90eXBlKiBfX3RoaXNfc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90
eXBlIF9fYyA9IF9fdGhpc19zYi0+c2dldGMoKTsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19j
MiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKCiAgICAgICAgICAgICAgd2hpbGUg
KCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAg
ICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQogICAgICAgICAg
ICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2Iuc3B1dGMoX19jMiks
IF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7
CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c25leHRjKCk7CiAgICAgICAgICAg
ICAgICAgIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9f
ZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n
Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVs
aW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp
OwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAg
ICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAg
JiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw
ZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAg
ICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYg
KHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQogICAg
ewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsK
ICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJk
YnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg
ICAgICAgICAgX19uID0gbWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgp
KTsKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uCiAgICAgICAgICAgICAgICAg
ICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAg
ICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0pKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAg
ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2Ug
aWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0pKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAg
KytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGVlayh2b2lkKQogICAgewogICAgICBpbnRfdHlwZSBf
X2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7IF9fYyA9IHRoaXMtPnJkYnVmKCktPnNnZXRjKCk7IH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewog
ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19uKTsKICAg
ICAgICAgICAgICBpZiAoX01fZ2NvdW50ICE9IF9fbikKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBzdHJlYW1zaXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVh
ZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291
bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAg
IGlmIChfX251bSA+IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbnVt
ID0gbWluKF9fbnVtLCBfX24pOwogICAgICAgICAgICAgICAgICBpZiAoX19udW0pCiAgICAgICAg
ICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190
eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+
cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwgdHJh
aXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnNwdXRiYWNrYyhfX2MpLCBfX2VvZikpCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90
eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAg
ICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3VuZ2V0Yygp
LCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIHN5bmModm9pZCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gLTE7CiAgICAgIF9NX2djb3Vu
dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19z
dHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKF9f
c2IpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3NiLT5wdWJzeW5j
KCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JldCA9
IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBw
b3NfdHlwZSgtMSk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYo
MCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlw
ZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7
CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpz
ZWVrZGlyIF9fZGlyKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5y
ZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAg
ICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19pbi5n
ZXQoX19jKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4g
X19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewogICAg
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf
X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl
IGludF90eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
Y3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQg
PSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwg
ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CiAg
ICAgICAgICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVy
aWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAgICAgY29uc3QgX19jdHlw
ZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7
CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAg
ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAg
ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxl
IChfX2V4dHJhY3RlZCA8IF9fbnVtIC0gMQogICAgICAgICAgICAgICAgICAgICAmJiBfX2MgIT0g
X19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAg
KytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAg
ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgoKCiAgICAgICAgICAgICAg
Kl9fcyA9IGNoYXJfdHlwZSgpOwoKICAgICAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9f
ZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg
ICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFz
aWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBf
X2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90
eXBlIF9faW50X3R5cGU7CgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2Vf
ZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgY29uc3QgX19pbnRfdHlw
ZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
X19pbi5yZGJ1ZigpOwogICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg
ICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9f
YykpCiAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgIGlmIChfX2MgPT0gX19lb2Yp
CiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgIHJldHVybiBf
X2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAg
ICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh
bV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBf
X2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVh
bWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3Ry
ZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAg
X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9f
aW4ud2lkdGgoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsKICAgICAgICAgIF9fbiA9IF9f
dyA+IDAgPyBzdGF0aWNfY2FzdDxfX3NpemVfdHlwZT4oX193KSA6IF9fc3RyLm1heF9zaXplKCk7
CgogICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5
cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9m
ID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19p
bi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAg
ICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbgogICAgICAgICAgICAgICAgICYmIF9fYyAh
PSBfX2VvZiAmJiAhX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwog
ICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25l
eHRjKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAg
ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICBfX2luLndpZHRo
KDApOwogICAgICAgIH0KCgogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0
c3RhdGUgKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90
eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICAgIF9fc2l6
ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZhbHNlOwog
ICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAg
ICAgICAgX19zaXplX3R5cGUgX19uID0gX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX2lu
dF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRf
dHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19l
b2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFf
aW50X3R5cGUoX19jLCBfX2lkZWxpbSk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9
IF9fbgogICAgICAgICAgICAgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m
KQogICAgICAgICAgICAgICAgICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg
ICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAg
ICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGlt
KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywg
X19lb2YpKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAg
ICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19p
bi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoK
ICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAg
IGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4s
IF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
YmFzaWNfaXN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVh
bSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFy
Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIq
KTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWdu
ZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0m
LCBzaWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlz
dHJlYW0mLCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJh
dG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyKik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
YmFzaWNfaXN0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIHdzKHdp
c3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFt
Jiwgd2NoYXJfdCYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0
cmVhbSYsIHdjaGFyX3QqKTsKCn0KIyAyOTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9pc3RyZWFtIiAyIDMKIyA3MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2l0ZXJhdG9yIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdHJlYW1faXRlcmF0b3IuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0cmVhbV9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNoYXIsCiAgICAgICAgICAgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sIHR5cGVuYW1lIF9EaXN0ID0gcHRy
ZGlmZl90PgogICAgY2xhc3MgaXN0cmVhbV9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRv
cjxpbnB1dF9pdGVyYXRvcl90YWcsIF9UcCwgX0Rpc3QsIGNvbnN0IF9UcCosIGNvbnN0IF9UcCY+
CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgaXN0cmVh
bV90eXBlKiBfTV9zdHJlYW07CiAgICAgIF9UcCBfTV92YWx1ZTsKICAgICAgYm9vbCBfTV9vazsK
CiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgwKSwgX01f
b2soZmFsc2UpIHt9CgogICAgICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6
IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQoKICAgICAgaXN0cmVhbV9pdGVyYXRvcihj
b25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX29iaikKICAgICAgOiBfTV9zdHJlYW0oX19vYmouX01f
c3RyZWFtKSwgX01fdmFsdWUoX19vYmouX01fdmFsdWUpLAogICAgICAgIF9NX29rKF9fb2JqLl9N
X29rKQogICAgICB7IH0KCiAgICAgIGNvbnN0IF9UcCYKICAgICAgb3BlcmF0b3IqKCkgY29uc3Qg
eyByZXR1cm4gX01fdmFsdWU7IH0KCiAgICAgIGNvbnN0IF9UcCoKICAgICAgb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBpc3RyZWFtX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgeyBfTV9yZWFkKCk7IHJldHVybiAqdGhpczsgfQoK
ICAgICAgaXN0cmVhbV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAg
ICAgIGlzdHJlYW1faXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9yZWFkKCk7CiAg
ICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBib29sCiAgICAgIF9NX2VxdWFsKGNv
bnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QKICAgICAgeyByZXR1cm4gKF9NX29rID09
IF9feC5fTV9vaykgJiYgKCFfTV9vayB8fCBfTV9zdHJlYW0gPT0gX194Ll9NX3N0cmVhbSk7fQoK
ICAgIHByaXZhdGU6CiAgICAgIHZvaWQKICAgICAgX01fcmVhZCgpCiAgICAgIHsKICAgICAgICBf
TV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICAgICAg
aWYgKF9NX29rKQogICAgICAgICAgewogICAgICAgICAgICAqX01fc3RyZWFtID4+IF9NX3ZhbHVl
OwogICAgICAgICAgICBfTV9vayA9ICpfTV9zdHJlYW0gPyB0cnVlIDogZmFsc2U7CiAgICAgICAg
ICB9CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfRGlzdD4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMs
IF9EaXN0PiYgX194LAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwg
X0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9lcXVhbChf
X3kpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0
cywgY2xhc3MgX0Rpc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBpc3Ry
ZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAg
ICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+
JiBfX3kpCiAgICB7IHJldHVybiAhX194Ll9NX2VxdWFsKF9feSk7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NoYXJUID0gY2hhciwKICAgICAgICAgICB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtX2l0ZXJhdG9y
CiAgICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQs
IHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToK
ICAgICAgb3N0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgICAgIGNvbnN0IF9DaGFyVCogX01fc3Ry
aW5nOwoKICAgIHB1YmxpYzoKICAgICAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9f
cykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQoKICAgICAgb3N0cmVhbV9pdGVy
YXRvcihvc3RyZWFtX3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBfX2MpCiAgICAgIDogX01fc3Ry
ZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSB7IH0KCiAgICAgIG9zdHJlYW1faXRlcmF0b3IoY29u
c3Qgb3N0cmVhbV9pdGVyYXRvciYgX19vYmopCiAgICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0
cmVhbSksIF9NX3N0cmluZyhfX29iai5fTV9zdHJpbmcpIHsgfQoKICAgICAgb3N0cmVhbV9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkKICAgICAgewogICAgICAg
ICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgICAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFt
IDw8IF9NX3N0cmluZzsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIG9zdHJl
YW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBv
c3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAg
ICAgIG9zdHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp
czsgfQogICAgfTsKfQojIDczICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRl
cmF0b3IiIDIgMwojIDQ5ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5o
IiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xpc3QiIDEgMwojIDY1
ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGlzdCIgMwoKIyAxICIvdXNyL2xv
Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAi
L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5o
IiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw
dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v
Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY3ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGlzdCIgMiAzCgoKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDY2ICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbGlzdC5oIiAzCm5hbWVz
cGFjZSBzdGQKewoKICBzdHJ1Y3QgX0xpc3Rfbm9kZV9iYXNlCiAgewogICAgX0xpc3Rfbm9kZV9i
YXNlKiBfTV9uZXh0OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9wcmV2OwogIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfTGlzdF9ub2RlIDogcHVibGljIF9MaXN0X25v
ZGVfYmFzZQogICAgewogICAgICBfVHAgX01fZGF0YTsKICAgIH07CgogIHN0cnVjdCBfTGlzdF9p
dGVyYXRvcl9iYXNlCiAgewogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25v
ZGU7CgogICAgX0xpc3RfaXRlcmF0b3JfYmFzZShfTGlzdF9ub2RlX2Jhc2UqIF9feCkKICAgIDog
X01fbm9kZShfX3gpCiAgICB7IH0KCiAgICBfTGlzdF9pdGVyYXRvcl9iYXNlKCkKICAgIHsgfQoK
ICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsg
fQoKICAgIHZvaWQKICAgIF9NX2RlY3IoKQogICAgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fcHJl
djsgfQoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYg
X194KSBjb25zdAogICAgeyByZXR1cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsgfQoKICAgIGJv
b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdAog
ICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQogIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIHN0cnVjdCBfTGlz
dF9pdGVyYXRvciA6IHB1YmxpYyBfTGlzdF9pdGVyYXRvcl9iYXNlCiAgICB7CiAgICAgIHR5cGVk
ZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYg
X0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7
CiAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9SZWYsX1B0cj4gX1NlbGY7CgogICAg
ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICAg
ICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4g
X05vZGU7CgogICAgICBfTGlzdF9pdGVyYXRvcihfTm9kZSogX194KQogICAgICA6IF9MaXN0X2l0
ZXJhdG9yX2Jhc2UoX194KQogICAgICB7IH0KCiAgICAgIF9MaXN0X2l0ZXJhdG9yKCkKICAgICAg
eyB9CgogICAgICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KQogICAgICA6IF9M
aXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpCiAgICAgIHsgfQoKICAgICAgcmVmZXJlbmNl
CiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICgoX05vZGUqKSBfTV9ub2Rl
KS0+X01fZGF0YTsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QKICAg
ICAgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRv
cisrKCkKICAgICAgewogICAgICAgIHRoaXMtPl9NX2luY3IoKTsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAg
ICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICAg
ICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgp
CiAgICAgIHsKICAgICAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvci0tKGludCkKICAgICAgewogICAgICAg
IF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgdGhpcy0+X01fZGVjcigpOwogICAgICAgIHJl
dHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKIyAxODUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5
cGVuYW1lIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgogICAgY2xhc3MgX0xpc3RfYWxsb2Nf
YmFzZQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgICBhbGxvY2F0
b3JfdHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25z
dAogICAgICB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3I7IH0KCiAgICAgIF9MaXN0X2FsbG9jX2Jh
c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfTm9kZV9hbGxvY2F0b3IoX19h
KQogICAgICB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9MaXN0X25vZGU8X1RwPioKICAgICAg
X01fZ2V0X25vZGUoKQogICAgICB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7
IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAg
ICAgIHsgX05vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKICAgIHByb3RlY3Rl
ZDoKICAgICAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgICAgICBfTm9kZV9hbGxvY2F0b3I7CgogICAg
ICBfTGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIGNsYXNzIF9MaXN0X2FsbG9jX2Jhc2U8X1Rw
LCBfQWxsb2NhdG9yLCB0cnVlPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9h
bGxvY2F0b3IoKSBjb25zdAogICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogICAg
ICBfTGlzdF9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgICAgeyB9CgogICAg
cHJvdGVjdGVkOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0xpc3Rfbm9k
ZTxfVHA+LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgICAgICBfQWxsb2NfdHlw
ZTsKCiAgICAgIF9MaXN0X25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKQogICAgICB7IHJl
dHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0
X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2Nh
dGUoX19wLCAxKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9u
b2RlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBjbGFzcyBfTGlzdF9iYXNlCiAgICAgIDogcHVibGljIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBf
QWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAg
ICAgICAgICBfQmFzZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5
cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl
JiBfX2EpCiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7CiAgICAgICAgX01fbm9kZSA9IF9NX2dl
dF9ub2RlKCk7CiAgICAgICAgX01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgICAgICAgX01f
bm9kZS0+X01fcHJldiA9IF9NX25vZGU7CiAgICAgIH0KCiAgICAgIH5fTGlzdF9iYXNlKCkKICAg
ICAgewogICAgICAgIGNsZWFyKCk7CiAgICAgICAgX01fcHV0X25vZGUoX01fbm9kZSk7CiAgICAg
IH0KCiAgICAgIHZvaWQgY2xlYXIoKTsKICAgIH07CiMgMjg5ICIvdXNyL2xvY2FsL2djYzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CiAgICBjbGFzcyBsaXN0IDogcHJv
dGVjdGVkIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+CiAgICB7CgogICAgIAoKICAgICAgdHlwZWRl
ZiBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICAgIHByb3RlY3RlZDoKICAgICAgdHlw
ZWRlZiB2b2lkKiBfVm9pZF9wb2ludGVyOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBl
ZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdmFsdWVf
dHlwZSYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3Jl
ZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CiAgICAgIHR5cGVk
ZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2Nh
dG9yX3R5cGU7CgogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0
ZXJhdG9yOwogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0
IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv
bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJvdGVjdGVkOgog
ICAgICB1c2luZyBfQmFzZTo6X01fbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2Rl
OwogICAgICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CgogICAgcHJvdGVjdGVkOgogICAgICBf
Tm9kZSoKICAgICAgX01fY3JlYXRlX25vZGUoY29uc3QgX1RwJiBfX3gpCiAgICAgIHsKICAgICAg
ICBfTm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkgewogICAgICAgICAgX0Nv
bnN0cnVjdCgmX19wLT5fTV9kYXRhLCBfX3gpOwogICAgICAgIH0KICAgICAgICBjYXRjaCguLi4p
CiAgICAgICAgewogICAgICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAgICAgIHRocm93Owog
ICAgICAgIH0KICAgICAgICByZXR1cm4gX19wOwogICAgICB9CgogICAgICBfTm9kZSoKICAgICAg
X01fY3JlYXRlX25vZGUoKQogICAgICB7CiAgICAgICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2Rl
KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSk7CiAg
ICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfTV9wdXRfbm9k
ZShfX3ApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX3A7CiAg
ICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0
b3IoKSBjb25zdAogICAgICB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogICAg
ICBleHBsaWNpdAogICAgICBsaXN0KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgICA6IF9CYXNlKF9fYSkKICAgICAgeyB9CgogICAgICBpdGVyYXRvcgog
ICAgICBiZWdpbigpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZS0+
X01fbmV4dCk7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlLT5fTV9uZXh0KTsgfQoKICAg
ICAgaXRlcmF0b3IKICAgICAgZW5kKCkKICAgICAgeyByZXR1cm4gX01fbm9kZTsgfQoKICAgICAg
Y29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbm9kZTsg
fQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiBy
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KGVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX25vZGUtPl9NX25leHQgPT0gX01fbm9kZTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIHNpemUoKSBjb25zdAogICAgICB7IHJldHVybiBkaXN0YW5jZShiZWdpbigpLCBlbmQo
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBmcm9udCgpCiAgICAg
IHsgcmV0dXJuICpiZWdpbigpOyB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgZnJvbnQo
KSBjb25zdAogICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAg
IGJhY2soKQogICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICBjb25zdF9yZWZlcmVu
Y2UKICAgICAgYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAgICAg
IHZvaWQKICAgICAgc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgICB7IHN0ZDo6c3dh
cChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKICAgICAgewogICAgICAgIF9Ob2Rl
KiBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feCk7CiAgICAgICAgX190bXAtPl9NX25leHQgPSBf
X3Bvc2l0aW9uLl9NX25vZGU7CiAgICAgICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9uLl9N
X25vZGUtPl9NX3ByZXY7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9u
ZXh0ID0gX190bXA7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7
CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNl
cnQoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24s
IF9UcCgpKTsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICAgIHZv
aWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkKICAgICAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f
cG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9feCk7IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19mYWxzZV90eXBlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh
dG9yPgogICAgICAgIHZvaWQKICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7CiAgICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs
IF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQo
aXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgICB7IF9N
X2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fZmls
bF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsK
CiAgICAgIHZvaWQKICAgICAgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkKICAgICAgeyBpbnNl
cnQoYmVnaW4oKSwgX194KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2Zyb250KCkKICAgICAg
eyBpbnNlcnQoYmVnaW4oKSk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKGNvbnN0IF9U
cCYgX194KQogICAgICB7IGluc2VydChlbmQoKSwgX194KTsgfQoKICAgICAgdm9pZAogICAgICBw
dXNoX2JhY2soKQogICAgICB7IGluc2VydChlbmQoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAg
IGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBfTGlzdF9ub2RlX2Jh
c2UqIF9fbmV4dF9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0OwogICAgICAgIF9M
aXN0X25vZGVfYmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7
CiAgICAgICAgX05vZGUqIF9fbiA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19wb3NpdGlvbi5fTV9u
b2RlKTsKICAgICAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9ub2RlOwogICAgICAg
IF9fbmV4dF9ub2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICAgICAgX0Rlc3Ryb3koJl9f
bi0+X01fZGF0YSk7CiAgICAgICAgX01fcHV0X25vZGUoX19uKTsKICAgICAgICByZXR1cm4gaXRl
cmF0b3Ioc3RhdGljX2Nhc3Q8X05vZGUqPihfX25leHRfbm9kZSkpOwogICAgICB9CgogICAgICBp
dGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwoK
ICAgICAgdm9pZAogICAgICBjbGVhcigpCiAgICAgIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgICAg
IHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCk7
CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkKICAgICAgeyB0
aGlzLT5yZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHBvcF9m
cm9udCgpCiAgICAgIHsgZXJhc2UoYmVnaW4oKSk7IH0KCiAgICAgIHZvaWQKICAgICAgcG9wX2Jh
Y2soKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX190bXAgPSBlbmQoKTsKICAgICAgICBlcmFz
ZSgtLV9fdG1wKTsKICAgICAgfQoKICAgICAgbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAm
IF9fdmFsdWUsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7IGluc2VydChiZWdpbigpLCBfX24s
IF9fdmFsdWUpOyB9CgogICAgICBleHBsaWNpdAogICAgICBsaXN0KHNpemVfdHlwZSBfX24pCiAg
ICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19u
LCBfVHAoKSk7IH0KCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAg
ICAgIGxpc3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog
ICAgICA6IF9CYXNlKF9fYSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0
KTsgfQoKICAgICAgbGlzdChjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgICA6IF9C
YXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feC5iZWdp
bigpLCBfX3guZW5kKCkpOyB9CgogICAgICB+bGlzdCgpCiAgICAgIHsgfQoKICAgICAgbGlzdDxf
VHAsIF9BbGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194
KTsKCiAgICBwdWJsaWM6CgoKCgoKICAgICAgdm9pZAogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9f
biwgY29uc3QgX1RwJiBfX3ZhbCkKICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsg
fQoKICAgICAgdm9pZAogICAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBf
VHAmIF9fdmFsKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAg
ICAgIHZvaWQKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu
dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgX01f
YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICAgIH0K
CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICAgIHZvaWQKICAgICAgICBf
TV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5
cGUpCiAgICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs
KTsgfQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9p
ZAogICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlw
ZSk7CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkCiAgICAgIF9NX3RyYW5zZmVyKGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewog
ICAgICAgIGlmIChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewoKICAgICAgICAgIF9fbGFzdC5fTV9u
b2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgICAgICAgX19m
aXJzdC5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgICAg
ICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7
CgoKICAgICAgICAgIF9MaXN0X25vZGVfYmFzZSogX190bXAgPSBfX3Bvc2l0aW9uLl9NX25vZGUt
Pl9NX3ByZXY7CiAgICAgICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3Qu
X01fbm9kZS0+X01fcHJldjsKICAgICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX19m
aXJzdC5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2
ID0gX190bXA7CiAgICAgICAgfQogICAgICB9CgogICAgcHVibGljOgogICAgICB2b2lkCiAgICAg
IHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpCiAgICAgIHsKICAgICAgICBp
ZiAoIV9feC5lbXB0eSgpKQogICAgICAgICAgdGhpcy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwg
X194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3BsaWNl
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2kpCiAgICAgIHsKICAgICAg
ICBpdGVyYXRvciBfX2ogPSBfX2k7CiAgICAgICAgKytfX2o7CiAgICAgICAgaWYgKF9fcG9zaXRp
b24gPT0gX19pIHx8IF9fcG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICAgICAgdGhpcy0+X01f
dHJhbnNmZXIoX19wb3NpdGlvbiwgX19pLCBfX2opOwogICAgICB9CgogICAgICB2b2lkCiAgICAg
IHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRl
cmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAg
ICAgICAgdGhpcy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0KTsKICAg
ICAgfQoKICAgICAgdm9pZAogICAgICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKTsKCiAgICAg
IHZvaWQKICAgICAgdW5pcXVlKCk7CgogICAgICB2b2lkCiAgICAgIG1lcmdlKGxpc3QmIF9feCk7
CgogICAgICB2b2lkCiAgICAgIHJldmVyc2UoKTsKCiAgICAgIHZvaWQKICAgICAgc29ydCgpOwoK
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgICB2b2lkCiAgICAgICAg
cmVtb3ZlX2lmKF9QcmVkaWNhdGUpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpbmFyeVBy
ZWRpY2F0ZT4KICAgICAgICB2b2lkCiAgICAgICAgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUpOwoK
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgICB2b2lk
CiAgICAgICAgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwoKICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgICB2b2lkCiAgICAgICAgc29y
dChfU3RyaWN0V2Vha09yZGVyaW5nKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbGlz
dDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29u
c3RfaXRlcmF0b3I7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICAg
ICAgY29uc3RfaXRlcmF0b3IgX19lbmQyID0gX195LmVuZCgpOwoKICAgICAgY29uc3RfaXRlcmF0
b3IgX19pMSA9IF9feC5iZWdpbigpOwogICAgICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJl
Z2luKCk7CiAgICAgIHdoaWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAq
X19pMSA9PSAqX19pMikgewogICAgICAgICsrX19pMTsKICAgICAgICArK19faTI7CiAgICAgIH0K
ICAgICAgcmV0dXJuIF9faTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxf
QWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShf
X3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg
bGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7
IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCxf
QWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9f
eSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwg
Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0
PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dh
cChsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBsaXN0PF9UcCwgX0FsbG9jPiYgX195KQogICAgeyBf
X3guc3dhcChfX3kpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB2b2lkIF9MaXN0X2Jhc2U8X1RwLF9BbGxvYz46OgogICAgY2xlYXIoKQogICAgewog
ICAgICBfTGlzdF9ub2RlPF9UcD4qIF9fY3VyID0gc3RhdGljX2Nhc3Q8X0xpc3Rfbm9kZTxfVHA+
Kj4oX01fbm9kZS0+X01fbmV4dCk7CiAgICAgIHdoaWxlIChfX2N1ciAhPSBfTV9ub2RlKSB7CiAg
ICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBfX3RtcCA9IF9fY3VyOwogICAgICAgIF9fY3VyID0gc3Rh
dGljX2Nhc3Q8X0xpc3Rfbm9kZTxfVHA+Kj4oX19jdXItPl9NX25leHQpOwogICAgICAgIF9EZXN0
cm95KCZfX3RtcC0+X01fZGF0YSk7CiAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAgICB9
CiAgICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgICBfTV9ub2RlLT5fTV9wcmV2
ID0gX01fbm9kZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZCBsaXN0PF9U
cCwgX0FsbG9jPjo6CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAg
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAgIGluc2VydChf
X3Bvc2l0aW9uLCAqX19maXJzdCk7CgogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBfTV9maWxs
X2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f
eCkKICAgIHsKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgICAgICBpbnNlcnQoX19w
b3NpdGlvbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVyYXRvciBsaXN0PF9UcCwg
X0FsbG9jPjo6CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAg
ICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBlcmFzZShfX2ZpcnN0
KyspOwogICAgICByZXR1cm4gX19sYXN0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgcmVzaXpl
KHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgaXRlcmF0
b3IgX19pID0gYmVnaW4oKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgICAgZm9yICgg
OyBfX2kgIT0gZW5kKCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAg
ICAgICA7CiAgICAgIGlmIChfX2xlbiA9PSBfX25ld19zaXplKQogICAgICAgIGVyYXNlKF9faSwg
ZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gX19s
ZW4sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j
PgogICAgbGlzdDxfVHAsIF9BbGxvYz4mIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIG9wZXJhdG9y
PShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgewogICAgICBpZiAodGhpcyAhPSAm
X194KSB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJh
dG9yIF9fbGFzdDEgPSBlbmQoKTsKICAgICAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9f
eC5iZWdpbigpOwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAg
ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK
ICAgICAgICAgICpfX2ZpcnN0MSsrID0gKl9fZmlyc3QyKys7CiAgICAgICAgaWYgKF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICAgICAg
ZWxzZQogICAgICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fz
c2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICAgIGl0ZXJhdG9yIF9f
aSA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbiA+IDA7ICsrX19p
LCAtLV9fbikKICAgICAgICAqX19pID0gX192YWw7CiAgICAgIGlmIChfX24gPiAwKQogICAgICAg
IGluc2VydChlbmQoKSwgX19uLCBfX3ZhbCk7CiAgICAgIGVsc2UKICAgICAgICBlcmFzZShfX2ks
IGVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZCBsaXN0PF9UcCwg
X0FsbG9jPjo6CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyIF9fbGFzdDIsIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIGl0ZXJhdG9y
IF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAg
ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7
ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgICAqX19maXJzdDEgPSAqX19maXJzdDI7
CiAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0
MSwgX19sYXN0MSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmly
c3QyLCBfX2xhc3QyKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgcmVtb3ZlKGNvbnN0IF9U
cCYgX192YWx1ZSkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAg
IGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICsrX19uZXh0Owog
ICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0KTsKICAgICAgICBf
X2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICB1bmlxdWUo
KQogICAgewogICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3Ig
X19sYXN0ID0gZW5kKCk7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAg
ICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19s
YXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICBlcmFzZShf
X25leHQpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgICAg
X19uZXh0ID0gX19maXJzdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgbWVyZ2Uo
bGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBi
ZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgIGl0ZXJhdG9yIF9f
Zmlyc3QyID0gX194LmJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7
CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgaXRlcmF0b3Ig
X19uZXh0ID0gX19maXJzdDI7CiAgICAgICAgICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJz
dDIsICsrX19uZXh0KTsKICAgICAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgICAgIH0KICAg
ICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICBpZiAoX19maXJzdDIgIT0gX19s
YXN0MikgX01fdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgfQoKICBp
bmxpbmUgdm9pZAogIF9fTGlzdF9iYXNlX3JldmVyc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3ApCiAg
ewogICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9IF9fcDsKICAgIGRvIHsKICAgICAgc3RkOjpz
d2FwKF9fdG1wLT5fTV9uZXh0LCBfX3RtcC0+X01fcHJldik7CiAgICAgIF9fdG1wID0gX190bXAt
Pl9NX3ByZXY7CiAgICB9IHdoaWxlIChfX3RtcCAhPSBfX3ApOwogIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIHZvaWQgbGlzdDxfVHAsIF9BbGxv
Yz46OgogIHJldmVyc2UoKQogIHsgX19MaXN0X2Jhc2VfcmV2ZXJzZSh0aGlzLT5fTV9ub2RlKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlz
dDxfVHAsIF9BbGxvYz46OgogICAgc29ydCgpCiAgICB7CgogICAgICBpZiAoX01fbm9kZS0+X01f
bmV4dCAhPSBfTV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkg
ewogICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY2Fycnk7CiAgICAgICAgbGlzdDxfVHAsIF9B
bGxvYz4gX19jb3VudGVyWzY0XTsKICAgICAgICBpbnQgX19maWxsID0gMDsKICAgICAgICB3aGls
ZSAoIWVtcHR5KCkpIHsKICAgICAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwg
KnRoaXMsIGJlZ2luKCkpOwogICAgICAgICAgaW50IF9faSA9IDA7CiAgICAgICAgICB3aGlsZShf
X2kgPCBfX2ZpbGwgJiYgIV9fY291bnRlcltfX2ldLmVtcHR5KCkpIHsKICAgICAgICAgICAgX19j
b3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSk7CiAgICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2Nv
dW50ZXJbX19pKytdKTsKICAgICAgICAgIH0KICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50
ZXJbX19pXSk7CiAgICAgICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICAgICAg
fQoKICAgICAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICAg
ICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSk7CiAgICAgICAgc3dhcChf
X2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfUHJlZGljYXRlPgog
ICAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUg
X19wcmVkKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAg
ICAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICAgKytf
X25leHQ7CiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgZXJhc2UoX19maXJzdCk7CiAg
ICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgIH0KICAgICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfQmlu
YXJ5UHJlZGljYXRlPgogICAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgICAgdW5pcXVl
KF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgICAgewogICAgICAgIGl0ZXJhdG9y
IF9fZmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICAgIGl0ZXJhdG9yIF9fbmV4
dCA9IF9fZmlyc3Q7CiAgICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAg
ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgICBlcmFz
ZShfX25leHQpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0Owog
ICAgICAgICAgX19uZXh0ID0gX19maXJzdDsKICAgICAgICB9CiAgICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1N0
cmljdFdlYWtPcmRlcmluZz4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIG1l
cmdlKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQog
ICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJh
dG9yIF9fbGFzdDEgPSBlbmQoKTsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdp
bigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgICAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAgIGl0ZXJhdG9yIF9f
bmV4dCA9IF9fZmlyc3QyOwogICAgICAgICAgICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJz
dDIsICsrX19uZXh0KTsKICAgICAgICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICAgICAgICB9
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmly
c3QyICE9IF9fbGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsK
ICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgogICAgdm9pZCBsaXN0PF9UcCwg
X0FsbG9jPjo6CiAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQogICAgewoKICAg
ICAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0LT5f
TV9uZXh0ICE9IF9NX25vZGUpIHsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5Owog
ICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICAgICAgaW50IF9fZmls
bCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgICAgICBfX2NhcnJ5LnNwbGlj
ZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgICAgIGludCBfX2kgPSAw
OwogICAgICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgp
KSB7CiAgICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29tcCk7CiAg
ICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pKytdKTsKICAgICAgICAgIH0KICAg
ICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgICAgICBpZiAoX19pID09
IF9fZmlsbCkgKytfX2ZpbGw7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBfX2kgPSAxOyBf
X2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3Vu
dGVyW19faS0xXSwgX19jb21wKTsKICAgICAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwog
ICAgICB9CiAgICB9Cgp9CiMgNzIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9s
aXN0IiAyIDMKIyA1MCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIg
MgojIDU4ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdE5vZGUKewpwdWJsaWM6CiAgICBRVmFsdWVMaXN0
Tm9kZSggY29uc3QgVCYgdCApIDogZGF0YSggdCApIHsgfQogICAgUVZhbHVlTGlzdE5vZGUoKSB7
IH0KCgoKCgogICAgUVZhbHVlTGlzdE5vZGU8VD4qIG5leHQ7CiAgICBRVmFsdWVMaXN0Tm9kZTxU
PiogcHJldjsKICAgIFQgZGF0YTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxp
c3RJdGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBO
b2RlUHRyOwoKICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsKCiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgc2l6
ZV90IHNpemVfdHlwZTsKCiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoK
CiAgICB0eXBlZGVmIFQqIHBvaW50ZXI7CiAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKCgoKCiAg
ICBOb2RlUHRyIG5vZGU7CgoKCgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yKCkgOiBub2RlKCAwICkg
e30KICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggTm9kZVB0ciBwICkgOiBub2RlKCBwICkge30KICAg
IFFWYWx1ZUxpc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIDog
bm9kZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVMaXN0
SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBi
b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7
IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIFQmIG9wZXJhdG9yKigpIHsgcmV0dXJuIG5vZGUt
PmRhdGE7IH0KCgoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAg
ICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAg
UVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlz
dEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAg
ICAgIHJldHVybiB0bXA7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBvcGVyYXRv
ci0tKCkgewogICAgICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAg
ICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUt
PnByZXY7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgIH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8
VD4mIG9wZXJhdG9yKz0oIGludCBqICkgewogICAgICAgIHdoaWxlICggai0tICkKICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFW
YWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3ItPSggaW50IGogKSB7CiAgICAgICAgd2hpbGUg
KCBqLS0gKQogICAgICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICB9Cgp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdENvbnN0SXRl
cmF0b3IKewogcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0
cjsKCiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAg
dHlwZWRlZiBjb25zdCBUKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7
CgoKCgogICAgTm9kZVB0ciBub2RlOwoKCgoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCkg
OiBub2RlKCAwICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBOb2RlUHRyIHAgKSA6
IG5vZGUoIHAgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoIGNvbnN0IFFWYWx1ZUxp
c3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9kZSggaXQubm9kZSApIHt9CiAgICBRVmFsdWVM
aXN0Q29uc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9k
ZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0KICAg
IGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIGl0ICkg
Y29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5ub2RlOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gb3Bl
cmF0b3IrKyhpbnQpIHsKICAgICAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiB0bXAgPSAq
dGhpczsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gdG1wOwogICAg
fQoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0tKCkgewogICAgICAg
IG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBvcGVyYXRvci0tKGludCkgewogICAgICAgIFFWYWx1ZUxp
c3RDb25zdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5wcmV2
OwogICAgICAgIHJldHVybiB0bXA7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3Mg
UVZhbHVlTGlzdFByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZAp7CnB1YmxpYzoKCgoKICAgIHR5cGVk
ZWYgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxUPiBDb25zdEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9k
ZTxUPiBOb2RlOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0cjsKICAgIHR5
cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKCgoKCiAgICBRVmFsdWVMaXN0UHJpdmF0ZSgpOwogICAg
UVZhbHVlTGlzdFByaXZhdGUoIGNvbnN0IFFWYWx1ZUxpc3RQcml2YXRlPFQ+JiBfcCApOwoKICAg
IHZvaWQgZGVyZWZBbmREZWxldGUoKQogICAgewogICAgICAgIGlmICggZGVyZWYoKSApCiAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzOwogICAgfQoKCgoKCiAgICB+UVZhbHVlTGlzdFByaXZhdGUoKTsK
CiAgICBJdGVyYXRvciBpbnNlcnQoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICk7CiAgICBJdGVy
YXRvciByZW1vdmUoIEl0ZXJhdG9yIGl0ICk7CiAgICBOb2RlUHRyIGZpbmQoIE5vZGVQdHIgc3Rh
cnQsIGNvbnN0IFQmIHggKSBjb25zdDsKICAgIGludCBmaW5kSW5kZXgoIE5vZGVQdHIgc3RhcnQs
IGNvbnN0IFQmIHggKSBjb25zdDsKICAgIHVpbnQgY29udGFpbnMoIGNvbnN0IFQmIHggKSBjb25z
dDsKICAgIHVpbnQgcmVtb3ZlKCBjb25zdCBUJiB4ICk7CiAgICBOb2RlUHRyIGF0KCBzaXplX3R5
cGUgaSApIGNvbnN0OwogICAgdm9pZCBjbGVhcigpOwoKICAgIE5vZGVQdHIgbm9kZTsKICAgIHNp
emVfdHlwZSBub2RlczsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgogUVZhbHVlTGlzdFByaXZhdGU8
VD46OlFWYWx1ZUxpc3RQcml2YXRlKCkKewogICAgbm9kZSA9IG5ldyBOb2RlOyBub2RlLT5uZXh0
ID0gbm9kZS0+cHJldiA9IG5vZGU7IG5vZGVzID0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBR
VmFsdWVMaXN0UHJpdmF0ZTxUPjo6UVZhbHVlTGlzdFByaXZhdGUoIGNvbnN0IFFWYWx1ZUxpc3RQ
cml2YXRlPFQ+JiBfcCApCiAgICA6IFFTaGFyZWQoKQp7CiAgICBub2RlID0gbmV3IE5vZGU7IG5v
ZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsgbm9kZXMgPSAwOwogICAgSXRlcmF0b3IgYigg
X3Aubm9kZS0+bmV4dCApOwogICAgSXRlcmF0b3IgZSggX3Aubm9kZSApOwogICAgSXRlcmF0b3Ig
aSggbm9kZSApOwogICAgd2hpbGUoIGIgIT0gZSApCiAgICAgICAgaW5zZXJ0KCBpLCAqYisrICk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogUVZhbHVlTGlzdFByaXZhdGU8VD46On5RVmFsdWVMaXN0
UHJpdmF0ZSgpIHsKICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICB3aGlsZSggcCAhPSBu
b2RlICkgewogICAgICAgIE5vZGVQdHIgeCA9IHAtPm5leHQ7CiAgICAgICAgZGVsZXRlIHA7CiAg
ICAgICAgcCA9IHg7CiAgICB9CiAgICBkZWxldGUgbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+
CiB0eXBlbmFtZSBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6SXRlcmF0b3IgUVZhbHVlTGlzdFByaXZh
dGU8VD46Omluc2VydCggdHlwZW5hbWUgUVZhbHVlTGlzdFByaXZhdGU8VD46Okl0ZXJhdG9yIGl0
LCBjb25zdCBUJiB4ICkKewogICAgTm9kZVB0ciBwID0gbmV3IE5vZGUoIHggKTsKICAgIHAtPm5l
eHQgPSBpdC5ub2RlOwogICAgcC0+cHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICBpdC5ub2RlLT5w
cmV2LT5uZXh0ID0gcDsKICAgIGl0Lm5vZGUtPnByZXYgPSBwOwogICAgbm9kZXMrKzsKICAgIHJl
dHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRl
PFQ+OjpJdGVyYXRvciBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6cmVtb3ZlKCB0eXBlbmFtZSBRVmFs
dWVMaXN0UHJpdmF0ZTxUPjo6SXRlcmF0b3IgaXQgKQp7CiAgICAoKGl0Lm5vZGUgIT0gbm9kZSkg
PyAodm9pZCkwIDogcVdhcm5pbmcoIkFTU0VSVDogXCIlc1wiIGluICVzICglZCkiLCJpdC5ub2Rl
ICE9IG5vZGUiLCIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIiwzMDEp
KTsKICAgIE5vZGVQdHIgbmV4dCA9IGl0Lm5vZGUtPm5leHQ7CiAgICBOb2RlUHRyIHByZXYgPSBp
dC5ub2RlLT5wcmV2OwogICAgcHJldi0+bmV4dCA9IG5leHQ7CiAgICBuZXh0LT5wcmV2ID0gcHJl
djsKICAgIGRlbGV0ZSBpdC5ub2RlOwogICAgbm9kZXMtLTsKICAgIHJldHVybiBJdGVyYXRvcigg
bmV4dCApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRl
PFQ+OjpOb2RlUHRyIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpmaW5kKCB0eXBlbmFtZSBRVmFsdWVM
aXN0UHJpdmF0ZTxUPjo6Tm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0CnsKICAgIENv
bnN0SXRlcmF0b3IgZmlyc3QoIHN0YXJ0ICk7CiAgICBDb25zdEl0ZXJhdG9yIGxhc3QoIG5vZGUg
KTsKICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgaWYgKCAqZmlyc3QgPT0geCAp
CiAgICAgICAgICAgIHJldHVybiBmaXJzdC5ub2RlOwogICAgICAgICsrZmlyc3Q7CiAgICB9CiAg
ICByZXR1cm4gbGFzdC5ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIGludCBRVmFsdWVMaXN0
UHJpdmF0ZTxUPjo6ZmluZEluZGV4KCB0eXBlbmFtZSBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Tm9k
ZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0CnsKICAgIENvbnN0SXRlcmF0b3IgZmlyc3Qo
IHN0YXJ0ICk7CiAgICBDb25zdEl0ZXJhdG9yIGxhc3QoIG5vZGUgKTsKICAgIGludCBwb3MgPSAw
OwogICAgd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkK
ICAgICAgICAgICAgcmV0dXJuIHBvczsKICAgICAgICArK2ZpcnN0OwogICAgICAgICsrcG9zOwog
ICAgfQogICAgcmV0dXJuIC0xOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHVpbnQgUVZhbHVlTGlz
dFByaXZhdGU8VD46OmNvbnRhaW5zKCBjb25zdCBUJiB4ICkgY29uc3QKewogICAgdWludCByZXN1
bHQgPSAwOwogICAgSXRlcmF0b3IgZmlyc3QgPSBJdGVyYXRvciggbm9kZS0+bmV4dCApOwogICAg
SXRlcmF0b3IgbGFzdCA9IEl0ZXJhdG9yKCBub2RlICk7CiAgICB3aGlsZSggZmlyc3QgIT0gbGFz
dCkgewogICAgICAgIGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICArK3Jlc3VsdDsKICAg
ICAgICArK2ZpcnN0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IFQ+CiB1aW50IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpyZW1vdmUoIGNvbnN0IFQmIHggKQp7CiAg
ICB1aW50IHJlc3VsdCA9IDA7CiAgICBJdGVyYXRvciBmaXJzdCA9IEl0ZXJhdG9yKCBub2RlLT5u
ZXh0ICk7CiAgICBJdGVyYXRvciBsYXN0ID0gSXRlcmF0b3IoIG5vZGUgKTsKICAgIHdoaWxlKCBm
aXJzdCAhPSBsYXN0KSB7CiAgICAgICAgaWYgKCAqZmlyc3QgPT0geCApIHsKICAgICAgICAgICAg
Zmlyc3QgPSByZW1vdmUoIGZpcnN0ICk7CiAgICAgICAgICAgICsrcmVzdWx0OwogICAgICAgIH0g
ZWxzZQogICAgICAgICAgICArK2ZpcnN0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIFQ+CiB0eXBlbmFtZSBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Tm9kZVB0ciBR
VmFsdWVMaXN0UHJpdmF0ZTxUPjo6YXQoIHNpemVfdHlwZSBpICkgY29uc3QKewogICAgKChpIDw9
IG5vZGVzKSA/ICh2b2lkKTAgOiBxV2FybmluZygiQVNTRVJUOiBcIiVzXCIgaW4gJXMgKCVkKSIs
ImkgPD0gbm9kZXMiLCIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIiwz
NzIpKTsKICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICBmb3IoIHNpemVfdHlwZSB4ID0g
MDsgeCA8IGk7ICsreCApCiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICByZXR1cm4gcDsKfQoKdGVt
cGxhdGUgPGNsYXNzIFQ+CiB2b2lkIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpjbGVhcigpCnsKICAg
IG5vZGVzID0gMDsKICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICB3aGlsZSggcCAhPSBu
b2RlICkgewogICAgICAgIE5vZGVQdHIgbmV4dCA9IHAtPm5leHQ7CiAgICAgICAgZGVsZXRlIHA7
CiAgICAgICAgcCA9IG5leHQ7CiAgICB9CiAgICBub2RlLT5uZXh0ID0gbm9kZS0+cHJldiA9IG5v
ZGU7Cn0KIyA0MDUgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmFsdWVsaXN0LmgiCnRl
bXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBRRGVlcENvcHk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xh
c3MgUVZhbHVlTGlzdAp7CnB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUVZhbHVlTGlzdEl0ZXJhdG9y
PFQ+IGl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBjb25z
dF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiB2YWx1ZV90
eXBlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVy
OwogICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGNvbnN0IHZh
bHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoKCgoKCgogICAgUVZhbHVl
TGlzdCgpIHsgc2ggPSBuZXcgUVZhbHVlTGlzdFByaXZhdGU8VD47IH0KICAgIFFWYWx1ZUxpc3Qo
IGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSB7IHNoID0gbC5zaDsgc2gtPnJlZigpOyB9CgoKCgoK
ICAgIFFWYWx1ZUxpc3QoIGNvbnN0IHR5cGVuYW1lIHN0ZDo6bGlzdDxUPiYgbCApCiAgICB7CiAg
ICAgICAgc2ggPSBuZXcgUVZhbHVlTGlzdFByaXZhdGU8VD47CiAgICAgICAgcUNvcHkoIGwuYmVn
aW4oKSwgbC5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKCAqdGhpcyApICk7CiAgICB9CgogICAg
flFWYWx1ZUxpc3QoKSB7IHNoLT5kZXJlZkFuZERlbGV0ZSgpOyB9CgogICAgUVZhbHVlTGlzdDxU
PiYgb3BlcmF0b3I9ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCiAgICB7CiAgICAgICAgbC5z
aC0+cmVmKCk7CiAgICAgICAgc2gtPmRlcmVmQW5kRGVsZXRlKCk7CiAgICAgICAgc2ggPSBsLnNo
OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRVmFsdWVMaXN0PFQ+JiBvcGVyYXRv
cj0gKCBjb25zdCB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD4mIGwgKQogICAgewogICAgICAgIGRldGFj
aCgpOwogICAgICAgIHFDb3B5KCBsLmJlZ2luKCksIGwuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRl
ciggKnRoaXMgKSApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGJvb2wgb3BlcmF0
b3I9PSAoIGNvbnN0IHR5cGVuYW1lIHN0ZDo6bGlzdDxUPiYgbCApIGNvbnN0CiAgICB7CiAgICAg
ICAgaWYgKCBzaXplKCkgIT0gbC5zaXplKCkgKQogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAg
ICAgICAgY29uc3RfaXRlcmF0b3IgaXQyID0gYmVnaW4oKTsKCiAgICAgICAgdHlwZW5hbWUKCiAg
ICAgICAgc3RkOjpsaXN0PFQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsKICAgICAg
ICBmb3IgKCA7IGl0MiAhPSBlbmQoKTsgKytpdDIsICsraXQgKQogICAgICAgIGlmICggISgoKml0
MikgPT0gKCppdCkpICkKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiBU
UlVFOwogICAgfQoKCgoKCiAgICBib29sIG9wZXJhdG9yPT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+
JiBsICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBs
ICkgY29uc3QgeyByZXR1cm4gISggKnRoaXMgPT0gbCApOyB9CiAgICBpdGVyYXRvciBiZWdpbigp
IHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRvciggc2gtPm5vZGUtPm5leHQgKTsgfQogICAgY29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciggc2gtPm5v
ZGUtPm5leHQgKTsgfQogICAgaXRlcmF0b3IgZW5kKCkgeyBkZXRhY2goKTsgcmV0dXJuIGl0ZXJh
dG9yKCBzaC0+bm9kZSApOyB9CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBjb25zdF9pdGVyYXRvciggc2gtPm5vZGUgKTsgfQogICAgaXRlcmF0b3IgaW5zZXJ0KCBpdGVy
YXRvciBpdCwgY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBpdCwg
eCApOyB9CiAgICB1aW50IHJlbW92ZSggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBz
aC0+cmVtb3ZlKCB4ICk7IH0KICAgIHZvaWQgY2xlYXIoKTsKCiAgICBRVmFsdWVMaXN0PFQ+JiBv
cGVyYXRvcjw8ICggY29uc3QgVCYgeCApCiAgICB7CiAgICAgICAgYXBwZW5kKCB4ICk7CiAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gc2gtPm5vZGVzOyB9CiAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gc2gtPm5vZGVz
ID09IDA7IH0KICAgIHZvaWQgcHVzaF9mcm9udCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHNo
LT5pbnNlcnQoIGJlZ2luKCksIHggKTsgfQogICAgdm9pZCBwdXNoX2JhY2soIGNvbnN0IFQmIHgg
KSB7IGRldGFjaCgpOyBzaC0+aW5zZXJ0KCBlbmQoKSwgeCApOyB9CiAgICBpdGVyYXRvciBlcmFz
ZSggaXRlcmF0b3IgcG9zICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5yZW1vdmUoIHBvcyApOyB9
CiAgICBpdGVyYXRvciBlcmFzZSggaXRlcmF0b3IgZmlyc3QsIGl0ZXJhdG9yIGxhc3QgKTsKICAg
IHJlZmVyZW5jZSBmcm9udCgpIHsgOyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVy
ZW5jZSBmcm9udCgpIGNvbnN0IHsgOyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIHJlZmVyZW5jZSBi
YWNrKCkgeyA7IHJldHVybiAqKC0tZW5kKCkpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygp
IGNvbnN0IHsgOyByZXR1cm4gKigtLWVuZCgpKTsgfQogICAgdm9pZCBwb3BfZnJvbnQoKSB7IDsg
ZXJhc2UoIGJlZ2luKCkgKTsgfQogICAgdm9pZCBwb3BfYmFjaygpIHsKICAgICAgICA7CiAgICAg
ICAgaXRlcmF0b3IgdG1wID0gZW5kKCk7CiAgICAgICAgZXJhc2UoIC0tdG1wICk7CiAgICB9CiAg
ICB2b2lkIGluc2VydCggaXRlcmF0b3IgcG9zLCBzaXplX3R5cGUgbiwgY29uc3QgVCYgeCApOwoj
IDUyMiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIKICAgIFFWYWx1
ZUxpc3Q8VD4gb3BlcmF0b3IrICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0OwogICAg
UVZhbHVlTGlzdDxUPiYgb3BlcmF0b3IrPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKTsKCiAg
ICBpdGVyYXRvciBmcm9tTGFzdCgpIHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRvciggc2gtPm5v
ZGUtPnByZXYgKTsgfQogICAgY29uc3RfaXRlcmF0b3IgZnJvbUxhc3QoKSBjb25zdCB7IHJldHVy
biBjb25zdF9pdGVyYXRvciggc2gtPm5vZGUtPnByZXYgKTsgfQoKICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICggc2gtPm5vZGVzID09IDAgKTsgfQoKICAgIGl0ZXJhdG9yIGFwcGVu
ZCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBlbmQoKSwgeCAp
OyB9CiAgICBpdGVyYXRvciBwcmVwZW5kKCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJu
IHNoLT5pbnNlcnQoIGJlZ2luKCksIHggKTsgfQoKICAgIGl0ZXJhdG9yIHJlbW92ZSggaXRlcmF0
b3IgaXQgKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPnJlbW92ZSggaXQgKTsgfQoKICAgIFQmIGZp
cnN0KCkgeyA7IGRldGFjaCgpOyByZXR1cm4gc2gtPm5vZGUtPm5leHQtPmRhdGE7IH0KICAgIGNv
bnN0IFQmIGZpcnN0KCkgY29uc3QgeyA7IHJldHVybiBzaC0+bm9kZS0+bmV4dC0+ZGF0YTsgfQog
ICAgVCYgbGFzdCgpIHsgOyBkZXRhY2goKTsgcmV0dXJuIHNoLT5ub2RlLT5wcmV2LT5kYXRhOyB9
CiAgICBjb25zdCBUJiBsYXN0KCkgY29uc3QgeyA7IHJldHVybiBzaC0+bm9kZS0+cHJldi0+ZGF0
YTsgfQoKICAgIFQmIG9wZXJhdG9yW10gKCBzaXplX3R5cGUgaSApIHsgOyBkZXRhY2goKTsgcmV0
dXJuIHNoLT5hdChpKS0+ZGF0YTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3JbXSAoIHNpemVfdHlw
ZSBpICkgY29uc3QgeyA7IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIGl0ZXJhdG9yIGF0
KCBzaXplX3R5cGUgaSApIHsgOyBkZXRhY2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+YXQoaSkg
KTsgfQogICAgY29uc3RfaXRlcmF0b3IgYXQoIHNpemVfdHlwZSBpICkgY29uc3QgeyA7IHJldHVy
biBjb25zdF9pdGVyYXRvciggc2gtPmF0KGkpICk7IH0KICAgIGl0ZXJhdG9yIGZpbmQgKCBjb25z
dCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+ZmluZCggc2gtPm5vZGUt
Pm5leHQsIHgpICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQgKCBjb25zdCBUJiB4ICkgY29u
c3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwgeCkg
KTsgfQogICAgaXRlcmF0b3IgZmluZCAoIGl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgeyBkZXRh
Y2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAgIGNv
bnN0X2l0ZXJhdG9yIGZpbmQgKCBjb25zdF9pdGVyYXRvciBpdCwgY29uc3QgVCYgeCApIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAg
IGludCBmaW5kSW5kZXgoIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBzaC0+ZmluZEluZGV4
KCBzaC0+bm9kZS0+bmV4dCwgeCkgOyB9CiAgICBzaXplX3R5cGUgY29udGFpbnMoIGNvbnN0IFQm
IHggKSBjb25zdCB7IHJldHVybiBzaC0+Y29udGFpbnMoIHggKTsgfQoKICAgIHNpemVfdHlwZSBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlczsgfQoKICAgIFFWYWx1ZUxpc3Q8VD4mIG9w
ZXJhdG9yKz0gKCBjb25zdCBUJiB4ICkKICAgIHsKICAgICAgICBhcHBlbmQoIHggKTsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiBJ
dGVyYXRvcjsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gQ29uc3RJdGVy
YXRvcjsKICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7Cgpwcm90ZWN0ZWQ6CgoKCiAgICB2b2lkIGRl
dGFjaCgpIHsgaWYgKCBzaC0+Y291bnQgPiAxICkgZGV0YWNoSW50ZXJuYWwoKTsgfQoKCgoKICAg
IFFWYWx1ZUxpc3RQcml2YXRlPFQ+KiBzaDsKCnByaXZhdGU6CiAgICB2b2lkIGRldGFjaEludGVy
bmFsKCk7CgogICAgZnJpZW5kIGNsYXNzIFFEZWVwQ29weTwgUVZhbHVlTGlzdDxUPiA+Owp9OwoK
dGVtcGxhdGUgPGNsYXNzIFQ+CiBib29sIFFWYWx1ZUxpc3Q8VD46Om9wZXJhdG9yPT0gKCBjb25z
dCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3QKewogICAgaWYgKCBzaXplKCkgIT0gbC5zaXplKCkg
KQogICAgICAgIHJldHVybiBGQUxTRTsKICAgIGNvbnN0X2l0ZXJhdG9yIGl0MiA9IGJlZ2luKCk7
CiAgICBjb25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsKICAgIGZvciggOyBpdCAhPSBsLmVu
ZCgpOyArK2l0LCArK2l0MiApCiAgICAgICAgaWYgKCAhKCAqaXQgPT0gKml0MiApICkKICAgICAg
ICAgICAgcmV0dXJuIEZBTFNFOwogICAgcmV0dXJuIFRSVUU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU
Pgogdm9pZCBRVmFsdWVMaXN0PFQ+OjpjbGVhcigpCnsKICAgIGlmICggc2gtPmNvdW50ID09IDEg
KSBzaC0+Y2xlYXIoKTsgZWxzZSB7IHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJp
dmF0ZTxUPjsgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3Q8VD46
Oml0ZXJhdG9yIFFWYWx1ZUxpc3Q8VD46OmVyYXNlKCB0eXBlbmFtZSBRVmFsdWVMaXN0PFQ+Ojpp
dGVyYXRvciBmaXJzdCwgdHlwZW5hbWUgUVZhbHVlTGlzdDxUPjo6aXRlcmF0b3IgbGFzdCApCnsK
ICAgIHdoaWxlICggZmlyc3QgIT0gbGFzdCApCiAgICAgICAgZXJhc2UoIGZpcnN0KysgKTsKICAg
IHJldHVybiBsYXN0Owp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CiB2b2lkIFFWYWx1ZUxpc3Q8VD46
Omluc2VydCggdHlwZW5hbWUgUVZhbHVlTGlzdDxUPjo6aXRlcmF0b3IgcG9zLCBzaXplX3R5cGUg
biwgY29uc3QgVCYgeCApCnsKICAgIGZvciAoIDsgbiA+IDA7IC0tbiApCiAgICAgICAgaW5zZXJ0
KCBwb3MsIHggKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBRVmFsdWVMaXN0PFQ+IFFWYWx1ZUxp
c3Q8VD46Om9wZXJhdG9yKyAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSBjb25zdAp7CiAgICBR
VmFsdWVMaXN0PFQ+IGwyKCAqdGhpcyApOwogICAgZm9yKCBjb25zdF9pdGVyYXRvciBpdCA9IGwu
YmVnaW4oKTsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgbDIuYXBwZW5kKCAqaXQgKTsK
ICAgIHJldHVybiBsMjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBRVmFsdWVMaXN0PFQ+JiBRVmFs
dWVMaXN0PFQ+OjpvcGVyYXRvcis9ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGZv
ciggY29uc3RfaXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQog
ICAgICAgIGFwcGVuZCggKml0ICk7CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUPgogdm9pZCBRVmFsdWVMaXN0PFQ+OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJl
ZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJpdmF0ZTxUPiggKnNoICk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSYgcywgUVZhbHVl
TGlzdDxUPiYgbCApCnsKICAgIGwuY2xlYXIoKTsKICAgIFFfVUlOVDMyIGM7CiAgICBzID4+IGM7
CiAgICBmb3IoIFFfVUlOVDMyIGkgPSAwOyBpIDwgYzsgKytpICkKICAgIHsKICAgICAgICBUIHQ7
CiAgICAgICAgcyA+PiB0OwogICAgICAgIGwuYXBwZW5kKCB0ICk7CiAgICAgICAgaWYgKCBzLmF0
RW5kKCkgKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBzOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4KIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywgY29u
c3QgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIHMgPDwgKFFfVUlOVDMyKWwuc2l6ZSgpOwogICAg
UVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gaXQgPSBsLmJlZ2luKCk7CiAgICBmb3IoIDsgaXQg
IT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgcyA8PCAqaXQ7CiAgICByZXR1cm4gczsKfQojIDQ3
ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW1hcC5oIiAyCgoKCgojIDEgIi91c3IvbG9j
YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tYXAiIDEgMwojIDY1ICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvbWFwIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDkxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfdHJlZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIGVudW0gX1Ji
X3RyZWVfY29sb3IgeyBfTV9yZWQgPSBmYWxzZSwgX01fYmxhY2sgPSB0cnVlIH07CgogIHN0cnVj
dCBfUmJfdHJlZV9ub2RlX2Jhc2UKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSog
X0Jhc2VfcHRyOwoKICAgIF9SYl90cmVlX2NvbG9yIF9NX2NvbG9yOwogICAgX0Jhc2VfcHRyIF9N
X3BhcmVudDsKICAgIF9CYXNlX3B0ciBfTV9sZWZ0OwogICAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoK
ICAgIHN0YXRpYyBfQmFzZV9wdHIKICAgIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsK
ICAgICAgd2hpbGUgKF9feC0+X01fbGVmdCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICAg
IHJldHVybiBfX3g7CiAgICB9CgogICAgc3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWF4aW11bShf
QmFzZV9wdHIgX194KQogICAgewogICAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3gg
PSBfX3gtPl9NX3JpZ2h0OwogICAgICByZXR1cm4gX194OwogICAgfQogIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9WYWw+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJl
ZV9ub2RlX2Jhc2UKICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlu
a190eXBlOwogICAgICBfVmFsIF9NX3ZhbHVlX2ZpZWxkOwogICAgfTsKCiAgc3RydWN0IF9SYl90
cmVlX2Jhc2VfaXRlcmF0b3IKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jh
c2VfcHRyIF9CYXNlX3B0cjsKICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CgogICAgX0Jhc2VfcHRyIF9NX25vZGU7CgogICAgdm9pZAogICAgX01faW5jcmVtZW50KCkKICAg
IHsKICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgewogICAgICAgICAg
X01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUtPl9N
X2xlZnQgIT0gMCkKICAgICAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25v
ZGUtPl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAg
IF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX01fbm9k
ZS0+X01fcmlnaHQgIT0gX195KQogICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0K
ICAgIH0KCiAgICB2b2lkCiAgICBfTV9kZWNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9k
ZS0+X01fY29sb3IgPT0gX01fcmVkCiAgICAgICAgICAmJiBfTV9ub2RlLT5fTV9wYXJlbnQtPl9N
X3BhcmVudCA9PSBfTV9ub2RlKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsK
ICAgICAgZWxzZSBpZiAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIHsKICAgICAgICAg
IF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICAgICAgd2hpbGUgKF9feS0+
X01fcmlnaHQgIT0gMCkKICAgICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAg
IF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg
X0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9u
b2RlID09IF9feS0+X01fbGVmdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUg
PSBfX3k7CiAgICAgICAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgfQogIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3Qg
X1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogICAgewog
ICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5j
ZTsKICAgICAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRl
cmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJl
ZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+CiAgICAgIGNvbnN0X2l0
ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+
IF9TZWxmOwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7Cgog
ICAgICBfUmJfdHJlZV9pdGVyYXRvcigpIHt9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5r
X3R5cGUgX194KSB7IF9NX25vZGUgPSBfX3g7IH0KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoY29u
c3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICAgICAgcmVm
ZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9k
ZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJh
dG9yKysoKQogICAgICB7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewog
ICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAg
ICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgp
IHsgX01fZGVjcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQoKICAgICAgX1NlbGYKICAgICAgb3Bl
cmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAg
IF9NX2RlY3JlbWVudCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBf
UmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsLCBfUmVmLCBfUHRyPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9N
X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25z
dCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh
bCwgX1ZhbCYsIF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9N
X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9f
eCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1Zh
bCYsIGNvbnN0IF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9N
X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5h
bWUgX1B0cj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0
ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90
cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01f
bm9kZSAhPSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29u
c3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJl
ZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01f
bm9kZSAhPSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1Zh
bCYsIF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01f
bm9kZSAhPSBfX3kuX01fbm9kZTsgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9s
ZWZ0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3Qp
CiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogICAgX194
LT5fTV9yaWdodCA9IF9feS0+X01fbGVmdDsKICAgIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAg
ICBfX3ktPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194
LT5fTV9wYXJlbnQ7CgogICAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsK
ICAgIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgX194LT5f
TV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5f
TV9yaWdodCA9IF9feTsKICAgIF9feS0+X01fbGVmdCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50
ID0gX195OwogIH0KCiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBf
UmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fbGVmdDsKICAgIF9feC0+X01fbGVmdCA9
IF9feS0+X01fcmlnaHQ7CiAgICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICBfX3ktPl9N
X3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFy
ZW50OwoKICAgIGlmIChfX3ggPT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNl
IGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fcmlnaHQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0
ID0gX195OwogICAgX195LT5fTV9yaWdodCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195
OwogIH0KCiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfX3gtPl9NX2Nv
bG9yID0gX01fcmVkOwogICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QKICAgICAgICAgICAmJiBfX3gt
Pl9NX3BhcmVudC0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICB7CiAgICAgICAgaWYgKF9feC0+
X01fcGFyZW50ID09IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAg
ICB7CiAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQt
Pl9NX3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xv
ciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX194LT5fTV9wYXJl
bnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0g
X01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9j
b2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9w
YXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsK
ICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xv
ciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+
X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQo
X194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAg
ICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAg
ICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gt
Pl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAg
IF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gt
Pl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3Jv
dGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAg
X194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAg
ICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jv
b3QpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogICAgX19yb290LT5fTV9j
b2xvciA9IF9NX2JsYWNrOwogIH0KCiAgaW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKICBfUmJf
dHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9z
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9f
cmlnaHRtb3N0KQogIHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX196OwogICAgX1Ji
X3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAwOwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFy
ZW50ID0gMDsKICAgIGlmIChfX3ktPl9NX2xlZnQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9y
aWdodDsKICAgIGVsc2UKICAgICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX3gg
PSBfX3ktPl9NX2xlZnQ7CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX195ID0gX195
LT5fTV9yaWdodDsKICAgICAgICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICAg
ICAgX195ID0gX195LT5fTV9sZWZ0OwogICAgICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAg
ICAgICB9CiAgICBpZiAoX195ICE9IF9feikKICAgICAgewoKICAgICAgICBfX3otPl9NX2xlZnQt
Pl9NX3BhcmVudCA9IF9feTsKICAgICAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAg
ICAgICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KQogICAgICAgICAgewogICAgICAgICAgICBf
X3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIGlmIChfX3gpIF9feC0+X01f
cGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIF9feS0+X01fcGFyZW50LT5fTV9s
ZWZ0ID0gX194OwogICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAg
ICAgICAgICAgX196LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX195OwogICAgICAgICAgfQogICAg
ICAgIGVsc2UKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3k7CiAgICAgICAgaWYgKF9fcm9vdCA9
PSBfX3opCiAgICAgICAgICBfX3Jvb3QgPSBfX3k7CiAgICAgICAgZWxzZSBpZiAoX196LT5fTV9w
YXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQg
PSBfX3k7CiAgICAgICAgZWxzZQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0g
X195OwogICAgICAgIF9feS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgICAgc3Rk
Ojpzd2FwKF9feS0+X01fY29sb3IsIF9fei0+X01fY29sb3IpOwogICAgICAgIF9feSA9IF9fejsK
CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3Bh
cmVudDsKICAgICAgICBpZiAoX194KQogICAgICAgICAgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9N
X3BhcmVudDsKICAgICAgICBpZiAoX19yb290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9f
eDsKICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0g
X196KQogICAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgICAg
IGlmIChfX2xlZnRtb3N0ID09IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDAp
CiAgICAgICAgICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0o
X194KTsKICAgICAgICBpZiAoX19yaWdodG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+
X01fbGVmdCA9PSAwKQogICAgICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoK
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jh
c2U6Ol9TX21heGltdW0oX194KTsKICAgICAgfQogICAgaWYgKF9feS0+X01fY29sb3IgIT0gX01f
cmVkKQogICAgICB7CiAgICAgICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8
IF9feC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgaWYgKF9feCA9PSBfX3hfcGFy
ZW50LT5fTV9sZWZ0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICBpZiAoX193LT5f
TV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f
dy0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01f
Y29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9f
eF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9N
X3JpZ2h0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICgoX193LT5fTV9sZWZ0
ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01f
YmxhY2spICYmCiAgICAgICAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAg
ICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg
ICAgICAgICAgICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgICAgICAgICAgX194X3Bh
cmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9N
X3JpZ2h0ID09IDAKICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdy0+X01fcmlnaHQtPl9NX2Nv
bG9yID09IF9NX2JsYWNrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsK
ICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAg
ICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAg
ICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29s
b3I7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg
ICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICAgIF9f
dy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90
cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHsKCiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFy
ZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX2Js
YWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg
ICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7
CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAg
ICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAgICAg
ICAgICAgICAgICAoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+
X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfX3gg
PSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+
X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8IF9fdy0+
X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2Nv
bG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01f
cmVkOwogICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jv
b3QpOwogICAgICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hf
cGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3Ig
PSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkKICAgICAgICAg
ICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAg
ICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg
IGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgfQogICAgcmV0dXJuIF9f
eTsKICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCBi
b29sIF9TX2luc3RhbmNlbGVzcz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2UKICAgIHsK
ICAgIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUK
ICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9
CgogICAgICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAg
ICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVj
dGVkOgogICAgICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0Fs
bG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CgogICAgICBfUmJf
dHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAg
ICAgX01fZ2V0X25vZGUoKSB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsg
fQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkK
ICAgICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KICAgIH07CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9SYl90
cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jh
c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3Rl
ZDoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2Nf
dHlwZQogICAgICBfQWxsb2NfdHlwZTsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAg
X01fZ2V0X25vZGUoKSB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAg
IHZvaWQKICAgICAgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9j
X3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZSA6IHB1YmxpYyBf
UmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAg
IHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwKICAgICAgICBfQWxsb2Ms
IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+IF9CYXNlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
CiAgICAgIF9SYl90cmVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBf
QmFzZShfX2EpIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogICAgICB+X1JiX3RyZWVf
YmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVhZGVyKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbD4g
PgogICAgY2xhc3MgX1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxs
b2M+CiAgICB7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+IF9CYXNl
OwoKICAgIHByb3RlY3RlZDoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNl
X3B0cjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+IF9SYl90cmVlX25vZGU7Cgog
ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgICAgIHR5cGVkZWYgX1Zh
bCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5
cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1
ZV90eXBlJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3Rf
cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5cGU7CiAgICAg
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CiAgICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogICAgcHJvdGVjdGVkOgogICAg
ICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9k
ZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAg
X01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgICB7CiAgICAgICAgX0xp
bmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9D
b25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsgfQogICAgICAgIGNhdGNoKC4u
LikKICAgICAgICAgIHsKICAgICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgICAgIHRo
cm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX0xp
bmtfdHlwZQogICAgICBfTV9jbG9uZV9ub2RlKF9MaW5rX3R5cGUgX194KQogICAgICB7CiAgICAg
ICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQp
OwogICAgICAgIF9fdG1wLT5fTV9jb2xvciA9IF9feC0+X01fY29sb3I7CiAgICAgICAgX190bXAt
Pl9NX2xlZnQgPSAwOwogICAgICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICAgICAgcmV0dXJu
IF9fdG1wOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIGRlc3Ryb3lfbm9kZShfTGlua190eXBl
IF9fcCkKICAgICAgewogICAgICAgIF9EZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAg
ICAgICBfTV9wdXRfbm9kZShfX3ApOwogICAgICB9CgogICAgICBzaXplX3R5cGUgX01fbm9kZV9j
b3VudDsKICAgICAgX0NvbXBhcmUgX01fa2V5X2NvbXBhcmU7CgogICAgICBfTGlua190eXBlJgog
ICAgICBfTV9yb290KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9N
X3BhcmVudDsgfQoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fbGVmdG1vc3QoKSBjb25zdCB7
IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQoKICAgICAgX0xpbmtf
dHlwZSYKICAgICAgX01fcmlnaHRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBf
TV9oZWFkZXItPl9NX3JpZ2h0OyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1Nf
bGVmdChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQp
OyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfcmlnaHQoX0xpbmtfdHlwZSBf
X3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRp
YyBfTGlua190eXBlJgogICAgICBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChf
TGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAg
ICAgIF9TX3ZhbHVlKF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxk
OyB9CgogICAgICBzdGF0aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9MaW5rX3R5cGUgX194
KSB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9feCkpOyB9CgogICAgICBzdGF0aWMg
X1JiX3RyZWVfY29sb3ImCiAgICAgIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBf
X3gtPl9NX2NvbG9yOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChf
QmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAg
ICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19yaWdodChfQmFzZV9wdHIgX194KSB7IHJl
dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtf
dHlwZSYKICAgICAgX1NfcGFyZW50KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBl
JikoX194LT5fTV9wYXJlbnQpOyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3Zh
bHVlKF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5fTV92YWx1ZV9m
aWVsZDsgfQoKICAgICAgc3RhdGljIGNvbnN0IF9LZXkmCiAgICAgIF9TX2tleShfQmFzZV9wdHIg
X194KSB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30K
CiAgICAgIHN0YXRpYyBfUmJfdHJlZV9jb2xvciYKICAgICAgX1NfY29sb3IoX0Jhc2VfcHRyIF9f
eCkgeyByZXR1cm4gKF9MaW5rX3R5cGUoX194KS0+X01fY29sb3IpOyB9CgogICAgICBzdGF0aWMg
X0xpbmtfdHlwZQogICAgICBfU19taW5pbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVy
biAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAg
ICAgIHN0YXRpYyBfTGlua190eXBlCiAgICAgIF9TX21heGltdW0oX0xpbmtfdHlwZSBfX3gpCiAg
ICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0o
X194KTsgfQoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1
ZV90eXBlLCByZWZlcmVuY2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90
cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIGNvbnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4K
ICAgICAgY29uc3RfaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29u
c3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJz
ZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgogICAg
ICBpdGVyYXRvcgogICAgICBfTV9pbnNlcnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwg
Y29uc3QgdmFsdWVfdHlwZSYgX192KTsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY29weShf
TGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwoKICAgICAgdm9pZAogICAgICBfTV9lcmFz
ZShfTGlua190eXBlIF9feCk7CgogICAgcHVibGljOgoKICAgICAgX1JiX3RyZWUoKQogICAgICAg
IDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21w
YXJlKCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNv
bnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwg
X01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5
X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwg
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVf
Y291bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFs
aXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpCiAgICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9j
YXRvcigpKSwgX01fbm9kZV9jb3VudCgwKSwKICAgICAgICAgICAgICAgICBfTV9rZXlfY29tcGFy
ZShfX3guX01fa2V5X2NvbXBhcmUpCiAgICAgIHsKICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9
PSAwKQogICAgICAgICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIHsKICAgICAgICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsKICAgICAgICAg
ICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICAg
ICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICAgICAgICBf
TV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgIH0KICAgICAg
ICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgIH0KCiAgICAgIH5fUmJf
dHJlZSgpIHsgY2xlYXIoKTsgfQoKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsKCiAgICBwcml2YXRlOgogICAg
ICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKQogICAgICB7CiAgICAgICAgX1NfY29sb3IoX01f
aGVhZGVyKSA9IF9NX3JlZDsKCiAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICBfTV9sZWZ0
bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwog
ICAgICB9CgogICAgcHVibGljOgoKICAgICAgX0NvbXBhcmUKICAgICAga2V5X2NvbXAoKSBjb25z
dCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4o
KSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIGVuZCgpIHsgcmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAg
ICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faGVhZGVyOyB9CgogICAgICByZXZlcnNlX2l0ZXJh
dG9yCiAgICAgIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9Cgog
ICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9y
CiAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAg
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdCB7IHJldHVybiBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkg
Y29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KCiAgICAgIHNpemVfdHlw
ZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgICAg
IHZvaWQKICAgICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgX190KQogICAgICB7CiAgICAgICAgc3RkOjpzd2FwKF9NX2hlYWRlciwgX190Ll9N
X2hlYWRlcik7CiAgICAgICAgc3RkOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2Nv
dW50KTsKICAgICAgICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFy
ZSk7CiAgICAgIH0KCgogICAgICBwYWlyPGl0ZXJhdG9yLGJvb2w+CiAgICAgIGluc2VydF91bmlx
dWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF9l
cXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0
X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAg
ICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0
IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv
cj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRl
cmF0b3IgX19wb3NpdGlvbik7CgogICAgICBzaXplX3R5cGUKICAgICAgZXJhc2UoY29uc3Qga2V5
X3R5cGUmIF9feCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0
ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlKiBf
X2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIo
KQogICAgICB7CiAgICAgICAgaWYgKF9NX25vZGVfY291bnQgIT0gMCkKICAgICAgICAgIHsKICAg
ICAgICAgICAgX01fZXJhc2UoX01fcm9vdCgpKTsKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9
IF9NX2hlYWRlcjsKICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAgICAgX01fcmln
aHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAg
ICAgICAgfQogICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlw
ZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3Q7CgogICAgICBpdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlf
dHlwZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0
IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAgICAgaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQo
Y29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICB1cHBlcl9i
b3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAgIHBhaXI8aXRlcmF0b3IsaXRl
cmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgcGFp
cjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0
IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKCiAgICAgIGJvb2wKICAgICAgX19yYl92ZXJpZnkoKSBj
b25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5
cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X195KQogICAgewogICAgICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAg
ICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJl
dHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25z
dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQog
ICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf
Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihj
b25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcjw9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3kgPCBf
X3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25z
dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQog
IHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl
bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsg
X194LnN3YXAoX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs
LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkKICAg
ICAgICB7CgogICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwog
ICAgICAgICAgX01fa2V5X2NvbXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7CiAgICAgICAgICBp
ZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9v
dCgpID0gMDsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAg
ICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9f
eC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9T
X21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21h
eGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25v
ZGVfY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46OgogICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195Xywg
Y29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBl
KSBfX3hfOwogICAgICBfTGlua190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwogICAgICBf
TGlua190eXBlIF9fejsKCiAgICAgIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8
CiAgICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3kp
KSkKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAg
ICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01faGVhZGVyKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX196OwogICAgICAgICAgICAg
IF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChf
X3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9k
ZShfX3YpOwogICAgICAgICAgX1NfcmlnaHQoX195KSA9IF9fejsKCiAgICAgICAgICBpZiAoX195
ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAg
ICAgICB9CiAgICAgIF9TX3BhcmVudChfX3opID0gX195OwogICAgICBfU19sZWZ0KF9feikgPSAw
OwogICAgICBfU19yaWdodChfX3opID0gMDsKICAgICAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwg
X01faGVhZGVyLT5fTV9wYXJlbnQpOwogICAgICArK19NX25vZGVfY291bnQ7CiAgICAgIHJldHVy
biBpdGVyYXRvcihfX3opOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt
ZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy
ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1YWwoY29uc3QgX1Zh
bCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xp
bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7
CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5
T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6
IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9feCwgX195
LCBfX3YpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h
bWUgX0FsbG9jPgogICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICBib29sPgogICAgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShj
b25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwog
ICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICAgICAgYm9vbCBfX2NvbXAgPSB0cnVl
OwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195ID0gX194Owog
ICAgICAgICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19r
ZXkoX194KSk7CiAgICAgICAgICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdo
dChfX3gpOwogICAgICAgIH0KICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAg
ICAgaWYgKF9fY29tcCkKICAgICAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgICAgICByZXR1
cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwog
ICAgICAgIGVsc2UKICAgICAgICAgIC0tX19qOwogICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nf
a2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICByZXR1cm4gcGFp
cjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICBy
ZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsKICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJh
dG9yCiAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxv
Yz46OgogICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBf
X3YpCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9s
ZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAg
IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01f
bm9kZSkpKQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwg
X19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0
dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9f
cG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmIChf
TV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikp
KQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwog
ICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0
OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVm
b3JlID0gX19wb3NpdGlvbjsKICAgICAgICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoX01f
a2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikp
CiAgICAgICAgICAgICAgJiYgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLF9TX2tl
eShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf
U19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9N
X2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0
aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0
ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6CiAgICBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192
KQogICAgewogICAgICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVm
dCkKICAgICAgICB7CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICAh
X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCko
X192KSkpCiAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBf
X3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1
cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9u
Ll9NX25vZGUgPT0gX01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9NX2tleV9j
b21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAg
ICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRp
b247CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShf
S2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAgICAg
ICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAg
ICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsK
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9z
aXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgICAgfQog
ICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAg
ICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl
bmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHRlbXBsYXRlPGNsYXNzIF9JST4KICAgICAgdm9pZAogICAgICBfUmJfdHJlZTxfS2V5LF9WYWws
X0tvVixfQ21wLF9BbGxvYz46OgogICAgICBpbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBf
X2xhc3QpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICAgICAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwogICAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJPgog
ICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+OjoKICAgIGlu
c2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICB7CiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpbnNlcnRfdW5pcXVlKCpfX2Zp
cnN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw
ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsKICAg
ICAgX0xpbmtfdHlwZSBfX3kgPQogICAgICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFu
Y2VfZm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3BhcmVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xl
ZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f
aGVhZGVyLT5fTV9yaWdodCk7CiAgICAgIGRlc3Ryb3lfbm9kZShfX3kpOwogICAgICAtLV9NX25v
ZGVfY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws
IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tleSYgX194KQogICAgewogICAg
ICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX3gpOwogICAgICBz
aXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgZXJh
c2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUKICAg
IF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01fY29weShf
TGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApCiAgICB7CgogICAgICBfTGlua190eXBlIF9f
dG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogICAgICBfX3RvcC0+X01fcGFyZW50ID0gX19wOwoK
ICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAg
ICAgIF9fdG9wLT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX190b3ApOwogICAg
ICAgICAgX19wID0gX190b3A7CiAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CgogICAgICAg
ICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX0xpbmtfdHlw
ZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgICAgICAgICAgX19wLT5fTV9sZWZ0ID0g
X195OwogICAgICAgICAgICAgIF9feS0+X01fcGFyZW50ID0gX19wOwogICAgICAgICAgICAgIGlm
IChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHko
X1NfcmlnaHQoX194KSwgX195KTsKICAgICAgICAgICAgICBfX3AgPSBfX3k7CiAgICAgICAgICAg
ICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBjYXRj
aCguLi4pCiAgICAgICAgewogICAgICAgICAgX01fZXJhc2UoX190b3ApOwogICAgICAgICAgdGhy
b3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX190b3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAg
IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X01fZXJhc2UoX0xpbmtf
dHlwZSBfX3gpCiAgICB7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAg
ICAgX01fZXJhc2UoX1NfcmlnaHQoX194KSk7CiAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9T
X2xlZnQoX194KTsKICAgICAgICAgIGRlc3Ryb3lfbm9kZShfX3gpOwogICAgICAgICAgX194ID0g
X195OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg
X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJh
dG9yIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3Qg
PT0gZW5kKCkpCiAgICAgICAgY2xlYXIoKTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgZXJhc2UoX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGNvbnN0
IF9LZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKICAgIHsKICAgICAgd2hpbGUgKF9f
Zmlyc3QgIT0gX19sYXN0KQogICAgICAgIGVyYXNlKCpfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h
bWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJh
dG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
ZmluZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVh
ZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3gg
IT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAg
ICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAg
ICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9f
eSk7CiAgICAgIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nf
a2V5KF9fai5fTV9ub2RlKSkpID8KICAgICAgICBlbmQoKSA6IF9fajsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9p
dGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5
cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAg
ICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgewogICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJl
KF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChf
X3gpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgICAg
IH0KICAgICBjb25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgIHJl
dHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9u
b2RlKSkpID8KICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQogICAgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgY291bnQoY29u
c3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25z
dF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICAgICAgc2l6ZV90eXBlIF9fbiA9
IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlP
ZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xp
bmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgp
OwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nf
a2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsK
ICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJu
IGl0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l
IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXks
X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0
IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7
CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAw
KQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAg
ICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBf
X3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAg
X0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9v
dCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShf
X2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gp
OwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1
cm4gaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5h
bWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh
cmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgdXBwZXJfYm91bmQoY29u
c3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRl
cjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9
IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAg
ICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAg
X194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lCiAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcj4KICAg
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVx
dWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKICAgIHsgcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGl0
ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLCB1cHBlcl9ib3VuZChfX2spKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAg
IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lCiAgcGFpcjx0eXBl
bmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3Rf
aXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29t
cGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3I+CiAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tv
ViwgX0NvbXBhcmUsIF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykgY29u
c3QKICB7CiAgICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93
ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cHBlcl9ib3VuZChfX2spKTsKICB9CgogIGlubGluZSBpbnQKICBfX2JsYWNrX2NvdW50
KF9SYl90cmVlX25vZGVfYmFzZSogX19ub2RlLCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkK
ICB7CiAgICBpZiAoX19ub2RlID09IDApCiAgICAgIHJldHVybiAwOwogICAgaW50IF9fc3VtID0g
MDsKICAgIGRvCiAgICAgIHsKICAgICAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9PSBfTV9ibGFj
aykKICAgICAgICAgICsrX19zdW07CiAgICAgICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAg
ICAgICBicmVhazsKICAgICAgICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICAgICAgfQog
ICAgd2hpbGUgKDEpOwogICAgcmV0dXJuIF9fc3VtOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0
CiAgICB7CiAgICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAg
ICAgIHJldHVybiBfTV9ub2RlX2NvdW50ID09IDAgJiYgYmVnaW4oKSA9PSBlbmQoKSAmJgogICAg
ICAgIF9NX2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdo
dCA9PSBfTV9oZWFkZXI7CgogICAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9z
dCgpLCBfTV9yb290KCkpOwogICAgZm9yIChjb25zdF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsg
X19pdCAhPSBlbmQoKTsgKytfX2l0KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3ggPSAo
X0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAgICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVm
dChfX3gpOwogICAgICAgIF9MaW5rX3R5cGUgX19SID0gX1NfcmlnaHQoX194KTsKCiAgICAgICAg
aWYgKF9feC0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgaWYgKChfX0wgJiYgX19MLT5f
TV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgfHwgKF9fUiAmJiBfX1ItPl9NX2NvbG9y
ID09IF9NX3JlZCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKF9fTCAm
JiBfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQogICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiks
IF9TX2tleShfX3gpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKCFfX0wg
JiYgIV9fUiAmJiBfX2JsYWNrX2NvdW50KF9feCwgX01fcm9vdCgpKSAhPSBfX2xlbikKICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90
cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgICByZXR1cm4gZmFsc2U7
CiAgICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVt
KF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogICAgfQp9
CiMgNjcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tYXAiIDIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMSAzCiMgNjYg
Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKIyA3NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX21hcC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWly
PGNvbnN0IF9LZXksIF9UcD4gPiA+CmNsYXNzIG1hcAp7CgogCiAgOwoKcHVibGljOgoKICB0eXBl
ZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1Rw
IG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZQog
ICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+
IHsKICBmcmllbmQgY2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVj
dGVkIDoKICAgIF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykg
OiBjb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVf
dHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNv
bXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYg
X1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0
MXN0PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90
eXBlIF9NX3Q7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBw
b2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0
X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVu
Y2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9y
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZl
cnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKCgogIG1hcCgpIDogX01fdChf
Q29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG1hcChjb25zdCBfQ29t
cGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
YWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29t
cCwgX19hKSB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbWFwKGNv
bnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkg
e30KCiAgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG1h
cDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgewogICAgX01fdCA9IF9feC5f
TV90OwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNv
bnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29t
cCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFs
bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxv
Y2F0b3IoKTsgfQoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7
IH0KCgoKCgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdp
bigpOyB9CgoKCgoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoK
CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoK
CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoK
CgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90
LnJiZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01f
dC5yZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7
IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9N
X3QuZW1wdHkoKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6
ZSgpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3Np
emUoKTsgfQojIDIyMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X21hcC5oIiAzCiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0
ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBr
ZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFs
dWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CgogIHZv
aWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChf
X3guX01fdCk7IH0KIyAyNDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9tYXAuaCIgMwogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5
cGUmIF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiMgMjYxICIv
dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBpdGVy
YXRvciBpbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAg
IHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShwb3NpdGlvbiwgX194KTsgfQoKCgoKCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlx
dWUoX19maXJzdCwgX19sYXN0KTsKICB9CiMgMjg0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRp
b24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5NyAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0
IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQojIDMwOSAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgdm9pZCBlcmFz
ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19m
aXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoj
IDMzMiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAz
CiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQo
X194KTsgfQojIDM0NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X21hcC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z
dCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDM1NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtl
eV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVu
ZCgpID8gMCA6IDE7CiAgfQojIDM2OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm
IF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KIyAzODIgIi91c3IvbG9jYWwv
Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9y
IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90
Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQojIDM5MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5
X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA0MDMgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0
ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQojIDQyMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4g
ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxf
cmFuZ2UoX194KTsKICB9CiMgNDQzICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfbWFwLmgiIDMKICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBl
cXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5l
cXVhbF9yYW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBj
bGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtYXA8
X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFw
PF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEs
IGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbWFw
PF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFw
PF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0
dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1
cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1
cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8
IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBtYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSB2b2lkIHN3YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194
LnN3YXAoX195KTsKfQoKfQojIDY4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv
bWFwIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
bXVsdGltYXAuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9tdWx0aW1hcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9L
ZXksIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAg
ICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+
CmNsYXNzIG11bHRpbWFwOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0
aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwojIDkwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpjbGFzcyBtdWx0aW1hcAp7Cgog
CiAgOwoKcHVibGljOgoKCgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBk
YXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0
IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoK
ICBjbGFzcyB2YWx1ZV9jb21wYXJlIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBl
LCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVl
X2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wg
b3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkg
Y29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAg
fTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAg
ICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxv
Yz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw
ZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj
b25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw
ZTsKCgoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7
IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog
ICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90
Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01f
dChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAg
bXVsdGltYXAoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6
IF9NX3QoX194Ll9NX3QpIHsgfQoKICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5
X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2
YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9N
X3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0
dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJl
dHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVn
aW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVy
YXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBl
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUo
KSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoKCiAgc2l6ZV90eXBlIG1heF9zaXplKCkg
Y29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CgogIHZvaWQgc3dhcChtdWx0aW1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoj
IDI0MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFw
LmgiIDMKICBpdGVyYXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7IHJldHVybiBf
TV90Lmluc2VydF9lcXVhbChfX3gpOyB9CiMgMjU5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv
ciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmlu
c2VydF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOwogIH0KIyAyNzAgIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19s
YXN0KTsKICB9CiMgMjg0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfbXVsdGltYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90
LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgMjk3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlf
dHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KIyAzMDkgIi91c3IvbG9jYWwv
Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdm9pZCBlcmFz
ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19m
aXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoj
IDMzMiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFw
LmgiIDMKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu
ZmluZChfX3gpOyB9CiMgMzQ1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfbXVsdGltYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KCgoKCgoKICBzaXplX3R5cGUg
Y291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gp
OyB9CiMgMzY1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVs
dGltYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHty
ZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgMzc4ICIvdXNyL2xvY2FsL2djYzMuMi9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGxv
d2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxv
d2VyX2JvdW5kKF9feCk7CiAgfQoKCgoKCgogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtl
eV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CgoKCgoKCgogIGNv
bnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQojIDQxMyAiL3Vzci9sb2NhbC9nY2Mz
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBwYWlyPGl0ZXJhdG9y
LGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4g
X01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KIyA0MzEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxjb25zdF9pdGVyYXRvcixj
b25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBs
YXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4m
KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01f
dCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy
biBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
IHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0o
Y29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y
Pj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m
IF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAo
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg
IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9f
eSk7Cn0KCn0KIyA2OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21hcCIgMiAz
CiMgNTIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWFwLmgiIDIKCgoKCnN0cnVjdCBR
TWFwTm9kZUJhc2UKewogICAgZW51bSBDb2xvciB7IFJlZCwgQmxhY2sgfTsKCiAgICBRTWFwTm9k
ZUJhc2UqIGxlZnQ7CiAgICBRTWFwTm9kZUJhc2UqIHJpZ2h0OwogICAgUU1hcE5vZGVCYXNlKiBw
YXJlbnQ7CgogICAgQ29sb3IgY29sb3I7CgogICAgUU1hcE5vZGVCYXNlKiBtaW5pbXVtKCkgewog
ICAgICAgIFFNYXBOb2RlQmFzZSogeCA9IHRoaXM7CiAgICAgICAgd2hpbGUgKCB4LT5sZWZ0ICkK
ICAgICAgICAgICAgeCA9IHgtPmxlZnQ7CiAgICAgICAgcmV0dXJuIHg7CiAgICB9CgogICAgUU1h
cE5vZGVCYXNlKiBtYXhpbXVtKCkgewogICAgICAgIFFNYXBOb2RlQmFzZSogeCA9IHRoaXM7CiAg
ICAgICAgd2hpbGUgKCB4LT5yaWdodCApCiAgICAgICAgICAgIHggPSB4LT5yaWdodDsKICAgICAg
ICByZXR1cm4geDsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgSywgY2xhc3MgVD4Kc3RydWN0
IFFNYXBOb2RlIDogcHVibGljIFFNYXBOb2RlQmFzZQp7CiAgICBRTWFwTm9kZSggY29uc3QgSyYg
X2tleSwgY29uc3QgVCYgX2RhdGEgKSB7IGRhdGEgPSBfZGF0YTsga2V5ID0gX2tleTsgfQogICAg
UU1hcE5vZGUoIGNvbnN0IEsmIF9rZXkgKSB7IGtleSA9IF9rZXk7IH0KICAgIFFNYXBOb2RlKCBj
b25zdCBRTWFwTm9kZTxLLFQ+JiBfbiApIHsga2V5ID0gX24ua2V5OyBkYXRhID0gX24uZGF0YTsg
fQogICAgUU1hcE5vZGUoKSB7IH0KICAgIFQgZGF0YTsKICAgIEsga2V5Owp9OwoKCnRlbXBsYXRl
PGNsYXNzIEssIGNsYXNzIFQ+CmNsYXNzIFFNYXBJdGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAgICB0
eXBlZGVmIFFNYXBOb2RlPCBLLCBUID4qIE5vZGVQdHI7CgogICAgdHlwZWRlZiBzdGQ6OmJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYgVCB2
YWx1ZV90eXBlOwoKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCgoKICAg
IHR5cGVkZWYgVCogcG9pbnRlcjsKICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwoKCgoKICAgIFFN
YXBOb2RlPEssVD4qIG5vZGU7CgoKCgogICAgUU1hcEl0ZXJhdG9yKCkgOiBub2RlKCAwICkge30K
ICAgIFFNYXBJdGVyYXRvciggUU1hcE5vZGU8SyxUPiogcCApIDogbm9kZSggcCApIHt9CiAgICBR
TWFwSXRlcmF0b3IoIGNvbnN0IFFNYXBJdGVyYXRvcjxLLFQ+JiBpdCApIDogbm9kZSggaXQubm9k
ZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRTWFwSXRlcmF0b3I8SyxUPiYgaXQg
KSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSgg
Y29uc3QgUU1hcEl0ZXJhdG9yPEssVD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5u
b2RlOyB9CiAgICBUJiBvcGVyYXRvciooKSB7IHJldHVybiBub2RlLT5kYXRhOyB9CiAgICBjb25z
dCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCiAgICBjb25z
dCBLJiBrZXkoKSBjb25zdCB7IHJldHVybiBub2RlLT5rZXk7IH0KICAgIFQmIGRhdGEoKSB7IHJl
dHVybiBub2RlLT5kYXRhOyB9CiAgICBjb25zdCBUJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbm9k
ZS0+ZGF0YTsgfQoKcHJpdmF0ZToKICAgIGludCBpbmMoKTsKICAgIGludCBkZWMoKTsKCnB1Ymxp
YzoKICAgIFFNYXBJdGVyYXRvcjxLLFQ+JiBvcGVyYXRvcisrKCkgewogICAgICAgIGluYygpOwog
ICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwSXRlcmF0b3I8SyxUPiBvcGVyYXRv
cisrKGludCkgewogICAgICAgIFFNYXBJdGVyYXRvcjxLLFQ+IHRtcCA9ICp0aGlzOwogICAgICAg
IGluYygpOwogICAgICAgIHJldHVybiB0bXA7CiAgICB9CgogICAgUU1hcEl0ZXJhdG9yPEssVD4m
IG9wZXJhdG9yLS0oKSB7CiAgICAgICAgZGVjKCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICAgIFFNYXBJdGVyYXRvcjxLLFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUU1hcEl0
ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAgICAgICAgZGVjKCk7CiAgICAgICAgcmV0dXJuIHRt
cDsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBUPgogaW50IFFNYXBJdGVyYXRv
cjxLLFQ+OjppbmMoKQp7CiAgICBRTWFwTm9kZUJhc2UqIHRtcCA9IG5vZGU7CiAgICBpZiAoIHRt
cC0+cmlnaHQgKSB7CiAgICAgICAgdG1wID0gdG1wLT5yaWdodDsKICAgICAgICB3aGlsZSAoIHRt
cC0+bGVmdCApCiAgICAgICAgICAgIHRtcCA9IHRtcC0+bGVmdDsKICAgIH0gZWxzZSB7CiAgICAg
ICAgUU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5
LT5yaWdodCkgewogICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAgICB5ID0geS0+cGFyZW50
OwogICAgICAgIH0KICAgICAgICBpZiAodG1wLT5yaWdodCAhPSB5KQogICAgICAgICAgICB0bXAg
PSB5OwogICAgfQogICAgbm9kZSA9IChOb2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSywgY2xhc3MgVD4KIGludCBRTWFwSXRlcmF0b3I8SyxUPjo6ZGVjKCkKewog
ICAgUU1hcE5vZGVCYXNlKiB0bXAgPSBub2RlOwogICAgaWYgKHRtcC0+Y29sb3IgPT0gUU1hcE5v
ZGVCYXNlOjpSZWQgJiYKICAgICAgICB0bXAtPnBhcmVudC0+cGFyZW50ID09IHRtcCApIHsKICAg
ICAgICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgfSBlbHNlIGlmICh0bXAtPmxlZnQgIT0gMCkgewog
ICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+bGVmdDsKICAgICAgICB3aGlsZSAoIHktPnJp
Z2h0ICkKICAgICAgICAgICAgeSA9IHktPnJpZ2h0OwogICAgICAgIHRtcCA9IHk7CiAgICB9IGVs
c2UgewogICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+cGFyZW50OwogICAgICAgIHdoaWxl
ICh0bXAgPT0geS0+bGVmdCkgewogICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAgICB5ID0g
eS0+cGFyZW50OwogICAgICAgIH0KICAgICAgICB0bXAgPSB5OwogICAgfQogICAgbm9kZSA9IChO
b2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLLCBjbGFzcyBUPgpj
bGFzcyBRTWFwQ29uc3RJdGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFNYXBOb2Rl
PCBLLCBUID4qIE5vZGVQdHI7CgogICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwoKICAg
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCgoKICAgIHR5cGVkZWYgY29uc3Qg
VCogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgVCYgcmVmZXJlbmNlOwoKCgoKCiAgICBRTWFw
Tm9kZTxLLFQ+KiBub2RlOwoKCgoKICAgIFFNYXBDb25zdEl0ZXJhdG9yKCkgOiBub2RlKCAwICkg
e30KICAgIFFNYXBDb25zdEl0ZXJhdG9yKCBRTWFwTm9kZTxLLFQ+KiBwICkgOiBub2RlKCBwICkg
e30KICAgIFFNYXBDb25zdEl0ZXJhdG9yKCBjb25zdCBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+JiBp
dCApIDogbm9kZSggaXQubm9kZSApIHt9CiAgICBRTWFwQ29uc3RJdGVyYXRvciggY29uc3QgUU1h
cEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KCiAgICBib29sIG9wZXJh
dG9yPT0oIGNvbnN0IFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIGl0ICkgY29uc3QgeyByZXR1cm4g
bm9kZSA9PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFNYXBDb25zdEl0
ZXJhdG9yPEssVD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5ub2RlOyB9CiAgICBj
b25zdCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCiAgICBj
b25zdCBLJiBrZXkoKSBjb25zdCB7IHJldHVybiBub2RlLT5rZXk7IH0KICAgIGNvbnN0IFQmIGRh
dGEoKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9Cgpwcml2YXRlOgogICAgaW50IGluYygp
OwogICAgaW50IGRlYygpOwoKcHVibGljOgogICAgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiYgb3Bl
cmF0b3IrKygpIHsKICAgICAgICBpbmMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
ICAgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiBvcGVyYXRvcisrKGludCkgewogICAgICAgIFFNYXBD
b25zdEl0ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAgICAgICAgaW5jKCk7CiAgICAgICAgcmV0
dXJuIHRtcDsKICAgIH0KCiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+JiBvcGVyYXRvci0tKCkg
ewogICAgICAgIGRlYygpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwQ29u
c3RJdGVyYXRvcjxLLFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUU1hcENvbnN0SXRlcmF0
b3I8SyxUPiB0bXAgPSAqdGhpczsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gdG1wOwog
ICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CiBpbnQgUU1hcENvbnN0SXRlcmF0
b3I8SyxUPjo6aW5jKCkKewogICAgUU1hcE5vZGVCYXNlKiB0bXAgPSBub2RlOwogICAgaWYgKCB0
bXAtPnJpZ2h0ICkgewogICAgICAgIHRtcCA9IHRtcC0+cmlnaHQ7CiAgICAgICAgd2hpbGUgKCB0
bXAtPmxlZnQgKQogICAgICAgICAgICB0bXAgPSB0bXAtPmxlZnQ7CiAgICB9IGVsc2UgewogICAg
ICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+cGFyZW50OwogICAgICAgIHdoaWxlICh0bXAgPT0g
eS0+cmlnaHQpIHsKICAgICAgICAgICAgdG1wID0geTsKICAgICAgICAgICAgeSA9IHktPnBhcmVu
dDsKICAgICAgICB9CiAgICAgICAgaWYgKHRtcC0+cmlnaHQgIT0geSkKICAgICAgICAgICAgdG1w
ID0geTsKICAgIH0KICAgIG5vZGUgPSAoTm9kZVB0cil0bXA7CiAgICByZXR1cm4gMDsKfQoKdGVt
cGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CiBpbnQgUU1hcENvbnN0SXRlcmF0b3I8SyxUPjo6ZGVj
KCkKewogICAgUU1hcE5vZGVCYXNlKiB0bXAgPSBub2RlOwogICAgaWYgKHRtcC0+Y29sb3IgPT0g
UU1hcE5vZGVCYXNlOjpSZWQgJiYKICAgICAgICB0bXAtPnBhcmVudC0+cGFyZW50ID09IHRtcCAp
IHsKICAgICAgICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgfSBlbHNlIGlmICh0bXAtPmxlZnQgIT0g
MCkgewogICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+bGVmdDsKICAgICAgICB3aGlsZSAo
IHktPnJpZ2h0ICkKICAgICAgICAgICAgeSA9IHktPnJpZ2h0OwogICAgICAgIHRtcCA9IHk7CiAg
ICB9IGVsc2UgewogICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+cGFyZW50OwogICAgICAg
IHdoaWxlICh0bXAgPT0geS0+bGVmdCkgewogICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAg
ICB5ID0geS0+cGFyZW50OwogICAgICAgIH0KICAgICAgICB0bXAgPSB5OwogICAgfQogICAgbm9k
ZSA9IChOb2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9CgpjbGFzcyBRTWFwUHJpdmF0ZUJhc2Ug
OiBwdWJsaWMgUVNoYXJlZAp7CnB1YmxpYzoKICAgIFFNYXBQcml2YXRlQmFzZSgpIHsKICAgICAg
ICBub2RlX2NvdW50ID0gMDsKICAgIH0KICAgIFFNYXBQcml2YXRlQmFzZSggY29uc3QgUU1hcFBy
aXZhdGVCYXNlKiBfbWFwKSB7CiAgICAgICAgbm9kZV9jb3VudCA9IF9tYXAtPm5vZGVfY291bnQ7
CiAgICB9CgoKCgogICAgdm9pZCByb3RhdGVMZWZ0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2Rl
QmFzZSomIHJvb3QpOwogICAgdm9pZCByb3RhdGVSaWdodCggUU1hcE5vZGVCYXNlKiB4LCBRTWFw
Tm9kZUJhc2UqJiByb290ICk7CiAgICB2b2lkIHJlYmFsYW5jZSggUU1hcE5vZGVCYXNlKiB4LCBR
TWFwTm9kZUJhc2UqJiByb290ICk7CiAgICBRTWFwTm9kZUJhc2UqIHJlbW92ZUFuZFJlYmFsYW5j
ZSggUU1hcE5vZGVCYXNlKiB6LCBRTWFwTm9kZUJhc2UqJiByb290LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFFNYXBOb2RlQmFzZSomIGxlZnRtb3N0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFNYXBOb2RlQmFzZSomIHJpZ2h0bW9zdCApOwoK
CgoKICAgIGludCBub2RlX2NvdW50Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+
CmNsYXNzIFFNYXBQcml2YXRlIDogcHVibGljIFFNYXBQcml2YXRlQmFzZQp7CnB1YmxpYzoKCgoK
ICAgIHR5cGVkZWYgUU1hcEl0ZXJhdG9yPCBLZXksIFQgPiBJdGVyYXRvcjsKICAgIHR5cGVkZWYg
UU1hcENvbnN0SXRlcmF0b3I8IEtleSwgVCA+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFFN
YXBOb2RlPCBLZXksIFQgPiBOb2RlOwogICAgdHlwZWRlZiBRTWFwTm9kZTwgS2V5LCBUID4qIE5v
ZGVQdHI7CgoKCgogICAgUU1hcFByaXZhdGUoKTsKICAgIFFNYXBQcml2YXRlKCBjb25zdCBRTWFw
UHJpdmF0ZTwgS2V5LCBUID4qIF9tYXAgKTsKICAgIH5RTWFwUHJpdmF0ZSgpIHsgY2xlYXIoKTsg
ZGVsZXRlIGhlYWRlcjsgfQoKICAgIE5vZGVQdHIgY29weSggTm9kZVB0ciBwICk7CiAgICB2b2lk
IGNsZWFyKCk7CiAgICB2b2lkIGNsZWFyKCBOb2RlUHRyIHAgKTsKCiAgICBJdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIEl0ZXJhdG9yKCAoTm9kZVB0cikoaGVhZGVyLT5sZWZ0ICkgKTsgfQogICAg
SXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gSXRlcmF0b3IoIGhlYWRlciApOyB9CiAgICBDb25zdEl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvciggKE5vZGVQdHIpKGhl
YWRlci0+bGVmdCApICk7IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
Q29uc3RJdGVyYXRvciggaGVhZGVyICk7IH0KCiAgICBDb25zdEl0ZXJhdG9yIGZpbmQoY29uc3Qg
S2V5JiBrKSBjb25zdDsKCiAgICB2b2lkIHJlbW92ZSggSXRlcmF0b3IgaXQgKSB7CiAgICAgICAg
Tm9kZVB0ciBkZWwgPSAoTm9kZVB0cikgcmVtb3ZlQW5kUmViYWxhbmNlKCBpdC5ub2RlLCBoZWFk
ZXItPnBhcmVudCwgaGVhZGVyLT5sZWZ0LCBoZWFkZXItPnJpZ2h0ICk7CiAgICAgICAgZGVsZXRl
IGRlbDsKICAgICAgICAtLW5vZGVfY291bnQ7CiAgICB9CiMgNDEzICIvdXNyL2xvY2FsL3F0LTMu
MS4xL2luY2x1ZGUvcW1hcC5oIgogICAgSXRlcmF0b3IgaW5zZXJ0U2luZ2xlKCBjb25zdCBLZXkm
IGsgKTsKICAgIEl0ZXJhdG9yIGluc2VydCggUU1hcE5vZGVCYXNlKiB4LCBRTWFwTm9kZUJhc2Uq
IHksIGNvbnN0IEtleSYgayApOwoKcHJvdGVjdGVkOgoKCgogICAgY29uc3QgS2V5JiBrZXkoIFFN
YXBOb2RlQmFzZSogYiApIGNvbnN0IHsgcmV0dXJuICgoTm9kZVB0ciliKS0+a2V5OyB9CgoKCgog
ICAgTm9kZVB0ciBoZWFkZXI7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIFFN
YXBQcml2YXRlPEtleSxUPjo6UU1hcFByaXZhdGUoKSB7CiAgICBoZWFkZXIgPSBuZXcgTm9kZTsK
ICAgIGhlYWRlci0+Y29sb3IgPSBRTWFwTm9kZUJhc2U6OlJlZDsKICAgIGhlYWRlci0+cGFyZW50
ID0gMDsKICAgIGhlYWRlci0+bGVmdCA9IGhlYWRlci0+cmlnaHQgPSBoZWFkZXI7Cn0KdGVtcGxh
dGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIFFNYXBQcml2YXRlPEtleSxUPjo6UU1hcFByaXZhdGUo
IGNvbnN0IFFNYXBQcml2YXRlPCBLZXksIFQgPiogX21hcCApIDogUU1hcFByaXZhdGVCYXNlKCBf
bWFwICkgewogICAgaGVhZGVyID0gbmV3IE5vZGU7CiAgICBoZWFkZXItPmNvbG9yID0gUU1hcE5v
ZGVCYXNlOjpSZWQ7CiAgICBpZiAoIF9tYXAtPmhlYWRlci0+cGFyZW50ID09IDAgKSB7CiAgICAg
ICAgaGVhZGVyLT5wYXJlbnQgPSAwOwogICAgICAgIGhlYWRlci0+bGVmdCA9IGhlYWRlci0+cmln
aHQgPSBoZWFkZXI7CiAgICB9IGVsc2UgewogICAgICAgIGhlYWRlci0+cGFyZW50ID0gY29weSgg
KE5vZGVQdHIpKF9tYXAtPmhlYWRlci0+cGFyZW50KSApOwogICAgICAgIGhlYWRlci0+cGFyZW50
LT5wYXJlbnQgPSBoZWFkZXI7CiAgICAgICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5wYXJlbnQt
Pm1pbmltdW0oKTsKICAgICAgICBoZWFkZXItPnJpZ2h0ID0gaGVhZGVyLT5wYXJlbnQtPm1heGlt
dW0oKTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFN
YXBQcml2YXRlPEtleSxUPjo6Tm9kZVB0ciBRTWFwUHJpdmF0ZTxLZXksVD46OmNvcHkoIHR5cGVu
YW1lIFFNYXBQcml2YXRlPEtleSxUPjo6Tm9kZVB0ciBwICkKewogICAgaWYgKCAhcCApCiAgICAg
ICAgcmV0dXJuIDA7CiAgICBOb2RlUHRyIG4gPSBuZXcgTm9kZSggKnAgKTsKICAgIG4tPmNvbG9y
ID0gcC0+Y29sb3I7CiAgICBpZiAoIHAtPmxlZnQgKSB7CiAgICAgICAgbi0+bGVmdCA9IGNvcHko
IChOb2RlUHRyKShwLT5sZWZ0KSApOwogICAgICAgIG4tPmxlZnQtPnBhcmVudCA9IG47CiAgICB9
IGVsc2UgewogICAgICAgIG4tPmxlZnQgPSAwOwogICAgfQogICAgaWYgKCBwLT5yaWdodCApIHsK
ICAgICAgICBuLT5yaWdodCA9IGNvcHkoIChOb2RlUHRyKShwLT5yaWdodCkgKTsKICAgICAgICBu
LT5yaWdodC0+cGFyZW50ID0gbjsKICAgIH0gZWxzZSB7CiAgICAgICAgbi0+cmlnaHQgPSAwOwog
ICAgfQogICAgcmV0dXJuIG47Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2b2lk
IFFNYXBQcml2YXRlPEtleSxUPjo6Y2xlYXIoKQp7CiAgICBjbGVhciggKE5vZGVQdHIpKGhlYWRl
ci0+cGFyZW50KSApOwogICAgaGVhZGVyLT5jb2xvciA9IFFNYXBOb2RlQmFzZTo6UmVkOwogICAg
aGVhZGVyLT5wYXJlbnQgPSAwOwogICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5yaWdodCA9IGhl
YWRlcjsKICAgIG5vZGVfY291bnQgPSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBU
Pgogdm9pZCBRTWFwUHJpdmF0ZTxLZXksVD46OmNsZWFyKCB0eXBlbmFtZSBRTWFwUHJpdmF0ZTxL
ZXksVD46Ok5vZGVQdHIgcCApCnsKICAgIHdoaWxlICggcCAhPSAwICkgewogICAgICAgIGNsZWFy
KCAoTm9kZVB0cilwLT5yaWdodCApOwogICAgICAgIE5vZGVQdHIgeSA9IChOb2RlUHRyKXAtPmxl
ZnQ7CiAgICAgICAgZGVsZXRlIHA7CiAgICAgICAgcCA9IHk7CiAgICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFtZSBRTWFwUHJpdmF0ZTxLZXksVD46OkNvbnN0SXRl
cmF0b3IgUU1hcFByaXZhdGU8S2V5LFQ+OjpmaW5kKGNvbnN0IEtleSYgaykgY29uc3QKewogICAg
UU1hcE5vZGVCYXNlKiB5ID0gaGVhZGVyOwogICAgUU1hcE5vZGVCYXNlKiB4ID0gaGVhZGVyLT5w
YXJlbnQ7CgogICAgd2hpbGUgKCB4ICE9IDAgKSB7CgogICAgICAgIGlmICggISgga2V5KHgpIDwg
ayApICkgewogICAgICAgICAgICB5ID0geDsKICAgICAgICAgICAgeCA9IHgtPmxlZnQ7CiAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgeCA9IHgtPnJpZ2h0OwogICAgICAgIH0KICAgIH0KCgoK
ICAgIGlmICggeSA9PSBoZWFkZXIgfHwgayA8IGtleSh5KSApCiAgICAgICAgcmV0dXJuIENvbnN0
SXRlcmF0b3IoIGhlYWRlciApOwogICAgcmV0dXJuIENvbnN0SXRlcmF0b3IoIChOb2RlUHRyKXkg
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFNYXBQcml2YXRl
PEtleSxUPjo6SXRlcmF0b3IgUU1hcFByaXZhdGU8S2V5LFQ+OjppbnNlcnRTaW5nbGUoIGNvbnN0
IEtleSYgayApCnsKCiAgICBRTWFwTm9kZUJhc2UqIHkgPSBoZWFkZXI7CiAgICBRTWFwTm9kZUJh
c2UqIHggPSBoZWFkZXItPnBhcmVudDsKICAgIGJvb2wgcmVzdWx0ID0gVFJVRTsKICAgIHdoaWxl
ICggeCAhPSAwICkgewogICAgICAgIHJlc3VsdCA9ICggayA8IGtleSh4KSApOwogICAgICAgIHkg
PSB4OwogICAgICAgIHggPSByZXN1bHQgPyB4LT5sZWZ0IDogeC0+cmlnaHQ7CiAgICB9CgogICAg
SXRlcmF0b3IgaiggKE5vZGVQdHIpeSApOwogICAgaWYgKCByZXN1bHQgKSB7CgogICAgICAgIGlm
ICggaiA9PSBiZWdpbigpICkgewogICAgICAgICAgICByZXR1cm4gaW5zZXJ0KHgsIHksIGsgKTsK
ICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgLS1qOwogICAgICAgIH0KICAgIH0KCiAgICBp
ZiAoIChqLm5vZGUtPmtleSkgPCBrICkKICAgICAgICByZXR1cm4gaW5zZXJ0KHgsIHksIGsgKTsK
CiAgICByZXR1cm4gajsKfQoKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFt
ZSBRTWFwUHJpdmF0ZTxLZXksVD46Okl0ZXJhdG9yIFFNYXBQcml2YXRlPEtleSxUPjo6aW5zZXJ0
KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSogeSwgY29uc3QgS2V5JiBrICkKewogICAg
Tm9kZVB0ciB6ID0gbmV3IE5vZGUoIGsgKTsKICAgIGlmICh5ID09IGhlYWRlciB8fCB4ICE9IDAg
fHwgayA8IGtleSh5KSApIHsKICAgICAgICB5LT5sZWZ0ID0gejsKICAgICAgICBpZiAoIHkgPT0g
aGVhZGVyICkgewogICAgICAgICAgICBoZWFkZXItPnBhcmVudCA9IHo7CiAgICAgICAgICAgIGhl
YWRlci0+cmlnaHQgPSB6OwogICAgICAgIH0gZWxzZSBpZiAoIHkgPT0gaGVhZGVyLT5sZWZ0ICkK
ICAgICAgICAgICAgaGVhZGVyLT5sZWZ0ID0gejsKICAgIH0gZWxzZSB7CiAgICAgICAgeS0+cmln
aHQgPSB6OwogICAgICAgIGlmICggeSA9PSBoZWFkZXItPnJpZ2h0ICkKICAgICAgICAgICAgaGVh
ZGVyLT5yaWdodCA9IHo7CiAgICB9CiAgICB6LT5wYXJlbnQgPSB5OwogICAgei0+bGVmdCA9IDA7
CiAgICB6LT5yaWdodCA9IDA7CiAgICByZWJhbGFuY2UoIHosIGhlYWRlci0+cGFyZW50ICk7CiAg
ICArK25vZGVfY291bnQ7CiAgICByZXR1cm4gSXRlcmF0b3Ioeik7Cn0KIyA1ODYgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xbWFwLmgiCnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBRRGVl
cENvcHk7Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CmNsYXNzIFFNYXAKewpwdWJsaWM6
CgoKCiAgICB0eXBlZGVmIEtleSBrZXlfdHlwZTsKICAgIHR5cGVkZWYgVCBtYXBwZWRfdHlwZTsK
ICAgIHR5cGVkZWYgUVBhaXI8Y29uc3Qga2V5X3R5cGUsIG1hcHBlZF90eXBlPiB2YWx1ZV90eXBl
OwogICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCB2YWx1
ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7
CiAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKCiAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoKCiAgICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7CiAgICB0eXBlZGVmIFFNYXBJdGVyYXRvcjxLZXksVD4gaXRlcmF0b3I7CiAgICB0eXBl
ZGVmIFFNYXBDb25zdEl0ZXJhdG9yPEtleSxUPiBjb25zdF9pdGVyYXRvcjsKICAgIHR5cGVkZWYg
UVBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3BhaXI7CgogICAgdHlwZWRlZiBRTWFwSXRlcmF0
b3I8IEtleSwgVCA+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVyYXRvcjwgS2V5
LCBUID4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7CiAgICB0eXBlZGVm
IFFNYXBQcml2YXRlPCBLZXksIFQgPiBQcml2OwoKCgoKICAgIFFNYXAoKQogICAgewogICAgICAg
IHNoID0gbmV3IFFNYXBQcml2YXRlPCBLZXksIFQgPjsKICAgIH0KICAgIFFNYXAoIGNvbnN0IFFN
YXA8S2V5LFQ+JiBtICkKICAgIHsKICAgICAgICBzaCA9IG0uc2g7IHNoLT5yZWYoKTsKICAgIH0K
CgoKCgoKICAgIFFNYXAoIGNvbnN0IHR5cGVuYW1lIHN0ZDo6bWFwPEtleSxUPiYgbSApCiAgICB7
CiAgICAgICAgc2ggPSBuZXcgUU1hcFByaXZhdGU8S2V5LFQ+OwoKCgogICAgICAgIFFNYXBDb25z
dEl0ZXJhdG9yPEtleSxUPiBpdCA9IG0uYmVnaW4oKTsKCiAgICAgICAgZm9yICggOyBpdCAhPSBt
LmVuZCgpOyArK2l0ICkgewogICAgICAgICAgICB2YWx1ZV90eXBlIHAoICgqaXQpLmZpcnN0LCAo
Kml0KS5zZWNvbmQgKTsKICAgICAgICAgICAgaW5zZXJ0KCBwICk7CiAgICAgICAgfQogICAgfQoK
ICAgIH5RTWFwKCkKICAgIHsKICAgICAgICBpZiAoIHNoLT5kZXJlZigpICkKICAgICAgICAgICAg
ZGVsZXRlIHNoOwogICAgfQogICAgUU1hcDxLZXksVD4mIG9wZXJhdG9yPSAoIGNvbnN0IFFNYXA8
S2V5LFQ+JiBtICk7CgogICAgUU1hcDxLZXksVD4mIG9wZXJhdG9yPSAoIGNvbnN0IHR5cGVuYW1l
IHN0ZDo6bWFwPEtleSxUPiYgbSApCiAgICB7CiAgICAgICAgY2xlYXIoKTsKCgoKICAgICAgICBR
TWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gaXQgPSBtLmJlZ2luKCk7CgogICAgICAgIGZvciAoIDsg
aXQgIT0gbS5lbmQoKTsgKytpdCApIHsKICAgICAgICAgICAgdmFsdWVfdHlwZSBwKCAoKml0KS5m
aXJzdCwgKCppdCkuc2Vjb25kICk7CiAgICAgICAgICAgIGluc2VydCggcCApOwogICAgICAgIH0K
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKCiAgICBpdGVyYXRvciBiZWdpbigpIHsg
ZGV0YWNoKCk7IHJldHVybiBzaC0+YmVnaW4oKTsgfQogICAgaXRlcmF0b3IgZW5kKCkgeyBkZXRh
Y2goKTsgcmV0dXJuIHNoLT5lbmQoKTsgfQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiAoKGNvbnN0IFByaXYqKXNoKS0+YmVnaW4oKTsgfQogICAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gKChjb25zdCBQcml2KilzaCktPmVuZCgpOyB9CiAgICBp
dGVyYXRvciByZXBsYWNlKCBjb25zdCBLZXkmIGssIGNvbnN0IFQmIHYgKQogICAgewogICAgICAg
IHJlbW92ZSggayApOwogICAgICAgIHJldHVybiBpbnNlcnQoIGssIHYgKTsKICAgIH0KCiAgICBz
aXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHNoLT5ub2RlX2NvdW50
OwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHNoLT5u
b2RlX2NvdW50ID09IDA7CiAgICB9CiAgICBRUGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoIGNv
bnN0IHZhbHVlX3R5cGUmIHggKTsKCiAgICB2b2lkIGVyYXNlKCBpdGVyYXRvciBpdCApCiAgICB7
CiAgICAgICAgZGV0YWNoKCk7CiAgICAgICAgc2gtPnJlbW92ZSggaXQgKTsKICAgIH0KICAgIHZv
aWQgZXJhc2UoIGNvbnN0IGtleV90eXBlJiBrICk7CiAgICBzaXplX3R5cGUgY291bnQoIGNvbnN0
IGtleV90eXBlJiBrICkgY29uc3Q7CiAgICBUJiBvcGVyYXRvcltdICggY29uc3QgS2V5JiBrICk7
CiAgICB2b2lkIGNsZWFyKCk7CgogICAgaXRlcmF0b3IgZmluZCAoIGNvbnN0IEtleSYgayApCiAg
ICB7CiAgICAgICAgZGV0YWNoKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+ZmluZCgg
ayApLm5vZGUgKTsKICAgIH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQgKCBjb25zdCBLZXkmIGsg
KSBjb25zdCB7IHJldHVybiBzaC0+ZmluZCggayApOyB9CgogICAgY29uc3QgVCYgb3BlcmF0b3Jb
XSAoIGNvbnN0IEtleSYgayApIGNvbnN0CiAgICAgICAgeyA7IHJldHVybiBzaC0+ZmluZCggayAp
LmRhdGEoKTsgfQogICAgYm9vbCBjb250YWlucyAoIGNvbnN0IEtleSYgayApIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gZmluZCggayApICE9IGVuZCgpOyB9CgoKICAgIHNpemVfdHlwZSBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlX2NvdW50OyB9CgogICAgUVZhbHVlTGlzdDxLZXk+IGtl
eXMoKSBjb25zdCB7CiAgICAgICAgUVZhbHVlTGlzdDxLZXk+IHI7CiAgICAgICAgZm9yIChjb25z
dF9pdGVyYXRvciBpPWJlZ2luKCk7IGkhPWVuZCgpOyArK2kpCiAgICAgICAgICAgIHIuYXBwZW5k
KGkua2V5KCkpOwogICAgICAgIHJldHVybiByOwogICAgfQoKICAgIFFWYWx1ZUxpc3Q8VD4gdmFs
dWVzKCkgY29uc3QgewogICAgICAgIFFWYWx1ZUxpc3Q8VD4gcjsKICAgICAgICBmb3IgKGNvbnN0
X2l0ZXJhdG9yIGk9YmVnaW4oKTsgaSE9ZW5kKCk7ICsraSkKICAgICAgICAgICAgci5hcHBlbmQo
KmkpOwogICAgICAgIHJldHVybiByOwogICAgfQoKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIHNoLT5ub2RlX2NvdW50ID09IDA7IH0KCiAgICBpdGVyYXRvciBpbnNlcnQoIGNvbnN0
IEtleSYga2V5LCBjb25zdCBUJiB2YWx1ZSwgYm9vbCBvdmVyd3JpdGUgPSBUUlVFICk7CiAgICB2
b2lkIHJlbW92ZSggaXRlcmF0b3IgaXQgKSB7IGRldGFjaCgpOyBzaC0+cmVtb3ZlKCBpdCApOyB9
CiAgICB2b2lkIHJlbW92ZSggY29uc3QgS2V5JiBrICk7CiMgNzQ3ICIvdXNyL2xvY2FsL3F0LTMu
MS4xL2luY2x1ZGUvcW1hcC5oIgpwcm90ZWN0ZWQ6CgoKCiAgICB2b2lkIGRldGFjaCgpIHsgaWYg
KCBzaC0+Y291bnQgPiAxICkgZGV0YWNoSW50ZXJuYWwoKTsgfQoKICAgIFByaXYqIHNoOwpwcml2
YXRlOgogICAgdm9pZCBkZXRhY2hJbnRlcm5hbCgpOwoKICAgIGZyaWVuZCBjbGFzcyBRRGVlcENv
cHk8IFFNYXA8S2V5LFQ+ID47Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiBRTWFw
PEtleSxUPiYgUU1hcDxLZXksVD46Om9wZXJhdG9yPSAoIGNvbnN0IFFNYXA8S2V5LFQ+JiBtICkK
ewogICAgbS5zaC0+cmVmKCk7CiAgICBpZiAoIHNoLT5kZXJlZigpICkKICAgICAgICBkZWxldGUg
c2g7CiAgICBzaCA9IG0uc2g7CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIEtl
eSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFNYXA8S2V5LFQ+OjppbnNlcnRfcGFpciBRTWFwPEtleSxU
Pjo6aW5zZXJ0KCBjb25zdCB0eXBlbmFtZSBRTWFwPEtleSxUPjo6dmFsdWVfdHlwZSYgeCApCnsK
ICAgIGRldGFjaCgpOwogICAgc2l6ZV90eXBlIG4gPSBzaXplKCk7CiAgICBpdGVyYXRvciBpdCA9
IHNoLT5pbnNlcnRTaW5nbGUoIHguZmlyc3QgKTsKICAgIGJvb2wgaW5zZXJ0ZWQgPSBGQUxTRTsK
ICAgIGlmICggbiA8IHNpemUoKSApIHsKICAgICAgICBpbnNlcnRlZCA9IFRSVUU7CiAgICAgICAg
aXQuZGF0YSgpID0geC5zZWNvbmQ7CiAgICB9CiAgICByZXR1cm4gUVBhaXI8aXRlcmF0b3IsYm9v
bD4oIGl0LCBpbnNlcnRlZCApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2b2lk
IFFNYXA8S2V5LFQ+OjplcmFzZSggY29uc3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBp
dGVyYXRvciBpdCggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAgICBpZiAoIGl0ICE9IGVuZCgpICkK
ICAgICAgICBzaC0+cmVtb3ZlKCBpdCApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+
CiB0eXBlbmFtZSBRTWFwPEtleSxUPjo6c2l6ZV90eXBlIFFNYXA8S2V5LFQ+Ojpjb3VudCggY29u
c3QgS2V5JiBrICkgY29uc3QKewogICAgY29uc3RfaXRlcmF0b3IgaXQoIHNoLT5maW5kKCBrICku
bm9kZSApOwogICAgaWYgKCBpdCAhPSBlbmQoKSApIHsKICAgICAgICBzaXplX3R5cGUgYyA9IDA7
CiAgICAgICAgd2hpbGUgKCBpdCAhPSBlbmQoKSApIHsKICAgICAgICAgICAgKytpdDsKICAgICAg
ICAgICAgKytjOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYzsKICAgIH0KICAgIHJldHVybiAw
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiBUJiBRTWFwPEtleSxUPjo6b3BlcmF0
b3JbXSAoIGNvbnN0IEtleSYgayApCnsKICAgIGRldGFjaCgpOwogICAgUU1hcE5vZGU8S2V5LFQ+
KiBwID0gc2gtPmZpbmQoIGsgKS5ub2RlOwogICAgaWYgKCBwICE9IHNoLT5lbmQoKS5ub2RlICkK
ICAgICAgICByZXR1cm4gcC0+ZGF0YTsKICAgIHJldHVybiBpbnNlcnQoIGssIFQoKSApLmRhdGEo
KTsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdm9pZCBRTWFwPEtleSxUPjo6Y2xl
YXIoKQp7CiAgICBpZiAoIHNoLT5jb3VudCA9PSAxICkKICAgICAgICBzaC0+Y2xlYXIoKTsKICAg
IGVsc2UgewogICAgICAgIHNoLT5kZXJlZigpOwogICAgICAgIHNoID0gbmV3IFFNYXBQcml2YXRl
PEtleSxUPjsKICAgIH0KfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdHlwZW5hbWUg
UU1hcDxLZXksVD46Oml0ZXJhdG9yIFFNYXA8S2V5LFQ+OjppbnNlcnQoIGNvbnN0IEtleSYga2V5
LCBjb25zdCBUJiB2YWx1ZSwgYm9vbCBvdmVyd3JpdGUgKQp7CiAgICBkZXRhY2goKTsKICAgIHNp
emVfdHlwZSBuID0gc2l6ZSgpOwogICAgaXRlcmF0b3IgaXQgPSBzaC0+aW5zZXJ0U2luZ2xlKCBr
ZXkgKTsKICAgIGlmICggb3ZlcndyaXRlIHx8IG4gPCBzaXplKCkgKQogICAgICAgIGl0LmRhdGEo
KSA9IHZhbHVlOwogICAgcmV0dXJuIGl0Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+
CiB2b2lkIFFNYXA8S2V5LFQ+OjpyZW1vdmUoIGNvbnN0IEtleSYgayApCnsKICAgIGRldGFjaCgp
OwogICAgaXRlcmF0b3IgaXQoIHNoLT5maW5kKCBrICkubm9kZSApOwogICAgaWYgKCBpdCAhPSBl
bmQoKSApCiAgICAgICAgc2gtPnJlbW92ZSggaXQgKTsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBj
bGFzcyBUPgogdm9pZCBRTWFwPEtleSxUPjo6ZGV0YWNoSW50ZXJuYWwoKQp7CiAgICBzaC0+ZGVy
ZWYoKTsgc2ggPSBuZXcgUU1hcFByaXZhdGU8S2V5LFQ+KCBzaCApOwp9CgoKCnRlbXBsYXRlPGNs
YXNzIEtleSwgY2xhc3MgVD4KIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSYg
cywgUU1hcDxLZXksVD4mIG0gKSB7CiAgICBtLmNsZWFyKCk7CiAgICBRX1VJTlQzMiBjOwogICAg
cyA+PiBjOwogICAgZm9yKCBRX1VJTlQzMiBpID0gMDsgaSA8IGM7ICsraSApIHsKICAgICAgICBL
ZXkgazsgVCB0OwogICAgICAgIHMgPj4gayA+PiB0OwogICAgICAgIG0uaW5zZXJ0KCBrLCB0ICk7
CiAgICAgICAgaWYgKCBzLmF0RW5kKCkgKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJl
dHVybiBzOwp9CgoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgogUURhdGFTdHJlYW0mIG9w
ZXJhdG9yPDwoIFFEYXRhU3RyZWFtJiBzLCBjb25zdCBRTWFwPEtleSxUPiYgbSApIHsKICAgIHMg
PDwgKFFfVUlOVDMyKW0uc2l6ZSgpOwogICAgUU1hcENvbnN0SXRlcmF0b3I8S2V5LFQ+IGl0ID0g
bS5iZWdpbigpOwogICAgZm9yKCA7IGl0ICE9IG0uZW5kKCk7ICsraXQgKQogICAgICAgIHMgPDwg
aXQua2V5KCkgPDwgaXQuZGF0YSgpOwogICAgcmV0dXJuIHM7Cn0KIyA0NCAiL3Vzci9sb2NhbC9x
dC0zLjEuMS9pbmNsdWRlL3FtaW1lLmgiIDIKCgoKCmNsYXNzIFFJbWFnZURyYWc7CmNsYXNzIFFU
ZXh0RHJhZzsKCmNsYXNzIFFNaW1lU291cmNlCnsKICAgIGZyaWVuZCBjbGFzcyBRQ2xpcGJvYXJk
RGF0YTsKCnB1YmxpYzoKICAgIFFNaW1lU291cmNlKCk7CiAgICB2aXJ0dWFsIH5RTWltZVNvdXJj
ZSgpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiBmb3JtYXQoIGludCBuID0gMCApIGNvbnN0ID0g
MDsKICAgIHZpcnR1YWwgYm9vbCBwcm92aWRlcyggY29uc3QgY2hhciogKSBjb25zdDsKICAgIHZp
cnR1YWwgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29uc3QgY2hhciogKSBjb25zdCA9IDA7CiAg
ICBpbnQgc2VyaWFsTnVtYmVyKCkgY29uc3Q7Cgpwcml2YXRlOgogICAgaW50IHNlcl9ubzsKICAg
IGVudW0geyBOb0NhY2hlLCBUZXh0LCBHcmFwaGljcyB9IGNhY2hlVHlwZTsKICAgIHVuaW9uCiAg
ICB7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICBRU3RyaW5nICpzdHI7CiAg
ICAgICAgICAgIFFDU3RyaW5nICpzdWJ0eXBlOwogICAgICAgIH0gdHh0OwogICAgICAgIHN0cnVj
dAogICAgICAgIHsKICAgICAgICAgICAgUUltYWdlICppbWc7CiAgICAgICAgICAgIFFQaXhtYXAg
KnBpeDsKICAgICAgICB9IGdmeDsKICAgIH0gY2FjaGU7CiAgICB2b2lkIGNsZWFyQ2FjaGUoKTsK
CgogICAgZnJpZW5kIGNsYXNzIFFJbWFnZURyYWc7CiAgICBmcmllbmQgY2xhc3MgUVRleHREcmFn
OwoKfTsKCmlubGluZSBpbnQgUU1pbWVTb3VyY2U6OnNlcmlhbE51bWJlcigpIGNvbnN0CnsgcmV0
dXJuIHNlcl9ubzsgfQoKY2xhc3MgUVN0cmluZ0xpc3Q7CmNsYXNzIFFNaW1lU291cmNlRmFjdG9y
eURhdGE7CgpjbGFzcyBRTWltZVNvdXJjZUZhY3RvcnkgewpwdWJsaWM6CiAgICBRTWltZVNvdXJj
ZUZhY3RvcnkoKTsKICAgIHZpcnR1YWwgflFNaW1lU291cmNlRmFjdG9yeSgpOwoKICAgIHN0YXRp
YyBRTWltZVNvdXJjZUZhY3RvcnkqIGRlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBz
ZXREZWZhdWx0RmFjdG9yeSggUU1pbWVTb3VyY2VGYWN0b3J5KiApOwogICAgc3RhdGljIFFNaW1l
U291cmNlRmFjdG9yeSogdGFrZURlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBhZGRG
YWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkgKmYgKTsKICAgIHN0YXRpYyB2b2lkIHJlbW92ZUZh
Y3RvcnkoIFFNaW1lU291cmNlRmFjdG9yeSAqZiApOwoKICAgIHZpcnR1YWwgY29uc3QgUU1pbWVT
b3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX25hbWUpIGNvbnN0OwogICAgdmlydHVhbCBR
U3RyaW5nIG1ha2VBYnNvbHV0ZShjb25zdCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0
IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0OwogICAgY29uc3QgUU1pbWVTb3VyY2UqIGRhdGEoY29u
c3QgUVN0cmluZyYgYWJzX29yX3JlbF9uYW1lLCBjb25zdCBRU3RyaW5nJiBjb250ZXh0KSBjb25z
dDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNv
bnN0IFFTdHJpbmcmIHRleHQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZSggY29uc3QgUVN0
cmluZyYgYWJzX25hbWUsIGNvbnN0IFFJbWFnZSYgaW0gKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRQ
aXhtYXAoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBjb25zdCBRUGl4bWFwJiBwbSApOwogICAg
dmlydHVhbCB2b2lkIHNldERhdGEoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBRTWltZVNvdXJj
ZSogZGF0YSApOwogICAgdmlydHVhbCB2b2lkIHNldEZpbGVQYXRoKCBjb25zdCBRU3RyaW5nTGlz
dCYgKTsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZmlsZVBhdGgoKSBjb25zdDsKICAgIHZvaWQg
YWRkRmlsZVBhdGgoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZW5z
aW9uVHlwZSggY29uc3QgUVN0cmluZyYgZXh0LCBjb25zdCBjaGFyKiBtaW1ldHlwZSApOwoKcHJp
dmF0ZToKICAgIFFNaW1lU291cmNlICpkYXRhSW50ZXJuYWwoY29uc3QgUVN0cmluZyYgYWJzX25h
bWUsIGNvbnN0IFFNYXA8UVN0cmluZywgUVN0cmluZz4gJmV4dGVuc2lvbnMgKSBjb25zdDsKICAg
IFFNaW1lU291cmNlRmFjdG9yeURhdGEqIGQ7Cn07CiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xZXZlbnQuaCIgMgoKCgpjbGFzcyBRRXZlbnQ6IHB1YmxpYyBRdAp7CnB1YmxpYzoK
ICAgIGVudW0gVHlwZSB7CiMgNjEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZXZlbnQu
aCIKICAgICAgICBOb25lID0gMCwKCgogICAgICAgIFRpbWVyID0gMSwKICAgICAgICBNb3VzZUJ1
dHRvblByZXNzID0gMiwKICAgICAgICBNb3VzZUJ1dHRvblJlbGVhc2UgPSAzLAogICAgICAgIE1v
dXNlQnV0dG9uRGJsQ2xpY2sgPSA0LAogICAgICAgIE1vdXNlTW92ZSA9IDUsCiAgICAgICAgS2V5
UHJlc3MgPSA2LAogICAgICAgIEtleVJlbGVhc2UgPSA3LAogICAgICAgIEZvY3VzSW4gPSA4LAog
ICAgICAgIEZvY3VzT3V0ID0gOSwKICAgICAgICBFbnRlciA9IDEwLAogICAgICAgIExlYXZlID0g
MTEsCiAgICAgICAgUGFpbnQgPSAxMiwKICAgICAgICBNb3ZlID0gMTMsCiAgICAgICAgUmVzaXpl
ID0gMTQsCiAgICAgICAgQ3JlYXRlID0gMTUsCiAgICAgICAgRGVzdHJveSA9IDE2LAogICAgICAg
IFNob3cgPSAxNywKICAgICAgICBIaWRlID0gMTgsCiAgICAgICAgQ2xvc2UgPSAxOSwKICAgICAg
ICBRdWl0ID0gMjAsCiAgICAgICAgUmVwYXJlbnQgPSAyMSwKICAgICAgICBTaG93TWluaW1pemVk
ID0gMjIsCiAgICAgICAgU2hvd05vcm1hbCA9IDIzLAogICAgICAgIFdpbmRvd0FjdGl2YXRlID0g
MjQsCiAgICAgICAgV2luZG93RGVhY3RpdmF0ZSA9IDI1LAogICAgICAgIFNob3dUb1BhcmVudCA9
IDI2LAogICAgICAgIEhpZGVUb1BhcmVudCA9IDI3LAogICAgICAgIFNob3dNYXhpbWl6ZWQgPSAy
OCwKICAgICAgICBTaG93RnVsbFNjcmVlbiA9IDI5LAogICAgICAgIEFjY2VsID0gMzAsCiAgICAg
ICAgV2hlZWwgPSAzMSwKICAgICAgICBBY2NlbEF2YWlsYWJsZSA9IDMyLAogICAgICAgIENhcHRp
b25DaGFuZ2UgPSAzMywKICAgICAgICBJY29uQ2hhbmdlID0gMzQsCiAgICAgICAgUGFyZW50Rm9u
dENoYW5nZSA9IDM1LAogICAgICAgIEFwcGxpY2F0aW9uRm9udENoYW5nZSA9IDM2LAogICAgICAg
IFBhcmVudFBhbGV0dGVDaGFuZ2UgPSAzNywKICAgICAgICBBcHBsaWNhdGlvblBhbGV0dGVDaGFu
Z2UgPSAzOCwKICAgICAgICBQYWxldHRlQ2hhbmdlID0gMzksCiAgICAgICAgQ2xpcGJvYXJkID0g
NDAsCiAgICAgICAgU3BlZWNoID0gNDIsCiAgICAgICAgU29ja0FjdCA9IDUwLAogICAgICAgIEFj
Y2VsT3ZlcnJpZGUgPSA1MSwKICAgICAgICBEZWZlcnJlZERlbGV0ZSA9IDUyLAogICAgICAgIERy
YWdFbnRlciA9IDYwLAogICAgICAgIERyYWdNb3ZlID0gNjEsCiAgICAgICAgRHJhZ0xlYXZlID0g
NjIsCiAgICAgICAgRHJvcCA9IDYzLAogICAgICAgIERyYWdSZXNwb25zZSA9IDY0LAogICAgICAg
IENoaWxkSW5zZXJ0ZWQgPSA3MCwKICAgICAgICBDaGlsZFJlbW92ZWQgPSA3MSwKICAgICAgICBM
YXlvdXRIaW50ID0gNzIsCiAgICAgICAgU2hvd1dpbmRvd1JlcXVlc3QgPSA3MywKICAgICAgICBB
Y3RpdmF0ZUNvbnRyb2wgPSA4MCwKICAgICAgICBEZWFjdGl2YXRlQ29udHJvbCA9IDgxLAogICAg
ICAgIENvbnRleHRNZW51ID0gODIsCiAgICAgICAgSU1TdGFydCA9IDgzLAogICAgICAgIElNQ29t
cG9zZSA9IDg0LAogICAgICAgIElNRW5kID0gODUsCiAgICAgICAgQWNjZXNzaWJpbGl0eSA9IDg2
LAogICAgICAgIFRhYmxldE1vdmUgPSA4NywKICAgICAgICBMb2NhbGVDaGFuZ2UgPSA4OCwKICAg
ICAgICBMYW5ndWFnZUNoYW5nZSA9IDg5LAogICAgICAgIExheW91dERpcmVjdGlvbkNoYW5nZSA9
IDkwLAogICAgICAgIFN0eWxlID0gOTEsCiAgICAgICAgVGFibGV0UHJlc3MgPSA5MiwKICAgICAg
ICBUYWJsZXRSZWxlYXNlID0gOTMsCiAgICAgICAgVXNlciA9IDEwMDAsCiAgICAgICAgTWF4VXNl
ciA9IDY1NTM1CiAgICB9OwoKCiAgICBRRXZlbnQoIFR5cGUgdHlwZSApIDogdCh0eXBlKSwgcG9z
dGVkKEZBTFNFKSwgc3BvbnQoRkFMU0UpIHt9CiAgICB2aXJ0dWFsIH5RRXZlbnQoKTsKICAgIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHQ7IH0KICAgIGJvb2wgc3BvbnRhbmVvdXMoKSBjb25z
dCB7IHJldHVybiBzcG9udDsgfQpwcm90ZWN0ZWQ6CiAgICBUeXBlIHQ7CnByaXZhdGU6CiAgICB1
aW50IHBvc3RlZCA6IDE7CiAgICB1aW50IHNwb250IDogMTsKCgogICAgZnJpZW5kIGNsYXNzIFFB
cHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQWNjZWxNYW5hZ2VyOwogICAgZnJpZW5kIGNs
YXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUVUV2lkZ2V0Owp9OwoKCmNs
YXNzIFFUaW1lckV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFUaW1lckV2ZW50
KCBpbnQgdGltZXJJZCApCiAgICAgICAgOiBRRXZlbnQoVGltZXIpLCBpZCh0aW1lcklkKSB7fQog
ICAgaW50IHRpbWVySWQoKSBjb25zdCB7IHJldHVybiBpZDsgfQpwcm90ZWN0ZWQ6CiAgICBpbnQg
aWQ7Cn07CgoKY2xhc3MgUU1vdXNlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAg
UU1vdXNlRXZlbnQoIFR5cGUgdHlwZSwgY29uc3QgUVBvaW50ICZwb3MsIGludCBidXR0b24sIGlu
dCBzdGF0ZSApOwoKICAgIFFNb3VzZUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0IFFQb2ludCAmcG9z
LCBjb25zdCBRUG9pbnQmZ2xvYmFsUG9zLAogICAgICAgICAgICAgICAgIGludCBidXR0b24sIGlu
dCBzdGF0ZSApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIHAocG9zKSwgZyhnbG9iYWxQb3MpLCBi
KCh1c2hvcnQpYnV0dG9uKSxzKCh1c2hvcnQpc3RhdGUpLGFjY3B0KFRSVUUpIHt9OwoKICAgIGNv
bnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50ICZn
bG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBnOyB9CiAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJu
IHAueCgpOyB9CiAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xv
YmFsWCgpIGNvbnN0IHsgcmV0dXJuIGcueCgpOyB9CiAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsg
cmV0dXJuIGcueSgpOyB9CiAgICBCdXR0b25TdGF0ZSBidXR0b24oKSBjb25zdCB7IHJldHVybiAo
QnV0dG9uU3RhdGUpIGI7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
KEJ1dHRvblN0YXRlKSBzOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZUFmdGVyKCkgY29uc3Q7CiAg
ICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgdm9pZCBhY2Nl
cHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7
IH0KcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICBRUG9pbnQgZzsKICAgIHVzaG9ydCBiOwog
ICAgdXNob3J0IHM7CiAgICB1aW50IGFjY3B0OjE7Cn07CgoKCmNsYXNzIFFXaGVlbEV2ZW50IDog
cHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFXaGVlbEV2ZW50KCBjb25zdCBRUG9pbnQgJnBv
cywgaW50IGRlbHRhLCBpbnQgc3RhdGUsIE9yaWVudGF0aW9uIG9yaWVudCA9IFZlcnRpY2FsICk7
CiAgICBRV2hlZWxFdmVudCggY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0IFFQb2ludCYgZ2xvYmFs
UG9zLCBpbnQgZGVsdGEsIGludCBzdGF0ZSwgT3JpZW50YXRpb24gb3JpZW50ID0gVmVydGljYWwg
KQogICAgICAgIDogUUV2ZW50KFdoZWVsKSwgcChwb3MpLCBnKGdsb2JhbFBvcyksIGQoZGVsdGEp
LCBzKCh1c2hvcnQpc3RhdGUpLAogICAgICAgICAgYWNjcHQoVFJVRSksIG8ob3JpZW50KSB7fQog
ICAgaW50IGRlbHRhKCkgY29uc3QgeyByZXR1cm4gZDsgfQogICAgY29uc3QgUVBvaW50ICZwb3Mo
KSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcygpIGNvbnN0
IHsgcmV0dXJuIGc7IH0KICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4gcC54KCk7IH0KICAgIGlu
dCB5KCkgY29uc3QgeyByZXR1cm4gcC55KCk7IH0KICAgIGludCBnbG9iYWxYKCkgY29uc3QgeyBy
ZXR1cm4gZy54KCk7IH0KICAgIGludCBnbG9iYWxZKCkgY29uc3QgeyByZXR1cm4gZy55KCk7IH0K
ICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gQnV0dG9uU3RhdGUocyk7IH0K
ICAgIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbzsgfQogICAgYm9v
bCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQ7IH0KICAgIHZvaWQgYWNjZXB0KCkg
eyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9CnBy
b3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGc7CiAgICBpbnQgZDsKICAgIHVzaG9y
dCBzOwogICAgYm9vbCBhY2NwdDsKICAgIE9yaWVudGF0aW9uIG87Cn07CgoKY2xhc3MgUVRhYmxl
dEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIGVudW0gVGFibGV0RGV2aWNlIHsg
Tm9EZXZpY2UgPSAtMSwgUHVjaywgU3R5bHVzLCBFcmFzZXIgfTsKICAgIFFUYWJsZXRFdmVudCgg
VHlwZSB0LCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MsIGludCBk
ZXZpY2UsCiAgICAgICAgICAgICAgICAgIGludCBwcmVzc3VyZSwgaW50IHhUaWx0LCBpbnQgeVRp
bHQsIGNvbnN0IFFQYWlyPGludCxpbnQ+ICZ1SWQgKTsKICAgIFFUYWJsZXRFdmVudCggY29uc3Qg
UVBvaW50ICZwb3MsIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9zLCBpbnQgZGV2aWNlLAogICAgICAg
ICAgICAgICAgICBpbnQgcHJlc3N1cmUsIGludCB4VGlsdCwgaW50IHlUaWx0LCBjb25zdCBRUGFp
cjxpbnQsaW50PiAmdUlkICkKICAgICAgICA6IFFFdmVudCggVGFibGV0TW92ZSApLCBtUG9zKCBw
b3MgKSwgbUdQb3MoIGdsb2JhbFBvcyApLCBtRGV2KCBkZXZpY2UgKSwKICAgICAgICAgIG1QcmVz
cyggcHJlc3N1cmUgKSwgbVhUKCB4VGlsdCApLCBtWVQoIHlUaWx0ICksIG1UeXBlKCB1SWQuZmly
c3QgKSwKICAgICAgICAgIG1QaHkoIHVJZC5zZWNvbmQgKQogICAge30KICAgIGludCBwcmVzc3Vy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1QcmVzczsgfQogICAgaW50IHhUaWx0KCkgY29uc3QgeyByZXR1
cm4gbVhUOyB9CiAgICBpbnQgeVRpbHQoKSBjb25zdCB7IHJldHVybiBtWVQ7IH0KICAgIGNvbnN0
IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gbVBvczsgfQogICAgY29uc3QgUVBvaW50ICZn
bG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBtR1BvczsgfQogICAgaW50IHgoKSBjb25zdCB7IHJl
dHVybiBtUG9zLngoKTsgfQogICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBtUG9zLnkoKTsgfQog
ICAgaW50IGdsb2JhbFgoKSBjb25zdCB7IHJldHVybiBtR1Bvcy54KCk7IH0KICAgIGludCBnbG9i
YWxZKCkgY29uc3QgeyByZXR1cm4gbUdQb3MueSgpOyB9CiAgICBUYWJsZXREZXZpY2UgZGV2aWNl
KCkgY29uc3QgeyByZXR1cm4gVGFibGV0RGV2aWNlKG1EZXYpOyB9CiAgICBpbnQgaXNBY2NlcHRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1iQWNjOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgbWJBY2MgPSBU
UlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgbWJBY2MgPSBGQUxTRTsgfQogICAgUVBhaXI8aW50
LGludD4gdW5pcXVlSWQoKSB7IHJldHVybiBRUGFpcjxpbnQsaW50PiggbVR5cGUsIG1QaHkpOyB9
CnByb3RlY3RlZDoKICAgIFFQb2ludCBtUG9zOwogICAgUVBvaW50IG1HUG9zOwogICAgaW50IG1E
ZXYsCiAgICAgICAgbVByZXNzLAogICAgICAgIG1YVCwKICAgICAgICBtWVQsCiAgICAgICAgbVR5
cGUsCiAgICAgICAgbVBoeTsKICAgIGJvb2wgbWJBY2M7Cgp9OwoKY2xhc3MgUUtleUV2ZW50IDog
cHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFLZXlFdmVudCggVHlwZSB0eXBlLCBpbnQga2V5
LCBpbnQgYXNjaWksIGludCBzdGF0ZSwKICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHRl
eHQ9UVN0cmluZzo6bnVsbCwgYm9vbCBhdXRvcmVwPUZBTFNFLCB1c2hvcnQgY291bnQ9MSApCiAg
ICAgICAgOiBRRXZlbnQodHlwZSksIHR4dCh0ZXh0KSwgaygodXNob3J0KWtleSksIHMoKHVzaG9y
dClzdGF0ZSksCiAgICAgICAgICAgIGEoKHVjaGFyKWFzY2lpKSwgYWNjcHQoVFJVRSksIGF1dG9y
KGF1dG9yZXApLCBjKGNvdW50KQogICAgewogICAgICAgIGlmICgga2V5ID49IEtleV9CYWNrICYm
IGtleSA8PSBLZXlfTWVkaWFMYXN0ICkKICAgICAgICAgICAgYWNjcHQgPSBGQUxTRTsKICAgIH0K
ICAgIGludCBrZXkoKSBjb25zdCB7IHJldHVybiBrOyB9CiAgICBpbnQgYXNjaWkoKSBjb25zdCB7
IHJldHVybiBhOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIEJ1dHRv
blN0YXRlKHMpOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZUFmdGVyKCkgY29uc3Q7CiAgICBib29s
IGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgUVN0cmluZyB0ZXh0KCkg
Y29uc3QgeyByZXR1cm4gdHh0OyB9CiAgICBib29sIGlzQXV0b1JlcGVhdCgpIGNvbnN0IHsgcmV0
dXJuIGF1dG9yOyB9CiAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBpbnQoYyk7IH0KICAg
IHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2Nw
dCA9IEZBTFNFOyB9Cgpwcm90ZWN0ZWQ6CiAgICBRU3RyaW5nIHR4dDsKICAgIHVzaG9ydCBrLCBz
OwogICAgdWNoYXIgYTsKICAgIHVpbnQgYWNjcHQ6MTsKICAgIHVpbnQgYXV0b3I6MTsKICAgIHVz
aG9ydCBjOwp9OwoKCmNsYXNzIFFGb2N1c0V2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoK
CiAgICBRRm9jdXNFdmVudCggVHlwZSB0eXBlICkKICAgICAgICA6IFFFdmVudCh0eXBlKSB7fQoK
ICAgIGJvb2wgZ290Rm9jdXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRm9jdXNJbjsgfQog
ICAgYm9vbCBsb3N0Rm9jdXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRm9jdXNPdXQ7IH0K
CiAgICBlbnVtIFJlYXNvbiB7IE1vdXNlLCBUYWIsIEJhY2t0YWIsIEFjdGl2ZVdpbmRvdywgUG9w
dXAsIFNob3J0Y3V0LCBPdGhlciB9OwogICAgc3RhdGljIFJlYXNvbiByZWFzb24oKTsKICAgIHN0
YXRpYyB2b2lkIHNldFJlYXNvbiggUmVhc29uIHJlYXNvbiApOwogICAgc3RhdGljIHZvaWQgcmVz
ZXRSZWFzb24oKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgUmVhc29uIG1fcmVhc29uOwogICAgc3Rh
dGljIFJlYXNvbiBwcmV2X3JlYXNvbjsKfTsKCgpjbGFzcyBRUGFpbnRFdmVudCA6IHB1YmxpYyBR
RXZlbnQKewpwdWJsaWM6CiAgICBRUGFpbnRFdmVudCggY29uc3QgUVJlZ2lvbiYgcGFpbnRSZWdp
b24sIGJvb2wgZXJhc2VkID0gVFJVRSkKICAgICAgICA6IFFFdmVudChQYWludCksCiAgICAgICAg
ICByZWMocGFpbnRSZWdpb24uYm91bmRpbmdSZWN0KCkpLAogICAgICAgICAgcmVnKHBhaW50UmVn
aW9uKSwKICAgICAgICAgIGVyYXNlKGVyYXNlZCl7fQogICAgUVBhaW50RXZlbnQoIGNvbnN0IFFS
ZWN0ICZwYWludFJlY3QsIGJvb2wgZXJhc2VkID0gVFJVRSApCiAgICAgICAgOiBRRXZlbnQoUGFp
bnQpLAogICAgICAgICAgcmVjKHBhaW50UmVjdCksCiAgICAgICAgICByZWcocGFpbnRSZWN0KSwK
ICAgICAgICAgIGVyYXNlKGVyYXNlZCl7fQogICAgY29uc3QgUVJlY3QgJnJlY3QoKSBjb25zdCB7
IHJldHVybiByZWM7IH0KICAgIGNvbnN0IFFSZWdpb24gJnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJu
IHJlZzsgfQogICAgYm9vbCBlcmFzZWQoKSBjb25zdCB7IHJldHVybiBlcmFzZTsgfQpwcm90ZWN0
ZWQ6CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNl
QXBwbGljYXRpb247CiAgICBRUmVjdCByZWM7CiAgICBRUmVnaW9uIHJlZzsKICAgIGJvb2wgZXJh
c2U7Cn07CgoKY2xhc3MgUU1vdmVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBR
TW92ZUV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50ICZvbGRQb3MgKQogICAg
ICAgIDogUUV2ZW50KE1vdmUpLCBwKHBvcyksIG9sZHAob2xkUG9zKSB7fQogICAgY29uc3QgUVBv
aW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJm9sZFBvcygp
Y29uc3QgeyByZXR1cm4gb2xkcDt9CnByb3RlY3RlZDoKICAgIFFQb2ludCBwLCBvbGRwOwogICAg
ZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0
aW9uOwp9OwoKCmNsYXNzIFFSZXNpemVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAg
ICBRUmVzaXplRXZlbnQoIGNvbnN0IFFTaXplICZzaXplLCBjb25zdCBRU2l6ZSAmb2xkU2l6ZSAp
CiAgICAgICAgOiBRRXZlbnQoUmVzaXplKSwgcyhzaXplKSwgb2xkcyhvbGRTaXplKSB7fQogICAg
Y29uc3QgUVNpemUgJnNpemUoKSBjb25zdCB7IHJldHVybiBzOyB9CiAgICBjb25zdCBRU2l6ZSAm
b2xkU2l6ZSgpY29uc3QgeyByZXR1cm4gb2xkczt9CnByb3RlY3RlZDoKICAgIFFTaXplIHMsIG9s
ZHM7CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNl
QXBwbGljYXRpb247Cn07CgoKY2xhc3MgUUNsb3NlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVi
bGljOgogICAgUUNsb3NlRXZlbnQoKQogICAgICAgIDogUUV2ZW50KENsb3NlKSwgYWNjcHQoRkFM
U0UpIHt9CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAg
dm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0
ID0gRkFMU0U7IH0KcHJvdGVjdGVkOgogICAgYm9vbCBhY2NwdDsKfTsKCgpjbGFzcyBRU2hvd0V2
ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFTaG93RXZlbnQoKQogICAgICAgIDog
UUV2ZW50KFNob3cpIHt9Cn07CgoKY2xhc3MgUUhpZGVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpw
dWJsaWM6CiAgICBRSGlkZUV2ZW50KCkKICAgICAgICA6IFFFdmVudChIaWRlKSB7fQp9OwoKY2xh
c3MgUUNvbnRleHRNZW51RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgZW51bSBS
ZWFzb24geyBNb3VzZSwgS2V5Ym9hcmQsIE90aGVyIH07CiAgICBRQ29udGV4dE1lbnVFdmVudCgg
UmVhc29uIHJlYXNvbiwgY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9z
LCBpbnQgc3RhdGUgKQogICAgICAgIDogUUV2ZW50KCBDb250ZXh0TWVudSApLCBwKCBwb3MgKSwg
Z3AoIGdsb2JhbFBvcyApLCBhY2NwdCggRkFMU0UgKSwgY29uc3VtKEZBTFNFKSwKICAgICAgICBy
ZWFzKCByZWFzb24gKSwgcygodXNob3J0KXN0YXRlKSB7fQogICAgUUNvbnRleHRNZW51RXZlbnQo
IFJlYXNvbiByZWFzb24sIGNvbnN0IFFQb2ludCAmcG9zLCBpbnQgc3RhdGUgKTsKCiAgICBpbnQg
eCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIHAu
eSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsgcmV0dXJuIGdwLngoKTsgfQogICAgaW50
IGdsb2JhbFkoKSBjb25zdCB7IHJldHVybiBncC55KCk7IH0KCiAgICBjb25zdCBRUG9pbnQmIHBv
cygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCYgZ2xvYmFsUG9zKCkgY29u
c3QgeyByZXR1cm4gZ3A7IH0KCiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IChCdXR0b25TdGF0ZSkgczsgfQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4g
YWNjcHQ7IH0KICAgIGJvb2wgaXNDb25zdW1lZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN1bTsgfQog
ICAgdm9pZCBjb25zdW1lKCkgeyBjb25zdW0gPSBUUlVFOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsg
YWNjcHQgPSBUUlVFOyBjb25zdW0gPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQg
PSBGQUxTRTsgY29uc3VtID0gRkFMU0U7IH0KCiAgICBSZWFzb24gcmVhc29uKCkgY29uc3QgeyBy
ZXR1cm4gUmVhc29uKCByZWFzICk7IH0KCnByb3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBv
aW50IGdwOwogICAgYm9vbCBhY2NwdDsKICAgIGJvb2wgY29uc3VtOwogICAgdWludCByZWFzOjg7
CiAgICB1c2hvcnQgczsKfTsKCgpjbGFzcyBRSU1FdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJs
aWM6CiAgICBRSU1FdmVudCggVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgY3Vy
c29yUG9zaXRpb24gKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCB0eHQodGV4dCksIGNwb3MoY3Vy
c29yUG9zaXRpb24pLCBhKEZBTFNFKSB7fQogICAgY29uc3QgUVN0cmluZyAmdGV4dCgpIGNvbnN0
IHsgcmV0dXJuIHR4dDsgfQogICAgaW50IGN1cnNvclBvcygpIGNvbnN0IHsgcmV0dXJuIGNwb3M7
IH0KICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KICAgIHZvaWQgYWNj
ZXB0KCkgeyBhID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGEgPSBGQUxTRTsgfQogICAg
aW50IHNlbGVjdGlvbkxlbmd0aCgpIGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcgdHh0Owog
ICAgaW50IGNwb3M7CiAgICBib29sIGE7Cn07CgpjbGFzcyBRSU1Db21wb3NlRXZlbnQgOiBwdWJs
aWMgUUlNRXZlbnQKewpwdWJsaWM6CiAgICBRSU1Db21wb3NlRXZlbnQoIFR5cGUgdHlwZSwgY29u
c3QgUVN0cmluZyAmdGV4dCwgaW50IGN1cnNvclBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICBpbnQgc2VsTGVuZ3RoICkKICAgICAgICA6IFFJTUV2ZW50KCB0eXBlLCB0ZXh0LCBjdXJzb3JQ
b3NpdGlvbiApLCBzZWxMZW4oIHNlbExlbmd0aCApIHsgfQoKcHJpdmF0ZToKICAgIGludCBzZWxM
ZW47CgogICAgZnJpZW5kIGNsYXNzIFFJTUV2ZW50Owp9OwoKaW5saW5lIGludCBRSU1FdmVudDo6
c2VsZWN0aW9uTGVuZ3RoKCkgY29uc3QKewogICAgaWYgKCB0eXBlKCkgIT0gSU1Db21wb3NlICkg
cmV0dXJuIDA7CiAgICBRSU1Db21wb3NlRXZlbnQgKnRoYXQgPSAoUUlNQ29tcG9zZUV2ZW50ICop
IHRoaXM7CiAgICByZXR1cm4gdGhhdC0+c2VsTGVuOwp9CiMgNDc5ICIvdXNyL2xvY2FsL3F0LTMu
MS4xL2luY2x1ZGUvcWV2ZW50LmgiCmNsYXNzIFFEcm9wRXZlbnQgOiBwdWJsaWMgUUV2ZW50LCBw
dWJsaWMgUU1pbWVTb3VyY2UKewpwdWJsaWM6CiAgICBRRHJvcEV2ZW50KCBjb25zdCBRUG9pbnQm
IHBvcywgVHlwZSB0eXA9RHJvcCApCiAgICAgICAgOiBRRXZlbnQodHlwKSwgcChwb3MpLAogICAg
ICAgICAgYWN0KDApLCBhY2NwdCgwKSwgYWNjcHRhY3QoMCksIHJlc3YoMCksCiAgICAgICAgICBk
KDApCiAgICAgICAge30KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gcDsg
fQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQgfHwgYWNjcHRhY3Q7
IH0KICAgIHZvaWQgYWNjZXB0KGJvb2wgeT1UUlVFKSB7IGFjY3B0ID0geTsgfQogICAgdm9pZCBp
Z25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KCiAgICBib29sIGlzQWN0aW9uQWNjZXB0ZWQoKSBj
b25zdCB7IHJldHVybiBhY2NwdGFjdDsgfQogICAgdm9pZCBhY2NlcHRBY3Rpb24oYm9vbCB5PVRS
VUUpIHsgYWNjcHRhY3QgPSB5OyB9CiAgICBlbnVtIEFjdGlvbiB7IENvcHksIExpbmssIE1vdmUs
IFByaXZhdGUsIFVzZXJBY3Rpb249MTAwIH07CiAgICB2b2lkIHNldEFjdGlvbiggQWN0aW9uIGEg
KSB7IGFjdCA9ICh1aW50KWE7IH0KICAgIEFjdGlvbiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBB
Y3Rpb24oYWN0KTsgfQoKICAgIFFXaWRnZXQqIHNvdXJjZSgpIGNvbnN0OwogICAgY29uc3QgY2hh
ciogZm9ybWF0KCBpbnQgbiA9IDAgKSBjb25zdDsKICAgIFFCeXRlQXJyYXkgZW5jb2RlZERhdGEo
IGNvbnN0IGNoYXIqICkgY29uc3Q7CiAgICBib29sIHByb3ZpZGVzKCBjb25zdCBjaGFyKiApIGNv
bnN0OwoKICAgIFFCeXRlQXJyYXkgZGF0YShjb25zdCBjaGFyKiBmKSBjb25zdCB7IHJldHVybiBl
bmNvZGVkRGF0YShmKTsgfQoKICAgIHZvaWQgc2V0UG9pbnQoIGNvbnN0IFFQb2ludCYgbnAgKSB7
IHAgPSBucDsgfQoKcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICB1aW50IGFjdDo4OwogICAg
dWludCBhY2NwdDoxOwogICAgdWludCBhY2NwdGFjdDoxOwogICAgdWludCByZXN2OjU7CiAgICB2
b2lkICogZDsKfTsKCgoKY2xhc3MgUURyYWdNb3ZlRXZlbnQgOiBwdWJsaWMgUURyb3BFdmVudAp7
CnB1YmxpYzoKICAgIFFEcmFnTW92ZUV2ZW50KCBjb25zdCBRUG9pbnQmIHBvcywgVHlwZSB0eXA9
RHJhZ01vdmUgKQogICAgICAgIDogUURyb3BFdmVudChwb3MsdHlwKSwKICAgICAgICAgIHJlY3Qo
IHBvcywgUVNpemUoIDEsIDEgKSApIHt9CiAgICBRUmVjdCBhbnN3ZXJSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gcmVjdDsgfQogICAgdm9pZCBhY2NlcHQoIGJvb2wgeT1UUlVFICkgeyBRRHJvcEV2ZW50
OjphY2NlcHQoeSk7IH0KICAgIHZvaWQgYWNjZXB0KCBjb25zdCBRUmVjdCAmIHIpIHsgYWNjcHQg
PSBUUlVFOyByZWN0ID0gcjsgfQogICAgdm9pZCBpZ25vcmUoIGNvbnN0IFFSZWN0ICYgcikgeyBh
Y2NwdCA9RkFMU0U7IHJlY3QgPSByOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgUURyb3BFdmVudDo6
aWdub3JlKCk7IH0KCnByb3RlY3RlZDoKICAgIFFSZWN0IHJlY3Q7Cn07CgoKY2xhc3MgUURyYWdF
bnRlckV2ZW50IDogcHVibGljIFFEcmFnTW92ZUV2ZW50CnsKcHVibGljOgogICAgUURyYWdFbnRl
ckV2ZW50KCBjb25zdCBRUG9pbnQmIHBvcyApIDoKICAgICAgICBRRHJhZ01vdmVFdmVudChwb3Ms
IERyYWdFbnRlcikgeyB9Cn07CgoKCmNsYXNzIFFEcmFnUmVzcG9uc2VFdmVudCA6IHB1YmxpYyBR
RXZlbnQKewpwdWJsaWM6CiAgICBRRHJhZ1Jlc3BvbnNlRXZlbnQoIGJvb2wgYWNjZXB0ZWQgKQog
ICAgICAgIDogUUV2ZW50KERyYWdSZXNwb25zZSksIGEoYWNjZXB0ZWQpIHt9CiAgICBib29sIGRy
YWdBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KcHJvdGVjdGVkOgogICAgYm9vbCBhOwp9
OwoKCmNsYXNzIFFEcmFnTGVhdmVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBR
RHJhZ0xlYXZlRXZlbnQoKQogICAgICAgIDogUUV2ZW50KERyYWdMZWF2ZSkge30KfTsKCgoKY2xh
c3MgUUNoaWxkRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUNoaWxkRXZlbnQo
IFR5cGUgdHlwZSwgUU9iamVjdCAqY2hpbGQgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBjKGNo
aWxkKSB7fQogICAgUU9iamVjdCAqY2hpbGQoKSBjb25zdCB7IHJldHVybiBjOyB9CiAgICBib29s
IGluc2VydGVkKCkgY29uc3QgeyByZXR1cm4gdCA9PSBDaGlsZEluc2VydGVkOyB9CiAgICBib29s
IHJlbW92ZWQoKSBjb25zdCB7IHJldHVybiB0ID09IENoaWxkUmVtb3ZlZDsgfQpwcm90ZWN0ZWQ6
CiAgICBRT2JqZWN0ICpjOwp9OwoKCmNsYXNzIFFDdXN0b21FdmVudCA6IHB1YmxpYyBRRXZlbnQK
ewpwdWJsaWM6CiAgICBRQ3VzdG9tRXZlbnQoIGludCB0eXBlICk7CiAgICBRQ3VzdG9tRXZlbnQo
IFR5cGUgdHlwZSwgdm9pZCAqZGF0YSApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIGQoZGF0YSkg
e307CiAgICB2b2lkICpkYXRhKCkgY29uc3QgeyByZXR1cm4gZDsgfQogICAgdm9pZCBzZXREYXRh
KCB2b2lkKiBkYXRhICkgeyBkID0gZGF0YTsgfQpwcml2YXRlOgogICAgdm9pZCAqZDsKfTsKIyA0
NiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FvYmplY3QuaCIgMgoKCgoKCgpjbGFzcyBR
TWV0YU9iamVjdDsKY2xhc3MgUVZhcmlhbnQ7CmNsYXNzIFFNZXRhUHJvcGVydHk7CmNsYXNzIFFQ
b3N0RXZlbnRMaXN0OwpjbGFzcyBRU2VuZGVyT2JqZWN0TGlzdDsKY2xhc3MgUU9iamVjdFByaXZh
dGU7CgpjbGFzcyBRT2JqZWN0VXNlckRhdGE7CgpzdHJ1Y3QgUVVPYmplY3Q7CgpjbGFzcyBRT2Jq
ZWN0OiBwdWJsaWMgUXQKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3Qg
Y2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hh
ciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBi
b29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSgg
aW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVy
dHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3Qq
IHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0
Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9
IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9
IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAKCnB1YmxpYzoK
ICAgIFFPYmplY3QoIFFPYmplY3QgKnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAg
IHZpcnR1YWwgflFPYmplY3QoKTsKIyA3OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fv
YmplY3QuaCIKICAgIHZpcnR1YWwgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwg
Ym9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiApOwoKICAgIGJvb2wgaXNBKCBj
b25zdCBjaGFyICogKSBjb25zdDsKICAgIGJvb2wgaW5oZXJpdHMoIGNvbnN0IGNoYXIgKiApIGNv
bnN0OwoKICAgIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIgKm5hbWUo
IGNvbnN0IGNoYXIgKiBkZWZhdWx0TmFtZSApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRO
YW1lKCBjb25zdCBjaGFyICpuYW1lICk7CiAgICBib29sIGlzV2lkZ2V0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGlzV2lkZ2V0OyB9CiAgICBib29sIGhpZ2hQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IEZBTFNFOyB9CgogICAgYm9vbCBzaWduYWxzQmxvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGJsb2Nr
U2lnOyB9CiAgICB2b2lkIGJsb2NrU2lnbmFscyggYm9vbCBiICk7CgogICAgaW50IHN0YXJ0VGlt
ZXIoIGludCBpbnRlcnZhbCApOwogICAgdm9pZCBraWxsVGltZXIoIGludCBpZCApOwogICAgdm9p
ZCBraWxsVGltZXJzKCk7CgogICAgUU9iamVjdCAqY2hpbGQoIGNvbnN0IGNoYXIgKm9iak5hbWUs
IGNvbnN0IGNoYXIgKmluaGVyaXRzQ2xhc3MgPSAwLCBib29sIHJlY3Vyc2l2ZVNlYXJjaCA9IFRS
VUUgKTsKICAgIGNvbnN0IFFPYmplY3RMaXN0ICpjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNo
aWxkT2JqZWN0czsgfQoKICAgIHN0YXRpYyBjb25zdCBRT2JqZWN0TGlzdCAqb2JqZWN0VHJlZXMo
KTsKCiAgICBRT2JqZWN0TGlzdCAqcXVlcnlMaXN0KCBjb25zdCBjaGFyICppbmhlcml0c0NsYXNz
ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9iak5h
bWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWdleHBNYXRj
aCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2
ZVNlYXJjaCA9IFRSVUUgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGQoIFFP
YmplY3QgKiApOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKCBRT2JqZWN0ICogKTsKCiAg
ICB2b2lkIGluc3RhbGxFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7CiAgICB2b2lkIHJl
bW92ZUV2ZW50RmlsdGVyKCBjb25zdCBRT2JqZWN0ICogKTsKCiAgICBzdGF0aWMgYm9vbCBjb25u
ZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVt
YmVyICk7CiAgICBib29sIGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hh
ciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciAp
IGNvbnN0OwogICAgc3RhdGljIGJvb2wgZGlzY29ubmVjdCggY29uc3QgUU9iamVjdCAqc2VuZGVy
LCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgYm9vbCBkaXNjb25u
ZWN0KCBjb25zdCBjaGFyICpzaWduYWw9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRT2JqZWN0ICpyZWNlaXZlcj0wLCBjb25zdCBjaGFyICptZW1iZXI9MCApOwogICAgYm9v
bCBkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVy
PTAgKTsKICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RJbnRlcm5hbCggY29uc3QgUU9iamVjdCAqc2Vu
ZGVyLCBpbnQgc2lnbmFsX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFP
YmplY3QgKnJlY2VpdmVyLCBpbnQgbWVtYmNvZGUsIGludCBtZW1iZXJfaW5kZXggKTsKICAgIHN0
YXRpYyBib29sIGRpc2Nvbm5lY3RJbnRlcm5hbCggY29uc3QgUU9iamVjdCAqc2VuZGVyLCBpbnQg
c2lnbmFsX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3Qg
KnJlY2VpdmVyLCBpbnQgbWVtYmNvZGUsIGludCBtZW1iZXJfaW5kZXggKTsKCiAgICB2b2lkIGR1
bXBPYmplY3RUcmVlKCk7CiAgICB2b2lkIGR1bXBPYmplY3RJbmZvKCk7CgoKICAgIHZpcnR1YWwg
Ym9vbCBzZXRQcm9wZXJ0eSggY29uc3QgY2hhciAqbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVl
ICk7CiAgICB2aXJ0dWFsIFFWYXJpYW50IHByb3BlcnR5KCBjb25zdCBjaGFyICpuYW1lICkgY29u
c3Q7CiMgMTQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW9iamVjdC5oIgogICAgc3Rh
dGljIHVpbnQgcmVnaXN0ZXJVc2VyRGF0YSgpOwogICAgdm9pZCBzZXRVc2VyRGF0YSggdWludCBp
ZCwgUU9iamVjdFVzZXJEYXRhKiBkYXRhKTsKICAgIFFPYmplY3RVc2VyRGF0YSogdXNlckRhdGEo
IHVpbnQgaWQgKSBjb25zdDsKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRlc3Ryb3llZCgpOwogICAg
dm9pZCBkZXN0cm95ZWQoIFFPYmplY3QqIG9iaiApOwoKcHVibGljOgogICAgUU9iamVjdCAqcGFy
ZW50KCkgY29uc3QgeyByZXR1cm4gcGFyZW50T2JqOyB9CgpwdWJsaWMgOgogICAgdm9pZCBkZWxl
dGVMYXRlcigpOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGNsZWFudXBFdmVudEZpbHRlciggUU9iamVj
dCogKTsKCnByb3RlY3RlZDoKICAgIGJvb2wgYWN0aXZhdGVfZmlsdGVycyggUUV2ZW50ICogKTsK
ICAgIFFDb25uZWN0aW9uTGlzdCAqcmVjZWl2ZXJzKCBjb25zdCBjaGFyKiBzaWduYWwgKSBjb25z
dDsKICAgIFFDb25uZWN0aW9uTGlzdCAqcmVjZWl2ZXJzKCBpbnQgc2lnbmFsICkgY29uc3Q7CiAg
ICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggaW50IHNpZ25hbCApOwogICAgdm9pZCBhY3RpdmF0ZV9z
aWduYWwoIGludCBzaWduYWwsIGludCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGludCBz
aWduYWwsIGRvdWJsZSApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGludCBzaWduYWwsIFFT
dHJpbmcgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsX2Jvb2woIGludCBzaWduYWwsIGJvb2wg
KTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsKCBRQ29ubmVjdGlvbkxpc3QgKmNsaXN0LCBRVU9i
amVjdCAqbyApOwoKICAgIGNvbnN0IFFPYmplY3QgKnNlbmRlcigpOwoKICAgIHZpcnR1YWwgdm9p
ZCB0aW1lckV2ZW50KCBRVGltZXJFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY2hpbGRFdmVu
dCggUUNoaWxkRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGN1c3RvbUV2ZW50KCBRQ3VzdG9t
RXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0Tm90aWZ5KCBjb25zdCBjaGFyICpz
aWduYWwgKTsKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0Tm90aWZ5KCBjb25zdCBjaGFyICpz
aWduYWwgKTsKICAgIHZpcnR1YWwgYm9vbCBjaGVja0Nvbm5lY3RBcmdzKCBjb25zdCBjaGFyICpz
aWduYWwsIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgc3RhdGljIFFDU3RyaW5nIG5vcm1h
bGl6ZVNpZ25hbFNsb3QoIGNvbnN0IGNoYXIgKnNpZ25hbFNsb3QgKTsKCnByaXZhdGU6CiAgICB1
aW50IGlzU2lnbmFsIDogMTsKICAgIHVpbnQgaXNXaWRnZXQgOiAxOwogICAgdWludCBwZW5kVGlt
ZXIgOiAxOwogICAgdWludCBibG9ja1NpZyA6IDE7CiAgICB1aW50IHdhc0RlbGV0ZWQgOiAxOwog
ICAgdWludCBpc1RyZWUgOiAxOwoKICAgIGNvbnN0IGNoYXIgKm9iam5hbWU7CiAgICBRT2JqZWN0
ICpwYXJlbnRPYmo7CiAgICBRT2JqZWN0TGlzdCAqY2hpbGRPYmplY3RzOwogICAgUVNpZ25hbFZl
YyAqY29ubmVjdGlvbnM7CiAgICBRU2VuZGVyT2JqZWN0TGlzdCAqc2VuZGVyT2JqZWN0czsKICAg
IFFPYmplY3RMaXN0ICpldmVudEZpbHRlcnM7CiAgICBRUG9zdEV2ZW50TGlzdCAqcG9zdGVkRXZl
bnRzOwogICAgUU9iamVjdFByaXZhdGUqIGQ7CgogICAgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0
aWNRdE1ldGFPYmplY3QoKTsKCiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJp
ZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAg
IGZyaWVuZCBjbGFzcyBRU2lnbmFsOwoKcHJpdmF0ZToKCiAgICBRT2JqZWN0KCBjb25zdCBRT2Jq
ZWN0ICYgKTsKICAgIFFPYmplY3QgJm9wZXJhdG9yPSggY29uc3QgUU9iamVjdCAmICk7Cgp9OwoK
CgpjbGFzcyBRT2JqZWN0VXNlckRhdGEgewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RT2JqZWN0VXNl
ckRhdGEoKTsKfTsKCgoKaW5saW5lIGJvb2wgUU9iamVjdDo6Y29ubmVjdCggY29uc3QgUU9iamVj
dCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKm1lbWJlciApIGNvbnN0CnsKICAgIHJldHVybiBjb25uZWN0KCBzZW5k
ZXIsIHNpZ25hbCwgdGhpcywgbWVtYmVyICk7Cn0KCgppbmxpbmUgYm9vbCBRT2JqZWN0OjpkaXNj
b25uZWN0KCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKQp7CiAgICBy
ZXR1cm4gZGlzY29ubmVjdCggdGhpcywgc2lnbmFsLCByZWNlaXZlciwgbWVtYmVyICk7Cn0KCgpp
bmxpbmUgYm9vbCBRT2JqZWN0OjpkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwg
Y29uc3QgY2hhciAqbWVtYmVyICkKewogICAgcmV0dXJuIGRpc2Nvbm5lY3QoIHRoaXMsIDAsIHJl
Y2VpdmVyLCBtZW1iZXIgKTsKfQojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXdp
ZGdldC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwYWludGRldmljZS5o
IiAxCiMgNTEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFpbnRkZXZpY2UuaCIKY2xh
c3MgUUlPRGV2aWNlOwpjbGFzcyBRU3RyaW5nOwoKCgpzdHJ1Y3QgUVBhaW50RGV2aWNlWDExRGF0
YTsKCgp1bmlvbiBRUERldkNtZFBhcmFtIHsKICAgIGludCBpdmFsOwogICAgaW50ICppdmVjOwog
ICAgUVN0cmluZyAqc3RyOwogICAgY29uc3QgUVBvaW50ICpwb2ludDsKICAgIGNvbnN0IFFSZWN0
ICpyZWN0OwogICAgY29uc3QgUVBvaW50QXJyYXkgKnB0YXJyOwogICAgY29uc3QgUVBpeG1hcCAq
cGl4bWFwOwogICAgY29uc3QgUUltYWdlICppbWFnZTsKICAgIGNvbnN0IFFDb2xvciAqY29sb3I7
CiAgICBjb25zdCBRRm9udCAqZm9udDsKICAgIGNvbnN0IFFQZW4gKnBlbjsKICAgIGNvbnN0IFFC
cnVzaCAqYnJ1c2g7CiAgICBjb25zdCBRUmVnaW9uICpyZ247CiAgICBjb25zdCBRV01hdHJpeCAq
bWF0cml4OwogICAgUUlPRGV2aWNlICpkZXZpY2U7Cn07CgoKCmNsYXNzIFFQYWludERldmljZQp7
CnB1YmxpYzoKICAgIHZpcnR1YWwgflFQYWludERldmljZSgpOwoKICAgIGludCBkZXZUeXBlKCkg
Y29uc3Q7CiAgICBib29sIGlzRXh0RGV2KCkgY29uc3Q7CiAgICBib29sIHBhaW50aW5nQWN0aXZl
KCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldFJlc29sdXRpb24oIGludCApOwogICAgdmly
dHVhbCBpbnQgcmVzb2x1dGlvbigpIGNvbnN0OwoKCgoKCgogICAgdmlydHVhbCBRdDo6SEFORExF
IGhhbmRsZSgpIGNvbnN0OwogICAgdmlydHVhbCBRdDo6SEFORExFIHgxMVJlbmRlckhhbmRsZSgp
IGNvbnN0OwoKCgoKCgoKICAgIERpc3BsYXkgKngxMURpc3BsYXkoKSBjb25zdDsKICAgIGludCB4
MTFTY3JlZW4oKSBjb25zdDsKICAgIGludCB4MTFEZXB0aCgpIGNvbnN0OwogICAgaW50IHgxMUNl
bGxzKCkgY29uc3Q7CiAgICBRdDo6SEFORExFIHgxMUNvbG9ybWFwKCkgY29uc3Q7CiAgICBib29s
IHgxMURlZmF1bHRDb2xvcm1hcCgpIGNvbnN0OwogICAgdm9pZCAqeDExVmlzdWFsKCkgY29uc3Q7
CiAgICBib29sIHgxMURlZmF1bHRWaXN1YWwoKSBjb25zdDsKCiAgICBzdGF0aWMgRGlzcGxheSAq
eDExQXBwRGlzcGxheSgpOwogICAgc3RhdGljIGludCB4MTFBcHBTY3JlZW4oKTsKCiAgICBzdGF0
aWMgaW50IHgxMUFwcERwaVgoKTsKICAgIHN0YXRpYyBpbnQgeDExQXBwRHBpWSgpOwogICAgc3Rh
dGljIHZvaWQgeDExU2V0QXBwRHBpWChpbnQpOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBp
WShpbnQpOwogICAgc3RhdGljIGludCB4MTFBcHBEZXB0aCgpOwogICAgc3RhdGljIGludCB4MTFB
cHBDZWxscygpOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDExQXBwUm9vdFdpbmRvdygpOwogICAg
c3RhdGljIFF0OjpIQU5ETEUgeDExQXBwQ29sb3JtYXAoKTsKICAgIHN0YXRpYyBib29sIHgxMUFw
cERlZmF1bHRDb2xvcm1hcCgpOwogICAgc3RhdGljIHZvaWQgKngxMUFwcFZpc3VhbCgpOwogICAg
c3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdFZpc3VhbCgpOwoKCgogICAgc3RhdGljIGludCB4MTFB
cHBEZXB0aCggaW50IHNjcmVlbiApOwogICAgc3RhdGljIGludCB4MTFBcHBDZWxscyggaW50IHNj
cmVlbiApOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDExQXBwUm9vdFdpbmRvdyggaW50IHNjcmVl
biApOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDExQXBwQ29sb3JtYXAoIGludCBzY3JlZW4gKTsK
ICAgIHN0YXRpYyB2b2lkICp4MTFBcHBWaXN1YWwoIGludCBzY3JlZW4gKTsKICAgIHN0YXRpYyBi
b29sIHgxMUFwcERlZmF1bHRDb2xvcm1hcCggaW50IHNjcmVlbiApOwogICAgc3RhdGljIGJvb2wg
eDExQXBwRGVmYXVsdFZpc3VhbCggaW50IHNjcmVlbiApOwogICAgc3RhdGljIGludCB4MTFBcHBE
cGlYKCBpbnQgKTsKICAgIHN0YXRpYyBpbnQgeDExQXBwRHBpWSggaW50ICk7CiAgICBzdGF0aWMg
dm9pZCB4MTFTZXRBcHBEcGlYKCBpbnQsIGludCApOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBw
RHBpWSggaW50LCBpbnQgKTsKIyAxNTEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFp
bnRkZXZpY2UuaCIKICAgIGVudW0gUERldkNtZCB7CiAgICAgICAgUGRjTk9QID0gMCwKICAgICAg
ICBQZGNEcmF3UG9pbnQgPSAxLAogICAgICAgIFBkY0RyYXdGaXJzdCA9IFBkY0RyYXdQb2ludCwK
ICAgICAgICBQZGNNb3ZlVG8gPSAyLAogICAgICAgIFBkY0xpbmVUbyA9IDMsCiAgICAgICAgUGRj
RHJhd0xpbmUgPSA0LAogICAgICAgIFBkY0RyYXdSZWN0ID0gNSwKICAgICAgICBQZGNEcmF3Um91
bmRSZWN0ID0gNiwKICAgICAgICBQZGNEcmF3RWxsaXBzZSA9IDcsCiAgICAgICAgUGRjRHJhd0Fy
YyA9IDgsCiAgICAgICAgUGRjRHJhd1BpZSA9IDksCiAgICAgICAgUGRjRHJhd0Nob3JkID0gMTAs
CiAgICAgICAgUGRjRHJhd0xpbmVTZWdtZW50cyA9IDExLAogICAgICAgIFBkY0RyYXdQb2x5bGlu
ZSA9IDEyLAogICAgICAgIFBkY0RyYXdQb2x5Z29uID0gMTMsCiAgICAgICAgUGRjRHJhd0N1Ymlj
QmV6aWVyID0gMTQsCiAgICAgICAgUGRjRHJhd1RleHQgPSAxNSwKICAgICAgICBQZGNEcmF3VGV4
dEZvcm1hdHRlZCA9IDE2LAogICAgICAgIFBkY0RyYXdQaXhtYXAgPSAxNywKICAgICAgICBQZGNE
cmF3SW1hZ2UgPSAxOCwKICAgICAgICBQZGNEcmF3VGV4dDIgPSAxOSwKICAgICAgICBQZGNEcmF3
VGV4dDJGb3JtYXR0ZWQgPSAyMCwKICAgICAgICBQZGNEcmF3TGFzdCA9IFBkY0RyYXdUZXh0MkZv
cm1hdHRlZCwKCgoKICAgICAgICBQZGNCZWdpbiA9IDMwLAogICAgICAgIFBkY0VuZCA9IDMxLAog
ICAgICAgIFBkY1NhdmUgPSAzMiwKICAgICAgICBQZGNSZXN0b3JlID0gMzMsCiAgICAgICAgUGRj
U2V0ZGV2ID0gMzQsCiAgICAgICAgUGRjU2V0QmtDb2xvciA9IDQwLAogICAgICAgIFBkY1NldEJr
TW9kZSA9IDQxLAogICAgICAgIFBkY1NldFJPUCA9IDQyLAogICAgICAgIFBkY1NldEJydXNoT3Jp
Z2luID0gNDMsCiAgICAgICAgUGRjU2V0Rm9udCA9IDQ1LAogICAgICAgIFBkY1NldFBlbiA9IDQ2
LAogICAgICAgIFBkY1NldEJydXNoID0gNDcsCiAgICAgICAgUGRjU2V0VGFiU3RvcHMgPSA0OCwK
ICAgICAgICBQZGNTZXRUYWJBcnJheSA9IDQ5LAogICAgICAgIFBkY1NldFVuaXQgPSA1MCwKICAg
ICAgICBQZGNTZXRWWGZvcm0gPSA1MSwKICAgICAgICBQZGNTZXRXaW5kb3cgPSA1MiwKICAgICAg
ICBQZGNTZXRWaWV3cG9ydCA9IDUzLAogICAgICAgIFBkY1NldFdYZm9ybSA9IDU0LAogICAgICAg
IFBkY1NldFdNYXRyaXggPSA1NSwKICAgICAgICBQZGNTYXZlV01hdHJpeCA9IDU2LAogICAgICAg
IFBkY1Jlc3RvcmVXTWF0cml4ID0gNTcsCiAgICAgICAgUGRjU2V0Q2xpcCA9IDYwLAogICAgICAg
IFBkY1NldENsaXBSZWdpb24gPSA2MSwKCiAgICAgICAgUGRjUmVzZXJ2ZWRTdGFydCA9IDAsCiAg
ICAgICAgUGRjUmVzZXJ2ZWRTdG9wID0gMTk5CiAgICB9OwoKcHJvdGVjdGVkOgogICAgUVBhaW50
RGV2aWNlKCB1aW50IGRldmZsYWdzICk7CgoKCgogICAgUXQ6OkhBTkRMRSBoZDsKICAgIFF0OjpI
QU5ETEUgcmVuZGhkOwoKICAgIHZvaWQgY29weVgxMURhdGEoIGNvbnN0IFFQYWludERldmljZSAq
ICk7CiAgICB2b2lkIGNsb25lWDExRGF0YSggY29uc3QgUVBhaW50RGV2aWNlICogKTsKICAgIHZp
cnR1YWwgdm9pZCBzZXRYMTFEYXRhKCBjb25zdCBRUGFpbnREZXZpY2VYMTFEYXRhKiApOwogICAg
UVBhaW50RGV2aWNlWDExRGF0YSogZ2V0WDExRGF0YSggYm9vbCBkZWY9RkFMU0UgKSBjb25zdDsK
IyAyMjkgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFpbnRkZXZpY2UuaCIKICAgIHZp
cnR1YWwgYm9vbCBjbWQoIGludCwgUVBhaW50ZXIgKiwgUVBEZXZDbWRQYXJhbSAqICk7CiAgICB2
aXJ0dWFsIGludCBtZXRyaWMoIGludCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQgZm9udE1ldCgg
UUZvbnQgKiwgaW50LCBjb25zdCBjaGFyICogPSAwLCBpbnQgPSAwICkgY29uc3Q7CiAgICB2aXJ0
dWFsIGludCBmb250SW5mKCBRRm9udCAqLCBpbnQgKSBjb25zdDsKCiAgICB1c2hvcnQgZGV2Rmxh
Z3M7CiAgICB1c2hvcnQgcGFpbnRlcnM7CgogICAgZnJpZW5kIGNsYXNzIFFQYWludGVyOwogICAg
ZnJpZW5kIGNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CgoKCgoKCgogICAgZnJpZW5kIHZvaWQg
Yml0Qmx0KCBRUGFpbnREZXZpY2UgKiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFFQYWludERldmljZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQsIGludCwgaW50LCBpbnQsIFF0OjpSYXN0ZXJPcCwgYm9vbCApOwoKCiAgICBm
cmllbmQgdm9pZCBxdF9pbml0X2ludGVybmFsKCBpbnQgKiwgY2hhciAqKiwgRGlzcGxheSAqLCBR
dDo6SEFORExFLCBRdDo6SEFORExFICk7CiAgICBmcmllbmQgdm9pZCBxdF9jbGVhbnVwKCk7CgoK
cHJpdmF0ZToKCiAgICBzdGF0aWMgRGlzcGxheSAqeF9hcHBkaXNwbGF5OwogICAgc3RhdGljIGlu
dCB4X2FwcHNjcmVlbjsKCiAgICBzdGF0aWMgaW50IHhfYXBwZGVwdGg7CiAgICBzdGF0aWMgaW50
IHhfYXBwY2VsbHM7CiAgICBzdGF0aWMgUXQ6OkhBTkRMRSB4X2FwcHJvb3R3aW5kb3c7CiAgICBz
dGF0aWMgUXQ6OkhBTkRMRSB4X2FwcGNvbG9ybWFwOwogICAgc3RhdGljIGJvb2wgeF9hcHBkZWZj
b2xvcm1hcDsKICAgIHN0YXRpYyB2b2lkICp4X2FwcHZpc3VhbDsKICAgIHN0YXRpYyBib29sIHhf
YXBwZGVmdmlzdWFsOwoKCiAgICBzdGF0aWMgaW50ICp4X2FwcGRlcHRoX2FycjsKICAgIHN0YXRp
YyBpbnQgKnhfYXBwY2VsbHNfYXJyOwogICAgc3RhdGljIFF0OjpIQU5ETEUgKnhfYXBwcm9vdHdp
bmRvd19hcnI7CiAgICBzdGF0aWMgUXQ6OkhBTkRMRSAqeF9hcHBjb2xvcm1hcF9hcnI7CiAgICBz
dGF0aWMgYm9vbCAqeF9hcHBkZWZjb2xvcm1hcF9hcnI7CiAgICBzdGF0aWMgdm9pZCAqKnhfYXBw
dmlzdWFsX2FycjsKICAgIHN0YXRpYyBib29sICp4X2FwcGRlZnZpc3VhbF9hcnI7CgogICAgUVBh
aW50RGV2aWNlWDExRGF0YSogeDExRGF0YTsKCgpwcml2YXRlOgoKICAgIFFQYWludERldmljZSgg
Y29uc3QgUVBhaW50RGV2aWNlICYgKTsKICAgIFFQYWludERldmljZSAmb3BlcmF0b3I9KCBjb25z
dCBRUGFpbnREZXZpY2UgJiApOwoKfTsKCgoKdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqZHN0
LCBpbnQgZHgsIGludCBkeSwKICAgICAgICAgICAgIGNvbnN0IFFQYWludERldmljZSAqc3JjLCBp
bnQgc3g9MCwgaW50IHN5PTAsIGludCBzdz0tMSwgaW50IHNoPS0xLAogICAgICAgICAgICAgUXQ6
OlJhc3Rlck9wID0gUXQ6OkNvcHlST1AsIGJvb2wgaWdub3JlTWFzaz1GQUxTRSApOwoKCnZvaWQg
Yml0Qmx0KCBRUGFpbnREZXZpY2UgKmRzdCwgaW50IGR4LCBpbnQgZHksCiAgICAgICAgICAgICBj
b25zdCBRSW1hZ2UgKnNyYywgaW50IHN4PTAsIGludCBzeT0wLCBpbnQgc3c9LTEsIGludCBzaD0t
MSwKICAgICAgICAgICAgIGludCBjb252ZXJzaW9uX2ZsYWdzPTAgKTsKCgoKCnN0cnVjdCBRUGFp
bnREZXZpY2VYMTFEYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgRGlzcGxheSogeF9kaXNwbGF5
OwogICAgaW50IHhfc2NyZWVuOwogICAgaW50IHhfZGVwdGg7CiAgICBpbnQgeF9jZWxsczsKICAg
IFF0OjpIQU5ETEUgeF9jb2xvcm1hcDsKICAgIGJvb2wgeF9kZWZjb2xvcm1hcDsKICAgIHZvaWQq
IHhfdmlzdWFsOwogICAgYm9vbCB4X2RlZnZpc3VhbDsKfTsKCgoKCgoKCmlubGluZSBpbnQgUVBh
aW50RGV2aWNlOjpkZXZUeXBlKCkgY29uc3QKeyByZXR1cm4gZGV2RmxhZ3MgJiBRSW50ZXJuYWw6
OkRldmljZVR5cGVNYXNrOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OmlzRXh0RGV2KCkg
Y29uc3QKeyByZXR1cm4gKGRldkZsYWdzICYgUUludGVybmFsOjpFeHRlcm5hbERldmljZSkgIT0g
MDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjpwYWludGluZ0FjdGl2ZSgpIGNvbnN0Cnsg
cmV0dXJuIHBhaW50ZXJzICE9IDA7IH0KCgppbmxpbmUgRGlzcGxheSAqUVBhaW50RGV2aWNlOjp4
MTFEaXNwbGF5KCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfZGlzcGxheSA6
IHhfYXBwZGlzcGxheTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMVNjcmVlbigpIGNv
bnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X3NjcmVlbiA6IHhfYXBwc2NyZWVuOyB9
CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDExRGVwdGgoKSBjb25zdAp7IHJldHVybiB4MTFE
YXRhID8geDExRGF0YS0+eF9kZXB0aCA6IHhfYXBwZGVwdGg7IH0KCmlubGluZSBpbnQgUVBhaW50
RGV2aWNlOjp4MTFDZWxscygpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2Nl
bGxzIDogeF9hcHBjZWxsczsgfQoKaW5saW5lIFF0OjpIQU5ETEUgUVBhaW50RGV2aWNlOjp4MTFD
b2xvcm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2NvbG9ybWFwIDog
eF9hcHBjb2xvcm1hcDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFEZWZhdWx0Q29s
b3JtYXAoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZWZjb2xvcm1hcCA6
IHhfYXBwZGVmY29sb3JtYXA7IH0KCmlubGluZSB2b2lkICpRUGFpbnREZXZpY2U6OngxMVZpc3Vh
bCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X3Zpc3VhbCA6IHhfYXBwdmlz
dWFsOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMURlZmF1bHRWaXN1YWwoKSBjb25z
dAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZWZ2aXN1YWwgOiB4X2FwcGRlZnZpc3Vh
bDsgfQoKaW5saW5lIERpc3BsYXkgKlFQYWludERldmljZTo6eDExQXBwRGlzcGxheSgpCnsgcmV0
dXJuIHhfYXBwZGlzcGxheTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMUFwcFNjcmVl
bigpCnsgcmV0dXJuIHhfYXBwc2NyZWVuOyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDEx
QXBwRGVwdGgoIGludCBzY3JlZW4gKQp7IHJldHVybiB4X2FwcGRlcHRoX2Fyclsgc2NyZWVuID09
IC0xID8geF9hcHBzY3JlZW4gOiBzY3JlZW4gXTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6
OngxMUFwcENlbGxzKCBpbnQgc2NyZWVuICkKeyByZXR1cm4geF9hcHBjZWxsc19hcnJbIHNjcmVl
biA9PSAtMSA/IHhfYXBwc2NyZWVuIDogc2NyZWVuIF07IH0KCmlubGluZSBRdDo6SEFORExFIFFQ
YWludERldmljZTo6eDExQXBwUm9vdFdpbmRvdyggaW50IHNjcmVlbiApCnsgcmV0dXJuIHhfYXBw
cm9vdHdpbmRvd19hcnJbIHNjcmVlbiA9PSAtMSA/IHhfYXBwc2NyZWVuIDogc2NyZWVuIF07IH0K
CmlubGluZSBRdDo6SEFORExFIFFQYWludERldmljZTo6eDExQXBwQ29sb3JtYXAoIGludCBzY3Jl
ZW4gKQp7IHJldHVybiB4X2FwcGNvbG9ybWFwX2Fyclsgc2NyZWVuID09IC0xID8geF9hcHBzY3Jl
ZW4gOiBzY3JlZW4gXTsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFBcHBEZWZhdWx0
Q29sb3JtYXAoIGludCBzY3JlZW4gKQp7IHJldHVybiB4X2FwcGRlZmNvbG9ybWFwX2Fyclsgc2Ny
ZWVuID09IC0xID8geF9hcHBzY3JlZW4gOiBzY3JlZW4gXTsgfQoKaW5saW5lIHZvaWQgKlFQYWlu
dERldmljZTo6eDExQXBwVmlzdWFsKCBpbnQgc2NyZWVuICkKeyByZXR1cm4geF9hcHB2aXN1YWxf
YXJyWyBzY3JlZW4gPT0gLTEgPyB4X2FwcHNjcmVlbiA6IHNjcmVlbiBdOyB9CgppbmxpbmUgYm9v
bCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRWaXN1YWwoIGludCBzY3JlZW4gKQp7IHJldHVy
biB4X2FwcGRlZnZpc3VhbF9hcnJbIHNjcmVlbiA9PSAtMSA/IHhfYXBwc2NyZWVuIDogc2NyZWVu
IF07IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFBcHBEZXB0aCgpCnsgcmV0dXJuIHhf
YXBwZGVwdGg7IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFBcHBDZWxscygpCnsgcmV0
dXJuIHhfYXBwY2VsbHM7IH0KCmlubGluZSBRdDo6SEFORExFIFFQYWludERldmljZTo6eDExQXBw
Um9vdFdpbmRvdygpCnsgcmV0dXJuIHhfYXBwcm9vdHdpbmRvdzsgfQoKaW5saW5lIFF0OjpIQU5E
TEUgUVBhaW50RGV2aWNlOjp4MTFBcHBDb2xvcm1hcCgpCnsgcmV0dXJuIHhfYXBwY29sb3JtYXA7
IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6eDExQXBwRGVmYXVsdENvbG9ybWFwKCkKeyBy
ZXR1cm4geF9hcHBkZWZjb2xvcm1hcDsgfQoKaW5saW5lIHZvaWQgKlFQYWludERldmljZTo6eDEx
QXBwVmlzdWFsKCkKeyByZXR1cm4geF9hcHB2aXN1YWw7IH0KCmlubGluZSBib29sIFFQYWludERl
dmljZTo6eDExQXBwRGVmYXVsdFZpc3VhbCgpCnsgcmV0dXJuIHhfYXBwZGVmdmlzdWFsOyB9CgoK
CgoKaW5saW5lIHZvaWQgYml0Qmx0KCBRUGFpbnREZXZpY2UgKmRzdCwgY29uc3QgUVBvaW50ICZk
cCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGFpbnREZXZpY2UgKnNyYywgY29uc3QgUVJl
Y3QgJnNyID1RUmVjdCgwLDAsLTEsLTEpLAogICAgICAgICAgICAgICAgICAgIFF0OjpSYXN0ZXJP
cCByb3A9UXQ6OkNvcHlST1AsIGJvb2wgaWdub3JlTWFzaz1GQUxTRSApCnsKICAgIGJpdEJsdCgg
ZHN0LCBkcC54KCksIGRwLnkoKSwgc3JjLCBzci54KCksIHNyLnkoKSwgc3Iud2lkdGgoKSwgc3Iu
aGVpZ2h0KCksCiAgICAgICAgICAgIHJvcCwgaWdub3JlTWFzayApOwp9CiMgNDUgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4x
L2luY2x1ZGUvcXBhbGV0dGUuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv
cXBhbGV0dGUuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWNvbG9yLmgiIDEK
IyA0NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fjb2xvci5oIgpjb25zdCBRUmdiIFJH
Ql9NQVNLID0gMHgwMGZmZmZmZjsKCiBpbmxpbmUgaW50IHFSZWQoIFFSZ2IgcmdiICkKeyByZXR1
cm4gKGludCkoKHJnYiA+PiAxNikgJiAweGZmKTsgfQoKIGlubGluZSBpbnQgcUdyZWVuKCBRUmdi
IHJnYiApCnsgcmV0dXJuIChpbnQpKChyZ2IgPj4gOCkgJiAweGZmKTsgfQoKIGlubGluZSBpbnQg
cUJsdWUoIFFSZ2IgcmdiICkKeyByZXR1cm4gKGludCkocmdiICYgMHhmZik7IH0KCiBpbmxpbmUg
aW50IHFBbHBoYSggUVJnYiByZ2IgKQp7IHJldHVybiAoaW50KSgocmdiID4+IDI0KSAmIDB4ZmYp
OyB9CgogaW5saW5lIFFSZ2IgcVJnYiggaW50IHIsIGludCBnLCBpbnQgYiApCnsgcmV0dXJuICgw
eGZmIDw8IDI0KSB8ICgociAmIDB4ZmYpIDw8IDE2KSB8ICgoZyAmIDB4ZmYpIDw8IDgpIHwgKGIg
JiAweGZmKTsgfQoKIGlubGluZSBRUmdiIHFSZ2JhKCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQg
YSApCnsgcmV0dXJuICgoYSAmIDB4ZmYpIDw8IDI0KSB8ICgociAmIDB4ZmYpIDw8IDE2KSB8ICgo
ZyAmIDB4ZmYpIDw8IDgpIHwgKGIgJiAweGZmKTsgfQoKIGlubGluZSBpbnQgcUdyYXkoIGludCBy
LCBpbnQgZywgaW50IGIgKQp7IHJldHVybiAocioxMStnKjE2K2IqNSkvMzI7IH0KCiBpbmxpbmUg
aW50IHFHcmF5KCBRUmdiIHJnYiApCnsgcmV0dXJuIHFHcmF5KCBxUmVkKHJnYiksIHFHcmVlbihy
Z2IpLCBxQmx1ZShyZ2IpICk7IH0KCgpjbGFzcyBRQ29sb3IKewpwdWJsaWM6CiAgICBlbnVtIFNw
ZWMgeyBSZ2IsIEhzdiB9OwoKICAgIFFDb2xvcigpOwogICAgUUNvbG9yKCBpbnQgciwgaW50IGcs
IGludCBiICk7CiAgICBRQ29sb3IoIGludCB4LCBpbnQgeSwgaW50IHosIFNwZWMgKTsKICAgIFFD
b2xvciggUVJnYiByZ2IsIHVpbnQgcGl4ZWw9MHhmZmZmZmZmZik7CiAgICBRQ29sb3IoIGNvbnN0
IFFTdHJpbmcmIG5hbWUgKTsKICAgIFFDb2xvciggY29uc3QgY2hhciAqbmFtZSApOwogICAgUUNv
bG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgUUNvbG9yICZvcGVyYXRvcj0oIGNvbnN0IFFDb2xv
ciAmICk7CgogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICBib29sIGlzRGlydHkoKSBjb25z
dDsKICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgdm9pZCBzZXROYW1lZENvbG9yKCBjb25z
dCBRU3RyaW5nJiBuYW1lICk7CgogICAgdm9pZCByZ2IoIGludCAqciwgaW50ICpnLCBpbnQgKmIg
KSBjb25zdDsKICAgIFFSZ2IgcmdiKCkgY29uc3Q7CiAgICB2b2lkIHNldFJnYiggaW50IHIsIGlu
dCBnLCBpbnQgYiApOwogICAgdm9pZCBzZXRSZ2IoIFFSZ2IgcmdiICk7CgogICAgaW50IHJlZCgp
IGNvbnN0OwogICAgaW50IGdyZWVuKCkgY29uc3Q7CiAgICBpbnQgYmx1ZSgpIGNvbnN0OwoKICAg
IHZvaWQgaHN2KCBpbnQgKmgsIGludCAqcywgaW50ICp2ICkgY29uc3Q7CiAgICB2b2lkIGdldEhz
diggaW50ICZoLCBpbnQgJnMsIGludCAmdiApIGNvbnN0IHsgaHN2KCAmaCwgJnMsICZ2ICk7IH0K
ICAgIHZvaWQgc2V0SHN2KCBpbnQgaCwgaW50IHMsIGludCB2ICk7CgogICAgUUNvbG9yIGxpZ2h0
KCBpbnQgZiA9IDE1MCApIGNvbnN0OwogICAgUUNvbG9yIGRhcmsoIGludCBmID0gMjAwICkgY29u
c3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdDsKICAgIGJv
b2wgb3BlcmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3Q7CgogICAgdWludCBhbGxvYygp
OwogICAgdWludCBwaXhlbCgpIGNvbnN0OwoKCgogICAgdWludCBhbGxvYyggaW50IHNjcmVlbiAp
OwogICAgdWludCBwaXhlbCggaW50IHNjcmVlbiApIGNvbnN0OwoKCiAgICBzdGF0aWMgaW50IG1h
eENvbG9ycygpOwogICAgc3RhdGljIGludCBudW1CaXRQbGFuZXMoKTsKCiAgICBzdGF0aWMgaW50
IGVudGVyQWxsb2NDb250ZXh0KCk7CiAgICBzdGF0aWMgdm9pZCBsZWF2ZUFsbG9jQ29udGV4dCgp
OwogICAgc3RhdGljIGludCBjdXJyZW50QWxsb2NDb250ZXh0KCk7CiAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95QWxsb2NDb250ZXh0KCBpbnQgKTsKIyAxMzUgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j
bHVkZS9xY29sb3IuaCIKICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgIHN0YXRpYyB2
b2lkIGNsZWFudXAoKTsKCiAgICBlbnVtIHsgRGlydCA9IDB4NDQ0OTUyNTQsIEludmFsaWQgPSAw
eDQ5MDAwMDAwIH07Cgpwcml2YXRlOgogICAgdm9pZCBzZXRTeXN0ZW1OYW1lZENvbG9yKCBjb25z
dCBRU3RyaW5nJiBuYW1lICk7CiAgICB2b2lkIHNldFBpeGVsKCB1aW50IHBpeGVsICk7CiAgICBz
dGF0aWMgdm9pZCBpbml0R2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgdWludCBhcmdiVG9QaXgz
MihRUmdiKTsKICAgIHN0YXRpYyBRQ29sb3IqIGdsb2JhbENvbG9ycygpOwogICAgc3RhdGljIGJv
b2wgY29sb3JfaW5pdDsKICAgIHN0YXRpYyBib29sIGdsb2JhbHNfaW5pdDsKCgoKICAgIHN0YXRp
YyBlbnVtIENvbG9yTW9kZWwgeyBkOCwgZDMyIH0gY29sb3Jtb2RlbDsKICAgIHVuaW9uIHsKICAg
ICAgICBRUmdiIGFyZ2I7CiAgICAgICAgc3RydWN0IEQ4IHsKICAgICAgICAgICAgUVJnYiBhcmdi
OwogICAgICAgICAgICB1Y2hhciBwaXg7CiAgICAgICAgICAgIHVjaGFyIGludmFsaWQ7CiAgICAg
ICAgICAgIHVjaGFyIGRpcnR5OwogICAgICAgICAgICB1Y2hhciBkaXJlY3Q7CiAgICAgICAgfSBk
ODsKICAgICAgICBzdHJ1Y3QgRDMyIHsKICAgICAgICAgICAgUVJnYiBhcmdiOwogICAgICAgICAg
ICB1aW50IHBpeDsKICAgICAgICAgICAgYm9vbCBpbnZhbGlkKCkgY29uc3QgeyByZXR1cm4gYXJn
YiA9PSBRQ29sb3I6OkludmFsaWQgJiYgcGl4ID09IFFDb2xvcjo6RGlydDsgfQogICAgICAgICAg
ICBib29sIHByb2JhYmx5RGlydHkoKSBjb25zdCB7IHJldHVybiBwaXggPT0gUUNvbG9yOjpEaXJ0
OyB9CiAgICAgICAgfSBkMzI7CiAgICB9IGQ7Cn07CgoKaW5saW5lIFFDb2xvcjo6UUNvbG9yKCkK
eyBkLmQzMi5hcmdiID0gSW52YWxpZDsgZC5kMzIucGl4ID0gRGlydDsgfQoKaW5saW5lIFFDb2xv
cjo6UUNvbG9yKCBpbnQgciwgaW50IGcsIGludCBiICkKeyBzZXRSZ2IoIHIsIGcsIGIgKTsgfQoK
aW5saW5lIFFSZ2IgUUNvbG9yOjpyZ2IoKSBjb25zdAp7IHJldHVybiBkLmFyZ2I7IH0KCmlubGlu
ZSBpbnQgUUNvbG9yOjpyZWQoKSBjb25zdAp7IHJldHVybiBxUmVkKGQuYXJnYik7IH0KCmlubGlu
ZSBpbnQgUUNvbG9yOjpncmVlbigpIGNvbnN0CnsgcmV0dXJuIHFHcmVlbihkLmFyZ2IpOyB9Cgpp
bmxpbmUgaW50IFFDb2xvcjo6Ymx1ZSgpIGNvbnN0CnsgcmV0dXJuIHFCbHVlKGQuYXJnYik7IH0K
CmlubGluZSBib29sIFFDb2xvcjo6aXNWYWxpZCgpIGNvbnN0CnsKICAgIGlmICggY29sb3Jtb2Rl
bCA9PSBkOCApCiAgICAgICAgcmV0dXJuICFkLmQ4LmludmFsaWQ7CiAgICBlbHNlCiAgICAgICAg
cmV0dXJuICFkLmQzMi5pbnZhbGlkKCk7Cn0KCmlubGluZSBib29sIFFDb2xvcjo6b3BlcmF0b3I9
PSggY29uc3QgUUNvbG9yICZjICkgY29uc3QKewogICAgcmV0dXJuIGQuYXJnYiA9PSBjLmQuYXJn
YiAmJiBpc1ZhbGlkKCkgPT0gYy5pc1ZhbGlkKCk7Cn0KCmlubGluZSBib29sIFFDb2xvcjo6b3Bl
cmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3QKewogICAgcmV0dXJuICFvcGVyYXRvcj09
KGMpOwp9CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNv
bnN0IFFDb2xvciAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwg
UUNvbG9yICYgKTsKIyA0NCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwYWxldHRlLmgi
IDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FicnVzaC5oIiAxCiMgNDcgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xYnJ1c2guaCIKY2xhc3MgUUJydXNoOiBwdWJsaWMg
UXQKewpmcmllbmQgY2xhc3MgUVBhaW50ZXI7CnB1YmxpYzoKICAgIFFCcnVzaCgpOwogICAgUUJy
dXNoKCBCcnVzaFN0eWxlICk7CiAgICBRQnJ1c2goIGNvbnN0IFFDb2xvciAmLCBCcnVzaFN0eWxl
PVNvbGlkUGF0dGVybiApOwogICAgUUJydXNoKCBjb25zdCBRQ29sb3IgJiwgY29uc3QgUVBpeG1h
cCAmICk7CiAgICBRQnJ1c2goIGNvbnN0IFFCcnVzaCAmICk7CiAgIH5RQnJ1c2goKTsKICAgIFFC
cnVzaCAmb3BlcmF0b3I9KCBjb25zdCBRQnJ1c2ggJiApOwoKICAgIEJydXNoU3R5bGUgc3R5bGUo
KSBjb25zdCB7IHJldHVybiBkYXRhLT5zdHlsZTsgfQogICAgdm9pZCBzZXRTdHlsZSggQnJ1c2hT
dHlsZSApOwogICAgY29uc3QgUUNvbG9yICZjb2xvcigpY29uc3QgeyByZXR1cm4gZGF0YS0+Y29s
b3I7IH0KICAgIHZvaWQgc2V0Q29sb3IoIGNvbnN0IFFDb2xvciAmICk7CiAgICBRUGl4bWFwICpw
aXhtYXAoKSBjb25zdCB7IHJldHVybiBkYXRhLT5waXhtYXA7IH0KICAgIHZvaWQgc2V0UGl4bWFw
KCBjb25zdCBRUGl4bWFwICYgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFCcnVzaCAm
cCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRQnJ1c2ggJmIgKSBjb25zdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIShvcGVyYXRv
cj09KGIpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaCBjb3B5KCkgY29uc3Q7CiAgICB2b2lkIGRl
dGFjaCgpOwogICAgdm9pZCBpbml0KCBjb25zdCBRQ29sb3IgJiwgQnJ1c2hTdHlsZSApOwogICAg
c3RydWN0IFFCcnVzaERhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAgICAgQnJ1c2hTdHlsZSBz
dHlsZTsKICAgICAgICBRQ29sb3IgY29sb3I7CiAgICAgICAgUVBpeG1hcCAqcGl4bWFwOwogICAg
fSAqZGF0YTsKfTsKCgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0g
JiwgY29uc3QgUUJydXNoICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVh
bSAmLCBRQnJ1c2ggJiApOwojIDQ2ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBhbGV0
dGUuaCIgMgoKCgoKY2xhc3MgUUNvbG9yR3JvdXBQcml2YXRlOwoKY2xhc3MgUUNvbG9yR3JvdXAK
ewpwdWJsaWM6CiAgICBRQ29sb3JHcm91cCgpOwogICAgUUNvbG9yR3JvdXAoIGNvbnN0IFFDb2xv
ciAmZm9yZWdyb3VuZCwgY29uc3QgUUNvbG9yICZidXR0b24sCiAgICAgICAgICAgICAgICAgY29u
c3QgUUNvbG9yICZsaWdodCwgY29uc3QgUUNvbG9yICZkYXJrLCBjb25zdCBRQ29sb3IgJm1pZCwK
ICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3IgJnRleHQsIGNvbnN0IFFDb2xvciAmYmFzZSAp
OwogICAgUUNvbG9yR3JvdXAoIGNvbnN0IFFCcnVzaCAmZm9yZWdyb3VuZCwgY29uc3QgUUJydXNo
ICZidXR0b24sCiAgICAgICAgICAgICAgICAgY29uc3QgUUJydXNoICZsaWdodCwgY29uc3QgUUJy
dXNoICZkYXJrLCBjb25zdCBRQnJ1c2ggJm1pZCwKICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1
c2ggJnRleHQsIGNvbnN0IFFCcnVzaCAmYnJpZ2h0X3RleHQsCiAgICAgICAgICAgICAgICAgY29u
c3QgUUJydXNoICZiYXNlLCBjb25zdCBRQnJ1c2ggJmJhY2tncm91bmQpOwogICAgUUNvbG9yR3Jv
dXAoIGNvbnN0IFFDb2xvckdyb3VwICYgKTsKCiAgIH5RQ29sb3JHcm91cCgpOwoKICAgIFFDb2xv
ckdyb3VwJiBvcGVyYXRvciA9KGNvbnN0IFFDb2xvckdyb3VwJik7CgoKICAgIGVudW0gQ29sb3JS
b2xlIHsgRm9yZWdyb3VuZCwgQnV0dG9uLCBMaWdodCwgTWlkbGlnaHQsIERhcmssIE1pZCwKICAg
ICAgICAgICAgICAgICAgICAgVGV4dCwgQnJpZ2h0VGV4dCwgQnV0dG9uVGV4dCwgQmFzZSwgQmFj
a2dyb3VuZCwgU2hhZG93LAogICAgICAgICAgICAgICAgICAgICBIaWdobGlnaHQsIEhpZ2hsaWdo
dGVkVGV4dCwgTGluaywgTGlua1Zpc2l0ZWQsCiAgICAgICAgICAgICAgICAgICAgIE5Db2xvclJv
bGVzIH07CgogICAgY29uc3QgUUNvbG9yICZjb2xvciggQ29sb3JSb2xlICkgY29uc3Q7CiAgICBj
b25zdCBRQnJ1c2ggJmJydXNoKCBDb2xvclJvbGUgKSBjb25zdDsKICAgIHZvaWQgc2V0Q29sb3Io
IENvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yUm9s
ZSwgY29uc3QgUUJydXNoICYgKTsKCiAgICBjb25zdCBRQ29sb3IgJmZvcmVncm91bmQoKSBjb25z
dCB7IHJldHVybiBicltGb3JlZ3JvdW5kXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJ1
dHRvbigpIGNvbnN0IHsgcmV0dXJuIGJyW0J1dHRvbl0uY29sb3IoKTsgfQogICAgY29uc3QgUUNv
bG9yICZsaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJyW0xpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25z
dCBRQ29sb3IgJmRhcmsoKSBjb25zdCB7IHJldHVybiBicltEYXJrXS5jb2xvcigpOyB9CiAgICBj
b25zdCBRQ29sb3IgJm1pZCgpIGNvbnN0IHsgcmV0dXJuIGJyW01pZF0uY29sb3IoKTsgfQogICAg
Y29uc3QgUUNvbG9yICZ0ZXh0KCkgY29uc3QgeyByZXR1cm4gYnJbVGV4dF0uY29sb3IoKTsgfQog
ICAgY29uc3QgUUNvbG9yICZiYXNlKCkgY29uc3QgeyByZXR1cm4gYnJbQmFzZV0uY29sb3IoKTsg
fQogICAgY29uc3QgUUNvbG9yICZiYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gYnJbQmFja2dy
b3VuZF0uY29sb3IoKTsgfQoKICAgIGNvbnN0IFFDb2xvciAmbWlkbGlnaHQoKSBjb25zdCB7IHJl
dHVybiBicltNaWRsaWdodF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZicmlnaHRUZXh0
KCkgY29uc3QgeyByZXR1cm4gYnJbQnJpZ2h0VGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNv
bG9yICZidXR0b25UZXh0KCkgY29uc3QgeyByZXR1cm4gYnJbQnV0dG9uVGV4dF0uY29sb3IoKTsg
fQogICAgY29uc3QgUUNvbG9yICZzaGFkb3coKSBjb25zdCB7IHJldHVybiBicltTaGFkb3ddLmNv
bG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmaGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gYnJb
SGlnaGxpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmhpZ2hsaWdodGVkVGV4dCgp
IGNvbnN0e3JldHVybiBicltIaWdobGlnaHRlZFRleHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFD
b2xvciAmbGluaygpIGNvbnN0IHsgcmV0dXJuIGJyW0xpbmtdLmNvbG9yKCk7IH0KICAgIGNvbnN0
IFFDb2xvciAmbGlua1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBicltMaW5rVmlzaXRlZF0uY29s
b3IoKTsgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNvbG9yR3JvdXAgJmcgKSBjb25z
dDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNvbG9yR3JvdXAgJmcgKSBjb25zdAogICAg
ICAgIHsgcmV0dXJuICEob3BlcmF0b3I9PShnKSk7IH0KCnByaXZhdGU6CiAgICBRQnJ1c2ggKmJy
OwogICAgUUNvbG9yR3JvdXBQcml2YXRlICogZDsKCiAgICBmcmllbmQgY2xhc3MgUVBhbGV0dGU7
Cn07CgoKY2xhc3MgUVBhbGV0dGUKewpwdWJsaWM6CiAgICBRUGFsZXR0ZSgpOwogICAgUVBhbGV0
dGUoIGNvbnN0IFFDb2xvciAmYnV0dG9uICk7CiAgICBRUGFsZXR0ZSggY29uc3QgUUNvbG9yICZi
dXR0b24sIGNvbnN0IFFDb2xvciAmYmFja2dyb3VuZCApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFD
b2xvckdyb3VwICZhY3RpdmUsIGNvbnN0IFFDb2xvckdyb3VwICZkaXNhYmxlZCwKICAgICAgICAg
ICAgICBjb25zdCBRQ29sb3JHcm91cCAmaW5hY3RpdmUgKTsKICAgIFFQYWxldHRlKCBjb25zdCBR
UGFsZXR0ZSAmICk7CiAgICB+UVBhbGV0dGUoKTsKICAgIFFQYWxldHRlICZvcGVyYXRvcj0oIGNv
bnN0IFFQYWxldHRlICYgKTsKCiAgICBlbnVtIENvbG9yR3JvdXAgeyBEaXNhYmxlZCwgQWN0aXZl
LCBJbmFjdGl2ZSwgTkNvbG9yR3JvdXBzLCBOb3JtYWw9QWN0aXZlIH07CgogICAgY29uc3QgUUNv
bG9yICZjb2xvciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0Owog
ICAgY29uc3QgUUJydXNoICZicnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9s
ZSApIGNvbnN0OwogICAgdm9pZCBzZXRDb2xvciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNv
bG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yR3JvdXAs
IFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgdm9pZCBzZXRD
b2xvciggUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQg
c2V0QnJ1c2goIFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAg
UVBhbGV0dGUgY29weSgpIGNvbnN0OwoKICAgIGNvbnN0IFFDb2xvckdyb3VwICZhY3RpdmUoKSBj
b25zdCB7IHJldHVybiBkYXRhLT5hY3RpdmU7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZkaXNh
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmRpc2FibGVkOyB9CiAgICBjb25zdCBRQ29sb3JH
cm91cCAmaW5hY3RpdmUoKSBjb25zdCB7IHJldHVybiBkYXRhLT5pbmFjdGl2ZTsgfQoKICAgIGNv
bnN0IFFDb2xvckdyb3VwICZub3JtYWwoKSBjb25zdCB7IHJldHVybiBhY3RpdmUoKTsgfQoKCiAg
ICB2b2lkIHNldEFjdGl2ZSggY29uc3QgUUNvbG9yR3JvdXAgJiApOwogICAgdm9pZCBzZXREaXNh
YmxlZCggY29uc3QgUUNvbG9yR3JvdXAgJiApOwogICAgdm9pZCBzZXRJbmFjdGl2ZSggY29uc3Qg
UUNvbG9yR3JvdXAgJiApOwoKICAgIHZvaWQgc2V0Tm9ybWFsKCBjb25zdCBRQ29sb3JHcm91cCAm
IGNnICkgeyBzZXRBY3RpdmUoY2cpOyB9CgoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBh
bGV0dGUgJnAgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBhbGV0dGUgJnAg
KSBjb25zdAogICAgICAgICAgICAgIHsgcmV0dXJuICEob3BlcmF0b3I9PShwKSk7IH0KICAgIGJv
b2wgaXNDb3B5T2YoIGNvbnN0IFFQYWxldHRlICYgKTsKCiAgICBpbnQgc2VyaWFsTnVtYmVyKCkg
Y29uc3QgeyByZXR1cm4gZGF0YS0+c2VyX25vOyB9CgoKICAgIHN0YXRpYyBRQ29sb3JHcm91cDo6
Q29sb3JSb2xlIGZvcmVncm91bmRSb2xlRnJvbU1vZGUoIFF0OjpCYWNrZ3JvdW5kTW9kZSBtb2Rl
ICk7CiAgICBzdGF0aWMgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSBiYWNrZ3JvdW5kUm9sZUZyb21N
b2RlKCBRdDo6QmFja2dyb3VuZE1vZGUgbW9kZSk7Cgpwcml2YXRlOgogICAgdm9pZCBkZXRhY2go
KTsKICAgIGNvbnN0IFFCcnVzaCAmZGlyZWN0QnJ1c2goIENvbG9yR3JvdXAsIFFDb2xvckdyb3Vw
OjpDb2xvclJvbGUgKSBjb25zdDsKICAgIHZvaWQgZGlyZWN0U2V0QnJ1c2goIENvbG9yR3JvdXAs
IFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCYgKTsKCiAgICBzdHJ1Y3QgUVBh
bERhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAgICAgUUNvbG9yR3JvdXAgZGlzYWJsZWQ7CiAg
ICAgICAgUUNvbG9yR3JvdXAgYWN0aXZlOwogICAgICAgIGludCBzZXJfbm87CiAgICAgICAgUUNv
bG9yR3JvdXAgaW5hY3RpdmU7CiAgICB9ICpkYXRhOwp9OwoKCgoKCgoKIFFEYXRhU3RyZWFtICZv
cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUNvbG9yR3JvdXAgJiApOwoKIFFEYXRh
U3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUGFsZXR0ZSAmICk7CiBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBhbGV0dGUgJiApOwojIDQ2
ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXdpZGdldC5oIiAyCiMgMSAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3Fmb250LmgiIDEKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p
bmNsdWRlL3Fmb250LmgiCmNsYXNzIFFGb250UHJpdmF0ZTsKY2xhc3MgUVN0cmluZ0xpc3Q7CmNs
YXNzIFFUZXh0Rm9ybWF0Q29sbGVjdGlvbjsKCmNsYXNzIFFGb250CnsKcHVibGljOgogICAgZW51
bSBTdHlsZUhpbnQgewogICAgICAgIEhlbHZldGljYSwgU2Fuc1NlcmlmID0gSGVsdmV0aWNhLAog
ICAgICAgIFRpbWVzLCBTZXJpZiA9IFRpbWVzLAogICAgICAgIENvdXJpZXIsIFR5cGVXcml0ZXIg
PSBDb3VyaWVyLAogICAgICAgIE9sZEVuZ2xpc2gsIERlY29yYXRpdmUgPSBPbGRFbmdsaXNoLAog
ICAgICAgIFN5c3RlbSwKICAgICAgICBBbnlTdHlsZQogICAgfTsKCiAgICBlbnVtIFN0eWxlU3Ry
YXRlZ3kgewogICAgICAgIFByZWZlckRlZmF1bHQgPSAweDAwMDEsCiAgICAgICAgUHJlZmVyQml0
bWFwID0gMHgwMDAyLAogICAgICAgIFByZWZlckRldmljZSA9IDB4MDAwNCwKICAgICAgICBQcmVm
ZXJPdXRsaW5lID0gMHgwMDA4LAogICAgICAgIEZvcmNlT3V0bGluZSA9IDB4MDAxMCwKICAgICAg
ICBQcmVmZXJNYXRjaCA9IDB4MDAyMCwKICAgICAgICBQcmVmZXJRdWFsaXR5ID0gMHgwMDQwLAog
ICAgICAgIFByZWZlckFudGlhbGlhcyA9IDB4MDA4MCwKICAgICAgICBOb0FudGlhbGlhcyA9IDB4
MDEwMAogICAgfTsKCiAgICBlbnVtIFdlaWdodCB7CiAgICAgICAgTGlnaHQgPSAyNSwKICAgICAg
ICBOb3JtYWwgPSA1MCwKICAgICAgICBEZW1pQm9sZCA9IDYzLAogICAgICAgIEJvbGQgPSA3NSwK
ICAgICAgICBCbGFjayA9IDg3CiAgICB9OwoKCiAgICBRRm9udCgpOwoKICAgIFFGb250KCBjb25z
dCBRU3RyaW5nICZmYW1pbHksIGludCBwb2ludFNpemUgPSAxMiwgaW50IHdlaWdodCA9IE5vcm1h
bCwKICAgICAgICAgICBib29sIGl0YWxpYyA9IEZBTFNFICk7CgogICAgUUZvbnQoIGNvbnN0IFFG
b250ICYgKTsKCiAgICB+UUZvbnQoKTsKCiAgICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0OwogICAg
dm9pZCBzZXRGYW1pbHkoIGNvbnN0IFFTdHJpbmcgJik7CgogICAgaW50IHBvaW50U2l6ZSgpIGNv
bnN0OwogICAgZmxvYXQgcG9pbnRTaXplRmxvYXQoKSBjb25zdDsKICAgIHZvaWQgc2V0UG9pbnRT
aXplKCBpbnQgKTsKICAgIHZvaWQgc2V0UG9pbnRTaXplRmxvYXQoIGZsb2F0ICk7CgogICAgaW50
IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRQaXhlbFNpemUoIGludCApOwogICAgdm9p
ZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsKCiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7CiAg
ICB2b2lkIHNldFdlaWdodCggaW50ICk7CgogICAgYm9vbCBib2xkKCkgY29uc3Q7CiAgICB2b2lk
IHNldEJvbGQoIGJvb2wgKTsKCiAgICBib29sIGl0YWxpYygpIGNvbnN0OwogICAgdm9pZCBzZXRJ
dGFsaWMoIGJvb2wgKTsKCiAgICBib29sIHVuZGVybGluZSgpIGNvbnN0OwogICAgdm9pZCBzZXRV
bmRlcmxpbmUoIGJvb2wgKTsKCiAgICBib29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAgdm9pZCBz
ZXRTdHJpa2VPdXQoIGJvb2wgKTsKCiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25zdDsKICAgIHZv
aWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwoKICAgIFN0eWxlSGludCBzdHlsZUhpbnQoKSBjb25z
dDsKICAgIFN0eWxlU3RyYXRlZ3kgc3R5bGVTdHJhdGVneSgpIGNvbnN0OwogICAgdm9pZCBzZXRT
dHlsZUhpbnQoIFN0eWxlSGludCwgU3R5bGVTdHJhdGVneSA9IFByZWZlckRlZmF1bHQgKTsKICAg
IHZvaWQgc2V0U3R5bGVTdHJhdGVneSggU3R5bGVTdHJhdGVneSBzICk7CgoKICAgIGJvb2wgcmF3
TW9kZSgpIGNvbnN0OwogICAgdm9pZCBzZXRSYXdNb2RlKCBib29sICk7CgoKICAgIGJvb2wgZXhh
Y3RNYXRjaCgpIGNvbnN0OwoKICAgIFFGb250ICZvcGVyYXRvcj0oIGNvbnN0IFFGb250ICYgKTsK
ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVy
YXRvciE9KCBjb25zdCBRRm9udCAmICkgY29uc3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBR
Rm9udCAmICkgY29uc3Q7CgoKCgoKICAgIFF0OjpIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgog
ICAgdm9pZCBzZXRSYXdOYW1lKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFt
ZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcga2V5KCkgY29uc3Q7CgogICAgUVN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0OwogICAgYm9vbCBmcm9tU3RyaW5nKGNvbnN0IFFTdHJpbmcgJik7CgoKICAgIHN0
YXRpYyBRU3RyaW5nIHN1YnN0aXR1dGUoY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyBRU3Ry
aW5nTGlzdCBzdWJzdGl0dXRlcyhjb25zdCBRU3RyaW5nICYpOwogICAgc3RhdGljIFFTdHJpbmdM
aXN0IHN1YnN0aXR1dGlvbnMoKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbihj
b25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1
YnN0aXR1dGlvbnMoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmdMaXN0ICYpOwogICAgc3Rh
dGljIHZvaWQgcmVtb3ZlU3Vic3RpdHV0aW9uKGNvbnN0IFFTdHJpbmcgJik7CgogICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZvaWQgY2xlYW51cCgpOwogICAgc3RhdGlj
IHZvaWQgY2FjaGVTdGF0aXN0aWNzKCk7CgoKCgoKCgogICAgZW51bSBTY3JpcHQgewoKICAgICAg
ICBMYXRpbiwKICAgICAgICBHcmVlaywKICAgICAgICBDeXJpbGxpYywKICAgICAgICBBcm1lbmlh
biwKICAgICAgICBHZW9yZ2lhbiwKICAgICAgICBSdW5pYywKICAgICAgICBPZ2hhbSwKICAgICAg
ICBTcGFjaW5nTW9kaWZpZXJzLAogICAgICAgIENvbWJpbmluZ01hcmtzLAoKCiAgICAgICAgSGVi
cmV3LAogICAgICAgIEFyYWJpYywKICAgICAgICBTeXJpYWMsCiAgICAgICAgVGhhYW5hLAoKCiAg
ICAgICAgRGV2YW5hZ2FyaSwKICAgICAgICBCZW5nYWxpLAogICAgICAgIEd1cm11a2hpLAogICAg
ICAgIEd1amFyYXRpLAogICAgICAgIE9yaXlhLAogICAgICAgIFRhbWlsLAogICAgICAgIFRlbHVn
dSwKICAgICAgICBLYW5uYWRhLAogICAgICAgIE1hbGF5YWxhbSwKICAgICAgICBTaW5oYWxhLAog
ICAgICAgIFRoYWksCiAgICAgICAgTGFvLAogICAgICAgIFRpYmV0YW4sCiAgICAgICAgTXlhbm1h
ciwKICAgICAgICBLaG1lciwKCgogICAgICAgIEhhbiwKICAgICAgICBIaXJhZ2FuYSwKICAgICAg
ICBLYXRha2FuYSwKICAgICAgICBIYW5ndWwsCiAgICAgICAgQm9wb21vZm8sCiAgICAgICAgWWks
CgoKICAgICAgICBFdGhpb3BpYywKICAgICAgICBDaGVyb2tlZSwKICAgICAgICBDYW5hZGlhbkFi
b3JpZ2luYWwsCiAgICAgICAgTW9uZ29saWFuLAoKCiAgICAgICAgQ3VycmVuY3lTeW1ib2xzLAog
ICAgICAgIExldHRlcmxpa2VTeW1ib2xzLAogICAgICAgIE51bWJlckZvcm1zLAogICAgICAgIE1h
dGhlbWF0aWNhbE9wZXJhdG9ycywKICAgICAgICBUZWNobmljYWxTeW1ib2xzLAogICAgICAgIEdl
b21ldHJpY1N5bWJvbHMsCiAgICAgICAgTWlzY2VsbGFuZW91c1N5bWJvbHMsCiAgICAgICAgRW5j
bG9zZWRBbmRTcXVhcmUsCiAgICAgICAgQnJhaWxsZSwKCiAgICAgICAgVW5pY29kZSwKCgogICAg
ICAgIE5TY3JpcHRzLAogICAgICAgIFVua25vd25TY3JpcHQgPSBOU2NyaXB0cywKCiAgICAgICAg
Tm9TY3JpcHQsCgoKCgoKCiAgICAgICAgSGFuWDExLAoKICAgICAgICBMYXRpbkJhc2ljID0gTGF0
aW4sCiAgICAgICAgTGF0aW5FeHRlbmRlZEFfMiA9IEhhblgxMSArIDEsCiAgICAgICAgTGF0aW5F
eHRlbmRlZEFfMywKICAgICAgICBMYXRpbkV4dGVuZGVkQV80LAogICAgICAgIExhdGluRXh0ZW5k
ZWRBXzE0LAogICAgICAgIExhdGluRXh0ZW5kZWRBXzE1LAogICAgICAgIEthdGFrYW5hSGFsZldp
ZHRoLAoKICAgICAgICBMYXN0UHJpdmF0ZVNjcmlwdAogICAgfTsKCiAgICBRU3RyaW5nIGRlZmF1
bHRGYW1pbHkoKSBjb25zdDsKICAgIFFTdHJpbmcgbGFzdFJlc29ydEZhbWlseSgpIGNvbnN0Owog
ICAgUVN0cmluZyBsYXN0UmVzb3J0Rm9udCgpIGNvbnN0OwoKCgogICAgc3RhdGljIFFGb250IGRl
ZmF1bHRGb250KCk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udCggY29uc3QgUUZvbnQg
JiApOwoKCgoKcHJvdGVjdGVkOgoKICAgIGJvb2wgZGlydHkoKSBjb25zdDsKICAgIGludCBkZWNp
UG9pbnRTaXplKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250KCBRRm9udFByaXZhdGUgKiwg
Ym9vbCBkZWVwID0gVFJVRSApOwogICAgUUZvbnQoIFFGb250UHJpdmF0ZSAqLCBRUGFpbnREZXZp
Y2UgKnBkICk7CgogICAgdm9pZCBkZXRhY2goKTsKIyAyOTggIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xZm9udC5oIgogICAgdm9pZCB4MTFTZXRTY3JlZW4oIGludCBzY3JlZW4gPSAtMSAp
OwogICAgaW50IHgxMVNjcmVlbigpIGNvbnN0OwoKCiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRy
aWNzOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRl
cjsKICAgIGZyaWVuZCBjbGFzcyBRUFNQcmludGVyRm9udDsKICAgIGZyaWVuZCBjbGFzcyBRQXBw
bGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRVGV4
dEZvcm1hdENvbGxlY3Rpb247CgoKICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg
UURhdGFTdHJlYW0gJiwgY29uc3QgUUZvbnQgJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZv
cGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CgoKICAgIFFGb250UHJpdmF0ZSAq
ZDsKfTsKCgppbmxpbmUgYm9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdlaWdodCgp
ID4gTm9ybWFsOyB9CgoKaW5saW5lIHZvaWQgUUZvbnQ6OnNldEJvbGQoIGJvb2wgZW5hYmxlICkK
eyBzZXRXZWlnaHQoIGVuYWJsZSA/IEJvbGQgOiBOb3JtYWwgKTsgfQojIDMzNCAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3Fmb250LmgiCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURh
dGFTdHJlYW0gJiwgY29uc3QgUUZvbnQgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFE
YXRhU3RyZWFtICYsIFFGb250ICYgKTsKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl
L3F3aWRnZXQuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZm9udG1ldHJp
Y3MuaCIgMQojIDQ2ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWZvbnRtZXRyaWNzLmgi
CmNsYXNzIFFGb250U3RydWN0OwpjbGFzcyBRVGV4dENvZGVjOwpjbGFzcyBRVGV4dFBhcmFnOwoK
Y2xhc3MgUUZvbnRNZXRyaWNzCnsKcHVibGljOgogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRRm9u
dCAmICk7CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFGb250TWV0cmljcyAmICk7CiAgICB+UUZv
bnRNZXRyaWNzKCk7CgogICAgUUZvbnRNZXRyaWNzICZvcGVyYXRvcj0oIGNvbnN0IFFGb250TWV0
cmljcyAmICk7CgogICAgaW50IGFzY2VudCgpIGNvbnN0OwogICAgaW50IGRlc2NlbnQoKSBjb25z
dDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIGludCBsZWFkaW5nKCkgY29uc3Q7CiAgICBp
bnQgbGluZVNwYWNpbmcoKSBjb25zdDsKICAgIGludCBtaW5MZWZ0QmVhcmluZygpIGNvbnN0Owog
ICAgaW50IG1pblJpZ2h0QmVhcmluZygpIGNvbnN0OwogICAgaW50IG1heFdpZHRoKCkgY29uc3Q7
CgogICAgYm9vbCBpbkZvbnQoUUNoYXIpIGNvbnN0OwoKICAgIGludCBsZWZ0QmVhcmluZyhRQ2hh
cikgY29uc3Q7CiAgICBpbnQgcmlnaHRCZWFyaW5nKFFDaGFyKSBjb25zdDsKICAgIGludCB3aWR0
aCggY29uc3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBjb25zdDsKCiAgICBpbnQgd2lkdGgo
IFFDaGFyICkgY29uc3Q7CgogICAgaW50IHdpZHRoKCBjaGFyIGMgKSBjb25zdCB7IHJldHVybiB3
aWR0aCggKFFDaGFyKSBjICk7IH0KCgogICAgaW50IGNoYXJXaWR0aCggY29uc3QgUVN0cmluZyAm
c3RyLCBpbnQgcG9zICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGNvbnN0IFFTdHJp
bmcgJiwgaW50IGxlbiA9IC0xICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIFFDaGFy
ICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGlu
dCBoLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmcmIHN0ciwgaW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAqdGFiYXJyYXk9MCwgUVRleHRQYXJhZyAqKmludGVybj0wICkgY29uc3Q7
CiAgICBRU2l6ZSBzaXplKCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
U3RyaW5nJiBzdHIsIGludCBsZW49LTEsIGludCB0YWJzdG9wcz0wLAogICAgICAgICAgICAgICAg
ICAgICAgaW50ICp0YWJhcnJheT0wLCBRVGV4dFBhcmFnICoqaW50ZXJuPTAgKSBjb25zdDsKCiAg
ICBpbnQgdW5kZXJsaW5lUG9zKCkgY29uc3Q7CiAgICBpbnQgc3RyaWtlT3V0UG9zKCkgY29uc3Q7
CiAgICBpbnQgbGluZVdpZHRoKCkgY29uc3Q7Cgpwcml2YXRlOgogICAgUUZvbnRNZXRyaWNzKCBj
b25zdCBRUGFpbnRlciAqICk7CiAgICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIg
KiApOwojIDEwNCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fmb250bWV0cmljcy5oIgog
ICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBm
cmllbmQgY2xhc3MgUVRleHRGb3JtYXQ7CgoKCgogICAgUUZvbnRQcml2YXRlICpkOwogICAgUVBh
aW50ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxhZ3M7CgogICAgYm9vbCB1bmRlcmxpbmVGbGFnKCkg
Y29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgxKSAhPSAwOyB9CiAgICBib29sIHN0cmlrZU91dEZs
YWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDIpICE9IDA7IH0KICAgIHZvaWQgc2V0VW5k
ZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgxOyB9CiAgICB2b2lkIHNldFN0cmlrZU91dEZsYWco
KSB7IGZsYWdzIHw9IDB4MjsgfQp9OwojIDQ4ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv
cXdpZGdldC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fmb250aW5mby5o
IiAxCiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZm9udGluZm8uaCIKY2xhc3Mg
UUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7CiAgICBR
Rm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgICB+UUZvbnRJbmZvKCk7CgogICAgUUZv
bnRJbmZvICZvcGVyYXRvcj0oIGNvbnN0IFFGb250SW5mbyAmICk7CgogICAgUVN0cmluZyBmYW1p
bHkoKSBjb25zdDsKICAgIGludCBwaXhlbFNpemUoKSBjb25zdDsKICAgIGludCBwb2ludFNpemUo
KSBjb25zdDsKICAgIGJvb2wgaXRhbGljKCkgY29uc3Q7CiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7
CiAgICBib29sIGJvbGQoKSBjb25zdDsKICAgIGJvb2wgdW5kZXJsaW5lKCkgY29uc3Q7CiAgICBi
b29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAgYm9vbCBmaXhlZFBpdGNoKCkgY29uc3Q7CiAgICBR
Rm9udDo6U3R5bGVIaW50IHN0eWxlSGludCgpIGNvbnN0OwogICAgYm9vbCByYXdNb2RlKCkgY29u
c3Q7CgogICAgYm9vbCBleGFjdE1hdGNoKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250SW5m
byggY29uc3QgUVBhaW50ZXIgKiApOwogICAgc3RhdGljIHZvaWQgcmVzZXQoIGNvbnN0IFFQYWlu
dGVyICogKTsKCiAgICBRRm9udFByaXZhdGUgKmQ7CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAg
IGludCBmbGFnczsKCiAgICBib29sIHVuZGVybGluZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxh
Z3MgJiAweDEpICE9IDA7IH0KICAgIGJvb2wgc3RyaWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJu
IChmbGFncyAmIDB4MikgIT0gMDsgfQogICAgYm9vbCBleGFjdE1hdGNoRmxhZygpIGNvbnN0IHsg
cmV0dXJuIChmbGFncyAmIDB4NCkgIT0gMDsgfQogICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkg
eyBmbGFncyB8PSAweDE7IH0KICAgIHZvaWQgc2V0U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0g
MHgyOyB9CiAgICB2b2lkIHNldEV4YWN0TWF0Y2hGbGFnKCkgeyBmbGFncyB8PSAweDQ7IH0KCiAg
ICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgpp
bmxpbmUgYm9vbCBRRm9udEluZm86OmJvbGQoKSBjb25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IFFG
b250OjpOb3JtYWw7IH0KIyA0OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRnZXQu
aCIgMgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc2l6ZXBvbGljeS5oIiAxCiMg
NDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc2l6ZXBvbGljeS5oIgojIDEgIi91c3Iv
bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3FzaXplcG9saWN5LmgiIDIKCgoKCmNsYXNzIFFTaXplUG9saWN5CnsKcHJp
dmF0ZToKICAgIGVudW0geyBIU2l6ZSA9IDYsIEhNYXNrID0gMHgzZiwgVk1hc2sgPSBITWFzayA8
PCBIU2l6ZSwKICAgICAgICAgICBNYXlHcm93ID0gMSwgRXhwTWFzayA9IDIsIE1heVNocmluayA9
IDQgfTsKcHVibGljOgogICAgZW51bSBTaXplVHlwZSB7IEZpeGVkID0gMCwKICAgICAgICAgICAg
ICAgICAgICBNaW5pbXVtID0gTWF5R3JvdywKICAgICAgICAgICAgICAgICAgICBNYXhpbXVtID0g
TWF5U2hyaW5rLAogICAgICAgICAgICAgICAgICAgIFByZWZlcnJlZCA9IE1heUdyb3cgfCBNYXlT
aHJpbmssCiAgICAgICAgICAgICAgICAgICAgTWluaW11bUV4cGFuZGluZyA9IE1heUdyb3cgfCBF
eHBNYXNrLAogICAgICAgICAgICAgICAgICAgIEV4cGFuZGluZyA9IE1heUdyb3cgfCBNYXlTaHJp
bmsgfCBFeHBNYXNrLAogICAgICAgICAgICAgICAgICAgIElnbm9yZWQgPSBFeHBNYXNrIH07Cgog
ICAgZW51bSBFeHBhbmREYXRhIHsgTm9EaXJlY3Rpb24gPSAwLAogICAgICAgICAgICAgICAgICAg
ICAgSG9yaXpvbnRhbGx5ID0gMSwKICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsbHkgPSAy
LAoKICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWwgPSBIb3Jpem9udGFsbHksCiAgICAg
ICAgICAgICAgICAgICAgICBWZXJ0aWNhbCA9IFZlcnRpY2FsbHksCgogICAgICAgICAgICAgICAg
ICAgICAgQm90aERpcmVjdGlvbnMgPSBIb3Jpem9udGFsbHkgfCBWZXJ0aWNhbGx5IH07CgogICAg
UVNpemVQb2xpY3koKSA6IGRhdGEoIDAgKSB7IH0KCiAgICBRU2l6ZVBvbGljeSggU2l6ZVR5cGUg
aG9yLCBTaXplVHlwZSB2ZXIsIGJvb2wgaGZ3ID0gRkFMU0UgKQogICAgICAgIDogZGF0YSggaG9y
IHwgKHZlcjw8SFNpemUpIHwgKGhmdyA/IChRX1VJTlQzMikoMTw8MipIU2l6ZSkgOiAwKSApIHsg
fQogICAgUVNpemVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVyLCB1Y2hhciBob3Jz
LCB1Y2hhciB2ZXJzLCBib29sIGhmdyA9IEZBTFNFICk7CgogICAgU2l6ZVR5cGUgaG9yRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIChTaXplVHlwZSkoIGRhdGEgJiBITWFzayApOyB9CiAgICBTaXplVHlw
ZSB2ZXJEYXRhKCkgY29uc3QgeyByZXR1cm4gKFNpemVUeXBlKSggKGRhdGEgJiBWTWFzaykgPj4g
SFNpemUgKTsgfQoKICAgIGJvb2wgbWF5U2hyaW5rSG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1
cm4gaG9yRGF0YSgpICYgTWF5U2hyaW5rIHx8IGhvckRhdGEoKSA9PSBJZ25vcmVkOyB9CiAgICBi
b29sIG1heVNocmlua1ZlcnRpY2FsbHkoKSBjb25zdCB7IHJldHVybiB2ZXJEYXRhKCkgJiBNYXlT
aHJpbmsgfHwgdmVyRGF0YSgpID09IElnbm9yZWQ7IH0KICAgIGJvb2wgbWF5R3Jvd0hvcml6b250
YWxseSgpIGNvbnN0IHsgcmV0dXJuIGhvckRhdGEoKSAmIE1heUdyb3cgfHwgaG9yRGF0YSgpID09
IElnbm9yZWQ7IH0KICAgIGJvb2wgbWF5R3Jvd1ZlcnRpY2FsbHkoKSBjb25zdCB7IHJldHVybiB2
ZXJEYXRhKCkgJiBNYXlHcm93IHx8IHZlckRhdGEoKSA9PSBJZ25vcmVkOyB9CgogICAgRXhwYW5k
RGF0YSBleHBhbmRpbmcoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiAoRXhwYW5kRGF0YSko
IChpbnQpKHZlckRhdGEoKSAmIEV4cE1hc2sgPyBWZXJ0aWNhbGx5IDogMCkgfAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChpbnQpKGhvckRhdGEoKSAmIEV4cE1hc2sgPyBIb3Jpem9udGFs
bHkgOiAwKSApOwogICAgfQoKICAgIHZvaWQgc2V0SG9yRGF0YSggU2l6ZVR5cGUgZCApIHsgZGF0
YSA9IChRX1VJTlQzMikoZGF0YSAmIH5ITWFzaykgfCBkOyB9CiAgICB2b2lkIHNldFZlckRhdGEo
IFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoUV9VSU5UMzIpKGRhdGEgJiB+KEhNYXNrIDw8IEhTaXpl
KSkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGQgPDwgSFNp
emUpOyB9CgogICAgdm9pZCBzZXRIZWlnaHRGb3JXaWR0aCggYm9vbCBiICkgeyBkYXRhID0gYiA/
IChRX1VJTlQzMikoIGRhdGEgfCAoIDEgPDwgMipIU2l6ZSApICkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKFFfVUlOVDMyKSggZGF0YSAmIH4oIDEgPDwg
MipIU2l6ZSApICk7IH0KICAgIGJvb2wgaGFzSGVpZ2h0Rm9yV2lkdGgoKSBjb25zdCB7IHJldHVy
biBkYXRhICYgKCAxIDw8IDIqSFNpemUgKTsgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3Qg
UVNpemVQb2xpY3kmIHMgKSBjb25zdCB7IHJldHVybiBkYXRhID09IHMuZGF0YTsgfQogICAgYm9v
bCBvcGVyYXRvciE9KCBjb25zdCBRU2l6ZVBvbGljeSYgcyApIGNvbnN0IHsgcmV0dXJuIGRhdGEg
IT0gcy5kYXRhOyB9CgoKICAgIHVpbnQgaG9yU3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEg
Pj4gMjQ7IH0KICAgIHVpbnQgdmVyU3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIChkYXRhID4+IDE2
KSAmIDB4ZmY7IH0KICAgIHZvaWQgc2V0SG9yU3RyZXRjaCggdWNoYXIgc2YgKSB7IGRhdGEgPSAo
ZGF0YSYweDAwZmZmZmZmKSB8ICh1aW50KHNmKTw8MjQpOyB9CiAgICB2b2lkIHNldFZlclN0cmV0
Y2goIHVjaGFyIHNmICkgeyBkYXRhID0gKGRhdGEmMHhmZjAwZmZmZikgfCAodWludChzZik8PDE2
KTsgfQogICAgaW5saW5lIHZvaWQgdHJhbnNwb3NlKCk7Cgpwcml2YXRlOgogICAgUVNpemVQb2xp
Y3koIGludCBpICkgOiBkYXRhKCAoUV9VSU5UMzIpaSApIHsgfQoKICAgIFFfVUlOVDMyIGRhdGE7
Cn07CgppbmxpbmUgUVNpemVQb2xpY3k6OlFTaXplUG9saWN5KCBTaXplVHlwZSBob3IsIFNpemVU
eXBlIHZlciwgdWNoYXIgaG9ycywgdWNoYXIgdmVycywgYm9vbCBoZncgKQogICAgOiBkYXRhKCBo
b3IgfCAodmVyPDxIU2l6ZSkgfCAoaGZ3ID8gKFFfVUlOVDMyKSgxPDwyKkhTaXplKSA6IDApICkg
ewogICAgc2V0SG9yU3RyZXRjaCggaG9ycyApOwogICAgc2V0VmVyU3RyZXRjaCggdmVycyApOwp9
CgppbmxpbmUgdm9pZCBRU2l6ZVBvbGljeTo6dHJhbnNwb3NlKCkgewogICAgKnRoaXMgPSBRU2l6
ZVBvbGljeSggdmVyRGF0YSgpLCBob3JEYXRhKCksIHZlclN0cmV0Y2goKSwgaG9yU3RyZXRjaCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgaGFzSGVpZ2h0Rm9yV2lkdGgoKSApOwp9CiMgNTAg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiIDIKCgpjbGFzcyBRTGF5b3V0
OwpzdHJ1Y3QgUVdFeHRyYTsKc3RydWN0IFFUTFdFeHRyYTsKY2xhc3MgUUZvY3VzRGF0YTsKY2xh
c3MgUUN1cnNvcjsKY2xhc3MgUVdTUmVnaW9uTWFuYWdlcjsKY2xhc3MgUVN0eWxlOwoKY2xhc3Mg
UVdpZGdldCA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVBhaW50RGV2aWNlCnsKICAgIHB1Ymxp
YzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2
aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZv
a2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0
KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2
KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBR
VmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmpl
Y3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0
ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRm
OCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0
YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAg
CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAog
ICAKCiAgIAogICAKCgogICAKICAgCiAgIAoKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGlj
OgogICAgZXhwbGljaXQgUVdpZGdldCggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5h
bWU9MCwgV0ZsYWdzIGY9MCApOwogICAgflFXaWRnZXQoKTsKCiAgICBXSWQgd2luSWQoKSBjb25z
dDsKICAgIHZvaWQgc2V0TmFtZSggY29uc3QgY2hhciAqbmFtZSApOwoKCgogICAgUVN0eWxlICZz
dHlsZSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZSggUVN0eWxlICogKTsKICAgIFFTdHlsZSog
c2V0U3R5bGUoIGNvbnN0IFFTdHJpbmcmICk7CgoKCiAgICBib29sIGlzVG9wTGV2ZWwoKSBjb25z
dDsKICAgIGJvb2wgaXNEaWFsb2coKSBjb25zdDsKICAgIGJvb2wgaXNQb3B1cCgpIGNvbnN0Owog
ICAgYm9vbCBpc0Rlc2t0b3AoKSBjb25zdDsKICAgIGJvb2wgaXNNb2RhbCgpIGNvbnN0OwoKICAg
IGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CiAgICBib29sIGlzRW5hYmxlZFRvKFFXaWRnZXQqKSBj
b25zdDsKICAgIGJvb2wgaXNFbmFibGVkVG9UTFcoKSBjb25zdDsKCnB1YmxpYyA6CiAgICB2aXJ0
dWFsIHZvaWQgc2V0RW5hYmxlZCggYm9vbCApOwogICAgdm9pZCBzZXREaXNhYmxlZCggYm9vbCAp
OwoKCgpwdWJsaWM6CiAgICBRUmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3Q7CiAgICBjb25zdCBR
UmVjdCAmZ2VvbWV0cnkoKSBjb25zdDsKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNv
bnN0OwogICAgUVBvaW50IHBvcygpIGNvbnN0OwogICAgUVNpemUgZnJhbWVTaXplKCkgY29uc3Q7
CiAgICBRU2l6ZSBzaXplKCkgY29uc3Q7CiAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgIGludCBo
ZWlnaHQoKSBjb25zdDsKICAgIFFSZWN0IHJlY3QoKSBjb25zdDsKICAgIFFSZWN0IGNoaWxkcmVu
UmVjdCgpIGNvbnN0OwogICAgUVJlZ2lvbiBjaGlsZHJlblJlZ2lvbigpIGNvbnN0OwoKICAgIFFT
aXplIG1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6ZSBtYXhpbXVtU2l6ZSgpIGNvbnN0Owog
ICAgaW50IG1pbmltdW1XaWR0aCgpIGNvbnN0OwogICAgaW50IG1pbmltdW1IZWlnaHQoKSBjb25z
dDsKICAgIGludCBtYXhpbXVtV2lkdGgoKSBjb25zdDsKICAgIGludCBtYXhpbXVtSGVpZ2h0KCkg
Y29uc3Q7CiAgICB2b2lkIHNldE1pbmltdW1TaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0TWluaW11bVNpemUoIGludCBtaW53LCBpbnQgbWluaCApOwogICAgdm9pZCBz
ZXRNYXhpbXVtU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldE1heGlt
dW1TaXplKCBpbnQgbWF4dywgaW50IG1heGggKTsKICAgIHZvaWQgc2V0TWluaW11bVdpZHRoKCBp
bnQgbWludyApOwogICAgdm9pZCBzZXRNaW5pbXVtSGVpZ2h0KCBpbnQgbWluaCApOwogICAgdm9p
ZCBzZXRNYXhpbXVtV2lkdGgoIGludCBtYXh3ICk7CiAgICB2b2lkIHNldE1heGltdW1IZWlnaHQo
IGludCBtYXhoICk7CgogICAgUVNpemUgc2l6ZUluY3JlbWVudCgpIGNvbnN0OwogICAgdm9pZCBz
ZXRTaXplSW5jcmVtZW50KCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6
ZUluY3JlbWVudCggaW50IHcsIGludCBoICk7CiAgICBRU2l6ZSBiYXNlU2l6ZSgpIGNvbnN0Owog
ICAgdm9pZCBzZXRCYXNlU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdm9pZCBzZXRCYXNlU2l6
ZSggaW50IGJhc2V3LCBpbnQgYmFzZWggKTsKCiAgICB2b2lkIHNldEZpeGVkU2l6ZSggY29uc3Qg
UVNpemUgJiApOwogICAgdm9pZCBzZXRGaXhlZFNpemUoIGludCB3LCBpbnQgaCApOwogICAgdm9p
ZCBzZXRGaXhlZFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRGaXhlZEhlaWdodCggaW50IGgg
KTsKCgoKICAgIFFQb2ludCBtYXBUb0dsb2JhbCggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAg
IFFQb2ludCBtYXBGcm9tR2xvYmFsKCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50
IG1hcFRvUGFyZW50KCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1hcEZyb21Q
YXJlbnQoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwVG8oIFFXaWRnZXQg
KiwgY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBGcm9tKCBRV2lkZ2V0ICos
IGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CgogICAgUVdpZGdldCAqdG9wTGV2ZWxXaWRnZXQoKSBj
b25zdDsKCgoKICAgIEJhY2tncm91bmRNb2RlIGJhY2tncm91bmRNb2RlKCkgY29uc3Q7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZE1vZGUoIEJhY2tncm91bmRNb2RlICk7CiAgICB2b2lk
IHNldEJhY2tncm91bmRNb2RlKCBCYWNrZ3JvdW5kTW9kZSwgQmFja2dyb3VuZE1vZGUgKTsKCiAg
ICBjb25zdCBRQ29sb3IgJiBmb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKCiAgICBjb25zdCBRQ29s
b3IgJiBlcmFzZUNvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RXJhc2VDb2xvcigg
Y29uc3QgUUNvbG9yICYgKTsKCiAgICBjb25zdCBRUGl4bWFwICogZXJhc2VQaXhtYXAoKSBjb25z
dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRFcmFzZVBpeG1hcCggY29uc3QgUVBpeG1hcCAmICk7CgoK
ICAgIGNvbnN0IFFDb2xvckdyb3VwICYgY29sb3JHcm91cCgpIGNvbnN0OwogICAgY29uc3QgUVBh
bGV0dGUgJiBwYWxldHRlKCkgY29uc3Q7CiAgICBib29sIG93blBhbGV0dGUoKSBjb25zdDsKICAg
IHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgICB2b2lkIHVu
c2V0UGFsZXR0ZSgpOwoKCiAgICBjb25zdCBRQ29sb3IgJiBwYWxldHRlRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7CiAgICB2b2lkIHNldFBhbGV0dGVGb3JlZ3JvdW5kQ29sb3IoIGNvbnN0IFFDb2xv
ciAmICk7CgogICAgY29uc3QgUUNvbG9yICYgcGFsZXR0ZUJhY2tncm91bmRDb2xvcigpIGNvbnN0
OwogICAgdmlydHVhbCB2b2lkIHNldFBhbGV0dGVCYWNrZ3JvdW5kQ29sb3IoIGNvbnN0IFFDb2xv
ciAmICk7CgogICAgY29uc3QgUVBpeG1hcCAqIHBhbGV0dGVCYWNrZ3JvdW5kUGl4bWFwKCkgY29u
c3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGFsZXR0ZUJhY2tncm91bmRQaXhtYXAoIGNvbnN0IFFQ
aXhtYXAgJiApOwoKICAgIGNvbnN0IFFCcnVzaCYgYmFja2dyb3VuZEJydXNoKCkgY29uc3Q7Cgog
ICAgUUZvbnQgZm9udCgpIGNvbnN0OwogICAgYm9vbCBvd25Gb250KCkgY29uc3Q7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJiApOwogICAgdm9pZCB1bnNldEZvbnQoKTsK
ICAgIFFGb250TWV0cmljcyBmb250TWV0cmljcygpIGNvbnN0OwogICAgUUZvbnRJbmZvIGZvbnRJ
bmZvKCkgY29uc3Q7CgoKICAgIGNvbnN0IFFDdXJzb3IgJmN1cnNvcigpIGNvbnN0OwogICAgYm9v
bCBvd25DdXJzb3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoIGNvbnN0IFFD
dXJzb3IgJiApOwogICAgdmlydHVhbCB2b2lkIHVuc2V0Q3Vyc29yKCk7CgoKICAgIFFTdHJpbmcg
Y2FwdGlvbigpIGNvbnN0OwogICAgY29uc3QgUVBpeG1hcCAqaWNvbigpIGNvbnN0OwogICAgUVN0
cmluZyBpY29uVGV4dCgpIGNvbnN0OwoKICAgIGJvb2wgaGFzTW91c2VUcmFja2luZygpIGNvbnN0
OwogICAgYm9vbCBoYXNNb3VzZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBj
b25zdCBRQml0bWFwICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBjb25zdCBRUmVnaW9u
ICYgKTsKICAgIHZvaWQgY2xlYXJNYXNrKCk7CgogICAgY29uc3QgUUNvbG9yICYgYmFja2dyb3Vu
ZENvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKCBjb25z
dCBRQ29sb3IgJiApOwogICAgY29uc3QgUVBpeG1hcCAqIGJhY2tncm91bmRQaXhtYXAoKSBjb25z
dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kUGl4bWFwKCBjb25zdCBRUGl4bWFwICYg
KTsKCnB1YmxpYyA6CgogICAgdmlydHVhbCB2b2lkIHNldENhcHRpb24oIGNvbnN0IFFTdHJpbmcg
Jik7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvbiggY29uc3QgUVBpeG1hcCAmICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0SWNvblRleHQoIGNvbnN0IFFTdHJpbmcgJik7CgogICAgdmlydHVhbCB2b2lk
IHNldE1vdXNlVHJhY2tpbmcoIGJvb2wgZW5hYmxlICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgc2V0
Rm9jdXMoKTsKICAgIHZvaWQgY2xlYXJGb2N1cygpOwoKcHVibGljOgogICAgZW51bSBGb2N1c1Bv
bGljeSB7CiAgICAgICAgTm9Gb2N1cyA9IDAsCiAgICAgICAgVGFiRm9jdXMgPSAweDEsCiAgICAg
ICAgQ2xpY2tGb2N1cyA9IDB4MiwKICAgICAgICBTdHJvbmdGb2N1cyA9IDB4MywKICAgICAgICBX
aGVlbEZvY3VzID0gMHg3CiAgICB9OwoKICAgIGJvb2wgaXNBY3RpdmVXaW5kb3coKSBjb25zdDsK
ICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVXaW5kb3coKTsKICAgIGJvb2wgaXNGb2N1c0VuYWJs
ZWQoKSBjb25zdDsKCiAgICBGb2N1c1BvbGljeSBmb2N1c1BvbGljeSgpIGNvbnN0OwogICAgdmly
dHVhbCB2b2lkIHNldEZvY3VzUG9saWN5KCBGb2N1c1BvbGljeSApOwogICAgYm9vbCBoYXNGb2N1
cygpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgc2V0VGFiT3JkZXIoIFFXaWRnZXQgKiwgUVdpZGdl
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXNQcm94eSggUVdpZGdldCAqICk7CiAgICBR
V2lkZ2V0ICogZm9jdXNQcm94eSgpIGNvbnN0OwoKCgogICAgdm9pZCBncmFiTW91c2UoKTsKCiAg
ICB2b2lkIGdyYWJNb3VzZSggY29uc3QgUUN1cnNvciAmICk7CgogICAgdm9pZCByZWxlYXNlTW91
c2UoKTsKICAgIHZvaWQgZ3JhYktleWJvYXJkKCk7CiAgICB2b2lkIHJlbGVhc2VLZXlib2FyZCgp
OwogICAgc3RhdGljIFFXaWRnZXQgKiBtb3VzZUdyYWJiZXIoKTsKICAgIHN0YXRpYyBRV2lkZ2V0
ICoga2V5Ym9hcmRHcmFiYmVyKCk7CgoKCiAgICBib29sIGlzVXBkYXRlc0VuYWJsZWQoKSBjb25z
dDsKCgoKCnB1YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0VXBkYXRlc0VuYWJsZWQoIGJvb2wg
ZW5hYmxlICk7CiAgICB2b2lkIHVwZGF0ZSgpOwogICAgdm9pZCB1cGRhdGUoIGludCB4LCBpbnQg
eSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIHVwZGF0ZSggY29uc3QgUVJlY3QmICk7CiAgICB2
b2lkIHJlcGFpbnQoKTsKICAgIHZvaWQgcmVwYWludCggYm9vbCBlcmFzZSApOwogICAgdm9pZCBy
ZXBhaW50KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCBlcmFzZT1UUlVFICk7CiAg
ICB2b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWN0ICYsIGJvb2wgZXJhc2UgPSBUUlVFICk7CiAgICB2
b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWdpb24gJiwgYm9vbCBlcmFzZSA9IFRSVUUgKTsKCgoKICAg
IHZpcnR1YWwgdm9pZCBzaG93KCk7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwogICAgdm9pZCBz
ZXRTaG93biggYm9vbCBzaG93ICk7CiAgICB2b2lkIHNldEhpZGRlbiggYm9vbCBoaWRlICk7Cgog
ICAgdm9pZCBpY29uaWZ5KCkgeyBzaG93TWluaW1pemVkKCk7IH0KCiAgICB2aXJ0dWFsIHZvaWQg
c2hvd01pbmltaXplZCgpOwogICAgdmlydHVhbCB2b2lkIHNob3dNYXhpbWl6ZWQoKTsKICAgIHZv
aWQgc2hvd0Z1bGxTY3JlZW4oKTsKICAgIHZpcnR1YWwgdm9pZCBzaG93Tm9ybWFsKCk7CiAgICB2
aXJ0dWFsIHZvaWQgcG9saXNoKCk7CiAgICB2b2lkIGNvbnN0UG9saXNoKCkgY29uc3Q7CiAgICBi
b29sIGNsb3NlKCk7CgogICAgdm9pZCByYWlzZSgpOwogICAgdm9pZCBsb3dlcigpOwogICAgdm9p
ZCBzdGFja1VuZGVyKCBRV2lkZ2V0KiApOwogICAgdmlydHVhbCB2b2lkIG1vdmUoIGludCB4LCBp
bnQgeSApOwogICAgdm9pZCBtb3ZlKCBjb25zdCBRUG9pbnQgJiApOwogICAgdmlydHVhbCB2b2lk
IHJlc2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkIHJlc2l6ZSggY29uc3QgUVNpemUgJiAp
OwogICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCApOwogICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCAmICk7CgpwdWJs
aWM6CiAgICB2aXJ0dWFsIGJvb2wgY2xvc2UoIGJvb2wgYWxzb0RlbGV0ZSApOwogICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdDsKICAgIGJvb2wgaXNWaXNpYmxlVG8oUVdpZGdldCopIGNvbnN0Owog
ICAgYm9vbCBpc1Zpc2libGVUb1RMVygpIGNvbnN0OwogICAgUVJlY3QgdmlzaWJsZVJlY3QoKSBj
b25zdDsKICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdDsKICAgIGJvb2wgaXNTaG93bigpIGNvbnN0
OwogICAgYm9vbCBpc01pbmltaXplZCgpIGNvbnN0OwogICAgYm9vbCBpc01heGltaXplZCgpIGNv
bnN0OwogICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTaXplIHNp
emVIaW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTaXplIG1pbmltdW1TaXplSGludCgpIGNvbnN0
OwogICAgdmlydHVhbCBRU2l6ZVBvbGljeSBzaXplUG9saWN5KCkgY29uc3Q7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3kgKTsKICAgIHZvaWQgc2V0U2l6ZVBvbGlj
eSggUVNpemVQb2xpY3k6OlNpemVUeXBlIGhvciwgUVNpemVQb2xpY3k6OlNpemVUeXBlIHZlciwg
Ym9vbCBoZncgPSBGQUxTRSApOwogICAgdmlydHVhbCBpbnQgaGVpZ2h0Rm9yV2lkdGgoaW50KSBj
b25zdDsKCgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIGFkanVzdFNpemUoKTsKCnB1YmxpYzoK
CiAgICBRTGF5b3V0ICogbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbGF5X291dDsgfQoKICAgIHZv
aWQgdXBkYXRlR2VvbWV0cnkoKTsKICAgIHZpcnR1YWwgdm9pZCByZXBhcmVudCggUVdpZGdldCAq
cGFyZW50LCBXRmxhZ3MsIGNvbnN0IFFQb2ludCAmLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzaG93SXQ9RkFMU0UgKTsKICAgIHZvaWQgcmVwYXJlbnQoIFFXaWRnZXQg
KnBhcmVudCwgY29uc3QgUVBvaW50ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNob3dJdD1GQUxTRSApOwoKICAgIHZvaWQgcmVjcmVhdGUoIFFXaWRnZXQgKnBhcmVu
dCwgV0ZsYWdzIGYsIGNvbnN0IFFQb2ludCAmIHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHNob3dJdD1GQUxTRSApIHsgcmVwYXJlbnQocGFyZW50LGYscCxzaG93SXQp
OyB9CgoKICAgIHZvaWQgZXJhc2UoKTsKICAgIHZvaWQgZXJhc2UoIGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoICk7CiAgICB2b2lkIGVyYXNlKCBjb25zdCBRUmVjdCAmICk7CiAgICB2b2lkIGVy
YXNlKCBjb25zdCBRUmVnaW9uICYgKTsKICAgIHZvaWQgc2Nyb2xsKCBpbnQgZHgsIGludCBkeSAp
OwogICAgdm9pZCBzY3JvbGwoIGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVjdCYgKTsKCiAgICB2
b2lkIGRyYXdUZXh0KCBpbnQgeCwgaW50IHksIGNvbnN0IFFTdHJpbmcgJik7CiAgICB2b2lkIGRy
YXdUZXh0KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVN0cmluZyAmKTsKCgoKICAgIFFXaWRnZXQg
KiBmb2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVJlY3QgbWljcm9Gb2N1c0hpbnQoKSBjb25zdDsK
CgoKICAgIGJvb2wgYWNjZXB0RHJvcHMoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nl
cHREcm9wcyggYm9vbCBvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIHNldEF1dG9NYXNrKGJvb2wp
OwogICAgYm9vbCBhdXRvTWFzaygpIGNvbnN0OwoKICAgIGVudW0gQmFja2dyb3VuZE9yaWdpbiB7
IFdpZGdldE9yaWdpbiwgUGFyZW50T3JpZ2luLCBXaW5kb3dPcmlnaW4sIEFuY2VzdG9yT3JpZ2lu
IH07CgogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRPcmlnaW4oIEJhY2tncm91bmRPcmln
aW4gKTsKICAgIEJhY2tncm91bmRPcmlnaW4gYmFja2dyb3VuZE9yaWdpbigpIGNvbnN0OwogICAg
UVBvaW50IGJhY2tncm91bmRPZmZzZXQoKSBjb25zdDsKCgogICAgdmlydHVhbCBib29sIGN1c3Rv
bVdoYXRzVGhpcygpIGNvbnN0OwoKICAgIFFXaWRnZXQgKiBwYXJlbnRXaWRnZXQoIGJvb2wgc2Ft
ZVdpbmRvdyA9IEZBTFNFICkgY29uc3Q7CiAgICBXU3RhdGUgdGVzdFdTdGF0ZSggV1N0YXRlIHMg
KSBjb25zdDsKICAgIFdGbGFncyB0ZXN0V0ZsYWdzKCBXRmxhZ3MgZiApIGNvbnN0OwogICAgc3Rh
dGljIFFXaWRnZXQgKiBmaW5kKCBXSWQgKTsKICAgIHN0YXRpYyBRV2lkZ2V0TWFwcGVyICp3bWFw
cGVyKCk7CgogICAgUVdpZGdldCAqY2hpbGRBdCggaW50IHgsIGludCB5LCBib29sIGluY2x1ZGVU
aGlzID0gRkFMU0UgKSBjb25zdDsKICAgIFFXaWRnZXQgKmNoaWxkQXQoIGNvbnN0IFFQb2ludCAm
LCBib29sIGluY2x1ZGVUaGlzID0gRkFMU0UgKSBjb25zdDsKIyA0NTkgIi91c3IvbG9jYWwvcXQt
My4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiCnByb3RlY3RlZDoKCiAgICBib29sIGV2ZW50KCBRRXZl
bnQgKiApOwogICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiAp
OwogICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKCiAgICB2aXJ0
dWFsIHZvaWQgd2hlZWxFdmVudCggUVdoZWVsRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCBr
ZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGtleVJlbGVhc2VF
dmVudCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBmb2N1c0luRXZlbnQoIFFGb2N1
c0V2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBmb2N1c091dEV2ZW50KCBRRm9jdXNFdmVudCAq
ICk7CiAgICB2aXJ0dWFsIHZvaWQgZW50ZXJFdmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwg
dm9pZCBsZWF2ZUV2ZW50KCBRRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIHBhaW50RXZlbnQo
IFFQYWludEV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBtb3ZlRXZlbnQoIFFNb3ZlRXZlbnQg
KiApOwogICAgdmlydHVhbCB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwogICAg
dmlydHVhbCB2b2lkIGNsb3NlRXZlbnQoIFFDbG9zZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p
ZCBjb250ZXh0TWVudUV2ZW50KCBRQ29udGV4dE1lbnVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZv
aWQgaW1TdGFydEV2ZW50KCBRSU1FdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgaW1Db21wb3Nl
RXZlbnQoIFFJTUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBpbUVuZEV2ZW50KCBRSU1FdmVu
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgdGFibGV0RXZlbnQoIFFUYWJsZXRFdmVudCAqICk7CgoK
ICAgIHZpcnR1YWwgdm9pZCBkcmFnRW50ZXJFdmVudCggUURyYWdFbnRlckV2ZW50ICogKTsKICAg
IHZpcnR1YWwgdm9pZCBkcmFnTW92ZUV2ZW50KCBRRHJhZ01vdmVFdmVudCAqICk7CiAgICB2aXJ0
dWFsIHZvaWQgZHJhZ0xlYXZlRXZlbnQoIFFEcmFnTGVhdmVFdmVudCAqICk7CiAgICB2aXJ0dWFs
IHZvaWQgZHJvcEV2ZW50KCBRRHJvcEV2ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHNob3dF
dmVudCggUVNob3dFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZUV2ZW50KCBRSGlkZUV2
ZW50ICogKTsKIyA1MDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiCiAg
ICB2aXJ0dWFsIGJvb2wgeDExRXZlbnQoIFhFdmVudCAqICk7CgoKCgoKCgogICAgdmlydHVhbCB2
b2lkIHVwZGF0ZU1hc2soKTsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgc3R5bGVDaGFuZ2UoIFFTdHls
ZSYgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlZENoYW5nZSggYm9vbCBvbGRFbmFibGVkICk7
CgogICAgdmlydHVhbCB2b2lkIHBhbGV0dGVDaGFuZ2UoIGNvbnN0IFFQYWxldHRlICYgKTsKCiAg
ICB2aXJ0dWFsIHZvaWQgZm9udENoYW5nZSggY29uc3QgUUZvbnQgJiApOwogICAgdmlydHVhbCB2
b2lkIHdpbmRvd0FjdGl2YXRpb25DaGFuZ2UoIGJvb2wgb2xkQWN0aXZlICk7CgogICAgaW50IG1l
dHJpYyggaW50ICkgY29uc3Q7CgogICAgdm9pZCByZXNldElucHV0Q29udGV4dCgpOwoKICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGUoIFdJZCA9IDAsIGJvb2wgaW5pdGlhbGl6ZVdpbmRvdyA9IFRSVUUs
CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlc3Ryb3lPbGRXaW5kb3cgPSBUUlVFICk7
CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSggYm9vbCBkZXN0cm95V2luZG93ID0gVFJVRSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlc3Ryb3lTdWJXaW5kb3dzID0gVFJVRSApOwog
ICAgdWludCBnZXRXU3RhdGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRXU3RhdGUoIHVp
bnQgKTsKICAgIHZvaWQgY2xlYXJXU3RhdGUoIHVpbnQgbiApOwogICAgV0ZsYWdzIGdldFdGbGFn
cygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFdGbGFncyggV0ZsYWdzICk7CiAgICB2b2lk
IGNsZWFyV0ZsYWdzKCBXRmxhZ3MgbiApOwoKICAgIHZpcnR1YWwgYm9vbCBmb2N1c05leHRQcmV2
Q2hpbGQoIGJvb2wgbmV4dCApOwoKICAgIFFXRXh0cmEgKmV4dHJhRGF0YSgpOwogICAgUVRMV0V4
dHJhICp0b3BEYXRhKCk7CiAgICBRRm9jdXNEYXRhICpmb2N1c0RhdGEoKTsKCiAgICB2aXJ0dWFs
IHZvaWQgc2V0S2V5Q29tcHJlc3Npb24oYm9vbCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWljcm9G
b2N1c0hpbnQoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGJvb2wgdGV4dD1UUlVFLCBRRm9u
dCAqZiA9IDApOwojIDU1NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRnZXQuaCIK
cHJpdmF0ZSA6CiAgICB2b2lkIGZvY3VzUHJveHlEZXN0cm95ZWQoKTsKCnByaXZhdGU6CiAgICB2
b2lkIHNldEZvbnRTeXMoIFFGb250ICpmID0gMCApOwoKICAgIHZvaWQgY3JlYXRlSW5wdXRDb250
ZXh0KCk7CiAgICB2b2lkIGRlc3Ryb3lJbnB1dENvbnRleHQoKTsKICAgIHZvaWQgZm9jdXNJbnB1
dENvbnRleHQoKTsKICAgIHZvaWQgY2hlY2tDaGlsZHJlbkRuZCgpOwojIDU4NCAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRnZXQuaCIKICAgIHZvaWQgc2V0TGF5b3V0KCBRTGF5b3V0
ICpsICk7CgogICAgdm9pZCBzZXRXaW5JZCggV0lkICk7CiAgICB2b2lkIHNob3dXaW5kb3coKTsK
ICAgIHZvaWQgaGlkZVdpbmRvdygpOwogICAgdm9pZCBzaG93Q2hpbGRyZW4oIGJvb2wgc3BvbnRh
bmVvdXMgKTsKICAgIHZvaWQgaGlkZUNoaWxkcmVuKCBib29sIHNwb250YW5lb3VzICk7CiAgICB2
b2lkIHJlcGFyZW50U3lzKCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncywgY29uc3QgUVBvaW50ICYs
IGJvb2wgc2hvd0l0KTsKICAgIHZvaWQgY3JlYXRlVExFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVF
eHRyYSgpOwogICAgdm9pZCBkZWxldGVFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVTeXNFeHRyYSgp
OwogICAgdm9pZCBkZWxldGVTeXNFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVUTFN5c0V4dHJhKCk7
CiAgICB2b2lkIGRlbGV0ZVRMU3lzRXh0cmEoKTsKICAgIHZvaWQgZGVhY3RpdmF0ZVdpZGdldENs
ZWFudXAoKTsKICAgIHZvaWQgaW50ZXJuYWxTZXRHZW9tZXRyeSggaW50LCBpbnQsIGludCwgaW50
LCBib29sICk7CiAgICB2b2lkIHJlcGFyZW50Rm9jdXNXaWRnZXRzKCBRV2lkZ2V0ICogKTsKICAg
IFFGb2N1c0RhdGEgKmZvY3VzRGF0YSggYm9vbCBjcmVhdGUgKTsKICAgIHZvaWQgc2V0QmFja2dy
b3VuZEZyb21Nb2RlKCk7CiAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvckRpcmVjdCggY29uc3Qg
UUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZFBpeG1hcERpcmVjdCggY29uc3QgUVBp
eG1hcCAmICk7CiAgICB2b2lkIHNldEJhY2tncm91bmRNb2RlRGlyZWN0KCBCYWNrZ3JvdW5kTW9k
ZSApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5kRW1wdHkoKTsKICAgIHZvaWQgdXBkYXRlRnJhbWVT
dHJ1dCgpIGNvbnN0OwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZFgxMVJlbGF0aXZlKCk7CgoKICAg
IFdJZCB3aW5pZDsKICAgIHVpbnQgd2lkZ2V0X3N0YXRlOwogICAgdWludCB3aWRnZXRfZmxhZ3M7
CiAgICB1aW50IGZvY3VzX3BvbGljeSA6IDQ7CiAgICB1aW50IG93bl9mb250IDoxOwogICAgdWlu
dCBvd25fcGFsZXR0ZSA6MTsKICAgIHVpbnQgc2l6ZWhpbnRfZm9yY2VkIDoxOwogICAgdWludCBp
c19jbG9zaW5nIDoxOwogICAgdWludCBpbl9zaG93IDogMTsKICAgIHVpbnQgaW5fc2hvd19tYXhp
bWl6ZWQgOiAxOwogICAgdWludCBmc3RydXRfZGlydHkgOiAxOwogICAgUVJlY3QgY3JlY3Q7CiAg
ICBRQ29sb3IgYmdfY29sOwoKICAgIFFQYWxldHRlIHBhbDsKCiAgICBRRm9udCBmbnQ7CgogICAg
UUxheW91dCAqbGF5X291dDsKCiAgICBRV0V4dHJhICpleHRyYTsKIyA2NjQgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICBzdGF0aWMgaW50IGluc3RhbmNlQ291bnRl
cjsKICAgIHN0YXRpYyBpbnQgbWF4SW5zdGFuY2VzOwoKICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU1h
cHBlcigpOwogICAgc3RhdGljIHZvaWQgZGVzdHJveU1hcHBlcigpOwogICAgc3RhdGljIFFXaWRn
ZXRMaXN0ICp3TGlzdCgpOwogICAgc3RhdGljIFFXaWRnZXRMaXN0ICp0bHdMaXN0KCk7CiAgICBz
dGF0aWMgUVdpZGdldE1hcHBlciAqbWFwcGVyOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlv
bjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFQ
YWludGVyOwogICAgZnJpZW5kIGNsYXNzIFFGb250TWV0cmljczsKICAgIGZyaWVuZCBjbGFzcyBR
Rm9udEluZm87CiAgICBmcmllbmQgY2xhc3MgUUVUV2lkZ2V0OwogICAgZnJpZW5kIGNsYXNzIFFM
YXlvdXQ7Cgpwcml2YXRlOgoKICAgIFFXaWRnZXQoIGNvbnN0IFFXaWRnZXQgJiApOwogICAgUVdp
ZGdldCAmb3BlcmF0b3I9KCBjb25zdCBRV2lkZ2V0ICYgKTsKCgpwdWJsaWM6CgogICAgdm9pZCBz
ZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmcCwgYm9vbCApIHsgc2V0UGFsZXR0ZSggcCApOyB9
CgogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAmZiwgYm9vbCApIHsgc2V0Rm9udCggZiAp
OyB9Cn07CgoKaW5saW5lIFF0OjpXU3RhdGUgUVdpZGdldDo6dGVzdFdTdGF0ZSggV1N0YXRlIHMg
KSBjb25zdAp7IHJldHVybiAod2lkZ2V0X3N0YXRlICYgcyk7IH0KCmlubGluZSBRdDo6V0ZsYWdz
IFFXaWRnZXQ6OnRlc3RXRmxhZ3MoIFdGbGFncyBmICkgY29uc3QKeyByZXR1cm4gKHdpZGdldF9m
bGFncyAmIGYpOyB9CgoKaW5saW5lIFdJZCBRV2lkZ2V0Ojp3aW5JZCgpIGNvbnN0CnsgcmV0dXJu
IHdpbmlkOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc1RvcExldmVsKCkgY29uc3QKeyByZXR1
cm4gdGVzdFdGbGFncyhXVHlwZV9Ub3BMZXZlbCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6Omlz
RGlhbG9nKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9EaWFsb2cpOyB9Cgppbmxp
bmUgYm9vbCBRV2lkZ2V0Ojppc1BvcHVwKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlw
ZV9Qb3B1cCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRGVza3RvcCgpIGNvbnN0CnsgcmV0
dXJuIHRlc3RXRmxhZ3MoV1R5cGVfRGVza3RvcCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6Omlz
RW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuICF0ZXN0V1N0YXRlKFdTdGF0ZV9EaXNhYmxlZCk7IH0K
CmlubGluZSBib29sIFFXaWRnZXQ6OmlzTW9kYWwoKSBjb25zdAp7IHJldHVybiB0ZXN0V0ZsYWdz
KFdTaG93TW9kYWwpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0VuYWJsZWRUb1RMVygpIGNv
bnN0CnsgcmV0dXJuIGlzRW5hYmxlZCgpOyB9CgppbmxpbmUgY29uc3QgUVJlY3QgJlFXaWRnZXQ6
Omdlb21ldHJ5KCkgY29uc3QKeyByZXR1cm4gY3JlY3Q7IH0KCmlubGluZSBRU2l6ZSBRV2lkZ2V0
OjpzaXplKCkgY29uc3QKeyByZXR1cm4gY3JlY3Quc2l6ZSgpOyB9CgppbmxpbmUgaW50IFFXaWRn
ZXQ6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gY3JlY3Qud2lkdGgoKTsgfQoKaW5saW5lIGludCBR
V2lkZ2V0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBjcmVjdC5oZWlnaHQoKTsgfQoKaW5saW5l
IFFSZWN0IFFXaWRnZXQ6OnJlY3QoKSBjb25zdAp7IHJldHVybiBRUmVjdCgwLDAsY3JlY3Qud2lk
dGgoKSxjcmVjdC5oZWlnaHQoKSk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6bWluaW11bVdpZHRo
KCkgY29uc3QKeyByZXR1cm4gbWluaW11bVNpemUoKS53aWR0aCgpOyB9CgppbmxpbmUgaW50IFFX
aWRnZXQ6Om1pbmltdW1IZWlnaHQoKSBjb25zdAp7IHJldHVybiBtaW5pbXVtU2l6ZSgpLmhlaWdo
dCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1heGltdW1XaWR0aCgpIGNvbnN0CnsgcmV0dXJu
IG1heGltdW1TaXplKCkud2lkdGgoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0OjptYXhpbXVtSGVp
Z2h0KCkgY29uc3QKeyByZXR1cm4gbWF4aW11bVNpemUoKS5oZWlnaHQoKTsgfQoKaW5saW5lIHZv
aWQgUVdpZGdldDo6c2V0TWluaW11bVNpemUoIGNvbnN0IFFTaXplICZzICkKeyBzZXRNaW5pbXVt
U2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldE1h
eGltdW1TaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0TWF4aW11bVNpemUocy53aWR0aCgpLHMu
aGVpZ2h0KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRTaXplSW5jcmVtZW50KCBjb25z
dCBRU2l6ZSAmcyApCnsgc2V0U2l6ZUluY3JlbWVudChzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0K
CmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldEJhc2VTaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0
QmFzZVNpemUocy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgY29uc3QgUUNvbG9yICZR
V2lkZ2V0OjplcmFzZUNvbG9yKCkgY29uc3QKeyByZXR1cm4gYmdfY29sOyB9CgoKaW5saW5lIGNv
bnN0IFFQYWxldHRlICZRV2lkZ2V0OjpwYWxldHRlKCkgY29uc3QKeyByZXR1cm4gcGFsOyB9CgoK
aW5saW5lIFFGb250IFFXaWRnZXQ6OmZvbnQoKSBjb25zdAp7IHJldHVybiBmbnQ7IH0KCmlubGlu
ZSBRRm9udE1ldHJpY3MgUVdpZGdldDo6Zm9udE1ldHJpY3MoKSBjb25zdAp7IHJldHVybiBRRm9u
dE1ldHJpY3MoZm9udCgpKTsgfQoKaW5saW5lIFFGb250SW5mbyBRV2lkZ2V0Ojpmb250SW5mbygp
IGNvbnN0CnsgcmV0dXJuIFFGb250SW5mbyhmb250KCkpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0
OjpoYXNNb3VzZVRyYWNraW5nKCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfTW91
c2VUcmFja2luZyk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6Omhhc01vdXNlKCkgY29uc3QKeyBy
ZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfSGFzTW91c2UpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0
Ojppc0ZvY3VzRW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuIChGb2N1c1BvbGljeSlmb2N1c19wb2xp
Y3kgIT0gTm9Gb2N1czsgfQoKaW5saW5lIFFXaWRnZXQ6OkZvY3VzUG9saWN5IFFXaWRnZXQ6OmZv
Y3VzUG9saWN5KCkgY29uc3QKeyByZXR1cm4gKEZvY3VzUG9saWN5KWZvY3VzX3BvbGljeTsgfQoK
aW5saW5lIGJvb2wgUVdpZGdldDo6aXNVcGRhdGVzRW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuICF0
ZXN0V1N0YXRlKFdTdGF0ZV9CbG9ja1VwZGF0ZXMpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0Ojp1
cGRhdGUoIGNvbnN0IFFSZWN0ICZyICkKeyB1cGRhdGUoIHIueCgpLCByLnkoKSwgci53aWR0aCgp
LCByLmhlaWdodCgpICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnJlcGFpbnQoKQp7IHJlcGFp
bnQoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgpLCBUUlVFICk7IH0KCmlubGlu
ZSB2b2lkIFFXaWRnZXQ6OnJlcGFpbnQoIGJvb2wgZXJhc2UgKQp7IHJlcGFpbnQoIDAsIDAsIGNy
ZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgpLCBlcmFzZSApOyB9CgppbmxpbmUgdm9pZCBRV2lk
Z2V0OjpyZXBhaW50KCBjb25zdCBRUmVjdCAmciwgYm9vbCBlcmFzZSApCnsgcmVwYWludCggci54
KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIGVyYXNlICk7IH0KCmlubGluZSB2b2lk
IFFXaWRnZXQ6OmVyYXNlKCkKeyBlcmFzZSggMCwgMCwgY3JlY3Qud2lkdGgoKSwgY3JlY3QuaGVp
Z2h0KCkgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6ZXJhc2UoIGNvbnN0IFFSZWN0ICZyICkK
eyBlcmFzZSggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgKTsgfQoKaW5saW5l
IGJvb2wgUVdpZGdldDo6Y2xvc2UoKQp7IHJldHVybiBjbG9zZSggRkFMU0UgKTsgfQoKaW5saW5l
IGJvb2wgUVdpZGdldDo6aXNWaXNpYmxlKCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3Rh
dGVfVmlzaWJsZSk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzVmlzaWJsZVRvVExXKCkgY29u
c3QKeyByZXR1cm4gaXNWaXNpYmxlKCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzSGlkZGVu
KCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfRm9yY2VIaWRlKTsgfQoKaW5saW5l
IGJvb2wgUVdpZGdldDo6aXNTaG93bigpIGNvbnN0CnsgcmV0dXJuICF0ZXN0V1N0YXRlKFdTdGF0
ZV9Gb3JjZUhpZGUpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0Ojptb3ZlKCBjb25zdCBRUG9pbnQg
JnAgKQp7IG1vdmUoIHAueCgpLCBwLnkoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXNp
emUoIGNvbnN0IFFTaXplICZzICkKeyByZXNpemUoIHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0K
CmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCAmciApCnsgc2V0
R2VvbWV0cnkoIHIubGVmdCgpLCByLnRvcCgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgKTsgfQoK
aW5saW5lIHZvaWQgUVdpZGdldDo6ZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmcCwgY29uc3QgUVN0
cmluZyAmcyApCnsgZHJhd1RleHQoIHAueCgpLCBwLnkoKSwgcyApOyB9CgppbmxpbmUgUVdpZGdl
dCAqUVdpZGdldDo6cGFyZW50V2lkZ2V0KCBib29sIHNhbWVXaW5kb3cgKSBjb25zdAp7CiAgICBp
ZiAoIHNhbWVXaW5kb3cgKQogICAgICAgIHJldHVybiBpc1RvcExldmVsKCkgPyAwIDogKFFXaWRn
ZXQgKilRT2JqZWN0OjpwYXJlbnQoKTsKICAgIHJldHVybiAoUVdpZGdldCAqKVFPYmplY3Q6OnBh
cmVudCgpOwp9CgppbmxpbmUgUVdpZGdldE1hcHBlciAqUVdpZGdldDo6d21hcHBlcigpCnsgcmV0
dXJuIG1hcHBlcjsgfQoKaW5saW5lIHVpbnQgUVdpZGdldDo6Z2V0V1N0YXRlKCkgY29uc3QKeyBy
ZXR1cm4gd2lkZ2V0X3N0YXRlOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRXU3RhdGUoIHVp
bnQgZiApCnsgd2lkZ2V0X3N0YXRlIHw9IGY7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmNsZWFy
V1N0YXRlKCB1aW50IGYgKQp7IHdpZGdldF9zdGF0ZSAmPSB+ZjsgfQoKaW5saW5lIFF0OjpXRmxh
Z3MgUVdpZGdldDo6Z2V0V0ZsYWdzKCkgY29uc3QKeyByZXR1cm4gd2lkZ2V0X2ZsYWdzOyB9Cgpp
bmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRXRmxhZ3MoIFdGbGFncyBmICkKeyB3aWRnZXRfZmxhZ3Mg
fD0gZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xlYXJXRmxhZ3MoIFdGbGFncyBmICkKeyB3
aWRnZXRfZmxhZ3MgJj0gfmY7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmNvbnN0UG9saXNoKCkg
Y29uc3QKewogICAgaWYgKCAhdGVzdFdTdGF0ZShXU3RhdGVfUG9saXNoZWQpICkgewogICAgICAg
IFFXaWRnZXQqIHRoYXQgPSAoUVdpZGdldCopIHRoaXM7CiAgICAgICAgdGhhdC0+cG9saXNoKCk7
CiAgICAgICAgdGhhdC0+c2V0V1N0YXRlKFdTdGF0ZV9Qb2xpc2hlZCk7CiAgICB9Cn0KCmlubGlu
ZSBib29sIFFXaWRnZXQ6Om93bkN1cnNvcigpIGNvbnN0CnsKICAgIHJldHVybiB0ZXN0V1N0YXRl
KCBXU3RhdGVfT3duQ3Vyc29yICk7Cn0KCmlubGluZSBib29sIFFXaWRnZXQ6Om93bkZvbnQoKSBj
b25zdAp7CiAgICByZXR1cm4gb3duX2ZvbnQ7Cn0KCmlubGluZSBib29sIFFXaWRnZXQ6Om93blBh
bGV0dGUoKSBjb25zdAp7CiAgICByZXR1cm4gb3duX3BhbGV0dGU7Cn0KCgppbmxpbmUgdm9pZCBR
V2lkZ2V0OjpzZXRTaXplUG9saWN5KCBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgaG9yLCBRU2l6ZVBv
bGljeTo6U2l6ZVR5cGUgdmVyLCBib29sIGhmdyApCnsKICAgIHNldFNpemVQb2xpY3koIFFTaXpl
UG9saWN5KCBob3IsIHZlciwgaGZ3KSApOwp9CgoKCgoKY2xhc3MgUUZvY3VzRGF0YTsKY2xhc3Mg
UVdTTWFuYWdlcjsKCgoKCgoKCnN0cnVjdCBRVExXRXh0cmEgewoKICAgIFFTdHJpbmcgY2FwdGlv
bjsKICAgIFFTdHJpbmcgaWNvblRleHQ7CiAgICBRUGl4bWFwICppY29uOwoKICAgIFFGb2N1c0Rh
dGEgKmZvY3VzRGF0YTsKICAgIHNob3J0IGluY3csIGluY2g7CgogICAgdWxvbmcgZmxlZnQsIGZy
aWdodCwgZnRvcCwgZmJvdHRvbTsKICAgIHVpbnQgaWNvbmljOiAxOwogICAgdWludCBmdWxsc2Ny
ZWVuIDogMTsKICAgIHVpbnQgc2hvd01vZGU6IDI7CiAgICB1aW50IHNhdmVkRmxhZ3M7CiAgICBz
aG9ydCBiYXNldywgYmFzZWg7CgogICAgV0lkIHBhcmVudFdpbklkOwogICAgdWludCBlbWJlZGRl
ZCA6IDE7CiAgICB1aW50IHNwb250X3VubWFwcGVkOiAxOwogICAgdWludCByZXNlcnZlZDogMTsK
ICAgIHVpbnQgZG5kIDogMTsKICAgIHVpbnQgdXNwb3MgOiAxOwogICAgdWludCB1c3NpemUgOiAx
OwogICAgdm9pZCAqeGljOwojIDk0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRn
ZXQuaCIKICAgIFFSZWN0IG5vcm1hbEdlb21ldHJ5Owp9OwoKCgoKCgpzdHJ1Y3QgUVdFeHRyYSB7
CiAgICBRX0lOVDE2IG1pbncsIG1pbmg7CiAgICBRX0lOVDE2IG1heHcsIG1heGg7CiAgICBRUGl4
bWFwICpiZ19waXg7CiAgICBRV2lkZ2V0ICpmb2N1c19wcm94eTsKCiAgICBRQ3Vyc29yICpjdXJz
OwoKICAgIFFUTFdFeHRyYSAqdG9wZXh0cmE7CgoKCgogICAgV0lkIHhEbmRQcm94eTsKIyA5ODEg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICB1aW50IGJnX29yaWdp
biA6IDI7CgogICAgdWludCBjaGlsZHJlbl91c2VfZG5kIDogMTsKCgoKCiAgICBjaGFyIGJnX21v
ZGU7CiAgICBjaGFyIGJnX21vZGVfdmlzdWFsOwoKICAgIFFTdHlsZSogc3R5bGU7CgogICAgUVJl
Y3QgbWljcm9fZm9jdXNfaGludDsKICAgIFFTaXplUG9saWN5IHNpemVfcG9saWN5Owp9OwojIDQz
ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWZyYW1lLmgiIDIKCgoKCmNsYXNzIFFGcmFt
ZSA6IHB1YmxpYyBRV2lkZ2V0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0
YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNv
bnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0
IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1
YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVy
dHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3By
b3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2Jq
ZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9i
amVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAog
ICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoKICAgIFFGcmFtZSggUVdpZGdldCog
cGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdzIGY9MCApOwoKICAgIGludCBmcmFt
ZVN0eWxlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVTdHlsZSggaW50ICk7Cgog
ICAgaW50IGZyYW1lV2lkdGgoKSBjb25zdDsKICAgIFFSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0
OwoKCiAgICBib29sIGxpbmVTaGFwZXNPaygpIGNvbnN0IHsgcmV0dXJuIFRSVUU7IH0KCgogICAg
UVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICBlbnVtIFNoYXBlIHsgTm9GcmFtZSA9IDAsCiAg
ICAgICAgICAgICAgICAgQm94ID0gMHgwMDAxLAogICAgICAgICAgICAgICAgIFBhbmVsID0gMHgw
MDAyLAogICAgICAgICAgICAgICAgIFdpblBhbmVsID0gMHgwMDAzLAogICAgICAgICAgICAgICAg
IEhMaW5lID0gMHgwMDA0LAogICAgICAgICAgICAgICAgIFZMaW5lID0gMHgwMDA1LAogICAgICAg
ICAgICAgICAgIFN0eWxlZFBhbmVsID0gMHgwMDA2LAogICAgICAgICAgICAgICAgIFBvcHVwUGFu
ZWwgPSAweDAwMDcsCiAgICAgICAgICAgICAgICAgTWVudUJhclBhbmVsID0gMHgwMDA4LAogICAg
ICAgICAgICAgICAgIFRvb2xCYXJQYW5lbCA9IDB4MDAwOSwKICAgICAgICAgICAgICAgICBMaW5l
RWRpdFBhbmVsID0gMHgwMDBhLAogICAgICAgICAgICAgICAgIFRhYldpZGdldFBhbmVsID0gMHgw
MDBiLAogICAgICAgICAgICAgICAgIEdyb3VwQm94UGFuZWwgPSAweDAwMGMsCiAgICAgICAgICAg
ICAgICAgTVNoYXBlID0gMHgwMDBmCiAgICB9OwogICAgZW51bSBTaGFkb3cgeyBQbGFpbiA9IDB4
MDAxMCwKICAgICAgICAgICAgICAgICAgUmFpc2VkID0gMHgwMDIwLAogICAgICAgICAgICAgICAg
ICBTdW5rZW4gPSAweDAwMzAsCiAgICAgICAgICAgICAgICAgIE1TaGFkb3cgPSAweDAwZjAgfTsK
CiAgICBTaGFwZSBmcmFtZVNoYXBlKCkgY29uc3Q7CiAgICB2b2lkIHNldEZyYW1lU2hhcGUoIFNo
YXBlICk7CiAgICBTaGFkb3cgZnJhbWVTaGFkb3coKSBjb25zdDsKICAgIHZvaWQgc2V0RnJhbWVT
aGFkb3coIFNoYWRvdyApOwoKICAgIGludCBsaW5lV2lkdGgoKSBjb25zdDsKICAgIHZpcnR1YWwg
dm9pZCBzZXRMaW5lV2lkdGgoIGludCApOwoKICAgIGludCBtYXJnaW4oKSBjb25zdDsKICAgIHZp
cnR1YWwgdm9pZCBzZXRNYXJnaW4oIGludCApOwoKICAgIGludCBtaWRMaW5lV2lkdGgoKSBjb25z
dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNaWRMaW5lV2lkdGgoIGludCApOwoKICAgIFFSZWN0IGZy
YW1lUmVjdCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdCggY29uc3QgUVJl
Y3QgJiApOwoKcHJvdGVjdGVkOgogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7
CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lk
IGRyYXdGcmFtZSggUVBhaW50ZXIgKiApOwogICAgdmlydHVhbCB2b2lkIGRyYXdDb250ZW50cygg
UVBhaW50ZXIgKiApOwogICAgdmlydHVhbCB2b2lkIGZyYW1lQ2hhbmdlZCgpOwogICAgdm9pZCBz
dHlsZUNoYW5nZSggUVN0eWxlJiApOwoKcHJpdmF0ZToKICAgIHZvaWQgdXBkYXRlRnJhbWVXaWR0
aChib29sPUZBTFNFKTsKICAgIFFSZWN0IGZyZWN0OwogICAgaW50IGZzdHlsZTsKICAgIHNob3J0
IGx3aWR0aDsKICAgIHNob3J0IG13aWR0aDsKICAgIHNob3J0IG1sd2lkdGg7CiAgICBzaG9ydCBm
d2lkdGg7CgogICAgdm9pZCAqIGQ7CnByaXZhdGU6CgogICAgUUZyYW1lKCBjb25zdCBRRnJhbWUg
JiApOwogICAgUUZyYW1lICZvcGVyYXRvcj0oIGNvbnN0IFFGcmFtZSAmICk7Cgp9OwoKCmlubGlu
ZSBpbnQgUUZyYW1lOjpmcmFtZVN0eWxlKCkgY29uc3QKeyByZXR1cm4gZnN0eWxlOyB9Cgppbmxp
bmUgUUZyYW1lOjpTaGFwZSBRRnJhbWU6OmZyYW1lU2hhcGUoKSBjb25zdAp7IHJldHVybiAoU2hh
cGUpICggZnN0eWxlICYgTVNoYXBlICk7IH0KCmlubGluZSBRRnJhbWU6OlNoYWRvdyBRRnJhbWU6
OmZyYW1lU2hhZG93KCkgY29uc3QKeyByZXR1cm4gKFNoYWRvdykgKCBmc3R5bGUgJiBNU2hhZG93
ICk7IH0KCmlubGluZSB2b2lkIFFGcmFtZTo6c2V0RnJhbWVTaGFwZSggUUZyYW1lOjpTaGFwZSBz
ICkKeyBzZXRGcmFtZVN0eWxlKCAoIGZzdHlsZSAmIE1TaGFkb3cgKSB8IHMgKTsgfQoKaW5saW5l
IHZvaWQgUUZyYW1lOjpzZXRGcmFtZVNoYWRvdyggUUZyYW1lOjpTaGFkb3cgcyApCnsgc2V0RnJh
bWVTdHlsZSggKCBmc3R5bGUgJiBNU2hhcGUgKSB8IHMgKTsgfQoKaW5saW5lIGludCBRRnJhbWU6
OmxpbmVXaWR0aCgpIGNvbnN0CnsgcmV0dXJuIGx3aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6
Om1pZExpbmVXaWR0aCgpIGNvbnN0CnsgcmV0dXJuIG1sd2lkdGg7IH0KCmlubGluZSBpbnQgUUZy
YW1lOjptYXJnaW4oKSBjb25zdAp7IHJldHVybiBtd2lkdGg7IH0KCmlubGluZSBpbnQgUUZyYW1l
OjpmcmFtZVdpZHRoKCkgY29uc3QKeyByZXR1cm4gZndpZHRoOyB9CiMgNDIgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xc2Nyb2xsdmlldy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEu
MS9pbmNsdWRlL3FzY3JvbGxiYXIuaCIgMQojIDQxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1
ZGUvcXNjcm9sbGJhci5oIgpjbGFzcyBRVGltZXI7CgoKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEu
MS9pbmNsdWRlL3FyYW5nZWNvbnRyb2wuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu
Y2x1ZGUvcXJhbmdlY29udHJvbC5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9x
Z2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FyYW5nZWNvbnRy
b2wuaCIgMgoKCgoKCgpjbGFzcyBRUmFuZ2VDb250cm9sUHJpdmF0ZTsKCgpjbGFzcyBRUmFuZ2VD
b250cm9sCnsKcHVibGljOgogICAgUVJhbmdlQ29udHJvbCgpOwogICAgUVJhbmdlQ29udHJvbCgg
aW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUsCiAgICAgICAgICAgICAgICAgICBpbnQgbGluZVN0
ZXAsIGludCBwYWdlU3RlcCwgaW50IHZhbHVlICk7CiAgICB2aXJ0dWFsIH5RUmFuZ2VDb250cm9s
KCk7CiAgICBpbnQgdmFsdWUoKSBjb25zdDsKICAgIHZvaWQgc2V0VmFsdWUoIGludCApOwogICAg
dm9pZCBhZGRQYWdlKCk7CiAgICB2b2lkIHN1YnRyYWN0UGFnZSgpOwogICAgdm9pZCBhZGRMaW5l
KCk7CiAgICB2b2lkIHN1YnRyYWN0TGluZSgpOwoKICAgIGludCBtaW5WYWx1ZSgpIGNvbnN0Owog
ICAgaW50IG1heFZhbHVlKCkgY29uc3Q7CiAgICB2b2lkIHNldFJhbmdlKCBpbnQgbWluVmFsdWUs
IGludCBtYXhWYWx1ZSApOwogICAgdm9pZCBzZXRNaW5WYWx1ZSggaW50IG1pblZhbCApOwogICAg
dm9pZCBzZXRNYXhWYWx1ZSggaW50IG1pblZhbCApOwoKICAgIGludCBsaW5lU3RlcCgpIGNvbnN0
OwogICAgaW50IHBhZ2VTdGVwKCkgY29uc3Q7CiAgICB2b2lkIHNldFN0ZXBzKCBpbnQgbGluZSwg
aW50IHBhZ2UgKTsKCiAgICBpbnQgYm91bmQoIGludCApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAg
aW50IHBvc2l0aW9uRnJvbVZhbHVlKCBpbnQgdmFsLCBpbnQgc3BhY2UgKSBjb25zdDsKICAgIGlu
dCB2YWx1ZUZyb21Qb3NpdGlvbiggaW50IHBvcywgaW50IHNwYWNlICkgY29uc3Q7CiAgICB2b2lk
IGRpcmVjdFNldFZhbHVlKCBpbnQgdmFsICk7CiAgICBpbnQgcHJldlZhbHVlKCkgY29uc3Q7Cgog
ICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlKCk7CiAgICB2aXJ0dWFsIHZvaWQgcmFuZ2VDaGFu
Z2UoKTsKICAgIHZpcnR1YWwgdm9pZCBzdGVwQ2hhbmdlKCk7Cgpwcml2YXRlOgogICAgaW50IG1p
blZhbCwgbWF4VmFsOwogICAgaW50IGxpbmUsIHBhZ2U7CiAgICBpbnQgdmFsLCBwcmV2VmFsOwoK
ICAgIFFSYW5nZUNvbnRyb2xQcml2YXRlICogZDsKCnByaXZhdGU6CgogICAgUVJhbmdlQ29udHJv
bCggY29uc3QgUVJhbmdlQ29udHJvbCAmICk7CiAgICBRUmFuZ2VDb250cm9sICZvcGVyYXRvcj0o
IGNvbnN0IFFSYW5nZUNvbnRyb2wgJiApOwoKfTsKCgppbmxpbmUgaW50IFFSYW5nZUNvbnRyb2w6
OnZhbHVlKCkgY29uc3QKeyByZXR1cm4gdmFsOyB9CgppbmxpbmUgaW50IFFSYW5nZUNvbnRyb2w6
OnByZXZWYWx1ZSgpIGNvbnN0CnsgcmV0dXJuIHByZXZWYWw7IH0KCmlubGluZSBpbnQgUVJhbmdl
Q29udHJvbDo6bWluVmFsdWUoKSBjb25zdAp7IHJldHVybiBtaW5WYWw7IH0KCmlubGluZSBpbnQg
UVJhbmdlQ29udHJvbDo6bWF4VmFsdWUoKSBjb25zdAp7IHJldHVybiBtYXhWYWw7IH0KCmlubGlu
ZSBpbnQgUVJhbmdlQ29udHJvbDo6bGluZVN0ZXAoKSBjb25zdAp7IHJldHVybiBsaW5lOyB9Cgpp
bmxpbmUgaW50IFFSYW5nZUNvbnRyb2w6OnBhZ2VTdGVwKCkgY29uc3QKeyByZXR1cm4gcGFnZTsg
fQoKCgoKCgpjbGFzcyBRU3BpbldpZGdldFByaXZhdGU7CmNsYXNzIFFTcGluV2lkZ2V0IDogcHVi
bGljIFFXaWRnZXQKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hh
ciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciog
KTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29s
IHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50
IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHko
IFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0
YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0
aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg
KTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg
KTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CiAgICBRU3Bp
bldpZGdldCggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgflFT
cGluV2lkZ2V0KCk7CgogICAgdm9pZCBzZXRFZGl0V2lkZ2V0KCBRV2lkZ2V0ICogd2lkZ2V0ICk7
CiAgICBRV2lkZ2V0ICogZWRpdFdpZGdldCgpOwoKICAgIFFSZWN0IHVwUmVjdCgpIGNvbnN0Owog
ICAgUVJlY3QgZG93blJlY3QoKSBjb25zdDsKCiAgICB2b2lkIHNldFVwRW5hYmxlZCggYm9vbCBv
biApOwogICAgdm9pZCBzZXREb3duRW5hYmxlZCggYm9vbCBvbiApOwoKICAgIGJvb2wgaXNVcEVu
YWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNEb3duRW5hYmxlZCgpIGNvbnN0OwoKICAgIGVudW0g
QnV0dG9uU3ltYm9scyB7IFVwRG93bkFycm93cywgUGx1c01pbnVzIH07CiAgICB2aXJ0dWFsIHZv
aWQgc2V0QnV0dG9uU3ltYm9scyggQnV0dG9uU3ltYm9scyBicyApOwogICAgQnV0dG9uU3ltYm9s
cyBidXR0b25TeW1ib2xzKCkgY29uc3Q7CgogICAgdm9pZCBhcnJhbmdlKCk7Cgpwcm90ZWN0ZWQ6
CiAgICB2b2lkIHN0ZXBVcFByZXNzZWQoKTsKICAgIHZvaWQgc3RlcERvd25QcmVzc2VkKCk7Cgpw
dWJsaWMgOgogICAgdm9pZCBzdGVwVXAoKTsKICAgIHZvaWQgc3RlcERvd24oKTsKCnByb3RlY3Rl
ZDoKICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqZSApOwogICAgdm9pZCBy
ZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50KiBldiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVu
dCggUU1vdXNlRXZlbnQgKmUgKTsKICAgIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50
ICplICk7CgogICAgdm9pZCB3aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7CgogICAgdm9pZCBz
dHlsZUNoYW5nZSggUVN0eWxlJiApOwogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAq
ICk7CiAgICB2b2lkIGVuYWJsZUNoYW5nZWQoIGJvb2wgb2xkICk7CiAgICB2b2lkIHdpbmRvd0Fj
dGl2YXRpb25DaGFuZ2UoIGJvb2wgKTsKCnByaXZhdGUgOgogICAgdm9pZCB0aW1lckRvbmUoKTsK
ICAgIHZvaWQgdGltZXJEb25lRXgoKTsKCnByaXZhdGU6CiAgICBRU3BpbldpZGdldFByaXZhdGUg
KiBkOwoKICAgIHZvaWQgdXBkYXRlRGlzcGxheSgpOwoKcHJpdmF0ZToKCiAgICBRU3BpbldpZGdl
dCggY29uc3QgUVNwaW5XaWRnZXQmICk7CiAgICBRU3BpbldpZGdldCYgb3BlcmF0b3I9KCBjb25z
dCBRU3BpbldpZGdldCYgKTsKCn07CiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9x
c2Nyb2xsYmFyLmgiIDIKCgoKCnN0cnVjdCBRU2Nyb2xsQmFyUHJpdmF0ZTsKCmNsYXNzIFFTY3Jv
bGxCYXIgOiBwdWJsaWMgUVdpZGdldCwgcHVibGljIFFSYW5nZUNvbnRyb2wKewogICAgcHVibGlj
OiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
TWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZp
cnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9r
ZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3Qq
ICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYp
OyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFW
YXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVj
dCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRy
KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4
KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRh
T2JqZWN0ICptZXRhT2JqOwogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCgpwdWJsaWM6
CiAgICBRU2Nyb2xsQmFyKCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWUgPSAwICk7
CiAgICBRU2Nyb2xsQmFyKCBPcmllbnRhdGlvbiwgUVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFy
KiBuYW1lID0gMCApOwogICAgUVNjcm9sbEJhciggaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUs
IGludCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLAogICAgICAgICAgICAgICAgaW50IHZhbHVlLCBP
cmllbnRhdGlvbiwgUVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFyKiBuYW1lID0gMCApOwogICAg
flFTY3JvbGxCYXIoKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0T3JpZW50YXRpb24oIE9yaWVudGF0
aW9uICk7CiAgICBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2
b2lkIHNldFRyYWNraW5nKCBib29sIGVuYWJsZSApOwogICAgYm9vbCB0cmFja2luZygpIGNvbnN0
OwogICAgYm9vbCBkcmFnZ2luZ1NsaWRlcigpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgICB2aXJ0dWFsIFFTaXplIHNpemVIaW50KCkg
Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3kgc3AgKTsK
CiAgICBpbnQgbWluVmFsdWUoKSBjb25zdDsKICAgIGludCBtYXhWYWx1ZSgpIGNvbnN0OwogICAg
dm9pZCBzZXRNaW5WYWx1ZSggaW50ICk7CiAgICB2b2lkIHNldE1heFZhbHVlKCBpbnQgKTsKICAg
IGludCBsaW5lU3RlcCgpIGNvbnN0OwogICAgaW50IHBhZ2VTdGVwKCkgY29uc3Q7CiAgICB2b2lk
IHNldExpbmVTdGVwKCBpbnQgKTsKICAgIHZvaWQgc2V0UGFnZVN0ZXAoIGludCApOwogICAgaW50
IHZhbHVlKCkgY29uc3Q7CgogICAgaW50IHNsaWRlclN0YXJ0KCkgY29uc3Q7CiAgICBRUmVjdCBz
bGlkZXJSZWN0KCkgY29uc3Q7CgpwdWJsaWMgOgogICAgdm9pZCBzZXRWYWx1ZSggaW50ICk7Cgpw
cm90ZWN0ZWQ6CiAgICB2b2lkIHZhbHVlQ2hhbmdlZCggaW50IHZhbHVlICk7CiAgICB2b2lkIHNs
aWRlclByZXNzZWQoKTsKICAgIHZvaWQgc2xpZGVyTW92ZWQoIGludCB2YWx1ZSApOwogICAgdm9p
ZCBzbGlkZXJSZWxlYXNlZCgpOwogICAgdm9pZCBuZXh0TGluZSgpOwogICAgdm9pZCBwcmV2TGlu
ZSgpOwogICAgdm9pZCBuZXh0UGFnZSgpOwogICAgdm9pZCBwcmV2UGFnZSgpOwoKcHJvdGVjdGVk
OgoKICAgIHZvaWQgd2hlZWxFdmVudCggUVdoZWVsRXZlbnQgKiApOwoKICAgIHZvaWQga2V5UHJl
c3NFdmVudCggUUtleUV2ZW50ICogKTsKICAgIHZvaWQgcmVzaXplRXZlbnQoIFFSZXNpemVFdmVu
dCAqICk7CiAgICB2b2lkIHBhaW50RXZlbnQoIFFQYWludEV2ZW50ICogKTsKCiAgICB2b2lkIG1v
dXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVu
dCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQg
KiApOwogICAgdm9pZCBjb250ZXh0TWVudUV2ZW50KCBRQ29udGV4dE1lbnVFdmVudCAqICk7CiAg
ICB2b2lkIGhpZGVFdmVudCggUUhpZGVFdmVudCogKTsKCiAgICB2b2lkIHZhbHVlQ2hhbmdlKCk7
CiAgICB2b2lkIHN0ZXBDaGFuZ2UoKTsKICAgIHZvaWQgcmFuZ2VDaGFuZ2UoKTsKCiAgICB2b2lk
IHN0eWxlQ2hhbmdlKCBRU3R5bGUmICk7Cgpwcml2YXRlIDoKICAgIHZvaWQgZG9BdXRvUmVwZWF0
KCk7Cgpwcml2YXRlOgogICAgdm9pZCBpbml0KCk7CiAgICB2b2lkIHBvc2l0aW9uU2xpZGVyRnJv
bVZhbHVlKCk7CiAgICBpbnQgY2FsY3VsYXRlVmFsdWVGcm9tU2xpZGVyKCkgY29uc3Q7CgogICAg
dm9pZCBzdGFydEF1dG9SZXBlYXQoKTsKICAgIHZvaWQgc3RvcEF1dG9SZXBlYXQoKTsKCiAgICBp
bnQgcmFuZ2VWYWx1ZVRvU2xpZGVyUG9zKCBpbnQgdmFsICkgY29uc3Q7CiAgICBpbnQgc2xpZGVy
UG9zVG9SYW5nZVZhbHVlKCBpbnQgdmFsICkgY29uc3Q7CgogICAgdm9pZCBhY3Rpb24oIGludCBj
b250cm9sICk7CgogICAgdm9pZCBkcmF3Q29udHJvbHMoIHVpbnQgY29udHJvbHMsIHVpbnQgYWN0
aXZlQ29udHJvbCApIGNvbnN0OwogICAgdm9pZCBkcmF3Q29udHJvbHMoIHVpbnQgY29udHJvbHMs
IHVpbnQgYWN0aXZlQ29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciAqcCAp
IGNvbnN0OwoKICAgIHVpbnQgcHJlc3NlZENvbnRyb2w7CiAgICBib29sIHRyYWNrOwogICAgYm9v
bCBjbGlja2VkQXQ7CiAgICBPcmllbnRhdGlvbiBvcmllbnQ7CgogICAgaW50IHNsaWRlUHJldlZh
bDsKICAgIFFDT09SRCBzbGlkZXJQb3M7CiAgICBRQ09PUkQgY2xpY2tPZmZzZXQ7CgogICAgUVRp
bWVyICogcmVwZWF0ZXI7CiAgICBRU2Nyb2xsQmFyUHJpdmF0ZSAqIGQ7Cgpwcml2YXRlOgoKICAg
IFFTY3JvbGxCYXIoIGNvbnN0IFFTY3JvbGxCYXIgJiApOwogICAgUVNjcm9sbEJhciAmb3BlcmF0
b3I9KCBjb25zdCBRU2Nyb2xsQmFyICYgKTsKCn07CgoKaW5saW5lIHZvaWQgUVNjcm9sbEJhcjo6
c2V0VHJhY2tpbmcoIGJvb2wgdCApCnsKICAgIHRyYWNrID0gdDsKfQoKaW5saW5lIGJvb2wgUVNj
cm9sbEJhcjo6dHJhY2tpbmcoKSBjb25zdAp7CiAgICByZXR1cm4gdHJhY2s7Cn0KCmlubGluZSBR
U2Nyb2xsQmFyOjpPcmllbnRhdGlvbiBRU2Nyb2xsQmFyOjpvcmllbnRhdGlvbigpIGNvbnN0CnsK
ICAgIHJldHVybiBvcmllbnQ7Cn0KCmlubGluZSBpbnQgUVNjcm9sbEJhcjo6c2xpZGVyU3RhcnQo
KSBjb25zdAp7CiAgICByZXR1cm4gc2xpZGVyUG9zOwp9CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xc2Nyb2xsdmlldy5oIiAyCgoKCgpjbGFzcyBRU2Nyb2xsVmlld0RhdGE7Cgpj
bGFzcyBRU2Nyb2xsVmlldyA6IHB1YmxpYyBRRnJhbWUKewogICAgcHVibGljOiB2aXJ0dWFsIFFN
ZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgp
OyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCog
cXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9i
amVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwg
Ym9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9v
bCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBz
dGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgp
IHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRh
T2JqOwogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCiAgIAoKCnB1Ymxp
YzoKICAgIFFTY3JvbGxWaWV3KFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAs
IFdGbGFncyBmPTApOwogICAgflFTY3JvbGxWaWV3KCk7CgogICAgZW51bSBSZXNpemVQb2xpY3kg
eyBEZWZhdWx0LCBNYW51YWwsIEF1dG9PbmUsIEF1dG9PbmVGaXQgfTsKICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZXNpemVQb2xpY3koIFJlc2l6ZVBvbGljeSApOwogICAgUmVzaXplUG9saWN5IHJlc2l6
ZVBvbGljeSgpIGNvbnN0OwoKICAgIHZvaWQgc3R5bGVDaGFuZ2UoIFFTdHlsZSAmICk7CiAgICB2
b2lkIHJlbW92ZUNoaWxkKFFXaWRnZXQqIGNoaWxkKTsKICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZCggUVdpZGdldCogY2hpbGQsIGludCB4PTAsIGludCB5PTAgKTsKICAgIHZpcnR1YWwgdm9pZCBt
b3ZlQ2hpbGQoIFFXaWRnZXQqIGNoaWxkLCBpbnQgeCwgaW50IHkgKTsKICAgIGludCBjaGlsZFgo
UVdpZGdldCogY2hpbGQpOwogICAgaW50IGNoaWxkWShRV2lkZ2V0KiBjaGlsZCk7CiAgICBib29s
IGNoaWxkSXNWaXNpYmxlKFFXaWRnZXQqIGNoaWxkKSB7IHJldHVybiBjaGlsZC0+aXNWaXNpYmxl
KCk7IH0KICAgIHZvaWQgc2hvd0NoaWxkKFFXaWRnZXQqIGNoaWxkLCBib29sIHllcz1UUlVFKSB7
CiAgICAgICAgaWYgKCB5ZXMgKQogICAgICAgICAgICBjaGlsZC0+c2hvdygpOwogICAgICAgIGVs
c2UKICAgICAgICAgICAgY2hpbGQtPmhpZGUoKTsKICAgIH0KCiAgICBlbnVtIFNjcm9sbEJhck1v
ZGUgeyBBdXRvLCBBbHdheXNPZmYsIEFsd2F5c09uIH07CgogICAgU2Nyb2xsQmFyTW9kZSB2U2Ny
b2xsQmFyTW9kZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFZTY3JvbGxCYXJNb2RlKCBT
Y3JvbGxCYXJNb2RlICk7CgogICAgU2Nyb2xsQmFyTW9kZSBoU2Nyb2xsQmFyTW9kZSgpIGNvbnN0
OwogICAgdmlydHVhbCB2b2lkIHNldEhTY3JvbGxCYXJNb2RlKCBTY3JvbGxCYXJNb2RlICk7Cgog
ICAgUVdpZGdldCogY29ybmVyV2lkZ2V0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q29y
bmVyV2lkZ2V0KFFXaWRnZXQqKTsKCgoKICAgIFFTY3JvbGxCYXIqIGhvcml6b250YWxTY3JvbGxC
YXIoKSBjb25zdDsKICAgIFFTY3JvbGxCYXIqIHZlcnRpY2FsU2Nyb2xsQmFyKCkgY29uc3Q7CiAg
ICBRV2lkZ2V0KiB2aWV3cG9ydCgpIGNvbnN0OwogICAgUVdpZGdldCogY2xpcHBlcigpIGNvbnN0
OwoKICAgIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKICAgIGludCB2aXNpYmxlSGVpZ2h0KCkg
Y29uc3Q7CgogICAgaW50IGNvbnRlbnRzV2lkdGgoKSBjb25zdDsKICAgIGludCBjb250ZW50c0hl
aWdodCgpIGNvbnN0OwogICAgaW50IGNvbnRlbnRzWCgpIGNvbnN0OwogICAgaW50IGNvbnRlbnRz
WSgpIGNvbnN0OwoKICAgIHZvaWQgcmVzaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgcmVz
aXplKCBjb25zdCBRU2l6ZSYgKTsKICAgIHZvaWQgc2hvdygpOwoKICAgIHZvaWQgdXBkYXRlQ29u
dGVudHMoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKCBjb25zdCBRUmVjdCYgciApOwogICAgdm9pZCB1cGRhdGVDb250ZW50cygpOwogICAgdm9p
ZCByZXBhaW50Q29udGVudHMoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBib29sIGVyYXNl
PVRSVUUgKTsKICAgIHZvaWQgcmVwYWludENvbnRlbnRzKCBjb25zdCBRUmVjdCYgciwgYm9vbCBl
cmFzZT1UUlVFICk7CiAgICB2b2lkIHJlcGFpbnRDb250ZW50cyggYm9vbCBlcmFzZT1UUlVFICk7
CiAgICB2b2lkIGNvbnRlbnRzVG9WaWV3cG9ydCggaW50IHgsIGludCB5LCBpbnQmIHZ4LCBpbnQm
IHZ5ICkgY29uc3Q7CiAgICB2b2lkIHZpZXdwb3J0VG9Db250ZW50cyggaW50IHZ4LCBpbnQgdnks
IGludCYgeCwgaW50JiB5ICkgY29uc3Q7CiAgICBRUG9pbnQgY29udGVudHNUb1ZpZXdwb3J0KCBj
b25zdCBRUG9pbnQmICkgY29uc3Q7CiAgICBRUG9pbnQgdmlld3BvcnRUb0NvbnRlbnRzKCBjb25z
dCBRUG9pbnQmICkgY29uc3Q7CiAgICB2b2lkIGVuYWJsZUNsaXBwZXIoIGJvb2wgeSApOwoKICAg
IHZvaWQgc2V0U3RhdGljQmFja2dyb3VuZCggYm9vbCB5ICk7CiAgICBib29sIGhhc1N0YXRpY0Jh
Y2tncm91bmQoKSBjb25zdDsKCiAgICBRU2l6ZSB2aWV3cG9ydFNpemUoIGludCwgaW50ICkgY29u
c3Q7CiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNpemUgbWluaW11bVNpemVIaW50
KCkgY29uc3Q7CgogICAgdm9pZCByZW1vdmVDaGlsZChRT2JqZWN0KiBjaGlsZCk7CgogICAgYm9v
bCBpc0hvcml6b250YWxTbGlkZXJQcmVzc2VkKCk7CiAgICBib29sIGlzVmVydGljYWxTbGlkZXJQ
cmVzc2VkKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnQXV0b1Njcm9sbCggYm9vbCBiICk7
CiAgICBib29sIGRyYWdBdXRvU2Nyb2xsKCkgY29uc3Q7CgoKcHJvdGVjdGVkOgogICAgdm9pZCBj
b250ZW50c01vdmluZyhpbnQgeCwgaW50IHkpOwogICAgdm9pZCBob3Jpem9udGFsU2xpZGVyUHJl
c3NlZCgpOwogICAgdm9pZCBob3Jpem9udGFsU2xpZGVyUmVsZWFzZWQoKTsKICAgIHZvaWQgdmVy
dGljYWxTbGlkZXJQcmVzc2VkKCk7CiAgICB2b2lkIHZlcnRpY2FsU2xpZGVyUmVsZWFzZWQoKTsK
CnB1YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgcmVzaXplQ29udGVudHMoIGludCB3LCBpbnQgaCAp
OwogICAgdm9pZCBzY3JvbGxCeSggaW50IGR4LCBpbnQgZHkgKTsKICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1BvcyggaW50IHgsIGludCB5ICk7CiAgICB2b2lkIGVuc3VyZVZpc2libGUoaW50
IHgsIGludCB5KTsKICAgIHZvaWQgZW5zdXJlVmlzaWJsZShpbnQgeCwgaW50IHksIGludCB4bWFy
Z2luLCBpbnQgeW1hcmdpbik7CiAgICB2b2lkIGNlbnRlcihpbnQgeCwgaW50IHkpOwogICAgdm9p
ZCBjZW50ZXIoaW50IHgsIGludCB5LCBmbG9hdCB4bWFyZ2luLCBmbG9hdCB5bWFyZ2luKTsKCiAg
ICB2b2lkIHVwZGF0ZVNjcm9sbEJhcnMoKTsKICAgIHZvaWQgc2V0RW5hYmxlZCggYm9vbCBlbmFi
bGUgKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29udGVudHMoUVBhaW50ZXIq
LCBpbnQgY3gsIGludCBjeSwgaW50IGN3LCBpbnQgY2gpOwogICAgdmlydHVhbCB2b2lkIGRyYXdD
b250ZW50c09mZnNldChRUGFpbnRlciosIGludCBveCwgaW50IG95LAogICAgICAgICAgICAgICAg
ICAgIGludCBjeCwgaW50IGN5LCBpbnQgY3csIGludCBjaCk7CgoKICAgIHZpcnR1YWwgdm9pZCBj
b250ZW50c01vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQqICk7CiAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudHNNb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQqICk7CiAgICB2aXJ0dWFsIHZv
aWQgY29udGVudHNNb3VzZURvdWJsZUNsaWNrRXZlbnQoIFFNb3VzZUV2ZW50KiApOwogICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRzTW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50KiApOwoKICAgIHZp
cnR1YWwgdm9pZCBjb250ZW50c0RyYWdFbnRlckV2ZW50KCBRRHJhZ0VudGVyRXZlbnQgKiApOwog
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzRHJhZ01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKiAp
OwogICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzRHJhZ0xlYXZlRXZlbnQoIFFEcmFnTGVhdmVFdmVu
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNEcm9wRXZlbnQoIFFEcm9wRXZlbnQgKiAp
OwoKCiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNXaGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7
CgogICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzQ29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51
RXZlbnQgKiApOwoKCiAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRQYWludEV2ZW50KCBRUGFpbnRF
dmVudCogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydFJlc2l6ZUV2ZW50KCBRUmVzaXplRXZl
bnQqICk7CiAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRNb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2
ZW50KiApOwogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0TW91c2VSZWxlYXNlRXZlbnQoIFFNb3Vz
ZUV2ZW50KiApOwogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0TW91c2VEb3VibGVDbGlja0V2ZW50
KCBRTW91c2VFdmVudCogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydE1vdXNlTW92ZUV2ZW50
KCBRTW91c2VFdmVudCogKTsKCiAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnREcmFnRW50ZXJFdmVu
dCggUURyYWdFbnRlckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydERyYWdNb3Zl
RXZlbnQoIFFEcmFnTW92ZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydERyYWdM
ZWF2ZUV2ZW50KCBRRHJhZ0xlYXZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0
RHJvcEV2ZW50KCBRRHJvcEV2ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0V2hl
ZWxFdmVudCggUVdoZWVsRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydENvbnRl
eHRNZW51RXZlbnQoIFFDb250ZXh0TWVudUV2ZW50ICogKTsKCiAgICB2b2lkIGZyYW1lQ2hhbmdl
ZCgpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXJnaW5zKGludCBsZWZ0LCBpbnQgdG9wLCBpbnQg
cmlnaHQsIGludCBib3R0b20pOwogICAgaW50IGxlZnRNYXJnaW4oKSBjb25zdDsKICAgIGludCB0
b3BNYXJnaW4oKSBjb25zdDsKICAgIGludCByaWdodE1hcmdpbigpIGNvbnN0OwogICAgaW50IGJv
dHRvbU1hcmdpbigpIGNvbnN0OwoKICAgIGJvb2wgZm9jdXNOZXh0UHJldkNoaWxkKCBib29sIG5l
eHQgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0SEJhckdlb21ldHJ5KFFTY3JvbGxCYXImIGhiYXIs
IGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRWQmFyR2Vv
bWV0cnkoUVNjcm9sbEJhciYgdmJhciwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwoKICAg
IHZvaWQgcmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50Kik7CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVu
dCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZl
bnQgKiApOwogICAgdm9pZCBtb3VzZURvdWJsZUNsaWNrRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsK
ICAgIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKCiAgICB2b2lkIHdoZWVs
RXZlbnQoIFFXaGVlbEV2ZW50ICogKTsKCiAgICB2b2lkIGNvbnRleHRNZW51RXZlbnQoIFFDb250
ZXh0TWVudUV2ZW50ICogKTsKICAgIGJvb2wgZXZlbnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50
ICplICk7CgogICAgdm9pZCBzZXRDYWNoZWRTaXplSGludCggY29uc3QgUVNpemUgJnNoICkgY29u
c3Q7CiAgICBRU2l6ZSBjYWNoZWRTaXplSGludCgpIGNvbnN0OwogICAgdm9pZCBmb250Q2hhbmdl
KCBjb25zdCBRRm9udCAmICk7Cgpwcml2YXRlOgogICAgdm9pZCBkcmF3Q29udGVudHMoIFFQYWlu
dGVyKiApOwogICAgdm9pZCBtb3ZlQ29udGVudHMoaW50IHgsIGludCB5KTsKCiAgICBRU2Nyb2xs
Vmlld0RhdGEqIGQ7Cgpwcml2YXRlIDoKICAgIHZvaWQgaHNsaWRlKGludCk7CiAgICB2b2lkIHZz
bGlkZShpbnQpOwogICAgdm9pZCBoYmFySXNQcmVzc2VkKCk7CiAgICB2b2lkIGhiYXJJc1JlbGVh
c2VkKCk7CiAgICB2b2lkIHZiYXJJc1ByZXNzZWQoKTsKICAgIHZvaWQgdmJhcklzUmVsZWFzZWQo
KTsKCiAgICB2b2lkIGRvRHJhZ0F1dG9TY3JvbGwoKTsKICAgIHZvaWQgc3RhcnREcmFnQXV0b1Nj
cm9sbCgpOwogICAgdm9pZCBzdG9wRHJhZ0F1dG9TY3JvbGwoKTsKCgpwcml2YXRlOgoKICAgIFFT
Y3JvbGxWaWV3KCBjb25zdCBRU2Nyb2xsVmlldyAmICk7CiAgICBRU2Nyb2xsVmlldyAmb3BlcmF0
b3I9KCBjb25zdCBRU2Nyb2xsVmlldyAmICk7CgogICAgdm9pZCBjaGFuZ2VGcmFtZVJlY3QoY29u
c3QgUVJlY3QmKTsKCnB1YmxpYzoKICAgIHZvaWQgZGlzYWJsZVNpemVIaW50Q2FjaGluZygpOwoK
fTsKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0YWJsZS5oIiAyCiMgMSAiL3Vz
ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwaXhtYXAuaCIgMQojIDQ4ICIvdXNyL2xvY2FsL3F0
LTMuMS4xL2luY2x1ZGUvcXBpeG1hcC5oIgpjbGFzcyBRR2Z4OwpjbGFzcyBRUGl4bWFwUHJpdmF0
ZTsKCgoKCgoKCmNsYXNzIFFQaXhtYXAgOiBwdWJsaWMgUVBhaW50RGV2aWNlLCBwdWJsaWMgUXQK
ewpwdWJsaWM6CiAgICBlbnVtIENvbG9yTW9kZSB7IEF1dG8sIENvbG9yLCBNb25vIH07CiAgICBl
bnVtIE9wdGltaXphdGlvbiB7IERlZmF1bHRPcHRpbSwgTm9PcHRpbSwgTWVtb3J5T3B0aW09Tm9P
cHRpbSwKICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsT3B0aW0sIEJlc3RPcHRpbSB9OwoK
ICAgIFFQaXhtYXAoKTsKICAgIFFQaXhtYXAoIGNvbnN0IFFJbWFnZSYgaW1hZ2UgKTsKICAgIFFQ
aXhtYXAoIGludCB3LCBpbnQgaCwgaW50IGRlcHRoID0gLTEsIE9wdGltaXphdGlvbiA9IERlZmF1
bHRPcHRpbSApOwogICAgUVBpeG1hcCggY29uc3QgUVNpemUgJiwgaW50IGRlcHRoID0gLTEsIE9w
dGltaXphdGlvbiA9IERlZmF1bHRPcHRpbSApOwoKICAgIFFQaXhtYXAoIGNvbnN0IFFTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBjaGFyICpmb3JtYXQ9MCwKICAgICAgICAgICAgIENvbG9yTW9kZSBt
b2RlPUF1dG8gKTsKICAgIFFQaXhtYXAoIGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBj
aGFyICpmb3JtYXQsCiAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncyApOwogICAgUVBp
eG1hcCggY29uc3QgY2hhciAqeHBtW10gKTsKICAgIFFQaXhtYXAoIGNvbnN0IFFCeXRlQXJyYXkg
JmRhdGEgKTsKCiAgICBRUGl4bWFwKCBjb25zdCBRUGl4bWFwICYgKTsKICAgflFQaXhtYXAoKTsK
CiAgICBRUGl4bWFwICZvcGVyYXRvcj0oIGNvbnN0IFFQaXhtYXAgJiApOwogICAgUVBpeG1hcCAm
b3BlcmF0b3I9KCBjb25zdCBRSW1hZ2UgJiApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Cgog
ICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+dzsgfQogICAgaW50IGhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIGRhdGEtPmg7IH0KICAgIFFTaXplIHNpemUoKSBjb25zdCB7IHJldHVy
biBRU2l6ZShkYXRhLT53LGRhdGEtPmgpOyB9CiAgICBRUmVjdCByZWN0KCkgY29uc3QgeyByZXR1
cm4gUVJlY3QoMCwwLGRhdGEtPncsZGF0YS0+aCk7IH0KICAgIGludCBkZXB0aCgpIGNvbnN0IHsg
cmV0dXJuIGRhdGEtPmQ7IH0KICAgIHN0YXRpYyBpbnQgZGVmYXVsdERlcHRoKCk7CgogICAgdm9p
ZCBmaWxsKCBjb25zdCBRQ29sb3IgJmZpbGxDb2xvciA9IFF0Ojp3aGl0ZSApOwogICAgdm9pZCBm
aWxsKCBjb25zdCBRV2lkZ2V0ICosIGludCB4b2ZzLCBpbnQgeW9mcyApOwogICAgdm9pZCBmaWxs
KCBjb25zdCBRV2lkZ2V0ICosIGNvbnN0IFFQb2ludCAmb2ZzICk7CiAgICB2b2lkIHJlc2l6ZSgg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0ICk7CiAgICB2b2lkIHJlc2l6ZSggY29uc3QgUVNpemUgJiAp
OwoKICAgIGNvbnN0IFFCaXRtYXAgKm1hc2soKSBjb25zdDsKICAgIHZvaWQgc2V0TWFzayggY29u
c3QgUUJpdG1hcCAmICk7CiAgICBib29sIHNlbGZNYXNrKCkgY29uc3Q7CiAgICBib29sIGhhc0Fs
cGhhKCkgY29uc3Q7CgogICAgUUJpdG1hcCBjcmVhdGVIZXVyaXN0aWNNYXNrKCBib29sIGNsaXBU
aWdodCA9IFRSVUUgKSBjb25zdDsKCgogICAgc3RhdGljIFFQaXhtYXAgZnJvbU1pbWVTb3VyY2Uo
IGNvbnN0IFFTdHJpbmcmIGFic19uYW1lICk7CgogICAgc3RhdGljIFFQaXhtYXAgZ3JhYldpbmRv
dyggV0lkLCBpbnQgeD0wLCBpbnQgeT0wLCBpbnQgdz0tMSwgaW50IGg9LTEgKTsKICAgIHN0YXRp
YyBRUGl4bWFwIGdyYWJXaWRnZXQoIFFXaWRnZXQgKiB3aWRnZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHg9MCwgaW50IHk9MCwgaW50IHc9LTEsIGludCBoPS0xICk7CgoK
ICAgIFFQaXhtYXAgeEZvcm0oIGNvbnN0IFFXTWF0cml4ICYgKSBjb25zdDsKICAgIHN0YXRpYyBR
V01hdHJpeCB0cnVlTWF0cml4KCBjb25zdCBRV01hdHJpeCAmLCBpbnQgdywgaW50IGggKTsKCgog
ICAgUUltYWdlIGNvbnZlcnRUb0ltYWdlKCkgY29uc3Q7CiAgICBib29sIGNvbnZlcnRGcm9tSW1h
Z2UoIGNvbnN0IFFJbWFnZSAmLCBDb2xvck1vZGUgbW9kZT1BdXRvICk7CiAgICBib29sIGNvbnZl
cnRGcm9tSW1hZ2UoIGNvbnN0IFFJbWFnZSAmLCBpbnQgY29udmVyc2lvbl9mbGFncyApOwoKICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBpbWFnZUZvcm1hdCggY29uc3QgUVN0cmluZyAmZmlsZU5hbWUg
KTsKICAgIGJvb2wgbG9hZCggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IGNoYXIgKmZv
cm1hdD0wLAogICAgICAgICAgICAgICAgICAgICAgQ29sb3JNb2RlIG1vZGU9QXV0byApOwogICAg
Ym9vbCBsb2FkKCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3MgKTsKICAgIGJvb2wgbG9h
ZEZyb21EYXRhKCBjb25zdCB1Y2hhciAqYnVmLCB1aW50IGxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZm9ybWF0PTAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbG9yTW9kZSBtb2RlPUF1dG8gKTsKICAgIGJvb2wgbG9hZEZyb21EYXRhKCBjb25z
dCB1Y2hhciAqYnVmLCB1aW50IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udmVy
c2lvbl9mbGFncyApOwogICAgYm9vbCBsb2FkRnJvbURhdGEoIGNvbnN0IFFCeXRlQXJyYXkgJmRh
dGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdD0wLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncz0wICk7CiAg
ICBib29sIHNhdmUoIGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBmb3JtYXQs
IGludCBxdWFsaXR5ID0gLTEgKSBjb25zdDsKCgoKCgoKICAgIGludCBzZXJpYWxOdW1iZXIoKSBj
b25zdDsKCiAgICBPcHRpbWl6YXRpb24gb3B0aW1pemF0aW9uKCkgY29uc3Q7CiAgICB2b2lkIHNl
dE9wdGltaXphdGlvbiggT3B0aW1pemF0aW9uICk7CiAgICBzdGF0aWMgT3B0aW1pemF0aW9uIGRl
ZmF1bHRPcHRpbWl6YXRpb24oKTsKICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRPcHRpbWl6YXRp
b24oIE9wdGltaXphdGlvbiApOwoKICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKCiAgICBib29s
IGlzUUJpdG1hcCgpIGNvbnN0OwojIDE2OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fw
aXhtYXAuaCIKICAgIHN0YXRpYyBpbnQgeDExU2V0RGVmYXVsdFNjcmVlbiggaW50IHNjcmVlbiAp
OwogICAgdm9pZCB4MTFTZXRTY3JlZW4oIGludCBzY3JlZW4gKTsKCgogICAKCnByb3RlY3RlZDoK
ICAgIFFQaXhtYXAoIGludCB3LCBpbnQgaCwgY29uc3QgdWNoYXIgKmRhdGEsIGJvb2wgaXNYYml0
bWFwICk7CiAgICBpbnQgbWV0cmljKCBpbnQgKSBjb25zdDsKIyAxODYgIi91c3IvbG9jYWwvcXQt
My4xLjEvaW5jbHVkZS9xcGl4bWFwLmgiCiAgICBzdHJ1Y3QgUVBpeG1hcERhdGEgOiBwdWJsaWMg
UVNoYXJlZCB7CiAgICAgICAgUUNPT1JEIHcsIGg7CiAgICAgICAgc2hvcnQgZDsKICAgICAgICB1
aW50IHVuaW5pdCA6IDE7CiAgICAgICAgdWludCBiaXRtYXAgOiAxOwogICAgICAgIHVpbnQgc2Vs
Zm1hc2sgOiAxOwoKCgogICAgICAgIGludCBzZXJfbm87CiAgICAgICAgUUJpdG1hcCAqbWFzazsK
IyAyMDYgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGl4bWFwLmgiCiAgICAgICAgdm9p
ZCAqeGltYWdlOwogICAgICAgIHZvaWQgKm1hc2tnYzsKICAgICAgICBRUGl4bWFwICphbHBoYXBt
OwojIDIyMCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwaXhtYXAuaCIKICAgICAgICBP
cHRpbWl6YXRpb24gb3B0aW07CiAgICB9ICpkYXRhOwpwcml2YXRlOgogICAgUVBpeG1hcCggaW50
IHcsIGludCBoLCBpbnQgZGVwdGgsIGJvb2wsIE9wdGltaXphdGlvbiApOwogICAgdm9pZCBpbml0
KCBpbnQsIGludCwgaW50LCBib29sLCBPcHRpbWl6YXRpb24gKTsKICAgIHZvaWQgZGVyZWYoKTsK
ICAgIFFQaXhtYXAgY29weSggYm9vbCBpZ25vcmVNYXNrID0gRkFMU0UgKSBjb25zdDsKICAgIHN0
YXRpYyBPcHRpbWl6YXRpb24gZGVmT3B0aW07CiAgICBmcmllbmQgdm9pZCBiaXRCbHQoIFFQYWlu
dERldmljZSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUVBhaW50RGV2aWNlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwg
aW50LCBpbnQsIGludCwgUmFzdGVyT3AsIGJvb2wgKTsKICAgIGZyaWVuZCB2b2lkIGJpdEJsdCgg
UVBhaW50RGV2aWNlICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRSW1hZ2UqIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
LCBpbnQsIGludCwgaW50LCBpbnQgY29udmVyc2lvbl9mbGFncyApOwoKCiAgICBmcmllbmQgdm9p
ZCBxdF94MTFfY29weV9hbHBoYV9waXhtYXAoUVBpeG1hcCAqZHN0LCBjb25zdCBRUGl4bWFwICpz
cmMpOwogICAgZnJpZW5kIHZvaWQgcXRfeDExX2JsaXRfYWxwaGFfcGl4bWFwKFFQaXhtYXAgKmRz
dCwgaW50IGR4LCBpbnQgZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUVBpeG1hcCAqc3JjLCBpbnQgc3ggPSAwLCBpbnQgc3kgPSAwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdyA9IC0xLCBpbnQgc2ggPSAtMSk7
CgoKCgoKCgogICAgZnJpZW5kIGNsYXNzIFFCaXRtYXA7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50
RGV2aWNlOwogICAgZnJpZW5kIGNsYXNzIFFQYWludGVyOwp9OwoKCmlubGluZSBib29sIFFQaXht
YXA6OmlzTnVsbCgpIGNvbnN0CnsKICAgIHJldHVybiBkYXRhLT53ID09IDA7Cn0KCmlubGluZSB2
b2lkIFFQaXhtYXA6OmZpbGwoIGNvbnN0IFFXaWRnZXQgKncsIGNvbnN0IFFQb2ludCAmb2ZzICkK
ewogICAgZmlsbCggdywgb2ZzLngoKSwgb2ZzLnkoKSApOwp9CgppbmxpbmUgdm9pZCBRUGl4bWFw
OjpyZXNpemUoIGNvbnN0IFFTaXplICZzICkKewogICAgcmVzaXplKCBzLndpZHRoKCksIHMuaGVp
Z2h0KCkgKTsKfQoKaW5saW5lIGNvbnN0IFFCaXRtYXAgKlFQaXhtYXA6Om1hc2soKSBjb25zdAp7
CiAgICByZXR1cm4gZGF0YS0+bWFzazsKfQoKaW5saW5lIGJvb2wgUVBpeG1hcDo6c2VsZk1hc2so
KSBjb25zdAp7CiAgICByZXR1cm4gZGF0YS0+c2VsZm1hc2s7Cn0KIyAyODUgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xcGl4bWFwLmgiCmlubGluZSBpbnQgUVBpeG1hcDo6c2VyaWFsTnVt
YmVyKCkgY29uc3QKewogICAgcmV0dXJuIGRhdGEtPnNlcl9ubzsKfQoKaW5saW5lIFFQaXhtYXA6
Ok9wdGltaXphdGlvbiBRUGl4bWFwOjpvcHRpbWl6YXRpb24oKSBjb25zdAp7CiAgICByZXR1cm4g
ZGF0YS0+b3B0aW07Cn0KCmlubGluZSBib29sIFFQaXhtYXA6OmlzUUJpdG1hcCgpIGNvbnN0CnsK
ICAgIHJldHVybiBkYXRhLT5iaXRtYXA7Cn0KIyAzMTMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j
bHVkZS9xcGl4bWFwLmgiCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg
Y29uc3QgUVBpeG1hcCAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0g
JiwgUVBpeG1hcCAmICk7CiMgMzI3ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBpeG1h
cC5oIgpib29sIHF0X3hGb3JtX2hlbHBlciggY29uc3QgUVdNYXRyaXgmLCBpbnQsIGludCwgaW50
LCB1Y2hhciosIGludCwgaW50LCBpbnQsIHVjaGFyKiwgaW50LCBpbnQsIGludCApOwojIDQzICIv
dXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXRhYmxlLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0
LTMuMS4xL2luY2x1ZGUvcXB0cnZlY3Rvci5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xcHRydmVjdG9yLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fn
dmVjdG9yLmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FndmVjdG9yLmgi
CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwdHJjb2xsZWN0aW9uLmgiIDEKIyA0
MCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwdHJjb2xsZWN0aW9uLmgiCiMgMSAiL3Vz
ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDQxICIvdXNyL2xvY2FsL3F0
LTMuMS4xL2luY2x1ZGUvcXB0cmNvbGxlY3Rpb24uaCIgMgoKCgpjbGFzcyBRR1ZlY3RvcjsKY2xh
c3MgUUdMaXN0OwpjbGFzcyBRR0RpY3Q7CgoKY2xhc3MgUVB0ckNvbGxlY3Rpb24KewpwdWJsaWM6
CiAgICBib29sIGF1dG9EZWxldGUoKSBjb25zdCB7IHJldHVybiBkZWxfaXRlbTsgfQogICAgdm9p
ZCBzZXRBdXRvRGVsZXRlKCBib29sIGVuYWJsZSApIHsgZGVsX2l0ZW0gPSBlbmFibGU7IH0KCiAg
ICB2aXJ0dWFsIHVpbnQgY291bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
KSA9IDA7CgogICAgdHlwZWRlZiB2b2lkICpJdGVtOwoKcHJvdGVjdGVkOgogICAgUVB0ckNvbGxl
Y3Rpb24oKSB7IGRlbF9pdGVtID0gRkFMU0U7IH0KICAgIFFQdHJDb2xsZWN0aW9uKGNvbnN0IFFQ
dHJDb2xsZWN0aW9uICYpIHsgZGVsX2l0ZW0gPSBGQUxTRTsgfQogICAgdmlydHVhbCB+UVB0ckNv
bGxlY3Rpb24oKSB7fQoKICAgIGJvb2wgZGVsX2l0ZW07CgogICAgdmlydHVhbCBJdGVtIG5ld0l0
ZW0oIEl0ZW0gKTsKICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKCBJdGVtICkgPSAwOwp9Owoj
IDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWd2ZWN0b3IuaCIgMgoKCgpjbGFzcyBR
R1ZlY3RvciA6IHB1YmxpYyBRUHRyQ29sbGVjdGlvbgp7CmZyaWVuZCBjbGFzcyBRR0xpc3Q7CnB1
YmxpYzoKCiAgICBRRGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJiApOwogICAgUURhdGFT
dHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmICkgY29uc3Q7CgogICAgdmlydHVhbCBpbnQgY29t
cGFyZUl0ZW1zKCBJdGVtLCBJdGVtICk7Cgpwcm90ZWN0ZWQ6CiAgICBRR1ZlY3RvcigpOwogICAg
UUdWZWN0b3IoIHVpbnQgc2l6ZSApOwogICAgUUdWZWN0b3IoIGNvbnN0IFFHVmVjdG9yICZ2ICk7
CiAgIH5RR1ZlY3RvcigpOwoKICAgIFFHVmVjdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFHVmVjdG9y
ICZ2ICk7CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFHVmVjdG9yICZ2ICkgY29uc3Q7Cgog
ICAgSXRlbSAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHZlYzsgfQogICAgdWludCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbGVuOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbnVtSXRl
bXM7IH0KCiAgICBib29sIGluc2VydCggdWludCBpbmRleCwgSXRlbSApOwogICAgYm9vbCByZW1v
dmUoIHVpbnQgaW5kZXggKTsKICAgIEl0ZW0gdGFrZSggdWludCBpbmRleCApOwoKICAgIHZvaWQg
Y2xlYXIoKTsKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld3NpemUgKTsKCiAgICBib29sIGZpbGwo
IEl0ZW0sIGludCBmbGVuICk7CgogICAgdm9pZCBzb3J0KCk7CiAgICBpbnQgYnNlYXJjaCggSXRl
bSApIGNvbnN0OwoKICAgIGludCBmaW5kUmVmKCBJdGVtLCB1aW50IGluZGV4ICkgY29uc3Q7CiAg
ICBpbnQgZmluZCggSXRlbSwgdWludCBpbmRleCApIGNvbnN0OwogICAgdWludCBjb250YWluc1Jl
ZiggSXRlbSApIGNvbnN0OwogICAgdWludCBjb250YWlucyggSXRlbSApIGNvbnN0OwoKICAgIEl0
ZW0gYXQoIHVpbnQgaW5kZXggKSBjb25zdAogICAgewoKICAgICAgICBpZiAoIGluZGV4ID49IGxl
biApCiAgICAgICAgICAgIHdhcm5pbmdJbmRleFJhbmdlKCBpbmRleCApOwoKICAgICAgICByZXR1
cm4gdmVjW2luZGV4XTsKICAgIH0KCiAgICBib29sIGluc2VydEV4cGFuZCggdWludCBpbmRleCwg
SXRlbSApOwoKICAgIHZvaWQgdG9MaXN0KCBRR0xpc3QgKiApIGNvbnN0OwoKCiAgICB2aXJ0dWFs
IFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBJdGVtICYgKTsKICAgIHZpcnR1YWwg
UURhdGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmLCBJdGVtICkgY29uc3Q7Cgpwcml2YXRl
OgogICAgSXRlbSAqdmVjOwogICAgdWludCBsZW47CiAgICB1aW50IG51bUl0ZW1zOwoKICAgIHN0
YXRpYyB2b2lkIHdhcm5pbmdJbmRleFJhbmdlKCB1aW50ICk7Cn07CgoKCgoKCgogUURhdGFTdHJl
YW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFHVmVjdG9yICYgKTsKIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRR1ZlY3RvciAmICk7CiMgNDMgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcHRydmVjdG9yLmgiIDIKCgp0ZW1wbGF0ZTxjbGFz
cyB0eXBlPgpjbGFzcyBRUHRyVmVjdG9yCgoKCiAgICAgICAgOiBwdWJsaWMgUUdWZWN0b3IKCnsK
cHVibGljOgogICAgUVB0clZlY3RvcigpIHsgfQogICAgUVB0clZlY3RvciggdWludCBzaXplICkg
OiBRR1ZlY3RvcihzaXplKSB7IH0KICAgIFFQdHJWZWN0b3IoIGNvbnN0IFFQdHJWZWN0b3I8dHlw
ZT4gJnYgKSA6IFFHVmVjdG9yKCB2ICkgeyB9CiAgICB+UVB0clZlY3RvcigpIHsgY2xlYXIoKTsg
fQogICAgUVB0clZlY3Rvcjx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFQdHJWZWN0b3I8dHlwZT4g
JnYpCiAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChRUHRyVmVjdG9yPHR5cGU+JilR
R1ZlY3Rvcjo6b3BlcmF0b3I9KHYpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQdHJW
ZWN0b3I8dHlwZT4gJnYgKSBjb25zdCB7IHJldHVybiBRR1ZlY3Rvcjo6b3BlcmF0b3I9PSh2KTsg
fQogICAgdHlwZSAqKmRhdGEoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKilRR1ZlY3Rvcjo6ZGF0
YSgpOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBRR1ZlY3Rvcjo6c2l6ZSgpOyB9
CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdWZWN0b3I6OmNvdW50KCk7IH0KICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIFFHVmVjdG9yOjpjb3VudCgpID09IDA7IH0K
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gUUdWZWN0b3I6OnNpemUoKSA9PSAwOyB9
CiAgICBib29sIHJlc2l6ZSggdWludCBzaXplICkgeyByZXR1cm4gUUdWZWN0b3I6OnJlc2l6ZShz
aXplKTsgfQogICAgYm9vbCBpbnNlcnQoIHVpbnQgaSwgY29uc3QgdHlwZSAqZCl7IHJldHVybiBR
R1ZlY3Rvcjo6aW5zZXJ0KGksKEl0ZW0pZCk7IH0KICAgIGJvb2wgcmVtb3ZlKCB1aW50IGkgKSB7
IHJldHVybiBRR1ZlY3Rvcjo6cmVtb3ZlKGkpOyB9CiAgICB0eXBlICp0YWtlKCB1aW50IGkgKSB7
IHJldHVybiAodHlwZSAqKVFHVmVjdG9yOjp0YWtlKGkpOyB9CiAgICB2b2lkIGNsZWFyKCkgeyBR
R1ZlY3Rvcjo6Y2xlYXIoKTsgfQogICAgYm9vbCBmaWxsKCBjb25zdCB0eXBlICpkLCBpbnQgc2l6
ZT0tMSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBR
R1ZlY3Rvcjo6ZmlsbCgoSXRlbSlkLHNpemUpO30KICAgIHZvaWQgc29ydCgpIHsgUUdWZWN0b3I6
OnNvcnQoKTsgfQogICAgaW50IGJzZWFyY2goIGNvbnN0IHR5cGUgKmQgKSBjb25zdHsgcmV0dXJu
IFFHVmVjdG9yOjpic2VhcmNoKChJdGVtKWQpOyB9CiAgICBpbnQgZmluZFJlZiggY29uc3QgdHlw
ZSAqZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyByZXR1cm4gUUdWZWN0b3I6OmZpbmRSZWYoKEl0ZW0pZCxpKTt9CiAgICBpbnQgZmlu
ZCggY29uc3QgdHlwZSAqZCwgdWludCBpPSAwICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIFFHVmVjdG9yOjpmaW5kKChJdGVtKWQsaSk7IH0K
ICAgIHVpbnQgY29udGFpbnNSZWYoIGNvbnN0IHR5cGUgKmQgKSBjb25zdAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIFFHVmVjdG9yOjpjb250YWluc1JlZigoSXRlbSlk
KTsgfQogICAgdWludCBjb250YWlucyggY29uc3QgdHlwZSAqZCApIGNvbnN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBRR1ZlY3Rvcjo6Y29udGFpbnMo
KEl0ZW0pZCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4g
KHR5cGUgKilRR1ZlY3Rvcjo6YXQoaSk7IH0KICAgIHR5cGUgKmF0KCB1aW50IGkgKSBjb25zdCB7
IHJldHVybiAodHlwZSAqKVFHVmVjdG9yOjphdChpKTsgfQogICAgdm9pZCB0b0xpc3QoIFFHTGlz
dCAqbGlzdCApIGNvbnN0IHsgUUdWZWN0b3I6OnRvTGlzdChsaXN0KTsgfQojIDk0ICIvdXNyL2xv
Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcXB0cnZlY3Rvci5oIgpwcml2YXRlOgogICAgdm9pZCBkZWxl
dGVJdGVtKCBJdGVtIGQgKTsKfTsKCgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFQdHJWZWN0b3I8
dm9pZD46OmRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9CgoKdGVtcGxhdGU8
Y2xhc3MgdHlwZT4gaW5saW5lIHZvaWQgUVB0clZlY3Rvcjx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0
ckNvbGxlY3Rpb246Okl0ZW0gZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUg
KilkOwp9CiMgNDQgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGFibGUuaCIgMgojIDEg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xaGVhZGVyLmgiIDEKIyA0NCAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3FoZWFkZXIuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu
Y2x1ZGUvcWljb25zZXQuaCIgMQojIDQ4ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWlj
b25zZXQuaCIKY2xhc3MgUUljb25GYWN0b3J5OwpjbGFzcyBRSWNvblNldFByaXZhdGU7CgpjbGFz
cyBRSWNvblNldAp7CnB1YmxpYzoKCiAgICBlbnVtIFNpemUgeyBBdXRvbWF0aWMsIFNtYWxsLCBM
YXJnZSB9OwogICAgZW51bSBNb2RlIHsgTm9ybWFsLCBEaXNhYmxlZCwgQWN0aXZlIH07CiAgICBl
bnVtIFN0YXRlIHsgT24sIE9mZiB9OwoKICAgIFFJY29uU2V0KCk7CiAgICBRSWNvblNldCggY29u
c3QgUVBpeG1hcCYgcGl4bWFwLCBTaXplIHNpemUgPSBBdXRvbWF0aWMgKTsKICAgIFFJY29uU2V0
KCBjb25zdCBRUGl4bWFwJiBzbWFsbFBpeCwgY29uc3QgUVBpeG1hcCYgbGFyZ2VQaXggKTsKICAg
IFFJY29uU2V0KCBjb25zdCBRSWNvblNldCYgb3RoZXIgKTsKICAgIHZpcnR1YWwgflFJY29uU2V0
KCk7CgogICAgdm9pZCByZXNldCggY29uc3QgUVBpeG1hcCYgcGl4bWFwLCBTaXplIHNpemUgKTsK
CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGl4bWFwKCBjb25zdCBRUGl4bWFwJiBwaXhtYXAsIFNpemUg
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgbW9kZSA9IE5vcm1hbCwgU3Rh
dGUgc3RhdGUgPSBPZmYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFTdHJp
bmcmIGZpbGVOYW1lLCBTaXplIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2Rl
IG1vZGUgPSBOb3JtYWwsIFN0YXRlIHN0YXRlID0gT2ZmICk7CiAgICBRUGl4bWFwIHBpeG1hcCgg
U2l6ZSBzaXplLCBNb2RlIG1vZGUsIFN0YXRlIHN0YXRlID0gT2ZmICkgY29uc3Q7CiAgICBRUGl4
bWFwIHBpeG1hcCggU2l6ZSBzaXplLCBib29sIGVuYWJsZWQsIFN0YXRlIHN0YXRlID0gT2ZmICkg
Y29uc3Q7CiAgICBRUGl4bWFwIHBpeG1hcCgpIGNvbnN0OwogICAgYm9vbCBpc0dlbmVyYXRlZCgg
U2l6ZSBzaXplLCBNb2RlIG1vZGUsIFN0YXRlIHN0YXRlID0gT2ZmICkgY29uc3Q7CiAgICB2b2lk
IGNsZWFyR2VuZXJhdGVkKCk7CiAgICB2b2lkIGluc3RhbGxJY29uRmFjdG9yeSggUUljb25GYWN0
b3J5ICpmYWN0b3J5ICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKCiAgICB2b2lkIGRldGFj
aCgpOwoKICAgIFFJY29uU2V0JiBvcGVyYXRvcj0oIGNvbnN0IFFJY29uU2V0JiBvdGhlciApOwoK
CiAgICBzdGF0aWMgdm9pZCBzZXRJY29uU2l6ZSggU2l6ZSB3aGljaCwgY29uc3QgUVNpemUmIHNp
emUgKTsKICAgIHN0YXRpYyBjb25zdCBRU2l6ZSYgaWNvblNpemUoIFNpemUgd2hpY2ggKTsKCiAg
IAoKcHJpdmF0ZToKICAgIHZvaWQgbm9ybWFsaXplKCBTaXplJiB3aGljaCwgY29uc3QgUVNpemUm
IHBpeFNpemUgKTsKICAgIFFQaXhtYXAgKmNyZWF0ZVNjYWxlZCggU2l6ZSBzaXplLCBjb25zdCBR
UGl4bWFwICpzdXBwbGllZFBpeCApIGNvbnN0OwogICAgUVBpeG1hcCAqY3JlYXRlRGlzYWJsZWQo
IFNpemUgc2l6ZSwgU3RhdGUgc3RhdGUgKSBjb25zdDsKCiAgICBRSWNvblNldFByaXZhdGUgKmQ7
Cn07CgpjbGFzcyBRSWNvbkZhY3RvcnkgOiBwcml2YXRlIFFTaGFyZWQKewpwdWJsaWM6CiAgICBR
SWNvbkZhY3RvcnkoKTsKICAgIHZpcnR1YWwgflFJY29uRmFjdG9yeSgpOwoKICAgIHZpcnR1YWwg
UVBpeG1hcCAqY3JlYXRlUGl4bWFwKCBjb25zdCBRSWNvblNldCYgaWNvblNldCwgUUljb25TZXQ6
OlNpemUgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRSWNvblNldDo6
TW9kZSBtb2RlLCBRSWNvblNldDo6U3RhdGUgc3RhdGUgKTsKICAgIHZvaWQgc2V0QXV0b0RlbGV0
ZSggYm9vbCBhdXRvRGVsZXRlICkgeyBhdXRvRGVsID0gYXV0b0RlbGV0ZTsgfQogICAgYm9vbCBh
dXRvRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gYXV0b0RlbDsgfQoKICAgIHN0YXRpYyBRSWNvbkZh
Y3RvcnkgKmRlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBpbnN0YWxsRGVmYXVsdEZh
Y3RvcnkoIFFJY29uRmFjdG9yeSAqZmFjdG9yeSApOwoKcHJpdmF0ZToKCiAgICBRSWNvbkZhY3Rv
cnkoIGNvbnN0IFFJY29uRmFjdG9yeSAmICk7CiAgICBRSWNvbkZhY3RvcnkgJm9wZXJhdG9yPSgg
Y29uc3QgUUljb25GYWN0b3J5ICYgKTsKCgogICAgZnJpZW5kIGNsYXNzIFFJY29uU2V0OwogICAg
ZnJpZW5kIGNsYXNzIFFJY29uU2V0UHJpdmF0ZTsKCiAgICB1aW50IGF1dG9EZWwgOiAxOwogICAg
dWludCB1bnVzZWQgOiAzMTsKfTsKIyA0NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fo
ZWFkZXIuaCIgMgoKCgoKY2xhc3MgUVNob3dFdmVudDsKY2xhc3MgUUhlYWRlckRhdGE7CmNsYXNz
IFFUYWJsZTsKCmNsYXNzIFFIZWFkZXIgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBmcmllbmQgY2xh
c3MgUVRhYmxlOwogICAgZnJpZW5kIGNsYXNzIFFUYWJsZUhlYWRlcjsKCiAgICBwdWJsaWM6IHZp
cnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRh
T2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVh
bCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBp
bnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsg
dmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0
YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlh
bnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBx
T2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmpl
Y3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRSGVhZGVy
KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICBRSGVhZGVyKCBp
bnQsIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIH5RSGVhZGVy
KCk7CgogICAgaW50IGFkZExhYmVsKCBjb25zdCBRU3RyaW5nICYsIGludCBzaXplID0gLTEgKTsK
ICAgIGludCBhZGRMYWJlbCggY29uc3QgUUljb25TZXQmLCBjb25zdCBRU3RyaW5nICYsIGludCBz
aXplID0gLTEgKTsKICAgIHZvaWQgcmVtb3ZlTGFiZWwoIGludCBzZWN0aW9uICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0TGFiZWwoIGludCwgY29uc3QgUVN0cmluZyAmLCBpbnQgc2l6ZSA9IC0xICk7
CiAgICB2aXJ0dWFsIHZvaWQgc2V0TGFiZWwoIGludCwgY29uc3QgUUljb25TZXQmLCBjb25zdCBR
U3RyaW5nICYsIGludCBzaXplID0gLTEgKTsKICAgIFFTdHJpbmcgbGFiZWwoIGludCBzZWN0aW9u
ICkgY29uc3Q7CiAgICBRSWNvblNldCogaWNvblNldCggaW50IHNlY3Rpb24gKSBjb25zdDsKCiAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3JpZW50YXRpb24oIE9yaWVudGF0aW9uICk7CiAgICBPcmllbnRh
dGlvbiBvcmllbnRhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFRyYWNraW5nKCBi
b29sIGVuYWJsZSApOwogICAgYm9vbCB0cmFja2luZygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9p
ZCBzZXRDbGlja0VuYWJsZWQoIGJvb2wsIGludCBzZWN0aW9uID0gLTEgKTsKICAgIHZpcnR1YWwg
dm9pZCBzZXRSZXNpemVFbmFibGVkKCBib29sLCBpbnQgc2VjdGlvbiA9IC0xICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0TW92aW5nRW5hYmxlZCggYm9vbCApOwogICAgdmlydHVhbCB2b2lkIHNldFN0
cmV0Y2hFbmFibGVkKCBib29sIGIsIGludCBzZWN0aW9uICk7CiAgICB2b2lkIHNldFN0cmV0Y2hF
bmFibGVkKCBib29sIGIgKSB7IHNldFN0cmV0Y2hFbmFibGVkKCBiLCAtMSApOyB9CiAgICBib29s
IGlzQ2xpY2tFbmFibGVkKCBpbnQgc2VjdGlvbiA9IC0xICkgY29uc3Q7CiAgICBib29sIGlzUmVz
aXplRW5hYmxlZCggaW50IHNlY3Rpb24gPSAtMSApIGNvbnN0OwogICAgYm9vbCBpc01vdmluZ0Vu
YWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNTdHJldGNoRW5hYmxlZCgpIGNvbnN0OwogICAgYm9v
bCBpc1N0cmV0Y2hFbmFibGVkKCBpbnQgc2VjdGlvbiApIGNvbnN0OwoKICAgIHZvaWQgcmVzaXpl
U2VjdGlvbiggaW50IHNlY3Rpb24sIGludCBzICk7CiAgICBpbnQgc2VjdGlvblNpemUoIGludCBz
ZWN0aW9uICkgY29uc3Q7CiAgICBpbnQgc2VjdGlvblBvcyggaW50IHNlY3Rpb24gKSBjb25zdDsK
ICAgIGludCBzZWN0aW9uQXQoIGludCBwb3MgKSBjb25zdDsKICAgIGludCBjb3VudCgpIGNvbnN0
OwogICAgaW50IGhlYWRlcldpZHRoKCkgY29uc3Q7CiAgICBRUmVjdCBzZWN0aW9uUmVjdCggaW50
IHNlY3Rpb24gKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0Q2VsbFNpemUoIGludCAsIGlu
dCApOwogICAgaW50IGNlbGxTaXplKCBpbnQgaSApIGNvbnN0IHsgcmV0dXJuIHNlY3Rpb25TaXpl
KCBtYXBUb1NlY3Rpb24oaSkgKTsgfQogICAgaW50IGNlbGxQb3MoIGludCApIGNvbnN0OwogICAg
aW50IGNlbGxBdCggaW50IHBvcyApIGNvbnN0IHsgcmV0dXJuIG1hcFRvSW5kZXgoIHNlY3Rpb25B
dChwb3MgKyBvZmZzZXQoKSkgKTsgfQoKICAgIGludCBvZmZzZXQoKSBjb25zdDsKCiAgICBRU2l6
ZSBzaXplSGludCgpIGNvbnN0OwoKICAgIGludCBtYXBUb1NlY3Rpb24oIGludCBpbmRleCApIGNv
bnN0OwogICAgaW50IG1hcFRvSW5kZXgoIGludCBzZWN0aW9uICkgY29uc3Q7CiAgICBpbnQgbWFw
VG9Mb2dpY2FsKCBpbnQgKSBjb25zdDsKICAgIGludCBtYXBUb0FjdHVhbCggaW50ICkgY29uc3Q7
CgogICAgdm9pZCBtb3ZlU2VjdGlvbiggaW50IHNlY3Rpb24sIGludCB0b0luZGV4ICk7CiAgICB2
aXJ0dWFsIHZvaWQgbW92ZUNlbGwoIGludCwgaW50KTsKCiAgICB2b2lkIHNldFNvcnRJbmRpY2F0
b3IoIGludCBzZWN0aW9uLCBib29sIGluY3JlYXNpbmcgPSBUUlVFICk7CiAgICB2b2lkIGFkanVz
dEhlYWRlclNpemUoKSB7IGFkanVzdEhlYWRlclNpemUoIC0xICk7IH0KCnB1YmxpYyA6CiAgICB2
b2lkIHNldFVwZGF0ZXNFbmFibGVkKCBib29sIGVuYWJsZSApOwogICAgdmlydHVhbCB2b2lkIHNl
dE9mZnNldCggaW50IHBvcyApOwoKcHJvdGVjdGVkOgogICAgdm9pZCBjbGlja2VkKCBpbnQgc2Vj
dGlvbiApOwogICAgdm9pZCBwcmVzc2VkKCBpbnQgc2VjdGlvbiApOwogICAgdm9pZCByZWxlYXNl
ZCggaW50IHNlY3Rpb24gKTsKICAgIHZvaWQgc2l6ZUNoYW5nZSggaW50IHNlY3Rpb24sIGludCBv
bGRTaXplLCBpbnQgbmV3U2l6ZSApOwogICAgdm9pZCBpbmRleENoYW5nZSggaW50IHNlY3Rpb24s
IGludCBmcm9tSW5kZXgsIGludCB0b0luZGV4ICk7CiAgICB2b2lkIHNlY3Rpb25DbGlja2VkKCBp
bnQgKTsKICAgIHZvaWQgbW92ZWQoIGludCwgaW50ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHBh
aW50RXZlbnQoIFFQYWludEV2ZW50ICogKTsKICAgIHZvaWQgc2hvd0V2ZW50KCBRU2hvd0V2ZW50
ICplICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKmUgKTsKICAgIFFSZWN0
IHNSZWN0KCBpbnQgaW5kZXggKTsKCiAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTZWN0aW9uKCBRUGFp
bnRlciAqcCwgaW50IGluZGV4LCBjb25zdCBRUmVjdCYgZnIpOwogICAgdmlydHVhbCB2b2lkIHBh
aW50U2VjdGlvbkxhYmVsKCBRUGFpbnRlciogcCwgaW50IGluZGV4LCBjb25zdCBRUmVjdCYgZnIg
KTsKCiAgICB2b2lkIGZvbnRDaGFuZ2UoIGNvbnN0IFFGb250ICYgKTsKCiAgICB2b2lkIG1vdXNl
UHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCgg
UU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQgKiAp
OwoKICAgIHZvaWQga2V5UHJlc3NFdmVudCggUUtleUV2ZW50ICogKTsKICAgIHZvaWQga2V5UmVs
ZWFzZUV2ZW50KCBRS2V5RXZlbnQgKiApOwoKcHJpdmF0ZToKICAgIHZvaWQgaGFuZGxlQ29sdW1u
TW92ZSggaW50IGZyb21JZHgsIGludCB0b0lkeCApOwogICAgdm9pZCBhZGp1c3RIZWFkZXJTaXpl
KCBpbnQgZGlmZiApOwogICAgdm9pZCBpbml0KCBpbnQgKTsKCiAgICB2b2lkIHBhaW50UmVjdCgg
aW50IHAsIGludCBzICk7CiAgICB2b2lkIG1hcmtMaW5lKCBpbnQgaWR4ICk7CiAgICB2b2lkIHVu
TWFya0xpbmUoIGludCBpZHggKTsKICAgIGludCBwUG9zKCBpbnQgaSApIGNvbnN0OwogICAgaW50
IHBTaXplKCBpbnQgaSApIGNvbnN0OwogICAgaW50IGZpbmRMaW5lKCBpbnQgKTsKICAgIGJvb2wg
cmV2ZXJzZSgpIGNvbnN0OwogICAgdm9pZCBjYWxjdWxhdGVQb3NpdGlvbnMoIGJvb2wgb25seVZp
c2libGUgPSBGQUxTRSwgaW50IHN0YXJ0ID0gMCApOwogICAgdm9pZCBoYW5kbGVDb2x1bW5SZXNp
emUoaW50LCBpbnQsIGJvb2wsIGJvb2wgPSBUUlVFICk7CiAgICBRU2l6ZSBzZWN0aW9uU2l6ZUhp
bnQoIGludCBzZWN0aW9uLCBjb25zdCBRRm9udE1ldHJpY3MmIGZtICkgY29uc3Q7CiAgICB2b2lk
IHNldFNlY3Rpb25TaXplQW5kSGVpZ2h0KCBpbnQgc2VjdGlvbiwgaW50IHNpemUgKTsKCiAgICB2
b2lkIHJlc2l6ZUFycmF5cyggaW50IHNpemUgKTsKICAgIHZvaWQgc2V0SXNBVGFibGVIZWFkZXIo
IGJvb2wgYiApOwogICAgaW50IG9mZnM7CiAgICBpbnQgaGFuZGxlSWR4OwogICAgaW50IG9sZEhJ
ZHhTaXplOwogICAgaW50IG1vdmVUb0lkeDsKICAgIGVudW0gU3RhdGUgeyBJZGxlLCBTbGlkaW5n
LCBQcmVzc2VkLCBNb3ZpbmcsIEJsb2NrZWQgfTsKICAgIFN0YXRlIHN0YXRlOwogICAgUUNPT1JE
IGNsaWNrUG9zOwogICAgYm9vbCB0cmFja2luZ0lzT247CiAgICBpbnQgb2xkSGFuZGxlSWR4Owog
ICAgaW50IGNhY2hlZFBvczsKICAgIE9yaWVudGF0aW9uIG9yaWVudDsKCiAgICBRSGVhZGVyRGF0
YSAqZDsKCnByaXZhdGU6CgogICAgUUhlYWRlciggY29uc3QgUUhlYWRlciAmICk7CiAgICBRSGVh
ZGVyICZvcGVyYXRvcj0oIGNvbnN0IFFIZWFkZXIgJiApOwoKfTsKCgppbmxpbmUgUUhlYWRlcjo6
T3JpZW50YXRpb24gUUhlYWRlcjo6b3JpZW50YXRpb24oKSBjb25zdAp7CiAgICByZXR1cm4gb3Jp
ZW50Owp9CgppbmxpbmUgdm9pZCBRSGVhZGVyOjpzZXRUcmFja2luZyggYm9vbCBlbmFibGUgKSB7
IHRyYWNraW5nSXNPbiA9IGVuYWJsZTsgfQppbmxpbmUgYm9vbCBRSGVhZGVyOjp0cmFja2luZygp
IGNvbnN0IHsgcmV0dXJuIHRyYWNraW5nSXNPbjsgfQoKZXh0ZXJuIGJvb2wgcXRfcWhlYWRlcl9s
YWJlbF9yZXR1cm5fbnVsbF9zdHJpbmdzOwojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1
ZGUvcXRhYmxlLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwdHJsaXN0
LmgiIDEKIyA0MCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwdHJsaXN0LmgiCiMgMSAi
L3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbGlzdC5oIiAxCiMgNDUgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xZ2xpc3QuaCIKY2xhc3MgUUxOb2RlCnsKZnJpZW5kIGNsYXNzIFFH
TGlzdDsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0ZXJhdG9yOwpwdWJsaWM6CiAgICBRUHRyQ29sbGVj
dGlvbjo6SXRlbSBnZXREYXRhKCkgeyByZXR1cm4gZGF0YTsgfQpwcml2YXRlOgogICAgUVB0ckNv
bGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFMTm9kZSAqcHJldjsKICAgIFFMTm9kZSAqbmV4dDsK
ICAgIFFMTm9kZSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIHsgZGF0YSA9IGQ7IH0KfTsKCmNs
YXNzIFFHTGlzdEl0ZXJhdG9yTGlzdDsKCmNsYXNzIFFHTGlzdCA6IHB1YmxpYyBRUHRyQ29sbGVj
dGlvbgp7CmZyaWVuZCBjbGFzcyBRR0xpc3RJdGVyYXRvcjsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0
ZXJhdG9yTGlzdDsKZnJpZW5kIGNsYXNzIFFHVmVjdG9yOwpwdWJsaWM6CiAgICB1aW50IGNvdW50
KCkgY29uc3Q7CgoKICAgIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmICk7CiAgICBR
RGF0YVN0cmVhbSAmd3JpdGUoIFFEYXRhU3RyZWFtICYgKSBjb25zdDsKCnByb3RlY3RlZDoKICAg
IFFHTGlzdCgpOwogICAgUUdMaXN0KCBjb25zdCBRR0xpc3QgJiApOwogICAgdmlydHVhbCB+UUdM
aXN0KCk7CgogICAgUUdMaXN0ICZvcGVyYXRvcj0oIGNvbnN0IFFHTGlzdCAmICk7CiAgICBib29s
IG9wZXJhdG9yPT0oIGNvbnN0IFFHTGlzdCYgKSBjb25zdDsKCiAgICB2b2lkIGluU29ydCggUVB0
ckNvbGxlY3Rpb246Okl0ZW0gKTsKICAgIHZvaWQgYXBwZW5kKCBRUHRyQ29sbGVjdGlvbjo6SXRl
bSApOwogICAgYm9vbCBpbnNlcnRBdCggdWludCBpbmRleCwgUVB0ckNvbGxlY3Rpb246Okl0ZW0g
KTsKICAgIHZvaWQgcmVsaW5rTm9kZSggUUxOb2RlICogKTsKICAgIGJvb2wgcmVtb3ZlTm9kZSgg
UUxOb2RlICogKTsKICAgIGJvb2wgcmVtb3ZlKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSA9IDAgKTsK
ICAgIGJvb2wgcmVtb3ZlUmVmKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSA9IDAgKTsKICAgIGJvb2wg
cmVtb3ZlRmlyc3QoKTsKICAgIGJvb2wgcmVtb3ZlTGFzdCgpOwogICAgYm9vbCByZW1vdmVBdCgg
dWludCApOwogICAgYm9vbCByZXBsYWNlQXQoIHVpbnQsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICk7
CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTm9kZSggUUxOb2RlICogKTsKICAgIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIHRha2UoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2VBdCgg
dWludCBpbmRleCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZUZpcnN0KCk7CiAgICBR
UHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTGFzdCgpOwoKICAgIHZvaWQgc29ydCgpOwogICAgdm9p
ZCBjbGVhcigpOwoKICAgIGludCBmaW5kUmVmKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgYm9vbCA9
IFRSVUUgKTsKICAgIGludCBmaW5kKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgYm9vbCA9IFRSVUUg
KTsKCiAgICB1aW50IGNvbnRhaW5zUmVmKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApIGNvbnN0Owog
ICAgdWludCBjb250YWlucyggUVB0ckNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsKCiAgICBRUHRy
Q29sbGVjdGlvbjo6SXRlbSBhdCggdWludCBpbmRleCApOwogICAgaW50IGF0KCkgY29uc3Q7CiAg
ICBRTE5vZGUgKmN1cnJlbnROb2RlKCkgY29uc3Q7CgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g
Z2V0KCkgY29uc3Q7CgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gY2ZpcnN0KCkgY29uc3Q7CiAg
ICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBjbGFzdCgpIGNvbnN0OwogICAgUVB0ckNvbGxlY3Rpb246
Okl0ZW0gZmlyc3QoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGxhc3QoKTsKICAgIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIG5leHQoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHByZXYoKTsK
CiAgICB2b2lkIHRvVmVjdG9yKCBRR1ZlY3RvciAqICkgY29uc3Q7CgogICAgdmlydHVhbCBpbnQg
Y29tcGFyZUl0ZW1zKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0g
KTsKCgogICAgdmlydHVhbCBRRGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJiwgUVB0ckNv
bGxlY3Rpb246Okl0ZW0gJiApOwogICAgdmlydHVhbCBRRGF0YVN0cmVhbSAmd3JpdGUoIFFEYXRh
U3RyZWFtICYsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkgY29uc3Q7Cgpwcml2YXRlOgogICAgdm9p
ZCBwcmVwZW5kKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApOwoKICAgIHZvaWQgaGVhcFNvcnRQdXNo
RG93biggUVB0ckNvbGxlY3Rpb246Okl0ZW0qIGhlYXAsIGludCBmaXJzdCwgaW50IGxhc3QgKTsK
CiAgICBRTE5vZGUgKmZpcnN0Tm9kZTsKICAgIFFMTm9kZSAqbGFzdE5vZGU7CiAgICBRTE5vZGUg
KmN1ck5vZGU7CiAgICBpbnQgY3VySW5kZXg7CiAgICB1aW50IG51bU5vZGVzOwogICAgUUdMaXN0
SXRlcmF0b3JMaXN0ICppdGVyYXRvcnM7CgogICAgUUxOb2RlICpsb2NhdGUoIHVpbnQgKTsKICAg
IFFMTm9kZSAqdW5saW5rKCk7Cn07CgoKaW5saW5lIHVpbnQgUUdMaXN0Ojpjb3VudCgpIGNvbnN0
CnsKICAgIHJldHVybiBudW1Ob2RlczsKfQoKaW5saW5lIGJvb2wgUUdMaXN0OjpyZW1vdmVGaXJz
dCgpCnsKICAgIGZpcnN0KCk7CiAgICByZXR1cm4gcmVtb3ZlKCk7Cn0KCmlubGluZSBib29sIFFH
TGlzdDo6cmVtb3ZlTGFzdCgpCnsKICAgIGxhc3QoKTsKICAgIHJldHVybiByZW1vdmUoKTsKfQoK
aW5saW5lIGludCBRR0xpc3Q6OmF0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ckluZGV4Owp9Cgpp
bmxpbmUgUVB0ckNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0OjphdCggdWludCBpbmRleCApCnsKICAg
IFFMTm9kZSAqbiA9IGxvY2F0ZSggaW5kZXggKTsKICAgIHJldHVybiBuID8gbi0+ZGF0YSA6IDA7
Cn0KCmlubGluZSBRTE5vZGUgKlFHTGlzdDo6Y3VycmVudE5vZGUoKSBjb25zdAp7CiAgICByZXR1
cm4gY3VyTm9kZTsKfQoKaW5saW5lIFFQdHJDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Z2V0KCkg
Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5kYXRhIDogMDsKfQoKaW5saW5l
IFFQdHJDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Y2ZpcnN0KCkgY29uc3QKewogICAgcmV0dXJu
IGZpcnN0Tm9kZSA/IGZpcnN0Tm9kZS0+ZGF0YSA6IDA7Cn0KCmlubGluZSBRUHRyQ29sbGVjdGlv
bjo6SXRlbSBRR0xpc3Q6OmNsYXN0KCkgY29uc3QKewogICAgcmV0dXJuIGxhc3ROb2RlID8gbGFz
dE5vZGUtPmRhdGEgOiAwOwp9CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRh
U3RyZWFtICYsIFFHTGlzdCAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJl
YW0gJiwgY29uc3QgUUdMaXN0ICYgKTsKCgoKCgoKY2xhc3MgUUdMaXN0SXRlcmF0b3IKewpmcmll
bmQgY2xhc3MgUUdMaXN0OwpmcmllbmQgY2xhc3MgUUdMaXN0SXRlcmF0b3JMaXN0Owpwcm90ZWN0
ZWQ6CiAgICBRR0xpc3RJdGVyYXRvciggY29uc3QgUUdMaXN0ICYgKTsKICAgIFFHTGlzdEl0ZXJh
dG9yKCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAgICBRR0xpc3RJdGVyYXRvciAmb3BlcmF0
b3I9KCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAgIH5RR0xpc3RJdGVyYXRvcigpOwoKICAg
IGJvb2wgYXRGaXJzdCgpIGNvbnN0OwogICAgYm9vbCBhdExhc3QoKSBjb25zdDsKICAgIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIHRvRmlyc3QoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRvTGFz
dCgpOwoKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGdldCgpIGNvbnN0OwogICAgUVB0ckNvbGxl
Y3Rpb246Okl0ZW0gb3BlcmF0b3IoKSgpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0
b3IrKygpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IrPSh1aW50KTsKICAgIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yLS0oKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVt
IG9wZXJhdG9yLT0odWludCk7Cgpwcm90ZWN0ZWQ6CiAgICBRR0xpc3QgKmxpc3Q7Cgpwcml2YXRl
OgogICAgUUxOb2RlICpjdXJOb2RlOwp9OwoKCmlubGluZSBib29sIFFHTGlzdEl0ZXJhdG9yOjph
dEZpcnN0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPT0gbGlzdC0+Zmlyc3ROb2RlOwp9
CgppbmxpbmUgYm9vbCBRR0xpc3RJdGVyYXRvcjo6YXRMYXN0KCkgY29uc3QKewogICAgcmV0dXJu
IGN1ck5vZGUgPT0gbGlzdC0+bGFzdE5vZGU7Cn0KCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRl
bSBRR0xpc3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJO
b2RlLT5kYXRhIDogMDsKfQojIDQxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXB0cmxp
c3QuaCIgMgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRUHRyTGlzdAoKCgogICAgICAg
IDogcHVibGljIFFHTGlzdAoKewpwdWJsaWM6CiAgICBRUHRyTGlzdCgpIHt9CiAgICBRUHRyTGlz
dCggY29uc3QgUVB0ckxpc3Q8dHlwZT4gJmwgKSA6IFFHTGlzdChsKSB7fQogICAgflFQdHJMaXN0
KCkgeyBjbGVhcigpOyB9CiAgICBRUHRyTGlzdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFQdHJM
aXN0PHR5cGU+ICZsKQogICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAoUVB0ckxpc3Q8
dHlwZT4mKVFHTGlzdDo6b3BlcmF0b3I9KGwpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0
IFFQdHJMaXN0PHR5cGU+ICZsaXN0ICkgY29uc3QKICAgIHsgcmV0dXJuIFFHTGlzdDo6b3BlcmF0
b3I9PSggbGlzdCApOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQdHJMaXN0PHR5cGU+
ICZsaXN0ICkgY29uc3QKICAgIHsgcmV0dXJuICFRR0xpc3Q6Om9wZXJhdG9yPT0oIGxpc3QgKTsg
fQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y291bnQoKTsgfQogICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb3VudCgpID09IDA7IH0KICAg
IGJvb2wgaW5zZXJ0KCB1aW50IGksIGNvbnN0IHR5cGUgKmQpeyByZXR1cm4gUUdMaXN0OjppbnNl
cnRBdChpLChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdm9pZCBpblNvcnQoIGNvbnN0
IHR5cGUgKmQgKSB7IFFHTGlzdDo6aW5Tb3J0KChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQog
ICAgdm9pZCBwcmVwZW5kKCBjb25zdCB0eXBlICpkICkgeyBRR0xpc3Q6Omluc2VydEF0KDAsKFFQ
dHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIGFwcGVuZCggY29uc3QgdHlwZSAqZCAp
IHsgUUdMaXN0OjphcHBlbmQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sIHJl
bW92ZSggdWludCBpICkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVBdChpKTsgfQogICAgYm9vbCBy
ZW1vdmUoKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZSgoUVB0ckNvbGxlY3Rpb246Okl0ZW0pMCk7
IH0KICAgIGJvb2wgcmVtb3ZlKCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0OjpyZW1v
dmUoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sIHJlbW92ZVJlZiggY29uc3Qg
dHlwZSAqZCApIHsgcmV0dXJuIFFHTGlzdDo6cmVtb3ZlUmVmKChRUHRyQ29sbGVjdGlvbjo6SXRl
bSlkKTsgfQogICAgdm9pZCByZW1vdmVOb2RlKCBRTE5vZGUgKm4gKSB7IFFHTGlzdDo6cmVtb3Zl
Tm9kZShuKTsgfQogICAgYm9vbCByZW1vdmVGaXJzdCgpIHsgcmV0dXJuIFFHTGlzdDo6cmVtb3Zl
Rmlyc3QoKTsgfQogICAgYm9vbCByZW1vdmVMYXN0KCkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVM
YXN0KCk7IH0KICAgIHR5cGUgKnRha2UoIHVpbnQgaSApIHsgcmV0dXJuICh0eXBlICopUUdMaXN0
Ojp0YWtlQXQoaSk7IH0KICAgIHR5cGUgKnRha2UoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6
dGFrZSgpOyB9CiAgICB0eXBlICp0YWtlTm9kZSggUUxOb2RlICpuICkgeyByZXR1cm4gKHR5cGUg
KilRR0xpc3Q6OnRha2VOb2RlKG4pOyB9CiAgICB2b2lkIGNsZWFyKCkgeyBRR0xpc3Q6OmNsZWFy
KCk7IH0KICAgIHZvaWQgc29ydCgpIHsgUUdMaXN0Ojpzb3J0KCk7IH0KICAgIGludCBmaW5kKCBj
b25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0OjpmaW5kKChRUHRyQ29sbGVjdGlvbjo6SXRl
bSlkKTsgfQogICAgaW50IGZpbmROZXh0KCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0
OjpmaW5kKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkLEZBTFNFKTsgfQogICAgaW50IGZpbmRSZWYo
IGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OmZpbmRSZWYoKFFQdHJDb2xsZWN0aW9u
OjpJdGVtKWQpOyB9CiAgICBpbnQgZmluZE5leHRSZWYoIGNvbnN0IHR5cGUgKmQgKXsgcmV0dXJu
IFFHTGlzdDo6ZmluZFJlZigoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCxGQUxTRSk7fQogICAgdWlu
dCBjb250YWlucyggY29uc3QgdHlwZSAqZCApIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y29udGFp
bnMoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB1aW50IGNvbnRhaW5zUmVmKCBjb25z
dCB0eXBlICpkICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIFFHTGlzdDo6Y29udGFpbnNSZWYoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9
CiAgICBib29sIHJlcGxhY2UoIHVpbnQgaSwgY29uc3QgdHlwZSAqZCApIHsgcmV0dXJuIFFHTGlz
dDo6cmVwbGFjZUF0KCBpLCAoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCApOyB9CiAgICB0eXBlICph
dCggdWludCBpICkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmF0KGkpOyB9CiAgICBpbnQgYXQo
KSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmF0KCk7IH0KICAgIHR5cGUgKmN1cnJlbnQoKSBjb25z
dCB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Z2V0KCk7IH0KICAgIFFMTm9kZSAqY3VycmVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmN1cnJlbnROb2RlKCk7IH0KICAgIHR5cGUgKmdl
dEZpcnN0KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmNmaXJzdCgpOyB9CiAgICB0
eXBlICpnZXRMYXN0KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmNsYXN0KCk7IH0K
ICAgIHR5cGUgKmZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmZpcnN0KCk7IH0KICAg
IHR5cGUgKmxhc3QoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6bGFzdCgpOyB9CiAgICB0eXBl
ICpuZXh0KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6Om5leHQoKTsgfQogICAgdHlwZSAqcHJl
digpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpwcmV2KCk7IH0KICAgIHZvaWQgdG9WZWN0b3Io
IFFHVmVjdG9yICp2ZWMgKWNvbnN0eyBRR0xpc3Q6OnRvVmVjdG9yKHZlYyk7IH0KIyAxMDcgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcHRybGlzdC5oIgpwcml2YXRlOgogICAgdm9pZCBk
ZWxldGVJdGVtKCBJdGVtIGQgKTsKfTsKCgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFQdHJMaXN0
PHZvaWQ+OjpkZWxldGVJdGVtKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApCnsKfQoKCnRlbXBsYXRl
PGNsYXNzIHR5cGU+IGlubGluZSB2b2lkIFFQdHJMaXN0PHR5cGU+OjpkZWxldGVJdGVtKCBRUHRy
Q29sbGVjdGlvbjo6SXRlbSBkICkKewogICAgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZSAodHlwZSAq
KWQ7Cn0KCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNzIFFQdHJMaXN0SXRlcmF0b3IgOiBwdWJs
aWMgUUdMaXN0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBRUHRyTGlzdEl0ZXJhdG9yKGNvbnN0IFFQ
dHJMaXN0PHR5cGU+ICZsKSA6UUdMaXN0SXRlcmF0b3IoKFFHTGlzdCAmKWwpIHt9CiAgIH5RUHRy
TGlzdEl0ZXJhdG9yKCkge30KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBsaXN0LT5j
b3VudCgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBsaXN0LT5jb3VudCgp
ID09IDA7IH0KICAgIGJvb2wgYXRGaXJzdCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdEl0ZXJhdG9y
OjphdEZpcnN0KCk7IH0KICAgIGJvb2wgYXRMYXN0KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0SXRl
cmF0b3I6OmF0TGFzdCgpOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilR
R0xpc3RJdGVyYXRvcjo6dG9GaXJzdCgpOyB9CiAgICB0eXBlICp0b0xhc3QoKSB7IHJldHVybiAo
dHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjp0b0xhc3QoKTsgfQogICAgb3BlcmF0b3IgdHlwZSAqKCkg
Y29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUg
Km9wZXJhdG9yKigpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OmdldCgpOyB9CgoK
CgoKCgogICAgdHlwZSAqY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRl
cmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpvcGVyYXRvcigpKCkgeyByZXR1cm4gKHR5cGUgKilR
R0xpc3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpO30KICAgIHR5cGUgKm9wZXJhdG9yKysoKSB7IHJl
dHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAgIHR5cGUgKm9w
ZXJhdG9yKz0odWludCBqKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRv
cis9KGopO30KICAgIHR5cGUgKm9wZXJhdG9yLS0oKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0
ZXJhdG9yOjpvcGVyYXRvci0tKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yLT0odWludCBqKSB7IHJl
dHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvci09KGopO30KICAgIFFQdHJMaXN0
SXRlcmF0b3I8dHlwZT4mIG9wZXJhdG9yPShjb25zdCBRUHRyTGlzdEl0ZXJhdG9yPHR5cGU+Jml0
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRv
cj0oaXQpOyByZXR1cm4gKnRoaXM7IH0KfTsKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs
dWRlL3F0YWJsZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FndWFyZGVk
cHRyLmgiIDEKIyA0NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FndWFyZGVkcHRyLmgi
CmNsYXNzIFFHdWFyZGVkUHRyUHJpdmF0ZSA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVNoYXJl
ZAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05h
bWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFs
IGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCgg
aW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBm
LCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCog
LCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9i
amVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3Rh
dGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMg
UVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRl
OiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFHdWFyZGVkUHRyUHJp
dmF0ZSggUU9iamVjdCogKTsKICAgIH5RR3VhcmRlZFB0clByaXZhdGUoKTsKCiAgICBRT2JqZWN0
KiBvYmplY3QoKSBjb25zdDsKICAgIHZvaWQgcmVjb25uZWN0KCBRT2JqZWN0KiApOwoKcHJpdmF0
ZSA6CiAgICB2b2lkIG9iamVjdERlc3Ryb3llZCgpOwoKcHJpdmF0ZToKICAgIFFPYmplY3QqIG9i
ajsKCiAgICBRR3VhcmRlZFB0clByaXZhdGUoIGNvbnN0IFFHdWFyZGVkUHRyUHJpdmF0ZSAmICk7
CiAgICBRR3VhcmRlZFB0clByaXZhdGUgJm9wZXJhdG9yPSggY29uc3QgUUd1YXJkZWRQdHJQcml2
YXRlICYgKTsKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUUd1YXJkZWRQdHIKewpwdWJs
aWM6CiAgICBRR3VhcmRlZFB0cigpIDogcHJpdiggbmV3IFFHdWFyZGVkUHRyUHJpdmF0ZSggMCAp
ICkge30KCiAgICBRR3VhcmRlZFB0ciggVCogbykgewogICAgICAgIHByaXYgPSBuZXcgUUd1YXJk
ZWRQdHJQcml2YXRlKCAoUU9iamVjdCopbyApOwogICAgfQoKICAgIFFHdWFyZGVkUHRyKGNvbnN0
IFFHdWFyZGVkUHRyPFQ+ICZwKSB7CiAgICAgICAgcHJpdiA9IHAucHJpdjsKICAgICAgICByZWYo
KTsKICAgIH0KCiAgICB+UUd1YXJkZWRQdHIoKSB7IGRlcmVmKCk7IH0KCiAgICBRR3VhcmRlZFB0
cjxUPiAmb3BlcmF0b3I9KGNvbnN0IFFHdWFyZGVkUHRyPFQ+ICZwKSB7CiAgICAgICAgaWYgKCBw
cml2ICE9IHAucHJpdiApIHsKICAgICAgICAgICAgZGVyZWYoKTsKICAgICAgICAgICAgcHJpdiA9
IHAucHJpdjsKICAgICAgICAgICAgcmVmKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgICBRR3VhcmRlZFB0cjxUPiAmb3BlcmF0b3I9KFQqIG8pIHsKICAgICAgICBp
ZiAoIHByaXYtPmNvdW50ID09IDEgKSB7CiAgICAgICAgICAgIHByaXYtPnJlY29ubmVjdCggKFFP
YmplY3QqKW8gKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkZXJlZigpOwogICAgICAg
ICAgICBwcml2ID0gbmV3IFFHdWFyZGVkUHRyUHJpdmF0ZSggKFFPYmplY3QqKW8gKTsKICAgICAg
ICB9CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29u
c3QgUUd1YXJkZWRQdHI8VD4gJnAgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHByaXYtPm9iamVj
dCgpID09IHAucHJpdi0+b2JqZWN0KCk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvciE9ICggY29u
c3QgUUd1YXJkZWRQdHI8VD4mIHAgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuICEoICp0aGlzID09
IHAgKTsKICAgIH0KCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFwcml2LT5vYmpl
Y3QoKTsgfQoKICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAoVCopIHByaXYtPm9i
amVjdCgpOyB9CgogICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKiggKFQqKXByaXYt
Pm9iamVjdCgpICk7IH0KCiAgICBvcGVyYXRvciBUKigpIGNvbnN0IHsgcmV0dXJuIChUKikgcHJp
di0+b2JqZWN0KCk7IH0KCnByaXZhdGU6CgogICAgdm9pZCByZWYoKSB7IHByaXYtPnJlZigpOyB9
CgogICAgdm9pZCBkZXJlZigpIHsKICAgICAgICBpZiAoIHByaXYtPmRlcmVmKCkgKQogICAgICAg
ICAgICBkZWxldGUgcHJpdjsKICAgIH0KCiAgICBRR3VhcmRlZFB0clByaXZhdGUqIHByaXY7Cn07
CgoKCgppbmxpbmUgUU9iamVjdCogUUd1YXJkZWRQdHJQcml2YXRlOjpvYmplY3QoKSBjb25zdAp7
CiAgICByZXR1cm4gb2JqOwp9CiMgNDggIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGFi
bGUuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWludGRpY3QuaCIgMQoj
IDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWludGRpY3QuaCIKIyAxICIvdXNyL2xv
Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWdkaWN0LmgiIDEKIyA0NiAiL3Vzci9sb2NhbC9xdC0zLjEu
MS9pbmNsdWRlL3FnZGljdC5oIgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xhc3MgUUdESXRMaXN0
OwoKCmNsYXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g
Z2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHNldERh
dGEoIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0gZDsgfQogICAgUUJh
c2VCdWNrZXQgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lkIHNldE5leHQoIFFC
YXNlQnVja2V0ICpuKSB7IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFCYXNlQnVja2V0KCBR
UHRyQ29sbGVjdGlvbjo6SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0YShkKSwgbmV4dChu
KSB7fQogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFCYXNlQnVja2V0ICpuZXh0
Owp9OwoKY2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoK
ICAgIFFTdHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJpbmcgJmssIFFQdHJDb2xsZWN0aW9uOjpJdGVt
IGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7
fQogICAgY29uc3QgUVN0cmluZyAmZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZh
dGU6CiAgICBRU3RyaW5nIGtleTsKfTsKCmNsYXNzIFFBc2NpaUJ1Y2tldCA6IHB1YmxpYyBRQmFz
ZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFBc2NpaUJ1Y2tldCggY29uc3QgY2hhciAqaywgUVB0ckNv
bGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNrZXQgKm4gKQogICAgICAgIDogUUJhc2VCdWNrZXQo
ZCxuKSwga2V5KGspIHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25zdCB7IHJldHVybiBr
ZXk7IH0KcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNzIFFJbnRCdWNrZXQg
OiBwdWJsaWMgUUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0KCBsb25nIGssIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVj
a2V0KGQsbiksIGtleShrKSB7fQogICAgbG9uZyBnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7
IH0KcHJpdmF0ZToKICAgIGxvbmcga2V5Owp9OwoKY2xhc3MgUVB0ckJ1Y2tldCA6IHB1YmxpYyBR
QmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQgKmssIFFQdHJDb2xsZWN0
aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiks
IGtleShrKSB7fQogICAgdm9pZCAqZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZh
dGU6CiAgICB2b2lkICprZXk7Cn07CgoKY2xhc3MgUUdEaWN0IDogcHVibGljIFFQdHJDb2xsZWN0
aW9uCnsKcHVibGljOgogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG51bUl0ZW1zOyB9
CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2bGVuOyB9CiAgICBRUHRyQ29sbGVjdGlv
bjo6SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5LCBRUHRyQ29sbGVjdGlvbjo6
SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKTsKICAgIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwgUVB0ckNvbGxlY3Rp
b246Okl0ZW0sIGludCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gbG9va19pbnQoIGxvbmcg
a2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRl
bSBsb29rX3B0ciggdm9pZCAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CgogICAg
UURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0
ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51bSBLZXlUeXBlIHsg
U3RyaW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBRR0RpY3QoIHVpbnQg
bGVuLCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAgICBRR0RpY3QoIGNvbnN0IFFH
RGljdCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9wZXJhdG9yPSggY29uc3QgUUdE
aWN0ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSwgUVB0
ckNvbGxlY3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92ZV9hc2NpaSggY29uc3Qg
Y2hhciAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAgIGJvb2wgcmVtb3Zl
X2ludCggbG9uZyBrZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgYm9vbCBy
ZW1vdmVfcHRyKCB2b2lkICprZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAg
UVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSApOwog
ICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hhciAqa2V5ICk7CiAg
ICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsKICAgIFFQdHJDb2xs
ZWN0aW9uOjpJdGVtIHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lkIGNsZWFyKCk7CiAg
ICB2b2lkIHJlc2l6ZSggdWludCApOwoKICAgIGludCBoYXNoS2V5U3RyaW5nKCBjb25zdCBRU3Ry
aW5nICYgKTsKICAgIGludCBoYXNoS2V5QXNjaWkoIGNvbnN0IGNoYXIgKiApOwoKICAgIHZvaWQg
c3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0
YVN0cmVhbSAmLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0dWFsIFFEYXRhU3Ry
ZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsK
CnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQgdmxlbjsKICAgIHVpbnQg
bnVtSXRlbXM7CiAgICB1aW50IGtleXR5cGUgOiAyOwogICAgdWludCBjYXNlcyA6IDE7CiAgICB1
aW50IGNvcHlrIDogMTsKICAgIFFHREl0TGlzdCAqaXRlcmF0b3JzOwogICAgdm9pZCB1bmxpbmtf
Y29tbW9uKCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsKICAgIFFTdHJpbmdC
dWNrZXQgKnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAwICk7CiAgICBRQXNj
aWlCdWNrZXQgKnVubGlua19hc2NpaSggY29uc3QgY2hhciAqLCBRUHRyQ29sbGVjdGlvbjo6SXRl
bSBpdGVtID0gMCApOwogICAgUUludEJ1Y2tldCAqdW5saW5rX2ludCggbG9uZywgUVB0ckNvbGxl
Y3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQdHJCdWNrZXQgKnVubGlua19wdHIoIHZvaWQg
KiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIHZvaWQgaW5pdCggdWludCwg
S2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAgZnJpZW5kIGNsYXNzIFFHRGljdEl0ZXJhdG9yOwp9
OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yCnsKZnJpZW5kIGNsYXNzIFFHRGljdDsKcHVibGljOgog
ICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFHRGljdCAmICk7CiAgICBRR0RpY3RJdGVyYXRvcigg
Y29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICAgUUdEaWN0SXRlcmF0b3IgJm9wZXJhdG9yPSgg
Y29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICB+UUdEaWN0SXRlcmF0b3IoKTsKCiAgICBRUHRy
Q29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7CgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZ2V0
KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0cmluZygpIGNvbnN0OwogICAgY29uc3QgY2hh
ciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxvbmcgZ2V0S2V5SW50KCkgY29uc3Q7CiAgICB2
b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRv
cigpKCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7CiAgICBRUHRyQ29s
bGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVjdGVkOgogICAgUUdEaWN0ICpk
aWN0OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2RlOwogICAgdWludCBjdXJJbmRl
eDsKfTsKCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVyYXRvcjo6Z2V0KCkg
Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXREYXRhKCkgOiAwOwp9Cgpp
bmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCkgY29uc3QKewogICAg
cmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IFFT
dHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5
QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFzY2lpQnVja2V0KiljdXJO
b2RlKS0+Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5
SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRCdWNrZXQqKWN1ck5vZGUp
LT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5UHRy
KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNrZXQqKWN1ck5vZGUpLT5n
ZXRLZXkoKSA6IDA7Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FpbnRkaWN0
LmgiIDIKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRSW50RGljdAoKCgogICAgICAgIDog
cHVibGljIFFHRGljdAoKewpwdWJsaWM6CiAgICBRSW50RGljdChpbnQgc2l6ZT0xNykgOiBRR0Rp
Y3Qoc2l6ZSxJbnRLZXksMCwwKSB7fQogICAgUUludERpY3QoIGNvbnN0IFFJbnREaWN0PHR5cGU+
ICZkICkgOiBRR0RpY3QoZCkge30KICAgflFJbnREaWN0KCkgeyBjbGVhcigpOyB9CiAgICBRSW50
RGljdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFJbnREaWN0PHR5cGU+ICZkKQogICAgICAgICAg
ICAgICAgICAgICAgICB7IHJldHVybiAoUUludERpY3Q8dHlwZT4mKVFHRGljdDo6b3BlcmF0b3I9
KGQpOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpOyB9
CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OnNpemUoKTsgfQogICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpID09IDA7IH0KICAgIHZv
aWQgaW5zZXJ0KCBsb25nIGssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfaW50KGssKEl0ZW0pZCwxKTsgfQogICAg
dm9pZCByZXBsYWNlKCBsb25nIGssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfaW50KGssKEl0ZW0pZCwyKTsgfQog
ICAgYm9vbCByZW1vdmUoIGxvbmcgayApIHsgcmV0dXJuIFFHRGljdDo6cmVtb3ZlX2ludChrKTsg
fQogICAgdHlwZSAqdGFrZSggbG9uZyBrICkgeyByZXR1cm4gKHR5cGUqKVFHRGljdDo6dGFrZV9p
bnQoayk7IH0KICAgIHR5cGUgKmZpbmQoIGxvbmcgayApIGNvbnN0CiAgICAgICAgICAgICAgICB7
IHJldHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2ludChrLDAsMCk7
IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGxvbmcgayApIGNvbnN0CiAgICAgICAgICAgICAgICB7
IHJldHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2ludChrLDAsMCk7
IH0KICAgIHZvaWQgY2xlYXIoKSB7IFFHRGljdDo6Y2xlYXIoKTsgfQogICAgdm9pZCByZXNpemUo
IHVpbnQgbiApIHsgUUdEaWN0OjpyZXNpemUobik7IH0KICAgIHZvaWQgc3RhdGlzdGljcygpIGNv
bnN0IHsgUUdEaWN0OjpzdGF0aXN0aWNzKCk7IH0KCgoKCgoKCnByaXZhdGU6CiAgICB2b2lkIGRl
bGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRlPD4gaW5saW5lIHZvaWQgUUludERpY3Q8
dm9pZD46OmRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9CgoKdGVtcGxhdGU8
Y2xhc3MgdHlwZT4gaW5saW5lIHZvaWQgUUludERpY3Q8dHlwZT46OmRlbGV0ZUl0ZW0oIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkgZGVsZXRlICh0eXBlKilk
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRSW50RGljdEl0ZXJhdG9yIDogcHVibGlj
IFFHRGljdEl0ZXJhdG9yCnsKcHVibGljOgogICAgUUludERpY3RJdGVyYXRvcihjb25zdCBRSW50
RGljdDx0eXBlPiAmZCkgOlFHRGljdEl0ZXJhdG9yKChRR0RpY3QgJilkKSB7fQogICB+UUludERp
Y3RJdGVyYXRvcigpIHt9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gZGljdC0+Y291
bnQoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gZGljdC0+Y291bnQoKSA9
PSAwOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRv
cjo6dG9GaXJzdCgpOyB9CiAgICBvcGVyYXRvciB0eXBlICooKSBjb25zdCB7IHJldHVybiAodHlw
ZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlwZSAqY3VycmVudCgpIGNvbnN0IHsg
cmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OmdldCgpOyB9CiAgICBsb25nIGN1cnJlbnRL
ZXkoKSBjb25zdCB7IHJldHVybiBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5SW50KCk7IH0KICAgIHR5
cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRv
cigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKysoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0
ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKz0odWludCBqKSB7IHJl
dHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcis9KGopO30KfTsKIyA1MCAiL3Vz
ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0YWJsZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3FzdHJpbmdsaXN0LmgiIDEKIyA0NCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p
bmNsdWRlL3FzdHJpbmdsaXN0LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fz
dHJsaXN0LmgiIDEKIyA1OCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FzdHJsaXN0Lmgi
CnR5cGVkZWYgUVB0ckxpc3RJdGVyYXRvcjxjaGFyPiBRU3RyTGlzdEl0ZXJhdG9yOwoKCmNsYXNz
IFFTdHJMaXN0IDogcHVibGljIFFQdHJMaXN0PGNoYXI+CnsKcHVibGljOgogICAgUVN0ckxpc3Qo
IGJvb2wgZGVlcENvcGllcz1UUlVFICkgeyBkYyA9IGRlZXBDb3BpZXM7IGRlbF9pdGVtID0gZGVl
cENvcGllczsgfQogICAgUVN0ckxpc3QoIGNvbnN0IFFTdHJMaXN0ICYgKTsKICAgIH5RU3RyTGlz
dCgpIHsgY2xlYXIoKTsgfQogICAgUVN0ckxpc3QmIG9wZXJhdG9yPSggY29uc3QgUVN0ckxpc3Qg
JiApOwoKcHJpdmF0ZToKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG5ld0l0ZW0oIFFQdHJDb2xs
ZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYyA/IHFzdHJkdXAoIChjb25zdCBjaGFyKilkICkg
OiBkOyB9CiAgICB2b2lkIGRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IGlm
ICggZGVsX2l0ZW0gKSBkZWxldGVbXSAoY2hhciopZDsgfQogICAgaW50IGNvbXBhcmVJdGVtcygg
UVB0ckNvbGxlY3Rpb246Okl0ZW0gczEsIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHMyICkgeyByZXR1
cm4gcXN0cmNtcCgoY29uc3QgY2hhciopczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKilzMik7IH0KCiAgICBRRGF0
YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJnMsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICZkICkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHMgPj4gKGNoYXIgKiYpZDsgcmV0dXJu
IHM7IH0KICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJnMsIFFQdHJDb2xsZWN0
aW9uOjpJdGVtIGQgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0
dXJuIHMgPDwgKGNvbnN0IGNoYXIgKilkOyB9CgogICAgYm9vbCBkYzsKfTsKCgpjbGFzcyBRU3Ry
SUxpc3QgOiBwdWJsaWMgUVN0ckxpc3QKewpwdWJsaWM6CiAgICBRU3RySUxpc3QoIGJvb2wgZGVl
cENvcGllcz1UUlVFICkgOiBRU3RyTGlzdCggZGVlcENvcGllcyApIHt9CiAgICB+UVN0cklMaXN0
KCkgeyBjbGVhcigpOyB9CnByaXZhdGU6CiAgICBpbnQgY29tcGFyZUl0ZW1zKCBRUHRyQ29sbGVj
dGlvbjo6SXRlbSBzMSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gczIgKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgcmV0dXJuIHFzdHJpY21wKChjb25zdCBjaGFyKilzMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFy
KilzMik7IH0KfTsKCgppbmxpbmUgUVN0ckxpc3QgJiBRU3RyTGlzdDo6b3BlcmF0b3I9KCBjb25z
dCBRU3RyTGlzdCAmc3RyTGlzdCApCnsKICAgIGNsZWFyKCk7CiAgICBkYyA9IHN0ckxpc3QuZGM7
CiAgICBkZWxfaXRlbSA9IGRjOwogICAgUVB0ckxpc3Q8Y2hhcj46Om9wZXJhdG9yPSggc3RyTGlz
dCApOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVN0ckxpc3Q6OlFTdHJMaXN0KCBjb25z
dCBRU3RyTGlzdCAmc3RyTGlzdCApCiAgICA6IFFQdHJMaXN0PGNoYXI+KCBzdHJMaXN0ICkKewog
ICAgZGMgPSBGQUxTRTsKICAgIG9wZXJhdG9yPSggc3RyTGlzdCApOwp9CiMgNDUgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIiAyCgoKCgpjbGFzcyBRUmVnRXhwOwoK
Y2xhc3MgUVN0cmluZ0xpc3QgOiBwdWJsaWMgUVZhbHVlTGlzdDxRU3RyaW5nPgp7CnB1YmxpYzoK
ICAgIFFTdHJpbmdMaXN0KCkgeyB9CiAgICBRU3RyaW5nTGlzdCggY29uc3QgUVN0cmluZ0xpc3Qm
IGwgKSA6IFFWYWx1ZUxpc3Q8UVN0cmluZz4obCkgeyB9CiAgICBRU3RyaW5nTGlzdCggY29uc3Qg
UVZhbHVlTGlzdDxRU3RyaW5nPiYgbCApIDogUVZhbHVlTGlzdDxRU3RyaW5nPihsKSB7IH0KICAg
IFFTdHJpbmdMaXN0KCBjb25zdCBRU3RyaW5nJiBpICkgeyBhcHBlbmQoaSk7IH0KCiAgICBRU3Ry
aW5nTGlzdCggY29uc3QgY2hhciogaSApIHsgYXBwZW5kKGkpOyB9CgoKICAgIHN0YXRpYyBRU3Ry
aW5nTGlzdCBmcm9tU3RyTGlzdChjb25zdCBRU3RyTGlzdCYpOwoKICAgIHZvaWQgc29ydCgpOwoK
ICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzcGxpdCggY29uc3QgUVN0cmluZyAmc2VwLCBjb25zdCBR
U3RyaW5nICZzdHIsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMgPSBGQUxTRSApOwogICAgc3RhdGlj
IFFTdHJpbmdMaXN0IHNwbGl0KCBjb25zdCBRQ2hhciAmc2VwLCBjb25zdCBRU3RyaW5nICZzdHIs
IGJvb2wgYWxsb3dFbXB0eUVudHJpZXMgPSBGQUxTRSApOwoKICAgIHN0YXRpYyBRU3RyaW5nTGlz
dCBzcGxpdCggY29uc3QgUVJlZ0V4cCAmc2VwLCBjb25zdCBRU3RyaW5nICZzdHIsIGJvb2wgYWxs
b3dFbXB0eUVudHJpZXMgPSBGQUxTRSApOwoKICAgIFFTdHJpbmcgam9pbiggY29uc3QgUVN0cmlu
ZyAmc2VwICkgY29uc3Q7CgogICAgUVN0cmluZ0xpc3QgZ3JlcCggY29uc3QgUVN0cmluZyAmc3Ry
LCBib29sIGNzID0gVFJVRSApIGNvbnN0OwoKICAgIFFTdHJpbmdMaXN0IGdyZXAoIGNvbnN0IFFS
ZWdFeHAgJmV4cHIgKSBjb25zdDsKCn07CgoKY2xhc3MgUURhdGFTdHJlYW07CmV4dGVybiBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVN0cmluZ0xpc3QmICk7CmV4dGVy
biBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVN0cmluZ0xp
c3QmICk7CiMgNTEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGFibGUuaCIgMgojIDY2
ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXRhYmxlLmgiCmNsYXNzIFFUYWJsZUhlYWRl
cjsKY2xhc3MgUVZhbGlkYXRvcjsKY2xhc3MgUVRhYmxlOwpjbGFzcyBRUGFpbnRFdmVudDsKY2xh
c3MgUVRpbWVyOwpjbGFzcyBRUmVzaXplRXZlbnQ7CmNsYXNzIFFDb21ib0JveDsKY2xhc3MgUUNo
ZWNrQm94OwpjbGFzcyBRRHJhZ09iamVjdDsKCnN0cnVjdCBRVGFibGVQcml2YXRlOwpzdHJ1Y3Qg
UVRhYmxlSGVhZGVyUHJpdmF0ZTsKCgpjbGFzcyBRVGFibGVTZWxlY3Rpb24KewpwdWJsaWM6CiAg
ICBRVGFibGVTZWxlY3Rpb24oKTsKICAgIFFUYWJsZVNlbGVjdGlvbiggaW50IHN0YXJ0X3Jvdywg
aW50IHN0YXJ0X2NvbCwgaW50IGVuZF9yb3csIGludCBlbmRfY29sICk7CiAgICB2b2lkIGluaXQo
IGludCByb3csIGludCBjb2wgKTsKICAgIHZvaWQgZXhwYW5kVG8oIGludCByb3csIGludCBjb2wg
KTsKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVRhYmxlU2VsZWN0aW9uICZzICkgY29uc3Q7
CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFUYWJsZVNlbGVjdGlvbiAmcyApIGNvbnN0IHsg
cmV0dXJuICEob3BlcmF0b3I9PShzKSk7IH0KCiAgICBpbnQgdG9wUm93KCkgY29uc3QgeyByZXR1
cm4gdFJvdzsgfQogICAgaW50IGJvdHRvbVJvdygpIGNvbnN0IHsgcmV0dXJuIGJSb3c7IH0KICAg
IGludCBsZWZ0Q29sKCkgY29uc3QgeyByZXR1cm4gbENvbDsgfQogICAgaW50IHJpZ2h0Q29sKCkg
Y29uc3QgeyByZXR1cm4gckNvbDsgfQogICAgaW50IGFuY2hvclJvdygpIGNvbnN0IHsgcmV0dXJu
IGFSb3c7IH0KICAgIGludCBhbmNob3JDb2woKSBjb25zdCB7IHJldHVybiBhQ29sOyB9CgogICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGFjdGl2ZTsgfQoKcHJpdmF0ZToKICAgIHVp
bnQgYWN0aXZlIDogMTsKICAgIHVpbnQgaW5pdGVkIDogMTsKICAgIGludCB0Um93LCBsQ29sLCBi
Um93LCByQ29sOwogICAgaW50IGFSb3csIGFDb2w7Cn07CgoKY2xhc3MgUVRhYmxlSXRlbSA6IHB1
YmxpYyBRdAp7CiAgICBmcmllbmQgY2xhc3MgUVRhYmxlOwoKcHVibGljOgogICAgZW51bSBFZGl0
VHlwZSB7IE5ldmVyLCBPblR5cGluZywgV2hlbkN1cnJlbnQsIEFsd2F5cyB9OwoKICAgIFFUYWJs
ZUl0ZW0oIFFUYWJsZSAqdGFibGUsIEVkaXRUeXBlIGV0LCBjb25zdCBRU3RyaW5nICZ0ZXh0ICk7
CiAgICBRVGFibGVJdGVtKCBRVGFibGUgKnRhYmxlLCBFZGl0VHlwZSBldCwgY29uc3QgUVN0cmlu
ZyAmdGV4dCwKICAgICAgICAgICAgICAgIGNvbnN0IFFQaXhtYXAgJnAgKTsKICAgIHZpcnR1YWwg
flFUYWJsZUl0ZW0oKTsKCiAgICB2aXJ0dWFsIFFQaXhtYXAgcGl4bWFwKCkgY29uc3Q7CiAgICB2
aXJ0dWFsIFFTdHJpbmcgdGV4dCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcCgg
Y29uc3QgUVBpeG1hcCAmcCApOwogICAgdmlydHVhbCB2b2lkIHNldFRleHQoIGNvbnN0IFFTdHJp
bmcgJnQgKTsKICAgIFFUYWJsZSAqdGFibGUoKSBjb25zdCB7IHJldHVybiB0OyB9CgogICAgdmly
dHVhbCBpbnQgYWxpZ25tZW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V29yZFdyYXAo
IGJvb2wgYiApOwogICAgYm9vbCB3b3JkV3JhcCgpIGNvbnN0OwoKICAgIEVkaXRUeXBlIGVkaXRU
eXBlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFXaWRnZXQgKmNyZWF0ZUVkaXRvcigpIGNvbnN0Owog
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRGcm9tRWRpdG9yKCBRV2lkZ2V0ICp3ICk7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0UmVwbGFjZWFibGUoIGJvb2wgKTsKICAgIGJvb2wgaXNSZXBsYWNlYWJs
ZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgUVN0cmluZyBrZXkoKSBjb25zdDsKICAgIHZpcnR1YWwg
UVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0U3BhbiggaW50IHJz
LCBpbnQgY3MgKTsKICAgIGludCByb3dTcGFuKCkgY29uc3Q7CiAgICBpbnQgY29sU3BhbigpIGNv
bnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRSb3coIGludCByICk7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29sKCBpbnQgYyApOwogICAgaW50IHJvdygpIGNvbnN0OwogICAgaW50IGNvbCgpIGNvbnN0
OwoKICAgIHZpcnR1YWwgdm9pZCBwYWludCggUVBhaW50ZXIgKnAsIGNvbnN0IFFDb2xvckdyb3Vw
ICZjZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVJlY3QgJmNyLCBib29sIHNlbGVj
dGVkICk7CgogICAgdm9pZCB1cGRhdGVFZGl0b3IoIGludCBvbGRSb3csIGludCBvbGRDb2wgKTsK
CiAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZCggYm9vbCBiICk7CiAgICBib29sIGlzRW5hYmxl
ZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgaW50IHJ0dGkoKSBjb25zdDsKICAgIHN0YXRpYyBpbnQg
UlRUSTsKCnByaXZhdGU6CiAgICBRU3RyaW5nIHR4dDsKICAgIFFQaXhtYXAgcGl4OwogICAgUVRh
YmxlICp0OwogICAgRWRpdFR5cGUgZWRUeXBlOwogICAgdWludCB3b3Jkd3JhcCA6IDE7CiAgICB1
aW50IHRjaGEgOiAxOwogICAgdWludCBlbmFibGVkIDogMTsKICAgIGludCBydywgY2w7CiAgICBp
bnQgcm93c3BhbiwgY29sc3BhbjsKCn07CgpjbGFzcyBRQ29tYm9UYWJsZUl0ZW0gOiBwdWJsaWMg
UVRhYmxlSXRlbQp7CnB1YmxpYzoKICAgIFFDb21ib1RhYmxlSXRlbSggUVRhYmxlICp0YWJsZSwg
Y29uc3QgUVN0cmluZ0xpc3QgJmxpc3QsIGJvb2wgZWRpdGFibGUgPSBGQUxTRSApOwogICAgdmly
dHVhbCBRV2lkZ2V0ICpjcmVhdGVFZGl0b3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50RnJvbUVkaXRvciggUVdpZGdldCAqdyApOwogICAgdmlydHVhbCB2b2lkIHBhaW50KCBR
UGFpbnRlciAqcCwgY29uc3QgUUNvbG9yR3JvdXAgJmNnLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRUmVjdCAmY3IsIGJvb2wgc2VsZWN0ZWQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXJyZW50SXRlbSggaW50IGkgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50SXRlbSggY29u
c3QgUVN0cmluZyAmaSApOwogICAgaW50IGN1cnJlbnRJdGVtKCkgY29uc3Q7CiAgICBRU3RyaW5n
IGN1cnJlbnRUZXh0KCkgY29uc3Q7CiAgICBpbnQgY291bnQoKSBjb25zdDsKCiAgICB1c2luZyBR
VGFibGVJdGVtOjp0ZXh0OwoKICAgIFFTdHJpbmcgdGV4dCggaW50IGkgKSBjb25zdDsKICAgIHZp
cnR1YWwgdm9pZCBzZXRFZGl0YWJsZSggYm9vbCBiICk7CiAgICBib29sIGlzRWRpdGFibGUoKSBj
b25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJpbmdMaXN0KCBjb25zdCBRU3RyaW5nTGlzdCAm
bCApOwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50IFJUVEk7CgogICAgUVNp
emUgc2l6ZUhpbnQoKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQ29tYm9Cb3ggKmNiOwogICAgUVN0
cmluZ0xpc3QgZW50cmllczsKICAgIGludCBjdXJyZW50OwogICAgYm9vbCBlZGl0OwogICAgc3Rh
dGljIFFDb21ib0JveCAqZmFrZUNvbWJvOwoKfTsKCmNsYXNzIFFDaGVja1RhYmxlSXRlbSA6IHB1
YmxpYyBRVGFibGVJdGVtCnsKcHVibGljOgogICAgUUNoZWNrVGFibGVJdGVtKCBRVGFibGUgKnRh
YmxlLCBjb25zdCBRU3RyaW5nICZ0eHQgKTsKICAgIHZpcnR1YWwgUVdpZGdldCAqY3JlYXRlRWRp
dG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudEZyb21FZGl0b3IoIFFXaWRn
ZXQgKncgKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludCggUVBhaW50ZXIgKnAsIGNvbnN0IFFDb2xv
ckdyb3VwICZjZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVJlY3QgJmNyLCBib29s
IHNlbGVjdGVkICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tlZCggYm9vbCBiICk7CiAgICBi
b29sIGlzQ2hlY2tlZCgpIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMg
aW50IFJUVEk7CgogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQ2hl
Y2tCb3ggKmNiOwogICAgYm9vbCBjaGVja2VkOwoKfTsKIyAyMzggIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xdGFibGUuaCIKY2xhc3MgUVRhYmxlIDogcHVibGljIFFTY3JvbGxWaWV3CnsK
ICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgp
IGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9v
bCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQs
IFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFW
YXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGlu
dCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0
KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMg
UVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3Ry
aW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0
YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgIAoKICAgIGZyaWVuZCBjbGFzcyBRVGFibGVIZWFkZXI7CiAgICBmcmllbmQg
Y2xhc3MgUUNvbWJvVGFibGVJdGVtOwogICAgZnJpZW5kIGNsYXNzIFFDaGVja1RhYmxlSXRlbTsK
ICAgIGZyaWVuZCBjbGFzcyBRVGFibGVJdGVtOwoKcHVibGljOgogICAgUVRhYmxlKCBRV2lkZ2V0
KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICBRVGFibGUoIGludCBudW1Sb3dz
LCBpbnQgbnVtQ29scywKICAgICAgICAgICAgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIq
IG5hbWU9MCApOwogICAgflFUYWJsZSgpOwoKICAgIFFIZWFkZXIgKmhvcml6b250YWxIZWFkZXIo
KSBjb25zdDsKICAgIFFIZWFkZXIgKnZlcnRpY2FsSGVhZGVyKCkgY29uc3Q7CgogICAgZW51bSBT
ZWxlY3Rpb25Nb2RlIHsgU2luZ2xlLCBNdWx0aSwgU2luZ2xlUm93LCBNdWx0aVJvdywgTm9TZWxl
Y3Rpb24gfTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25Nb2RlKCBTZWxlY3Rpb25Nb2Rl
IG1vZGUgKTsKICAgIFNlbGVjdGlvbk1vZGUgc2VsZWN0aW9uTW9kZSgpIGNvbnN0OwoKICAgIHZp
cnR1YWwgdm9pZCBzZXRJdGVtKCBpbnQgcm93LCBpbnQgY29sLCBRVGFibGVJdGVtICppdGVtICk7
CiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggaW50IHJvdywgaW50IGNvbCwgY29uc3QgUVN0cmlu
ZyAmdGV4dCApOwogICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcCggaW50IHJvdywgaW50IGNvbCwg
Y29uc3QgUVBpeG1hcCAmcGl4ICk7CiAgICB2aXJ0dWFsIFFUYWJsZUl0ZW0gKml0ZW0oIGludCBy
b3csIGludCBjb2wgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZyB0ZXh0KCBpbnQgcm93LCBp
bnQgY29sICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFQaXhtYXAgcGl4bWFwKCBpbnQgcm93LCBpbnQg
Y29sICkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDZWxsKCBpbnQgcm93LCBpbnQgY29s
ICk7CgogICAgdmlydHVhbCBRUmVjdCBjZWxsR2VvbWV0cnkoIGludCByb3csIGludCBjb2wgKSBj
b25zdDsKICAgIHZpcnR1YWwgaW50IGNvbHVtbldpZHRoKCBpbnQgY29sICkgY29uc3Q7CiAgICB2
aXJ0dWFsIGludCByb3dIZWlnaHQoIGludCByb3cgKSBjb25zdDsKICAgIHZpcnR1YWwgaW50IGNv
bHVtblBvcyggaW50IGNvbCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQgcm93UG9zKCBpbnQgcm93
ICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBjb2x1bW5BdCggaW50IHggKSBjb25zdDsKICAgIHZp
cnR1YWwgaW50IHJvd0F0KCBpbnQgeSApIGNvbnN0OwoKICAgIHZpcnR1YWwgaW50IG51bVJvd3Mo
KSBjb25zdDsKICAgIHZpcnR1YWwgaW50IG51bUNvbHMoKSBjb25zdDsKCiAgICB2b2lkIHVwZGF0
ZUNlbGwoIGludCByb3csIGludCBjb2wgKTsKCiAgICBib29sIGV2ZW50RmlsdGVyKCBRT2JqZWN0
ICogbywgUUV2ZW50ICogKTsKCiAgICBpbnQgY3VycmVudFJvdygpIGNvbnN0IHsgcmV0dXJuIGN1
clJvdzsgfQogICAgaW50IGN1cnJlbnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBjdXJDb2w7IH0K
ICAgIHZvaWQgZW5zdXJlQ2VsbFZpc2libGUoIGludCByb3csIGludCBjb2wgKTsKCiAgICBib29s
IGlzU2VsZWN0ZWQoIGludCByb3csIGludCBjb2wgKSBjb25zdDsKICAgIGJvb2wgaXNSb3dTZWxl
Y3RlZCggaW50IHJvdywgYm9vbCBmdWxsID0gRkFMU0UgKSBjb25zdDsKICAgIGJvb2wgaXNDb2x1
bW5TZWxlY3RlZCggaW50IGNvbCwgYm9vbCBmdWxsID0gRkFMU0UgKSBjb25zdDsKICAgIGludCBu
dW1TZWxlY3Rpb25zKCkgY29uc3Q7CiAgICBRVGFibGVTZWxlY3Rpb24gc2VsZWN0aW9uKCBpbnQg
bnVtICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBhZGRTZWxlY3Rpb24oIGNvbnN0IFFUYWJsZVNl
bGVjdGlvbiAmcyApOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZVNlbGVjdGlvbiggY29uc3QgUVRh
YmxlU2VsZWN0aW9uICZzICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2VsZWN0aW9uKCBpbnQg
bnVtICk7CiAgICB2aXJ0dWFsIGludCBjdXJyZW50U2VsZWN0aW9uKCkgY29uc3Q7CgogICAgdm9p
ZCBzZWxlY3RDZWxscyggaW50IHN0YXJ0X3JvdywgaW50IHN0YXJ0X2NvbCwgaW50IGVuZF9yb3cs
IGludCBlbmRfY29sICk7CiAgICB2b2lkIHNlbGVjdFJvdyggaW50IHJvdyApOwogICAgdm9pZCBz
ZWxlY3RDb2x1bW4oIGludCBjb2wgKTsKCiAgICBib29sIHNob3dHcmlkKCkgY29uc3Q7CgogICAg
Ym9vbCBjb2x1bW5Nb3ZpbmdFbmFibGVkKCkgY29uc3Q7CiAgICBib29sIHJvd01vdmluZ0VuYWJs
ZWQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc29ydENvbHVtbiggaW50IGNvbCwgYm9vbCBh
c2NlbmRpbmcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd2hvbGVS
b3dzID0gRkFMU0UgKTsKICAgIGJvb2wgc29ydGluZygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9p
ZCB0YWtlSXRlbSggUVRhYmxlSXRlbSAqaSApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRDZWxsV2lk
Z2V0KCBpbnQgcm93LCBpbnQgY29sLCBRV2lkZ2V0ICplICk7CiAgICB2aXJ0dWFsIFFXaWRnZXQg
KmNlbGxXaWRnZXQoIGludCByb3csIGludCBjb2wgKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBj
bGVhckNlbGxXaWRnZXQoIGludCByb3csIGludCBjb2wgKTsKCiAgICB2aXJ0dWFsIFFSZWN0IGNl
bGxSZWN0KCBpbnQgcm93LCBpbnQgY29sICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHBhaW50
Q2VsbCggUVBhaW50ZXIgKnAsIGludCByb3csIGludCBjb2wsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRUmVjdCAmY3IsIGJvb2wgc2VsZWN0ZWQgKTsKICAgIHZpcnR1YWwgdm9p
ZCBwYWludENlbGwoIFFQYWludGVyICpwLCBpbnQgcm93LCBpbnQgY29sLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUVJlY3QgJmNyLCBib29sIHNlbGVjdGVkLCBjb25zdCBRQ29s
b3JHcm91cCAmY2cgKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEZvY3VzKCBRUGFpbnRlciAqcCwg
Y29uc3QgUVJlY3QgJnIgKTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7CgogICAgYm9vbCBp
c1JlYWRPbmx5KCkgY29uc3Q7CiAgICBib29sIGlzUm93UmVhZE9ubHkoIGludCByb3cgKSBjb25z
dDsKICAgIGJvb2wgaXNDb2x1bW5SZWFkT25seSggaW50IGNvbCApIGNvbnN0OwoKICAgIHZvaWQg
c2V0RW5hYmxlZCggYm9vbCBiICk7CgogICAgdm9pZCByZXBhaW50U2VsZWN0aW9ucygpOwoKICAg
IGVudW0gRm9jdXNTdHlsZSB7IEZvbGxvd1N0eWxlLCBTcHJlYWRTaGVldCB9OwogICAgdmlydHVh
bCB2b2lkIHNldEZvY3VzU3R5bGUoIEZvY3VzU3R5bGUgZnMgKTsKICAgIEZvY3VzU3R5bGUgZm9j
dXNTdHlsZSgpIGNvbnN0OwoKICAgIHZvaWQgdXBkYXRlSGVhZGVyU3RhdGVzKCk7CgpwdWJsaWMg
OgogICAgdmlydHVhbCB2b2lkIHNldE51bVJvd3MoIGludCByICk7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0TnVtQ29scyggaW50IHIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93R3JpZCggYm9vbCBi
ICk7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZVJvdyggaW50IHJvdyApOwogICAgdmlydHVhbCB2b2lk
IGhpZGVDb2x1bW4oIGludCBjb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBzaG93Um93KCBpbnQgcm93
ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbHVtbiggaW50IGNvbCApOwoKICAgIHZpcnR1YWwg
dm9pZCBzZXRDb2x1bW5XaWR0aCggaW50IGNvbCwgaW50IHcgKTsKICAgIHZpcnR1YWwgdm9pZCBz
ZXRSb3dIZWlnaHQoIGludCByb3csIGludCBoICk7CgogICAgdmlydHVhbCB2b2lkIGFkanVzdENv
bHVtbiggaW50IGNvbCApOwogICAgdmlydHVhbCB2b2lkIGFkanVzdFJvdyggaW50IHJvdyApOwoK
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb2x1bW5TdHJldGNoYWJsZSggaW50IGNvbCwgYm9vbCBzdHJl
dGNoICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Um93U3RyZXRjaGFibGUoIGludCByb3csIGJvb2wg
c3RyZXRjaCApOwogICAgYm9vbCBpc0NvbHVtblN0cmV0Y2hhYmxlKCBpbnQgY29sICkgY29uc3Q7
CiAgICBib29sIGlzUm93U3RyZXRjaGFibGUoIGludCByb3cgKSBjb25zdDsKICAgIHZpcnR1YWwg
dm9pZCBzZXRTb3J0aW5nKCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzd2FwUm93cyggaW50
IHJvdzEsIGludCByb3cyLCBib29sIHN3YXBIZWFkZXIgPSBGQUxTRSApOwogICAgdmlydHVhbCB2
b2lkIHN3YXBDb2x1bW5zKCBpbnQgY29sMSwgaW50IGNvbDIsIGJvb2wgc3dhcEhlYWRlciA9IEZB
TFNFICk7CiAgICB2aXJ0dWFsIHZvaWQgc3dhcENlbGxzKCBpbnQgcm93MSwgaW50IGNvbDEsIGlu
dCByb3cyLCBpbnQgY29sMiApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRMZWZ0TWFyZ2luKCBpbnQg
bSApOwogICAgdmlydHVhbCB2b2lkIHNldFRvcE1hcmdpbiggaW50IG0gKTsKICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJyZW50Q2VsbCggaW50IHJvdywgaW50IGNvbCApOwogICAgdm9pZCBjbGVhclNl
bGVjdGlvbiggYm9vbCByZXBhaW50ID0gVFJVRSApOwogICAgdmlydHVhbCB2b2lkIHNldENvbHVt
bk1vdmluZ0VuYWJsZWQoIGJvb2wgYiApOwogICAgdmlydHVhbCB2b2lkIHNldFJvd01vdmluZ0Vu
YWJsZWQoIGJvb2wgYiApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFkT25seSggYm9vbCBiICk7
CiAgICB2aXJ0dWFsIHZvaWQgc2V0Um93UmVhZE9ubHkoIGludCByb3csIGJvb2wgcm8gKTsKICAg
IHZpcnR1YWwgdm9pZCBzZXRDb2x1bW5SZWFkT25seSggaW50IGNvbCwgYm9vbCBybyApOwoKICAg
IHZpcnR1YWwgdm9pZCBzZXREcmFnRW5hYmxlZCggYm9vbCBiICk7CiAgICBib29sIGRyYWdFbmFi
bGVkKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGluc2VydFJvd3MoIGludCByb3csIGludCBj
b3VudCA9IDEgKTsKICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRDb2x1bW5zKCBpbnQgY29sLCBpbnQg
Y291bnQgPSAxICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUm93KCBpbnQgcm93ICk7CiAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlUm93cyggY29uc3QgUU1lbUFycmF5PGludD4gJnJvd3MgKTsKICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVDb2x1bW4oIGludCBjb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVDb2x1bW5zKCBjb25zdCBRTWVtQXJyYXk8aW50PiAmY29scyApOwoKICAgIHZpcnR1YWwg
dm9pZCBlZGl0Q2VsbCggaW50IHJvdywgaW50IGNvbCwgYm9vbCByZXBsYWNlID0gRkFMU0UgKTsK
CiAgICB2b2lkIHNldFJvd0xhYmVscyggY29uc3QgUVN0cmluZ0xpc3QgJmxhYmVscyApOwogICAg
dm9pZCBzZXRDb2x1bW5MYWJlbHMoIGNvbnN0IFFTdHJpbmdMaXN0ICZsYWJlbHMgKTsKCnByb3Rl
Y3RlZDoKICAgIGVudW0gRWRpdE1vZGUgeyBOb3RFZGl0aW5nLCBFZGl0aW5nLCBSZXBsYWNpbmcg
fTsKICAgIHZvaWQgZHJhd0NvbnRlbnRzKCBRUGFpbnRlciAqcCwgaW50IGN4LCBpbnQgY3ksIGlu
dCBjdywgaW50IGNoICk7CiAgICB2b2lkIGNvbnRlbnRzTW91c2VQcmVzc0V2ZW50KCBRTW91c2VF
dmVudCogKTsKICAgIHZvaWQgY29udGVudHNNb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQqICk7
CiAgICB2b2lkIGNvbnRlbnRzTW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCogKTsK
ICAgIHZvaWQgY29udGVudHNNb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQqICk7CiAgICB2
b2lkIGNvbnRlbnRzQ29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQgKiBlICk7CiAg
ICB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVudCogKTsKICAgIHZvaWQgZm9jdXNJbkV2ZW50
KCBRRm9jdXNFdmVudCogKTsKICAgIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQqICk7
CiAgICB2b2lkIHZpZXdwb3J0UmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqICk7CiAgICB2b2lk
IHNob3dFdmVudCggUVNob3dFdmVudCAqZSApOwogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRF
dmVudCAqZSApOwogICAgdm9pZCBzZXRFZGl0TW9kZSggRWRpdE1vZGUgbW9kZSwgaW50IHJvdywg
aW50IGNvbCApOwoKICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c0RyYWdFbnRlckV2ZW50KCBRRHJh
Z0VudGVyRXZlbnQgKmUgKTsKICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c0RyYWdNb3ZlRXZlbnQo
IFFEcmFnTW92ZUV2ZW50ICplICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNEcmFnTGVhdmVF
dmVudCggUURyYWdMZWF2ZUV2ZW50ICplICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNEcm9w
RXZlbnQoIFFEcm9wRXZlbnQgKmUgKTsKICAgIHZpcnR1YWwgUURyYWdPYmplY3QgKmRyYWdPYmpl
Y3QoKTsKICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoKTsKCgogICAgdmlydHVhbCB2b2lkIHBh
aW50RW1wdHlBcmVhKCBRUGFpbnRlciAqcCwgaW50IGN4LCBpbnQgY3ksIGludCBjdywgaW50IGNo
ICk7CiAgICB2aXJ0dWFsIHZvaWQgYWN0aXZhdGVOZXh0Q2VsbCgpOwogICAgdmlydHVhbCBRV2lk
Z2V0ICpjcmVhdGVFZGl0b3IoIGludCByb3csIGludCBjb2wsIGJvb2wgaW5pdEZyb21DZWxsICkg
Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q2VsbENvbnRlbnRGcm9tRWRpdG9yKCBpbnQgcm93
LCBpbnQgY29sICk7CiAgICB2aXJ0dWFsIFFXaWRnZXQgKmJlZ2luRWRpdCggaW50IHJvdywgaW50
IGNvbCwgYm9vbCByZXBsYWNlICk7CiAgICB2aXJ0dWFsIHZvaWQgZW5kRWRpdCggaW50IHJvdywg
aW50IGNvbCwgYm9vbCBhY2NlcHQsIGJvb2wgcmVwbGFjZSApOwoKICAgIHZpcnR1YWwgdm9pZCBy
ZXNpemVEYXRhKCBpbnQgbGVuICk7CiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0V2lkZ2V0KCBpbnQg
cm93LCBpbnQgY29sLCBRV2lkZ2V0ICp3ICk7CiAgICBpbnQgaW5kZXhPZiggaW50IHJvdywgaW50
IGNvbCApIGNvbnN0OwoKICAgIHZvaWQgd2luZG93QWN0aXZhdGlvbkNoYW5nZSggYm9vbCApOwog
ICAgYm9vbCBpc0VkaXRpbmcoKSBjb25zdDsKICAgIEVkaXRNb2RlIGVkaXRNb2RlKCkgY29uc3Q7
CiAgICBpbnQgY3VyckVkaXRSb3coKSBjb25zdDsKICAgIGludCBjdXJyRWRpdENvbCgpIGNvbnN0
OwoKcHJvdGVjdGVkIDoKICAgIHZpcnR1YWwgdm9pZCBjb2x1bW5XaWR0aENoYW5nZWQoIGludCBj
b2wgKTsKICAgIHZpcnR1YWwgdm9pZCByb3dIZWlnaHRDaGFuZ2VkKCBpbnQgcm93ICk7CiAgICB2
aXJ0dWFsIHZvaWQgY29sdW1uSW5kZXhDaGFuZ2VkKCBpbnQgc2VjdGlvbiwgaW50IGZyb21JbmRl
eCwgaW50IHRvSW5kZXggKTsKICAgIHZpcnR1YWwgdm9pZCByb3dJbmRleENoYW5nZWQoIGludCBz
ZWN0aW9uLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCApOwogICAgdmlydHVhbCB2b2lkIGNv
bHVtbkNsaWNrZWQoIGludCBjb2wgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgY3VycmVudENoYW5n
ZWQoIGludCByb3csIGludCBjb2wgKTsKICAgIHZvaWQgY2xpY2tlZCggaW50IHJvdywgaW50IGNv
bCwgaW50IGJ1dHRvbiwgY29uc3QgUVBvaW50ICZtb3VzZVBvcyApOwogICAgdm9pZCBkb3VibGVD
bGlja2VkKCBpbnQgcm93LCBpbnQgY29sLCBpbnQgYnV0dG9uLCBjb25zdCBRUG9pbnQgJm1vdXNl
UG9zICk7CiAgICB2b2lkIHByZXNzZWQoIGludCByb3csIGludCBjb2wsIGludCBidXR0b24sIGNv
bnN0IFFQb2ludCAmbW91c2VQb3MgKTsKICAgIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCgpOwogICAg
dm9pZCB2YWx1ZUNoYW5nZWQoIGludCByb3csIGludCBjb2wgKTsKICAgIHZvaWQgY29udGV4dE1l
bnVSZXF1ZXN0ZWQoIGludCByb3csIGludCBjb2wsIGNvbnN0IFFQb2ludCAmcG9zICk7CgogICAg
dm9pZCBkcm9wcGVkKCBRRHJvcEV2ZW50ICplICk7CgoKcHJpdmF0ZSA6CiAgICB2b2lkIGRvQXV0
b1Njcm9sbCgpOwogICAgdm9pZCBkb1ZhbHVlQ2hhbmdlZCgpOwogICAgdm9pZCB1cGRhdGVHZW9t
ZXRyaWVzU2xvdCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgY29udGVudHNNb3VzZVByZXNzRXZlbnRF
eCggUU1vdXNlRXZlbnQqICk7CiAgICB2b2lkIGRyYXdDb250ZW50cyggUVBhaW50ZXIqICk7CiAg
ICB2b2lkIHVwZGF0ZUdlb21ldHJpZXMoKTsKICAgIHZvaWQgcmVwYWludFNlbGVjdGlvbnMoIFFU
YWJsZVNlbGVjdGlvbiAqb2xkU2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
UVRhYmxlU2VsZWN0aW9uICpuZXdTZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHVwZGF0ZVZlcnRpY2FsID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgdXBkYXRlSG9yaXpvbnRhbCA9IFRSVUUgKTsKICAgIFFSZWN0IHJhbmdlR2VvbWV0cnko
IGludCB0b3BSb3csIGludCBsZWZ0Q29sLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJv
dHRvbVJvdywgaW50IHJpZ2h0Q29sLCBib29sICZvcHRpbWl6ZSApOwogICAgdm9pZCBmaXhSb3co
IGludCAmcm93LCBpbnQgeSApOwogICAgdm9pZCBmaXhDb2woIGludCAmY29sLCBpbnQgeCApOwoK
ICAgIHZvaWQgaW5pdCggaW50IG51bVJvd3MsIGludCBudW1Db2xzICk7CiAgICBRU2l6ZSB0YWJs
ZVNpemUoKSBjb25zdDsKICAgIHZvaWQgcmVwYWludENlbGwoIGludCByb3csIGludCBjb2wgKTsK
ICAgIHZvaWQgY29udGVudHNUb1ZpZXdwb3J0MiggaW50IHgsIGludCB5LCBpbnQmIHZ4LCBpbnQm
IHZ5ICk7CiAgICBRUG9pbnQgY29udGVudHNUb1ZpZXdwb3J0MiggY29uc3QgUVBvaW50ICZwICk7
CiAgICB2b2lkIHZpZXdwb3J0VG9Db250ZW50czIoIGludCB2eCwgaW50IHZ5LCBpbnQmIHgsIGlu
dCYgeSApOwogICAgUVBvaW50IHZpZXdwb3J0VG9Db250ZW50czIoIGNvbnN0IFFQb2ludCAmcCAp
OwoKICAgIHZvaWQgdXBkYXRlUm93V2lkZ2V0cyggaW50IHJvdyApOwogICAgdm9pZCB1cGRhdGVD
b2xXaWRnZXRzKCBpbnQgY29sICk7CiAgICBib29sIGlzU2VsZWN0ZWQoIGludCByb3csIGludCBj
b2wsIGJvb2wgaW5jbHVkZUN1cnJlbnQgKSBjb25zdDsKICAgIHZvaWQgc2V0Q3VycmVudENlbGwo
IGludCByb3csIGludCBjb2wsIGJvb2wgdXBkYXRlU2VsZWN0aW9ucyApOwogICAgdm9pZCBmaXhD
ZWxsKCBpbnQgJnJvdywgaW50ICZjb2wsIGludCBrZXkgKTsKICAgIHZvaWQgZGVsYXllZFVwZGF0
ZUdlb21ldHJpZXMoKTsKICAgIHN0cnVjdCBUYWJsZVdpZGdldAogICAgewogICAgICAgIFRhYmxl
V2lkZ2V0KCBRV2lkZ2V0ICp3LCBpbnQgciwgaW50IGMgKSA6IHdpZCggdyApLCByb3coIHIgKSwg
Y29sICggYyApIHt9CiAgICAgICAgUVdpZGdldCAqd2lkOwogICAgICAgIGludCByb3csIGNvbDsK
ICAgIH07CiAgICB2b2lkIHNhdmVDb250ZW50cyggUVB0clZlY3RvcjxRVGFibGVJdGVtPiAmdG1w
LAogICAgICAgICAgICAgICAgICAgICAgIFFQdHJWZWN0b3I8VGFibGVXaWRnZXQ+ICZ0bXAyICk7
CiAgICB2b2lkIHVwZGF0ZUhlYWRlckFuZFJlc2l6ZUNvbnRlbnRzKCBRVGFibGVIZWFkZXIgKmhl
YWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sIGlu
dCBjb2xSb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lk
dGgsIGJvb2wgJnVwZGF0ZUJlZm9yZSApOwogICAgdm9pZCByZXN0b3JlQ29udGVudHMoIFFQdHJW
ZWN0b3I8UVRhYmxlSXRlbT4gJnRtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICBRUHRyVmVj
dG9yPFRhYmxlV2lkZ2V0PiAmdG1wMiApOwogICAgdm9pZCBmaW5pc2hDb250ZW50c1Jlc3plKCBi
b29sIHVwZGF0ZUJlZm9yZSApOwoKcHJpdmF0ZToKICAgIFFQdHJWZWN0b3I8UVRhYmxlSXRlbT4g
Y29udGVudHM7CiAgICBRUHRyVmVjdG9yPFFXaWRnZXQ+IHdpZGdldHM7CiAgICBpbnQgY3VyUm93
OwogICAgaW50IGN1ckNvbDsKICAgIFFUYWJsZUhlYWRlciAqbGVmdEhlYWRlciwgKnRvcEhlYWRl
cjsKICAgIEVkaXRNb2RlIGVkTW9kZTsKICAgIGludCBlZGl0Q29sLCBlZGl0Um93OwogICAgUVB0
ckxpc3Q8UVRhYmxlU2VsZWN0aW9uPiBzZWxlY3Rpb25zOwogICAgUVRhYmxlU2VsZWN0aW9uICpj
dXJyZW50U2VsOwogICAgUVRpbWVyICphdXRvU2Nyb2xsVGltZXI7CiAgICBpbnQgbGFzdFNvcnRD
b2w7CiAgICBib29sIHNHcmlkIDogMTsKICAgIGJvb2wgbVJvd3MgOiAxOwogICAgYm9vbCBtQ29s
cyA6IDE7CiAgICBib29sIGFzYyA6IDE7CiAgICBib29sIGRvU29ydCA6IDE7CiAgICBib29sIG1v
dXNlUHJlc3NlZCA6IDE7CiAgICBib29sIHJlYWRPbmx5IDogMTsKICAgIGJvb2wgc2hvdWxkQ2xl
YXJTZWxlY3Rpb24gOiAxOwogICAgYm9vbCBkRW5hYmxlZCA6IDE7CiAgICBib29sIGNvbnRleHRf
bWVudSA6IDE7CiAgICBib29sIGRyYXdBY3RpdmVTZWxlY3Rpb24gOiAxOwogICAgYm9vbCB3YXNf
dmlzaWJsZSA6IDE7CiAgICBTZWxlY3Rpb25Nb2RlIHNlbE1vZGU7CiAgICBpbnQgcHJlc3NlZFJv
dywgcHJlc3NlZENvbDsKICAgIFFUYWJsZVByaXZhdGUgKmQ7CiAgICBRSW50RGljdDxpbnQ+IHJv
Um93czsKICAgIFFJbnREaWN0PGludD4gcm9Db2xzOwogICAgaW50IHN0YXJ0RHJhZ1JvdzsKICAg
IGludCBzdGFydERyYWdDb2w7CiAgICBRUG9pbnQgZHJhZ1N0YXJ0UG9zOwogICAgaW50IG9sZEN1
cnJlbnRSb3csIG9sZEN1cnJlbnRDb2w7CiAgICBRV2lkZ2V0ICp1bnVzZWRfdG9wTGVmdENvcm5l
cjsKICAgIEZvY3VzU3R5bGUgZm9jdXNTdGw7CiAgICBRU2l6ZSB1bnVzZWRfY2FjaGVkU2l6ZUhp
bnQ7CgoKICAgIFFUYWJsZSggY29uc3QgUVRhYmxlICYgKTsKICAgIFFUYWJsZSAmb3BlcmF0b3I9
KCBjb25zdCBRVGFibGUgJiApOwoKfTsKIyAyMCAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q
ZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cUVkaXRUYWJsZS5oIiAyCiMgMSAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQt
My4xLjEvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu
Y2x1ZGUvcWRlc2t0b3B3aWRnZXQuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1
ZGUvcWRlc2t0b3B3aWRnZXQuaCIKY2xhc3MgUURlc2t0b3BXaWRnZXRQcml2YXRlOwoKY2xhc3Mg
UURlc2t0b3BXaWRnZXQgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1l
dGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7
IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBx
dF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2Jq
ZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBi
b29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29s
IHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0
YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkg
eyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFP
Ymo7CnB1YmxpYzoKICAgIFFEZXNrdG9wV2lkZ2V0KCk7CiAgICB+UURlc2t0b3BXaWRnZXQoKTsK
CiAgICBib29sIGlzVmlydHVhbERlc2t0b3AoKSBjb25zdDsKCiAgICBpbnQgbnVtU2NyZWVucygp
IGNvbnN0OwogICAgaW50IHByaW1hcnlTY3JlZW4oKSBjb25zdDsKCiAgICBpbnQgc2NyZWVuTnVt
YmVyKCBRV2lkZ2V0ICp3aWRnZXQgPSAwICkgY29uc3Q7CiAgICBpbnQgc2NyZWVuTnVtYmVyKCBj
b25zdCBRUG9pbnQgJiApIGNvbnN0OwoKICAgIFFXaWRnZXQgKnNjcmVlbiggaW50IHNjcmVlbiA9
IC0xICk7CgogICAgY29uc3QgUVJlY3QmIHNjcmVlbkdlb21ldHJ5KCBpbnQgc2NyZWVuID0gLTEg
KSBjb25zdDsKICAgIGNvbnN0IFFSZWN0JiBzY3JlZW5HZW9tZXRyeSggUVdpZGdldCAqd2lkZ2V0
ICkgY29uc3QKICAgIHsgcmV0dXJuIHNjcmVlbkdlb21ldHJ5KCBzY3JlZW5OdW1iZXIoIHdpZGdl
dCApICk7IH0KICAgIGNvbnN0IFFSZWN0JiBzY3JlZW5HZW9tZXRyeSggY29uc3QgUVBvaW50ICZw
b2ludCApIGNvbnN0CiAgICB7IHJldHVybiBzY3JlZW5HZW9tZXRyeSggc2NyZWVuTnVtYmVyKCBw
b2ludCApICk7IH0KCiAgICBjb25zdCBRUmVjdCYgYXZhaWxhYmxlR2VvbWV0cnkoIGludCBzY3Jl
ZW4gPSAtMSApIGNvbnN0OwogICAgY29uc3QgUVJlY3QmIGF2YWlsYWJsZUdlb21ldHJ5KCBRV2lk
Z2V0ICp3aWRnZXQgKSBjb25zdAogICAgeyByZXR1cm4gYXZhaWxhYmxlR2VvbWV0cnkoIHNjcmVl
bk51bWJlciggd2lkZ2V0ICkgKTsgfQogICAgY29uc3QgUVJlY3QmIGF2YWlsYWJsZUdlb21ldHJ5
KCBjb25zdCBRUG9pbnQgJnBvaW50ICkgY29uc3QKICAgIHsgcmV0dXJuIGF2YWlsYWJsZUdlb21l
dHJ5KCBzY3JlZW5OdW1iZXIoIHBvaW50ICkgKTsgfQoKICAgIHZvaWQgaW5zZXJ0Q2hpbGQoIFFP
YmplY3QgKiApOwoKcHJvdGVjdGVkOgogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50
ICplICk7Cgpwcml2YXRlOgogICAgUURlc2t0b3BXaWRnZXRQcml2YXRlICpkOwoKCiAgICBRRGVz
a3RvcFdpZGdldCggY29uc3QgUURlc2t0b3BXaWRnZXQgJiApOwogICAgUURlc2t0b3BXaWRnZXQg
Jm9wZXJhdG9yPSggY29uc3QgUURlc2t0b3BXaWRnZXQgJiApOwoKfTsKIyA0MyAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3Fhc2NpaWRpY3QuaCIgMQojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu
Y2x1ZGUvcWFzY2lpZGljdC5oIgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRQXNjaWlEaWN0
CgoKCiAgICAgICAgOiBwdWJsaWMgUUdEaWN0Cgp7CnB1YmxpYzoKICAgIFFBc2NpaURpY3QoaW50
IHNpemU9MTcsIGJvb2wgY2FzZVNlbnNpdGl2ZT1UUlVFLCBib29sIGNvcHlLZXlzPVRSVUUgKQog
ICAgICAgIDogUUdEaWN0KHNpemUsQXNjaWlLZXksY2FzZVNlbnNpdGl2ZSxjb3B5S2V5cykge30K
ICAgIFFBc2NpaURpY3QoIGNvbnN0IFFBc2NpaURpY3Q8dHlwZT4gJmQgKSA6IFFHRGljdChkKSB7
fQogICB+UUFzY2lpRGljdCgpIHsgY2xlYXIoKTsgfQogICAgUUFzY2lpRGljdDx0eXBlPiAmb3Bl
cmF0b3I9KGNvbnN0IFFBc2NpaURpY3Q8dHlwZT4gJmQpCiAgICAgICAgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIChRQXNjaWlEaWN0PHR5cGU+JilRR0RpY3Q6Om9wZXJhdG9yPShkKTsgfQogICAg
dWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6Y291bnQoKTsgfQogICAgdWludCBz
aXplKCkgY29uc3QgeyByZXR1cm4gUUdEaWN0OjpzaXplKCk7IH0KICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6Y291bnQoKSA9PSAwOyB9CgogICAgdm9pZCBpbnNlcnQo
IGNvbnN0IGNoYXIgKmssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfYXNjaWkoaywoSXRlbSlkLDEpOyB9CiAgICB2
b2lkIHJlcGxhY2UoIGNvbnN0IGNoYXIgKmssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfYXNjaWkoaywoSXRlbSlk
LDIpOyB9CiAgICBib29sIHJlbW92ZSggY29uc3QgY2hhciAqayApIHsgcmV0dXJuIFFHRGljdDo6
cmVtb3ZlX2FzY2lpKGspOyB9CiAgICB0eXBlICp0YWtlKCBjb25zdCBjaGFyICprICkgeyByZXR1
cm4gKHR5cGUgKilRR0RpY3Q6OnRha2VfYXNjaWkoayk7IH0KICAgIHR5cGUgKmZpbmQoIGNvbnN0
IGNoYXIgKmsgKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGlj
dCopdGhpcyktPlFHRGljdDo6bG9va19hc2NpaShrLDAsMCk7IH0KICAgIHR5cGUgKm9wZXJhdG9y
W10oIGNvbnN0IGNoYXIgKmsgKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUg
KikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6bG9va19hc2NpaShrLDAsMCk7IH0KCiAgICB2b2lk
IGNsZWFyKCkgeyBRR0RpY3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQgcmVzaXplKCB1aW50IG4gKSB7
IFFHRGljdDo6cmVzaXplKG4pOyB9CiAgICB2b2lkIHN0YXRpc3RpY3MoKSBjb25zdCB7IFFHRGlj
dDo6c3RhdGlzdGljcygpOyB9CgoKCgoKCgpwcml2YXRlOgogICAgdm9pZCBkZWxldGVJdGVtKCBJ
dGVtIGQgKTsKfTsKCgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFBc2NpaURpY3Q8dm9pZD46OmRl
bGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9CgoKdGVtcGxhdGU8Y2xhc3MgdHlw
ZT4gaW5saW5lIHZvaWQgUUFzY2lpRGljdDx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0ckNvbGxlY3Rp
b246Okl0ZW0gZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9Cgp0
ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRQXNjaWlEaWN0SXRlcmF0b3IgOiBwdWJsaWMgUUdE
aWN0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBRQXNjaWlEaWN0SXRlcmF0b3IoY29uc3QgUUFzY2lp
RGljdDx0eXBlPiAmZCkKICAgICAgICA6IFFHRGljdEl0ZXJhdG9yKChRR0RpY3QgJilkKSB7fQog
ICB+UUFzY2lpRGljdEl0ZXJhdG9yKCkge30KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVy
biBkaWN0LT5jb3VudCgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBkaWN0
LT5jb3VudCgpID09IDA7IH0KICAgIHR5cGUgKnRvRmlyc3QoKSB7IHJldHVybiAodHlwZSAqKVFH
RGljdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpIGNvbnN0IHsg
cmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpjdXJyZW50
KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIGNv
bnN0IGNoYXIgKmN1cnJlbnRLZXkoKSBjb25zdCB7IHJldHVybiBRR0RpY3RJdGVyYXRvcjo6Z2V0
S2V5QXNjaWkoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IoKSgpIHsgcmV0dXJuICh0eXBlICopUUdE
aWN0SXRlcmF0b3I6Om9wZXJhdG9yKCkoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IrKygpIHsgcmV0
dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKTsgfQogICAgdHlwZSAqb3Bl
cmF0b3IrPSh1aW50IGopIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9y
Kz0oaik7fQp9OwojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWFwcGxpY2F0aW9u
LmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0cmFuc2xhdG9yLmgiIDEK
IyA0OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0cmFuc2xhdG9yLmgiCmNsYXNzIFFU
cmFuc2xhdG9yUHJpdmF0ZTsKCmNsYXNzIFFUcmFuc2xhdG9yTWVzc2FnZQp7CnB1YmxpYzoKICAg
IFFUcmFuc2xhdG9yTWVzc2FnZSgpOwogICAgUVRyYW5zbGF0b3JNZXNzYWdlKCBjb25zdCBjaGFy
ICogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHNvdXJjZVRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb21tZW50LAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiB0cmFuc2xhdGlvbiA9IFFTdHJpbmc6Om51
bGwgKTsKICAgIFFUcmFuc2xhdG9yTWVzc2FnZSggUURhdGFTdHJlYW0gJiApOwogICAgUVRyYW5z
bGF0b3JNZXNzYWdlKCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UgJiBtICk7CgogICAgUVRyYW5z
bGF0b3JNZXNzYWdlICYgb3BlcmF0b3I9KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UgJiBtICk7
CgogICAgdWludCBoYXNoKCkgY29uc3QgeyByZXR1cm4gaDsgfQogICAgY29uc3QgY2hhciAqY29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIGN4OyB9CiAgICBjb25zdCBjaGFyICpzb3VyY2VUZXh0KCkg
Y29uc3QgeyByZXR1cm4gc3Q7IH0KICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQoKSBjb25zdCB7IHJl
dHVybiBjbTsgfQoKICAgIHZvaWQgc2V0VHJhbnNsYXRpb24oIGNvbnN0IFFTdHJpbmcgJiB0cmFu
c2xhdGlvbiApIHsgdG4gPSB0cmFuc2xhdGlvbjsgfQogICAgUVN0cmluZyB0cmFuc2xhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIHRuOyB9CgogICAgZW51bSBQcmVmaXggeyBOb1ByZWZpeCwgSGFzaCwg
SGFzaENvbnRleHQsIEhhc2hDb250ZXh0U291cmNlVGV4dCwKICAgICAgICAgICAgICAgICAgSGFz
aENvbnRleHRTb3VyY2VUZXh0Q29tbWVudCB9OwogICAgdm9pZCB3cml0ZSggUURhdGFTdHJlYW0g
JiBzLCBib29sIHN0cmlwID0gRkFMU0UsCiAgICAgICAgICAgICAgICBQcmVmaXggcHJlZml4ID0g
SGFzaENvbnRleHRTb3VyY2VUZXh0Q29tbWVudCApIGNvbnN0OwogICAgUHJlZml4IGNvbW1vblBy
ZWZpeCggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiApIGNvbnN0OwoKICAgIGJvb2wgb3BlcmF0
b3I9PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3Q7CiAgICBib29sIG9wZXJh
dG9yIT0oIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiAh
b3BlcmF0b3I9PSggbSApOyB9CiAgICBib29sIG9wZXJhdG9yPCggY29uc3QgUVRyYW5zbGF0b3JN
ZXNzYWdlJiBtICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFUcmFuc2xhdG9y
TWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiAhbS5vcGVyYXRvcjwoICp0aGlzICk7IH0K
ICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0gKSBjb25zdAog
ICAgeyByZXR1cm4gbS5vcGVyYXRvcjwoICp0aGlzICk7IH0KICAgIGJvb2wgb3BlcmF0b3I+PSgg
Y29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRv
cjwoIG0gKTsgfQoKcHJpdmF0ZToKICAgIHVpbnQgaDsKICAgIFFDU3RyaW5nIGN4OwogICAgUUNT
dHJpbmcgc3Q7CiAgICBRQ1N0cmluZyBjbTsKICAgIFFTdHJpbmcgdG47CgogICAgZW51bSBUYWcg
eyBUYWdfRW5kID0gMSwgVGFnX1NvdXJjZVRleHQxNiwgVGFnX1RyYW5zbGF0aW9uLCBUYWdfQ29u
dGV4dDE2LAogICAgICAgICAgICAgICBUYWdfSGFzaCwgVGFnX1NvdXJjZVRleHQsIFRhZ19Db250
ZXh0LCBUYWdfQ29tbWVudCwKICAgICAgICAgICAgICAgVGFnX09ic29sZXRlMSB9Owp9OwoKCmNs
YXNzIFFUcmFuc2xhdG9yOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1l
dGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7
IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBx
dF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2Jq
ZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBi
b29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29s
IHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0
YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkg
eyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFP
Ymo7CnB1YmxpYzoKICAgIFFUcmFuc2xhdG9yKCBRT2JqZWN0ICogcGFyZW50LCBjb25zdCBjaGFy
ICogbmFtZSA9IDAgKTsKICAgIH5RVHJhbnNsYXRvcigpOwoKCiAgICBRU3RyaW5nIGZpbmQoIGNv
bnN0IGNoYXIgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsIGNvbnN0IGNoYXIgKiBj
b21tZW50ID0gMCApIGNvbnN0IHsKICAgICAgICByZXR1cm4gZmluZE1lc3NhZ2UoIGNvbnRleHQs
IHNvdXJjZVRleHQsIGNvbW1lbnQgKS50cmFuc2xhdGlvbigpOwogICAgfQoKICAgIHZpcnR1YWwg
UVRyYW5zbGF0b3JNZXNzYWdlIGZpbmRNZXNzYWdlKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqICkgY29u
c3Q7CgogICAgYm9vbCBsb2FkKCBjb25zdCBRU3RyaW5nICYgZmlsZW5hbWUsCiAgICAgICAgICAg
ICAgIGNvbnN0IFFTdHJpbmcgJiBkaXJlY3RvcnkgPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAg
ICAgICBjb25zdCBRU3RyaW5nICYgc2VhcmNoX2RlbGltaXRlcnMgPSBRU3RyaW5nOjpudWxsLAog
ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICYgc3VmZml4ID0gUVN0cmluZzo6bnVsbCApOwog
ICAgYm9vbCBsb2FkKCBjb25zdCB1Y2hhciAqZGF0YSwgaW50IGxlbiApIHsKICAgICAgICBjbGVh
cigpOwogICAgICAgIHJldHVybiBkb19sb2FkKCBkYXRhLCBsZW4gKTsKICAgIH0KCiAgICB2b2lk
IGNsZWFyKCk7CgoKICAgIGVudW0gU2F2ZU1vZGUgeyBFdmVyeXRoaW5nLCBTdHJpcHBlZCB9OwoK
ICAgIGJvb2wgc2F2ZSggY29uc3QgUVN0cmluZyAmIGZpbGVuYW1lLCBTYXZlTW9kZSBtb2RlID0g
RXZlcnl0aGluZyApOwoKICAgIHZvaWQgaW5zZXJ0KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2Um
ICk7CiAgICB2b2lkIGluc2VydCggY29uc3QgY2hhciAqY29udGV4dCwgY29uc3QgY2hhciAqc291
cmNlVGV4dCwgY29uc3QgUVN0cmluZyAmdHJhbnNsYXRpb24gKSB7CiAgICAgICAgaW5zZXJ0KCBR
VHJhbnNsYXRvck1lc3NhZ2UoY29udGV4dCwgc291cmNlVGV4dCwgIiIsIHRyYW5zbGF0aW9uKSAp
OwogICAgfQogICAgdm9pZCByZW1vdmUoIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgKTsKICAg
IHZvaWQgcmVtb3ZlKCBjb25zdCBjaGFyICpjb250ZXh0LCBjb25zdCBjaGFyICpzb3VyY2VUZXh0
ICkgewogICAgICAgIHJlbW92ZSggUVRyYW5zbGF0b3JNZXNzYWdlKGNvbnRleHQsIHNvdXJjZVRl
eHQsICIiKSApOwogICAgfQogICAgYm9vbCBjb250YWlucyggY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiBjb21tZW50ID0gMCApIGNvbnN0OwoKICAgIHZvaWQgc3F1ZWV6
ZSggU2F2ZU1vZGUgPSBFdmVyeXRoaW5nICk7CiAgICB2b2lkIHVuc3F1ZWV6ZSgpOwoKICAgIFFW
YWx1ZUxpc3Q8UVRyYW5zbGF0b3JNZXNzYWdlPiBtZXNzYWdlcygpIGNvbnN0OwoKCiAgICBib29s
IGlzRW1wdHkoKSBjb25zdDsKCnByaXZhdGU6CgogICAgUVRyYW5zbGF0b3IoIGNvbnN0IFFUcmFu
c2xhdG9yICYgKTsKICAgIFFUcmFuc2xhdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9y
ICYgKTsKCgogICAgYm9vbCBkb19sb2FkKCBjb25zdCB1Y2hhciAqZGF0YSwgaW50IGxlbiApOwoK
ICAgIFFUcmFuc2xhdG9yUHJpdmF0ZSAqIGQ7Cn07CiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoKCgoKY2xhc3MgUVNlc3Npb25NYW5hZ2VyOwpjbGFz
cyBRU3R5bGU7CmNsYXNzIFFUcmFuc2xhdG9yOwpjbGFzcyBRRXZlbnRMb29wOwojIDYzICIvdXNy
L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCmNsYXNzIFFBcHBsaWNhdGlv
bjsKZXh0ZXJuIFFBcHBsaWNhdGlvbiAqcUFwcDsKCgpjbGFzcyBRQXBwbGljYXRpb24gOiBwdWJs
aWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFy
ICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiAp
OyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg
cXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQg
aWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSgg
UU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3Rh
dGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRo
aXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp
OyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp
OyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFBcHBs
aWNhdGlvbiggaW50ICZhcmdjLCBjaGFyICoqYXJndik7CiAgICBRQXBwbGljYXRpb24oIGludCAm
YXJnYywgY2hhciAqKmFyZ3YsIGJvb2wgR1VJZW5hYmxlZCApOwogICAgZW51bSBUeXBlIHsgVHR5
LCBHdWlDbGllbnQsIEd1aVNlcnZlciB9OwogICAgUUFwcGxpY2F0aW9uKCBpbnQgJmFyZ2MsIGNo
YXIgKiphcmd2LCBUeXBlICk7CgogICAgUUFwcGxpY2F0aW9uKCBEaXNwbGF5KiBkcHksIEhBTkRM
RSB2aXN1YWwgPSAwLCBIQU5ETEUgY21hcCA9IDAgKTsKICAgIFFBcHBsaWNhdGlvbiggRGlzcGxh
eSAqZHB5LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCiAgICAgICAgICAgICAgICAgIEhBTkRMRSB2
aXN1YWwgPSAwLCBIQU5ETEUgY21hcD0gMCApOwoKICAgIHZpcnR1YWwgflFBcHBsaWNhdGlvbigp
OwoKICAgIGludCBhcmdjKCkgY29uc3Q7CiAgICBjaGFyICoqYXJndigpIGNvbnN0OwoKICAgIFR5
cGUgdHlwZSgpIGNvbnN0OwoKCiAgICBzdGF0aWMgUVN0eWxlICZzdHlsZSgpOwogICAgc3RhdGlj
IHZvaWQgc2V0U3R5bGUoIFFTdHlsZSogKTsKICAgIHN0YXRpYyBRU3R5bGUqIHNldFN0eWxlKCBj
b25zdCBRU3RyaW5nJiApOwoKCiAgICBlbnVtIENvbG9yTW9kZSB7IE5vcm1hbENvbG9ycywgQ3Vz
dG9tQ29sb3JzIH07CiAgICBzdGF0aWMgQ29sb3JNb2RlIGNvbG9yTW9kZSgpOwogICAgc3RhdGlj
IHZvaWQgc2V0Q29sb3JNb2RlKCBRQXBwbGljYXRpb246OkNvbG9yTW9kZSApOwoKCiAgICBlbnVt
IENvbG9yU3BlYyB7IE5vcm1hbENvbG9yPTAsIEN1c3RvbUNvbG9yPTEsIE1hbnlDb2xvcj0yIH07
CiAgICBzdGF0aWMgaW50IGNvbG9yU3BlYygpOwogICAgc3RhdGljIHZvaWQgc2V0Q29sb3JTcGVj
KCBpbnQgKTsKCiAgICBzdGF0aWMgUUN1cnNvciAqb3ZlcnJpZGVDdXJzb3IoKTsKICAgIHN0YXRp
YyB2b2lkIHNldE92ZXJyaWRlQ3Vyc29yKCBjb25zdCBRQ3Vyc29yICYsIGJvb2wgcmVwbGFjZT1G
QUxTRSApOwogICAgc3RhdGljIHZvaWQgcmVzdG9yZU92ZXJyaWRlQ3Vyc29yKCk7CgogICAgc3Rh
dGljIGJvb2wgaGFzR2xvYmFsTW91c2VUcmFja2luZygpOwogICAgc3RhdGljIHZvaWQgc2V0R2xv
YmFsTW91c2VUcmFja2luZyggYm9vbCBlbmFibGUgKTsKCiAgICBzdGF0aWMgUVBhbGV0dGUgcGFs
ZXR0ZSggY29uc3QgUVdpZGdldCogPSAwICk7CiAgICBzdGF0aWMgdm9pZCBzZXRQYWxldHRlKCBj
b25zdCBRUGFsZXR0ZSAmLCBib29sIGluZm9ybVdpZGdldHM9RkFMU0UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9IDAgKTsKCiAgICBzdGF0
aWMgUUZvbnQgZm9udCggY29uc3QgUVdpZGdldCogPSAwICk7CiAgICBzdGF0aWMgdm9pZCBzZXRG
b250KCBjb25zdCBRRm9udCAmLCBib29sIGluZm9ybVdpZGdldHM9RkFMU0UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9IDAgKTsKICAgIHN0YXRp
YyBRRm9udE1ldHJpY3MgZm9udE1ldHJpY3MoKTsKCiAgICBRV2lkZ2V0ICptYWluV2lkZ2V0KCkg
Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbldpZGdldCggUVdpZGdldCAqICk7CiAgICB2
aXJ0dWFsIHZvaWQgcG9saXNoKCBRV2lkZ2V0ICogKTsKCiAgICBzdGF0aWMgUVdpZGdldExpc3Qg
KmFsbFdpZGdldHMoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqdG9wTGV2ZWxXaWRnZXRzKCk7
CgogICAgc3RhdGljIFFEZXNrdG9wV2lkZ2V0ICpkZXNrdG9wKCk7CgogICAgc3RhdGljIFFXaWRn
ZXQgKmFjdGl2ZVBvcHVwV2lkZ2V0KCk7CiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZlTW9kYWxX
aWRnZXQoKTsKCiAgICBzdGF0aWMgUUNsaXBib2FyZCAqY2xpcGJvYXJkKCk7CgogICAgUVdpZGdl
dCAqZm9jdXNXaWRnZXQoKSBjb25zdDsKICAgIFFXaWRnZXQgKmFjdGl2ZVdpbmRvdygpIGNvbnN0
OwoKICAgIHN0YXRpYyBRV2lkZ2V0ICp3aWRnZXRBdCggaW50IHgsIGludCB5LCBib29sIGNoaWxk
PUZBTFNFICk7CiAgICBzdGF0aWMgUVdpZGdldCAqd2lkZ2V0QXQoIGNvbnN0IFFQb2ludCAmLCBi
b29sIGNoaWxkPUZBTFNFICk7CgogICAgc3RhdGljIFFFdmVudExvb3AgKmV2ZW50TG9vcCgpOwoK
ICAgIGludCBleGVjKCk7CiAgICB2b2lkIHByb2Nlc3NFdmVudHMoKTsKICAgIHZvaWQgcHJvY2Vz
c0V2ZW50cyggaW50IG1heHRpbWUgKTsKICAgIHZvaWQgcHJvY2Vzc09uZUV2ZW50KCk7CiAgICBi
b29sIGhhc1BlbmRpbmdFdmVudHMoKTsKICAgIGludCBlbnRlcl9sb29wKCk7CiAgICB2b2lkIGV4
aXRfbG9vcCgpOwogICAgaW50IGxvb3BMZXZlbCgpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgZXhp
dCggaW50IHJldGNvZGU9MCApOwoKICAgIHN0YXRpYyBib29sIHNlbmRFdmVudCggUU9iamVjdCAq
cmVjZWl2ZXIsIFFFdmVudCAqZXZlbnQgKTsKICAgIHN0YXRpYyB2b2lkIHBvc3RFdmVudCggUU9i
amVjdCAqcmVjZWl2ZXIsIFFFdmVudCAqZXZlbnQgKTsKICAgIHN0YXRpYyB2b2lkIHNlbmRQb3N0
ZWRFdmVudHMoIFFPYmplY3QgKnJlY2VpdmVyLCBpbnQgZXZlbnRfdHlwZSApOwogICAgc3RhdGlj
IHZvaWQgc2VuZFBvc3RlZEV2ZW50cygpOwoKICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBvc3RlZEV2
ZW50cyggUU9iamVjdCAqcmVjZWl2ZXIgKTsKCiAgICB2aXJ0dWFsIGJvb2wgbm90aWZ5KCBRT2Jq
ZWN0ICosIFFFdmVudCAqICk7CgogICAgc3RhdGljIGJvb2wgc3RhcnRpbmdVcCgpOwogICAgc3Rh
dGljIGJvb2wgY2xvc2luZ0Rvd24oKTsKCiAgICBzdGF0aWMgdm9pZCBmbHVzaFgoKTsKICAgIHN0
YXRpYyB2b2lkIGZsdXNoKCk7CiAgICBzdGF0aWMgdm9pZCBzeW5jWCgpOwoKICAgIHN0YXRpYyB2
b2lkIGJlZXAoKTsKCgogICAgdm9pZCBzZXREZWZhdWx0Q29kZWMoIFFUZXh0Q29kZWMgKiApOwog
ICAgUVRleHRDb2RlYyogZGVmYXVsdENvZGVjKCkgY29uc3Q7CiAgICB2b2lkIGluc3RhbGxUcmFu
c2xhdG9yKCBRVHJhbnNsYXRvciAqICk7CiAgICB2b2lkIHJlbW92ZVRyYW5zbGF0b3IoIFFUcmFu
c2xhdG9yICogKTsKCiAgICBlbnVtIEVuY29kaW5nIHsgRGVmYXVsdENvZGVjLCBVbmljb2RlVVRG
OCB9OwogICAgUVN0cmluZyB0cmFuc2xhdGUoIGNvbnN0IGNoYXIgKiBjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBrZXksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbW1lbnQgPSAwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVuY29kaW5nIGVuY29kaW5nID0gRGVmYXVsdENvZGVjICkgY29u
c3Q7CgoKICAgIHN0YXRpYyB2b2lkIHNldFdpblN0eWxlSGlnaGxpZ2h0Q29sb3IoIGNvbnN0IFFD
b2xvciAmYyApIHsKICAgICAgICBRUGFsZXR0ZSBwKCBwYWxldHRlKCkgKTsKICAgICAgICBwLnNl
dENvbG9yKCBRQ29sb3JHcm91cDo6SGlnaGxpZ2h0LCBjICk7CiAgICAgICAgc2V0UGFsZXR0ZSgg
cCwgVFJVRSk7CiAgICB9CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICZ3aW5TdHlsZUhpZ2hsaWdo
dENvbG9yKCkgewogICAgICAgIHJldHVybiBwYWxldHRlKCkuYWN0aXZlKCkuaGlnaGxpZ2h0KCk7
CiAgICB9CgogICAgc3RhdGljIHZvaWQgc2V0RGVza3RvcFNldHRpbmdzQXdhcmUoIGJvb2wgKTsK
ICAgIHN0YXRpYyBib29sIGRlc2t0b3BTZXR0aW5nc0F3YXJlKCk7CgogICAgc3RhdGljIHZvaWQg
c2V0Q3Vyc29yRmxhc2hUaW1lKCBpbnQgKTsKICAgIHN0YXRpYyBpbnQgY3Vyc29yRmxhc2hUaW1l
KCk7CgogICAgc3RhdGljIHZvaWQgc2V0RG91YmxlQ2xpY2tJbnRlcnZhbCggaW50ICk7CiAgICBz
dGF0aWMgaW50IGRvdWJsZUNsaWNrSW50ZXJ2YWwoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXRXaGVl
bFNjcm9sbExpbmVzKCBpbnQgKTsKICAgIHN0YXRpYyBpbnQgd2hlZWxTY3JvbGxMaW5lcygpOwoK
ICAgIHN0YXRpYyB2b2lkIHNldEdsb2JhbFN0cnV0KCBjb25zdCBRU2l6ZSAmICk7CiAgICBzdGF0
aWMgUVNpemUgZ2xvYmFsU3RydXQoKTsKCgogICAgc3RhdGljIHZvaWQgc2V0TGlicmFyeVBhdGhz
KGNvbnN0IFFTdHJpbmdMaXN0ICYpOwogICAgc3RhdGljIFFTdHJpbmdMaXN0IGxpYnJhcnlQYXRo
cygpOwogICAgc3RhdGljIHZvaWQgYWRkTGlicmFyeVBhdGgoY29uc3QgUVN0cmluZyAmKTsKICAg
IHN0YXRpYyB2b2lkIHJlbW92ZUxpYnJhcnlQYXRoKGNvbnN0IFFTdHJpbmcgJik7CgogICAgc3Rh
dGljIHZvaWQgc2V0U3RhcnREcmFnVGltZSggaW50IG1zICk7CiAgICBzdGF0aWMgaW50IHN0YXJ0
RHJhZ1RpbWUoKTsKICAgIHN0YXRpYyB2b2lkIHNldFN0YXJ0RHJhZ0Rpc3RhbmNlKCBpbnQgbCAp
OwogICAgc3RhdGljIGludCBzdGFydERyYWdEaXN0YW5jZSgpOwoKICAgIHN0YXRpYyB2b2lkIHNl
dFJldmVyc2VMYXlvdXQoIGJvb2wgYiApOwogICAgc3RhdGljIGJvb2wgcmV2ZXJzZUxheW91dCgp
OwoKICAgIHN0YXRpYyBpbnQgaG9yaXpvbnRhbEFsaWdubWVudCggaW50IGFsaWduICk7CgogICAg
c3RhdGljIGJvb2wgaXNFZmZlY3RFbmFibGVkKCBRdDo6VUlFZmZlY3QgKTsKICAgIHN0YXRpYyB2
b2lkIHNldEVmZmVjdEVuYWJsZWQoIFF0OjpVSUVmZmVjdCwgYm9vbCBlbmFibGUgPSBUUlVFICk7
CiMgMjMxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCiAgICB2
aXJ0dWFsIGJvb2wgeDExRXZlbnRGaWx0ZXIoIFhFdmVudCAqICk7CiAgICB2aXJ0dWFsIGludCB4
MTFDbGllbnRNZXNzYWdlKCBRV2lkZ2V0KiwgWEV2ZW50KiwgYm9vbCBwYXNzaXZlX29ubHkpOwog
ICAgaW50IHgxMVByb2Nlc3NFdmVudCggWEV2ZW50KiApOwojIDI1NyAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIgogICAgYm9vbCBpc1Nlc3Npb25SZXN0b3JlZCgp
IGNvbnN0OwogICAgUVN0cmluZyBzZXNzaW9uSWQoKSBjb25zdDsKICAgIFFTdHJpbmcgc2Vzc2lv
bktleSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIGNvbW1pdERhdGEoIFFTZXNzaW9uTWFuYWdl
ciYgc20gKTsKICAgIHZpcnR1YWwgdm9pZCBzYXZlU3RhdGUoIFFTZXNzaW9uTWFuYWdlciYgc20g
KTsKCgogICAgc3RhdGljIHZvaWQgY3JlYXRlX3hpbSgpOwogICAgc3RhdGljIHZvaWQgY2xvc2Vf
eGltKCk7CiAgICBzdGF0aWMgYm9vbCB4MTFfYXBwbHlfc2V0dGluZ3MoKTsKCiAgICB2b2lkIHdh
a2VVcEd1aVRocmVhZCgpOwoKCgoKCgoKcHJvdGVjdGVkOgogICAgdm9pZCBsYXN0V2luZG93Q2xv
c2VkKCk7CiAgICB2b2lkIGFib3V0VG9RdWl0KCk7CiAgICB2b2lkIGd1aVRocmVhZEF3YWtlKCk7
CgpwdWJsaWMgOgogICAgdm9pZCBxdWl0KCk7CiAgICB2b2lkIGNsb3NlQWxsV2luZG93cygpOwoK
CgoKCgpwcm90ZWN0ZWQ6CiAgICBib29sIGV2ZW50KFFFdmVudCAqKTsKCnByaXZhdGU6CiAgICB2
b2lkIGNvbnN0cnVjdCggaW50ICZhcmdjLCBjaGFyICoqYXJndiwgVHlwZSApOwogICAgdm9pZCBp
bml0aWFsaXplKCBpbnQsIGNoYXIgKiogKTsKICAgIHZvaWQgaW5pdF9wcmVjbWRsaW5lKCk7CiAg
ICB2b2lkIHByb2Nlc3NfY21kbGluZSggaW50KiBhcmdjcHRyLCBjaGFyICoqIGFyZ3YgKTsKICAg
IGJvb2wgaW50ZXJuYWxOb3RpZnkoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKIyAzMjEgIi91c3Iv
bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKICAgIGludCBhcHBfYXJnYzsK
ICAgIGNoYXIgKiphcHBfYXJndjsKICAgIGJvb2wgcXVpdF9ub3c7CiAgICBpbnQgcXVpdF9jb2Rl
OwogICAgc3RhdGljIFFTdHlsZSAqYXBwX3N0eWxlOwogICAgc3RhdGljIGludCBhcHBfY3NwZWM7
CgogICAgc3RhdGljIFFQYWxldHRlICphcHBfcGFsOwoKICAgIHN0YXRpYyBRRm9udCAqYXBwX2Zv
bnQ7CgogICAgc3RhdGljIFFDdXJzb3IgKmFwcF9jdXJzb3I7CgogICAgc3RhdGljIFFFdmVudExv
b3AqIGV2ZW50bG9vcDsKICAgIHN0YXRpYyBpbnQgYXBwX3RyYWNraW5nOwogICAgc3RhdGljIGJv
b2wgaXNfYXBwX3J1bm5pbmc7CiAgICBzdGF0aWMgYm9vbCBpc19hcHBfY2xvc2luZzsKICAgIHN0
YXRpYyBib29sIGFwcF9leGl0X2xvb3A7CiAgICBzdGF0aWMgaW50IGxvb3BfbGV2ZWw7CiAgICBz
dGF0aWMgUVdpZGdldCAqbWFpbl93aWRnZXQ7CiAgICBzdGF0aWMgUVdpZGdldCAqZm9jdXNfd2lk
Z2V0OwogICAgc3RhdGljIFFXaWRnZXQgKmFjdGl2ZV93aW5kb3c7CiAgICBzdGF0aWMgYm9vbCBv
YmV5X2Rlc2t0b3Bfc2V0dGluZ3M7CiAgICBzdGF0aWMgaW50IGN1cnNvcl9mbGFzaF90aW1lOwog
ICAgc3RhdGljIGludCBtb3VzZV9kb3VibGVfY2xpY2tfdGltZTsKICAgIHN0YXRpYyBpbnQgd2hl
ZWxfc2Nyb2xsX2xpbmVzOwoKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfdWk7CiAgICBzdGF0aWMg
Ym9vbCBhbmltYXRlX21lbnU7CiAgICBzdGF0aWMgYm9vbCBhbmltYXRlX3Rvb2x0aXA7CiAgICBz
dGF0aWMgYm9vbCBhbmltYXRlX2NvbWJvOwogICAgc3RhdGljIGJvb2wgZmFkZV9tZW51OwogICAg
c3RhdGljIGJvb2wgZmFkZV90b29sdGlwOwogICAgc3RhdGljIGJvb2wgd2lkZ2V0Q291bnQ7Cgog
ICAgUVZhbHVlTGlzdDxRVHJhbnNsYXRvcio+ICp0cmFuc2xhdG9yczsKCiAgICBRU2Vzc2lvbk1h
bmFnZXIgKnNlc3Npb25fbWFuYWdlcjsKICAgIFFTdHJpbmcgc2Vzc2lvbl9pZDsKICAgIHN0YXRp
YyBRU3RyaW5nKiBzZXNzaW9uX2tleTsKICAgIGJvb2wgaXNfc2Vzc2lvbl9yZXN0b3JlZDsKCgog
ICAgc3RhdGljIHZvaWQgeDExX2luaXRpYWxpemVfc3R5bGUoKTsKCgogICAgc3RhdGljIFFTaXpl
IGFwcF9zdHJ1dDsKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3QgKmFwcF9saWJwYXRoczsKCiAgICBz
dGF0aWMgUUFzY2lpRGljdDxRUGFsZXR0ZT4gKmFwcF9wYWxldHRlczsKICAgIHN0YXRpYyBRQXNj
aWlEaWN0PFFGb250PiAqYXBwX2ZvbnRzOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqcG9wdXBX
aWRnZXRzOwogICAgYm9vbCBpblBvcHVwTW9kZSgpIGNvbnN0OwogICAgdm9pZCBjbG9zZVBvcHVw
KCBRV2lkZ2V0ICpwb3B1cCApOwogICAgdm9pZCBvcGVuUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7
CiAgICB2b2lkIHNldEFjdGl2ZVdpbmRvdyggUVdpZGdldCogYWN0ICk7CgogICAgc3RhdGljIGJv
b2wgc2VuZFNwb250YW5lb3VzRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50
ICk7CiAgICBzdGF0aWMgdm9pZCByZW1vdmVQb3N0ZWRFdmVudCggUUV2ZW50ICogKTsKCiAgICBm
cmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRnZXQ7CiAgICBmcmll
bmQgY2xhc3MgUUFjY2VsTWFuYWdlcjsKICAgIGZyaWVuZCBjbGFzcyBRRXZlbnQ7CiAgICBmcmll
bmQgY2xhc3MgUVRyYW5zbGF0b3I7CiAgICBmcmllbmQgY2xhc3MgUUV2ZW50TG9vcDsKICAgIGZy
aWVuZCB2b2lkIHF0X3VjbV9pbml0aWFsaXplKCBRQXBwbGljYXRpb24gKiApOwoKCgoKCgpwcml2
YXRlOgoKICAgIFFBcHBsaWNhdGlvbiggY29uc3QgUUFwcGxpY2F0aW9uICYgKTsKICAgIFFBcHBs
aWNhdGlvbiAmb3BlcmF0b3I9KCBjb25zdCBRQXBwbGljYXRpb24gJiApOwoKfTsKCmlubGluZSBp
bnQgUUFwcGxpY2F0aW9uOjphcmdjKCkgY29uc3QKewogICAgcmV0dXJuIGFwcF9hcmdjOwp9Cgpp
bmxpbmUgY2hhciAqKlFBcHBsaWNhdGlvbjo6YXJndigpIGNvbnN0CnsKICAgIHJldHVybiBhcHBf
YXJndjsKfQojIDQyMiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FhcHBsaWNhdGlvbi5o
IgppbmxpbmUgUUN1cnNvciAqUUFwcGxpY2F0aW9uOjpvdmVycmlkZUN1cnNvcigpCnsKICAgIHJl
dHVybiBhcHBfY3Vyc29yOwp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246Omhhc0dsb2JhbE1v
dXNlVHJhY2tpbmcoKQp7CiAgICByZXR1cm4gYXBwX3RyYWNraW5nID4gMDsKfQoKaW5saW5lIFFX
aWRnZXQgKlFBcHBsaWNhdGlvbjo6bWFpbldpZGdldCgpIGNvbnN0CnsKICAgIHJldHVybiBtYWlu
X3dpZGdldDsKfQoKaW5saW5lIFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6Zm9jdXNXaWRnZXQoKSBj
b25zdAp7CiAgICByZXR1cm4gZm9jdXNfd2lkZ2V0Owp9CgppbmxpbmUgUVdpZGdldCAqUUFwcGxp
Y2F0aW9uOjphY3RpdmVXaW5kb3coKSBjb25zdAp7CiAgICByZXR1cm4gYWN0aXZlX3dpbmRvdzsK
fQoKaW5saW5lIFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6d2lkZ2V0QXQoIGNvbnN0IFFQb2ludCAm
cCwgYm9vbCBjaGlsZCApCnsKICAgIHJldHVybiB3aWRnZXRBdCggcC54KCksIHAueSgpLCBjaGls
ZCApOwp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246OmluUG9wdXBNb2RlKCkgY29uc3QKewog
ICAgcmV0dXJuIHBvcHVwV2lkZ2V0cyAhPSAwOwp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246
OmlzU2Vzc2lvblJlc3RvcmVkKCkgY29uc3QKewogICAgcmV0dXJuIGlzX3Nlc3Npb25fcmVzdG9y
ZWQ7Cn0KCmlubGluZSBRU3RyaW5nIFFBcHBsaWNhdGlvbjo6c2Vzc2lvbklkKCkgY29uc3QKewog
ICAgcmV0dXJuIHNlc3Npb25faWQ7Cn0KCmlubGluZSBRU3RyaW5nIFFBcHBsaWNhdGlvbjo6c2Vz
c2lvbktleSgpIGNvbnN0CnsKICAgIHJldHVybiBzZXNzaW9uX2tleSA/ICpzZXNzaW9uX2tleSA6
IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBRU2l6ZSBRQXBwbGljYXRpb246Omdsb2JhbFN0cnV0
KCkKewogICAgcmV0dXJuIGFwcF9zdHJ1dDsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9uOjpz
ZW5kRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50ICkKeyBpZiAoIGV2ZW50
ICkgZXZlbnQtPnNwb250ID0gRkFMU0U7IHJldHVybiBxQXBwID8gcUFwcC0+bm90aWZ5KCByZWNl
aXZlciwgZXZlbnQgKSA6IEZBTFNFOyB9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246OnNlbmRT
cG9udGFuZW91c0V2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50ICpldmVudCApCnsgaWYg
KCBldmVudCApIGV2ZW50LT5zcG9udCA9IFRSVUU7IHJldHVybiBxQXBwID8gcUFwcC0+bm90aWZ5
KCByZWNlaXZlciwgZXZlbnQgKSA6IEZBTFNFOyB9CiMgNDk3ICIvdXNyL2xvY2FsL3F0LTMuMS4x
L2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCmlubGluZSBpbnQgUUFwcGxpY2F0aW9uOjpob3Jpem9u
dGFsQWxpZ25tZW50KCBpbnQgYWxpZ24gKQp7CiAgICBhbGlnbiAmPSBBbGlnbkhvcml6b250YWxf
TWFzazsKICAgIGlmICggYWxpZ24gPT0gQWxpZ25BdXRvICkgewogICAgICAgIGlmICggcmV2ZXJz
ZUxheW91dCgpICkKICAgICAgICAgICAgYWxpZ24gPSBBbGlnblJpZ2h0OwogICAgICAgIGVsc2UK
ICAgICAgICAgICAgYWxpZ24gPSBBbGlnbkxlZnQ7CiAgICB9CiAgICByZXR1cm4gYWxpZ247Cn0K
IyAyMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRl
L1R4cUVkaXRUYWJsZS5oIiAyCgoKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz
LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIiAxCiMgMTcgIi9ob21lL3Jlc2Vh
cmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0Lmgi
CiMgMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUv
dHhjX21hcC5oIiAxCiMgMTYgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4
bWF0aC9pbmNsdWRlL3R4Y19tYXAuaCIKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2pl
Y3RzLzMuMi90eG1hdGgvaW5jbHVkZS90eGNfY29uZmlnLmgiIDEKIyAxOCAiL2hvbWUvcmVzZWFy
Y2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX2NvbmZpZy5oIgojIDEg
ImNvbmZpZy5oIiAxCiMgMTkgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4
bWF0aC9pbmNsdWRlL3R4Y19jb25maWcuaCIgMgojIDE3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVy
L3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS90eGNfbWFwLmgiIDIKIyAxOCAiL2hvbWUvcmVz
ZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQu
aCIgMgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNs
dWRlL3R4Y19zdHJpbmcuaCIgMQojIDE5ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz
LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIiAyCiMgMSAiL2hvbWUvcmVzZWFy
Y2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX3ZlY3Rvci5oIiAxCiMg
MTggIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL3R4
Y192ZWN0b3IuaCIKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdmVjdG9y
IiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL3ZlY3RvciIgMwoK
IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5o
IiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRp
b25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lk
KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19i
YWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y
dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19z
KTsKfQojIDY3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdmVjdG9yIiAyIDMK
CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X3ZlY3Rvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr
Ky8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy
Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv
bnN0IGNoYXIqIF9fcyk7Cn0KIyA2NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA3OCAiL3Vzci9sb2Nh
bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9y
X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9U
cCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK
ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9h
bGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2go
MCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlw
ZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwog
IF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikK
ICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9N
X2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFf
YWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
Y2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf
VHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7
CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRv
cl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikK
ICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7
fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBf
TV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwg
X0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUo
c2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAg
dm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlw
ZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNl
PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9j
X2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3Ry
YWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBf
VmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAg
X1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jh
c2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2gg
PSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoK
ICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwojIDE2NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3Jf
YmFzZTxfVHAsIF9BbGxvYz4KewoKIAoKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxf
VHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90
eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5
cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwog
IHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2ZWN0b3JfdHlw
ZT4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0
X3BvaW50ZXIsIHZlY3Rvcl90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlw
ZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxj
b25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2Vf
aXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcg
X0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5n
IF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNl
OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRl
cmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2Zpbmlz
aCk7IH0KCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVy
c2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdp
bigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoK
CgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKGJlZ2luKCkpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29u
c3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgogIHNp
emVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2lu
KCkpOyB9CgoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90
eXBlKC0xKSAvIHNpemVvZihfVHApOyB9CgoKCgoKICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25z
dAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl
KSAtIGJlZ2luKCkpOyB9CgoKCgogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVn
aW4oKSA9PSBlbmQoKTsgfQojIDI4OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f
bikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQojIDMwMCAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgY29uc3RfcmVmZXJlbmNlIG9w
ZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsg
fQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlmIChf
X24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yIik7
CiAgfQojIDMxNiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Zl
Y3Rvci5oIiAzCiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICB7IF9NX3JhbmdlX2No
ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KIyAzMjggIi91c3IvbG9jYWwvZ2NjMy4y
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGNvbnN0X3JlZmVyZW5jZSBh
dChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g
KCp0aGlzKVtfX25dOyB9CgoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNp
emVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAg
eyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVl
KTsgfQoKICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBh
bGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf
TV9zdGFydCwgX19uLCBfVHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxv
Yz4mIF9feCkKICAgIDogX0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAg
IHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks
IF9NX3N0YXJ0KTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVj
dG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAg
ICA6IF9CYXNlKF9fYSkKICAgICAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVn
ZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0aWFs
aXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24s
IF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAgX01fc3RhcnQg
PSBfTV9hbGxvY2F0ZShfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsg
X19uOwogICAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19u
LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2
b2lkCiAgICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9j
YXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2Zp
cnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICAgICAgfQoKICB+dmVjdG9yKCkKICB7
IF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4m
IG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwojIDM5MyAiL3Vzci9s
b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBy
ZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBwb2ludGVyIF9fdG1w
ID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAg
X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh
cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1w
OwogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9CiAgfQojIDQyMSAiL3Vzci9sb2NhbC9nY2Mz
LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBhc3NpZ24oc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFs
KTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3Zh
bCk7CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgYXNzaWdu
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh
bCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9J
bnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAg
ICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1
ZV90eXBlKQogICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3Zh
bCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQKICAgIF9NX2Fzc2ln
bl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNl
X3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9hc3NpZ25f
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZyk7CgoKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoK
CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KCgoK
CgogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgoKCgoKICBjb25z
dF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQojIDQ4OCAi
L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAg
dm9pZAogIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKICB7CiAgICBpZiAoX01fZmluaXNoICE9
IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwog
ICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQo
KSwgX194KTsKICB9CiMgNTE5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gp
CiAgewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2Fw
KF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3Jh
Z2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQojIDUzOCAiL3Vzci9sb2NhbC9nY2MzLjIv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IKICBpbnNlcnQo
aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCiAgewogICAgc2l6ZV90eXBlIF9f
biA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmlu
aXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5z
ZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsg
X19uOwogIH0KIyA1NjIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF92ZWN0b3IuaCIgMwogIGl0ZXJhdG9yCiAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAg
ewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zp
bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg
IF9Db25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNl
CiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19wb3NpdGlvbikpOwogICAgcmV0dXJuIGJl
Z2luKCkgKyBfX247CiAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2
b2lkCiAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAg
X01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK
ICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZAogICAgICAgIF9NX2lu
c2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3Zh
bCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBzdGF0aWNfY2FzdDxz
aXplX3R5cGU+KF9fbiksIHN0YXRpY19jYXN0PF9UcD4oX192YWwpKTsgfQoKICB0ZW1wbGF0ZTxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2go
aXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fZmFs
c2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CiAg
ICAgIF9NX3JhbmdlX2luc2VydChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5
KCkpOwogICAgfQojIDYxMiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194
KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9f
biwgY29uc3QgX1RwJiBfX3gpOwojIDYyNiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01fZmlu
aXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICB9CiMgNjQ1ICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShp
dGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAg
ICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmlu
aXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0K
IyA2NjggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3Iu
aCIgMwogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkg
ewogICAgaXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAgX0Rl
c3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0IC0g
X19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CiMgNjg1ICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkIHJlc2l6ZShzaXpl
X3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwg
c2l6ZSgpKQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxz
ZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQojIDcw
MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAz
CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3X3NpemUs
IF9UcCgpKTsgfQoKCgoKCgoKICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7
IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9p
bnRlciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2Fs
bG9jYXRlKF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNo
KC4uLikKICAgICAgewogICAgICAgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7CiAgICAg
ICAgdGhyb3c7CiAgICAgIH0KICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRv
cl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
ICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0KTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2Vu
ZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7
CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5z
ZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0
b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m
IF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXpl
KCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgp
LCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21w
YXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0o
Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShf
X3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZlY3Rvcjxf
VHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9U
cCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90
eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewog
ICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVn
aW4oKSwgX194LmVuZCgpKTsKICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg
ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp
OwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0
YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAg
ICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSk7CiAg
ICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194
LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwog
ICAgfQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhp
czsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAs
IF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9f
dmFsKQp7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4g
X190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMp
OwogIH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCks
IF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwg
X19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigp
LCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46
Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykg
ewogIGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Qg
JiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2Zp
cnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAg
ZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQK
dmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCk7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190
bXAoX01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgX0Rl
c3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf
TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVs
c2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHko
X19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwogICAgX0Rlc3Ryb3koX19uZXdfZmluaXNoLCBl
bmQoKSk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogIH0KICBlbHNlIHsK
ICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBzaXpl
KCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6
X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewogIGlm
IChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIF9Db25zdHJ1Y3QoX01fZmlu
aXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5
ID0gX194OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gg
LSAyKSwgaXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5
OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwog
ICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3Np
emUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAg
IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICB0cnkgewogICAgICBfX25l
d19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQp
OwogICAgICBfQ29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNlKCksIF9feCk7CiAgICAgICsrX19u
ZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np
dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAg
ICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgIF9NX2RlYWxs
b2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKTsKICAgICAgICB0aHJvdzsKICAgICAgfQog
ICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg
X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0
LmJhc2UoKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICBfTV9lbmRf
b2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2lu
c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5k
X29mX3N0b3JhZ2UpIHsKICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEp
KTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRv
cihfTV9maW5pc2ggLSAyKSwKICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0g
MSkpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXpl
X3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f
b2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3Rh
cnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3
X3N0YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5p
c2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2go
Li4uKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsK
ICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKTsKICAgICAgICB0aHJvdzsK
ICAgICAgfQogICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShf
TV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9f
bmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0
b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX19uICE9IDApIHsKICAg
IGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewog
ICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm
dGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01f
ZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAg
ICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9f
b2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24s
IF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg
ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIsIF9f
eF9jb3B5KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAg
ICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gp
OwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGZpbGwoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2Ugewog
ICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBp
dGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikpOwogICAgICBpdGVyYXRvciBf
X25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICB0cnkgewogICAgICAgIF9fbmV3X2Zpbmlz
aCA9IHVuaW5pdGlhbGl6ZWRfY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7
CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdfZmluaXNo
LCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6
ZWRfY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBj
YXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdf
ZmluaXNoKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVu
KTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9N
X2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl
IC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAg
X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lk
CnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9fcG9z
ID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv
cj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19w
b3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNp
emVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgaWYgKHNpemVfdHlw
ZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNp
emVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRv
ciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24p
IHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gs
IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3
YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAg
ICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7
CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5j
ZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlk
LCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNf
YWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2Zpbmlz
aCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAg
ICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxz
ZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25z
dCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAg
ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJh
dG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQp
OwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5p
c2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJv
eShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25l
d19zdGFydC5iYXNlKCksIF9fbGVuKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAg
X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh
cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3
X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAg
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0K
ICB9Cn0KCn0KIyA3MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL3ZlY3RvciIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2J2ZWN0
b3IuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9idmVjdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9C
aXRfdHlwZTsKICBlbnVtIHsgX01fd29yZF9iaXQgPSBpbnQoOCAqIHNpemVvZihfQml0X3R5cGUp
KSB9OwoKc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsKCiAgX0JpdF90eXBlICogX01fcDsKICBfQml0
X3R5cGUgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZShfQml0X3R5cGUgKiBfX3gsIF9CaXRfdHlw
ZSBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9y
ZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISEoKl9NX3AgJiBfTV9tYXNrKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVy
YXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVs
c2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJl
bmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0
aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNl
JiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBi
b29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1
cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsgfQogIHZvaWQgZmxpcCgpIHsgKl9NX3AgXj0g
X01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZSBfX3gsIF9CaXRf
cmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0gX195OwogIF9feSA9
IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVibGljIGl0ZXJhdG9yPHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBib29sPgp7CiAgX0JpdF90eXBlICogX01fcDsKICB1
bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UoX0JpdF90eXBlICog
X194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9
CgogIHZvaWQgX01fYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfTV93b3JkX2Jp
dCAtIDEpIHsKICAgICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2
b2lkIF9NX2J1bXBfZG93bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9N
X29mZnNldCA9IF9NX3dvcmRfYml0IC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9p
ZCBfTV9pbmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kg
KyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9NX3dvcmRfYml0OwogICAgX19uID0gX19u
ICUgX01fd29yZF9iaXQ7CiAgICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5z
aWduZWQgaW50KSBfX24gKyBfTV93b3JkX2JpdDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAg
ICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3Ag
PT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g
X01fcCA8IF9faS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5f
TV9vZmZzZXQpOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl
JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g
X19pIDwgKnRoaXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jh
c2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9w
ZXJhdG9yPj0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVy
biAhKCp0aGlzIDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25z
dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kp
IHsKICByZXR1cm4gX01fd29yZF9iaXQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01f
b2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGlj
IF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7
CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0
b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAw
KSB7fQogIF9CaXRfaXRlcmF0b3IoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQog
ICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7IH0K
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1w
ID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJh
dG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0
aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9y
JiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl
IF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0
b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9f
dG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVy
YXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3Jb
XShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5s
aW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRl
cmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRl
cmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJl
bmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29s
KiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
CiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAg
X0JpdF9jb25zdF9pdGVyYXRvcihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg
ICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9y
KGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5f
TV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOwog
IH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAg
IGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1
cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVt
cF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9y
LS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9k
b3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9
KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkg
ewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0
b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJh
dG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBjb25zdF9p
dGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3Rf
aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGNv
bnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIHJldHVy
biAqKCp0aGlzICsgX19pKTsKICB9Cn07CgppbmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgpvcGVy
YXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9jb25zdF9pdGVyYXRvciYgX194KSB7IHJl
dHVybiBfX3ggKyBfX247IH0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wg
X19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw
ZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9j
X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3Io
X19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpw
cm90ZWN0ZWQ6CiAgX0JpdF90eXBlICogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJl
dHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9f
TV93b3JkX2JpdCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQu
X01fcCkKICAgICAgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01f
c3RhcnQuX01fcCk7CiAgfQoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9CaXRfdHlwZSwgX0Fs
bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBf
Qml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRf
dHlwZSAqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9y
PgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgog
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2Nh
dG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9h
bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9y
X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9m
aW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUK
ICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90
IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX01fd29yZF9i
aXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAo
X01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01f
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRv
ciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3Jf
YWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2Nf
dHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0
b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv
Y190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7
CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9C
YXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsg
fQp9OwoKfQoKCgpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAg
Y2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+
CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBz
aXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog
ICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29u
c3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5
cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0
b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CgogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy
ZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxs
b2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46
OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxv
Yz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0
YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2lu
ZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6
CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUg
KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3Eg
KyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQgPSBp
dGVyYXRvcihfX3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2Vf
dHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRp
b24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3Rv
cmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9m
aW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2Zpbmlz
aDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxs
b2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlv
biwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsrID0gX194OwogICAgICAgIF9NX2Zp
bmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0
ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9i
aXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7
CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2
b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0
ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAg
ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu
aXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykgewogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3Rh
cnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQg
X01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAq
X19maXJzdCk7CiAgICAgICAgKytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3Ig
X19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19m
aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg
ICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBp
ZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQo
X19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg
ICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2Zp
bmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAg
ICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0
ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7
CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9N
X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFs
bG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9N
X3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9y
KF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9N
X2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmlu
aXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0
ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25z
dCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAg
IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4o
KSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0
dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBl
IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAg
c2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAg
c2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0
X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9v
bCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBk
aWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2Vf
dHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29u
c3QgewogICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlw
ZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsg
fQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01f
cmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZl
Y3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAg
OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19u
LCBib29sIF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9
IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAg
IHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9N
X2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2
ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2Nh
dG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9N
X3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29u
c3QgdmVjdG9yJiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9y
KCkpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVn
aW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBf
SW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAg
ICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsK
ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu
aXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewog
ICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw
ZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVn
cmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVn
cmFsKCkpOwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShj
b25zdCB2ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7
CiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2Nh
dGUoKTsKICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNv
cHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJl
Z2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gp
IHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwg
X01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBf
X24gLSBzaXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVn
aW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29m
X3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihz
aXplX3QgX19uLCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAg
ICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNw
YXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBf
TV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9h
c3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2ln
bl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBf
X2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIg
IT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsK
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7
CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9
CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2ln
bl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXpl
X3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19sZW4g
PCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBl
bmQoKSk7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp
cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0
LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsK
ICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlm
IChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2Fs
bG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0
b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0g
aXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24g
KyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICB9CiAgICB9CgogICAgcmVmZXJl
bmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9u
dCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0
dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJl
dHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAg
IGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmlu
aXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gp
OwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAg
c3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmlu
aXNoLCBfX3guX01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBf
X3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBf
X24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9N
X2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2Zpbmlz
aCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBf
X3gpOwogICAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxj
bGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAg
ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNl
cnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9f
cG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAg
fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50
ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2Vy
dF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg
IH0KCiAgICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlw
ZSBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAo
Y2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9z
aXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAg
ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7
CiAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAg
IGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9f
bik7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAg
ICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwg
MCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBj
b3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAg
ICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f
bGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0
ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2Vy
dChfX3Bvc2l0aW9uLCBfX24sIF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1f
TV9maW5pc2g7IH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAg
ICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiAr
IDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJu
IF9fcG9zaXRpb247CiAgICB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBp
dGVyYXRvciBfX2xhc3QpIHsKICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBf
X2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXpl
X3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3Np
emUgPCBzaXplKCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25l
d19zaXplKSwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19z
aXplIC0gc2l6ZSgpLCBfX3gpOwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKF9C
aXRfdHlwZSAqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsg
KytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVy
YXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgX19hbGxv
Yz4gYml0X3ZlY3RvcjsKCn0KIyA3MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L3ZlY3RvciIgMiAzCiMgMTkgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4
bWF0aC9pbmNsdWRlL3R4Y192ZWN0b3IuaCIgMgojIDIwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVy
L3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIiAyCiMgMSAiL2hv
bWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX3N0cmVh
bXMuaCIgMQojIDIxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgv
aW5jbHVkZS90eGNfc3RyZWFtcy5oIgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr
LzMuMi9pb21hbmlwIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2lvbWFuaXAiIDMKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZnVu
Y3Rpb25hbCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9mdW5j
dGlvbmFsIiAzCiMgNDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb21hbmlw
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHN0cnVjdCBfUmVzZXRpb3NmbGFncyB7IGlvc19iYXNl
OjpmbXRmbGFncyBfTV9tYXNrOyB9OwoKICBpbmxpbmUgX1Jlc2V0aW9zZmxhZ3MKICByZXNldGlv
c2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBfX21hc2spCiAgewogICAgX1Jlc2V0aW9zZmxhZ3Mg
X194OwogICAgX194Ll9NX21hc2sgPSBfX21hc2s7CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2lj
X2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9D
aGFyVCxfVHJhaXRzPiYgX19pcywgX1Jlc2V0aW9zZmxhZ3MgX19mKQogICAgewogICAgICBfX2lz
LnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBfX2YuX01fbWFzayk7CiAgICAgIHJldHVybiBf
X2lzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfUmVzZXRpb3NmbGFncyBfX2Yp
CiAgICB7CiAgICAgIF9fb3Muc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIF9fZi5fTV9tYXNr
KTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldGlvc2ZsYWdzIHsgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9NX21hc2s7IH07CgogIGlubGluZSBfU2V0aW9zZmxhZ3MKICBzZXRp
b3NmbGFncyhpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9TZXRpb3NmbGFncyBf
X3g7CiAgICBfX3guX01fbWFzayA9IF9fbWFzazsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No
YXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0aW9zZmxhZ3MgX19mKQogICAgewogICAgICBfX2lzLnNl
dGYoX19mLl9NX21hc2spOwogICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX29zdHJlYW08
X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh
aXRzPiYgX19vcywgX1NldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19vcy5zZXRmKF9fZi5f
TV9tYXNrKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldGJhc2UgeyBp
bnQgX01fYmFzZTsgfTsKCiAgaW5saW5lIF9TZXRiYXNlCiAgc2V0YmFzZShpbnQgX19iYXNlKQog
IHsKICAgIF9TZXRiYXNlIF9feDsKICAgIF9feC5fTV9iYXNlID0gX19iYXNlOwogICAgcmV0dXJu
IF9feDsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o
YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faXMsIF9TZXRiYXNlIF9fZikKICAgIHsK
ICAgICAgX19pcy5zZXRmKF9fZi5fTV9iYXNlID09IDggPyBpb3NfYmFzZTo6b2N0IDoKICAgICAg
ICAgICAgICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOgogICAgICAgICAgICAg
IF9fZi5fTV9iYXNlID09IDE2ID8gaW9zX2Jhc2U6OmhleCA6CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6OmZtdGZsYWdzKDApLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgICAgcmV0dXJuIF9faXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9TZXRiYXNlIF9fZikKICAgIHsKICAg
ICAgX19vcy5zZXRmKF9fZi5fTV9iYXNlID09IDggPyBpb3NfYmFzZTo6b2N0IDoKICAgICAgICAg
ICAgICAgIF9fZi5fTV9iYXNlID09IDEwID8gaW9zX2Jhc2U6OmRlYyA6CiAgICAgICAgICAgICAg
ICBfX2YuX01fYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOgogICAgICAgICAgICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzKDApLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgICAgcmV0dXJuIF9f
b3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJ1Y3QgX1NldGZp
bGwgeyBfQ2hhclQgX01fYzsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIF9TZXRmaWxsPF9DaGFyVD4KICAgIHNldGZpbGwoX0NoYXJUIF9fYykKICAgIHsKICAgICAg
X1NldGZpbGw8X0NoYXJUPiBfX3g7CiAgICAgIF9feC5fTV9jID0gX19jOwogICAgICByZXR1cm4g
X194OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+
KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0ZmlsbDxfQ2hhclQ+IF9f
ZikKICAgIHsKICAgICAgX19pcy5maWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9faXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlu
bGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9TZXRmaWxsPF9DaGFyVD4gX19mKQogICAg
ewogICAgICBfX29zLmZpbGwoX19mLl9NX2MpOwogICAgICByZXR1cm4gX19vczsKICAgIH0KCgog
IHN0cnVjdCBfU2V0cHJlY2lzaW9uIHsgaW50IF9NX247IH07CgogIGlubGluZSBfU2V0cHJlY2lz
aW9uCiAgc2V0cHJlY2lzaW9uKGludCBfX24pCiAgewogICAgX1NldHByZWNpc2lvbiBfX3g7CiAg
ICBfX3guX01fbiA9IF9fbjsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+
JiBfX2lzLCBfU2V0cHJlY2lzaW9uIF9fZikKICAgIHsKICAgICAgX19pcy5wcmVjaXNpb24oX19m
Ll9NX24pOwogICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9U
cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19v
cywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9fb3MucHJlY2lzaW9uKF9fZi5fTV9u
KTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldHcgeyBpbnQgX01fbjsg
fTsKCiAgaW5saW5lIF9TZXR3CiAgc2V0dyhpbnQgX19uKQogIHsKICAgIF9TZXR3IF9feDsKICAg
IF9feC5fTV9uID0gX19uOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4m
IF9faXMsIF9TZXR3IF9fZikKICAgIHsKICAgICAgX19pcy53aWR0aChfX2YuX01fbik7CiAgICAg
IHJldHVybiBfX2lzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0dyBfX2Yp
CiAgICB7CiAgICAgIF9fb3Mud2lkdGgoX19mLl9NX24pOwogICAgICByZXR1cm4gX19vczsKICAg
IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIF9T
ZXRmaWxsPGNoYXI+KTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3Ry
ZWFtJiwgX1NldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8
PChvc3RyZWFtJiwgX1Jlc2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0YmFzZSk7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m
IG9wZXJhdG9yPDwob3N0cmVhbSYsIF9TZXRwcmVjaXNpb24pOwogIGV4dGVybiB0ZW1wbGF0ZSBv
c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0dyk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdv
c3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgX1NldGZpbGw8d2NoYXJfdD4pOwogIGV4dGVy
biB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXRpb3NmbGFncyk7
CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgX1Jlc2V0
aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVh
bSYsIF9TZXRiYXNlKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29z
dHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJh
dG9yPDwod29zdHJlYW0mLCBfU2V0dyk7CgogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVy
YXRvcj4+KGlzdHJlYW0mLCBfU2V0ZmlsbDxjaGFyPik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJl
YW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRl
IGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBleHRlcm4g
dGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldGJhc2UpOwogIGV4dGVy
biB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsK
ICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldHcpOwog
IGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXRmaWxs
PHdjaGFyX3Q+KTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJl
YW0mLCBfU2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+
Pih3aXN0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0m
IG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0YmFzZSk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldHByZWNpc2lvbik7CiAgZXh0ZXJuIHRlbXBs
YXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldHcpOwp9CiMgMjIgIi9ob21l
L3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL3R4Y19zdHJlYW1z
LmgiIDIKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9zc3RyZWFtIiAx
IDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL3NzdHJlYW0iIDMKCgoK
Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmIDogcHVibGlj
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf
dHlwZTsKCgogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcl90eXBlLCBfVHJhaXRzLCBfQWxsb2M+IF9f
c3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90
eXBlIF9fc2l6ZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIF9fc3RyaW5nX3R5cGUgX01f
c3RyaW5nOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ2J1
Zihpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91
dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX3N0cmluZygpCiAgICAgIHsgX01fc3Ry
aW5nYnVmX2luaXQoX19tb2RlKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5n
YnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3RyLAogICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAg
ICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9zdHJpbmcoX19zdHIuZGF0YSgpLCBfX3N0ci5z
aXplKCkpCiAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQoKCiAgICAgIF9fc3Ry
aW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9tb2RlICYg
aW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9f
bGVuID0gX01fc3RyaW5nLnNpemUoKTsKICAgICAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9v
dXRfYmVnKQogICAgICAgICAgICAgIF9fbGVuID0gbWF4KF9fc2l6ZV90eXBlKF9NX291dF9lbmQg
LSBfTV9vdXRfYmVnKSwgX19sZW4pOwogICAgICAgICAgICByZXR1cm4gX19zdHJpbmdfdHlwZShf
TV9vdXRfYmVnLCBfTV9vdXRfYmVnICsgX19sZW4pOwogICAgICAgICAgfQogICAgICAgIGVsc2UK
ICAgICAgICAgIHJldHVybiBfTV9zdHJpbmc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3Ry
KGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAgewogICAgICAgIF9NX3N0cmluZyA9IF9f
czsKICAgICAgICBfTV9zdHJpbmdidWZfaW5pdChfTV9tb2RlKTsKICAgICAgfQoKICAgIHByb3Rl
Y3RlZDoKCiAgICAgIHZvaWQKICAgICAgX01fc3RyaW5nYnVmX2luaXQoaW9zX2Jhc2U6Om9wZW5t
b2RlIF9fbW9kZSkKICAgICAgewoKCgoKCiAgICAgICAgX01fYnVmX3NpemUgPSBfTV9zdHJpbmcu
c2l6ZSgpOwoKCgoKCiAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gNTEyOwogICAgICAgIF9NX21v
ZGUgPSBfX21vZGU7CiAgICAgICAgaWYgKF9NX21vZGUgJiAoaW9zX2Jhc2U6OmF0ZSB8IGlvc19i
YXNlOjphcHApKQogICAgICAgICAgX01fcmVhbGx5X3N5bmMoMCwgX01fYnVmX3NpemUpOwogICAg
ICAgIGVsc2UKICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIDApOwogICAgICB9CgoKICAgICAg
dmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7CiAgICAgICAgaWYgKF9N
X2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICByZXR1cm4gdHJhaXRz
X3R5cGU6OnRvX2ludF90eXBlKCpncHRyKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVy
biB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAg
ICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICB2
aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IHRyYWl0c190eXBl
Ojplb2YoKSk7CgogICAgICB2aXJ0dWFsIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHNldGJ1Zihj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19zICYm
IF9fbikKICAgICAgICAgIHsKICAgICAgICAgICAgX01fc3RyaW5nID0gX19zdHJpbmdfdHlwZShf
X3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIDApOwogICAgICAgICAgfQog
ICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAg
IHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAg
ICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFz
ZTo6b3V0KTsKCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBf
X3NwLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6
aW4gfCBpb3NfYmFzZTo6b3V0KTsKCgoKCgoKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIF9NX3Jl
YWxseV9zeW5jKF9fc2l6ZV90eXBlIF9faSwgX19zaXplX3R5cGUgX19vKQogICAgICB7CiAgICAg
ICAgY2hhcl90eXBlKiBfX2Jhc2UgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9NX3N0cmluZy5k
YXRhKCkpOwogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwog
ICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgICAg
X19zaXplX3R5cGUgX19sZW4gPSBfTV9zdHJpbmcuc2l6ZSgpOwoKICAgICAgICBfTV9idWYgPSBf
X2Jhc2U7CiAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICB0aGlzLT5zZXRnKF9fYmFz
ZSwgX19iYXNlICsgX19pLCBfX2Jhc2UgKyBfX2xlbik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkK
ICAgICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+c2V0cChfX2Jhc2UsIF9fYmFzZSArIF9fbGVu
KTsKICAgICAgICAgICAgX01fb3V0X2N1ciArPSBfX287CiAgICAgICAgICB9CiAgICAgICAgcmV0
dXJuIDA7CiAgICAgIH0KICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3Ry
ZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7Cgog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4gX19zdHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fc3Ry
aW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i
YXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19t
b2RlIHwgaW9zX2Jhc2U6OmluKQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0K
CiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oY29uc3QgX19zdHJpbmdf
dHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl
IF9fbW9kZSA9IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwpLCBf
TV9zdHJpbmdidWYoX19zdHIsIF9fbW9kZSB8IGlvc19iYXNlOjppbikKICAgICAgeyB0aGlzLT5p
bml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICB+YmFzaWNfaXN0cmluZ3N0cmVhbSgpCiAgICAg
IHsgfQoKCiAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAg
eyByZXR1cm4gY29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7IH0K
CiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
c3RyaW5nYnVmLnN0cigpOyB9CgogICAgICB2b2lkCiAgICAgIHN0cihjb25zdCBfX3N0cmluZ190
eXBlJiBfX3MpCiAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CiAgICB9OwoKCgogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBl
ZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
X3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ2J1Zl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19vc3RyZWFtX3R5
cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdHJpbmdidWZfdHlwZSBfTV9zdHJpbmdidWY7Cgog
ICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbShpb3Nf
YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX29zdHJlYW1f
dHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19tb2RlIHwgaW9zX2Jhc2U6Om91dCkKICAgICAg
eyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNp
Y19vc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3RyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0KQog
ICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tb2Rl
IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9Cgog
ICAgICB+YmFzaWNfb3N0cmluZ3N0cmVhbSgpCiAgICAgIHsgfQoKCiAgICAgIF9fc3RyaW5nYnVm
X3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX3N0
cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIF9fc3RyaW5nX3R5cGUKICAg
ICAgc3RyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyaW5nYnVmLnN0cigpOyB9CgogICAg
ICB2b2lkCiAgICAgIHN0cihjb25zdCBfX3N0cmluZ190eXBlJiBfX3MpCiAgICAgIHsgX01fc3Ry
aW5nYnVmLnN0cihfX3MpOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmlu
Z3N0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
X1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlw
ZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry
aW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiBfX3N0cmluZ2J1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNo
YXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faW9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAg
ICBfX3N0cmluZ2J1Zl90eXBlIF9NX3N0cmluZ2J1ZjsKCiAgICBwdWJsaWM6CgogICAgICBleHBs
aWNpdAogICAgICBiYXNpY19zdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbSA9IGlv
c19iYXNlOjpvdXQgfCBpb3NfYmFzZTo6aW4pCiAgICAgIDogX19pb3N0cmVhbV90eXBlKF9fbnVs
bCksIF9NX3N0cmluZ2J1ZihfX20pCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsg
fQoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5n
X3R5cGUmIF9fc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl
IF9fbSA9IGlvc19iYXNlOjpvdXQgfCBpb3NfYmFzZTo6aW4pCiAgICAgIDogX19pb3N0cmVhbV90
eXBlKF9fbnVsbCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tKQogICAgICB7IHRoaXMtPmluaXQo
Jl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIH5iYXNpY19zdHJpbmdzdHJlYW0oKQogICAgICB7IH0K
CgogICAgICBfX3N0cmluZ2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9CgogICAg
ICBfX3N0cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmlu
Z2J1Zi5zdHIoKTsgfQoKICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYg
X19zKQogICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKfQoKCgoKCiMgMSAi
L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3N0cmVhbS50Y2MiIDEgMwoj
IDM5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zc3RyZWFtLnRjYyIg
MwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMSAzCiMg
NDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3NzdHJlYW0udGNjIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp
dHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OmludF90eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGlu
dF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdGVvZiA9
IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSk7CiAgICAg
IGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKCgoK
ICAgICAgaWYgKF9fdGVzdHBvcykKICAgICAgICB7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6
OmVxKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSwgdGhpcy0+Z3B0cigpWy0xXSkKICAg
ICAgICAgICAgICAmJiAhX190ZXN0ZW9mKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgLS1f
TV9pbl9jdXI7CiAgICAgICAgICAgICAgX19yZXQgPSBfX2M7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAtLV9N
X2luX2N1cjsKICAgICAgICAgICAgICAqX01faW5fY3VyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJf
dHlwZShfX2MpOwogICAgICAgICAgICAgIF9fcmV0ID0gX19jOwogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAtLV9N
X2luX2N1cjsKICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6aW50X3R5cGUK
ICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgb3ZlcmZs
b3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
X19jLCBfX3JldCk7CiAgICAgIGJvb2wgX190ZXN0d3JpdGUgPSBfTV9vdXRfY3VyIDwgX01fYnVm
ICsgX01fYnVmX3NpemU7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNl
OjpvdXQ7CgoKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgewogICAgICAgICAgaWYgKCFf
X3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3NpemVfdHlwZSBfX2xlbiA9
IG1heChfTV9idWZfc2l6ZSwgX01fYnVmX3NpemVfb3B0KTsKICAgICAgICAgICAgICBfX2xlbiAq
PSAyOwoKICAgICAgICAgICAgICBpZiAoX190ZXN0d3JpdGUpCiAgICAgICAgICAgICAgICBfX3Jl
dCA9IHRoaXMtPnNwdXRjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAg
ICAgICAgZWxzZSBpZiAoX19sZW4gPD0gX01fc3RyaW5nLm1heF9zaXplKCkpCiAgICAgICAgICAg
ICAgICB7CgogICAgICAgICAgICAgICAgICBfTV9zdHJpbmcgPSB0aGlzLT5zdHIoKTsKICAgICAg
ICAgICAgICAgICAgX01fc3RyaW5nLnJlc2VydmUoX19sZW4pOwogICAgICAgICAgICAgICAgICBf
TV9idWZfc2l6ZSA9IF9fbGVuOwogICAgICAgICAgICAgICAgICBfTV9yZWFsbHlfc3luYyhfTV9p
bl9jdXIgLSBfTV9pbl9iZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX291
dF9jdXIgLSBfTV9vdXRfYmVnKTsKICAgICAgICAgICAgICAgICAgKl9NX291dF9jdXIgPSB0cmFp
dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9NX291dF9jdXJf
bW92ZSgxKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBfX2M7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNf
dHlwZTo6bm90X2VvZihfX2MpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpwb3Nf
dHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBz
ZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwgaW9zX2Jhc2U6
Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZShv
ZmZfdHlwZSgtMSkpOwogICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjppbiAmIF9NX21v
ZGUgJiBfX21vZGUpICE9IDA7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gKGlvc19iYXNlOjpvdXQg
JiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwogICAgICBib29sIF9fdGVzdGJvdGggPSBfX3Rlc3Rp
biAmJiBfX3Rlc3RvdXQgJiYgX193YXkgIT0gaW9zX2Jhc2U6OmN1cjsKICAgICAgX190ZXN0aW4g
Jj0gIShfX21vZGUgJiBpb3NfYmFzZTo6b3V0KTsKICAgICAgX190ZXN0b3V0ICY9ICEoX19tb2Rl
ICYgaW9zX2Jhc2U6OmluKTsKCiAgICAgIGlmIChfTV9idWZfc2l6ZSAmJiAoX190ZXN0aW4gfHwg
X190ZXN0b3V0IHx8IF9fdGVzdGJvdGgpKQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSog
X19iZWcgPSBfTV9idWY7CiAgICAgICAgICBjaGFyX3R5cGUqIF9fY3VyaSA9IF9fbnVsbDsKICAg
ICAgICAgIGNoYXJfdHlwZSogX19jdXJvID0gX19udWxsOwogICAgICAgICAgY2hhcl90eXBlKiBf
X2VuZGkgPSBfX251bGw7CiAgICAgICAgICBjaGFyX3R5cGUqIF9fZW5kbyA9IF9fbnVsbDsKCiAg
ICAgICAgICBpZiAoX190ZXN0aW4gfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIF9fY3VyaSA9IHRoaXMtPmdwdHIoKTsKICAgICAgICAgICAgICBfX2VuZGkgPSB0aGlz
LT5lZ3B0cigpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0b3V0IHx8IF9fdGVz
dGJvdGgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2N1cm8gPSB0aGlzLT5wcHRyKCk7
CiAgICAgICAgICAgICAgX19lbmRvID0gdGhpcy0+ZXBwdHIoKTsKICAgICAgICAgICAgfQoKICAg
ICAgICAgIG9mZl90eXBlIF9fbmV3b2ZmaSA9IDA7CiAgICAgICAgICBvZmZfdHlwZSBfX25ld29m
Zm8gPSAwOwogICAgICAgICAgaWYgKF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfX25ld29mZmkgPSBfX2N1cmkgLSBfX2JlZzsKICAgICAgICAgICAg
ICBfX25ld29mZm8gPSBfX2N1cm8gLSBfX2JlZzsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz
ZSBpZiAoX193YXkgPT0gaW9zX2Jhc2U6OmVuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IF9fbmV3b2ZmaSA9IF9fZW5kaSAtIF9fYmVnOwogICAgICAgICAgICAgIF9fbmV3b2ZmbyA9IF9f
ZW5kbyAtIF9fYmVnOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKChfX3Rlc3RpbiB8fCBf
X3Rlc3Rib3RoKQogICAgICAgICAgICAgICYmIF9fbmV3b2ZmaSArIF9fb2ZmID49IDAgJiYgX19l
bmRpIC0gX19iZWcgPj0gX19uZXdvZmZpICsgX19vZmYpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBfTV9pbl9jdXIgPSBfX2JlZyArIF9fbmV3b2ZmaSArIF9fb2ZmOwogICAgICAgICAgICAg
IF9fcmV0ID0gcG9zX3R5cGUoX19uZXdvZmZpKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYg
KChfX3Rlc3RvdXQgfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgICAmJiBfX25ld29mZm8gKyBf
X29mZiA+PSAwICYmIF9fZW5kbyAtIF9fYmVnID49IF9fbmV3b2ZmbyArIF9fb2ZmKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbmV3b2ZmbyArIF9fb2ZmIC0g
KF9NX291dF9jdXIgLSBfX2JlZykpOwogICAgICAgICAgICAgIF9fcmV0ID0gcG9zX3R5cGUoX19u
ZXdvZmZvKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+
CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpw
b3NfdHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBzZWVrcG9zKHBvc190eXBlIF9fc3AsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUpCiAgICB7
CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsKCiAgICAgIGlm
IChfTV9idWZfc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX3BvcyA9IF9fc3A7
CiAgICAgICAgICBjaGFyX3R5cGUqIF9fYmVnID0gX19udWxsOwogICAgICAgICAgY2hhcl90eXBl
KiBfX2VuZCA9IF9fbnVsbDsKICAgICAgICAgIGJvb2wgX190ZXN0aW4gPSAoaW9zX2Jhc2U6Omlu
ICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgICAgIGJvb2wgX190ZXN0b3V0ID0gKGlv
c19iYXNlOjpvdXQgJiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwogICAgICAgICAgYm9vbCBfX3Rl
c3Rib3RoID0gX190ZXN0aW4gJiYgX190ZXN0b3V0OwogICAgICAgICAgX190ZXN0aW4gJj0gIShf
X21vZGUgJiBpb3NfYmFzZTo6b3V0KTsKICAgICAgICAgIF9fdGVzdG91dCAmPSAhKF9fbW9kZSAm
IGlvc19iYXNlOjppbik7CgoKICAgICAgICAgIGJvb2wgX190ZXN0cG9zaSA9IGZhbHNlOwogICAg
ICAgICAgYm9vbCBfX3Rlc3Rwb3NvID0gZmFsc2U7CiAgICAgICAgICBpZiAoX190ZXN0aW4gfHwg
X190ZXN0Ym90aCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYmVnID0gdGhpcy0+ZWJh
Y2soKTsKICAgICAgICAgICAgICBfX2VuZCA9IHRoaXMtPmVncHRyKCk7CiAgICAgICAgICAgICAg
aWYgKDAgPD0gX19wb3MgJiYgX19wb3MgPD0gX19lbmQgLSBfX2JlZykKICAgICAgICAgICAgICAg
IF9fdGVzdHBvc2kgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0b3V0
IHx8IF9fdGVzdGJvdGgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2JlZyA9IHRoaXMt
PnBiYXNlKCk7CiAgICAgICAgICAgICAgX19lbmQgPSBfTV9idWYgKyBfTV9idWZfc2l6ZTsKICAg
ICAgICAgICAgICBpZiAoMCA8PSBfX3BvcyAmJiBfX3BvcyA8PSBfX2VuZCAtIF9fYmVnKQogICAg
ICAgICAgICAgICAgX190ZXN0cG9zbyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlm
IChfX3Rlc3Rwb3NpIHx8IF9fdGVzdHBvc28pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAoX190ZXN0cG9zaSkKICAgICAgICAgICAgICAgIF9NX2luX2N1ciA9IF9NX2luX2JlZyArIF9f
cG9zOwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rwb3NvKQogICAgICAgICAgICAgICAgX01fb3V0
X2N1cl9tb3ZlKChfX3BvcykgLSAoX01fb3V0X2N1ciAtIF9fYmVnKSk7CiAgICAgICAgICAgICAg
X19yZXQgPSBwb3NfdHlwZShvZmZfdHlwZShfX3BvcykpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19zdHJpbmdidWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmlu
Z2J1Zjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVh
bTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hh
cl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD47Cn0KIyAzNjggIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9zc3RyZWFtIiAyIDMKIyAyNSAiL2hvbWUvcmVz
ZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX3N0cmVhbXMuaCIg
MgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMSAz
CiMgNDMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMwoKCgoK
Cm5hbWVzcGFjZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBj
b3V0OwogIGV4dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCiAgZXh0
ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0
cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNl
OjpJbml0IF9faW9pbml0Owp9CiMgMjkgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMv
My4yL3R4bWF0aC9pbmNsdWRlL3R4Y19zdHJlYW1zLmgiIDIKIyAxICIvdXNyL2xvY2FsL2djYzMu
Mi9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAzCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1
ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Jhc2ljX2ZpbGUuaCIgMSAzCiMgNDMg
Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2Jhc2ljX2ZpbGUuaCIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGNsYXNzIF9fYmFzaWNfZmlsZTsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNz
IF9fYmFzaWNfZmlsZTxjaGFyPgogICAgewoKICAgICAgX19jX2ZpbGUqIF9NX2NmaWxlOwoKICAg
ICAgYm9vbCBfTV9jZmlsZV9jcmVhdGVkOwoKICAgIHB1YmxpYzoKICAgICAgX19iYXNpY19maWxl
KF9fY19sb2NrKiBfX2xvY2sgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fb3Blbl9tb2RlKGlv
c19iYXNlOjpvcGVubW9kZSBfX21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLAog
ICAgICAgICAgICAgICAgICAgY2hhciogX19jX21vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgog
ICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwg
aW50IF9fcHJvdCA9IDA2NjQpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBzeXNfb3Blbihf
X2NfZmlsZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUpOwoKICAgICAgX19iYXNpY19maWxl
KgogICAgICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgYm9v
bCBfX2RlbCk7CgogICAgICBpbnQKICAgICAgc3lzX2dldGMoKTsKCiAgICAgIGludAogICAgICBz
eXNfdW5nZXRjKGludCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIGNsb3NlKCk7CgogICAg
ICBib29sCiAgICAgIGlzX29wZW4oKSBjb25zdDsKCiAgICAgIGludAogICAgICBmZCgpOwoKICAg
ICAgfl9fYmFzaWNfZmlsZSgpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3Qg
Y2hhciogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhzZ2V0
bihjaGFyKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbW9mZgogICAgICBzZWVr
b2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv
dXQpOwoKICAgICAgc3RyZWFtb2ZmCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAg
ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3Nf
YmFzZTo6b3V0KTsKCiAgICAgIGludAogICAgICBzeW5jKCk7CiAgICB9Owp9CiMgNDkgIi91c3Iv
bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAyIDMKCgpuYW1lc3BhY2Ugc3Rk
CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
dHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
X3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjxj
aGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAg
IHR5cGVkZWYgX19iYXNpY19maWxlPGNoYXI+IF9fZmlsZV90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIHRyYWl0c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKICAgICAgdHlwZWRl
ZiBjb2RlY3Z0PGNoYXJfdHlwZSwgY2hhciwgX19zdGF0ZV90eXBlPiBfX2NvZGVjdnRfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7
CiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CgogICAgICBmcmll
bmQgY2xhc3MgaW9zX2Jhc2U7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NrIF9NX2xv
Y2s7CgoKICAgICAgX19maWxlX3R5cGUgX01fZmlsZTsKCgogICAgICBfX3N0YXRlX3R5cGUgX01f
c3RhdGVfY3VyOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfYmVnOwoKCiAgICAgIGJvb2wg
X01fYnVmX2FsbG9jYXRlZDsKCgogICAgICBib29sIF9NX2xhc3Rfb3ZlcmZsb3dlZDsKCgoKICAg
ICAgY2hhcl90eXBlKiBfTV9maWxlcG9zOwoKICAgIHB1YmxpYzoKCiAgICAgIGJhc2ljX2ZpbGVi
dWYoKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2ZpbGVidWYoKQogICAgICB7CiAgICAg
ICAgdGhpcy0+Y2xvc2UoKTsKICAgICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAg
ICAgfQoKCiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbGUu
aXNfb3BlbigpOyB9CgogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAgb3Blbihjb25zdCBjaGFy
KiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUpOwoKICAgICAgX19maWxlYnVmX3R5cGUq
CiAgICAgIGNsb3NlKCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkCiAgICAgIF9NX2FsbG9j
YXRlX2ludGVybmFsX2J1ZmZlcigpOwoKICAgICAgdm9pZAogICAgICBfTV9kZXN0cm95X2ludGVy
bmFsX2J1ZmZlcigpOwoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMo
KTsKIyAxNDAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAzCiAg
ICAgIGludF90eXBlCiAgICAgIF9NX3VuZGVyZmxvd19jb21tb24oYm9vbCBfX2J1bXApOwoKICAg
ICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKSB7IHJldHVybiBfTV91bmRlcmZs
b3dfY29tbW9uKGZhbHNlKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1Zmxvdygp
IHsgcmV0dXJuIF9NX3VuZGVyZmxvd19jb21tb24odHJ1ZSk7IH0KCiAgICAgIHZpcnR1YWwgaW50
X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKIyAx
NjAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAzCiAgICAgIHZp
cnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9m
KCkpOwojIDE3MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2ZzdHJlYW0iIDMK
ICAgICAgaW50X3R5cGUKICAgICAgX01fcmVhbGx5X292ZXJmbG93KGludF90eXBlIF9fYyA9IF9U
cmFpdHM6OmVvZigpKTsKCgoKICAgICAgdm9pZAogICAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFs
KGNoYXJfdHlwZSosIHN0cmVhbXNpemUsIHN0cmVhbXNpemUmLCBzdHJlYW1zaXplJik7CgogICAg
ICB2aXJ0dWFsIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9m
Zl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7Cgog
ICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5cGUgX19wb3MsCiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19i
YXNlOjpvdXQpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpCiAgICAgIHsKICAgICAg
ICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7
CgoKCiAgICAgICAgaWYgKF9fdGVzdHB1dCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIG9mZl90
eXBlIF9fb2ZmID0gX01fb3V0X2N1ciAtIF9NX291dF9lbmQ7CiAgICAgICAgICAgIF9NX3JlYWxs
eV9vdmVyZmxvdygpOwogICAgICAgICAgICBpZiAoX19vZmYpCiAgICAgICAgICAgICAgX01fZmls
ZS5zZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3VyKTsKICAgICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgICBfTV9maWxlLnN5bmMoKTsKICAgICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBm
YWxzZTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgdmlydHVhbCB2b2lkCiAgICAg
IGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAg
ICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAg
ICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKCiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAg
ICAgICB7CiAgICAgICAgICAgIHdoaWxlIChfX3JldCA8IF9fbiAmJiBfTV9pbl9jdXIgPCBfTV9p
bl9lbmQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fcyA9ICpfTV9pbl9jdXI7
CiAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAg
ICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF9NX3BiYWNr
X2Rlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAg
ICBfX3JldCArPSBfX3N0cmVhbWJ1Zl90eXBlOjp4c2dldG4oX19zLCBfX24gLSBfX3JldCk7CiAg
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAg
ICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgewog
ICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsKICAgICAgICByZXR1cm4gX19zdHJlYW1idWZfdHlw
ZTo6eHNwdXRuKF9fcywgX19uKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9vdXRwdXRf
dW5zaGlmdCgpOwojIDI1MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2ZzdHJl
YW0iIDMKICAgICAgdm9pZAogICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7
CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pCiAgICAgICAgICB0aGlzLT5zZXRn
KF9NX2J1ZiwgX01fYnVmLCBfTV9idWYpOwogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6
Om91dCkKICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYpOwogICAgICAgIF9NX2Zp
bGVwb3MgPSBfTV9idWY7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2RldGVybWlu
YXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21v
ZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9z
X2Jhc2U6Om91dDsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICB0aGlzLT5zZXRnKF9N
X2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkKICAg
ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgX01fZmls
ZXBvcyA9IF9NX2J1ZiArIF9fb2ZmOwogICAgICB9CgogICAgICBib29sCiAgICAgIF9NX2lzX2lu
ZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKCiAg
ICAgICAgaWYgKF9NX2J1ZikKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBp
b3NfYmFzZTo6aW4pCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9pbl9iZWcgPT0gX01faW5fY3Vy
ICYmIF9NX2luX2N1ciA9PSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9z
X2Jhc2U6Om91dCkKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9iZWcgPT0gX01fb3V0X2N1
ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9lbmQ7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJu
IF9fcmV0OwogICAgICB9CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgYmFzaWNfZmlsZWJ1Zjxj
aGFyPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8Y2hhcj46Ol9NX3VuZGVyZmxvd19jb21t
b24oYm9vbCBfX2J1bXApOwoKCiAgdGVtcGxhdGU8PgogICAgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90
Pjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD46Ol9NX3VuZGVyZmxvd19jb21t
b24oYm9vbCBfX2J1bXApOwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRl
ZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pc3Ry
ZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsK
CiAgICBwdWJsaWM6CgoKICAgICAgYmFzaWNfaWZzdHJlYW0oKQogICAgICA6IF9faXN0cmVhbV90
eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYp
OyB9CiMgMzM3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwog
ICAgICBleHBsaWNpdAogICAgICBiYXNpY19pZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsIGlvc19i
YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAgIDogX19pc3RyZWFtX3R5
cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KCZfTV9m
aWxlYnVmKTsKICAgICAgICB0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKICAgICAg
fmJhc2ljX2lmc3RyZWFtKCkKICAgICAgeyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgog
ICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5
cGUqPigmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpIHsgcmV0dXJu
IF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CgogICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hh
ciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQogICAgICB7
CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4p
KQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoK
ICAgICAgdm9pZAogICAgICBjbG9zZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYu
Y2xvc2UoKSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9D
aGFyVCxfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNp
Y19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19vc3RyZWFtX3R5
cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBw
dWJsaWM6CgoKICAgICAgYmFzaWNfb2ZzdHJlYW0oKQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9f
bnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CiMg
NDE0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwogICAgICBl
eHBsaWNpdAogICAgICBiYXNpY19vZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0fGlvc19i
YXNlOjp0cnVuYykKICAgICAgOiBfX29zdHJlYW1fdHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkK
ICAgICAgewogICAgICAgIHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOwogICAgICAgIHRoaXMtPm9w
ZW4oX19zLCBfX21vZGUpOwogICAgICB9CgogICAgICB+YmFzaWNfb2ZzdHJlYW0oKQogICAgICB7
IH0KCgoKCgoKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAg
eyByZXR1cm4gY29uc3RfY2FzdDxfX2ZpbGVidWZfdHlwZSo+KCZfTV9maWxlYnVmKTsgfQoKCgoK
CiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3Blbigp
OyB9CiMgNDUwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwog
ICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLAogICAgICAgICAgIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQogICAg
ICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6
b3V0KSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
fQoKCiAgICAgIHZvaWQKICAgICAgY2xvc2UoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxl
YnVmLmNsb3NlKCkpCiAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgIH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVm
IGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faW9zX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19p
b3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVi
dWY7CgogICAgcHVibGljOgoKCiAgICAgIGJhc2ljX2ZzdHJlYW0oKQogICAgICA6IF9faW9zdHJl
YW1fdHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxl
YnVmKTsgfQojIDUwNiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2ZzdHJlYW0i
IDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpp
biB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19pb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2Zp
bGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAg
dGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNpY19mc3RyZWFtKCkK
ICAgICAgeyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7
IH0KCgoKCgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlz
X29wZW4oKTsgfQojIDU0MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2ZzdHJl
YW0iIDMKICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICBp
b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK
ICAgICAgewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlKSkKICAgICAg
ICAgIHNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQoKCiAgICAgIHZvaWQKICAg
ICAgY2xvc2UoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgICAg
ICAgICBzZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07Cn0KCgoKCgoj
IDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2ZzdHJlYW0udGNjIiAx
IDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnN0cmVhbS50
Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQogICAgewogICAgICBpZiAoIV9NX2J1
ZiAmJiBfTV9idWZfc2l6ZV9vcHQpCiAgICAgICAgewogICAgICAgICAgX01fYnVmX3NpemUgPSBf
TV9idWZfc2l6ZV9vcHQ7CgoKICAgICAgICAgIF9NX2J1ZiA9IG5ldyBjaGFyX3R5cGVbX01fYnVm
X3NpemVdOwogICAgICAgICAgX01fYnVmX2FsbG9jYXRlZCA9IHRydWU7CiAgICAgICAgfQogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9p
ZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIF9NX2Rlc3Ryb3lfaW50
ZXJuYWxfYnVmZmVyKCkKICAgIHsKICAgICAgaWYgKF9NX2J1Zl9hbGxvY2F0ZWQpCiAgICAgICAg
ewogICAgICAgICAgZGVsZXRlIFtdIF9NX2J1ZjsKICAgICAgICAgIF9NX2J1ZiA9IF9fbnVsbDsK
ICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMtPnNldGco
X19udWxsLCBfX251bGwsIF9fbnVsbCk7CiAgICAgICAgICB0aGlzLT5zZXRwKF9fbnVsbCwgX19u
dWxsKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBiYXNp
Y19maWxlYnVmKCkgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX2ZpbGUoJl9NX2xvY2spLAogICAg
X01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgpKSwgX01fc3RhdGVfYmVnKF9fc3RhdGVfdHlwZSgp
KSwKICAgIF9NX2J1Zl9hbGxvY2F0ZWQoZmFsc2UpLCBfTV9sYXN0X292ZXJmbG93ZWQoZmFsc2Up
CiAgICB7IF9NX2J1Zl91bmlmaWVkID0gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwg
X1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2Rl
KQogICAgewogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251bGw7CiAgICAgIGlmICgh
dGhpcy0+aXNfb3BlbigpKQogICAgICAgIHsKICAgICAgICAgIF9NX2ZpbGUub3BlbihfX3MsIF9f
bW9kZSk7CiAgICAgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CiAgICAgICAgICAgICAgX01f
bW9kZSA9IF9fbW9kZTsKCgogICAgICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAg
ICAgICAgICAgICAgaWYgKChfX21vZGUgJiBpb3NfYmFzZTo6YXRlKQogICAgICAgICAgICAgICAg
ICAmJiB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjplbmQsIF9fbW9kZSkgPCAwKQogICAgICAg
ICAgICAgICAgdGhpcy0+Y2xvc2UoKTsKICAgICAgICAgICAgICBfX3JldCA9IHRoaXM7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmls
ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVidWY8
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBjbG9zZSgpCiAgICB7CiAgICAgIF9fZmlsZWJ1Zl90eXBl
ICpfX3JldCA9IF9fbnVsbDsKICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKICAgICAgICB7CiAg
ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg
ICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2Vu
ZDsKICAgICAgICAgIGlmIChfX3Rlc3RwdXQKICAgICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX01fcmVhbGx5X292ZXJmbG93KF9fZW9mKSwgX19lb2YpKQogICAgICAgICAg
ICByZXR1cm4gX19yZXQ7CgoKICAgICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUo
MCk7CiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwogICAgICAgICAgX01f
cGJhY2tfZGVzdHJveSgpOwojIDEzMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y
L2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICAgICAgIGlmIChfTV9maWxlLmNsb3NlKCkpCiAgICAg
ICAgICAgIF9fcmV0ID0gdGhpczsKICAgICAgICB9CgogICAgICBfTV9sYXN0X292ZXJmbG93ZWQg
PSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19maWxlYnVm
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2hvd21hbnljKCkKICAgIHsKICAgICAgc3RyZWFtc2l6
ZSBfX3JldCA9IC0xOwogICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjpp
bjsKCiAgICAgIGlmIChfX3Rlc3RpbiAmJiB0aGlzLT5pc19vcGVuKCkpCiAgICAgICAgewogICAg
ICAgICAgaWYgKF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgICAgX19yZXQgPSBfTV9p
bl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fcmV0ID0gMDsK
ICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUK
ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwYmFja2ZhaWwoaW50X3R5
cGUgX19pKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CgogICAgICBpZiAo
X190ZXN0aW4pCiAgICAgICAgewogICAgICAgICAgYm9vbCBfX3Rlc3RwYiA9IF9NX2luX2JlZyA8
IF9NX2luX2N1cjsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9faSk7CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX2ksIF9fcmV0KTsKCiAgICAgICAgICBpZiAoX190ZXN0cGIpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0
OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlz
LT5ncHRyKClbLTFdKTsKCgoKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3Rl
cSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAg
ICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICAgICAgICAgICAgLS1fTV9vdXRf
Y3VyOwogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQog
ICAgICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQg
PSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGVsc2UgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAg
ICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX01fcGJhY2tfY3Jl
YXRlKCk7CiAgICAgICAgICAgICAgICAgICpfTV9pbl9jdXIgPSBfX2M7CiAgICAgICAgICAgICAg
ICAgIF9fcmV0ID0gX19pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNlZWtvZmYoLTEsIGlv
c19iYXNlOjpjdXIpOwogICAgICAgICAgICAgIHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgICAg
ICAgIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBp
ZiAoIXRyYWl0c190eXBlOjplcShfX2MsICpfTV9pbl9jdXIpKQogICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgKl9NX2luX2N1ciA9IF9fYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgIF9fcmV0ID0gX19pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG92ZXJm
bG93KGludF90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3Vy
IDwgX01fYnVmICsgX01fYnVmX3NpemU7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAm
IGlvc19iYXNlOjpvdXQ7CgogICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgIHsKICAgICAgICAg
IGlmIChfX3Rlc3RwdXQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX01fb3V0X2N1ciA9
IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICBfTV9vdXRfY3Vy
X21vdmUoMSk7CiAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2Mp
OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+
X01fcmVhbGx5X292ZXJmbG93KF9fYyk7CiAgICAgICAgfQoKICAgICAgX01fbGFzdF9vdmVyZmxv
d2VkID0gZmFsc2U7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwoX0NoYXJUKiBfX2li
dWYsIHN0cmVhbXNpemUgX19pbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1z
aXplJiBfX2VsZW4sIHN0cmVhbXNpemUmIF9fcGxlbikKICAgIHsKICAgICAgY29uc3QgbG9jYWxl
IF9fbG9jID0gdGhpcy0+Z2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fY29kZWN2dF90eXBlJiBfX2N2
dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX19sb2MpOwoKICAgICAgaWYgKF9fY3Z0LmFs
d2F5c19ub2NvbnYoKSAmJiBfX2lsZW4pCiAgICAgICAgewogICAgICAgICAgX19lbGVuICs9IF9N
X2ZpbGUueHNwdXRuKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9faWJ1ZiksIF9faWxlbik7CiAg
ICAgICAgICBfX3BsZW4gKz0gX19pbGVuOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK
CiAgICAgICAgICBpbnQgX19leHRfbXVsdGlwbGllciA9IF9fY3Z0LmVuY29kaW5nKCk7CiAgICAg
ICAgICBpZiAoX19leHRfbXVsdGlwbGllciA9PSAtMSB8fCBfX2V4dF9tdWx0aXBsaWVyID09IDAp
CiAgICAgICAgICAgIF9fZXh0X211bHRpcGxpZXIgPSBzaXplb2YoY2hhcl90eXBlKTsKICAgICAg
ICAgIHN0cmVhbXNpemUgX19ibGVuID0gX19pbGVuICogX19leHRfbXVsdGlwbGllcjsKICAgICAg
ICAgIGNoYXIqIF9fYnVmID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19i
bGVuKSk7CiAgICAgICAgICBjaGFyKiBfX2JlbmQ7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9faWVuZDsKICAgICAgICAgIF9fcmVzX3R5cGUgX19yID0gX19jdnQub3V0KF9NX3N0YXRlX2N1
ciwgX19pYnVmLCBfX2lidWYgKyBfX2lsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2llbmQsIF9fYnVmLCBfX2J1ZiArIF9fYmxlbiwgX19iZW5kKTsKCiAgICAgICAg
ICBpZiAoX19yICE9IGNvZGVjdnRfYmFzZTo6ZXJyb3IpCiAgICAgICAgICAgIF9fYmxlbiA9IF9f
YmVuZCAtIF9fYnVmOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19ibGVuID0gMDsKCiAg
ICAgICAgICBpZiAoX19ibGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19lbGVuICs9
IF9NX2ZpbGUueHNwdXRuKF9fYnVmLCBfX2JsZW4pOwogICAgICAgICAgICAgIF9fcGxlbiArPSBf
X2JsZW47CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6
OnBhcnRpYWwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
aXJlc3VtZSA9IF9faWVuZDsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcmxlbiA9IF9NX291
dF9lbmQgLSBfX2llbmQ7CiAgICAgICAgICAgICAgX19yID0gX19jdnQub3V0KF9NX3N0YXRlX2N1
ciwgX19pcmVzdW1lLCBfX2lyZXN1bWUgKyBfX3JsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9faWVuZCwgX19idWYsIF9fYnVmICsgX19ibGVuLCBfX2JlbmQpOwogICAgICAgICAg
ICAgIGlmIChfX3IgIT0gY29kZWN2dF9iYXNlOjplcnJvcikKICAgICAgICAgICAgICAgIF9fcmxl
biA9IF9fYmVuZCAtIF9fYnVmOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9f
cmxlbiA9IDA7CiAgICAgICAgICAgICAgaWYgKF9fcmxlbikKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX19lbGVuICs9IF9NX2ZpbGUueHNwdXRuKF9fYnVmLCBfX3JsZW4pOwog
ICAgICAgICAgICAgICAgICBfX3BsZW4gKz0gX19ybGVuOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01f
cmVhbGx5X292ZXJmbG93KGludF90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAm
JiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsKICAgICAgYm9vbCBfX3Rlc3R1bmJ1ZmZlcmVkID0g
X01fZmlsZS5pc19vcGVuKCkgJiYgIV9NX2J1Zl9zaXplOwoKICAgICAgaWYgKF9fdGVzdHB1dCB8
fCBfX3Rlc3R1bmJ1ZmZlcmVkKQogICAgICAgIHsKCiAgICAgICAgICBzdHJlYW1zaXplIF9fZWxl
biA9IDA7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcGxlbiA9IDA7CgoKCgogICAgICAgICAgaWYg
KF9NX2ZpbGVwb3MgJiYgX01fZmlsZXBvcyAhPSBfTV9vdXRfYmVnKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgb2ZmX3R5cGUgX19vZmYgPSBfTV9vdXRfYmVnIC0gX01fZmlsZXBvczsKICAg
ICAgICAgICAgICBfTV9maWxlLnNlZWtvZmYoX19vZmYsIGlvc19iYXNlOjpjdXIpOwogICAgICAg
ICAgICB9CgoKCiAgICAgICAgICBpZiAoIV9fdGVzdHVuYnVmZmVyZWQpCiAgICAgICAgICAgIF9N
X2NvbnZlcnRfdG9fZXh0ZXJuYWwoX01fb3V0X2JlZywgX01fb3V0X2VuZCAtIF9NX291dF9iZWcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lbGVuLCBfX3BsZW4pOwoKCgog
ICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6
ZW9mKCkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fcGVuZGluZyA9
IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICBfTV9jb252ZXJ0
X3RvX2V4dGVybmFsKCZfX3BlbmRpbmcsIDEsIF9fZWxlbiwgX19wbGVuKTsKCgogICAgICAgICAg
ICAgIGlmIChfX2VsZW4gPT0gX19wbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgpOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHRy
YWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UgaWYgKCFfTV9maWxlLnN5bmMoKSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6bm90X2VvZihfX2MpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfTV9s
YXN0X292ZXJmbG93ZWQgPSB0cnVlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2lj
X2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19zdHJlYW1idWZfdHlwZSoKICAgIGJhc2ljX2Zp
bGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uKQogICAgewogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSAmJiBfX3MgPT0gMCAm
JiBfX24gPT0gMCkKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICBlbHNlIGlmIChf
X3MgJiYgX19uKQogICAgICAgIHsKCgoKCgogICAgICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9i
dWZmZXIoKTsKCgogICAgICAgICAgX01fYnVmID0gX19zOwogICAgICAgICAgX01fYnVmX3NpemVf
b3B0ID0gX01fYnVmX3NpemUgPSBfX247CiAgICAgICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgp
OwogICAgICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVy
biB0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBl
CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla29mZihvZmZfdHlw
ZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGlvc19iYXNlOjpvcGVubW9kZSBfX21v
ZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsK
ICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6aW4gJiBfTV9tb2RlICYgX19tb2RlKSAh
PSAwOwogICAgICBib29sIF9fdGVzdG91dCA9IChpb3NfYmFzZTo6b3V0ICYgX01fbW9kZSAmIF9f
bW9kZSkgIT0gMDsKCgogICAgICBpbnQgX193aWR0aCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlw
ZT4oX01fYnVmX2xvY2FsZSkuZW5jb2RpbmcoKTsKICAgICAgaWYgKF9fd2lkdGggPCAwKQogICAg
ICAgIF9fd2lkdGggPSAwOwogICAgICBib29sIF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9f
d2lkdGggPD0gMDsKCiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkgJiYgIV9fdGVzdGZhaWwgJiYg
KF9fdGVzdGluIHx8IF9fdGVzdG91dCkpCiAgICAgICAgewoKICAgICAgICAgIF9NX3BiYWNrX2Rl
c3Ryb3koKTsKCiAgICAgICAgICBpZiAoX193YXkgIT0gaW9zX2Jhc2U6OmN1ciB8fCBfX29mZiAh
PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19jb21wdXRlZF9vZmYg
PSBfX3dpZHRoICogX19vZmY7CgogICAgICAgICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5f
Y3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2VuZDsKICAgICAgICAgICAgICBib29sIF9fdGVzdHB1
dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7CgoKICAgICAgICAgICAg
ICBpZiAoX190ZXN0cHV0IHx8IF9NX2xhc3Rfb3ZlcmZsb3dlZCkKICAgICAgICAgICAgICAgIHsK
CiAgICAgICAgICAgICAgICAgIHRoaXMtPnN5bmMoKTsKCiAgICAgICAgICAgICAgICAgIF9NX291
dHB1dF91bnNoaWZ0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGVsc2UgaWYg
KF9fdGVzdGdldCAmJiBfX3dheSA9PSBpb3NfYmFzZTo6Y3VyKQogICAgICAgICAgICAgICAgX19j
b21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0gX01fZmlsZXBvczsKCiAgICAgICAgICAgICAgX19y
ZXQgPSBfTV9maWxlLnNlZWtvZmYoX19jb21wdXRlZF9vZmYsIF9fd2F5LCBfX21vZGUpOwogICAg
ICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgIH0KCgogICAgICAg
ICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yZXQgPSBfTV9maWxlLnNlZWtv
ZmYoX19vZmYsIGlvc19iYXNlOjpjdXIsIF9fbW9kZSk7CiAgICAgICAgICAgICAgX19yZXQgKz0g
bWF4KF9NX291dF9jdXIsIF9NX2luX2N1cikgLSBfTV9maWxlcG9zOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9f
cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAg
ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Bvcyhwb3NfdHlwZSBf
X3BvcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKCgogICAgICByZXR1cm4gdGhp
cy0+c2Vla29mZihvZmZfdHlwZShfX3BvcyksIGlvc19iYXNlOjpiZWcsIF9fbW9kZSk7CgogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lk
CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fb3V0cHV0X3Vuc2hp
ZnQoKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpbWJ1
ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBib29sIF9fdGVzdGJlZyA9IGdwdHIo
KSA9PSBlYmFjaygpICYmIHBwdHIoKSA9PSBwYmFzZSgpOwoKICAgICAgaWYgKF9fdGVzdGJlZyAm
JiBfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgIHsKICAgICAgICAgIF9NX2J1Zl9sb2Nh
bGUgPSBfX2xvYzsKICAgICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAg
fQoKCgoKCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgfQoKCgoKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZmlsZWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz
aWNfaWZzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lmc3RyZWFt
PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTxjaGFyPjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD47Cn0KIyA1NjUgIi91c3IvbG9jYWwvZ2NjMy4yL2lu
Y2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAyIDMKIyAzMCAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w
cm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX3N0cmVhbXMuaCIgMgojIDU0ICIvaG9tZS9y
ZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS90eGNfc3RyZWFtcy5o
IgogIGludCBnZXRSZWFkQ2hhcnMoc3RkOjpzdHJpbmdzdHJlYW0mIHNzdHIpOwojIDIxICIvaG9t
ZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0
ZVNldC5oIiAyCgoKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1h
dGgvaW5jbHVkZS9UeERlYnVnRXhjZXB0LmgiIDEKIyAyOSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxl
ci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhEZWJ1Z0V4Y2VwdC5oIgpjbGFzcyBUeERl
YnVnRXhjZXB0IHsKCiAgcHVibGljOgoKCiAgICBUeERlYnVnRXhjZXB0KCk7CgoKICAgIFR4RGVi
dWdFeGNlcHQoY29uc3Qgc3RkOjpzdHJpbmcmKTsKCgogICAgVHhEZWJ1Z0V4Y2VwdChjb25zdCBU
eERlYnVnRXhjZXB0Jik7CgoKICAgIHZpcnR1YWwgflR4RGVidWdFeGNlcHQoKTsKCgogICAgVHhE
ZWJ1Z0V4Y2VwdCYgb3BlcmF0b3I9KGNvbnN0IFR4RGVidWdFeGNlcHQmKTsKCgogICAgc3RkOjpz
dHJpbmcgZ2V0TWVzc2FnZSgpIGNvbnN0OwoKCgoKCiAgICBUeERlYnVnRXhjZXB0JiBvcGVyYXRv
cjw8KGludCBpKTsKCgoKCgogICAgVHhEZWJ1Z0V4Y2VwdCYgb3BlcmF0b3I8PChzaXplX3QgaSk7
CgoKCgoKICAgIFR4RGVidWdFeGNlcHQmIG9wZXJhdG9yPDwoZmxvYXQgZik7CgoKCgoKICAgIFR4
RGVidWdFeGNlcHQmIG9wZXJhdG9yPDwoZG91YmxlIGQpOwojIDg2ICIvaG9tZS9yZXNlYXJjaC9i
bWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeERlYnVnRXhjZXB0LmgiCiAgVHhE
ZWJ1Z0V4Y2VwdCYgb3BlcmF0b3I8PChzdGQ6OnN0cmluZyBzdHIpOwoKICBwcm90ZWN0ZWQ6CgoK
ICAgIG11dGFibGUgc3RkOjpvc3RyaW5nc3RyZWFtKiBkZWJ1Z1N0cmVhbTsKCgoKCiAgcHJpdmF0
ZToKCgoKfTsKCnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIHMsIGNsYXNz
IFR4RGVidWdFeGNlcHQmIGQpOwojIDI0ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz
LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIiAyCiMgMSAiL2hvbWUvcmVzZWFy
Y2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGFibGUuaCIg
MQojIDIxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVk
ZS9UeEF0dHJpYnV0YWJsZS5oIgpjbGFzcyBUeEF0dHJpYnV0ZVNldDsKCgoKCmNsYXNzIFR4QXR0
cmlidXRhYmxlIHsKCiAgcHVibGljOgoKCgoKCgogICAgdmlydHVhbCB2b2lkIHNldEZyb21BdHRy
aWJTZXQoY29uc3QgVHhBdHRyaWJ1dGVTZXQmIHR4cykgPSAwOwoKCgoKCgogICAgdmlydHVhbCBU
eEF0dHJpYnV0ZVNldCBnZXRBdHRyaWJTZXREZXNjKCkgY29uc3QgPSAwOwoKfTsKIyAyNSAiL2hv
bWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1
dGVTZXQuaCIgMgojIDM2ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1h
dGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgpjbGFzcyBUeEF0dHJpYnV0ZVNldCA6IHB1Ymxp
YyBUeEF0dHJpYnV0YWJsZSB7CgogIHB1YmxpYzoKCgoKCgoKICAgIFR4QXR0cmlidXRlU2V0KHN0
ZDo6c3RyaW5nIHMpOwoKCgoKICAgIFR4QXR0cmlidXRlU2V0KGNvbnN0IFR4QXR0cmlidXRlU2V0
Jik7CgoKCgogICAgdmlydHVhbCB+VHhBdHRyaWJ1dGVTZXQoKTsKCgoKCgogICAgVHhBdHRyaWJ1
dGVTZXQmIG9wZXJhdG9yPShjb25zdCBUeEF0dHJpYnV0ZVNldCYpOwoKCgoKCgogICAgdmlydHVh
bCB2b2lkIHNldEZyb21BdHRyaWJTZXQoY29uc3QgVHhBdHRyaWJ1dGVTZXQmIHR4cykgewogICAg
ICBvcGVyYXRvcj0odHhzKTsKICAgIH0KIyA3OSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q
ZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIHZpcnR1YWwgVHhB
dHRyaWJ1dGVTZXQgZ2V0QXR0cmliU2V0RGVzYygpIGNvbnN0IHsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQojIDkwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgv
aW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRDbGFz
c05hbWUoKSBjb25zdCB7IHJldHVybiAiVHhBdHRyaWJ1dGVTZXQiO30KCgoKCgoKCiAgICB2aXJ0
dWFsIHN0ZDo6c3RyaW5nIGdldEJhc2VDbGFzcygpIGNvbnN0IHsgcmV0dXJuICJUeEF0dHJpYnV0
ZVNldCI7fQoKCgoKCgogICAgdm9pZCBzZXRPYmplY3ROYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBu
bSl7IG9iak5hbWUgPSBubTt9CgoKCgoKCiAgICBzdGQ6OnN0cmluZyBnZXRPYmplY3ROYW1lKCkg
Y29uc3QgeyByZXR1cm4gb2JqTmFtZTt9CiMgMTIxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3By
b2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgdm9pZCBzZXRU
eXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0cCl7IHR5cGUgPSB0cDt9CgoKCgoKCiAgICBzdGQ6OnN0
cmluZyBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTt9CiMgMTM5ICIvaG9tZS9yZXNlYXJj
aC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgog
ICAgYm9vbCBoYXNPcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIG9wdGlvbk5hbWUpIGNvbnN0OwoK
CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRPcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIG9wdGlv
bk5hbWUsIGludCB2YWx1ZSk7CiMgMTU2ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz
LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgaW50IGdldE9wdGlvbihj
b25zdCBzdGQ6OnN0cmluZyYgb3B0aW9uTmFtZSkgY29uc3QgdGhyb3coVHhEZWJ1Z0V4Y2VwdCk7
CiMgMTY1ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVk
ZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgaW50IGdldE9wdGlvbkluZGV4KGNvbnN0IHN0ZDo6c3Ry
aW5nJiBvcHRpb25OYW1lKSBjb25zdDsKIyAxNzUgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJv
amVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAgICBib29sIGFwcGVu
ZE9wdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgb3B0aW9uTmFtZSwgaW50IHZhbHVlKTsKCgoKCgoK
ICAgIGludCBnZXROdW1PcHRpb25zKCkgY29uc3QgewogICAgICByZXR1cm4gb3B0aW9ucy5zaXpl
KCk7CiAgICB9CgoKCgogICAgdm9pZCBzZXRUb0ZpcnN0T3B0aW9uKCkgY29uc3QgeyBvcHRpb25J
dGVyID0gb3B0aW9uSW5kaWNlcy0+YmVnaW4oKTt9CgoKCgoKCiAgICBzdGQ6OnBhaXI8c3RkOjpz
dHJpbmcsIGludD4gZ2V0Q3VycmVudE9wdGlvbkFuZEJ1bXAoKSBjb25zdDsKIyAyMDkgIi9ob21l
L3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRl
U2V0LmgiCiAgICBib29sIGhhc1BhcmFtKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXJhbU5hbWUpIGNv
bnN0OwoKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJhbShjb25zdCBzdGQ6OnN0cmluZyYg
cGFyYW1OYW1lLCBkb3VibGUgdmFsdWUpOwojIDIyNiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w
cm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIGRvdWJsZSBn
ZXRQYXJhbShjb25zdCBzdGQ6OnN0cmluZyYgcGFyYW1OYW1lKSBjb25zdCB0aHJvdyhUeERlYnVn
RXhjZXB0KTsKCgoKCgoKICAgIGludCBnZXRQYXJhbUluZGV4KGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXJhbU5hbWUpIGNvbnN0OwojIDI0MyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8z
LjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIGJvb2wgYXBwZW5kUGFyYW0o
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhcmFtTmFtZSwgZG91YmxlIHZhbHVlKTsKCgoKCgoKICAgIGlu
dCBnZXROdW1QYXJhbXMoKSBjb25zdCB7IHJldHVybiBwYXJhbXMuc2l6ZSgpO30KCgoKCiAgICB2
b2lkIHNldFRvRmlyc3RQYXJhbSgpIGNvbnN0IHsgcGFyYW1JdGVyID0gcGFyYW1JbmRpY2VzLT5i
ZWdpbigpO30KCgoKCiAgICBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGRvdWJsZT4gZ2V0Q3VycmVu
dFBhcmFtQW5kQnVtcCgpIGNvbnN0OwojIDI3MyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q
ZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIGJvb2wgaGFzU3Ry
aW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmdOYW1lKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0
dWFsIHZvaWQgc2V0U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmdOYW1lLAogIGNvbnN0
IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CiMgMjkxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2pl
Y3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgc3RkOjpzdHJpbmcg
Z2V0U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmdOYW1lKSBjb25zdAogIHRocm93KFR4
RGVidWdFeGNlcHQpOwojIDMwMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIv
dHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIGludCBnZXRTdHJpbmdJbmRleChj
b25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nTmFtZSkgY29uc3Q7CiMgMzExICIvaG9tZS9yZXNlYXJj
aC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgog
ICAgYm9vbCBhcHBlbmRTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmluZ05hbWUsCiAgY29u
c3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKCgoKCgoKICAgIGludCBnZXROdW1TdHJpbmdzKCkgY29u
c3QgeyByZXR1cm4gc3RyaW5ncy5zaXplKCk7fQoKCgoKCiAgICB2b2lkIHNldFRvRmlyc3RTdHJp
bmcoKSBjb25zdCB7IHN0cmluZ0l0ZXIgPSBzdHJpbmdJbmRpY2VzLT5iZWdpbigpO30KCgoKCgog
ICAgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gZ2V0Q3VycmVudFN0cmluZ0Fu
ZEJ1bXAoKSBjb25zdDsKIyAzNDIgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4y
L3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAgICBib29sIGhhc09wdFZlYyhjb25z
dCBzdGQ6OnN0cmluZyYgb3B0VmVjTmFtZSkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCB2b2lk
IHNldE9wdFZlYyhjb25zdCBzdGQ6OnN0cmluZyYgb3B0VmVjTmFtZSwKICBjb25zdCBzdGQ6OnZl
Y3RvcjxpbnQ+JiB2YWx1ZSk7CiMgMzYwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz
LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgc3RkOjp2ZWN0b3I8aW50
PiBnZXRPcHRWZWMoY29uc3Qgc3RkOjpzdHJpbmcmIG9wdFZlY05hbWUpCiAgY29uc3QgdGhyb3co
VHhEZWJ1Z0V4Y2VwdCk7CiMgMzcwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMu
Mi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgaW50IGdldE9wdFZlY0luZGV4
KGNvbnN0IHN0ZDo6c3RyaW5nJiBvcHRWZWNOYW1lKSBjb25zdDsKIyAzODAgIi9ob21lL3Jlc2Vh
cmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0Lmgi
CiAgICBib29sIGFwcGVuZE9wdFZlYyhjb25zdCBzdGQ6OnN0cmluZyYgb3B0VmVjTmFtZSwKICBj
b25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiB2YWx1ZSk7CgoKCgoKCiAgICBpbnQgZ2V0TnVtT3B0VmVj
cygpIGNvbnN0IHsKICAgICAgcmV0dXJuIG9wdFZlY3Muc2l6ZSgpOwogICAgfQoKCgoKICAgIHZv
aWQgc2V0VG9GaXJzdE9wdFZlYygpIGNvbnN0IHsgb3B0VmVjSXRlciA9IG9wdFZlY0luZGljZXMt
PmJlZ2luKCk7fQoKCgoKCgogICAgc3RkOjpwYWlyPCBzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8
aW50PiA+CiAgZ2V0Q3VycmVudE9wdFZlY0FuZEJ1bXAoKSBjb25zdDsKIyA0MTQgIi9ob21lL3Jl
c2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0
LmgiCiAgICBib29sIGhhc1BybVZlYyhjb25zdCBzdGQ6OnN0cmluZyYgcHJtVmVjTmFtZSkgY29u
c3Q7CgoKCgoKCgogICAgdmlydHVhbCB2b2lkIHNldFBybVZlYyhjb25zdCBzdGQ6OnN0cmluZyYg
cHJtVmVjTmFtZSwKICBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+JiB2YWx1ZSk7CiMgNDMyICIv
aG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJp
YnV0ZVNldC5oIgogICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBnZXRQcm1WZWMoY29uc3Qgc3RkOjpz
dHJpbmcmIHBybVZlY05hbWUpCiAgY29uc3QgdGhyb3coVHhEZWJ1Z0V4Y2VwdCk7CiMgNDQyICIv
aG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJp
YnV0ZVNldC5oIgogICAgaW50IGdldFBybVZlY0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm1W
ZWNOYW1lKSBjb25zdDsKIyA0NTIgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4y
L3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAgICBib29sIGFwcGVuZFBybVZlYyhj
b25zdCBzdGQ6OnN0cmluZyYgcHJtVmVjTmFtZSwKICBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+
JiB2YWx1ZSk7CgoKCgoKCiAgICBpbnQgZ2V0TnVtUHJtVmVjcygpIGNvbnN0IHsKICAgICAgcmV0
dXJuIHBybVZlY3Muc2l6ZSgpOwogICAgfQoKCgoKICAgIHZvaWQgc2V0VG9GaXJzdFBybVZlYygp
IGNvbnN0IHsgcHJtVmVjSXRlciA9IHBybVZlY0luZGljZXMtPmJlZ2luKCk7fQoKCgoKCgogICAg
c3RkOjpwYWlyPCBzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8ZG91YmxlPiA+CiAgZ2V0Q3VycmVu
dFBybVZlY0FuZEJ1bXAoKSBjb25zdDsKIyA0ODYgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJv
amVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAgICBib29sIGhhc1N0
clZlYyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyVmVjTmFtZSkgY29uc3Q7CgoKCgoKCgogICAgdmly
dHVhbCB2b2lkIHNldFN0clZlYyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyVmVjTmFtZSwKICBjb25z
dCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHZhbHVlKTsKIyA1MDQgIi9ob21lL3Jlc2VhcmNo
L2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAg
ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZ2V0U3RyVmVjKGNvbnN0IHN0ZDo6c3RyaW5nJiBz
dHJWZWNOYW1lKQogIGNvbnN0IHRocm93KFR4RGVidWdFeGNlcHQpOwojIDUxNCAiL2hvbWUvcmVz
ZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQu
aCIKICAgIGludCBnZXRTdHJWZWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyYgc3RyVmVjTmFtZSkg
Y29uc3Q7CiMgNTI0ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgv
aW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgYm9vbCBhcHBlbmRTdHJWZWMoY29uc3Qgc3Rk
OjpzdHJpbmcmIHN0clZlY05hbWUsCiAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiYgdmFsdWUpOwoKCgoKCgogICAgaW50IGdldE51bVN0clZlY3MoKSBjb25zdCB7CiAgICAgIHJl
dHVybiBzdHJWZWNzLnNpemUoKTsKICAgIH0KCgoKCiAgICB2b2lkIHNldFRvRmlyc3RTdHJWZWMo
KSBjb25zdCB7IHN0clZlY0l0ZXIgPSBzdHJWZWNJbmRpY2VzLT5iZWdpbigpO30KCgoKCgoKICAg
IHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ID4KICBnZXRD
dXJyZW50U3RyVmVjQW5kQnVtcCgpIGNvbnN0OwojIDU1NiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxl
ci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBnZXROYW1lcygpIGNvbnN0IHsgcmV0dXJuIG5hbWVzO30KIyA1
NjcgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4
QXR0cmlidXRlU2V0LmgiCiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZ2V0VHlwZXMoKSB7
IHJldHVybiB0eXBlczt9CiMgNTc2ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMu
Mi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgc3RkOjp2ZWN0b3I8aW50PiBn
ZXRJbnRUeXBlcygpOwojIDU4NSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIv
dHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIHZvaWQgZW1wdHkoKXsgaWYocHVi
bGljUmVzaGFwZSkgZW1wdHlOb0NoaygpOyB9CgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IFR4QXR0cmlidXRlU2V0JiBhKSBjb25zdCB7CiAgICAgIHJldHVybiBnZXRPYmpl
Y3ROYW1lKCkgPCBhLmdldE9iamVjdE5hbWUoKTsKICAgIH0KCgoKCgoKICAgIHZpcnR1YWwgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFR4QXR0cmlidXRlU2V0JiBhKSBjb25zdCB7CiAgICAgIHJldHVy
biBnZXRPYmplY3ROYW1lKCkgPT0gYS5nZXRPYmplY3ROYW1lKCk7CiAgICB9CgoKCgoKCiAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUeEF0dHJpYnV0ZVNldCYgYSkgY29uc3Qgewog
ICAgICByZXR1cm4gISBvcGVyYXRvcj09KGEpOwogICAgfQoKCgoKCgoKICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZShzdGQ6Om9zdHJlYW0mIG9zdHIsIGJvb2wgZHVtcD10cnVlKSBjb25zdDsKCgoKCgoK
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJvZHkoc3RkOjpvc3RyZWFtJiBvc3RyLCBib29sIGR1bXA9
dHJ1ZSwKICBib29sIHdyaXRlSGVhZD10cnVlKSBjb25zdDsKCgoKCgoKICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZVRhaWwoc3RkOjpvc3RyZWFtJiBvc3RyKSBjb25zdDsKCgoKCgoKICAgIHZpcnR1YWwg
c3RkOjpzdHJpbmcgcmVhZChzdGQ6OmlzdHJlYW0mIGlzdHIpOwoKICBwcm90ZWN0ZWQ6CgogICAg
c3RhdGljIHZvaWQgaW5kZW50IChzdGQ6Om9zdHJlYW0mIG91dCk7CgogICAgc3RhdGljIGludCBp
bmRlbnRhdGlvbjsKCgoKCgoKCiAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHJlYWRUeXBlKHN0ZDo6
aXN0cmVhbSYgaXN0ciwKICBjb25zdCBzdGQ6OnN0cmluZyYgdHlwZSk7CgoKCgoKCgogICAgdmly
dHVhbCBib29sIHBhcnNlTGluZShjb25zdCBzdGQ6OnN0cmluZyYgbGluZSk7CgoKCgoKCgogICAg
dmlydHVhbCBzdGQ6OnN0cmluZyB0cmltTGluZShjb25zdCBzdGQ6OnN0cmluZyYgbGluZSk7CiMg
Njg0ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9U
eEF0dHJpYnV0ZVNldC5oIgogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRMaW5lKHN0ZDo6aXN0
cmVhbSYgaXN0cikgdGhyb3coVHhEZWJ1Z0V4Y2VwdCk7CiMgNjk0ICIvaG9tZS9yZXNlYXJjaC9i
bWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAg
dmlydHVhbCBzaXplX3QgZ2V0TnVtQ2hhcnMoY29uc3Qgc3RkOjpzdHJpbmcmIHMsIGNoYXIgYyl7
CiAgICAgIHNpemVfdCBudW09MDsKICAgICAgZm9yKHNpemVfdCBpPTA7IGk8cy5sZW5ndGgoKTsg
KytpKSBpZihzW2ldID09IGMpIG51bSsrOwogICAgICByZXR1cm4gbnVtOwogICAgfQoKCgoKCgoK
ICAgIHZpcnR1YWwgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4KICBnZXROYW1l
QW5kVmFsdWVTdHIoc3RkOjpzdHJpbmcgbGluZSk7CgoKCgoKICAgIFR4QXR0cmlidXRlU2V0KCk7
CiMgNzI1ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVk
ZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgYm9vbCBhcHBlbmRPcHRpb25Ob0Noayhjb25zdCBzdGQ6
OnN0cmluZyYgb3B0aW9uTmFtZSwgaW50IHZhbHVlKTsKCgoKCgoKCiAgICBib29sIGFwcGVuZFBh
cmFtTm9DaGsoY29uc3Qgc3RkOjpzdHJpbmcmIHBhcmFtTmFtZSwgZG91YmxlIHZhbHVlKTsKCgoK
CgoKCiAgICBib29sIGFwcGVuZFN0cmluZ05vQ2hrKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmdO
YW1lLAogIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CgoKCgoKCgogICAgYm9vbCBhcHBlbmRP
cHRWZWNOb0Noayhjb25zdCBzdGQ6OnN0cmluZyYgb3B0VmVjTmFtZSwKICBjb25zdCBzdGQ6OnZl
Y3RvcjxpbnQ+JiB2YWx1ZSk7CgoKCgoKCgogICAgYm9vbCBhcHBlbmRQcm1WZWNOb0Noayhjb25z
dCBzdGQ6OnN0cmluZyYgcHJtVmVjTmFtZSwKICBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+JiB2
YWx1ZSk7CgoKCgoKCgogICAgYm9vbCBhcHBlbmRTdHJWZWNOb0Noayhjb25zdCBzdGQ6OnN0cmlu
ZyYgc3RyVmVjTmFtZSwKICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHZhbHVlKTsK
CgoKCgogICAgdmlydHVhbCB2b2lkIGVtcHR5Tm9DaGsoKTsKCgoKCiAgICBib29sIHB1YmxpY1Jl
c2hhcGU7CgoKCgoKICAgIHN0ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LCBzdGQ6Omxlc3M8c3Rk
OjpzdHJpbmc+ID4qCiAgb3B0aW9uSW5kaWNlczsKCgoKCiAgICBib29sIG9wdGlvbkluZGljZXNP
d25lcjsKCgoKICAgIHN0ZDo6dmVjdG9yPGludD4gb3B0aW9uczsKCgoKCiAgICBtdXRhYmxlIHN0
ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LAogIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPjo6aXRl
cmF0b3Igb3B0aW9uSXRlcjsKCgoKCgoKICAgIHN0ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LCBz
dGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID4qIHBhcmFtSW5kaWNlczsKCgoKCiAgICBib29sIHBhcmFt
SW5kaWNlc093bmVyOwoKCgogICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBwYXJhbXM7CgoKCgogICAg
bXV0YWJsZSBzdGQ6Om1hcDwgc3RkOjpzdHJpbmcsIGludCwKICBzdGQ6Omxlc3M8c3RkOjpzdHJp
bmc+ID46Oml0ZXJhdG9yIHBhcmFtSXRlcjsKCgoKCgoKICAgIHN0ZDo6bWFwPCBzdGQ6OnN0cmlu
ZywgaW50LCBzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID4qIHN0cmluZ0luZGljZXM7CgoKCgogICAg
Ym9vbCBzdHJpbmdJbmRpY2VzT3duZXI7CgoKCiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
c3RyaW5nczsKCgoKCiAgICBtdXRhYmxlIHN0ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LAogIHN0
ZDo6bGVzczxzdGQ6OnN0cmluZz4gPjo6aXRlcmF0b3Igc3RyaW5nSXRlcjsKCgoKCgoKICAgIHN0
ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LCBzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID4qIG9wdFZl
Y0luZGljZXM7CgoKCgogICAgYm9vbCBvcHRWZWNJbmRpY2VzT3duZXI7CgoKCiAgICBzdGQ6OnZl
Y3Rvcjwgc3RkOjp2ZWN0b3I8aW50PiA+IG9wdFZlY3M7CgoKCgogICAgbXV0YWJsZSBzdGQ6Om1h
cDwgc3RkOjpzdHJpbmcsIGludCwKICBzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID46Oml0ZXJhdG9y
IG9wdFZlY0l0ZXI7CgoKCgoKCiAgICBzdGQ6Om1hcDwgc3RkOjpzdHJpbmcsIGludCwgc3RkOjps
ZXNzPHN0ZDo6c3RyaW5nPiA+KiBwcm1WZWNJbmRpY2VzOwoKCgoKICAgIGJvb2wgcHJtVmVjSW5k
aWNlc093bmVyOwoKCgogICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPGRvdWJsZT4gPiBwcm1W
ZWNzOwoKCgoKICAgIG11dGFibGUgc3RkOjptYXA8IHN0ZDo6c3RyaW5nLCBpbnQsCiAgc3RkOjps
ZXNzPHN0ZDo6c3RyaW5nPiA+OjppdGVyYXRvciBwcm1WZWNJdGVyOwoKCgoKCgogICAgc3RkOjpt
YXA8IHN0ZDo6c3RyaW5nLCBpbnQsIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPiogc3RyVmVjSW5k
aWNlczsKCgoKCiAgICBib29sIHN0clZlY0luZGljZXNPd25lcjsKCgoKICAgIHN0ZDo6dmVjdG9y
PCBzdGQ6OnZlY3Rvcjwgc3RkOjpzdHJpbmc+ID4gc3RyVmVjczsKCgoKCiAgICBtdXRhYmxlIHN0
ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LAogIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPjo6aXRl
cmF0b3Igc3RyVmVjSXRlcjsKCgoKCiAgICBjaGFyIGNvbW1lbnRDaGFyOwoKCgoKICAgIHNpemVf
dCBsaW5lTnVtOwoKCgoKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBuYW1lczsKCgoKCiAg
ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdHlwZXM7CgogIHByaXZhdGU6CgoKCiAgICB2b2lk
IHNldHVwKCk7CgogIHByaXZhdGU6CiAgICBzdGQ6OnN0cmluZyBvYmpOYW1lOwogICAgc3RkOjpz
dHJpbmcgdHlwZTsKCn07CgoKCgppbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8IChzdGQ6
Om9zdHJlYW0mIG9zdHIsCiAgY29uc3QgVHhBdHRyaWJ1dGVTZXQmIHR4cCkgewogIHR4cC53cml0
ZShvc3RyKTsKICByZXR1cm4gb3N0cjsKfQoKCgoKaW5saW5lIHN0ZDo6aXN0cmVhbSYgb3BlcmF0
b3I+PihzdGQ6OmlzdHJlYW0mIGlzdHIsIFR4QXR0cmlidXRlU2V0JiB0eHApewogIHR4cC5yZWFk
KGlzdHIpOwogIHJldHVybiBpc3RyOwp9CiMgMjQgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJv
amVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFFZGl0VGFibGUuaCIgMgoKCiMgMSAiL2hvbWUv
cmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxlSXRl
bS5oIiAxCiMgMjEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwv
aW5jbHVkZS9UeHFUYWJsZUl0ZW0uaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv
cXZhcmlhbnQuaCIgMQojIDQ2ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhcmlhbnQu
aCIKY2xhc3MgUVN0cmluZzsKY2xhc3MgUUNTdHJpbmc7CmNsYXNzIFFGb250OwpjbGFzcyBRUGl4
bWFwOwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFSZWN0OwpjbGFzcyBRUG9pbnQ7CmNsYXNzIFFJbWFn
ZTsKY2xhc3MgUVNpemU7CmNsYXNzIFFDb2xvcjsKY2xhc3MgUVBhbGV0dGU7CmNsYXNzIFFDb2xv
ckdyb3VwOwpjbGFzcyBRSWNvblNldDsKY2xhc3MgUURhdGFTdHJlYW07CmNsYXNzIFFQb2ludEFy
cmF5OwpjbGFzcyBRUmVnaW9uOwpjbGFzcyBRQml0bWFwOwpjbGFzcyBRQ3Vyc29yOwpjbGFzcyBR
U3RyaW5nTGlzdDsKY2xhc3MgUVNpemVQb2xpY3k7CmNsYXNzIFFEYXRlOwpjbGFzcyBRVGltZTsK
Y2xhc3MgUURhdGVUaW1lOwpjbGFzcyBRQml0QXJyYXk7CmNsYXNzIFFLZXlTZXF1ZW5jZTsKY2xh
c3MgUVBlbjsKCmNsYXNzIFFWYXJpYW50OwoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFFWYWx1
ZUxpc3Q7CnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjsK
dGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFFWYWx1ZUxpc3ROb2RlOwp0ZW1wbGF0ZSA8Y2xhc3Mg
S2V5LCBjbGFzcyBUPiBjbGFzcyBRTWFwOwp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPiBj
bGFzcyBRTWFwQ29uc3RJdGVyYXRvcjsKCgpjbGFzcyBRVmFyaWFudAp7CnB1YmxpYzoKICAgIGVu
dW0gVHlwZSB7CiAgICAgICAgSW52YWxpZCwKICAgICAgICBNYXAsCiAgICAgICAgTGlzdCwKICAg
ICAgICBTdHJpbmcsCiAgICAgICAgU3RyaW5nTGlzdCwKICAgICAgICBGb250LAogICAgICAgIFBp
eG1hcCwKICAgICAgICBCcnVzaCwKICAgICAgICBSZWN0LAogICAgICAgIFNpemUsCiAgICAgICAg
Q29sb3IsCiAgICAgICAgUGFsZXR0ZSwKICAgICAgICBDb2xvckdyb3VwLAogICAgICAgIEljb25T
ZXQsCiAgICAgICAgUG9pbnQsCiAgICAgICAgSW1hZ2UsCiAgICAgICAgSW50LAogICAgICAgIFVJ
bnQsCiAgICAgICAgQm9vbCwKICAgICAgICBEb3VibGUsCiAgICAgICAgQ1N0cmluZywKICAgICAg
ICBQb2ludEFycmF5LAogICAgICAgIFJlZ2lvbiwKICAgICAgICBCaXRtYXAsCiAgICAgICAgQ3Vy
c29yLAogICAgICAgIFNpemVQb2xpY3ksCiAgICAgICAgRGF0ZSwKICAgICAgICBUaW1lLAogICAg
ICAgIERhdGVUaW1lLAogICAgICAgIEJ5dGVBcnJheSwKICAgICAgICBCaXRBcnJheSwKICAgICAg
ICBLZXlTZXF1ZW5jZSwKICAgICAgICBQZW4KICAgIH07CgogICAgUVZhcmlhbnQoKTsKICAgIH5R
VmFyaWFudCgpOwogICAgUVZhcmlhbnQoIGNvbnN0IFFWYXJpYW50JiApOwoKICAgIFFWYXJpYW50
KCBRRGF0YVN0cmVhbSYgcyApOwoKICAgIFFWYXJpYW50KCBjb25zdCBRU3RyaW5nJiApOwogICAg
UVZhcmlhbnQoIGNvbnN0IFFDU3RyaW5nJiApOwogICAgUVZhcmlhbnQoIGNvbnN0IGNoYXIqICk7
CgogICAgUVZhcmlhbnQoIGNvbnN0IFFTdHJpbmdMaXN0JiApOwoKICAgIFFWYXJpYW50KCBjb25z
dCBRRm9udCYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRUGl4bWFwJiApOwogICAgUVZhcmlhbnQo
IGNvbnN0IFFJbWFnZSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRQnJ1c2gmICk7CiAgICBRVmFy
aWFudCggY29uc3QgUVBvaW50JiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFSZWN0JiApOwogICAg
UVZhcmlhbnQoIGNvbnN0IFFTaXplJiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFDb2xvciYgKTsK
ICAgIFFWYXJpYW50KCBjb25zdCBRUGFsZXR0ZSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRQ29s
b3JHcm91cCYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRSWNvblNldCYgKTsKICAgIFFWYXJpYW50
KCBjb25zdCBRUG9pbnRBcnJheSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRUmVnaW9uJiApOwog
ICAgUVZhcmlhbnQoIGNvbnN0IFFCaXRtYXAmICk7CiAgICBRVmFyaWFudCggY29uc3QgUUN1cnNv
ciYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRRGF0ZSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBR
VGltZSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRRGF0ZVRpbWUmICk7CiAgICBRVmFyaWFudCgg
Y29uc3QgUUJ5dGVBcnJheSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRQml0QXJyYXkmICk7CiAg
ICBRVmFyaWFudCggY29uc3QgUUtleVNlcXVlbmNlJiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFQ
ZW4mICk7CgogICAgUVZhcmlhbnQoIGNvbnN0IFFWYWx1ZUxpc3Q8UVZhcmlhbnQ+JiApOwogICAg
UVZhcmlhbnQoIGNvbnN0IFFNYXA8UVN0cmluZyxRVmFyaWFudD4mICk7CgogICAgUVZhcmlhbnQo
IGludCApOwogICAgUVZhcmlhbnQoIHVpbnQgKTsKCiAgICBRVmFyaWFudCggYm9vbCwgaW50ICk7
CiAgICBRVmFyaWFudCggZG91YmxlICk7CiAgICBRVmFyaWFudCggUVNpemVQb2xpY3kgKTsKCiAg
ICBRVmFyaWFudCYgb3BlcmF0b3I9ICggY29uc3QgUVZhcmlhbnQmICk7CiAgICBib29sIG9wZXJh
dG9yPT0oIGNvbnN0IFFWYXJpYW50JiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBRVmFyaWFudCYgKSBjb25zdDsKCiAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgIGNvbnN0IGNo
YXIqIHR5cGVOYW1lKCkgY29uc3Q7CgogICAgYm9vbCBjYW5DYXN0KCBUeXBlICkgY29uc3Q7CiAg
ICBib29sIGNhc3QoIFR5cGUgKTsKCiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgIGJvb2wg
aXNOdWxsKCkgY29uc3Q7CgogICAgdm9pZCBjbGVhcigpOwoKICAgIGNvbnN0IFFTdHJpbmcgdG9T
dHJpbmcoKSBjb25zdDsKICAgIGNvbnN0IFFDU3RyaW5nIHRvQ1N0cmluZygpIGNvbnN0OwoKICAg
IGNvbnN0IFFTdHJpbmdMaXN0IHRvU3RyaW5nTGlzdCgpIGNvbnN0OwoKICAgIGNvbnN0IFFGb250
IHRvRm9udCgpIGNvbnN0OwogICAgY29uc3QgUVBpeG1hcCB0b1BpeG1hcCgpIGNvbnN0OwogICAg
Y29uc3QgUUltYWdlIHRvSW1hZ2UoKSBjb25zdDsKICAgIGNvbnN0IFFCcnVzaCB0b0JydXNoKCkg
Y29uc3Q7CiAgICBjb25zdCBRUG9pbnQgdG9Qb2ludCgpIGNvbnN0OwogICAgY29uc3QgUVJlY3Qg
dG9SZWN0KCkgY29uc3Q7CiAgICBjb25zdCBRU2l6ZSB0b1NpemUoKSBjb25zdDsKICAgIGNvbnN0
IFFDb2xvciB0b0NvbG9yKCkgY29uc3Q7CiAgICBjb25zdCBRUGFsZXR0ZSB0b1BhbGV0dGUoKSBj
b25zdDsKICAgIGNvbnN0IFFDb2xvckdyb3VwIHRvQ29sb3JHcm91cCgpIGNvbnN0OwogICAgY29u
c3QgUUljb25TZXQgdG9JY29uU2V0KCkgY29uc3Q7CiAgICBjb25zdCBRUG9pbnRBcnJheSB0b1Bv
aW50QXJyYXkoKSBjb25zdDsKICAgIGNvbnN0IFFCaXRtYXAgdG9CaXRtYXAoKSBjb25zdDsKICAg
IGNvbnN0IFFSZWdpb24gdG9SZWdpb24oKSBjb25zdDsKICAgIGNvbnN0IFFDdXJzb3IgdG9DdXJz
b3IoKSBjb25zdDsKICAgIGNvbnN0IFFEYXRlIHRvRGF0ZSgpIGNvbnN0OwogICAgY29uc3QgUVRp
bWUgdG9UaW1lKCkgY29uc3Q7CiAgICBjb25zdCBRRGF0ZVRpbWUgdG9EYXRlVGltZSgpIGNvbnN0
OwogICAgY29uc3QgUUJ5dGVBcnJheSB0b0J5dGVBcnJheSgpIGNvbnN0OwogICAgY29uc3QgUUJp
dEFycmF5IHRvQml0QXJyYXkoKSBjb25zdDsKICAgIGNvbnN0IFFLZXlTZXF1ZW5jZSB0b0tleVNl
cXVlbmNlKCkgY29uc3Q7CiAgICBjb25zdCBRUGVuIHRvUGVuKCkgY29uc3Q7CiAgICBpbnQgdG9J
bnQoIGJvb2wgKiBvaz0wICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAqIG9rPTAgKSBj
b25zdDsKICAgIGJvb2wgdG9Cb29sKCkgY29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wg
KiBvaz0wICkgY29uc3Q7CgogICAgY29uc3QgUVZhbHVlTGlzdDxRVmFyaWFudD4gdG9MaXN0KCkg
Y29uc3Q7CiAgICBjb25zdCBRTWFwPFFTdHJpbmcsUVZhcmlhbnQ+IHRvTWFwKCkgY29uc3Q7Cgog
ICAgUVNpemVQb2xpY3kgdG9TaXplUG9saWN5KCkgY29uc3Q7CgoKICAgIFFWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPFFTdHJpbmc+IHN0cmluZ0xpc3RCZWdpbigpIGNvbnN0OwogICAgUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8UVN0cmluZz4gc3RyaW5nTGlzdEVuZCgpIGNvbnN0OwogICAgUVZhbHVl
TGlzdENvbnN0SXRlcmF0b3I8UVZhcmlhbnQ+IGxpc3RCZWdpbigpIGNvbnN0OwogICAgUVZhbHVl
TGlzdENvbnN0SXRlcmF0b3I8UVZhcmlhbnQ+IGxpc3RFbmQoKSBjb25zdDsKICAgIFFNYXBDb25z
dEl0ZXJhdG9yPFFTdHJpbmcsUVZhcmlhbnQ+IG1hcEJlZ2luKCkgY29uc3Q7CiAgICBRTWFwQ29u
c3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJpYW50PiBtYXBFbmQoKSBjb25zdDsKICAgIFFNYXBDb25z
dEl0ZXJhdG9yPFFTdHJpbmcsUVZhcmlhbnQ+IG1hcEZpbmQoIGNvbnN0IFFTdHJpbmcmICkgY29u
c3Q7CgogICAgUVN0cmluZyYgYXNTdHJpbmcoKTsKICAgIFFDU3RyaW5nJiBhc0NTdHJpbmcoKTsK
CiAgICBRU3RyaW5nTGlzdCYgYXNTdHJpbmdMaXN0KCk7CgogICAgUUZvbnQmIGFzRm9udCgpOwog
ICAgUVBpeG1hcCYgYXNQaXhtYXAoKTsKICAgIFFJbWFnZSYgYXNJbWFnZSgpOwogICAgUUJydXNo
JiBhc0JydXNoKCk7CiAgICBRUG9pbnQmIGFzUG9pbnQoKTsKICAgIFFSZWN0JiBhc1JlY3QoKTsK
ICAgIFFTaXplJiBhc1NpemUoKTsKICAgIFFDb2xvciYgYXNDb2xvcigpOwogICAgUVBhbGV0dGUm
IGFzUGFsZXR0ZSgpOwogICAgUUNvbG9yR3JvdXAmIGFzQ29sb3JHcm91cCgpOwogICAgUUljb25T
ZXQmIGFzSWNvblNldCgpOwogICAgUVBvaW50QXJyYXkmIGFzUG9pbnRBcnJheSgpOwogICAgUUJp
dG1hcCYgYXNCaXRtYXAoKTsKICAgIFFSZWdpb24mIGFzUmVnaW9uKCk7CiAgICBRQ3Vyc29yJiBh
c0N1cnNvcigpOwogICAgUURhdGUmIGFzRGF0ZSgpOwogICAgUVRpbWUmIGFzVGltZSgpOwogICAg
UURhdGVUaW1lJiBhc0RhdGVUaW1lKCk7CiAgICBRQnl0ZUFycmF5JiBhc0J5dGVBcnJheSgpOwog
ICAgUUJpdEFycmF5JiBhc0JpdEFycmF5KCk7CgogICAgUUtleVNlcXVlbmNlJiBhc0tleVNlcXVl
bmNlKCk7CgogICAgUVBlbiYgYXNQZW4oKTsKICAgIGludCYgYXNJbnQoKTsKICAgIHVpbnQmIGFz
VUludCgpOwogICAgYm9vbCYgYXNCb29sKCk7CiAgICBkb3VibGUmIGFzRG91YmxlKCk7CgogICAg
UVZhbHVlTGlzdDxRVmFyaWFudD4mIGFzTGlzdCgpOwogICAgUU1hcDxRU3RyaW5nLFFWYXJpYW50
PiYgYXNNYXAoKTsKCiAgICBRU2l6ZVBvbGljeSYgYXNTaXplUG9saWN5KCk7CgoKICAgIHZvaWQg
bG9hZCggUURhdGFTdHJlYW0mICk7CiAgICB2b2lkIHNhdmUoIFFEYXRhU3RyZWFtJiApIGNvbnN0
OwoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlVG9OYW1lKCBUeXBlIHR5cCApOwogICAgc3Rh
dGljIFR5cGUgbmFtZVRvVHlwZSggY29uc3QgY2hhciogbmFtZSApOwoKcHJpdmF0ZToKICAgIHZv
aWQgZGV0YWNoKCk7CgogICAgY2xhc3MgUHJpdmF0ZSA6IHB1YmxpYyBRU2hhcmVkCiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgICAgUHJpdmF0ZSgpOwogICAgICAgIFByaXZhdGUoIFByaXZhdGUqICk7
CiAgICAgICAgflByaXZhdGUoKTsKCiAgICAgICAgdm9pZCBjbGVhcigpOwoKICAgICAgICBUeXBl
IHR5cDsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgdWludCB1OwogICAgICAg
ICAgICBpbnQgaTsKICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICAgICBkb3VibGUgZDsKICAg
ICAgICAgICAgdm9pZCAqcHRyOwogICAgICAgIH0gdmFsdWU7CiAgICAgICAgdWludCBpc19udWxs
IDogMTsKICAgIH07CgogICAgUHJpdmF0ZSogZDsKCnB1YmxpYzoKICAgIHZvaWQqIHJhd0FjY2Vz
cyggdm9pZCogcHRyID0gMCwgVHlwZSB0eXAgPSBJbnZhbGlkLCBib29sIGRlZXBDb3B5ID0gRkFM
U0UgKTsKfTsKIyAzMTAgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmFyaWFudC5oIgpp
bmxpbmUgUVZhcmlhbnQ6OlR5cGUgUVZhcmlhbnQ6OnR5cGUoKSBjb25zdAp7CiAgICByZXR1cm4g
ZC0+dHlwOwp9CgppbmxpbmUgYm9vbCBRVmFyaWFudDo6aXNWYWxpZCgpIGNvbnN0CnsKICAgIHJl
dHVybiAoZC0+dHlwICE9IEludmFsaWQpOwp9CgoKaW5saW5lIFFWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yPFFTdHJpbmc+IFFWYXJpYW50OjpzdHJpbmdMaXN0QmVnaW4oKSBjb25zdAp7CiAgICBpZiAo
IGQtPnR5cCAhPSBTdHJpbmdMaXN0ICkKICAgICAgICByZXR1cm4gUVZhbHVlTGlzdENvbnN0SXRl
cmF0b3I8UVN0cmluZz4oKTsKICAgIHJldHVybiAoKGNvbnN0IFFTdHJpbmdMaXN0KilkLT52YWx1
ZS5wdHIpLT5iZWdpbigpOwp9CgppbmxpbmUgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8UVN0cmlu
Zz4gUVZhcmlhbnQ6OnN0cmluZ0xpc3RFbmQoKSBjb25zdAp7CiAgICBpZiAoIGQtPnR5cCAhPSBT
dHJpbmdMaXN0ICkKICAgICAgICByZXR1cm4gUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8UVN0cmlu
Zz4oKTsKICAgIHJldHVybiAoKGNvbnN0IFFTdHJpbmdMaXN0KilkLT52YWx1ZS5wdHIpLT5lbmQo
KTsKfQoKaW5saW5lIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFFWYXJpYW50PiBRVmFyaWFudDo6
bGlzdEJlZ2luKCkgY29uc3QKewogICAgaWYgKCBkLT50eXAgIT0gTGlzdCApCiAgICAgICAgcmV0
dXJuIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFFWYXJpYW50PigpOwogICAgcmV0dXJuICgoY29u
c3QgUVZhbHVlTGlzdDxRVmFyaWFudD4qKWQtPnZhbHVlLnB0ciktPmJlZ2luKCk7Cn0KCmlubGlu
ZSBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxRVmFyaWFudD4gUVZhcmlhbnQ6Omxpc3RFbmQoKSBj
b25zdAp7CiAgICBpZiAoIGQtPnR5cCAhPSBMaXN0ICkKICAgICAgICByZXR1cm4gUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8UVZhcmlhbnQ+KCk7CiAgICByZXR1cm4gKChjb25zdCBRVmFsdWVMaXN0
PFFWYXJpYW50PiopZC0+dmFsdWUucHRyKS0+ZW5kKCk7Cn0KCmlubGluZSBRTWFwQ29uc3RJdGVy
YXRvcjxRU3RyaW5nLFFWYXJpYW50PiBRVmFyaWFudDo6bWFwQmVnaW4oKSBjb25zdAp7CiAgICBp
ZiAoIGQtPnR5cCAhPSBNYXAgKQogICAgICAgIHJldHVybiBRTWFwQ29uc3RJdGVyYXRvcjxRU3Ry
aW5nLFFWYXJpYW50PigpOwogICAgcmV0dXJuICgoY29uc3QgUU1hcDxRU3RyaW5nLFFWYXJpYW50
PiopZC0+dmFsdWUucHRyKS0+YmVnaW4oKTsKfQoKaW5saW5lIFFNYXBDb25zdEl0ZXJhdG9yPFFT
dHJpbmcsUVZhcmlhbnQ+IFFWYXJpYW50OjptYXBFbmQoKSBjb25zdAp7CiAgICBpZiAoIGQtPnR5
cCAhPSBNYXAgKQogICAgICAgIHJldHVybiBRTWFwQ29uc3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJp
YW50PigpOwogICAgcmV0dXJuICgoY29uc3QgUU1hcDxRU3RyaW5nLFFWYXJpYW50PiopZC0+dmFs
dWUucHRyKS0+ZW5kKCk7Cn0KCmlubGluZSBRTWFwQ29uc3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJp
YW50PiBRVmFyaWFudDo6bWFwRmluZCggY29uc3QgUVN0cmluZyYga2V5ICkgY29uc3QKewogICAg
aWYgKCBkLT50eXAgIT0gTWFwICkKICAgICAgICByZXR1cm4gUU1hcENvbnN0SXRlcmF0b3I8UVN0
cmluZyxRVmFyaWFudD4oKTsKICAgIHJldHVybiAoKGNvbnN0IFFNYXA8UVN0cmluZyxRVmFyaWFu
dD4qKWQtPnZhbHVlLnB0ciktPmZpbmQoIGtleSApOwp9CgoKCiBRRGF0YVN0cmVhbSYgb3BlcmF0
b3I+PiAoIFFEYXRhU3RyZWFtJiBzLCBRVmFyaWFudCYgcCApOwogUURhdGFTdHJlYW0mIG9wZXJh
dG9yPDwgKCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVZhcmlhbnQmIHAgKTsKIFFEYXRhU3RyZWFt
JiBvcGVyYXRvcj4+ICggUURhdGFTdHJlYW0mIHMsIFFWYXJpYW50OjpUeXBlJiBwICk7CiBRRGF0
YVN0cmVhbSYgb3BlcmF0b3I8PCAoIFFEYXRhU3RyZWFtJiBzLCBjb25zdCBRVmFyaWFudDo6VHlw
ZSBwICk7CiMgMjIgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwv
aW5jbHVkZS9UeHFUYWJsZUl0ZW0uaCIgMgoKCgoKCgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxs
ZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFBY3Rpb25JdGVtLmgiIDEKIyAyNCAi
L2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cUFj
dGlvbkl0ZW0uaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWNvbWJvYm94Lmgi
IDEKIyA0OCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fjb21ib2JveC5oIgpjbGFzcyBR
U3RyTGlzdDsKY2xhc3MgUVN0cmluZ0xpc3Q7CmNsYXNzIFFMaW5lRWRpdDsKY2xhc3MgUVZhbGlk
YXRvcjsKY2xhc3MgUUxpc3RCb3g7CmNsYXNzIFFDb21ib0JveERhdGE7CgpjbGFzcyBRQ29tYm9C
b3ggOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1l
dGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBj
b25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25z
dCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0
dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3Bl
cnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19w
cm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9i
amVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFP
YmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAK
ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRQ29t
Ym9Cb3goIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFDb21i
b0JveCggYm9vbCBydywgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwog
ICAgflFDb21ib0JveCgpOwoKICAgIGludCBjb3VudCgpIGNvbnN0OwoKICAgIHZvaWQgaW5zZXJ0
U3RyaW5nTGlzdCggY29uc3QgUVN0cmluZ0xpc3QgJiwgaW50IGluZGV4PS0xICk7CiAgICB2b2lk
IGluc2VydFN0ckxpc3QoIGNvbnN0IFFTdHJMaXN0ICYsIGludCBpbmRleD0tMSApOwogICAgdm9p
ZCBpbnNlcnRTdHJMaXN0KCBjb25zdCBRU3RyTGlzdCAqLCBpbnQgaW5kZXg9LTEgKTsKICAgIHZv
aWQgaW5zZXJ0U3RyTGlzdCggY29uc3QgY2hhciAqKiwgaW50IG51bVN0cmluZ3M9LTEsIGludCBp
bmRleD0tMSk7CgogICAgdm9pZCBpbnNlcnRJdGVtKCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQg
aW5kZXg9LTEgKTsKICAgIHZvaWQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLCBp
bnQgaW5kZXg9LTEgKTsKICAgIHZvaWQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFw
LCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaW5kZXg9LTEgKTsKCiAgICB2b2lkIHJlbW92ZUl0
ZW0oIGludCBpbmRleCApOwoKICAgIGludCBjdXJyZW50SXRlbSgpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHNldEN1cnJlbnRJdGVtKCBpbnQgaW5kZXggKTsKCiAgICBRU3RyaW5nIGN1cnJlbnRU
ZXh0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFRleHQoIGNvbnN0IFFTdHJp
bmcmICk7CgogICAgUVN0cmluZyB0ZXh0KCBpbnQgaW5kZXggKSBjb25zdDsKICAgIGNvbnN0IFFQ
aXhtYXAgKnBpeG1hcCggaW50IGluZGV4ICkgY29uc3Q7CgogICAgdm9pZCBjaGFuZ2VJdGVtKCBj
b25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaW5kZXggKTsKICAgIHZvaWQgY2hhbmdlSXRlbSggY29u
c3QgUVBpeG1hcCAmcGl4bWFwLCBpbnQgaW5kZXggKTsKICAgIHZvaWQgY2hhbmdlSXRlbSggY29u
c3QgUVBpeG1hcCAmcGl4bWFwLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaW5kZXggKTsKCiAg
ICBib29sIGF1dG9SZXNpemUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvUmVzaXpl
KCBib29sICk7CiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwoKICAgIHZvaWQgc2V0UGFsZXR0
ZSggY29uc3QgUVBhbGV0dGUgJiApOwogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAmICk7
CiAgICB2b2lkIHNldEVuYWJsZWQoIGJvb2wgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUxp
bWl0KCBpbnQgKTsKICAgIGludCBzaXplTGltaXQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQg
c2V0TWF4Q291bnQoIGludCApOwogICAgaW50IG1heENvdW50KCkgY29uc3Q7CgogICAgZW51bSBQ
b2xpY3kgeyBOb0luc2VydGlvbiwgQXRUb3AsIEF0Q3VycmVudCwgQXRCb3R0b20sCiAgICAgICAg
ICAgICAgICAgIEFmdGVyQ3VycmVudCwgQmVmb3JlQ3VycmVudCB9OwoKICAgIHZpcnR1YWwgdm9p
ZCBzZXRJbnNlcnRpb25Qb2xpY3koIFBvbGljeSBwb2xpY3kgKTsKICAgIFBvbGljeSBpbnNlcnRp
b25Qb2xpY3koKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsaWRhdG9yKCBjb25zdCBR
VmFsaWRhdG9yICogKTsKICAgIGNvbnN0IFFWYWxpZGF0b3IgKiB2YWxpZGF0b3IoKSBjb25zdDsK
CiAgICB2aXJ0dWFsIHZvaWQgc2V0TGlzdEJveCggUUxpc3RCb3ggKiApOwogICAgUUxpc3RCb3gg
KiBsaXN0Qm94KCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldExpbmVFZGl0KCBRTGluZUVk
aXQgKmVkaXQgKTsKICAgIFFMaW5lRWRpdCogbGluZUVkaXQoKSBjb25zdDsKCiAgICB2aXJ0dWFs
IHZvaWQgc2V0QXV0b0NvbXBsZXRpb24oIGJvb2wgKTsKICAgIGJvb2wgYXV0b0NvbXBsZXRpb24o
KSBjb25zdDsKCiAgICBib29sIGV2ZW50RmlsdGVyKCBRT2JqZWN0ICpvYmplY3QsIFFFdmVudCAq
ZXZlbnQgKTsKCiAgICB2b2lkIHNldER1cGxpY2F0ZXNFbmFibGVkKCBib29sIGVuYWJsZSApOwog
ICAgYm9vbCBkdXBsaWNhdGVzRW5hYmxlZCgpIGNvbnN0OwoKICAgIGJvb2wgZWRpdGFibGUoKSBj
b25zdDsKICAgIHZvaWQgc2V0RWRpdGFibGUoIGJvb2wgKTsKCiAgICB2aXJ0dWFsIHZvaWQgcG9w
dXAoKTsKCnB1YmxpYyA6CiAgICB2b2lkIGNsZWFyKCk7CiAgICB2b2lkIGNsZWFyVmFsaWRhdG9y
KCk7CiAgICB2b2lkIGNsZWFyRWRpdCgpOwogICAgdmlydHVhbCB2b2lkIHNldEVkaXRUZXh0KCBj
b25zdCBRU3RyaW5nICYpOwoKcHJvdGVjdGVkOgogICAgdm9pZCBhY3RpdmF0ZWQoIGludCBpbmRl
eCApOwogICAgdm9pZCBoaWdobGlnaHRlZCggaW50IGluZGV4ICk7CiAgICB2b2lkIGFjdGl2YXRl
ZCggY29uc3QgUVN0cmluZyAmKTsKICAgIHZvaWQgaGlnaGxpZ2h0ZWQoIGNvbnN0IFFTdHJpbmcg
Jik7CiAgICB2b2lkIHRleHRDaGFuZ2VkKCBjb25zdCBRU3RyaW5nICYpOwoKcHJpdmF0ZSA6CiAg
ICB2b2lkIGludGVybmFsQWN0aXZhdGUoIGludCApOwogICAgdm9pZCBpbnRlcm5hbEhpZ2hsaWdo
dCggaW50ICk7CiAgICB2b2lkIGludGVybmFsQ2xpY2tUaW1lb3V0KCk7CiAgICB2b2lkIHJldHVy
blByZXNzZWQoKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgcGFpbnRFdmVudCggUVBhaW50RXZlbnQg
KiApOwogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQgbW91
c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlTW92ZUV2ZW50KCBR
TW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAq
ICk7CiAgICB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAg
dm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKmUgKTsKICAgIHZvaWQgZm9jdXNJbkV2ZW50
KCBRRm9jdXNFdmVudCAqZSApOwogICAgdm9pZCBmb2N1c091dEV2ZW50KCBRRm9jdXNFdmVudCAq
ZSApOwogICAgdm9pZCB3aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqZSApOwogICAgdm9pZCBzdHls
ZUNoYW5nZSggUVN0eWxlJiApOwoKICAgIHZvaWQgdXBkYXRlTWFzaygpOwoKcHJpdmF0ZToKICAg
IHZvaWQgc2V0VXBMaXN0Qm94KCk7CiAgICB2b2lkIHNldFVwTGluZUVkaXQoKTsKICAgIHZvaWQg
cG9wRG93bkxpc3RCb3goKTsKICAgIHZvaWQgcmVJbmRleCgpOwogICAgdm9pZCBjdXJyZW50Q2hh
bmdlZCgpOwogICAgaW50IGNvbXBsZXRpb25JbmRleCggY29uc3QgUVN0cmluZyAmLCBpbnQgKSBj
b25zdDsKCiAgICBRQ29tYm9Cb3hEYXRhICpkOwoKcHJpdmF0ZToKCiAgICBRQ29tYm9Cb3goIGNv
bnN0IFFDb21ib0JveCAmICk7CiAgICBRQ29tYm9Cb3ggJm9wZXJhdG9yPSggY29uc3QgUUNvbWJv
Qm94ICYgKTsKCn07CiMgMjUgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3Fz
Y2ltcGwvaW5jbHVkZS9UeHFBY3Rpb25JdGVtLmgiIDIKCgoKCgoKCmNsYXNzIFR4cUFjdGlvbkl0
ZW06IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVRhYmxlSXRlbQp7CiAgcHVibGljOiB2aXJ0dWFs
IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVj
dCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9p
ZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBR
VU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1
YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMg
Ym9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiAp
OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVj
dCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICpt
ZXRhT2JqOwpwdWJsaWM6CgoKCgoKCgogICBUeHFBY3Rpb25JdGVtKCBRVGFibGUgKnQsIEVkaXRU
eXBlIGUgLCBjb25zdCBRU3RyaW5nIHMpOwoKCgoKCiAgIFFXaWRnZXQgKmNyZWF0ZUVkaXRvcigp
IGNvbnN0OwoKCgoKCiAgIHZvaWQgc2V0Q29udGVudEZyb21FZGl0b3IoIFFXaWRnZXQgKncgKTsK
CgoKCgogICB2b2lkIHNldFRleHQoIGNvbnN0IFFTdHJpbmcgJm5ld1RleHQgKTsKCgoKCgogIHZv
aWQgc2V0QWN0aW9uTWFwKCBjb25zdCBzdGQ6Om1hcDxpbnQsIFFTdHJpbmc+ICZtLCBpbnQgYWN0
aW9uID0wKSB7CiAgICBhY3Rpb25NYXAgPSBtOwogICAgc2V0VGV4dChhY3Rpb25NYXBbYWN0aW9u
XSk7CiAgfQoKCgoKCiAgc3RkOjptYXA8aW50LCBRU3RyaW5nPiBnZXRBY3Rpb25NYXAoKSB7cmV0
dXJuIGFjdGlvbk1hcDt9CgoKCgoKICB2b2lkIHNldEFjdGlvbkl0ZW0oaW50IGFjdGlvbik7CgoK
CgoKICB2b2lkIHNldEFjdGlvbkl0ZW0oUVN0cmluZyBhY3Rpb24pOwoKCgoKICBpbnQgZ2V0QWN0
aW9uSXRlbSgpIHtyZXR1cm4gY29tYm9Cb3gtPmN1cnJlbnRJdGVtKCk7fQoKCgoKICBRU3RyaW5n
IGdldEFjdGlvbkl0ZW1OYW1lKCkge3JldHVybiBjb21ib0JveC0+Y3VycmVudFRleHQoKTt9Cgpw
cm90ZWN0ZWQ6CgoKCgogIHZvaWQgYWN0aW9uQ2hhbmdlZChRU3RyaW5nKTsKCnB1YmxpYyA6CgoK
CgoKICB2b2lkIGFjdGl2YXRlZChpbnQgYWN0aW9uKTsKCnByb3RlY3RlZDoKCgoKICBzdGQ6Om1h
cDxpbnQgLCBRU3RyaW5nPiBhY3Rpb25NYXA7Cgpwcml2YXRlOgoKCgoKICAgUUNvbWJvQm94ICpj
b21ib0JveDsKCgp9OwojIDI5ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9x
c2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiIDIKCgoKCgoKY2xhc3MgVHhxVGFibGVJdGVt
OiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFUYWJsZUl0ZW0KewogIHB1YmxpYzogdmlydHVhbCBR
TWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3Qo
KTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQq
IHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVP
YmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFs
IGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJv
b2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsg
c3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3Qo
KSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0
YU9iajsKcHVibGljOgojIDQ4ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9x
c2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgdHlwZWRlZiB2b2lkICgqVHhxQWN0aW9u
RmNuUHRyKShUeHFUYWJsZUl0ZW0qKTsKIyA1OSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q
ZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxlSXRlbS5oIgogIFR4cVRhYmxlSXRlbSgg
UVRhYmxlICp0LCBFZGl0VHlwZSBlICwgVHhBdHRyaWJ1dGVTZXQgKmEsCiAgICAgICAgICAgICAg
ICAgICBjb25zdCBRU3RyaW5nIHMsIGNvbnN0IFFWYXJpYW50ICZ2LCBpbnQgcik7CgoKCgogIHZp
cnR1YWwgflR4cVRhYmxlSXRlbSgpIHt9CgoKCgoKICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0
ZShUeEF0dHJpYnV0ZVNldCAqYSkgewogICAgIGF0dHJpYj1hOwogICAgfQoKCgoKCiAgdmlydHVh
bCB2b2lkIHNldEF0dHJpYlZhbHVlKCkge30KCgoKCiAgaW50IGdldFJvdygpIGNvbnN0IHtyZXR1
cm4gcm93O30KCgoKCgogIHZpcnR1YWwgaW50IHJ0dGkoKSBjb25zdCB7cmV0dXJuIFJUVEk7fQoK
CgoKICBzdGF0aWMgaW50IFJUVEk7CgoKCgogIHZpcnR1YWwgdm9pZCBhZGRBY3Rpb25JdGVtKCk7
Cgpwcm90ZWN0ZWQ6CgoKCgoKICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYk5hbWUoY29uc3QgUVN0
cmluZyBubSkge2F0dHJpYk5hbWUgPSBubTt9CgoKCgoKICAgdmlydHVhbCBzdGQ6OnN0cmluZyBn
ZXRBdHRyaWJOYW1lKCkge3JldHVybiBhdHRyaWJOYW1lLmFzY2lpKCk7fQoKCgoKICB2aXJ0dWFs
IHZvaWQgYWRkTmFtZUl0ZW0oKTsKCgoKCiAgdmlydHVhbCB2b2lkIGNyZWF0ZUFjdGlvbk1hcHMo
KTsKCgoKCgogIHZpcnR1YWwgaW50IGdldFZlY1NpemUoKSB7cmV0dXJuIDA7fQojIDEzOSAiL2hv
bWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxl
SXRlbS5oIgogIHZpcnR1YWwgYm9vbCBjaGVja0xhYmVsKGludCApIHtyZXR1cm4gdHJ1ZTt9CgoK
CgoKCgogIHZpcnR1YWwgdm9pZCBhZGRTdWJJdGVtKGludCAsIGludCApIHt9CgoKCgogIHN0ZDo6
bWFwPGludCAsIFFTdHJpbmc+IGFjdGlvbk1hcDsKCgoKCiAgc3RkOjptYXA8UVN0cmluZywgVHhx
QWN0aW9uRmNuUHRyPiBhY3Rpb25GY25NYXA7CiMgMTY3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVy
L3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgdmlydHVhbCBi
b29sIGVkaXRBY3Rpb24oaW50IHJvdykgOwojIDE3NyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w
cm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxlSXRlbS5oIgogIHZpcnR1YWwgYm9v
bCByZXNldEFjdGlvbihpbnQgcm93KSA7CiMgMTg3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3By
b2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgdmlydHVhbCBib29s
IGRlbGV0ZUFjdGlvbihpbnQgcm93KSA7CiMgMTk3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3By
b2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgdmlydHVhbCBib29s
IGhpZGVBY3Rpb24oaW50IHJvdykgOwojIDIwNyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q
ZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxlSXRlbS5oIgogIHZpcnR1YWwgYm9vbCBz
aG93QWN0aW9uKGludCByb3cpIDsKCgoKCiAgUVZhcmlhbnQgYXR0cmliVmFsdWU7CgoKCgogIFR4
QXR0cmlidXRlU2V0ICphdHRyaWI7CgoKCgogIGJvb2wgaXNPcGVuOwoKCgoKICBUeHFBY3Rpb25J
dGVtICphY3Rpb25JdGVtOwoKcHJvdGVjdGVkIDoKCgoKCgogIHZpcnR1YWwgdm9pZCBzZWN0aW9u
Q2xpY2tlZChpbnQgc2VjdGlvbik7CiMgMjQ1ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2pl
Y3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgIHZvaWQgZG91YmxlQ2xp
Y2tlZCAoIGludCByb3csIGludCBjb2wsIGludCAsIGNvbnN0IFFQb2ludCAmICkgewoKICAgICBp
ZiAoIChyb3cgPT0gZ2V0Um93KCkpICYmIGNvbCA8IDIpIHNlY3Rpb25DbGlja2VkKHJvdyk7CiAg
IH0KCgoKCiAgdm9pZCBhY3Rpb25DaGFuZ2VkKFFTdHJpbmcgYWN0aW9uKTsKCnByaXZhdGU6CgoK
CgogIHN0YXRpYyB2b2lkIGVkaXRBY3Rpb24oVHhxVGFibGVJdGVtKik7CgoKCgogIHN0YXRpYyB2
b2lkIHJlc2V0QWN0aW9uKFR4cVRhYmxlSXRlbSopOwoKCgoKICBzdGF0aWMgdm9pZCBkZWxldGVB
Y3Rpb24oVHhxVGFibGVJdGVtKik7CgoKCgogIHN0YXRpYyB2b2lkIGhpZGVBY3Rpb24oVHhxVGFi
bGVJdGVtKik7CgoKCgogIHN0YXRpYyB2b2lkIHNob3dBY3Rpb24oVHhxVGFibGVJdGVtKik7CgoK
CgogIFFTdHJpbmcgYXR0cmliTmFtZTsKCgoKCiAgUVZhcmlhbnQgcmVzZXRWYWx1ZTsKCgoKCiAg
aW50IHJvdzsKCgoKCiAgYm9vbCBzdWJJdGVtc0NyZWF0ZWQ7Cgp9OwojIDI3ICIvaG9tZS9yZXNl
YXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxRWRpdFRhYmxlLmgi
IDIKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1
ZGUvVHhxU3RyaW5nVGFibGVJdGVtLmgiIDEKIyAyMCAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w
cm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVN0cmluZ1RhYmxlSXRlbS5oIgojIDEgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbGluZWVkaXQuaCIgMQojIDQxICIvdXNyL2xvY2Fs
L3F0LTMuMS4xL2luY2x1ZGUvcWxpbmVlZGl0LmgiCnN0cnVjdCBRTGluZUVkaXRQcml2YXRlOwoK
Y2xhc3MgUVZhbGlkYXRvcjsKY2xhc3MgUVBvcHVwTWVudTsKIyA1MyAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3FsaW5lZWRpdC5oIgpjbGFzcyBRVGV4dFBhcmFncmFwaDsKY2xhc3MgUVRl
eHRDdXJzb3I7CgpjbGFzcyBRTGluZUVkaXQgOiBwdWJsaWMgUUZyYW1lCnsKICAgIHB1YmxpYzog
dmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01l
dGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0
dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2Uo
IGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiAp
OyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsg
c3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFy
aWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3Qq
IHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0cigg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCgg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9i
amVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGljOgogICAgUUxpbmVFZGl0KCBRV2lkZ2V0
KiBwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUUxpbmVFZGl0KCBjb25zdCBRU3Ry
aW5nICYsIFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UUxpbmVF
ZGl0KCk7CgogICAgUVN0cmluZyB0ZXh0KCkgY29uc3Q7CgogICAgUVN0cmluZyBkaXNwbGF5VGV4
dCgpIGNvbnN0OwoKICAgIGludCBtYXhMZW5ndGgoKSBjb25zdDsKCiAgICBib29sIGZyYW1lKCkg
Y29uc3Q7CgogICAgZW51bSBFY2hvTW9kZSB7IE5vcm1hbCwgTm9FY2hvLCBQYXNzd29yZCB9Owog
ICAgRWNob01vZGUgZWNob01vZGUoKSBjb25zdDsKCiAgICBib29sIGlzUmVhZE9ubHkoKSBjb25z
dDsKCiAgICBjb25zdCBRVmFsaWRhdG9yICogdmFsaWRhdG9yKCkgY29uc3Q7CgogICAgUVNpemUg
c2l6ZUhpbnQoKSBjb25zdDsKICAgIFFTaXplIG1pbmltdW1TaXplSGludCgpIGNvbnN0OwoKICAg
IGludCBjdXJzb3JQb3NpdGlvbigpIGNvbnN0OwogICAgYm9vbCB2YWxpZGF0ZUFuZFNldCggY29u
c3QgUVN0cmluZyAmLCBpbnQsIGludCwgaW50ICk7CgogICAgaW50IGFsaWdubWVudCgpIGNvbnN0
OwoKCiAgICB2b2lkIGN1cnNvckxlZnQoIGJvb2wgbWFyaywgaW50IHN0ZXBzID0gMSApIHsgY3Vy
c29yRm9yd2FyZCggbWFyaywgLXN0ZXBzICk7IH0KICAgIHZvaWQgY3Vyc29yUmlnaHQoIGJvb2wg
bWFyaywgaW50IHN0ZXBzID0gMSApIHsgY3Vyc29yRm9yd2FyZCggbWFyaywgc3RlcHMgKTsgfQoK
ICAgIHZvaWQgY3Vyc29yRm9yd2FyZCggYm9vbCBtYXJrLCBpbnQgc3RlcHMgPSAxICk7CiAgICB2
b2lkIGN1cnNvckJhY2t3YXJkKCBib29sIG1hcmssIGludCBzdGVwcyA9IDEgKTsKICAgIHZvaWQg
Y3Vyc29yV29yZEZvcndhcmQoIGJvb2wgbWFyayApOwogICAgdm9pZCBjdXJzb3JXb3JkQmFja3dh
cmQoIGJvb2wgbWFyayApOwogICAgdm9pZCBiYWNrc3BhY2UoKTsKICAgIHZvaWQgZGVsKCk7CiAg
ICB2b2lkIGhvbWUoIGJvb2wgbWFyayApOwogICAgdm9pZCBlbmQoIGJvb2wgbWFyayApOwoKICAg
IHZvaWQgc2V0RWRpdGVkKCBib29sICk7CiAgICBib29sIGVkaXRlZCgpIGNvbnN0OwoKICAgIGJv
b2wgaGFzU2VsZWN0ZWRUZXh0KCkgY29uc3Q7CiAgICBRU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNv
bnN0OwogICAgYm9vbCBnZXRTZWxlY3Rpb24oIGludCAqc3RhcnQsIGludCAqZW5kICk7CgogICAg
Ym9vbCBpc1VuZG9BdmFpbGFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNSZWRvQXZhaWxhYmxlKCkg
Y29uc3Q7CgoKCiAgICBib29sIGhhc01hcmtlZFRleHQoKSBjb25zdCB7IHJldHVybiBoYXNTZWxl
Y3RlZFRleHQoKTsgfQogICAgUVN0cmluZyBtYXJrZWRUZXh0KCkgY29uc3QgeyByZXR1cm4gc2Vs
ZWN0ZWRUZXh0KCk7IH0KCgogICAgdm9pZCBzZXRQYXNzd29yZENoYXIoIFFDaGFyIGMgKTsKICAg
IFFDaGFyIHBhc3N3b3JkQ2hhcigpIGNvbnN0OwoKICAgIGJvb2wgZHJhZ0VuYWJsZWQoKSBjb25z
dDsKICAgIGludCBjaGFyYWN0ZXJBdCggaW50IHhwb3MsIFFDaGFyICpjaHIgKSBjb25zdDsKCnB1
YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyAmKTsKICAgIHZp
cnR1YWwgdm9pZCBzZWxlY3RBbGwoKTsKICAgIHZpcnR1YWwgdm9pZCBkZXNlbGVjdCgpOwogICAg
dmlydHVhbCB2b2lkIGNsZWFyVmFsaWRhdG9yKCk7CiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0KCBj
b25zdCBRU3RyaW5nICYpOwogICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CiAgICB2aXJ0dWFsIHZv
aWQgdW5kbygpOwogICAgdmlydHVhbCB2b2lkIHJlZG8oKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRN
YXhMZW5ndGgoIGludCApOwogICAgdmlydHVhbCB2b2lkIHNldEZyYW1lKCBib29sICk7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0RWNob01vZGUoIEVjaG9Nb2RlICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0
UmVhZE9ubHkoIGJvb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRWYWxpZGF0b3IoIGNvbnN0IFFW
YWxpZGF0b3IgKiApOwogICAgdmlydHVhbCB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250ICYgKTsK
ICAgIHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VsZWN0aW9uKCBpbnQsIGludCApOwogICAgdmlydHVhbCB2b2lkIHNldEN1
cnNvclBvc2l0aW9uKCBpbnQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRBbGlnbm1lbnQoIGludCBm
bGFnICk7CgogICAgdmlydHVhbCB2b2lkIGN1dCgpOwogICAgdmlydHVhbCB2b2lkIGNvcHkoKSBj
b25zdDsKICAgIHZpcnR1YWwgdm9pZCBwYXN0ZSgpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXREcmFn
RW5hYmxlZCggYm9vbCBiICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHRleHRDaGFuZ2VkKCBjb25z
dCBRU3RyaW5nICYpOwogICAgdm9pZCByZXR1cm5QcmVzc2VkKCk7CiAgICB2b2lkIGxvc3RGb2N1
cygpOwogICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7Cgpwcm90ZWN0ZWQ6CiAgICBib29sIGV2
ZW50KCBRRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2ZW50ICog
KTsKICAgIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZvaWQgbW91
c2VSZWxlYXNlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZvaWQgbW91c2VEb3VibGVDbGlj
a0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVu
dCAqICk7CiAgICB2b2lkIGltU3RhcnRFdmVudCggUUlNRXZlbnQgKiApOwogICAgdm9pZCBpbUNv
bXBvc2VFdmVudCggUUlNRXZlbnQgKiApOwogICAgdm9pZCBpbUVuZEV2ZW50KCBRSU1FdmVudCAq
ICk7CiAgICB2b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1
c091dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7CiAgICB2b2lkIGRyYXdDb250ZW50cyggUVBhaW50
ZXIgKnBhaW50ZXIgKTsKICAgIHZvaWQgcmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqICk7Cgog
ICAgdm9pZCBkcmFnRW50ZXJFdmVudCggUURyYWdFbnRlckV2ZW50ICogKTsKICAgIHZvaWQgZHJh
Z01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKmUgKTsKICAgIHZvaWQgZHJhZ0xlYXZlRXZlbnQo
IFFEcmFnTGVhdmVFdmVudCAqZSApOwogICAgdm9pZCBkcm9wRXZlbnQoIFFEcm9wRXZlbnQgKiAp
OwoKICAgIHZvaWQgY29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQgKiApOwoKCiAg
ICB2b2lkIHJlcGFpbnRBcmVhKCBpbnQsIGludCApIHsgdXBkYXRlKCk7IH0KCgogICAgdmlydHVh
bCBRUG9wdXBNZW51ICpjcmVhdGVQb3B1cE1lbnUoKTsKICAgIHZvaWQgd2luZG93QWN0aXZhdGlv
bkNoYW5nZSggYm9vbCApOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGNsaXBib2FyZENoYW5nZWQoKTsK
ICAgIHZvaWQgYmxpbmtTbG90KCk7CgogICAgdm9pZCBkb0RyYWcoKTsKCiAgICB2b2lkIGRyYWdT
bG90KCk7CiAgICB2b2lkIHBvcHVwQWN0aXZhdGVkKCBpbnQgciApOwoKcHJpdmF0ZToKICAgIHZv
aWQgaW5pdCgpOwogICAgdm9pZCBibGlua09uKCk7CiAgICB2b2lkIHVwZGF0ZU9mZnNldCgpOwog
ICAgdm9pZCB1cGRhdGVPZmZzZXQoIFFUZXh0UGFyYWdyYXBoICpwLCBRVGV4dEN1cnNvciAqYyAp
OwogICAgdm9pZCB1cGRhdGVTZWxlY3Rpb24oKTsKICAgIHZvaWQgcmVtb3ZlU2VsZWN0ZWRUZXh0
KCk7CiAgICB2b2lkIGRlbE9yQmFja3NwYWNlKCBib29sIGJhY2tzcGFjZSApOwoKICAgIFFMaW5l
RWRpdFByaXZhdGUgKiBkOwoKcHJpdmF0ZToKCiAgICBRTGluZUVkaXQoIGNvbnN0IFFMaW5lRWRp
dCAmICk7CiAgICBRTGluZUVkaXQgJm9wZXJhdG9yPSggY29uc3QgUUxpbmVFZGl0ICYgKTsKCn07
CiMgMjEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVk
ZS9UeHFTdHJpbmdUYWJsZUl0ZW0uaCIgMgojIDMwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3By
b2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxU3RyaW5nVGFibGVJdGVtLmgiCmNsYXNzIFR4
cVN0cmluZ1RhYmxlSXRlbTogcHVibGljIFR4cVRhYmxlSXRlbQp7CnB1YmxpYzoKIyA0MyAiL2hv
bWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVN0cmlu
Z1RhYmxlSXRlbS5oIgogICBUeHFTdHJpbmdUYWJsZUl0ZW0oIFFUYWJsZSAqdCwgRWRpdFR5cGUg
ZSAsIFR4QXR0cmlidXRlU2V0ICphLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu
ZyBzLCBjb25zdCBRVmFyaWFudCAmdiwgaW50IHIpOwoKCgoKICB2aXJ0dWFsIH5UeHFTdHJpbmdU
YWJsZUl0ZW0oKSB7fQoKCgoKCiAgIFFXaWRnZXQgKmNyZWF0ZUVkaXRvcigpIGNvbnN0OwoKCgoK
CiAgIHZvaWQgc2V0Q29udGVudEZyb21FZGl0b3IoIFFXaWRnZXQgKncgKTsKCgoKCgogICB2b2lk
IHNldFRleHQoIGNvbnN0IFFTdHJpbmcgJm5ld1RleHQgKTsKCgoKCgogIHZpcnR1YWwgdm9pZCBz
ZXRBdHRyaWJWYWx1ZSgpOwoKCgoKICBpbnQgVHhxU3RyaW5nVGFibGVJdGVtOjphbGlnbm1lbnQo
KSBjb25zdCB7cmV0dXJuIFFUYWJsZTo6QWxpZ25SaWdodDt9Cgpwcm90ZWN0ZWQ6CgoKCgoKICB2
aXJ0dWFsIHZvaWQgc2V0QXR0cmliVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcgbmFtZSwgY29uc3Qg
c3RkOjpzdHJpbmcgdmFsdWUpOwoKcHJpdmF0ZToKCgoKCiAgIFFHdWFyZGVkUHRyPFFMaW5lRWRp
dD4gbGluZUVkaXQ7CgoKfTsKIyAyOCAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8z
LjIvcXNjaW1wbC9pbmNsdWRlL1R4cUVkaXRUYWJsZS5oIiAyCiMgMSAiL2hvbWUvcmVzZWFyY2gv
Ym1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVBhcmFtVGFibGVJdGVtLmgi
IDEKIyAyMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNs
dWRlL1R4cVBhcmFtVGFibGVJdGVtLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl
L3F2YWxpZGF0b3IuaCIgMQojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbGlk
YXRvci5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcmVnZXhwLmgiIDEKIyA0
NiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FyZWdleHAuaCIKY2xhc3MgUVJlZ0V4cEVu
Z2luZTsKc3RydWN0IFFSZWdFeHBQcml2YXRlOwoKY2xhc3MgUVJlZ0V4cAp7CnB1YmxpYzoKICAg
IGVudW0gQ2FyZXRNb2RlIHsgQ2FyZXRBdFplcm8sIENhcmV0QXRPZmZzZXQsIENhcmV0V29udE1h
dGNoIH07CgogICAgUVJlZ0V4cCgpOwogICAgUVJlZ0V4cCggY29uc3QgUVN0cmluZyYgcGF0dGVy
biwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gVFJVRSwKICAgICAgICAgICAgIGJvb2wgd2lsZGNhcmQg
PSBGQUxTRSApOwogICAgUVJlZ0V4cCggY29uc3QgUVJlZ0V4cCYgcnggKTsKICAgIH5RUmVnRXhw
KCk7CiAgICBRUmVnRXhwJiBvcGVyYXRvcj0oIGNvbnN0IFFSZWdFeHAmIHJ4ICk7CgogICAgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBRUmVnRXhwJiByeCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBRUmVnRXhwJiByeCApIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KCByeCAp
OyB9CgogICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsK
ICAgIFFTdHJpbmcgcGF0dGVybigpIGNvbnN0OwogICAgdm9pZCBzZXRQYXR0ZXJuKCBjb25zdCBR
U3RyaW5nJiBwYXR0ZXJuICk7CiAgICBib29sIGNhc2VTZW5zaXRpdmUoKSBjb25zdDsKICAgIHZv
aWQgc2V0Q2FzZVNlbnNpdGl2ZSggYm9vbCBzZW5zaXRpdmUgKTsKCiAgICBib29sIHdpbGRjYXJk
KCkgY29uc3Q7CiAgICB2b2lkIHNldFdpbGRjYXJkKCBib29sIHdpbGRjYXJkICk7CgogICAgYm9v
bCBtaW5pbWFsKCkgY29uc3Q7CiAgICB2b2lkIHNldE1pbmltYWwoIGJvb2wgbWluaW1hbCApOwoK
ICAgIGJvb2wgZXhhY3RNYXRjaCggY29uc3QgUVN0cmluZyYgc3RyICkgY29uc3Q7CgogICAgaW50
IG1hdGNoKCBjb25zdCBRU3RyaW5nJiBzdHIsIGludCBpbmRleCA9IDAsIGludCAqbGVuID0gMCwK
ICAgICAgICAgICAgICAgYm9vbCBpbmRleElzU3RhcnQgPSBUUlVFICkgY29uc3Q7CiMgOTAgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcmVnZXhwLmgiCiAgICBpbnQgc2VhcmNoKCBjb25z
dCBRU3RyaW5nJiBzdHIsIGludCBvZmZzZXQgPSAwICkgY29uc3Q7CiAgICBpbnQgc2VhcmNoKCBj
b25zdCBRU3RyaW5nJiBzdHIsIGludCBvZmZzZXQsIENhcmV0TW9kZSBjYXJldE1vZGUgKSBjb25z
dDsKICAgIGludCBzZWFyY2hSZXYoIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IG9mZnNldCA9IC0x
ICkgY29uc3Q7CiAgICBpbnQgc2VhcmNoUmV2KCBjb25zdCBRU3RyaW5nJiBzdHIsIGludCBvZmZz
ZXQsIENhcmV0TW9kZSBjYXJldE1vZGUgKSBjb25zdDsKCiAgICBpbnQgbWF0Y2hlZExlbmd0aCgp
IGNvbnN0OwoKICAgIGludCBudW1DYXB0dXJlcygpIGNvbnN0OwogICAgUVN0cmluZ0xpc3QgY2Fw
dHVyZWRUZXh0cygpOwogICAgUVN0cmluZyBjYXAoIGludCBudGggPSAwICk7CiAgICBpbnQgcG9z
KCBpbnQgbnRoID0gMCApOwogICAgUVN0cmluZyBlcnJvclN0cmluZygpOwoKCiAgICBzdGF0aWMg
UVN0cmluZyBlc2NhcGUoIGNvbnN0IFFTdHJpbmcmIHN0ciApOwoKcHJpdmF0ZToKICAgIHZvaWQg
Y29tcGlsZSggYm9vbCBjYXNlU2Vuc2l0aXZlICk7CgogICAgc3RhdGljIGludCBjYXJldEluZGV4
KCBpbnQgb2Zmc2V0LCBDYXJldE1vZGUgY2FyZXRNb2RlICk7CgogICAgUVJlZ0V4cEVuZ2luZSAq
ZW5nOwogICAgUVJlZ0V4cFByaXZhdGUgKnByaXY7Cn07CiMgNDUgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xdmFsaWRhdG9yLmgiIDIKCgoKCgpjbGFzcyBRVmFsaWRhdG9yIDogcHVibGlj
IFFPYmplY3QKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAq
Y2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsg
dmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0
X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlk
LCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFP
YmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRp
Y01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlz
OyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsg
c3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsg
cHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CiAgICBRVmFsaWRh
dG9yKCBRT2JqZWN0ICogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCApOwogICAgflFWYWxp
ZGF0b3IoKTsKCiAgICBlbnVtIFN0YXRlIHsgSW52YWxpZCwgSW50ZXJtZWRpYXRlLCBWYWxpZD1J
bnRlcm1lZGlhdGUsIEFjY2VwdGFibGUgfTsKCiAgICB2aXJ0dWFsIFN0YXRlIHZhbGlkYXRlKCBR
U3RyaW5nICYsIGludCAmICkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIGZpeHVwKCBRU3Ry
aW5nICYgKSBjb25zdDsKCnByaXZhdGU6CgogICAgUVZhbGlkYXRvciggY29uc3QgUVZhbGlkYXRv
ciAmICk7CiAgICBRVmFsaWRhdG9yJiBvcGVyYXRvcj0oIGNvbnN0IFFWYWxpZGF0b3IgJiApOwoK
fTsKCgpjbGFzcyBRSW50VmFsaWRhdG9yIDogcHVibGljIFFWYWxpZGF0b3IKewogICAgcHVibGlj
OiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
TWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZp
cnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9r
ZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3Qq
ICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYp
OyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFW
YXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVj
dCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRy
KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4
KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRh
T2JqZWN0ICptZXRhT2JqOwogICAKICAgCgpwdWJsaWM6CiAgICBRSW50VmFsaWRhdG9yKCBRT2Jq
ZWN0ICogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCApOwogICAgUUludFZhbGlkYXRvcigg
aW50IGJvdHRvbSwgaW50IHRvcCwKICAgICAgICAgICAgICAgICAgIFFPYmplY3QgKiBwYXJlbnQs
IGNvbnN0IGNoYXIgKm5hbWUgPSAwICk7CiAgICB+UUludFZhbGlkYXRvcigpOwoKICAgIFFWYWxp
ZGF0b3I6OlN0YXRlIHZhbGlkYXRlKCBRU3RyaW5nICYsIGludCAmICkgY29uc3Q7CgogICAgdm9p
ZCBzZXRCb3R0b20oIGludCApOwogICAgdm9pZCBzZXRUb3AoIGludCApOwogICAgdmlydHVhbCB2
b2lkIHNldFJhbmdlKCBpbnQgYm90dG9tLCBpbnQgdG9wICk7CgogICAgaW50IGJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIGI7IH0KICAgIGludCB0b3AoKSBjb25zdCB7IHJldHVybiB0OyB9Cgpwcml2
YXRlOgoKICAgIFFJbnRWYWxpZGF0b3IoIGNvbnN0IFFJbnRWYWxpZGF0b3IgJiApOwogICAgUUlu
dFZhbGlkYXRvciYgb3BlcmF0b3I9KCBjb25zdCBRSW50VmFsaWRhdG9yICYgKTsKCgogICAgaW50
IGIsIHQ7Cn07CgoKCmNsYXNzIFFEb3VibGVWYWxpZGF0b3IgOiBwdWJsaWMgUVZhbGlkYXRvcgp7
CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUo
KSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJv
b2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50
LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBR
VmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBp
bnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVj
dCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGlj
IFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0
cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBz
dGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRRG91
YmxlVmFsaWRhdG9yKCBRT2JqZWN0ICogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCApOwog
ICAgUURvdWJsZVZhbGlkYXRvciggZG91YmxlIGJvdHRvbSwgZG91YmxlIHRvcCwgaW50IGRlY2lt
YWxzLAogICAgICAgICAgICAgICAgICAgICAgUU9iamVjdCAqIHBhcmVudCwgY29uc3QgY2hhciAq
bmFtZSA9IDAgKTsKICAgIH5RRG91YmxlVmFsaWRhdG9yKCk7CgogICAgUVZhbGlkYXRvcjo6U3Rh
dGUgdmFsaWRhdGUoIFFTdHJpbmcgJiwgaW50ICYgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFuZ2UoIGRvdWJsZSBib3R0b20sIGRvdWJsZSB0b3AsIGludCBkZWNpbWFscyA9IDAgKTsK
ICAgIHZvaWQgc2V0Qm90dG9tKCBkb3VibGUgKTsKICAgIHZvaWQgc2V0VG9wKCBkb3VibGUgKTsK
ICAgIHZvaWQgc2V0RGVjaW1hbHMoIGludCApOwoKICAgIGRvdWJsZSBib3R0b20oKSBjb25zdCB7
IHJldHVybiBiOyB9CiAgICBkb3VibGUgdG9wKCkgY29uc3QgeyByZXR1cm4gdDsgfQogICAgaW50
IGRlY2ltYWxzKCkgY29uc3QgeyByZXR1cm4gZDsgfQoKcHJpdmF0ZToKCiAgICBRRG91YmxlVmFs
aWRhdG9yKCBjb25zdCBRRG91YmxlVmFsaWRhdG9yICYgKTsKICAgIFFEb3VibGVWYWxpZGF0b3Im
IG9wZXJhdG9yPSggY29uc3QgUURvdWJsZVZhbGlkYXRvciAmICk7CgoKICAgIGRvdWJsZSBiLCB0
OwogICAgaW50IGQ7Cn07CgoKY2xhc3MgUVJlZ0V4cFZhbGlkYXRvciA6IHB1YmxpYyBRVmFsaWRh
dG9yCnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNz
TmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1
YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0
KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50
IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0
KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRh
T2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBz
dGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRp
YyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZh
dGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKCgpwdWJsaWM6CiAgICBRUmVnRXhwVmFs
aWRhdG9yKCBRT2JqZWN0ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUgPSAwICk7CiAgICBRUmVn
RXhwVmFsaWRhdG9yKCBjb25zdCBRUmVnRXhwJiByeCwgUU9iamVjdCAqcGFyZW50LAogICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAgKTsKICAgIH5RUmVnRXhwVmFsaWRh
dG9yKCk7CgogICAgdmlydHVhbCBRVmFsaWRhdG9yOjpTdGF0ZSB2YWxpZGF0ZSggUVN0cmluZyYg
aW5wdXQsIGludCYgcG9zICkgY29uc3Q7CgogICAgdm9pZCBzZXRSZWdFeHAoIGNvbnN0IFFSZWdF
eHAmIHJ4ICk7CiAgICBjb25zdCBRUmVnRXhwJiByZWdFeHAoKSBjb25zdCB7IHJldHVybiByOyB9
Cgpwcml2YXRlOgoKICAgIFFSZWdFeHBWYWxpZGF0b3IoIGNvbnN0IFFSZWdFeHBWYWxpZGF0b3Im
ICk7CiAgICBRUmVnRXhwVmFsaWRhdG9yJiBvcGVyYXRvcj0oIGNvbnN0IFFSZWdFeHBWYWxpZGF0
b3ImICk7CgoKICAgIFFSZWdFeHAgcjsKfTsKIyAyMiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w
cm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVBhcmFtVGFibGVJdGVtLmgiIDIKIyAzMyAi
L2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVBh
cmFtVGFibGVJdGVtLmgiCmNsYXNzIFR4cVBhcmFtVGFibGVJdGVtOiBwdWJsaWMgVHhxVGFibGVJ
dGVtCnsKcHVibGljOgojIDQ2ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9x
c2NpbXBsL2luY2x1ZGUvVHhxUGFyYW1UYWJsZUl0ZW0uaCIKICAgVHhxUGFyYW1UYWJsZUl0ZW0o
IFFUYWJsZSAqdCwgRWRpdFR5cGUgZSAsIFR4QXR0cmlidXRlU2V0ICphLAogICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUVN0cmluZyBzLCBjb25zdCBRVmFyaWFudCAmdiwgaW50IHIpOwoKCgoK
ICB2aXJ0dWFsIH5UeHFQYXJhbVRhYmxlSXRlbSgpIHt9CgoKCgoKICAgUVdpZGdldCAqY3JlYXRl
RWRpdG9yKCkgY29uc3Q7CgoKCgoKICAgdm9pZCBzZXRDb250ZW50RnJvbUVkaXRvciggUVdpZGdl
dCAqdyApOwoKCgoKCiAgIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyAmbmV3VGV4dCApOwoK
CgoKCiAgdmlydHVhbCB2b2lkIHNldEF0dHJpYlZhbHVlKCk7Cgpwcm90ZWN0ZWQ6CgoKCgoKICB2
aXJ0dWFsIHZvaWQgc2V0QXR0cmliVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcgbmFtZSwgY29uc3Qg
ZG91YmxlIHZhbHVlKTsKCnByaXZhdGU6CgoKCgoKICAgUUd1YXJkZWRQdHI8UUxpbmVFZGl0PiBk
TGluZUVkaXQ7Cgp9OwojIDI5ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9x
c2NpbXBsL2luY2x1ZGUvVHhxRWRpdFRhYmxlLmgiIDIKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWls
bGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxUGFyYW1WZWNUYWJsZUl0ZW0uaCIg
MQojIDI3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1
ZGUvVHhxUGFyYW1WZWNUYWJsZUl0ZW0uaCIKY2xhc3MgVHhxUGFyYW1WZWNUYWJsZUl0ZW06IHB1
YmxpYyBUeHFQYXJhbVRhYmxlSXRlbQp7CnB1YmxpYzoKIyA0MyAiL2hvbWUvcmVzZWFyY2gvYm1p
bGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVBhcmFtVmVjVGFibGVJdGVtLmgi
CiAgIFR4cVBhcmFtVmVjVGFibGVJdGVtKCBRVGFibGUgKnQsIEVkaXRUeXBlIGUgLCBUeEF0dHJp
YnV0ZVNldCAqYSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgcywgY29uc3Qg
UVZhcmlhbnQgJnYsIGludCByLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyBu
bSwgY29uc3QgaW50IGluZGV4KTsKCgoKCiAgdmlydHVhbCB+VHhxUGFyYW1WZWNUYWJsZUl0ZW0o
KSB7fQoKcHJvdGVjdGVkOgoKCgoKCiAgdmlydHVhbCB2b2lkIHNldEF0dHJpYlZhbHVlKGNvbnN0
IHN0ZDo6c3RyaW5nIG5hbWUsIGNvbnN0IGRvdWJsZSB2YWx1ZSk7Cgpwcml2YXRlOgoKCgoKICBp
bnQgYXR0cmliSW5kZXg7Cgp9OwojIDMwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz
LzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxRWRpdFRhYmxlLmgiIDIKIyAxICIvaG9tZS9yZXNlYXJj
aC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxUHJtVmVjVGFibGVJdGVt
LmgiIDEKIyAyNiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9p
bmNsdWRlL1R4cVBybVZlY1RhYmxlSXRlbS5oIgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIv
cHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFFZGl0VGFibGUuaCIgMQojIDI3ICIvaG9t
ZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxUHJtVmVj
VGFibGVJdGVtLmgiIDIKCgoKCgpjbGFzcyBUeHFQcm1WZWNUYWJsZUl0ZW06IHB1YmxpYyBUeHFU
YWJsZUl0ZW0KewogIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNs
YXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZp
cnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9l
bWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwg
aW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2Jq
ZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNN
ZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsg
fSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0
YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHBy
aXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgojIDQ2ICIvaG9tZS9y
ZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxUHJtVmVjVGFi
bGVJdGVtLmgiCiAgIFR4cVBybVZlY1RhYmxlSXRlbSggUVRhYmxlICp0LCBFZGl0VHlwZSBlICwg
VHhBdHRyaWJ1dGVTZXQgKmEsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nIHMs
IGNvbnN0IHN0ZDo6dmVjdG9yPGRvdWJsZT4gJnYsIGludCByKTsKCgoKCiAgdmlydHVhbCB+VHhx
UHJtVmVjVGFibGVJdGVtKCkge30KCnByb3RlY3RlZDoKCgoKCiAgdmlydHVhbCB2b2lkIGNyZWF0
ZUFjdGlvbk1hcHMoKTsKCgoKCiAgdmlydHVhbCBpbnQgZ2V0VmVjU2l6ZSgpIHtyZXR1cm4gKGlu
dCl2YWx1ZXMuc2l6ZSgpO30KCgoKCgoKICB2aXJ0dWFsIGJvb2wgY2hlY2tMYWJlbChpbnQgc2Vj
dGlvbik7CgoKCgoKCiAgdmlydHVhbCB2b2lkIGFkZFN1Ykl0ZW0oaW50IGluZGV4LCBpbnQgcm93
KTsKCnByb3RlY3RlZCA6Cgpwcml2YXRlOgoKCgoKICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHZhbHVl
czsKCn07CiMgMzEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwv
aW5jbHVkZS9UeHFFZGl0VGFibGUuaCIgMgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJv
amVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRpb25UYWJsZUl0ZW0uaCIgMQojIDIwICIv
aG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxT3B0
aW9uVGFibGVJdGVtLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FzcGluYm94
LmgiIDEKIyA0OCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FzcGluYm94LmgiCmNsYXNz
IFFMaW5lRWRpdDsKY2xhc3MgUVZhbGlkYXRvcjsKY2xhc3MgUVNwaW5Cb3hQcml2YXRlOwoKY2xh
c3MgUVNwaW5Cb3g6IHB1YmxpYyBRV2lkZ2V0LCBwdWJsaWMgUVJhbmdlQ29udHJvbAp7CiAgICBw
dWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25z
dDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRf
aW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9i
amVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFu
dCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGlu
dCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBR
T2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJp
bmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0
clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMg
UU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAg
CiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRU3BpbkJveCggUVdpZGdldCogcGFyZW50PTAsIGNv
bnN0IGNoYXIqIG5hbWU9MCApOwogICAgUVNwaW5Cb3goIGludCBtaW5WYWx1ZSwgaW50IG1heFZh
bHVlLCBpbnQgc3RlcCA9IDEsCiAgICAgICAgICAgICAgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0
IGNoYXIqIG5hbWU9MCApOwogICAgflFTcGluQm94KCk7CgogICAgUVN0cmluZyB0ZXh0KCkgY29u
c3Q7CgogICAgdmlydHVhbCBRU3RyaW5nIHByZWZpeCgpIGNvbnN0OwogICAgdmlydHVhbCBRU3Ry
aW5nIHN1ZmZpeCgpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGNsZWFuVGV4dCgpIGNvbnN0
OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRTcGVjaWFsVmFsdWVUZXh0KCBjb25zdCBRU3RyaW5nICZ0
ZXh0ICk7CiAgICBRU3RyaW5nIHNwZWNpYWxWYWx1ZVRleHQoKSBjb25zdDsKCiAgICB2aXJ0dWFs
IHZvaWQgc2V0V3JhcHBpbmcoIGJvb2wgb24gKTsKICAgIGJvb2wgd3JhcHBpbmcoKSBjb25zdDsK
CiAgICBlbnVtIEJ1dHRvblN5bWJvbHMgeyBVcERvd25BcnJvd3MsIFBsdXNNaW51cyB9OwogICAg
dmlydHVhbCB2b2lkIHNldEJ1dHRvblN5bWJvbHMoIEJ1dHRvblN5bWJvbHMgKTsKICAgIEJ1dHRv
blN5bWJvbHMgYnV0dG9uU3ltYm9scygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRWYWxp
ZGF0b3IoIGNvbnN0IFFWYWxpZGF0b3IqIHYgKTsKICAgIGNvbnN0IFFWYWxpZGF0b3IgKiB2YWxp
ZGF0b3IoKSBjb25zdDsKCiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNpemUgbWlu
aW11bVNpemVIaW50KCkgY29uc3Q7CgogICAgaW50IG1pblZhbHVlKCkgY29uc3Q7CiAgICBpbnQg
bWF4VmFsdWUoKSBjb25zdDsKICAgIHZvaWQgc2V0TWluVmFsdWUoIGludCApOwogICAgdm9pZCBz
ZXRNYXhWYWx1ZSggaW50ICk7CiAgICBpbnQgbGluZVN0ZXAoKSBjb25zdDsKICAgIHZvaWQgc2V0
TGluZVN0ZXAoIGludCApOwogICAgaW50IHZhbHVlKCkgY29uc3Q7CgogICAgUVJlY3QgdXBSZWN0
KCkgY29uc3Q7CiAgICBRUmVjdCBkb3duUmVjdCgpIGNvbnN0OwoKcHVibGljIDoKICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZSggaW50IHZhbHVlICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4
KCBjb25zdCBRU3RyaW5nICZ0ZXh0ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U3VmZml4KCBjb25z
dCBRU3RyaW5nICZ0ZXh0ICk7CiAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwKCk7CiAgICB2aXJ0dWFs
IHZvaWQgc3RlcERvd24oKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKCBib29sIGVuYWJs
ZWQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RBbGwoKTsKCnByb3RlY3RlZDoKICAgIHZvaWQg
dmFsdWVDaGFuZ2VkKCBpbnQgdmFsdWUgKTsKICAgIHZvaWQgdmFsdWVDaGFuZ2VkKCBjb25zdCBR
U3RyaW5nICZ2YWx1ZVRleHQgKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgUVN0cmluZyBtYXBW
YWx1ZVRvVGV4dCggaW50IHZhbHVlICk7CiAgICB2aXJ0dWFsIGludCBtYXBUZXh0VG9WYWx1ZSgg
Ym9vbCogb2sgKTsKICAgIFFTdHJpbmcgY3VycmVudFZhbHVlVGV4dCgpOwoKICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVEaXNwbGF5KCk7CiAgICB2aXJ0dWFsIHZvaWQgaW50ZXJwcmV0VGV4dCgpOwoK
ICAgIFFMaW5lRWRpdCogZWRpdG9yKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hh
bmdlKCk7CiAgICB2aXJ0dWFsIHZvaWQgcmFuZ2VDaGFuZ2UoKTsKCiAgICBib29sIGV2ZW50Rmls
dGVyKCBRT2JqZWN0KiBvYmosIFFFdmVudCogZXYgKTsKICAgIHZvaWQgcmVzaXplRXZlbnQoIFFS
ZXNpemVFdmVudCogZXYgKTsKCiAgICB2b2lkIHdoZWVsRXZlbnQoIFFXaGVlbEV2ZW50ICogKTsK
CiAgICB2b2lkIGxlYXZlRXZlbnQoIFFFdmVudCogKTsKCiAgICB2b2lkIHN0eWxlQ2hhbmdlKCBR
U3R5bGUmICk7Cgpwcm90ZWN0ZWQgOgogICAgdm9pZCB0ZXh0Q2hhbmdlZCgpOwoKcHJpdmF0ZToK
ICAgIHZvaWQgaW5pdFNwaW5Cb3goKTsKICAgIFFTcGluQm94UHJpdmF0ZSogZDsKICAgIFFMaW5l
RWRpdCogdmk7CiAgICBRVmFsaWRhdG9yKiB2YWxpZGF0ZTsKICAgIFFTdHJpbmcgcGZpeDsKICAg
IFFTdHJpbmcgc2ZpeDsKICAgIFFTdHJpbmcgc3BlY1RleHQ7CgogICAgdWludCB3cmFwIDogMTsK
ICAgIHVpbnQgZWRpdGVkIDogMTsKCiAgICB2b2lkIGFycmFuZ2VXaWRnZXRzKCk7Cgpwcml2YXRl
OgoKICAgIFFTcGluQm94KCBjb25zdCBRU3BpbkJveCYgKTsKICAgIFFTcGluQm94JiBvcGVyYXRv
cj0oIGNvbnN0IFFTcGluQm94JiApOwoKCn07CiMgMjEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIv
cHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRpb25UYWJsZUl0ZW0uaCIgMgojIDMz
ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhx
T3B0aW9uVGFibGVJdGVtLmgiCmNsYXNzIFR4cU9wdGlvblRhYmxlSXRlbTogcHVibGljIFR4cVRh
YmxlSXRlbQp7CnB1YmxpYzoKIyA0NiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8z
LjIvcXNjaW1wbC9pbmNsdWRlL1R4cU9wdGlvblRhYmxlSXRlbS5oIgogICBUeHFPcHRpb25UYWJs
ZUl0ZW0oIFFUYWJsZSAqdCwgRWRpdFR5cGUgZSAsIFR4QXR0cmlidXRlU2V0ICphLCBjb25zdCBR
U3RyaW5nIHMsIGNvbnN0IFFWYXJpYW50ICZ2LCBpbnQgcik7CgoKCgogICB2aXJ0dWFsIH5UeHFP
cHRpb25UYWJsZUl0ZW0oKSB7fQoKCgoKICAgUVdpZGdldCAqY3JlYXRlRWRpdG9yKCkgY29uc3Q7
CgoKCgoKICAgdm9pZCBzZXRDb250ZW50RnJvbUVkaXRvciggUVdpZGdldCAqdyApOwoKCgoKCiAg
IHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyAmbmV3VGV4dCApOwoKCgoKCiAgdmlydHVhbCB2
b2lkIHNldEF0dHJpYlZhbHVlKCk7Cgpwcm90ZWN0ZWQ6CgoKCgoKCiAgdmlydHVhbCB2b2lkIHNl
dEF0dHJpYlZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWUsIGNvbnN0IGludCB2YWx1ZSk7Cgpw
cml2YXRlOgoKCgoKICAgUUd1YXJkZWRQdHI8UVNwaW5Cb3g+IHNwaW5Cb3g7CgoKfTsKIyAzMiAi
L2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cUVk
aXRUYWJsZS5oIiAyCiMgMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNj
aW1wbC9pbmNsdWRlL1R4cU9wdGlvblZlY1RhYmxlSXRlbS5oIiAxCiMgMjcgIi9ob21lL3Jlc2Vh
cmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRpb25WZWNUYWJs
ZUl0ZW0uaCIKY2xhc3MgVHhxT3B0aW9uVmVjVGFibGVJdGVtOiBwdWJsaWMgVHhxT3B0aW9uVGFi
bGVJdGVtCnsKcHVibGljOgojIDQzICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMu
Mi9xc2NpbXBsL2luY2x1ZGUvVHhxT3B0aW9uVmVjVGFibGVJdGVtLmgiCiAgIFR4cU9wdGlvblZl
Y1RhYmxlSXRlbSggUVRhYmxlICp0LCBFZGl0VHlwZSBlICwgVHhBdHRyaWJ1dGVTZXQgKmEsCiAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nIHMsIGNvbnN0IFFWYXJpYW50ICZ2LCBp
bnQgciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgbm0sIGNvbnN0IGludCBp
bmRleCk7CgoKCgogIHZpcnR1YWwgflR4cU9wdGlvblZlY1RhYmxlSXRlbSgpIHt9Cgpwcm90ZWN0
ZWQ6CgoKCgoKICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmliVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcg
bmFtZSwgY29uc3QgaW50IHZhbHVlKTsKCnByaXZhdGU6CgoKCgogIGludCBhdHRyaWJJbmRleDsK
Cn07CiMgMzMgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5j
bHVkZS9UeHFFZGl0VGFibGUuaCIgMgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVj
dHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRWZWNUYWJsZUl0ZW0uaCIgMQojIDM0ICIvaG9t
ZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxT3B0VmVj
VGFibGVJdGVtLmgiCmNsYXNzIFR4cU9wdFZlY1RhYmxlSXRlbTogcHVibGljIFR4cVRhYmxlSXRl
bQp7CiAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1l
KCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBi
b29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGlu
dCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwg
UVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwg
aW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmpl
Y3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRp
YyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFT
dHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTog
c3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CiMgNDggIi9ob21lL3Jlc2VhcmNo
L2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRWZWNUYWJsZUl0ZW0u
aCIKICAgVHhxT3B0VmVjVGFibGVJdGVtKCBRVGFibGUgKnQsIEVkaXRUeXBlIGUgLCBUeEF0dHJp
YnV0ZVNldCAqYSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgcywgY29uc3Qg
c3RkOjp2ZWN0b3I8aW50PiAmdiwgaW50IHIpOwoKCgoKICB2aXJ0dWFsIH5UeHFPcHRWZWNUYWJs
ZUl0ZW0oKSB7fQoKcHJvdGVjdGVkOgoKCgoKICB2aXJ0dWFsIHZvaWQgY3JlYXRlQWN0aW9uTWFw
cygpOwoKCgoKICB2aXJ0dWFsIGludCBnZXRWZWNTaXplKCkge3JldHVybiAoaW50KXZhbHVlcy5z
aXplKCk7fQoKCgoKCgogIHZpcnR1YWwgYm9vbCBjaGVja0xhYmVsKGludCBzZWN0aW9uKTsKCgoK
CgoKICB2aXJ0dWFsIHZvaWQgYWRkU3ViSXRlbShpbnQgaW5kZXgsIGludCByb3cpOwoKcHJvdGVj
dGVkIDoKCnByaXZhdGU6CgoKCiAgc3RkOjp2ZWN0b3I8aW50PiB2YWx1ZXM7Cgp9OwojIDM0ICIv
aG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxRWRp
dFRhYmxlLmgiIDIKIyA0OSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNj
aW1wbC9pbmNsdWRlL1R4cUVkaXRUYWJsZS5oIgpjbGFzcyBUeHFFZGl0VGFibGU6IHB1YmxpYyBR
VGFibGUKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xh
c3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmly
dHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2Vt
aXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBp
bnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmpl
Y3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01l
dGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9
IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3Rh
dGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJp
dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwoKcHVibGljOgoKCgoKCgogICBUeHFF
ZGl0VGFibGUoIFFXaWRnZXQgKiBwYXJlbnQgPSAwLCBjb25zdCBjaGFyICogbmFtZSA9IDAgKTsK
CgoKCgoKCiAgIHZvaWQgc2V0QXR0cmlidXRlKFR4QXR0cmlidXRlU2V0ICphKTsKCgoKCgoKCiAg
IHZvaWQgc2V0QXR0cmlidXRlRmlsdGVyKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmZm4pOwoK
CgoKCgoKICAgdm9pZCBhZGRTdHJpbmdJdGVtKGNvbnN0IFFTdHJpbmcgbmFtZSwgY29uc3QgUVN0
cmluZyB2YWx1ZSwgY29uc3QgaW50IHJvdyk7CgoKCgoKCgogICB2b2lkIGFkZE9wdGlvbkl0ZW0o
Y29uc3QgUVN0cmluZyBuYW1lLCBjb25zdCBpbnQgdmFsdWUsIGNvbnN0IGludCByb3cpOwojIDEw
MyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4
cUVkaXRUYWJsZS5oIgogICB2b2lkIGFkZE9wdGlvblZlY0l0ZW0oY29uc3QgUVN0cmluZyBuYW1l
LCBjb25zdCBpbnQgdmFsdWUsIGNvbnN0IGludCByb3csCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFTdHJpbmcgYXR0cmliTmFtZSwgY29uc3QgaW50IGluZGV4KTsKCgoKCgoKCiAgIHZv
aWQgYWRkUGFyYW1JdGVtKGNvbnN0IFFTdHJpbmcgbmFtZSwgY29uc3QgZG91YmxlIHZhbHVlLCBj
b25zdCBpbnQgcm93KTsKIyAxMjMgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4y
L3FzY2ltcGwvaW5jbHVkZS9UeHFFZGl0VGFibGUuaCIKICAgdm9pZCBhZGRQYXJhbVZlY0l0ZW0o
Y29uc3QgUVN0cmluZyBuYW1lLCBjb25zdCBkb3VibGUgdmFsdWUsIGNvbnN0IGludCByb3csCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgYXR0cmliTmFtZSwgY29uc3QgaW50
IGluZGV4KTsKIyAxMzMgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2lt
cGwvaW5jbHVkZS9UeHFFZGl0VGFibGUuaCIKICAgdm9pZCBhZGRPcHRWZWNJdGVtKGNvbnN0IFFT
dHJpbmcgbmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiAmdmFsdWUsIGNvbnN0IGludCByb3cp
OwoKCgoKCgoKICAgdm9pZCBhZGRQcm1WZWNJdGVtKGNvbnN0IFFTdHJpbmcgbmFtZSwgY29uc3Qg
c3RkOjp2ZWN0b3I8ZG91YmxlPiAmdmFsdWUsIGNvbnN0IGludCByb3cpOwoKCgoKCgogICB2b2lk
IGhpZGVSb3dzKGNvbnN0IGludCBiZWdpbiwgY29uc3QgaW50IHNpemUpOwoKCgoKCgoKICAgdm9p
ZCBzaG93Um93cyhjb25zdCBpbnQgYmVnaW4sIGNvbnN0IGludCBzaXplLCBjb25zdCBpbnQgcmgp
OwoKCgoKICAgdm9pZCBoaWRlSGVhZGVyKCk7CgoKCgogIHZvaWQgc2hvd0hlYWRlcigpOwoKcHVi
bGljIDoKCgpwcml2YXRlIDoKCnByb3RlY3RlZDoKCgoKCgogICB2b2lkIHJlc2l6ZUV2ZW50KCBR
UmVzaXplRXZlbnQgKmUgKTsKCgoKCiAgIHZvaWQgdXBkYXRlTnVtUm93cygpOwoKCgoKICAgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbHRlck5hbWVzOwoKcHJpdmF0ZToKCgoKCiAgVHhBdHRy
aWJ1dGVTZXQgKmF0dHJpYjsKCgoKCiAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGF0dHJpYk5h
bWVzOwoKfTsKIyAxNyAiVHhWb3JwYWxHVUkuaCIgMgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxs
ZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGllckF0dHJpYlNldC5oIiAxCiMgMzUg
Ii9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGll
ckF0dHJpYlNldC5oIgpjbGFzcyBUeEhpZXJBdHRyaWJTZXQgOiBwdWJsaWMgVHhBdHRyaWJ1dGVT
ZXQgewoKICBwdWJsaWM6CgoKCiAgICBUeEhpZXJBdHRyaWJTZXQoKTsKCgoKCgoKICAgIFR4SGll
ckF0dHJpYlNldChzdGQ6OnN0cmluZyBzKTsKCgoKCgoKICAgIFR4SGllckF0dHJpYlNldChjb25z
dCBUeEhpZXJBdHRyaWJTZXQmIHRoYSk7CgoKCgoKICAgIFR4SGllckF0dHJpYlNldChjb25zdCBU
eEF0dHJpYnV0ZVNldCYgdHApIDogVHhBdHRyaWJ1dGVTZXQodHApeyBzZXR1cCgpOyB9CgoKCgog
ICAgdmlydHVhbCB+VHhIaWVyQXR0cmliU2V0KCk7CgoKCgoKCiAgICBUeEhpZXJBdHRyaWJTZXQm
IG9wZXJhdG9yPShjb25zdCBUeEhpZXJBdHRyaWJTZXQmKTsKCgoKCgogICAgVHhIaWVyQXR0cmli
U2V0JiBvcGVyYXRvcj0oY29uc3QgVHhBdHRyaWJ1dGVTZXQmIHRwKXsKICBUeEF0dHJpYnV0ZVNl
dDo6b3BlcmF0b3I9KHRwKTsKICByZXR1cm4gKnRoaXM7fQoKCgoKCgoKICAgIHZpcnR1YWwgc3Rk
OjpzdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIlR4SGllckF0dHJpYlNldCI7
fQojIDk4ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVk
ZS9UeEhpZXJBdHRyaWJTZXQuaCIKICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZ2V0QmFzZUNsYXNz
KCkgY29uc3QgeyByZXR1cm4gIlR4SGllckF0dHJpYlNldCI7fQojIDExMSAiL2hvbWUvcmVzZWFy
Y2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhIaWVyQXR0cmliU2V0Lmgi
CiAgICBib29sIGhhc0F0dHJpYihzdGQ6OnN0cmluZyBhdHRyaWJOYW1lKSBjb25zdDsKIyAxMjAg
Ii9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGll
ckF0dHJpYlNldC5oIgogICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGdldE5hbWVzT2ZUeXBl
KHN0ZDo6c3RyaW5nIHR5cGUpIGNvbnN0OwoKCgoKCgogICAgdmlydHVhbCB2b2lkIHNldEF0dHJp
Yihjb25zdCBUeEhpZXJBdHRyaWJTZXQmIHZhbHVlKTsKIyAxMzYgIi9ob21lL3Jlc2VhcmNoL2Jt
aWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGllckF0dHJpYlNldC5oIgogICAg
VHhIaWVyQXR0cmliU2V0IGdldEF0dHJpYihzdGQ6OnN0cmluZyBhdHRyaWJOYW1lKSBjb25zdAog
IHRocm93KFR4RGVidWdFeGNlcHQpOwojIDE0NiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q
ZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhIaWVyQXR0cmliU2V0LmgiCiAgICBpbnQgZ2V0QXR0
cmliSW5kZXgoc3RkOjpzdHJpbmcgYXR0cmliTmFtZSkgY29uc3Q7CiMgMTU1ICIvaG9tZS9yZXNl
YXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEhpZXJBdHRyaWJTZXQu
aCIKICAgIGJvb2wgYXBwZW5kQXR0cmliKGNvbnN0IFR4SGllckF0dHJpYlNldCYgdmFsdWUpIHsK
ICAgICAgaWYocHVibGljUmVzaGFwZSkgcmV0dXJuIGFwcGVuZEF0dHJpYk5vQ2hrKHZhbHVlKTsK
ICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICB9CgoKCgoKCiAgICBpbnQgZ2V0TnVtQXR0cmli
cygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnMuc2l6ZSgpO30KCgoKCiAgICB2b2lkIHNldFRvRmly
c3RBdHRyaWIoKSBjb25zdCB7IGF0dHJpYkl0ZXIgPSBhdHRyaWJJbmRpY2VzLT5iZWdpbigpO30K
CgoKCgogICAgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBUeEhpZXJBdHRyaWJTZXQ+IGdldEN1cnJl
bnRBdHRyaWJBbmRCdW1wKCkKICBjb25zdDsKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZShz
dGQ6Om9zdHJlYW0mIG9zdHIsIGJvb2wgZHVtcD10cnVlKSBjb25zdDsKIyAxOTMgIi9ob21lL3Jl
c2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGllckF0dHJpYlNl
dC5oIgogICAgdmlydHVhbCBzdGQ6OnN0cmluZyByZWFkVHlwZShzdGQ6OmlzdHJlYW0mIGlzdHIs
CiAgY29uc3Qgc3RkOjpzdHJpbmcmIHR5cGUpOwoKICBwcm90ZWN0ZWQ6CgoKCgoKICAgICAgdmly
dHVhbCB2b2lkIGVtcHR5Tm9DaGsoKTsKCgoKCiAgICBib29sIGFwcGVuZEF0dHJpYk5vQ2hrKGNv
bnN0IFR4SGllckF0dHJpYlNldCYgdmFsdWUpOwoKCgoKCgogICAgc3RkOjptYXA8IHN0ZDo6c3Ry
aW5nLCBpbnQsIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPioKICBhdHRyaWJJbmRpY2VzOwoKCgoK
ICAgIGJvb2wgYXR0cmliSW5kaWNlc093bmVyOwoKCgogICAgc3RkOjp2ZWN0b3I8VHhIaWVyQXR0
cmliU2V0Kj4gYXR0cmliczsKCgoKCiAgICBtdXRhYmxlIHN0ZDo6bWFwPCBzdGQ6OnN0cmluZywg
aW50LAogIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPjo6aXRlcmF0b3IgYXR0cmliSXRlcjsKCiAg
cHJpdmF0ZToKCgoKICAgIHZvaWQgc2V0dXAoKTsKCn07CgoKaW5saW5lIHN0ZDo6b3N0cmVhbSYg
b3BlcmF0b3I8PCAoc3RkOjpvc3RyZWFtJiBvc3RyLCBjb25zdCBUeEhpZXJBdHRyaWJTZXQmIHR4
cCl7CiAgdHhwLndyaXRlKG9zdHIpOwogIHJldHVybiBvc3RyOwp9CgppbmxpbmUgc3RkOjppc3Ry
ZWFtJiBvcGVyYXRvcj4+IChzdGQ6OmlzdHJlYW0mIGlzdHIsIFR4SGllckF0dHJpYlNldCYgdHhw
KXsKCiAgdHhwLnJlYWQoaXN0cik7CiAgcmV0dXJuIGlzdHI7Cn0KIyAxOCAiVHhWb3JwYWxHVUku
aCIgMgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWFpbndpbmRvdy5oIiAxCiMg
NDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWFpbndpbmRvdy5oIgojIDEgIi91c3Iv
bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdG9vbGJhci5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQt
My4xLjEvaW5jbHVkZS9xdG9vbGJhci5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVk
ZS9xZG9ja3dpbmRvdy5oIiAxCiMgNDcgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZG9j
a3dpbmRvdy5oIgpjbGFzcyBRRG9ja1dpbmRvd0hhbmRsZTsKY2xhc3MgUURvY2tXaW5kb3dUaXRs
ZUJhcjsKY2xhc3MgUVBhaW50ZXI7CmNsYXNzIFFEb2NrV2luZG93UmVzaXplSGFuZGxlOwpjbGFz
cyBRQm94TGF5b3V0OwpjbGFzcyBRSEJveExheW91dDsKY2xhc3MgUVZCb3hMYXlvdXQ7CmNsYXNz
IFFEb2NrQXJlYTsKY2xhc3MgUVdpZGdldFJlc2l6ZUhhbmRsZXI7CmNsYXNzIFFNYWluV2luZG93
OwpjbGFzcyBRRG9ja0FyZWFMYXlvdXQ7CmNsYXNzIFFEb2NrV2luZG93UHJpdmF0ZTsKCmNsYXNz
IFFEb2NrV2luZG93IDogcHVibGljIFFGcmFtZQp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFP
YmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0g
dmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9j
YXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0
KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29s
IHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0
X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRp
YyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyBy
ZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7
CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCiAgICBmcmllbmQg
Y2xhc3MgUURvY2tXaW5kb3dIYW5kbGU7CiAgICBmcmllbmQgY2xhc3MgUURvY2tXaW5kb3dUaXRs
ZUJhcjsKICAgIGZyaWVuZCBjbGFzcyBRRG9ja0FyZWE7CiAgICBmcmllbmQgY2xhc3MgUURvY2tB
cmVhTGF5b3V0OwogICAgZnJpZW5kIGNsYXNzIFFNYWluV2luZG93OwoKcHVibGljOgogICAgZW51
bSBQbGFjZSB7IEluRG9jaywgT3V0c2lkZURvY2sgfTsKICAgIGVudW0gQ2xvc2VNb2RlIHsgTmV2
ZXIgPSAwLCBEb2NrZWQgPSAxLCBVbmRvY2tlZCA9IDIsIEFsd2F5cyA9IERvY2tlZCB8IFVuZG9j
a2VkIH07CgogICAgUURvY2tXaW5kb3coIFBsYWNlIHAgPSBJbkRvY2ssIFFXaWRnZXQqIHBhcmVu
dD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmID0gMCApOwogICAgUURvY2tXaW5kb3co
IFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3MgZiA9IDAgKTsKICAg
IH5RRG9ja1dpbmRvdygpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRXaWRnZXQoIFFXaWRnZXQgKncg
KTsKICAgIFFXaWRnZXQgKndpZGdldCgpIGNvbnN0OwoKICAgIFBsYWNlIHBsYWNlKCkgY29uc3Qg
eyByZXR1cm4gY3VyUGxhY2U7IH0KCiAgICBRRG9ja0FyZWEgKmFyZWEoKSBjb25zdDsKCiAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2xvc2VNb2RlKCBpbnQgbSApOwogICAgYm9vbCBpc0Nsb3NlRW5hYmxl
ZCgpIGNvbnN0OwogICAgaW50IGNsb3NlTW9kZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBz
ZXRSZXNpemVFbmFibGVkKCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNb3ZpbmdFbmFi
bGVkKCBib29sIGIgKTsKICAgIGJvb2wgaXNSZXNpemVFbmFibGVkKCkgY29uc3Q7CiAgICBib29s
IGlzTW92aW5nRW5hYmxlZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRIb3Jpem9udGFs
bHlTdHJldGNoYWJsZSggYm9vbCBiICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0VmVydGljYWxseVN0
cmV0Y2hhYmxlKCBib29sIGIgKTsKICAgIGJvb2wgaXNIb3Jpem9udGFsbHlTdHJldGNoYWJsZSgp
IGNvbnN0OwogICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJldGNoYWJsZSgpIGNvbnN0OwogICAgdm9p
ZCBzZXRIb3Jpem9udGFsU3RyZXRjaGFibGUoIGJvb2wgYiApIHsgc2V0SG9yaXpvbnRhbGx5U3Ry
ZXRjaGFibGUoIGIgKTsgfQogICAgdm9pZCBzZXRWZXJ0aWNhbFN0cmV0Y2hhYmxlKCBib29sIGIg
KSB7IHNldFZlcnRpY2FsbHlTdHJldGNoYWJsZSggYiApOyB9CiAgICBib29sIGlzSG9yaXpvbnRh
bFN0cmV0Y2hhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsbHlTdHJldGNoYWJsZSgp
OyB9CiAgICBib29sIGlzVmVydGljYWxTdHJldGNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzVmVy
dGljYWxseVN0cmV0Y2hhYmxlKCk7IH0KICAgIGJvb2wgaXNTdHJldGNoYWJsZSgpIGNvbnN0OwoK
ICAgIHZpcnR1YWwgdm9pZCBzZXRPZmZzZXQoIGludCBvICk7CiAgICBpbnQgb2Zmc2V0KCkgY29u
c3Q7CgogICAgdmlydHVhbCB2b2lkIHNldEZpeGVkRXh0ZW50V2lkdGgoIGludCB3ICk7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0Rml4ZWRFeHRlbnRIZWlnaHQoIGludCBoICk7CiAgICBRU2l6ZSBmaXhl
ZEV4dGVudCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXROZXdMaW5lKCBib29sIGIgKTsK
ICAgIGJvb2wgbmV3TGluZSgpIGNvbnN0OwoKICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIGNvbnN0OwoKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVt
U2l6ZSgpIGNvbnN0OwogICAgUVNpemUgbWluaW11bVNpemVIaW50KCkgY29uc3Q7CgogICAgUUJv
eExheW91dCAqYm94TGF5b3V0KCk7CgogICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZU1vdmluZygg
Ym9vbCBiICk7CiAgICBib29sIG9wYXF1ZU1vdmluZygpIGNvbnN0OwoKICAgIGJvb2wgZXZlbnRG
aWx0ZXIoIFFPYmplY3QgKm8sIFFFdmVudCAqZSApOwoKCgoKCnByb3RlY3RlZDoKICAgIHZvaWQg
b3JpZW50YXRpb25DaGFuZ2VkKCBPcmllbnRhdGlvbiBvICk7CiAgICB2b2lkIHBsYWNlQ2hhbmdl
ZCggUURvY2tXaW5kb3c6OlBsYWNlIHAgKTsKICAgIHZvaWQgdmlzaWJpbGl0eUNoYW5nZWQoIGJv
b2wgKTsKCnB1YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgdW5kb2NrKCBRV2lkZ2V0ICp3ICk7CiAg
ICB2aXJ0dWFsIHZvaWQgdW5kb2NrKCkgeyB1bmRvY2soIDAgKTsgfQogICAgdmlydHVhbCB2b2lk
IGRvY2soKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRPcmllbnRhdGlvbiggT3JpZW50YXRpb24gbyAp
OwogICAgdm9pZCBzZXRDYXB0aW9uKCBjb25zdCBRU3RyaW5nICZzICk7Cgpwcm90ZWN0ZWQ6CiAg
ICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKmUgKTsKICAgIHZvaWQgc2hvd0V2ZW50
KCBRU2hvd0V2ZW50ICplICk7CiAgICB2b2lkIGhpZGVFdmVudCggUUhpZGVFdmVudCAqZSApOwog
ICAgdm9pZCBjb250ZXh0TWVudUV2ZW50KCBRQ29udGV4dE1lbnVFdmVudCAqZSApOwoKICAgIHZv
aWQgZHJhd0ZyYW1lKCBRUGFpbnRlciAqICk7CiAgICB2b2lkIGRyYXdDb250ZW50cyggUVBhaW50
ZXIgKiApOwoKICAgIGJvb2wgZXZlbnQoIFFFdmVudCAqZSApOwoKcHJpdmF0ZSA6CiAgICB2b2lk
IHRvZ2dsZVZpc2libGUoKSB7IGlmICggIWlzVmlzaWJsZSgpICkgc2hvdygpOyBlbHNlIGhpZGUo
KTsgfQoKcHJpdmF0ZToKICAgIHZvaWQgaGFuZGxlTW92ZSggY29uc3QgUVBvaW50ICZwb3MsIGNv
bnN0IFFQb2ludCAmZ3AsIGJvb2wgZHJhd1JlY3QgKTsKICAgIHZvaWQgdXBkYXRlR3VpKCk7CiAg
ICB2b2lkIHVwZGF0ZVNwbGl0dGVyVmlzaWJpbGl0eSggYm9vbCB2aXNpYmxlICk7CgogICAgdm9p
ZCBzdGFydFJlY3REcmF3KCBjb25zdCBRUG9pbnQgJnNvLCBib29sIGRyYXdSZWN0ICk7CiAgICB2
b2lkIGVuZFJlY3REcmF3KCBib29sIGRyYXdSZWN0ICk7CiAgICB2b2lkIHVwZGF0ZVBvc2l0aW9u
KCBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcyApOwogICAgUVdpZGdldCAqYXJlYUF0KCBjb25zdCBR
UG9pbnQgJmdwICk7CiAgICB2b2lkIHJlbW92ZUZyb21Eb2NrKCBib29sIGZpeE5ld0xpbmVzID0g
VFJVRSApOwogICAgdm9pZCBzd2FwUmVjdCggUVJlY3QgJnIsIFF0OjpPcmllbnRhdGlvbiBvLCBj
b25zdCBRUG9pbnQgJm9mZnNldCwgUURvY2tBcmVhICphcmVhICk7CiAgICB2b2lkIGluaXQoKTsK
CnByaXZhdGU6CiAgICBRRG9ja1dpbmRvd0hhbmRsZSAqaG9ySGFuZGxlLCAqdmVySGFuZGxlOwog
ICAgUURvY2tXaW5kb3dUaXRsZUJhciAqdGl0bGVCYXI7CiAgICBRV2lkZ2V0ICp3aWQ7CiAgICBR
UGFpbnRlciAqdW5jbGlwcGVkUGFpbnRlcjsKICAgIFFEb2NrQXJlYSAqZG9ja0FyZWEsICp0bXBE
b2NrQXJlYTsKICAgIFFSZWN0IGN1cnJSZWN0OwogICAgUGxhY2UgY3VyUGxhY2U7CiAgICBQbGFj
ZSBzdGF0ZTsKICAgIGJvb2wgcmVzaXplRW5hYmxlZCA6IDE7CiAgICBib29sIG1vdmVFbmFibGVk
IDogMTsKICAgIGJvb2wgbmwgOiAxOwogICAgYm9vbCBvcGFxdWUgOiAxOwogICAgYm9vbCBzdHJl
dGNoYWJsZVsgMyBdOwogICAgT3JpZW50YXRpb24gc3RhcnRPcmllbnRhdGlvbjsKICAgIGludCBj
TW9kZTsKICAgIFFQb2ludCBzdGFydE9mZnNldDsKICAgIGludCBvZmZzOwogICAgUVNpemUgZkV4
dGVudDsKICAgIFFEb2NrV2luZG93UmVzaXplSGFuZGxlICpoSGFuZGxlVG9wLCAqaEhhbmRsZUJv
dHRvbSwgKnZIYW5kbGVMZWZ0LCAqdkhhbmRsZVJpZ2h0OwogICAgUVZCb3hMYXlvdXQgKmhib3g7
CiAgICBRSEJveExheW91dCAqdmJveDsKICAgIFFCb3hMYXlvdXQgKmxheW91dDsKICAgIHZvaWQg
KmRvY2tXaW5kb3dEYXRhOwogICAgUVBvaW50IGxhc3RQb3M7CiAgICBRU2l6ZSBsYXN0U2l6ZTsK
ICAgIFFXaWRnZXRSZXNpemVIYW5kbGVyICp3aWRnZXRSZXNpemVIYW5kbGVyOwogICAgUURvY2tX
aW5kb3dQcml2YXRlICpkOwoKcHJpdmF0ZToKCiAgICBRRG9ja1dpbmRvdyggY29uc3QgUURvY2tX
aW5kb3cgJiApOwogICAgUURvY2tXaW5kb3cmIG9wZXJhdG9yPSggY29uc3QgUURvY2tXaW5kb3cg
JiApOwoKfTsKCmlubGluZSBRRG9ja0FyZWEgKlFEb2NrV2luZG93OjphcmVhKCkgY29uc3QKewog
ICAgcmV0dXJuIGRvY2tBcmVhOwp9CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9x
dG9vbGJhci5oIiAyCgoKCgpjbGFzcyBRTWFpbldpbmRvdzsKY2xhc3MgUUJ1dHRvbjsKY2xhc3Mg
UUJveExheW91dDsKY2xhc3MgUVRvb2xCYXJQcml2YXRlOwoKY2xhc3MgUVRvb2xCYXI6IHB1Ymxp
YyBRRG9ja1dpbmRvdwp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBj
aGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFy
KiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJv
b2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBp
bnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0
eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCog
c3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3Qq
KXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g
MCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g
MCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAoKcHVibGljOgog
ICAgUVRvb2xCYXIoIGNvbnN0IFFTdHJpbmcgJmxhYmVsLAogICAgICAgICAgICAgIFFNYWluV2lu
ZG93ICosIFRvb2xCYXJEb2NrID0gRG9ja1RvcCwKICAgICAgICAgICAgICBib29sIG5ld0xpbmUg
PSBGQUxTRSwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICBRVG9vbEJhciggY29uc3QgUVN0cmlu
ZyAmbGFiZWwsIFFNYWluV2luZG93ICosIFFXaWRnZXQgKiwKICAgICAgICAgICAgICBib29sIG5l
d0xpbmUgPSBGQUxTRSwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3MgZiA9IDAgKTsKICAgIFFU
b29sQmFyKCBRTWFpbldpbmRvdyogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAg
flFUb29sQmFyKCk7CgogICAgdm9pZCBhZGRTZXBhcmF0b3IoKTsKCiAgICB2b2lkIHNob3coKTsK
ICAgIHZvaWQgaGlkZSgpOwoKICAgIFFNYWluV2luZG93ICogbWFpbldpbmRvdygpIGNvbnN0OwoK
ICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJldGNoYWJsZVdpZGdldCggUVdpZGdldCAqICk7CgogICAg
Ym9vbCBldmVudCggUUV2ZW50ICogZSApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRMYWJlbCggY29u
c3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nIGxhYmVsKCkgY29uc3Q7CgogICAgdmlydHVhbCB2
b2lkIGNsZWFyKCk7CgogICAgUVNpemUgbWluaW11bVNpemUoKSBjb25zdDsKICAgIFFTaXplIG1p
bmltdW1TaXplSGludCgpIGNvbnN0OwoKICAgIHZvaWQgc2V0T3JpZW50YXRpb24oIE9yaWVudGF0
aW9uIG8gKTsKICAgIHZvaWQgc2V0TWluaW11bVNpemUoIGludCBtaW53LCBpbnQgbWluaCApOwoK
cHJvdGVjdGVkOgogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICplICk7CiAgICB2
b2lkIHN0eWxlQ2hhbmdlKCBRU3R5bGUgJiApOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGNyZWF0ZVBv
cHVwKCk7Cgpwcml2YXRlOgogICAgdm9pZCBpbml0KCk7CgogICAgUVRvb2xCYXJQcml2YXRlICog
ZDsKICAgIFFNYWluV2luZG93ICogbXc7CiAgICBRV2lkZ2V0ICogc3c7CiAgICBRU3RyaW5nIGw7
CgogICAgZnJpZW5kIGNsYXNzIFFNYWluV2luZG93OwoKcHJpdmF0ZToKCiAgICBRVG9vbEJhcigg
Y29uc3QgUVRvb2xCYXIgJiApOwogICAgUVRvb2xCYXImIG9wZXJhdG9yPSggY29uc3QgUVRvb2xC
YXIgJiApOwoKfTsKIyA0NCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtYWlud2luZG93
LmgiIDIKCgoKCgoKY2xhc3MgUU1lbnVCYXI7CmNsYXNzIFFTdGF0dXNCYXI7CmNsYXNzIFFUb29s
VGlwR3JvdXA7CmNsYXNzIFFNYWluV2luZG93UHJpdmF0ZTsKY2xhc3MgUU1haW5XaW5kb3dMYXlv
dXQ7CmNsYXNzIFFQb3B1cE1lbnU7CgpjbGFzcyBRTWFpbldpbmRvdzogcHVibGljIFFXaWRnZXQK
ewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1l
KCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBi
b29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGlu
dCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwg
UVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwg
aW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmpl
Y3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRp
YyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFT
dHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTog
c3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAKICAgCiAgIAogICAKICAgCgpwdWJsaWM6
CiAgICBRTWFpbldpbmRvdyggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwg
V0ZsYWdzIGYgPSBXVHlwZV9Ub3BMZXZlbCApOwogICAgflFNYWluV2luZG93KCk7CgoKICAgIFFN
ZW51QmFyICogbWVudUJhcigpIGNvbnN0OwoKICAgIFFTdGF0dXNCYXIgKiBzdGF0dXNCYXIoKSBj
b25zdDsKCiAgICBRVG9vbFRpcEdyb3VwICogdG9vbFRpcEdyb3VwKCkgY29uc3Q7CgoKICAgIHZp
cnR1YWwgdm9pZCBzZXRDZW50cmFsV2lkZ2V0KCBRV2lkZ2V0ICogKTsKICAgIFFXaWRnZXQgKiBj
ZW50cmFsV2lkZ2V0KCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldERvY2tFbmFibGVkKCBE
b2NrIGRvY2ssIGJvb2wgZW5hYmxlICk7CiAgICBib29sIGlzRG9ja0VuYWJsZWQoIERvY2sgZG9j
ayApIGNvbnN0OwogICAgYm9vbCBpc0RvY2tFbmFibGVkKCBRRG9ja0FyZWEgKmFyZWEgKSBjb25z
dDsKICAgIHZpcnR1YWwgdm9pZCBzZXREb2NrRW5hYmxlZCggUURvY2tXaW5kb3cgKnRiLCBEb2Nr
IGRvY2ssIGJvb2wgZW5hYmxlICk7CiAgICBib29sIGlzRG9ja0VuYWJsZWQoIFFEb2NrV2luZG93
ICp0YiwgRG9jayBkb2NrICkgY29uc3Q7CiAgICBib29sIGlzRG9ja0VuYWJsZWQoIFFEb2NrV2lu
ZG93ICp0YiwgUURvY2tBcmVhICphcmVhICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGFkZERv
Y2tXaW5kb3coIFFEb2NrV2luZG93ICosIERvY2sgPSBEb2NrVG9wLCBib29sIG5ld0xpbmUgPSBG
QUxTRSApOwogICAgdmlydHVhbCB2b2lkIGFkZERvY2tXaW5kb3coIFFEb2NrV2luZG93ICosIGNv
bnN0IFFTdHJpbmcgJmxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY2sg
PSBEb2NrVG9wLCBib29sIG5ld0xpbmUgPSBGQUxTRSApOwogICAgdmlydHVhbCB2b2lkIG1vdmVE
b2NrV2luZG93KCBRRG9ja1dpbmRvdyAqLCBEb2NrID0gRG9ja1RvcCApOwogICAgdmlydHVhbCB2
b2lkIG1vdmVEb2NrV2luZG93KCBRRG9ja1dpbmRvdyAqLCBEb2NrLCBib29sIG5sLCBpbnQgaW5k
ZXgsIGludCBleHRyYU9mZnNldCA9IC0xICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRG9ja1dp
bmRvdyggUURvY2tXaW5kb3cgKiApOwoKICAgIHZvaWQgc2hvdygpOwogICAgdm9pZCBoaWRlKCk7
CiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNpemUgbWluaW11bVNpemVIaW50KCkg
Y29uc3Q7CgogICAgYm9vbCByaWdodEp1c3RpZmljYXRpb24oKSBjb25zdDsKICAgIGJvb2wgdXNl
c0JpZ1BpeG1hcHMoKSBjb25zdDsKICAgIGJvb2wgdXNlc1RleHRMYWJlbCgpIGNvbnN0OwogICAg
Ym9vbCBkb2NrV2luZG93c01vdmFibGUoKSBjb25zdDsKICAgIGJvb2wgb3BhcXVlTW92aW5nKCkg
Y29uc3Q7CgogICAgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCosIFFFdmVudCogKTsKCiAgICBi
b29sIGdldExvY2F0aW9uKCBRRG9ja1dpbmRvdyAqdGIsIERvY2sgJmRvY2ssIGludCAmaW5kZXgs
IGJvb2wgJm5sLCBpbnQgJmV4dHJhT2Zmc2V0ICkgY29uc3Q7CgogICAgUVB0ckxpc3Q8UURvY2tX
aW5kb3c+IGRvY2tXaW5kb3dzKCBEb2NrIGRvY2sgKSBjb25zdDsKICAgIFFQdHJMaXN0PFFEb2Nr
V2luZG93PiBkb2NrV2luZG93cygpIGNvbnN0OwogICAgdm9pZCBsaW5lVXBEb2NrV2luZG93cygg
Ym9vbCBrZWVwTmV3TGluZXMgPSBGQUxTRSApOwoKICAgIGJvb2wgaXNEb2NrTWVudUVuYWJsZWQo
KSBjb25zdDsKCgogICAgYm9vbCBoYXNEb2NrV2luZG93KCBRRG9ja1dpbmRvdyAqZHcgKTsKCiAg
ICB2b2lkIGFkZFRvb2xCYXIoIFFEb2NrV2luZG93ICosIERvY2sgPSBEb2NrVG9wLCBib29sIG5l
d0xpbmUgPSBGQUxTRSApOwogICAgdm9pZCBhZGRUb29sQmFyKCBRRG9ja1dpbmRvdyAqLCBjb25z
dCBRU3RyaW5nICZsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgRG9jayA9IERvY2tUb3AsIGJv
b2wgbmV3TGluZSA9IEZBTFNFICk7CiAgICB2b2lkIG1vdmVUb29sQmFyKCBRRG9ja1dpbmRvdyAq
LCBEb2NrID0gRG9ja1RvcCApOwogICAgdm9pZCBtb3ZlVG9vbEJhciggUURvY2tXaW5kb3cgKiwg
RG9jaywgYm9vbCBubCwgaW50IGluZGV4LCBpbnQgZXh0cmFPZmZzZXQgPSAtMSApOwogICAgdm9p
ZCByZW1vdmVUb29sQmFyKCBRRG9ja1dpbmRvdyAqICk7CgogICAgYm9vbCB0b29sQmFyc01vdmFi
bGUoKSBjb25zdDsKICAgIFFQdHJMaXN0PFFUb29sQmFyPiB0b29sQmFycyggRG9jayBkb2NrICkg
Y29uc3Q7CiAgICB2b2lkIGxpbmVVcFRvb2xCYXJzKCBib29sIGtlZXBOZXdMaW5lcyA9IEZBTFNF
ICk7CgoKICAgIHZpcnR1YWwgUURvY2tBcmVhICpkb2NraW5nQXJlYSggY29uc3QgUVBvaW50ICZw
ICk7CiAgICBRRG9ja0FyZWEgKmxlZnREb2NrKCkgY29uc3Q7CiAgICBRRG9ja0FyZWEgKnJpZ2h0
RG9jaygpIGNvbnN0OwogICAgUURvY2tBcmVhICp0b3BEb2NrKCkgY29uc3Q7CiAgICBRRG9ja0Fy
ZWEgKmJvdHRvbURvY2soKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21pemFibGUo
KSBjb25zdDsKCiAgICBib29sIGFwcHJvcHJpYXRlKCBRRG9ja1dpbmRvdyAqZHcgKSBjb25zdDsK
CiAgICBlbnVtIERvY2tXaW5kb3dzIHsgT25seVRvb2xCYXJzLCBOb1Rvb2xCYXJzLCBBbGxEb2Nr
V2luZG93cyB9OwogICAgUVBvcHVwTWVudSAqY3JlYXRlRG9ja1dpbmRvd01lbnUoIERvY2tXaW5k
b3dzIGRvY2tXaW5kb3dzID0gQWxsRG9ja1dpbmRvd3MgKSBjb25zdDsKCnB1YmxpYyA6CiAgICB2
aXJ0dWFsIHZvaWQgc2V0UmlnaHRKdXN0aWZpY2F0aW9uKCBib29sICk7CiAgICB2aXJ0dWFsIHZv
aWQgc2V0VXNlc0JpZ1BpeG1hcHMoIGJvb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VzVGV4
dExhYmVsKCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RG9ja1dpbmRvd3NNb3ZhYmxlKCBi
b29sICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlTW92aW5nKCBib29sICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0RG9ja01lbnVFbmFibGVkKCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgd2hh
dHNUaGlzKCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QXBwcm9wcmlhdGUoIFFEb2NrV2luZG93ICpk
dywgYm9vbCBhICk7CiAgICB2aXJ0dWFsIHZvaWQgY3VzdG9taXplKCk7CgoKICAgIHZvaWQgc2V0
VG9vbEJhcnNNb3ZhYmxlKCBib29sICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHBpeG1hcFNpemVD
aGFuZ2VkKCBib29sICk7CiAgICB2b2lkIHVzZXNUZXh0TGFiZWxDaGFuZ2VkKCBib29sICk7CiAg
ICB2b2lkIGRvY2tXaW5kb3dQb3NpdGlvbkNoYW5nZWQoIFFEb2NrV2luZG93ICogKTsKCgoKICAg
IHZvaWQgdG9vbEJhclBvc2l0aW9uQ2hhbmdlZCggUVRvb2xCYXIgKiApOwoKCnByb3RlY3RlZCA6
CiAgICB2aXJ0dWFsIHZvaWQgc2V0VXBMYXlvdXQoKTsKICAgIHZpcnR1YWwgYm9vbCBzaG93RG9j
a01lbnUoIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9zICk7CiAgICB2b2lkIG1lbnVBYm91dFRvU2hv
dygpOwoKcHJvdGVjdGVkOgogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7CiAg
ICB2b2lkIGNoaWxkRXZlbnQoIFFDaGlsZEV2ZW50ICogKTsKICAgIGJvb2wgZXZlbnQoIFFFdmVu
dCAqICk7CiAgICB2b2lkIHN0eWxlQ2hhbmdlKCBRU3R5bGUmICk7Cgpwcml2YXRlIDoKICAgIHZv
aWQgc2xvdFBsYWNlQ2hhbmdlZCgpOwogICAgdm9pZCBkb0xpbmVVcCgpIHsgbGluZVVwRG9ja1dp
bmRvd3MoIFRSVUUgKTsgfQoKcHJpdmF0ZToKICAgIFFNYWluV2luZG93UHJpdmF0ZSAqIGQ7CiAg
ICB2b2lkIHRyaWdnZXJMYXlvdXQoIGJvb2wgZGVsZXRlTGF5b3V0ID0gVFJVRSk7CiAgICBib29s
IGRvY2tNYWluV2luZG93KCBRT2JqZWN0ICpkb2NrICk7CgoKICAgIHZpcnR1YWwgdm9pZCBzZXRN
ZW51QmFyKCBRTWVudUJhciAqICk7CgogICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhciggUVN0
YXR1c0JhciAqICk7CgogICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXBHcm91cCggUVRvb2xUaXBH
cm91cCAqICk7CgoKICAgIGZyaWVuZCBjbGFzcyBRRG9ja1dpbmRvdzsKICAgIGZyaWVuZCBjbGFz
cyBRTWVudUJhcjsKICAgIGZyaWVuZCBjbGFzcyBRSGlkZURvY2s7CiAgICBmcmllbmQgY2xhc3Mg
UVRvb2xCYXI7CiAgICBmcmllbmQgY2xhc3MgUU1haW5XaW5kb3dMYXlvdXQ7CnByaXZhdGU6Cgog
ICAgUU1haW5XaW5kb3coIGNvbnN0IFFNYWluV2luZG93ICYgKTsKICAgIFFNYWluV2luZG93JiBv
cGVyYXRvcj0oIGNvbnN0IFFNYWluV2luZG93ICYgKTsKCn07CgoKaW5saW5lIHZvaWQgUU1haW5X
aW5kb3c6OmFkZFRvb2xCYXIoIFFEb2NrV2luZG93ICp3LCBUb29sQmFyRG9jayBkb2NrLCBib29s
IG5ld0xpbmUgKQp7CiAgICBhZGREb2NrV2luZG93KCB3LCBkb2NrLCBuZXdMaW5lICk7Cn0KCmlu
bGluZSB2b2lkIFFNYWluV2luZG93OjphZGRUb29sQmFyKCBRRG9ja1dpbmRvdyAqdywgY29uc3Qg
UVN0cmluZyAmbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvb2xCYXJEb2Nr
IGRvY2ssIGJvb2wgbmV3TGluZSApCnsKICAgIGFkZERvY2tXaW5kb3coIHcsIGxhYmVsLCBkb2Nr
LCBuZXdMaW5lICk7Cn0KCmlubGluZSB2b2lkIFFNYWluV2luZG93Ojptb3ZlVG9vbEJhciggUURv
Y2tXaW5kb3cgKncsIFRvb2xCYXJEb2NrIGRvY2sgKQp7CiAgICBtb3ZlRG9ja1dpbmRvdyggdywg
ZG9jayApOwp9CgppbmxpbmUgdm9pZCBRTWFpbldpbmRvdzo6bW92ZVRvb2xCYXIoIFFEb2NrV2lu
ZG93ICp3LCBUb29sQmFyRG9jayBkb2NrLCBib29sIG5sLCBpbnQgaW5kZXgsIGludCBleHRyYU9m
ZnNldCApCnsKICAgIG1vdmVEb2NrV2luZG93KCB3LCBkb2NrLCBubCwgaW5kZXgsIGV4dHJhT2Zm
c2V0ICk7Cn0KCmlubGluZSB2b2lkIFFNYWluV2luZG93OjpyZW1vdmVUb29sQmFyKCBRRG9ja1dp
bmRvdyAqdyApCnsKICAgIHJlbW92ZURvY2tXaW5kb3coIHcgKTsKfQoKaW5saW5lIGJvb2wgUU1h
aW5XaW5kb3c6OnRvb2xCYXJzTW92YWJsZSgpIGNvbnN0CnsKICAgIHJldHVybiBkb2NrV2luZG93
c01vdmFibGUoKTsKfQoKaW5saW5lIHZvaWQgUU1haW5XaW5kb3c6OmxpbmVVcFRvb2xCYXJzKCBi
b29sIGtlZXBOZXdMaW5lcyApCnsKICAgIGxpbmVVcERvY2tXaW5kb3dzKCBrZWVwTmV3TGluZXMg
KTsKfQoKaW5saW5lIHZvaWQgUU1haW5XaW5kb3c6OnNldFRvb2xCYXJzTW92YWJsZSggYm9vbCBi
ICkKewogICAgc2V0RG9ja1dpbmRvd3NNb3ZhYmxlKCBiICk7Cn0KCgoKIFFUZXh0U3RyZWFtICZv
cGVyYXRvcjw8KCBRVGV4dFN0cmVhbSAmLCBjb25zdCBRTWFpbldpbmRvdyAmICk7CiBRVGV4dFN0
cmVhbSAmb3BlcmF0b3I+PiggUVRleHRTdHJlYW0gJiwgUU1haW5XaW5kb3cgJiApOwojIDE5ICJU
eFZvcnBhbEdVSS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZW51YmFy
LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZW51YmFyLmgiCiMgMSAi
L3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fwb3B1cG1lbnUuaCIgMQojIDQzICIvdXNyL2xv
Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBvcHVwbWVudS5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xbWVudWRhdGEuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1
ZGUvcW1lbnVkYXRhLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwu
aCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW1lbnVkYXRhLmgiIDIKCiMg
MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FrZXlzZXF1ZW5jZS5oIiAxCiMgNTQgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xa2V5c2VxdWVuY2UuaCIKY2xhc3MgUUtleVNlcXVl
bmNlOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFLZXlT
ZXF1ZW5jZSAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUtl
eVNlcXVlbmNlICYgKTsKCgpjbGFzcyBRS2V5U2VxdWVuY2VQcml2YXRlOwoKY2xhc3MgUUtleVNl
cXVlbmNlIDogcHVibGljIFF0CnsKcHVibGljOgogICAgUUtleVNlcXVlbmNlKCk7CiAgICBRS2V5
U2VxdWVuY2UoIGNvbnN0IFFTdHJpbmcmIGtleSApOwogICAgUUtleVNlcXVlbmNlKCBpbnQga2V5
ICk7CiAgICBRS2V5U2VxdWVuY2UoIGludCBrMSwgaW50IGsyLCBpbnQgazMgPSAwLCBpbnQgazQg
PSAwICk7CiAgICBRS2V5U2VxdWVuY2UoIGNvbnN0IFFLZXlTZXF1ZW5jZSAmICk7CiAgICB+UUtl
eVNlcXVlbmNlKCk7CgogICAgdWludCBjb3VudCgpIGNvbnN0OwogICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3Q7CiAgICBRdDo6U2VxdWVuY2VNYXRjaCBtYXRjaGVzKCBjb25zdCBRS2V5U2VxdWVuY2Ug
JiApIGNvbnN0OwoKICAgIG9wZXJhdG9yIFFTdHJpbmcoKSBjb25zdDsKICAgIG9wZXJhdG9yIGlu
dCAoKSBjb25zdDsKICAgIGludCBvcGVyYXRvcltdKCB1aW50ICkgY29uc3Q7CiAgICBRS2V5U2Vx
dWVuY2UgJm9wZXJhdG9yPSggY29uc3QgUUtleVNlcXVlbmNlICYgKTsKICAgIGJvb2wgb3BlcmF0
b3I9PSggY29uc3QgUUtleVNlcXVlbmNlJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9ICgg
Y29uc3QgUUtleVNlcXVlbmNlJiApIGNvbnN0OwoKcHJpdmF0ZToKICAgIHN0YXRpYyBpbnQgZGVj
b2RlU3RyaW5nKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIHN0YXRpYyBRU3RyaW5nIGVuY29kZVN0
cmluZyggaW50ICk7CiAgICBpbnQgYXNzaWduKCBRU3RyaW5nICk7CiAgICB2b2lkIHNldEtleSgg
aW50IGtleSwgaW50IGluZGV4ICk7CgogICAgUUtleVNlcXVlbmNlUHJpdmF0ZSogZDsKCiAgICBm
cmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFLZXlT
ZXF1ZW5jZSAmICk7CiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3Ry
ZWFtICYsIFFLZXlTZXF1ZW5jZSAmICk7CiAgICBmcmllbmQgY2xhc3MgUUFjY2VsTWFuYWdlcjsK
fTsKIyA0NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZW51ZGF0YS5oIiAyCgojIDEg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc2lnbmFsLmgiIDEKIyA0NyAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3FzaWduYWwuaCIKY2xhc3MgUVNpZ25hbCA6IHB1YmxpYyBRT2Jq
ZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNz
TmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1
YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0
KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50
IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0
KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRh
T2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBz
dGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRp
YyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZh
dGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKCnB1YmxpYzoKICAgIFFTaWduYWwoIFFP
YmplY3QgKnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAgIH5RU2lnbmFsKCk7Cgog
ICAgYm9vbCBjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVt
YmVyICk7CiAgICBib29sIGRpc2Nvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25z
dCBjaGFyICptZW1iZXI9MCApOwoKICAgIHZvaWQgYWN0aXZhdGUoKTsKCgogICAgYm9vbCBpc0Js
b2NrZWQoKSBjb25zdCB7IHJldHVybiBRT2JqZWN0OjpzaWduYWxzQmxvY2tlZCgpOyB9CiAgICB2
b2lkIGJsb2NrKCBib29sIGIgKSB7IFFPYmplY3Q6OmJsb2NrU2lnbmFscyggYiApOyB9CgogICAg
dm9pZCBzZXRQYXJhbWV0ZXIoIGludCB2YWx1ZSApOwogICAgaW50IHBhcmFtZXRlcigpIGNvbnN0
OwoKCgoKICAgIHZvaWQgc2V0VmFsdWUoIGNvbnN0IFFWYXJpYW50ICZ2YWx1ZSApOwogICAgUVZh
cmlhbnQgdmFsdWUoKSBjb25zdDsKCnByb3RlY3RlZDoKCiAgICB2b2lkIHNpZ25hbCggY29uc3Qg
UVZhcmlhbnQmICk7CgogICAgdm9pZCBpbnRTaWduYWwoIGludCApOwoKcHJpdmF0ZToKCiAgICBR
VmFyaWFudCB2YWw7Cgpwcml2YXRlOgoKICAgIFFTaWduYWwoIGNvbnN0IFFTaWduYWwgJiApOwog
ICAgUVNpZ25hbCAmb3BlcmF0b3I9KCBjb25zdCBRU2lnbmFsICYgKTsKCn07CiMgNDcgIi91c3Iv
bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWVudWRhdGEuaCIgMgoKCgoKCmNsYXNzIFFQb3B1cE1l
bnU7CmNsYXNzIFFNZW51RGF0YURhdGE7CmNsYXNzIFFPYmplY3Q7CgpjbGFzcyBRQ3VzdG9tTWVu
dUl0ZW07CmNsYXNzIFFNZW51SXRlbURhdGE7CgpjbGFzcyBRTWVudUl0ZW0KewpmcmllbmQgY2xh
c3MgUU1lbnVEYXRhOwpwdWJsaWM6CiAgICBRTWVudUl0ZW0oKTsKICAgflFNZW51SXRlbSgpOwoK
ICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIGlkZW50OyB9CiAgICBRSWNvblNldCAqaWNvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIGljb25zZXRfZGF0YTsgfQogICAgUVN0cmluZyB0ZXh0KCkgY29u
c3QgeyByZXR1cm4gdGV4dF9kYXRhOyB9CiAgICBRU3RyaW5nIHdoYXRzVGhpcygpIGNvbnN0IHsg
cmV0dXJuIHdoYXRzdGhpc19kYXRhOyB9CiAgICBRUGl4bWFwICpwaXhtYXAoKSBjb25zdCB7IHJl
dHVybiBwaXhtYXBfZGF0YTsgfQogICAgUVBvcHVwTWVudSAqcG9wdXAoKSBjb25zdCB7IHJldHVy
biBwb3B1cF9tZW51OyB9CiAgICBRV2lkZ2V0ICp3aWRnZXQoKSBjb25zdCB7IHJldHVybiB3aWRn
ZXRfaXRlbTsgfQogICAgUUN1c3RvbU1lbnVJdGVtICpjdXN0b20oKSBjb25zdDsKCiAgICBRS2V5
U2VxdWVuY2Uga2V5KCkgY29uc3QgeyByZXR1cm4gYWNjZWxfa2V5OyB9CgogICAgUVNpZ25hbCAq
c2lnbmFsKCkgY29uc3QgeyByZXR1cm4gc2lnbmFsX2RhdGE7IH0KICAgIGJvb2wgaXNTZXBhcmF0
b3IoKSBjb25zdCB7IHJldHVybiBpc19zZXBhcmF0b3I7IH0KICAgIGJvb2wgaXNFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gaXNfZW5hYmxlZDsgfQogICAgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7
IHJldHVybiBpc19jaGVja2VkOyB9CiAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiBp
c19kaXJ0eTsgfQogICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc192aXNpYmxl
OyB9CiAgICBib29sIGlzRW5hYmxlZEFuZFZpc2libGUoKSBjb25zdCB7IHJldHVybiBpc19lbmFi
bGVkICYmIGlzX3Zpc2libGU7IH0KCiAgICB2b2lkIHNldFRleHQoIGNvbnN0IFFTdHJpbmcgJnRl
eHQgKSB7IHRleHRfZGF0YSA9IHRleHQ7IH0KICAgIHZvaWQgc2V0RGlydHkoIGJvb2wgZGlydHkg
KSB7IGlzX2RpcnR5ID0gZGlydHk7IH0KICAgIHZvaWQgc2V0VmlzaWJsZSggYm9vbCB2aXNpYmxl
ICkgeyBpc192aXNpYmxlID0gdmlzaWJsZTsgfQogICAgdm9pZCBzZXRXaGF0c1RoaXMoIGNvbnN0
IFFTdHJpbmcgJnRleHQgKSB7IHdoYXRzdGhpc19kYXRhID0gdGV4dDsgfQoKcHJpdmF0ZToKICAg
IGludCBpZGVudDsKICAgIFFJY29uU2V0ICppY29uc2V0X2RhdGE7CiAgICBRU3RyaW5nIHRleHRf
ZGF0YTsKICAgIFFTdHJpbmcgd2hhdHN0aGlzX2RhdGE7CiAgICBRUGl4bWFwICpwaXhtYXBfZGF0
YTsKICAgIFFQb3B1cE1lbnUgKnBvcHVwX21lbnU7CiAgICBRV2lkZ2V0ICp3aWRnZXRfaXRlbTsK
CiAgICBRS2V5U2VxdWVuY2UgYWNjZWxfa2V5OwoKICAgIFFTaWduYWwgKnNpZ25hbF9kYXRhOwog
ICAgdWludCBpc19zZXBhcmF0b3IgOiAxOwogICAgdWludCBpc19lbmFibGVkIDogMTsKICAgIHVp
bnQgaXNfY2hlY2tlZCA6IDE7CiAgICB1aW50IGlzX2RpcnR5IDogMTsKICAgIHVpbnQgaXNfdmlz
aWJsZSA6IDE7CiAgICBRTWVudUl0ZW1EYXRhKiBkOwoKICAgIFFNZW51SXRlbURhdGEqIGV4dHJh
KCk7Cgpwcml2YXRlOgoKICAgIFFNZW51SXRlbSggY29uc3QgUU1lbnVJdGVtICYgKTsKICAgIFFN
ZW51SXRlbSAmb3BlcmF0b3I9KCBjb25zdCBRTWVudUl0ZW0gJiApOwoKfTsKCgp0eXBlZGVmIFFQ
dHJMaXN0PFFNZW51SXRlbT4gUU1lbnVJdGVtTGlzdDsKdHlwZWRlZiBRUHRyTGlzdEl0ZXJhdG9y
PFFNZW51SXRlbT4gUU1lbnVJdGVtTGlzdEl0OwoKCmNsYXNzIFFDdXN0b21NZW51SXRlbSA6IHB1
YmxpYyBRdAp7CnB1YmxpYzoKICAgIFFDdXN0b21NZW51SXRlbSgpOwogICAgdmlydHVhbCB+UUN1
c3RvbU1lbnVJdGVtKCk7CiAgICB2aXJ0dWFsIGJvb2wgZnVsbFNwYW4oKSBjb25zdDsKICAgIHZp
cnR1YWwgYm9vbCBpc1NlcGFyYXRvcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZvbnQo
IGNvbnN0IFFGb250JiBmb250ICk7CiAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoIFFQYWludGVyKiBw
LCBjb25zdCBRQ29sb3JHcm91cCYgY2csIGJvb2wgYWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGVuYWJsZWQsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICkgPSAwOwogICAgdmly
dHVhbCBRU2l6ZSBzaXplSGludCgpID0gMDsKfTsKCgpjbGFzcyBRTWVudURhdGEKewpmcmllbmQg
Y2xhc3MgUU1lbnVCYXI7CmZyaWVuZCBjbGFzcyBRUG9wdXBNZW51OwpwdWJsaWM6CiAgICBRTWVu
dURhdGEoKTsKICAgIHZpcnR1YWwgflFNZW51RGF0YSgpOwoKICAgIHVpbnQgY291bnQoKSBjb25z
dDsKCgogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFTdHJpbmcgJnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciogbWVt
YmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUtleVNlcXVlbmNlJiBhY2Nl
bCA9IDAsIGludCBpZCA9IC0xLCBpbnQgaW5kZXggPSAtMSApOwogICAgaW50IGluc2VydEl0ZW0o
IGNvbnN0IFFJY29uU2V0JiBpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UVN0cmluZyAmdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3Qg
KnJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRS2V5U2VxdWVuY2UmIGFjY2VsID0gMCwgaW50IGlkID0gLTEsIGludCBpbmRleCA9
IC0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIq
IG1lbWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFLZXlTZXF1ZW5jZSYg
YWNjZWwgPSAwLCBpbnQgaWQgPSAtMSwgaW50IGluZGV4ID0gLTEgKTsKICAgIGludCBpbnNlcnRJ
dGVtKCBjb25zdCBRSWNvblNldCYgaWNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFQaXhtYXAgJnBpeG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFP
YmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRS2V5U2VxdWVuY2UmIGFjY2VsID0gMCwgaW50IGlkID0gLTEsIGludCBp
bmRleCA9IC0xICk7CgogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFTdHJpbmcgJnRleHQsIGlu
dCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUUljb25T
ZXQmIGljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZ0ZXh0
LCBpbnQgaWQ9LTEsIGludCBpbmRleD0tMSApOwoKICAgIGludCBpbnNlcnRJdGVtKCBjb25zdCBR
U3RyaW5nICZ0ZXh0LCBRUG9wdXBNZW51ICpwb3B1cCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3Qg
UUljb25TZXQmIGljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n
ICZ0ZXh0LCBRUG9wdXBNZW51ICpwb3B1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpZD0tMSwgaW50IGluZGV4PS0xICk7CgoKICAgIGludCBpbnNlcnRJdGVtKCBjb25zdCBRUGl4
bWFwICZwaXhtYXAsIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5zZXJ0SXRl
bSggY29uc3QgUUljb25TZXQmIGljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRUGl4bWFwICZwaXhtYXAsIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5z
ZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLCBRUG9wdXBNZW51ICpwb3B1cCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQg
aW5zZXJ0SXRlbSggY29uc3QgUUljb25TZXQmIGljb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRUGl4bWFwICZwaXhtYXAsIFFQb3B1cE1lbnUgKnBvcHVwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlkPS0xLCBpbnQgaW5kZXg9LTEgKTsKCiAgICBpbnQgaW5z
ZXJ0SXRlbSggUVdpZGdldCogd2lkZ2V0LCBpbnQgaWQ9LTEsIGludCBpbmRleD0tMSApOwoKICAg
IGludCBpbnNlcnRJdGVtKCBjb25zdCBRSWNvblNldCYgaWNvbiwgUUN1c3RvbU1lbnVJdGVtKiBj
dXN0b20sIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggUUN1
c3RvbU1lbnVJdGVtKiBjdXN0b20sIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CgoKICAgIGlu
dCBpbnNlcnRTZXBhcmF0b3IoIGludCBpbmRleD0tMSApOwoKICAgIHZvaWQgcmVtb3ZlSXRlbSgg
aW50IGlkICk7CiAgICB2b2lkIHJlbW92ZUl0ZW1BdCggaW50IGluZGV4ICk7CiAgICB2b2lkIGNs
ZWFyKCk7CgoKICAgIFFLZXlTZXF1ZW5jZSBhY2NlbCggaW50IGlkICkgY29uc3Q7CiAgICB2b2lk
IHNldEFjY2VsKCBjb25zdCBRS2V5U2VxdWVuY2UmIGtleSwgaW50IGlkICk7CgoKICAgIFFJY29u
U2V0ICppY29uU2V0KCBpbnQgaWQgKSBjb25zdDsKICAgIFFTdHJpbmcgdGV4dCggaW50IGlkICkg
Y29uc3Q7CiAgICBRUGl4bWFwICpwaXhtYXAoIGludCBpZCApIGNvbnN0OwoKICAgIHZvaWQgc2V0
V2hhdHNUaGlzKCBpbnQgaWQsIGNvbnN0IFFTdHJpbmcmICk7CiAgICBRU3RyaW5nIHdoYXRzVGhp
cyggaW50IGlkICkgY29uc3Q7CgoKICAgIHZvaWQgY2hhbmdlSXRlbSggaW50IGlkLCBjb25zdCBR
U3RyaW5nICZ0ZXh0ICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGludCBpZCwgY29uc3QgUVBpeG1h
cCAmcGl4bWFwICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGludCBpZCwgY29uc3QgUUljb25TZXQg
Jmljb24sIGNvbnN0IFFTdHJpbmcgJnRleHQgKTsKICAgIHZvaWQgY2hhbmdlSXRlbSggaW50IGlk
LCBjb25zdCBRSWNvblNldCAmaWNvbiwgY29uc3QgUVBpeG1hcCAmcGl4bWFwICk7CgogICAgdm9p
ZCBjaGFuZ2VJdGVtKCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaWQgKSB7IGNoYW5nZUl0ZW0o
IGlkLCB0ZXh0KTsgfQogICAgdm9pZCBjaGFuZ2VJdGVtKCBjb25zdCBRUGl4bWFwICZwaXhtYXAs
IGludCBpZCApIHsgY2hhbmdlSXRlbSggaWQsIHBpeG1hcCApOyB9CiAgICB2b2lkIGNoYW5nZUl0
ZW0oIGNvbnN0IFFJY29uU2V0ICZpY29uLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaWQgKSB7
CiAgICAgICAgY2hhbmdlSXRlbSggaWQsIGljb24sIHRleHQgKTsKICAgIH0KCiAgICBib29sIGlz
SXRlbUFjdGl2ZSggaW50IGlkICkgY29uc3Q7CgogICAgYm9vbCBpc0l0ZW1FbmFibGVkKCBpbnQg
aWQgKSBjb25zdDsKICAgIHZvaWQgc2V0SXRlbUVuYWJsZWQoIGludCBpZCwgYm9vbCBlbmFibGUg
KTsKCiAgICBib29sIGlzSXRlbUNoZWNrZWQoIGludCBpZCApIGNvbnN0OwogICAgdm9pZCBzZXRJ
dGVtQ2hlY2tlZCggaW50IGlkLCBib29sIGNoZWNrICk7CgogICAgYm9vbCBpc0l0ZW1WaXNpYmxl
KCBpbnQgaWQgKSBjb25zdDsKICAgIHZvaWQgc2V0SXRlbVZpc2libGUoIGludCBpZCwgYm9vbCB2
aXNpYmxlICk7CgogICAgdmlydHVhbCB2b2lkIHVwZGF0ZUl0ZW0oIGludCBpZCApOwoKICAgIGlu
dCBpbmRleE9mKCBpbnQgaWQgKSBjb25zdDsKICAgIGludCBpZEF0KCBpbnQgaW5kZXggKSBjb25z
dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRJZCggaW50IGluZGV4LCBpbnQgaWQgKTsKCiAgICBib29s
IGNvbm5lY3RJdGVtKCBpbnQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIqIG1lbWJlciApOwogICAgYm9vbCBkaXNjb25u
ZWN0SXRlbSggaW50IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFP
YmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIgKTsKCiAgICBib29sIHNldEl0ZW1Q
YXJhbWV0ZXIoIGludCBpZCwgaW50IHBhcmFtICk7CiAgICBpbnQgaXRlbVBhcmFtZXRlciggaW50
IGlkICkgY29uc3Q7CgogICAgUU1lbnVJdGVtICpmaW5kSXRlbSggaW50IGlkICkgY29uc3Q7CiAg
ICBRTWVudUl0ZW0gKmZpbmRJdGVtKCBpbnQgaWQsIFFNZW51RGF0YSAqKiBwYXJlbnQgKSBjb25z
dDsKICAgIFFNZW51SXRlbSAqIGZpbmRQb3B1cCggUVBvcHVwTWVudSAqLCBpbnQgKmluZGV4ID0g
MCApOwoKICAgIHZpcnR1YWwgdm9pZCBhY3RpdmF0ZUl0ZW1BdCggaW50IGluZGV4ICk7Cgpwcm90
ZWN0ZWQ6CiAgICBpbnQgYWN0SXRlbTsKICAgIFFNZW51SXRlbUxpc3QgKm1pdGVtczsKICAgIFFN
ZW51RGF0YSAqcGFyZW50TWVudTsKICAgIHVpbnQgaXNQb3B1cE1lbnUgOiAxOwogICAgdWludCBp
c01lbnVCYXIgOiAxOwogICAgdWludCBiYWRTaXplIDogMTsKICAgIHVpbnQgbW91c2VCdERuIDog
MTsKICAgIHVpbnQgYXZvaWRfY2lyY3VsYXJpdHkgOiAxOwogICAgdWludCBhY3RJdGVtRG93biA6
IDE7CiAgICB2aXJ0dWFsIHZvaWQgbWVudUNvbnRlbnRzQ2hhbmdlZCgpOwogICAgdmlydHVhbCB2
b2lkIG1lbnVTdGF0ZUNoYW5nZWQoKTsKICAgIHZpcnR1YWwgdm9pZCBtZW51SW5zUG9wdXAoIFFQ
b3B1cE1lbnUgKiApOwogICAgdmlydHVhbCB2b2lkIG1lbnVEZWxQb3B1cCggUVBvcHVwTWVudSAq
ICk7Cgpwcml2YXRlOgogICAgaW50IGluc2VydEFueSggY29uc3QgUVN0cmluZyAqLCBjb25zdCBR
UGl4bWFwICosIFFQb3B1cE1lbnUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UUljb25TZXQqLCBpbnQsIGludCwgUVdpZGdldCogPSAwLCBRQ3VzdG9tTWVudUl0ZW0qID0gMCk7
CiAgICB2b2lkIHJlbW92ZVBvcHVwKCBRUG9wdXBNZW51ICogKTsKICAgIHZvaWQgY2hhbmdlSXRl
bUljb25TZXQoIGludCBpZCwgY29uc3QgUUljb25TZXQgJmljb24gKTsKCiAgICBRTWVudURhdGFE
YXRhICpkOwoKcHJpdmF0ZToKCiAgICBRTWVudURhdGEoIGNvbnN0IFFNZW51RGF0YSAmICk7CiAg
ICBRTWVudURhdGEgJm9wZXJhdG9yPSggY29uc3QgUU1lbnVEYXRhICYgKTsKCn07CiMgNDQgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcG9wdXBtZW51LmgiIDIKCgoKY2xhc3MgUVBvcHVw
TWVudVByaXZhdGU7CgpjbGFzcyBRUG9wdXBNZW51IDogcHVibGljIFFGcmFtZSwgcHVibGljIFFN
ZW51RGF0YQp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpj
bGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2
aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRf
ZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQs
IGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9i
amVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGlj
TWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7
IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBz
dGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBw
cml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIApwdWJsaWM6CiAgICBRUG9w
dXBNZW51KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UVBv
cHVwTWVudSgpOwoKICAgIHZvaWQgcG9wdXAoIGNvbnN0IFFQb2ludCAmIHBvcywgaW50IGluZGV4
QXRQb2ludCA9IC0xICk7CiAgICB2b2lkIHVwZGF0ZUl0ZW0oIGludCBpZCApOwoKICAgIHZpcnR1
YWwgdm9pZCBzZXRDaGVja2FibGUoIGJvb2wgKTsKICAgIGJvb2wgaXNDaGVja2FibGUoKSBjb25z
dDsKCiAgICB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250ICYgKTsKICAgIHZvaWQgc2hvdygpOwog
ICAgdm9pZCBoaWRlKCk7CgogICAgaW50IGV4ZWMoKTsKICAgIGludCBleGVjKCBjb25zdCBRUG9p
bnQgJiBwb3MsIGludCBpbmRleEF0UG9pbnQgPSAwICk7CgogICAgdmlydHVhbCB2b2lkIHNldEFj
dGl2ZUl0ZW0oIGludCApOwogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICBpbnQgaWRB
dCggaW50IGluZGV4ICkgY29uc3QgeyByZXR1cm4gUU1lbnVEYXRhOjppZEF0KCBpbmRleCApOyB9
CiAgICBpbnQgaWRBdCggY29uc3QgUVBvaW50JiBwb3MgKSBjb25zdDsKCiAgICBib29sIGN1c3Rv
bVdoYXRzVGhpcygpIGNvbnN0OwoKICAgIGludCBpbnNlcnRUZWFyT2ZmSGFuZGxlKCBpbnQgaWQ9
LTEsIGludCBpbmRleD0tMSApOwoKICAgIHZvaWQgYWN0aXZhdGVJdGVtQXQoIGludCBpbmRleCAp
OwogICAgUVJlY3QgaXRlbUdlb21ldHJ5KCBpbnQgaW5kZXggKTsKCgpwcm90ZWN0ZWQ6CiAgICB2
b2lkIGFjdGl2YXRlZCggaW50IGl0ZW1JZCApOwogICAgdm9pZCBoaWdobGlnaHRlZCggaW50IGl0
ZW1JZCApOwogICAgdm9pZCBhY3RpdmF0ZWRSZWRpcmVjdCggaW50IGl0ZW1JZCApOwogICAgdm9p
ZCBoaWdobGlnaHRlZFJlZGlyZWN0KCBpbnQgaXRlbUlkICk7CiAgICB2b2lkIGFib3V0VG9TaG93
KCk7CiAgICB2b2lkIGFib3V0VG9IaWRlKCk7Cgpwcm90ZWN0ZWQ6CiAgICBpbnQgaXRlbUhlaWdo
dCggaW50ICkgY29uc3Q7CiAgICBpbnQgaXRlbUhlaWdodCggUU1lbnVJdGVtKiBtaSApIGNvbnN0
OwogICAgdm9pZCBkcmF3SXRlbSggUVBhaW50ZXIqIHAsIGludCB0YWIsIFFNZW51SXRlbSogbWks
CiAgICAgICAgICAgICAgICAgICBib29sIGFjdCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgp
OwoKICAgIHZvaWQgZHJhd0NvbnRlbnRzKCBRUGFpbnRlciAqICk7CgogICAgdm9pZCBjbG9zZUV2
ZW50KCBRQ2xvc2VFdmVudCAqZSApOwogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAq
ICk7CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBt
b3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVFdmVu
dCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiAp
OwogICAgdm9pZCBmb2N1c0luRXZlbnQoIFFGb2N1c0V2ZW50ICogKTsKICAgIHZvaWQgZm9jdXNP
dXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCB0aW1lckV2ZW50KCBRVGltZXJFdmVu
dCAqICk7CiAgICB2b2lkIGxlYXZlRXZlbnQoIFFFdmVudCAqICk7CiAgICB2b2lkIHN0eWxlQ2hh
bmdlKCBRU3R5bGUmICk7CiAgICB2b2lkIGVuYWJsZWRDaGFuZ2UoIGJvb2wgKTsKICAgIGludCBj
b2x1bW5zKCkgY29uc3Q7CgogICAgYm9vbCBmb2N1c05leHRQcmV2Q2hpbGQoIGJvb2wgbmV4dCAp
OwoKICAgIGludCBpdGVtQXRQb3MoIGNvbnN0IFFQb2ludCAmLCBib29sIGlnbm9yZVNlcGFyYXRv
ciA9IFRSVUUgKSBjb25zdDsKCnByaXZhdGUgOgogICAgdm9pZCBzdWJBY3RpdmF0ZWQoIGludCBp
dGVtSWQgKTsKICAgIHZvaWQgc3ViSGlnaGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCiAgICB2b2lk
IGFjY2VsQWN0aXZhdGVkKCBpbnQgaXRlbUlkICk7CiAgICB2b2lkIGFjY2VsRGVzdHJveWVkKCk7
CgogICAgdm9pZCBwb3B1cERlc3Ryb3llZCggUU9iamVjdCogKTsKICAgIHZvaWQgbW9kYWxBY3Rp
dmF0aW9uKCBpbnQgKTsKCiAgICB2b2lkIHN1Yk1lbnVUaW1lcigpOwogICAgdm9pZCBzdWJTY3Jv
bGxUaW1lcigpOwogICAgdm9pZCBhbGxvd0FuaW1hdGlvbigpOwogICAgdm9pZCB0b2dnbGVUZWFy
T2ZmKCk7CgogICAgdm9pZCBwZXJmb3JtRGVsYXllZENoYW5nZXMoKTsKCnByaXZhdGU6CiAgICB2
b2lkIHVwZGF0ZVNjcm9sbGVyU3RhdGUoKTsKICAgIHZvaWQgbWVudUNvbnRlbnRzQ2hhbmdlZCgp
OwogICAgdm9pZCBtZW51U3RhdGVDaGFuZ2VkKCk7CiAgICB2b2lkIHBlcmZvcm1EZWxheWVkQ29u
dGVudHNDaGFuZ2VkKCk7CiAgICB2b2lkIHBlcmZvcm1EZWxheWVkU3RhdGVDaGFuZ2VkKCk7CiAg
ICB2b2lkIG1lbnVJbnNQb3B1cCggUVBvcHVwTWVudSAqICk7CiAgICB2b2lkIG1lbnVEZWxQb3B1
cCggUVBvcHVwTWVudSAqICk7CiAgICB2b2lkIGZyYW1lQ2hhbmdlZCgpOwoKICAgIHZvaWQgYWN0
U2lnKCBpbnQsIGJvb2wgPSBGQUxTRSApOwogICAgdm9pZCBoaWxpdFNpZyggaW50ICk7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0Rmlyc3RJdGVtQWN0aXZlKCk7CiAgICB2b2lkIGhpZGVBbGxQb3B1cHMo
KTsKICAgIHZvaWQgaGlkZVBvcHVwcygpOwogICAgYm9vbCB0cnlNZW51QmFyKCBRTW91c2VFdmVu
dCAqICk7CiAgICB2b2lkIGJ5ZU1lbnVCYXIoKTsKCiAgICB2b2lkIHVwZGF0ZVNpemUoKTsKICAg
IHZvaWQgdXBkYXRlUm93KCBpbnQgcm93ICk7CgogICAgdm9pZCB1cGRhdGVBY2NlbCggUVdpZGdl
dCAqICk7CiAgICB2b2lkIGVuYWJsZUFjY2VsKCBib29sICk7CgogICAgUVBvcHVwTWVudVByaXZh
dGUgKmQ7CgogICAgUUFjY2VsICphdXRvYWNjZWw7CgoKCgoKCgogICAgaW50IHBvcHVwQWN0aXZl
OwogICAgaW50IHRhYjsKICAgIHVpbnQgYWNjZWxEaXNhYmxlZCA6IDE7CiAgICB1aW50IGNoZWNr
YWJsZSA6IDE7CiAgICB1aW50IGNvbm5lY3RNb2RhbFJlY3Vyc2lvblNhZmV0eSA6IDE7CiAgICB1
aW50IHRvcm5PZmYgOiAxOwogICAgdWludCBwZW5kaW5nRGVsYXllZENvbnRlbnRzQ2hhbmdlcyA6
IDE7CiAgICB1aW50IHBlbmRpbmdEZWxheWVkU3RhdGVDaGFuZ2VzIDogMTsKICAgIGludCBtYXhQ
TVdpZHRoOwogICAgaW50IG5jb2xzOwogICAgYm9vbCBzbmFwVG9Nb3VzZTsKICAgIGJvb2wgdHJ5
TW91c2VFdmVudCggUVBvcHVwTWVudSAqLCBRTW91c2VFdmVudCAqICk7CgogICAgZnJpZW5kIGNs
YXNzIFFNZW51RGF0YTsKICAgIGZyaWVuZCBjbGFzcyBRTWVudUJhcjsKCiAgICB2b2lkIGNvbm5l
Y3RNb2RhbChRUG9wdXBNZW51KiByZWNlaXZlciwgYm9vbCBkb0Nvbm5lY3QpOwoKcHJpdmF0ZToK
CiAgICBRUG9wdXBNZW51KCBjb25zdCBRUG9wdXBNZW51ICYgKTsKICAgIFFQb3B1cE1lbnUgJm9w
ZXJhdG9yPSggY29uc3QgUVBvcHVwTWVudSAmICk7Cgp9OwojIDQzICIvdXNyL2xvY2FsL3F0LTMu
MS4xL2luY2x1ZGUvcW1lbnViYXIuaCIgMgoKCgoKCgpjbGFzcyBRUG9wdXBNZW51OwoKY2xhc3Mg
UU1lbnVCYXIgOiBwdWJsaWMgUUZyYW1lLCBwdWJsaWMgUU1lbnVEYXRhCnsKICAgIHB1YmxpYzog
dmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01l
dGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0
dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2Uo
IGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiAp
OyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsg
c3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFy
aWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3Qq
IHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0cigg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCgg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9i
amVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKCnB1YmxpYzoKICAgIFFNZW51QmFyKCBRV2lkZ2V0
KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UU1lbnVCYXIoKTsKCiAgICB2
b2lkIHVwZGF0ZUl0ZW0oIGludCBpZCApOwoKICAgIHZvaWQgc2hvdygpOwogICAgdm9pZCBoaWRl
KCk7CgogICAgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiApOwoKICAgIGlu
dCBoZWlnaHRGb3JXaWR0aChpbnQpIGNvbnN0OwoKICAgIGVudW0gU2VwYXJhdG9yIHsgTmV2ZXI9
MCwgSW5XaW5kb3dzU3R5bGU9MSB9OwogICAgU2VwYXJhdG9yIHNlcGFyYXRvcigpIGNvbnN0Owog
ICAgdmlydHVhbCB2b2lkIHNldFNlcGFyYXRvciggU2VwYXJhdG9yIHdoZW4gKTsKCiAgICB2b2lk
IHNldERlZmF1bHRVcCggYm9vbCApOwogICAgYm9vbCBpc0RlZmF1bHRVcCgpIGNvbnN0OwoKICAg
IGJvb2wgY3VzdG9tV2hhdHNUaGlzKCkgY29uc3Q7CgogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25z
dDsKICAgIFFTaXplIG1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVtU2l6ZUhp
bnQoKSBjb25zdDsKCiAgICB2b2lkIGFjdGl2YXRlSXRlbUF0KCBpbnQgaW5kZXggKTsKCgoKCgoK
cHJvdGVjdGVkOgogICAgdm9pZCBhY3RpdmF0ZWQoIGludCBpdGVtSWQgKTsKICAgIHZvaWQgaGln
aGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZHJhd0NvbnRlbnRz
KCBRUGFpbnRlciAqICk7CiAgICB2b2lkIGZvbnRDaGFuZ2UoIGNvbnN0IFFGb250ICYgKTsKICAg
IHZvaWQgbW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlUmVs
ZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlTW92ZUV2ZW50KCBRTW91
c2VFdmVudCAqICk7CiAgICB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVudCAqICk7CiAgICB2
b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1c091dEV2ZW50
KCBRRm9jdXNFdmVudCAqICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiAp
OwogICAgdm9pZCBsZWF2ZUV2ZW50KCBRRXZlbnQgKiApOwogICAgdm9pZCBtZW51Q29udGVudHND
aGFuZ2VkKCk7CiAgICB2b2lkIG1lbnVTdGF0ZUNoYW5nZWQoKTsKICAgIHZvaWQgc3R5bGVDaGFu
Z2UoIFFTdHlsZSYgKTsKICAgIGludCBpdGVtQXRQb3MoIGNvbnN0IFFQb2ludCAmICk7CiAgICB2
b2lkIGhpZGVQb3B1cHMoKTsKICAgIFFSZWN0IGl0ZW1SZWN0KCBpbnQgaXRlbSApOwoKcHJpdmF0
ZSA6CiAgICB2b2lkIHN1YkFjdGl2YXRlZCggaW50IGl0ZW1JZCApOwogICAgdm9pZCBzdWJIaWdo
bGlnaHRlZCggaW50IGl0ZW1JZCApOwoKICAgIHZvaWQgYWNjZWxBY3RpdmF0ZWQoIGludCBpdGVt
SWQgKTsKICAgIHZvaWQgYWNjZWxEZXN0cm95ZWQoKTsKCiAgICB2b2lkIHBvcHVwRGVzdHJveWVk
KCBRT2JqZWN0KiApOwogICAgdm9pZCBwZXJmb3JtRGVsYXllZENoYW5nZXMoKTsKCnByaXZhdGU6
CiAgICB2b2lkIHBlcmZvcm1EZWxheWVkQ29udGVudHNDaGFuZ2VkKCk7CiAgICB2b2lkIHBlcmZv
cm1EZWxheWVkU3RhdGVDaGFuZ2VkKCk7CiAgICB2b2lkIG1lbnVJbnNQb3B1cCggUVBvcHVwTWVu
dSAqICk7CiAgICB2b2lkIG1lbnVEZWxQb3B1cCggUVBvcHVwTWVudSAqICk7CiAgICB2b2lkIGZy
YW1lQ2hhbmdlZCgpOwoKICAgIGJvb2wgdHJ5TW91c2VFdmVudCggUVBvcHVwTWVudSAqLCBRTW91
c2VFdmVudCAqICk7CiAgICB2b2lkIHRyeUtleUV2ZW50KCBRUG9wdXBNZW51ICosIFFLZXlFdmVu
dCAqICk7CiAgICB2b2lkIGdvb2RieWUoIGJvb2wgY2FuY2VsbGVkID0gRkFMU0UgKTsKICAgIHZv
aWQgb3BlbkFjdFBvcHVwKCk7CgogICAgdm9pZCBzZXRBY3RpdmVJdGVtKCBpbnQgaW5kZXgsIGJv
b2wgc2hvdyA9IFRSVUUsIGJvb2wgYWN0aXZhdGVfZmlyc3RfaXRlbSA9IFRSVUUgKTsKICAgIHZv
aWQgc2V0QWx0TW9kZSggYm9vbCApOwoKICAgIGludCBjYWxjdWxhdGVSZWN0cyggaW50IG1heF93
aWR0aCA9IC0xICk7CgoKICAgIHZvaWQgc2V0dXBBY2NlbGVyYXRvcnMoKTsKICAgIFFBY2NlbCAq
YXV0b2FjY2VsOwoKICAgIFFSZWN0ICppcmVjdHM7CiAgICBpbnQgcmlnaHRTaWRlOwoKICAgIHVp
bnQgbXNlcGFyYXRvciA6IDE7CiAgICB1aW50IHdhaXRmb3JhbHQgOiAxOwogICAgdWludCBwb3B1
cHZpc2libGUgOiAxOwogICAgdWludCBoYXNtb3VzZSA6IDE7CiAgICB1aW50IGRlZmF1bHR1cCA6
IDE7CiAgICB1aW50IHRvZ2dsZWNsb3NlIDogMTsKICAgIHVpbnQgcGVuZGluZ0RlbGF5ZWRDb250
ZW50c0NoYW5nZXMgOiAxOwogICAgdWludCBwZW5kaW5nRGVsYXllZFN0YXRlQ2hhbmdlcyA6IDE7
CgogICAgZnJpZW5kIGNsYXNzIFFQb3B1cE1lbnU7CiMgMTg3ICIvdXNyL2xvY2FsL3F0LTMuMS4x
L2luY2x1ZGUvcW1lbnViYXIuaCIKcHJpdmF0ZToKCgogICAgUU1lbnVCYXIoIGNvbnN0IFFNZW51
QmFyICYgKTsKICAgIFFNZW51QmFyICZvcGVyYXRvcj0oIGNvbnN0IFFNZW51QmFyICYgKTsKCn07
CiMgMjAgIlR4Vm9ycGFsR1VJLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl
L3FsYWJlbC5oIiAxCiMgNDcgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbGFiZWwuaCIK
Y2xhc3MgUVNpbXBsZVJpY2hUZXh0OwpjbGFzcyBRTGFiZWxQcml2YXRlOwoKY2xhc3MgUUxhYmVs
IDogcHVibGljIFFGcmFtZQp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFP
YmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25z
dCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBj
aGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFs
IGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5
KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9w
ZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVj
dCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmpl
Y3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
ID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
ID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAg
CiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRTGFiZWwoIFFXaWRnZXQgKnBhcmVudCwgY29uc3Qg
Y2hhciogbmFtZT0wLCBXRmxhZ3MgZj0wICk7CiAgICBRTGFiZWwoIGNvbnN0IFFTdHJpbmcgJnRl
eHQsIFFXaWRnZXQgKnBhcmVudCwgY29uc3QgY2hhciogbmFtZT0wLAogICAgICAgICAgICBXRmxh
Z3MgZj0wICk7CiAgICBRTGFiZWwoIFFXaWRnZXQgKmJ1ZGR5LCBjb25zdCBRU3RyaW5nICYsCiAg
ICAgICAgICAgIFFXaWRnZXQgKnBhcmVudCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3MgZj0w
ICk7CiAgICB+UUxhYmVsKCk7CgogICAgUVN0cmluZyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbHRl
eHQ7IH0KICAgIFFQaXhtYXAgKnBpeG1hcCgpIGNvbnN0IHsgcmV0dXJuIGxwaXhtYXA7IH0KCiAg
ICBRUGljdHVyZSAqcGljdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGxwaWN0dXJlOyB9CgoKICAgIFFN
b3ZpZSAqbW92aWUoKSBjb25zdDsKCgogICAgVGV4dEZvcm1hdCB0ZXh0Rm9ybWF0KCkgY29uc3Q7
CiAgICB2b2lkIHNldFRleHRGb3JtYXQoIFRleHRGb3JtYXQgKTsKCiAgICBpbnQgYWxpZ25tZW50
KCkgY29uc3QgeyByZXR1cm4gYWxpZ247IH0KICAgIHZpcnR1YWwgdm9pZCBzZXRBbGlnbm1lbnQo
IGludCApOwogICAgaW50IGluZGVudCgpIGNvbnN0IHsgcmV0dXJuIGV4dHJhTWFyZ2luOyB9CiAg
ICB2b2lkIHNldEluZGVudCggaW50ICk7CgogICAgYm9vbCBhdXRvUmVzaXplKCkgY29uc3QgeyBy
ZXR1cm4gYXV0b3Jlc2l6ZTsgfQogICAgdmlydHVhbCB2b2lkIHNldEF1dG9SZXNpemUoIGJvb2wg
KTsKCiAgICBib29sIGhhc1NjYWxlZENvbnRlbnRzKCkgY29uc3Q7CiAgICB2b2lkIHNldFNjYWxl
ZENvbnRlbnRzKCBib29sICk7CgogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKICAgIFFTaXpl
IG1pbmltdW1TaXplSGludCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRCdWRkeSggUVdp
ZGdldCAqICk7CiAgICBRV2lkZ2V0ICpidWRkeSgpIGNvbnN0OwoKICAgIGludCBoZWlnaHRGb3JX
aWR0aChpbnQpIGNvbnN0OwoKICAgIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJmYgKTsKCnB1
YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyAmKTsKICAgIHZp
cnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIHZpcnR1YWwgdm9p
ZCBzZXRQaWN0dXJlKCBjb25zdCBRUGljdHVyZSAmICk7CgoKICAgIHZpcnR1YWwgdm9pZCBzZXRN
b3ZpZSggY29uc3QgUU1vdmllICYgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TnVtKCBpbnQgKTsK
ICAgIHZpcnR1YWwgdm9pZCBzZXROdW0oIGRvdWJsZSApOwogICAgdm9pZCBjbGVhcigpOwoKcHJv
dGVjdGVkOgogICAgdm9pZCBkcmF3Q29udGVudHMoIFFQYWludGVyICogKTsKICAgIHZvaWQgZm9u
dENoYW5nZSggY29uc3QgUUZvbnQgJiApOwogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2
ZW50KiApOwoKcHJpdmF0ZSA6CgogICAgdm9pZCBhY2NlbGVyYXRvclNsb3QoKTsKICAgIHZvaWQg
YnVkZHlEaWVkKCk7CgoKICAgIHZvaWQgbW92aWVVcGRhdGVkKGNvbnN0IFFSZWN0Jik7CiAgICB2
b2lkIG1vdmllUmVzaXplZChjb25zdCBRU2l6ZSYpOwoKCnByaXZhdGU6CiAgICB2b2lkIGluaXQo
KTsKICAgIHZvaWQgY2xlYXJDb250ZW50cygpOwogICAgdm9pZCB1cGRhdGVMYWJlbCggUVNpemUg
b2xkU2l6ZUhpbnQgKTsKICAgIFFTaXplIHNpemVGb3JXaWR0aCggaW50IHcgKSBjb25zdDsKICAg
IFFTdHJpbmcgbHRleHQ7CiAgICBRUGl4bWFwICpscGl4bWFwOwoKICAgIFFQaWN0dXJlICpscGlj
dHVyZTsKCgogICAgUU1vdmllICogbG1vdmllOwoKCiAgICBRV2lkZ2V0ICogbGJ1ZGR5OwoKICAg
IHVzaG9ydCBhbGlnbjsKICAgIHNob3J0IGV4dHJhTWFyZ2luOwogICAgdWludCBhdXRvcmVzaXpl
OjE7CiAgICB1aW50IHNjYWxlZGNvbnRlbnRzIDoxOwogICAgVGV4dEZvcm1hdCB0ZXh0Zm9ybWF0
OwoKICAgIFFTaW1wbGVSaWNoVGV4dCogZG9jOwoKCiAgICBRQWNjZWwgKiBhY2NlbDsKCiAgICBR
TGFiZWxQcml2YXRlKiBkOwoKICAgIGZyaWVuZCBjbGFzcyBRVGlwTGFiZWw7Cgpwcml2YXRlOgoK
ICAgIFFMYWJlbCggY29uc3QgUUxhYmVsICYgKTsKICAgIFFMYWJlbCAmb3BlcmF0b3I9KCBjb25z
dCBRTGFiZWwgJiApOwoKfTsKIyAyMiAiVHhWb3JwYWxHVUkuaCIgMgojIDEgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xY2FudmFzLmgiIDEKIyA0NiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p
bmNsdWRlL3FjYW52YXMuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBlbi5o
IiAxCiMgNDcgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGVuLmgiCmNsYXNzIFFQZW46
IHB1YmxpYyBRdAp7CmZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKcHVibGljOgogICAgUVBlbigpOwog
ICAgUVBlbiggUGVuU3R5bGUgKTsKICAgIFFQZW4oIGNvbnN0IFFDb2xvciAmY29sb3IsIHVpbnQg
d2lkdGg9MCwgUGVuU3R5bGUgc3R5bGU9U29saWRMaW5lICk7CiAgICBRUGVuKCBjb25zdCBRQ29s
b3IgJmNsLCB1aW50IHcsIFBlblN0eWxlIHMsIFBlbkNhcFN0eWxlIGMsIFBlbkpvaW5TdHlsZSBq
KTsKICAgIFFQZW4oIGNvbnN0IFFQZW4gJiApOwogICB+UVBlbigpOwogICAgUVBlbiAmb3BlcmF0
b3I9KCBjb25zdCBRUGVuICYgKTsKCiAgICBQZW5TdHlsZSBzdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IGRhdGEtPnN0eWxlOyB9CiAgICB2b2lkIHNldFN0eWxlKCBQZW5TdHlsZSApOwogICAgdWludCB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPndpZHRoOyB9CiAgICB2b2lkIHNldFdpZHRoKCB1
aW50ICk7CiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+Y29s
b3I7IH0KICAgIHZvaWQgc2V0Q29sb3IoIGNvbnN0IFFDb2xvciAmICk7CiAgICBQZW5DYXBTdHls
ZSBjYXBTdHlsZSgpIGNvbnN0OwogICAgdm9pZCBzZXRDYXBTdHlsZSggUGVuQ2FwU3R5bGUgKTsK
ICAgIFBlbkpvaW5TdHlsZSBqb2luU3R5bGUoKSBjb25zdDsKICAgIHZvaWQgc2V0Sm9pblN0eWxl
KCBQZW5Kb2luU3R5bGUgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQZW4gJnAgKSBj
b25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBlbiAmcCApIGNvbnN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0ocCkp
OyB9Cgpwcml2YXRlOgogICAgUVBlbiBjb3B5KCkgY29uc3Q7CiAgICB2b2lkIGRldGFjaCgpOwog
ICAgdm9pZCBpbml0KCBjb25zdCBRQ29sb3IgJiwgdWludCwgdWludCApOwogICAgc3RydWN0IFFQ
ZW5EYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgICAgIFBlblN0eWxlIHN0eWxlOwogICAgICAg
IHVpbnQgd2lkdGg7CiAgICAgICAgUUNvbG9yIGNvbG9yOwogICAgICAgIFFfVUlOVDE2IGxpbmVz
dDsKICAgIH0gKmRhdGE7Cn07CgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFT
dHJlYW0gJiwgY29uc3QgUVBlbiAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFT
dHJlYW0gJiwgUVBlbiAmICk7CiMgNDcgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xY2Fu
dmFzLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fwb2ludGFycmF5Lmgi
IDEKIyA1MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fwb2ludGFycmF5LmgiCmNsYXNz
IFFQb2ludEFycmF5IDogcHVibGljIFFNZW1BcnJheTxRUG9pbnQ+CnsKcHVibGljOgogICAgUVBv
aW50QXJyYXkoKSB7fQogICAgflFQb2ludEFycmF5KCkge30KICAgIFFQb2ludEFycmF5KCBpbnQg
c2l6ZSApIDogUU1lbUFycmF5PFFQb2ludD4oIHNpemUgKSB7fQogICAgUVBvaW50QXJyYXkoIGNv
bnN0IFFQb2ludEFycmF5ICZhICkgOiBRTWVtQXJyYXk8UVBvaW50PiggYSApIHt9CiAgICBRUG9p
bnRBcnJheSggY29uc3QgUVJlY3QgJnIsIGJvb2wgY2xvc2VkPUZBTFNFICk7CiAgICBRUG9pbnRB
cnJheSggaW50IG5Qb2ludHMsIGNvbnN0IFFDT09SRCAqcG9pbnRzICk7CgogICAgUVBvaW50QXJy
YXkgJm9wZXJhdG9yPSggY29uc3QgUVBvaW50QXJyYXkgJmEgKQogICAgICAgIHsgcmV0dXJuIChR
UG9pbnRBcnJheSYpYXNzaWduKCBhICk7IH0KCiAgICBRUG9pbnRBcnJheSBjb3B5KCkgY29uc3QK
ICAgICAgICB7IFFQb2ludEFycmF5IHRtcDsgcmV0dXJuICooKFFQb2ludEFycmF5KikmdG1wLmR1
cGxpY2F0ZSgqdGhpcykpOyB9CgogICAgdm9pZCB0cmFuc2xhdGUoIGludCBkeCwgaW50IGR5ICk7
CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKCiAgICB2b2lkIHBvaW50KCB1aW50IGks
IGludCAqeCwgaW50ICp5ICkgY29uc3Q7CiAgICBRUG9pbnQgcG9pbnQoIHVpbnQgaSApIGNvbnN0
OwogICAgdm9pZCBzZXRQb2ludCggdWludCBpLCBpbnQgeCwgaW50IHkgKTsKICAgIHZvaWQgc2V0
UG9pbnQoIHVpbnQgaSwgY29uc3QgUVBvaW50ICZwICk7CiAgICBib29sIHNldFBvaW50cyggaW50
IG5Qb2ludHMsIGNvbnN0IFFDT09SRCAqcG9pbnRzICk7CiAgICBib29sIHNldFBvaW50cyggaW50
IG5Qb2ludHMsIGludCBmaXJzdHgsIGludCBmaXJzdHksIC4uLiApOwogICAgYm9vbCBwdXRQb2lu
dHMoIGludCBpbmRleCwgaW50IG5Qb2ludHMsIGNvbnN0IFFDT09SRCAqcG9pbnRzICk7CiAgICBi
b29sIHB1dFBvaW50cyggaW50IGluZGV4LCBpbnQgblBvaW50cywgaW50IGZpcnN0eCwgaW50IGZp
cnN0eSwgLi4uICk7CiAgICBib29sIHB1dFBvaW50cyggaW50IGluZGV4LCBpbnQgblBvaW50cywK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRBcnJheSAmIGZyb20sIGludCBmcm9t
SW5kZXg9MCApOwoKICAgIHZvaWQgbWFrZUFyYyggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgs
IGludCBhMSwgaW50IGEyICk7CiAgICB2b2lkIG1ha2VFbGxpcHNlKCBpbnQgeCwgaW50IHksIGlu
dCB3LCBpbnQgaCApOwogICAgdm9pZCBtYWtlQXJjKCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCwgaW50IGExLCBpbnQgYTIsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFXTWF0cml4JiAp
OwogICAgUVBvaW50QXJyYXkgY3ViaWNCZXppZXIoKSBjb25zdDsKCiAgICB2b2lkKiBzaG9ydFBv
aW50cyggaW50IGluZGV4ID0gMCwgaW50IG5Qb2ludHMgPSAtMSApIGNvbnN0OwogICAgc3RhdGlj
IHZvaWQgY2xlYW5CdWZmZXJzKCk7Cgpwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgdWludCBzcGxlbjsK
ICAgIHN0YXRpYyB2b2lkKiBzcDsKfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBR
RGF0YVN0cmVhbSAmLCBjb25zdCBRUG9pbnRBcnJheSAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I+PiggUURhdGFTdHJlYW0gJiwgUVBvaW50QXJyYXkgJiApOwoKCgoKCgppbmxpbmUgdm9pZCBR
UG9pbnRBcnJheTo6c2V0UG9pbnQoIHVpbnQgaSwgY29uc3QgUVBvaW50ICZwICkKewogICAgc2V0
UG9pbnQoIGksIHAueCgpLCBwLnkoKSApOwp9CiMgNDkgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j
bHVkZS9xY2FudmFzLmgiIDIKIyA2MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FjYW52
YXMuaCIKY2xhc3MgUUNhbnZhc1Nwcml0ZTsKY2xhc3MgUUNhbnZhc1BvbHlnb25hbEl0ZW07CmNs
YXNzIFFDYW52YXNSZWN0YW5nbGU7CmNsYXNzIFFDYW52YXNQb2x5Z29uOwpjbGFzcyBRQ2FudmFz
RWxsaXBzZTsKY2xhc3MgUUNhbnZhc1RleHQ7CmNsYXNzIFFDYW52YXNMaW5lOwpjbGFzcyBRQ2Fu
dmFzQ2h1bms7CmNsYXNzIFFDYW52YXM7CmNsYXNzIFFDYW52YXNJdGVtOwpjbGFzcyBRQ2FudmFz
VmlldzsKY2xhc3MgUUNhbnZhc1BpeG1hcDsKIyA4NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs
dWRlL3FjYW52YXMuaCIKY2xhc3MgUUNhbnZhc0l0ZW1MaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8
UUNhbnZhc0l0ZW0qPiB7CnB1YmxpYzoKICAgIHZvaWQgc29ydCgpOwogICAgdm9pZCBkcmF3VW5p
cXVlKCBRUGFpbnRlciYgcGFpbnRlciApOwp9OwoKCmNsYXNzIFFDYW52YXNJdGVtRXh0cmE7Cgpj
bGFzcyBRQ2FudmFzSXRlbSA6IHB1YmxpYyBRdAp7CnB1YmxpYzoKICAgIFFDYW52YXNJdGVtKFFD
YW52YXMqIGNhbnZhcyk7CiAgICB2aXJ0dWFsIH5RQ2FudmFzSXRlbSgpOwoKICAgIGRvdWJsZSB4
KCkgY29uc3QKICAgICAgICB7IHJldHVybiBteXg7IH0KICAgIGRvdWJsZSB5KCkgY29uc3QKICAg
ICAgICB7IHJldHVybiBteXk7IH0KICAgIGRvdWJsZSB6KCkgY29uc3QKICAgICAgICB7IHJldHVy
biBteXo7IH0KCiAgICB2aXJ0dWFsIHZvaWQgbW92ZUJ5KGRvdWJsZSBkeCwgZG91YmxlIGR5KTsK
ICAgIHZvaWQgbW92ZShkb3VibGUgeCwgZG91YmxlIHkpOwogICAgdm9pZCBzZXRYKGRvdWJsZSBh
KSB7IG1vdmUoYSx5KCkpOyB9CiAgICB2b2lkIHNldFkoZG91YmxlIGEpIHsgbW92ZSh4KCksYSk7
IH0KICAgIHZvaWQgc2V0Wihkb3VibGUgYSkgeyBteXo9YTsgY2hhbmdlQ2h1bmtzKCk7IH0KCiAg
ICBib29sIGFuaW1hdGVkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWQoYm9v
bCB5KTsKICAgIHZpcnR1YWwgdm9pZCBzZXRWZWxvY2l0eSggZG91YmxlIHZ4LCBkb3VibGUgdnkp
OwogICAgdm9pZCBzZXRYVmVsb2NpdHkoIGRvdWJsZSB2eCApIHsgc2V0VmVsb2NpdHkodngseVZl
bG9jaXR5KCkpOyB9CiAgICB2b2lkIHNldFlWZWxvY2l0eSggZG91YmxlIHZ5ICkgeyBzZXRWZWxv
Y2l0eSh4VmVsb2NpdHkoKSx2eSk7IH0KICAgIGRvdWJsZSB4VmVsb2NpdHkoKSBjb25zdDsKICAg
IGRvdWJsZSB5VmVsb2NpdHkoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKGludCBz
dGFnZSk7CgogICAgdmlydHVhbCBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc0l0ZW0q
ICkgY29uc3Q9MDsKCiAgICBRQ2FudmFzSXRlbUxpc3QgY29sbGlzaW9ucyhib29sIGV4YWN0ICkg
Y29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldENhbnZhcyhRQ2FudmFzKik7CgogICAgdmlydHVh
bCB2b2lkIGRyYXcoUVBhaW50ZXImKT0wOwoKICAgIHZvaWQgc2hvdygpOwogICAgdm9pZCBoaWRl
KCk7CgogICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCB5ZXMpOwogICAgYm9vbCBpc1Zp
c2libGUoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIChib29sKXZpczsgfQogICAgdmlydHVhbCB2
b2lkIHNldFNlbGVjdGVkKGJvb2wgeWVzKTsKICAgIGJvb2wgaXNTZWxlY3RlZCgpIGNvbnN0CiAg
ICAgICAgeyByZXR1cm4gKGJvb2wpc2VsOyB9CiAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChi
b29sIHllcyk7CiAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGJv
b2wpZW5hOyB9CiAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wgeWVzKTsKICAgIGJvb2wg
aXNBY3RpdmUoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIChib29sKWFjdDsgfQoKICAgIGJvb2wg
dmlzaWJsZSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGJvb2wpdmlzOyB9CiAgICBib29sIHNl
bGVjdGVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiAoYm9vbClzZWw7IH0KICAgIGJvb2wgZW5h
YmxlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGJvb2wpZW5hOyB9CiAgICBib29sIGFjdGl2
ZSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGJvb2wpYWN0OyB9CgoKICAgIGVudW0gUnR0aVZh
bHVlcyB7CiAgICAgICAgUnR0aV9JdGVtID0gMCwKICAgICAgICBSdHRpX1Nwcml0ZSA9IDEsCiAg
ICAgICAgUnR0aV9Qb2x5Z29uYWxJdGVtID0gMiwKICAgICAgICBSdHRpX1RleHQgPSAzLAogICAg
ICAgIFJ0dGlfUG9seWdvbiA9IDQsCiAgICAgICAgUnR0aV9SZWN0YW5nbGUgPSA1LAogICAgICAg
IFJ0dGlfRWxsaXBzZSA9IDYsCiAgICAgICAgUnR0aV9MaW5lID0gNywKICAgICAgICBSdHRpX1Nw
bGluZSA9IDgKICAgIH07CgogICAgdmlydHVhbCBpbnQgcnR0aSgpIGNvbnN0OwogICAgc3RhdGlj
IGludCBSVFRJOwoKICAgIHZpcnR1YWwgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q9MDsKICAg
IHZpcnR1YWwgUVJlY3QgYm91bmRpbmdSZWN0QWR2YW5jZWQoKSBjb25zdDsKCiAgICBRQ2FudmFz
KiBjYW52YXMoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNudjsgfQoKcHJvdGVjdGVkOgogICAg
dm9pZCB1cGRhdGUoKSB7IGNoYW5nZUNodW5rcygpOyB9Cgpwcml2YXRlOgoKCiAgICBmcmllbmQg
Y2xhc3MgUUNhbnZhc1BvbHlnb25hbEl0ZW07CiAgICBmcmllbmQgY2xhc3MgUUNhbnZhc1Nwcml0
ZTsKICAgIGZyaWVuZCBjbGFzcyBRQ2FudmFzUmVjdGFuZ2xlOwogICAgZnJpZW5kIGNsYXNzIFFD
YW52YXNQb2x5Z29uOwogICAgZnJpZW5kIGNsYXNzIFFDYW52YXNFbGxpcHNlOwogICAgZnJpZW5k
IGNsYXNzIFFDYW52YXNUZXh0OwogICAgZnJpZW5kIGNsYXNzIFFDYW52YXNMaW5lOwoKICAgIHZp
cnR1YWwgUVBvaW50QXJyYXkgY2h1bmtzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgYWRkVG9D
aHVua3MoKTsKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tQ2h1bmtzKCk7CiAgICB2aXJ0dWFs
IHZvaWQgY2hhbmdlQ2h1bmtzKCk7CiAgICB2aXJ0dWFsIGJvb2wgY29sbGlkZXNXaXRoKCBjb25z
dCBRQ2FudmFzU3ByaXRlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFD
YW52YXNQb2x5Z29uYWxJdGVtKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFDYW52YXNSZWN0YW5nbGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UUNhbnZhc0VsbGlwc2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNh
bnZhc1RleHQqICkgY29uc3QgPSAwOwoKCiAgICBRQ2FudmFzKiBjbnY7CiAgICBzdGF0aWMgUUNh
bnZhcyogY3VycmVudF9jYW52YXM7CiAgICBkb3VibGUgbXl4LG15eSxteXo7CiAgICBRQ2FudmFz
SXRlbUV4dHJhICpleHQ7CiAgICBRQ2FudmFzSXRlbUV4dHJhJiBleHRyYSgpOwogICAgdWludCBh
bmk6MTsKICAgIHVpbnQgdmlzOjE7CiAgICB1aW50IHZhbDoxOwogICAgdWludCBzZWw6MTsKICAg
IHVpbnQgZW5hOjE7CiAgICB1aW50IGFjdDoxOwp9OwoKCmNsYXNzIFFDYW52YXNEYXRhOwoKY2xh
c3MgUUNhbnZhcyA6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9i
amVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2
aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nh
c3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3Qq
ICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg
cXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRf
c3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGlj
IFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJl
dHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsK
cHVibGljOgogICAgUUNhbnZhcyggUU9iamVjdCogcGFyZW50ID0gMCwgY29uc3QgY2hhciogbmFt
ZSA9IDAgKTsKICAgIFFDYW52YXMoaW50IHcsIGludCBoKTsKICAgIFFDYW52YXMoIFFQaXhtYXAg
cCwgaW50IGgsIGludCB2LCBpbnQgdGlsZXdpZHRoLCBpbnQgdGlsZWhlaWdodCApOwoKICAgIHZp
cnR1YWwgflFDYW52YXMoKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VGlsZXMoIFFQaXhtYXAgdGls
ZXMsIGludCBoLCBpbnQgdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbGV3aWR0
aCwgaW50IHRpbGVoZWlnaHQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kUGl4bWFw
KCBjb25zdCBRUGl4bWFwJiBwICk7CiAgICBRUGl4bWFwIGJhY2tncm91bmRQaXhtYXAoKSBjb25z
dDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKCBjb25zdCBRQ29sb3ImIGMg
KTsKICAgIFFDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQg
c2V0VGlsZSggaW50IHgsIGludCB5LCBpbnQgdGlsZW51bSApOwogICAgaW50IHRpbGUoIGludCB4
LCBpbnQgeSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gZ3JpZFt4K3kqaHRpbGVzXTsgfQoKICAg
IGludCB0aWxlc0hvcml6b250YWxseSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gaHRpbGVzOyB9
CiAgICBpbnQgdGlsZXNWZXJ0aWNhbGx5KCkgY29uc3QKICAgICAgICB7IHJldHVybiB2dGlsZXM7
IH0KCiAgICBpbnQgdGlsZVdpZHRoKCkgY29uc3QKICAgICAgICB7IHJldHVybiB0aWxldzsgfQog
ICAgaW50IHRpbGVIZWlnaHQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIHRpbGVoOyB9CgogICAg
dmlydHVhbCB2b2lkIHJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgaW50IHdpZHRo
KCkgY29uc3QKICAgICAgICB7IHJldHVybiBhd2lkdGg7IH0KICAgIGludCBoZWlnaHQoKSBjb25z
dAogICAgICAgIHsgcmV0dXJuIGFoZWlnaHQ7IH0KICAgIFFTaXplIHNpemUoKSBjb25zdAogICAg
ICAgIHsgcmV0dXJuIFFTaXplKGF3aWR0aCxhaGVpZ2h0KTsgfQogICAgUVJlY3QgcmVjdCgpIGNv
bnN0CiAgICAgICAgeyByZXR1cm4gUVJlY3QoIDAsIDAsIGF3aWR0aCwgYWhlaWdodCApOyB9CiAg
ICBib29sIG9uQ2FudmFzKCBpbnQgeCwgaW50IHkgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIHg+
PTAgJiYgeT49MCAmJiB4PGF3aWR0aCAmJiB5PGFoZWlnaHQ7IH0KICAgIGJvb2wgb25DYW52YXMo
IGNvbnN0IFFQb2ludCYgcCApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gb25DYW52YXMocC54KCks
cC55KCkpOyB9CiAgICBib29sIHZhbGlkQ2h1bmsoIGludCB4LCBpbnQgeSApIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4geD49MCAmJiB5Pj0wICYmIHg8Y2h3aWR0aCAmJiB5PGNoaGVpZ2h0OyB9CiAg
ICBib29sIHZhbGlkQ2h1bmsoIGNvbnN0IFFQb2ludCYgcCApIGNvbnN0CiAgICAgICAgeyByZXR1
cm4gdmFsaWRDaHVuayhwLngoKSxwLnkoKSk7IH0KCiAgICBpbnQgY2h1bmtTaXplKCkgY29uc3QK
ICAgICAgICB7IHJldHVybiBjaHVua3NpemU7IH0KICAgIHZpcnR1YWwgdm9pZCByZXR1bmUoaW50
IGNodW5rc2l6ZSwgaW50IG1heGNsdXN0ZXJzPTEwMCk7CgogICAgYm9vbCBzYW1lQ2h1bmsoaW50
IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKSBjb25zdAogICAgICAgIHsgcmV0dXJuIHgxL2No
dW5rc2l6ZT09eDIvY2h1bmtzaXplICYmIHkxL2NodW5rc2l6ZT09eTIvY2h1bmtzaXplOyB9CiAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2hhbmdlZENodW5rKGludCBpLCBpbnQgaik7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2hhbmdlZENodW5rQ29udGFpbmluZyhpbnQgeCwgaW50IHkpOwogICAgdmlydHVh
bCB2b2lkIHNldEFsbENoYW5nZWQoKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRDaGFuZ2VkKGNvbnN0
IFFSZWN0JiBhcmVhKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRVbmNoYW5nZWQoY29uc3QgUVJlY3Qm
IGFyZWEpOwoKCiAgICB2b2lkIGFkZEl0ZW1Ub0NodW5rKFFDYW52YXNJdGVtKiwgaW50IGksIGlu
dCBqKTsKICAgIHZvaWQgcmVtb3ZlSXRlbUZyb21DaHVuayhRQ2FudmFzSXRlbSosIGludCBpLCBp
bnQgaik7CiAgICB2b2lkIGFkZEl0ZW1Ub0NodW5rQ29udGFpbmluZyhRQ2FudmFzSXRlbSosIGlu
dCB4LCBpbnQgeSk7CiAgICB2b2lkIHJlbW92ZUl0ZW1Gcm9tQ2h1bmtDb250YWluaW5nKFFDYW52
YXNJdGVtKiwgaW50IHgsIGludCB5KTsKCiAgICBRQ2FudmFzSXRlbUxpc3QgYWxsSXRlbXMoKTsK
ICAgIFFDYW52YXNJdGVtTGlzdCBjb2xsaXNpb25zKCBjb25zdCBRUG9pbnQmKSBjb25zdDsKICAg
IFFDYW52YXNJdGVtTGlzdCBjb2xsaXNpb25zKCBjb25zdCBRUmVjdCYpIGNvbnN0OwogICAgUUNh
bnZhc0l0ZW1MaXN0IGNvbGxpc2lvbnMoIGNvbnN0IFFQb2ludEFycmF5JiBwYSwgY29uc3QgUUNh
bnZhc0l0ZW0qIGl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGFj
dCkgY29uc3Q7CgogICAgdm9pZCBkcmF3QXJlYShjb25zdCBRUmVjdCYsIFFQYWludGVyKiBwLCBi
b29sIGRvdWJsZV9idWZmZXI9RkFMU0UpOwoKCiAgICB2aXJ0dWFsIHZvaWQgYWRkVmlldyhRQ2Fu
dmFzVmlldyopOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZVZpZXcoUUNhbnZhc1ZpZXcqKTsKICAg
IHZvaWQgZHJhd0NhbnZhc0FyZWEoY29uc3QgUVJlY3QmLCBRUGFpbnRlciogcD0wLCBib29sIGRv
dWJsZV9idWZmZXI9VFJVRSk7CiAgICB2b2lkIGRyYXdWaWV3QXJlYSggUUNhbnZhc1ZpZXcqIHZp
ZXcsIFFQYWludGVyKiBwLCBjb25zdCBRUmVjdCYgciwgYm9vbCBkYnVmICk7CgoKICAgIHZpcnR1
YWwgdm9pZCBhZGRJdGVtKFFDYW52YXNJdGVtKik7CiAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0
aW9uKFFDYW52YXNJdGVtKik7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShRQ2FudmFzSXRl
bSopOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihRQ2FudmFzSXRlbSopOwoKICAg
IHZpcnR1YWwgdm9pZCBzZXRBZHZhbmNlUGVyaW9kKGludCBtcyk7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0VXBkYXRlUGVyaW9kKGludCBtcyk7CgogICAgdmlydHVhbCB2b2lkIHNldERvdWJsZUJ1ZmZl
cmluZyhib29sIHkpOwoKcHJvdGVjdGVkOgogICAgdm9pZCByZXNpemVkKCk7CgpwdWJsaWMgOgog
ICAgdmlydHVhbCB2b2lkIGFkdmFuY2UoKTsKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoKTsKCnBy
b3RlY3RlZDoKICAgIHZpcnR1YWwgdm9pZCBkcmF3QmFja2dyb3VuZChRUGFpbnRlciYsIGNvbnN0
IFFSZWN0JiBhcmVhKTsKICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9yZWdyb3VuZChRUGFpbnRlciYs
IGNvbnN0IFFSZWN0JiBhcmVhKTsKCnByaXZhdGU6CiAgICB2b2lkIGluaXQoaW50IHcsIGludCBo
LCBpbnQgY2h1bmtzemU9MTYsIGludCBtYXhjbHVzdD0xMDApOwoKICAgIFFDYW52YXNDaHVuayYg
Y2h1bmsoaW50IGksIGludCBqKSBjb25zdDsKICAgIFFDYW52YXNDaHVuayYgY2h1bmtDb250YWlu
aW5nKGludCB4LCBpbnQgeSkgY29uc3Q7CgogICAgUVJlY3QgY2hhbmdlQm91bmRzKGNvbnN0IFFS
ZWN0JiBpbmFyZWEpOwogICAgdm9pZCBkcmF3Q2hhbmdlcyhjb25zdCBRUmVjdCYgaW5hcmVhKTsK
CiAgICB2b2lkIGVuc3VyZU9mZlNjclNpemUoIGludCBvc3csIGludCBvc2ggKTsKICAgIFFQaXht
YXAgb2Zmc2NyOwogICAgaW50IGF3aWR0aCxhaGVpZ2h0OwogICAgaW50IGNodW5rc2l6ZTsKICAg
IGludCBtYXhjbHVzdGVyczsKICAgIGludCBjaHdpZHRoLGNoaGVpZ2h0OwogICAgUUNhbnZhc0No
dW5rKiBjaHVua3M7CgogICAgUUNhbnZhc0RhdGEqIGQ7CgogICAgdm9pZCBpbml0VGlsZXMoUVBp
eG1hcCBwLCBpbnQgaCwgaW50IHYsIGludCB0aWxld2lkdGgsIGludCB0aWxlaGVpZ2h0KTsKICAg
IHVzaG9ydCAqZ3JpZDsKICAgIHVzaG9ydCBodGlsZXM7CiAgICB1c2hvcnQgdnRpbGVzOwogICAg
dXNob3J0IHRpbGV3OwogICAgdXNob3J0IHRpbGVoOwogICAgYm9vbCBvbmVvbmU7CiAgICBRUGl4
bWFwIHBtOwogICAgUVRpbWVyKiB1cGRhdGVfdGltZXI7CiAgICBRQ29sb3IgYmdjb2xvcjsKICAg
IGJvb2wgZGVidWdfcmVkcmF3X2FyZWFzOwogICAgYm9vbCBkYmxidWY7CgogICAgZnJpZW5kIHZv
aWQgcXRfdW52aWV3KFFDYW52YXMqIGMpOwoKCiAgICBRQ2FudmFzKCBjb25zdCBRQ2FudmFzICYg
KTsKICAgIFFDYW52YXMgJm9wZXJhdG9yPSggY29uc3QgUUNhbnZhcyAmICk7Cgp9OwoKY2xhc3Mg
UUNhbnZhc1ZpZXdEYXRhOwoKY2xhc3MgUUNhbnZhc1ZpZXcgOiBwdWJsaWMgUVNjcm9sbFZpZXcK
ewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1l
KCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBi
b29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGlu
dCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwg
UVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwg
aW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmpl
Y3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRp
YyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFT
dHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTog
c3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CgogICAgUUNhbnZhc1ZpZXcoUVdp
ZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdzIGY9MCk7CiAgICBRQ2Fu
dmFzVmlldyhRQ2FudmFzKiB2aWV3aW5nLCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciog
bmFtZT0wLCBXRmxhZ3MgZj0wKTsKICAgIH5RQ2FudmFzVmlldygpOwoKICAgIFFDYW52YXMqIGNh
bnZhcygpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gdmlld2luZzsgfQogICAgdm9pZCBzZXRDYW52
YXMoUUNhbnZhcyogdik7CgogICAgY29uc3QgUVdNYXRyaXggJndvcmxkTWF0cml4KCkgY29uc3Q7
CiAgICBjb25zdCBRV01hdHJpeCAmaW52ZXJzZVdvcmxkTWF0cml4KCkgY29uc3Q7CiAgICBib29s
IHNldFdvcmxkTWF0cml4KCBjb25zdCBRV01hdHJpeCAmICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lk
IGRyYXdDb250ZW50cyggUVBhaW50ZXIqLCBpbnQgY3gsIGludCBjeSwgaW50IGN3LCBpbnQgY2gg
KTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7Cgpwcml2YXRlOgogICAgdm9pZCBkcmF3Q29u
dGVudHMoIFFQYWludGVyKiApOwogICAgUUNhbnZhcyogdmlld2luZzsKICAgIFFDYW52YXNWaWV3
RGF0YSogZDsKICAgIGZyaWVuZCB2b2lkIHF0X3VudmlldyhRQ2FudmFzKiBjKTsKCnByaXZhdGUg
OgogICAgdm9pZCBjTW92aW5nKGludCxpbnQpOwogICAgdm9pZCB1cGRhdGVDb250ZW50c1NpemUo
KTsKCnByaXZhdGU6CgogICAgUUNhbnZhc1ZpZXcoIGNvbnN0IFFDYW52YXNWaWV3ICYgKTsKICAg
IFFDYW52YXNWaWV3ICZvcGVyYXRvcj0oIGNvbnN0IFFDYW52YXNWaWV3ICYgKTsKCn07CgoKY2xh
c3MgUUNhbnZhc1BpeG1hcCA6IHB1YmxpYyBRUGl4bWFwCnsKcHVibGljOgoKICAgIFFDYW52YXNQ
aXhtYXAoY29uc3QgUVN0cmluZyYgZGF0YWZpbGVuYW1lKTsKCiAgICBRQ2FudmFzUGl4bWFwKGNv
bnN0IFFJbWFnZSYgaW1hZ2UpOwogICAgUUNhbnZhc1BpeG1hcChjb25zdCBRUGl4bWFwJiwgY29u
c3QgUVBvaW50JiBob3RzcG90KTsKICAgIH5RQ2FudmFzUGl4bWFwKCk7CgogICAgaW50IG9mZnNl
dFgoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGhvdHg7IH0KICAgIGludCBvZmZzZXRZKCkgY29u
c3QKICAgICAgICB7IHJldHVybiBob3R5OyB9CiAgICB2b2lkIHNldE9mZnNldChpbnQgeCwgaW50
IHkpIHsgaG90eCA9IHg7IGhvdHkgPSB5OyB9Cgpwcml2YXRlOgoKICAgIFFDYW52YXNQaXhtYXAo
IGNvbnN0IFFDYW52YXNQaXhtYXAgJiApOwogICAgUUNhbnZhc1BpeG1hcCAmb3BlcmF0b3I9KCBj
b25zdCBRQ2FudmFzUGl4bWFwICYgKTsKCiAgICB2b2lkIGluaXQoY29uc3QgUUltYWdlJik7CiAg
ICB2b2lkIGluaXQoY29uc3QgUVBpeG1hcCYgcGl4bWFwLCBpbnQgaHgsIGludCBoeSk7CgogICAg
ZnJpZW5kIGNsYXNzIFFDYW52YXNTcHJpdGU7CiAgICBmcmllbmQgY2xhc3MgUUNhbnZhc1BpeG1h
cEFycmF5OwogICAgZnJpZW5kIGJvb2wgcXRfdGVzdENvbGxpc2lvbihjb25zdCBRQ2FudmFzU3By
aXRlKiBzMSwgY29uc3QgUUNhbnZhc1Nwcml0ZSogczIpOwoKICAgIGludCBob3R4LGhvdHk7Cgog
ICAgUUltYWdlKiBjb2xsaXNpb25fbWFzazsKfTsKCgpjbGFzcyBRQ2FudmFzUGl4bWFwQXJyYXkK
ewpwdWJsaWM6CiAgICBRQ2FudmFzUGl4bWFwQXJyYXkoKTsKCiAgICBRQ2FudmFzUGl4bWFwQXJy
YXkoY29uc3QgUVN0cmluZyYgZGF0YWZpbGVuYW1lcGF0dGVybiwgaW50IGZyYW1lY291bnQ9MCk7
CgoKICAgIFFDYW52YXNQaXhtYXBBcnJheShRUHRyTGlzdDxRUGl4bWFwPiwgUVB0ckxpc3Q8UVBv
aW50PiBob3RzcG90cyk7CgogICAgUUNhbnZhc1BpeG1hcEFycmF5KFFWYWx1ZUxpc3Q8UVBpeG1h
cD4sIFFQb2ludEFycmF5IGhvdHNwb3RzID0gUVBvaW50QXJyYXkoKSApOwogICAgflFDYW52YXNQ
aXhtYXBBcnJheSgpOwoKCiAgICBib29sIHJlYWRQaXhtYXBzKGNvbnN0IFFTdHJpbmcmIGRhdGFm
aWxlbmFtZXBhdHRlcm4sIGludCBmcmFtZWNvdW50PTApOwogICAgYm9vbCByZWFkQ29sbGlzaW9u
TWFza3MoY29uc3QgUVN0cmluZyYgZmlsZW5hbWVwYXR0ZXJuKTsKCgoKICAgIGJvb2wgb3BlcmF0
b3IhKCk7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBRQ2FudmFzUGl4bWFwKiBpbWFn
ZShpbnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiBpbWcgPyBpbWdbaV0gOiAwOyB9CiAgICB2
b2lkIHNldEltYWdlKGludCBpLCBRQ2FudmFzUGl4bWFwKiBwKTsKICAgIHVpbnQgY291bnQoKSBj
b25zdAogICAgICAgIHsgcmV0dXJuICh1aW50KWZyYW1lY291bnQ7IH0KCnByaXZhdGU6CgogICAg
UUNhbnZhc1BpeG1hcEFycmF5KCBjb25zdCBRQ2FudmFzUGl4bWFwQXJyYXkgJiApOwogICAgUUNh
bnZhc1BpeG1hcEFycmF5ICZvcGVyYXRvcj0oIGNvbnN0IFFDYW52YXNQaXhtYXBBcnJheSAmICk7
CgoKICAgIGJvb2wgcmVhZFBpeG1hcHMoY29uc3QgUVN0cmluZyYgZGF0YWZpbGVuYW1lcGF0dGVy
biwgaW50IGZyYW1lY291bnQsIGJvb2wgbWFza29ubHkpOwoKCiAgICB2b2lkIHJlc2V0KCk7CiAg
ICBpbnQgZnJhbWVjb3VudDsKICAgIFFDYW52YXNQaXhtYXAqKiBpbWc7Cn07CgoKY2xhc3MgUUNh
bnZhc1Nwcml0ZSA6IHB1YmxpYyBRQ2FudmFzSXRlbQp7CnB1YmxpYzoKICAgIFFDYW52YXNTcHJp
dGUoUUNhbnZhc1BpeG1hcEFycmF5KiBhcnJheSwgUUNhbnZhcyogY2FudmFzKTsKCiAgICB2b2lk
IHNldFNlcXVlbmNlKFFDYW52YXNQaXhtYXBBcnJheSogc2VxKTsKCiAgICB2aXJ0dWFsIH5RQ2Fu
dmFzU3ByaXRlKCk7CgogICAgdm9pZCBtb3ZlKGRvdWJsZSB4LCBkb3VibGUgeSk7CiAgICB2aXJ0
dWFsIHZvaWQgbW92ZShkb3VibGUgeCwgZG91YmxlIHksIGludCBmcmFtZSk7CiAgICB2b2lkIHNl
dEZyYW1lKGludCk7CiAgICBlbnVtIEZyYW1lQW5pbWF0aW9uVHlwZSB7IEN5Y2xlLCBPc2NpbGxh
dGUgfTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZUFuaW1hdGlvbihGcmFtZUFuaW1hdGlvblR5
cGU9Q3ljbGUsIGludCBzdGVwPTEsIGludCBzdGF0ZT0wKTsKICAgIGludCBmcmFtZSgpIGNvbnN0
CiAgICAgICAgeyByZXR1cm4gZnJtOyB9CiAgICBpbnQgZnJhbWVDb3VudCgpIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gaW1hZ2VzLT5jb3VudCgpOyB9CgogICAgaW50IHJ0dGkoKSBjb25zdDsKICAg
IHN0YXRpYyBpbnQgUlRUSTsKCiAgICBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc0l0
ZW0qICkgY29uc3Q7CgogICAgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CgoKCgogICAgaW50
IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CgogICAgaW50IGxlZnRFZGdl
KCkgY29uc3Q7CiAgICBpbnQgdG9wRWRnZSgpIGNvbnN0OwogICAgaW50IHJpZ2h0RWRnZSgpIGNv
bnN0OwogICAgaW50IGJvdHRvbUVkZ2UoKSBjb25zdDsKCiAgICBpbnQgbGVmdEVkZ2UoaW50IG54
KSBjb25zdDsKICAgIGludCB0b3BFZGdlKGludCBueSkgY29uc3Q7CiAgICBpbnQgcmlnaHRFZGdl
KGludCBueCkgY29uc3Q7CiAgICBpbnQgYm90dG9tRWRnZShpbnQgbnkpIGNvbnN0OwogICAgUUNh
bnZhc1BpeG1hcCogaW1hZ2UoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGltYWdlcy0+aW1hZ2Uo
ZnJtKTsgfQogICAgdmlydHVhbCBRQ2FudmFzUGl4bWFwKiBpbWFnZUFkdmFuY2VkKCkgY29uc3Q7
CiAgICBRQ2FudmFzUGl4bWFwKiBpbWFnZShpbnQgZikgY29uc3QKICAgICAgICB7IHJldHVybiBp
bWFnZXMtPmltYWdlKGYpOyB9CiAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZShpbnQgc3RhZ2UpOwoK
cHVibGljOgogICAgdm9pZCBkcmF3KFFQYWludGVyJiBwYWludGVyKTsKCnByaXZhdGU6CgogICAg
UUNhbnZhc1Nwcml0ZSggY29uc3QgUUNhbnZhc1Nwcml0ZSAmICk7CiAgICBRQ2FudmFzU3ByaXRl
ICZvcGVyYXRvcj0oIGNvbnN0IFFDYW52YXNTcHJpdGUgJiApOwoKICAgIHZvaWQgYWRkVG9DaHVu
a3MoKTsKICAgIHZvaWQgcmVtb3ZlRnJvbUNodW5rcygpOwogICAgdm9pZCBjaGFuZ2VDaHVua3Mo
KTsKCiAgICBpbnQgZnJtOwogICAgdXNob3J0IGFuaW1fdmFsOwogICAgdWludCBhbmltX3N0YXRl
OjI7CiAgICB1aW50IGFuaW1fdHlwZToxNDsKICAgIGJvb2wgY29sbGlkZXNXaXRoKCBjb25zdCBR
Q2FudmFzU3ByaXRlKiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ2FudmFzUG9seWdv
bmFsSXRlbSosCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1JlY3RhbmdsZSos
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc0VsbGlwc2UqLAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFDYW52YXNUZXh0KiApIGNvbnN0OwoKICAgIGZyaWVuZCBib29s
IHF0X3Rlc3RDb2xsaXNpb24oIGNvbnN0IFFDYW52YXNTcHJpdGUqIHMxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1Nwcml0ZSogczIgKTsKCiAgICBRQ2Fu
dmFzUGl4bWFwQXJyYXkqIGltYWdlczsKfTsKCmNsYXNzIFFQb2x5Z29uYWxQcm9jZXNzb3I7Cgpj
bGFzcyBRQ2FudmFzUG9seWdvbmFsSXRlbSA6IHB1YmxpYyBRQ2FudmFzSXRlbQp7CnB1YmxpYzoK
ICAgIFFDYW52YXNQb2x5Z29uYWxJdGVtKFFDYW52YXMqIGNhbnZhcyk7CiAgICB2aXJ0dWFsIH5R
Q2FudmFzUG9seWdvbmFsSXRlbSgpOwoKICAgIGJvb2wgY29sbGlkZXNXaXRoKCBjb25zdCBRQ2Fu
dmFzSXRlbSogKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0UGVuKFFQZW4gcCk7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0QnJ1c2goUUJydXNoIGIpOwoKICAgIFFQZW4gcGVuKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiBwbjsgfQogICAgUUJydXNoIGJydXNoKCkgY29uc3QKICAgICAgICB7IHJl
dHVybiBicjsgfQoKICAgIHZpcnR1YWwgUVBvaW50QXJyYXkgYXJlYVBvaW50cygpIGNvbnN0PTA7
CiAgICB2aXJ0dWFsIFFQb2ludEFycmF5IGFyZWFQb2ludHNBZHZhbmNlZCgpIGNvbnN0OwogICAg
UVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CgogICAgaW50IHJ0dGkoKSBjb25zdDsKICAgIHN0
YXRpYyBpbnQgUlRUSTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZHJhdyhRUGFpbnRlciAmKTsKICAg
IHZpcnR1YWwgdm9pZCBkcmF3U2hhcGUoUVBhaW50ZXIgJikgPSAwOwoKICAgIGJvb2wgd2luZGlu
ZygpIGNvbnN0OwogICAgdm9pZCBzZXRXaW5kaW5nKGJvb2wpOwoKICAgIHZvaWQgaW52YWxpZGF0
ZSgpOwogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKICAgICAgICB7IHJldHVybiAoYm9vbCl2YWw7
IH0KCnByaXZhdGU6CiAgICB2b2lkIHNjYW5Qb2x5Z29uKCBjb25zdCBRUG9pbnRBcnJheSYgcGEs
IGludCB3aW5kaW5nLAogICAgICAgICAgICAgICAgICAgICAgUVBvbHlnb25hbFByb2Nlc3NvciYg
cHJvY2VzcyApIGNvbnN0OwogICAgUVBvaW50QXJyYXkgY2h1bmtzKCkgY29uc3Q7CgogICAgYm9v
bCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNTcHJpdGUqLAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFDYW52YXNQb2x5Z29uYWxJdGVtKiwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRQ2FudmFzUmVjdGFuZ2xlKiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ2Fu
dmFzRWxsaXBzZSosCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1RleHQqICkg
Y29uc3Q7CgogICAgUUJydXNoIGJyOwogICAgUVBlbiBwbjsKICAgIHVpbnQgd2luZDoxOwp9OwoK
CmNsYXNzIFFDYW52YXNSZWN0YW5nbGUgOiBwdWJsaWMgUUNhbnZhc1BvbHlnb25hbEl0ZW0Kewpw
dWJsaWM6CiAgICBRQ2FudmFzUmVjdGFuZ2xlKFFDYW52YXMqIGNhbnZhcyk7CiAgICBRQ2FudmFz
UmVjdGFuZ2xlKGNvbnN0IFFSZWN0JiwgUUNhbnZhcyogY2FudmFzKTsKICAgIFFDYW52YXNSZWN0
YW5nbGUoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFFDYW52YXMqIGNhbnZh
cyk7CgogICAgflFDYW52YXNSZWN0YW5nbGUoKTsKCiAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAg
IGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0U2l6ZShpbnQgdywgaW50IGgpOwogICAg
UVNpemUgc2l6ZSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gUVNpemUodyxoKTsgfQogICAgUVBv
aW50QXJyYXkgYXJlYVBvaW50cygpIGNvbnN0OwogICAgUVJlY3QgcmVjdCgpIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gUVJlY3QoaW50KHgoKSksaW50KHkoKSksdyxoKTsgfQoKICAgIGJvb2wgY29s
bGlkZXNXaXRoKCBjb25zdCBRQ2FudmFzSXRlbSogKSBjb25zdDsKCiAgICBpbnQgcnR0aSgpIGNv
bnN0OwogICAgc3RhdGljIGludCBSVFRJOwoKcHJvdGVjdGVkOgogICAgdm9pZCBkcmF3U2hhcGUo
UVBhaW50ZXIgJik7CiAgICBRUG9pbnRBcnJheSBjaHVua3MoKSBjb25zdDsKCnByaXZhdGU6CiAg
ICBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc1Nwcml0ZSosCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRQ2FudmFzUG9seWdvbmFsSXRlbSosCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRQ2FudmFzUmVjdGFuZ2xlKiwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFDYW52YXNFbGxpcHNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFD
YW52YXNUZXh0KiApIGNvbnN0OwoKICAgIGludCB3LCBoOwp9OwoKCmNsYXNzIFFDYW52YXNQb2x5
Z29uIDogcHVibGljIFFDYW52YXNQb2x5Z29uYWxJdGVtCnsKcHVibGljOgogICAgUUNhbnZhc1Bv
bHlnb24oUUNhbnZhcyogY2FudmFzKTsKICAgIH5RQ2FudmFzUG9seWdvbigpOwogICAgdm9pZCBz
ZXRQb2ludHMoUVBvaW50QXJyYXkpOwogICAgUVBvaW50QXJyYXkgcG9pbnRzKCkgY29uc3Q7CiAg
ICB2b2lkIG1vdmVCeShkb3VibGUgZHgsIGRvdWJsZSBkeSk7CgogICAgUVBvaW50QXJyYXkgYXJl
YVBvaW50cygpIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50IFJU
VEk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRyYXdTaGFwZShRUGFpbnRlciAmKTsKICAgIFFQb2lu
dEFycmF5IHBvbHk7Cn07CgoKY2xhc3MgUUNhbnZhc1NwbGluZSA6IHB1YmxpYyBRQ2FudmFzUG9s
eWdvbgp7CnB1YmxpYzoKICAgIFFDYW52YXNTcGxpbmUoUUNhbnZhcyogY2FudmFzKTsKICAgIH5R
Q2FudmFzU3BsaW5lKCk7CgogICAgdm9pZCBzZXRDb250cm9sUG9pbnRzKFFQb2ludEFycmF5LCBi
b29sIGNsb3NlZD1UUlVFKTsKICAgIFFQb2ludEFycmF5IGNvbnRyb2xQb2ludHMoKSBjb25zdDsK
ICAgIGJvb2wgY2xvc2VkKCkgY29uc3Q7CgogICAgaW50IHJ0dGkoKSBjb25zdDsKICAgIHN0YXRp
YyBpbnQgUlRUSTsKCnByaXZhdGU6CiAgICB2b2lkIHJlY2FsY1BvbHkoKTsKICAgIFFQb2ludEFy
cmF5IGJlejsKICAgIGJvb2wgY2w7Cn07CgoKY2xhc3MgUUNhbnZhc0xpbmUgOiBwdWJsaWMgUUNh
bnZhc1BvbHlnb25hbEl0ZW0KewpwdWJsaWM6CiAgICBRQ2FudmFzTGluZShRQ2FudmFzKiBjYW52
YXMpOwogICAgflFDYW52YXNMaW5lKCk7CiAgICB2b2lkIHNldFBvaW50cyhpbnQgeDEsIGludCB5
MSwgaW50IHgyLCBpbnQgeTIpOwoKICAgIFFQb2ludCBzdGFydFBvaW50KCkgY29uc3QKICAgICAg
ICB7IHJldHVybiBRUG9pbnQoeDEseTEpOyB9CiAgICBRUG9pbnQgZW5kUG9pbnQoKSBjb25zdAog
ICAgICAgIHsgcmV0dXJuIFFQb2ludCh4Mix5Mik7IH0KCiAgICBpbnQgcnR0aSgpIGNvbnN0Owog
ICAgc3RhdGljIGludCBSVFRJOwoKICAgIHZvaWQgc2V0UGVuKFFQZW4gcCk7Cgpwcm90ZWN0ZWQ6
CiAgICB2b2lkIGRyYXdTaGFwZShRUGFpbnRlciAmKTsKICAgIFFQb2ludEFycmF5IGFyZWFQb2lu
dHMoKSBjb25zdDsKCnByaXZhdGU6CiAgICBpbnQgeDEseTEseDIseTI7Cn07CgoKY2xhc3MgUUNh
bnZhc0VsbGlwc2UgOiBwdWJsaWMgUUNhbnZhc1BvbHlnb25hbEl0ZW0KewoKcHVibGljOgogICAg
UUNhbnZhc0VsbGlwc2UoIFFDYW52YXMqIGNhbnZhcyApOwogICAgUUNhbnZhc0VsbGlwc2UoIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgUUNhbnZhcyogY2FudmFzICk7CiAgICBRQ2FudmFzRWxsaXBz
ZSggaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RhcnRhbmdsZSwgaW50IGFuZ2xlLAogICAg
ICAgICAgICAgICAgICAgIFFDYW52YXMqIGNhbnZhcyApOwoKICAgIH5RQ2FudmFzRWxsaXBzZSgp
OwoKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdodCgpIGNvbnN0OwogICAgdm9p
ZCBzZXRTaXplKGludCB3LCBpbnQgaCk7CiAgICB2b2lkIHNldEFuZ2xlcyhpbnQgc3RhcnQsIGlu
dCBsZW5ndGgpOwogICAgaW50IGFuZ2xlU3RhcnQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGEx
OyB9CiAgICBpbnQgYW5nbGVMZW5ndGgoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGEyOyB9CiAg
ICBRUG9pbnRBcnJheSBhcmVhUG9pbnRzKCkgY29uc3Q7CgogICAgYm9vbCBjb2xsaWRlc1dpdGgo
IGNvbnN0IFFDYW52YXNJdGVtKiApIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBz
dGF0aWMgaW50IFJUVEk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRyYXdTaGFwZShRUGFpbnRlciAm
KTsKCnByaXZhdGU6CiAgICBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc1Nwcml0ZSos
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1BvbHlnb25hbEl0ZW0qLAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDYW52YXNSZWN0YW5nbGUqLAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFFDYW52YXNFbGxpcHNlKiwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRQ2FudmFzVGV4dCogKSBjb25zdDsKICAgIGludCB3LCBoOwogICAgaW50IGExLCBhMjsK
fTsKCgpjbGFzcyBRQ2FudmFzVGV4dEV4dHJhOwoKY2xhc3MgUUNhbnZhc1RleHQgOiBwdWJsaWMg
UUNhbnZhc0l0ZW0KewpwdWJsaWM6CiAgICBRQ2FudmFzVGV4dChRQ2FudmFzKiBjYW52YXMpOwog
ICAgUUNhbnZhc1RleHQoY29uc3QgUVN0cmluZyYsIFFDYW52YXMqIGNhbnZhcyk7CiAgICBRQ2Fu
dmFzVGV4dChjb25zdCBRU3RyaW5nJiwgUUZvbnQsIFFDYW52YXMqIGNhbnZhcyk7CgogICAgdmly
dHVhbCB+UUNhbnZhc1RleHQoKTsKCiAgICB2b2lkIHNldFRleHQoIGNvbnN0IFFTdHJpbmcmICk7
CiAgICB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250JiApOwogICAgdm9pZCBzZXRDb2xvciggY29u
c3QgUUNvbG9yJiApOwogICAgUVN0cmluZyB0ZXh0KCkgY29uc3Q7CiAgICBRRm9udCBmb250KCkg
Y29uc3Q7CiAgICBRQ29sb3IgY29sb3IoKSBjb25zdDsKCiAgICB2b2lkIG1vdmVCeShkb3VibGUg
ZHgsIGRvdWJsZSBkeSk7CgogICAgaW50IHRleHRGbGFncygpIGNvbnN0CiAgICAgICAgeyByZXR1
cm4gZmxhZ3M7IH0KICAgIHZvaWQgc2V0VGV4dEZsYWdzKGludCk7CgogICAgUVJlY3QgYm91bmRp
bmdSZWN0KCkgY29uc3Q7CgogICAgYm9vbCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNJdGVt
KiApIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50IFJUVEk7Cgpw
cm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIHZvaWQgZHJhdyhRUGFpbnRlciYpOwoKcHJpdmF0ZToKCiAg
ICBRQ2FudmFzVGV4dCggY29uc3QgUUNhbnZhc1RleHQgJiApOwogICAgUUNhbnZhc1RleHQgJm9w
ZXJhdG9yPSggY29uc3QgUUNhbnZhc1RleHQgJiApOwoKICAgIHZvaWQgYWRkVG9DaHVua3MoKTsK
ICAgIHZvaWQgcmVtb3ZlRnJvbUNodW5rcygpOwogICAgdm9pZCBjaGFuZ2VDaHVua3MoKTsKCiAg
ICB2b2lkIHNldFJlY3QoKTsKICAgIFFSZWN0IGJyZWN0OwogICAgUVN0cmluZyB0eHQ7CiAgICBp
bnQgZmxhZ3M7CiAgICBRRm9udCBmbnQ7CiAgICBRQ29sb3IgY29sOwogICAgUUNhbnZhc1RleHRF
eHRyYSogZXh0cmE7CgogICAgYm9vbCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNTcHJpdGUq
LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1BvbHlnb25hbEl0ZW0qLAog
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1JlY3RhbmdsZSosCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRQ2FudmFzRWxsaXBzZSosCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRQ2FudmFzVGV4dCogKSBjb25zdDsKfTsKIyAyMyAiVHhWb3JwYWxHVUku
aCIgMgoKCmNsYXNzIFR4Vm9ycGFsR1VJIDogcHVibGljIFFNYWluV2luZG93CnsKICAgIHB1Ymxp
YzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2
aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZv
a2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0
KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2
KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBR
VmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmpl
Y3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0
ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRm
OCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0
YU9iamVjdCAqbWV0YU9iajsKCnB1YmxpYzoKCgoKCiBUeFZvcnBhbEdVSSAoKTsKCgoKCiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW50IHNjYWxlID0gMjA7CgoKCgogc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGludCBwYWQgPSAyMDsKCgoKCiBzdGF0aWMgaW50IGdldFBsYWNlICgpOwoKCgoKIHN0YXRp
YyB1bnNpZ25lZCBpbnQgZ2V0UmlnaHQgKCkKIHsKICAgcmV0dXJuIHJpZ2h0OwogfQoKCgoKIHN0
YXRpYyB1bnNpZ25lZCBpbnQgZ2V0Qm90dG9tICgpCiB7CiAgIHJldHVybiBib3R0b207CiB9CgoK
Cgogc3RhdGljIHZvaWQgc2V0UGxhY2UgKGNvbnN0IGludCBuZXdQbGFjZSk7CgoKCgogc3RhdGlj
IFFMYWJlbCYgZ2V0SG92ZXIgKCkKIHsKICAgcmV0dXJuICpob3ZlcjsKIH0KCgoKCiBzdGF0aWMg
UUxhYmVsJiBnZXRQb2ludGVyICgpCiB7CiAgIHJldHVybiAqcG9pbnRlcjsKIH0KCgoKCiBzdGF0
aWMgUVRhYmxlJiBnZXRUcmVlICgpCiB7CiAgIHJldHVybiAqdHJlZTsKIH0KCgoKCiBzdGF0aWMg
VHhxRWRpdFRhYmxlJiBnZXRUYWJsZSAoKQogewogICByZXR1cm4gKnRhYmxlOwogfQoKCgoKIHN0
YXRpYyB2b2lkIGRvUGljayAoY29uc3QgdW5zaWduZWQgaW50IHBhcnQpOwoKCgoKCiBzdGF0aWMg
dm9pZCBzZXRCb3VuZHMgKFFDYW52YXNSZWN0YW5nbGUgJnJlY3RhbmdsZSwgY29uc3QgVHhIaWVy
QXR0cmliU2V0ICZkYXRhKTsKCnB1YmxpYyA6CgoKCgogdm9pZCBvcGVuKCk7CgoKCgogdm9pZCBu
ZXdzKCk7CgoKCgogdm9pZCBzYXZlKCk7CgoKCgogdm9pZCBzYXZlQXMoKTsKCgoKCiB2b2lkIHVu
ZG8oKTsKCgoKCiB2b2lkIHJlZG8oKTsKCgoKCiB2b2lkIGFib3V0KCk7CgoKCgogdm9pZCBuZXdC
b3VuZGFyeSgpOwoKCgoKIHZvaWQgbmV3U2luaygpOwoKCgoKIHZvaWQgbmV3U291cmNlKCk7CgoK
Cgogdm9pZCBuZXdJbml0aWFsKCk7CgoKCgogdm9pZCBuZXdFbUZpZWxkKCk7CgoKCgogdm9pZCBu
ZXdTcGVjaWVzKCk7CgoKCgogdm9pZCBuZXdGbHVpZCgpOwoKCgoKCgogdm9pZCB0YWJsZUNoYW5n
ZSAoaW50IHJvdywgaW50IGNvbCk7CgoKCgoKCiB2b2lkIHRhYmxlUGljayAoaW50IHJvdywgaW50
IGNvbCk7CgoKCgoKIHZvaWQgY29tYm9QaWNrIChpbnQgaWR4KTsKCnByb3RlY3RlZDoKCgoKCgog
IHZvaWQgcmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqcmVzaXplICk7CgoKCgoKICB2b2lkIGtl
eVByZXNzRXZlbnQoIFFLZXlFdmVudCAqa2V5c3Ryb2tlICk7Cgpwcm90ZWN0ZWQ6CgoKCgoKICB2
b2lkIGV4cGxhaW4oIGNvbnN0IFFTdHJpbmcmIGl0ZW0pOwoKcHJpdmF0ZToKCgoKCiAgUU1lbnVC
YXIgKm1lbnU7CgoKCgogIHN0YXRpYyBRVGFibGUgKnRyZWU7CgoKCgogIHN0YXRpYyBRTGFiZWwg
KnBvaW50ZXI7CgoKCgogIHN0YXRpYyBRTGFiZWwgKmhvdmVyOwoKCgoKICBzdGF0aWMgVHhxRWRp
dFRhYmxlICp0YWJsZTsKCgoKCiAgc3RhdGljIHVuc2lnbmVkIGludCByaWdodDsKCgoKCiAgc3Rh
dGljIHVuc2lnbmVkIGludCBib3R0b207CgoKCgogIHN0YXRpYyB2b2lkIG9wZW4gKGNvbnN0IGNo
YXIgKmNvbnN0IG5hbWUpOwp9OwojIDE0ICJUeFZvcnBhbEdVSS5jcHAiIDIKIyAxICJUeFBhcnQu
aCIgMQojIDIzICJUeFBhcnQuaCIKY2xhc3MgVHhQYXJ0IHsKCiAgcHVibGljOgoKCgoKICAgIFFD
YW52YXNJdGVtICYgZ2V0SXRlbSgpIHsKICAgICAgcmV0dXJuICppdGVtOwogICAgfQoKCgoKICAg
IFR4SGllckF0dHJpYlNldCAmIGdldERhdGEoKSB7CiAgICAgIHJldHVybiAqZGF0YTsKICAgIH0K
CgoKCiAgICBzdGF0aWMgc3RkOjp2ZWN0b3IgPCBUeFBhcnQgPiAmZ2V0QWxsUGFydHMoKSB7CiAg
ICAgIHJldHVybiBhbGxQYXJ0czsKICAgIH0KCgoKCgoKICAgIHN0YXRpYyB2b2lkIGFkZChRQ2Fu
dmFzSXRlbSAqIGNvbnN0IGl0ZW0sIGNvbnN0IFR4SGllckF0dHJpYlNldCAmIGRhdGEpOwoKICBw
cml2YXRlOgoKCgoKICAgIFFDYW52YXNJdGVtICogaXRlbTsKCgoKCiAgICBUeEhpZXJBdHRyaWJT
ZXQgKmRhdGE7CgoKCgogICAgc3RhdGljIHN0ZDo6dmVjdG9yIDwgVHhQYXJ0ID4gYWxsUGFydHM7
Cgp9OwojIDE1ICJUeFZvcnBhbEdVSS5jcHAiIDIKIyAxICJUeEdyaWRWaWV3LmgiIDEKIyAxNyAi
VHhHcmlkVmlldy5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmJveC5oIiAx
CiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmJveC5oIgojIDEgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xaGJveC5oIiAxCiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xaGJveC5oIgpjbGFzcyBRQm94TGF5b3V0OwoKY2xhc3MgUUhCb3ggOiBwdWJsaWMg
UUZyYW1lCnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNs
YXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZp
cnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9l
bWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwg
aW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2Jq
ZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNN
ZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsg
fSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0
YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHBy
aXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUUhCb3goIFFX
aWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmPTAgKTsKCiAgICB2
b2lkIHNldFNwYWNpbmcoIGludCApOwogICAgYm9vbCBzZXRTdHJldGNoRmFjdG9yKCBRV2lkZ2V0
KiwgaW50IHN0cmV0Y2ggKTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6
CiAgICBRSEJveCggYm9vbCBob3Jpem9udGFsLCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hh
ciogbmFtZT0wLCBXRmxhZ3MgZj0wICk7CiAgICB2b2lkIGZyYW1lQ2hhbmdlZCgpOwoKcHJpdmF0
ZToKICAgIFFCb3hMYXlvdXQgKmxheTsKCiAgICBRSEJveCggY29uc3QgUUhCb3ggJiApOwogICAg
UUhCb3ggJm9wZXJhdG9yPSggY29uc3QgUUhCb3ggJiApOwoKfTsKIyA0MyAiL3Vzci9sb2NhbC9x
dC0zLjEuMS9pbmNsdWRlL3F2Ym94LmgiIDIKCgoKCmNsYXNzIFFWQm94IDogcHVibGljIFFIQm94
CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFt
ZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwg
Ym9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBp
bnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYs
IFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAs
IGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2Jq
ZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0
aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBR
U3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6
IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUVZCb3goIFFXaWRnZXQq
IHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmPTAgKTsKCnByaXZhdGU6Cgog
ICAgUVZCb3goIGNvbnN0IFFWQm94ICYgKTsKICAgIFFWQm94JiBvcGVyYXRvcj0oIGNvbnN0IFFW
Qm94ICYgKTsKCn07CiMgMTggIlR4R3JpZFZpZXcuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xcHVzaGJ1dHRvbi5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j
bHVkZS9xcHVzaGJ1dHRvbi5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xYnV0
dG9uLmgiIDEKIyA0OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FidXR0b24uaCIKY2xh
c3MgUUJ1dHRvbkdyb3VwOwpjbGFzcyBRVG9vbEJhcjsKY2xhc3MgUUJ1dHRvbkRhdGE7CgpjbGFz
cyBRQnV0dG9uIDogcHVibGljIFFXaWRnZXQKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2Jq
ZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZp
cnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2Fz
dCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCog
KTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBx
dF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9z
dGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMg
UU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0
dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwog
ICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGljOgog
ICAgUUJ1dHRvbiggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdz
IGY9MCApOwogICAgflFCdXR0b24oKTsKCiAgICBRU3RyaW5nIHRleHQoKSBjb25zdDsKICAgIHZp
cnR1YWwgdm9pZCBzZXRUZXh0KCBjb25zdCBRU3RyaW5nICYpOwogICAgY29uc3QgUVBpeG1hcCAq
cGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGl4bWFwKCBjb25zdCBRUGl4bWFw
ICYgKTsKCgogICAgUUtleVNlcXVlbmNlIGFjY2VsKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0QWNjZWwoIGNvbnN0IFFLZXlTZXF1ZW5jZSYgKTsKCgogICAgYm9vbCBpc1RvZ2dsZUJ1dHRv
bigpIGNvbnN0OwoKICAgIGVudW0gVG9nZ2xlVHlwZSB7IFNpbmdsZVNob3QsIFRvZ2dsZSwgVHJp
c3RhdGUgfTsKICAgIFRvZ2dsZVR5cGUgdG9nZ2xlVHlwZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwg
dm9pZCBzZXREb3duKCBib29sICk7CiAgICBib29sIGlzRG93bigpIGNvbnN0OwoKICAgIGJvb2wg
aXNPbigpIGNvbnN0OwoKICAgIGVudW0gVG9nZ2xlU3RhdGUgeyBPZmYsIE5vQ2hhbmdlLCBPbiB9
OwogICAgVG9nZ2xlU3RhdGUgc3RhdGUoKSBjb25zdDsKCgogICAgYm9vbCBhdXRvUmVzaXplKCkg
Y29uc3Q7CiAgICB2b2lkIHNldEF1dG9SZXNpemUoIGJvb2wgKTsKCgogICAgYm9vbCBhdXRvUmVw
ZWF0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b1JlcGVhdCggYm9vbCApOwoKICAg
IGJvb2wgaXNFeGNsdXNpdmVUb2dnbGUoKSBjb25zdDsKCiAgICBRQnV0dG9uR3JvdXAgKmdyb3Vw
KCkgY29uc3Q7CgpwdWJsaWMgOgogICAgdm9pZCBhbmltYXRlQ2xpY2soKTsKICAgIHZvaWQgdG9n
Z2xlKCk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHByZXNzZWQoKTsKICAgIHZvaWQgcmVsZWFzZWQo
KTsKICAgIHZvaWQgY2xpY2tlZCgpOwogICAgdm9pZCB0b2dnbGVkKCBib29sICk7CiAgICB2b2lk
IHN0YXRlQ2hhbmdlZCggaW50ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNldFRvZ2dsZUJ1dHRv
biggYm9vbCApOwogICAgdmlydHVhbCB2b2lkIHNldFRvZ2dsZVR5cGUoIFRvZ2dsZVR5cGUgKTsK
ICAgIHZvaWQgc2V0T24oIGJvb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0ZSggVG9nZ2xl
U3RhdGUgKTsKCiAgICB2aXJ0dWFsIGJvb2wgaGl0QnV0dG9uKCBjb25zdCBRUG9pbnQgJnBvcyAp
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIGRyYXdCdXR0b24oIFFQYWludGVyICogKTsKICAgIHZp
cnR1YWwgdm9pZCBkcmF3QnV0dG9uTGFiZWwoIFFQYWludGVyICogKTsKCiAgICB2b2lkIGtleVBy
ZXNzRXZlbnQoIFFLZXlFdmVudCAqKTsKICAgIHZvaWQga2V5UmVsZWFzZUV2ZW50KCBRS2V5RXZl
bnQgKik7CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9p
ZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVF
dmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAq
ICk7CiAgICB2b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1
c091dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7CgogICAgdm9pZCBlbmFibGVkQ2hhbmdlKCBib29s
ICk7Cgpwcml2YXRlIDoKICAgIHZvaWQgYW5pbWF0ZVRpbWVvdXQoKTsKICAgIHZvaWQgYXV0b1Jl
cGVhdFRpbWVvdXQoKTsKICAgIHZvaWQgZW11bGF0ZUNsaWNrKCk7Cgpwcml2YXRlOgogICAgUVN0
cmluZyBidGV4dDsKICAgIFFQaXhtYXAgKmJwaXhtYXA7CiAgICB1aW50IHRvZ2dsZVR5cCA6IDI7
CiAgICB1aW50IGJ1dHRvbkRvd24gOiAxOwogICAgdWludCBzdGF0IDogMjsKICAgIHVpbnQgbWxi
RG93biA6IDE7CiAgICB1aW50IGF1dG9yZXNpemUgOiAxOwogICAgdWludCBhbmltYXRpb24gOiAx
OwogICAgdWludCByZXBlYXQgOiAxOwogICAgUUJ1dHRvbkRhdGEgKmQ7CgogICAgZnJpZW5kIGNs
YXNzIFFCdXR0b25Hcm91cDsKICAgIGZyaWVuZCBjbGFzcyBRVG9vbEJhcjsKICAgIHZvaWQgZW5z
dXJlRGF0YSgpOwogICAgdmlydHVhbCB2b2lkIHNldEdyb3VwKCBRQnV0dG9uR3JvdXAqICk7CiAg
ICBRVGltZXIgKnRpbWVyKCk7CiAgICB2b2lkIG5leHRTdGF0ZSgpOwoKcHJpdmF0ZToKCiAgICBR
QnV0dG9uKCBjb25zdCBRQnV0dG9uICYgKTsKICAgIFFCdXR0b24gJm9wZXJhdG9yPSggY29uc3Qg
UUJ1dHRvbiAmICk7Cgp9OwoKCmlubGluZSBRU3RyaW5nIFFCdXR0b246OnRleHQoKSBjb25zdAp7
CiAgICByZXR1cm4gYnRleHQ7Cn0KCmlubGluZSBjb25zdCBRUGl4bWFwICpRQnV0dG9uOjpwaXht
YXAoKSBjb25zdAp7CiAgICByZXR1cm4gYnBpeG1hcDsKfQoKaW5saW5lIGJvb2wgUUJ1dHRvbjo6
aXNUb2dnbGVCdXR0b24oKSBjb25zdAp7CiAgICByZXR1cm4gdG9nZ2xlVHlwICE9IFNpbmdsZVNo
b3Q7Cn0KCmlubGluZSBib29sIFFCdXR0b246OmlzRG93bigpIGNvbnN0CnsKICAgIHJldHVybiBi
dXR0b25Eb3duOwp9CgppbmxpbmUgYm9vbCBRQnV0dG9uOjppc09uKCkgY29uc3QKewogICAgcmV0
dXJuIHN0YXQgIT0gT2ZmOwp9CgoKaW5saW5lIGJvb2wgUUJ1dHRvbjo6YXV0b1Jlc2l6ZSgpIGNv
bnN0CnsKICAgIHJldHVybiBhdXRvcmVzaXplOwp9CgppbmxpbmUgYm9vbCBRQnV0dG9uOjphdXRv
UmVwZWF0KCkgY29uc3QKewogICAgcmV0dXJuIHJlcGVhdDsKfQoKCmlubGluZSBRQnV0dG9uOjpU
b2dnbGVTdGF0ZSBRQnV0dG9uOjpzdGF0ZSgpIGNvbnN0CnsKICAgIHJldHVybiBUb2dnbGVTdGF0
ZShzdGF0KTsKfQoKaW5saW5lIHZvaWQgUUJ1dHRvbjo6c2V0VG9nZ2xlQnV0dG9uKCBib29sIGIg
KQp7CiAgICBzZXRUb2dnbGVUeXBlKCBiID8gVG9nZ2xlIDogU2luZ2xlU2hvdCApOwp9Cgppbmxp
bmUgdm9pZCBRQnV0dG9uOjpzZXRPbiggYm9vbCB5ICkKewogICAgc2V0U3RhdGUoIHkgPyBPbiA6
IE9mZiApOwp9CgppbmxpbmUgUUJ1dHRvbjo6VG9nZ2xlVHlwZSBRQnV0dG9uOjp0b2dnbGVUeXBl
KCkgY29uc3QKewogICAgcmV0dXJuIFRvZ2dsZVR5cGUodG9nZ2xlVHlwKTsKfQojIDQzICIvdXNy
L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXB1c2hidXR0b24uaCIgMgoKCgoKY2xhc3MgUVB1c2hC
dXR0b25Qcml2YXRlOwpjbGFzcyBRUG9wdXBNZW51OwoKY2xhc3MgUVB1c2hCdXR0b24gOiBwdWJs
aWMgUUJ1dHRvbgp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFy
ICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiAp
OyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg
cXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQg
aWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSgg
UU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3Rh
dGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRo
aXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp
OyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp
OyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CgogICAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRUHVzaEJ1dHRvbiggUVdpZGdldCAqcGFyZW50
LCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFQdXNoQnV0dG9uKCBjb25zdCBRU3RyaW5nICZ0
ZXh0LCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUVB1c2hCdXR0
b24oIGNvbnN0IFFJY29uU2V0JiBpY29uLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBRV2lkZ2V0ICpw
YXJlbnQsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgflFQdXNoQnV0dG9uKCk7CgogICAgUVNp
emUgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICB2b2lkIG1vdmUoIGludCB4LCBpbnQgeSApOwogICAg
dm9pZCBtb3ZlKCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgcmVzaXplKCBpbnQgdywgaW50
IGggKTsKICAgIHZvaWQgcmVzaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2b2lkIHNldEdlb21l
dHJ5KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCApOwoKICAgIHZvaWQgc2V0R2VvbWV0cnko
IGNvbnN0IFFSZWN0ICYgKTsKCiAgICB2b2lkIHNldFRvZ2dsZUJ1dHRvbiggYm9vbCApOwoKICAg
IGJvb2wgYXV0b0RlZmF1bHQoKSBjb25zdCB7IHJldHVybiBhdXRvRGVmQnV0dG9uOyB9CiAgICB2
aXJ0dWFsIHZvaWQgc2V0QXV0b0RlZmF1bHQoIGJvb2wgYXV0b0RlZiApOwogICAgYm9vbCBpc0Rl
ZmF1bHQoKSBjb25zdCB7IHJldHVybiBkZWZCdXR0b247IH0KICAgIHZpcnR1YWwgdm9pZCBzZXRE
ZWZhdWx0KCBib29sIGRlZiApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRJc01lbnVCdXR0b24oIGJv
b2wgZW5hYmxlICkgewogICAgICAgIGlmICggKGJvb2wpaGFzTWVudUFycm93ID09IGVuYWJsZSAp
CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBoYXNNZW51QXJyb3cgPSBlbmFibGUgPyAxIDog
MDsKICAgICAgICB1cGRhdGUoKTsKICAgICAgICB1cGRhdGVHZW9tZXRyeSgpOwogICAgfQogICAg
Ym9vbCBpc01lbnVCdXR0b24oKSBjb25zdCB7IHJldHVybiBoYXNNZW51QXJyb3c7IH0KCiAgICB2
b2lkIHNldFBvcHVwKCBRUG9wdXBNZW51KiBwb3B1cCApOwogICAgUVBvcHVwTWVudSogcG9wdXAo
KSBjb25zdDsKCiAgICB2b2lkIHNldEljb25TZXQoIGNvbnN0IFFJY29uU2V0JiApOwogICAgUUlj
b25TZXQqIGljb25TZXQoKSBjb25zdDsKCiAgICB2b2lkIHNldEZsYXQoIGJvb2wgKTsKICAgIGJv
b2wgaXNGbGF0KCkgY29uc3Q7CgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIHNldE9uKCBib29s
ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRyYXdCdXR0b24oIFFQYWludGVyICogKTsKICAgIHZv
aWQgZHJhd0J1dHRvbkxhYmVsKCBRUGFpbnRlciAqICk7CiAgICB2b2lkIGZvY3VzSW5FdmVudCgg
UUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1c091dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7
CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwogICAgdm9pZCB1cGRhdGVN
YXNrKCk7Cgpwcml2YXRlIDoKICAgIHZvaWQgcG9wdXBQcmVzc2VkKCk7Cgpwcml2YXRlOgogICAg
dm9pZCBpbml0KCk7CgogICAgdWludCBhdXRvRGVmQnV0dG9uIDogMTsKICAgIHVpbnQgZGVmQnV0
dG9uIDogMTsKICAgIHVpbnQgZmx0IDogMTsKICAgIHVpbnQgcmVzZXJ2ZWQgOiAxOwogICAgdWlu
dCBsYXN0RW5hYmxlZCA6IDE7CiAgICB1aW50IGhhc01lbnVBcnJvdyA6IDE7CgogICAgUVB1c2hC
dXR0b25Qcml2YXRlKiBkOwoKICAgIGZyaWVuZCBjbGFzcyBRRGlhbG9nOwoKcHJpdmF0ZToKCiAg
ICBRUHVzaEJ1dHRvbiggY29uc3QgUVB1c2hCdXR0b24gJiApOwogICAgUVB1c2hCdXR0b24gJm9w
ZXJhdG9yPSggY29uc3QgUVB1c2hCdXR0b24gJiApOwoKfTsKIyAxOSAiVHhHcmlkVmlldy5oIiAy
CgoKCgoKY2xhc3MgVHhHcmlkVmlldyA6IHB1YmxpYyBRQ2FudmFzVmlldwp7CgpwdWJsaWM6CgoK
CgoKICAgVHhHcmlkVmlldyAoUVZCb3ggJnZib3gpCiAgIDogUUNhbnZhc1ZpZXcoJnZib3gpCiAg
IHsKICAgICAgZ3JpZFZpZXcgPSB0aGlzOwogICB9CgoKCgogICBzdGF0aWMgVHhHcmlkVmlldyYg
Z2V0R3JpZFZpZXcgKCkKICAgewogICAgIHJldHVybiAqZ3JpZFZpZXc7CiAgIH0KCgoKCiAgIHN0
YXRpYyB2b2lkIHNldFB1c2hlZCAoUVB1c2hCdXR0b24gJm5ld1B1c2hlZCkKICAgewogICAgIHB1
c2hlZCA9ICZuZXdQdXNoZWQ7CiAgIH0KCgoKCiAgIHN0YXRpYyB2b2lkIGNsZWFyICgpOwoKcHJv
dGVjdGVkOgoKCgoKCiAgIHZvaWQgY29udGVudHNNb3VzZVByZXNzRXZlbnQgKFFNb3VzZUV2ZW50
ICpjb25zdCBwcmVzcyk7CgoKCgoKICAgdm9pZCBjb250ZW50c01vdXNlTW92ZUV2ZW50IChRTW91
c2VFdmVudCAqY29uc3QgbW92ZSk7CgoKCgoKICAgdm9pZCBjb250ZW50c01vdXNlUmVsZWFzZUV2
ZW50IChRTW91c2VFdmVudCAqICk7Cgpwcml2YXRlOgoKCgoKICAgc3RhdGljIFR4R3JpZFZpZXcg
KmdyaWRWaWV3OwoKCgoKICAgc3RhdGljIFFQdXNoQnV0dG9uICpwdXNoZWQ7CgoKCgoKCiAgIGlu
dCBoaXRUZXN0IChjb25zdCBRTW91c2VFdmVudCAmbW91c2UpOwp9OwojIDE2ICJUeFZvcnBhbEdV
SS5jcHAiIDIKIyAxICJUeFZvcnBhbE1lbnVJdGVtLmgiIDEKIyAxNyAiVHhWb3JwYWxNZW51SXRl
bS5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFpbnRlci5oIiAxCiMgNTAg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFpbnRlci5oIgojIDEgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xd21hdHJpeC5oIiAxCiMgNTEgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xd21hdHJpeC5oIgpjbGFzcyBRV01hdHJpeAp7CnB1YmxpYzoKICAgIFFXTWF0cml4
KCk7CiAgICBRV01hdHJpeCggZG91YmxlIG0xMSwgZG91YmxlIG0xMiwgZG91YmxlIG0yMSwgZG91
YmxlIG0yMiwKICAgICAgICAgICAgICBkb3VibGUgZHgsIGRvdWJsZSBkeSApOwoKICAgIHZvaWQg
c2V0TWF0cml4KCBkb3VibGUgbTExLCBkb3VibGUgbTEyLCBkb3VibGUgbTIxLCBkb3VibGUgbTIy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHgsIGRvdWJsZSBkeSApOwoKICAg
IGRvdWJsZSBtMTEoKSBjb25zdCB7IHJldHVybiBfbTExOyB9CiAgICBkb3VibGUgbTEyKCkgY29u
c3QgeyByZXR1cm4gX20xMjsgfQogICAgZG91YmxlIG0yMSgpIGNvbnN0IHsgcmV0dXJuIF9tMjE7
IH0KICAgIGRvdWJsZSBtMjIoKSBjb25zdCB7IHJldHVybiBfbTIyOyB9CiAgICBkb3VibGUgZHgo
KSBjb25zdCB7IHJldHVybiBfZHg7IH0KICAgIGRvdWJsZSBkeSgpIGNvbnN0IHsgcmV0dXJuIF9k
eTsgfQoKICAgIHZvaWQgbWFwKCBpbnQgeCwgaW50IHksIGludCAqdHgsIGludCAqdHkgKSBjb25z
dDsKICAgIHZvaWQgbWFwKCBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSAqdHgsIGRvdWJsZSAq
dHkgKSBjb25zdDsKICAgIFFSZWN0IG1hcFJlY3QoIGNvbnN0IFFSZWN0ICYgKSBjb25zdDsKCiAg
ICBRUG9pbnQgbWFwKCBjb25zdCBRUG9pbnQgJnAgKSBjb25zdCB7IHJldHVybiBvcGVyYXRvciAq
KCBwICk7IH0KICAgIFFSZWN0IG1hcCggY29uc3QgUVJlY3QgJnIgKSBjb25zdCB7IHJldHVybiBt
YXBSZWN0ICggciApOyB9CiAgICBRUG9pbnRBcnJheSBtYXAoIGNvbnN0IFFQb2ludEFycmF5ICZh
ICkgY29uc3QgeyByZXR1cm4gb3BlcmF0b3IgKiAoIGEgKTsgfQogICAgUVJlZ2lvbiBtYXAoIGNv
bnN0IFFSZWdpb24gJnIgKSBjb25zdCB7IHJldHVybiBvcGVyYXRvciAqKCByICk7IH0KICAgIFFS
ZWdpb24gbWFwVG9SZWdpb24oIGNvbnN0IFFSZWN0ICZyICkgY29uc3QgeyByZXR1cm4gb3BlcmF0
b3IgKiggciApOyB9CiAgICBRUG9pbnRBcnJheSBtYXBUb1BvbHlnb24oIGNvbnN0IFFSZWN0ICZy
ICkgY29uc3Q7CgogICAgdm9pZCByZXNldCgpOwogICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3Q7
CgogICAgUVdNYXRyaXggJnRyYW5zbGF0ZSggZG91YmxlIGR4LCBkb3VibGUgZHkgKTsKICAgIFFX
TWF0cml4ICZzY2FsZSggZG91YmxlIHN4LCBkb3VibGUgc3kgKTsKICAgIFFXTWF0cml4ICZzaGVh
ciggZG91YmxlIHNoLCBkb3VibGUgc3YgKTsKICAgIFFXTWF0cml4ICZyb3RhdGUoIGRvdWJsZSBh
ICk7CgogICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdCB7IHJldHVybiAoX20xMSpfbTIyIC0g
X20xMipfbTIxKSAhPSAwOyB9CiAgICBkb3VibGUgZGV0KCkgY29uc3QgeyByZXR1cm4gX20xMSpf
bTIyIC0gX20xMipfbTIxOyB9CgogICAgUVdNYXRyaXggaW52ZXJ0KCBib29sICogPSAwICkgY29u
c3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRV01hdHJpeCAmICkgY29uc3Q7CiAgICBi
b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFXTWF0cml4ICYgKSBjb25zdDsKICAgIFFXTWF0cml4ICZv
cGVyYXRvcio9KCBjb25zdCBRV01hdHJpeCAmICk7CgoKICAgIFFQb2ludCBvcGVyYXRvciAqIChj
b25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVJlZ2lvbiBvcGVyYXRvciAqIChjb25zdCBRUmVj
dCAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yICogKGNvbnN0IFFSZWdpb24gJiApIGNv
bnN0OwogICAgUVBvaW50QXJyYXkgb3BlcmF0b3IgKiAoIGNvbnN0IFFQb2ludEFycmF5ICZhICkg
Y29uc3Q7CgogICAgZW51bSBUcmFuc2Zvcm1hdGlvbk1vZGUgewogICAgICAgIFBvaW50cywgQXJl
YXMKICAgIH07CiAgICBzdGF0aWMgdm9pZCBzZXRUcmFuc2Zvcm1hdGlvbk1vZGUoIFFXTWF0cml4
OjpUcmFuc2Zvcm1hdGlvbk1vZGUgbSApOwogICAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTW9kZSB0
cmFuc2Zvcm1hdGlvbk1vZGUoKTsKcHJpdmF0ZToKICAgIGRvdWJsZSBfbTExLCBfbTEyOwogICAg
ZG91YmxlIF9tMjEsIF9tMjI7CiAgICBkb3VibGUgX2R4LCBfZHk7Cn07CgogUVdNYXRyaXggb3Bl
cmF0b3IqKCBjb25zdCBRV01hdHJpeCAmLCBjb25zdCBRV01hdHJpeCAmICk7CgoKCgoKCiBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVdNYXRyaXggJiApOwog
UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFXTWF0cml4ICYgKTsKIyA1
MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwYWludGVyLmgiIDIKCgpjbGFzcyBRR2Z4
OwpjbGFzcyBRVGV4dENvZGVjOwpjbGFzcyBRVGV4dFBhcmFnOwpjbGFzcyBRUGFpbnREZXZpY2U7
CgoKCmNsYXNzIFFQYWludGVyUHJpdmF0ZTsKCmNsYXNzIFFQYWludGVyIDogcHVibGljIFF0CnsK
cHVibGljOgogICAgZW51bSBDb29yZGluYXRlTW9kZSB7IENvb3JkRGV2aWNlLCBDb29yZFBhaW50
ZXIgfTsKCiAgICBRUGFpbnRlcigpOwogICAgUVBhaW50ZXIoIGNvbnN0IFFQYWludERldmljZSAq
LCBib29sIHVuY2xpcHBlZCA9IEZBTFNFICk7CiAgICBRUGFpbnRlciggY29uc3QgUVBhaW50RGV2
aWNlICosIGNvbnN0IFFXaWRnZXQgKiwgYm9vbCB1bmNsaXBwZWQgPSBGQUxTRSApOwogICB+UVBh
aW50ZXIoKTsKCiAgICBib29sIGJlZ2luKCBjb25zdCBRUGFpbnREZXZpY2UgKiwgYm9vbCB1bmNs
aXBwZWQgPSBGQUxTRSApOwogICAgYm9vbCBiZWdpbiggY29uc3QgUVBhaW50RGV2aWNlICosIGNv
bnN0IFFXaWRnZXQgKiwgYm9vbCB1bmNsaXBwZWQgPSBGQUxTRSApOwogICAgYm9vbCBlbmQoKTsK
ICAgIFFQYWludERldmljZSAqZGV2aWNlKCkgY29uc3Q7CgoKCgoKICAgIHN0YXRpYyB2b2lkIHJl
ZGlyZWN0KCBRUGFpbnREZXZpY2UgKnBkZXYsIFFQYWludERldmljZSAqcmVwbGFjZW1lbnQgKTsK
CiAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CgogICAgdm9pZCBmbHVzaCggY29uc3QgUVJlZ2lv
biAmcmVnaW9uLCBDb29yZGluYXRlTW9kZSBjbSA9IENvb3JkRGV2aWNlICk7CiAgICB2b2lkIGZs
dXNoKCk7CiAgICB2b2lkIHNhdmUoKTsKICAgIHZvaWQgcmVzdG9yZSgpOwoKCgogICAgUUZvbnRN
ZXRyaWNzIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICBRRm9udEluZm8gZm9udEluZm8oKSBjb25z
dDsKCiAgICBjb25zdCBRRm9udCAmZm9udCgpIGNvbnN0OwogICAgdm9pZCBzZXRGb250KCBjb25z
dCBRRm9udCAmICk7CiAgICBjb25zdCBRUGVuICZwZW4oKSBjb25zdDsKICAgIHZvaWQgc2V0UGVu
KCBjb25zdCBRUGVuICYgKTsKICAgIHZvaWQgc2V0UGVuKCBQZW5TdHlsZSApOwogICAgdm9pZCBz
ZXRQZW4oIGNvbnN0IFFDb2xvciAmICk7CiAgICBjb25zdCBRQnJ1c2ggJmJydXNoKCkgY29uc3Q7
CiAgICB2b2lkIHNldEJydXNoKCBjb25zdCBRQnJ1c2ggJiApOwogICAgdm9pZCBzZXRCcnVzaCgg
QnJ1c2hTdHlsZSApOwogICAgdm9pZCBzZXRCcnVzaCggY29uc3QgUUNvbG9yICYgKTsKICAgIFFQ
b2ludCBwb3MoKSBjb25zdDsKCgoKICAgIGNvbnN0IFFDb2xvciAmYmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CiAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvciggY29uc3QgUUNvbG9yICYgKTsKICAg
IEJHTW9kZSBiYWNrZ3JvdW5kTW9kZSgpIGNvbnN0OwogICAgdm9pZCBzZXRCYWNrZ3JvdW5kTW9k
ZSggQkdNb2RlICk7CiAgICBSYXN0ZXJPcCByYXN0ZXJPcCgpIGNvbnN0OwogICAgdm9pZCBzZXRS
YXN0ZXJPcCggUmFzdGVyT3AgKTsKICAgIGNvbnN0IFFQb2ludCAmYnJ1c2hPcmlnaW4oKSBjb25z
dDsKICAgIHZvaWQgc2V0QnJ1c2hPcmlnaW4oIGludCB4LCBpbnQgeSApOwogICAgdm9pZCBzZXRC
cnVzaE9yaWdpbiggY29uc3QgUVBvaW50ICYgKTsKCgoKCgoKICAgIGJvb2wgaGFzVmlld1hGb3Jt
KCkgY29uc3Q7CiAgICBib29sIGhhc1dvcmxkWEZvcm0oKSBjb25zdDsKCgogICAgdm9pZCBzZXRW
aWV3WEZvcm0oIGJvb2wgKTsKICAgIFFSZWN0IHdpbmRvdygpIGNvbnN0OwogICAgdm9pZCBzZXRX
aW5kb3coIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgc2V0V2luZG93KCBpbnQgeCwgaW50IHks
IGludCB3LCBpbnQgaCApOwogICAgUVJlY3Qgdmlld3BvcnQoKSBjb25zdDsKICAgIHZvaWQgc2V0
Vmlld3BvcnQoIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgc2V0Vmlld3BvcnQoIGludCB4LCBp
bnQgeSwgaW50IHcsIGludCBoICk7CgogICAgdm9pZCBzZXRXb3JsZFhGb3JtKCBib29sICk7CiAg
ICBjb25zdCBRV01hdHJpeCAmd29ybGRNYXRyaXgoKSBjb25zdDsKICAgIHZvaWQgc2V0V29ybGRN
YXRyaXgoIGNvbnN0IFFXTWF0cml4ICYsIGJvb2wgY29tYmluZT1GQUxTRSApOwoKICAgIHZvaWQg
c2F2ZVdvcmxkTWF0cml4KCk7CiAgICB2b2lkIHJlc3RvcmVXb3JsZE1hdHJpeCgpOwoKICAgIHZv
aWQgc2NhbGUoIGRvdWJsZSBzeCwgZG91YmxlIHN5ICk7CiAgICB2b2lkIHNoZWFyKCBkb3VibGUg
c2gsIGRvdWJsZSBzdiApOwogICAgdm9pZCByb3RhdGUoIGRvdWJsZSBhICk7CgogICAgdm9pZCB0
cmFuc2xhdGUoIGRvdWJsZSBkeCwgZG91YmxlIGR5ICk7CiAgICB2b2lkIHJlc2V0WEZvcm0oKTsK
ICAgIGRvdWJsZSB0cmFuc2xhdGlvblgoKSBjb25zdDsKICAgIGRvdWJsZSB0cmFuc2xhdGlvblko
KSBjb25zdDsKCiAgICBRUG9pbnQgeEZvcm0oIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBR
UmVjdCB4Rm9ybSggY29uc3QgUVJlY3QgJiApIGNvbnN0OwogICAgUVBvaW50QXJyYXkgeEZvcm0o
IGNvbnN0IFFQb2ludEFycmF5ICYgKSBjb25zdDsKICAgIFFQb2ludEFycmF5IHhGb3JtKCBjb25z
dCBRUG9pbnRBcnJheSAmLCBpbnQgaW5kZXgsIGludCBucG9pbnRzICkgY29uc3Q7CiAgICBRUG9p
bnQgeEZvcm1EZXYoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUmVjdCB4Rm9ybURldigg
Y29uc3QgUVJlY3QgJiApIGNvbnN0OwogICAgUVBvaW50QXJyYXkgeEZvcm1EZXYoIGNvbnN0IFFQ
b2ludEFycmF5ICYgKSBjb25zdDsKICAgIFFQb2ludEFycmF5IHhGb3JtRGV2KCBjb25zdCBRUG9p
bnRBcnJheSAmLCBpbnQgaW5kZXgsIGludCBucG9pbnRzICkgY29uc3Q7CgoKCiAgICB2b2lkIHNl
dENsaXBwaW5nKCBib29sICk7CiAgICBib29sIGhhc0NsaXBwaW5nKCkgY29uc3Q7CiAgICBRUmVn
aW9uIGNsaXBSZWdpb24oIENvb3JkaW5hdGVNb2RlID0gQ29vcmREZXZpY2UgKSBjb25zdDsKICAg
IHZvaWQgc2V0Q2xpcFJlY3QoIGNvbnN0IFFSZWN0ICYsIENvb3JkaW5hdGVNb2RlID0gQ29vcmRE
ZXZpY2UgKTsKICAgIHZvaWQgc2V0Q2xpcFJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBo
LCBDb29yZGluYXRlTW9kZSA9IENvb3JkRGV2aWNlICk7CiAgICB2b2lkIHNldENsaXBSZWdpb24o
IGNvbnN0IFFSZWdpb24gJiwgQ29vcmRpbmF0ZU1vZGUgPSBDb29yZERldmljZSApOwoKCgogICAg
dm9pZCBkcmF3UG9pbnQoIGludCB4LCBpbnQgeSApOwogICAgdm9pZCBkcmF3UG9pbnQoIGNvbnN0
IFFQb2ludCAmICk7CiAgICB2b2lkIGRyYXdQb2ludHMoIGNvbnN0IFFQb2ludEFycmF5JiBhLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4PTAsIGludCBucG9pbnRzPS0xICk7
CiAgICB2b2lkIG1vdmVUbyggaW50IHgsIGludCB5ICk7CiAgICB2b2lkIG1vdmVUbyggY29uc3Qg
UVBvaW50ICYgKTsKICAgIHZvaWQgbGluZVRvKCBpbnQgeCwgaW50IHkgKTsKICAgIHZvaWQgbGlu
ZVRvKCBjb25zdCBRUG9pbnQgJiApOwogICAgdm9pZCBkcmF3TGluZSggaW50IHgxLCBpbnQgeTEs
IGludCB4MiwgaW50IHkyICk7CiAgICB2b2lkIGRyYXdMaW5lKCBjb25zdCBRUG9pbnQgJiwgY29u
c3QgUVBvaW50ICYgKTsKICAgIHZvaWQgZHJhd1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGlu
dCBoICk7CiAgICB2b2lkIGRyYXdSZWN0KCBjb25zdCBRUmVjdCAmICk7CiAgICB2b2lkIGRyYXdX
aW5Gb2N1c1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIGRyYXdX
aW5Gb2N1c1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yICZiZ0NvbG9yICk7CiAgICB2b2lkIGRyYXdX
aW5Gb2N1c1JlY3QoIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgZHJhd1dpbkZvY3VzUmVjdCgg
Y29uc3QgUVJlY3QgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFD
b2xvciAmYmdDb2xvciApOwogICAgdm9pZCBkcmF3Um91bmRSZWN0KCBpbnQgeCwgaW50IHksIGlu
dCB3LCBpbnQgaCwgaW50ID0gMjUsIGludCA9IDI1ICk7CiAgICB2b2lkIGRyYXdSb3VuZFJlY3Qo
IGNvbnN0IFFSZWN0ICYsIGludCA9IDI1LCBpbnQgPSAyNSApOwogICAgdm9pZCBkcmF3RWxsaXBz
ZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgZHJhd0VsbGlwc2UoIGNv
bnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgZHJhd0FyYyggaW50IHgsIGludCB5LCBpbnQgdywgaW50
IGgsIGludCBhLCBpbnQgYWxlbiApOwogICAgdm9pZCBkcmF3QXJjKCBjb25zdCBRUmVjdCAmLCBp
bnQgYSwgaW50IGFsZW4gKTsKICAgIHZvaWQgZHJhd1BpZSggaW50IHgsIGludCB5LCBpbnQgdywg
aW50IGgsIGludCBhLCBpbnQgYWxlbiApOwogICAgdm9pZCBkcmF3UGllKCBjb25zdCBRUmVjdCAm
LCBpbnQgYSwgaW50IGFsZW4gKTsKICAgIHZvaWQgZHJhd0Nob3JkKCBpbnQgeCwgaW50IHksIGlu
dCB3LCBpbnQgaCwgaW50IGEsIGludCBhbGVuICk7CiAgICB2b2lkIGRyYXdDaG9yZCggY29uc3Qg
UVJlY3QgJiwgaW50IGEsIGludCBhbGVuICk7CiAgICB2b2lkIGRyYXdMaW5lU2VnbWVudHMoIGNv
bnN0IFFQb2ludEFycmF5ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5kZXg9MCwgaW50IG5saW5lcz0tMSApOwogICAgdm9pZCBkcmF3UG9seWxpbmUoIGNvbnN0IFFQ
b2ludEFycmF5ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleD0wLCBp
bnQgbnBvaW50cz0tMSApOwogICAgdm9pZCBkcmF3UG9seWdvbiggY29uc3QgUVBvaW50QXJyYXkg
JiwgYm9vbCB3aW5kaW5nPUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bmRleD0wLCBpbnQgbnBvaW50cz0tMSApOwogICAgdm9pZCBkcmF3Q29udmV4UG9seWdvbiggY29u
c3QgUVBvaW50QXJyYXkgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXg9
MCwgaW50IG5wb2ludHM9LTEgKTsKCiAgICB2b2lkIGRyYXdDdWJpY0JlemllciggY29uc3QgUVBv
aW50QXJyYXkgJiwgaW50IGluZGV4PTAgKTsKCiAgICB2b2lkIGRyYXdQaXhtYXAoIGludCB4LCBp
bnQgeSwgY29uc3QgUVBpeG1hcCAmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN4
PTAsIGludCBzeT0wLCBpbnQgc3c9LTEsIGludCBzaD0tMSApOwogICAgdm9pZCBkcmF3UGl4bWFw
KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBpeG1hcCAmLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVJlY3QgJnNyICk7CiAgICB2b2lkIGRyYXdQaXhtYXAoIGNvbnN0IFFQb2lu
dCAmLCBjb25zdCBRUGl4bWFwICYgKTsKICAgIHZvaWQgZHJhd1BpeG1hcCggY29uc3QgUVJlY3Qg
JiwgY29uc3QgUVBpeG1hcCAmICk7CiAgICB2b2lkIGRyYXdJbWFnZSggaW50IHgsIGludCB5LCBj
b25zdCBRSW1hZ2UgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN4ID0gMCwgaW50
IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgY29udmVyc2lvbkZsYWdzID0gMCApOwogICAgdm9pZCBkcmF3SW1hZ2UoIGNvbnN0
IFFQb2ludCAmLCBjb25zdCBRSW1hZ2UgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUVJlY3QgJnNyLCBpbnQgY29udmVyc2lvbkZsYWdzID0gMCApOwogICAgdm9pZCBkcmF3SW1h
Z2UoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRSW1hZ2UgJiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3MgPSAwICk7CiAgICB2b2lkIGRyYXdJbWFnZSggY29u
c3QgUVJlY3QgJiwgY29uc3QgUUltYWdlICYgKTsKICAgIHZvaWQgZHJhd1RpbGVkUGl4bWFwKCBp
bnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29uc3QgUVBpeG1hcCAmLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc3g9MCwgaW50IHN5PTAgKTsKICAgIHZvaWQgZHJhd1Rp
bGVkUGl4bWFwKCBjb25zdCBRUmVjdCAmLCBjb25zdCBRUGl4bWFwICYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludCAmICk7CiAgICB2b2lkIGRyYXdUaWxlZFBp
eG1hcCggY29uc3QgUVJlY3QgJiwgY29uc3QgUVBpeG1hcCAmICk7CgogICAgdm9pZCBkcmF3UGlj
dHVyZSggY29uc3QgUVBpY3R1cmUgJiApOwogICAgdm9pZCBkcmF3UGljdHVyZSggaW50IHgsIGlu
dCB5LCBjb25zdCBRUGljdHVyZSAmICk7CiAgICB2b2lkIGRyYXdQaWN0dXJlKCBjb25zdCBRUG9p
bnQgJiwgY29uc3QgUVBpY3R1cmUgJiApOwoKCiAgICB2b2lkIGZpbGxSZWN0KCBpbnQgeCwgaW50
IHksIGludCB3LCBpbnQgaCwgY29uc3QgUUJydXNoICYgKTsKICAgIHZvaWQgZmlsbFJlY3QoIGNv
bnN0IFFSZWN0ICYsIGNvbnN0IFFCcnVzaCAmICk7CiAgICB2b2lkIGVyYXNlUmVjdCggaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgZXJhc2VSZWN0KCBjb25zdCBRUmVjdCAm
ICk7CgoKCiAgICBlbnVtIFRleHREaXJlY3Rpb24gewogICAgICAgIEF1dG8sCiAgICAgICAgUlRM
LAogICAgICAgIExUUgogICAgfTsKCiAgICB2b2lkIGRyYXdUZXh0KCBpbnQgeCwgaW50IHksIGNv
bnN0IFFTdHJpbmcgJiwgaW50IGxlbiA9IC0xLCBUZXh0RGlyZWN0aW9uIGRpciA9IEF1dG8gKTsK
ICAgIHZvaWQgZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRU3RyaW5nICYsIGludCBs
ZW4gPSAtMSwgVGV4dERpcmVjdGlvbiBkaXIgPSBBdXRvICk7CgogICAgdm9pZCBkcmF3VGV4dCgg
aW50IHgsIGludCB5LCBjb25zdCBRU3RyaW5nICYsIGludCBwb3MsIGludCBsZW4sIFRleHREaXJl
Y3Rpb24gZGlyID0gQXV0byApOwogICAgdm9pZCBkcmF3VGV4dCggY29uc3QgUVBvaW50ICZwLCBj
b25zdCBRU3RyaW5nICYsIGludCBwb3MsIGludCBsZW4sIFRleHREaXJlY3Rpb24gZGlyID0gQXV0
byApOwoKICAgIHZvaWQgZHJhd1RleHQoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQg
ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYsIGludCBsZW4g
PSAtMSwgUVJlY3QgKmJyPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUVRleHRQYXJhZyAq
KmludGVybj0wICk7CiAgICB2b2lkIGRyYXdUZXh0KCBjb25zdCBRUmVjdCAmLCBpbnQgZmxhZ3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYsIGludCBsZW4gPSAtMSwg
UVJlY3QgKmJyPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUVRleHRQYXJhZyAqKmludGVy
bj0wICk7CgoKCgoKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywg
aW50IGgsIGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0
cmluZyYsIGludCBsZW4gPSAtMSwgUVRleHRQYXJhZyAqKmludGVybj0wICk7CiAgICBRUmVjdCBi
b3VuZGluZ1JlY3QoIGNvbnN0IFFSZWN0ICYsIGludCBmbGFncywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUVN0cmluZyYsIGludCBsZW4gPSAtMSwgUVRleHRQYXJhZyAqKmlu
dGVybj0wICk7CgogICAgaW50IHRhYlN0b3BzKCkgY29uc3Q7CiAgICB2b2lkIHNldFRhYlN0b3Bz
KCBpbnQgKTsKICAgIGludCAqdGFiQXJyYXkoKSBjb25zdDsKICAgIHZvaWQgc2V0VGFiQXJyYXko
IGludCAqICk7CgoKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCiAgICBzdGF0aWMg
dm9pZCBpbml0aWFsaXplKCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7Cgpwcml2YXRlOgog
ICAgdm9pZCBpbml0KCk7CiAgICB2b2lkIGRlc3Ryb3koKTsKICAgIHZvaWQgdXBkYXRlRm9udCgp
OwogICAgdm9pZCB1cGRhdGVQZW4oKTsKICAgIHZvaWQgdXBkYXRlQnJ1c2goKTsKCiAgICB2b2lk
IHVwZGF0ZVhGb3JtKCk7CiAgICB2b2lkIHVwZGF0ZUludlhGb3JtKCk7CgogICAgdm9pZCBtYXAo
IGludCwgaW50LCBpbnQgKnJ4LCBpbnQgKnJ5ICkgY29uc3Q7CiAgICB2b2lkIG1hcCggaW50LCBp
bnQsIGludCwgaW50LCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKiApIGNvbnN0OwogICAgdm9p
ZCBtYXBJbnYoIGludCwgaW50LCBpbnQgKiwgaW50ICogKSBjb25zdDsKICAgIHZvaWQgbWFwSW52
KCBpbnQsIGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqICkgY29uc3Q7
CiAgICB2b2lkIGRyYXdQb2x5SW50ZXJuYWwoIGNvbnN0IFFQb2ludEFycmF5ICYsIGJvb2wgY2xv
c2U9VFJVRSApOwogICAgdm9pZCBkcmF3V2luRm9jdXNSZWN0KCBpbnQgeCwgaW50IHksIGludCB3
LCBpbnQgaCwgYm9vbCB4b3JQYWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFDb2xvciAmcGVuQ29sb3IgKTsKCiAgICBlbnVtIHsgSXNBY3RpdmU9MHgwMSwgRXh0
RGV2PTB4MDIsIElzU3RhcnRpbmdVcD0weDA0LCBOb0NhY2hlPTB4MDgsCiAgICAgICAgICAgVnhG
PTB4MTAsIFd4Rj0weDIwLCBDbGlwT249MHg0MCwgU2FmZVBvbHlnb249MHg4MCwgTW9ub0Rldj0w
eDEwMCwKICAgICAgICAgICBEaXJ0eUZvbnQ9MHgyMDAsIERpcnR5UGVuPTB4NDAwLCBEaXJ0eUJy
dXNoPTB4ODAwLAogICAgICAgICAgIFJHQkNvbG9yPTB4MTAwMCwgRm9udE1ldD0weDIwMDAsIEZv
bnRJbmY9MHg0MDAwLCBDdG9yQmVnaW49MHg4MDAwLAogICAgICAgICAgIFVzZVByaXZhdGVDeCA9
IDB4MTAwMDAsIFZvbGF0aWxlREMgPSAweDIwMDAwLCBRdDJDb21wYXQgPSAweDQwMDAwIH07CiAg
ICB1aW50IGZsYWdzOwogICAgYm9vbCB0ZXN0ZiggdWludCBiICkgY29uc3QgeyByZXR1cm4gKGZs
YWdzJmIpIT0wOyB9CiAgICB2b2lkIHNldGYoIHVpbnQgYiApIHsgZmxhZ3MgfD0gYjsgfQogICAg
dm9pZCBzZXRmKCB1aW50IGIsIGJvb2wgdiApOwogICAgdm9pZCBjbGVhcmYoIHVpbnQgYiApIHsg
ZmxhZ3MgJj0gKHVpbnQpKH5iKTsgfQogICAgdm9pZCBmaXhfbmVnX3JlY3QoIGludCAqeCwgaW50
ICp5LCBpbnQgKncsIGludCAqaCApOwoKICAgIFFQYWludGVyUHJpdmF0ZSAqZDsKICAgIFFQYWlu
dERldmljZSAqcGRldjsKICAgIFFDb2xvciBiZ19jb2w7CiAgICB1Y2hhciBiZ19tb2RlOwogICAg
dWNoYXIgcm9wOwogICAgdWNoYXIgcHU7CiAgICBRUG9pbnQgYnJvOwogICAgUUZvbnQgY2ZvbnQ7
CiAgICBRRm9udCAqcGZvbnQ7CiAgICBRUGVuIGNwZW47CiAgICBRQnJ1c2ggY2JydXNoOwogICAg
UVJlZ2lvbiBjcmduOwogICAgaW50IHRhYnN0b3BzOwogICAgaW50ICp0YWJhcnJheTsKICAgIGlu
dCB0YWJhcnJheWxlbjsKICAgIGJvb2wgYmxvY2tfZXh0OwoKCgogICAgUUNPT1JEIHd4LCB3eSwg
d3csIHdoOwogICAgUUNPT1JEIHZ4LCB2eSwgdncsIHZoOwogICAgUVdNYXRyaXggd3htYXQ7CgoK
ICAgIFFXTWF0cml4IHhtYXQ7CiAgICBRV01hdHJpeCBpeG1hdDsKCgoKICAgIGRvdWJsZSBtMTEo
KSBjb25zdCB7IHJldHVybiB4bWF0Lm0xMSgpOyB9CiAgICBkb3VibGUgbTEyKCkgY29uc3QgeyBy
ZXR1cm4geG1hdC5tMTIoKTsgfQogICAgZG91YmxlIG0yMSgpIGNvbnN0IHsgcmV0dXJuIHhtYXQu
bTIxKCk7IH0KICAgIGRvdWJsZSBtMjIoKSBjb25zdCB7IHJldHVybiB4bWF0Lm0yMigpOyB9CiAg
ICBkb3VibGUgZHgoKSBjb25zdCB7IHJldHVybiB4bWF0LmR4KCk7IH0KICAgIGRvdWJsZSBkeSgp
IGNvbnN0IHsgcmV0dXJuIHhtYXQuZHkoKTsgfQogICAgZG91YmxlIGltMTEoKSBjb25zdCB7IHJl
dHVybiBpeG1hdC5tMTEoKTsgfQogICAgZG91YmxlIGltMTIoKSBjb25zdCB7IHJldHVybiBpeG1h
dC5tMTIoKTsgfQogICAgZG91YmxlIGltMjEoKSBjb25zdCB7IHJldHVybiBpeG1hdC5tMjEoKTsg
fQogICAgZG91YmxlIGltMjIoKSBjb25zdCB7IHJldHVybiBpeG1hdC5tMjIoKTsgfQogICAgZG91
YmxlIGlkeCgpIGNvbnN0IHsgcmV0dXJuIGl4bWF0LmR4KCk7IH0KICAgIGRvdWJsZSBpZHkoKSBj
b25zdCB7IHJldHVybiBpeG1hdC5keSgpOyB9CgogICAgaW50IHR4b3A7CiAgICBib29sIHR4aW52
OwoKCgoKCgoKICAgIHZvaWQgKnBlblJlZjsKICAgIHZvaWQgKmJydXNoUmVmOwogICAgdm9pZCAq
cHNfc3RhY2s7CiAgICB2b2lkICp3bV9zdGFjazsKICAgIHZvaWQga2lsbFBTdGFjaygpOwoKcHJv
dGVjdGVkOgoKCgoKCgogICAgRGlzcGxheSAqZHB5OwogICAgaW50IHNjcm47CiAgICBRdDo6SEFO
RExFIGhkOwogICAgUXQ6OkhBTkRMRSByZW5kaGQ7CiAgICBHQyBnYzsKICAgIEdDIGdjX2JydXNo
OwogICAgUVBvaW50IGN1clB0OwogICAgdWludCBjbGlwX3NlcmlhbDsKCgoKCgoKICAgIGZyaWVu
ZCBjbGFzcyBRRm9udE1ldHJpY3M7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRJbmZvOwogICAgZnJp
ZW5kIHZvaWQgcXRfZm9ybWF0X3RleHQoIGNvbnN0IFFGb250ICYsIGNvbnN0IFFSZWN0ICZyLAog
ICAgICAgICAgICAgICAgICAgICBpbnQgdGYsIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IGxlbiwg
UVJlY3QgKmJyZWN0LAogICAgICAgICAgICAgICAgICAgICBpbnQgdGFic3RvcHMsIGludCogdGFi
YXJyYXksIGludCB0YWJhcnJheWxlbiwKICAgICAgICAgICAgICAgICAgICAgUVRleHRQYXJhZyAq
KmludGVybmFsLCBRUGFpbnRlciogcGFpbnRlciApOwogICAgZnJpZW5kIGNsYXNzIFFQcmludGVy
OwoKcHJpdmF0ZToKCiAgICBRUGFpbnRlciggY29uc3QgUVBhaW50ZXIgJiApOwogICAgUVBhaW50
ZXIgJm9wZXJhdG9yPSggY29uc3QgUVBhaW50ZXIgJiApOwoKfTsKCgoKCgoKaW5saW5lIFFQYWlu
dERldmljZSAqUVBhaW50ZXI6OmRldmljZSgpIGNvbnN0CnsKICAgIHJldHVybiBwZGV2Owp9Cgpp
bmxpbmUgYm9vbCBRUGFpbnRlcjo6aXNBY3RpdmUoKSBjb25zdAp7CiAgICByZXR1cm4gdGVzdGYo
SXNBY3RpdmUpOwp9CgppbmxpbmUgY29uc3QgUUZvbnQgJlFQYWludGVyOjpmb250KCkgY29uc3QK
ewogICAgcmV0dXJuIGNmb250Owp9CgppbmxpbmUgY29uc3QgUVBlbiAmUVBhaW50ZXI6OnBlbigp
IGNvbnN0CnsKICAgIHJldHVybiBjcGVuOwp9CgppbmxpbmUgY29uc3QgUUJydXNoICZRUGFpbnRl
cjo6YnJ1c2goKSBjb25zdAp7CiAgICByZXR1cm4gY2JydXNoOwp9CiMgNDQ4ICIvdXNyL2xvY2Fs
L3F0LTMuMS4xL2luY2x1ZGUvcXBhaW50ZXIuaCIKaW5saW5lIGNvbnN0IFFDb2xvciAmUVBhaW50
ZXI6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0CnsKICAgIHJldHVybiBiZ19jb2w7Cn0KCmlubGlu
ZSBRdDo6QkdNb2RlIFFQYWludGVyOjpiYWNrZ3JvdW5kTW9kZSgpIGNvbnN0CnsKICAgIHJldHVy
biAoQkdNb2RlKWJnX21vZGU7Cn0KCmlubGluZSBRdDo6UmFzdGVyT3AgUVBhaW50ZXI6OnJhc3Rl
ck9wKCkgY29uc3QKewogICAgcmV0dXJuIChSYXN0ZXJPcClyb3A7Cn0KCmlubGluZSBjb25zdCBR
UG9pbnQgJlFQYWludGVyOjpicnVzaE9yaWdpbigpIGNvbnN0CnsKICAgIHJldHVybiBicm87Cn0K
CmlubGluZSBib29sIFFQYWludGVyOjpoYXNWaWV3WEZvcm0oKSBjb25zdAp7CgogICAgcmV0dXJu
IHRlc3RmKFZ4Rik7CgoKCn0KCmlubGluZSBib29sIFFQYWludGVyOjpoYXNXb3JsZFhGb3JtKCkg
Y29uc3QKewoKICAgIHJldHVybiB0ZXN0ZihXeEYpOwoKCgp9CgppbmxpbmUgZG91YmxlIFFQYWlu
dGVyOjp0cmFuc2xhdGlvblgoKSBjb25zdAp7CgogICAgcmV0dXJuIHdvcmxkTWF0cml4KCkuZHgo
KTsKCgoKfQoKaW5saW5lIGRvdWJsZSBRUGFpbnRlcjo6dHJhbnNsYXRpb25ZKCkgY29uc3QKewoK
ICAgIHJldHVybiB3b3JsZE1hdHJpeCgpLmR5KCk7CgoKCn0KCgppbmxpbmUgYm9vbCBRUGFpbnRl
cjo6aGFzQ2xpcHBpbmcoKSBjb25zdAp7CiAgICByZXR1cm4gdGVzdGYoQ2xpcE9uKTsKfQoKaW5s
aW5lIGludCBRUGFpbnRlcjo6dGFiU3RvcHMoKSBjb25zdAp7CiAgICByZXR1cm4gdGFic3RvcHM7
Cn0KCmlubGluZSBpbnQgKlFQYWludGVyOjp0YWJBcnJheSgpIGNvbnN0CnsKICAgIHJldHVybiB0
YWJhcnJheTsKfQoKCgoKCgoKaW5saW5lIFF0OjpIQU5ETEUgUVBhaW50ZXI6OmhhbmRsZSgpIGNv
bnN0CnsKICAgIHJldHVybiBoZDsKfQoKCmlubGluZSB2b2lkIFFQYWludGVyOjpzZXRCcnVzaE9y
aWdpbiggY29uc3QgUVBvaW50ICZwICkKewogICAgc2V0QnJ1c2hPcmlnaW4oIHAueCgpLCBwLnko
KSApOwp9CgoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OnNldFdpbmRvdyggY29uc3QgUVJlY3QgJnIg
KQp7CiAgICBzZXRXaW5kb3coIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7
Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpzZXRWaWV3cG9ydCggY29uc3QgUVJlY3QgJnIgKQp7
CiAgICBzZXRWaWV3cG9ydCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgKTsK
fQoKCmlubGluZSB2b2lkIFFQYWludGVyOjpzZXRDbGlwUmVjdCggaW50IHgsIGludCB5LCBpbnQg
dywgaW50IGgsIENvb3JkaW5hdGVNb2RlIG0gKQp7CiAgICBzZXRDbGlwUmVjdCggUVJlY3QoeCx5
LHcsaCksIG0gKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdQb2ludCggY29uc3QgUVBv
aW50ICZwICkKewogICAgZHJhd1BvaW50KCBwLngoKSwgcC55KCkgKTsKfQoKaW5saW5lIHZvaWQg
UVBhaW50ZXI6Om1vdmVUbyggY29uc3QgUVBvaW50ICZwICkKewogICAgbW92ZVRvKCBwLngoKSwg
cC55KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmxpbmVUbyggY29uc3QgUVBvaW50ICZw
ICkKewogICAgbGluZVRvKCBwLngoKSwgcC55KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6
OmRyYXdMaW5lKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKewogICAgZHJh
d0xpbmUoIHAxLngoKSwgcDEueSgpLCBwMi54KCksIHAyLnkoKSApOwp9CgppbmxpbmUgdm9pZCBR
UGFpbnRlcjo6ZHJhd1JlY3QoIGNvbnN0IFFSZWN0ICZyICkKewogICAgZHJhd1JlY3QoIHIueCgp
LCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVy
OjpkcmF3V2luRm9jdXNSZWN0KCBjb25zdCBRUmVjdCAmciApCnsKICAgIGRyYXdXaW5Gb2N1c1Jl
Y3QoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7Cn0KCmlubGluZSB2b2lk
IFFQYWludGVyOjpkcmF3V2luRm9jdXNSZWN0KCBjb25zdCBRUmVjdCAmcixjb25zdCBRQ29sb3Ig
JnBlbkNvbG9yICkKewogICAgZHJhd1dpbkZvY3VzUmVjdCggci54KCksIHIueSgpLCByLndpZHRo
KCksIHIuaGVpZ2h0KCksIHBlbkNvbG9yICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3
Um91bmRSZWN0KCBjb25zdCBRUmVjdCAmciwgaW50IHhSbmQsIGludCB5Um5kICkKewogICAgZHJh
d1JvdW5kUmVjdCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIHhSbmQsIHlS
bmQgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdFbGxpcHNlKCBjb25zdCBRUmVjdCAm
ciApCnsKICAgIGRyYXdFbGxpcHNlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQo
KSApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6ZHJhd0FyYyggY29uc3QgUVJlY3QgJnIsIGlu
dCBhLCBpbnQgYWxlbiApCnsKICAgIGRyYXdBcmMoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCBy
LmhlaWdodCgpLCBhLCBhbGVuICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3UGllKCBj
b25zdCBRUmVjdCAmciwgaW50IGEsIGludCBhbGVuICkKewogICAgZHJhd1BpZSggci54KCksIHIu
eSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIGEsIGFsZW4gKTsKfQoKaW5saW5lIHZvaWQgUVBh
aW50ZXI6OmRyYXdDaG9yZCggY29uc3QgUVJlY3QgJnIsIGludCBhLCBpbnQgYWxlbiApCnsKICAg
IGRyYXdDaG9yZCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIGEsIGFsZW4g
KTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdQaXhtYXAoIGNvbnN0IFFQb2ludCAmcCwg
Y29uc3QgUVBpeG1hcCAmcG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRUmVjdCAmc3IgKQp7CiAgICBkcmF3UGl4bWFwKCBwLngoKSwgcC55KCksIHBtLCBzci54KCks
IHNyLnkoKSwgc3Iud2lkdGgoKSwgc3IuaGVpZ2h0KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50
ZXI6OmRyYXdJbWFnZSggY29uc3QgUVBvaW50ICZwLCBjb25zdCBRSW1hZ2UgJnBtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUmVjdCAmc3IsIGludCBjb252ZXJzaW9u
RmxhZ3MgKQp7CiAgICBkcmF3SW1hZ2UoIHAueCgpLCBwLnkoKSwgcG0sCiAgICAgICAgICAgICAg
IHNyLngoKSwgc3IueSgpLCBzci53aWR0aCgpLCBzci5oZWlnaHQoKSwgY29udmVyc2lvbkZsYWdz
ICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3VGlsZWRQaXhtYXAoIGNvbnN0IFFSZWN0
ICZyLCBjb25zdCBRUGl4bWFwICZwbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVBvaW50ICZzcCApCnsKICAgIGRyYXdUaWxlZFBpeG1hcCggci54KCksIHIu
eSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIHBtLCBzcC54KCksIHNwLnkoKSApOwp9Cgppbmxp
bmUgdm9pZCBRUGFpbnRlcjo6ZHJhd1RpbGVkUGl4bWFwKCBjb25zdCBRUmVjdCAmciwgY29uc3Qg
UVBpeG1hcCAmcG0gKQp7CiAgICBkcmF3VGlsZWRQaXhtYXAoIHIueCgpLCByLnkoKSwgci53aWR0
aCgpLCByLmhlaWdodCgpLCBwbSwgMCwgMCApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6Zmls
bFJlY3QoIGNvbnN0IFFSZWN0ICZyLCBjb25zdCBRQnJ1c2ggJmJydXNoICkKewogICAgZmlsbFJl
Y3QoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLCBicnVzaCApOwp9Cgppbmxp
bmUgdm9pZCBRUGFpbnRlcjo6ZXJhc2VSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCAp
CnsKICAgIGZpbGxSZWN0KCB4LCB5LCB3LCBoLCBiYWNrZ3JvdW5kQ29sb3IoKSApOwp9Cgppbmxp
bmUgdm9pZCBRUGFpbnRlcjo6ZXJhc2VSZWN0KCBjb25zdCBRUmVjdCAmciApCnsKICAgIGZpbGxS
ZWN0KCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgYmFja2dyb3VuZENvbG9y
KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdUZXh0KCBjb25zdCBRUG9pbnQgJnAs
IGNvbnN0IFFTdHJpbmcgJnMsIGludCBsZW4sIFRleHREaXJlY3Rpb24gZGlyICkKewogICAgZHJh
d1RleHQoIHAueCgpLCBwLnkoKSwgcywgMCwgbGVuLCBkaXIgKTsKfQoKaW5saW5lIHZvaWQgUVBh
aW50ZXI6OmRyYXdUZXh0KCBjb25zdCBRUG9pbnQgJnAsIGNvbnN0IFFTdHJpbmcgJnMsIGludCBw
b3MsIGludCBsZW4sIFRleHREaXJlY3Rpb24gZGlyICkKewogICAgZHJhd1RleHQoIHAueCgpLCBw
LnkoKSwgcywgcG9zLCBsZW4sIGRpciApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6ZHJhd1Rl
eHQoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgdGYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgbGVuLCBRUmVjdCAqYnIsIFFU
ZXh0UGFyYWcgKippICkKewogICAgUVJlY3Qgcih4LCB5LCB3LCBoKTsKICAgIGRyYXdUZXh0KCBy
LCB0Ziwgc3RyLCBsZW4sIGJyLCBpICk7Cn0KCmlubGluZSBRUmVjdCBRUGFpbnRlcjo6Ym91bmRp
bmdSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IHRmLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgbGVuLCBRVGV4
dFBhcmFnICoqaSApCnsKICAgIFFSZWN0IHIoeCwgeSwgdywgaCk7CiAgICByZXR1cm4gYm91bmRp
bmdSZWN0KCByLCB0Ziwgc3RyLCBsZW4sIGkgKTsKfQojIDE4ICJUeFZvcnBhbE1lbnVJdGVtLmgi
IDIKCgoKCgoKCmNsYXNzIFR4Vm9ycGFsTWVudUl0ZW0gOiBwdWJsaWMgUUN1c3RvbU1lbnVJdGVt
CnsKCnB1YmxpYzoKCgoKCgoKICBUeFZvcnBhbE1lbnVJdGVtKCBjb25zdCBRU3RyaW5nJiBzLCBj
b25zdCBRRm9udCYgZiApCiAgOiBzdHJpbmcoIHMgKSwgZm9udCggZiApCiAgewogIH0KIyA1MSAi
VHhWb3JwYWxNZW51SXRlbS5oIgogICAgdm9pZCBwYWludCggUVBhaW50ZXIqIHAsIGNvbnN0IFFD
b2xvckdyb3VwJiAsIGJvb2wgLCBib29sICwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKQog
ICAgewogICAgICBwLT5zZXRGb250ICggZm9udCApOwogICAgICBwLT5kcmF3VGV4dCggeCwgeSwg
dywgaCwgQWxpZ25MZWZ0IHwgQWxpZ25WQ2VudGVyIHwgU2hvd1ByZWZpeCB8IERvbnRDbGlwLCBz
dHJpbmcgKTsKICAgIH0KCgoKCiAgICBRU2l6ZSBzaXplSGludCgpCiAgICB7CiAgICAgIHJldHVy
biBRRm9udE1ldHJpY3MoIGZvbnQgKS5zaXplKCBBbGlnbkxlZnQgfCBBbGlnblZDZW50ZXIgfCBT
aG93UHJlZml4IHwgRG9udENsaXAsIHN0cmluZyApOwogICAgfQoKcHJpdmF0ZToKCgoKCiAgICBR
U3RyaW5nIHN0cmluZzsKCgoKCiAgICBRRm9udCBmb250Owp9OwojIDE3ICJUeFZvcnBhbEdVSS5j
cHAiIDIKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZXNzYWdlYm94
LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZXNzYWdlYm94LmgiCiMg
MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FkaWFsb2cuaCIgMQojIDQ5ICIvdXNyL2xv
Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRpYWxvZy5oIgpjbGFzcyBRUHVzaEJ1dHRvbjsKY2xhc3Mg
UURpYWxvZ1ByaXZhdGU7CgpjbGFzcyBRRGlhbG9nIDogcHVibGljIFFXaWRnZXQKewpmcmllbmQg
Y2xhc3MgUVB1c2hCdXR0b247CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFP
YmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25z
dCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBj
aGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFs
IGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5
KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9w
ZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVj
dCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmpl
Y3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
ID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
ID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAoKcHVibGlj
OgogICAgZXhwbGljaXQgUURpYWxvZyggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5h
bWU9MCwgYm9vbCBtb2RhbD1GQUxTRSwKICAgICAgICAgICAgIFdGbGFncyBmPTAgKTsKICAgIH5R
RGlhbG9nKCk7CgogICAgZW51bSBEaWFsb2dDb2RlIHsgUmVqZWN0ZWQsIEFjY2VwdGVkIH07Cgog
ICAgaW50IHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIHJlc2NvZGU7IH0KCiAgICB2b2lkIHNob3co
KTsKICAgIHZvaWQgaGlkZSgpOwogICAgdm9pZCBtb3ZlKCBpbnQgeCwgaW50IHkgKTsKICAgIHZv
aWQgbW92ZSggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIHJlc2l6ZSggaW50IHcsIGludCBo
ICk7CiAgICB2b2lkIHJlc2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdm9pZCBzZXRHZW9tZXRy
eSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgc2V0R2VvbWV0cnkoIGNv
bnN0IFFSZWN0ICYgKTsKCiAgICB2b2lkIHNldE9yaWVudGF0aW9uKCBPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiApOwogICAgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdDsKCiAgICB2b2lk
IHNldEV4dGVuc2lvbiggUVdpZGdldCogZXh0ZW5zaW9uICk7CiAgICBRV2lkZ2V0KiBleHRlbnNp
b24oKSBjb25zdDsKCiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNpemUgbWluaW11
bVNpemVIaW50KCkgY29uc3Q7CgogICAgdm9pZCBzZXRTaXplR3JpcEVuYWJsZWQoIGJvb2wgKTsK
ICAgIGJvb2wgaXNTaXplR3JpcEVuYWJsZWQoKSBjb25zdDsKCnB1YmxpYyA6CiAgICBpbnQgZXhl
YygpOwoKcHJvdGVjdGVkIDoKICAgIHZpcnR1YWwgdm9pZCBkb25lKCBpbnQgKTsKICAgIHZpcnR1
YWwgdm9pZCBhY2NlcHQoKTsKICAgIHZpcnR1YWwgdm9pZCByZWplY3QoKTsKCiAgICB2b2lkIHNo
b3dFeHRlbnNpb24oIGJvb2wgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgc2V0UmVzdWx0KCBpbnQg
ciApIHsgcmVzY29kZSA9IHI7IH0KICAgIHZvaWQga2V5UHJlc3NFdmVudCggUUtleUV2ZW50ICog
KTsKICAgIHZvaWQgY2xvc2VFdmVudCggUUNsb3NlRXZlbnQgKiApOwogICAgdm9pZCByZXNpemVF
dmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQgY29udGV4dE1lbnVFdmVudCggUUNvbnRl
eHRNZW51RXZlbnQgKiApOwogICAgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQg
KiApOwogICAgdm9pZCBhZGp1c3RQb3NpdGlvbiggUVdpZGdldCopOwoKcHJpdmF0ZToKICAgIHZv
aWQgc2V0RGVmYXVsdCggUVB1c2hCdXR0b24gKiApOwogICAgdm9pZCBoaWRlRGVmYXVsdCgpOwog
ICAgaW50IHJlc2NvZGU7CiAgICB1aW50IGRpZF9tb3ZlIDogMTsKICAgIHVpbnQgaGFzX3JlbHBv
cyA6IDE7CiAgICB1aW50IGRpZF9yZXNpemUgOiAxOwogICAgdWludCBpbl9sb29wOiAxOwogICAg
dm9pZCBhZGp1c3RQb3NpdGlvbkludGVybmFsKCBRV2lkZ2V0KiwgYm9vbCB1c2VSZWxQb3MgPSBG
QUxTRSApOwogICAgUURpYWxvZ1ByaXZhdGUqIGQ7Cgpwcml2YXRlOgoKICAgIFFEaWFsb2coIGNv
bnN0IFFEaWFsb2cgJiApOwogICAgUURpYWxvZyAmb3BlcmF0b3I9KCBjb25zdCBRRGlhbG9nICYg
KTsKCn07CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWVzc2FnZWJveC5oIiAy
CgoKCgpjbGFzcyBRTGFiZWw7CmNsYXNzIFFQdXNoQnV0dG9uOwpzdHJ1Y3QgUU1lc3NhZ2VCb3hE
YXRhOwoKY2xhc3MgUU1lc3NhZ2VCb3ggOiBwdWJsaWMgUURpYWxvZwp7CiAgICBwdWJsaWM6IHZp
cnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRh
T2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVh
bCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBp
bnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsg
dmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0
YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlh
bnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBx
T2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmpl
Y3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoKICAgIGVudW0gSWNvbiB7
IE5vSWNvbiA9IDAsIEluZm9ybWF0aW9uID0gMSwgV2FybmluZyA9IDIsIENyaXRpY2FsID0gMyB9
OwoKICAgIFFNZXNzYWdlQm94KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0w
ICk7CiAgICBRTWVzc2FnZUJveCggY29uc3QgUVN0cmluZyYgY2FwdGlvbiwgY29uc3QgUVN0cmlu
ZyAmdGV4dCwgSWNvbiBpY29uLAogICAgICAgICAgICAgICAgIGludCBidXR0b24wLCBpbnQgYnV0
dG9uMSwgaW50IGJ1dHRvbjIsCiAgICAgICAgICAgICAgICAgUVdpZGdldCogcGFyZW50PTAsIGNv
bnN0IGNoYXIqIG5hbWU9MCwgYm9vbCBtb2RhbD1UUlVFLAogICAgICAgICAgICAgICAgIFdGbGFn
cyBmPVdTdHlsZV9EaWFsb2dCb3JkZXIgKTsKICAgIH5RTWVzc2FnZUJveCgpOwoKICAgIGVudW0g
eyBOb0J1dHRvbiA9IDAsIE9rID0gMSwgQ2FuY2VsID0gMiwgWWVzID0gMywgTm8gPSA0LCBBYm9y
dCA9IDUsCiAgICAgICAgICAgUmV0cnkgPSA2LCBJZ25vcmUgPSA3LCBCdXR0b25NYXNrID0gMHgw
NywKICAgICAgICAgICBEZWZhdWx0ID0gMHgxMDAsIEVzY2FwZSA9IDB4MjAwLCBGbGFnTWFzayA9
IDB4MzAwIH07CgogICAgc3RhdGljIGludCBpbmZvcm1hdGlvbiggUVdpZGdldCAqcGFyZW50LCBj
b25zdCBRU3RyaW5nICZjYXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UVN0cmluZyYgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidXR0b24wLCBp
bnQgYnV0dG9uMT0wLCBpbnQgYnV0dG9uMj0wICk7CiAgICBzdGF0aWMgaW50IGluZm9ybWF0aW9u
KCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZyYgYnV0dG9uMFRleHQgPSBRU3RyaW5nOjpudWxsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgYnV0dG9uMVRleHQgPSBRU3RyaW5n
OjpudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgYnV0dG9u
MlRleHQgPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRl
ZmF1bHRCdXR0b25OdW1iZXIgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVz
Y2FwZUJ1dHRvbk51bWJlciA9IC0xICk7CgogICAgc3RhdGljIGludCB3YXJuaW5nKCBRV2lkZ2V0
ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFTdHJpbmcmIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBidXR0b24w
LCBpbnQgYnV0dG9uMSwgaW50IGJ1dHRvbjI9MCApOwogICAgc3RhdGljIGludCB3YXJuaW5nKCBR
V2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFTdHJpbmcmIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmcmIGJ1dHRvbjBUZXh0ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZyYgYnV0dG9uMVRleHQgPSBRU3RyaW5nOjpudWxsLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBidXR0b24yVGV4dCA9IFFTdHJpbmc6Om51
bGwsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZhdWx0QnV0dG9uTnVtYmVyID0gMCwK
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVzY2FwZUJ1dHRvbk51bWJlciA9IC0xICk7Cgog
ICAgc3RhdGljIGludCBjcml0aWNhbCggUVdpZGdldCAqcGFyZW50LCBjb25zdCBRU3RyaW5nICZj
YXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgdGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBidXR0b24wLCBpbnQgYnV0dG9uMSwgaW50IGJ1dHRv
bjI9MCApOwogICAgc3RhdGljIGludCBjcml0aWNhbCggUVdpZGdldCAqcGFyZW50LCBjb25zdCBR
U3RyaW5nICZjYXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYg
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGJ1dHRvbjBUZXh0
ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcm
IGJ1dHRvbjFUZXh0ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmcmIGJ1dHRvbjJUZXh0ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBkZWZhdWx0QnV0dG9uTnVtYmVyID0gMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBlc2NhcGVCdXR0b25OdW1iZXIgPSAtMSApOwoKICAgIHN0YXRpYyB2b2lkIGFi
b3V0KCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgdGV4dCApOwoKICAgIHN0YXRpYyB2b2lkIGFib3V0
UXQoIFFXaWRnZXQgKnBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmcmIGNhcHRpb249UVN0cmluZzo6bnVsbCApOwoKCiAgICBzdGF0aWMgaW50IG1lc3NhZ2UoIGNv
bnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmcmIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGJ1dHRvblRl
eHQ9UVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50
PTAsIGNvbnN0IGNoYXIgKiA9MCApIHsKICAgICAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OmluZm9y
bWF0aW9uKCBwYXJlbnQsIGNhcHRpb24sIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidXR0b25UZXh0LmlzRW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyB0cigiT0siKSA6IGJ1dHRvblRleHQgKSA9PSAwOwogICAgfQoKCiAgICBz
dGF0aWMgYm9vbCBxdWVyeSggY29uc3QgUVN0cmluZyAmY2FwdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRU3RyaW5nJiB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmcmIHllc0J1dHRvblRleHQ9UVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRU3RyaW5nJiBub0J1dHRvblRleHQ9UVN0cmluZzo6bnVsbCwKICAgICAgICAg
ICAgICAgICAgICAgICBRV2lkZ2V0ICpwYXJlbnQ9MCwgY29uc3QgY2hhciAqID0gMCApIHsKICAg
ICAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKCBwYXJlbnQsIGNhcHRpb24sIHRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXNCdXR0b25UZXh0Lmlz
RW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cigiT0siKSA6
IHllc0J1dHRvblRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0J1
dHRvblRleHQgKSA9PSAwOwogICAgfQoKICAgIFFTdHJpbmcgdGV4dCgpIGNvbnN0OwogICAgdm9p
ZCBzZXRUZXh0KCBjb25zdCBRU3RyaW5nICYpOwoKICAgIEljb24gaWNvbigpIGNvbnN0OwoKCiAg
ICB2b2lkIHNldEljb24oIEljb24gKTsKICAgIHZvaWQgc2V0SWNvbiggY29uc3QgUVBpeG1hcCAm
ICk7CgogICAgY29uc3QgUVBpeG1hcCAqaWNvblBpeG1hcCgpIGNvbnN0OwogICAgdm9pZCBzZXRJ
Y29uUGl4bWFwKCBjb25zdCBRUGl4bWFwICYgKTsKCiAgICBRU3RyaW5nIGJ1dHRvblRleHQoIGlu
dCBidXR0b24gKSBjb25zdDsKICAgIHZvaWQgc2V0QnV0dG9uVGV4dCggaW50IGJ1dHRvbiwgY29u
c3QgUVN0cmluZyAmKTsKCiAgICB2b2lkIGFkanVzdFNpemUoKTsKCgogICAgc3RhdGljIFFQaXht
YXAgc3RhbmRhcmRJY29uKCBJY29uIGljb24sIEdVSVN0eWxlICk7CgogICAgc3RhdGljIFFQaXht
YXAgc3RhbmRhcmRJY29uKCBJY29uIGljb24gKTsKCiAgICBUZXh0Rm9ybWF0IHRleHRGb3JtYXQo
KSBjb25zdDsKICAgIHZvaWQgc2V0VGV4dEZvcm1hdCggVGV4dEZvcm1hdCApOwoKcHJvdGVjdGVk
OgogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQgc2hvd0V2
ZW50KCBRU2hvd0V2ZW50ICogKTsKICAgIHZvaWQga2V5UHJlc3NFdmVudCggUUtleUV2ZW50ICog
KTsKICAgIHZvaWQgc3R5bGVDaGFuZ2VkKCBRU3R5bGUmICk7Cgpwcml2YXRlIDoKICAgIHZvaWQg
YnV0dG9uQ2xpY2tlZCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgaW5pdCggaW50LCBpbnQsIGludCAp
OwogICAgaW50IGluZGV4T2YoIGludCApIGNvbnN0OwogICAgdm9pZCByZXNpemVCdXR0b25zKCk7
CiAgICBRTGFiZWwgKmxhYmVsOwogICAgUU1lc3NhZ2VCb3hEYXRhICptYmQ7CiAgICB2b2lkICpy
ZXNlcnZlZDE7CiAgICB2b2lkICpyZXNlcnZlZDI7Cgpwcml2YXRlOgoKICAgIFFNZXNzYWdlQm94
KCBjb25zdCBRTWVzc2FnZUJveCAmICk7CiAgICBRTWVzc2FnZUJveCAmb3BlcmF0b3I9KCBjb25z
dCBRTWVzc2FnZUJveCAmICk7Cgp9OwojIDI1ICJUeFZvcnBhbEdVSS5jcHAiIDIKCiMgMSAiL3Vz
ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FmaWxlZGlhbG9nLmgiIDEKIyA0MSAiL3Vzci9sb2Nh
bC9xdC0zLjEuMS9pbmNsdWRlL3FmaWxlZGlhbG9nLmgiCmNsYXNzIFFQdXNoQnV0dG9uOwpjbGFz
cyBRQnV0dG9uOwpjbGFzcyBRTGFiZWw7CmNsYXNzIFFXaWRnZXQ7CmNsYXNzIFFGaWxlRGlhbG9n
OwpjbGFzcyBRVGltZXI7CmNsYXNzIFFOZXR3b3JrT3BlcmF0aW9uOwpjbGFzcyBRTGluZUVkaXQ7
CmNsYXNzIFFMaXN0Vmlld0l0ZW07CmNsYXNzIFFMaXN0Qm94SXRlbTsKY2xhc3MgUUZpbGVEaWFs
b2dQcml2YXRlOwpjbGFzcyBRRmlsZURpYWxvZ1FGaWxlTGlzdFZpZXc7CgoKIyAxICIvdXNyL2xv
Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRpci5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xZGlyLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwu
aCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRpci5oIiAyCgojIDEgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZmlsZWluZm8uaCIgMQojIDQyICIvdXNyL2xvY2Fs
L3F0LTMuMS4xL2luY2x1ZGUvcWZpbGVpbmZvLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p
bmNsdWRlL3FmaWxlLmgiIDEKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FmaWxl
LmgiCmNsYXNzIFFEaXI7CgoKY2xhc3MgUUZpbGUgOiBwdWJsaWMgUUlPRGV2aWNlCnsKcHVibGlj
OgogICAgUUZpbGUoKTsKICAgIFFGaWxlKCBjb25zdCBRU3RyaW5nICZuYW1lICk7CiAgIH5RRmls
ZSgpOwoKICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgdm9pZCBzZXROYW1lKCBjb25zdCBR
U3RyaW5nICZuYW1lICk7CgogICAgdHlwZWRlZiBRQ1N0cmluZyAoKkVuY29kZXJGbikoIGNvbnN0
IFFTdHJpbmcgJmZpbGVOYW1lICk7CiAgICB0eXBlZGVmIFFTdHJpbmcgKCpEZWNvZGVyRm4pKCBj
b25zdCBRQ1N0cmluZyAmbG9jYWxmaWxlTmFtZSApOwogICAgc3RhdGljIFFDU3RyaW5nIGVuY29k
ZU5hbWUoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7CiAgICBzdGF0aWMgUVN0cmluZyBkZWNv
ZGVOYW1lKCBjb25zdCBRQ1N0cmluZyAmbG9jYWxGaWxlTmFtZSApOwogICAgc3RhdGljIHZvaWQg
c2V0RW5jb2RpbmdGdW5jdGlvbiggRW5jb2RlckZuICk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWNv
ZGluZ0Z1bmN0aW9uKCBEZWNvZGVyRm4gKTsKCiAgICBib29sIGV4aXN0cygpIGNvbnN0OwogICAg
c3RhdGljIGJvb2wgZXhpc3RzKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwoKICAgIGJvb2wg
cmVtb3ZlKCk7CiAgICBzdGF0aWMgYm9vbCByZW1vdmUoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1l
ICk7CgogICAgYm9vbCBvcGVuKCBpbnQgKTsKICAgIGJvb2wgb3BlbiggaW50LCBGSUxFICogKTsK
ICAgIGJvb2wgb3BlbiggaW50LCBpbnQgKTsKICAgIHZvaWQgY2xvc2UoKTsKICAgIHZvaWQgZmx1
c2goKTsKCiAgICBPZmZzZXQgc2l6ZSgpIGNvbnN0OwogICAgT2Zmc2V0IGF0KCkgY29uc3Q7CiAg
ICBib29sIGF0KCBPZmZzZXQgKTsKICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKCiAgICBRX0xPTkcg
cmVhZEJsb2NrKCBjaGFyICpkYXRhLCBRX1VMT05HIGxlbiApOwogICAgUV9MT05HIHdyaXRlQmxv
Y2soIGNvbnN0IGNoYXIgKmRhdGEsIFFfVUxPTkcgbGVuICk7CiAgICBRX0xPTkcgd3JpdGVCbG9j
ayggY29uc3QgUUJ5dGVBcnJheSYgZGF0YSApCiAgICAgICAgICAgICAgICAgICAgICB7IHJldHVy
biBRSU9EZXZpY2U6OndyaXRlQmxvY2soZGF0YSk7IH0KICAgIFFfTE9ORyByZWFkTGluZSggY2hh
ciAqZGF0YSwgUV9VTE9ORyBtYXhsZW4gKTsKICAgIFFfTE9ORyByZWFkTGluZSggUVN0cmluZyAm
LCBRX1VMT05HIG1heGxlbiApOwoKICAgIGludCBnZXRjaCgpOwogICAgaW50IHB1dGNoKCBpbnQg
KTsKICAgIGludCB1bmdldGNoKCBpbnQgKTsKCiAgICBpbnQgaGFuZGxlKCkgY29uc3Q7Cgpwcm90
ZWN0ZWQ6CiAgICBRU3RyaW5nIGZuOwogICAgRklMRSAqZmg7CiAgICBpbnQgZmQ7CiAgICBPZmZz
ZXQgbGVuZ3RoOwogICAgYm9vbCBleHRfZjsKICAgIHZvaWQgKiBkOwoKcHJpdmF0ZToKICAgIHZv
aWQgaW5pdCgpOwogICAgUUNTdHJpbmcgdW5nZXRjaEJ1ZmZlcjsKCnByaXZhdGU6CgogICAgUUZp
bGUoIGNvbnN0IFFGaWxlICYgKTsKICAgIFFGaWxlICZvcGVyYXRvcj0oIGNvbnN0IFFGaWxlICYg
KTsKCn07CgoKaW5saW5lIFFTdHJpbmcgUUZpbGU6Om5hbWUoKSBjb25zdAp7IHJldHVybiBmbjsg
fQoKaW5saW5lIFFJT0RldmljZTo6T2Zmc2V0IFFGaWxlOjphdCgpIGNvbnN0CnsgcmV0dXJuIGlv
SW5kZXg7IH0KIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FmaWxlaW5mby5oIiAy
CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FkYXRldGltZS5oIiAxCiMgNTEgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZGF0ZXRpbWUuaCIKY2xhc3MgUURhdGUKewpwdWJs
aWM6CiAgICBRRGF0ZSgpIHsgamQgPSAwOyB9CiAgICBRRGF0ZSggaW50IHksIGludCBtLCBpbnQg
ZCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gamQgPT0gMDsgfQogICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3Q7CgogICAgaW50IHllYXIoKSBjb25zdDsKICAgIGludCBtb250aCgp
IGNvbnN0OwogICAgaW50IGRheSgpIGNvbnN0OwogICAgaW50IGRheU9mV2VlaygpIGNvbnN0Owog
ICAgaW50IGRheU9mWWVhcigpIGNvbnN0OwogICAgaW50IGRheXNJbk1vbnRoKCkgY29uc3Q7CiAg
ICBpbnQgZGF5c0luWWVhcigpIGNvbnN0OwogICAgaW50IHdlZWtOdW1iZXIoIGludCAqeWVhck51
bSA9IDAgKSBjb25zdDsKCgoKICAgIHN0YXRpYyBRU3RyaW5nIG1vbnRoTmFtZSggaW50IG1vbnRo
ICkgeyByZXR1cm4gc2hvcnRNb250aE5hbWUoIG1vbnRoICk7IH0KICAgIHN0YXRpYyBRU3RyaW5n
IGRheU5hbWUoIGludCB3ZWVrZGF5ICkgeyByZXR1cm4gc2hvcnREYXlOYW1lKCB3ZWVrZGF5ICk7
IH0KCiAgICBzdGF0aWMgUVN0cmluZyBzaG9ydE1vbnRoTmFtZSggaW50IG1vbnRoICk7CiAgICBz
dGF0aWMgUVN0cmluZyBzaG9ydERheU5hbWUoIGludCB3ZWVrZGF5ICk7CiAgICBzdGF0aWMgUVN0
cmluZyBsb25nTW9udGhOYW1lKCBpbnQgbW9udGggKTsKICAgIHN0YXRpYyBRU3RyaW5nIGxvbmdE
YXlOYW1lKCBpbnQgd2Vla2RheSApOwoKCgogICAgUVN0cmluZyB0b1N0cmluZyggUXQ6OkRhdGVG
b3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApIGNvbnN0OwoKICAgIFFTdHJpbmcgdG9TdHJpbmcoIGNv
bnN0IFFTdHJpbmcmIGZvcm1hdCApIGNvbnN0OwoKICAgIGJvb2wgc2V0WU1EKCBpbnQgeSwgaW50
IG0sIGludCBkICk7CgogICAgUURhdGUgYWRkRGF5cyggaW50IGRheXMgKSBjb25zdDsKICAgIFFE
YXRlIGFkZE1vbnRocyggaW50IG1vbnRocyApIGNvbnN0OwogICAgUURhdGUgYWRkWWVhcnMoIGlu
dCB5ZWFycyApIGNvbnN0OwogICAgaW50IGRheXNUbyggY29uc3QgUURhdGUgJiApIGNvbnN0OwoK
ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUURhdGUgJmQgKSBjb25zdCB7IHJldHVybiBqZCA9
PSBkLmpkOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyBy
ZXR1cm4gamQgIT0gZC5qZDsgfQogICAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFEYXRlICZkICkg
Y29uc3QgeyByZXR1cm4gamQgPCBkLmpkOyB9CiAgICBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFE
YXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPD0gZC5qZDsgfQogICAgYm9vbCBvcGVyYXRvcj4o
IGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPiBkLmpkOyB9CiAgICBib29sIG9w
ZXJhdG9yPj0oIGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPj0gZC5qZDsgfQoK
ICAgIHN0YXRpYyBRRGF0ZSBjdXJyZW50RGF0ZSgpOwogICAgc3RhdGljIFFEYXRlIGN1cnJlbnRE
YXRlKCBRdDo6VGltZVNwZWMgKTsKCiAgICBzdGF0aWMgUURhdGUgZnJvbVN0cmluZyggY29uc3Qg
UVN0cmluZyYgcywgUXQ6OkRhdGVGb3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApOwoKICAgIHN0YXRp
YyBib29sIGlzVmFsaWQoIGludCB5LCBpbnQgbSwgaW50IGQgKTsKICAgIHN0YXRpYyBib29sIGxl
YXBZZWFyKCBpbnQgeWVhciApOwoKICAgIHN0YXRpYyB1aW50IGdyZWdvcmlhblRvSnVsaWFuKCBp
bnQgeSwgaW50IG0sIGludCBkICk7CiAgICBzdGF0aWMgdm9pZCBqdWxpYW5Ub0dyZWdvcmlhbigg
dWludCBqZCwgaW50ICZ5LCBpbnQgJm0sIGludCAmZCApOwpwcml2YXRlOgogICAgdWludCBqZDsK
ICAgIGZyaWVuZCBjbGFzcyBRRGF0ZVRpbWU7CgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVy
YXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRGF0ZSAmICk7CiAgICBmcmllbmQgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFEYXRlICYgKTsKCn07CgoKCgoKCmNs
YXNzIFFUaW1lCnsKcHVibGljOgogICAgUVRpbWUoKSB7IGRzPTA7IH0KICAgIFFUaW1lKCBpbnQg
aCwgaW50IG0sIGludCBzPTAsIGludCBtcz0wICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBkcyA9PSAwOyB9CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBpbnQgaG91
cigpIGNvbnN0OwogICAgaW50IG1pbnV0ZSgpIGNvbnN0OwogICAgaW50IHNlY29uZCgpIGNvbnN0
OwogICAgaW50IG1zZWMoKSBjb25zdDsKCgogICAgUVN0cmluZyB0b1N0cmluZyggUXQ6OkRhdGVG
b3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApIGNvbnN0OwoKICAgIFFTdHJpbmcgdG9TdHJpbmcoIGNv
bnN0IFFTdHJpbmcmIGZvcm1hdCApIGNvbnN0OwoKICAgIGJvb2wgc2V0SE1TKCBpbnQgaCwgaW50
IG0sIGludCBzLCBpbnQgbXM9MCApOwoKICAgIFFUaW1lIGFkZFNlY3MoIGludCBzZWNzICkgY29u
c3Q7CiAgICBpbnQgc2Vjc1RvKCBjb25zdCBRVGltZSAmICkgY29uc3Q7CiAgICBRVGltZSBhZGRN
U2VjcyggaW50IG1zICkgY29uc3Q7CiAgICBpbnQgbXNlY3NUbyggY29uc3QgUVRpbWUgJiApIGNv
bnN0OwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVRpbWUgJmQgKSBjb25zdCB7IHJldHVy
biBkcyA9PSBkLmRzOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFUaW1lICZkICkgY29u
c3QgeyByZXR1cm4gZHMgIT0gZC5kczsgfQogICAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFUaW1l
ICZkICkgY29uc3QgeyByZXR1cm4gZHMgPCBkLmRzOyB9CiAgICBib29sIG9wZXJhdG9yPD0oIGNv
bnN0IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgPD0gZC5kczsgfQogICAgYm9vbCBvcGVy
YXRvcj4oIGNvbnN0IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgPiBkLmRzOyB9CiAgICBi
b29sIG9wZXJhdG9yPj0oIGNvbnN0IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgPj0gZC5k
czsgfQoKICAgIHN0YXRpYyBRVGltZSBjdXJyZW50VGltZSgpOwogICAgc3RhdGljIFFUaW1lIGN1
cnJlbnRUaW1lKCBRdDo6VGltZVNwZWMgKTsKCiAgICBzdGF0aWMgUVRpbWUgZnJvbVN0cmluZygg
Y29uc3QgUVN0cmluZyYgcywgUXQ6OkRhdGVGb3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApOwoKICAg
IHN0YXRpYyBib29sIGlzVmFsaWQoIGludCBoLCBpbnQgbSwgaW50IHMsIGludCBtcz0wICk7Cgog
ICAgdm9pZCBzdGFydCgpOwogICAgaW50IHJlc3RhcnQoKTsKICAgIGludCBlbGFwc2VkKCkgY29u
c3Q7Cgpwcml2YXRlOgogICAgc3RhdGljIGJvb2wgY3VycmVudFRpbWUoIFFUaW1lICogKTsKICAg
IHN0YXRpYyBib29sIGN1cnJlbnRUaW1lKCBRVGltZSAqLCBRdDo6VGltZVNwZWMgKTsKCiAgICB1
aW50IGRzOwogICAgZnJpZW5kIGNsYXNzIFFEYXRlVGltZTsKCiAgICBmcmllbmQgUURhdGFTdHJl
YW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFUaW1lICYgKTsKICAgIGZyaWVu
ZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVRpbWUgJiApOwoKfTsK
CgoKCgoKY2xhc3MgUURhdGVUaW1lCnsKcHVibGljOgogICAgUURhdGVUaW1lKCkge30KICAgIFFE
YXRlVGltZSggY29uc3QgUURhdGUgJiApOwogICAgUURhdGVUaW1lKCBjb25zdCBRRGF0ZSAmLCBj
b25zdCBRVGltZSAmICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBkLmlzTnVs
bCgpICYmIHQuaXNOdWxsKCk7IH0KICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGQu
aXNWYWxpZCgpICYmIHQuaXNWYWxpZCgpOyB9CgogICAgUURhdGUgZGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIGQ7IH0KICAgIFFUaW1lIHRpbWUoKSBjb25zdCB7IHJldHVybiB0OyB9CiAgICB1aW50IHRv
VGltZV90KCkgY29uc3Q7CiAgICB2b2lkIHNldERhdGUoIGNvbnN0IFFEYXRlICZkYXRlICkgeyBk
ID0gZGF0ZTsgfQogICAgdm9pZCBzZXRUaW1lKCBjb25zdCBRVGltZSAmdGltZSApIHsgdCA9IHRp
bWU7IH0KICAgIHZvaWQgc2V0VGltZV90KCB1aW50IHNlY3NTaW5jZTFKYW4xOTcwVVRDICk7CiAg
ICB2b2lkIHNldFRpbWVfdCggdWludCBzZWNzU2luY2UxSmFuMTk3MFVUQywgUXQ6OlRpbWVTcGVj
ICk7CgoKICAgIFFTdHJpbmcgdG9TdHJpbmcoIFF0OjpEYXRlRm9ybWF0IGYgPSBRdDo6VGV4dERh
dGUgKSBjb25zdDsKCiAgICBRU3RyaW5nIHRvU3RyaW5nKCBjb25zdCBRU3RyaW5nJiBmb3JtYXQg
KSBjb25zdDsKCiAgICBRRGF0ZVRpbWUgYWRkRGF5cyggaW50IGRheXMgKSBjb25zdDsKICAgIFFE
YXRlVGltZSBhZGRNb250aHMoIGludCBtb250aHMgKSBjb25zdDsKICAgIFFEYXRlVGltZSBhZGRZ
ZWFycyggaW50IHllYXJzICkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgYWRkU2VjcyggaW50IHNlY3Mg
KSBjb25zdDsKICAgIGludCBkYXlzVG8oIGNvbnN0IFFEYXRlVGltZSAmICkgY29uc3Q7CiAgICBp
bnQgc2Vjc1RvKCBjb25zdCBRRGF0ZVRpbWUgJiApIGNvbnN0OwoKICAgIGJvb2wgb3BlcmF0b3I9
PSggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBRRGF0ZVRpbWUgJmR0ICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPCggY29uc3QgUURhdGVU
aW1lICZkdCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRRGF0ZVRpbWUgJmR0
ICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPiggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0
OwogICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRRGF0ZVRpbWUgJmR0ICkgY29uc3Q7CgogICAg
c3RhdGljIFFEYXRlVGltZSBjdXJyZW50RGF0ZVRpbWUoKTsKICAgIHN0YXRpYyBRRGF0ZVRpbWUg
Y3VycmVudERhdGVUaW1lKCBRdDo6VGltZVNwZWMgKTsKCiAgICBzdGF0aWMgUURhdGVUaW1lIGZy
b21TdHJpbmcoIGNvbnN0IFFTdHJpbmcmIHMsIFF0OjpEYXRlRm9ybWF0IGYgPSBRdDo6VGV4dERh
dGUgKTsKCnByaXZhdGU6CiAgICBRRGF0ZSBkOwogICAgUVRpbWUgdDsKCiAgICBmcmllbmQgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFEYXRlVGltZSAmKTsK
ICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUURhdGVU
aW1lICYgKTsKCn07CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt
ICYsIGNvbnN0IFFEYXRlICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVh
bSAmLCBRRGF0ZSAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg
Y29uc3QgUVRpbWUgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYs
IFFUaW1lICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25z
dCBRRGF0ZVRpbWUgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYs
IFFEYXRlVGltZSAmICk7CiMgNDQgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZmlsZWlu
Zm8uaCIgMgoKCgpjbGFzcyBRRGlyOwpzdHJ1Y3QgUUZpbGVJbmZvQ2FjaGU7CgoKY2xhc3MgUUZp
bGVJbmZvCnsKcHVibGljOgogICAgZW51bSBQZXJtaXNzaW9uU3BlYyB7CiAgICAgICAgUmVhZFVz
ZXIgPSAwNDAwLCBXcml0ZVVzZXIgPSAwMjAwLCBFeGVVc2VyID0gMDEwMCwKICAgICAgICBSZWFk
R3JvdXAgPSAwMDQwLCBXcml0ZUdyb3VwID0gMDAyMCwgRXhlR3JvdXAgPSAwMDEwLAogICAgICAg
IFJlYWRPdGhlciA9IDAwMDQsIFdyaXRlT3RoZXIgPSAwMDAyLCBFeGVPdGhlciA9IDAwMDEgfTsK
CiAgICBRRmlsZUluZm8oKTsKICAgIFFGaWxlSW5mbyggY29uc3QgUVN0cmluZyAmZmlsZSApOwog
ICAgUUZpbGVJbmZvKCBjb25zdCBRRmlsZSAmICk7CgogICAgUUZpbGVJbmZvKCBjb25zdCBRRGly
ICYsIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7CgogICAgUUZpbGVJbmZvKCBjb25zdCBRRmls
ZUluZm8gJiApOwogICB+UUZpbGVJbmZvKCk7CgogICAgUUZpbGVJbmZvICZvcGVyYXRvcj0oIGNv
bnN0IFFGaWxlSW5mbyAmICk7CgogICAgdm9pZCBzZXRGaWxlKCBjb25zdCBRU3RyaW5nICZmaWxl
ICk7CiAgICB2b2lkIHNldEZpbGUoIGNvbnN0IFFGaWxlICYgKTsKCiAgICB2b2lkIHNldEZpbGUo
IGNvbnN0IFFEaXIgJiwgY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsKCiAgICBib29sIGV4aXN0
cygpIGNvbnN0OwogICAgdm9pZCByZWZyZXNoKCkgY29uc3Q7CiAgICBib29sIGNhY2hpbmcoKSBj
b25zdDsKICAgIHZvaWQgc2V0Q2FjaGluZyggYm9vbCApOwoKICAgIFFTdHJpbmcgZmlsZVBhdGgo
KSBjb25zdDsKICAgIFFTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKCiAgICBRU3RyaW5nIGFic0Zp
bGVQYXRoKCkgY29uc3Q7CgogICAgUVN0cmluZyBiYXNlTmFtZSggYm9vbCBjb21wbGV0ZSA9IEZB
TFNFICkgY29uc3Q7CiAgICBRU3RyaW5nIGV4dGVuc2lvbiggYm9vbCBjb21wbGV0ZSA9IFRSVUUg
KSBjb25zdDsKCgogICAgUVN0cmluZyBkaXJQYXRoKCBib29sIGFic1BhdGggPSBGQUxTRSApIGNv
bnN0OwoKCiAgICBRRGlyIGRpciggYm9vbCBhYnNQYXRoID0gRkFMU0UgKSBjb25zdDsKCiAgICBi
b29sIGlzUmVhZGFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNXcml0YWJsZSgpIGNvbnN0OwogICAg
Ym9vbCBpc0V4ZWN1dGFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdDsKCgog
ICAgYm9vbCBpc1JlbGF0aXZlKCkgY29uc3Q7CiAgICBib29sIGNvbnZlcnRUb0FicygpOwoKCiAg
ICBib29sIGlzRmlsZSgpIGNvbnN0OwogICAgYm9vbCBpc0RpcigpIGNvbnN0OwogICAgYm9vbCBp
c1N5bUxpbmsoKSBjb25zdDsKCiAgICBRU3RyaW5nIHJlYWRMaW5rKCkgY29uc3Q7CgogICAgUVN0
cmluZyBvd25lcigpIGNvbnN0OwogICAgdWludCBvd25lcklkKCkgY29uc3Q7CiAgICBRU3RyaW5n
IGdyb3VwKCkgY29uc3Q7CiAgICB1aW50IGdyb3VwSWQoKSBjb25zdDsKCiAgICBib29sIHBlcm1p
c3Npb24oIGludCBwZXJtaXNzaW9uU3BlYyApIGNvbnN0OwoKCgoKCgogICAgdWludCBzaXplKCkg
Y29uc3Q7CgoKICAgIFFEYXRlVGltZSBjcmVhdGVkKCkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgbGFz
dE1vZGlmaWVkKCkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgbGFzdFJlYWQoKSBjb25zdDsKCnByaXZh
dGU6CiAgICB2b2lkIGRvU3RhdCgpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgc2xhc2hpZnkoIFFT
dHJpbmcgJiApOwogICAgc3RhdGljIHZvaWQgbWFrZUFicyggUVN0cmluZyAmICk7CgogICAgUVN0
cmluZyBmbjsKICAgIFFGaWxlSW5mb0NhY2hlICpmaWM7CiAgICBib29sIGNhY2hlOwoKICAgIGJv
b2wgc3ltTGluazsKCgp9OwoKCmlubGluZSBib29sIFFGaWxlSW5mbzo6Y2FjaGluZygpIGNvbnN0
CnsKICAgIHJldHVybiBjYWNoZTsKfQojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv
cWRpci5oIiAyCgoKCgp0eXBlZGVmIFFQdHJMaXN0PFFGaWxlSW5mbz4gUUZpbGVJbmZvTGlzdDsK
dHlwZWRlZiBRUHRyTGlzdEl0ZXJhdG9yPFFGaWxlSW5mbz4gUUZpbGVJbmZvTGlzdEl0ZXJhdG9y
OwpjbGFzcyBRU3RyaW5nTGlzdDsKCgpjbGFzcyBRRGlyCnsKcHVibGljOgogICAgZW51bSBGaWx0
ZXJTcGVjIHsgRGlycyA9IDB4MDAxLAogICAgICAgICAgICAgICAgICAgICAgRmlsZXMgPSAweDAw
MiwKICAgICAgICAgICAgICAgICAgICAgIERyaXZlcyA9IDB4MDA0LAogICAgICAgICAgICAgICAg
ICAgICAgTm9TeW1MaW5rcyA9IDB4MDA4LAogICAgICAgICAgICAgICAgICAgICAgQWxsID0gMHgw
MDcsCiAgICAgICAgICAgICAgICAgICAgICBUeXBlTWFzayA9IDB4MDBGLAoKICAgICAgICAgICAg
ICAgICAgICAgIFJlYWRhYmxlID0gMHgwMTAsCiAgICAgICAgICAgICAgICAgICAgICBXcml0YWJs
ZSA9IDB4MDIwLAogICAgICAgICAgICAgICAgICAgICAgRXhlY3V0YWJsZSA9IDB4MDQwLAogICAg
ICAgICAgICAgICAgICAgICAgUldFTWFzayA9IDB4MDcwLAoKICAgICAgICAgICAgICAgICAgICAg
IE1vZGlmaWVkID0gMHgwODAsCiAgICAgICAgICAgICAgICAgICAgICBIaWRkZW4gPSAweDEwMCwK
ICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSA9IDB4MjAwLAogICAgICAgICAgICAgICAgICAg
ICAgQWNjZXNzTWFzayA9IDB4M0YwLAoKICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRGaWx0
ZXIgPSAtMSB9OwoKICAgIGVudW0gU29ydFNwZWMgeyBOYW1lID0gMHgwMCwKICAgICAgICAgICAg
ICAgICAgICAgIFRpbWUgPSAweDAxLAogICAgICAgICAgICAgICAgICAgICAgU2l6ZSA9IDB4MDIs
CiAgICAgICAgICAgICAgICAgICAgICBVbnNvcnRlZCA9IDB4MDMsCiAgICAgICAgICAgICAgICAg
ICAgICBTb3J0QnlNYXNrID0gMHgwMywKCiAgICAgICAgICAgICAgICAgICAgICBEaXJzRmlyc3Qg
PSAweDA0LAogICAgICAgICAgICAgICAgICAgICAgUmV2ZXJzZWQgPSAweDA4LAogICAgICAgICAg
ICAgICAgICAgICAgSWdub3JlQ2FzZSA9IDB4MTAsCiAgICAgICAgICAgICAgICAgICAgICBEZWZh
dWx0U29ydCA9IC0xIH07CgogICAgUURpcigpOwogICAgUURpciggY29uc3QgUVN0cmluZyAmcGF0
aCwgY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICBp
bnQgc29ydFNwZWMgPSBOYW1lIHwgSWdub3JlQ2FzZSwgaW50IGZpbHRlclNwZWMgPSBBbGwgKTsK
ICAgIFFEaXIoIGNvbnN0IFFEaXIgJiApOwoKICAgIHZpcnR1YWwgflFEaXIoKTsKCiAgICBRRGly
ICZvcGVyYXRvcj0oIGNvbnN0IFFEaXIgJiApOwogICAgUURpciAmb3BlcmF0b3I9KCBjb25zdCBR
U3RyaW5nICZwYXRoICk7CgogICAgdmlydHVhbCB2b2lkIHNldFBhdGgoIGNvbnN0IFFTdHJpbmcg
JnBhdGggKTsKICAgIHZpcnR1YWwgUVN0cmluZyBwYXRoKCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFT
dHJpbmcgYWJzUGF0aCgpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGNhbm9uaWNhbFBhdGgo
KSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTdHJpbmcgZGlyTmFtZSgpIGNvbnN0OwogICAgdmlydHVh
bCBRU3RyaW5nIGZpbGVQYXRoKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApIGNvbnN0OwogICAg
dmlydHVhbCBRU3RyaW5nIGFic0ZpbGVQYXRoKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSAp
IGNvbnN0OwoKICAgIHN0YXRpYyBRU3RyaW5nIGNvbnZlcnRTZXBhcmF0b3JzKCBjb25zdCBRU3Ry
aW5nICZwYXRoTmFtZSApOwoKICAgIHZpcnR1YWwgYm9vbCBjZCggY29uc3QgUVN0cmluZyAmZGly
TmFtZSwgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApOwogICAgdmlydHVhbCBib29sIGNkVXAo
KTsKCiAgICBRU3RyaW5nIG5hbWVGaWx0ZXIoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRO
YW1lRmlsdGVyKCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVyICk7CiAgICBGaWx0ZXJTcGVjIGZp
bHRlcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZpbHRlciggaW50IGZpbHRlclNwZWMg
KTsKICAgIFNvcnRTcGVjIHNvcnRpbmcoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRTb3J0
aW5nKCBpbnQgc29ydFNwZWMgKTsKCiAgICBib29sIG1hdGNoQWxsRGlycygpIGNvbnN0OwogICAg
dmlydHVhbCB2b2lkIHNldE1hdGNoQWxsRGlycyggYm9vbCApOwoKICAgIHVpbnQgY291bnQoKSBj
b25zdDsKICAgIFFTdHJpbmcgb3BlcmF0b3JbXSggaW50ICkgY29uc3Q7CgogICAgdmlydHVhbCBR
U3RyTGlzdCBlbmNvZGVkRW50cnlMaXN0KCBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3J0U3BlYyA9IERl
ZmF1bHRTb3J0ICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJMaXN0IGVuY29kZWRFbnRyeUxpc3Qo
IGNvbnN0IFFTdHJpbmcgJm5hbWVGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmaWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvcnRTcGVjID0gRGVmYXVsdFNvcnQgKSBjb25z
dDsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZW50cnlMaXN0KCBpbnQgZmlsdGVyU3BlYyA9IERl
ZmF1bHRGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvcnRT
cGVjID0gRGVmYXVsdFNvcnQgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZW50cnlM
aXN0KCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmaWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc29ydFNwZWMgPSBEZWZhdWx0U29ydCApIGNvbnN0OwoK
ICAgIHZpcnR1YWwgY29uc3QgUUZpbGVJbmZvTGlzdCAqZW50cnlJbmZvTGlzdCggaW50IGZpbHRl
clNwZWMgPSBEZWZhdWx0RmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgc29ydFNwZWMgPSBEZWZhdWx0U29ydCApIGNvbnN0OwogICAgdmly
dHVhbCBjb25zdCBRRmlsZUluZm9MaXN0ICplbnRyeUluZm9MaXN0KCBjb25zdCBRU3RyaW5nICZu
YW1lRmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3J0U3BlYyA9IERlZmF1bHRTb3J0ICkgY29u
c3Q7CgogICAgc3RhdGljIGNvbnN0IFFGaWxlSW5mb0xpc3QgKmRyaXZlcygpOwoKICAgIHZpcnR1
YWwgYm9vbCBta2RpciggY29uc3QgUVN0cmluZyAmZGlyTmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApIGNvbnN0OwogICAgdmlydHVhbCBib29s
IHJtZGlyKCBjb25zdCBRU3RyaW5nICZkaXJOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFjY2VwdEFic1BhdGggPSBUUlVFICkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIGlzUmVh
ZGFibGUoKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBleGlzdHMoKSBjb25zdDsKICAgIHZpcnR1
YWwgYm9vbCBpc1Jvb3QoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgaXNSZWxhdGl2ZSgpIGNv
bnN0OwogICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0FicygpOwoKICAgIHZpcnR1YWwgYm9vbCBv
cGVyYXRvcj09KCBjb25zdCBRRGlyICYgKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBRRGlyICYgKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlKCBjb25z
dCBRU3RyaW5nICZmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZXB0
QWJzUGF0aCA9IFRSVUUgKTsKICAgIHZpcnR1YWwgYm9vbCByZW5hbWUoIGNvbnN0IFFTdHJpbmcg
Jm5hbWUsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFjY2VwdEFic1BhdGhzID0gVFJVRSApOwogICAgdmlydHVhbCBib29sIGV4aXN0cyggY29u
c3QgUVN0cmluZyAmbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZXB0QWJz
UGF0aCA9IFRSVUUgKTsKCiAgICBzdGF0aWMgY2hhciBzZXBhcmF0b3IoKTsKCiAgICBzdGF0aWMg
Ym9vbCBzZXRDdXJyZW50KCBjb25zdCBRU3RyaW5nICZwYXRoICk7CiAgICBzdGF0aWMgUURpciBj
dXJyZW50KCk7CiAgICBzdGF0aWMgUURpciBob21lKCk7CiAgICBzdGF0aWMgUURpciByb290KCk7
CiAgICBzdGF0aWMgUVN0cmluZyBjdXJyZW50RGlyUGF0aCgpOwogICAgc3RhdGljIFFTdHJpbmcg
aG9tZURpclBhdGgoKTsKICAgIHN0YXRpYyBRU3RyaW5nIHJvb3REaXJQYXRoKCk7CgogICAgc3Rh
dGljIGJvb2wgbWF0Y2goIGNvbnN0IFFTdHJpbmdMaXN0ICZmaWx0ZXJzLCBjb25zdCBRU3RyaW5n
ICZmaWxlTmFtZSApOwogICAgc3RhdGljIGJvb2wgbWF0Y2goIGNvbnN0IFFTdHJpbmcgJmZpbHRl
ciwgY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsKICAgIHN0YXRpYyBRU3RyaW5nIGNsZWFuRGly
UGF0aCggY29uc3QgUVN0cmluZyAmZGlyUGF0aCApOwogICAgc3RhdGljIGJvb2wgaXNSZWxhdGl2
ZVBhdGgoIGNvbnN0IFFTdHJpbmcgJnBhdGggKTsKICAgIHZvaWQgcmVmcmVzaCgpIGNvbnN0OwoK
cHJpdmF0ZToKCgoKCiAgICB2b2lkIGluaXQoKTsKICAgIHZpcnR1YWwgYm9vbCByZWFkRGlyRW50
cmllcyggY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IEZpbHRlclNwZWMsIGludCBTb3J0U3BlYyApOwoKICAgIHN0YXRpYyB2b2lk
IHNsYXNoaWZ5KCBRU3RyaW5nICYgKTsKCiAgICBRU3RyaW5nIGRQYXRoOwogICAgUVN0cmluZ0xp
c3QgKmZMaXN0OwogICAgUUZpbGVJbmZvTGlzdCAqZmlMaXN0OwogICAgUVN0cmluZyBuYW1lRmls
dDsKICAgIEZpbHRlclNwZWMgZmlsdFM7CiAgICBTb3J0U3BlYyBzb3J0UzsKICAgIHVpbnQgZGly
dHkgOiAxOwogICAgdWludCBhbGxEaXJzIDogMTsKfTsKCgppbmxpbmUgUVN0cmluZyBRRGlyOjpw
YXRoKCkgY29uc3QKewogICAgcmV0dXJuIGRQYXRoOwp9CgppbmxpbmUgUVN0cmluZyBRRGlyOjpu
YW1lRmlsdGVyKCkgY29uc3QKewogICAgcmV0dXJuIG5hbWVGaWx0Owp9CgppbmxpbmUgUURpcjo6
RmlsdGVyU3BlYyBRRGlyOjpmaWx0ZXIoKSBjb25zdAp7CiAgICByZXR1cm4gZmlsdFM7Cn0KCmlu
bGluZSBRRGlyOjpTb3J0U3BlYyBRRGlyOjpzb3J0aW5nKCkgY29uc3QKewogICAgcmV0dXJuIHNv
cnRTOwp9CgppbmxpbmUgYm9vbCBRRGlyOjptYXRjaEFsbERpcnMoKSBjb25zdAp7CiAgICByZXR1
cm4gYWxsRGlyczsKfQoKaW5saW5lIGJvb2wgUURpcjo6b3BlcmF0b3IhPSggY29uc3QgUURpciAm
ZCApIGNvbnN0CnsKICAgIHJldHVybiAhKCp0aGlzID09IGQpOwp9CgoKc3RydWN0IFFEaXJTb3J0
SXRlbSB7CiAgICBRU3RyaW5nIGZpbGVuYW1lX2NhY2hlOwogICAgUUZpbGVJbmZvKiBpdGVtOwp9
OwojIDU2ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWZpbGVkaWFsb2cuaCIgMgoKIyAx
ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXVybG9wZXJhdG9yLmgiIDEKIyA0MyAiL3Vz
ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F1cmxvcGVyYXRvci5oIgojIDEgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xdXJsLmgiIDEKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs
dWRlL3F1cmwuaCIKY2xhc3MgUVVybFByaXZhdGU7CgpjbGFzcyBRVXJsCnsKcHVibGljOgogICAg
UVVybCgpOwogICAgUVVybCggY29uc3QgUVN0cmluZyYgdXJsICk7CiAgICBRVXJsKCBjb25zdCBR
VXJsJiB1cmwgKTsKICAgIFFVcmwoIGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYgcmVs
VXJsLCBib29sIGNoZWNrU2xhc2ggPSBGQUxTRSApOwogICAgdmlydHVhbCB+UVVybCgpOwoKICAg
IFFTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQcm90b2NvbCgg
Y29uc3QgUVN0cmluZyYgcHJvdG9jb2wgKTsKCiAgICBRU3RyaW5nIHVzZXIoKSBjb25zdDsKICAg
IHZpcnR1YWwgdm9pZCBzZXRVc2VyKCBjb25zdCBRU3RyaW5nJiB1c2VyICk7CiAgICBib29sIGhh
c1VzZXIoKSBjb25zdDsKCiAgICBRU3RyaW5nIHBhc3N3b3JkKCkgY29uc3Q7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0UGFzc3dvcmQoIGNvbnN0IFFTdHJpbmcmIHBhc3MgKTsKICAgIGJvb2wgaGFzUGFz
c3dvcmQoKSBjb25zdDsKCiAgICBRU3RyaW5nIGhvc3QoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9p
ZCBzZXRIb3N0KCBjb25zdCBRU3RyaW5nJiB1c2VyICk7CiAgICBib29sIGhhc0hvc3QoKSBjb25z
dDsKCiAgICBpbnQgcG9ydCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFBvcnQoIGludCBw
b3J0ICk7CiAgICBib29sIGhhc1BvcnQoKSBjb25zdDsKCiAgICBRU3RyaW5nIHBhdGgoIGJvb2wg
Y29ycmVjdCA9IFRSVUUgKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQYXRoKCBjb25zdCBR
U3RyaW5nJiBwYXRoICk7CiAgICBib29sIGhhc1BhdGgoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZv
aWQgc2V0RW5jb2RlZFBhdGhBbmRRdWVyeSggY29uc3QgUVN0cmluZyYgZW5jICk7CiAgICBRU3Ry
aW5nIGVuY29kZWRQYXRoQW5kUXVlcnkoKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0UXVlcnkoIGNv
bnN0IFFTdHJpbmcmIHR4dCApOwogICAgUVN0cmluZyBxdWVyeSgpIGNvbnN0OwoKICAgIFFTdHJp
bmcgcmVmKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UmVmKCBjb25zdCBRU3RyaW5nJiB0
eHQgKTsKICAgIGJvb2wgaGFzUmVmKCkgY29uc3Q7CgogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7
CiAgICBib29sIGlzTG9jYWxGaWxlKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGFkZFBhdGgo
IGNvbnN0IFFTdHJpbmcmIHBhdGggKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlTmFtZSggY29u
c3QgUVN0cmluZyYgdHh0ICk7CgogICAgUVN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OwogICAgUVN0
cmluZyBkaXJQYXRoKCkgY29uc3Q7CgogICAgUVVybCYgb3BlcmF0b3I9KCBjb25zdCBRVXJsJiB1
cmwgKTsKICAgIFFVcmwmIG9wZXJhdG9yPSggY29uc3QgUVN0cmluZyYgdXJsICk7CgogICAgYm9v
bCBvcGVyYXRvcj09KCBjb25zdCBRVXJsJiB1cmwgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I9
PSggY29uc3QgUVN0cmluZyYgdXJsICkgY29uc3Q7CgogICAgc3RhdGljIHZvaWQgZGVjb2RlKCBR
U3RyaW5nJiB1cmwgKTsKICAgIHN0YXRpYyB2b2lkIGVuY29kZSggUVN0cmluZyYgdXJsICk7Cgog
ICAgb3BlcmF0b3IgUVN0cmluZygpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIHRvU3RyaW5n
KCBib29sIGVuY29kZWRQYXRoID0gRkFMU0UsIGJvb2wgZm9yY2VQcmVwZW5kUHJvdG9jb2wgPSBU
UlVFICkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIGNkVXAoKTsKCiAgICBzdGF0aWMgYm9vbCBp
c1JlbGF0aXZlVXJsKCBjb25zdCBRU3RyaW5nICZ1cmwgKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1
YWwgdm9pZCByZXNldCgpOwogICAgdmlydHVhbCBib29sIHBhcnNlKCBjb25zdCBRU3RyaW5nJiB1
cmwgKTsKCnByaXZhdGU6CiAgICBRVXJsUHJpdmF0ZSAqZDsKCn07CiMgNDQgIi91c3IvbG9jYWwv
cXQtMy4xLjEvaW5jbHVkZS9xdXJsb3BlcmF0b3IuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LTMu
MS4xL2luY2x1ZGUvcW5ldHdvcmtwcm90b2NvbC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xbmV0d29ya3Byb3RvY29sLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p
bmNsdWRlL3F1cmxpbmZvLmgiIDEKIyA0OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F1
cmxpbmZvLmgiCmNsYXNzIFFVcmxPcGVyYXRvcjsKY2xhc3MgUVVybDsKY2xhc3MgUVVybEluZm9Q
cml2YXRlOwoKY2xhc3MgUVVybEluZm8KewpwdWJsaWM6CiAgICBRVXJsSW5mbygpOwogICAgUVVy
bEluZm8oIGNvbnN0IFFVcmxPcGVyYXRvciAmcGF0aCwgY29uc3QgUVN0cmluZyAmZmlsZSApOwog
ICAgUVVybEluZm8oIGNvbnN0IFFVcmxJbmZvICZ1aSApOwojIDcxICIvdXNyL2xvY2FsL3F0LTMu
MS4xL2luY2x1ZGUvcXVybGluZm8uaCIKICAgIFFVcmxJbmZvKCBjb25zdCBRU3RyaW5nICZuYW1l
LCBpbnQgcGVybWlzc2lvbnMsIGNvbnN0IFFTdHJpbmcgJm93bmVyLAogICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmcgJmdyb3VwLCB1aW50IHNpemUsIGNvbnN0IFFEYXRlVGltZSAmbGFzdE1vZGlm
aWVkLAogICAgICAgICAgICAgIGNvbnN0IFFEYXRlVGltZSAmbGFzdFJlYWQsIGJvb2wgaXNEaXIs
IGJvb2wgaXNGaWxlLCBib29sIGlzU3ltTGluaywKICAgICAgICAgICAgICBib29sIGlzV3JpdGFi
bGUsIGJvb2wgaXNSZWFkYWJsZSwgYm9vbCBpc0V4ZWN1dGFibGUgKTsKICAgIFFVcmxJbmZvKCBj
b25zdCBRVXJsICZ1cmwsIGludCBwZXJtaXNzaW9ucywgY29uc3QgUVN0cmluZyAmb3duZXIsCiAg
ICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmZ3JvdXAsIHVpbnQgc2l6ZSwgY29uc3QgUURhdGVU
aW1lICZsYXN0TW9kaWZpZWQsCiAgICAgICAgICAgICAgY29uc3QgUURhdGVUaW1lICZsYXN0UmVh
ZCwgYm9vbCBpc0RpciwgYm9vbCBpc0ZpbGUsIGJvb2wgaXNTeW1MaW5rLAogICAgICAgICAgICAg
IGJvb2wgaXNXcml0YWJsZSwgYm9vbCBpc1JlYWRhYmxlLCBib29sIGlzRXhlY3V0YWJsZSApOwoK
ICAgIFFVcmxJbmZvICZvcGVyYXRvcj0oIGNvbnN0IFFVcmxJbmZvICZ1aSApOwogICAgdmlydHVh
bCB+UVVybEluZm8oKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZSggY29uc3QgUVN0cmluZyAm
bmFtZSApOwogICAgdmlydHVhbCB2b2lkIHNldERpciggYm9vbCBiICk7CiAgICB2aXJ0dWFsIHZv
aWQgc2V0RmlsZSggYm9vbCBiICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U3ltTGluayggYm9vbCBi
ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0T3duZXIoIGNvbnN0IFFTdHJpbmcgJnMgKTsKICAgIHZp
cnR1YWwgdm9pZCBzZXRHcm91cCggY29uc3QgUVN0cmluZyAmcyApOwoKCgoKCiAgICB2aXJ0dWFs
IHZvaWQgc2V0U2l6ZSggdWludCBzaXplICk7CgogICAgdmlydHVhbCB2b2lkIHNldFdyaXRhYmxl
KCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFkYWJsZSggYm9vbCBiICk7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0UGVybWlzc2lvbnMoIGludCBwICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0
TGFzdE1vZGlmaWVkKCBjb25zdCBRRGF0ZVRpbWUgJmR0ICk7CgogICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3Q7CgogICAgUVN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICBpbnQgcGVybWlzc2lvbnMoKSBj
b25zdDsKICAgIFFTdHJpbmcgb3duZXIoKSBjb25zdDsKICAgIFFTdHJpbmcgZ3JvdXAoKSBjb25z
dDsKCgoKCgogICAgdWludCBzaXplKCkgY29uc3Q7CgogICAgUURhdGVUaW1lIGxhc3RNb2RpZmll
ZCgpIGNvbnN0OwogICAgUURhdGVUaW1lIGxhc3RSZWFkKCkgY29uc3Q7CiAgICBib29sIGlzRGly
KCkgY29uc3Q7CiAgICBib29sIGlzRmlsZSgpIGNvbnN0OwogICAgYm9vbCBpc1N5bUxpbmsoKSBj
b25zdDsKICAgIGJvb2wgaXNXcml0YWJsZSgpIGNvbnN0OwogICAgYm9vbCBpc1JlYWRhYmxlKCkg
Y29uc3Q7CiAgICBib29sIGlzRXhlY3V0YWJsZSgpIGNvbnN0OwoKICAgIHN0YXRpYyBib29sIGdy
ZWF0ZXJUaGFuKCBjb25zdCBRVXJsSW5mbyAmaTEsIGNvbnN0IFFVcmxJbmZvICZpMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ydEJ5ICk7CiAgICBzdGF0aWMgYm9vbCBsZXNz
VGhhbiggY29uc3QgUVVybEluZm8gJmkxLCBjb25zdCBRVXJsSW5mbyAmaTIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHNvcnRCeSApOwogICAgc3RhdGljIGJvb2wgZXF1YWwoIGNvbnN0
IFFVcmxJbmZvICZpMSwgY29uc3QgUVVybEluZm8gJmkyLAogICAgICAgICAgICAgICAgICAgICAg
IGludCBzb3J0QnkgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFVcmxJbmZvICZpICkg
Y29uc3Q7CnByaXZhdGU6CiAgICBRVXJsSW5mb1ByaXZhdGUgKmQ7Cgp9OwojIDQzICIvdXNyL2xv
Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcW5ldHdvcmtwcm90b2NvbC5oIiAyCgojIDEgIi91c3IvbG9j
YWwvcXQtMy4xLjEvaW5jbHVkZS9xZGljdC5oIiAxCiMgNDUgIi91c3IvbG9jYWwvcXQtMy4xLjEv
aW5jbHVkZS9xZGljdC5oIgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRRGljdAoKCgogICAg
ICAgIDogcHVibGljIFFHRGljdAoKewpwdWJsaWM6CiAgICBRRGljdCggaW50IHNpemUgPSAxNywg
Ym9vbCBjYXNlU2Vuc2l0aXZlID0gVFJVRSApCiAgICAgICAgOiBRR0RpY3QoIHNpemUsIFN0cmlu
Z0tleSwgY2FzZVNlbnNpdGl2ZSwgRkFMU0UgKSB7IH0KICAgIFFEaWN0KCBjb25zdCBRRGljdDx0
eXBlPiAmZCApIDogUUdEaWN0KCBkICkgeyB9CiAgICB+UURpY3QoKSB7IGNsZWFyKCk7IH0KICAg
IFFEaWN0PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUURpY3Q8dHlwZT4gJmQpCiAgICAgICAgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIChRRGljdDx0eXBlPiYpUUdEaWN0OjpvcGVyYXRvcj0oZCk7
IH0KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCk7IH0KICAg
IHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6c2l6ZSgpOyB9CiAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCkgPT0gMDsgfQoKICAgIHZvaWQg
aW5zZXJ0KCBjb25zdCBRU3RyaW5nICZrLCBjb25zdCB0eXBlICpkICkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX3N0cmluZyhrLChJdGVtKWQs
MSk7IH0KICAgIHZvaWQgcmVwbGFjZSggY29uc3QgUVN0cmluZyAmaywgY29uc3QgdHlwZSAqZCAp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19z
dHJpbmcoaywoSXRlbSlkLDIpOyB9CiAgICBib29sIHJlbW92ZSggY29uc3QgUVN0cmluZyAmayAp
IHsgcmV0dXJuIFFHRGljdDo6cmVtb3ZlX3N0cmluZyhrKTsgfQogICAgdHlwZSAqdGFrZSggY29u
c3QgUVN0cmluZyAmayApIHsgcmV0dXJuICh0eXBlICopUUdEaWN0Ojp0YWtlX3N0cmluZyhrKTsg
fQogICAgdHlwZSAqZmluZCggY29uc3QgUVN0cmluZyAmayApIGNvbnN0CiAgICAgICAgICAgICAg
ICB7IHJldHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX3N0cmluZyhr
LDAsMCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGNvbnN0IFFTdHJpbmcgJmsgKSBjb25zdAog
ICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6
bG9va19zdHJpbmcoaywwLDApOyB9CgogICAgdm9pZCBjbGVhcigpIHsgUUdEaWN0OjpjbGVhcigp
OyB9CiAgICB2b2lkIHJlc2l6ZSggdWludCBuICkgeyBRR0RpY3Q6OnJlc2l6ZShuKTsgfQogICAg
dm9pZCBzdGF0aXN0aWNzKCkgY29uc3QgeyBRR0RpY3Q6OnN0YXRpc3RpY3MoKTsgfQoKCgoKCgoK
cHJpdmF0ZToKICAgICAgICB2b2lkIGRlbGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRl
PD4gaW5saW5lIHZvaWQgUURpY3Q8dm9pZD46OmRlbGV0ZUl0ZW0oIEl0ZW0gKQp7Cn0KCgp0ZW1w
bGF0ZTxjbGFzcyB0eXBlPiBpbmxpbmUgdm9pZCBRRGljdDx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0
ckNvbGxlY3Rpb246Okl0ZW0gZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUg
KilkOwp9Cgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRRGljdEl0ZXJhdG9yIDogcHVibGlj
IFFHRGljdEl0ZXJhdG9yCnsKcHVibGljOgogICAgUURpY3RJdGVyYXRvcihjb25zdCBRRGljdDx0
eXBlPiAmZCkgOiBRR0RpY3RJdGVyYXRvcigoUUdEaWN0ICYpZCkgeyB9CiAgICB+UURpY3RJdGVy
YXRvcigpIHt9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gZGljdC0+Y291bnQoKTsg
fQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gZGljdC0+Y291bnQoKSA9PSAwOyB9
CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6dG9G
aXJzdCgpOyB9CiAgICBvcGVyYXRvciB0eXBlICooKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFH
RGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IqKCkgeyByZXR1cm4gKHR5
cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKmN1cnJlbnQoKSBjb25zdCB7
IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgUVN0cmluZyBjdXJy
ZW50S2V5KCkgY29uc3R7IHJldHVybiBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCk7IH0K
ICAgIHR5cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpv
cGVyYXRvcigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKysoKSB7IHJldHVybiAodHlwZSAqKVFH
RGljdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKz0odWludCBq
KSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcis9KGopOyB9Cn07CiMg
NDUgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbmV0d29ya3Byb3RvY29sLmgiIDIKCgoK
CgpjbGFzcyBRTmV0d29ya1Byb3RvY29sOwpjbGFzcyBRTmV0d29ya09wZXJhdGlvbjsKY2xhc3Mg
UVRpbWVyOwpjbGFzcyBRVXJsT3BlcmF0b3I7CmNsYXNzIFFOZXR3b3JrUHJvdG9jb2xQcml2YXRl
Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUVZhbHVlTGlzdDsKCmNsYXNzIFFOZXR3b3JrUHJv
dG9jb2xGYWN0b3J5QmFzZQp7CnB1YmxpYzoKICAgdmlydHVhbCBRTmV0d29ya1Byb3RvY29sICpj
cmVhdGVPYmplY3QoKSA9IDA7Cgp9OwoKdGVtcGxhdGU8IGNsYXNzIFByb3RvY29sID4KY2xhc3Mg
UU5ldHdvcmtQcm90b2NvbEZhY3RvcnkgOiBwdWJsaWMgUU5ldHdvcmtQcm90b2NvbEZhY3RvcnlC
YXNlCnsKcHVibGljOgogICAgUU5ldHdvcmtQcm90b2NvbCAqY3JlYXRlT2JqZWN0KCkgewogICAg
ICAgIHJldHVybiBuZXcgUHJvdG9jb2w7CiAgICB9Cgp9OwoKdHlwZWRlZiBRRGljdDwgUU5ldHdv
cmtQcm90b2NvbEZhY3RvcnlCYXNlID4gUU5ldHdvcmtQcm90b2NvbERpY3Q7CgpjbGFzcyBRTmV0
d29ya1Byb3RvY29sIDogcHVibGljIFFPYmplY3QKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRh
T2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9
IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRf
Y2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVj
dCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9v
bCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBx
dF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0
aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsg
cmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2Jq
OwoKcHVibGljOgogICAgZW51bSBTdGF0ZSB7CiAgICAgICAgU3RXYWl0aW5nID0gMCwKICAgICAg
ICBTdEluUHJvZ3Jlc3MsCiAgICAgICAgU3REb25lLAogICAgICAgIFN0RmFpbGVkLAogICAgICAg
IFN0U3RvcHBlZAogICAgfTsKCiAgICBlbnVtIE9wZXJhdGlvbiB7CiAgICAgICAgT3BMaXN0Q2hp
bGRyZW4gPSAxLAogICAgICAgIE9wTWtEaXIgPSAyLAogICAgICAgIE9wTWtkaXIgPSBPcE1rRGly
LAogICAgICAgIE9wUmVtb3ZlID0gNCwKICAgICAgICBPcFJlbmFtZSA9IDgsCiAgICAgICAgT3BH
ZXQgPSAzMiwKICAgICAgICBPcFB1dCA9IDY0CiAgICB9OwoKICAgIGVudW0gQ29ubmVjdGlvblN0
YXRlIHsKICAgICAgICBDb25Ib3N0Rm91bmQsCiAgICAgICAgQ29uQ29ubmVjdGVkLAogICAgICAg
IENvbkNsb3NlZAogICAgfTsKCiAgICBlbnVtIEVycm9yIHsKCiAgICAgICAgTm9FcnJvciA9IDAs
CgogICAgICAgIEVyclZhbGlkLAogICAgICAgIEVyclVua25vd25Qcm90b2NvbCwKICAgICAgICBF
cnJVbnN1cHBvcnRlZCwKICAgICAgICBFcnJQYXJzZSwKCiAgICAgICAgRXJyTG9naW5JbmNvcnJl
Y3QsCiAgICAgICAgRXJySG9zdE5vdEZvdW5kLAoKICAgICAgICBFcnJMaXN0Q2hpbGRyZW4sCiAg
ICAgICAgRXJyTGlzdENobGlkcmVuID0gRXJyTGlzdENoaWxkcmVuLAogICAgICAgIEVyck1rRGly
LAogICAgICAgIEVyck1rZGlyID0gRXJyTWtEaXIsCiAgICAgICAgRXJyUmVtb3ZlLAogICAgICAg
IEVyclJlbmFtZSwKICAgICAgICBFcnJHZXQsCiAgICAgICAgRXJyUHV0LAogICAgICAgIEVyckZp
bGVOb3RFeGlzdGluZywKICAgICAgICBFcnJQZXJtaXNzaW9uRGVuaWVkCiAgICB9OwoKICAgIFFO
ZXR3b3JrUHJvdG9jb2woKTsKICAgIHZpcnR1YWwgflFOZXR3b3JrUHJvdG9jb2woKTsKCiAgICB2
aXJ0dWFsIHZvaWQgc2V0VXJsKCBRVXJsT3BlcmF0b3IgKnUgKTsKCiAgICB2aXJ0dWFsIHZvaWQg
c2V0QXV0b0RlbGV0ZSggYm9vbCBiLCBpbnQgaSA9IDEwMDAwICk7CiAgICBib29sIGF1dG9EZWxl
dGUoKSBjb25zdDsKCiAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck5ldHdvcmtQcm90b2NvbCggY29u
c3QgUVN0cmluZyAmcHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUU5ldHdvcmtQcm90b2NvbEZhY3RvcnlCYXNlICpwcm90b2NvbEZhY3RvcnkgKTsKICAg
IHN0YXRpYyBRTmV0d29ya1Byb3RvY29sICpnZXROZXR3b3JrUHJvdG9jb2woIGNvbnN0IFFTdHJp
bmcgJnByb3RvY29sICk7CiAgICBzdGF0aWMgYm9vbCBoYXNPbmx5TG9jYWxGaWxlU3lzdGVtKCk7
CgogICAgdmlydHVhbCBpbnQgc3VwcG9ydGVkT3BlcmF0aW9ucygpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIGFkZE9wZXJhdGlvbiggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CgogICAgUVVybE9w
ZXJhdG9yICp1cmwoKSBjb25zdDsKICAgIFFOZXR3b3JrT3BlcmF0aW9uICpvcGVyYXRpb25JblBy
b2dyZXNzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPcGVyYXRpb25RdWV1ZSgpOwog
ICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZGF0YSggY29uc3Qg
UUJ5dGVBcnJheSAmLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIGNvbm5lY3Rp
b25TdGF0ZUNoYW5nZWQoIGludCBzdGF0ZSwgY29uc3QgUVN0cmluZyAmZGF0YSApOwogICAgdm9p
ZCBmaW5pc2hlZCggUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBzdGFydCggUU5l
dHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBuZXdDaGlsZHJlbiggY29uc3QgUVZhbHVl
TGlzdDxRVXJsSW5mbz4gJiwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBuZXdD
aGlsZCggY29uc3QgUVVybEluZm8gJiwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9p
ZCBjcmVhdGVkRGlyZWN0b3J5KCBjb25zdCBRVXJsSW5mbyAmLCBRTmV0d29ya09wZXJhdGlvbiAq
cmVzICk7CiAgICB2b2lkIHJlbW92ZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZv
aWQgaXRlbUNoYW5nZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZvaWQgZGF0YVRy
YW5zZmVyUHJvZ3Jlc3MoIGludCBieXRlc0RvbmUsIGludCBieXRlc1RvdGFsLCBRTmV0d29ya09w
ZXJhdGlvbiAqcmVzICk7Cgpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc09wZXJh
dGlvbiggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0aW9u
TGlzdENoaWxkcmVuKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9pZCBv
cGVyYXRpb25Na0RpciggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQg
b3BlcmF0aW9uUmVtb3ZlKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9p
ZCBvcGVyYXRpb25SZW5hbWUoIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwogICAgdmlydHVhbCB2
b2lkIG9wZXJhdGlvbkdldCggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZv
aWQgb3BlcmF0aW9uUHV0KCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9p
ZCBvcGVyYXRpb25QdXRDaHVuayggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFs
IGJvb2wgY2hlY2tDb25uZWN0aW9uKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKCnByaXZhdGU6
CiAgICBRTmV0d29ya1Byb3RvY29sUHJpdmF0ZSAqZDsKCnByaXZhdGUgOgogICAgdm9pZCBwcm9j
ZXNzTmV4dE9wZXJhdGlvbiggUU5ldHdvcmtPcGVyYXRpb24gKm9sZCApOwogICAgdm9pZCBzdGFy
dE9wcygpOwogICAgdm9pZCBlbWl0TmV3Q2hpbGRyZW4oIGNvbnN0IFFVcmxJbmZvICZpLCBRTmV0
d29ya09wZXJhdGlvbiAqb3AgKTsKCiAgICB2b2lkIHJlbW92ZU1lKCk7Cgpwcml2YXRlOgoKICAg
IFFOZXR3b3JrUHJvdG9jb2woIGNvbnN0IFFOZXR3b3JrUHJvdG9jb2wgJiApOwogICAgUU5ldHdv
cmtQcm90b2NvbCAmb3BlcmF0b3I9KCBjb25zdCBRTmV0d29ya1Byb3RvY29sICYgKTsKCn07Cgpj
bGFzcyBRTmV0d29ya09wZXJhdGlvblByaXZhdGU7CgpjbGFzcyBRTmV0d29ya09wZXJhdGlvbiA6
IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0
IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNo
YXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwg
Ym9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHko
IGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3Bl
cnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0
KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVj
dCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICog
PSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICog
PSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgIGZyaWVuZCBj
bGFzcyBRVXJsT3BlcmF0b3I7CgpwdWJsaWM6CiAgICBRTmV0d29ya09wZXJhdGlvbiggUU5ldHdv
cmtQcm90b2NvbDo6T3BlcmF0aW9uIG9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICBjb25z
dCBRU3RyaW5nICZhcmcwLCBjb25zdCBRU3RyaW5nICZhcmcxLAogICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFTdHJpbmcgJmFyZzIgKTsKICAgIFFOZXR3b3JrT3BlcmF0aW9uKCBRTmV0d29ya1By
b3RvY29sOjpPcGVyYXRpb24gb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFC
eXRlQXJyYXkgJmFyZzAsIGNvbnN0IFFCeXRlQXJyYXkgJmFyZzEsCiAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUUJ5dGVBcnJheSAmYXJnMiApOwogICAgflFOZXR3b3JrT3BlcmF0aW9uKCk7Cgog
ICAgdm9pZCBzZXRTdGF0ZSggUU5ldHdvcmtQcm90b2NvbDo6U3RhdGUgc3RhdGUgKTsKICAgIHZv
aWQgc2V0UHJvdG9jb2xEZXRhaWwoIGNvbnN0IFFTdHJpbmcgJmRldGFpbCApOwogICAgdm9pZCBz
ZXRFcnJvckNvZGUoIGludCBlYyApOwogICAgdm9pZCBzZXRBcmcoIGludCBudW0sIGNvbnN0IFFT
dHJpbmcgJmFyZyApOwogICAgdm9pZCBzZXRSYXdBcmcoIGludCBudW0sIGNvbnN0IFFCeXRlQXJy
YXkgJmFyZyApOwoKICAgIFFOZXR3b3JrUHJvdG9jb2w6Ok9wZXJhdGlvbiBvcGVyYXRpb24oKSBj
b25zdDsKICAgIFFOZXR3b3JrUHJvdG9jb2w6OlN0YXRlIHN0YXRlKCkgY29uc3Q7CiAgICBRU3Ry
aW5nIGFyZyggaW50IG51bSApIGNvbnN0OwogICAgUUJ5dGVBcnJheSByYXdBcmcoIGludCBudW0g
KSBjb25zdDsKICAgIFFTdHJpbmcgcHJvdG9jb2xEZXRhaWwoKSBjb25zdDsKICAgIGludCBlcnJv
ckNvZGUoKSBjb25zdDsKCiAgICB2b2lkIGZyZWUoKTsKCnByaXZhdGUgOgogICAgdm9pZCBkZWxl
dGVNZSgpOwoKcHJpdmF0ZToKICAgIFFCeXRlQXJyYXkgJnJhdyggaW50IG51bSApIGNvbnN0Owog
ICAgUU5ldHdvcmtPcGVyYXRpb25Qcml2YXRlICpkOwoKcHJpdmF0ZToKCiAgICBRTmV0d29ya09w
ZXJhdGlvbiggY29uc3QgUU5ldHdvcmtPcGVyYXRpb24gJiApOwogICAgUU5ldHdvcmtPcGVyYXRp
b24gJm9wZXJhdG9yPSggY29uc3QgUU5ldHdvcmtPcGVyYXRpb24gJiApOwoKfTsKIyA0NiAiL3Vz
ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F1cmxvcGVyYXRvci5oIiAyCgoKCgoKY2xhc3MgUVVy
bEluZm87CmNsYXNzIFFVcmxPcGVyYXRvclByaXZhdGU7CgpjbGFzcyBRVXJsT3BlcmF0b3IgOiBw
dWJsaWMgUU9iamVjdCwgcHVibGljIFFVcmwKewogICAgZnJpZW5kIGNsYXNzIFFOZXR3b3JrUHJv
dG9jb2w7CgogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xh
c3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmly
dHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2Vt
aXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBp
bnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmpl
Y3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01l
dGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9
IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3Rh
dGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJp
dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwoKcHVibGljOgogICAgUVVybE9wZXJh
dG9yKCk7CiAgICBRVXJsT3BlcmF0b3IoIGNvbnN0IFFTdHJpbmcgJnVyTCApOwogICAgUVVybE9w
ZXJhdG9yKCBjb25zdCBRVXJsT3BlcmF0b3ImIHVybCApOwogICAgUVVybE9wZXJhdG9yKCBjb25z
dCBRVXJsT3BlcmF0b3ImIHVybCwgY29uc3QgUVN0cmluZyYgcmVsVXJsLCBib29sIGNoZWNrU2xh
c2ggPSBGQUxTRSApOwogICAgdmlydHVhbCB+UVVybE9wZXJhdG9yKCk7CgogICAgdmlydHVhbCB2
b2lkIHNldFBhdGgoIGNvbnN0IFFTdHJpbmcmIHBhdGggKTsKICAgIHZpcnR1YWwgYm9vbCBjZFVw
KCk7CgogICAgdmlydHVhbCBjb25zdCBRTmV0d29ya09wZXJhdGlvbiAqbGlzdENoaWxkcmVuKCk7
CiAgICB2aXJ0dWFsIGNvbnN0IFFOZXR3b3JrT3BlcmF0aW9uICpta2RpciggY29uc3QgUVN0cmlu
ZyAmZGlybmFtZSApOwogICAgdmlydHVhbCBjb25zdCBRTmV0d29ya09wZXJhdGlvbiAqcmVtb3Zl
KCBjb25zdCBRU3RyaW5nICZmaWxlbmFtZSApOwogICAgdmlydHVhbCBjb25zdCBRTmV0d29ya09w
ZXJhdGlvbiAqcmVuYW1lKCBjb25zdCBRU3RyaW5nICZvbGRuYW1lLCBjb25zdCBRU3RyaW5nICZu
ZXduYW1lICk7CiAgICB2aXJ0dWFsIGNvbnN0IFFOZXR3b3JrT3BlcmF0aW9uICpnZXQoIGNvbnN0
IFFTdHJpbmcgJmxvY2F0aW9uID0gUVN0cmluZzo6bnVsbCApOwogICAgdmlydHVhbCBjb25zdCBR
TmV0d29ya09wZXJhdGlvbiAqcHV0KCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBRU3Ry
aW5nICZsb2NhdGlvbiA9IFFTdHJpbmc6Om51bGwgKTsKICAgIHZpcnR1YWwgUVB0ckxpc3Q8UU5l
dHdvcmtPcGVyYXRpb24+IGNvcHkoIGNvbnN0IFFTdHJpbmcgJmZyb20sIGNvbnN0IFFTdHJpbmcg
JnRvLCBib29sIG1vdmUgPSBGQUxTRSwgYm9vbCB0b1BhdGggPSBUUlVFICk7CiAgICB2aXJ0dWFs
IHZvaWQgY29weSggY29uc3QgUVN0cmluZ0xpc3QgJmZpbGVzLCBjb25zdCBRU3RyaW5nICZkZXN0
LCBib29sIG1vdmUgPSBGQUxTRSApOwogICAgdmlydHVhbCBib29sIGlzRGlyKCBib29sICpvayA9
IDAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZUZpbHRlciggY29uc3QgUVN0cmluZyAmbmFt
ZUZpbHRlciApOwogICAgUVN0cmluZyBuYW1lRmlsdGVyKCkgY29uc3Q7CgogICAgdmlydHVhbCBR
VXJsSW5mbyBpbmZvKCBjb25zdCBRU3RyaW5nICZlbnRyeSApIGNvbnN0OwoKICAgIFFVcmxPcGVy
YXRvciYgb3BlcmF0b3I9KCBjb25zdCBRVXJsT3BlcmF0b3IgJnVybCApOwogICAgUVVybE9wZXJh
dG9yJiBvcGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJnVybCApOwoKICAgIHZpcnR1YWwgdm9pZCBz
dG9wKCk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIG5ld0NoaWxkcmVuKCBjb25zdCBRVmFsdWVMaXN0
PFFVcmxJbmZvPiAmLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIGZpbmlzaGVk
KCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIHN0YXJ0KCBRTmV0d29ya09wZXJh
dGlvbiAqcmVzICk7CiAgICB2b2lkIGNyZWF0ZWREaXJlY3RvcnkoIGNvbnN0IFFVcmxJbmZvICYs
IFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZvaWQgcmVtb3ZlZCggUU5ldHdvcmtPcGVy
YXRpb24gKnJlcyApOwogICAgdm9pZCBpdGVtQ2hhbmdlZCggUU5ldHdvcmtPcGVyYXRpb24gKnJl
cyApOwogICAgdm9pZCBkYXRhKCBjb25zdCBRQnl0ZUFycmF5ICYsIFFOZXR3b3JrT3BlcmF0aW9u
ICpyZXMgKTsKICAgIHZvaWQgZGF0YVRyYW5zZmVyUHJvZ3Jlc3MoIGludCBieXRlc0RvbmUsIGlu
dCBieXRlc1RvdGFsLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIHN0YXJ0ZWRO
ZXh0Q29weSggY29uc3QgUVB0ckxpc3Q8UU5ldHdvcmtPcGVyYXRpb24+ICZsc3QgKTsKICAgIHZv
aWQgY29ubmVjdGlvblN0YXRlQ2hhbmdlZCggaW50IHN0YXRlLCBjb25zdCBRU3RyaW5nICZkYXRh
ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHJlc2V0KCk7CiAgICBib29sIHBhcnNlKCBjb25zdCBR
U3RyaW5nJiB1cmwgKTsKICAgIHZpcnR1YWwgYm9vbCBjaGVja1ZhbGlkKCk7CiAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJFbnRyaWVzKCk7CiAgICB2b2lkIGdldE5ldHdvcmtQcm90b2NvbCgpOwogICAg
dm9pZCBkZWxldGVOZXR3b3JrUHJvdG9jb2woKTsKCnByaXZhdGUgOgogICAgY29uc3QgUU5ldHdv
cmtPcGVyYXRpb24gKnN0YXJ0T3BlcmF0aW9uKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAg
IHZvaWQgY29weUdvdERhdGEoIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEsIFFOZXR3b3JrT3BlcmF0
aW9uICpvcCApOwogICAgdm9pZCBjb250aW51ZUNvcHkoIFFOZXR3b3JrT3BlcmF0aW9uICpvcCAp
OwogICAgdm9pZCBmaW5pc2hlZENvcHkoKTsKICAgIHZvaWQgYWRkRW50cnkoIGNvbnN0IFFWYWx1
ZUxpc3Q8UVVybEluZm8+ICZpICk7CiAgICB2b2lkIHNsb3RJdGVtQ2hhbmdlZCggUU5ldHdvcmtP
cGVyYXRpb24gKm9wICk7Cgpwcml2YXRlOgogICAgdm9pZCBkZWxldGVPcGVyYXRpb24oIFFOZXR3
b3JrT3BlcmF0aW9uICpvcCApOwoKICAgIFFVcmxPcGVyYXRvclByaXZhdGUgKmQ7Cn07CiMgNTgg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZmlsZWRpYWxvZy5oIiAyCgoKCgoKY2xhc3Mg
UUZpbGVJY29uUHJvdmlkZXIgOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IHZpcnR1YWwg
UU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0
KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lk
KiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFV
T2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVh
bCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBi
b29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7
IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0
KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1l
dGFPYmo7CnB1YmxpYzoKICAgIFFGaWxlSWNvblByb3ZpZGVyKCBRT2JqZWN0ICogcGFyZW50ID0g
MCwgY29uc3QgY2hhciogbmFtZSA9IDAgKTsKICAgIHZpcnR1YWwgY29uc3QgUVBpeG1hcCAqIHBp
eG1hcCggY29uc3QgUUZpbGVJbmZvICYgKTsKCnByaXZhdGU6CgogICAgUUZpbGVJY29uUHJvdmlk
ZXIoIGNvbnN0IFFGaWxlSWNvblByb3ZpZGVyICYgKTsKICAgIFFGaWxlSWNvblByb3ZpZGVyJiBv
cGVyYXRvcj0oIGNvbnN0IFFGaWxlSWNvblByb3ZpZGVyICYgKTsKCn07CgpjbGFzcyBRRmlsZVBy
ZXZpZXcKewpwdWJsaWM6CiAgICBRRmlsZVByZXZpZXcoKTsKICAgIHZpcnR1YWwgdm9pZCBwcmV2
aWV3VXJsKCBjb25zdCBRVXJsICZ1cmwgKSA9IDA7Cgp9OwoKY2xhc3MgUUZpbGVEaWFsb2cgOiBw
dWJsaWMgUURpYWxvZwp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBj
aGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFy
KiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJv
b2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBp
bnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0
eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCog
c3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3Qq
KXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g
MCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g
MCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAoKICAgCiAgIAog
ICAKCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGljOgogICAgUUZpbGVEaWFsb2co
IGNvbnN0IFFTdHJpbmcmIGRpck5hbWUsIGNvbnN0IFFTdHJpbmcmIGZpbHRlciA9IFFTdHJpbmc6
Om51bGwsCiAgICAgICAgICAgICAgICAgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5h
bWU9MCwgYm9vbCBtb2RhbCA9IEZBTFNFICk7CiAgICBRRmlsZURpYWxvZyggUVdpZGdldCogcGFy
ZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgYm9vbCBtb2RhbCA9IEZBTFNFICk7CiAgICB+UUZp
bGVEaWFsb2coKTsKCgoKICAgIHN0YXRpYyBRU3RyaW5nIGdldE9wZW5GaWxlTmFtZSggY29uc3Qg
UVN0cmluZyAmaW5pdGlhbGx5ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmZmlsdGVyID0gUVN0cmluZzo6bnVsbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50ID0gMCwgY29u
c3QgY2hhciogbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmcgJmNhcHRpb24gPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBRU3RyaW5nICpzZWxlY3RlZEZpbHRlciA9IDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZVN5bWxpbmtzID0gVFJVRSk7CiAg
ICBzdGF0aWMgUVN0cmluZyBnZXRTYXZlRmlsZU5hbWUoIGNvbnN0IFFTdHJpbmcgJmluaXRpYWxs
eSA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmcgJmZpbHRlciA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFFXaWRnZXQgKnBhcmVudCA9IDAsIGNvbnN0IGNoYXIqIG5hbWUgPSAw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZjYXB0
aW9uID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyAqc2VsZWN0ZWRGaWx0ZXIgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHJlc29sdmVTeW1saW5rcyA9IFRSVUUpOwogICAgc3RhdGljIFFTdHJpbmcg
Z2V0RXhpc3RpbmdEaXJlY3RvcnkoIGNvbnN0IFFTdHJpbmcgJmRpciA9IFFTdHJpbmc6Om51bGws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50
ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBuYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRU3RyaW5nICZjYXB0aW9uID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGRpck9ubHkgPSBUUlVFLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZVN5bWxpbmtzID0gVFJVRSk7CiAg
ICBzdGF0aWMgUVN0cmluZ0xpc3QgZ2V0T3BlbkZpbGVOYW1lcyggY29uc3QgUVN0cmluZyAmZmls
dGVyPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFTdHJpbmcgJmRpciA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50ID0gMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gMCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZjYXB0aW9u
ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBRU3RyaW5nICpzZWxlY3RlZEZpbHRlciA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlU3ltbGlua3MgPSBUUlVFKTsKCgoKICAgIHN0YXRp
YyB2b2lkIHNldEljb25Qcm92aWRlciggUUZpbGVJY29uUHJvdmlkZXIgKiApOwogICAgc3RhdGlj
IFFGaWxlSWNvblByb3ZpZGVyICogaWNvblByb3ZpZGVyKCk7CgoKCiAgICBRU3RyaW5nIHNlbGVj
dGVkRmlsZSgpIGNvbnN0OwogICAgUVN0cmluZyBzZWxlY3RlZEZpbHRlcigpIGNvbnN0OwogICAg
dmlydHVhbCB2b2lkIHNldFNlbGVjdGVkRmlsdGVyKCBjb25zdCBRU3RyaW5nJiApOwogICAgdmly
dHVhbCB2b2lkIHNldFNlbGVjdGVkRmlsdGVyKCBpbnQgKTsKCiAgICB2b2lkIHNldFNlbGVjdGlv
biggY29uc3QgUVN0cmluZyAmKTsKCiAgICB2b2lkIHNlbGVjdEFsbCggYm9vbCBiICk7CgogICAg
UVN0cmluZ0xpc3Qgc2VsZWN0ZWRGaWxlcygpIGNvbnN0OwoKICAgIFFTdHJpbmcgZGlyUGF0aCgp
IGNvbnN0OwoKICAgIHZvaWQgc2V0RGlyKCBjb25zdCBRRGlyICYgKTsKICAgIGNvbnN0IFFEaXIg
KmRpcigpIGNvbnN0OwoKICAgIHZvaWQgc2V0U2hvd0hpZGRlbkZpbGVzKCBib29sIHMgKTsKICAg
IGJvb2wgc2hvd0hpZGRlbkZpbGVzKCkgY29uc3Q7CgogICAgdm9pZCByZXJlYWREaXIoKTsKICAg
IHZvaWQgcmVzb3J0RGlyKCk7CgogICAgZW51bSBNb2RlIHsgQW55RmlsZSwgRXhpc3RpbmdGaWxl
LCBEaXJlY3RvcnksIEV4aXN0aW5nRmlsZXMsIERpcmVjdG9yeU9ubHkgfTsKICAgIHZvaWQgc2V0
TW9kZSggTW9kZSApOwogICAgTW9kZSBtb2RlKCkgY29uc3Q7CgogICAgZW51bSBWaWV3TW9kZSB7
IERldGFpbCwgTGlzdCB9OwogICAgZW51bSBQcmV2aWV3TW9kZSB7IE5vUHJldmlldywgQ29udGVu
dHMsIEluZm8gfTsKICAgIHZvaWQgc2V0Vmlld01vZGUoIFZpZXdNb2RlIG0gKTsKICAgIFZpZXdN
b2RlIHZpZXdNb2RlKCkgY29uc3Q7CiAgICB2b2lkIHNldFByZXZpZXdNb2RlKCBQcmV2aWV3TW9k
ZSBtICk7CiAgICBQcmV2aWV3TW9kZSBwcmV2aWV3TW9kZSgpIGNvbnN0OwoKICAgIGJvb2wgZXZl
bnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKCiAgICBib29sIGlzSW5mb1ByZXZpZXdF
bmFibGVkKCkgY29uc3Q7CiAgICBib29sIGlzQ29udGVudHNQcmV2aWV3RW5hYmxlZCgpIGNvbnN0
OwogICAgdm9pZCBzZXRJbmZvUHJldmlld0VuYWJsZWQoIGJvb2wgKTsKICAgIHZvaWQgc2V0Q29u
dGVudHNQcmV2aWV3RW5hYmxlZCggYm9vbCApOwoKICAgIHZvaWQgc2V0SW5mb1ByZXZpZXcoIFFX
aWRnZXQgKncsIFFGaWxlUHJldmlldyAqcHJldmlldyApOwogICAgdm9pZCBzZXRDb250ZW50c1By
ZXZpZXcoIFFXaWRnZXQgKncsIFFGaWxlUHJldmlldyAqcHJldmlldyApOwoKICAgIFFVcmwgdXJs
KCkgY29uc3Q7CgogICAgdm9pZCBhZGRGaWx0ZXIoIGNvbnN0IFFTdHJpbmcgJmZpbHRlciApOwoK
cHVibGljIDoKICAgIHZvaWQgZG9uZSggaW50ICk7CiAgICB2b2lkIHNldERpciggY29uc3QgUVN0
cmluZyYgKTsKICAgIHZvaWQgc2V0VXJsKCBjb25zdCBRVXJsT3BlcmF0b3IgJnVybCApOwogICAg
dm9pZCBzZXRGaWx0ZXIoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2b2lkIHNldEZpbHRlcnMoIGNv
bnN0IFFTdHJpbmcmICk7CiAgICB2b2lkIHNldEZpbHRlcnMoIGNvbnN0IGNoYXIgKiogKTsKICAg
IHZvaWQgc2V0RmlsdGVycyggY29uc3QgUVN0cmluZ0xpc3QmICk7Cgpwcm90ZWN0ZWQ6CiAgICB2
b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwogICAgdm9pZCBrZXlQcmVzc0V2ZW50
KCBRS2V5RXZlbnQgKiApOwoKICAgIHZvaWQgYWRkV2lkZ2V0cyggUUxhYmVsICosIFFXaWRnZXQg
KiwgUVB1c2hCdXR0b24gKiApOwogICAgdm9pZCBhZGRUb29sQnV0dG9uKCBRQnV0dG9uICpiLCBi
b29sIHNlcGFyYXRvciA9IEZBTFNFICk7CiAgICB2b2lkIGFkZExlZnRXaWRnZXQoIFFXaWRnZXQg
KncgKTsKICAgIHZvaWQgYWRkUmlnaHRXaWRnZXQoIFFXaWRnZXQgKncgKTsKCnByb3RlY3RlZDoK
ICAgIHZvaWQgZmlsZUhpZ2hsaWdodGVkKCBjb25zdCBRU3RyaW5nJiApOwogICAgdm9pZCBmaWxl
U2VsZWN0ZWQoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2b2lkIGZpbGVzU2VsZWN0ZWQoIGNvbnN0
IFFTdHJpbmdMaXN0JiApOwogICAgdm9pZCBkaXJFbnRlcmVkKCBjb25zdCBRU3RyaW5nJiApOwog
ICAgdm9pZCBmaWx0ZXJTZWxlY3RlZCggY29uc3QgUVN0cmluZyYgKTsKCnByaXZhdGUgOgogICAg
dm9pZCBkZXRhaWxWaWV3U2VsZWN0aW9uQ2hhbmdlZCgpOwogICAgdm9pZCBsaXN0Qm94U2VsZWN0
aW9uQ2hhbmdlZCgpOwogICAgdm9pZCBjaGFuZ2VNb2RlKCBpbnQgKTsKICAgIHZvaWQgZmlsZU5h
bWVFZGl0UmV0dXJuUHJlc3NlZCgpOwogICAgdm9pZCBzdG9wQ29weSgpOwogICAgdm9pZCByZW1v
dmVQcm9ncmVzc0RpYSgpOwoKICAgIHZvaWQgZmlsZVNlbGVjdGVkKCBpbnQgKTsKICAgIHZvaWQg
ZmlsZUhpZ2hsaWdodGVkKCBpbnQgKTsKICAgIHZvaWQgZGlyU2VsZWN0ZWQoIGludCApOwogICAg
dm9pZCBwYXRoU2VsZWN0ZWQoIGludCApOwoKICAgIHZvaWQgdXBkYXRlRmlsZU5hbWVFZGl0KCBR
TGlzdFZpZXdJdGVtICopOwogICAgdm9pZCBzZWxlY3REaXJlY3RvcnlPckZpbGUoIFFMaXN0Vmll
d0l0ZW0gKiApOwogICAgdm9pZCBwb3B1cENvbnRleHRNZW51KCBRTGlzdFZpZXdJdGVtICosIGNv
bnN0IFFQb2ludCAmLCBpbnQgKTsKICAgIHZvaWQgcG9wdXBDb250ZXh0TWVudSggUUxpc3RCb3hJ
dGVtICosIGNvbnN0IFFQb2ludCAmICk7CiAgICB2b2lkIHVwZGF0ZUZpbGVOYW1lRWRpdCggUUxp
c3RCb3hJdGVtICopOwogICAgdm9pZCBzZWxlY3REaXJlY3RvcnlPckZpbGUoIFFMaXN0Qm94SXRl
bSAqICk7CiAgICB2b2lkIGZpbGVOYW1lRWRpdERvbmUoKTsKCiAgICB2b2lkIG9rQ2xpY2tlZCgp
OwogICAgdm9pZCBmaWx0ZXJDbGlja2VkKCk7CiAgICB2b2lkIGNhbmNlbENsaWNrZWQoKTsKCiAg
ICB2b2lkIGNkVXBDbGlja2VkKCk7CiAgICB2b2lkIG5ld0ZvbGRlckNsaWNrZWQoKTsKCiAgICB2
b2lkIGZpeHVwTmFtZUVkaXQoKTsKCiAgICB2b2lkIGRvTWltZVR5cGVMb29rdXAoKTsKCiAgICB2
b2lkIHVwZGF0ZUdlb21ldHJpZXMoKTsKICAgIHZvaWQgbW9kZUJ1dHRvbnNEZXN0cm95ZWQoKTsK
ICAgIHZvaWQgdXJsU3RhcnQoIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwogICAgdm9pZCB1cmxG
aW5pc2hlZCggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2b2lkIGRhdGFUcmFuc2ZlclBy
b2dyZXNzKCBpbnQgYnl0ZXNEb25lLCBpbnQgYnl0ZXNUb3RhbCwgUU5ldHdvcmtPcGVyYXRpb24g
KiApOwogICAgdm9pZCBpbnNlcnRFbnRyeSggY29uc3QgUVZhbHVlTGlzdDxRVXJsSW5mbz4gJmZp
LCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZvaWQgcmVtb3ZlRW50cnkoIFFOZXR3b3Jr
T3BlcmF0aW9uICogKTsKICAgIHZvaWQgY3JlYXRlZERpcmVjdG9yeSggY29uc3QgUVVybEluZm8g
JmluZm8sIFFOZXR3b3JrT3BlcmF0aW9uICogKTsKICAgIHZvaWQgaXRlbUNoYW5nZWQoIFFOZXR3
b3JrT3BlcmF0aW9uICogKTsKICAgIHZvaWQgZ29CYWNrKCk7Cgpwcml2YXRlOgogICAgZW51bSBQ
b3B1cEFjdGlvbiB7CiAgICAgICAgUEFfT3BlbiA9IDAsCiAgICAgICAgUEFfRGVsZXRlLAogICAg
ICAgIFBBX1JlbmFtZSwKICAgICAgICBQQV9Tb3J0TmFtZSwKICAgICAgICBQQV9Tb3J0U2l6ZSwK
ICAgICAgICBQQV9Tb3J0VHlwZSwKICAgICAgICBQQV9Tb3J0RGF0ZSwKICAgICAgICBQQV9Tb3J0
VW5zb3J0ZWQsCiAgICAgICAgUEFfQ2FuY2VsLAogICAgICAgIFBBX1JlbG9hZCwKICAgICAgICBQ
QV9IaWRkZW4KICAgIH07CgogICAgdm9pZCBpbml0KCk7CiAgICBib29sIHRyeVNldFNlbGVjdGlv
biggYm9vbCBpc0RpciwgY29uc3QgUVVybE9wZXJhdG9yICYsIGJvb2wgKTsKICAgIHZvaWQgZGVs
ZXRlRmlsZSggY29uc3QgUVN0cmluZyAmZmlsZW5hbWUgKTsKICAgIHZvaWQgcG9wdXBDb250ZXh0
TWVudSggY29uc3QgUVN0cmluZyAmZmlsZW5hbWUsIGJvb2wgd2l0aFNvcnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBvcHVwQWN0aW9uICZhY3Rpb24sIGNvbnN0IFFQb2ludCAmcCApOwog
ICAgdm9pZCB1cGRhdGVQcmV2aWV3cyggY29uc3QgUVVybCAmdSApOwoKICAgIFFEaXIgcmVzZXJ2
ZWQ7CiAgICBRU3RyaW5nIGZpbGVOYW1lOwoKICAgIGZyaWVuZCBjbGFzcyBRRmlsZURpYWxvZ1FG
aWxlTGlzdFZpZXc7CiAgICBmcmllbmQgY2xhc3MgUUZpbGVMaXN0Qm94OwoKICAgIFFGaWxlRGlh
bG9nUHJpdmF0ZSAqZDsKICAgIFFGaWxlRGlhbG9nUUZpbGVMaXN0VmlldyAqZmlsZXM7CgogICAg
UUxpbmVFZGl0ICpuYW1lRWRpdDsKICAgIFFQdXNoQnV0dG9uICpva0I7CiAgICBRUHVzaEJ1dHRv
biAqY2FuY2VsQjsKIyAzMzEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZmlsZWRpYWxv
Zy5oIgpwcml2YXRlOgoKICAgIFFGaWxlRGlhbG9nKCBjb25zdCBRRmlsZURpYWxvZyAmICk7CiAg
ICBRRmlsZURpYWxvZyAmb3BlcmF0b3I9KCBjb25zdCBRRmlsZURpYWxvZyAmICk7Cgp9OwojIDI3
ICJUeFZvcnBhbEdVSS5jcHAiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWhn
cm91cGJveC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xaGdyb3VwYm94
LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fncm91cGJveC5oIiAxCiMgNDgg
Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ3JvdXBib3guaCIKY2xhc3MgUUFjY2VsOwpj
bGFzcyBRR3JvdXBCb3hQcml2YXRlOwpjbGFzcyBRVkJveExheW91dDsKY2xhc3MgUUdyaWRMYXlv
dXQ7CmNsYXNzIFFTcGFjZXJJdGVtOwoKY2xhc3MgUUdyb3VwQm94IDogcHVibGljIFFGcmFtZQp7
CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUo
KSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJv
b2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50
LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBR
VmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBp
bnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVj
dCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGlj
IFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0
cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBz
dGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoK
ICAgIFFHcm91cEJveCggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwog
ICAgUUdyb3VwQm94KCBjb25zdCBRU3RyaW5nICZ0aXRsZSwKICAgICAgICAgICAgICAgUVdpZGdl
dCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUUdyb3VwQm94KCBpbnQgc3Ry
aXBzLCBPcmllbnRhdGlvbiBvLAogICAgICAgICAgICAgICBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29u
c3QgY2hhciogbmFtZT0wICk7CiAgICBRR3JvdXBCb3goIGludCBzdHJpcHMsIE9yaWVudGF0aW9u
IG8sIGNvbnN0IFFTdHJpbmcgJnRpdGxlLAogICAgICAgICAgICAgICBRV2lkZ2V0KiBwYXJlbnQ9
MCwgY29uc3QgY2hhciogbmFtZT0wICk7CgogICAgdmlydHVhbCB2b2lkIHNldENvbHVtbkxheW91
dChpbnQgc3RyaXBzLCBPcmllbnRhdGlvbiBvKTsKCiAgICBRU3RyaW5nIHRpdGxlKCkgY29uc3Qg
eyByZXR1cm4gc3RyOyB9CiAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoIGNvbnN0IFFTdHJpbmcg
Jik7CgogICAgaW50IGFsaWdubWVudCgpIGNvbnN0IHsgcmV0dXJuIGFsaWduOyB9CiAgICB2aXJ0
dWFsIHZvaWQgc2V0QWxpZ25tZW50KCBpbnQgKTsKCiAgICBpbnQgY29sdW1ucygpIGNvbnN0Owog
ICAgdm9pZCBzZXRDb2x1bW5zKCBpbnQgKTsKCiAgICBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGRpcjsgfQogICAgdm9pZCBzZXRPcmllbnRhdGlvbiggT3JpZW50YXRp
b24gKTsKCiAgICBpbnQgaW5zaWRlTWFyZ2luKCkgY29uc3Q7CiAgICBpbnQgaW5zaWRlU3BhY2lu
ZygpIGNvbnN0OwogICAgdm9pZCBzZXRJbnNpZGVNYXJnaW4oIGludCBtICk7CiAgICB2b2lkIHNl
dEluc2lkZVNwYWNpbmcoIGludCBzICk7CgogICAgdm9pZCBhZGRTcGFjZSggaW50ICk7CiAgICBR
U2l6ZSBzaXplSGludCgpIGNvbnN0OwoKICAgIGJvb2wgaXNGbGF0KCkgY29uc3Q7CiAgICB2b2lk
IHNldEZsYXQoIGJvb2wgYiApOwoKcHJvdGVjdGVkOgogICAgYm9vbCBldmVudCggUUV2ZW50ICog
KTsKICAgIHZvaWQgY2hpbGRFdmVudCggUUNoaWxkRXZlbnQgKiApOwogICAgdm9pZCByZXNpemVF
dmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQgcGFpbnRFdmVudCggUVBhaW50RXZlbnQg
KiApOwogICAgdm9pZCBmb2N1c0luRXZlbnQoIFFGb2N1c0V2ZW50ICogKTsKICAgIHZvaWQgZm9u
dENoYW5nZSggY29uc3QgUUZvbnQgJiApOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGZpeEZvY3VzKCk7
Cgpwcml2YXRlOgogICAgdm9pZCBza2lwKCk7CiAgICB2b2lkIGluaXQoKTsKICAgIHZvaWQgY2Fs
Y3VsYXRlRnJhbWUoKTsKICAgIHZvaWQgaW5zZXJ0V2lkKCBRV2lkZ2V0KiApOwogICAgdm9pZCBz
ZXRUZXh0U3BhY2VyKCk7CgogICAgUVN0cmluZyBzdHI7CiAgICBpbnQgYWxpZ247CiAgICBpbnQg
bGVudmlzaWJsZTsKCiAgICBRQWNjZWwgKiBhY2NlbDsKCiAgICBRR3JvdXBCb3hQcml2YXRlICog
ZDsKCiAgICBRVkJveExheW91dCAqdmJveDsKICAgIFFHcmlkTGF5b3V0ICpncmlkOwogICAgaW50
IHJvdzsKICAgIGludCBjb2wgOiAzMDsKICAgIHVpbnQgYkZsYXQgOiAxOwogICAgaW50IG5Sb3dz
LCBuQ29sczsKICAgIE9yaWVudGF0aW9uIGRpcjsKICAgIGludCBzcGFjLCBtYXJnOwoKcHJpdmF0
ZToKCiAgICBRR3JvdXBCb3goIGNvbnN0IFFHcm91cEJveCAmICk7CiAgICBRR3JvdXBCb3ggJm9w
ZXJhdG9yPSggY29uc3QgUUdyb3VwQm94ICYgKTsKCn07CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xaGdyb3VwYm94LmgiIDIKCgoKCmNsYXNzIFFIR3JvdXBCb3ggOiBwdWJsaWMg
UUdyb3VwQm94CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIg
KmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7
IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBx
dF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBp
ZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBR
T2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0
aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhp
czsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7
IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7
IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUUhHcm91
cEJveCggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUUhHcm91
cEJveCggY29uc3QgUVN0cmluZyAmdGl0bGUsIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFy
KiBuYW1lPTAgKTsKICAgIH5RSEdyb3VwQm94KCk7Cgpwcml2YXRlOgoKICAgIFFIR3JvdXBCb3go
IGNvbnN0IFFIR3JvdXBCb3ggJiApOwogICAgUUhHcm91cEJveCAmb3BlcmF0b3I9KCBjb25zdCBR
SEdyb3VwQm94ICYgKTsKCn07CiMgMjggIlR4Vm9ycGFsR1VJLmNwcCIgMgoKIyAxICIvdXNyL2xv
Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWN1cnNvci5oIiAxCiMgNjUgIi91c3IvbG9jYWwvcXQtMy4x
LjEvaW5jbHVkZS9xY3Vyc29yLmgiCnN0cnVjdCBRQ3Vyc29yRGF0YTsKCgpjbGFzcyBRQ3Vyc29y
IDogcHVibGljIFF0CnsKcHVibGljOgogICAgUUN1cnNvcigpOwogICAgUUN1cnNvciggaW50IHNo
YXBlICk7CiAgICBRQ3Vyc29yKCBjb25zdCBRQml0bWFwICZiaXRtYXAsIGNvbnN0IFFCaXRtYXAg
Jm1hc2ssCiAgICAgICAgICAgICBpbnQgaG90WD0tMSwgaW50IGhvdFk9LTEgKTsKICAgIFFDdXJz
b3IoIGNvbnN0IFFQaXhtYXAgJnBpeG1hcCwKICAgICAgICAgICAgIGludCBob3RYPS0xLCBpbnQg
aG90WT0tMSApOwogICAgUUN1cnNvciggY29uc3QgUUN1cnNvciAmICk7CiAgIH5RQ3Vyc29yKCk7
CiAgICBRQ3Vyc29yICZvcGVyYXRvcj0oIGNvbnN0IFFDdXJzb3IgJiApOwoKICAgIGludCBzaGFw
ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRTaGFwZSggaW50ICk7CgogICAgY29uc3QgUUJpdG1hcCAq
Yml0bWFwKCkgY29uc3Q7CiAgICBjb25zdCBRQml0bWFwICptYXNrKCkgY29uc3Q7CiAgICBRUG9p
bnQgaG90U3BvdCgpIGNvbnN0OwoKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgoK
CiAgICBzdGF0aWMgUVBvaW50IHBvcygpOwogICAgc3RhdGljIHZvaWQgc2V0UG9zKCBpbnQgeCwg
aW50IHkgKTsKICAgIHN0YXRpYyB2b2lkIHNldFBvcyggY29uc3QgUVBvaW50ICYgKTsKCiAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7CgoKICAg
IHN0YXRpYyBpbnQgeDExU2NyZWVuKCk7Cgpwcml2YXRlOgogICAgdm9pZCBzZXRCaXRtYXAoIGNv
bnN0IFFCaXRtYXAgJmJpdG1hcCwgY29uc3QgUUJpdG1hcCAmbWFzaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGhvdFgsIGludCBob3RZICk7CiAgICB2b2lkIHVwZGF0ZSgp
IGNvbnN0OwogICAgUUN1cnNvckRhdGEgKmRhdGE7CiAgICBRQ3Vyc29yICpmaW5kX2N1cihpbnQp
OwoKCgp9OwojIDEyNyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FjdXJzb3IuaCIKdHlw
ZWRlZiBRdDo6Q3Vyc29yU2hhcGUgUUN1cnNvclNoYXBlOwojIDEzOCAiL3Vzci9sb2NhbC9xdC0z
LjEuMS9pbmNsdWRlL3FjdXJzb3IuaCIKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0
cmVhbSAmLCBjb25zdCBRQ3Vyc29yICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0
YVN0cmVhbSAmLCBRQ3Vyc29yICYgKTsKCgoKCmlubGluZSB2b2lkIFFDdXJzb3I6OnNldFBvcygg
Y29uc3QgUVBvaW50ICZwICkKewogICAgc2V0UG9zKCBwLngoKSwgcC55KCkgKTsKfQojIDMwICJU
eFZvcnBhbEdVSS5jcHAiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXRhYndp
ZGdldC5oIiAxCiMgNDggIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGFid2lkZ2V0Lmgi
CmNsYXNzIFFUYWJCYXI7CmNsYXNzIFFUYWJXaWRnZXREYXRhOwpjbGFzcyBRVGFiOwpjbGFzcyBR
V2lkZ2V0U3RhY2s7CgoKY2xhc3MgUVRhYldpZGdldCA6IHB1YmxpYyBRV2lkZ2V0CnsKICAgIHB1
YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0
OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9p
bnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2Jq
ZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50
KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50
LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFP
YmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmlu
ZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRy
VXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBR
TWV0YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVi
bGljOgogICAgUVRhYldpZGdldCggUVdpZGdldCAqcGFyZW50ID0gMCwgY29uc3QgY2hhciAqbmFt
ZSA9IDAsIFdGbGFncyBmID0gMCApOwogICAgflFUYWJXaWRnZXQoKTsKCiAgICB2aXJ0dWFsIHZv
aWQgYWRkVGFiKCBRV2lkZ2V0ICosIGNvbnN0IFFTdHJpbmcgJiApOwogICAgdmlydHVhbCB2b2lk
IGFkZFRhYiggUVdpZGdldCAqY2hpbGQsIGNvbnN0IFFJY29uU2V0JiBpY29uc2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmbGFiZWwgKTsKICAgIHZpcnR1YWwgdm9p
ZCBhZGRUYWIoIFFXaWRnZXQgKiwgUVRhYiogKTsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0VGFi
KCBRV2lkZ2V0ICosIGNvbnN0IFFTdHJpbmcgJiwgaW50IGluZGV4ID0gLTEgKTsKICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRUYWIoIFFXaWRnZXQgKmNoaWxkLCBjb25zdCBRSWNvblNldCYgaWNvbnNl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJmxhYmVsLCBpbnQg
aW5kZXggPSAtMSApOwogICAgdmlydHVhbCB2b2lkIGluc2VydFRhYiggUVdpZGdldCAqLCBRVGFi
KiwgaW50IGluZGV4ID0gLTEgKTsKCiAgICB2b2lkIGNoYW5nZVRhYiggUVdpZGdldCAqLCBjb25z
dCBRU3RyaW5nICYpOwogICAgdm9pZCBjaGFuZ2VUYWIoIFFXaWRnZXQgKmNoaWxkLCBjb25zdCBR
SWNvblNldCYgaWNvbnNldCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZsYWJl
bCApOwoKICAgIGJvb2wgaXNUYWJFbmFibGVkKCBRV2lkZ2V0ICogKSBjb25zdDsKICAgIHZvaWQg
c2V0VGFiRW5hYmxlZCggUVdpZGdldCAqLCBib29sICk7CgogICAgUVN0cmluZyB0YWJMYWJlbCgg
UVdpZGdldCAqICkgY29uc3Q7CiAgICB2b2lkIHNldFRhYkxhYmVsKCBRV2lkZ2V0ICpwLCBjb25z
dCBRU3RyaW5nICZsICk7CgogICAgUUljb25TZXQgdGFiSWNvblNldCggUVdpZGdldCAqIHcgKSBj
b25zdDsKICAgIHZvaWQgc2V0VGFiSWNvblNldCggUVdpZGdldCAqIHcsIGNvbnN0IFFJY29uU2V0
ICYgaWNvbnNldCApOwoKICAgIHZvaWQgcmVtb3ZlVGFiVG9vbFRpcCggUVdpZGdldCAqIHcgKTsK
ICAgIHZvaWQgc2V0VGFiVG9vbFRpcCggUVdpZGdldCAqIHcsIGNvbnN0IFFTdHJpbmcgJiB0aXAg
KTsKICAgIFFTdHJpbmcgdGFiVG9vbFRpcCggUVdpZGdldCAqIHcgKSBjb25zdDsKCiAgICBRV2lk
Z2V0ICogY3VycmVudFBhZ2UoKSBjb25zdDsKICAgIFFXaWRnZXQgKnBhZ2UoIGludCApIGNvbnN0
OwogICAgUVN0cmluZyBsYWJlbCggaW50ICkgY29uc3Q7CiAgICBpbnQgY3VycmVudFBhZ2VJbmRl
eCgpIGNvbnN0OwogICAgaW50IGluZGV4T2YoIFFXaWRnZXQgKiApIGNvbnN0OwoKICAgIFFTaXpl
IHNpemVIaW50KCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVtU2l6ZUhpbnQoKSBjb25zdDsKCiAg
ICBlbnVtIFRhYlBvc2l0aW9uIHsgVG9wLCBCb3R0b20gfTsKICAgIFRhYlBvc2l0aW9uIHRhYlBv
c2l0aW9uKCkgY29uc3Q7CiAgICB2b2lkIHNldFRhYlBvc2l0aW9uKCBUYWJQb3NpdGlvbiApOwoK
ICAgIGVudW0gVGFiU2hhcGUgeyBSb3VuZGVkLCBUcmlhbmd1bGFyIH07CiAgICBUYWJTaGFwZSB0
YWJTaGFwZSgpIGNvbnN0OwogICAgdm9pZCBzZXRUYWJTaGFwZSggVGFiU2hhcGUgcyApOwoKICAg
IGludCBtYXJnaW4oKSBjb25zdDsKICAgIHZvaWQgc2V0TWFyZ2luKCBpbnQgKTsKCiAgICBpbnQg
Y291bnQoKSBjb25zdDsKCnB1YmxpYyA6CiAgICB2b2lkIHNldEN1cnJlbnRQYWdlKCBpbnQgKTsK
ICAgIHZpcnR1YWwgdm9pZCBzaG93UGFnZSggUVdpZGdldCAqICk7CiAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlUGFnZSggUVdpZGdldCAqICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNob3dFdmVudCgg
UVNob3dFdmVudCAqICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwog
ICAgdm9pZCBzZXRUYWJCYXIoIFFUYWJCYXIgKiApOwogICAgUVRhYkJhciogdGFiQmFyKCkgY29u
c3Q7CiAgICB2b2lkIHN0eWxlQ2hhbmdlKCBRU3R5bGUmICk7CiAgICB2b2lkIHVwZGF0ZU1hc2so
KTsKICAgIGJvb2wgZXZlbnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKCnByb3RlY3Rl
ZDoKICAgIHZvaWQgY3VycmVudENoYW5nZWQoIFFXaWRnZXQgKiApOwoKICAgIHZvaWQgc2VsZWN0
ZWQoIGNvbnN0IFFTdHJpbmcmICk7CgoKcHJpdmF0ZSA6CiAgICB2b2lkIHNob3dUYWIoIGludCBp
ICk7Cgpwcml2YXRlOgogICAgUVRhYldpZGdldERhdGEgKmQ7CiAgICB2b2lkIHNldFVwTGF5b3V0
KCBib29sID0gRkFMU0UgKTsKCiAgICBmcmllbmQgY2xhc3MgUVRhYkRpYWxvZzsKCnByaXZhdGU6
CgogICAgUVRhYldpZGdldCggY29uc3QgUVRhYldpZGdldCAmICk7CiAgICBRVGFiV2lkZ2V0JiBv
cGVyYXRvcj0oIGNvbnN0IFFUYWJXaWRnZXQgJiApOwoKfTsKIyAzMSAiVHhWb3JwYWxHVUkuY3Bw
IiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FoYnV0dG9uZ3JvdXAuaCIgMQoj
IDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWhidXR0b25ncm91cC5oIgojIDEgIi91
c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xYnV0dG9uZ3JvdXAuaCIgMQojIDQ4ICIvdXNyL2xv
Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWJ1dHRvbmdyb3VwLmgiCmNsYXNzIFFCdXR0b247CmNsYXNz
IFFCdXR0b25MaXN0OwoKCmNsYXNzIFFCdXR0b25Hcm91cCA6IHB1YmxpYyBRR3JvdXBCb3gKewog
ICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkg
Y29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29s
IHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwg
UVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZh
cmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50
LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3Qo
KTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBR
U3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJp
bmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3Rh
dGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAKICAgCgpwdWJsaWM6CiAgICBRQnV0dG9uR3Jv
dXAoIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFCdXR0b25H
cm91cCggY29uc3QgUVN0cmluZyAmdGl0bGUsCiAgICAgICAgICAgICAgICAgIFFXaWRnZXQqIHBh
cmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFCdXR0b25Hcm91cCggaW50IGNvbHVt
bnMsIE9yaWVudGF0aW9uIG8sCiAgICAgICAgICAgICAgICAgIFFXaWRnZXQqIHBhcmVudD0wLCBj
b25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFCdXR0b25Hcm91cCggaW50IGNvbHVtbnMsIE9yaWVu
dGF0aW9uIG8sIGNvbnN0IFFTdHJpbmcgJnRpdGxlLAogICAgICAgICAgICAgICAgICBRV2lkZ2V0
KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UUJ1dHRvbkdyb3VwKCk7Cgog
ICAgYm9vbCBpc0V4Y2x1c2l2ZSgpIGNvbnN0OwogICAgYm9vbCBpc1JhZGlvQnV0dG9uRXhjbHVz
aXZlKCkgY29uc3QgeyByZXR1cm4gcmFkaW9fZXhjbDsgfQogICAgdmlydHVhbCB2b2lkIHNldEV4
Y2x1c2l2ZSggYm9vbCApOwogICAgdmlydHVhbCB2b2lkIHNldFJhZGlvQnV0dG9uRXhjbHVzaXZl
KCBib29sICk7CgpwdWJsaWM6CiAgICBpbnQgaW5zZXJ0KCBRQnV0dG9uICosIGludCBpZD0tMSAp
OwogICAgdm9pZCByZW1vdmUoIFFCdXR0b24gKiApOwogICAgUUJ1dHRvbiAqZmluZCggaW50IGlk
ICkgY29uc3Q7CiAgICBpbnQgaWQoIFFCdXR0b24gKiApIGNvbnN0OwogICAgaW50IGNvdW50KCkg
Y29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvbiggaW50IGlkICk7CgogICAgdmlydHVh
bCB2b2lkIG1vdmVGb2N1cyggaW50ICk7CgogICAgUUJ1dHRvbiAqc2VsZWN0ZWQoKSBjb25zdDsK
CnByb3RlY3RlZDoKICAgIHZvaWQgcHJlc3NlZCggaW50IGlkICk7CiAgICB2b2lkIHJlbGVhc2Vk
KCBpbnQgaWQgKTsKICAgIHZvaWQgY2xpY2tlZCggaW50IGlkICk7Cgpwcm90ZWN0ZWQgOgogICAg
dm9pZCBidXR0b25QcmVzc2VkKCk7CiAgICB2b2lkIGJ1dHRvblJlbGVhc2VkKCk7CiAgICB2b2lk
IGJ1dHRvbkNsaWNrZWQoKTsKICAgIHZvaWQgYnV0dG9uVG9nZ2xlZCggYm9vbCBvbiApOwoKcHJv
dGVjdGVkOgogICAgYm9vbCBldmVudCggUUV2ZW50ICogZSApOwoKcHJpdmF0ZToKICAgIHZvaWQg
aW5pdCgpOwogICAgYm9vbCBleGNsX2dycDsKICAgIGJvb2wgcmFkaW9fZXhjbDsKICAgIFFCdXR0
b25MaXN0ICpidXR0b25zOwoKcHJpdmF0ZToKCiAgICBRQnV0dG9uR3JvdXAoIGNvbnN0IFFCdXR0
b25Hcm91cCAmICk7CiAgICBRQnV0dG9uR3JvdXAgJm9wZXJhdG9yPSggY29uc3QgUUJ1dHRvbkdy
b3VwICYgKTsKCn07CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xaGJ1dHRvbmdy
b3VwLmgiIDIKCgoKCmNsYXNzIFFIQnV0dG9uR3JvdXAgOiBwdWJsaWMgUUJ1dHRvbkdyb3VwCnsK
ICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgp
IGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9v
bCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQs
IFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFW
YXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGlu
dCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0
KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMg
UVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3Ry
aW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0
YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUUhCdXR0b25Hcm91cCggUVdp
ZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUUhCdXR0b25Hcm91cCgg
Y29uc3QgUVN0cmluZyAmdGl0bGUsIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1l
PTAgKTsKICAgIH5RSEJ1dHRvbkdyb3VwKCk7Cgpwcml2YXRlOgoKICAgIFFIQnV0dG9uR3JvdXAo
IGNvbnN0IFFIQnV0dG9uR3JvdXAgJiApOwogICAgUUhCdXR0b25Hcm91cCAmb3BlcmF0b3I9KCBj
b25zdCBRSEJ1dHRvbkdyb3VwICYgKTsKCn07CiMgMzIgIlR4Vm9ycGFsR1VJLmNwcCIgMgoKCgoK
c3RhdGljIGNvbnN0IGNoYXIgKiBwMV94cG1bXSA9IHsKIjE2IDE2IDMgMSIsCiIgCWMgTm9uZSIs
CiIuCWMgIzAwMDAwMDAwMDAwMCIsCiJYCWMgI0ZGRkZGRkZGMDAwMCIsCiIgICAgICAgICAgICAg
ICAgIiwKIiAgICAgICAgICAgICAgICAiLAoiICAgICAgICAgLi4uLiAgICIsCiIgICAgICAgIC5Y
WFhYLiAgIiwKIiAuLi4uLi4uLi4uLi4uLiAiLAoiIC5YWFhYWFhYWFhYWFguICIsCiIgLlhYWFhY
WFhYWFhYWC4gIiwKIiAuWFhYWFhYWFhYWFhYLiAiLAoiIC5YWFhYWFhYWFhYWFguICIsCiIgLlhY
WFhYWFhYWFhYWC4gIiwKIiAuWFhYWFhYWFhYWFhYLiAiLAoiIC5YWFhYWFhYWFhYWFguICIsCiIg
LlhYWFhYWFhYWFhYWC4gIiwKIiAuWFhYWFhYWFhYWFhYLiAiLAoiIC4uLi4uLi4uLi4uLi4uICIs
CiIgICAgICAgICAgICAgICAgIn07CgoKc3RhdGljIGNvbnN0IGNoYXIgKiBwMl94cG1bXSA9IHsK
IjE2IDE2IDMgMSIsCiIgCWMgTm9uZSIsCiIuCWMgIzAwMDAwMDAwMDAwMCIsCiJYCWMgI0ZGRkZG
RkZGRkZGRiIsCiIgICAgICAgICAgICAgICAgIiwKIiAgIC4uLi4uLiAgICAgICAiLAoiICAgLlhY
WC5YLiAgICAgICIsCiIgICAuWFhYLlhYLiAgICAgIiwKIiAgIC5YWFguWFhYLiAgICAiLAoiICAg
LlhYWC4uLi4uICAgICIsCiIgICAuWFhYWFhYWC4gICAgIiwKIiAgIC5YWFhYWFhYLiAgICAiLAoi
ICAgLlhYWFhYWFguICAgICIsCiIgICAuWFhYWFhYWC4gICAgIiwKIiAgIC5YWFhYWFhYLiAgICAi
LAoiICAgLlhYWFhYWFguICAgICIsCiIgICAuWFhYWFhYWC4gICAgIiwKIiAgIC4uLi4uLi4uLiAg
ICAiLAoiICAgICAgICAgICAgICAgICIsCiIgICAgICAgICAgICAgICAgIn07CgoKc3RhdGljIGNv
bnN0IGNoYXIgKiBwM194cG1bXSA9IHsKIjE2IDE2IDMgMSIsCiIgCWMgTm9uZSIsCiIuCWMgIzAw
MDAwMDAwMDAwMCIsCiJYCWMgI0ZGRkZGRkZGRkZGRiIsCiIgICAgICAgICAgICAgICAgIiwKIiAg
ICAgICAgICAgICAgICAiLAoiICAgLi4uLi4uLi4uICAgICIsCiIgIC4uLi4uLi4uLi4uICAgIiwK
IiAgLi4uLi4uLi4gLi4gICAiLAoiICAuLi4uLi4uLi4uLiAgICIsCiIgIC4uLi4uLi4uLi4uICAg
IiwKIiAgLi4uLi4uLi4uLi4gICAiLAoiICAuLi4uLi4uLi4uLiAgICIsCiIgIC4uLlhYWFhYLi4u
ICAgIiwKIiAgLi4uWFhYWFguLi4gICAiLAoiICAuLi5YWFhYWC4uLiAgICIsCiIgIC4uLlhYWFhY
Li4uICAgIiwKIiAgIC4uLi4uLi4uLiAgICAiLAoiICAgICAgICAgICAgICAgICIsCiIgICAgICAg
ICAgICAgICAgIn07CgoKCnN0YXRpYyBRQ2FudmFzICpsaW5lQ2FudmFzOwoKUUxhYmVsICpUeFZv
cnBhbEdVSTo6cG9pbnRlciwKICAgICAgICpUeFZvcnBhbEdVSTo6aG92ZXI7CgoKc3RhdGljIGNv
bnN0IFFQZW4gKmdyaWRQZW47CgoKVHhxRWRpdFRhYmxlICpUeFZvcnBhbEdVSTo6dGFibGU7CgoK
c3RhdGljIFR4Vm9ycGFsR1VJICp3aW5kb3c7CgoKUVRhYmxlICpUeFZvcnBhbEdVSTo6dHJlZTsK
CnVuc2lnbmVkIGludCBUeFZvcnBhbEdVSTo6cmlnaHQsCiAgICAgICAgICAgICBUeFZvcnBhbEdV
STo6Ym90dG9tOwoKCnN0YXRpYyBpbnQgcGxhY2U7CgoKc3RhdGljIFFDb21ib0JveCAqcGlja1Bh
cmVudDsKCgoKaW50IFR4Vm9ycGFsR1VJOjpnZXRQbGFjZSAoKQp7CiAgcmV0dXJuIHBsYWNlOwp9
CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnNldFBsYWNlIChjb25zdCBpbnQgbmV3UGxhY2UpCnsKICBw
bGFjZSA9IG5ld1BsYWNlOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnNldEJvdW5kcyAoUUNhbnZh
c1JlY3RhbmdsZSAmcmVjdGFuZ2xlLCBjb25zdCBUeEhpZXJBdHRyaWJTZXQgJmRhdGEpCnsKICBz
dGQ6OnZlY3RvcjxpbnQ+IHNpemUgPSBkYXRhLmdldE9wdFZlYygibG93ZXJCb3VuZHMiKTsKICBj
b25zdCBpbnQgeG1pbiA9IHNpemVbMF0sCiAgICAgICAgICAgIHltaW4gPSBzaXplWzFdOwogIHNp
emUgPSBkYXRhLmdldE9wdFZlYygidXBwZXJCb3VuZHMiKTsKICByZWN0YW5nbGUubW92ZSh4bWlu
KnNjYWxlK3BhZCx5bWluKnNjYWxlK3BhZCk7CiAgcmVjdGFuZ2xlLnNldFNpemUoc2NhbGUqKHNp
emVbMF0teG1pbiksc2NhbGUqKHNpemVbMV0teW1pbikpOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6
OmRvUGljayAoY29uc3QgdW5zaWduZWQgaW50IHBhcnQpCnsKICBjb25zdCBpbnQgY29sdW1uID0g
dHJlZS0+dGV4dChwYXJ0LDEpLmlzTnVsbCgpPyAyIDogMTsKICB3aW5kb3ctPnRhYmxlUGljayhw
YXJ0LGNvbHVtbik7CiAgdHJlZS0+c2V0Q3VycmVudENlbGwocGFydCxjb2x1bW4pOwogIHRyZWUt
PmVuc3VyZUNlbGxWaXNpYmxlKHBhcnQsY29sdW1uKTsKfQoKCgp2b2lkIFR4Vm9ycGFsR1VJOjp0
YWJsZVBpY2sgKGNvbnN0IGludCByb3csIGludCApCnsKICAgaWYgKHRyZWUtPm51bVJvd3MoKSkK
ICAgICAgdGFibGUtPnNldEF0dHJpYnV0ZSgmVHhQYXJ0OjpnZXRBbGxQYXJ0cygpW3Jvd10uZ2V0
RGF0YSgpKTsKfQoKCnN0YXRpYyBRUHVzaEJ1dHRvbiAqdG9vbEJ1dHRvbnNbMl1bNV07CgoKCnZv
aWQgVHhWb3JwYWxHVUk6OmNvbWJvUGljayAoY29uc3QgaW50IGlkeCkKewogICBjb25zdCBRU3Ry
aW5nIHBhcmVudCA9IHBpY2tQYXJlbnQtPmN1cnJlbnRUZXh0KCk7CiAgIGNvbnN0IGJvb2wgc3Bl
Y2llc0ZsYWdzW10gPSB7IGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UgfSwKICAgICAg
ICAgICAgICBmbHVpZEZsYWdzW10gPSB7IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2Ug
fSwKICAgICAgICAgICAgICBmaWVsZEZsYWdzW10gPSB7IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1
ZSwgdHJ1ZSB9LAogICAgICAgICAgICAgIG5vRmxhZ3NbXSA9IHsgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlIH0sCiAgICAgICAgICAgICAgKmZsYWdzID0gMD5pZHg/IG5vRmxhZ3Mg
OiBwYXJlbnQuZW5kc1dpdGgoIihTcGVjaWVzKSIpPyBzcGVjaWVzRmxhZ3MgOiBwYXJlbnQuZW5k
c1dpdGgoIihGbHVpZCkiKT8gZmx1aWRGbGFncyA6IGZpZWxkRmxhZ3M7CiAgIGZvciAoaW50IGlk
eCA9IDU7IDA8aWR4LS07IHRvb2xCdXR0b25zWzBdW2lkeF0tPnNldEVuYWJsZWQoZmxhZ3NbaWR4
XSkpOwp9CgoKCnN0YXRpYyBjb25zdCBRQnJ1c2ggKnNvdXJjZUJydXNoOwoKCnN0cnVjdCBUeFRy
ZWUgOiBRVGFibGUKewogIFR4VHJlZSAoUUhCb3ggJmJyb3dzZSkKICAgICAgOiBRVGFibGUobmV3
IFFIR3JvdXBCb3goIkNvbnRhaW5tZW50IGhpZXJhcmNoeToiLCZicm93c2UpKQogIHsKICAgIHNl
dE51bUNvbHMoMyk7CiAgfQoKCiAgdm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKmNvbnN0
IGtleXN0cm9rZSkKICB7CnN0ZDo6Y291dDw8Inh4eEtFWTogICI8PGtleXN0cm9rZS0+a2V5KCk8
PCdcbic7CiAgfQp9CgoKClR4Vm9ycGFsR1VJOjpUeFZvcnBhbEdVSSAoKQp7CiAgICB3aW5kb3cg
PSB0aGlzOwogICAgUVBpeG1hcCBwMSggcDFfeHBtICk7CiAgICBRUGl4bWFwIHAyKCBwMl94cG0g
KTsKICAgIFFQaXhtYXAgcDMoIHAzX3hwbSApOwoKICAgIFFQb3B1cE1lbnUgKmZpbGUgPSBuZXcg
UVBvcHVwTWVudSggdGhpcyApOwogICAgKHF0X2NoZWNrX3BvaW50ZXIoKGZpbGUpPT0wLCJUeFZv
cnBhbEdVSS5jcHAiLDIyMikpOwogICAgZmlsZS0+aW5zZXJ0SXRlbSggcDEsICImT3BlbiIsIHRo
aXMsICIxIiJvcGVuKCkiLCBDVFJMK0tleV9PICk7CiAgICBmaWxlLT5pbnNlcnRJdGVtKCBwMiwg
IiZOZXciLCB0aGlzLCAiMSIibmV3cygpIiwgQ1RSTCtLZXlfTiApOwogICAgZmlsZS0+aW5zZXJ0
SXRlbSggcDMsICImU2F2ZSIsIHRoaXMsICIxIiJzYXZlKCkiLCBDVFJMK0tleV9TICk7CiAgICBm
aWxlLT5pbnNlcnRJdGVtKCJTYXZlICZBcyIsIHRoaXMsICIxIiJzYXZlQXMoKSIsIENUUkwrS2V5
X0EgKTsKICAgIGZpbGUtPmluc2VydFNlcGFyYXRvcigpOwogICAgZmlsZS0+aW5zZXJ0SXRlbSgg
IkUmeGl0IiwgcUFwcCwgIjEiInF1aXQoKSIsIENUUkwrS2V5X1EgKTsKCiAgICBRUG9wdXBNZW51
ICplZGl0ID0gbmV3IFFQb3B1cE1lbnUoIHRoaXMgKTsKICAgIChxdF9jaGVja19wb2ludGVyKChl
ZGl0KT09MCwiVHhWb3JwYWxHVUkuY3BwIiwyMzEpKTsKICAgIGludCB1bmRvSUQgPSBlZGl0LT5p
bnNlcnRJdGVtKCAiJlVuZG8iLCB0aGlzLCAiMSIidW5kbygpIiApOwogICAgaW50IHJlZG9JRCA9
IGVkaXQtPmluc2VydEl0ZW0oICImUmVkbyIsIHRoaXMsICIxIiJyZWRvKCkiICk7CiAgICBlZGl0
LT5zZXRJdGVtRW5hYmxlZCggdW5kb0lELCBGQUxTRSApOwogICAgZWRpdC0+c2V0SXRlbUVuYWJs
ZWQoIHJlZG9JRCwgRkFMU0UgKTsKCiAgICBRUG9wdXBNZW51ICpoZWxwID0gbmV3IFFQb3B1cE1l
bnUoIHRoaXMgKTsKICAgIChxdF9jaGVja19wb2ludGVyKChoZWxwKT09MCwiVHhWb3JwYWxHVUku
Y3BwIiwyMzgpKTsKICAgIGhlbHAtPmluc2VydEl0ZW0oICImQWJvdXQiLCB0aGlzLCAiMSIiYWJv
dXQoKSIsIENUUkwrS2V5X0ggKTsKCiAgICBtZW51ID0gbmV3IFFNZW51QmFyKCB0aGlzICk7CiAg
ICAocXRfY2hlY2tfcG9pbnRlcigobWVudSk9PTAsIlR4Vm9ycGFsR1VJLmNwcCIsMjQyKSk7CiAg
ICBtZW51LT5pbnNlcnRJdGVtKCAiJkZpbGUiLCBmaWxlICk7CiAgICBtZW51LT5pbnNlcnRJdGVt
KCAiJkVkaXQiLCBlZGl0ICk7CiAgICBtZW51LT5pbnNlcnRTZXBhcmF0b3IoKTsKICAgIG1lbnUt
Pmluc2VydEl0ZW0oICImSGVscCIsIGhlbHAgKTsKICAgIG1lbnUtPnNldFNlcGFyYXRvciggUU1l
bnVCYXI6OkluV2luZG93c1N0eWxlICk7CgogICAgUVZCb3ggJnZib3ggPSAqbmV3IFFWQm94KHRo
aXMpOwogICAgUUhCb3ggJmJyb3dzZSA9ICpuZXcgUUhCb3goJnZib3gpOwogICAgKHRyZWUgPSBu
ZXcgUVRhYmxlKG5ldyBRSEdyb3VwQm94KCJDb250YWlubWVudCBoaWVyYXJjaHk6IiwmYnJvd3Nl
KSkpLT5zZXROdW1Db2xzKDMpOwogICAgdHJlZS0+c2V0U29ydGluZyhmYWxzZSk7CiAgICB0cmVl
LT5zZXRSZWFkT25seSh0cnVlKTsKICAgIHRyZWUtPnNldFNlbGVjdGlvbk1vZGUodHJlZS0+U2lu
Z2xlUm93KTsKICAgIFFIZWFkZXIgJmhlYWRlciA9ICp0cmVlLT5ob3Jpem9udGFsSGVhZGVyKCk7
CiAgICBoZWFkZXIuc2V0TGFiZWwoMCwiTGVnZW5kIik7CiAgICBoZWFkZXIuc2V0TGFiZWwoMSwi
UGFyZW50Iik7CiAgICBoZWFkZXIuc2V0TGFiZWwoMiwiQ2hpbGQiKTsKICAgIGNvbm5lY3QodHJl
ZSwiMiIiY3VycmVudENoYW5nZWQoaW50LGludCkiLHRoaXMsIjEiInRhYmxlUGljayhpbnQsaW50
KSIpOwogICAgKHRhYmxlID0gbmV3IFR4cUVkaXRUYWJsZShuZXcgUUhHcm91cEJveCgiVHhQYXJ0
IGRldGFpbHM6IiwmYnJvd3NlLDApKSktPnNldE1pbmltdW1TaXplKDQwMCwxNTApOwogICAgY29u
bmVjdCh0YWJsZSwiMiIidmFsdWVDaGFuZ2VkKGludCxpbnQpIix0aGlzLCIxIiJ0YWJsZUNoYW5n
ZShpbnQsaW50KSIpOwogICAgUUhHcm91cEJveCAmaGJveCA9ICpuZXcgUUhHcm91cEJveCgiTW91
c2UgdHJhY2tlcjoiLCZ2Ym94KTsKICAgIGNvbnN0IGludCBzdW5rZW4gPSBRRnJhbWU6OlBhbmVs
IHwgUUZyYW1lOjpTdW5rZW47CiAgICAocG9pbnRlciA9IG5ldyBRTGFiZWwoIjAgLCAwIiwmaGJv
eCkpLT5zZXRGcmFtZVN0eWxlKHN1bmtlbik7CiAgICAoaG92ZXIgPSBuZXcgUUxhYmVsKCIiLCZo
Ym94KSktPnNldEZyYW1lU3R5bGUoc3Vua2VuKTsKICAgIG5ldyBRQ2FudmFzVmlldyhsaW5lQ2Fu
dmFzID0gbmV3IFFDYW52YXMoMzAsMTApLCZoYm94KTsKICAgIChuZXcgVHhHcmlkVmlldyh2Ym94
KSktPnZpZXdwb3J0KCktPnNldE1vdXNlVHJhY2tpbmcodHJ1ZSk7CiAgICBzZXRDZW50cmFsV2lk
Z2V0KCZ2Ym94KTsKICAgIHNldE1pbmltdW1TaXplKCAxMDAsIDgwICk7CgogICAgUVRhYldpZGdl
dCAmdGFiYmVyID0gKm5ldyBRVGFiV2lkZ2V0KG5ldyBRSEdyb3VwQm94KCJBZGQgYSBuZXcgcGFy
dDoiLCZ2Ym94KSk7CiAgICBRSEJveCAmYmFyMiA9ICpuZXcgUUhCb3goKSwKICAgICAgICAgICZi
YXIgPSAqbmV3IFFIQm94KCksCiAgICAgICAgICAqIGNvbnN0IGJvdGhbXSA9IHsgJmJhciwgJmJh
cjIgfTsKICAgIChuZXcgUUxhYmVsKCJQYXJlbnQ6IiwmYmFyKSktPnNldEFsaWdubWVudChRdDo6
QWxpZ25SaWdodCk7CiAgICBjb25uZWN0KHBpY2tQYXJlbnQgPSBuZXcgUUNvbWJvQm94KCZiYXIp
LCIyIiJhY3RpdmF0ZWQoaW50KSIsdGhpcywiMSIiY29tYm9QaWNrKGludCkiKTsKICAgIChuZXcg
UUxhYmVsKCJUeFBhcnQ6IiwmYmFyKSktPnNldEFsaWdubWVudChRdDo6QWxpZ25SaWdodCk7CiAg
ICBjb25zdCBjaGFyICpjb25zdCB0YWJOYW1lc1tdID0geyAiQ2hpbGQiLCAiUGFyZW50IiB9LAog
ICAgICAgICAgICAgICAqY29uc3QgbGFiZWxzW11bNV0gPSB7IHsgIkJvdW5kYXJ5Q29uZGl0aW9u
IiwgIlBhcnRpY2xlU2luayIsICJQYXJ0aWNsZVNvdXJjZSIsICJJbml0aWFsQ29uZGl0aW9uIiwg
IlNwZWNpZXMiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAiRW1G
aWVsZCIsICJGbHVpZCIgfSB9LAogICAgICAgICAgICAgICAqY29uc3Qgc2xvdE5hbWVzW11bNV0g
PSB7IHsgIjEiIm5ld0JvdW5kYXJ5KCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIjEiIm5ld1NpbmsoKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiMSIibmV3U291cmNlKCkiLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjEiIm5ld0luaXRpYWwoKSIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiMSIibmV3U3BlY2llcygpIiB9LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIjEiIm5ld0VtRmllbGQoKSIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIibmV3Rmx1aWQoKSIgfSB9Owog
ICAgZm9yIChpbnQgdGFiSWR4ID0gMjsgMDx0YWJJZHg7ICkKICAgIHsKICAgICAgIGNvbnN0IGNo
YXIgKmNvbnN0KmNvbnN0IGJ1dHRvbkxhYmVscyA9IGxhYmVsc1stLXRhYklkeF0sCiAgICAgICAg
ICAgICAgICAgICpjb25zdCpjb25zdCB0aGVzZVNsb3RzID0gc2xvdE5hbWVzW3RhYklkeF07CiAg
ICAgICBRSEJveCAmaGJhciA9ICpib3RoW3RhYklkeF07CiAgICAgICBRUHVzaEJ1dHRvbiAqKmNv
bnN0IHNpYmxpbmdzID0gdG9vbEJ1dHRvbnNbdGFiSWR4XTsKICAgICAgIGZvciAoaW50IGlkeCA9
IHRhYklkeD8gMiA6IDU7IDA8aWR4LS07ICkKICAgICAgICAgIGNvbm5lY3Qoc2libGluZ3NbaWR4
XSA9IG5ldyBRUHVzaEJ1dHRvbihidXR0b25MYWJlbHNbaWR4XSwmaGJhciksIjIiInByZXNzZWQo
KSIsdGhpcyx0aGVzZVNsb3RzW2lkeF0pOwogICAgICAgdGFiYmVyLmFkZFRhYigmaGJhcix0YWJO
YW1lc1t0YWJJZHhdKTsKICAgIH0KICAgIHRhYmJlci5zZXRDdXJyZW50UGFnZSgxKTsKICAgIHNv
dXJjZUJydXNoID0gbmV3IFFCcnVzaChRdDo6d2hpdGUpOwogICAgZ3JpZFBlbiA9IG5ldyBRUGVu
KFF0OjpkYXJrR3JheSwxLFF0OjpEb3RMaW5lKTsKICAgIG5ld3MoKTsKfQoKCgplbnVtIFpvcmRl
ciB7IHpHcmlkLCB6RmllbGQsIHpTaW5rLCB6U291cmNlIH07CgoKCnN0YXRpYyBUeEhpZXJBdHRy
aWJTZXQgZG9jdW1lbnQoImRvY3VtZW50Iik7CgoKCnN0YXRpYyB2b2lkIGFkZFJlY3QgKGNvbnN0
IFR4SGllckF0dHJpYlNldCAmYm91bmRhcnksIGNvbnN0IFFDb2xvciAmY29sb3IsIGNvbnN0IFpv
cmRlciB6KQp7CiAgUUNhbnZhc1JlY3RhbmdsZSAmcmVjdGFuZ2xlID0gKm5ldyBRQ2FudmFzUmVj
dGFuZ2xlKFR4R3JpZFZpZXc6OmdldEdyaWRWaWV3KCkuY2FudmFzKCkpOwogIFR4Vm9ycGFsR1VJ
OjpzZXRCb3VuZHMocmVjdGFuZ2xlLGJvdW5kYXJ5KTsKICBjb25zdCBib29sIG9uVG9wID0gej4x
OwogIHJlY3RhbmdsZS5zZXRQZW4oKm5ldyBRUGVuKGNvbG9yLG9uVG9wPzM6NyxvblRvcD9RdDo6
RGFzaExpbmU6UXQ6OlNvbGlkTGluZSkpOwogIHJlY3RhbmdsZS5zZXRaKHopOwogIFR4UGFydDo6
YWRkKCZyZWN0YW5nbGUsYm91bmRhcnkpOwp9CgoKCnN0YXRpYyBUeEhpZXJBdHRyaWJTZXQmIG5l
d1BhcnQoY29uc3QgYm9vbCBpc0NoaWxkLAogIGNvbnN0IHVuc2lnbmVkIGludCBidXR0b25JZHgs
IGNvbnN0IHN0ZDo6c3RyaW5nICZraW5kKQp7CiAgIHN0YXRpYyBpbnQgdGFsbHk7CiAgIGNoYXIg
bmFtZVs1MF07CiAgIFFQdXNoQnV0dG9uICZwdXNoZWQgPSAqdG9vbEJ1dHRvbnNbaXNDaGlsZD8g
MCA6IDFdW2J1dHRvbklkeF07CiAgIFR4R3JpZFZpZXc6OnNldFB1c2hlZChwdXNoZWQpOwogICBj
b25zdCBjaGFyICp0eXBlTmFtZSA9IHB1c2hlZC50ZXh0KCk7CiAgIHNwcmludGYobmFtZSwiJXMl
ZCIsdHlwZU5hbWUsdGFsbHkrKyk7CiAgIFR4SGllckF0dHJpYlNldCAmbmV3YnkgPSAqbmV3IFR4
SGllckF0dHJpYlNldChuYW1lKTsKICAgbmV3Ynkuc2V0VHlwZSh0eXBlTmFtZSk7CiAgIG5ld2J5
LmFwcGVuZFN0cmluZygia2luZCIsa2luZCk7CiAgIHJldHVybiBuZXdieTsKfQoKCgpzdGF0aWMg
dm9pZCBhcHBlbmRQYXJlbnQgKFR4SGllckF0dHJpYlNldCYgbmV3YnkpCnsKICAgZG9jdW1lbnQu
YXBwZW5kQXR0cmliKG5ld2J5KTsKICAgcGxhY2UgPSAzOwogICBUeFBhcnQ6OmFkZChfX251bGws
bmV3YnkpOwogICBwbGFjZSA9IC0xOwogICBwaWNrUGFyZW50LT5pbnNlcnRJdGVtKFR4Vm9ycGFs
R1VJOjpnZXRUcmVlKCkudGV4dCgzLDEpKTsKICAgaWYgKDI+cGlja1BhcmVudC0+Y291bnQoKSkK
ICAgICAgd2luZG93LT5jb21ib1BpY2soMCk7CiAgIFR4Vm9ycGFsR1VJOjpkb1BpY2soMyk7Cn0K
CgoKdm9pZCBUeFZvcnBhbEdVSTo6bmV3RW1GaWVsZCAoKQp7CiAgIGFwcGVuZFBhcmVudChuZXdQ
YXJ0KGZhbHNlLDAsInllZUVtRmllbGQiKSk7Cn0KCgoKc3RhdGljIHN0ZDo6c3RyaW5nIGdldFBh
cmVudE5hbWUgKCkKewogICByZXR1cm4gcGlja1BhcmVudC0+Y3VycmVudFRleHQoKS5zZWN0aW9u
KCcgJywwLDApLmxhdGluMSgpOwp9CgoKCnN0YXRpYyBUeEhpZXJBdHRyaWJTZXQmIG5ld1BhcmVu
dCAoY29uc3QgYm9vbCBpc1NwZWNpZXMpCnsKICAgVHhIaWVyQXR0cmliU2V0ICZuZXdieSA9IG5l
d1BhcnQoaXNTcGVjaWVzLGlzU3BlY2llcz8gNCA6IDEsaXNTcGVjaWVzPyAicmVsQm9yaXMiIDog
InBvc0RlbkNSRmx1aWQiKTsKICAgbmV3YnkuYXBwZW5kUGFyYW0oImNoYXJnZSIsMCk7CiAgIG5l
d2J5LmFwcGVuZFBhcmFtKCJtYXNzIiwwKTsKICAgcmV0dXJuIG5ld2J5Owp9CgoKCnZvaWQgVHhW
b3JwYWxHVUk6Om5ld1NwZWNpZXMgKCkKewogICBUeEhpZXJBdHRyaWJTZXQgJm5ld2J5ID0gbmV3
UGFyZW50KHRydWUpOwogICBuZXdieS5hcHBlbmRQYXJhbSgibnVtUHRjbHNJbk1hY3JvIiwwKTsK
ICAgbmV3YnkuYXBwZW5kU3RyaW5nKCJlbUZpZWxkIixnZXRQYXJlbnROYW1lKCkpOwogICBhcHBl
bmRQYXJlbnQobmV3YnkpOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6Om5ld0ZsdWlkICgpCnsKICAg
YXBwZW5kUGFyZW50KG5ld1BhcmVudChmYWxzZSkpOwp9CgoKCnN0YXRpYyBUeEhpZXJBdHRyaWJT
ZXQmIG5ld0NoaWxkIChjb25zdCB1bnNpZ25lZCBpbnQgYnV0dG9uSWR4LAogIGNvbnN0IHN0ZDo6
c3RyaW5nICZraW5kKQp7CiAgIFR4SGllckF0dHJpYlNldCAmbmV3YnkgPSBuZXdQYXJ0KHRydWUs
YnV0dG9uSWR4LGtpbmQpOwogICBuZXdieS5hcHBlbmRPcHRpb24oIm1pbkRpbSIsMik7CiAgIHJl
dHVybiBuZXdieTsKfQoKCgpzdGF0aWMgVHhIaWVyQXR0cmliU2V0JiBuZXdCb3VuZGVkIChjb25z
dCB1bnNpZ25lZCBpbnQgYnV0dG9uSWR4LAogIGNvbnN0IHN0ZDo6c3RyaW5nICZraW5kKQp7CiAg
IFR4SGllckF0dHJpYlNldCAmbmV3YnkgPSBuZXdDaGlsZChidXR0b25JZHgsa2luZCk7CiAgIHN0
ZDo6dmVjdG9yPGludD4gYm91bmRzOwogICBib3VuZHMucHVzaF9iYWNrKDApOwogICBib3VuZHMu
cHVzaF9iYWNrKDEpOwogICBuZXdieS5hcHBlbmRPcHRWZWMoImxvd2VyQm91bmRzIixib3VuZHMp
OwogICBib3VuZHNbMF0gPSAxOwogICBib3VuZHNbMV0gPSAyOwogICBuZXdieS5hcHBlbmRPcHRW
ZWMoInVwcGVyQm91bmRzIixib3VuZHMpOwogICByZXR1cm4gbmV3Ynk7Cn0KCgoKc3RhdGljIHZv
aWQgYXBwZW5kQ2hpbGQgKFR4SGllckF0dHJpYlNldCYgbmV3YnkpCnsKICAgY29uc3Qgc3RkOjpz
dHJpbmcgcGFyZW50TmFtZShnZXRQYXJlbnROYW1lKCkpOwogICBUeEhpZXJBdHRyaWJTZXQgJnBh
cmVudCA9ICpuZXcgVHhIaWVyQXR0cmliU2V0KGRvY3VtZW50LmdldEF0dHJpYihwYXJlbnROYW1l
KSk7CiAgIHBhcmVudC5hcHBlbmRBdHRyaWIobmV3YnkpOwogICBkb2N1bWVudC5zZXRBdHRyaWIo
cGFyZW50KTsKICAgc3RkOjp2ZWN0b3I8VHhQYXJ0PiAmYWxsUGFydHMgPSBUeFBhcnQ6OmdldEFs
bFBhcnRzKCk7CiAgIHdoaWxlIChwYXJlbnROYW1lIT1hbGxQYXJ0c1srK3BsYWNlXS5nZXREYXRh
KCkuZ2V0T2JqZWN0TmFtZSgpKTsKICAgcGxhY2UrKzsKfQoKCgpzdGF0aWMgdm9pZCBuZXdDb25k
aXRpb24gKGNvbnN0IGJvb2wgaXNJbml0aWFsKQp7CiAgIFR4SGllckF0dHJpYlNldCAmbmV3Ynkg
PSBuZXdCb3VuZGVkKGlzSW5pdGlhbD8gMyA6IDAsImNvbnN0YW50Iik7CiAgIG5ld2J5LmFwcGVu
ZE9wdFZlYygiaW5kaWNlcyIsbmV3YnkuZ2V0T3B0VmVjKCJ1cHBlckJvdW5kcyIpKTsKICAgbmV3
YnkuYXBwZW5kUHJtVmVjKCJhbXBsaXR1ZGVzIixzdGQ6OnZlY3Rvcjxkb3VibGU+KDIsMCkpOwog
ICBhcHBlbmRDaGlsZChuZXdieSk7CiAgIGFkZFJlY3QobmV3YnkscGlja1BhcmVudC0+Y3VycmVu
dFRleHQoKS5zZWN0aW9uKCcgJywxLDEpPT0iKEVtRmllbGQpIj8gaXNJbml0aWFsPyBRdDo6Y3lh
biA6IFF0OjpyZWQgOiBpc0luaXRpYWw/IFF0Ojp5ZWxsb3cgOiBRdDo6bWFnZW50YSx6RmllbGQp
Owp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6Om5ld1NpbmsgKCkKewogICBUeEhpZXJBdHRyaWJTZXQg
Jm5ld2J5ID0gbmV3Qm91bmRlZCgxLCJhYnNvcmJlciIpOwogICBhcHBlbmRDaGlsZChuZXdieSk7
CiAgIGFkZFJlY3QobmV3YnksUXQ6OmdyZWVuLHpTaW5rKTsKfQoKCgpzdGF0aWMgdm9pZCBhZGRQ
b2ludCAoY29uc3QgVHhIaWVyQXR0cmliU2V0ICZzb3VyY2UpCnsKICBjb25zdCBzdGQ6OnZlY3Rv
cjxkb3VibGU+IHBvcyA9IHNvdXJjZS5nZXRQcm1WZWMoInhiYXIiKTsKICBRQ2FudmFzRWxsaXBz
ZSAmcG9pbnQgPSAqbmV3IFFDYW52YXNFbGxpcHNlKDYsNixUeEdyaWRWaWV3OjpnZXRHcmlkVmll
dygpLmNhbnZhcygpKTsKICBjb25zdCB1bnNpZ25lZCBpbnQgcGFkID0gVHhWb3JwYWxHVUk6OnBh
ZDsKICBwb2ludC5tb3ZlKHBvc1swXSpUeFZvcnBhbEdVSTo6Z2V0UmlnaHQoKStwYWQscG9zWzFd
KlR4Vm9ycGFsR1VJOjpnZXRCb3R0b20oKStwYWQpOwogIHBvaW50LnNldEJydXNoKCpzb3VyY2VC
cnVzaCk7CiAgcG9pbnQuc2V0Wih6U291cmNlKTsKICBUeFBhcnQ6OmFkZCgmcG9pbnQsc291cmNl
KTsKfQoKCgp2b2lkIFR4Vm9ycGFsR1VJOjpuZXdTb3VyY2UgKCkKewogICBUeEhpZXJBdHRyaWJT
ZXQgJm5ld2J5ID0gbmV3Q2hpbGQoMiwiZ2F1c3NTb3VyY2UiKTsKICAgbmV3YnkuYXBwZW5kT3B0
aW9uKCJudW1QdGNscyIsMSk7CiAgIG5ld2J5LmFwcGVuZE9wdGlvbigiYXBwbHlQZXJpb2QiLDAp
OwogICBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+IHRyaXBsZXQoMywwKTsKICAgbmV3YnkuYXBw
ZW5kUHJtVmVjKCJ4YmFyIix0cmlwbGV0KTsKICAgbmV3YnkuYXBwZW5kUHJtVmVjKCJ4c2lnIix0
cmlwbGV0KTsKICAgbmV3YnkuYXBwZW5kUHJtVmVjKCJ2YmFyIix0cmlwbGV0KTsKICAgbmV3Ynku
YXBwZW5kUHJtVmVjKCJ2c2lnIix0cmlwbGV0KTsKICAgYXBwZW5kQ2hpbGQobmV3YnkpOwogICBh
ZGRQb2ludChuZXdieSk7Cn0KCgoKdm9pZCBUeFZvcnBhbEdVSTo6bmV3SW5pdGlhbCAoKQp7CiAg
IG5ld0NvbmRpdGlvbih0cnVlKTsKfQoKCgp2b2lkIFR4Vm9ycGFsR1VJOjpuZXdCb3VuZGFyeSAo
KQp7CiAgIG5ld0NvbmRpdGlvbihmYWxzZSk7Cn0KCgoKc3RhdGljIHZvaWQgYWRkR3JpZExpbmUg
KGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgeDEsIGNvbnN0IGludCB5MSkK
ewogICBRQ2FudmFzTGluZSAmbGluZSA9ICpuZXcgUUNhbnZhc0xpbmUoVHhHcmlkVmlldzo6Z2V0
R3JpZFZpZXcoKS5jYW52YXMoKSk7CiAgIGxpbmUuc2V0UG9pbnRzKHgwLHkwLHgxLHkxKTsKICAg
bGluZS5zZXRQZW4oKmdyaWRQZW4pOwogICBsaW5lLnNob3coKTsKfQoKCgpzdGF0aWMgdm9pZCBh
ZGRSZWN0YW5nbGVzIChjb25zdCBUeEhpZXJBdHRyaWJTZXQgJmRvY3VtZW50LCBjb25zdCBzdGQ6
OnN0cmluZyAmcGFyZW50TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcgJmVkZ2VOYW1lLCBjb25zdCBRQ29sb3IgJmNvbG9yLCBjb25zdCBab3JkZXIgeiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBpc1BhcmVudE5ldyA9IHRydWUp
CnsKICBjb25zdCBib29sIG9uVG9wID0gej4xOwogIGNvbnN0IFFQZW4gJnBlbiA9ICpuZXcgUVBl
bihjb2xvcixvblRvcD8zOjcsb25Ub3A/UXQ6OkRhc2hMaW5lOlF0OjpTb2xpZExpbmUpOwogIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXJlbnROYW1lcyA9IGRvY3VtZW50LmdldE5hbWVzT2ZU
eXBlKHBhcmVudE5hbWUpOwogIGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjppdGVyYXRv
ciBpdCA9IHBhcmVudE5hbWVzLmJlZ2luKCk7IGl0PHBhcmVudE5hbWVzLmVuZCgpOyApCiAgewog
ICAgIGNvbnN0IFR4SGllckF0dHJpYlNldCBwYXJlbnQgPSBkb2N1bWVudC5nZXRBdHRyaWIoKml0
KyspOwogICAgIGlmIChpc1BhcmVudE5ldykKICAgICB7CiAgICAgICAgVHhQYXJ0OjphZGQoX19u
dWxsLHBhcmVudCk7CiAgICAgICAgcGlja1BhcmVudC0+aW5zZXJ0SXRlbShUeFZvcnBhbEdVSTo6
Z2V0VHJlZSgpLnRleHQoVHhQYXJ0OjpnZXRBbGxQYXJ0cygpLnNpemUoKS0xLDEpKTsKICAgICB9
CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGJvdW5kYXJ5TmFtZXMgPSBwYXJlbnQuZ2V0
TmFtZXNPZlR5cGUoZWRnZU5hbWUpOwogICAgIGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
OjppdGVyYXRvciBpdCA9IGJvdW5kYXJ5TmFtZXMuYmVnaW4oKTsgaXQ8Ym91bmRhcnlOYW1lcy5l
bmQoKTsgKQogICAgIHsKICAgICAgICBjb25zdCBUeEhpZXJBdHRyaWJTZXQgYm91bmRhcnkgPSBw
YXJlbnQuZ2V0QXR0cmliKCppdCsrKTsKICAgICAgICBpZiAoYm91bmRhcnkuaGFzT3B0aW9uKCJt
aW5EaW0iKSYmMjxib3VuZGFyeS5nZXRPcHRpb24oIm1pbkRpbSIpKQogICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgIFFDYW52YXNSZWN0YW5nbGUgJnJlY3RhbmdsZSA9ICpuZXcgUUNhbnZhc1Jl
Y3RhbmdsZShUeEdyaWRWaWV3OjpnZXRHcmlkVmlldygpLmNhbnZhcygpKTsKICAgICAgICBUeFZv
cnBhbEdVSTo6c2V0Qm91bmRzKHJlY3RhbmdsZSxib3VuZGFyeSk7CiAgICAgICAgcmVjdGFuZ2xl
LnNldFBlbihwZW4pOwogICAgICAgIHJlY3RhbmdsZS5zZXRaKHopOwogICAgICAgIFR4UGFydDo6
YWRkKCZyZWN0YW5nbGUsYm91bmRhcnkpOwogICAgIH0KICB9Cn0KCgoKc3RhdGljIHZvaWQgdXBk
YXRlRG9jdW1lbnQgKCkKewogICBUeEhpZXJBdHRyaWJTZXQgKnBhcmVudCA9IF9fbnVsbDsKICAg
c3RkOjp2ZWN0b3I8VHhQYXJ0PiAmYWxsUGFydHMgPSBUeFBhcnQ6OmdldEFsbFBhcnRzKCk7CiAg
IFFUYWJsZSAmdHJlZSA9IFR4Vm9ycGFsR1VJOjpnZXRUcmVlKCk7CiAgIGZvciAoaW50IHJvdyA9
IDA7ICsrcm93PHRyZWUubnVtUm93cygpOyApCiAgIHsKICAgICAgVHhIaWVyQXR0cmliU2V0ICZw
YXJ0ID0gYWxsUGFydHNbcm93XS5nZXREYXRhKCk7CiAgICAgIGlmICh0cmVlLnRleHQocm93LDEp
LmlzTnVsbCgpKQogICAgICB7CiAgICAgICAgIHBhcmVudC0+aGFzQXR0cmliKHBhcnQuZ2V0T2Jq
ZWN0TmFtZSgpKT8gcGFyZW50LT5zZXRBdHRyaWIocGFydCkgOiB2b2lkKHBhcmVudC0+YXBwZW5k
QXR0cmliKHBhcnQpKTsKICAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHBhcmVu
dCkKICAgICAgICAgZG9jdW1lbnQuc2V0QXR0cmliKCpwYXJlbnQpOwogICAgICBwYXJlbnQgPSAm
cGFydDsKICAgfQogICBkb2N1bWVudC5zZXRBdHRyaWIoKnBhcmVudCk7Cn0KCgoKc3RhdGljIFFT
dHJpbmcgZmlsZU5hbWU7CgoKCnZvaWQgVHhWb3JwYWxHVUk6Om9wZW4gKGNvbnN0IGNoYXIgKmNv
bnN0IG5hbWUpCnsKICAgIHN0ZDo6dmVjdG9yPFR4UGFydD4gJmFsbFBhcnRzID0gVHhQYXJ0Ojpn
ZXRBbGxQYXJ0cygpOwogICAgYWxsUGFydHMuY2xlYXIoKTsKICAgIHBsYWNlID0gLTE7CiAgICBw
aWNrUGFyZW50LT5jbGVhcigpOwogICAgdHJlZS0+c2V0TnVtUm93cygwKTsKICAgIFR4R3JpZFZp
ZXc6OmNsZWFyKCk7CiAgICBpZiAobmFtZSkKICAgIHsKICAgICAgIGRvY3VtZW50LmVtcHR5KCk7
CiAgICAgICBzdGQ6Omlmc3RyZWFtIGlucHV0KGZpbGVOYW1lID0gbmFtZSk7CiAgICAgICBpbnB1
dCA+PiBkb2N1bWVudDsKICAgICAgIHN0ZDo6Y291dDw8IlJFQUQgQ09NUExFVEVcbiI7CiAgICB9
CiAgICBUeFBhcnQ6OmFkZChfX251bGwsZG9jdW1lbnQpOwogICAgVHhQYXJ0OjphZGQoX19udWxs
LGRvY3VtZW50LmdldEF0dHJpYihkb2N1bWVudC5nZXROYW1lc09mVHlwZSgiR3JpZCIpWzBdKSk7
CiAgICBUeFBhcnQ6OmFkZChfX251bGwsZG9jdW1lbnQuZ2V0QXR0cmliKGRvY3VtZW50LmdldE5h
bWVzT2ZUeXBlKCJEZWNvbXAiKVswXSkpOwojIDU5NCAiVHhWb3JwYWxHVUkuY3BwIgogICAgY29u
c3QgVHhIaWVyQXR0cmliU2V0ICZncmlkID0gYWxsUGFydHNbMV0uZ2V0RGF0YSgpOwogICAgY29u
c3Qgc3RkOjp2ZWN0b3I8aW50PiBzaXplID0gZ3JpZC5nZXRPcHRWZWMoIm51bVBoeXNDZWxscyIp
OwogICAgY29uc3QgdW5zaWduZWQgaW50IHdpZHRoID0gc2l6ZVswXSwKICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQgPSBzaXplWzFdOwogICAgcmlnaHQgPSB3aWR0aCpzY2FsZTsKICAgIGJv
dHRvbSA9IGhlaWdodCpzY2FsZTsKICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhSaWdodCA9IHJp
Z2h0KzIqcGFkLAogICAgICAgICAgICAgICAgICAgICAgIG1heEJvdHRvbSA9IGJvdHRvbSsyKnBh
ZDsKICAgIFR4R3JpZFZpZXc6OmdldEdyaWRWaWV3KCkuY2FudmFzKCktPnJlc2l6ZShtYXhSaWdo
dCtwYWQsbWF4Qm90dG9tK3BhZCk7CiAgICBmb3IgKGludCBpZHggPSB3aWR0aCsxOyBpZHg7ICkK
ICAgIHsKICAgICAgIGNvbnN0IGludCBwb3MgPSAtLWlkeCpzY2FsZStwYWQ7CiAgICAgICBhZGRH
cmlkTGluZShwb3MsMCxwb3MsbWF4Qm90dG9tKTsKICAgIH0KICAgIGZvciAoaW50IGlkeCA9IGhl
aWdodCsxOyBpZHg7ICkKICAgIHsKICAgICAgIGNvbnN0IGludCBwb3MgPSAtLWlkeCpzY2FsZStw
YWQ7CiAgICAgICBhZGRHcmlkTGluZSgwLHBvcyxtYXhSaWdodCxwb3MpOwogICAgfQogICAgYWRk
UmVjdGFuZ2xlcyhkb2N1bWVudCwiRW1GaWVsZCIsIkJvdW5kYXJ5Q29uZGl0aW9uIixRdDo6cmVk
LHpGaWVsZCk7CiAgICBhZGRSZWN0YW5nbGVzKGRvY3VtZW50LCJFbUZpZWxkIiwiSW5pdGlhbENv
bmRpdGlvbiIsUXQ6OmN5YW4sekZpZWxkLGZhbHNlKTsKICAgIGFkZFJlY3RhbmdsZXMoZG9jdW1l
bnQsIkZsdWlkIiwiQm91bmRhcnlDb25kaXRpb24iLFF0OjptYWdlbnRhLHpGaWVsZCk7CiAgICBh
ZGRSZWN0YW5nbGVzKGRvY3VtZW50LCJGbHVpZCIsIkluaXRpYWxDb25kaXRpb24iLFF0Ojp5ZWxs
b3csekZpZWxkLGZhbHNlKTsKICAgIGFkZFJlY3RhbmdsZXMoZG9jdW1lbnQsIlNwZWNpZXMiLCJQ
YXJ0aWNsZVNpbmsiLFF0OjpncmVlbix6U2luayk7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gc3BlY2llc05hbWVzID0gZG9jdW1lbnQuZ2V0TmFtZXNPZlR5cGUoIlNwZWNpZXMiKTsKICAg
IGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjppdGVyYXRvciBpdCA9IHNwZWNpZXNOYW1l
cy5iZWdpbigpOyBpdDxzcGVjaWVzTmFtZXMuZW5kKCk7ICkKICAgIHsKICAgICAgIGNvbnN0IFR4
SGllckF0dHJpYlNldCBzcGVjaWVzID0gZG9jdW1lbnQuZ2V0QXR0cmliKCppdCsrKTsKICAgICAg
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb3VyY2VOYW1lcyA9IHNwZWNpZXMuZ2V0TmFtZXNP
ZlR5cGUoIlBhcnRpY2xlU291cmNlIik7CiAgICAgICBmb3Ioc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+OjppdGVyYXRvciBpdCA9IHNvdXJjZU5hbWVzLmJlZ2luKCk7IGl0PHNvdXJjZU5hbWVzLmVu
ZCgpOyBhZGRQb2ludChzcGVjaWVzLmdldEF0dHJpYigqaXQrKykpKTsKICAgIH0KICAgIHRyZWUt
PmFkanVzdENvbHVtbigyKTsKICAgIHdpbmRvdy0+Y29tYm9QaWNrKHBpY2tQYXJlbnQtPmNvdW50
KCk/IHBpY2tQYXJlbnQtPmN1cnJlbnRJdGVtKCkgOiAtMSk7CiAgICBUeEdyaWRWaWV3OjpnZXRH
cmlkVmlldygpLmNhbnZhcygpLT51cGRhdGUoKTsKICBzdGQ6OmNvdXQ8PCJcblNVQ0NFU1MhXG4i
Owp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnRhYmxlQ2hhbmdlIChpbnQgcm93LCBjb25zdCBpbnQg
Y29sKQp7CiAgIGlmICgxIT1jb2wgfHwgMSE9dHJlZS0+Y3VycmVudFJvdygpKQogICAgICByZXR1
cm47CiAgIFFTdHJpbmcgdGV4dDsKICAgZm9yICggOyAodGV4dCA9IHRhYmxlLT50ZXh0KHJvdyww
KSkuc3RhcnRzV2l0aCgiIFsgIik7IHJvdy0tKTsKICAgaWYgKCIgbnVtUGh5c0NlbGxzIiE9dGV4
dCkKICAgICAgcmV0dXJuOwogICB1cGRhdGVEb2N1bWVudCgpOwogICBvcGVuKF9fbnVsbCk7Cn0K
CgoKc3RhdGljIGJvb2wgaXNOZXc7CgoKCnZvaWQgVHhWb3JwYWxHVUk6Om9wZW4oKQp7CiAgICBj
b25zdCBRU3RyaW5nIG5hbWUgPSBRRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lKCIqLmluIik7
CiAgICBpZiAobmFtZS5pc051bGwoKSkKICAgICAgIHJldHVybjsKICAgIGlzTmV3ID0gZmFsc2U7
CiAgICBvcGVuKG5hbWUpOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnNhdmVBcyAoKQp7CiAgICBj
b25zdCBRU3RyaW5nIG5hbWUgPSBRRmlsZURpYWxvZzo6Z2V0U2F2ZUZpbGVOYW1lKCIqLmluIik7
CiAgICBpZiAobmFtZS5pc051bGwoKSkKICAgICAgIHJldHVybjsKICAgIGlzTmV3ID0gZmFsc2U7
CiAgICBmaWxlTmFtZSA9IG5hbWU7CiAgICBzYXZlKCk7Cn0KCgoKdm9pZCBUeFZvcnBhbEdVSTo6
bmV3cygpCnsKICAgaXNOZXcgPSB0cnVlOwogICBvcGVuKCJub3BlcmRlY29tcDIuaW4iKTsKfQoK
Cgp2b2lkIFR4Vm9ycGFsR1VJOjpzYXZlKCkKewogICBpZiAoaXNOZXcpCiAgIHsKICAgICBzYXZl
QXMoKTsKICAgICByZXR1cm47CiAgIH0KICAgdXBkYXRlRG9jdW1lbnQoKTsKICAgc3RkOjpvZnN0
cmVhbSBvdXQoZmlsZU5hbWUubGF0aW4xKCkpOwogICBkb2N1bWVudC53cml0ZShvdXQsZmFsc2Up
Owp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnVuZG8oKQp7CiAgICBleHBsYWluKCAiRWRpdC9VbmRv
IHNlbGVjdGVkIiApOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnJlZG8oKQp7CiAgICBleHBsYWlu
KCAiRWRpdC9SZWRvIHNlbGVjdGVkIiApOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OmFib3V0KCkK
ewogICAgUU1lc3NhZ2VCb3g6OmFib3V0KCB0aGlzLCAiVm9ycGFsIGVkaXRvciBHVUkiLAogICAg
ICAiV1lTSVdJRyBlZGl0aW5nIG9mIFZvcnBhbCBpbnB1dCBmaWxlcy5cbkNvcHlyaWdodCBUZWNo
LVggY29ycG9yYXRpb24uXG5odHRwOi8vd3d3LnRlY2h4aG9tZS5jb20iICk7Cn0KCgoKdm9pZCBU
eFZvcnBhbEdVSTo6cmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqICkKewoKfQoKCnZvaWQgVHhW
b3JwYWxHVUk6OmtleVByZXNzRXZlbnQoIFFLZXlFdmVudCAqY29uc3Qga2V5c3Ryb2tlKQp7CnN0
ZDo6Y291dDw8IktFWTogICI8PGtleXN0cm9rZS0+a2V5KCk8PCdcbic7Cn0KCgppbnQgbWFpbigg
aW50IGFyZ2MsIGNoYXIgKiogYXJndiApCnsKICAgIFFBcHBsaWNhdGlvbiBhKCBhcmdjLCBhcmd2
ICk7CiAgICBUeFZvcnBhbEdVSSBtOwogICAgbS5zZXRDYXB0aW9uKCJWT1JQQUwgZWRpdG9yIEdV
SSIpOwogICAgYS5zZXRNYWluV2lkZ2V0KCAmbSApOwogICAgbS5zaG93KCk7CiAgICByZXR1cm4g
YS5leGVjKCk7Cn0K


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