Bugfix in BinIO etc.

ANOQ of the Sun anoq@hardcoreprocessing.com
Sun, 04 Jun 2000 17:48:14 +0200


This is a multi-part message in MIME format.
--------------BE2E50C43683742BDDD756DA
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello!


I found a bug in the BinIO stuff I made - in
the function ouput1, the call

str c

should have been

Vector.fromList [c]

Also I have an updated mlton-lib.c and mlton-lib.h
along with a new winmain.h. This enables you
to compile Win32 applications without having
to link with SDL. It requires a libwinmain.a
which I'll send in the next mail...

When compiling Win32 applications with mlton, do something
like this:

First set the path to the gcc crosscompiler, then

mlton -D_WIN32 -L<crosscompiler libraries path>
  -lmingw32 -lwinmain Source.sml <other winlibs>

For <other winlibs> you could look at some of
the Makefiles on my homepage in the SDL::ML stuff -
but you do not need -lSDL -lSDLmain -lSDL_image etc. :)

If you want to use SDL, you should also set the flag
-DUSE_SDL



Cheers
-- 
http://www.HardcoreProcessing.com


--------------BE2E50C43683742BDDD756DA
Content-Type: application/x-unknown-content-type-sml_auto_file;
 name="bin-io.sml"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="bin-io.sml"

KCogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4KICogUGxl
YXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgogKikKc3Ry
dWN0dXJlIEJpbklPOiBCSU5fSU8gPQogICBzdHJ1Y3QKICAgICAgc3RydWN0dXJlIEZTID0gUG9z
aXguRmlsZVN5cwogICAgICBzdHJ1Y3R1cmUgUElPID0gUG9zaXguSU8KCSAKICAgICAgc3RydWN0
dXJlIEFycmF5ID0gV29yZDhBcnJheQogICAgICBzdHJ1Y3R1cmUgVmVjdG9yID0gV29yZDhWZWN0
b3IKCSAKICAgICAgdHlwZSB2ZWN0b3IgPSBWZWN0b3IudmVjdG9yCiAgICAgIHR5cGUgZWxlbSA9
IFZlY3Rvci5lbGVtCgogICAgICB2YWwgYnVmU2l6ZSA9IDQwOTYKCiAgICAgICgqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKikKICAgICAgKCogICAg
ICAgICAgICAgICAgICAgICBvdXRzdHJlYW0gICAgICAgICAgICAgICAgICAgICAqKQogICAgICAo
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSopCgog
ICAgICBkYXRhdHlwZSBidWYgPQoJIEJ1ZiBvZiB7c2l6ZTogaW50IHJlZiwKCQkgYXJyYXk6IEFy
cmF5LmFycmF5fQoKICAgICAgZnVuIGlzRnVsbChCdWZ7c2l6ZSwgLi4ufSkgPSAhc2l6ZSA9IGJ1
ZlNpemUKCiAgICAgICgqIHdyaXRlIG91dCB0byBmZCBzaXplIGJ5dGVzIG9mIGJ1ZiBzdGFydGlu
ZyBhdCBpbmRleCBpICopCiAgICAgIGZ1biBmbHVzaEdlbihmZDogRlMuZmlsZV9kZXNjLAoJCSAg
IGJ1ZjogJ2EsCgkJICAgaTogaW50LAoJCSAgIHNpemU6IGludCwKCQkgICB3cml0ZTogRlMuZmls
ZV9kZXNjICoge2J1ZjogJ2EsCgkJCQkJICAgaTogaW50LAoJCQkJCSAgIHN6OiBpbnQgb3B0aW9u
fSAtPiBpbnQpOiB1bml0ID0KCSBsZXQKCSAgICB2YWwgbWF4ID0gaSArIHNpemUKCSAgICBmdW4g
bG9vcCBpID0KCSAgICAgICBpZiBpID0gbWF4CgkJICB0aGVuICgpCgkgICAgICAgZWxzZQoJCSAg
bG9vcChpICsgd3JpdGUoZmQsIHtidWYgPSBidWYsCgkJCQkgICAgICBpID0gaSwKCQkJCSAgICAg
IHN6ID0gU09NRShtYXggLSBpKX0pKQoJIGluIGxvb3AgaQoJIGVuZAoKICAgICAgZnVuIGZsdXNo
KGZkLCBCdWZ7c2l6ZSwgYXJyYXl9KSA9CgkgKGZsdXNoR2VuKGZkLCBhcnJheSwgMCwgIXNpemUs
IFBJTy53cml0ZUFycikKCSAgOyBzaXplIDo9IDApCgkgCiAgICAgIGRhdGF0eXBlIGJ1ZlN0eWxl
ID0KCSBVbmJ1ZmZlcmVkCiAgICAgICB8IExpbmUgb2YgYnVmCiAgICAgICB8IEJ1ZmZlcmVkIG9m
IGJ1ZgoJIAogICAgICBkYXRhdHlwZSBvdXRzdHJlYW0nID0KCSBPdXQgb2Yge2ZkOiBGUy5maWxl
X2Rlc2MsCgkJIGNsb3NlZDogYm9vbCByZWYsCgkJIGJ1ZlN0eWxlOiBidWZTdHlsZX0KICAgICAg
dHlwZSBvdXRzdHJlYW0gPSBvdXRzdHJlYW0nIHJlZgoKICAgICAgdmFsIG1rT3V0c3RyZWFtID0g
cmVmCiAgICAgIHZhbCBnZXRPdXRzdHJlYW0gPSAhCiAgICAgIHZhbCBzZXRPdXRzdHJlYW0gPSBv
cCA6PQoJIAogICAgICBmdW4gZmx1c2hPdXQocmVmKE91dHtmZCwgYnVmU3R5bGUsIGNsb3NlZCwg
Li4ufSkpOiB1bml0ID0KCSAoY2FzZSAoIWNsb3NlZCwgYnVmU3R5bGUpIG9mCgkgICAgICh0cnVl
LCBfKSA9PiAoKQoJICAgfCAoXywgICAgVW5idWZmZXJlZCkgPT4gKCkKCSAgIHwgKF8sICAgIExp
bmUgYikgPT4gZmx1c2goZmQsIGIpCgkgICB8IChfLCAgICBCdWZmZXJlZCBiKSA9PiBmbHVzaChm
ZCwgYikpCgkgaGFuZGxlIGV4biA9PiByYWlzZSBJTy5Jb3tuYW1lID0gIjx1bmltcGxlbWVudGVk
PiIsCgkJCQkgICBmdW5jdGlvbiA9ICJmbHVzaE91dCIsCgkJCQkgICBjYXVzZSA9IGV4bn0KCiAg
ICAgIHZhbCBvcGVuT3V0czogb3V0c3RyZWFtIGxpc3QgcmVmID0gcmVmIFtdCgogICAgICBmdW4g
Y2xvc2VPdXQob3V0IGFzIHJlZihPdXR7ZmQsIGNsb3NlZCwgLi4ufSkpOiB1bml0ID0KCSBpZiAh
Y2xvc2VkIHRoZW4gKCkKCSBlbHNlIChmbHVzaE91dCBvdXQ7CgkgICAgICAgY2xvc2VkIDo9IHRy
dWU7CgkgICAgICAgUElPLmNsb3NlIGZkOwoJICAgICAgIG9wZW5PdXRzIDo9IExpc3QuZmlsdGVy
IChmbiBvdXQnID0+IG5vdChvdXQgPSBvdXQnKSkgKCFvcGVuT3V0cykpCgogICAgICB2YWwgbmV3
T3V0ID0KCSAoKCogVGhlc2Ugc2lkZS1lZmZlY3QgaXMgaGVyZSBzbyB0aGF0IHRoZSBkZWFkIGNv
ZGUgZWxpbWluYXRpb24gd29uJ3QKCSAgICogZ2V0IHJpZCBvZiBpdCBhcyBsb25nIGFzIG5ld091
dCBpcyB1c2VkCgkgICAqKQoJICBBdFNhdmVXb3JsZC5hZGROZXdDbGVhbmVyKGZuICgpID0+IExp
c3QuYXBwIGZsdXNoT3V0ICghb3Blbk91dHMpKTsKCSAgQXRFeGl0LmFkZE5ld0NsZWFuZXIKCSAg
KGZuICgpID0+CgkgICBMaXN0LmFwcAoJICAgKGZuIG91dCBhcyByZWYoT3V0e2ZkLC4uLn0pID0+
CgkgICAgKGZsdXNoT3V0IG91dDsKCSAgICAgaWYgZmQgPSBGUy5zdGRvdXQgb3JlbHNlIGZkID0g
RlMuc3RkZXJyCgkJdGhlbiAoKQoJICAgICBlbHNlIGNsb3NlT3V0IG91dCkpCgkgICAoIW9wZW5P
dXRzKSk7CgkgICgqIGVuZCBzdHVwaWRpdHkgKikKCSAgZm4gZmQgPT4KCSAgbGV0CgkgICAgIHZh
bCBidWZTdHlsZSA9CgkJaWYgZmQgPSBGUy5zdGRlcnIKCQkgICB0aGVuIFVuYnVmZmVyZWQKCQll
bHNlIChpZiBQb3NpeC5Qcm9jRW52LmlzYXR0eSBmZCB0aGVuIExpbmUgZWxzZSBCdWZmZXJlZCkK
CQkgICAoQnVme3NpemUgPSByZWYgMCwKCQkJYXJyYXkgPSBBcnJheS5hcnJheShidWZTaXplLCAw
dzApfSkKCSAgICAgdmFsIG91dCA9IHJlZihPdXR7ZmQgPSBmZCwKCQkJICAgICAgIGNsb3NlZCA9
IHJlZiBmYWxzZSwKCQkJICAgICAgIGJ1ZlN0eWxlID0gYnVmU3R5bGV9KQoJICBpbiBvcGVuT3V0
cyA6PSBvdXQgOjogIW9wZW5PdXRzOwoJICAgICBvdXQKCSAgZW5kKQoKICAgICAgbG9jYWwKCSB2
YWwgcmVhZFdyaXRlID0KCSAgICBsZXQgb3BlbiBGUy5TCgkgICAgaW4gZmxhZ3NbaXJ1c3IsIGl3
dXNyLCBpcmdycCwgaXdncnAsIGlyb3RoLCBpd290aF0KCSAgICBlbmQKICAgICAgaW4KCSBmdW4g
b3Blbk91dCBwYXRoID0KCSAgICAobmV3T3V0KEZTLmNyZWF0KHBhdGgsIHJlYWRXcml0ZSkpKQoJ
ICAgIGhhbmRsZSBleG4gPT4gcmFpc2UgSU8uSW97bmFtZSA9ICI8dW5pbXBsZW1lbnRlZD4iLAoJ
CQkJICAgICAgZnVuY3Rpb24gPSAib3Blbk91dCIsCgkJCQkgICAgICBjYXVzZSA9IGV4bn0KCSAg
ICAgICAKCSBmdW4gb3BlbkFwcGVuZCBwYXRoID0KCSAgICAobmV3T3V0KEZTLmNyZWF0ZWYocGF0
aCwgRlMuT19XUk9OTFksIEZTLk8uZmxhZ3NbRlMuTy5hcHBlbmQsIEZTLk8uYmluYXJ5XSwgcmVh
ZFdyaXRlKSkpCgkgICAgaGFuZGxlIGV4biA9PiByYWlzZSBJTy5Jb3tuYW1lID0gIjx1bmltcGxl
bWVudGVkPiIsCgkJCQkgICAgICBmdW5jdGlvbiA9ICJvcGVuQXBwZW5kIiwKCQkJCSAgICAgIGNh
dXNlID0gZXhufQogICAgICBlbmQKICAgICAgCiAgICAgIGZ1biBvdXRwdXQob3V0IGFzIHJlZihP
dXR7ZmQsIGNsb3NlZCwgYnVmU3R5bGUsIC4uLn0pLCB2KTogdW5pdCA9CgkgbGV0CgkgaW4gaWYg
IWNsb3NlZAoJICAgICAgIHRoZW4gcmFpc2UgSU8uSW97bmFtZSA9ICI8dW5pbXBsZW1lbnRlZD4i
LAoJCQkJZnVuY3Rpb24gPSAib3V0cHV0MSIsCgkJCQljYXVzZSA9IElPLkNsb3NlZFN0cmVhbX0K
CSAgICBlbHNlCgkgICAgICAgbGV0CgkJICB2YWwgdmVjU2l6ZSA9IFZlY3Rvci5sZW5ndGggdgoJ
CSAgZnVuIHN0b3JlKGIgYXMgQnVme3NpemUsIGFycmF5fSkgPQoJCSAgICAgbGV0CgkJCXZhbCBj
dXJTaXplID0gIXNpemUKCQkJdmFsIG5ld1NpemUgPSB2ZWNTaXplICsgY3VyU2l6ZQoJCSAgICAg
aW4KCQkJaWYgbmV3U2l6ZSA+IGJ1ZlNpemUKCQkJICAgdGhlbgoJCQkgICAgICBsZXQKCQkJCSAo
KiBmbHVzaCB0aGUgY3VycmVudCBidWZmZXIgKyBhIHByZWZpeCBvZiB0aGUKCQkJCSAgKiB2ZWN0
b3IsIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBlbXB0eQoJCQkJICAqKQoJCQkJIHZhbCB2ZWNp
ID0KCQkJCSAgICBpZiBjdXJTaXplID0gMAoJCQkJICAgICAgIHRoZW4gMAoJCQkJICAgIGVsc2UK
CQkJCSAgICAgICBsZXQgdmFsIGZpbGwgPSBidWZTaXplIC0gY3VyU2l6ZQoJCQkJICAgICAgIGlu
IEFycmF5LmNvcHlWZWN7c3JjID0gdiwKCQkJCQkJCXNpID0gMCwKCQkJCQkJCWxlbiA9IFNPTUUg
ZmlsbCwKCQkJCQkJCWRzdCA9IGFycmF5LAoJCQkJCQkJZGkgPSBjdXJTaXplfSA7CgkJCQkJICBz
aXplIDo9IGJ1ZlNpemUgOwoJCQkJCSAgZmx1c2goZmQsIGIpIDsKCQkJCQkgIGZpbGwKCQkJCSAg
ICAgICBlbmQKCQkJCSAoKiBmbHVzaCBvdXQgYXMgbXVjaCBvZiB0aGUgdmVjdG9yIGFzIG5lZWRl
ZAoJCQkJICAqIHNvIHRoYXQgPD0gYnVmU2l6ZSByZW1haW5zCgkJCQkgICopCgkJCQkgZnVuIGxv
b3AgaSA9CgkJCQkgICAgbGV0IHZhbCByZW1haW5pbmcgPSB2ZWNTaXplIC0gaQoJCQkJICAgIGlu
IGlmIHJlbWFpbmluZyA8PSBidWZTaXplCgkJCQkJICB0aGVuCgkJCQkJICAgICAoQXJyYXkuY29w
eVZlY3tzcmMgPSB2LAoJCQkJCQkJICAgIHNpID0gaSwKCQkJCQkJCSAgICBsZW4gPSBTT01FIHJl
bWFpbmluZywKCQkJCQkJCSAgICBkc3QgPSBhcnJheSwKCQkJCQkJCSAgICBkaSA9IDB9IDsKCQkJ
CQkgICAgICBzaXplIDo9IHJlbWFpbmluZykKCQkJCSAgICAgICBlbHNlCgkJCQkJICAoZmx1c2hH
ZW4oZmQsIHYsIGksIGJ1ZlNpemUsIFBJTy53cml0ZVZlYyk7CgkJCQkJICAgbG9vcChpICsgYnVm
U2l6ZSkpCgkJCQkgICAgZW5kCgkJCSAgICAgIGluIGxvb3AgdmVjaQoJCQkgICAgICBlbmQKCQkJ
ZWxzZSAoQXJyYXkuY29weVZlY3tzcmMgPSB2LCBzaSA9IDAsIGxlbiA9IE5PTkUsCgkJCQkJICAg
IGRzdCA9IGFycmF5LCBkaSA9IGN1clNpemV9IDsKCQkJICAgICAgc2l6ZSA6PSBuZXdTaXplKQoJ
CSAgICAgZW5kCgkgICAgICAgaW4gY2FzZSBidWZTdHlsZSBvZgoJCSAgVW5idWZmZXJlZCA9PiBm
bHVzaEdlbihmZCwgdiwgMCwgdmVjU2l6ZSwgUElPLndyaXRlVmVjKQoJCXwgTGluZSBiID0+IChz
dG9yZSBiKQoJCXwgQnVmZmVyZWQgYiA9PiBzdG9yZSBiCgkgICAgICAgZW5kIGhhbmRsZSBleG4g
PT4gcmFpc2UgSU8uSW97bmFtZSA9ICI8dW5pbXBsZW1lbnRlZD4iLAoJCQkJCSAgICAgZnVuY3Rp
b24gPSAib3V0cHV0MSIsCgkJCQkJICAgICBjYXVzZSA9IGV4bn0KCSBlbmQKICAgICAgCiAgICAg
IGZ1biBvdXRwdXQxKG91dCwgYzogZWxlbSk6IHVuaXQgPQogICAgICAgICAgICBvdXRwdXQob3V0
LCBWZWN0b3IuZnJvbUxpc3QgW2NdKQoJICAgIAogICAgICAoKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSopCiAgICAgICgqICAgICAgICAgICAgICAg
ICAgICAgaW5zdHJlYW0gICAgICAgICAgICAgICAgICAgICAgKikKICAgICAgKCotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qKQoKICAgICAgZGF0YXR5
cGUgaW5zdHJlYW0gPQoJIEluIG9mIHtmZDogRlMuZmlsZV9kZXNjLAoJCWNsb3NlZDogYm9vbCBy
ZWYsCgkJZW9mOiBib29sIHJlZiwKCQlmaXJzdDogaW50IHJlZiwgKCogaW5kZXggb2YgZmlyc3Qg
Y2hhcmFjdGVyICopCgkJbGFzdDogaW50IHJlZiwgICgqIG9uZSBwYXN0IHRoZSBpbmRleCBvZiB0
aGUgbGFzdCBjaGFyICopCgkJYnVmOiBBcnJheS5hcnJheX0KCiAgICAgIGZ1biBuZXdJbiBmZCA9
IElue2ZkID0gZmQsCgkJCWVvZiA9IHJlZiBmYWxzZSwKCQkJY2xvc2VkID0gcmVmIGZhbHNlLAoJ
CQlmaXJzdCA9IHJlZiAwLAoJCQlsYXN0ID0gcmVmIDAsCgkJCWJ1ZiA9IEFycmF5LmFycmF5KGJ1
ZlNpemUsIDB3MCl9CgogICAgICBmdW4gb3BlbkluIHBhdGggPQoJIG5ld0luKEZTLm9wZW5mKHBh
dGgsIEZTLk9fUkRPTkxZLCBGUy5PLmZsYWdzW0ZTLk8uYmluYXJ5XSkpCgkgaGFuZGxlIGV4biA9
PiByYWlzZSBJTy5Jb3tuYW1lID0gIjx1bmltcGxlbWVudGVkPiIsCgkJCQkgICBmdW5jdGlvbiA9
ICJvcGVuSW4iLAoJCQkJICAgY2F1c2UgPSBleG59CgogICAgICBmdW4gdXBkYXRlSW4oSW57ZmQs
IGNsb3NlZCwgZW9mLCBmaXJzdCwgbGFzdCwgYnVmLCAuLi59KTogdW5pdCA9CgkgaWYgIWNsb3Nl
ZAoJICAgIHRoZW4gcmFpc2UgSU8uSW97bmFtZSA9ICI8dW5pbXBsZW1lbnRlZD4iLAoJCQkgICAg
IGZ1bmN0aW9uID0gIjx1bmtub3duPiIsCgkJCSAgICAgY2F1c2UgPSBJTy5DbG9zZWRTdHJlYW19
CgkgZWxzZSBpZiAhZW9mCgkJIHRoZW4gKCkKCSAgICAgIGVsc2UgCgkJIGlmICFmaXJzdCA9ICFs
YXN0CgkJICAgIHRoZW4gKCogbmVlZCB0byByZWFkICopCgkJICAgICAgIGxldAoJCQkgIHZhbCBi
eXRlc1JlYWQgPQoJCQkgICAgIFBJTy5yZWFkQXJyKGZkLCB7YnVmID0gYnVmLCBpID0gMCwgc3og
PSBOT05FfSkKCQkgICAgICAgaW4gaWYgYnl0ZXNSZWFkID0gMAoJCQkgICAgIHRoZW4gZW9mIDo9
IHRydWUKCQkJICBlbHNlIChmaXJzdCA6PSAwOyBsYXN0IDo9IGJ5dGVzUmVhZCkKCQkgICAgICAg
ZW5kCgkJIGVsc2UgKCkKCiAgICAgIHZhbCBlbXB0eSA9IFdvcmQ4VmVjdG9yLnRhYnVsYXRlICgw
LCBmbiBfID0+IDB3MCkKCSAKICAgICAgZnVuIGlucHV0KGlucyBhcyBJbntlb2YsIGJ1ZiwgZmly
c3QsIGxhc3QsIC4uLn0pOiB2ZWN0b3IgPQoJICh1cGRhdGVJbiBpbnMKCSAgOyBpZiAhZW9mCgkg
ICAgICAgdGhlbiAoZW9mIDo9IGZhbHNlOyBlbXB0eSkKCSAgICBlbHNlCgkgICAgICAgKAoJCShB
cnJheS5leHRyYWN0KGJ1ZiwgIWZpcnN0LCBTT01FKCFsYXN0IC0gIWZpcnN0KSkpCgkJYmVmb3Jl
IGZpcnN0IDo9ICFsYXN0KSkKCSBoYW5kbGUgZXhuID0+IHJhaXNlIElPLklve25hbWUgPSAiPHVu
aW1wbGVtZW50ZWQ+IiwKCQkJCSAgIGZ1bmN0aW9uID0gImlucHV0IiwKCQkJCSAgIGNhdXNlID0g
ZXhufQoKICAgICAgZnVuIGxvb2thaGVhZChpbnMgYXMgSW57ZW9mLCBidWYsIGZpcnN0LCAuLi59
KTogZWxlbSBvcHRpb24gPQoJIChpZiAhZW9mCgkgICAgIHRoZW4gTk9ORQoJICBlbHNlICh1cGRh
dGVJbiBpbnMKCQk7IGlmICFlb2YKCQkgICAgIHRoZW4gTk9ORQoJCSAgZWxzZSBTT01FKChBcnJh
eS5zdWIoYnVmLCAhZmlyc3QpKSkpKQoJIGhhbmRsZSBleG4gPT4gcmFpc2UgSU8uSW97bmFtZSA9
ICI8dW5pbXBsZW1lbnRlZD4iLAoJCQkJICAgZnVuY3Rpb24gPSAibG9va2FoZWFkIiwKCQkJCSAg
IGNhdXNlID0gZXhufQoKICAgICAgZnVuIGlucHV0MShpbnMgYXMgSW57YnVmLCBmaXJzdCwgLi4u
fSk6IGVsZW0gb3B0aW9uID0KCSAoY2FzZSBsb29rYWhlYWQgaW5zIG9mCgkgICAgIE5PTkUgPT4g
Tk9ORQoJICAgfCByZXMgYXMgU09NRSBfID0+IChmaXJzdCA6PSAxICsgIWZpcnN0OwoJCQkgICAg
ICAgcmVzKSkKCSBoYW5kbGUgZXhuID0+IHJhaXNlIElPLklve25hbWUgPSAiPHVuaW1wbGVtZW50
ZWQ+IiwKCQkJCSAgIGZ1bmN0aW9uID0gImlucHV0MSIsCgkJCQkgICBjYXVzZSA9IGV4bn0KCiAg
ICAgIGZ1biBpbnB1dE4oaW5zIGFzIElue2ZkLCBlb2YsIGZpcnN0LCBsYXN0LCBidWYsIC4uLn0s
CgkJIGJ5dGVzVG9SZWFkOiBpbnQpOiB2ZWN0b3IgPQoJIChpZiBJbnQuZ2V1KGJ5dGVzVG9SZWFk
LCBBcnJheS5tYXhMZW4pCgkgICAgIHRoZW4gcmFpc2UgU2l6ZQoJICBlbHNlCgkgICAgIGlmICFl
b2YKCQl0aGVuIChlb2YgOj0gZmFsc2U7IGVtcHR5KQoJICAgICBlbHNlCgkJbGV0IHZhbCBzaXpl
ID0gIWxhc3QgLSAhZmlyc3QKCQlpbiBpZiBzaXplID49IGJ5dGVzVG9SZWFkCgkJICAgICAgdGhl
biAoCgkJCSAgICAoQXJyYXkuZXh0cmFjdChidWYsICFmaXJzdCwgU09NRSBieXRlc1RvUmVhZCkp
CgkJCSAgICBiZWZvcmUgZmlyc3QgOj0gYnl0ZXNUb1JlYWQgKyAhZmlyc3QpCgkJICAgZWxzZQoJ
CSAgICAgIGxldCB2YWwgZHN0ID0gQXJyYXkuYXJyYXkoYnl0ZXNUb1JlYWQsIDB3MCkKCQkJIHZh
bCBfID0KCQkJICAgIChBcnJheS5jb3B5e3NyYyA9IGJ1Ziwgc2kgPSAhZmlyc3QsIGxlbiA9IFNP
TUUgc2l6ZSwKCQkJCQlkc3QgPSBkc3QsIGRpID0gMH0gOwoJCQkgICAgIGZpcnN0IDo9ICFsYXN0
KQoJCQkgZnVuIGxvb3AoYnl0ZXNSZWFkOiBpbnQpOiBpbnQgPQoJCQkgICAgaWYgYnl0ZXNSZWFk
ID0gYnl0ZXNUb1JlYWQKCQkJICAgICAgIHRoZW4gYnl0ZXNSZWFkCgkJCSAgICBlbHNlIGxldAoJ
CQkJICAgIHZhbCBieXRlc1JlYWQnID0KCQkJCSAgICAgICBQSU8ucmVhZEFycgoJCQkJICAgICAg
IChmZCwge2J1ZiA9IGRzdCwgaSA9IGJ5dGVzUmVhZCwKCQkJCQkgICAgIHN6ID0gU09NRShieXRl
c1RvUmVhZCAtIGJ5dGVzUmVhZCl9KQoJCQkJIGluIGlmIGJ5dGVzUmVhZCcgPSAwCgkJCQkgICAg
ICAgdGhlbiAoZW9mIDo9IHRydWUgOwoJCQkJCSAgICAgYnl0ZXNSZWFkKQoJCQkJICAgIGVsc2Ug
bG9vcChieXRlc1JlYWQgKyBieXRlc1JlYWQnKQoJCQkJIGVuZAoJCQkgdmFsIGJ5dGVzUmVhZCA9
IGxvb3Agc2l6ZQoJCSAgICAgIGluIGlmIGJ5dGVzUmVhZCA9IGJ5dGVzVG9SZWFkCgkJCSAgICB0
aGVuCgkJCSAgICAgICAgIChQcmltaXRpdmUuVmVjdG9yLmZyb21BcnJheSBkc3QpCgkJCSBlbHNl
ICgKCQkJICAgICAgIChBcnJheS5leHRyYWN0KGRzdCwgMCwgU09NRSBieXRlc1JlYWQpKSkKCQkg
ICAgICBlbmQKCQllbmQpCgkgICAgIGhhbmRsZSBleG4gPT4gcmFpc2UgSU8uSW97bmFtZSA9ICI8
dW5pbXBsZW1lbnRlZD4iLAoJCQkJICAgICAgIGZ1bmN0aW9uID0gImlucHV0TiIsCgkJCQkgICAg
ICAgY2F1c2UgPSBleG59CgogICAgICBmdW4gaW5wdXRBbGwoaW5zIGFzIElue2ZkLCBlb2YsIGZp
cnN0LCBsYXN0LCBidWYsIC4uLn0pID0KCSBpZiAhZW9mCgkgICAgdGhlbiAoZW9mIDo9IGZhbHNl
OyBlbXB0eSkKCSBlbHNlCgkgICAgKGxldCB2YWwgdnMgPSBbQXJyYXkuZXh0cmFjdChidWYsICFm
aXJzdCwgU09NRSghbGFzdCAtICFmaXJzdCkpXQoJCSBmdW4gbG9vcCB2cyA9CgkJICAgIGxldCB2
YWwgdiA9IFBJTy5yZWFkVmVjKGZkLCBidWZTaXplKQoJCSAgICBpbiBpZiBWZWN0b3IubGVuZ3Ro
IHYgPSAwCgkJCSAgdGhlbiAoVmVjdG9yLmNvbmNhdChyZXYgdnMpKQoJCSAgICAgICBlbHNlIGxv
b3AodiA6OiB2cykKCQkgICAgZW5kCgkgICAgIGluIGxvb3AgdnMKCSAgICAgZW5kKQoJICAgIGhh
bmRsZSBleG4gPT4gcmFpc2UgSU8uSW97bmFtZSA9ICI8dW5pbXBsZW1lbnRlZD4iLAoJCQkJICAg
ICAgZnVuY3Rpb24gPSAiaW5wdXROIiwKCQkJCSAgICAgIGNhdXNlID0gZXhufQoKICAgICAgKCog
bm90IGVudGlyZWx5IGNvcnJlY3QgLSByZWFsbHkgbmVlZHMgdG8gZG8gbm9uIGJsb2NraW5nIGxv
b2thaGVhZCAqKQogICAgICBmdW4gY2FuSW5wdXQoaW5zIGFzIElue2VvZiwgZmlyc3QsIGxhc3Qs
IC4uLn0sIG4pID0KCSAodXBkYXRlSW4gaW5zCgkgIDsgaWYgIWVvZgoJICAgICAgIHRoZW4gU09N
RSAwCgkgICAgZWxzZSBTT01FKEludC5taW4obiwgIWxhc3QgLSAhZmlyc3QpKSkKCiAgICAgIGZ1
biBjbG9zZUluKElue2ZkLCBjbG9zZWQsIC4uLn0pID0KCSAoUElPLmNsb3NlIGZkOyBjbG9zZWQg
Oj0gdHJ1ZSkKCSAgICAKICAgICAgZnVuIGVuZE9mU3RyZWFtKGlucyBhcyBJbntlb2YsIC4uLn0p
ID0KCSAhZW9mIG9yZWxzZSAodXBkYXRlSW4gaW5zOyAhZW9mKQoKICAgICAgKCogVGhpcyBpcyBh
bGwganVzdCBhIGhhY2sgc28gdGhhdCBJIGNhbiBlbXVsYXRlIHNjYW5TdHJlYW0gKikKICAgICAg
c3RydWN0dXJlIFN0cmVhbUlPID0KCSBzdHJ1Y3QKCSAgICB0eXBlIG91dHN0cmVhbSA9IG91dHN0
cmVhbScKCgkgICAgZGF0YXR5cGUgc3RhdGUgPQoJICAgICAgIFVuZXZhbCBvZiBpbnN0cmVhbQoJ
ICAgICB8IEV2YWwgb2YgKGNoYXIgKiBsYXp5KSBvcHRpb24KCSAgICB3aXRodHlwZSBsYXp5ID0g
c3RhdGUgcmVmCgoJICAgIHR5cGUgaW5zdHJlYW0gPSBsYXp5CigqCgkgICAgZnVuIG1ha2UgaW5z
ID0gcmVmKFVuZXZhbCBpbnMpCgoJICAgIGZ1biBpbnB1dDEnIHIgPQoJICAgICAgIGNhc2UgIXIg
b2YKCQkgIEV2YWwgdiA9PiB2CgkJfCBVbmV2YWwgaW5zID0+IGxldCB2YWwgdiA9IChjYXNlIGlu
cHV0MSBpbnMgb2YKCQkJCQkJTk9ORSA9PiBOT05FCgkJCQkJICAgICAgfCBTT01FIGMgPT4gU09N
RShjLCBtYWtlIGlucykpCgkJCQlpbiByIDo9IEV2YWwgdjsgdgoJCQkJZW5kCgkgICAgdmFsIGlu
cHV0MSA9IGlucHV0MScqKQoJIGVuZAooKgogICAgICBmdW4gc2NhblN0cmVhbSBmIGlucyA9Cgkg
Y2FzZSBmIFN0cmVhbUlPLmlucHV0MSAoU3RyZWFtSU8ubWFrZSBpbnMpIG9mCgkgICAgTk9ORSA9
PiBOT05FCgkgIHwgU09NRSh2LCBfKSA9PiBTT01FIHYJKikKICAgZW5kCigqCnN0cnVjdHVyZSBU
ZXh0SU9HbG9iYWw6IFRFWFRfSU9fR0xPQkFMID0gVGV4dElPCm9wZW4gVGV4dElPCiop

--------------BE2E50C43683742BDDD756DA
Content-Type: application/x-unknown-content-type-ProjectBuilder.c;
 name="mlton-lib.c"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="mlton-lib.c"

LyogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4KICogUGxl
YXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgogKi8KI2lu
Y2x1ZGUgIm1sdG9uLWxpYi5oIgoKI2lmIGRlZmluZWQoX1dJTjMyKQojaW5jbHVkZSA8d2luZG93
cy5oPgojZW5kaWYKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICBjb3VudGVycyAgICAgICAgICAgICAg
ICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCgp1bGxvbmcgTUxUT05fbnVtVHJhbXBvbGluZXM7CnVsbG9uZyBNTFRPTl9udW1M
aW1pdENoZWNrczsKdWxsb25nIE1MVE9OX251bUludGVyUmV0dXJuczsKdWxsb25nIE1MVE9OX251
bVJldHVybnM7CnVsbG9uZyBNTFRPTl9YbWxLbm93bjsKdWxsb25nIE1MVE9OX1htbFVua25vd247
CnVsbG9uZyBNTFRPTl9TeG1sS25vd247CnVsbG9uZyBNTFRPTl9TeG1sVW5rbm93bjsKdWxsb25n
IE1MVE9OX0Nwc0tub3duOwp1bGxvbmcgTUxUT05fQ3BzVW5rbm93bjsKdWxsb25nIE1MVE9OX0Nw
c0NhbGw7CnVsbG9uZyBNTFRPTl9DcHNMb29wOwp1bGxvbmcgTUxUT05fQ3BzRGlzcGF0Y2g7CnVs
bG9uZyBNTFRPTl9DcHNDb2VyY2U7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgTUxUT05fYnVnICAg
ICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KCnZvaWQgTUxUT05fYnVnKHN0cmluZyBtc2cpIHsKCWZwcmlu
dGYoc3RkZXJyLCAiTUx0b24gYnVnOiAlcy5cbiVzXG4iLAoJCW1zZywKCQkiUGxlYXNlIHNlbmQg
YSBidWcgcmVwb3J0IHRvIE1MdG9uQHJlc2VhcmNoLm5qLm5lYy5jb20uIik7CiAJZXhpdCgyKTsK
fQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LwovKiAgICAgICAgICAgICAgICAgICAgIE1MVE9OX2luaXQgICAgICAgICAgICAgICAgICAgICAq
LwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
Cgp2b2lkIE1MVE9OX3VzYWdlKHN0cmluZyBzKSB7CglkaWUoIlVzYWdlOiAlcyBbQE1MdG9uIFts
b2FkLXdvcmxkIGZpbGVdIFtmaXhlZC1oZWFwIG5be2t8bX1dXSBbbWF4LWhlYXAgblt7a3xtfV1d
IFtnYy1tZXNzYWdlc10gW2djLXN1bW1hcnldIC0tXSBhcmdzIiwgCgkJcyk7Cn0KCnVpbnQgc3Ry
aW5nVG9CeXRlcyhzdHJpbmcgcykgewoJY2hhciBjOwoJdWludCByZXN1bHQ7CglpbnQgaSwgbTsK
CQoJcmVzdWx0ID0gMDsKCWkgPSAwOwoKCXdoaWxlICgoYyA9IHNbaSsrXSkgIT0gJ1wwMDAnKSB7
CgkJc3dpdGNoIChjKSB7CgkJY2FzZSAnbSc6CgkJCWlmIChzW2ldID09ICdcMDAwJykgCgkJCQly
ZXN1bHQgPSByZXN1bHQgKiAxMDQ4NTc2OwoJCQllbHNlIHJldHVybiAwOwoJCQlicmVhazsKCQlj
YXNlICdrJzoKCQkJaWYgKHNbaV0gPT0gJ1wwMDAnKSAKCQkJCXJlc3VsdCA9IHJlc3VsdCAqIDEw
MjQ7CgkJCWVsc2UgcmV0dXJuIDA7CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCW0gPSAoaW50KShj
IC0gJzAnKTsKCQkJaWYgKDAgPD0gbSBhbmQgbSA8PSA5KQoJCQkJcmVzdWx0ID0gcmVzdWx0ICog
MTAgKyBtOwoJCQllbHNlIHJldHVybiAwOwoJCX0KCX0KCQoJcmV0dXJuIHJlc3VsdDsKfQoKdm9p
ZCBzZXR1cEFyZ3ZBcmdjKGludCBhcmdjLCBjaGFyICoqYXJndiwgTUxUT05fc3RhdGUgKnN0YXRl
LCBpbnQgaSkKewoJLyogU2V0dXAgYXJndiBhbmQgYXJnYyB0aGF0IFNNTCBzZWVzLiAqLwoJLyog
aSBpcyBub3cgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByZWFsIGFyZyAqLwojaWYgZGVmaW5lZChf
V0lOMzIpCglzdGF0ZS0+ZW52aXJvbm1lbnQgPSAodWludCkgZW52aXJvbjsKI2Vsc2UKCXN0YXRl
LT5lbnZpcm9uID0gKHVpbnQpIGVudmlyb247CiNlbmRpZgoJCglzdGF0ZS0+Y29tbWFuZE5hbWUg
PSAodWludCkoYXJndlswXSk7CglzdGF0ZS0+YXJnYyA9IGFyZ2MgLSBpOwoJc3RhdGUtPmFyZ3Yg
PSAodWludCkoYXJndiArIGkpOwp9Cgp2b2lkIE1MVE9OX2luaXQoaW50IGFyZ2MsIAoJICAgICAg
IGNoYXIgKiphcmd2LAoJICAgICAgIE1MVE9OX3N0YXRlICpzdGF0ZSwKCSAgICAgICB1aW50IG1h
Z2ljLAoJICAgICAgIHZvaWQgKCpsb2FkR2xvYmFscykoRklMRSAqZmlsZSkpIHsKCUdDX3N0YXRl
ICpnY1N0YXRlOwoJY2hhciAqd29ybGRGaWxlOwoJaW50IGk7Cglib29sIGRvbmUsIGhlYXBTaXpl
Q29tbWFuZExpbmU7CgoJZ2NTdGF0ZSA9IHN0YXRlLT5nY1N0YXRlOwoJCglzdGF0ZS0+aXNPcmln
aW5hbCA9IFRSVUU7CglzdGF0ZS0+bWFnaWMgPSBtYWdpYzsKCQoJZ2NTdGF0ZS0+bWVzc2FnZXMg
PSBGQUxTRTsKCWdjU3RhdGUtPnN1bW1hcnkgPSBGQUxTRTsKCWhlYXBTaXplQ29tbWFuZExpbmUg
PSBGQUxTRTsKCWdjU3RhdGUtPm1heEhlYXBTaXplID0gMDsKCQoJTUxUT05fbnVtVHJhbXBvbGlu
ZXMgPSAwOwoJTUxUT05fbnVtTGltaXRDaGVja3MgPSAwOwoJTUxUT05fbnVtSW50ZXJSZXR1cm5z
ID0gMDsKCU1MVE9OX251bVJldHVybnMgPSAwOwoJTUxUT05fWG1sS25vd24gPSAwOwoJTUxUT05f
WG1sVW5rbm93biA9IDA7CglNTFRPTl9TeG1sS25vd24gPSAwOwoJTUxUT05fU3htbFVua25vd24g
PSAwOwoJTUxUT05fQ3BzS25vd24gPSAwOwoJTUxUT05fQ3BzVW5rbm93biA9IDA7CglNTFRPTl9D
cHNDYWxsID0gMDsKCU1MVE9OX0Nwc0xvb3AgPSAwOwoJTUxUT05fQ3BzRGlzcGF0Y2ggPSAwOwoJ
TUxUT05fQ3BzQ29lcmNlID0gMDsKCQoJaSA9IDE7CglpZiAoYXJnYyA+IDEgYW5kICgwID09IHN0
cmNtcChhcmd2WzFdLCAiQE1MdG9uIikpKSB7CgkJLyogcHJvY2VzcyBATUx0b24gYXJncyAqLwoJ
CWkgPSAyOwoJCWRvbmUgPSBGQUxTRTsKCQl3aGlsZSAoIWRvbmUpIHsKCQkJaWYgKGkgPT0gYXJn
YykKCQkJCU1MVE9OX3VzYWdlKGFyZ3ZbMF0pOwoJCQllbHNlIHsKCQkJCXN0cmluZyBhcmc7CgoJ
CQkJYXJnID0gYXJndltpXTsKCQkJCWlmICgwID09IHN0cmNtcChhcmcsICJmaXhlZC1oZWFwIikp
IHsKCQkJCQkrK2k7CgkJCQkJaWYgKGkgPT0gYXJnYykKCQkJCQkJTUxUT05fdXNhZ2UoYXJndlsw
XSk7CgkJCQkJaGVhcFNpemVDb21tYW5kTGluZSA9IFRSVUU7CgkJCQkJZ2NTdGF0ZS0+dXNlRml4
ZWRIZWFwID0gVFJVRTsKCQkJCQlnY1N0YXRlLT5mcm9tU2l6ZSA9CgkJCQkJCXN0cmluZ1RvQnl0
ZXMoYXJndltpKytdKTsKCQkJCX0gZWxzZSBpZiAoMCA9PSBzdHJjbXAoYXJnLCAibWF4LWhlYXAi
KSkgewoJCQkJCSsraTsKCQkJCQlpZiAoaSA9PSBhcmdjKSAKCQkJCQkJTUxUT05fdXNhZ2UoYXJn
dlswXSk7CgkJCQkJaGVhcFNpemVDb21tYW5kTGluZSA9IFRSVUU7CgkJCQkJZ2NTdGF0ZS0+dXNl
Rml4ZWRIZWFwID0gRkFMU0U7CgkJCQkJZ2NTdGF0ZS0+bWF4SGVhcFNpemUgPQoJCQkJCQlzdHJp
bmdUb0J5dGVzKGFyZ3ZbaSsrXSk7CgkJCQl9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGFyZywgImdj
LW1lc3NhZ2VzIikpIHsKCQkJCQkrK2k7CgkJCQkJZ2NTdGF0ZS0+bWVzc2FnZXMgPSBUUlVFOwoJ
CQkJfSBlbHNlIGlmICgwID09IHN0cmNtcChhcmcsICJnYy1zdW1tYXJ5IikpIHsKCQkJCQkrK2k7
CgkJCQkJZ2NTdGF0ZS0+c3VtbWFyeSA9IFRSVUU7CgkJCQl9IGVsc2UgaWYgKDAgPT0gc3RyY21w
KGFyZywgImxvYWQtd29ybGQiKSkgewoJCQkJCSsraTsKCQkJCQlpZiAoaSA9PSBhcmdjKSAKCQkJ
CQkJTUxUT05fdXNhZ2UoYXJndlswXSk7CgkJCQkJaWYgKE5VTEwgPT0gbG9hZEdsb2JhbHMpIAoJ
CQkJCQlkaWUoIiVzIGNhbm5vdCBsb2FkIGEgd29ybGQgZmlsZS4iLCBhcmd2WzBdKTsKCQkJCQlz
dGF0ZS0+aXNPcmlnaW5hbCA9IEZBTFNFOwoJCQkJCXdvcmxkRmlsZSA9IGFyZ3ZbaSsrXTsKCQkJ
CX0gZWxzZSBpZiAoMCA9PSBzdHJjbXAoYXJnLCAiLS0iKSkgewoJCQkJCSsraTsKCQkJCQlkb25l
ID0gVFJVRTsKCQkJCX0gZWxzZSBpZiAoaSA+IDEpCgkJCQkJTUxUT05fdXNhZ2UoYXJndlswXSk7
CgkJCSAgICAgICAgZWxzZSBkb25lID0gVFJVRTsKCQkJfQoJCX0KCX0KCQoJaWYgKHN0YXRlLT5p
c09yaWdpbmFsKSAKCQlHQ19pbml0KGdjU3RhdGUpOwoJZWxzZSAKCQlHQ19sb2FkV29ybGQoZ2NT
dGF0ZSwgbWFnaWMsIHdvcmxkRmlsZSwgaGVhcFNpemVDb21tYW5kTGluZSwKCQkJCWxvYWRHbG9i
YWxzKTsKCQoJLyogU2V0dXAgYXJndiBhbmQgYXJnYyB0aGF0IFNNTCBzZWVzLiAqLwoJLyogaSBp
cyBub3cgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByZWFsIGFyZyAqLwoJc2V0dXBBcmd2QXJnYyhh
cmdjLCBhcmd2LCBzdGF0ZSwgaSk7Cn0KCnZvaWQgcHJpbnQocG9pbnRlciBzKSB7Cglmd3JpdGUo
cywgMSwgR0NfYXJyYXlOdW1FbGVtZW50cyhzKSwgc3RkZXJyKTsKfQoKaW50IHN0cmluZ0VxdWFs
KHBvaW50ZXIgczEsIHBvaW50ZXIgczIpIHsKCWlmIChzMSA9PSBzMikgcmV0dXJuIFRSVUU7Cgll
bHNlIHsKCQlpbnQgbjEsIG4yOwoKCQluMSA9IEdDX2FycmF5TnVtRWxlbWVudHMoczEpOwoJCW4y
ID0gR0NfYXJyYXlOdW1FbGVtZW50cyhzMik7CgkJaWYgKG4xICE9IG4yKSAKCQkJcmV0dXJuIEZB
TFNFOwoJCWVsc2UgewoJCQlpbnQgaTsJCgkJCWZvcihpID0gMDsgaSA8IG4xIDsgKytpKQoJCQkJ
aWYgKCooczEgKyBpKSAhPSAqKHMyICsgaSkpIAoJCQkJCXJldHVybiBGQUxTRTsKCQl9Cgl9CgkK
CXJldHVybiBUUlVFOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgSW50ICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwoKdm9pZCBNTFRPTl9vdmVyZmxvdygpIHsKCWRpZSgiTUx0b24gZG9lcyBu
b3QgaGFuZGxlIG92ZXJmbG93LiIpOwp9CgojaWYgZGVmaW5lZChfV0lOMzIpCiNlbHNlCmludCBN
TFRPTl9JbnRfYWRkQ2hlY2soaW50IG4xLCBpbnQgbjIpIHsKCXJlZ2lzdGVyIGludCBlYXggYXNt
KCJheCIpOwoKCWVheCA9IG4xOwoKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImFkZGwgJTEsICUw
XG5cdGpvIE1MVE9OX292ZXJmbG93IgoJCToKCQk6ICJyIiAoZWF4KSwgIm0iIChuMikKCQk6ICJl
YXgiKTsKCglyZXR1cm4gZWF4Owp9CgppbnQgTUxUT05fSW50X3N1YkNoZWNrKGludCBuMSwgaW50
IG4yKSB7CglyZWdpc3RlciBpbnQgZWF4IGFzbSgiYXgiKTsKCgllYXggPSBuMTsKCiAJX19hc21f
XyBfX3ZvbGF0aWxlX18gKCJzdWJsICUxLCAlMFxuXHRqbyBNTFRPTl9vdmVyZmxvdyIKCQk6CgkJ
OiAiciIgKGVheCksICJtIiAobjIpCgkJOiAiZWF4Iik7CgoJcmV0dXJuIGVheDsKfQoKaW50IE1M
VE9OX0ludF9tdWxDaGVjayhpbnQgbjEsIGludCBuMikgewoJcmVnaXN0ZXIgaW50IGVheCBhc20o
ImF4Iik7CgoJZWF4ID0gbjE7CgogCV9fYXNtX18gX192b2xhdGlsZV9fICgiaW11bGwgJTEsICUw
XG5cdGpvIE1MVE9OX292ZXJmbG93IgoJCToKCQk6ICJyIiAoZWF4KSwgIm0iIChuMikKCQk6ICJl
YXgiKTsKCglyZXR1cm4gZWF4Owp9CiNlbmRpZgoKaW50IGludFF1b3QoaW50IG51bWVyYXRvciwg
aW50IGRlbm9taW5hdG9yKSB7CglyZWdpc3RlciBpbnQgZWF4IGFzbSgiYXgiKTsKCQoJZWF4ID0g
bnVtZXJhdG9yIDsKCQoJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjZHFcbiAgICAgICAgaWRpdmwg
JTEiCgkJOiAKCQk6ICJyIiAoZWF4KSwgIm0iIChkZW5vbWluYXRvcikKCQk6ICJlYXgiLCAiZWR4
Iik7CgkKCXJldHVybiBlYXg7Cn0KCmludCBpbnRSZW0oaW50IG51bWVyYXRvciwgaW50IGRlbm9t
aW5hdG9yKSB7CglyZWdpc3RlciBpbnQgZWF4IGFzbSgiYXgiKSwKCQkJZWR4IGFzbSgiZHgiKTsK
CQoJZWF4ID0gbnVtZXJhdG9yIDsKCQoJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjZHFcbiAgICAg
ICAgaWRpdmwgJTEiCgkJOiAKCQk6ICJyIiAoZWF4KSwgIm0iIChkZW5vbWluYXRvcikKCQk6ICJl
YXgiLCAiZWR4Iik7CgkKCXJldHVybiBlZHg7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgIFJl
YWwgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBBbGwgdGhpcyBjb2RlIGFzc3VtZXMgSUVF
RSA3NTQvODU0IGFuZCBsaXR0bGUgZW5kaWFuLgogKgogKiBJbiBtZW1vcnksIHRoZSA2NCBiaXRz
IGEgZG91YmxlIGFyZSBsYXllZCBvdXQgYXMgZm9sbG93cy4KICoKICogYml0cyA3LTAgb2YgbWFu
dGlzc2EKICogYml0cyAxNS04IG9mIG1hbnRpc3NhCiAqIGJpdHMgMjMtMTYgb2YgbWFudGlzc2EK
ICogYml0cyAzMS0yNCBvZiBtYW50aXNzYQogKiBiaXRzIDM5LTMyIG9mIG1hbnRpc3NhCiAqIGJp
dHMgNDctNDAgb2YgbWFudGlzc2EKICogYml0cyAzLTAgb2YgZXhwb25lbnQKICogYml0cyA1MS00
OCBvZiBtYW50aXNzYQogKiBzaWduIGJpdAogKiBiaXRzIDEwLTQgb2YgZXhwb25lbnQKICovCgpp
bnQgc2lnbkJpdChkb3VibGUgZCkgewoJcmV0dXJuICgoKHVuc2lnbmVkIGNoYXIgKikmZClbN10g
JiAweDgwKSA+PiA3Owp9CgovKiBtYXNrcyBmb3Igd29yZCAxICovCiNkZWZpbmUgRVhQT05FTlRf
TUFTSyAweDdGRjAwMDAwCiNkZWZpbmUgTUFOVElTU0FfTUFTSyAweDAwMEZGRkZGCiNkZWZpbmUg
U0lHTkJJVF9NQVNLICAweDgwMDAwMDAwCiNkZWZpbmUgTUFOVElTU0FfSElHSEJJVF9NQVNLIDB4
MDAwODAwMDAKCmludCBjbGFzcyhkb3VibGUgZCkgewoJdWludCB3b3JkMCwgd29yZDE7CgoJd29y
ZDAgPSAoKHVpbnQgKikmZClbMF07Cgl3b3JkMSA9ICgodWludCAqKSZkKVsxXTsKCQoJaWYgKCh3
b3JkMSAmIEVYUE9ORU5UX01BU0spID09IEVYUE9ORU5UX01BU0spIHsKCQkvKiBOQU5fUVVJRVQs
IE5BTl9TSUdOQUxMSU5HLCBvciBJTkYgKi8KCQlpZiAod29yZDAgb3IgKHdvcmQxICYgTUFOVElT
U0FfTUFTSykpIHsKCQkJLyogTkFOX1FVSUVUIG9yIE5BTl9TSUdOQUxMSU5HIC0tIGxvb2sgYXQg
dGhlIGhpZ2hlc3QgYml0IG9mIG1hbnRpc3NhICovCgkJCWlmICh3b3JkMSAmIE1BTlRJU1NBX0hJ
R0hCSVRfTUFTSykKCQkJCXJldHVybiBOQU5fUVVJRVQ7CgkJCWVsc2UKCQkJCXJldHVybiBOQU5f
U0lHTkFMTElORzsKCQl9IGVsc2UKCQkJcmV0dXJuIElORjsKCX0gZWxzZSB7CgkJLyogWkVSTywg
Tk9STUFMLCBvciBTVUJOT1JNQUwgKi8KCQlpZiAod29yZDEgJiBFWFBPTkVOVF9NQVNLKQogICAg
ICAgCQkJcmV0dXJuIE5PUk1BTDsKCQllbHNlIGlmICh3b3JkMCBvciAod29yZDEgJiBNQU5USVNT
QV9NQVNLKSkKCQkJcmV0dXJuIFNVQk5PUk1BTDsKCQllbHNlCgkJCXJldHVybiBaRVJPOwoJfQp9
CgppbnQgaXNGaW5pdGUoZG91YmxlIGQpIHsKCXVpbnQgd29yZDE7CgoJd29yZDEgPSAoKHVpbnQg
KikmZClbMV07CgoJcmV0dXJuICEoKHdvcmQxICYgRVhQT05FTlRfTUFTSykgPT0gRVhQT05FTlRf
TUFTSyk7Cn0KCmludCBpc05hbihkb3VibGUgZCkgewoJdWludCB3b3JkMCwgd29yZDE7CgoJd29y
ZDAgPSAoKHVpbnQgKikmZClbMF07CiAgCXdvcmQxID0gKCh1aW50ICopJmQpWzFdOwoKCXJldHVy
biAoKCh3b3JkMSAmIEVYUE9ORU5UX01BU0spID09IEVYUE9ORU5UX01BU0spCgkJYW5kICh3b3Jk
MCBvciAod29yZDEgJiBNQU5USVNTQV9NQVNLKSkpOwp9CgppbnQgaXNOb3JtYWwoZG91YmxlIGQp
IHsKCXVpbnQgd29yZDEsIGV4cG9uZW50OwoKCXdvcmQxID0gKCh1aW50ICopJmQpWzFdOwogIAog
IAlleHBvbmVudCA9IHdvcmQxICYgRVhQT05FTlRfTUFTSzsKCglyZXR1cm4gbm90KGV4cG9uZW50
ID09IDAgb3IgZXhwb25lbnQgPT0gRVhQT05FTlRfTUFTSyk7Cn0KCiNkZWZpbmUgUk9VTkRJTkdf
Q09OVFJPTF9NQVNLIDB4MEMwMAojZGVmaW5lIFJPVU5ESU5HX0NPTlRST0xfU0hJRlQgMTAKCnZv
aWQgc2V0Um91bmRpbmdNb2RlKGludCBtb2RlKSB7Cgl1bnNpZ25lZCBzaG9ydCBjb250cm9sV29y
ZDsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZzdGN3ICUwIgoJCQk6ICI9bSIgKGNvbnRyb2xX
b3JkKQoJCQk6ICk7Cgljb250cm9sV29yZCA9ICAKCQkobW9kZSA8PCBST1VORElOR19DT05UUk9M
X1NISUZUKSAKCQl8IChjb250cm9sV29yZCAmIH5ST1VORElOR19DT05UUk9MX01BU0spOwoKCV9f
YXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiCiAgICAgICAgICAgICAgICAgICAgICAgIDoK
CQkJOiAibSIgKGNvbnRyb2xXb3JkKSk7Cn0KCmludCBnZXRSb3VuZGluZ01vZGUoKSB7Cgl1bnNp
Z25lZCBzaG9ydCBjb250cm9sV29yZDsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZzdGN3ICUw
IgoJCQk6ICI9bSIgKGNvbnRyb2xXb3JkKQoJCQk6ICk7CgoJcmV0dXJuIChjb250cm9sV29yZCAm
IFJPVU5ESU5HX0NPTlRST0xfTUFTSykgPj4gUk9VTkRJTkdfQ09OVFJPTF9TSElGVDsKfQoKZG91
YmxlIHJvdW5kKGRvdWJsZSBkKSB7CglyZWdpc3RlciBkb3VibGUgZjA7CgoJZjAgPSBkOwoKCV9f
YXNtX18gX192b2xhdGlsZV9fICgiZnJuZGludCIKCQkJOgoJCQk6ICJ0IiAoZjApKTsKCglyZXR1
cm4gZjA7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgIE1MdG9uICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwoKLyogTGludXggc3BlY2lmaWMuICBVc2VzIC9kZXYvcmFuZG9tIHRvIGdldCBhIHJh
bmRvbSB3b3JkLiAqLwp1aW50IE1MVE9OX01MdG9uX3JhbmRvbSgpIHsKCXVpbnQgcmVzdWx0Owoj
aWYgZGVmaW5lZChfV0lOMzIpCglyZXN1bHQgPSByYW5kKCk7CiNlbHNlCglGSUxFICpmaWxlOwoK
CWZpbGUgPSBzb3BlbigiL2Rldi9yYW5kb20iLCAiciIpOwoJcmVzdWx0ID0gc3JlYWRVaW50KGZp
bGUpOwoJZmNsb3NlKGZpbGUpOwojZW5kaWYKCXJldHVybiByZXN1bHQ7Cn0KCi8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAg
ICAgICAgICAgICAgIERhdGUgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpzdHJ1Y3QgdG0gTUxU
T05fdG07CgovKiBCZWdpbiBtb2RpZmllZCBmcm9tIEtpdFYzIHNyYy9SdW50aW1lL1RpbWUuYyAq
LwoKLyogU3VuT1MgNCBhcHBlYXJzIG5vdCB0byBoYXZlIG1rdGltZTogKi8KI2lmIGRlZmluZWQo
c3VuKSAmJiAhZGVmaW5lZChfX3N2cjRfXykKI2RlZmluZSB0bTJjYWwodHB0cikgICB0aW1lbG9j
YWwodHB0cikKI2Vsc2UKI2RlZmluZSB0bTJjYWwodHB0cikgICBta3RpbWUodHB0cikKI2VuZGlm
CgppbnQgTUxUT05fbG9jYWxvZmZzZXQgKCkgewoJc3RydWN0IHRtICpnbXQ7Cgl0aW1lX3QgdDEs
IHQyLCB0ZDsKCgl0MSA9IHRpbWUoKHRpbWVfdCopMCk7CglnbXQgPSBnbXRpbWUgKCZ0MSk7Cgl0
MiA9IHRtMmNhbChnbXQpOwogIAogIC8qIFN1bk9zIGFwcGVhcnMgdG8gbGFjayBkaWZmdGltZTog
Ki8KI2lmIGRlZmluZWQoc3VuKSAmJiAhZGVmaW5lZChfX3N2cjRfXykKCXRkID0gKHRpbWVfdCko
KGxvbmcpdDIgLSAobG9uZyl0MSk7CiNlbHNlCgl0ZCA9IGRpZmZ0aW1lKHQyLCB0MSk7CiNlbmRp
ZgoKCXJldHVybiB0ZDsKfQoKLyogRW5kIG1vZGlmaWVkIGZyb20gS2l0VjMgc3JjL1J1bnRpbWUv
VGltZS5jICovCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgICBUaW1lICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwoKI2lmIGRlZmluZWQgKF9XSU4zMikKI2Vsc2UKc3RydWN0IHRpbWV2YWwgTUxUT05f
dGltZXZhbDsKI2VuZGlmCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgICBXb3JkICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwoKdWludCBNTFRPTl9Xb3JkMzJfYXJzaGlmdEFzbSh1aW50IHcsIHVpbnQg
cykgewoJcmVnaXN0ZXIgdWNoYXIgY2wgYXNtKCJjbCIpOwoJCglpZiAocyA+IDMxKSBjbCA9IDMx
OwoJZWxzZSBjbCA9IHM7CgoJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzYXJsICUlY2wsICUwIgoJ
CQkgICAgICA6CgkJCSAgICAgIDogIm0iICh3KSwgInIiIChjbCkpOwoJcmV0dXJuIHc7Cn0KCnVj
aGFyIE1MVE9OX1dvcmQ4X2Fyc2hpZnQodWNoYXIgdywgdWludCBzKSB7CglyZWdpc3RlciB1Y2hh
ciBjbCBhc20oImNsIik7CgkKCWlmIChzID4gNykgY2wgPSA3OwoJZWxzZSBjbCA9IHM7CgoJX19h
c21fXyBfX3ZvbGF0aWxlX18gKCJzYXJiICUlY2wsICUwIgoJCQkgICAgICA6CgkJCSAgICAgIDog
Im0iICh3KSwgInIiIChjbCkpOwoJcmV0dXJuIHc7Cn0K

--------------BE2E50C43683742BDDD756DA
Content-Type: application/x-unknown-content-type-ProjectBuilder.h;
 name="mlton-lib.h"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="mlton-lib.h"

LyogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4KICogUGxl
YXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgogKi8KI2lm
bmRlZiBfTUxUT05fTElCX0gKI2RlZmluZSBfTUxUT05fTElCX0gKCiNpbmNsdWRlIDxkaXJlbnQu
aD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxmY250bC5oPgoKI2lmIGRlZmluZWQoX1dJ
TjMyKQoKI2lmIGRlZmluZWQoVVNFX1NETCkKLy8gRm9yIFdpbjMyIGFwcGxpY2F0aW9ucyB3aXRo
IFNETCBzdXBwb3J0Ci8vIEZvciBTREwtMS4xLjIKI2luY2x1ZGUgIlNETF9tYWluLmgiCi8vIEZv
ciBTREwtMC45LjkKLy8jaW5jbHVkZSAiU0RMX21hbmdsZS5oIgojZWxzZQovLyBGb3IgV2luMzIg
YXBwbGljYXRpb25zIHdpdGhvdXQgU0RMCiNpbmNsdWRlICJ3aW5tYWluLmgiCiNlbmRpZgoKI2Vu
ZGlmIC8vX1dJTjMyCgojaWYgZGVmaW5lZChfV0lOMzIpCiNpbmNsdWRlIDx3aW5kb3dzLmg+CiNl
bHNlCiNpbmNsdWRlIDxncnAuaD4KI2VuZGlmCgojaW5jbHVkZSA8bWF0aC5oPgoKI2lmIGRlZmlu
ZWQoX1dJTjMyKQojZWxzZQojaW5jbHVkZSA8cHdkLmg+CiNlbmRpZgoKI2luY2x1ZGUgPHNpZ25h
bC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxz
eXMvdGltZS5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CgojaWYgZGVmaW5lZChfV0lOMzIpCiNl
bHNlCiNpbmNsdWRlIDxzeXMvdGltZXMuaD4KI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CiNpbmNs
dWRlIDxzeXMvd2FpdC5oPgojaW5jbHVkZSA8dGVybWlvcy5oPgojZW5kaWYKCiNpbmNsdWRlIDx0
aW1lLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KCiNpZiBkZWZpbmVkKF9XSU4zMikKI2luY2x1ZGUg
PHN5cy91dGltZS5oPgojZWxzZQojaW5jbHVkZSA8dXRpbWUuaD4KI2VuZGlmCgojaW5jbHVkZSAi
Z2MuaCIKI2luY2x1ZGUgImludC1pbmYuaCIKI2luY2x1ZGUgIm15LWxpYi5oIgojaW5jbHVkZSAi
bWx0b24tcG9zaXguaCIKCiNpZm5kZWYgR0NfRVZFUllfQ0hFQ0sKI2RlZmluZSBHQ19FVkVSWV9D
SEVDSyBGQUxTRQojZW5kaWYKCiNpZm5kZWYgSU5TVFJVTUVOVAojZGVmaW5lIElOU1RSVU1FTlQg
RkFMU0UKI2VuZGlmCgojaWZuZGVmIERFVEVDVF9PVkVSRkxPVwojZGVmaW5lIERFVEVDVF9PVkVS
RkxPVyBGQUxTRQojZW5kaWYKCnR5cGVkZWYgdWludCBjcG9pbnRlcjsKCnR5cGVkZWYgc3RydWN0
IE1MVE9OX3N0YXRlIHsKCXVpbnQgY29tbWFuZE5hbWU7CglpbnQgYXJnYzsKCXVpbnQgYXJndjsK
I2lmIGRlZmluZWQoX1dJTjMyKQoJdWludCBlbnZpcm9ubWVudDsvLyBEb24ndCBhc2shIAojZWxz
ZQoJdWludCBlbnZpcm9uOwojZW5kaWYKCQoJLyogdXNlZCBieSBzYXZlV29ybGQgKi8KCWJvb2wg
aXNPcmlnaW5hbDsKCgkvKiBUaGUgbWFnaWMgbnVtYmVyIHJlcXVpcmVkIGZvciBhIHZhbGlkIHdv
cmxkIGZpbGUuICovCgl1aW50IG1hZ2ljOwoJCglHQ19zdGF0ZSAqZ2NTdGF0ZTsKfSBNTFRPTl9z
dGF0ZTsKCiNkZWZpbmUgTUxUT05fYXJnYygpIG1sdG9uU3RhdGUuYXJnYwojZGVmaW5lIE1MVE9O
X2FyZ3YoKSBtbHRvblN0YXRlLmFyZ3YKI2RlZmluZSBNTFRPTl9jb21tYW5kTmFtZSgpIG1sdG9u
U3RhdGUuY29tbWFuZE5hbWUKCi8qIHByaW50IGEgYnVnIG1lc3NhZ2UgYW5kIGV4aXQoMikgKi8K
dm9pZCBNTFRPTl9idWcoc3RyaW5nIG1zZyk7CgovKiBpbml0aWFsaXplIHRoZSBtYWNoaW5lICov
CnZvaWQgTUxUT05faW5pdChpbnQgYXJnYywgCgkgICAgICAgY2hhciAqKmFyZ3YsCgkgICAgICAg
TUxUT05fc3RhdGUgKk1MVE9OX3N0YXRlLAoJICAgICAgIHVpbnQgbWFnaWMsCgkgICAgICAgLyog
UmVhZCB0aGUgZ2xvYmFscyBmcm9tIHRoZSB3b3JsZCBmaWxlLiAgSXMgTlVMTCBpZiBhIHdvcmxk
IGZpbGUKCQkqIGNhbm5vdCBiZSBsb2FkZWQuCgkJKi8KCSAgICAgICB2b2lkICgqbG9hZEdsb2Jh
bHMpKEZJTEUgKmZpbGUpKTsKCiNkZWZpbmUgTUxUT05fZ2xvYmFscyAJCQkJCVwKCXN0YXRpYyBN
TFRPTl9zdGF0ZSBtbHRvblN0YXRlOyAJCQlcCglzdGF0aWMgR0Nfc3RhdGUgZ2NTdGF0ZTsJCQlc
CglzdGF0aWMgaW50IHNpemVSZXM7CQkJCVwKCXN0YXRpYyBwb2ludGVyIHN0YWNrUmVzOwkJCVwK
CXN0YXRpYyB2b2lkICgqbmV4dENodW5rKSgpOwkJCVwKCXN0YXRpYyBpbnQgbmV4dEZ1bjsKCi8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyog
ICAgICAgICAgICAgICAgICAgICBDb3VudGVycyAgICAgICAgICAgICAgICAgICAgICAqLwovKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpleHRl
cm4gdWxsb25nIE1MVE9OX251bVRyYW1wb2xpbmVzOwpleHRlcm4gdWxsb25nIE1MVE9OX251bUxp
bWl0Q2hlY2tzOwpleHRlcm4gdWxsb25nIE1MVE9OX251bUludGVyUmV0dXJuczsKZXh0ZXJuIHVs
bG9uZyBNTFRPTl9udW1SZXR1cm5zOwoKZXh0ZXJuIHVsbG9uZyBNTFRPTl9YbWxLbm93bjsKZXh0
ZXJuIHVsbG9uZyBNTFRPTl9YbWxVbmtub3duOwojZGVmaW5lIE1MVE9OX2luY1htbEtub3duKCkg
TUxUT05fWG1sS25vd24rKwojZGVmaW5lIE1MVE9OX2luY1htbFVua25vd24oKSBNTFRPTl9YbWxV
bmtub3duKysKCmV4dGVybiB1bGxvbmcgTUxUT05fU3htbEtub3duOwpleHRlcm4gdWxsb25nIE1M
VE9OX1N4bWxVbmtub3duOwojZGVmaW5lIE1MVE9OX2luY1N4bWxLbm93bigpIE1MVE9OX1N4bWxL
bm93bisrCiNkZWZpbmUgTUxUT05faW5jU3htbFVua25vd24oKSBNTFRPTl9TeG1sVW5rbm93bisr
CgpleHRlcm4gdWxsb25nIE1MVE9OX0Nwc0tub3duOwpleHRlcm4gdWxsb25nIE1MVE9OX0Nwc1Vu
a25vd247CiNkZWZpbmUgTUxUT05faW5jQ3BzS25vd24oKSBNTFRPTl9DcHNLbm93bisrCiNkZWZp
bmUgTUxUT05faW5jQ3BzVW5rbm93bigpIE1MVE9OX0Nwc1Vua25vd24rKwoKZXh0ZXJuIHVsbG9u
ZyBNTFRPTl9DcHNDYWxsOwpleHRlcm4gdWxsb25nIE1MVE9OX0Nwc0xvb3A7CiNkZWZpbmUgTUxU
T05faW5jQ3BzQ2FsbCgpIE1MVE9OX0Nwc0NhbGwrKwojZGVmaW5lIE1MVE9OX2luY0Nwc0xvb3Ao
KSBNTFRPTl9DcHNMb29wKysKCmV4dGVybiB1bGxvbmcgTUxUT05fQ3BzRGlzcGF0Y2g7CiNkZWZp
bmUgTUxUT05faW5jQ3BzRGlzcGF0Y2goKSBNTFRPTl9DcHNEaXNwYXRjaCsrCmV4dGVybiB1bGxv
bmcgTUxUT05fQ3BzQ29lcmNlOwojZGVmaW5lIE1MVE9OX2luY0Nwc0NvZXJjZSgpIE1MVE9OX0Nw
c0NvZXJjZSsrCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgICBDaHVuayAgICAgICAgICAgICAgICAg
ICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwoKI2RlZmluZSBNTFRPTl9jaHVuayhuYW1lKQkJCQlcCglzdGF0aWMgdm9pZCBuYW1l
ICgpIHsJCQkJXAoJCWNoYXIgKnN0YWNrVG9wID0gZ2NTdGF0ZS5zdGFja1RvcDsgCVwKCQlwb2lu
dGVyIGZyb250aWVyID0gZ2NTdGF0ZS5mcm9udGllcjsKCiNkZWZpbmUgTUxUT05fY2h1bmtTd2l0
Y2gJCQlcCgkJdG9wOgkJCQlcCgkJc3dpdGNoIChuZXh0RnVuKSB7CgojZGVmaW5lIE1MVE9OX2Vu
ZENodW5rU3dpdGNoCQkJCQlcCgkJZGVmYXVsdDoJCQkJCVwKCQkJLyogaW50ZXIgY2h1bmsgcmV0
dXJuICovCQlcCgkJCWlmIChJTlNUUlVNRU5UKQkJCQlcCgkJCQlNTFRPTl9udW1JbnRlclJldHVy
bnMrKzsJXAoJCQluZXh0Q2h1bmsgPSBuZXh0Q2h1bmtzW25leHRGdW5dOwlcCgkJCWxlYXZlQ2h1
bms6IAkJCQlcCgkJCQlnY1N0YXRlLmZyb250aWVyID0gZnJvbnRpZXI7CVwKCQkJCWdjU3RhdGUu
c3RhY2tUb3AgPSBzdGFja1RvcDsJXAoJCQkJcmV0dXJuOwkJCQlcCgkJfSAvKiBlbmQgc3dpdGNo
IChuZXh0RnVuKSAqLwoKI2RlZmluZSBNTFRPTl9lbmRDaHVuawkJCQkJXAoJfSAvKiBlbmQgY2h1
bmsgKi8KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgIG1haW4gICAgICAgICAgICAgICAgICAgICAg
ICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCgojZGVmaW5lIE1MVE9OX21haW4odWZoLGZzLGJsLG1mcyxuZyxncyxtZmksbWFnaWMsbGcs
bmlpLG1jLG1sLHNjLHNsKQlcCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewkJCQkJ
XAoJZ2NTdGF0ZS51c2VGaXhlZEhlYXAgPSB1Zmg7CQkJCQlcCglnY1N0YXRlLmZyb21TaXplID0g
ZnM7CQkJCQkJXAoJZ2NTdGF0ZS5ieXRlc0xpdmUgPSBibDsJCSAJCQkJXAoJZ2NTdGF0ZS5tYXhG
cmFtZVNpemUgPSBtZnM7CQkJCQlcCglnY1N0YXRlLm51bUdsb2JhbHMgPSBuZzsJCQkJCVwKCWdj
U3RhdGUuZ2xvYmFscyA9IGdzOwkJCQkJCVwKCWdjU3RhdGUubWF4RnJhbWVJbmRleCA9IG1maTsJ
CQkJCVwKCWdjU3RhdGUuZnJhbWVMYXlvdXRzID0gZnJhbWVMYXlvdXRzOwkJCQlcCgltbHRvblN0
YXRlLmdjU3RhdGUgPSAmZ2NTdGF0ZTsJCQkJCVwKCU1MVE9OX2luaXQoYXJnYywgYXJndiwgJm1s
dG9uU3RhdGUsIG1hZ2ljLCBsZyk7CQkJXAoJaWYgKG1sdG9uU3RhdGUuaXNPcmlnaW5hbCkgewkJ
CQkJXAogCQkvKiBUaGUgKG5paSA+IDApIGNoZWNrIGlzIHNvIHRoYXQgdGhlIEMgY29tcGlsZXIg
Y2FuIAlcCgkJICogZWxpbWluYXRlIHRoZSBjYWxsIGlmIHRoZXJlIGFyZSBubyBJbnRJbmZzIGFu
ZCB3ZSAJXAoJCSAqIHRoZW4gd29uJ3QgaGF2ZSB0byBsaW5rIGluIHdpdGggdGhlIEludEluZiBz
dHVmZi4gCVwKCQkgKi8JCQkJCQkJXAoJCWlmIChuaWkgPiAwKQkJCQkJCVwKCQkJTUxUT05fY3Jl
YXRlSW50SW5mcygmZ2NTdGF0ZSwgaW50SW5mSW5pdHMpOwlcCgkJR0NfY3JlYXRlU3RyaW5ncygm
Z2NTdGF0ZSwgc3RyaW5nSW5pdHMpOyAgICAgICAJCVwKCQlNTFRPTl9wcmVwRmFySnVtcChtYywg
bWwpOwkJCQlcCgl9IGVsc2UgewkJCQkJCQlcCgkJTUxUT05fcHJlcEZhckp1bXAoc2MsIHNsKTsJ
CQkJXAoJfQkJCQkJCQkJXAoJLyogVHJhbXBvbGluZSAqLwkJCQkJCVwKCXdoaWxlICgxKSB7CQkJ
CQkJCVwKIAkJaWYgKElOU1RSVU1FTlQpCQkJCQkJXAoJCQlNTFRPTl9udW1UcmFtcG9saW5lcysr
OwkJCQlcCgkJKCpuZXh0Q2h1bmspKCk7IAkJCQkJXAoJfQkJCQkJCQkJXAp9CgovKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAg
ICAgICAgICAgICAgICBIYWx0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRP
Tl9oYWx0KHgpCQkJCQkJCVwKCXsJCQkJCQkJCVwKCQlpbnQgc3RhdHVzOwkJCQkJCVwKCQlpZiAo
SU5TVFJVTUVOVCkgCQkJCQlcCgkJICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk1MVE9OX251bVRy
YW1wb2xpbmVzID0gJUxkXG5NTFRPTl9udW1SZXR1cm5zID0gJUxkXG5NTFRPTl9udW1JbnRlclJl
dHVybnMgPSAlTGRcbk1MVE9OX251bUxpbWl0Q2hlY2tzID0gJUxkXG5NTFRPTl9YbWxLbm93biA9
ICVMZFxuTUxUT05fWG1sVW5rbm93biA9ICVMZFxuTUxUT05fU3htbEtub3duID0gJUxkXG5NTFRP
Tl9TeG1sVW5rbm93biA9ICVMZFxuTUxUT05fQ3BzS25vd24gPSAlTGRcbk1MVE9OX0Nwc1Vua25v
d24gPSAlTGRcbk1MVE9OX0Nwc0NhbGwgPSAlTGRcbk1MVE9OX0Nwc0xvb3AgPSAlTGRcbk1MVE9O
X0Nwc0Rpc3BhdGNoID0gJUxkXG5NTFRPTl9DcHNDb2VyY2UgPSAlTGRcbiIsIAkJCQkJXAoJCQkJ
TUxUT05fbnVtVHJhbXBvbGluZXMsIE1MVE9OX251bVJldHVybnMsCQlcCgkJCQlNTFRPTl9udW1J
bnRlclJldHVybnMsIE1MVE9OX251bUxpbWl0Q2hlY2tzLAlcCgkJCQlNTFRPTl9YbWxLbm93biwg
TUxUT05fWG1sVW5rbm93biwJCQlcCgkJCQlNTFRPTl9TeG1sS25vd24sIE1MVE9OX1N4bWxVbmtu
b3duLAkJXAoJCQkJTUxUT05fQ3BzS25vd24sIE1MVE9OX0Nwc1Vua25vd24sCQkJXAoJCQkJTUxU
T05fQ3BzQ2FsbCwgTUxUT05fQ3BzTG9vcCwJCQlcCgkJCQlNTFRPTl9DcHNEaXNwYXRjaCwgTUxU
T05fQ3BzQ29lcmNlKTsJCVwKCQlnY1N0YXRlLmZyb250aWVyID0gZnJvbnRpZXI7CQkJCQlcCgkJ
Z2NTdGF0ZS5zdGFja1RvcCA9IHN0YWNrVG9wOwkJCQkJXAoJCXN0YXR1cyA9ICh4KTsJCQkJCQkJ
XAoJCUdDX2RvbmUoJmdjU3RhdGUpOwkJCQkJCVwKCQlleGl0KHN0YXR1cyk7CQkJCQkJCVwKCX0K
Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
LyogICAgICAgICAgICAgICAgICAgICAgICBHQyAgICAgICAgICAgICAgICAgICAgICAgICAqLwov
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoj
ZGVmaW5lIE1MVE9OX2JlZm9yZUdDCQkJCQlcCglnYzoJCQkJCQlcCgkJZ2NTdGF0ZS5sb2NhbHMg
PSBsb2NhbHM7CQlcCgkJZ2NTdGF0ZS5mcm9udGllciA9IGZyb250aWVyOyAJICAgICAgIAlcCgkJ
Z2NTdGF0ZS5zdGFja1RvcCA9IHN0YWNrVG9wOwoKI2RlZmluZSBNTFRPTl9HQwkJCQkJCVwKICAg
ICAgICBHQ19nYygmZ2NTdGF0ZSk7CQkJCVwKCXN0YWNrVG9wID0gZ2NTdGF0ZS5zdGFja1RvcDsJ
CQlcCglmcm9udGllciA9IGdjU3RhdGUuZnJvbnRpZXI7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAg
IGZhckp1bXAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRPTl9wcmVwRmFySnVt
cChjLGwpCSAJXAoJZG8gewkJCQlcCgkJbmV4dENodW5rID0gYzsgCQlcCgkJbmV4dEZ1biA9IGwg
IyMgX2luZGV4OwlcCgl9IHdoaWxlICgwKQoKI2RlZmluZSBNTFRPTl9mYXJKdW1wKGMsbCkJIAlc
CglkbyB7CQkJCVwKCQlNTFRPTl9wcmVwRmFySnVtcChjLGwpOyAJXAoJCWdvdG8gbGVhdmVDaHVu
azsJXAoJfSB3aGlsZSAoMCkKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgUmV0dXJuICAgICAgICAg
ICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCgojZGVmaW5lIE1MVE9OX3JldHVybgkJCQkJXAoJaWYgKElOU1RSVU1F
TlQpCQkJCQlcCgkJTUxUT05fbnVtUmV0dXJucysrOwkJCVwKCW5leHRGdW4gPSAqKGludCopc3Rh
Y2tUb3A7CSAJCVwKCWdvdG8gdG9wOwoKI2RlZmluZSBNTFRPTl9yYWlzZQkJCQkJCVwKCXN0YWNr
VG9wID0gZ2NTdGF0ZS5zdGFja0JvdHRvbSArIGdjU3RhdGUuZXhuU3RhY2s7CVwKCW5leHRGdW4g
PSAqKGludCopc3RhY2tUb3A7CSAJCQlcCglnb3RvIHRvcDsKCiNkZWZpbmUgTUxUT05fc2F2ZUV4
blN0YWNrKG9mZnNldCkJCQkJCVwKCXsJCQkJCQkJCVwKCQlwb2ludGVyIHA7CQkJCQkJXAoJCXAg
PSBzdGFja1RvcCArIChvZmZzZXQpOwkJCQlcCgkJKih1aW50KikocCArIFdPUkRfU0laRSkgPSBn
Y1N0YXRlLmV4blN0YWNrOwkJXAoJCWdjU3RhdGUuZXhuU3RhY2sgPSBwIC0gZ2NTdGF0ZS5zdGFj
a0JvdHRvbTsJCVwKCX0KCiNkZWZpbmUgTUxUT05fcmVzdG9yZUV4blN0YWNrKG9mZnNldCkJCQkJ
CVwKCWdjU3RhdGUuZXhuU3RhY2sgPSAqKHVpbnQqKShzdGFja1RvcCArIChvZmZzZXQpICsgV09S
RF9TSVpFKTsJXAoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgTGltaXQgQ2hlY2sgICAgICAgICAgICAg
ICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gKi8KCiNkZWZpbmUgTUxUT05fbGltaXRDaGVjayhieXRlcyxsb2NhbEluZGljZXMsZnJh
bWVTaXplLHJldCkJIAkJXAoJaWYgKElOU1RSVU1FTlQpCQkJCQkJCQlcCgkJTUxUT05fbnVtTGlt
aXRDaGVja3MrKzsJCQkJCQlcCglpZiAoR0NfRVZFUllfQ0hFQ0sgfHwgZnJvbnRpZXIgKyAoYnl0
ZXMpID49IGdjU3RhdGUubGltaXQpIHsJCVwKCQlpZiAoZ2NTdGF0ZS5tZXNzYWdlcykgZnByaW50
ZihzdGRlcnIsICJnYyBhdCBsaW5lICVkIG9mICVzXG4iLAlcCgkJCQkJCV9fTElORV9fLAkJCVwK
CQkJCQkJX19GSUxFX18pOwkJCVwKCQlnY1N0YXRlLmJ5dGVzUmVxdWVzdGVkID0gKGJ5dGVzKTsg
CQkJCVwKCQlnY1N0YXRlLmxvY2FsT2Zmc2V0cyA9IChsb2NhbEluZGljZXMpOwkJCQlcCgkJc3Rh
Y2tUb3AgKz0gKGZyYW1lU2l6ZSk7CQkJCQlcCgkJKih1aW50KilzdGFja1RvcCA9IChyZXQgIyMg
X2luZGV4KTsJCQkJXAoJCWdvdG8gZ2M7CQkJCQkJCVwKCQlyZXQ6CQkJCQkJCQlcCgkJc3RhY2tU
b3AgLT0gKGZyYW1lU2l6ZSk7CQkJCQlcCgl9CgojZGVmaW5lIE1MVE9OX3N0YWNrT3ZlcmZsb3dD
aGVjawkJCVwKCWlmIChzdGFja1RvcCA+PSBnY1N0YXRlLnN0YWNrTGltaXQpIHsJXAoJCWdjU3Rh
dGUuc3RhY2tUb3AgPSBzdGFja1RvcDsJXAoJCUdDX2dyb3dTdGFjaygmZ2NTdGF0ZSk7CQlcCgkJ
c3RhY2tUb3AgPSBnY1N0YXRlLnN0YWNrVG9wOwlcCiAgICAgICAgfQoKLyogVGhlIGV4dHJhIFBP
SU5URVJfU0laRSBhZGRlZCB0byBmcm9udGllciBpcyBzbyBzcGFjZSBpcyBhbGxvY2F0ZWQgZm9y
IHRoZQogKiBmb3J3YXJkaW5nIHBvaW50ZXIgaW4gemVybyBsZW5ndGggYXJyYXlzLgogKi8KI2Rl
ZmluZSBNTFRPTl9hbGxvY0FycmF5Tm9Qb2ludGVycyhkc3QsbnVtRWx0cyxieXRlc1BlckVsdCkJ
CQlcCgkJKih3b3JkKilmcm9udGllciA9IChudW1FbHRzKTsJCQkJCVwKCQkqKHdvcmQqKShmcm9u
dGllciArIFdPUkRfU0laRSkgPSAJCQkJXAoJCQlHQ19hcnJheUhlYWRlcigoYnl0ZXNQZXJFbHQp
LCAwKTsJCQlcCgkJKGRzdCkgPSBmcm9udGllciArIDIgKiBXT1JEX1NJWkU7IAkJCQlcCgkJZnJv
bnRpZXIgPSAoZHN0KSArICgoMCA9PSBudW1FbHRzKSA/IFBPSU5URVJfU0laRSA6CQlcCgkJCQkJ
d29yZEFsaWduKChudW1FbHRzKSAqIChieXRlc1BlckVsdCkpKTsKCiNkZWZpbmUgTUxUT05fYWxs
b2NBcnJheVBvaW50ZXJzKGRzdCxudW1FbHRzLG51bVBvaW50ZXJzKQkJCVwKCQkqKHdvcmQqKWZy
b250aWVyID0gKG51bUVsdHMpOwkJCQkJXAoJCSood29yZCopKGZyb250aWVyICsgV09SRF9TSVpF
KSA9IAkJCQlcCgkJCUdDX2FycmF5SGVhZGVyKDAsIChudW1Qb2ludGVycykpOwkJCVwKCQkoZHN0
KSA9IGZyb250aWVyICsgMiAqIFdPUkRfU0laRTsgCQkJCVwKCQlmcm9udGllciA9IChkc3QpICsg
KCgwID09IChudW1FbHRzKSkgPyBQT0lOVEVSX1NJWkUJCVwKCQkJCSAgICA6IChudW1FbHRzKSAq
IChudW1Qb2ludGVycykgKiBQT0lOVEVSX1NJWkUpO1wKCQl7CQkJCQkJCQlcCgkJCXdvcmQgKnA7
CQkJCQkJXAoJCQlmb3IgKHAgPSAod29yZCopIChkc3QpOyBwIDwgKHdvcmQqKSBmcm9udGllcjsg
KytwKQlcCgkJCQkqcCA9IDB4MTsJCQkJCVwKCQl9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAg
ICAgICAgICAgICAgQmFzaXMgTGlicmFyeSBQcmltaXRpdmVzICAgICAgICAgICAgICAgICAgICAg
Ki8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwoKdm9pZCBNTFRPTl9vdmVyZmxvdygpOwoKLyogVXNlZCB0byAiY2Fz
dCIgYXQgdGhlIE1MIGxldmVsIGJldHdlZW4gdHdvIGRpZmZlcmVudCBNTCB0eXBlcyB0aGF0IHdl
CiAqIGtub3cgaGF2ZSB0aGUgc2FtZSBDIHJlcHJlc2VudGF0aW9uLgogKi8KI2RlZmluZSBNTFRP
Tl9pZCh4KSB4CgovKiBVc2VkIGJ5IHBvbHltb3JwaGljIGVxdWFsaXR5IHRvIGltcGxlbWVudCBl
cXVhbCBvbiBncm91bmQgdHlwZXMKICogbGlrZSBjaGFyLCBpbnQsIHdvcmQsICBhbmQgb24gcmVm
IGNlbGxzLgogKiBJdCBpcyBlbWl0dGVkIGJ5IGJhY2tlbmQvbWFjaGluZS5mdW4uCiAqLwojZGVm
aW5lIE1MVE9OX2VxKHgseSkgKCh4KSA9PSAoeSkpCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgICBB
cnJheSAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRPTl9BcnJheV9sZW5ndGgg
R0NfYXJyYXlOdW1FbGVtZW50cwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAgICAgICAg
ICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUgTUxUT05fQnl0ZV9ieXRlVG9DaGFyIE1MVE9OX2lk
CiNkZWZpbmUgTUxUT05fQnl0ZV9jaGFyVG9CeXRlIE1MVE9OX2lkCgovKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAg
ICAgICAgICBDaGFyICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRPTl9DaGFy
X29yZChjKSAoKGludCkoYykpCiNkZWZpbmUgTUxUT05fQ2hhcl9jaHIoYykgKCh1Y2hhcikoYykp
CiNkZWZpbmUgTUxUT05fQ2hhcl9ndChjMSxjMikgKChjMSkgPiAoYzIpKQojZGVmaW5lIE1MVE9O
X0NoYXJfZ2UoYzEsYzIpICgoYzEpID49IChjMikpCiNkZWZpbmUgTUxUT05fQ2hhcl9sdChjMSxj
MikgKChjMSkgPCAoYzIpKQojZGVmaW5lIE1MVE9OX0NoYXJfbGUoYzEsYzIpICgoYzEpIDw9IChj
MikpCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCi8qICAgICAgICAgICAgICAgICAgICAgSUVFRVJlYWwgICAgICAgICAgICAgICAgICAgICAg
Ki8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LwoKdm9pZCBzZXRSb3VuZGluZ01vZGUoaW50IG1vZGUpOwppbnQgZ2V0Um91bmRpbmdNb2RlKCk7
CgojZGVmaW5lIE1MVE9OX0lFRUVSZWFsX3NldFJvdW5kaW5nTW9kZSBzZXRSb3VuZGluZ01vZGUK
I2RlZmluZSBNTFRPTl9JRUVFUmVhbF9nZXRSb3VuZGluZ01vZGUgZ2V0Um91bmRpbmdNb2RlCgov
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8q
ICAgICAgICAgICAgICAgICAgICAgICAgSW50ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKaW50
IGludFF1b3QoaW50IG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9yKTsKaW50IGludFJlbShpbnQg
bnVtZXJhdG9yLCBpbnQgZGVub21pbmF0b3IpOwoKI2lmIERFVEVDVF9PVkVSRkxPVwojaWYgZGVm
aW5lZChfV0lOMzIpCiNlbHNlCmludCBNTFRPTl9JbnRfYWRkQ2hlY2soaW50IG4xLCBpbnQgbjIp
OwppbnQgTUxUT05fSW50X3N1YkNoZWNrKGludCBuMSwgaW50IG4yKTsKaW50IE1MVE9OX0ludF9t
dWxDaGVjayhpbnQgbjEsIGludCBuMik7CiNlbmRpZgojZGVmaW5lIE1MVE9OX0ludF9hZGQgTUxU
T05fSW50X2FkZENoZWNrCiNkZWZpbmUgTUxUT05fSW50X3N1YiBNTFRPTl9JbnRfc3ViQ2hlY2sK
I2RlZmluZSBNTFRPTl9JbnRfbXVsIE1MVE9OX0ludF9tdWxDaGVjawojZWxzZQojZGVmaW5lIE1M
VE9OX0ludF9hZGQobjEsbjIpICgobjEpICsgKG4yKSkKI2RlZmluZSBNTFRPTl9JbnRfc3ViKG4x
LG4yKSAoKG4xKSAtIChuMikpCiNkZWZpbmUgTUxUT05fSW50X211bChuMSxuMikgKChuMSkgKiAo
bjIpKQojZW5kaWYKI2RlZmluZSBNTFRPTl9JbnRfbmVnKG4pICgtKG4pKQojZGVmaW5lIE1MVE9O
X0ludF9xdW90IGludFF1b3QKI2RlZmluZSBNTFRPTl9JbnRfcmVtIGludFJlbQojZGVmaW5lIE1M
VE9OX0ludF9ndChuMSxuMikgKChuMSkgPiAobjIpKQojZGVmaW5lIE1MVE9OX0ludF9nZShuMSxu
MikgKChuMSkgPj0gKG4yKSkKI2RlZmluZSBNTFRPTl9JbnRfbHQobjEsbjIpICgobjEpIDwgKG4y
KSkKI2RlZmluZSBNTFRPTl9JbnRfbGUobjEsbjIpICgobjEpIDw9IChuMikpCiNkZWZpbmUgTUxU
T05fSW50X2dldSh4LHkpICgodWludCkoeCkgPj0gKHVpbnQpKHkpKQojZGVmaW5lIE1MVE9OX0lu
dF9ndHUoeCx5KSAoKHVpbnQpKHgpID4gKHVpbnQpKHkpKQoKLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAg
ICAgSW50MzEgICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogSW50MzEgaXMgY3VycmVudGx5IG5v
dCBpbXBsZW1lbnRlZCAqLwoKLyogI2RlZmluZSBNTFRPTl9JbnQzMV90b0ludChuKSAoKG4pID4+
IDEpICovCi8qICNkZWZpbmUgTUxUT05fSW50MzFfZnJvbUludChuKSAoKG4pIDw8IDEpICovCgov
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8q
ICAgICAgICAgICAgICAgICAgICAgIEludEluZiAgICAgICAgICAgICAgICAgICAgICAgKi8KLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2Rl
ZmluZSBNTFRPTl9JbnRJbmZfZXF1YWwgTUxUT05faW50SW5mRXF1YWwKI2RlZmluZSBNTFRPTl9J
bnRJbmZfZnJvbVN0cmluZyBNTFRPTl9pbnRJbmZGcm9tU3RyaW5nCiNkZWZpbmUgTUxUT05fSW50
SW5mX3RvV29yZChpKSAoKHVpbnQpKGkpKQojZGVmaW5lIE1MVE9OX0ludEluZl9mcm9tV29yZCh3
KSAoKHBvaW50ZXIpKHcpKQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgUmVhbCAgICAgICAgICAg
ICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KCmRvdWJsZSByb3VuZChkb3VibGUgZCk7CmludCBzaWduQml0KGRvdWJs
ZSBkKTsKaW50IGlzTmFuKGRvdWJsZSBkKTsKaW50IGlzRmluaXRlKGRvdWJsZSBkKTsKaW50IGlz
Tm9ybWFsKGRvdWJsZSBkKTsKCi8qIHJldHVybmVkIGJ5IGNsYXNzICovCiNkZWZpbmUgTkFOX1FV
SUVUIDAKI2RlZmluZSBOQU5fU0lHTkFMTElORyAxCiNkZWZpbmUgSU5GIDIKI2RlZmluZSBaRVJP
IDMKI2RlZmluZSBOT1JNQUwgNAojZGVmaW5lIFNVQk5PUk1BTCA1CmludCBjbGFzcyhkb3VibGUg
ZCk7CgojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9waSBNX1BJCiNkZWZpbmUgTUxUT05fUmVhbF9N
YXRoX2UgTV9FCiNkZWZpbmUgTUxUT05fUmVhbF9NYXRoX2NvcyBjb3MKI2RlZmluZSBNTFRPTl9S
ZWFsX01hdGhfc2luIHNpbgojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF90YW4gdGFuCiNkZWZpbmUg
TUxUT05fUmVhbF9NYXRoX2Nvc2ggY29zaAojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9zaW5oIHNp
bmgKI2RlZmluZSBNTFRPTl9SZWFsX01hdGhfdGFuaCB0YW5oCiNkZWZpbmUgTUxUT05fUmVhbF9N
YXRoX2Fjb3MgYWNvcwojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9hc2luIGFzaW4KI2RlZmluZSBN
TFRPTl9SZWFsX01hdGhfYXRhbiBhdGFuCiNkZWZpbmUgTUxUT05fUmVhbF9NYXRoX2F0YW4yIGF0
YW4yCiNkZWZpbmUgTUxUT05fUmVhbF9NYXRoX2xuIGxvZwojZGVmaW5lIE1MVE9OX1JlYWxfTWF0
aF9sb2cxMCBsb2cxMAojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9wb3cgcG93CiNkZWZpbmUgTUxU
T05fUmVhbF9NYXRoX3NxcnQgc3FydAojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9leHAgZXhwCiNk
ZWZpbmUgTUxUT05fUmVhbF9wb3NJbmYgSFVHRV9WQUwKI2RlZmluZSBNTFRPTl9SZWFsX2FkZCh4
LHkpICgoeCkgKyAoeSkpCiNkZWZpbmUgTUxUT05fUmVhbF9zdWIoeCx5KSAoKHgpIC0gKHkpKQoj
ZGVmaW5lIE1MVE9OX1JlYWxfbXVsKHgseSkgKCh4KSAqICh5KSkKI2RlZmluZSBNTFRPTl9SZWFs
X2Rpdih4LHkpICgoeCkgLyAoeSkpCiNkZWZpbmUgTUxUT05fUmVhbF9tdWxhZGQoeCx5LHopICgo
eCkgKiAoeSkgKyAoeikpCiNkZWZpbmUgTUxUT05fUmVhbF9tdWxzdWIoeCx5LHopICgoeCkgKiAo
eSkgLSAoeikpCiNkZWZpbmUgTUxUT05fUmVhbF9uZWcoeCkgKC0oeCkpCiNkZWZpbmUgTUxUT05f
UmVhbF9hYnMgZmFicwojZGVmaW5lIE1MVE9OX1JlYWxfaXNOYW4gaXNOYW4KI2RlZmluZSBNTFRP
Tl9SZWFsX3NpZ25CaXQgc2lnbkJpdAojZGVmaW5lIE1MVE9OX1JlYWxfY29weVNpZ24gY29weVNp
Z24KI2RlZmluZSBNTFRPTl9SZWFsX2d0KHgxLHgyKSAoKHgxKSA+ICh4MikpCiNkZWZpbmUgTUxU
T05fUmVhbF9nZSh4MSx4MikgKCh4MSkgPj0gKHgyKSkKI2RlZmluZSBNTFRPTl9SZWFsX2x0KHgx
LHgyKSAoKHgxKSA8ICh4MikpCiNkZWZpbmUgTUxUT05fUmVhbF9sZSh4MSx4MikgKCh4MSkgPD0g
KHgyKSkKI2RlZmluZSBNTFRPTl9SZWFsX2VxdWFsKHgxLHgyKSAoKHgxKSA9PSAoeDIpKQojZGVm
aW5lIE1MVE9OX1JlYWxfbmVxdWFsKHgxLHgyKSAoKHgxKSAhPSAoeDIpKQojZGVmaW5lIE1MVE9O
X1JlYWxfcWVxdWFsKHgxLHgyKSAoISgoeDEpICE9ICh4MikpCiNkZWZpbmUgTUxUT05fUmVhbF9p
c0Zpbml0ZSBpc0Zpbml0ZQojZGVmaW5lIE1MVE9OX1JlYWxfaXNOb3JtYWwgaXNOb3JtYWwKI2Rl
ZmluZSBNTFRPTl9SZWFsX2ZyZXhwIGZyZXhwCiNkZWZpbmUgTUxUT05fUmVhbF9sZGV4cCBsZGV4
cAojZGVmaW5lIE1MVE9OX1JlYWxfbW9kZiBtb2RmCiNkZWZpbmUgTUxUT05fUmVhbF9jbGFzcyBj
bGFzcwojZGVmaW5lIE1MVE9OX1JlYWxfZnJvbUludChuKSAoKGRvdWJsZSkobikpCiNkZWZpbmUg
TUxUT05fUmVhbF90b0ludCh4KSAoKGludCkoeCkpCiNkZWZpbmUgTUxUT05fUmVhbF9yb3VuZCBy
b3VuZAoKI2RlZmluZSBNTFRPTl9zcHJpbnRmKGJ1ZiwgZm10LCB4KSBzcHJpbnRmKGJ1ZiwgKGNo
YXIqKSBmbXQsIHgpCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgUG9pbnRlcnMgICAgICAgICAgICAg
ICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwoKI2RlZmluZSBNTFRPTl9pc051bGwoeCkgKHZvaWQqKSh4KSA9PSBOVUxMCgov
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8q
ICAgICAgICAgICAgICAgICAgICAgICBNTHRvbiAgICAgICAgICAgICAgICAgICAgICAgICovCi8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCnVp
bnQgTUxUT05fTUx0b25fcmFuZG9tKCk7CgojZGVmaW5lIE1MVE9OX01MdG9uX2djTWVzc2FnZXMo
YikJXAoJZ2NTdGF0ZS5tZXNzYWdlcyA9IGIKCiNkZWZpbmUgTUxUT05fTUx0b25fZ2NTdW1tYXJ5
KGIpCVwKCWdjU3RhdGUuc3VtbWFyeSA9IGIKCiNkZWZpbmUgTUxUT05fTUx0b25fc2l6ZSh6KQkJ
KAkJCQlcCglnY1N0YXRlLmZyb250aWVyID0gZnJvbnRpZXIsCQkJCQlcCglnY1N0YXRlLnN0YWNr
VG9wID0gc3RhY2tUb3AsCQkJCQlcCglzaXplUmVzID0gR0Nfc2l6ZSgmZ2NTdGF0ZSwgKHopKSwJ
CQkJXAoJZnJvbnRpZXIgPSBnY1N0YXRlLmZyb250aWVyLAkJCQkJXAoJc3RhY2tUb3AgPSBnY1N0
YXRlLnN0YWNrVG9wLAkJCQkJXAoJc2l6ZVJlcykKCiNkZWZpbmUgTUxUT05fTUx0b25fc2F2ZVdv
cmxkKGZpbGUpCSgJCQkJXAoJbWx0b25TdGF0ZS5pc09yaWdpbmFsID8JCQkJCQlcCgkJKAkJCQkJ
CQlcCgkJCWdjU3RhdGUuZnJvbnRpZXIgPSBmcm9udGllciwJCQlcCgkJCWdjU3RhdGUuc3RhY2tU
b3AgPSBzdGFja1RvcCwJCQlcCiAJCQlHQ19zYXZlV29ybGQoJmdjU3RhdGUsIG1sdG9uU3RhdGUu
bWFnaWMsIAlcCgkJCQkJKGZpbGUpLCAmc2F2ZUdsb2JhbHMpLAkJXAoJCQlmcm9udGllciA9IGdj
U3RhdGUuZnJvbnRpZXIsCQkJXAoJCQlzdGFja1RvcCA9IGdjU3RhdGUuc3RhY2tUb3AsCQkJXAoJ
CQltbHRvblN0YXRlLmlzT3JpZ2luYWwgPSBUUlVFLAkJCVwKCQkJVFJVRQkJCQkJCVwKCQkpCQkJ
CQkJCVwKCToJCQkJCQkJCVwKCQkoCQkJCQkJCVwKCQkJbWx0b25TdGF0ZS5pc09yaWdpbmFsID0g
VFJVRSwJCQlcCgkJCUZBTFNFCQkJCQkJXAoJCSkJCQkJCQkJXAoJKQoJIAojZGVmaW5lIE1MVE9O
X01MdG9uX3NhdmVTdGFjaygpCSgJCQkJCVwKCWdjU3RhdGUuZnJvbnRpZXIgPSBmcm9udGllciwJ
CQkJCVwKCWdjU3RhdGUuc3RhY2tUb3AgPSBzdGFja1RvcCwJCQkJCVwKCXN0YWNrUmVzID0gR0Nf
c2F2ZVN0YWNrKCZnY1N0YXRlKSwJCQkJXAoJZnJvbnRpZXIgPSBnY1N0YXRlLmZyb250aWVyLAkJ
CQkJXAoJc3RhY2tUb3AgPSBnY1N0YXRlLnN0YWNrVG9wLAkJCQkJXAoJc3RhY2tSZXMpCgojZGVm
aW5lIE1MVE9OX01MdG9uX3Jlc3RvcmVTdGFjayhzKQkJCQkJXAoJZ2NTdGF0ZS5mcm9udGllciA9
IGZyb250aWVyOwkJCQkJXAoJZ2NTdGF0ZS5zdGFja1RvcCA9IHN0YWNrVG9wOwkJCQkJXAoJR0Nf
cmVzdG9yZVN0YWNrKCZnY1N0YXRlLCBzKTsJCQkJCVwKCWZyb250aWVyID0gZ2NTdGF0ZS5mcm9u
dGllcjsJCQkJCVwKCXN0YWNrVG9wID0gZ2NTdGF0ZS5zdGFja1RvcDsJCQkJCVwKCU1MVE9OX3Jl
dHVybgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwovKiAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAg
ICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KCmludCBzdHJpbmdFcXVhbChjaGFyICogczEsIGNoYXIgKiBzMik7CgojZGVmaW5lIE1MVE9O
X1N0cmluZ19lcXVhbCBzdHJpbmdFcXVhbAojZGVmaW5lIE1MVE9OX1N0cmluZ19zaXplIEdDX2Fy
cmF5TnVtRWxlbWVudHMKCiNkZWZpbmUgTUxUT05fY3Nfc3ViKHAsaSkgKCgoY2hhciopKHApKVtp
XSkKI2RlZmluZSBNTFRPTl9jc191cGRhdGUocCxpLHgpICgoKGNoYXIqKShwKSlbaV0gPSAoeCkp
CiNkZWZpbmUgTUxUT05fY3NzX3N1YihwLGkpICgodWludCkoKChjaGFyKiopKHApKVtpXSkpCiNk
ZWZpbmUgTUxUT05fY2FzdF9jcyhwKSAoKGNoYXIqKShwKSkKI2RlZmluZSBNTFRPTl9jYXN0X2Nz
cyhwKSAoKGNoYXIqKikocCkpCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSAgICAgICAg
ICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRPTl90bXBuYW0ocykgKCh1aW50KXRtcG5hbSgo
Y2hhciopKHMpKSkKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyog
ICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCgp2b2lkIE1MVE9OX25vdyhwb2ludGVyIHNlYywgcG9pbnRl
ciB1c2VjKTsKCmV4dGVybiBzdHJ1Y3QgdG0gTUxUT05fdG07CgojZGVmaW5lIE1MVE9OX2FzY3Rp
bWUoeikgKHVpbnQpKGFzY3RpbWUoKHN0cnVjdCB0bSopKHopKSkKI2RlZmluZSBNTFRPTl9sb2Nh
bHRpbWUodCkgKHVpbnQpKGxvY2FsdGltZSgodGltZV90KikodCkpKQojZGVmaW5lIE1MVE9OX2dt
dGltZSh0KSAodWludCkoZ210aW1lKCh0aW1lX3QqKSh0KSkpCiNkZWZpbmUgTUxUT05fbWt0aW1l
KHQpIG1rdGltZSgoc3RydWN0IHRtKikodCkpCgojZGVmaW5lIE1MVE9OX3N0cmZ0aW1lKGJ1Ziwg
biwgZm10LCB6KSBzdHJmdGltZSgoY2hhciopKGJ1ZiksIChuKSwgKGNoYXIqKShmbXQpLCAoc3Ry
dWN0IHRtKikoeikpCgppbnQgTUxUT05fbG9jYWxvZmZzZXQoKTsKCiNkZWZpbmUgTUxUT05fdG1f
c2VjKHApICgoKHN0cnVjdCB0bSopKHApKS0+dG1fc2VjKQojZGVmaW5lIE1MVE9OX3RtX21pbihw
KSAoKChzdHJ1Y3QgdG0qKShwKSktPnRtX21pbikKI2RlZmluZSBNTFRPTl90bV9ob3VyKHApICgo
KHN0cnVjdCB0bSopKHApKS0+dG1faG91cikKI2RlZmluZSBNTFRPTl90bV9tZGF5KHApICgoKHN0
cnVjdCB0bSopKHApKS0+dG1fbWRheSkKI2RlZmluZSBNTFRPTl90bV9tb24ocCkgKCgoc3RydWN0
IHRtKikocCkpLT50bV9tb24pCiNkZWZpbmUgTUxUT05fdG1feWVhcihwKSAoKChzdHJ1Y3QgdG0q
KShwKSktPnRtX3llYXIpCiNkZWZpbmUgTUxUT05fdG1fd2RheShwKSAoKChzdHJ1Y3QgdG0qKShw
KSktPnRtX3dkYXkpCiNkZWZpbmUgTUxUT05fdG1feWRheShwKSAoKChzdHJ1Y3QgdG0qKShwKSkt
PnRtX3lkYXkpCiNkZWZpbmUgTUxUT05fdG1faXNkc3QocCkgKCgoc3RydWN0IHRtKikocCkpLT50
bV9pc2RzdCkKCiNkZWZpbmUgTUxUT05fc2V0X3RtX3NlYyhwLHgpICgoc3RydWN0IHRtKikocCkp
LT50bV9zZWMgPSAoeCkKI2RlZmluZSBNTFRPTl9zZXRfdG1fbWluKHAseCkgKChzdHJ1Y3QgdG0q
KShwKSktPnRtX21pbiA9ICh4KQojZGVmaW5lIE1MVE9OX3NldF90bV9ob3VyKHAseCkgKChzdHJ1
Y3QgdG0qKShwKSktPnRtX2hvdXIgPSAoeCkKI2RlZmluZSBNTFRPTl9zZXRfdG1fbWRheShwLHgp
ICgoc3RydWN0IHRtKikocCkpLT50bV9tZGF5ID0gKHgpCiNkZWZpbmUgTUxUT05fc2V0X3RtX21v
bihwLHgpICgoc3RydWN0IHRtKikocCkpLT50bV9tb24gPSAoeCkKI2RlZmluZSBNTFRPTl9zZXRf
dG1feWVhcihwLHgpICgoc3RydWN0IHRtKikocCkpLT50bV95ZWFyID0gKHgpCiNkZWZpbmUgTUxU
T05fc2V0X3RtX3dkYXkocCx4KSAoKHN0cnVjdCB0bSopKHApKS0+dG1fd2RheSA9ICh4KQojZGVm
aW5lIE1MVE9OX3NldF90bV95ZGF5KHAseCkgKChzdHJ1Y3QgdG0qKShwKSktPnRtX3lkYXkgPSAo
eCkKI2RlZmluZSBNTFRPTl9zZXRfdG1faXNkc3QocCx4KSAoKHN0cnVjdCB0bSopKHApKS0+dG1f
aXNkc3QgPSAoeCkKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyog
ICAgICAgICAgICAgICAgVGltZSAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCgojaWYgZGVmaW5lZChfV0lOMzIpCiNlbHNlCmV4dGVybiBz
dHJ1Y3QgdGltZXZhbCBNTFRPTl90aW1ldmFsOwojZGVmaW5lIE1MVE9OX3RpbWV2YWxfc2VjKHAp
ICgoaW50KSgoKHN0cnVjdCB0aW1ldmFsKikocCkpLT50dl9zZWMpKQojZGVmaW5lIE1MVE9OX3Rp
bWV2YWxfdXNlYyhwKSAoKGludCkoKChzdHJ1Y3QgdGltZXZhbCopKHApKS0+dHZfdXNlYykpCiNk
ZWZpbmUgTUxUT05fZ2V0dGltZW9mZGF5KHApICgoaW50KShnZXR0aW1lb2ZkYXkoKHN0cnVjdCB0
aW1ldmFsKikocCksIChzdHJ1Y3QgdGltZXpvbmUqKU5VTEwpKSkKI2VuZGlmCgovKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRP
Tl9WZWN0b3JfbGVuZ3RoIEdDX2FycmF5TnVtRWxlbWVudHMKI2RlZmluZSBNTFRPTl9WZWN0b3Jf
ZnJvbUFycmF5IE1MVE9OX2lkCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgICBXb3JkICAgICAgICAg
ICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRPTl9Xb3JkOF90b0ludCh3KSAoKGludCkodykp
CiNkZWZpbmUgTUxUT05fV29yZDhfdG9JbnRYKHgpICgoaW50KShzaWduZWQgY2hhcikoeCkpCiNk
ZWZpbmUgTUxUT05fV29yZDhfZnJvbUludCh4KSAoKHVjaGFyKSh4KSkKI2RlZmluZSBNTFRPTl9X
b3JkOF90b0xhcmdlV29yZCh3KSAoKHVpbnQpKHcpKQojZGVmaW5lIE1MVE9OX1dvcmQ4X3RvTGFy
Z2VXb3JkWCh4KSAoKHVpbnQpKHNpZ25lZCBjaGFyKSh4KSkKI2RlZmluZSBNTFRPTl9Xb3JkOF9m
cm9tTGFyZ2VXb3JkKHcpICgodWNoYXIpKHcpKQojZGVmaW5lIE1MVE9OX1dvcmQ4X29yYih3MSx3
MikgKCh3MSkgfCAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQ4X3hvcmIodzEsdzIpICgodzEpIF4g
KHcyKSkKI2RlZmluZSBNTFRPTl9Xb3JkOF9hbmRiKHcxLHcyKSAoKHcxKSAmICh3MikpCiNkZWZp
bmUgTUxUT05fV29yZDhfbm90Yih3KSAofih3KSkKI2RlZmluZSBNTFRPTl9Xb3JkOF9sc2hpZnQo
dyxzKSAgKChzKSA8IDggPyAodykgPDwgKHMpIDogMCkKI2RlZmluZSBNTFRPTl9Xb3JkOF9yc2hp
ZnQodyxzKSAoKHMpIDwgOCA/ICh3KSA+PiAocykgOiAwKQojZGVmaW5lIE1MVE9OX1dvcmQ4X2Fk
ZCh3MSx3MikgKCh3MSkgKyAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQ4X3N1Yih3MSx3MikgKCh3
MSkgLSAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQ4X211bCh3MSx3MikgKCh3MSkgKiAodzIpKQoj
ZGVmaW5lIE1MVE9OX1dvcmQ4X2Rpdih3MSx3MikgKCh3MSkgLyAodzIpKQojZGVmaW5lIE1MVE9O
X1dvcmQ4X21vZCh3MSx3MikgKCh3MSkgJSAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQ4X2d0KHcx
LHcyKSAoKHcxKSA+ICh3MikpCiNkZWZpbmUgTUxUT05fV29yZDhfZ2UodzEsdzIpICgodzEpID49
ICh3MikpCiNkZWZpbmUgTUxUT05fV29yZDhfbHQodzEsdzIpICgodzEpIDwgKHcyKSkKI2RlZmlu
ZSBNTFRPTl9Xb3JkOF9sZSh3MSx3MikgKCh3MSkgPD0gKHcyKSkKCiNkZWZpbmUgTUxUT05fV29y
ZDMyX3RvSW50WCh4KSAoKGludCkoeCkpCiNkZWZpbmUgTUxUT05fV29yZDMyX2Zyb21JbnQoeCkg
KCh1aW50KSh4KSkKI2RlZmluZSBNTFRPTl9Xb3JkMzJfb3JiKHcxLHcyKSAoKHcxKSB8ICh3Mikp
CiNkZWZpbmUgTUxUT05fV29yZDMyX3hvcmIodzEsdzIpICgodzEpIF4gKHcyKSkKI2RlZmluZSBN
TFRPTl9Xb3JkMzJfYW5kYih3MSx3MikgKCh3MSkgJiAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQz
Ml9ub3RiKHcpICh+KHcpKQojZGVmaW5lIE1MVE9OX1dvcmQzMl9sc2hpZnQodyxzKSAgKChzKSA8
IDMyID8gKHcpIDw8IChzKSA6IDApCiNkZWZpbmUgTUxUT05fV29yZDMyX3JzaGlmdCh3LHMpICgo
cykgPCAzMiA/ICh3KSA+PiAocykgOiAwKQojZGVmaW5lIE1MVE9OX1dvcmQzMl9hZGQodzEsdzIp
ICgodzEpICsgKHcyKSkKI2RlZmluZSBNTFRPTl9Xb3JkMzJfc3ViKHcxLHcyKSAoKHcxKSAtICh3
MikpCiNkZWZpbmUgTUxUT05fV29yZDMyX211bCh3MSx3MikgKCh3MSkgKiAodzIpKQojZGVmaW5l
IE1MVE9OX1dvcmQzMl9kaXYodzEsdzIpICgodzEpIC8gKHcyKSkKI2RlZmluZSBNTFRPTl9Xb3Jk
MzJfbW9kKHcxLHcyKSAoKHcxKSAlICh3MikpCiNkZWZpbmUgTUxUT05fV29yZDMyX2d0KHcxLHcy
KSAoKHcxKSA+ICh3MikpCiNkZWZpbmUgTUxUT05fV29yZDMyX2dlKHcxLHcyKSAoKHcxKSA+PSAo
dzIpKQojZGVmaW5lIE1MVE9OX1dvcmQzMl9sdCh3MSx3MikgKCh3MSkgPCAodzIpKQojZGVmaW5l
IE1MVE9OX1dvcmQzMl9sZSh3MSx3MikgKCh3MSkgPD0gKHcyKSkKCi8qIENhbid0IHVzZSBhIG1h
Y3JvIHdpdGggPj4gZm9yIHRoZXNlIGJlY2F1c2UgQU5TSSBDIGRvZXNuJ3QgZ3VhcmFudGVlIAog
KiBzaWduIGV4dGVuc2lvbi4KICoKICogI2RlZmluZSBNTFRPTl9Xb3JkOF9hcnNoaWZ0KHcscykg
KChzaWduZWQgY2hhcikodykgPj4gKChzKSA8IDggPyAocykgOiA3KSkKICovCi8qIEkndmUgaW5j
bHVkZWQgdGhlIG1hY3JvIGZvciBXb3JkMzJfYXJzaGlmdCBldmVuIHRob3VnaCBpdCBpc24ndCBB
TlNJIGFuZAogKiBtYXkgZmFpbCBiZWNhdXNlIHVzaW5nIGEgcHJvY2VkdXJlIGNhbGwgc2xvd3Mg
ZG93biBJbnRJbmYgYnkgYSBmYWN0b3Igb2YgMi4KICovCiNkZWZpbmUgTUxUT05fV29yZDMyX2Fy
c2hpZnQodyxzKSAoKGludCkodykgPj4gKChzKSA8IDMyID8gKHMpIDogMzEpKQovKiNkZWZpbmUg
TUxUT05fV29yZDMyX2Fyc2hpZnQgTUxUT05fV29yZDMyX2Fyc2hpZnRBc20gKi8KdWludCBNTFRP
Tl9Xb3JkMzJfYXJzaGlmdEFzbSh1aW50IHcsIHVpbnQgcyk7Cgp1Y2hhciBNTFRPTl9Xb3JkOF9h
cnNoaWZ0KHVjaGFyIHcsIHVpbnQgcyk7CgojZW5kaWYgLyogI2lmbmRlZiBfTUxUT05fTElCX0gg
Ki8KCg==

--------------BE2E50C43683742BDDD756DA
Content-Type: application/x-unknown-content-type-ProjectBuilder.h;
 name="winmain.h"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="winmain.h"

I2lmbmRlZiBfX1dJTk1BSU5fSF9fCiNkZWZpbmUgX19XSU5NQUlOX0hfXwoKI2lmZGVmIF9fY3Bs
dXNwbHVzCiNkZWZpbmUgQ19MSU5LQUdFICAgICAgICJDIgojZWxzZQojZGVmaW5lIENfTElOS0FH
RQojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KCi8qIFRoZSBwcm90b3R5cGUgZm9yIHRoZSBhcHBs
aWNhdGlvbidzIG1haW4oKSBmdW5jdGlvbiAqLwpleHRlcm4gQ19MSU5LQUdFIGludCBSdW5NYWlu
KGludCBhcmdjLCBjaGFyICphcmd2W10pOwoKI2VuZGlmIC8qIF9fV0lOTUFJTl9IX18gKi8=

--------------BE2E50C43683742BDDD756DA--