nullary FFI's

Stephen Weeks MLton@sourcelight.com
Thu, 31 Aug 2000 17:36:24 -0700 (PDT)


--DUNoO8KKGJ
Content-Type: text/plain; charset=us-ascii
Content-Description: message body text
Content-Transfer-Encoding: 7bit


> What's interesting about this is the fact that the nullary FFI's aren't
> doing anything.  I tried rigging prim.fun to get nullary FFI's to be
> considered functional, but that didn't get rid of them.

Hmm.  I guess your rigging just went awry.  I modified prim.fun to make them
DependsOnState (better than functional since we don't know they're constant,
right?) and the cps shrinker got rid of them (since they aren't side effecting).
Anyways, here's the modified prim.fun.  It works with the 20000825 version, but
may also work with earlier versions.



--DUNoO8KKGJ
Content-Type: application/octet-stream
Content-Description: prim.fun
Content-Transfer-Encoding: base64

KCogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4KICogUGxl
YXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgogKikKKCoK
ICogSWYgeW91IGFkZCBuZXcgcHJpbWl0aXZlcywgeW91IG1heSBuZWVkIHRvIG1vZGlmeSBiYWNr
ZW5kL21hY2hpbmUuZnVuLgogKiBJZiB5b3UgYWRkIG5ldyBwb2x5bW9ycGhpYyBwcmltaXRpdmVz
LCB5b3Ugc2hvdWxkIGFsc28gbW9kaWZ5CiAqIGF0b21zL2V4dHJhY3QtdGFyZ3MuZnVuLgogKikK
ZnVuY3RvciBQcmltKFM6IFBSSU1fU1RSVUNUUyk6IFBSSU0gPSAKc3RydWN0CgpvcGVuIFMKCmxv
Y2FsIG9wZW4gVHlwZQppbgogICBzdHJ1Y3R1cmUgVHljb24gPSBUeWNvbgogICBzdHJ1Y3R1cmUg
VHl2YXIgPSBUeXZhcgplbmQKCnN0cnVjdHVyZSBLaW5kID0KICAgc3RydWN0CiAgICAgIGRhdGF0
eXBlIHQgPQoJIERlcGVuZHNPblN0YXRlCiAgICAgICB8IEZ1bmN0aW9uYWwKICAgICAgIHwgTW92
ZWFibGUKICAgICAgIHwgU2lkZUVmZmVjdAogICBlbmQKCnN0cnVjdHVyZSBOYW1lID0KICAgc3Ry
dWN0CiAgICAgIGRhdGF0eXBlIHQgPQoJIEFycmF5X2FycmF5CiAgICAgICB8IEFycmF5X2xlbmd0
aAogICAgICAgfCBBcnJheV9zdWIKICAgICAgIHwgQXJyYXlfdXBkYXRlCiAgICAgICB8IEJ5dGVf
Ynl0ZVRvQ2hhcgogICAgICAgfCBCeXRlX2NoYXJUb0J5dGUKICAgICAgIHwgQ19DU19jaGFyQXJy
YXlUb1dvcmQ4QXJyYXkKICAgICAgIHwgQ2hhcl9sdAogICAgICAgfCBDaGFyX2xlCiAgICAgICB8
IENoYXJfZ3QKICAgICAgIHwgQ2hhcl9nZQogICAgICAgfCBDaGFyX2NocgogICAgICAgfCBDaGFy
X29yZAogICAgICAgfCBDb25zdGFudCBvZiBzdHJpbmcKICAgICAgIHwgQ3BvaW50ZXJfaXNOdWxs
CiAgICAgICB8IEV4bl9uYW1lCiAgICAgICB8IEV4bl9zZXRUb3BMZXZlbEhhbmRsZXIKICAgICAg
IHwgRkZJIG9mIHN0cmluZwogICAgICAgfCBHQ19jb2xsZWN0CiAgICAgICB8IEludF9tdWwKICAg
ICAgIHwgSW50X2FkZAogICAgICAgfCBJbnRfc3ViCiAgICAgICB8IEludF9sdAogICAgICAgfCBJ
bnRfbGUKICAgICAgIHwgSW50X2d0CiAgICAgICB8IEludF9nZQogICAgICAgfCBJbnRfZ2V1CiAg
ICAgICB8IEludF9ndHUKICAgICAgIHwgSW50X3F1b3QKICAgICAgIHwgSW50X3JlbQogICAgICAg
fCBJbnRfbmVnCiAgICAgICB8IEludEluZl9hZGQKICAgICAgIHwgSW50SW5mX2FyZVNtYWxsCiAg
ICAgICB8IEludEluZl9mcm9tV29yZAogICAgICAgfCBJbnRJbmZfZnJvbUFycmF5CiAgICAgICB8
IEludEluZl9pc1NtYWxsCiAgICAgICB8IEludEluZl9tdWwKICAgICAgIHwgSW50SW5mX25lZwog
ICAgICAgfCBJbnRJbmZfcXVvdAogICAgICAgfCBJbnRJbmZfcmVtCiAgICAgICB8IEludEluZl9z
dWIKICAgICAgIHwgSW50SW5mX3RvU3RyaW5nCiAgICAgICB8IEludEluZl90b1ZlY3RvcgogICAg
ICAgfCBJbnRJbmZfdG9Xb3JkCiAgICAgICB8IE1MdG9uX2JvZ3VzCiAgICAgICB8IE1MdG9uX2Rl
c2VyaWFsaXplCiAgICAgICB8IE1MdG9uX2VxCiAgICAgICB8IE1MdG9uX2VxdWFsCiAgICAgICB8
IE1MdG9uX2hhbHQKICAgICAgIHwgTUx0b25fc2VyaWFsaXplCiAgICAgICB8IE1MdG9uX3NpemUK
ICAgICAgIHwgUmVhbF9NYXRoX2Fjb3MKICAgICAgIHwgUmVhbF9NYXRoX2FzaW4KICAgICAgIHwg
UmVhbF9NYXRoX2F0YW4KICAgICAgIHwgUmVhbF9NYXRoX2F0YW4yCiAgICAgICB8IFJlYWxfTWF0
aF9jb3MKICAgICAgIHwgUmVhbF9NYXRoX2Nvc2gKICAgICAgIHwgUmVhbF9NYXRoX2V4cAogICAg
ICAgfCBSZWFsX01hdGhfbG4KICAgICAgIHwgUmVhbF9NYXRoX2xvZzEwIAogICAgICAgfCBSZWFs
X01hdGhfcG93CiAgICAgICB8IFJlYWxfTWF0aF9zaW4KICAgICAgIHwgUmVhbF9NYXRoX3NpbmgK
ICAgICAgIHwgUmVhbF9NYXRoX3NxcnQKICAgICAgIHwgUmVhbF9NYXRoX3RhbgogICAgICAgfCBS
ZWFsX01hdGhfdGFuaAogICAgICAgfCBSZWFsX25lcXVhbAogICAgICAgfCBSZWFsX211bAogICAg
ICAgfCBSZWFsX211bGFkZAogICAgICAgfCBSZWFsX211bHN1YgogICAgICAgfCBSZWFsX2FkZAog
ICAgICAgfCBSZWFsX3N1YgogICAgICAgfCBSZWFsX2RpdgogICAgICAgfCBSZWFsX2x0CiAgICAg
ICB8IFJlYWxfbGUKICAgICAgIHwgUmVhbF9lcXVhbAogICAgICAgfCBSZWFsX2d0CiAgICAgICB8
IFJlYWxfZ2UKICAgICAgIHwgUmVhbF9xZXF1YWwKICAgICAgIHwgUmVhbF9hYnMKICAgICAgIHwg
UmVhbF9jb3B5c2lnbgogICAgICAgfCBSZWFsX2ZyZXhwCiAgICAgICB8IFJlYWxfZnJvbUludAog
ICAgICAgfCBSZWFsX2xkZXhwCiAgICAgICB8IFJlYWxfbW9kZgogICAgICAgfCBSZWFsX3RvSW50
CiAgICAgICB8IFJlYWxfbmVnCSAgICAgCiAgICAgICB8IFJlZl9hc3NpZ24KICAgICAgIHwgUmVm
X2RlcmVmCiAgICAgICB8IFJlZl9yZWYKICAgICAgIHwgU3RyaW5nX2VxdWFsCiAgICAgICB8IFN0
cmluZ19mcm9tQ2hhclZlY3RvcgogICAgICAgfCBTdHJpbmdfZnJvbVdvcmQ4VmVjdG9yCiAgICAg
ICB8IFN0cmluZ19zaXplCiAgICAgICB8IFN0cmluZ19zdWIKICAgICAgIHwgU3RyaW5nX3RvQ2hh
clZlY3RvcgogICAgICAgfCBTdHJpbmdfdG9Xb3JkOFZlY3RvcgogICAgICAgfCBUaHJlYWRfY29w
eQogICAgICAgfCBUaHJlYWRfY29weVNocmluawogICAgICAgfCBUaHJlYWRfZmluaXNoSGFuZGxl
cgogICAgICAgfCBUaHJlYWRfc3dpdGNoVG8KICAgICAgIHwgVGhyZWFkX3N3aXRjaFRvQ29udAog
ICAgICAgfCBWZWN0b3JfZnJvbUFycmF5CiAgICAgICB8IFZlY3Rvcl9sZW5ndGgKICAgICAgIHwg
VmVjdG9yX3N1YgogICAgICAgfCBXb3JkOF9tdWwKICAgICAgIHwgV29yZDhfYWRkCiAgICAgICB8
IFdvcmQ4X3N1YgogICAgICAgfCBXb3JkOF9sdAogICAgICAgfCBXb3JkOF9sc2hpZnQKICAgICAg
IHwgV29yZDhfbGUKICAgICAgIHwgV29yZDhfZ3QKICAgICAgIHwgV29yZDhfZ2UKICAgICAgIHwg
V29yZDhfcnNoaWZ0CiAgICAgICB8IFdvcmQ4X2FuZGIKICAgICAgIHwgV29yZDhfZGl2CiAgICAg
ICB8IFdvcmQ4X2Zyb21JbnQKICAgICAgIHwgV29yZDhfZnJvbUxhcmdlV29yZAogICAgICAgfCBX
b3JkOF9tb2QKICAgICAgIHwgV29yZDhfbm90YgogICAgICAgfCBXb3JkOF9vcmIKICAgICAgIHwg
V29yZDhfdG9JbnQKICAgICAgIHwgV29yZDhfdG9JbnRYCiAgICAgICB8IFdvcmQ4X3RvTGFyZ2VX
b3JkCiAgICAgICB8IFdvcmQ4X3RvTGFyZ2VXb3JkWAogICAgICAgfCBXb3JkOF94b3JiCiAgICAg
ICB8IFdvcmQ4X2Fyc2hpZnQKICAgICAgIHwgV29yZDhBcnJheV9zdWJXb3JkCiAgICAgICB8IFdv
cmQ4QXJyYXlfdXBkYXRlV29yZAogICAgICAgfCBXb3JkOFZlY3Rvcl9zdWJXb3JkCiAgICAgICB8
IFdvcmQzMl9tdWwKICAgICAgIHwgV29yZDMyX2FkZAogICAgICAgfCBXb3JkMzJfc3ViCiAgICAg
ICB8IFdvcmQzMl9sdAogICAgICAgfCBXb3JkMzJfbHNoaWZ0CiAgICAgICB8IFdvcmQzMl9sZQog
ICAgICAgfCBXb3JkMzJfZ3QKICAgICAgIHwgV29yZDMyX2dlCiAgICAgICB8IFdvcmQzMl9yc2hp
ZnQKICAgICAgIHwgV29yZDMyX2FuZGIKICAgICAgIHwgV29yZDMyX2RpdgogICAgICAgfCBXb3Jk
MzJfZnJvbUludAogICAgICAgfCBXb3JkMzJfbW9kCiAgICAgICB8IFdvcmQzMl9ub3RiCiAgICAg
ICB8IFdvcmQzMl9vcmIKICAgICAgIHwgV29yZDMyX3RvSW50WAogICAgICAgfCBXb3JkMzJfeG9y
YgogICAgICAgfCBXb3JkMzJfYXJzaGlmdAogICAgICAgfCBXb3JsZF9zYXZlCgogICAgICB2YWwg
ZW50ZXJzUnVudGltZSA9CgkgZm4gQXJyYXlfYXJyYXkgPT4gdHJ1ZQoJICB8IEdDX2NvbGxlY3Qg
PT4gdHJ1ZQoJICB8IE1MdG9uX2Rlc2VyaWFsaXplID0+IHRydWUKCSAgfCBNTHRvbl9oYWx0ID0+
IHRydWUKCSAgfCBNTHRvbl9zZXJpYWxpemUgPT4gdHJ1ZQoJICB8IFRocmVhZF9jb3B5ID0+IHRy
dWUKCSAgfCBUaHJlYWRfY29weVNocmluayA9PiB0cnVlCgkgIHwgVGhyZWFkX2ZpbmlzaEhhbmRs
ZXIgPT4gdHJ1ZQoJICB8IFRocmVhZF9zd2l0Y2hUbyA9PiB0cnVlCgkgIHwgVGhyZWFkX3N3aXRj
aFRvQ29udCA9PiB0cnVlCgkgIHwgV29ybGRfc2F2ZSA9PiB0cnVlCgkgIHwgXyA9PiBmYWxzZQoK
ICAgICAgdmFsIGlzQXJyYXlBbGxvY2F0aW9uID0gCgkgZm4gQXJyYXlfYXJyYXkgPT4gdHJ1ZQoJ
ICB8IF8gPT4gZmFsc2UKCiAgICAgIGRhdGF0eXBlIHogPSBkYXRhdHlwZSBLaW5kLnQKCSAgICAg
ICAKICAgICAgKCogVGhlIHZhbHVlcyBvZiB0aGVzZSBzdHJpbmdzIGFyZSBpbXBvcnRhbnQgc2lu
Y2UgdGhleSBhcmUgcmVmZXJyZWQgdG8KICAgICAgICogaW4gdGhlIGJhc2lzIGxpYnJhcnkgY29k
ZS4gIFNlZSBiYXNpcy1saWJyYXJ5L21pc2MvcHJpbWl0aXZlLnNtbC4KICAgICAgICopCiAgICAg
IHZhbCBzdHJpbmdzID0KCSBbCgkgIChBcnJheV9hcnJheSwgTW92ZWFibGUsICJBcnJheV9hcnJh
eSIpLAoJICAoQXJyYXlfbGVuZ3RoLCBGdW5jdGlvbmFsLCAiQXJyYXlfbGVuZ3RoIiksCgkgIChB
cnJheV9zdWIsIERlcGVuZHNPblN0YXRlLCAiQXJyYXlfc3ViIiksCgkgIChBcnJheV91cGRhdGUs
IFNpZGVFZmZlY3QsICJBcnJheV91cGRhdGUiKSwKCSAgKEJ5dGVfYnl0ZVRvQ2hhciwgRnVuY3Rp
b25hbCwgIkJ5dGVfYnl0ZVRvQ2hhciIpLAoJICAoQnl0ZV9jaGFyVG9CeXRlLCBGdW5jdGlvbmFs
LCAiQnl0ZV9jaGFyVG9CeXRlIiksCgkgIChDX0NTX2NoYXJBcnJheVRvV29yZDhBcnJheSwgRGVw
ZW5kc09uU3RhdGUsCgkgICAiQ19DU19jaGFyQXJyYXlUb1dvcmQ4QXJyYXkiKSwKCSAgKENoYXJf
bHQsIEZ1bmN0aW9uYWwsICJDaGFyX2x0IiksCgkgIChDaGFyX2xlLCBGdW5jdGlvbmFsLCAiQ2hh
cl9sZSIpLAoJICAoQ2hhcl9ndCwgRnVuY3Rpb25hbCwgIkNoYXJfZ3QiKSwKCSAgKENoYXJfZ2Us
IEZ1bmN0aW9uYWwsICJDaGFyX2dlIiksCgkgIChDaGFyX2NociwgRnVuY3Rpb25hbCwgIkNoYXJf
Y2hyIiksCgkgIChDaGFyX29yZCwgRnVuY3Rpb25hbCwgIkNoYXJfb3JkIiksCgkgIChDcG9pbnRl
cl9pc051bGwsIEZ1bmN0aW9uYWwsICJDcG9pbnRlcl9pc051bGwiKSwKCSAgKEV4bl9uYW1lLCBG
dW5jdGlvbmFsLCAiRXhuX25hbWUiKSwKCSAgKEV4bl9zZXRUb3BMZXZlbEhhbmRsZXIsIFNpZGVF
ZmZlY3QsICJFeG5fc2V0VG9wTGV2ZWxIYW5kbGVyIiksCgkgIChHQ19jb2xsZWN0LCBTaWRlRWZm
ZWN0LCAiR0NfY29sbGVjdCIpLAoJICAoSW50X211bCwgRnVuY3Rpb25hbCwgIkludF9tdWwiKSwK
CSAgKEludF9hZGQsIEZ1bmN0aW9uYWwsICJJbnRfYWRkIiksCgkgIChJbnRfc3ViLCBGdW5jdGlv
bmFsLCAiSW50X3N1YiIpLAoJICAoSW50X2x0LCBGdW5jdGlvbmFsLCAiSW50X2x0IiksCgkgIChJ
bnRfbGUsIEZ1bmN0aW9uYWwsICJJbnRfbGUiKSwKCSAgKEludF9ndCwgRnVuY3Rpb25hbCwgIklu
dF9ndCIpLAoJICAoSW50X2dlLCBGdW5jdGlvbmFsLCAiSW50X2dlIiksCgkgIChJbnRfZ2V1LCBG
dW5jdGlvbmFsLCAiSW50X2dldSIpLAoJICAoSW50X2d0dSwgRnVuY3Rpb25hbCwgIkludF9ndHUi
KSwKCSAgKEludF9xdW90LCBGdW5jdGlvbmFsLCAiSW50X3F1b3QiKSwKCSAgKEludF9yZW0sIEZ1
bmN0aW9uYWwsICJJbnRfcmVtIiksCgkgIChJbnRfbmVnLCBGdW5jdGlvbmFsLCAiSW50X25lZyIp
LAoJICAoSW50SW5mX2FkZCwgRnVuY3Rpb25hbCwgIkludEluZl9hZGQiKSwKCSAgKEludEluZl9h
cmVTbWFsbCwgRnVuY3Rpb25hbCwgIkludEluZl9hcmVTbWFsbCIpLAoJICAoSW50SW5mX2Zyb21X
b3JkLCBGdW5jdGlvbmFsLCAiSW50SW5mX2Zyb21Xb3JkIiksCgkgIChJbnRJbmZfZnJvbUFycmF5
LCBEZXBlbmRzT25TdGF0ZSwgIkludEluZl9mcm9tQXJyYXkiKSwKCSAgKEludEluZl9pc1NtYWxs
LCBGdW5jdGlvbmFsLCAiSW50SW5mX2lzU21hbGwiKSwKCSAgKEludEluZl9tdWwsIEZ1bmN0aW9u
YWwsICJJbnRJbmZfbXVsIiksCgkgIChJbnRJbmZfbmVnLCBGdW5jdGlvbmFsLCAiSW50SW5mX25l
ZyIpLAoJICAoSW50SW5mX3F1b3QsIEZ1bmN0aW9uYWwsICJJbnRJbmZfcXVvdCIpLAoJICAoSW50
SW5mX3JlbSwgRnVuY3Rpb25hbCwgIkludEluZl9yZW0iKSwKCSAgKEludEluZl9zdWIsIEZ1bmN0
aW9uYWwsICJJbnRJbmZfc3ViIiksCgkgIChJbnRJbmZfdG9TdHJpbmcsIFNpZGVFZmZlY3QsICJJ
bnRJbmZfdG9TdHJpbmciKSwKCSAgKEludEluZl90b1ZlY3RvciwgRnVuY3Rpb25hbCwgIkludElu
Zl90b1ZlY3RvciIpLAoJICAoSW50SW5mX3RvV29yZCwgRnVuY3Rpb25hbCwgIkludEluZl90b1dv
cmQiKSwKCSAgKE1MdG9uX2Rlc2VyaWFsaXplLCBNb3ZlYWJsZSwgIk1MdG9uX2Rlc2VyaWFsaXpl
IiksCgkgIChNTHRvbl9zZXJpYWxpemUsIERlcGVuZHNPblN0YXRlLCAiTUx0b25fc2VyaWFsaXpl
IiksCgkgIChNTHRvbl9zaXplLCBEZXBlbmRzT25TdGF0ZSwgIk1MdG9uX3NpemUiKSwKCSAgKE1M
dG9uX2JvZ3VzLCBGdW5jdGlvbmFsLCAiTUx0b25fYm9ndXMiKSwKCSAgKE1MdG9uX2VxLCBGdW5j
dGlvbmFsLCAiTUx0b25fZXEiKSwKCSAgKE1MdG9uX2VxdWFsLCBGdW5jdGlvbmFsLCAiTUx0b25f
ZXF1YWwiKSwKCSAgKE1MdG9uX2hhbHQsIFNpZGVFZmZlY3QsICJNTHRvbl9oYWx0IiksCgkgIChS
ZWFsX01hdGhfYWNvcywgRnVuY3Rpb25hbCwgIlJlYWxfTWF0aF9hY29zIiksCgkgIChSZWFsX01h
dGhfYXNpbiwgRnVuY3Rpb25hbCwgIlJlYWxfTWF0aF9hc2luIiksCgkgIChSZWFsX01hdGhfYXRh
biwgRnVuY3Rpb25hbCwgIlJlYWxfTWF0aF9hdGFuIiksCgkgIChSZWFsX01hdGhfYXRhbjIsIEZ1
bmN0aW9uYWwsICJSZWFsX01hdGhfYXRhbjIiKSwKCSAgKFJlYWxfTWF0aF9jb3MsIEZ1bmN0aW9u
YWwsICJSZWFsX01hdGhfY29zIiksCgkgIChSZWFsX01hdGhfY29zaCwgRnVuY3Rpb25hbCwgIlJl
YWxfTWF0aF9jb3NoIiksCgkgIChSZWFsX01hdGhfZXhwLCBGdW5jdGlvbmFsLCAiUmVhbF9NYXRo
X2V4cCIpLAoJICAoUmVhbF9NYXRoX2xuLCBGdW5jdGlvbmFsLCAiUmVhbF9NYXRoX2xuIiksCgkg
IChSZWFsX01hdGhfbG9nMTAsIEZ1bmN0aW9uYWwsICJSZWFsX01hdGhfbG9nMTAiKSwKCSAgKFJl
YWxfTWF0aF9wb3csIEZ1bmN0aW9uYWwsICJSZWFsX01hdGhfcG93IiksCgkgIChSZWFsX01hdGhf
c2luLCBGdW5jdGlvbmFsLCAiUmVhbF9NYXRoX3NpbiIpLAoJICAoUmVhbF9NYXRoX3NpbmgsIEZ1
bmN0aW9uYWwsICJSZWFsX01hdGhfc2luaCIpLAoJICAoUmVhbF9NYXRoX3NxcnQsIEZ1bmN0aW9u
YWwsICJSZWFsX01hdGhfc3FydCIpLAoJICAoUmVhbF9NYXRoX3RhbiwgRnVuY3Rpb25hbCwgIlJl
YWxfTWF0aF90YW4iKSwKCSAgKFJlYWxfTWF0aF90YW5oLCBGdW5jdGlvbmFsLCAiUmVhbF9NYXRo
X3RhbmgiKSwKCSAgKFJlYWxfbmVxdWFsLCBGdW5jdGlvbmFsLCAiUmVhbF9uZXF1YWwiKSwKCSAg
KFJlYWxfbXVsLCBGdW5jdGlvbmFsLCAiUmVhbF9tdWwiKSwKCSAgKFJlYWxfbXVsYWRkLCBGdW5j
dGlvbmFsLCAiUmVhbF9tdWxhZGQiKSwKCSAgKFJlYWxfbXVsc3ViLCBGdW5jdGlvbmFsLCAiUmVh
bF9tdWxzdWIiKSwKCSAgKFJlYWxfYWRkLCBGdW5jdGlvbmFsLCAiUmVhbF9hZGQiKSwKCSAgKFJl
YWxfc3ViLCBGdW5jdGlvbmFsLCAiUmVhbF9zdWIiKSwKCSAgKFJlYWxfZGl2LCBGdW5jdGlvbmFs
LCAiUmVhbF9kaXYiKSwKCSAgKFJlYWxfbHQsIEZ1bmN0aW9uYWwsICJSZWFsX2x0IiksCgkgIChS
ZWFsX2xlLCBGdW5jdGlvbmFsLCAiUmVhbF9sZSIpLAoJICAoUmVhbF9lcXVhbCwgRnVuY3Rpb25h
bCwgIlJlYWxfZXF1YWwiKSwKCSAgKFJlYWxfZ3QsIEZ1bmN0aW9uYWwsICJSZWFsX2d0IiksCgkg
IChSZWFsX2dlLCBGdW5jdGlvbmFsLCAiUmVhbF9nZSIpLAoJICAoUmVhbF9xZXF1YWwsIEZ1bmN0
aW9uYWwsICJSZWFsX3FlcXVhbCIpLAoJICAoUmVhbF9hYnMsIEZ1bmN0aW9uYWwsICJSZWFsX2Fi
cyIpLAoJICAoUmVhbF9jb3B5c2lnbiwgRnVuY3Rpb25hbCwgIlJlYWxfY29weXNpZ24iKSwKCSAg
KFJlYWxfZnJleHAsIEZ1bmN0aW9uYWwsICJSZWFsX2ZyZXhwIiksCgkgIChSZWFsX2Zyb21JbnQs
IEZ1bmN0aW9uYWwsICJSZWFsX2Zyb21JbnQiKSwKCSAgKFJlYWxfbGRleHAsIEZ1bmN0aW9uYWws
ICJSZWFsX2xkZXhwIiksCgkgIChSZWFsX21vZGYsIEZ1bmN0aW9uYWwsICJSZWFsX21vZGYiKSwK
CSAgKFJlYWxfdG9JbnQsIEZ1bmN0aW9uYWwsICJSZWFsX3RvSW50IiksCgkgIChSZWFsX25lZywg
RnVuY3Rpb25hbCwgIlJlYWxfbmVnIiksCgkgIChSZWZfYXNzaWduLCBTaWRlRWZmZWN0LCAiUmVm
X2Fzc2lnbiIpLAoJICAoUmVmX2RlcmVmLCBEZXBlbmRzT25TdGF0ZSwgIlJlZl9kZXJlZiIpLAoJ
ICAoUmVmX3JlZiwgTW92ZWFibGUsICJSZWZfcmVmIiksCgkgIChTdHJpbmdfZXF1YWwsIEZ1bmN0
aW9uYWwsICJTdHJpbmdfZXF1YWwiKSwKCSAgKFN0cmluZ19mcm9tQ2hhclZlY3RvciwgRnVuY3Rp
b25hbCwgIlN0cmluZ19mcm9tQ2hhclZlY3RvciIpLAoJICAoU3RyaW5nX2Zyb21Xb3JkOFZlY3Rv
ciwgRnVuY3Rpb25hbCwgIlN0cmluZ19mcm9tV29yZDhWZWN0b3IiKSwKCSAgKFN0cmluZ19zaXpl
LCBGdW5jdGlvbmFsLCAiU3RyaW5nX3NpemUiKSwKCSAgKFN0cmluZ19zdWIsIEZ1bmN0aW9uYWws
ICJTdHJpbmdfc3ViIiksCgkgIChTdHJpbmdfdG9DaGFyVmVjdG9yLCBGdW5jdGlvbmFsLCAiU3Ry
aW5nX3RvQ2hhclZlY3RvciIpLAoJICAoU3RyaW5nX3RvV29yZDhWZWN0b3IsIEZ1bmN0aW9uYWws
ICJTdHJpbmdfdG9Xb3JkOFZlY3RvciIpLAoJICAoVGhyZWFkX2NvcHksIFNpZGVFZmZlY3QsICJU
aHJlYWRfY29weSIpLAoJICAoVGhyZWFkX2NvcHlTaHJpbmssIFNpZGVFZmZlY3QsICJUaHJlYWRf
Y29weVNocmluayIpLAoJICAoVGhyZWFkX2ZpbmlzaEhhbmRsZXIsIFNpZGVFZmZlY3QsICJUaHJl
YWRfZmluaXNoSGFuZGxlciIpLAoJICAoVGhyZWFkX3N3aXRjaFRvLCBTaWRlRWZmZWN0LCAiVGhy
ZWFkX3N3aXRjaFRvIiksCgkgIChUaHJlYWRfc3dpdGNoVG9Db250LCBTaWRlRWZmZWN0LCAiVGhy
ZWFkX3N3aXRjaFRvQ29udCIpLAoJICAoVmVjdG9yX2Zyb21BcnJheSwgRGVwZW5kc09uU3RhdGUs
ICJWZWN0b3JfZnJvbUFycmF5IiksCgkgIChWZWN0b3JfbGVuZ3RoLCBGdW5jdGlvbmFsLCAiVmVj
dG9yX2xlbmd0aCIpLAoJICAoVmVjdG9yX3N1YiwgRnVuY3Rpb25hbCwgIlZlY3Rvcl9zdWIiKSwK
CSAgKFdvcmQ4X211bCwgRnVuY3Rpb25hbCwgIldvcmQ4X211bCIpLAoJICAoV29yZDhfYWRkLCBG
dW5jdGlvbmFsLCAiV29yZDhfYWRkIiksCgkgIChXb3JkOF9zdWIsIEZ1bmN0aW9uYWwsICJXb3Jk
OF9zdWIiKSwKCSAgKFdvcmQ4X2x0LCBGdW5jdGlvbmFsLCAiV29yZDhfbHQiKSwKCSAgKFdvcmQ4
X2xzaGlmdCwgRnVuY3Rpb25hbCwgIldvcmQ4X2xzaGlmdCIpLAoJICAoV29yZDhfbGUsIEZ1bmN0
aW9uYWwsICJXb3JkOF9sZSIpLAoJICAoV29yZDhfZ3QsIEZ1bmN0aW9uYWwsICJXb3JkOF9ndCIp
LAoJICAoV29yZDhfZ2UsIEZ1bmN0aW9uYWwsICJXb3JkOF9nZSIpLAoJICAoV29yZDhfcnNoaWZ0
LCBGdW5jdGlvbmFsLCAiV29yZDhfcnNoaWZ0IiksCgkgIChXb3JkOF9hbmRiLCBGdW5jdGlvbmFs
LCAiV29yZDhfYW5kYiIpLAoJICAoV29yZDhfZGl2LCBGdW5jdGlvbmFsLCAiV29yZDhfZGl2Iiks
CgkgIChXb3JkOF9mcm9tSW50LCBGdW5jdGlvbmFsLCAiV29yZDhfZnJvbUludCIpLAoJICAoV29y
ZDhfZnJvbUxhcmdlV29yZCwgRnVuY3Rpb25hbCwgIldvcmQ4X2Zyb21MYXJnZVdvcmQiKSwKCSAg
KFdvcmQ4X21vZCwgRnVuY3Rpb25hbCwgIldvcmQ4X21vZCIpLAoJICAoV29yZDhfbm90YiwgRnVu
Y3Rpb25hbCwgIldvcmQ4X25vdGIiKSwKCSAgKFdvcmQ4X29yYiwgRnVuY3Rpb25hbCwgIldvcmQ4
X29yYiIpLAoJICAoV29yZDhfdG9JbnQsIEZ1bmN0aW9uYWwsICJXb3JkOF90b0ludCIpLAoJICAo
V29yZDhfdG9JbnRYLCBGdW5jdGlvbmFsLCAiV29yZDhfdG9JbnRYIiksCgkgIChXb3JkOF90b0xh
cmdlV29yZCwgRnVuY3Rpb25hbCwgIldvcmQ4X3RvTGFyZ2VXb3JkIiksCgkgIChXb3JkOF90b0xh
cmdlV29yZFgsIEZ1bmN0aW9uYWwsICJXb3JkOF90b0xhcmdlV29yZFgiKSwKCSAgKFdvcmQ4X3hv
cmIsIEZ1bmN0aW9uYWwsICJXb3JkOF94b3JiIiksCgkgIChXb3JkOF9hcnNoaWZ0LCBGdW5jdGlv
bmFsLCAiV29yZDhfYXJzaGlmdCIpLAoJICAoV29yZDhBcnJheV9zdWJXb3JkLCBEZXBlbmRzT25T
dGF0ZSwgIldvcmQ4QXJyYXlfc3ViV29yZCIpLAoJICAoV29yZDhBcnJheV91cGRhdGVXb3JkLCBT
aWRlRWZmZWN0LCAiV29yZDhBcnJheV91cGRhdGVXb3JkIiksCgkgIChXb3JkOFZlY3Rvcl9zdWJX
b3JkLCBGdW5jdGlvbmFsLCAiV29yZDhWZWN0b3Jfc3ViV29yZCIpLAoJICAoV29yZDMyX211bCwg
RnVuY3Rpb25hbCwgIldvcmQzMl9tdWwiKSwKCSAgKFdvcmQzMl9hZGQsIEZ1bmN0aW9uYWwsICJX
b3JkMzJfYWRkIiksCgkgIChXb3JkMzJfc3ViLCBGdW5jdGlvbmFsLCAiV29yZDMyX3N1YiIpLAoJ
ICAoV29yZDMyX2x0LCBGdW5jdGlvbmFsLCAiV29yZDMyX2x0IiksCgkgIChXb3JkMzJfbHNoaWZ0
LCBGdW5jdGlvbmFsLCAiV29yZDMyX2xzaGlmdCIpLAoJICAoV29yZDMyX2xlLCBGdW5jdGlvbmFs
LCAiV29yZDMyX2xlIiksCgkgIChXb3JkMzJfZ3QsIEZ1bmN0aW9uYWwsICJXb3JkMzJfZ3QiKSwK
CSAgKFdvcmQzMl9nZSwgRnVuY3Rpb25hbCwgIldvcmQzMl9nZSIpLAoJICAoV29yZDMyX3JzaGlm
dCwgRnVuY3Rpb25hbCwgIldvcmQzMl9yc2hpZnQiKSwKCSAgKFdvcmQzMl9hbmRiLCBGdW5jdGlv
bmFsLCAiV29yZDMyX2FuZGIiKSwKCSAgKFdvcmQzMl9kaXYsIEZ1bmN0aW9uYWwsICJXb3JkMzJf
ZGl2IiksCgkgIChXb3JkMzJfZnJvbUludCwgRnVuY3Rpb25hbCwgIldvcmQzMl9mcm9tSW50Iiks
CgkgIChXb3JkMzJfbW9kLCBGdW5jdGlvbmFsLCAiV29yZDMyX21vZCIpLAoJICAoV29yZDMyX25v
dGIsIEZ1bmN0aW9uYWwsICJXb3JkMzJfbm90YiIpLAoJICAoV29yZDMyX29yYiwgRnVuY3Rpb25h
bCwgIldvcmQzMl9vcmIiKSwKCSAgKFdvcmQzMl90b0ludFgsIEZ1bmN0aW9uYWwsICJXb3JkMzJf
dG9JbnRYIiksCgkgIChXb3JkMzJfeG9yYiwgRnVuY3Rpb25hbCwgIldvcmQzMl94b3JiIiksCgkg
IChXb3JkMzJfYXJzaGlmdCwgRnVuY3Rpb25hbCwgIldvcmQzMl9hcnNoaWZ0IiksCgkgIChXb3Js
ZF9zYXZlLCBTaWRlRWZmZWN0LCAiV29ybGRfc2F2ZSIpXQoKICAgICAgZnVuIHRvU3RyaW5nIG4g
PQoJIGNhc2UgbiBvZgoJICAgIENvbnN0YW50IHMgPT4gcwoJICB8IEZGSSBzID0+IHMKCSAgfCBf
ID0+IChjYXNlIExpc3QucGVlayhzdHJpbmdzLCBmbiAobicsIF8sIF8pID0+IG4gPSBuJykgb2YK
CQkgICAgIE5PTkUgPT4gRXJyb3IuYnVnICJQcmltLnRvU3RyaW5nIG1pc3NpbmcgbmFtZSIKCQkg
ICB8IFNPTUUoXywgXywgcykgPT4gcykKCiAgICAgIHZhbCBsYXlvdXQgPSBMYXlvdXQuc3RyIG8g
dG9TdHJpbmcKICAgZW5kCgpkYXRhdHlwZSB0ID0KICAgVCBvZiB7bmFtZTogTmFtZS50LAoJIG5h
bWVTdHJpbmc6IHN0cmluZywKCSBzY2hlbWU6IFNjaGVtZS50LAoJIGtpbmQ6IEtpbmQudCwKCSBu
dW1BcmdzOiBpbnQgb3B0aW9uLAoJIHBsaXN0OiBQcm9wZXJ0eUxpc3QudH0KCmxvY2FsCiAgIGZ1
biBtYWtlIHNlbCAoVCByKSA9IHNlbCByCmluCiAgIHZhbCBraW5kID0gbWFrZSAja2luZAogICB2
YWwgbmFtZSA9IG1ha2UgI25hbWUKICAgdmFsIG51bUFyZ3MgPSBtYWtlICNudW1BcmdzCiAgIHZh
bCBwbGlzdCA9IG1ha2UgI3BsaXN0CiAgIHZhbCBzY2hlbWUgPSBtYWtlICNzY2hlbWUKICAgdmFs
IHRvU3RyaW5nID0gbWFrZSAjbmFtZVN0cmluZwplbmQKCnZhbCBsYXlvdXQgPSBOYW1lLmxheW91
dCBvIG5hbWUKCmxvY2FsCiAgIGZ1biBtYWtlIGsgcCA9IGsgPSBraW5kIHAKaW4KICAgdmFsIGlz
RnVuY3Rpb25hbCA9IG1ha2UgS2luZC5GdW5jdGlvbmFsCiAgIHZhbCBtYXlTaWRlRWZmZWN0ID0g
bWFrZSBLaW5kLlNpZGVFZmZlY3QKZW5kCnZhbCBpc0Z1bmN0aW9uYWwgPSBUcmFjZS50cmFjZSgi
aXNGdW5jdGlvbmFsIiwgbGF5b3V0LCBCb29sLmxheW91dCkgaXNGdW5jdGlvbmFsCgp2YWwgaXNB
cnJheUFsbG9jYXRpb24gPSBOYW1lLmlzQXJyYXlBbGxvY2F0aW9uIG8gbmFtZQoKdmFsIGVudGVy
c1J1bnRpbWUgPSBOYW1lLmVudGVyc1J1bnRpbWUgbyBuYW1lCnZhbCBlbnRlcnNSdW50aW1lID0K
ICAgVHJhY2UudHJhY2UoImVudGVyc1J1bnRpbWUiLCBsYXlvdXQsIEJvb2wubGF5b3V0KSBlbnRl
cnNSdW50aW1lCgkJCSAgCnZhbCBsb25naWQgPSBMb25naWQuc2hvcnQgbyBMb25naWQuSWQuZnJv
bVN0cmluZyBvIHRvU3RyaW5nCgpmdW4gZXF1YWxzKHA6IHQsIHAnOiB0KTogYm9vbCA9IFByb3Bl
cnR5TGlzdC5lcXVhbHMocGxpc3QgcCwgcGxpc3QgcCcpCgpzdHJ1Y3R1cmUgU2NoZW1lID0KICAg
c3RydWN0CiAgICAgIG9wZW4gU2NoZW1lCgkgCiAgICAgIGZ1biBudW1BcmdzKHM6IHQpOiBpbnQg
b3B0aW9uID0KCSBjYXNlIFR5cGUuZGVhcnJvd09wdCh0eSBzKSBvZgoJICAgIE5PTkUgPT4gTk9O
RQoJICB8IFNPTUUodCwgXykgPT4gKGNhc2UgVHlwZS5kZXR1cGxlT3B0IHQgb2YKCQkJICAgICAg
Tk9ORSA9PiBTT01FIDEKCQkJICAgIHwgU09NRSB0cyA9PiBTT01FKExpc3QubGVuZ3RoIHRzKSkK
ICAgZW5kCgpmdW4gbmV3KG46IE5hbWUudCwgazogS2luZC50LCBzOiBTY2hlbWUudCk6IHQgPQog
ICBUewogICAgIGtpbmQgPSBrLAogICAgIG5hbWUgPSBuLAogICAgIG5hbWVTdHJpbmcgPSBOYW1l
LnRvU3RyaW5nIG4sCiAgICAgbnVtQXJncyA9IFNjaGVtZS5udW1BcmdzIHMsCiAgICAgcGxpc3Qg
PSBQcm9wZXJ0eUxpc3QubmV3KCksCiAgICAgc2NoZW1lID0gcwogICAgIH0KCmxvY2FsCiAgIHZh
bCBuZXdQcmltID0gbmV3CiAgIG9wZW4gVHlwZSBTY2hlbWUKICAgdmFsIG5ldyA9IG5ld1ByaW0K
ICAgdmFsIC0tPiA9IGFycm93CiAgIGluZml4IC0tPgoKICAgdmFsIG5ldyA9CiAgICAgIGZuIChu
OiBOYW1lLnQsIHM6IFNjaGVtZS50KSA9PgogICAgICBsZXQKCSB2YWwgayA9CgkgICAgY2FzZSBu
IG9mCgkgICAgICAgTmFtZS5GRkkgXyA9PgoJCSAgKGlmIGlzU29tZShTY2hlbWUubnVtQXJncyBz
KQoJCSAgICAgIHRoZW4gS2luZC5TaWRlRWZmZWN0CgkJICAgZWxzZSBLaW5kLkRlcGVuZHNPblN0
YXRlKQoJICAgICB8IF8gPT4gKGNhc2UgTGlzdC5wZWVrKE5hbWUuc3RyaW5ncywgZm4gKG4nLCBf
LCBfKSA9PiBuID0gbicpIG9mCgkJCU5PTkUgPT4gRXJyb3IuYnVnICJzdHJhbmdlIG5hbWUiCgkJ
ICAgICAgfCBTT01FKF8sIGssIF8pID0+IGspCiAgICAgIGluIG5ldyhuLCBrLCBzKQogICAgICBl
bmQKICAgICAgCmluCiAgIHZhbCBhcnJheSA9IG5ldyhOYW1lLkFycmF5X2FycmF5LCBtYWtlMShm
biBhID0+IGludCAtLT4gYXJyYXkgYSkpCiAgIHZhbCBhc3NpZ24gPSBuZXcoTmFtZS5SZWZfYXNz
aWduLCBtYWtlMShmbiBhID0+IHR1cGxlW3JlZmYgYSwgYV0gLS0+IHVuaXQpKQogICB2YWwgYm9n
dXMgPSBuZXcoTmFtZS5NTHRvbl9ib2d1cywgbWFrZTEoZm4gYSA9PiBhKSkKICAgdmFsIGJ1ZyA9
IG5ldyhOYW1lLkZGSSAiTUx0b25fYnVnIiwgbWFrZTAoc3RyaW5nIC0tPiB1bml0KSkKICAgdmFs
IGRlcmVmID0gbmV3KE5hbWUuUmVmX2RlcmVmLCBtYWtlMShmbiBhID0+IHJlZmYgYSAtLT4gYSkp
CiAgIHZhbCBkZXNlcmlhbGl6ZSA9CiAgICAgIG5ldyhOYW1lLk1MdG9uX2Rlc2VyaWFsaXplLCBt
YWtlMShmbiBhID0+IHZlY3RvciB3b3JkOCAtLT4gYSkpCiAgIHZhbCBlcSA9IG5ldyhOYW1lLk1M
dG9uX2VxLCBtYWtlRXF1YWwxKGZuIGEgPT4gdHVwbGVbYSwgYV0gLS0+IGJvb2wpKQogICB2YWwg
ZXF1YWwgPSBuZXcoTmFtZS5NTHRvbl9lcXVhbCwgbWFrZUVxdWFsMShmbiBhID0+IHR1cGxlW2Es
IGFdIC0tPiBib29sKSkKICAgdmFsIHJlZmYgPSBuZXcoTmFtZS5SZWZfcmVmLCBtYWtlMShmbiBh
ID0+IGEgLS0+IHJlZmYgYSkpCiAgIHZhbCBzZXJpYWxpemUgPSBuZXcoTmFtZS5NTHRvbl9zZXJp
YWxpemUsIG1ha2UxKGZuIGEgPT4gYSAtLT4gdmVjdG9yIHdvcmQ4KSkKICAgdmFsIHZlY3Rvckxl
bmd0aCA9IG5ldyhOYW1lLlZlY3Rvcl9sZW5ndGgsIG1ha2UxKGZuIGEgPT4gdmVjdG9yIGEgLS0+
IGludCkpCiAgIHZhbCB2ZWN0b3JTdWIgPQogICAgICBuZXcoTmFtZS5WZWN0b3Jfc3ViLCBtYWtl
MShmbiBhID0+IHR1cGxlW3ZlY3RvciBhLCBpbnRdIC0tPiBhKSkKCiAgIGZ1biBuZXcwKG5hbWUs
IHR5KSA9IG5ldyhuYW1lLCBtYWtlMCB0eSkKCiAgIHZhbCBpbnRJbmZFcXVhbCA9CiAgICAgIG5l
dzAoTmFtZS5GRkkgIkludEluZl9lcXVhbCIsIHR1cGxlW2ludEluZiwgaW50SW5mXSAtLT4gYm9v
bCkKICAgdmFsIHN0cmluZ0VxdWFsID0KICAgICAgbmV3MChOYW1lLlN0cmluZ19lcXVhbCwgdHVw
bGVbc3RyaW5nLCBzdHJpbmddIC0tPiBib29sKQogICB2YWwgaW50UGx1cyA9IG5ldzAoTmFtZS5J
bnRfYWRkLCB0dXBsZVtpbnQsIGludF0gLS0+IGludCkKCiAgIGZ1biBuZXdOdWxsYXJ5KG5hbWU6
IHN0cmluZykgPSBuZXcwKE5hbWUuRkZJIG5hbWUsIHVuaXQgLS0+IHVuaXQpCgogICBmdW4gZmZp
KG5hbWU6IHN0cmluZywgczogU2NoZW1lLnQpID0KICAgICAgbmV3KE5hbWUuRkZJIG5hbWUsIHMp
CmVuZAogICAKdmFsIG5ldzogc3RyaW5nICogU2NoZW1lLnQgLT4gdCA9CiAgIGZuIChuYW1lLCBz
Y2hlbWUpID0+CiAgIGxldAogICAgICB2YWwgKG5hbWUsIGtpbmQpID0KCSBjYXNlIExpc3QucGVl
ayhOYW1lLnN0cmluZ3MsIGZuIChfLCBfLCBzKSA9PiBzID0gbmFtZSkgb2YKCSAgICBOT05FID0+
IChOYW1lLkNvbnN0YW50IG5hbWUsIEtpbmQuRnVuY3Rpb25hbCkKCSAgfCBTT01FKG4sIGssIF8p
ID0+IChuLCBrKQogICBpbgogICAgICBuZXcobmFtZSwga2luZCwgc2NoZW1lKQogICBlbmQKCnZh
bCBuZXcgPSBUcmFjZS50cmFjZTIoIlByaW0ubmV3IiwgU3RyaW5nLmxheW91dCwgU2NoZW1lLmxh
eW91dCwgbGF5b3V0KSBuZXcKICAgCmZ1biAnYSBjaGVja0FwcHtwcmltLCB0YXJncywgYXJncywK
CQljb24sIGRldHVwbGVPcHQsIGRlYXJyb3dPcHQsIGVxdWFscywgaXNVbml0fQogICA6ICdhIG9w
dGlvbiA9CiAgIGxldAogICAgICB2YWwgZXJyb3IgPSBOT05FCiAgICAgIHZhbCBTY2hlbWUuVHt0
eXZhcnMsIHR5fSA9IHNjaGVtZSBwcmltCiAgIGluCiAgICAgIGlmIExpc3QubGVuZ3RoIHRhcmdz
IDw+IExpc3QubGVuZ3RoIHR5dmFycwoJIHRoZW4gZXJyb3IKICAgICAgZWxzZQoJIGxldAoJICAg
IHZhbCBlbnYgPSBMaXN0LnppcCh0eXZhcnMsIHRhcmdzKQoJICAgIGZ1biB2YXIgYSA9CgkgICAg
ICAgY2FzZSBMaXN0LnBlZWsoZW52LCBmbiAoYScsIF8pID0+CgkJCSAgICAgIFR5dmFyLmVxdWFs
cyhhLCBhJykpIG9mCgkJICBOT05FID0+IEVycm9yLmJ1ZyAicHJpbSBzY2hlbWUgd2l0aCBmcmVl
IHR5dmFyIgoJCXwgU09NRShfLCB0KSA9PiB0CgkgICAgdmFsIHR5ID0gVHlwZS5ob217dHkgPSB0
eSwgdmFyID0gdmFyLCBjb24gPSBjb259CgkgaW4KCSAgICBjYXNlIG51bUFyZ3MgcHJpbSBvZgoJ
ICAgICAgIE5PTkUgPT4gKGNhc2UgYXJncyBvZgoJCQkgICBbXSA9PiBTT01FIHR5CgkJCSB8IF8g
PT4gZXJyb3IpCgkgICAgIHwgU09NRSBuID0+CgkJICBjYXNlIGRlYXJyb3dPcHQgdHkgb2YKCQkg
ICAgIE5PTkUgPT4gZXJyb3IKCQkgICB8IFNPTUUoYXJnVHlwZSwgcmVzdWx0KSA9PgoJCQljYXNl
IChuLCBhcmdzKSBvZgoJCQkgICAoMCwgW10pID0+IFNPTUUgcmVzdWx0CgkJCSB8ICgxLCBbYXJn
XSkgPT4KCQkJICAgICAgaWYgZXF1YWxzKGFyZywgYXJnVHlwZSkKCQkJCSB0aGVuIFNPTUUgcmVz
dWx0CgkJCSAgICAgIGVsc2UgZXJyb3IKCQkJIHwgXyA9PiAKCQkJICAgICAgY2FzZSBkZXR1cGxl
T3B0IGFyZ1R5cGUgb2YKCQkJCSBOT05FID0+IGVycm9yCgkJCSAgICAgICB8IFNPTUUgYXJnVHlw
ZXMgPT4KCQkJCSAgICBpZiBMaXN0LmVxdWFscyhhcmdzLCBhcmdUeXBlcywgZXF1YWxzKQoJCQkJ
ICAgICAgIHRoZW4gU09NRSByZXN1bHQKCQkJCSAgICBlbHNlIGVycm9yCgkgZW5kCiAgIGVuZAoK
ZnVuIHJldHVybnNCb29sIHAgPQogICBjYXNlIFR5cGUuZGVhcnJvd09wdChTY2hlbWUudHkoc2No
ZW1lIHApKSBvZgogICAgICBTT01FKF8sIFR5cGUuQ29uKHR5Y29uLCBfKSkgPT4gVHljb24uZXF1
YWxzKHR5Y29uLCBUeWNvbi5ib29sKQogICAgfCBfID0+IGZhbHNlCgpmdW4gZXh0cmFjdFRhcmdz
e3ByaW0sIGFyZ3MsIHJlc3VsdCwgZGVhcnJheSwgZGVyZWYsIGRldmVjdG9yfSA9CiAgIGxldCBk
YXRhdHlwZSB6ID0gZGF0YXR5cGUgTmFtZS50CiAgIGluIGNhc2UgKG5hbWUgcHJpbSwgYXJncykg
b2YKICAgICAgKEFycmF5X2FycmF5LCBfKSA9PiBbZGVhcnJheSByZXN1bHRdCiAgICB8IChBcnJh
eV9zdWIsIF8pID0+IFtyZXN1bHRdCiAgICB8IChBcnJheV91cGRhdGUsIFtfLCBfLCB6XSkgPT4g
W3pdCiAgICB8IChBcnJheV9sZW5ndGgsIFt6XSkgPT4gW2RlYXJyYXkgel0KICAgIHwgKE1MdG9u
X2JvZ3VzLCBbXSkgPT4gW3Jlc3VsdF0KICAgIHwgKE1MdG9uX2Rlc2VyaWFsaXplLCBbX10pID0+
IFtyZXN1bHRdCiAgICB8IChNTHRvbl9lcSwgW3osIF9dKSA9PiBbel0KICAgIHwgKE1MdG9uX2Vx
dWFsLCBbeiwgX10pID0+IFt6XQogICAgfCAoTUx0b25fc2VyaWFsaXplLCBbel0pID0+IFt6XQog
ICAgfCAoTUx0b25fc2l6ZSwgW3pdKSA9PiBbZGVyZWYgel0KICAgIHwgKFJlZl9hc3NpZ24sIFtf
LCB6XSkgPT4gW3pdCiAgICB8IChSZWZfZGVyZWYsIF8pID0+IFtyZXN1bHRdCiAgICB8IChSZWZf
cmVmLCBbel0pID0+IFt6XQogICAgfCAoVmVjdG9yX2Zyb21BcnJheSwgW3pdKSA9PiBbZGVhcnJh
eSB6XQogICAgfCAoVmVjdG9yX2xlbmd0aCwgW3pdKSA9PiBbZGV2ZWN0b3Igel0KICAgIHwgKFZl
Y3Rvcl9zdWIsIF8pID0+IFtyZXN1bHRdCiAgICB8IF8gPT4gW10KICAgZW5kCgpmdW4gYXBwbHko
cCwgYXJncywgY29uc3QsIGJvb2wpID0KICAgbGV0IGRhdGF0eXBlIHogPSBkYXRhdHlwZSBOYW1l
LnQKICAgICAgZGF0YXR5cGUgeiA9IGRhdGF0eXBlIENvbnN0Lm5vZGUKICAgICAgdmFsIGJvb2wg
PSBTT01FIG8gYm9vbAogICAgICB2YWwgY2hhciA9IFNPTUUgbyBjb25zdCBvIENvbnN0LmZyb21D
aGFyCiAgICAgIHZhbCBpbnQgPSBTT01FIG8gY29uc3QgbyBDb25zdC5mcm9tSW50CiAgICAgIHZh
bCB3b3JkID0gU09NRSBvIGNvbnN0IG8gQ29uc3QuZnJvbVdvcmQKICAgICAgdmFsIHdvcmQ4ID0g
U09NRSBvIGNvbnN0IG8gQ29uc3QuZnJvbVdvcmQ4CiAgICAgIGxvY2FsCgkgZnVuIG1ha2UgZnJv
bSAoZiwgYzEsIGMyKSA9IGZyb20oZihjMSwgYzIpKQogICAgICBpbgoJIGZ1biBpbyB6ID0gbWFr
ZSBpbnQgegoJIHZhbCB3byA9IG1ha2Ugd29yZAoJIGZ1biBwcmVkIHogPSBtYWtlIGJvb2wgegog
ICAgICBlbmQKICAgICAgZnVuIGl1KGYsIGkxLCBpMikgPSBib29sKGYoV29yZC5mcm9tSW50IGkx
LCBXb3JkLmZyb21JbnQgaTIpKQogICAgICBmdW4gdzh3KGYsIHc4OiBXb3JkLnQsIHc6IFdvcmQu
dCkgPSB3b3JkOChmKFdvcmQ4LmZyb21Xb3JkIHc4LCB3KSkKICAgICAgZnVuIHc4cChwLCB3MSwg
dzIpID0gYm9vbChwKFdvcmQ4LmZyb21Xb3JkIHcxLCBXb3JkOC5mcm9tV29yZCB3MikpCiAgICAg
IGZ1biB3OG8oZiwgdzEsIHcyKSA9IHdvcmQ4KGYoV29yZDguZnJvbVdvcmQgdzEsIFdvcmQ4LmZy
b21Xb3JkIHcyKSkKICAgICAgdmFsIGVxdWFsID0KCSBmbiAoQ2hhciBjMSwgQ2hhciBjMikgPT4g
Ym9vbChDaGFyLmVxdWFscyhjMSwgYzIpKQoJICB8IChJbnQgaTEsIEludCBpMikgPT4gYm9vbChJ
bnQuZXF1YWxzKGkxLCBpMikpCgkgIHwgKFN0cmluZyBzMSwgU3RyaW5nIHMyKSA9PiBib29sKFN0
cmluZy5lcXVhbHMoczEsIHMyKSkKCSAgfCAoV29yZCB3MSwgV29yZCB3MikgPT4gYm9vbChXb3Jk
LmVxdWFscyh3MSwgdzIpKQoJICB8IF8gPT4gTk9ORQogICBpbiBjYXNlIChuYW1lIHAsIExpc3Qu
bWFwKGFyZ3MsIENvbnN0Lm5vZGUpKSBvZgogICAgICAoQnl0ZV9ieXRlVG9DaGFyLCBbV29yZCB3
XSkgPT4gY2hhcihXb3JkLnRvQ2hhciB3KQogICAgfCAoQnl0ZV9jaGFyVG9CeXRlLCBbQ2hhciBj
XSkgPT4gd29yZDgoV29yZDguZnJvbUNoYXIgYykKICAgIHwgKENoYXJfbHQsIFtDaGFyIGMxLCBD
aGFyIGMyXSkgPT4gcHJlZChDaGFyLjwsIGMxLCBjMikKICAgIHwgKENoYXJfbGUsIFtDaGFyIGMx
LCBDaGFyIGMyXSkgPT4gcHJlZChDaGFyLjw9LCBjMSwgYzIpCiAgICB8IChDaGFyX2d0LCBbQ2hh
ciBjMSwgQ2hhciBjMl0pID0+IHByZWQoQ2hhci4+LCBjMSwgYzIpCiAgICB8IChDaGFyX2dlLCBb
Q2hhciBjMSwgQ2hhciBjMl0pID0+IHByZWQoQ2hhci4+PSwgYzEsIGMyKQogICAgfCAoQ2hhcl9j
aHIsIFtJbnQgaV0pID0+IGNoYXIoQ2hhci5mcm9tSW50IGkpCiAgICB8IChDaGFyX29yZCwgW0No
YXIgY10pID0+IGludChDaGFyLnRvSW50IGMpCiAgICB8IChJbnRfbXVsLCBbSW50IGkxLCBJbnQg
aTJdKSA9PiBpbyhJbnQuKiwgaTEsIGkyKQogICAgfCAoSW50X2FkZCwgW0ludCBpMSwgSW50IGky
XSkgPT4gaW8oSW50LissIGkxLCBpMikKICAgIHwgKEludF9zdWIsIFtJbnQgaTEsIEludCBpMl0p
ID0+IGlvKEludC4tLCBpMSwgaTIpCiAgICB8IChJbnRfbHQsIFtJbnQgaTEsIEludCBpMl0pID0+
IHByZWQoSW50LjwsIGkxLCBpMikKICAgIHwgKEludF9sZSwgW0ludCBpMSwgSW50IGkyXSkgPT4g
cHJlZChJbnQuPD0sIGkxLCBpMikKICAgIHwgKEludF9ndCwgW0ludCBpMSwgSW50IGkyXSkgPT4g
cHJlZChJbnQuPiwgaTEsIGkyKQogICAgfCAoSW50X2dlLCBbSW50IGkxLCBJbnQgaTJdKSA9PiBw
cmVkKEludC4+PSwgaTEsIGkyKQogICAgfCAoSW50X2dldSwgW0ludCBpMSwgSW50IGkyXSkgPT4g
aXUoV29yZC4+PSwgaTEsIGkyKQogICAgfCAoSW50X2d0dSwgW0ludCBpMSwgSW50IGkyXSkgPT4g
aXUoV29yZC4+LCBpMSwgaTIpCiAgICB8IChJbnRfcXVvdCwgW0ludCBpMSwgSW50IGkyXSkgPT4g
aW8oSW50LnF1b3QsIGkxLCBpMikKICAgIHwgKEludF9yZW0sIFtJbnQgaTEsIEludCBpMl0pID0+
IGlvKEludC5yZW0sIGkxLCBpMikKICAgIHwgKEludF9uZWcsIFtJbnQgaV0pID0+IGludCh+IGkp
CiAgICB8IChNTHRvbl9lcSwgW2MxLCBjMl0pID0+IGVxdWFsKGMxLCBjMikKICAgIHwgKE1MdG9u
X2VxdWFsLCBbYzEsIGMyXSkgPT4gZXF1YWwoYzEsIGMyKQogICAgfCAoU3RyaW5nX2VxdWFsLCBb
U3RyaW5nIHMxLCBTdHJpbmcgczJdKSA9PiBib29sKFN0cmluZy5lcXVhbHMoczEsIHMyKSkKICAg
IHwgKFN0cmluZ19zaXplLCBbU3RyaW5nIHNdKSA9PiBpbnQoU3RyaW5nLnNpemUgcykKICAgIHwg
KFN0cmluZ19zdWIsIFtTdHJpbmcgcywgSW50IGldKSA9PiBjaGFyKFN0cmluZy5zdWIocywgaSkp
CiAgICB8IChXb3JkOF9tdWwsIFtXb3JkIHcxLCBXb3JkIHcyXSkgPT4gdzhvKFdvcmQ4LiosIHcx
LCB3MikKICAgIHwgKFdvcmQ4X2FkZCwgW1dvcmQgdzEsIFdvcmQgdzJdKSA9PiB3OG8oV29yZDgu
KywgdzEsIHcyKQogICAgfCAoV29yZDhfc3ViLCBbV29yZCB3MSwgV29yZCB3Ml0pID0+IHc4byhX
b3JkOC4tLCB3MSwgdzIpCiAgICB8IChXb3JkOF9sdCwgW1dvcmQgdzEsIFdvcmQgdzJdKSA9PiB3
OHAoV29yZDguPCwgdzEsIHcyKQogICAgfCAoV29yZDhfbHNoaWZ0LCBbV29yZCB3MSwgV29yZCB3
Ml0pID0+IHc4dyhXb3JkOC48PCwgdzEsIHcyKQogICAgfCAoV29yZDhfbGUsIFtXb3JkIHcxLCBX
b3JkIHcyXSkgPT4gdzhwKFdvcmQ4Ljw9LCB3MSwgdzIpCiAgICB8IChXb3JkOF9ndCwgW1dvcmQg
dzEsIFdvcmQgdzJdKSA9PiB3OHAoV29yZDguPiwgdzEsIHcyKQogICAgfCAoV29yZDhfZ2UsIFtX
b3JkIHcxLCBXb3JkIHcyXSkgPT4gdzhwKFdvcmQ4Lj49LCB3MSwgdzIpCiAgICB8IChXb3JkOF9y
c2hpZnQsIFtXb3JkIHcxLCBXb3JkIHcyXSkgPT4gdzh3KFdvcmQ4Lj4+LCB3MSwgdzIpCiAgICB8
IChXb3JkOF9hbmRiLCBbV29yZCB3MSwgV29yZCB3Ml0pID0+IHc4byhXb3JkOC5hbmRiLCB3MSwg
dzIpCiAgICB8IChXb3JkOF9kaXYsIFtXb3JkIHcxLCBXb3JkIHcyXSkgPT4gdzhvKFdvcmQ4LmRp
diwgdzEsIHcyKQogICAgfCAoV29yZDhfZnJvbUludCwgW0ludCBpXSkgPT4gd29yZDgoV29yZDgu
ZnJvbUludCBpKQogICAgfCAoV29yZDhfZnJvbUxhcmdlV29yZCwgW1dvcmQgd10pID0+IHdvcmQ4
KFdvcmQ4LmZyb21Xb3JkIHcpCiAgICB8IChXb3JkOF9tb2QsIFtXb3JkIHcxLCBXb3JkIHcyXSkg
PT4gdzhvKFdvcmQ4Lm1vZCwgdzEsIHcyKQogICAgfCAoV29yZDhfbm90YiwgW1dvcmQgd10pID0+
IHdvcmQ4KFdvcmQ4Lm5vdGIoV29yZDguZnJvbVdvcmQgdykpCiAgICB8IChXb3JkOF9vcmIsIFtX
b3JkIHcxLCBXb3JkIHcyXSkgPT4gdzhvKFdvcmQ4Lm9yYiwgdzEsIHcyKQogICAgfCAoV29yZDhf
dG9JbnQsIFtXb3JkIHddKSA9PiBpbnQoV29yZDgudG9JbnQoV29yZDguZnJvbVdvcmQgdykpCiAg
ICB8IChXb3JkOF90b0ludFgsIFtXb3JkIHddKSA9PiBpbnQoV29yZDgudG9JbnRYKFdvcmQ4LmZy
b21Xb3JkIHcpKQogICAgfCAoV29yZDhfdG9MYXJnZVdvcmQsIFtXb3JkIHddKSA9PiB3b3JkKFdv
cmQ4LnRvTGFyZ2VXb3JkKFdvcmQ4LmZyb21Xb3JkIHcpKQogICAgfCAoV29yZDhfdG9MYXJnZVdv
cmRYLCBbV29yZCB3XSkgPT4gCgkgd29yZChXb3JkOC50b0xhcmdlV29yZFgoV29yZDguZnJvbVdv
cmQgdykpCiAgICB8IChXb3JkOF94b3JiLCBbV29yZCB3MSwgV29yZCB3Ml0pID0+IHc4byhXb3Jk
OC54b3JiLCB3MSwgdzIpCiAgICB8IChXb3JkOF9hcnNoaWZ0LCBbV29yZCB3MSwgV29yZCB3Ml0p
ID0+IHc4dyhXb3JkOC5+Pj4sIHcxLCB3MikKICAgIHwgKFdvcmQzMl9tdWwsIFtXb3JkIHcxLCBX
b3JkIHcyXSkgPT4gd28oV29yZC4qLCB3MSwgdzIpCiAgICB8IChXb3JkMzJfYWRkLCBbV29yZCB3
MSwgV29yZCB3Ml0pID0+IHdvKFdvcmQuKywgdzEsIHcyKQogICAgfCAoV29yZDMyX3N1YiwgW1dv
cmQgdzEsIFdvcmQgdzJdKSA9PiB3byhXb3JkLi0sIHcxLCB3MikKICAgIHwgKFdvcmQzMl9sdCwg
W1dvcmQgdzEsIFdvcmQgdzJdKSA9PiBwcmVkKFdvcmQuPCwgdzEsIHcyKQogICAgfCAoV29yZDMy
X2xzaGlmdCwgW1dvcmQgdzEsIFdvcmQgdzJdKSA9PiB3byhXb3JkLjw8LCB3MSwgdzIpCiAgICB8
IChXb3JkMzJfbGUsIFtXb3JkIHcxLCBXb3JkIHcyXSkgPT4gcHJlZChXb3JkLjw9LCB3MSwgdzIp
CiAgICB8IChXb3JkMzJfZ3QsIFtXb3JkIHcxLCBXb3JkIHcyXSkgPT4gcHJlZChXb3JkLj4sIHcx
LCB3MikKICAgIHwgKFdvcmQzMl9nZSwgW1dvcmQgdzEsIFdvcmQgdzJdKSA9PiBwcmVkKFdvcmQu
Pj0sIHcxLCB3MikKICAgIHwgKFdvcmQzMl9yc2hpZnQsIFtXb3JkIHcxLCBXb3JkIHcyXSkgPT4g
d28oV29yZC4+PiwgdzEsIHcyKQogICAgfCAoV29yZDMyX2FuZGIsIFtXb3JkIHcxLCBXb3JkIHcy
XSkgPT4gd28oV29yZC5hbmRiLCB3MSwgdzIpCiAgICB8IChXb3JkMzJfZGl2LCBbV29yZCB3MSwg
V29yZCB3Ml0pID0+IHdvKFdvcmQuZGl2LCB3MSwgdzIpCiAgICB8IChXb3JkMzJfZnJvbUludCwg
W0ludCBpXSkgPT4gd29yZChXb3JkLmZyb21JbnQgaSkKICAgIHwgKFdvcmQzMl9tb2QsIFtXb3Jk
IHcxLCBXb3JkIHcyXSkgPT4gd28oV29yZC5tb2QsIHcxLCB3MikKICAgIHwgKFdvcmQzMl9ub3Ri
LCBbV29yZCB3XSkgPT4gd29yZChXb3JkLm5vdGIgdykKICAgIHwgKFdvcmQzMl9vcmIsIFtXb3Jk
IHcxLCBXb3JkIHcyXSkgPT4gd28oV29yZC5vcmIsIHcxLCB3MikKICAgIHwgKFdvcmQzMl90b0lu
dFgsIFtXb3JkIHddKSA9PiBpbnQoV29yZC50b0ludFggdykKICAgIHwgKFdvcmQzMl94b3JiLCBb
V29yZCB3MSwgV29yZCB3Ml0pID0+IHdvKFdvcmQueG9yYiwgdzEsIHcyKQogICAgfCAoV29yZDMy
X2Fyc2hpZnQsIFtXb3JkIHcxLCBXb3JkIHcyXSkgPT4gd28oV29yZC5+Pj4sIHcxLCB3MikKICAg
IHwgXyA9PiBOT05FCiAgIGVuZCBoYW5kbGUgQ2hyID0+IE5PTkUKCSAgICB8IERpdiA9PiBOT05F
CgkgICAgfCBPdmVyZmxvdyA9PiBOT05FCgkgICAgfCBTdWJzY3JpcHQgPT4gTk9ORQoKZW5kCg==

--DUNoO8KKGJ--