Added web target cd releases && ../buildtools/love-js/love-js.sh /home/alexjgriffith/Development/love/min-love2d-fennel/releases change-me 0.1.0.

This commit is contained in:
Alexander Griffith 2021-02-01 20:09:15 -05:00
parent 9734c46064
commit bd2809640e
56 changed files with 5485 additions and 579 deletions

BIN
buildtools/appimage/AppRun-x86_64 Executable file

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,962 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="141.73px" height="141.73px" viewBox="0 0 141.73 141.73" enable-background="new 0 0 141.73 141.73" xml:space="preserve">
<g>
<g opacity="0.3">
<path d="M117.726,21.413c-0.016-0.017-0.035-0.027-0.053-0.042C96.307,3.014,66.118-0.243,41.136,12.523
C16.168,25.282,1.956,53.733,5.382,81.306c2.392,19.268,13.129,36.165,28.466,47.021c0,0,42.277-37.776,53.504-51.181
c10.53-12.582,33.52-52.764,33.52-52.764C119.861,23.365,118.814,22.374,117.726,21.413z"/>
</g>
<g>
<path fill="#E74A99" d="M115.726,18.413c-0.016-0.017-0.035-0.027-0.053-0.042C94.307,0.014,64.118-3.243,39.136,9.523
C14.168,22.282-0.044,50.733,3.382,78.306c2.392,19.268,13.129,36.165,28.466,47.021c0,0,42.277-37.776,53.504-51.181
c10.53-12.582,33.52-52.764,33.52-52.764C117.861,20.365,116.814,19.374,115.726,18.413z"/>
</g>
</g>
<g>
<g opacity="0.3">
<path d="M33.849,128.327c7.067,5.001,15.11,8.726,23.765,10.801c27.076,6.487,56.27-5.293,71.759-28.261
c18.256-27.077,14.241-63.649-8.5-86.485c0,0-32.464,38.778-43.287,51.706C66.65,89.146,33.849,128.327,33.849,128.327z"/>
</g>
<g>
<path fill="#27AAE1" d="M31.849,125.327c7.067,5.001,15.11,8.726,23.765,10.801c27.076,6.487,56.27-5.293,71.759-28.261
c18.256-27.077,14.241-63.649-8.5-86.485c0,0-32.464,38.778-43.287,51.706C64.65,86.146,31.849,125.327,31.849,125.327z"/>
</g>
</g>
<g>
<image overflow="visible" opacity="0.3" width="354" height="324" xlink:href="data:image/png;base64,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
rkJggg==" transform="matrix(0.24 0 0 0.24 28.4971 38.3643)">
</image>
<g>
<path fill="#FFFFFF" d="M73.043,52.8c0,0-6.48-14.187-19.968-10.958c-13.486,3.23-41.652,30.792,17.853,65.083H70.88
c59.504-34.291,31.34-61.852,17.853-65.083C75.245,38.613,68.766,52.8,68.766,52.8H73.043z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,5 @@
#!/bin/sh
export LOVE_LAUNCHER_LOCATION="$(dirname "$(which "$0")")"
export LD_LIBRARY_PATH="${LOVE_LAUNCHER_LOCATION}/lib/x86_64-linux-gnu:${LOVE_LAUNCHER_LOCATION}/usr/bin:${LOVE_LAUNCHER_LOCATION}/usr/lib:${LOVE_LAUNCHER_LOCATION}/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
/sbin/ldconfig -p | grep -q libstdc++ || export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LOVE_LAUNCHER_LOCATION}/libstdc++/"
exec ${LOVE_BIN_WRAPPER} "${LOVE_LAUNCHER_LOCATION}/usr/bin/love" "$@"

View file

@ -0,0 +1,10 @@
[Desktop Entry]
Name=LÖVE
Comment=The unquestionably awesome 2D game engine
MimeType=application/x-love-game;
Exec=wrapper-love %f
Type=Application
Categories=Development;Game;
Terminal=false
Icon=love
NoDisplay=true

View file

@ -0,0 +1,962 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="141.73px" height="141.73px" viewBox="0 0 141.73 141.73" enable-background="new 0 0 141.73 141.73" xml:space="preserve">
<g>
<g opacity="0.3">
<path d="M117.726,21.413c-0.016-0.017-0.035-0.027-0.053-0.042C96.307,3.014,66.118-0.243,41.136,12.523
C16.168,25.282,1.956,53.733,5.382,81.306c2.392,19.268,13.129,36.165,28.466,47.021c0,0,42.277-37.776,53.504-51.181
c10.53-12.582,33.52-52.764,33.52-52.764C119.861,23.365,118.814,22.374,117.726,21.413z"/>
</g>
<g>
<path fill="#E74A99" d="M115.726,18.413c-0.016-0.017-0.035-0.027-0.053-0.042C94.307,0.014,64.118-3.243,39.136,9.523
C14.168,22.282-0.044,50.733,3.382,78.306c2.392,19.268,13.129,36.165,28.466,47.021c0,0,42.277-37.776,53.504-51.181
c10.53-12.582,33.52-52.764,33.52-52.764C117.861,20.365,116.814,19.374,115.726,18.413z"/>
</g>
</g>
<g>
<g opacity="0.3">
<path d="M33.849,128.327c7.067,5.001,15.11,8.726,23.765,10.801c27.076,6.487,56.27-5.293,71.759-28.261
c18.256-27.077,14.241-63.649-8.5-86.485c0,0-32.464,38.778-43.287,51.706C66.65,89.146,33.849,128.327,33.849,128.327z"/>
</g>
<g>
<path fill="#27AAE1" d="M31.849,125.327c7.067,5.001,15.11,8.726,23.765,10.801c27.076,6.487,56.27-5.293,71.759-28.261
c18.256-27.077,14.241-63.649-8.5-86.485c0,0-32.464,38.778-43.287,51.706C64.65,86.146,31.849,125.327,31.849,125.327z"/>
</g>
</g>
<g>
<image overflow="visible" opacity="0.3" width="354" height="324" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWYAAAFJCAYAAACo3If1AAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAzYZJREFUeNrsvVuTI0l2JubHIwJA
ZlZV34YccinurpmGNJs3mWQmvei/kfwxMulfkK/7srZvY+JSErnk7Ezfu6vyBkSEH52b3yICWVnV
Vd11ce9GAYkEkEA4/MTn3/nOd7xro4022mjjnRq+HYI22mijjRaY22ijjTbaaIG5jTbaaOP9GX07
BO/3QESItwHgVZ7niudhO5Lv93y2OW2BuY2feaE+tED/7u/+7rVed/E8eGixt0X+883p685nm9M2
2ni7aKm6/O3f/u3qvocu/9v//D/5l11e5fW2/n6J6tp4u3O6mLfq0ua0IeY2fgbktIWWaBHJNS0+
eeB/+s//5cHXfH59/Zg//eAipL/FfwfLv7+BzKAhsLc/pw/N5+J3L51T+1vY5rSNNh5AT1vI5Rw6
+u1f/0Yu/8Of/WnHF7rvjV7i6/KF/87y70eE9jIE9pEir5fO6dbx5OP8v/+v/0v3tua0nNf4/Wlz
2kYbi2D8mEVbBuDlInv6F3/Z/eYv/6r/zb//i952O+nyp59/mi4Xn36WLvy78ufyceXzf/XZp/K6
/Pr8d84t7pct6o9lQW9RFA/NKV9vzel/+O1v5bjz8d+az3Iety7LeV3+/k3P6cuQeRtvZnTtELxd
FMXb2n/4h3+QO+I1b2F//4c/yu+fPX3iDkMPz55cwfPrG/jm2+/geLiCT/sn8N3z7+QxtOAg7C8g
zLO/e35NG8wRaPXAnp4X+gHCNMHQ934OAeBAj+s66EcHHc4A8ww7ekyHPdAToOt6QLqMxyPcn05u
oMc/odeZ6TWu7+7h5vYI/bOnshmf7u/l7++GAfZ/8qfwT//3P6bPRYsa6NM5fr/lgo2f0emH558/
mMXMwZi2/Kt53ZpTOi6Oj1GcUwqM8Ong4bsfX1RzenN7B3fPn8scLueznEuYEXrv6OKLy57mdp/m
dTmn/Ho/dU75c/0f/+f/tfndtuPRVnoLzO/Pwo33PRSM46L97C//Pdz9+CPc0qLhBesun/oXX38D
h8GCL6MZXqQ/fA8hnGDynUffAV/cNMJEwddj8DfTDBO9h0D3hdNIMfkEjhbwPE90CbS2JziNo1yQ
/tZIgXxHv4fdTl7r+uaG/tAEngLDSJd5PLlnFwf4/sU1nIKDYb9PC/tPP/t38I//3z+5uKDps7gl
qioD13u+mDdPsg/NaRmI85x+BYdegy8tPO853l6/gNvjCYaLCx/nc+fB84nyHl2aS0fTRJND8x+Y
+AWg13H0eJlbm1ee06GjCeXf25ze0uvAdHQ8p7Dfw4nm+DFzuhWo7fN+sCfeFpg/AnT8smDMi4AR
MS/au24P3/3xD8ALhoNwuJ8J/TznhSSLlRaOn/j1KajR/tTf0fVEC5QfSyuTFjj6/cWlH/m5IeiF
liXh5+KC+Xd0Oex2nhc9/crTkvUjBXd6fb/3gx+DBmakv0EBA06EwvrxBP2Tp4BzcIzGrm9P0D25
kEXNn4EC0GaQPreY35MAvXmSjfdvnWB//OabdSCWOb2HF9fXEoDdhBQwT96FGbqBoneY/YmOTJxP
CrnQ7Q/+OE3FXNp88mvxtff5/mJOHc1dmIIfKUDLnNLYo5c5nZFOzic5CQDNOXT3d+7cnPLn488T
EfUGmv6QTrzv3GiVf2+GY5TB2W7LtMuFs+byhabbv/vHf4LDbpDbF59+Bl9+87UE4tM4+fm7b+R+
QlL+REH4dLyjxdl3d+Poj/PcEQTy0zh2FEa70PnO0X2D9x1OUzeD6/ph6E4YCEJjR++L4DTQBTcu
IL/nx/Hj+Xn8fEJT8noUo+n1e/k7tDem+7qO//6O/2bX+fHulh4we36f43hNiHr0/Bm+/OY7+Uz8
GeJnzEH6ugpwUREQVQDvKA+9QoHlvMbH8Jx2n32RqImvvizn9Ed4cXtXzOm933WDzCnyXNHa4+PM
B5qQrxx/H2aZD9r/pPks55LnjnC2XHAxr3FO+bkUjuW7wa/J3xX+zvDf4u9QmlMO7nQiXs5pR8Gd
P4N8f+9O6TPz5+TPW37+eOItj1Oh7mgouiHmn5+uOIeOz6EoDlx3L14IghrReTzdCiJ+TltKkG0t
YWNCvQRV4eidP/jen+aRVyDveAUp0VmUlhWtw9n5nhbbHNDTvpYWKghiQlqUDIEJetHLBbrg4gKe
H8uvx2hNXndi/MVRwfPrEv6i5xOy4pO2IPSh9xgIoSuv6WnBwwk5EshKB7fbCwVyePYJHMLsmNPs
rp4K6ioR1zLgxWP3jiHozYC8nNeSsvFPPoHd8U7Q7nRzLXN69+KepgV1vi4ONqeeAvPOzzSnyCQE
H2eZdvSzHHOUYD0T2qVQ3KX5lLnU+eQdDdpc0g35WeaUv08+zyk6mWOdL5lTnUue04FOBTzZzGMz
ah74+2RzyvkImnk+P8suace7MnopRtPj/gruf/i+msvHougWNRpifusIOQaPhRY1oeNzKIrR5Xga
BUH1p3vPCJTREyMYRjMccmmFCeJhBHRyQYlkAisUOntaNr0LoZ8Q+76DYZrnnpbbwGwjOjcgrzEH
DFfpNsrP6wvK7/lx8jPd5rVJS15eryfgNiO9bnC0m8aOgo0gsSBnAwkc9FQQFMbvmSOLfIb9vgNC
XoK6mNs2JM2fXbb1RSCLO4iItt4FBF3sflYIeWte4+6Ak2zj7bXM6Q2dYHlOCZV6P/CuY6YdyT7N
KSPcieZUUK+T8xrNqaP5nGVu+fhTjJX5yPMZ51J/diAUslwo5tqc6mP4sTRvw8zX9Ho8z3lOMc8p
/87mtBPkHQRh85zSybdj2izukhjl0xM4qSw7gIik4+d/LIpuAboh5reGpCJCXibzIpL6f//lXxM6
ZhRF6EIy6xFFAX3JkdDKkb7kOzohMoKixcCJGkGxMyNiQkAcDAm1yILpKVhTOOwIfdEC93IdeOtK
mIofhxw4+cILi9YJPZmuaeGDBdDVRR/vUX7vOegz6NPXAU4v0TXyz/KegJEYc5qeM4iEuxwta4oG
yHBPCymAlSCedgHdeIQ7dBWSDjfXbri4hNvbW0eLOaFoOkZugbZWCPqX2v28bF4ZHfOOZ+BdBc1r
mAgBUzDmncokx4nmtOPDQ8cOOIlHv++8zBXPacdz4/VnXn8cHJ3QFHke+ZoPJc8TylzqfBJO7m3O
lNLgebLfeyffCS+vQX9bTqqgP/N7caBz6oKi7jin9J4EXjuB8PqloGDuD3T7HoTvoI9EgILrTeh4
MJL2XQ9XvXcvjhN8frFzN3f3myh6mV9oHHQLzG98a/vQwo2JvLhw7+7uWNEAJ14VtAA4GDPMOfEW
k5N1DIpdpBU03+5lQVnglV0oyMLlYMyLNi5SkAUui7F3nAtkJM3Pca6XxegZLcl9jJqqC/25XpCa
PZ5fx4IyL2I+IVAwBtlq2xoV2gPp/UsgBwnUwItagoJsp/nckoM0/Y5hnahAOMre0wOHECike1F5
2EnLRZpjkSysEmxveRFXJ9vHBGSaOQj3d36m+fXD4Cc6Lr1ww7x36YVO4hNsL3QCBb0weyfzBzKn
4O0483wCWE5A5rXn+dC5cRxYZb54Pr3NJdrvwfTJKPOn88jzGujvgHwn+PXkO5Dm1Flg5jnV23lO
+TvoJZHIE4gcrjlwQ+Doyt9f2p4d6OXCQNhimhzTHnuazeWJl3ZGEqDLed0K0O9Z8rcF5vch+XMu
II9jEGkbL1z+wjM6dgOnXjpZqByMZ2RC0ctCkGDLSIaTP4SCUJFTTwtbkA8h1Z7iXTc7S/jYYiQ0
S9tQ3QI7p4GXAzQHYtrO0sL3vLD1cbw4Fxdd0Bog6D2wwENRdAwIgrZB3oNw0gmNK89t1Jcs6o7B
1IyGoMFQtufoTOub3iEj6d0OJlrM/CLhbqTdNP03jlWAvjgcHGt543F/24u4kDRWJ4GXBWSZ14mT
sUEC2WQ7nr7vu0AolGmdgEFPsM6OKQfWiHJ5zgQJ6+/Agiv9btC5BJlLnWedT+QTKepcYgzKaMUj
qK/nde56Wcv8HZA5RQ70clKPc8hzyhc+YZRzyvMGNqccuBlBM6KeCSnzmTkGaT4tz6OmK3f0A8sy
yxMvffdgR38hctHnAnTURP+cO6MWmD+QxN6rBuRxnFnk70fZ1s6ib6DQxchJkzgaATlBowEZmdSg
BRVmWViyNZWfnaIeWbQcOIUDlmtZbHI7LmJdyBLEwQ3eCTfJrzWkxUv3y3P5ku7Lr4H2fFdsl4VH
ZiTnwKrE5ETRyVZYEBxf665XEpJekRgnCBnrOwrMDNsnjjj0KXkxc7ji+5ilhvt7Cs8uBeiwO0R5
VgqQb3ERb9IWfLtM1G4F5InmFXCWee0kGAfBmmGeO/rs3k5qnG/rQzyZ6snXUC7y/cL9Co/MvK/O
xVDOCR1r4Y01YAtyHoq5rKr6AMp5lbmP34k8n2i0Fs8pOKNQ9H7blaUTLmeBJQR7C9iKrOlca0CF
4y/PKe+GOOtYnHiPt6N8ye9pfpnmeChAL0+KjX9ej2ZiVCzaEpXxomVzmSL5437zl39FX6CvnEnd
3Gk8Qn8xCDqcWOBPCPLQDf4eNbvdzbzPFwWDlLkyWnGzoivmckGkyahZdc6dgyFSoRGQwahwgqAB
hXlLybo78ZehbznyY+Q+4PuQ/3F8DyrTAPkLzyvJSUiUG/orfgUnmS80wxr+OehtlPgpdzkGTXQb
UQAU6G2+b9bXYvIZREw788aefmb4OI4jMsLi582eX7fjAyFk9TSNeOh7x4Fb35JzV7/+c8fHmY43
H3e0BVua7sDrmOuUxkJR0hjntkxcsTyM5/Xm6y9hYMR/dysn3Q4YRTqgjbwXgoZQMx9neoTwtTyf
TP8g2sfTuWBgzdSU0laMKeOcispCpiRSQmA0QzGfqO9YZpMfqknR+DnEe1kOPj8FbX5dnNA0pyAT
qXNazy2EoM8JaU7z/TLf8vXyPJP0DQ98+pHvATJ5MzG/ws+fZxi7Dvuhx5vjfXDHkxv2O7j/+kvk
Y0nHVBHgZ1+43/3ud/b1k51RMsr6KXPbEPNHxCOf29ouEXKgBXYMXAQwiWxNvrqS6KGtICdjJKgG
QSx0W6pomRdmVCyUgyAnQUaD5+y619uoCFeRLshlR+tz5zhDz9eMshQZi8oC7Dn0ejtEu3YFWrYL
ozDZ9oJwloMgtGpbrVtk0G233h/Rl6J6pVZAeWnhmO2EoXVpme4AozZQYZfmFvVEwvsHCZT870hh
YE+3L/c7N3z6RaI3/vlff/8gvfFTUDIH5Di3dDKAz/Y9MD/KKP5A7+769oaOAE0XBtH6BlGoUISi
0w56lbLxXIIqHJh2kmppVNqBj7HODwhNocedrzHtXmRO6faOa/QMQe9sh0SPw2o+7bH0s17b7YSk
wVQ2hqJ1F+UMQccdlkObU0s0WvIRJOmo86vUhyUXnUgxdX6dcuZGf8hZhsM/R26hr1RWyZJBQdSc
Txjv7lxPOyhG0CV1tbUz+glz+0EHpY+WtlialUckxQj53/74lfsPv/0t/Aud5T/7j/8jzF/+3t37
nstlYToFoI04MFqQQMToqusEAfMGl7XHk7Oki3J69BjH+3kL1vbFlwWhj2Pel4MA/06Sb8rxyqKQ
pJsia5AkjgY/Lc1VhM34RtI18q9BajpR5In2AlxRIJjeEnjtFPEaWnbBnkyxiG8js4eCjvkv0MKb
6Q8wIp4FQfO1oGrgLFegF5rpUbwnUNRMl1nAsmP2nKKcMJdMZuI8TWG33+OJrmVfv9vhiQ7A6eYa
//TzT5HQtvv+xQ0yen767Bkyko7IupjDswhrOb9xbn/7179hVA6//tUXtPP5Fnhur25+gG++/9Gd
mD+lDzMyhz4MstMZOfiMIzM4oj0OjJpRdeRRU8w/My0gSVouEGENuaLkDjSfoHy9adLRro3Hj/cZ
ajbpnp7sQK8QYnOS8kOh6fzQjoHhagRtZRLKOaXHcC03HWHe6YDMTYi7IsK9+g1yLIQOhqxn/g7Q
M+V3s809Zw/A6Y6JX5PPVzyvXT/gxHPZ97RxxEA7IfnbHV11dLoPe9phvqG5bVTGR0hb8O/Gaa62
tqxVdf0Ae/4dc6b0ley73k9h1IDc8ZrjDLfKy0Q9YeoGQ48qe7IiApW/cbA1lYX9ztnv5LkWrLWo
wBI0SnEov8voU9YiaPGArD7Z+IKGXgfladdCssRj/se2tLYh5gvYthYlILNNg9NFLQFXFrgtYA7I
vIiRf3a2qGkB8wKn51FwRj6Ac1CKw8sWmQI27/55O4y8MdYIQzCuo6g+B2FJbu4D0xs7Op5390d8
2Ra40D4vIbJbzm9JSTFKxvFOHsq0xSinSEHxwGXtfCpkw6hOcmssUhODKNsNiNqBj78E5og8jVfu
hLlKqFN3Fqgn6BSgJWjbSdjJSdcpXSW0h5xZweWTrDFZMm+L1lNpmmVeJUbLw3QuIVEVKDQFz6kF
YAm+cmLl4CsWSXleaeYpCEvgnfmkG+eenjPr9wEkSEtwl3nFMPI2wsk3hZ44w45PtOzh4oSoS9TV
q87tMmA3xPyRoGQ+BoyiXjx/Lij5s6dXMAyD++q7H2B39QSG6QQnXqKctaPvNcvy7yhgs8dBYF8C
ZhJFNsaFIAkJiZaUMTIn9JQKCLpIJVBzxh6z9M3Fx+jCd6ZPRmcIWraRib+07WUqivCLBIrd3ppa
jP9khKWISdEzOuOSNT9nOHw2TlmCrS5WDciyAsGCsUO289D77bF84XQg3x94UTNyBr6PgjNXsvRC
xdLf4BrGLuz9QGjqPkT0fAgTPvvzf+duvnqB319/nRDWsydPKn5yafy++DnNL59wlyh5nrh670Cg
jz0mZk7syYmOFRYoNDFTNx0nwTpGy1w3x0E2yLwyTcXVeahJNZEqCj2g8jUL2jbH3uY4XpLm2Kl2
HEzWtjGnipq3plPRsgVlnc+4CwpyG5X/R0O5MqeMdO3kyXkC0JOwzq/TE6zcL6gZZ0PSOq/g9Pd0
YfWgzit/y+nwzBM9lmtYQkLQckKQXKKrdkY8t92v/8J9/8//j7zfhp4/Xo75URl52orB1X7vT6eR
0BObBYn0i5k04RpZfk/fQz8vNMVgnGPidmNVFqLxgVyVBztQXnFPXz02djOeUTjkPV/oa0gXx+Cc
H7On38nP+juhY/eot3d2n74GvR7YY/W+4nf5Mujz5PfGO9v94PL7BOO2lRPto0LALibfEwWA6HGT
LMsQoCYzhX20AMOJL1A06OXUyA8UMDWHWSR3wcmZz43T5DRD5uWADBwn9lfu9uZH4Z45ybrUx0Yt
8lYBUDm/v/9v/009Seg1xjlASsxRtGU9Mgdf26XoeVjkh8i5A1FbqApCVBQ70OtBuX899uwXRK/J
x3fPxxX5WIPOm8wjunSbH4PVfOu82RyWc7Z3ab7r36HO165Q3uyiEgfsfn7PKS8hmvc4x5DzCA6S
HFPlfIb0RRutyg2dZwEVpm9XCgaUihFKjc/iXO7Np9/ZyGndhzB3NWv6kU56u74Ta9PIP/NY6to/
du75Y6EyYIGk0taWUTL/PB+PQlvc01fph/tT2tqywnjHBj70RaIo4uf5JFyjUBaKbOVLGyLKFdE/
CGJSQYaL0inTGMtjeJFzUO+14kvkcVr0kRAVxiDXGR3QZV4S/QZahjVyxuUhwIS1BIYYwoK87dWt
ryBnXluMeOa47WXURM+YFCW7iZ4xGZqaFDEL6qLIymo5J/ehSrbk8fS6U0wMMjIT1oRzashobIbj
6WQOZSEMhLhux1M43Z/cKXwrb5rQLvP+sv0tlRuxbRKP2KZpOb+RljqNE5zYVY93PF6kJOpHEpSG
YrIlCML1yg8bNcVz5qWEWqoje0O/vcreorYYdX4LSZuVYHPyLX4XYlGJ0VpFRxFIP4PlE1ZzivVW
N6Flh2knFNU1aT4TJZXoC9R8QKSjWE+klAXPG+9weO5kXhkl87wh2DyDk/ucSJnZnIMl+jjJjgqE
VpP4HKkrobEUpbOLnXrhTSPesdZjGp3QG0Of1Bsjg25dn29MldMC8ztOXUQumQcngDi552zhXn/9
lVRe8Hdtmnkzxl8K3doqUhBNkdfKrWAJPJe0oaj8sQRW1iBLwPVWCICqY8WIOGPWHDBVcclraZVX
WsD2+l5/53zkoYug/EBgXm59sQ7M9SVE2Zst5NmVCzltaWX7O6EFaL2tAZiO80RLUu5zGrRHXsSA
FqCNrgF+HgvO+Lkg3sGzaDUoOPOPjKx4RU90FuRs40gHdprGsLWAzacBl33xIpdczu/pxY8ia9wT
WmPfeZSqvc5PkgdDPwa08mVJ38qJlT5PVKDIHAU7ocZdhARlVxR8VHpjU0KoLrzXMmv7GTJl5TZa
TqV5TMEZ4Qz1eG4+U/KvDM7O1TkC+9lu69w6o6XQ5lFOsBaM9WTL3kc8v/wY0ICsiU/6PerjIpLm
5DF/b5izZvjCE88mSrxH6uSzMAWCgU7CLK+TD0LxvJRN8on1Y+SeP+TADOcSQCuUTLvU56dRMvIq
hepk4aLJbi2vwWl5RrUdl+JyibSWwaaSWUVKKugfPEvSbOGCFRBYAE4FBS4VBsTAjL1J0vqad87q
DdT71oF5ha5gAzFjXsiwXsSKlLFQW+jiFc2yoSk61Qma4sXqLChLgEbkeMc/j/JYoXUESY28kOl5
o+4SeCfBz2E+3s8WqGUhi+qDE1GEpCf2De579p1mjtRRQEW6nRYwo2dewDdf/sEZL5lGTN7y/PIN
zhWMp6PQUhe993tO3M6zJlM5kcf+EZGaAvGukHmwANzbz6lSz1DyUMxrpHoGkxsOaX51jmVuwZW0
T6rM2w7MoElAS/DGuYT12TbN6+acLndBptKYM6dsuxxBzjq3GAOyza2cZC1A2y5psjmW2zKHdL+u
B0XQnvMKnpCNJTr57/RdF0ZTc/DC4WYAtFHh+6rE73hxiTd28jXr2E30/CEH5w81MG9SF1EmFQPY
/fPn4u+w75X6BE78jCdGbGJAzoSZyttsMaE6rnlFVh04yIjXAjJYxV6JmkTDqvpU+x0qwhJdc+L2
En9rNEeqvIsL2LwqfNwCY6Y00iKGtN3dRsyQ97+lVC5giaygQs6a0EsXtEWri1QDdAzIEpRH/hn5
moOxVjFO4teBDIDdaHxlJ88XrlmvbYcDou7gBJwHQ7kUoOcp3NFk8faXAq07hMl1F5fuxj7dZ0+v
WILlIuqS40IomRc7C2sDSJMBNZFiNTK7vk2TBg2mn7quF4TsuQIz2DxoEDYnuKRDNr+RIaFjNE7e
yquLQG2l08WJ12UPFDvZdjqvCgJs/jxUqBm1Gmg1p0XiD5LkcftkC/lki1nyOJcn3LgjSsGX5tbz
XHIvM5lTO+nKRkboDbuPKQ55TGeURifPpx2U2JGKhaxIPmlpTbMY3THS4QNJgZhPvlJTSivsh/sT
nm6/XFFXbrsw5YOlNvoPNShvURelTIpR1POjoahpVI8AQlGsSe2kLNX7iGxSYQVq2a2VLPedLlAJ
qh5SQYgEYkVOWiiggRtzkYeJ/e2+Kii7IgETF7AF4i7ykcktLKEpF1UaLiOsZXIbErlccZGiyLBq
sKjIUM55Rldve2UbW3HJFHyRkRNqILYLPUYCMKsLbeGOLpcR82eywC2GPuJbzGi7U/8F+YwE8SZG
VCJYoz9yorXbywrvcA4zXRQ9a3XZvePlHgejLg7eMVcwEVqm6C5SQ5YIjOPspdEAznSitTwAB2A0
/l8TtUxd6HxKAjcm2WLxhyTVBk2qxSIfTMgZ8rz2UM0x9gWFYUHZqXeFTARGjbo32Vzc/cC2yiYG
pSh9FMFc0JfCJI/LPHNUYuR51TyByzSUIGcJuhJ8GTFjCsg42tzp3DuxBGDKqoe0Y1KVivp1KO3B
+pak7w6BZ2uWAiQtWgR2n6YTaDhHXRlFJXkFW9eJ2rATOrbA/J7wyUvqYndxCbtwEhRFi9t3s5S9
CooS5QA7v6kemd0YBR07zBVS4i3hotOX8okYEVNcmGouMzgLyrJIE6LKj5GgvfKvSMnAruCj+Svb
pfJdyYgvkn+qY4a8gDGG4lyMUNIY1fa3WMgxODtL2mBCVYacNRGUaQzZzo6owdqCsgVocCcJ0M6d
4g7Bsv+dBm3UpL0znTakghx+LUFT9NeY7qeT6Sy6vU5qJwIXL4Q7DueEnpmPPvQXeKTfcjD2x3sJ
yJwrGFngyC0Nh44LRXwQKRyHA588I7hqzzq/sBeJzKeqHaLqQv2O6RhZNaUoVHYoARqTqgWLCkw7
2cbKvHo3lJQ8aU67Yh6telKlkFjMJxSJv3ovj5Y8UF26acvi3MY8Qci7opjQrYJzRssFhQF8YtVc
wghxjkXqjTbPNL+8K2IaS+ZXTsK9d0JrjRhNuNSrQ4O9l7xCLKCax8AL0VXoeYu6inkFlj3GM9KH
TG18KHK5ZUcRKfmM2lVzLxOZ1OnujksG2NCc8xHskCbSKK9FIeLq5jQDP6QyZUVELE+q5G4YZU78
M4BIoOixB/pCX9Dtg4sXuo8er9f0M73XAy0fuQZ5vLswadxB5XFcGWxyN5VZmYxK5FVMhSdJVpTb
6X1YyuKGxe3FBfJtcAX9krffJp/rIy0T3exK4xzIQWfrUgYeoV98DMLKK6svhNQsynZX/T5AyjpA
TCI6UT1Lsw+nxZXieMZ/lB/DJd2XIogW+Rtc0MPvGHGfTlL8w9abvex+LJkX7TUD9qE4ebIEjmO4
SOGSTE3ngmWJyHMS58jZnDmd6zTPeY7zffl39t2w7wvL6lT6mP8elDK5xXyKFA5s3iCV5LskxbQy
/SSXSzRLaWZl9NrCEAmrXEe/+F0s2U6KoVQ0Y7x8tBIFldN1EfHLVHrIgMJlHxCdX1TTFoyCPC9z
2+nj3N0chBwfDhciq7s67N3uV6mzd9oGLgyRPqxt/wf0GVIGO5ZUR+piYgN3OiF3PbuwzNEdzDO3
3DNKndWk3oshvSZtbBs6QES25mPg0KVuE7zIigWxw6QjLVCzJo2GcpFARlddlcVPyaGYvcdcMaZo
ynjmtMUtEkUPzm1CzTXXDNmsKCGsdFsLClyJniEnhvQyLi4npS/wpLfjBeJte4z9nhA02yvolll5
6piAku2xFTnwbph7LM1chsdE8P4g23c/ExDrenlzME+Ou0tzuTwrariDeCcyaqeVepbYw+Qj4Yag
aHnnCtQrGmQ9+UpwZJ+KGET1Piw04S4H+Kj9jrspO3GZXrg4aUmxUHTtMzOjlMT1i/mEEoPEPeJ6
Xg01p0pODHlus9omURrVxYqEih0RqOpmjNfljoh3QoaoT0ZrxGtGyydF1WCPxfQavM8JTIfQXHYm
wzNeWhK/XnZqni0KpXQcp0kNmGiX9KvPPnE3V5+i+/aPGEu6aTeMG4ZI7z1y7j+UoFzyyXw/V/CV
2lWmLljtPxKKijIpkb0ZlyyLxmPvsv9xV2bgMXPCyWyGvnA73eomYyFdxLrN3aWFqmY2uwKZFtyy
BWQ1B4o6WOtooSXaLnPKCXkI1kgUhgNznoMUbuGBwKyVfoXMCq1qDDclViWdYSqNms4oFq5dBtvu
5i1+TKTpCekUokG/UztK0O4tUZ1hlW6Krpx1CO/EuEMkXhC6ntP97MyBhJqlt5J8IC+GJGqexMk0
3jkHSdoyzdl7RC0aURpCArNRGKkAB61gR+eVb6PtjjAF6hiU7fPtEo2h9psDJlWGaph1rjEldJ0r
5zQpMXzBJ1dqjPyFT7kEXKkzTJv+sjmNuQOlMqCcW9Gou5JvlsCa1DaaO4A8x1aIdLLE94n+6Em+
x4GvMSL0ToK6Gl5JzkQSjNIhh75LXmoIFUnLewq0YDqQvAFr7cY5XA69//75Czzw5unqqXMvbirV
Rsk7fwhJwf5DCcpLPrm/egrh+kc48YSzhyxvbQkps40mdzRVTlM6dKjZeJAAEb9EusC0aq9XxzYX
OUZFSOYGpvSGLVh+TA7eqaJOUHaxxcRqq4jqNhcLFlzyz/AJMSdOGQuJHFi2Pt8W/5p8ZM4GZvVY
KAKzWUUaUlakhbhUZ2T5HFQLN8qnDC3FRetOUR6IqfgiS89U6WK+z4jJVySiRUCtLuOtrShmvFai
MBGCXFjGJCb7lswUlPsep9NJ3tzFMMhJK0gNcUwsqpKGg7LSMMKDSvIu6BzvsuNbpBnY2Q2VXqir
8fZGK+wix4wriqgKyhXVE0vtC5RcJHJdwS+7PJ9VruAcYsYYtUtlxmJOpcweMenUlW8uUPNkmmab
W9sZmeRRAjNoUte+03ryVU7+FP3A6a+dzIf6FD8//+y1onLUPInrrEkwmKmTVg/KHCNzz2yl63qa
T04MTtxrgSVUx6M73d0n1cavf/VF4p0/pKTgexeYzyX5Ip8c5WM/vrgW0vCOJrpjw03eB4skK/hp
mjsxHcLQRRQVYiFALFU2dIvyBdQtrDQu1ZJb4yKxLnnGtFB3FccLFUpeFiBEy83YB67SLdOaWhaV
QKQ0FtK41SI+ewgTarYkIJTyOVT/jBSUQX0yKjc5l5UZmDL5I0umiu1u3N6fXNGBBaFIglmFI8Di
Mwu9zL7rjoXOYCY/k+BgzXJxaWUQr2BxQBO+WQ4Cza0EZadl3sJMO5tbqbSExLHqjgeMtgDY88mW
/hpzwDsplYayJBqLoKwo2sWTNZZzjAtD+4K+kABkPhmx6i/vhJZIeTWfsKjmXKPmWgqJG3Nq99k8
xopO9USpkHOpUYcaNTs0pKxzW1qZphMyZBnpSU9IpvVXH5lOvy/aV1JfTwR/0TMExINDNrMoVfJH
U+VE1QYnek8315Wk7rd//ZtVUvB9Dc79+xaUFy2GUlDmjr3/tuCTuey2j0Uj0HUo2mQO0FrNpSYy
3Fki+Q+rDIoDLBZoihEx6tZVeWFO9NXb2jpAZw/dAkVZIi0vXJMadUteOQXo5VY32X6qsxzWxSQA
WXLx4GEEW63qW5RRcyrRdtkoH9TPbF4g56niJXURD6ZhLiRyWAaoHqPyxPS8VvJs3VKwix4b6rzm
uA+d1/6vSm+Y3EB2DrOIlb3wkHOOaMozm+TOmxTNq7KGq/l680eOXiEyt+pbkQKv+FdgRMmStMPs
QaLo2vxNhHcWBU6pyHALaVw6CaleuUumRZlXXlRwprxBNZ94vvIvGlLVPPPmnJZNEMo5xYquSoUn
KYcQ1Rkqk0QLyso1x64rlWQwHwdVoPRYUFdRgZJK0uVnP+neTb/foHa2s7YjpIPdq2pjJ1wW4KG/
CDv6izOh6Fgt+KEoNuB9C8qLg52SfF/TmbO/fg4nisd4JV2pxfmtJ4R8PwffqyuYBGW5ew5CYcR2
P2xSrwUEKpPS5I8G5GhUr4s3mgPFBZ24xopzxCIgLxctVAm/whvDZf+Ewkdh6Ynh3boarIAERcUf
bs3yogKwpDTWJb3bnHN9mXJCMFIaaJQGnJwmh2LS76gJQOSSvCMt1CP97kiL78i/o3cu99FxPtIq
JeSFnBg8iSSPt82aHLQyYfULRjB3PJcdi715VotJkZgCRtmaSBS5KYFyyGwiFTQgq0IioWMzjnIH
m//CHGrTGGqJkiOf3NeJ3FWi75znSSGPK/IGrsgdYNZEVjTVAjW72nUuJEfBKkDDKjCX9EZBbaQA
HZO44FKQjonck0olZf54nhlBH8sEMFjS1353Cpz8BeGgRwyRNhFfjrnjIpUO5oni78CVg6fT3DMj
PblwOQzI/NTl1QW6p5/g9zd3ePPlH3DxvXbvY1LwfZHLyclzKyhz0QiFYRi/+4a9LvxpCn7iXRA7
wFFAHvq+m+aZ3Tq56RFX20l/PE24iTPY0IncLcnOGC0VUjcwGRRcmBzqIsqlcCmJSpIpiJKq8nel
S9jG4oah7CSCq4UepWkQk4HZPjLel60lkynOAnX74nHLMuDuzM9p623XyZ4UkrdwoS7A8j2o2xw4
V3c2KW6bU5klLvWEA3l3YHNv6CmdiFReZ8+xijlxPevMUEo7i6AzbTIOqrqQbiEyx0Ec3qCQMIpk
8QJ0fvVCPxfyt4s4t7Axp1sXyLTVql9fbrx6bk5dVx3LPJfd5txi7NsHi3lazWkHq/mG5Xwn/X7x
N3LSMj++K957LJjJP2PuahObOwBk+VztPS3bIZlrW+5gHIQWpzOKDuwbG5zvexh2A8zzKH9knmbH
LoTh8qm7mHp3f7p9mWKrIea3KYeTtkBXF1J6e3tzx8oLeDFOUlrNFSI4Bra96FiRwe2MPWtXvXlb
YKrQE7pCZFMu65RRuGRByXvTlMoiVCUGxK1vRM3DIsiaMmPNJxfuY13Jq1pRSUVdrCVxquEtkntW
Q4JQHJgHCTWos0Zr5IxuwTlHhFUh53mNshKtMbqSj6wkdIqcQK+PhqT4ci/XaNcQ76/Qs8iwANEk
XBDVImrubyKOmBBFqTLznOTr0PS9tLAHtlrFpLKI6FiuD/Ha5jTZcRYWnRLco/WnS+X3hfdJnlu/
vs7FI3mOt+a00sXV87mxC1pmA2NDhMJnO89pPb+h8OQuyrZXCHqyYpRzKhzb2UQZXYWS7Zp2R4hH
2z2lnZPtqo4JgWthSrwdvThGKdNn10LuYMzdcLpungk197zqAwbmRg5Pn6HvrvDrL/+l3DG8l8j5
neaYN4ztq6DMlXzuxQ/w/fMXMKu8wl8Mez+CeiFwZcGktovstdsHk2yZSVD00jWpFEaJ1J6+CPsU
lGUri2mhJj7Sij6wCMYuSuSS8iJm6DGK+DvcKsJQ4/suB+MUdHUhY0QVGHFj6SKXjgu+/IS77PWR
70IlqRGWlEba8pZBmqmXAFW5tixkS+xIgO6y1y8mnjWZx7sK8atZ1Apd5wYBqJaSPsquQDukiAYW
Mq9qsgU0xU3UDufiC1ZaoBYI7YuTraFfvbad0D4G6Cooawn2rsgVDIXyYjuJm6gKrHIFUfa4nlO9
Z3M+twuzq4eWVZ4xn5C450WgTiddLcPvsEgKWuCeUXdw0X1uskrPzi0KVEzznCodM2Xn+sQtp++B
9Ez3yTNE8z0619ZDMmhDWgHRwSoge9qo0ZqepTs3/cdJQU4S0k45uBfP3eEpTd6zT9z98x/LILzk
mN95zrl/l4PyMtGXNMpP/oQ2nJfgr3+E71+8SMoLdn3bs1qVDWqsiaiVhPbR+8CoAmtaijszPd/l
zLsFYcRceReTQhagYxUgZt4x65s1AWLIKZZfixogFxbUlXF+IYMrJFPJ1CbSjoArXesWQl46y23y
y7Y2bWHXTGbR4aTqH1dxzxj9HsoADZD4crME7QpXPF88J1UDJpOmFJC1t175GKj743Xm+Sx+wrLn
iIY+aD77EvjQmt5K8NjZvO+MQz5gEYyNekpBOf8+KTNiMI5zXZx403z2eM7Ks+SUKyfArTlFwEfN
Z/k0xIfn9IyzoCLlMkjHS+fWhSgxoRkD86QNE2JSF0wyJ0DELAw0UGNBkUD6LkSFRuyNmegYgOJk
hlpBKLSGbNUkUdC5UagMcYJ0Xd+5OxY+U3AO/e69D879uxyUtzhlDsr91aVolO9fPLegLK1/vKP9
zRFnbcdEi3cG7SoSdIEO+gXyRlc4LfoQrSpTF1IqK5QFFp1DclDOtxFy2Wyu+sOiG7XLMjgoK75S
AOpWCT5rK1QE42xKFK1s0oLNC3VbhYFnEHPlyewepDTqJJK3loLBKtZsMWs/P1t0JXIuuUpvPHNR
yZi0vKuEpyxYVmV47XvoqgAN5nsNUj3WxeKXpD5QghLt77Hbb1GdOUgptKkvIAfexBcXSPlQUBlx
J7SrFTYu+5tUO6Dk/wEVBwzbvtmPm1N8gHLE7cldn2TL+cwJX32PRltFb40qMWiOccsAbe6AsjuK
DoiYE9pZl1+X7EPcVcWfITZOsPkWVtpzx/l4zIKR1cIzC/GsnVC8pibkm1gG53BzLb4pGweqCsbv
spTunUz+8dF6MCjPN6ugDFzy1Xcdnb65SzHdmRJmqbBDWjFZix/6Oqj/gVO/CuMYLyTJp14XOQlk
CSFwVTJIkZX8DGU7p/266GCVuc+tmFyRZME6oQNrVca5LP45w/zHXBw88HvYem2oTyZGh0LJjbtY
KAJnFSbVY6vflX3vUrfouJuwRqYZgasJfTStx+wTAkUgtgRfmbwTPxPxusA0xza3kFBzwTPvXL1D
ignb7EthTRAk6ECWQEZ+GarPDA/NqT8/H5AuP2FOz83tYl6r+a6+n+DKBF9NQZXJR6i9w6vEM+T8
Sp73+H1KrnoQ5z/WqkM8VXkA82yKZx22huzkadP9/UtzVvzCf//3f7/cmTfEfO7AnVNf9LTWtoOy
095k88yOnZ11AeHKrqIHn3odpMIA06sKUkI1mQEQtFwnfxJaFi6yzMAPScdaa5S7RcHIqlNF2VKo
QMelOXpM+lSJIKy2u3H94WtnMyCzIXGrC0u0hQs5nb4PQCsH1+dgQjdBs+2Y+v4VTWShRs6ZptgI
SPnYxArIXGzTWdmzdk7JlpaYMl+mGpBKzmC+ypAojFIWd4hUhknjbK4xqy3KQpKVyY8UTdRcMlRz
nOY2as8zIsaVrwkUidzXhXEvmdOSy4q/XFYKJluhhUwy5M4rGKkrH6krTKoNpSdKPtklv/KlZl+r
WrMXNehuCTS3IDufqGkuTigxCKPFb7QH8JvyUoji3TQMIYyjfNBztMa7XITyrgVmeCjRt0VfAMbm
kUG+GISW1WxIE32DeesWRjRaNEDzIAtRKr54cUJOAqnzmwZmjAhb+eXIUw4xaQjO7Duh2tbm0upl
QE4By/wuKqN7AFy3ESo7JW+ll19bWVMk+LFAWs54z3LrF68xRmKESG/nAJ23wuU2HsutfJHYXCHl
eHzAjOOh7A6efYtjUimZKIkqozCNj3RQl/j9lNiVQKuaZURz8lNHP1RpZIGwU46hrGrbKrP2C8pm
EZDdohioUl5s5ggemlN8Sch+5Jy6Yj6hPukWicI8N0WAlvktEHCirqwfZRmAtZgGUou0WFRUUh/a
Mi3yyy43DQArblUJnTVRkDeXIbJAGW5BptBbSXHuC8BOKjE4h3l+aXBuVMYjgnLRITdJ4mYKyOeC
svbXE49dLRgpnd+ipA0VFWXtKlxUFp2mWS3pCshURrRt3CfbxtjV2OXOxC6XpkabzG3Kwp2/QC2l
8nnbCWXmftmk800c+3K7nPeRuZvRotFrhWJcfL9lUqt+XYCCmvDxZ1j+HkpFStpWF9vgSjedsv9m
RWqdvitfiwOoLWtlywlmxaq6Zaj15hjtV3OVX0FhVKg5zS24h3r4Lemb8oTsfs45LeZ1efIvdOS4
9T0r3O8ANmkpUFoCFklPSDunYgeVvuvgS0e9rGdPeUw7XvrbgBi3HVCeYjDyLxycQQWDfsi0xidP
n9LpdHBPh2crnbPZhkILzC8JylxmfRh6mK+eJZ3ydVJfbAdlp7acA0Y3N1A9cgzKqO3lD4aKL4xP
5q1sDr41t3yoFixkvtHVhQU1hwwLrjEHZv+SCzwiGD9qEb4Kv/yy1yuD9JldzVbg9mc4zq0kmC9E
IslhLcKl4vHxGHVFoUWW5EFCtXqytN1QQsXZFzueeBdzC4cibxDndzgXlKEOzDGpueJat+d1NWdv
ck7h1U6+sNJNu7LQp84tLAL01gkUloHcw/mcSKnZB9zg1qNeFuP7s1ptZx4E1XZuGZwLzhnGk7u8
vHTd/srBk0s33lwvQeA7FZx/cSqj1CqXhkTsfYHffOti8cgq0Rfpi2VQ5ot3ajYkyJarvVDVFKsq
PS0m4EWJxjfiUoXhsvVjhYzrRF6/8k+uuEZ8VAJu0WLkoW0rvOkT4laa395DxVEWae0yw+0zRynL
JWBlyrMVjJde0to8WQ3Y0VoOycIu1A6i5oimSOZqx55FGDAeLrAFDrHHnjw22nIWxkRx5xM9MnBf
B2E0SVyR2Csusb1X7ruYWkItikSSHK6Y17c6p1uvhRuUyGpebU4iBQ2R1oDctgqsyw0k6grt5wV1
BYmWyP4gbuWol/scFvdDGfgxKusLtTfEasDoD2NncNH7YeaUYKHWiDrnz549c84a+W5Zhr4LMrpf
PDCXGdHSJe478764pfXKFX2lJI5mogOcuSFNFZS5sos53yCaVS0UiVK4rLyIgVmCcLqdNaxgpjVp
0e4WXGNVVGC8cuGOhl3pgYCvEJDti/i2F+2rLGp0q5PF6tsLRVCOi9gVBR9uiZKhMOrJ/Kslx6BE
Z+DN6MhnT2M1GXNWjQaaiAo55WXctK7P1MEDMy1RJHCx0CmvvC+GzaAcaRRYVfKt1BPFXP7S8wov
O/FiwUtD5qNXAdrmLKSgmZFzSMcCNWnrloU1VWs0mVsL3AtJ4eY1ggqzWTKnEkOUxAO6Mjg7Cc5g
HIrRHIvgfEHP/uzpJxKcKd7IhyyD87uQDPylA3OlwGB3KO5i/eU338qEfH75ib85XouP8sH3/o7L
bEV2AZZAME6ZjcktKDut3FOUrEH5YNpj5ZWr4OxycE6tf9Cq+TBxyFi3YKpKb2NBQeUIVxQTQI2i
HgjI7pcOyA/9/e12c4luyYVmdZFK4RmNdWEFZhS0dYxyccHC58F2J6OVB0d1QGp0aAgrqQWK5gRx
xxN1zKXxlBQaubrDzODW1XxljqAMOFtStXMB+V2Z00fsjsDkN/q7DR10mi/btVTyumJey2Rh0i27
BXVRFRTZrmqVIId8wuMvUdgKzhBrQdFaKObgHKYp0A7cXcoH6HDE2RV9BBNY/KWDc/+OfEHSFzkG
ZbbuvAtBXLVBu5Vyn4NuDkGCcrDu1IxipVmmlNua65txixKUMz+83YstmxUl+VwRkJd65IUO2Rbs
IiMPSXVRf7EeGZDfRf8SOIegiwVaDqM2StQMFUrOatRo8R71ylWw9pW5j6Lf0Xwaoid07MpR+q8p
0kaXA3PujyfIOHqdZDfAuu1XSVNtVfPBhvIizi0ufJPfp3ldBmjIToa4nl87+SIFZaj8pEPcAZXS
UFfr1pNUMhcWJYF2Op7FCd3qiKBypBb4vgrOLreS5OCtUiFkKd3h6tLN90cJzre3t8BpwMJs370r
So3ulw7KpQKD20G5wyVMxyP0l5feTSex7hRDIhek1byTjsbWKBTUKU7LozUgm2rioEEZi4BcJPZy
QcFFnQyCyjUMKm9lKKmMhd/s+Yx8kcjbSvy4M4m0d3U8+L7B1an+zC64pQKgLICwYJruLoNyWWwS
FRnZxaxIwlkLr1weH/ME8RoK0yK9bwfbVp6FLA6qk/CGwiIX0mwnR9+3ed1875FXOqvgqOfXny9u
gY3EYqHOsSq+gh5JGcoa1NSHOgXiMkvofTrjdLFRGSOtw8GdTicX2Pr/Upu83tzeuQu6n6/fFaXG
z46Yt5J93BLqe+y4jzxcTROc9hQT50kdwoKa2XQddCMF5Y5LrAP24FWnjKmjMKgpTSyvroKyJPou
sJRKRRqjLL1e0Bfawy0WjmAlkI9cY2E65B+iLd4zhPw6SKsELOlnPOPwhStFR7LnqApusuIBu9SP
ETjxJ252s3QwcbFEPCaKksQuKmOSd0nsP1g2ynVrGVyn5dZQlM7nRrhnuGRwH+jcYiGAiNTVgt4o
d07BnU38ZuoHq6YAxc6yCvJp7xFTfWBC5VWOThX1gpA1ycFpSbV6wRikpQ3OOEozwj3j7L6PGm3p
hBI/x7uQDPzZA/O5ZB+KODyIVtl3vYdx9K4ffD/NXeBmmtxfJhoSWbIvNfuMJkSRU84UhaBkKxiJ
/sl6rd4YB8vGJxTlEn2R/BAGt3aE6xS9YUxybCX6XG1AhB/ConVnuOYSrFghVlUO413dbaPsvrII
zCuu2cdqMtudFOb8Lra8wgymsCxYKasvY//BIXbHxkJ1URYHRaOdyINiUhvUAeclKPmDm9uHqavs
8Ic17bGV+C0dFItjWhZXVcfaEgjlNwwz5ImVgBj9P8DShLo45yATKmT58XhkbgNnnvF5Cp5AYDge
pQClu7jcVGr8Enzzz01lgG0R5PY3337HWwjhlcfbG87M+euZW32Bx2n2UjQiPcKwnzG1J4qNUcUv
ORWPgCHgoojAknoXZVDOnLIZ3kcNK9Sm57CNpPrKFD5pNGGFoha0xfu2tf0p9MbW9ncRsNLG044V
llrassAgJ5O0YN0XO5WoiinN6Ae37LdY0xT75KUBtQIDFvmDdSEQVM1woSqv/uCC8utQV3Dm9xVX
DCnxu3lyWwbr7fdRmAGvjKzLmUmdw/UxQfC82oTKtopu0x7ccXUgF6A8ffrEzbuD86d7eR2OT/Hb
WsStDy4wb/LKN7d3Kdk3Hu89smunlOB2XWCdMohmWRJ9FKl3aA1PIXYbiYoLjCY1mVM+G5TXl/2K
Z8RURVZ6zhq3ebZgJFcpnf9Sf6hj9VmhpnGKu3F9XIqFm3+GmmMuiksg00mpTLowEyqrMKtejADu
nB69z2gZyk4iS5Oh9NnwfLHNhzi3m/PrHq5ehDKBUMjf3LnHuocLZaCE8gWNhC59XcwywJluU0p7
PHc+sUwzSjCmOxD5PssQHChIcxeUOxa/h9n987/+/hflm38WKmOLV3ZWbj3f3cL98x+F71FdJEBs
1NhFnTB49qIY2Oyer+lh0rnamyENpBJpc4iLFAYkOVwdlLHilqOFZ2ndGU3tYxWfNwczoy7WMqm6
kAA/poB8lp/E7GVZcsnoon3oxvNrfjlKq1z0Y5iNcpjFghTYJD95RuPCj8In053YnRpW3WM2KKos
5dqoRnMFR/qxzu+mtn2DiPWQu8LiIkHozgTkhHkRt49qbd6SnE4j5RBRs/qCmoxS26yDUBvA3dTB
OhGzczsF5IvLS3dzfR146d/efgu3VSqk+mg/G9/8swTmLV6Zb3O59d08Am8c5vEEHZPxIajo3KMU
kkiHY88uYXQik0685hSm7YG0zRPWhSPOVQF5gZSZtsCN5ppqal/0Yqu0q6jVfFWHkUrW82El997Y
Asa1EZJRAlKx5xMHD7DJMdpai8k8KSZRrxoM1owVK445S7YsWYe+RNm46EieEovbcjj/iCQffIRz
69yZxG9ZdITnWzttIGU9h6fXgG02OznjJT45zj9G4kK5bkxV2pZehOyiN89OLfKUrNYnId6JPxMF
iIJvdr9Q8cnPQWVs8spMYfTzBO548tz4ywujzOV9pj/1anLPgTho0Nxpbz6IibpD2RzVlaZDbtVY
s0TKW000I++4kZ1/2HDoJVzjxxiUtwLW2e0qbD+29mfY9vstm5P2lhzss5wRlrJGO/EmCZxx1LA1
z5X6YmHk9LGfdB+krhbHa7UOYNVCa+OxWMw+FuRH/dcgM11QktaYzuuFFZL8lo1FQ26qwAi6o/vG
04hd17lTmOnb0LtnlxeJb/7108tfhG9+q1+sJYVBZ51q4TGvDPd3fuo6caUafKedR2bs0XsKymHQ
wKyFI9Gm0zpMcJUeXUMKxvQz88nFz6LIKE1rCgMiLHv1LYNx2VljaVFZISj48BNAP/lrsPFz1UUD
cquqZXPQ1HsuXeL9evCDW6OyZKFayNuWiTxftPgCVzdK3Urkfsz01CvPsdXduYXPs7Uly91RzCZ2
jt7azpq9Oi4gQla1SYNWbvQaG/Ty5poueKe33V26ANwx6NWf4Y5iwb08hiIM3X+vTWLhSHusk/du
nBFG+gZMXQhTAJj7nmDi3f3sDnt8Ru/t8uoCv3NdeEq4+stvvt1C/m8VNb9VxMxROZ5dnj19AtEx
7tnggVse+93O4+kIyIGZEE+Qqr7YkgmUttAy2Z01TrWu1KCURSwUka4jeOFKxJwsOyFSGiV9sV8H
ZehdYc+ZtavbQfkMKoa2YF+OrKqE0Oq4xaKCMx06oDKkT22KIBeBVA5wsMEjQ1GteQYtt6D8BtDz
uuBonfhdqHJysjij5VRgsux9COvTAxaGjHZuRrPViFQGWvICrOGDqDSEy+KH7g8HN9/duXnYuRff
fut2nXf3pzGBy8KJ7r2lMjYpDKYtnnXgr+9PYjbj59kHRSvsFMdNS3vP201pFcR8Mpucg1b1AVQV
eiBtgtS6EzaoDAnaUa2x4pSXQTlVkXU1qlpK4Zypf9pi/WkLF5bB+Qz3uGy1pC2akkyxDq7d8jYs
dkDx97E1lSt8GVpQflvURjm3axklrBz5cnAuqGZYYnRYv0rRHRywaiMP0YsJMDuJ2v3c0TcEcdrv
egoB4wlPw95d0sM++/SZGy+frSiNt/09eOvJv5LCSD4Yn31GEXeGCbnVsRwxYZjZeIZWCPPMPW01
evAoJdchdgsR683ssVxU9+1dRNFL/2TpTgG7yikuu8OVQbnLxipQFhR4t9BttsX62gt3UU0GuHBh
i1DJY+HDULCOXNSDOeGH2ZoiVx+4mtIo9dDiaFZ2FIkKC1/4c7R5/unBuUr84iLxi7lbSnowrDkp
3PhdpsGsJWu+D1PH77pdFtMlmjAG63ZDcJClcmIXS2BQfDTka0jB+Xh3T4EB/DyewuA9TOOUzI7Y
ZK18O28zEdi95QlaURh390fA/cEP8+hHOiqCfrzrPZ2qANGaaXL3EULJHnZZCseOYGBqi0hjwKH0
vYCElKFM+C29lQv96lZQLhEUfsza1Z8ROT/QQDTLrHxlnB8d/DC2vHd+g6LIjn+wkTxcmdmXQbnl
Dd7QPG/RfSWSPoecF6xI9RiEc17iSTKd8hdZoWEB2PZq0mfbSx5QpXR6pwZ1jkzT6eRwg9IoqNq3
lgj0bzwLgFgVkvBZRkquw+wuhgEOXSfSOOwGQK3y60DOW1p2G8SEHHsQvbJL7aGkZxvGfmyw1558
sW8b5Pbzy2aaEGkLK7PGZWugdVDGnBxaalehLdQ3G5wjKt2uAKvNgrAuNFGaotAno9vqTr1uhOvW
TWCrYNyC8lvLLVTdvXFxgsTcXbtqeOty0dAOi270+TrvkmHhrY5lS7iyFZz4pVj3G4oJslPvuo49
0ygoaW9O+m5yg46nhwN8QgCTPwT7+sTPZi50b+W78cYR8zLh982338HOP4EXP3wNnpDyeDyyRoVV
3mzh6T0bxYgszmm5tfRtE6QsgTghZoBD7smXEnqHmluG+POiDVRM9pVG9+sO1guzmmWL+LZQ3zIf
iQW3C5vm85uOZX79M6w6bxel81u/2+K2247o58ktbCDnVdFo8Z0Qw/6C2khNTAovFqiVP4KS02PM
jdep8b8lBTt9jHIizDejoriJXv6SLsdpxrvjKbnQve1E4BvlmEt5nDPjex6fPL2EaTrI2QelI7nz
8zwxrSy8sguB/ZVF6E8nK+1GkhuqmneFGNgbt+wOxjMfEFIDTek8gkWCL5mguw2rzioox24Kq6Ds
WlD+uThnt/AArlpZLbnK+DhXyLLS3XUFBNhudmmSU5X0tnn+BXMLhpSLSLr0XbbwYnGzqCQy5kEq
SU2OF+2XTY4HLMcTE3+W5WnHG9TiJNqtB3UntFCsQVr37/SbiYtPpgmOM8DN7a0Unlx3O0bNYnR0
7jO+c1RGrPDjs0mJOJ7ffOeYSJfqPtamzIHLbdQECArfAzYpEhrDnOOgMJ/JhSV7C9IHKC07CxMi
MNWFJv2ceiigWyovOigSfVtBuSV/fpZFu0lt4BohLws/6rZEBV9c34+VL3ac30W1ZpvnX4S+eojW
wFJrHhP1Q2EutsOiRZhRHIdyt6x9PEHzTC7FDaE1IfUIxUiXdBSeu0hpiKKu79gaAkLfyXu82g3A
lCxTsww6izhXUbjvGpWxqVmmzwhSgt33hJJnzwFZfCe8lyoslsYF86gAae9jHBKmsmmWxF2k7tZQ
F5BAks+JKqNIFCb6wiZiq/vIWn3RgvK7xEfmAL2hHT9nnrMVzB/qPu7aPL+ztMZKIlcro8Elc+hI
YuSkX3wGmgNtLkgSyZxT52awfoYASe8cHeloO48sn0PtmIF96NzzH79LiUCKc2+tIvCNd+aN8rhf
/+oLeEH4+AKDv/n+e5j2e0LKs+9AOgx3sYgk2jDSjmJHh8e6j3BST7ySmU++tOKRy+qCdAG5nfjl
oqnqXhtvwi77Kle8cpEUWkrikml3W6y/zDjTtRQw9Xor/l14/y54ymU/WNxK7LU5/gXn1/hgl6Vv
sTIwdT+flZaQa2kpZq3FrDqQSyOwrgrEWA3o2I9IL0gXSNd3IJWC7o5izT2dso98TY87eedPwYUR
WMkbcOy6fvaDn/3xPkz+EHocwxeff4L//N+/XFWdajx/M/K57k0G5RItP6ddR7i/B7y7pb1A8IET
fgG7XddLhR+o4b02U/WgfddAWwJp2TUesh8GrAtHrHikaAtVJvp2C7/daOkY+8ettr/nttZtwf7i
yMptI2VY3V8/Bjaf+xg6pY1fGjmfVcTB9k+J/Ypnbox65hI1a0tJOTsHMB00MxVyIlAZXa4S5DZJ
XhqmCLU9jRNOva8Sgas39wZRM7zJg72Flr/95hu4ILQ8apLPs2B5wtCbS9zgZhy8V5SLXMnHCT0r
r6bHXNL9l3Qs7doV13Ap3hjRyKi28ozl1mVQFp/dUhp3ZlG3oPyOo+d3cLfYxhtAzsXuJyby+Lr0
SondayYXUbMzPw3HXhqCmNVDAwUx35VomSb8luKGXSMhaXb4JMTsCD3TNTL6Du7IvkYBw4mw5EgR
fJqnifvczc77sOu6cHd3F7749Bl++8Pzt4aauzf5BV+iZXpxf8/X+70IBGk/Ijplz/wyN1R11k9P
zMsTr3ywRqhmVBQtPKHill3WLu7tWvlpqEzS64apuGw//2CLoLZw3w109SYR7Zt+vTbeIHIubmw7
MW9wzFAGejS0jEmaE6BAy0V/SDPDglgRqGqMbKaVZHXKQ4udj3hrsMB3x6b6w/BWUTO8qQO8hZav
x8mH+ztm1rmJqkjixOze+9inL2ZVI6dsPfnElEh4ZPqcV1hzyvGSAjSuu5CsKAzt4Zaap/plUG7F
Ix8com5z+P7NYerIi0tXOi23np1Ll0llxjBSHD6ZGx2j5qO6z4G5z+ECMQuCvlH+mdAzO9IBNy5x
FKgcoWZ3b252J8+vjTg6vnhgOw3524cZws18fKuo+aci5gfRMp6O3nEpDV3GcfTgxfi+z00wQQO0
9PBjlAyxYieaFMW2UEJXQGwZVRvf7xfBeNkyqEudLFYluNCC8oeDqKEh4vceOcMWYl5a1GV0mrTq
hascFtwyGJ8clRqgQd70yuLODNlO1oKpPB6UgFYzJE9IeQqhYxcfQd6s58W3iprhTRzULbT8/PaW
I213Pwff9303Ho+sD1QFBkp7qB2FyL0LuKcPbok99VOOXDJLBwU5O3dV3HdZWHxGPwylQpRT3rmq
cap0qFh4756VxbUF3UYbvzByhmxgtPRyDublnFFz5puFa6bnnjCiZmQ/ZlFl3JWomX6+oRe8MY45
KTWYl6ZYxIj5nmLUUV8PThQxRghhojg2HafpZ0HNr135V1b5cbsoriH/HjsId7dwPN27fp5hHHbQ
dx2M0yTIGUPwjoXN6k8RG5xqMQkFa5RuxWDCcZT2UVbnXorJ13QFlG5xRdsgMblJrYXKdlCuBeU2
2njnkHPVK7KuzEyyVpSiMI18XXYYtKo/oTzEfH+n11JwNtOLSRBHC+Rgt+lvTAGQAhTdT49BLvhD
kfJyhSBfOkHTdFIIAWn3D4EbTrKejn1/uELQbbTbKtvp/axURumJwX4Y0Wv5svP+x+cv4HBx6EYK
xBIkw+w54ccURmfaZYgdizEZ1xstwd7KUNEXMQnorBTbWQm2Vf7VKHlRRLJoSxR72ZS9ydzZ9jVt
tNHGL0ZrFNaCNbtRhMIFb1VRGi57ZkRLUEn25e44isDp78yu5LI1QZildVLmLQlF7H2HcwjSjbIf
Bnc3z+6zJ5fu7v6IkT1gD42fSmW8dmCmP1wpGbiHHzdTZd3yaZo9DEPmljvf0Uft6VpNirAut8ao
rEi6ZOORTbOsygzIFX7ZynPJLceu1sllzGXzmvMKjBaU22jjHQ3OG7+EMz1aoyqjsPyESIEYf2xB
N6T7tfN6qH6nqo1ZNc7WxsyrvjnMbOcsPYJFobEXTwnAw25wv/r8szdmpu/fwMFLJy7eXUzjBL7v
OYXJhTv0GbgUFkRDzLQCF5lE2oG1zNJCCnMzVCjpCivRTtSGcMiYmqbCwlMZSv/dShKHLdnXRhvv
d7CO/aJqC1gsvLehtgw1K9jBYkfcnSdzM6hv605e2tlpVbLQrWD0KBuvUfxif33Uhg2eDY4CIoyn
UdyQtjw0fu7A7CJsj7e/+PSZmBTBbgdssoz0ASZOX3JvEg7OdIv5GvqwomWWg0e7AfvwZo6fuOQc
oI2DjqXbUCguMPu1dqVxDdTXCwOVFpTbaON9Qc1Y94gsQJZg42UDhLhLLmhNKOsaNJ9l/uyoDZ53
kE2RhhyPUIvS2JaY4wsBS+B8Fbf1ENeNAF2YpVH34Pdw9ANcdzvgXBvn3NL7f01zo1dO/m0l/W6u
kQLxvdtTCD7qMYROFN3ACNnLfxSUo7E5oLrIZdmcntVAk39yO57FNFgLkW/BG8/Ydyb1RdIpF52S
jVfGTZ6qjTbaeCeDc5UMXPzOW9m1tSGTOFAqOBj4zZIAFJEB2z5IXIkduWPlYLQWHj2o3TC97hjd
KLmLNzczQdAg7dlKFDEQ0gx7ZmbnCW4mdE8un8BdmMsWVDJeNwn4yhzzVtJvHBHm6d7PzomDnEB/
KcHGGDQN7ZonhvlieEhyt+h5UbnGoav8MBbNVCO/DEt/5VXX401v5cYrt9HGuz0W4AmWPxVLGVKd
WN0X0GV3udg7Mif/UhJQeGYt/ZYiFmCeeVa+Gax6UPnm6D7HIjO6iIzjOB6R0DMeKNp8/d0PWL7B
100Cwk94Tro+PPvE96d7CN5302mmAB3E05RRsbRwEa4YpYBEvVO50s9fUuC+KCr7rugVr+j1yotU
+ZmGuSgqqYL0AkFH0/u6kKRJ49po470Nz3HRWm/dtTm+q3XNhbY5us+Z85z6YkTXuRu+UHy44ftM
23wjFYKsfw7I+uZ7YOc68dGg1wE4UTQZKaBMFNkJSfs5TNO8IxR9eXUZ2GH/6uoK/+2PX6UTxOto
ml+VYz6b9Lu+PzKRDCiEMqF+L+2jxHvZJW0xsuUnG5wKv6x9tyAl/pR8L1QWyRL0bAeSDZe4aHrv
zlMYbbTRxvtEacSlWyrj1tWemCp8oxCgc7FeQinQwYrQLLYkSwimSyOlqnQpYjY/M545mqBJIpCp
WsulSRZtt6uSgDxiDu516IzudQ5S0e9Kgx8T4hSIdxcHRaqz6wKwMJt5ZZAEn1eVhZDskLuNqLl9
pCuiVC79DGXvvkRfQELKUBaV+HwN1uNto/NuozDaaOM9pzQAzkWnyiAfjcZQGsJQtknlTDInxSdW
SQjSeqrw4zA6Iz4H7Pl8QTM46lg6N80Y+t4dDgd3pLAz7Q7u108vk3TudeiM1wrMyw4lA8XdQKF5
N/Rsht9xhYzDIGb4LDeht67dSbI8xdpERU+MimfWn3MRycGtueVVm6gFgi4LSRqF0UYb7zdm3iw8
2QTW2iky+zLXQbosIIn0R+KYKdhyopArAEXbLDpmpMd4CthmohRd6oRWCaIHdsNuQJgmdxRlhEcK
iq4Ps/vnf/29e93Y82gqo5R9cNaR4Tr3v+I+WNPx6PppAhhn+n/izyABkoC0KTFMcqK3NajmMmqW
rwwAmcLA1NEahg0Kw2Qx0OG6y3HBfwNsM1VttNHG+01p4EYXdfTWw5UL9NYSOqVU+8IKuLfdt9Gn
oP3/IMYg6K00m4El064q80WOa1KXwTHZz3OAvh9YIQIzN2598Rxuv/7KffnNtxWd8dYQc1RjRBqD
K/3G2xvR8o3j7H0PbILvx5nVJdg56enn4odTfXJMAmrlXnKRs4soMXIzRU0UFjRGVeH3EFp2KeHX
KIw22vgQg/R2RSDgEjUXPQCzERJUCcPZZVWGdNIW1CxUhlEbjKSlmUmsBuSWVxDEsYNLujkbyOqC
rkP2au6fPnP7Tz+v6IzXPgs99rG//evfSHNVNiya727B3Vz7AIMPvet6D1xI3tNR6Algi4A7md4L
XZHd4+jCagxTX8AT+rBXxX3qv+zEgzk2WlVKA3Oi0EEyLFrQGMn8BBqF0UYbH9RIHmQmdI6BV/ws
hHqAFGytPyCIQoMAIxtamE9zutxYZxO6RnaduwZTa4hKI/YK5B6BIdzRNT//qC52bgQMI4HQaecJ
PE/zjPM8P/nsM7wDH57ijIScX0ud8Sgq4xyNgdYek3uTMLan+yHQCSRgbhvvo2eFJgI7sIQdasYz
Zkp7q8gZorBb0HZdYqnllwCx7Dq1sHetLVQbbXxcYXmjohesuM1iBaSybYlFIqHtzLohVgX2uZJY
C95AK5D7pAQzVVmMX85pbYYpzrRGgnkPZm2ZziBM3Y8nV9IZcbyKOuNRVEZZVMI/Rhrj0oO/ByGS
PfMswdzkKBzzGy+q+mCndp5YNkzlJN/C9D737YOUINSEofBBsDIqWpZe+4aW22jjQyYxVib6ZUsq
rGznXG1oVPwconFRpcLIlMYEkdZwOOfbRmVg7NytdAZHffRe6AxPWLFnevriIHTGeHOdNCWvos54
FGL+27/9W7kuiezDs0+gu7gQwyIYdmLr7/n1tJZcfZCxrl/P2kIl1hGSAdFQSN/kTMYnITC0Hc98
WGqWoTI2WSLmFozbaOMjRM1Z3yxoNvnm4CIZKMk9FRD0uDA+UlsIMO2zxSLe1Qt6hs7HXTvFYWYH
mCVg0cOeICpnBm+OR2ETnl3sxbLiHPvwkxGzW8jkGLSP/MHZaUmM6OnmPHX0JjvMibmeZdeClEUu
x52wISb1RBIXfZchdyI5QO50vYPU8TplT5MRvgX4Srfc0HIbbXzcqLkMWGa0gUWD1qJSMHZDgQox
q91nrCI0xAzAXPVsPhmTcdjazJUv6NgNFC+GAadpCiOdBi7opaf7WwLSHQslSvbhUcj5pYh5i1/m
6pbdeBJ5CJ8ZxtOJrUIoSirtwsV/hpY9WlsnTdBly085O6FW5WQ+J57J7KyWEbcv3eNw5RrXyq3b
aKOh5vRzVGRFEw1xodOKYEjADmJlYIGYAYp4JNV/INYSUWSAsZKZw5xK5wQ5c0PTERmoTnDoOwGI
fd/DUjYX2YefHJgjYR1fmP8Q/0H+w8eZk4BBLPDERVqtPRlBi9YvONRknemYnW0FQD+gBGKASvbG
24cuIWNQ7wtXS+Eqn2XMXa7dQqzcAnQbbXwEqNkaECU6E3IdA0SA6OokoM/xJgZoWHru9GqSiX31
WDCLYbTXCig7da58nrmGg+UO5kvPorqrX//5ygr0jQTmGOHjC/Mf2l09pT8MKSCDMOIBJm3TBVL5
Zx+ePwCYrM3JmUd5G71dnp1KDrosIMEiKJsXat2NZNXLr4022vjIwvTiNkSuOeWioC46wRSge0x8
cuKY1ZY4WRNzLAKNZVVPURB+WXfzKAoN4TfmkLwzWL0WDfRfZTzaj5lfmCP/fNi770wwvfMDdHSG
uKcA7VU5oog2cOWiQn0EV5mKmGSlV2MQzGhZUbUg5tghwORydjB1y7BO+m2g5Oa13EYbH0tATlRy
gaBjYIC8y5agasGYwxUW9Q+YAGFsFG3IWC5epHQgXvISnE0OzNSIl+AszhnCE3g7GcwUAp9dDO7L
r78SG7uKhVFPe3xtxLzMIHLkv/3mK+GXR7YpwuB6aYCligx2+Oc3rgXjfHFetwP2IbFwmcuVe70G
6hik9fGZxoBiG7IqvY67GsAz25w22mjj4wjSULWgqlznwEoBUyxBldkWTTY0Fpl4IcYnBZASt6zR
BwscLK7J64AqP/gPcNuprvPcXtvtcBZ1Bnd2im/wVdzmuoc/6Vq/fCR4vus7GFFd5djHY2aTJae1
5KDcTOyftUPr3ycKCxB9cnSMO6SqwNjxGqVsOykxXC6/NpF31i67tRF+SwC20cbHNhYdszdCgHXO
lvvMZa5ovspaZIdJw2zVgtnbGSDqmu3nqGmGmaIzizFYmTErjpVGrsh3duznNk5uGAb0n37xym5z
DyLmc/rlo+8TvzwRZveguhGhMoLql1Fph6RlRjsridICcwVOTAqi9u9K7aGgaLaYVBhQcsuw6Gfe
gnIbbXyEZMZWEnAZD7LRUaJFa/TsXKYuUmNn1Iq/hKqjftkSfxybhJNQpkDzbYoThWfm9/Pd8xdS
Jf35p5+8Es/8KI459vZjf4zp9sbtCR/f2oEQbtkhl8OA15JpeaPi0SyJP+vFZ0lALBJ8UUrnYraz
aK5YBmNL7PnzNEZL+7XRRhuJc9ZuUCWlgWUsweWuu3OrApRFbgwjYORcWPDM3rLqzHOQB4HOoktj
GmHoOmEVro8neDoM8OLrr/BLnGug/xKe+VGVfxzpOeJz5D++eO7G21uCuiqTYyUfSjcnBOWkOQAj
RKSrBwGSzCTL52INesH5xGQfrugKn+mK1C23oeM22mhjsWHGc7g6cs8e1iqNZCVc7NA12VcEa9M9
a94MtPpYArZ0z/ZScDcF7XgV03MRNC59M16bylgm/r785jsx5njKzVfpjAC+c3xmsJbZit/lFKCl
kCqTgyI457YvUU+Yk3z6O4wHC2rNMlrPPtjkkYsA3YBzG2189HRGcXvdfirtvtGvQaAqwWDR3FkB
pe7oUwIRNFYx7g2aAfRoQgimd+9PJwGuTPsy/Rvf02MTgI82yo8RH83+LZiQGukMweI9zy1jsRBw
29nEMpYeMXMzpRYwn5HQQ8EvgzlEuVz/Hg939MZYx+KmxmijjRanV8Um1X3lxS/EBKnKOAZtyHSG
7vZFAgyiQAOLaQJOUYvdWD8tdR1enN2E9uWsINd/8Pv4iz//M3mPL6sAPKvKWCoy+PLFp8/8j9e3
cOHBS4/vYMS491LBx+o5ess9avcR8cmQhofRGD/7YOSLtpgqevpB8sZYnL3KQpPkjVGj5xaY22jj
o6UzwEJX1R8jbqkh9QA0Zzm+fzalRuGXAdEngxUYsdv2SI/m64n1DvTUyW7P9nNAVXYwRA2994RX
Aw4UkefTCY/39/irP/mV+/Swc89vbh5lnH8WMW8pMrji79AdgBsPBuEspBu2lkZLVtJJWXZEvbhA
weo6t9g+QFXdZ7dj9xEoPDEgBuTzRSVttNHGR09nuLrYJO20S57ZFYUnmW+GrLYoYlKRG/MpvoHS
tUbZstYh9RllLyHlmSmadx0w/cv1H69SAfhSVUaE3gzFWfqx7zp3PR4dUHBmbyZv5tTBfPas2CR9
eFVagH24RTbUVBhWkVPY9QkdItsCzBnVahr0BNmicRtttLEGzwvgVhecaGFgeTsBSZcMjxLAtMQf
Ch0Lxi9HV00BpRLDOMapXo7ws+gzWELsh8Fddt59+eNz9+N1XQP4kDLjpRzz7/6rlmKztygrMo7z
fVJksFbE/oAGaOGUMWc+jSDXQIt1QHZLaRyUusKVQxSY13Xjl9too41HAGiAbWrTYkmslUg79Kp+
YunjjDFgoxkYoeqiQX9WcYIIJrS1Sd95QaPhdHJcAfiq4+WB2aRyDMVLRYbLcF1lcqi8NLe1QrS2
T+p3UUhUyoAMi+4j6GFVRllQFevbbbTRRhtbUBnqQFzKbNMDChSd7R4MYxaIGaqLAEDdwfuoRBP0
jRi9gmIXbykrZAB7fV+XZsfxkDLjUaoMlsoxDL/c75zf7VxHAXpg609U72l+c7PJ6+ydgsH0aLsH
UKgtoJCrFBlQPWuhW7hCJeoiyeMgl2Fv7l3aaKONFqVx++4illjQxhI0ZmoDDFyii5dCKodJXudF
iGEIPQhQ5co/l5QZnJfj/Fwcj/FmfmRgrsXRmu/j84rX5t0agYVbkTdtyNkc4vKHrgpGatMRfRyk
6hy3YVgEreFqG2208QB/sYXVsAB0RQIwJwJhWbYNZuUJG79LzpcS40IWPajBnDYKScRxmCa36zop
zV5K5h4am8k/Q7ur+4+MzE8nN7KOZJ7pbDCY8iQKJpxRGhH5QtomYO2bDGWARowHDB+w80z3tcRf
G2208SoRe1ELkdEyJrEBJL450qrmJR8LSbxyyA4UIKfybgWl6DQgo97DPMccAnA+jvNyxxez+/zz
v3Cf/dkMv/uv//TS4OVf5eMxV7JjY2gKyh139HNcNa7i6hx3I98cSfbYFNEMPrRBYl2FAyvj+3Tg
4DGouCX+2mijjQVUXhoarZUZZZDGhIqTNw9E5KwoGRP3jBE1e82p2WvZv6JME60CP6OTTk+Cgu+u
H21m9OjAzOT1dLwXzsTvBhAag/XUSb4tjhkWbLEwD0E7W2Fs7bJoD1VV5BhdUZdfR+0ybh//Ntpo
o40zmG1V97AI1AjpNi51zksPeKw7JqGLPK7EuWCIml+IGQXOw3Elit/tRMv8/PbxfhmbgXkrW/jp
kyduuLyCE3/GrnNs1hFMVG3FJS4qM6AwpzZVxuqyRMcF3ZG4ZEyFJm200UYbrxqTlwG6/BEX1Crk
PNcixwW5f2C5i9fy68InKL+6tGiFnkEsdzXZ7UQ4wQIKFlK8dmDeqvq7pc8xXFzI7XGauFZEomaS
aZvRkJZG5jcK6bOU7EQ8W0F1FiqDM26e+aAF6TbaaOPRvAaugvRmDIE6YEMKwi7ahBZoGss4ZYk/
fSomXMqMwjROStwW47Eucw9SGWX28Iar/E6heiIQal4XP2LKyy0c6ja0hZtKi+Jg4stpi8ZptNFG
GznKwMtQNBRAMResYUGnYtrpp7gFSdHhSirDWbTGlFzkFiazCxQbx3HUWHk6vfLHeBTH/Jf/7s/h
eP3C+aqCRX1ANBOplANivVUwd/8C8ufbxcFwblGlAxumRGWIhoac22ijjddE0WtACBsActONDipQ
aUq0FJQ53rHbpgVFEUiweo0C8/HM+WJpr/yowMzl2Dz2n30h5dhsssS6vBiWmT/pXA6txte8EgeU
z1gJQENDxW200cabCcFbIQSLaywDD7hFXitxyMVFMTVAvb03CsOEdExhdF3H7bLFou7+FWPYw4HZ
ZB0/ZAbDdRSMD77Trob8XgLqu1NuObV6kkYrGnb1wwJsFY2krQM+vDlpCLmNNtp4MwEbzwXq6r6z
Ul10MeRVu3+NhbCusOiHHqbjdln2T6Iyqj+y27m94eTZkHN6U+uUHbglJ/HS81vr4NdGG228nbFF
mRpfvB2eLUhL4YjLls7l63gDoyYXdgWOlduHvnMsNWZl21sLzMsx48v4m3h6qRN5mY/eCMS44n02
D2wbbbTRxpsnQJJyLAdveHnB21bE8rv95uNLxdtbCcxbmPd1ImcLuG200cb7GMjxJQzD1niZX4Z/
K++1iSbaaKONNl57/OTAXOqnYYGcH4uVrWhw2021jTbaaOMXGMu4hJvgeNFhcDHCGQ3z7//wxzcf
mLHXp3XpBcy9NLbfQ0wlJksfuNoI9dzhiM/d2ji03GAbbbTxJkiIQmDhciXJMvZIPxAzvcSkCMZV
B6utiBVOR7m33x/cD9fX6f7/9J//C752YP7tX/9m/YdCcMcwpyeDTzXZriySUeU0FJ8tq1SWwTV6
V59pdY1NqNFGG228qWC8BQph6axxXqhhIcuiHLfI1vYlLoBi0mVQnaaZAvPeffvD80fHsYcD819p
YP6UHrV/+kxuzyHgcRzFdil6j8Z6cCzOJFCeb+qAm4IzlnKNl+0p2mijjTZekYp4+DeFbU8CjKt4
hLrpx+JipSluXTMokVke4t0sdp/imfHKwPJRVMbx+2/d/gm3RhmqJ1KMRmnVbe8b8psuS2tcNpVL
n2DjjWIK1Ovn1wcUHxPM22ijjTaqyHHev6hCx5gC8DadGgXN0fQYHSbCw0nRndyapxmxY8K3d4dX
BJePCsz/+t//gFf0yEBwvHwqsiczWkfWbGeBZj9k14AlZVEHXchR/XUBc0PTbbTRxqMDNAiwq9Ex
VjXai7QYri6Qa7lzPk1s59TXyEvJCXbMSXfgAhflnWFFii5ULw/M0fazzBxe0vOP83HxbtF1RRTG
ZJuvbniWxVxuA+Q6tpaNj4+BGjIRv95StNFGG208NPCBAr4NAAgZGRdxB1J3j/pS7/xR82hiGw/R
bM7CHgfWfhgcBqTAnMPsr3/1xesj5r/5m7+R62XmcLy9wR2fJtgxqdM6RQHv6sxsiUsoyv8WZ6Ls
GvISWqOqz8ZqE9FGG2208Wh87CqqAtcxqQjoUBQm626+QpUFO6ACjcVJgC3lrA/VzI1EnIglqsf8
+lefvzkqg0eUerC7XBdm7VIIuYocEjdjn94+hnl6YAqymNQZBacckXLmdew+bZVYyVkag9FGG208
Ajs/4ndY0BMGJEOxuw8rCkM7mgYXzTNAyeWAyY+CO+65QAB1nCbkbtesZb49ntwnTy4f/eYfHZhZ
6vHksHfTSB+g6yTjGMyEmf8PtgUIekoxiC9hOKw/mLMPzR+wSvhtJv2auVwbbbTxSJBcgmCLK5Wt
+3I3ni6FpFfikz03LC4muzCDTemrpzEs2GsH89/vKU72FGKHecYX9/d4+as//WmB+RwhfbXfc2NB
x5lGlmMAJH7FeSgylMpwFKg4BuJ8wXjcAFYHBwp1xmLrUVzDy3ilNtpoo42NmA0Z3VY0Kywp17Bk
M+Q+TBIMa5Kt6NnHWAbS3UmC8wze7Slestx4vHjivvvhx836kNdCzCVhzUQ24/ZhGDLlCy71yo5E
eOJi4gfEVXYzaFDGoAcAyjOYKw5U4oWwJQTbaKONV2c1tqRvG/mvuLuHcA4xYwrYsVe0UbGdAVMz
pmNWYaJfTZ6QNAFalhvfffet+7c/foWxPuQNBObPhR9hnoT5Ek9nA9YvM2T3VrUXOeXiTBIiXWGi
jbBAzYnD0Q9LBwU0kONDzQe2erU2pqONNtoods5b+Sis5bl17iuj5mABWgAjCHDUS7zfad+8AMxe
yLU2CeQgqBJmDWRD3zsWSxzn4FhufPPlH+T9vcwn49GBmQfzI8yTMF/SS97RaselNFHeoUJ9/ZjB
BH6YzjpY0xmKorEO3vnxRTIQNpQcrcikjTbaeJi4gDUydpvUBZSxKefErP1HuuSdvsU3Ezmkpk32
eqxnduOEfkYRS7Ca7XTzIr2zqHaLsuTXCszMhzAv8vzuKDwJ8yXMmzi6MI8yC3qW3lAaPKX/qrzZ
KgADVBlO/aDpgOCCg8aASzlLOqiIDSi30UYbG7F4c5eNKx1zBHtYoOQcnKG4KMi0S45NgpStJ54m
/kBIBOGZrRcezvOEJ/AimtjyyYiy5NcKzM+ePBFehGE48yTMlzBvMtF/2kdF3o98SMicsX5ohbVy
hkkfxj5s+uD1gcE1F4129gJ8MBi3BGAbbbRR7Kgf7halgTgm+KCQxlUoGfIFdOev9CvHYt7pM5VB
FwnLnAeUimxN/PGLs1jiyiqmH1tc8qjAXBaZnG6uhS9heO4DF5l4QcjeRX2yonsAI8uhpisA7cNB
uT2A4jF2EJbBens70jBzG2208fIY7TbAHriKao2xqELLxXVCzBagTX2mlEaIkjmCzaZWY65ZcnGF
hnlZXHJO/fZgYN7iP+6f/4j7MKHzXoIxnxg6pjQ6r/I+7fyd8oAQEXLcAiDOfCkRsyX9QsyEZi4a
t5CzK3SJdZBuMbqNNj5qiLxmNBYSOSxlcEUtRUrqCU0xG2icNWAXIFMcPvUaIpUBEswFLQflcFGd
kKUiWjTMp2EnGubHSuUeDMxL/iPC8KhlDsC2dswuz0pbKAFubxgU5vN7hUhdQLUtiB+enjlXmVBw
YeMs51xLALbRRhuPQ8huc4dd11ZYnMGlWowvs4JEBpE4g0l6OVaBUbJSUwegsdgJnaHVgyjl2Djs
djgRgB0uL0Uqxzm6x0rlHgzMS5i9JZnr+04gsMD3dMpIjEbiku0DzAtSXZBzOhPZdgHdlqwOYsbT
6e0zCcDGM7fRxsc5qnqzpLoogjNuUBpuqRabK/oig8hZEDTfBuWZUWOa8suo9AVYVaCaG1FwnSah
fpkCXkrlHlJkPIYAkN8T/IYXz5/DfLiE7779DtztjYeu65AuhNTZYG6gsDnQX95RqN/R7QO9wQN9
gAv6HRvTXVFwvqL3S9fuCb2kXuh+QshP6HmX9Keu6Fhd0P0XdP+BHsdOeXu6ZingQL/v6TU7uu5A
FCny3jwoVM9O/a1+u402PlqkDFW1sYA4oyUECE70gIkec6L7uBnfkWXGdPvO6eWWHnNDj7mh23xh
g6BreswNveg15Ptv+cLPY9NNeQ2AI4XrcXZh3HUdOzHPFKbnnYdwfX9c5ctUuPYaHHM5GH4zDGc4
/vmzpxL5GKYDx2b2HsWYkTTMDFUiL0L/OVIcLh4oiFyOoObZLROAUJZwZ8vQxjO30UYb2zvlMgig
Fa9BMhyCVNFXyHYXKDnu6IskoMQregHlnS1PJtpl5ZoDu8ih53aoIogQRmEynKiJvy8eZCReKTAv
fZkZjrNQuh969FNsWzjrB/Zey7BBVRaA8QNbUM7Bd66Cc75UBygR9LjkhNY8c4vHbbTRaAznzhrc
r/hlqOgLyKi6uGBxkSSfAEnUx9NtT/cFEMGwuWiCuG6O84wx8RfNix5r9/koKkPjLJSPlcuvP3nm
v7+bCDLPXZgDgeau73s/TPM80CfdEXje0ylhT8+9IAx9QS9xxXQFPfkJCmUR6Qy8Ar19pXSGUBp0
wQPd5gsLAHd26emj9/SanVIaclLx2lex0RlttPGx0xhui0POiHeyyyld0N1TpLhnGoNCxh3FkEhV
RBoj0RkUVG4o9t7Qi96C0BhwR8HnfkY8UiDiDiIj1/t5z71Xw7TvuzmcxnB5dRmOF0/wM5jx6bNn
+Lt//KczbfNeATGvE4BfuE+uvpAEYEfhkVHy/rBTw3x2hjaxtRHimvwzugJUIzhn1CwHaY5nKsjS
lWILkf02XN3yBTfQc6Mz2mjjI6YxSjwGdVOOMlAXJmpVtfEsgoQCMYPy0rPSGphiFdMfoJqHYAyB
vJ5X+RzL5dBPKMwCN6pmpoGpYC7WK5mI10bM5WNiAvDmGuEWjjDQ3ybI3vEYj0dCsNgH8IMXdAs7
eq+EmJ0k8+hdX9CLXCkyBkbJdI0xCWgIWpA0o+VLRctAz8USMStq/v/Ze9MmN5LsStSvRwSQySRZ
e1d3a0Y9ZtKTWX2T6Yt+n35Z6V+UmZ5m3mhspO7qrqWLzA2ICL/P7+ZLIJBMspJkLu5mIJLIFYHA
iePnnnuu3BJjNhYPOvH1LZ5XW2219YjYss3zU6kCMbksIJJApFHVzJil+AeR5SKzZbnBpVPGzMU+
YskA5xGAufBHBUHgr3GXEZAvu8iWA8J1xOFdxLp9/NrIliMcz/MUP54Bu/mz0z58/8urty78vZEx
l8tas38+/wvrJ2QDwf0e9+Oo2RgePRUEVXfhwh7KVQZUw5GPtcmkYM3FNqPQm4tiYH21C4ur4doE
3Gaba6utJ7TApb6GZUQwFu3ZFueZ6l3OrLu1vjwJW2b8IieHMmXxNXvIjSk6jDU11tmDpCiQsvDs
q9+8deHvVsBstLtszS47ACEPkULpGEf05mM2FwaW2wBIoIzVAcGVYiBUnmYoYkLd+rSTBshttfUE
ZQx3CxmjLPhVjgtIYDwVEmsmiwVOQXaWiYMDtI0b2ZTB14Bt57Hrexw2A4Lv3NB3t+74uzUwr3UA
kv2Dtg1d17HOnAB65vAOrlYSqPoClEGelLBkcJNUOvOBcNlrWBwIrAzfuNwSFPcH7ozWbNJWW4+f
Jh8nZ2aVKwldiSUJlwxriCjK4yR9xBvq56F2aERQi0jHPmVpNiFQBhrs1PM9j5Xqe7emL98ZMJe0
m1Cf0J8sIdT/TVcFtoVsNggdzewW9hwQk7Bu6Ut2FTIZw2XGPJEGBHaFgrx1yAexjuUr5YyjLLmp
zG219STY8tvLGJk5Y2bJExFFYclkQea+i6nAp9nMC2CmBvBsSCAJNzjxMnfxE9fTjNswI0V9moxx
mwzmtwLmciWd+fUFAzJdFWbZMji5WngbI2VVyyRRSC4Gpm0Ds+L4xOUqhATSekBqH6E5NVytN+dh
iIt5gU3OaKutJ8WW3Up9yXAhuFXfcsGUMcurWOrLAtD8uVQTMxlDFYHIiIPznkGaaDP5l+kKQf7l
adiovvz5jQrErwLm4zrzjGGKmDruka4WwZgshzNTIbCywOkNBHwBDIgnKAR220Is5QxXNKE4p5MD
ijbM/BK1ImBbbT0p7pzuoSBpibglplxYcE3G0BZtVNYMpisXTBknnqmKQiwDS7Oc3CajpbQJjhsp
InPeh8BEdbPdsr68TJS7TeHv1sC8pjPT1YCuCoNeJehqoR0wchXxYFnLswbk561A2i7IASC2nOUM
ZtUFUFeAXPua6/mArQjYVltPC4xdYZFbCB2YQu+NMWNtMijNB4WEQfUvUFxC2dFHEmngrORRFIEg
4WvoRcPlaIr4MfmXqUP6XfzLq3uA23yt+Zl/xg5e9h5+/tOf/B7itaLvOzeHrvPQx2fVdwAbFO/x
FimUyOEJUEARwLP495NX+UxukDoAUf6f/MzxsWdInmYLNZKfN+jtdp7m1gnYVluPliWveJeDSRS6
Kx8ddeXljr9rvUlokfqX1bssnX4AF/EnUcffZfz58XGkbr+r+DOvpFOQPNBuF4F57zqYvPNToOkh
8fduui70EbTnFy/Di0isv//hx7fyL78VYy7Rvhw1ZbkZfJXQ/CL2MqsGDM7S/hc6s0kWepVK4nsW
3kvLylyw5zxJAGtPszs2nrxBclttPVK2vFr0swGr4SBrufYrq3SBJJ1q84liEgr+2A7emDIWGEbK
gPcgs03nmRxobJOj3o5jNrnbgvJbAbPJGaYzk5xxNZzwFYsGtDJQxj90VkcGQsosrcV21nXAnjyD
MW0dUK5qemBE2pADBaWcMZvbA46PoFKbTL2xaedzW209ToAu/n9Q9MtDVCuCV0kXLtl2cTTABhD8
IRmDPw9gxUIp9pGM4WV6SSDJmWf+wdE27LddtwbmNdscXxXi1YE7AEn0jmx5mgNSyhB5Rzg6PwVO
c0VTQJpAGZK+PELSduhjKC0rE9ROjdKHuIgDPZxw0lhzW209KihesOW1eX510U+JXGEmgIIZu4Ic
CjE0gGaMYjatOrP0XRDhtDQ6dmI47eOYvYwHIaI6jcM72+TeGpjLVcoZdHUo5QxQOaOzgyTFv8LM
LRa5zJ4NnFVwp4MCmTnjYUdOVQyEwzjQxprbausxLriZLTv1LbvDnGUC1WSBS24wwZmxBGXCIpd2
8YJVUMgYXuM/ncZ+ujkSUCr+EUwTQR02ZBs+kDFua5P7VcD8Jjkj8LBCl2+Ff1BcGbDQlRWQC52H
D5axaufSAYJFq/Yyq7mx5rbaeqps+XC6tRG5igyiq2xxTq1xDMqQ8ShjFZiPeZaceZEweroQTFPl
xqD+DsoTWsoYb6Mvvwsw3yhnhOBZzgDQ4d7xEWPN7AMEeXLy5FXDkYMxKpMmWWOs9OYkbcCUioEa
DeoMpLHyLjbW3FZbT5AtayWwlDqLsLSyuxiSjOoEa0bbqcNBnQvLGFAOyjfGTASUiSjnY3Rs/vLb
7a+WMd6ZMR+TM6jZhOSMre+FxQZlzuzMYPuKzN2SqmZ1kFh4R9lW6MFRcMZSqNc+9lLSQCsEci4q
NtbcVluPjy8fYculKwtgOek6N5M4MSEkJwaolAGZNUfsgVHAGiwagsE5FGlzMloqhE7GSjER7cLN
boy3lTF+FTAv5Qwa0Q3PNnzVmsaJrihU+QtordkmwnPXDKh5GzMIK3MuhXi7mtVbDzxoPEFjzZDE
/8aa22rrEQP0AVuuZc3U4adFv2Q2KAmg3SL4jlVeBrKMIYU/7fRTX7SQQG0sIQJKE6KZkN7gxnhb
GeNdgXlVzrjYj3i23bqp7/F62vOWAj1PaOUuQHQmZ4Dc69ZCQJhZMBcAFZTpQNUHq6ymltMFBOwr
1uwaa26rrSfBljHLGKn2BJq3DNZFXOnJYEy5kjHyx07NB2BOjNnYchAPcyDCSSSQCSjFHUdCSsSU
COpSxnjX9U6Medls8nze4zaMOF9d4UDA2HXcVC5t2ZjS5VjCyAH5hV2F9B1QwZ2vXqNtLSBVTbGQ
NVibnqGaop1Z8xu15tay3VZbj4oty3RrLAt+Jnsa1giOICam7CqNGUZhylLL8lL0mxCUCJILQ9My
mXDGj4mATj0wISVieiR7+Z2w5p2AuWw2KaNArQjYqae5JwrPc72lCIgKzDJp1nRmHLMIT0CM+3i/
VzDeF97moiCIU5VSt86agzvGmttqq60HxpbhwImBiyYSzFHBlsuzcF6wpJHAWKVTxh2XbLpGElU2
VbtvoJ0+KNGMhJOIJxFQIqJESImYEkF912yMOwHmUjOpokCrIqDDzbDJlVLpCEzRej5lnUoBUPRm
vZrJlWtvV7RKiy62JMqal1pzENa81g3YkufaauuBQDLeii2jtV+7dbaMuZOPWbFzYy1jCCjzx1h2
H6N9v4zGo8GrhC2RaPYrRT8mpsqWTcZ4l6LfrwLmcq0VAbvuBAe6tEyj6D3gpTUbdPZffLIBNcWp
DhpJVzLeVkDSm/d2UBesuWxWYdZcvEg3Z2gcvvhttdXWfVlQfghlJkbtWz5wYrg6vVKLeUb8FEN4
ICuTP96hlww6gjhhE+Teibjhl/l/PBGbwvF96Cgcvyj6ETG9i6LfXQDzjUXAuQOcdzv2+NFVphrO
immwYb4ypSsamEODD5yAssgaB6wZq1HjKbMZ3Co46/gpWH3x22qrrfsoYVRz/crC38pEEo4aTpOR
bGetfRIGyIXGjEr8QORScYuNWVe2xhI3ew/sWyb2PI8TDhHl30fR784YcylncBFw7nEMOxnH6jvs
NxvUCx63MEI5awtSMP4IpjMzU4a9K4R6p0I9OshXN/MaJl8zFJLGwWRtC9FeebEba26rrfsM0GWC
nFtMK6qGqpZ57jkpTh1eqASvYMtguIKj5mOkJpM0izSCs8wwdcFT/g947INMnX4fRb87Bea6COjd
6+trPI00nqxzduC8dASaBky6jU4z4QkB4sgA6wLEA9ac5A0D5fQxLge6qmUG1uQMLEK1GyC31db9
ZssLexxWbNlpXQmruIcqOY7xBHPjGoHzPrNlAmdmyxFdYWRZNd5EZrXgIsMsguUQOmr0I1cG9lz0
o06/uyz63RUwHxYBz//CB2+MVxWqWI7TxNa5vuukAMhdfzxBW0e0QPYoo0tSBmTWzAfTCTjvnV79
cseg03mBJTizb7oKOYJCo2r2ubbaupeQfGPBDw/li3nRcCZuisIGx3gitap9tsiBYIk0kiS2LKYD
zWCGFDdMs5lmGbUawWveM+E8jcyZCGjJlu+i6HenjHlNWzHrHMQnQUW/KczMYr32m6dQIrSwfD1I
zJpZlKcr2V4tLTZ9wK56JuRPWdIo40HTixXwUN5YB+RWCGyrrY+7FgU/dySoqMhYLot+pSUudw1L
cS/fIGMJ4QxhjLFldm5EPPJYFP4QdQCr/O7Zk0WuY7n2k7MvDtgy/+2/ouhnq7+jrQcswQ48wHW8
1pwiUV7pa+x7EEsbJ0tzJ+AUADs+KJj1INonOA/0bX38/4AySmqvH9PfTPf0f3Ll0Wip8ub13qYW
gL7KsJA16GFIeNwKgW21dV8kjEXBD4/Z4+Zip5xTKRe3TOYElFFJX1DJ1OxzBMzxseT0YieZujE6
7Y8gonnqInQPA1XNIluGii3f1boTxlxoKumP+/Gvr/Dzly+04cSvsuYg07DFnqLCu2jNINsK0YbU
1iL6kB5IvuJZMRDqCD8LK8lB2XgQpt0KgW21dY8lDJ2mWhX8OAwNUuTvDAu27HIapXUQW7OaMGPF
EDBwxqxBO2XLzJI9zF5/PuMVOTAiU7aGEmLLL88+d5uTsDal5P64MlY0FTmQ8RkRax7Eo8FaM9lO
uFXbmkNkLHgOzAftwqGin+jMe7vS0X38HgPofTKGixWmAmco5AyQ6Smlhc7hsUJgkzTaauujShiL
gl8x5RpT7chJ4W8RDexSs4i6MPZcj0KX61SYwTl1AapNTowIYLERzJiD5snzjbVl4IaSX15f4lJb
voui350CM2kqN7HmOWLukjXz2Cl50lawm2WCQJIzklUO0xbELQuB2h2IRfMJlCPIbfyUvaA6JBaT
Y+OgI7BJGm21dQ8kDPkcLnKWXTVM1aI8MSdUJkZsICyFPsi4YdZbsdElUFYnBqJGfFI2BgSakTdP
cyATg7DlwGx5LQz/Lop+dwrM78KaUSufxGyBtw5iVZEhiNqFA1nGcK6wziXGnJ0auRKLU/2i1TY6
y2xebjmapNFWWx8PlN2BZxnqiddFelzRWFYw5VzwSztqUMZcEjrdiYOYDJj8UTyEsGS24bIxYdZA
fFDcWrJl+luXbPkuin53Dsy3Yc2lQyOY11i3DvG48+BVtG4csLSn+sDGw7Szg27gbJqzO8jTSNGg
NumEh8K6WmtOkkYD57ba+qgovSphuDRUtbbGucKJIdIEjInIge2y9f+Iu0zwODhNdtu8Q0fJ7kGz
yRFZFN8y1cNEW+4qtkx/4/tiy3cKzG/DmklI7zpPrdrWVTPrlSq3ZxtAF9sTsAMOkK6I6eAD2NfU
aVKlhQ504klqQsGbMjXaaqutDydh4E0SRtXhB3WhjyePmDUOF/Y4h7uEG5gIHBf/sLDcsoyREuSk
y2+gzmVnbFl8yx+CLd85ML+JNdNWgJ7kEJ94H69ItFWYAXUCLaTx4gmUnXX/sUMji/bxYBd+RH0x
LGfV2rY1uk+kkRnqAY1BX/TKpaF6c2PNbbX1YUG5eHxNwpDUODzIckcdsoF551zignO7Um9maQPU
Ooe58BcwDeTg32GTl7quC30kkKVvmZwY75st3zkw38SaXz5/5qwbcJoiZs4ztdJwq6OX9uyZ9WVU
MCWBXjUgZsjSqbPL4Ozy1qQU9zVs36WoULRJKepPrCSNqgh4/GRpq6227giSV3TlN0kYi86+NALK
WLIr7bSpFsWgLM6unTJmnVACXPSz/glP5DDu2CNLlm5kuo/4MMZd/txltkxxE2tOjLtmy+8FmJes
2YI9fnl9jmWGBjc68pZBJgOwlEEHRxtPQFsrk9acsjPcTg+2gjPkKmxm1Gmul8ttmgeShl6hg6va
tZuFrq223tu6wRpXEKR1CaOYeoQWD1zIFJkxs568o90zsrZsunPECpRWbEzzRdF+3jxLATAMEZ8i
xmCY5jAPW4RnAz776je45lt+H2z5vQDz8o/VJ4Gb7QlvBeDZM+yGDdIWAeLNex8mJ52AMs1WD5a5
M9BasyFVVZ0ebJM1UNjzztV2uso+V2Rr1C4NBWg4PDlWT6a22mrrziUM+1yK7wS9VwljWjSRpRhP
KeAJILMxQOULlTh3PhM2HcShpE2yMajoZ9NJZplP6uUWydt+HvE0MsVlglzZ5fc+2PJ7A+aSNS+T
5+hJ0pOdgoyCQu/4QDg+GDIA0YMmz4HN6koh16WuzIAMFVMubHQ5CHssgrMLl4ZcHd3xLI2mN7fV
1nsE5WPh9477DgoXBrr5iIQhllrIbFk7/Igt7xZ6szWsCVvmXTlJGZwJPxP+cCB+YM8yzcbjv6fr
utUEufeNCf59/eAla6YnRVsBepL0ZK/GCUmkoINAB4N0Xx7hQpGgNDacrHNBthxOdKGcpwrmwpAX
QbYtbKPbFY0nRWegsGeoxphLcH8RiLL0T65d2Rs4t9XW20PyG3TlIj8dK+lirne7sJAwwFjy3t7/
aC4MscftQrGTNlOB00RLAuc5YkAHXmb7kWxCrdfxCweZG3ojW36f670Bc0nxS9ZsU07oSZf2uXix
omi9eJBgpoMFaMlxaomRjsDsZWYdCU3C2MFhh0/BmlMDSi1nQCourFrojmQ3N3Buq623AoPywxuG
qmqxrx4Xlwv4WtjPxAvRinqCA2CSprBlyDUnZcqaucxsORI/kJAir7Wu7TCwY8yaSchJdv3qlw/O
lt8rMC//+HLKCT1ZetJu2yX7HB0UYIeGZDZz+hzJDwHVNgepB95Yc2LJLgv+rnRrFC8Kh5UUzSeQ
MjXqjFdc6M2uDlJp4NxWW+8sYcANunIV55mss86ZnFnEeFoPw0LCcJhZM98D5GB8cmJgyl3WqUci
m1KNi2pdvu8CzCPXwLiZ5Pkz/huJUBrB/FAHzX+oX2RPSp8kP+ldfPJ0EOhg0EGRQiCPcslXTHVo
IGJqoeSAEsTcARivkJWkUQF21RlYGspTNTYXGw705jbtpK227gSU36QrH1rjqoGqRWxnoR3vKglD
m88gB+HvwOxxtmPW2AeKgeD3vhb7qNa1H8dAtS+qgUkzyTn/zS9evkxYoLWz944HHwKYK/ucPkm2
z01kn9NCIB2UshDIbJYOnufxLqQHaUwf7DHP7FIZA2X7kmQNV25xcltmymfFxTBX5Mndh3pz5dBo
xcC22noHUHYroAyFHa5kyrDScm0ODHsfQ9E8wvelhGESJ1gkMFvkNBQNteiXBjhL5nJR8KPaF9XA
2B63PfkgzSQfjTEfs8/Rk7dCIB0UKwTaNG0nwxBTBx/CYksjL5ReNbOUkVhzmhmIFXNOMaESXqJD
F5d68+rMwFYMbKutdwBlt6YrW8t1wZSJIBXdfStTSKDo6IPi/Q61hIEE2CAFvzRLFNSKm2b6Scrl
FMJtC37vyx73UYD5bQqBdJDoYMU/LWCeIiAHVDUi1pvRkqNSZ09my66+gmLlcYZ9jgnlNm4LQVno
zfXMQNfCjtpq6zaQjDcA9UK6gENduZjlqWBaW94kZ1nf36jvd9BdM4GySBugEQ0ShI/S6SdmAmJ+
nIvhtMOv63q8DwW/Dw7Myye1LATS5yxHgw6SjHLhhFDZbrDmrJGgSdKwcCO06mt19cwSR+4OVAud
fX2lN2Nu98wNKJgGt65KGw2c22prycLKD7P1FNc0ZSI/K7ryYjxUFUhU7Iqv46+6RgVlLN1Z9B5P
XX46zWQhYdBgaAoskpRLCl2eAzW/UXqc+0gFv48FzK5kzXRPT/7rL79gSYMOCh8cJwcLIR64eLgg
HUg1hEvjiU46cfv8ggg4yw2v44sRb+7aABoLaSNVapU1w9JGZ35KzdPAG3TnBs5ttXX4HljZVVqf
QCjA+ViM5wFTNktc4cQyML7Ou2MoJ5ZIlx9IRrtJGEElDILiiC8sYfhpwrDbsYRh6XEfo+D3MYH5
oBBYShp0cPw0J0lDIkFF0nCaoSG5GZynWk04QX2hgLQm9TkXrdrpxVvozfsyU2MBziKj1NN43wTE
DZzbaqB8Y7Evj4aCXPCrQBnziKiciZOL+de52Ce1JdaaMfU1cAh+YssLCYMbSajDL2JL72SXvt1u
k4TxodLj7h1jXusILL3NW/U2V5KGeg6DIzedhulLCIlUXZcdgJDkDN3uZE1KpY6VTI3FQNeiGOjq
zsASoPHAm9kCj9pqoHzQ2WdNJFgw5cKyWmUru5U8ZSgA2WSM7MTCnc0HtUwdnYTN3cNquZXdNzFl
EHssYLcqYXysgt9HBeZlIdAkDTooz778ypmkgUOXJA1P3TkocXx05ZPuHY33tI5AbdNG1aFYzqAK
rV1lE2t2ZcdgUVSom0+WDSjZqYE3OzVa4FFbTxSU3bqeXHX2wcrsvtzVlx0YUKRHOiVXWLyH2XVR
FPrlfc8ujH1Ko4z3PO3aAtLi7pt24TTJjzuOSWhekTCMLX8MCeOjAfMxSYM++PniCpOkMYukEbcf
HKrvvOcrnpdA/WyfAws5sv54EOsMir8x3uRFxULSQLdbalhlwD5fxSVe0Gx7zanRVlu3AGV3rHlE
c9DxcF6fFPuKSUX6flSfMl4rCGu9SGtHoMV9EFscQCrwS5efhaCBsGXadXecYpldGLQ7X5MwjDB+
DAnjYwPzqrd56dJgXKY4/RTFBxw44qWqOmkk6ChXyuS6UIM5g296UQmg5YW1LdGyhRtTlrPabGpp
o4gKxQNwdg2c23rKoHwMqAspUBwYNCVEyY/cYzmpqByaiplIQVnoQyNWOV1SB2hYsQ+clxl+lFYZ
ONpBdtxx98278OH+ShgfHZiPSRqVS2McufEEpzFs+i6yZp2uzexZRH1izEH9zQDVdJMdSsjJtWx1
5EobUfRat0RWECyu0smeswLKECBP6T1qo2vg3NZTA+VDW1zVnFVJF7IDzaFEkJvGiuEXteuCWLIx
Zn0fJ/+y9ShAMS6Ku/yoFiUurhkimaNdN+2+2YVBQzruqYTx0YH5mKSxbDzZdlvcOG7JIe48jzhr
sLWG6gsgW9NJGapPbZlmpbtOV2AoXRpaEEzSRpIz9nBQEEQeO7MYS9VsdG01UK4+Z3WYOn/GqfsC
FvIFlhkYaRBG4abCrC2LjIEiUXIhH1MhH0hb1u4+MgjM9DvIyQXsrgrdMEgmRvz4VEjhvZQw8nH9
2K8yeS9A/ox//qd/hHhw7O/i2+fPPvFzuIbLeNlz40QjT2jENg1/oQG2fXwB+giUm/i1hN+b+OJt
43eexJ97En9AvHen8XOn8WtOWSFx7lk8+nxPj9PH/HnHn9/G+xO5p58Xb/yz4+9yMMh9/H0YL2jg
Or2w2Y3/XpBAZ1g5vq0s2NajBOVsi6P/o04gweTAAHNgSLC9gXIKIBPSxKBLTour+L1X8fuu4tfF
jx1R2kvg/9Pn7HG8irghO2AUsI572PjzAhGzMegFoIvAHKncdBqBOf7wMF1ehi++/DJ+sw8vItci
IkjOsPtGpj42Y16VNOjAmKTx7KzHLmIxSRqUq0FWl44nnLisNwf1NqupHGWEee4GqjVl2RJlSSO5
OCBrWxKAAslPmZOuzErnDm5raXSNObf1ZEA5e5Rx1RZX1G1y2H2SL7AIIZL3pnb2qYSxdFZVw5hZ
V+bpJhETSFcmTZmscbTLplC0/e46UJKlW2RhfOxGknsLzGuSRpml0Q89ZgvdwOI96c0zBx2JdQ60
x95yNCwgW6q1MmZGtkHALzSIpHHtCisdoo6jORx7XvmcYXVuYNLSjskZDZzbesSgLNOtcSFdOHfE
gVHG8Vr4GOaOXdOWhThhoS+jZGE4K/ZpwY9mIck8v6Qrd97PQ99LLwJb42gu0hRMwrj4/o8fbLDq
g5Qy3iRpfPbiLO5feogHE05PT70Ls/fbrb+63nkPvqexXPHqEtEbBqCAKOfosijShoOT+GJvUWSK
E0eyBph0wfLFM5I3nEgbp/p1pyxnIMsZ2wj0W5U2huLGkgbQ740Xt3jfYZI06EmgSRt0EsezGOG+
Hve22vr1oOwqUAYdoupyvK65nCxEzAiQMWCRKNBdxa9jGSN+z2V868R7kTXAHmdSFUkW4rUSpx11
+XnvxwDIEgbMYeo8zMN2O+/G/TxPc/h0iNAQCd1Pr17zbvz7H36817va+8KYj0oaFA9aWug2AJzd
3AUMHec1yxBFnXg7qX1OZA1E9idbsBGohY5v6FTTYubMWlWhde1sQkK20RXMGWvWrFGFoSx8uDdP
bmirrUcKyljnKYNNti4mkBTNIy537JpbSna09P4EsbqCfk2RFDl6eq9Lbo5IjRKhMIN380TNaJqx
TO4u2nVTA5srrHH3UcK4d8B87OpVWuienZ0WenMkyeRtJlDWBLrZySwv7ZVP9jlIffSgUYHqcwbI
JwGfCJDdG1nWMG+lhuxnrQwLzTk3oCRwXjSgNHBu61GCctXVl0EZ0wBVax4pNOF9DhtLdR8lS86I
U+rsE5lRG0nYtcHpcZqzzJZZes/Pnv3KwC3Xa7oyNbDRcyitcfdNwrivwMyv/TELXd8/x7Jlm/zN
qMDspOmEAJqn39qMP3S4L1LlqgwNORGUPWOtZ7l00iw7BI9kayTNOVelGzi39VRAmbv6DnRlkFZr
WOrKyn5zR9/ihtYQJjY5yIFF9h4EDTMDJWOz90TMOM6T/Mpk0VrTld3CGrfcrTeN+aaz4pje/Pwr
uPJ71pu3n3zq8fwVzP3g4+HvALou7mB6GbmNA3oYXAhDfIbxNYKN87CNp85JfBVIPz4BstS5Um/m
G1voWG9mPZqtc/Q4aczxY9atSXNWex5Z9Uxzho707vhxstHFn+MxXlLkPCbxWZ5U05zbekSgbCPZ
aOc4Q13kGyHvOEs3xbXqynyPrB1DvOGl6shmizOidOUkQe4alWTFN9U+vsFo9tEYd81T6Ps57pkn
2kHHbXboIyCfRrb80+UlA/ND0JXvO2M+qjf/fP6XpDfTlZBPGuo9kcproCtmkPSoSSx0wDfxTTJz
tvwMy87YLbdQuRf/QNbYqTams8SWbdtYdwem1u3GnNt6nKAMLk0gYVAuhk6Iniy5yDliV3erqzcq
8tkOVtxT2iAmmRkobFkayTQRMnATiQxVtdQ4stSS1Om9Z+mTJFAC5YegKz8kpnbQoBEPMsQrnzaf
PPN/HUfo+kiWx7iZiUc/voBdICaL3BQSGTQOkFwabgOZ/Z4gs2dmyieFO2PReMJfa/cnypi3Lv/M
wqkB5tboUJwZR5kzpg7uxpzbepigrHnlCsrZTppspqBeY7QuXDQgJhAWl0V2W5Q3JUiYHBg8Si6y
5aAMPG5LJw9+mrnoFxlzwLn38UIxbMI4juGzFy/wxabDv8weP4vYbbqyET3mc/dQwrjXjPmY3mz+
5rIYSFO26QoJ4MNAbZd8BScfIzWhIKfQeR0vU1zF0wBX0ZpTYMo1miWnzNPAMpVuERmKOZHOCh58
BX8zcz6ID23Mua0HBcqwCsqjdviZ+2KvDV7lVKGi4C63XPPROpD2H6AEFPHEIuQRUTpxSBxYXFc6
6QYu9nWkJ3d9kYNxXvmV77uu/KAY2lJvfnV+7l6/egU/YwdfdQFe72f4+fVr8F3nT+KrczXufe99
F7+lnwJ2ka/2EZgjYjOr3cRTivTmTfy55G/mtu0ImqY3n7jK42z+ZtTH4SQz58Sa9b5o2b6ZOVc+
Z9fat9t6qKDsVkC5KpZX3bZJV8akIcNV1pSRNWXyLoM2mwQDaoB9B3FPLA4rCi2bPP1O8PMU2fJZ
P4RpHkPkz2E8OQ37i/M14vOgCFB/3/9AvbKB6c0Ezt/927/zgd28OIuvaO/iFTLC4zbQ2UHwh54y
Q8Mc7yMak3eGCCv/EOD4N5alGSBTJgf9ohyt7ECKuvkV5AwMeQyWIEoPiTQBxbkA+i+koSYon/dq
qfNOu1GwuC9OnAbObd0XUDZfPgcCuaMdfTIItWgiqVwXuNiREvgWSY8sXwTOvdDxcEDasjgwhDV7
scN6P9P7u6c+hhHDNc7hGenL2y1eKCg/tGLfcnUP6CRioPrPP/4pfXy9H91EoExHe55dd3YG83Xc
EUWY66BzNKigB09N/AyQ3M0vYAsK+sbGOXyoZK+QATiFEykoZzzOoUX2CdDHyz85uTHyYwj2HZA6
BNMXNd25rQ8OynJSwo3NI3Whr7KL3gaUC0A2J4bdiijP5F+WpEcPkqvB4+Scn2heH3Z+BtWUI1ei
QIzwrO9Z2pzOXuDnz0642Pc3v/+d++HHn1Kx71//9V8fjFToH+iJVIUd2YlEevPAXjZEjfij5FUZ
SeXi1RVUmxKdalSNWPzNUgG+Xmy9sv4lGlihP0uXIBa5Gha0v6Y5u4XP2UZU4SJjA1beMA1D2nrP
76VF7QNuBcrwBlBeZJ+r7c3lvJryPQYKzmBzOanjVlxV2tE79V7eR+bACNTFMHRxY+y5v4H7HIpw
ovveRPJYgJlPorIYSP9YMZD+H66vwlnczlDb9oxT8NSRR8BMmawg4dwSdOTZdkNTTyRMH/QqjdoN
CCUQ89UdpYJcnExmp8uTFG4CZycjsWaXC4FH85wbOLf1IUAZVtMQq8jOPEoNsiXuUFOuQVknB0k7
9Qpbju9Bje40pox52rVkoat0IUzZK7mhCE8fwZmIlqe/kULN5jlsX7xAHxkzhd4/1GLfQ5YyeH37
7bcsP8RtCf+ftivTOMLpyYm73p66l5sO5ml2V9PkfBefHkkcvUjpweQCYBE6jVvwtWJA+zkAD4Vk
ITeopQoolQ97wHRllYnXC3qowvQRuQLyp5us0dZ7BWVYgLLu5FYCiXLzyJtAme1tkt5YdvBZONEV
JPKTnBopYY4KfZ66dEEGLWv3YHwzC7GJlJgvGl28d8MGp4sL7IYBu/01/nz+11Ts+88//ulBu536
h/YHg8wCBGPONi+QnBpAjXdncTsTKfLp61fxUuyRp+KSsiEzZmaypUckBvUxFmDqTHBmjzEaf4VU
INQqHVoRz9U1OinyyWfKYcErEkx+N/i13QtmcMZFl2ArCrb1q/VkKMZA6cmkVk4L4MKDQCLIxT4d
BQXaZn0zKGOhI1vcLkoQvgYToQWMcQaGjIUSUKaRcb3386SDVAfo58vIuri5bPMMQ9Fu/Qntml9f
PJocdP8Q/+hlZyCBM21faBtDQSW0rTl58ZIzNUK8mpKeMQUJzqYTjLUqgKnjVCr1N1t3EaaTLA10
dWrzSVd/TCdWSqhbZMlmn3PughoX2lw4cqu6BF2TNdp6T6DsihpHUftIecrosnSBCZDzRGtXWOK0
H+AmUL4iQC6CiyxETN5nnAQp8kVkUZwU6QFs6DIH3g+bDWdgDJw06XFfODBI0iyf733v7HuUwLw8
4cq2bQLn6eI1G8zJaM7TcIchsCZF2lQEZQ+SRqctpJxEl2aPaYIV8GwxqDRl05pBTr6isow6aaHa
mtVzzCADM+Zt4bwEZTgE59aI0tYdgTJUoOwWA1OhAGWtiZSTeyYF5b2y292y0PcmUOZ43Rx5IMOS
OU8Z0yQSIkoQZGoQTSeaIyCrbzqy9zlQ/YjqSBPuQgnKy0kkD63Y9+CljJUTb+n9xZ9fX6QvYI/z
ySlC3Pb0Pjj0HdD0E7oiBQ3nBNE0AM3rrKIEsN+ZviR7kV2hHmOSkY18OKycz1m+w1omxvILl4/b
TwSXZwmWv7J5ndu6c1B2kisedGyahdyXKXFSlBNvsSY2ppzkVOhzN4CyEB1us06WOATMqY1EkIBG
w/GQ5ZnGRMWTPnhAHqQarneBYn/JFveT6/DrszNcOjAMlB9asW+5usdwBsYXA6wYuAZWXPzbbKC7
vqJ9kttuNi4yafU0Ww6SQJ9HbQQpIBCqQl/xQTIowypAwsr/0g/C6rug6k+B6tuTxt28zm29Cyi7
FY+yq0eiyS2BchVnm6Q+lydaWxTnNShjXrgvDkDZss+pq8+rVIjiguLdqkcGZNKWOVtZp1vPPOk6
gjJNITGvsnvxCV5Pszvrcray7Zq//fbbBw/KjwaYl04NlwOP3MXllZvHPYNzN1HTEKFvF6+3dBZS
TyDIPChu/FNUpDZwpw+WYLoAZ3C5ba8CSCbc4FLrn/T/QQnGpSuj6j45QPPDBxo4t3UbUF63w1Vy
WTWjD1Y6+gpQLoPuk9cf8ny+G0BZkxt1mjUqKDMgAwffi3ThZcgy2Vvj9/G9gTL3KDx/jsPLT7iO
RJLl3/z+dwe2uH/5l395FDJf/xiehDk1bCtjvNM8zt//8KPbX5y758+e4RzmsCeg7gZHEftAIfyB
gBidN1dcfJicnFA4N5RbV7RWhIeE51bhZuXDPqcChTV7m6ZBPxmLJhPjzFULd+4SbI6Ntt5Wush2
OMyfD1AV/FKxr5xmPVvAPeSCXzHNGth3bDUVXDSPuJSznOULzlVOoOwSKFMDCYbAoEy/u/MwkaZM
YrJfgDIX858TKF8eDbx3j6j28qjeyGXgEa1v/uHvgWx0Y9z2vIYOPo+v9+XFFURwhkugYWDBk9kZ
EDqPc0RooKGqfbwfqKconsEUGUpxG1uKCw0OKTb0BCX60wKNTmXoq4YdYXwM3ImG7W8lkD9FhS7j
Qu2+l90L6L0E7kvoUdKavataxFt0aFs3g7La4dT4mYhA3c0n8gXb4RDz2DSXHUW5gJ2n+qS0OM27
MJcS+5Tju7BwKSHLFxmUXQJlntdnoUQRlEm6IFDuIji7oWNQpnl9X3z5JfruDC/dPoHyyvN+VAVx
/5iezFJboiuqjab66ssvHGlTNjeQhrnSFZnFZh5P5eP2KYhnk6vCIJ1HErJvQyB3WFjjzEpX3SBP
ZsjmesuhtaJHebKXg15xKoouNjLrJjtdc2y0dWORLxf7sDqPIMsXSbYAKKQLtC5WsOkj5egncyNd
WVJcnnINyZWBVuhL8sUhKHNEAggox/dlBGVqt/YJlDdnz9lhNRVMuXzeD90W9yQY89rzWkaFfnZ2
Cu71L0DM2UL2iTkD2TUgdPHkikwViD33yGwWK+YcT6BNPNG2/HFACd0HDtA/rVm0O1ncthIbSt9j
46lAbJkcScqxoYMwZmPQrhpV5SQ6lN55PjNnt3RyNPb8REHZrRf5ymGpiIeTrAtNmTz9OLqlfGFB
9+JTXo6GshhPZc5gszN3IYK0TzP+cBWUabo92Vj7vqcmkrDf7WZyUU06Eurk5SdpatEaKD8GB8ba
6h7xSZvS6P7uD3/L/on/+j//x82bE3camfQU4i5u3Lv9HLh1mzNaLH8zoZ4Gynkwk4Yq2XL6my2j
jKHLJw4cfSPBuioMN1xg4NgXtnS6BsrHinxuvcgXxKMMS2AeD+ULawSRe1BLnNyAGPK1Pqbz+SA3
XAmQ74CHIIv7Ashm52G6CZRDP1C9KFD8GP3t02735ED5sQPzATjT/XhxzuDsz14wDa7BGVfBWXiq
6AfeF6BsWl7hwkBI3mjt43YLTwccBGMcfghwUMo7LO3BypNtGRtPVE+G2zkvSjtc6b4oWqzZElcO
TjX5rUpbLEO9IEt6eT6mRXiChHt5y75AzlM+CsoUnx5qMH5yoPxU3rBrYUFw9vXv4BkNNJkv4Pr1
K7gKWMgajiagsKzROejiI1wQDPHU8XQPVARkGYInmMSzfRMfP2Fpg2QNdCfxpLHJJ6kgWBQGaWLK
9nB+YPyZjmcUDiSjxHuSU0TasL/pcIbgsaLgsefe1qPSk/GgyKdGoQPnBeS6xeRyoU/dFwmYOXJT
bW47txKD62oXRpW2KA0nEmdgHX1ap0nuCyr0xffSO4GyECF81KDs3CMr/h07mZdRoS61bl9ytZes
OGTJoYID5zizuZ1M7l68lHwiYw7s1rhQy3EGaS29TpGhVfdTMXAScoyoK7Z9LtuQ7ETOJ7R1XoGc
1E7eXGX77EFRENbjQ9G1wuAjA+X1Ih+W7BiTliznj82ohCxZYMq8wDwZfpkKV53PkIepoiXGJYmD
wXkNlKnIZ+6LdwVl2U/Coz+Pu6dwRh9rQLneX7ptJKnd9sx1g1+RNUBCQSH1icjVTJQGNFFCe6XJ
CF1YlW9DVpdTqm7lRX5TlyE03fnx68lvKvI5LfKVs/lAgu4nyN18ZaEvyxaiHWemXDaJqHQhQKwO
DLHH7SVPWXM0QMLBmI3zxQCnrvNzUEtc3GK+Eyg/FXLRP4UneawBhe5/Pv+L+8x95fqzM3fyIj7y
+pW7isy56+l6rqP5KLlqmsnt7MI0IfUKKjN1BUNFbSvhThQJfD440VD06Pw1memIzxRK9mM5orpl
dXXTQJffqgjaasLzBLXxBFozyuPVk3O0bNaTcZF5kSfnAGdfYBnbiRpEr4FdhR1UJlQXoURZS67t
n/HsZQDnHaOHPcjU+X1QqylNH5GLQOCkuDmE5FOeKDCugfLTBuZfDc4kHMRvJ5GX0JRgznvQxCHd
VAIjrbwteMwrGAyjdnujdvctJ5Yo00ED7uBkq8ath9L2jfa9Q7l91YtB58AkqeOdgq5OV2rg/MD1
5AKUCz05ZV7YGDMt8mHZXi038eizhKGDT8uCX5YyoB6mWunKoFKeBBztEZLveWRvMlnvAjIoU/bF
bB194AMN76PzvIHyW2yLH/XZvugOLI4BfPb8K3BfvgR//stBQXDre7/DmT3OhNHofR9/Vk8FuviW
iZd+9iNv4km+iT9/E08jLuxh9i+rn7n8eOlzrm/xZ2/i92/0vldgrouCTnzXZBhZdApWhcHmd364
oOyO+5ML+YKJx1wEERXuC/UnowCySgw7AWbY5aD7tUJfWQtRjzLFd3KGcsrN2KstjgBZxkHxnD5y
pWIEYuSaTZl9Qc0jazvKBspPjDGXzNmtG9GYOZ+d9W7z/BP3GX3Zq9cu7r1C5z1/1abvuVFwNjEB
ZenAbLZf8n1kzV5YswVs1Le4fXN4EEweoJQ6RH7IzFq2pwumnQar0P87vfeF1lzGhxYadJM2Hop0
kbNVsnSRAZkdGFrsw6Qn5/ZqljBy0wjYOCibdSmMGVJH6xoYu2JAMXe87uKW8VotcKwnB/k5DMYE
yqDDU6mJhQvoZEpegDJ19FnQfQPlw9U94TcB6EjzijWSz7nbShPKKYHzNFOikZvovO96PuMpxCKy
aBRzGiS12WlDChcAwacRU8rQ04wq3o6WeUgufwzgFp8ospNugNDaDg2L+NClAbqcW9iY8/2VLqrH
k54MtT8ZC4acgBmOFfmM5YJlXqxa4Q6mxGPyKGu4PQ+UQM5ltt/jgfzJYQyWvdF3ITKbKrqT3E9w
coq+6442jzx1UH7qwHzUrWFNKATOQ9wd0nBXgtnL3R4ZlCPozpE5e+/VkhEEfFVXhtQfAvavasUi
PTtnRT1XGzPKQp81reSvXcx5vQGoq8cSyN/k5mgAfQ9BuQ61h3U9+bBpxMLtEyBD6bwAKJs/quLe
oYQh9je03GX6Hi/OC9CwfCokdpEdBwC5J59yZOoExvK3hYOUuNOTT/DVT983UG5SxnFZY60g+M0/
/D1+92//7r785pt4ln/ipvML3E8zdJuNJ6EinmvyvVR1k4KggDLVMxhIvY7kRnNWoBX0BHJRC3ym
GZaSBgojAqcyib4RrSjI31s4OdbcHxnIczipS1O8/QKxm7Rx/6SLFT2ZJYsMyOq8qJpGqvbqlHkx
ogVncZEPRVcmOUKKfmsSBnuaMWvJ1yx76Gw+lkLizyGGrP5+kTB43jFlKuO8gW4OHRX5MFBg2KaI
7gw/vGqg3ID57cH55fPnDM6vf/7RdZ994V5dXfPXbrYnAfs+cobr0HuubDjSn6m6oTiKnpvyxMWh
yGzuCQFpn5iPVdcDGtiiZTmrBQpserEkRLv14s/KjTG3K1iXd64s/oGReFi4Nho4f1SWjGt6cmLI
OYSotMJVhT5p5EidfOqWsCIfWJGvaiLZYWmDkwxlGxfF917cFjSjj+f9cY6yjYJCmjuPNJ9vmnCe
4/shxAeYLZ/0PlyNGJ51Mg7q4uwT3F9d4sX5XxoovwmX2iHQs2Hh1ihT6SjP+fsffmQg25w9h2ka
ITICv59HP5DRuR88hjm1cM8e2LHB7dvx3ln2MsYbxG9lt0aV0WyOje2hY4OyoFFbuK2N21q4scx2
7ot7dWtwQZC6Zbxa6spc56qVO12nXHNtfDzpAhfSBR6RLriol/RkV/qT60AijZiFXOTT5hFcNI4k
sM5aMk98J2AnoI7n8d5nsB8DSBgRkh3O+5lyL+I/cz9QckGYcZrCi6FHm9FHkbs2ecStZF881vjO
Bszv4ZgcA2e6+S3hJZJnDvp+6MaZpDXO14iw3PfxxOyc74ZIhhkoOToUBFDJThffcgKwACcONT6U
LHYggAwK2Lhmp5Ov27gcvB+vD07jQ2twdgLMi5yNdUudc3m+4ULaaOfKe5QubujiyxJWMWnEFUU+
AWOZOGJ2uMySZeDp0g6X4jotD0NT4lx2Z+yQ/MmBins8BkomWIcI0h5YvsAcRkQTJqjENweIwOwh
kEk5gjiebTtOKnr5u9+7m0D5sQcSvcvq2iE4Ds5lZOg0jnB6csIzBPmsmmcHZJ9TTkMNgg5F/BvU
vYE+1+oY/XzhzlDN2ZoFQNLpRK5W4bg4gauTGfI4V1UjDqYS1tU+OI6rsIK5UHhDXGPP75Uluxui
OrXWYHryinQBoysLfVC3V7tDX7LlXZTNI1d18S8Nc9hpdCcxZmbKEWwZjJmdR/iN5/McT9h503ch
nutz/Hwk0hC6fhP/YhpEEdH7+Ut8/vKF+8v//v+Q5MEffvypgXID5rsD5+/+3//pPnv5IjLoi/QF
w8mp20YiQ/PcLV+DJnDP85QDOEkjIarqNSYUzHsMJvqKYyN1+9mIVyegm+10CWwx68i6Ay4LfrC4
Xx/6CqupoQf/aVkb74Elu8SSD10Xbn169ZqenJLhzHVRx3VCZYfTsU+WlWxTR7KcAelrBZA14Ijj
OnWSj9cgLc8M3XGRr/N+BvaO0oXEh338mAa17XaXuJsm/P0f/tbNP/+YBqfG91MD5SZl3PnxqUxu
X339B9iGc/j51Wsgn0bnI0foer8fRx+3dN08o4+AS52CveukU9CzrKHRnqw5i+7Mk1FcxHmAExBp
Y4sSE7qNb+ITjRDNejSqrAEiZ4B8/UYljiHfoHf0+6GeiqL6cyVtQKLf/LEVC5u0cceg7OoBqSuh
9uvShVsU+Vy2w7F0wffitNg7m7OX7XC7ynVRas0aXoQCytQ0Ij9Pwu1HFGCeuuCmCXDqJGif8ohE
U97v54kAdpF7QYOQaawbjXdbDk59CtGdv2b5dgje/MZaiw2lG8WGUlEjMmmkynNE3HB9dcX2pUhz
5jnMNo5dbEUhcLsq63/xDYBm8kdM8wR5mKVFg4IOt5QZa5cuz1e7dGWcqHpOC+sTa4sys031QXkD
p/luqKynnCtYZvgu4iRdIbusSSxtHZ43t/Amp9l7ofq4iOpc3GSyCMq9Bdhj4Tsu5Ak5ZyCdN5fx
8nqpcZ2XFN0Zz4Ec3UnfjzpGylkDCedfUIGPozups488yoFbrJG7+abA+8PQb7ehp1CiW4CySnft
3GlSxq9bN8WGWiPK1etXkQ53MLKkQXQ0iI7Qefa6MeekVm3v9R0LKf/ANGcQn3IRdgQqdUAFjlhI
G4WUsewQQ7yBvVWUd70hZU3eaBNS7lC6cLeWLkDYMbqlllzM5DNGvKonF7oyXLs8EsrardUGJ/dO
Qoikg0/cF5OMggpzR8U9yr2gAJmuS40j3ekZvjg9wctzabOOZMX93z/9Gf/uD397AMrtFHnz6tsh
uIWecUMy3cX3f+RGFPI6vzw9CeB7MmWw19kynmfwUtSLoN1Rq3aY2OPs5V2HqI0j1lgiwGoNKdZ8
Ivf2f7VJCcuFmnVhYr91FoexYZU2ynS7TptMbJftXW2dO/A8L2x12AB6DZRv8iYjFpLFWsNIIV1I
0LztfDSyk/KPxXEBafKIuS5EwpBOP7XCFRNGZJCDAfqe5Qv6uV5AGXUEFE05gY66+sQBQja4eA7z
INeIy6ELHqlxhHaMO38Wd5A/pAtPBGV+vhGUXQPlpjG/33fdSjLdN//w90e9zsMwUBUEggceV0Xd
KIPz3T4SD/C+9xEgZ0qnMw8yT8wGttQhmkdZ/c7otjSd23RndzB5O/3fvt705jS2Cmjid+F3LlLq
ymncco9M8lY9z2VBsHme11nyug1u1ZtMF+FZm4zWCnyT2uAmyFNtimGp2Q6nmRapiOeyfsxdfqIp
S0s2yWhih0uySPwdniULdBzVOc0zTn0Pc6QR8xABedzv2Q43gQ99hG+yw5lH+eLPrykErHmUm8b8
cZjz4gRj/Yx0NNLTSFejxyg1i/S2AeJJTCxWx1XFk3umfm4dRDlG0kHTgkfUAo7TicIgGp91Y4kG
CEl3vtStKeuFphsm3Vn06GyBskq8NgwUb2rzuo4FCNg8uFnZ26H+mUPZb+rcwqcLylAU+FbbqoUd
52PJKWw6f2+COjdZ6gTKiLG2v13JNJFUf7jE6rxwlyDa8aXVK1DOF7lph5/L7dp7mvQUqLWawJkk
jA64cYRuPsxzNwyBspT77QlypjKFlUdQ7rbbo6BMzosGyk1j/uC7jaXX2ex0n3/xObdrk5RBp+VA
gUe+Y39z0AAktEnbAfVstvwM1Z4BspRixTcN3i8fT8H62XKVyWy+mJiu6dwaqK4FLL3FDusJ2urW
wAYPteQq2H7Nm7zMT14d+wQpO9lsbVBNFYFcBL5yelEHns2HWU+GBMbk3rAQImbLHqS9mgrVknfB
CXUz+5FpBuYcQtwC4jjP3DxidrjPfvvbZIdrHuUGzPcSnMnrbGtLsvGnX7qXPkeH7nYz6uCTqigI
eV6goSK/kb1NTMm6c2akVuwzoJa9czGEVbbNCUDqCSrpDaT6hAxceTvlq87EO14YfIwAfSBdgKvz
k92hDW61wMe1gjyxeloActkssnepXTrvhNR9kQt+UthbNJHwrD6VO0BatCH5lFm20F3bDKDDUj2E
Pu7wIh7zjo9yyU8iMCP4lKNMO0TYXyfnhXmUaX377bcNlJuU8XHfoMQOtPKcQO/n1xcc2EJbPdry
7aY59JstbwFpS+inibeIwNYonGgL6WlGmkobbKdDnaemRZz4hmE2RDIH8lYWLuPHulWFS9nS2j1e
lpO64TDaUbRGlEkWK7KG6ZszsG+VC1ZzLW3AqrQBjzeYBo9INwc2uJXbzBKR06nreXI1z8cDky1q
MC7lqFK6YEkLCitcet3tfDArnL72qRioRUICaGoeofPNUzHRS5ZyR8VHms2nXuVtBGVKhyPnxXa7
xU9ePE/Ps9nhGmO+1+umXGfa6v05MmpKovPbjRvD7Lq+p5ZuZsnWxk3SRpfscynvTbsCl919Fr6P
9XY5s+bUOQjJOpdawNPj9vWQGXXFpBdcN5sy6ty5tRbCx8iejzaL1KC9aoPjAt9i7NOhdIFJT67b
qnP0ZppSrXWHiikvWbI1kQAny0GqLXiSLqi9WubyTdQ57ShiPOC81RAimnY57+cIzA63XYcvX5zh
/vmnGH75Ca/3MhaKZLtmh3s/q9nl7kLPuCHXmaJD45aPHBsubgHd5uw5pRmFS1YzvOu73o3jyAH8
szTYyRs7cPi+hoWKTc7bWCpOftbx9FLNV9schCJ1TGxNqYEEtYkEMvNVoODHgF0gieGpc6AvWKCk
gejw12rgSu4YfJOtrgD4h6slw2JquTtig1MLolrgcNYdBrcyY+m4MCscpIKfTa/ep4ItlK4LtOGp
Zo0rJpJgssHZPD6UzORR9WS5GICb4x9GM/km0ZL5/KGAuOC6jndE/WbA3XgVNgPQzi+ev5d4EXeC
5fMmO1xzXjQp416Ds1ag0xu6dGzYm5e2grQlZFN+wJSty52CfM++1UneTDoG3oG4NoAzcWX6BMq2
ViQK2bambS53DpqkQR1fcpPtrrg4MHV8SQ4v6Ju80Db3BZPLEodooQnws2e60lJLR0LpVLhJEngo
LHkpXbCkU7tWsJR+pgTCPK1aOz919l4OoM/SBaq7JnXmkWRVuC4K6UJeZ+DHCumC2DLLXvJzPUha
XHL+xI1boMjOIH5lD/MAnidYT9PME0f21E3iMVxPE766umbnBaXDEdlYynjNedEY870H53K7Tls8
ig797t/+PZ2008Vr5774LQ97vby4cq9nwmSQFj+aHCzFPnZTBKbhUDSdMO0N2q+QmTINvcwAwewM
CracWbKw6cWWumTIs+rHA5az5YD9zpVsojnPqFKIX0xJeejsGW94bLVZZDEwN+9E7JizBREUnFcK
fXU3n00b0YIdFsFEZHuEXc5X1s/5yLDjxyiWS2qlZsmCaxYURITSpOLlQhH/pkC5tOTZnIkh0yaM
9OT4h4ZN1+F+UeSb486PQJnIhmvOi6YxP2Scpn/IsVH+/3o/8rDXbtrjfhzd7HsXCt3Zq+6Mqjtz
YyByPJ2TJFGxwNlEbY4StWncBy3dLmnMB23btUsD1bi39jUZhAqUVRTGNz3/B6g9H2mpXjou6jS4
N9jgzKe8tMFVrgtwWUs+nMMH7EW3QmBqwYYirlNiOmkunzSNSB4LTxwhUO4iO+7ISx+QrXBDn/Xk
aZoImFlPfvHsBPuT0ze2VzfnRZMyHuJaDUAi1kFbQvAdbxGJlVAiV2Q1Ep0YWQvFdtHYd4oclxAk
mKRgY40oTrRH0R3FuQFr0oZsedHCbNBkDbBwm0trTMHkf4XrIg7SBnfmbbdOysA8xmhytePgVk0p
99C5UckrcJiDvXBd1M0iqY2aWbEeF8u2MNkCKzBeumSSLKESU2ockdcNk+uCLHIgLpwsXZAcpU0j
YMNWnbZaa9MI2eL472JLHLkvkNkyN41sNkjOIWsaiTu7sr0aVU9uzosGzI8DnNd0ZwLnslPwxbNT
HDZZd0ZhMZE/4xyZNANzfGNOnfcTkC6owAhqqUMrABX6pKSHpWS6nFbHWiUaIAtou/TGt87BsrJv
hSZr3a1sdXhEe3YPR3s+mgRXXEz0Hg67IYUlz/kihSs2ONQOPtgfsuAycEi6PAH04qmgTGCN/FpB
ep3IOgnptcVrtVPStBE+F3gMFFswpfBHYByQpliHeUOjoA705K7Sk39eFPnWSEZbDZgfuu6cTmRi
HQTOxEKsKNh3HjcaH0qmpS6yl+R35lFqtONk9szNAMx+bCCmtuvSWHnJQwBr5zbWLO25zLDkBgUg
uwqgi8KgDeeEyve81wtAKg4KGEGpmx6wZ7jB9wwflz3fsriXinpHWPKB93vUXY3euOAmUkTq2oPM
krXAxxdIsF2OMWS7cIIWBLNHWVqstX0fcZeLiKIxEyB7/ltwoqIyNY6wPzn+/aQne+/CSWTMFB+w
0JNbka9pzE9Xd7b27VJ3/uXi0vXxY/M7ByoIenCbYaDuWNI6BNBk2rbKApC0YNageVo3ZE8t1m3B
hT56eIPF/3OBT34elIAGuNowCG9880Kp20I9/OpDtHUfscBVn1udwbfUkmHhS4Ycy1lOFhEZI2dT
mES0y5154oxBDbM3Ockag3wZTIRyIS7yVdSfzBdrZu0B0k6GGoRCPHfifQiepowABh40aXry9lO8
vPgl6cmtk68x5qY7L3RntwhB8pHZELshtklshxwXnJMb33xU1AEL35fZbIW0Iboz68Yc8wjSHUj6
JWJlp+PtcsmgMd0vOgYrW93O5Y7BA/b8Zu35IIz/Q8kbt2bJ+W+GdI/WGAIHIfZjfTxgr9GaAraQ
GTPYTgZM48dKqgD92Lo5QdmxdntqpjLuTE+WUHvYp4uBdPSRjsxWOA89W+Ho/KGdGCXZ1XryZaUn
t06+BsxNd17ozvYG+eT5F/jpySZNRtlNFLgR32Tayi1bUpw6kjaAO7lGaUwgQOZOLwbn+C6kdlzV
L1F0ZgZotC1xKgwmQIasbbqyOKjTMjCxN9xBAURyL7YsNHBeas+YLH7LluX3XRx8g5Z8OKUaF75k
cIeTRbAoyDplxnLhwuvsmsDr4hjmFLhK40/6cQHQ2ctcTLW5FlucttOLOyM1kYBo2/K3kd1HL+Z0
cafnE4aOxz9VevL5XyrpgkC56ckNmJvuXOjObjG2ynI2iOVwfKgDZj/9ZpjBRxaEwFX2uLVlcM7M
TfytXvN3LWODwVgBunZkVECcPsbCueGqqRiwzN1YsudUIIQid2MZJ7qUDN5DcRDdeujQG1hykXGR
4jnhqJacLk6QC7GutLcVYGyMGF12yaCyZqegrC6ZBMqaECdjyOzC6xigxXURQTkIOE+AEtc5DPEc
CXGHNY4zXdypuPwyAjEVm5d68po/uYFy05ib7nzgd76scjZoIvcmIjLtPjlClMRDlL67QG6OiNI0
nZgj19kwzApuAMh6MgMdooAhSMSoOAtSdkaoNGZ0VXOLO34zlqtvZjhIsHPFhHAF3UpCXjc2AxRf
+7be57VRWtWkcVhtqS4+jscDpAX+YCiqMtNqokgBzouRTy4nwt2gKZdB9zIcNUkV1LnHckW6CIB4
k71clFU2ghk6CIPr41kyz33f82va9QNO0z7EHRmeffmlm68uOe+i+ZMbY27rHXRnYjNmqaNW7jVp
I8Jz5dogsg0awA/y5t1nPzLK1hdyShlX9hFN0pA27ULSqG11SZd+I3t2dSC/suey640/TjIBrjJo
DO7N8sZNF4sjssWhBQ5qxqydetxFuWTIo+rHezzOksvjc5Va4iFbE9c0ZXFZAOvPVgvQn5deP9aW
bVcS4t8SaHcirgvPSYWUChdYutjtdjNJF8vWarPCNX9yA+a23kF3Li11bPi/QdoYho4CaGapxstE
bgJnb62+mplgzQdOgtSt6s9aZrLVwdJGZ1turJpSXOm/zdqzaao1QGMdKYo5/vKotQ5X5I0jAH3D
dgRuZYFDTNkf6xY4dVtUvuQDLVmmnINd4MAlayLW1kSy41wUAM0gDMXUc31ttMCHlI0ik8+pxZqk
Cy36Up2BLsocIRsv0iRd7McpSRfkj99yd/7NVrimJzdgbuuWunPJaojlENsh1kPsZ+na6DlxDrgh
hSZQkN7IN30jO21IcbY1FudGUZSSQhPaKKukd7pUkEJ1bBxjz7DIe4ay2w1Sc0oJzpO5NlKuB/LH
R4uDcAuAhhWZpWDfB+C83ihS6uNQjeNCGfNUuVVKlqyacD5WmHceLv//So9j2q1YQxA1jFgGhrls
XAo8stczgnMXL8o9Fffk4ozqunCzXLy7eF6QP5588k7zk8110fTkpjG39Q44TW+YMt+Zhr5e//JX
d3py4i4ur9znn//OPe9mno4SUdqNEawJSXrqGpiDs6AdVP3Yq/8YwcZXieYsE1I4XjTwJBTI3mdX
6s/CPIN5mqEclbRySxnQkHKLlnnFdkXKoFCamo9oyeCqkdxwTHhegPYy36LMScYU4FROFTk66onl
oaVck7VkSFqxWuSqPAsb8bQz2yFlJYOMf2Lbm5OhqaYhi1yirdQkq7DbBRiISTsOXGKgrM54Sevp
Ar0ZMAw97nbXPPrp69/91v3pP/8r5SfTfVHPaHpyY8xt3a20Ubg2AnJbLUkbE8kZmrUhdil6IztK
EovbX7TGh73plU6lDS/AQHkLV6BuAHFuoLBjxGIrfsieC0ZossZV2uartGEygKtiRTFnbhTWOshd
gqveZ2PQuHJROD5NBEst2x5bShYTHgYNJQDO3Xtu0U6d41VLlhzB9CLlk6jbQqbOgFrhsPKKmxVO
J1/zMeKMFC/eZBpD5T2VeOUCMstrHfrgA9UfqA5BVsvbShcNlBswt3WX0sb5X5K0YQ0p1F5LWRs+
wNzRthZlTBBN5dbK/WTapBQGKSpSgpBUH5XxVbIVv4Lkn8XUKlxozRemoZpWmiUQBWjM4AzZA72a
+bwIRSqndhe5G7hs7V613OnXr454Kot7UGUl1xY4qLNBjoQOFUFQWGnJF5ZvwRcydBco7e4y+gkt
O1sLsDIqjH3nSHUABP69Xl4jju2MwC4FPvUm08WXLsI4zzNflIup1dYw0qSLJmW09ZGkDWvrfvk3
/929jOTz8vIKu80J7/BDxCeKER2GgV1yQbRWjQv1eYsP/KC1G8v2HkWmgDTWiqelEMMqQU+kCbPZ
QQGGuGzvhuXUaLcqbSxHNuXE5psaTg5+D6xIK4VskYahurqdWiaJmPsCFs0jMsj0oKUaCtmi0Nml
S6+QLqopI9qx50S+oAtk0pApMzlQ1x571J0kDFLORQTegSfWkI7sQheP74aOcb+pplb/6b/+o0kX
jTG39TGlDQOel6cb3M8z26LIHkU2qUELg6Dt3FYYpMGbVBhEkRFGGWXP2b3JlqWap3QNglPXgIbr
YClf4IVTNh0fv3C2jYeqzVvZIdiEDgMwYc+4nlzn6tbnEkTD8RtWyXawbKWuWDmUxb2x8AjvU95x
BbQ6IUbthAC5WcSpbOFcOhZJ0rABqVZktbZqRN1BaCqc2hstlY5lHhqOSvGv1L3HbdWQC3wceBVf
37Ovvk7nQZMuHgkTa4fgwb9mzJ5fv3oF4zTTbEF48ewUts/OIFxeAr2Tz3nX7vym6/w0jp6GDcYN
sQea/4rYRYDo4ha69yF+DK6PwDHQTjiCRx/f2jTNZBO/boiAsYlfu4mPE1HbxF+9RSZtbstfE+9B
H6OPHX9tvJfP6Q02/LOdW956vUUsgvg3IH+MQh48zQ2gWYPOpRuPDNAUJFhh0+UQAJp/WMkZBVAb
W55rfRnE+ZAAW8Pnyzl8/Bim3BBmw3JR46+B0uss38fyhLlk9PdMQOwYaMSTnyPYTj25anQCytB3
YSL5IsyBrqaDl+zkffzYEuH+8M037j+++y7tPP75n/6xahjh2QkNkBtjbuv9suclC1rOFiR71En8
v3ieA3ueSYu0wiBplB4lDImKSSh5vZbby3kb5ndGbmiwvN/MntE0VsyM8aDYVTSoFHPqbD7dUrMt
cjewaOBIw0qXWrDowyuShMvhSVrMw2Vxbw+HTTC7gslfmzaO2autWnoR/qTPVZ8X+5KLVnYt7kFi
yRLP6bSdWqQMToZTCQMw8MVgptxtnsPXM0B7DbP3fX+rAl9rGGnA3NY9kDaWWRu15/mKC4MWwk+F
QekYRHFtcKUfJ85b8J4dAM6lppS9eZ5ZQxVgsYxnDeRPmRvFlj5v65EBq8h7TpnCh+Cs3uClE2I8
kDcMqPGgCSQx4JUGEbW+QfIju3q000FxzxwpZfdj3WQD+vywbMbRZh1Q+YYloGsOs5eLHF/0vP5+
ieoUz7m0dseLZmTOQTv4KI+bOvjEddPdusC3osO31aSMtj7ka1iMj6+kjfiG5f9/9j/+Dubv/9Pt
xwnmCFn++YnH3QjddvDjONJ730Pf+57e+Q67yK877wjHXR/PEKLhQwSaHkXOoI8H2lWTpBE/TzLH
Rge4imwhcseWHlcpo5Az4uMiddD3qDTCjw+FxNEv5Q0QWYP+Fq/DX70rhr6WJzT7p8WrXWjPoMNo
+d6kC80vruSL/crFYe+yNLGTzAoOE9pbizSF4YvMYfdFpgVyIZEnn3sePUUXw0DhU5QQyBdKDMSM
HUUOhX4Ywm6/DxCZ8vP4tCcccew3R6WLJQA36aIx5rbuGXt2RwqD1jEIZyfaMehC77pQ2uqotZfZ
cwSpOYKJ91KM8gV7poYIVPYMPN5IfM+ahpbiQvO2flEUdLhs9y7auuFA3nCHyXWUOT0u2LSl2ant
DlfcFNpGbR11xNDRVS6KdENXF/nckSIf0j1URU7QHQHvLgBkHmPBklH+Bv47rTsTi5wLs8FRIpzk
JodW4GuMua1H9noeFAa/+voPsA3n8MPPv0SOekp4AOMcd9BUCoxkOj4QSV1kzlRoAxD2HFlzCMjs
2RNbdtjHtz4XB5EZNDFfYrugrBiZNXOxUIuCzu7lcSkWLoqD/HOKgiAUrBlTYTCxZ3A1a06HgN1/
y+hOTJ19UyGNLKZWZ7Z7wI4r1sz5FQqydMFy+yBTqWnG3h6VJSNZ3QLKPXhmyUgyUsGSI4aSDTF4
yqkeer46DvHPp6rsTSy5FfgaY27rAbHnJXta6xgsbXW92upoBCwNgI3b51m23S6xZ2J3xp4tw4Ez
gWkbL51qloTGjJFD34uGFGLMYOE9oPfoDoqDaf4d5u5BPLTX7VaaVIqbdM5BrR/vyrZop2FDmSVD
lfoGlTZu7NhdlJqyJMPxlJEUZk87CLQCH3dWSvCQK1gyLlgykJ6MKDkXXqaL3MYG1wp8DZjbesDS
RtkxSG9s6hi0EVaUOmZRolTx58p/1wWKqQsE0iECc7xFMj2hdqHJPDvTWLVr0MLbCZjQpaGhHMiD
GfzAVWE+i+KgTfAopQGowpHKkCSoQVbBMAMxOlcPPkUD4zSJugivx2ooANrfpmC8cJhc2YUIHaYi
qGUpq4tlp8eH2bT4k7nbkkLsKUOZvMlcgGWdOV4MSVoiiYkKtRbRSRKUW4x8cq3A16SMth7+61sW
BuP2F16dn6fC4GcvziCyMnj1x/9y174HRyLGfg9jCL6nqa7x33GefMdUjuZ4RtgGiMhNhI6Kga6L
Z1BPMgd4oGmxPRUHXZYjtKhHEgVusmShXudCyjAvdJIz5HP2M3otDIqcIb+3cysFQChyloloqmd5
kqJfyoVOU1YK2SLJF8WYrFTwc9qZpwl9Y9xhaNAQUteeWA55wglNEeFJ5jMHDplswSFJECjBxPU+
zNMUdyg+wHbAcRzDZp7xy88+cRdnn+LP//t/sg2Odjlkg/zu3/79AICbdNEYc1uPiD0fs9URe6ax
QzV7jjcJi8+BSBF8CISsS81Z1rNmbpBfF1GGwJYSR2KnmL3O6vm9AJUIHGdKaKGw6hzEmkVbyBJq
dnFRvMM6I9ryLNT6htWwWVQWrxJK/t0sX2Bh87MxT3DFWSJoMaeYfMmsP6PLIfaFL5k6LSl4iFly
546yZJKY9le3s8E1UG6Mua1HyJ7dwlZ3M3vuYJomj5EnG3uOi7sGrUAYwbqL7LCngqB2DvYRPQZP
nYOIA3rg7kFXdAEqO96UjLn6HBcYlX2jFgIhFwGlG5CKlggLnT0xZse2OLHIlRkYbiU9DsTxscvZ
0eLm0Htl19y5t9cMC2HJFhIVkC5a2txCLdQ8CDUewCHQIpbs+y5e8PqjLPn7H37k6TWNJTfG3NYT
ZM9uYat7E3t2XtwExJ5tm54GgRIr5DZjDeVRjRVklBWzZ8hh+lIcrOJCwTTnC7XWyQ1yR6FbTFbJ
rHqpSx+y7DINr/gZWT82xow5MU8bYiqtnHcD3AVZatlcbKTiHk+q7nQgrs7i4+498kxPNAossmRq
8rmJJdvr0lhyY8xttdf9Rva8IZSJ7HmmEuC29zBOlIzEmRtkscN5ogt8Fx+KdBB6H5l0pKtdfHCI
9z1o5gax38iuuUlF9eSh0JWX98KuS9acG06s6UQbTaDMxdeQfrHJQRFehJjZ8lJfrlizDFi1oh3Z
4/jiwxa4yIzp53jrPAT5HUEKpfNm6EP8wrCJG4uRrW+RuUMIF1fXwceLHbHk+DXYff03rrHkthpj
bssttvurtro19kzODbJwEfzYnMGUueH9DNDN5NwAznvW3I3CWhdsCCw1dEByVUgjhurAhRviIv78
CzAWDQWDRrmB/P9cWe85kCaMmW2r04Nv9LPQ9GNwmm2h/2dN29wiSW9OgwIwOzCuNcJThgrkUVOS
LUJ6MkkZ8fo1zdTFw9nJHGJ/7cIcYTicbTe45rhoLLmtxpjbcgs2Ft/3B6fAAXumPOc///RX2Jw9
T+yZqls4z3672RA0+zEQwQRq4/aRK7PuDNTeHR+L0MINIqRBE3uWdm7HLDoC2iagNpNICze1fJOL
g3Xl+PWb3NAibDl+voufN1eGBwlhLqZO0eTrNK0k52cQY/ac5kb5FHvIkafSiq2MmgeeBiSrG32e
RjlNHJFKvu74cQTmWbRk5BhOFwJdmMhmGCBewPq+C733eDXFi1m838zxNmBiyfR3/rff/qY5Ltpq
jLmtlasyHITUr7Jn8z1Tw4OfRm6AoEYIahumoA0K25HGFOD4yvjQiFC1S+9RdecgucM7nW13ja6Y
5gGWY4zJOyzuCP44MWdErLRoVObshCWf0/dgxar58xcgP/8iJ+Cxdq2OjXpqC+VRI/+NyN5k0c5B
GkXIbaENI6CWOMtLdryD8Fzwo+Col5uBg6TexpfcQLmtxpjbqs6HpXOD/onsjtnz2de/g4vv/8iP
E3sepj30MHDe86bv/TgSCYUUihSZJLd1k+YsAUTQRcbaQxD3hjMXR2TJNEvU9GRpxdbWb3eTvgyd
y7NXlTgzpuV2bBohxZY/CchHc2Zk5iz/z2xZXBZa3LRJ3tRWTRpyxFoZ2Nr1MkNwDtxO7WTeIucl
h82GGqzxJEz48ne/d//3f/2vxpLbaoy5rXdXN5bODVd0DUZQToyP2DO1Dae8Zwrd4bZumDsNRSK7
WASsSUKFkCNFyWqGyqDj2WetyzQEVmJFzY9M7BU1SAgPHRvaGn0uQUIo7FhChc4xfS2Qs0M1a9OZ
mX2TbnyJmitdZSWrH9saTTj/wkv2BXDRz0+sqVOovWrt3E5N16N4DGg3QY4W0uaJJZNW31hyWw2Y
27ozeWNZHHTFVBBLrBs2jrfrpbUO1FpHORBDVRxkfZaBjgeNgt+bvMHFQU2ts6IgSwvgcuYz2+dA
ADfZ26Cw16lMgVo0TKBdBtqzZJIaUcBC8VEkFpItgjSMyIRqLe55Le7RYNu+H9KEamsUocyRuIvg
4h5xZxpW4N6QcdGGorbVgLmtX8WeLXODPiagIcBxOi3l+Ve/4Wkp2xcvGaAimwwEWOTdJQAjLy8B
2kx5xF5yN4iJhhCoYYPGLXHgUGTckjUhs/BSyJDFiqacDQJcZr6gXXqZSYOw4gsJUkoeZQu55+49
Dfo3hn6NHGUKuyJFbrR8C47mnGdizFMACXnqQQLsaSqMhQ6R9m6hQ6TJkzbfWHJbDZjb+qDsec1a
dwonyVpXFgd7LQ4SsFHmcwQ0AuXRaxENbACqjbMigBQGex3Q2qxB5A1m0EhJbpdF23QCYigaTKSI
iEWKnBb3uE3cXdvQWQk/UlCOfwcguTLCaBpzWdyjkKf9NLMFjop7pQVu2SjSWHJb7/zea4egrVvR
59tY655/BcNmTNY6Kg76zRbGMRJQKgZSPN04+gHIXhd8F+8j5/TQAdvqHBUI4//ZFsfZz44bVUDb
r/kr+WOkwp93SAPAvRT+sGozQerTDgDxWuC0NTt+TFOmOZuZcj88t07HP4IlCU9lPE178xQ2RLq5
h6PFPX81HVjgbDexVtyzw9jOpLYaY27rvbDnEmiMPVukaATlujgYIvccBi4O9s5RrCjrslsv8gbr
tpGZDuSIoLZusdlR2DyHA/HkD5IZQCUOzFGinIOMmIqFWsirPicNIi4yb9GRXUCewsJt497tA/uV
YYzQO3puLQft6IOp7/qjxT3S1pcWOHdDo0gD5bYaY27rg587FCkat+zpc3/45hv4j+++cy+encL2
2Rmc//WvFBgBbrv11KTSo/fnY8TarvN9RPCN9343B+94ggoQU/aRQkd6SpY730VA5mYSB8ht4HSl
cMTiHV0xEJyxefKdoYEhN5poezYx5siCiSVD/H9kxcSo3ciJb4Hc10BFvG7AkQeIY7yebHA/TTxR
pI8seR+/myaK/ObzTymEyJGM0yxwbTXG3Na9UjfK/9xUHCQRQOYNPqcQ5kD6bKSu0oyhrd3jHMix
MVFEJikdETZl0gdwToXmWJAOLCyamC8xYAmmN9sdauMKCMuWgalifwPVkD2lwzlxWrDGHeL/I0v2
jpmx64B05LkLXiyArbjXVgPmth4gOL+xOFh2Dpr3meSNQd0brPH2Pbc5B5I34g2lKDii5m6QxU4/
3qMCMBroFiOkwJkPOQK2Bw63Tz5kAvnAKXiRFIvjggCZmkoicZ/j32Zui3hZmES22BzPt7Dn24p7
bTUpo637idBHioP0j3UOrskb+64DHnMyDP5ymqiDEOZ59tM809gSoLR+EipY1qBiX0DJxYj0ljOj
kX8LhS8r0wBuA5TfTH+Vp2+gUl6gYSbxgdARi3fUaz2HgX5S/CxlW8zocRg6DPtdGoRKssWff/or
/7CbZIu1XURbbTXG3NbHvcIfKQ66onNwTd4guxk1p1yfn89DZM5dZNLEoNmiFhGaxjbFjzl/g4uD
zKT92HmboBJG4FZqu+Eo8Z5ieSPWHYRxT+ShZpmi71iy6NmTDCnbgjzYePqsGoRqbN+9ee5eA+W2
GjC39XjkDWpOIf2ZAPry8pIBmiQO6hyECKAM0NTM4WAeuoGHxFIeMvmhuWEFJagfVP4gEA5ziPcd
gzqBO4ExgXJk4Tx/L+xFshBAHhiQSUcenj1vskVbDZjberwAfaxzsAQ8a+02gCYGTdruaQRLODkJ
BJ5sryOAjux2Q6AKgcGVMzlIj6YYTr11/UCEe+LRTtR9SKDeQQLj4OL3juNMGjIVIo8BsrVS28Vk
bTfQinttNWBu61HLGwbQJGVw3gSBZQRNAk8G6e0p2dbmq/Ga2bSLHHrbeeoxZMBON+fkMUJnZd5c
zIufIzAmdkxfcfbihAuRNwFyky3aasDc1pOVNyqA7iX8hwOSImgSeBJIE7MlQB36noGaQJZ6V/rI
qiPYznYLAs7cDEJt4PS1427HyXcExgz4w3Ma7xTeBMhNtmirrbaeBkIjT7Sm3GfNUXbwz//0j9w8
EoHR/7ff/kZas+PtD998kzKYTz/9rH9x+unw8vSEb/Gx4dMXzzfPf/P1wW1z9nxDnxtOTtPXnn7+
5fCbzz/ln/X3//3/SZO26ffR76Xfr38HrNzaaquttp42QK+BNN0UUNONgJYAe+1mIEy3Lz/7tFeQ
PwDjBshttdVWW7cA6DWQpvslUN/2Rt/3FmDcALmtttpqqwTotVsJ0uWNgNZuNz12ExgvLghttXUv
Viv+tXUvVuHgSAU2KxQWVruDJDe72Vo8Vn29FfOKAmRZ1GuFvbbaaqutd2HRS8njNrfl9+jPbaut
+0tU2iFo66GB9Uomx5u+p8VvttVWW2211VZb776axtxWW2211YC5rbbaaqutBsxttdVWWw2Y22qr
rbbaasDcVltttdWAua222mqrrQbMbbXVVlsNmNtqq6222vrQ6/8XYABC+lsbfsLsqwAAAABJRU5E
rkJggg==" transform="matrix(0.24 0 0 0.24 28.4971 38.3643)">
</image>
<g>
<path fill="#FFFFFF" d="M73.043,52.8c0,0-6.48-14.187-19.968-10.958c-13.486,3.23-41.652,30.792,17.853,65.083H70.88
c59.504-34.291,31.34-61.852,17.853-65.083C75.245,38.613,68.766,52.8,68.766,52.8H73.043z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

4
buildtools/appimage/wrapper Executable file
View file

@ -0,0 +1,4 @@
#!/bin/sh
# For some reason this runs from the usr subdirectory
exec ../love "$@"

65
buildtools/love-js/love-js.sh Executable file
View file

@ -0,0 +1,65 @@
help="love-js.sh: \n\
A tool for asembling love.js projects without relying on npm / node. \n\
For the full project please see https://github.com/Davidobot/love.js \n\
\n\
usage: \n\
./love-js.sh [directory-name] [project-name] [version] \n\
\n\
eg: \n\
./love-js.sh ../../releases/ project 0.1.0 \n\
./tools/love-js/love-js.sh releases project 0.1.0\n\
\n\
"
if [ "$#" -lt "3" ]
then
echo "ERROR! love-js.sh expects three arguments."
echo -e $help
exit 1
fi
release_dir=$1
name=$2
version=$3
## confirm that $release_dir/$name-$version.love exists
if [ ! -f $release_dir/$name-$version.love ]; then
echo "love file not found!"
echo $release_dir/$name-$version.love
exit 1
fi
release="compat"
canvas_colour="197, 204, 184"
page_colour=$canvas_colour
text_colour="102, 96, 146"
initial_memory=$(du -b $release_dir/$name-$version.love | awk '{print $1}')
title=$(echo $name-$version | sed -r 's/\<./\U&/g' | sed -r 's/-/\ /g')
# echo $title " " $canvas_colour " " $text_colour " " $initial_memory
call_dir=$(pwd)
cd "$(dirname "$0")"
mkdir -p $name-$version && mkdir -p $name-$version/theme
cat src/index.html | \
sed "s/{{title}}/${title}/g" | \
sed "s/{{initial-memory}}/${initial_memory}/g" | \
sed "s/{{canvas-colour}}/${canvas_colour}/g" | \
sed "s/{{text-colour}}/${text_colour}/g" > \
$name-$version/index.html
cat src/love.css | \
sed "s/{{page-colour}}/${page_colour}/g" > \
$name-$version/theme/love.css
cp src/consolewrapper.js $name-$version
cp src/game.js $name-$version
cp $release_dir/$name-$version.love $name-$version/game.data
cp src/$release/love.js $name-$version
cp src/$release/love.wasm $name-$version
cp src/release/love.worker.js $name-$version
zip -r -q tmp $name-$version
mv tmp.zip $call_dir/$name-$version-web.zip
rm -rf $name-$version

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -0,0 +1,99 @@
var newConsole = (function(oldConsole)
{
return {
log : function()
{
var data = [];
for (var _i = 0; _i < arguments.length; _i++) {
data[_i] = arguments[_i];
}
if(data.length == 1) //Start looking for api's (And dont show anything)
{
if(typeof(data[0]) == "string" && data[0].indexOf("callJavascriptFunction") != -1) //Contains function
{
// oldConsole.log(data[0]);
try
{
return eval(data[0].split("callJavascriptFunction ")[1]);
}
catch(e)
{
oldConsole.error("Something went wrong with your callJS: \nCode: " + data[0].split("callJavascriptFunction ")[1] + "\nError: '" + e.message + "'");
return null;
}
}
else
{
oldConsole.log(data[0]);
return null;
}
}
else
oldConsole.log(data[0], data.splice(1));
return null;
},
warn : function()
{
var data = [];
for (var _i = 0; _i < arguments.length; _i++) {
data[_i] = arguments[_i];
}
if(data.length == 1)
oldConsole.warn(data[0]);
else
oldConsole.warn(data[0], data.splice(1));
},
error : function()
{
var data = [];
for (var _i = 0; _i < arguments.length; _i++) {
data[_i] = arguments[_i];
}
if(data.length == 1)
oldConsole.error(data[0]);
else
oldConsole.error(data[0], data.splice(1));
},
info : function()
{
var data = [];
for (var _i = 0; _i < arguments.length; _i++) {
data[_i] = arguments[_i];
}
if(data.length == 1)
oldConsole.info(data[0]);
else
oldConsole.info(data[0], data.splice(1));
},
clear : function()
{
oldConsole.clear()
},
assert : function()
{
for (var _i = 0; _i < arguments.length; _i++) {
data[_i] = arguments[_i];
}
oldConsole.assert(data[0], data[1], data.splice(2));
},
group : function()
{
for (var _i = 0; _i < arguments.length; _i++) {
data[_i] = arguments[_i];
}
oldConsole.group(data[0], data.splice(1));
},
groupCollapsed : function()
{
for (var _i = 0; _i < arguments.length; _i++) {
data[_i] = arguments[_i];
}
oldConsole.groupCollapsed(data[0], data.splice(1));
},
groupEnd : function()
{
oldConsole.groupEnd()
}
}
}(window.console));
window.console = newConsole;

View file

@ -0,0 +1,289 @@
var Module;
if (typeof Module === 'undefined') Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()');
if (!Module.expectedDataFileDownloads) {
Module.expectedDataFileDownloads = 0;
Module.finishedDataFileDownloads = 0;
}
Module.expectedDataFileDownloads++;
(function() {
var loadPackage = function(metadata) {
var PACKAGE_PATH;
if (typeof window === 'object') {
PACKAGE_PATH = window['encodeURIComponent'](window.location.pathname.toString().substring(0, window.location.pathname.toString().lastIndexOf('/')) + '/');
} else if (typeof location !== 'undefined') {
// worker
PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf('/')) + '/');
} else {
throw 'using preloaded data can only be done on a web page or in a web worker';
}
var PACKAGE_NAME = 'game.data';
var REMOTE_PACKAGE_BASE = 'game.data';
if (typeof Module['locateFilePackage'] === 'function' && !Module['locateFile']) {
Module['locateFile'] = Module['locateFilePackage'];
Module.printErr('warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)');
}
var REMOTE_PACKAGE_NAME = typeof Module['locateFile'] === 'function' ?
Module['locateFile'](REMOTE_PACKAGE_BASE) :
((Module['filePackagePrefixURL'] || '') + REMOTE_PACKAGE_BASE);
var REMOTE_PACKAGE_SIZE = metadata.remote_package_size;
var PACKAGE_UUID = metadata.package_uuid;
function fetchRemotePackage(packageName, packageSize, callback, errback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', packageName, true);
xhr.responseType = 'arraybuffer';
xhr.onprogress = function(event) {
var url = packageName;
var size = packageSize;
if (event.total) size = event.total;
if (event.loaded) {
if (!xhr.addedTotal) {
xhr.addedTotal = true;
if (!Module.dataFileDownloads) Module.dataFileDownloads = {};
Module.dataFileDownloads[url] = {
loaded: event.loaded,
total: size
};
} else {
Module.dataFileDownloads[url].loaded = event.loaded;
}
var total = 0;
var loaded = 0;
var num = 0;
for (var download in Module.dataFileDownloads) {
var data = Module.dataFileDownloads[download];
total += data.total;
loaded += data.loaded;
num++;
}
total = Math.ceil(total * Module.expectedDataFileDownloads/num);
if (Module['setStatus']) Module['setStatus']('Downloading data... (' + loaded + '/' + total + ')');
} else if (!Module.dataFileDownloads) {
if (Module['setStatus']) Module['setStatus']('Downloading data...');
}
};
xhr.onerror = function(event) {
throw new Error("NetworkError for: " + packageName);
}
xhr.onload = function(event) {
if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
var packageData = xhr.response;
callback(packageData);
} else {
throw new Error(xhr.statusText + " : " + xhr.responseURL);
}
};
xhr.send(null);
};
function handleError(error) {
console.error('package error:', error);
};
function runWithFS() {
function assert(check, msg) {
if (!check) throw msg + new Error().stack;
}
{{{create_file_paths}}}
function DataRequest(start, end, crunched, audio) {
this.start = start;
this.end = end;
this.crunched = crunched;
this.audio = audio;
}
DataRequest.prototype = {
requests: {},
open: function(mode, name) {
this.name = name;
this.requests[name] = this;
Module['addRunDependency']('fp ' + this.name);
},
send: function() {},
onload: function() {
var byteArray = this.byteArray.subarray(this.start, this.end);
this.finish(byteArray);
},
finish: function(byteArray) {
var that = this;
Module['FS_createDataFile'](this.name, null, byteArray, true, true, true); // canOwn this data in the filesystem, it is a slide into the heap that will never change
Module['removeRunDependency']('fp ' + that.name);
this.requests[this.name] = null;
}
};
var files = metadata.files;
for (i = 0; i < files.length; ++i) {
new DataRequest(files[i].start, files[i].end, files[i].crunched, files[i].audio).open('GET', files[i].filename);
}
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
var IDB_RO = "readonly";
var IDB_RW = "readwrite";
var DB_NAME = "EM_PRELOAD_CACHE";
var DB_VERSION = 1;
var METADATA_STORE_NAME = 'METADATA';
var PACKAGE_STORE_NAME = 'PACKAGES';
function openDatabase(callback, errback) {
try {
var openRequest = indexedDB.open(DB_NAME, DB_VERSION);
} catch (e) {
return errback(e);
}
openRequest.onupgradeneeded = function(event) {
var db = event.target.result;
if(db.objectStoreNames.contains(PACKAGE_STORE_NAME)) {
db.deleteObjectStore(PACKAGE_STORE_NAME);
}
var packages = db.createObjectStore(PACKAGE_STORE_NAME);
if(db.objectStoreNames.contains(METADATA_STORE_NAME)) {
db.deleteObjectStore(METADATA_STORE_NAME);
}
var metadata = db.createObjectStore(METADATA_STORE_NAME);
};
openRequest.onsuccess = function(event) {
var db = event.target.result;
callback(db);
};
openRequest.onerror = function(error) {
errback(error);
};
};
/* Check if there's a cached package, and if so whether it's the latest available */
function checkCachedPackage(db, packageName, callback, errback) {
var transaction = db.transaction([METADATA_STORE_NAME], IDB_RO);
var metadata = transaction.objectStore(METADATA_STORE_NAME);
var getRequest = metadata.get("metadata/" + packageName);
getRequest.onsuccess = function(event) {
var result = event.target.result;
if (!result) {
return callback(false);
} else {
return callback(PACKAGE_UUID === result.uuid);
}
};
getRequest.onerror = function(error) {
errback(error);
};
};
function fetchCachedPackage(db, packageName, callback, errback) {
var transaction = db.transaction([PACKAGE_STORE_NAME], IDB_RO);
var packages = transaction.objectStore(PACKAGE_STORE_NAME);
var getRequest = packages.get("package/" + packageName);
getRequest.onsuccess = function(event) {
var result = event.target.result;
callback(result);
};
getRequest.onerror = function(error) {
errback(error);
};
};
function cacheRemotePackage(db, packageName, packageData, packageMeta, callback, errback) {
var transaction_packages = db.transaction([PACKAGE_STORE_NAME], IDB_RW);
var packages = transaction_packages.objectStore(PACKAGE_STORE_NAME);
var putPackageRequest = packages.put(packageData, "package/" + packageName);
putPackageRequest.onsuccess = function(event) {
var transaction_metadata = db.transaction([METADATA_STORE_NAME], IDB_RW);
var metadata = transaction_metadata.objectStore(METADATA_STORE_NAME);
var putMetadataRequest = metadata.put(packageMeta, "metadata/" + packageName);
putMetadataRequest.onsuccess = function(event) {
callback(packageData);
};
putMetadataRequest.onerror = function(error) {
errback(error);
};
};
putPackageRequest.onerror = function(error) {
errback(error);
};
};
function processPackageData(arrayBuffer) {
Module.finishedDataFileDownloads++;
assert(arrayBuffer, 'Loading data file failed.');
assert(arrayBuffer instanceof ArrayBuffer, 'bad input to processPackageData');
var byteArray = new Uint8Array(arrayBuffer);
var curr;
// copy the entire loaded file into a spot in the heap. Files will refer to slices in that. They cannot be freed though
// (we may be allocating before malloc is ready, during startup).
if (Module['SPLIT_MEMORY']) Module.printErr('warning: you should run the file packager with --no-heap-copy when SPLIT_MEMORY is used, otherwise copying into the heap may fail due to the splitting');
var ptr = Module['getMemory'](byteArray.length);
Module['HEAPU8'].set(byteArray, ptr);
DataRequest.prototype.byteArray = Module['HEAPU8'].subarray(ptr, ptr+byteArray.length);
var files = metadata.files;
for (i = 0; i < files.length; ++i) {
DataRequest.prototype.requests[files[i].filename].onload();
}
Module['removeRunDependency']('datafile_game.data');
};
Module['addRunDependency']('datafile_game.data');
if (!Module.preloadResults) Module.preloadResults = {};
function preloadFallback(error) {
console.error(error);
console.error('falling back to default preload behavior');
fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE, processPackageData, handleError);
};
openDatabase(
function(db) {
checkCachedPackage(db, PACKAGE_PATH + PACKAGE_NAME,
function(useCached) {
Module.preloadResults[PACKAGE_NAME] = {fromCache: useCached};
if (useCached) {
console.info('loading ' + PACKAGE_NAME + ' from cache');
fetchCachedPackage(db, PACKAGE_PATH + PACKAGE_NAME, processPackageData, preloadFallback);
} else {
console.info('loading ' + PACKAGE_NAME + ' from remote');
fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE,
function(packageData) {
cacheRemotePackage(db, PACKAGE_PATH + PACKAGE_NAME, packageData, {uuid:PACKAGE_UUID}, processPackageData,
function(error) {
console.error(error);
processPackageData(packageData);
});
}
, preloadFallback);
}
}
, preloadFallback);
}
, preloadFallback);
if (Module['setStatus']) Module['setStatus']('Downloading...');
}
if (Module['calledRun']) {
runWithFS();
} else {
if (!Module['preRun']) Module['preRun'] = [];
Module["preRun"].push(runWithFS); // FS is not initialized yet, wait for it
}
}
loadPackage({{{metadata}}});
})();

View file

@ -0,0 +1,125 @@
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{{title}}</title>
<script src = "consolewrapper.js"></script>
<!-- Load custom style sheet -->
<link rel="stylesheet" type="text/css" href="theme/love.css">
</head>
<body>
<center>
<div>
<canvas id="canvas" oncontextmenu="event.preventDefault()"></canvas>
<canvas id="loadingCanvas" oncontextmenu="event.preventDefault()" width="800" height="600"></canvas>
</div>
</center>
<script type='text/javascript'>
function goFullScreen(){
var canvas = document.getElementById("canvas");
if(canvas.requestFullScreen)
canvas.requestFullScreen();
else if(canvas.webkitRequestFullScreen)
canvas.webkitRequestFullScreen();
else if(canvas.mozRequestFullScreen)
canvas.mozRequestFullScreen();
}
function closeFullScreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) { /* Safari */
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) { /* IE11 */
document.msExitFullscreen();
}
}
function toggleFullScreen(){
if((window.fullScreen) || /* firefox */
(window.innerWidth == screen.width && /* everything else */
window.innerHeight == screen.height)) {
closeFullScreen();
} else {
goFullScreen();
}
}
var loadingContext = document.getElementById('loadingCanvas').getContext('2d');
function drawLoadingText(text) {
var canvas = loadingContext.canvas;
//
loadingContext.fillStyle = "rgb({{canvas-colour}})";
loadingContext.fillRect(0, 0, canvas.scrollWidth, canvas.scrollHeight);
loadingContext.font = '2em arial';
loadingContext.textAlign = 'center'
//
loadingContext.fillStyle = "rgb({{text-colour}})";
loadingContext.fillText(text, canvas.scrollWidth / 2, canvas.scrollHeight / 2);
//
loadingContext.fillText("{{title}}!", canvas.scrollWidth / 2, canvas.scrollHeight / 4);
loadingContext.fillText("Powered By LÖVE.", canvas.scrollWidth / 2, canvas.scrollHeight / 4 * 3);
}
window.onload = function () { window.focus(); };
window.onclick = function () { window.focus(); };
window.addEventListener("keydown", function(e) {
// space and arrow keys
if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {
e.preventDefault();
}
}, false);
var Module = {
arguments: ["./game.love","web"],
INITIAL_MEMORY: {{initial-memory}},
printErr: console.error.bind(console),
canvas: (function() {
var canvas = document.getElementById('canvas');
// As a default initial behavior, pop up an alert when webgl context is lost. To make your
// application robust, you may want to override this behavior before shipping!
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
return canvas;
})(),
setStatus: function(text) {
if (text) {
drawLoadingText(text);
} else if (Module.remainingDependencies === 0) {
document.getElementById('loadingCanvas').style.display = 'none';
document.getElementById('canvas').style.display = 'block';
}
},
totalDependencies: 0,
remainingDependencies: 0,
monitorRunDependencies: function(left) {
this.remainingDependencies = left;
this.totalDependencies = Math.max(this.totalDependencies, left);
Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
Module.setStatus('Downloading...');
window.onerror = function(event) {
// TODO: do not warn on ok events like simulating an infinite loop or exitStatus
Module.setStatus('Exception thrown, see JavaScript console');
Module.setStatus = function(text) {
if (text) Module.printErr('[post-exception status] ' + text);
};
};
var applicationLoad = function(e) {
Love(Module);
}
</script>
<script type="text/javascript" src="game.js"></script>
<script async type="text/javascript" src="love.js" onload="applicationLoad(this)"></script>
<!-- <footer> -->
<!-- <button onclick="goFullScreen();">Go Fullscreen</button> -->
<!-- </footer> -->
</body>
</html>

View file

@ -0,0 +1,48 @@
* {
box-sizing: border-box;
}
h1 {
font-family: arial;
color: rgb( 11, 86, 117 );
}
body {
background-repeat: no-repeat;
font-family: arial;
margin: 0;
padding: none;
background-color: rgb({{page-colour}});
color: rgb( 28, 78, 104 );
}
footer {
font-family: arial;
font-size: 12px;
padding-left: 10px;
padding-bottom: 10px;
position:absolute;
bottom: 0;
width: 100%;
}
/* Links */
a {
text-decoration: none;
}
a:link {
color: rgb( 233, 73, 154 );
}
a:visited {
color: rgb( 110, 30, 71 );
}
a:hover {
color: rgb( 252, 207, 230 );
}
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */
#canvas {
padding-right: 0;
display: none;
border: 0px none;
}

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -0,0 +1 @@
var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["DYNAMIC_BASE"]=e.data.DYNAMIC_BASE;Module["DYNAMICTOP_PTR"]=e.data.DYNAMICTOP_PTR;Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Love(Module).then(function(instance){Module=instance;postMessage({"cmd":"loaded"})})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module["registerPthreadPtr"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["dynCall"]("ii",e.data.start_routine,[e.data.arg]);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){Atomics.store(Module["HEAPU32"],threadInfoStruct+4>>2,ex instanceof Module["ExitStatus"]?ex.status:-2);Atomics.store(Module["HEAPU32"],threadInfoStruct+0>>2,1);Module["_emscripten_futex_wake"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module["ExitStatus"]))throw ex}}}else if(e.data.cmd==="cancel"){if(threadInfoStruct){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(threadInfoStruct){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex.stack)err(ex.stack);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}

View file

@ -756,7 +756,7 @@ cd "$RELEASE_DIR"
## MacOS ## ## MacOS ##
if [[ ! -f "$CACHE_DIR/love-$LOVE_VERSION-macos.zip" ]]; then if [[ ! -f "$CACHE_DIR/love-$LOVE_VERSION-macos.zip" ]]; then
curl -L -C - -o $CACHE_DIR/love-$LOVE_VERSION-macos.zip https://github.com/love2d/love/releases/download/$LOVE_VERSION/love-$LOVE_VERSION-macos.zip curl -L -C - -o $CACHE_DIR/love-$LOVE_VERSION-macos.zip https://bitbucket.org/rude/love/downloads/love-$LOVE_VERSION-macos.zip
fi fi
unzip -qq "$CACHE_DIR/love-$LOVE_VERSION-macos.zip" unzip -qq "$CACHE_DIR/love-$LOVE_VERSION-macos.zip"
@ -964,7 +964,7 @@ cd "$RELEASE_DIR"
if [[ $X32 == true ]]; then if [[ $X32 == true ]]; then
if [[ ! -f "$CACHE_DIR/love-$LOVE_VERSION-win32.zip" ]]; then if [[ ! -f "$CACHE_DIR/love-$LOVE_VERSION-win32.zip" ]]; then
curl -L -C - -o "$CACHE_DIR/love-$LOVE_VERSION-win32.zip" "https://github.com/love2d/love/releases/download/$LOVE_VERSION/love-$LOVE_VERSION-win32.zip" curl -L -C - -o "$CACHE_DIR/love-$LOVE_VERSION-win32.zip" "https://bitbucket.org/rude/love/downloads/love-$LOVE_VERSION-win32.zip"
fi fi
unzip -qq "$CACHE_DIR/love-$LOVE_VERSION-win32.zip" unzip -qq "$CACHE_DIR/love-$LOVE_VERSION-win32.zip"
@ -995,9 +995,9 @@ if [[ $X64 == true ]] && compare_version "$LOVE_VERSION" '>=' '0.8.0'; then
if [[ ! -f "$CACHE_DIR/love-$LOVE_VERSION-win64.zip" ]]; then if [[ ! -f "$CACHE_DIR/love-$LOVE_VERSION-win64.zip" ]]; then
if compare_version "$LOVE_VERSION" '>=' '0.9.0'; then if compare_version "$LOVE_VERSION" '>=' '0.9.0'; then
curl -L -C - -o "$CACHE_DIR/love-$LOVE_VERSION-win64.zip" "https://github.com/love2d/love/releases/download/$LOVE_VERSION/love-$LOVE_VERSION-win64.zip" curl -L -C - -o "$CACHE_DIR/love-$LOVE_VERSION-win64.zip" "https://bitbucket.org/rude/love/downloads/love-$LOVE_VERSION-win64.zip"
else else
curl -L -C - -o "$CACHE_DIR/love-$LOVE_VERSION-win-x64.zip" "https://github.com/love2d/love/releases/download/$LOVE_VERSION/love-$LOVE_VERSION-win64.zip" curl -L -C - -o "$CACHE_DIR/love-$LOVE_VERSION-win-x64.zip" "https://bitbucket.org/rude/love/downloads/love-$LOVE_VERSION-win-x64.zip"
fi fi
fi fi

File diff suppressed because it is too large Load diff

View file

@ -26,7 +26,7 @@ package.preload["fennel.repl"] = package.preload["fennel.repl"] or function(...)
if (_0_0 == "Lua Compile") then if (_0_0 == "Lua Compile") then
return ("Bad code generated - likely a bug with the compiler:\n" .. "--- Generated Lua Start ---\n" .. lua_source .. "--- Generated Lua End ---\n") return ("Bad code generated - likely a bug with the compiler:\n" .. "--- Generated Lua Start ---\n" .. lua_source .. "--- Generated Lua End ---\n")
elseif (_0_0 == "Runtime") then elseif (_0_0 == "Runtime") then
return (compiler.traceback(err, 4) .. "\n") return (compiler.traceback(tostring(err), 4) .. "\n")
else else
local _ = _0_0 local _ = _0_0
return ("%s error: %s\n"):format(errtype, tostring(err)) return ("%s error: %s\n"):format(errtype, tostring(err))
@ -54,9 +54,21 @@ package.preload["fennel.repl"] = package.preload["fennel.repl"] or function(...)
local function command_3f(input) local function command_3f(input)
return input:match("^%s*,") return input:match("^%s*,")
end end
commands.help = function(_, _0, on_values) local function command_docs()
return on_values({"Welcome to Fennel.\nThis is the REPL where you can enter code to be evaluated.\nYou can also run these repl commands:\n\n ,help - show this message\n ,reload module-name - reload the specified module\n ,reset - erase all repl-local scope\n ,exit - leave the repl\n\nUse (doc something) to see descriptions for individual macros and special forms.\n\nFor more information about the language, see https://fennel-lang.org/reference"}) local _0_
do
local tbl_0_ = {}
for name, f in pairs(commands) do
tbl_0_[(#tbl_0_ + 1)] = (" ,%s - %s"):format(name, ((compiler.metadata):get(f, "fnl/docstring") or "undocumented"))
end end
_0_ = tbl_0_
end
return table.concat(_0_, "\n")
end
commands.help = function(_, _0, on_values)
return on_values({("Welcome to Fennel.\nThis is the REPL where you can enter code to be evaluated.\nYou can also run these repl commands:\n\n" .. command_docs() .. "\n ,exit - Leave the repl.\n\nUse (doc something) to see descriptions for individual macros and special forms.\n\nFor more information about the language, see https://fennel-lang.org/reference")})
end
do end (compiler.metadata):set(commands.help, "fnl/docstring", "Show this message.")
local function reload(module_name, env, on_values, on_error) local function reload(module_name, env, on_values, on_error)
local _0_0, _1_0 = pcall(specials["load-code"]("return require(...)", env), module_name) local _0_0, _1_0 = pcall(specials["load-code"]("return require(...)", env), module_name)
if ((_0_0 == true) and (nil ~= _1_0)) then if ((_0_0 == true) and (nil ~= _1_0)) then
@ -67,7 +79,7 @@ package.preload["fennel.repl"] = package.preload["fennel.repl"] or function(...)
local ok, new = pcall(require, module_name) local ok, new = pcall(require, module_name)
local new0 = nil local new0 = nil
if not ok then if not ok then
on_values(new) on_values({new})
new0 = old new0 = old
else else
new0 = new new0 = new
@ -93,7 +105,7 @@ package.preload["fennel.repl"] = package.preload["fennel.repl"] or function(...)
return on_error("Runtime", _3_()) return on_error("Runtime", _3_())
end end
end end
commands.reload = function(read, env, on_values, on_error) commands.reload = function(env, read, on_values, on_error)
local _0_0, _1_0, _2_0 = pcall(read) local _0_0, _1_0, _2_0 = pcall(read)
if ((_0_0 == true) and (_1_0 == true) and (nil ~= _2_0)) then if ((_0_0 == true) and (_1_0 == true) and (nil ~= _2_0)) then
local module_sym = _2_0 local module_sym = _2_0
@ -104,17 +116,34 @@ package.preload["fennel.repl"] = package.preload["fennel.repl"] or function(...)
return on_error("Parse", (_3fmsg or _3fparse_ok)) return on_error("Parse", (_3fmsg or _3fparse_ok))
end end
end end
commands.reset = function(_, env, on_values) do end (compiler.metadata):set(commands.reload, "fnl/docstring", "Reload the specified module.")
commands.reset = function(env, _, on_values)
env.___replLocals___ = {} env.___replLocals___ = {}
return on_values({"ok"}) return on_values({"ok"})
end end
do end (compiler.metadata):set(commands.reset, "fnl/docstring", "Erase all repl-local scope.")
local function load_plugin_commands()
if (utils.root and utils.root.options and utils.root.options.plugins) then
for _, plugin in ipairs(utils.root.options.plugins) do
for name, f in pairs(plugin) do
local _0_0 = name:match("^repl%-command%-(.*)")
if (nil ~= _0_0) then
local cmd_name = _0_0
commands[cmd_name] = (commands[cmd_name] or f)
end
end
end
return nil
end
end
local function run_command(input, read, loop, env, on_values, on_error) local function run_command(input, read, loop, env, on_values, on_error)
load_plugin_commands()
local command_name = input:match(",([^%s/]+)") local command_name = input:match(",([^%s/]+)")
do do
local _0_0 = commands[command_name] local _0_0 = commands[command_name]
if (nil ~= _0_0) then if (nil ~= _0_0) then
local command = _0_0 local command = _0_0
command(read, env, on_values, on_error) command(env, read, on_values, on_error)
else else
local _ = _0_0 local _ = _0_0
if ("exit" ~= command_name) then if ("exit" ~= command_name) then
@ -178,7 +207,7 @@ package.preload["fennel.repl"] = package.preload["fennel.repl"] or function(...)
if options.env then if options.env then
env = specials["wrap-env"](options.env) env = specials["wrap-env"](options.env)
else else
env = setmetatable({}, {__index = (_G._ENV or _G)}) env = setmetatable({}, {__index = (rawget(_G, "_ENV") or _G)})
end end
local save_locals_3f = ((options.saveLocals ~= false) and env.debug and env.debug.getlocal) local save_locals_3f = ((options.saveLocals ~= false) and env.debug and env.debug.getlocal)
local opts = {} local opts = {}
@ -225,7 +254,7 @@ package.preload["fennel.repl"] = package.preload["fennel.repl"] or function(...)
chars[k] = nil chars[k] = nil
end end
local ok, parse_ok_3f, x = pcall(read) local ok, parse_ok_3f, x = pcall(read)
local src_string = string.char((_G.unpack or table.unpack)(chars)) local src_string = string.char((table.unpack or _G.unpack)(chars))
utils.root.options = opts utils.root.options = opts
if not ok then if not ok then
on_error("Parse", parse_ok_3f) on_error("Parse", parse_ok_3f)
@ -277,11 +306,393 @@ package.preload["fennel.repl"] = package.preload["fennel.repl"] or function(...)
end end
return repl return repl
end end
package.preload["fennel.view"] = package.preload["fennel.view"] or function(...)
local type_order = {["function"] = 5, boolean = 2, number = 1, string = 3, table = 4, thread = 7, userdata = 6}
local function sort_keys(_0_0, _1_0)
local _1_ = _0_0
local a = _1_[1]
local _2_ = _1_0
local b = _2_[1]
local ta = type(a)
local tb = type(b)
if ((ta == tb) and ((ta == "string") or (ta == "number"))) then
return (a < b)
else
local dta = type_order[ta]
local dtb = type_order[tb]
if (dta and dtb) then
return (dta < dtb)
elseif dta then
return true
elseif dtb then
return false
else
return (ta < tb)
end
end
end
local function table_kv_pairs(t)
local assoc_3f = false
local kv = {}
local insert = table.insert
for k, v in pairs(t) do
if (type(k) ~= "number") then
assoc_3f = true
end
insert(kv, {k, v})
end
table.sort(kv, sort_keys)
if (#kv == 0) then
return kv, "empty"
else
local function _2_()
if assoc_3f then
return "table"
else
return "seq"
end
end
return kv, _2_()
end
end
local function count_table_appearances(t, appearances)
if (type(t) == "table") then
if not appearances[t] then
appearances[t] = 1
for k, v in pairs(t) do
count_table_appearances(k, appearances)
count_table_appearances(v, appearances)
end
else
appearances[t] = ((appearances[t] or 0) + 1)
end
end
return appearances
end
local function save_table(t, seen)
local seen0 = (seen or {len = 0})
local id = (seen0.len + 1)
if not seen0[t] then
seen0[t] = id
seen0.len = id
end
return seen0
end
local function detect_cycle(t, seen)
local seen0 = (seen or {})
seen0[t] = true
for k, v in pairs(t) do
if ((type(k) == "table") and (seen0[k] or detect_cycle(k, seen0))) then
return true
end
if ((type(v) == "table") and (seen0[v] or detect_cycle(v, seen0))) then
return true
end
end
return nil
end
local function visible_cycle_3f(t, options)
return (options["detect-cycles?"] and detect_cycle(t) and save_table(t, options.seen) and (1 < (options.appearances[t] or 0)))
end
local function table_indent(t, indent, id)
local opener_length = nil
if id then
opener_length = (#tostring(id) + 2)
else
opener_length = 1
end
return (indent + opener_length)
end
local pp = {}
local function concat_table_lines(elements, options, multiline_3f, indent, table_type, prefix)
local indent_str = ("\n" .. string.rep(" ", indent))
local open = nil
local function _2_()
if ("seq" == table_type) then
return "["
else
return "{"
end
end
open = ((prefix or "") .. _2_())
local close = nil
if ("seq" == table_type) then
close = "]"
else
close = "}"
end
local oneline = (open .. table.concat(elements, " ") .. close)
local _4_
if (table_type == "seq") then
_4_ = options["sequential-length"]
else
_4_ = options["associative-length"]
end
if (not options["one-line?"] and (multiline_3f or (#elements > _4_) or ((indent + #oneline) > options["line-length"]))) then
return (open .. table.concat(elements, indent_str) .. close)
else
return oneline
end
end
local function pp_associative(t, kv, options, indent, key_3f)
local multiline_3f = false
local id = options.seen[t]
if (options.level >= options.depth) then
return "{...}"
elseif (id and options["detect-cycles?"]) then
return ("@" .. id .. "{...}")
else
local visible_cycle_3f0 = visible_cycle_3f(t, options)
local id0 = (visible_cycle_3f0 and options.seen[t])
local indent0 = table_indent(t, indent, id0)
local slength = nil
local function _3_()
local _2_0 = rawget(_G, "utf8")
if _2_0 then
return _2_0.len
else
return _2_0
end
end
local function _4_(_241)
return #_241
end
slength = ((options["utf8?"] and _3_()) or _4_)
local prefix = nil
if visible_cycle_3f0 then
prefix = ("@" .. id0)
else
prefix = ""
end
local elements = nil
do
local tbl_0_ = {}
for _, _6_0 in pairs(kv) do
local _7_ = _6_0
local k = _7_[1]
local v = _7_[2]
local _8_
do
local k0 = pp.pp(k, options, (indent0 + 1), true)
local v0 = pp.pp(v, options, (indent0 + slength(k0) + 1))
multiline_3f = (multiline_3f or k0:find("\n") or v0:find("\n"))
_8_ = (k0 .. " " .. v0)
end
tbl_0_[(#tbl_0_ + 1)] = _8_
end
elements = tbl_0_
end
return concat_table_lines(elements, options, multiline_3f, indent0, "table", prefix)
end
end
local function pp_sequence(t, kv, options, indent)
local multiline_3f = false
local id = options.seen[t]
if (options.level >= options.depth) then
return "[...]"
elseif (id and options["detect-cycles?"]) then
return ("@" .. id .. "[...]")
else
local visible_cycle_3f0 = visible_cycle_3f(t, options)
local id0 = (visible_cycle_3f0 and options.seen[t])
local indent0 = table_indent(t, indent, id0)
local prefix = nil
if visible_cycle_3f0 then
prefix = ("@" .. id0)
else
prefix = ""
end
local elements = nil
do
local tbl_0_ = {}
for _, _3_0 in pairs(kv) do
local _4_ = _3_0
local _0 = _4_[1]
local v = _4_[2]
local _5_
do
local v0 = pp.pp(v, options, indent0)
multiline_3f = (multiline_3f or v0:find("\n"))
_5_ = v0
end
tbl_0_[(#tbl_0_ + 1)] = _5_
end
elements = tbl_0_
end
return concat_table_lines(elements, options, multiline_3f, indent0, "seq", prefix)
end
end
local function concat_lines(lines, options, indent, force_multi_line_3f)
if (#lines == 0) then
if options["empty-as-sequence?"] then
return "[]"
else
return "{}"
end
else
local oneline = nil
local _2_
do
local tbl_0_ = {}
for _, line in ipairs(lines) do
tbl_0_[(#tbl_0_ + 1)] = line:gsub("^%s+", "")
end
_2_ = tbl_0_
end
oneline = table.concat(_2_, " ")
if (not options["one-line?"] and (force_multi_line_3f or oneline:find("\n") or ((indent + #oneline) > options["line-length"]))) then
return table.concat(lines, ("\n" .. string.rep(" ", indent)))
else
return oneline
end
end
end
local function pp_metamethod(t, metamethod, options, indent)
if (options.level >= options.depth) then
if options["empty-as-sequence?"] then
return "[...]"
else
return "{...}"
end
else
local _ = nil
local function _2_(_241)
return visible_cycle_3f(_241, options)
end
options["visible-cycle?"] = _2_
_ = nil
local lines, force_multi_line_3f = metamethod(t, pp.pp, options, indent)
options["visible-cycle?"] = nil
local _3_0 = type(lines)
if (_3_0 == "string") then
return lines
elseif (_3_0 == "table") then
return concat_lines(lines, options, indent, force_multi_line_3f)
else
local _0 = _3_0
return error("Error: __fennelview metamethod must return a table of lines")
end
end
end
local function pp_table(x, options, indent)
options.level = (options.level + 1)
local x0 = nil
do
local _2_0 = nil
if options["metamethod?"] then
local _3_0 = x
if _3_0 then
local _4_0 = getmetatable(_3_0)
if _4_0 then
_2_0 = _4_0.__fennelview
else
_2_0 = _4_0
end
else
_2_0 = _3_0
end
else
_2_0 = nil
end
if (nil ~= _2_0) then
local metamethod = _2_0
x0 = pp_metamethod(x, metamethod, options, indent)
else
local _ = _2_0
local _4_0, _5_0 = table_kv_pairs(x)
if (true and (_5_0 == "empty")) then
local _0 = _4_0
if options["empty-as-sequence?"] then
x0 = "[]"
else
x0 = "{}"
end
elseif ((nil ~= _4_0) and (_5_0 == "table")) then
local kv = _4_0
x0 = pp_associative(x, kv, options, indent)
elseif ((nil ~= _4_0) and (_5_0 == "seq")) then
local kv = _4_0
x0 = pp_sequence(x, kv, options, indent)
else
x0 = nil
end
end
end
options.level = (options.level - 1)
return x0
end
local function number__3estring(n)
local _2_0, _3_0, _4_0 = math.modf(n)
if ((nil ~= _2_0) and (_3_0 == 0)) then
local int = _2_0
return tostring(int)
else
local _5_
do
local frac = _3_0
_5_ = (((_2_0 == 0) and (nil ~= _3_0)) and (frac < 0))
end
if _5_ then
local frac = _3_0
return ("-0." .. tostring(frac):gsub("^-?0.", ""))
elseif ((nil ~= _2_0) and (nil ~= _3_0)) then
local int = _2_0
local frac = _3_0
return (int .. "." .. tostring(frac):gsub("^-?0.", ""))
end
end
end
local function colon_string_3f(s)
return s:find("^[-%w?\\^_!$%&*+./@:|<=>]+$")
end
local function make_options(t, options)
local defaults = {["associative-length"] = 4, ["detect-cycles?"] = true, ["empty-as-sequence?"] = false, ["line-length"] = 80, ["metamethod?"] = true, ["one-line?"] = false, ["sequential-length"] = 10, ["utf8?"] = true, depth = 128}
local overrides = {appearances = count_table_appearances(t, {}), level = 0, seen = {len = 0}}
for k, v in pairs((options or {})) do
defaults[k] = v
end
for k, v in pairs(overrides) do
defaults[k] = v
end
return defaults
end
pp.pp = function(x, options, indent, key_3f)
local indent0 = (indent or 0)
local options0 = (options or make_options(x))
local tv = type(x)
local function _3_()
local _2_0 = getmetatable(x)
if _2_0 then
return _2_0.__fennelview
else
return _2_0
end
end
if ((tv == "table") or ((tv == "userdata") and _3_())) then
return pp_table(x, options0, indent0)
elseif (tv == "number") then
return number__3estring(x)
elseif ((tv == "string") and key_3f and colon_string_3f(x)) then
return (":" .. x)
elseif (tv == "string") then
return string.format("%q", x)
elseif ((tv == "boolean") or (tv == "nil")) then
return tostring(x)
else
return ("#<" .. tostring(x) .. ">")
end
end
local function view(x, options)
return pp.pp(x, make_options(x, options), 0)
end
return view
end
package.preload["fennel.specials"] = package.preload["fennel.specials"] or function(...) package.preload["fennel.specials"] = package.preload["fennel.specials"] or function(...)
local utils = require("fennel.utils") local utils = require("fennel.utils")
local view = require("fennel.view")
local parser = require("fennel.parser") local parser = require("fennel.parser")
local compiler = require("fennel.compiler") local compiler = require("fennel.compiler")
local unpack = (_G.unpack or table.unpack) local unpack = (table.unpack or _G.unpack)
local SPECIALS = compiler.scopes.global.specials local SPECIALS = compiler.scopes.global.specials
local function wrap_env(env) local function wrap_env(env)
local function _0_(_, key) local function _0_(_, key)
@ -318,8 +729,8 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
return utils.kvmap((env or _G), compiler["global-unmangling"]) return utils.kvmap((env or _G), compiler["global-unmangling"])
end end
local function load_code(code, environment, filename) local function load_code(code, environment, filename)
local environment0 = ((environment or _ENV) or _G) local environment0 = (environment or rawget(_G, "_ENV") or _G)
if (_G.setfenv and _G.loadstring) then if (rawget(_G, "setfenv") and rawget(_G, "loadstring")) then
local f = assert(_G.loadstring(code, filename)) local f = assert(_G.loadstring(code, filename))
_G.setfenv(f, environment0) _G.setfenv(f, environment0)
return f return f
@ -332,7 +743,8 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
return (name .. " not found") return (name .. " not found")
else else
local docstring = (((compiler.metadata):get(tgt, "fnl/docstring") or "#<undocumented>")):gsub("\n$", ""):gsub("\n", "\n ") local docstring = (((compiler.metadata):get(tgt, "fnl/docstring") or "#<undocumented>")):gsub("\n$", ""):gsub("\n", "\n ")
if (type(tgt) == "function") then local mt = getmetatable(tgt)
if ((type(tgt) == "function") or ((type(mt) == "table") and (type(mt.__call) == "function"))) then
local arglist = table.concat(((compiler.metadata):get(tgt, "fnl/arglist") or {"#<unknown-arguments>"}), " ") local arglist = table.concat(((compiler.metadata):get(tgt, "fnl/arglist") or {"#<unknown-arguments>"}), " ")
local _0_ local _0_
if (#arglist > 0) then if (#arglist > 0) then
@ -425,15 +837,41 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
return exprs return exprs
end end
doc_special("values", {"..."}, "Return multiple values from a function. Must be in tail position.") doc_special("values", {"..."}, "Return multiple values from a function. Must be in tail position.")
local function deep_tostring(x, key_3f)
local elems = {}
if utils["sequence?"](x) then
local _0_
do
local tbl_0_ = {}
for _, v in ipairs(x) do
tbl_0_[(#tbl_0_ + 1)] = deep_tostring(v)
end
_0_ = tbl_0_
end
return ("[" .. table.concat(_0_, " ") .. "]")
elseif utils["table?"](x) then
local _0_
do
local tbl_0_ = {}
for k, v in pairs(x) do
tbl_0_[(#tbl_0_ + 1)] = (deep_tostring(k, true) .. " " .. deep_tostring(v))
end
_0_ = tbl_0_
end
return ("{" .. table.concat(_0_, " ") .. "}")
elseif (key_3f and (type(x) == "string") and x:find("^[-%w?\\^_!$%&*+./@:|<=>]+$")) then
return (":" .. x)
elseif (type(x) == "string") then
return string.format("%q", x):gsub("\\\"", "\\\\\""):gsub("\"", "\\\"")
else
return tostring(x)
end
end
local function set_fn_metadata(arg_list, docstring, parent, fn_name) local function set_fn_metadata(arg_list, docstring, parent, fn_name)
if utils.root.options.useMetadata then if utils.root.options.useMetadata then
local args = nil local args = nil
local function _0_(v) local function _0_(v)
if utils["table?"](v) then return ("\"%s\""):format(deep_tostring(v))
return "\"#<table>\""
else
return ("\"%s\""):format(tostring(v))
end
end end
args = utils.map(arg_list, _0_) args = utils.map(arg_list, _0_)
local meta_fields = {"\"fnl/arglist\"", ("{" .. table.concat(args, ", ") .. "}")} local meta_fields = {"\"fnl/arglist\"", ("{" .. table.concat(args, ", ") .. "}")}
@ -518,7 +956,7 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
if (ast[2] ~= nil) then if (ast[2] ~= nil) then
table.insert(parent, {ast = ast, leaf = tostring(ast[2])}) table.insert(parent, {ast = ast, leaf = tostring(ast[2])})
end end
if (#ast == 3) then if (ast[3] ~= nil) then
return tostring(ast[3]) return tostring(ast[3])
end end
end end
@ -554,7 +992,7 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
table.insert(indices, ("[" .. tostring(index0) .. "]")) table.insert(indices, ("[" .. tostring(index0) .. "]"))
end end
end end
if (tostring(lhs):find("{") or ("nil" == tostring(lhs))) then if (tostring(lhs):find("[{\"0-9]") or ("nil" == tostring(lhs))) then
return ("(" .. tostring(lhs) .. ")" .. table.concat(indices)) return ("(" .. tostring(lhs) .. ")" .. table.concat(indices))
else else
return (tostring(lhs) .. table.concat(indices)) return (tostring(lhs) .. table.concat(indices))
@ -1058,7 +1496,7 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
end end
doc_special("quote", {"x"}, "Quasiquote the following form. Only works in macro/compiler scope.") doc_special("quote", {"x"}, "Quasiquote the following form. Only works in macro/compiler scope.")
local already_warned_3f = {} local already_warned_3f = {}
local compile_env_warning = ("WARNING: Attempting to %s %s in compile" .. " scope.\nIn future versions of Fennel this will not" .. " be allowed without the\n--no-compiler-sandbox flag" .. " or passing :compiler-env _G in options.\n") local compile_env_warning = ("WARNING: Attempting to %s %s in compile" .. " scope.\nIn future versions of Fennel this will not" .. " be allowed without the\n--no-compiler-sandbox flag" .. " or passing a :compilerEnv globals table in options.\n")
local function compiler_env_warn(_, key) local function compiler_env_warn(_, key)
local v = _G[key] local v = _G[key]
if (v and io and io.stderr and not already_warned_3f[key]) then if (v and io and io.stderr and not already_warned_3f[key]) then
@ -1067,7 +1505,7 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
end end
return v return v
end end
local safe_compiler_env = setmetatable({assert = assert, bit = _G.bit, error = error, getmetatable = getmetatable, ipairs = ipairs, math = math, next = next, pairs = pairs, pcall = pcall, print = print, rawequal = rawequal, rawget = rawget, rawlen = _G.rawlen, rawset = rawset, select = select, setmetatable = setmetatable, string = string, table = table, tonumber = tonumber, tostring = tostring, type = type, xpcall = xpcall}, {__index = compiler_env_warn}) local safe_compiler_env = setmetatable({assert = assert, bit = rawget(_G, "bit"), error = error, getmetatable = getmetatable, ipairs = ipairs, math = math, next = next, pairs = pairs, pcall = pcall, print = print, rawequal = rawequal, rawget = rawget, rawlen = rawget(_G, "rawlen"), rawset = rawset, select = select, setmetatable = setmetatable, string = string, table = table, tonumber = tonumber, tostring = tostring, type = type, xpcall = xpcall}, {__index = compiler_env_warn})
local function make_compiler_env(ast, scope, parent) local function make_compiler_env(ast, scope, parent)
local function _1_() local function _1_()
return compiler.scopes.macro return compiler.scopes.macro
@ -1086,7 +1524,10 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
local _6_ local _6_
do do
local _5_0 = utils.root.options local _5_0 = utils.root.options
if ((type(_5_0) == "table") and (nil ~= _5_0["compiler-env"])) then if ((type(_5_0) == "table") and (nil ~= _5_0.compilerEnv)) then
local compilerEnv = _5_0.compilerEnv
_6_ = compilerEnv
elseif ((type(_5_0) == "table") and (nil ~= _5_0["compiler-env"])) then
local compiler_env = _5_0["compiler-env"] local compiler_env = _5_0["compiler-env"]
_6_ = compiler_env _6_ = compiler_env
else else
@ -1094,7 +1535,7 @@ package.preload["fennel.specials"] = package.preload["fennel.specials"] or funct
_6_ = safe_compiler_env _6_ = safe_compiler_env
end end
end end
return setmetatable({["assert-compile"] = compiler.assert, ["get-scope"] = _1_, ["in-scope?"] = _2_, ["list?"] = utils["list?"], ["multi-sym?"] = utils["multi-sym?"], ["sequence?"] = utils["sequence?"], ["sym?"] = utils["sym?"], ["table?"] = utils["table?"], ["varg?"] = utils["varg?"], _AST = ast, _CHUNK = parent, _IS_COMPILER = true, _SCOPE = scope, _SPECIALS = compiler.scopes.global.specials, _VARARG = utils.varg(), gensym = _3_, list = utils.list, macroexpand = _4_, sequence = utils.sequence, sym = utils.sym, unpack = unpack}, {__index = _6_}) return setmetatable({["assert-compile"] = compiler.assert, ["get-scope"] = _1_, ["in-scope?"] = _2_, ["list?"] = utils["list?"], ["multi-sym?"] = utils["multi-sym?"], ["sequence?"] = utils["sequence?"], ["sym?"] = utils["sym?"], ["table?"] = utils["table?"], ["varg?"] = utils["varg?"], _AST = ast, _CHUNK = parent, _IS_COMPILER = true, _SCOPE = scope, _SPECIALS = compiler.scopes.global.specials, _VARARG = utils.varg(), gensym = _3_, list = utils.list, macroexpand = _4_, sequence = utils.sequence, sym = utils.sym, unpack = unpack, view = view}, {__index = _6_})
end end
local cfg = string.gmatch(package.config, "([^\n]+)") local cfg = string.gmatch(package.config, "([^\n]+)")
local dirsep, pathsep, pathmark = (cfg() or "/"), (cfg() or ";"), (cfg() or "?") local dirsep, pathsep, pathmark = (cfg() or "/"), (cfg() or ";"), (cfg() or "?")
@ -1312,7 +1753,7 @@ package.preload["fennel.compiler"] = package.preload["fennel.compiler"] or funct
local utils = require("fennel.utils") local utils = require("fennel.utils")
local parser = require("fennel.parser") local parser = require("fennel.parser")
local friend = require("fennel.friend") local friend = require("fennel.friend")
local unpack = (_G.unpack or table.unpack) local unpack = (table.unpack or _G.unpack)
local scopes = {} local scopes = {}
local function make_scope(parent) local function make_scope(parent)
local parent0 = (parent or scopes.global) local parent0 = (parent or scopes.global)
@ -1324,6 +1765,27 @@ package.preload["fennel.compiler"] = package.preload["fennel.compiler"] or funct
end end
return {autogensyms = {}, depth = _0_, hashfn = (parent0 and parent0.hashfn), includes = setmetatable({}, {__index = (parent0 and parent0.includes)}), macros = setmetatable({}, {__index = (parent0 and parent0.macros)}), manglings = setmetatable({}, {__index = (parent0 and parent0.manglings)}), parent = parent0, refedglobals = setmetatable({}, {__index = (parent0 and parent0.refedglobals)}), specials = setmetatable({}, {__index = (parent0 and parent0.specials)}), symmeta = setmetatable({}, {__index = (parent0 and parent0.symmeta)}), unmanglings = setmetatable({}, {__index = (parent0 and parent0.unmanglings)}), vararg = (parent0 and parent0.vararg)} return {autogensyms = {}, depth = _0_, hashfn = (parent0 and parent0.hashfn), includes = setmetatable({}, {__index = (parent0 and parent0.includes)}), macros = setmetatable({}, {__index = (parent0 and parent0.macros)}), manglings = setmetatable({}, {__index = (parent0 and parent0.manglings)}), parent = parent0, refedglobals = setmetatable({}, {__index = (parent0 and parent0.refedglobals)}), specials = setmetatable({}, {__index = (parent0 and parent0.specials)}), symmeta = setmetatable({}, {__index = (parent0 and parent0.symmeta)}), unmanglings = setmetatable({}, {__index = (parent0 and parent0.unmanglings)}), vararg = (parent0 and parent0.vararg)}
end end
local function assert_msg(ast, msg)
local ast_tbl = nil
if ("table" == type(ast)) then
ast_tbl = ast
else
ast_tbl = {}
end
local m = getmetatable(ast)
local filename = ((m and m.filename) or ast_tbl.filename or "unknown")
local line = ((m and m.line) or ast_tbl.line or "?")
local target = nil
local function _1_()
if utils["sym?"](ast_tbl[1]) then
return utils.deref(ast_tbl[1])
else
return (ast_tbl[1] or "()")
end
end
target = tostring(_1_())
return string.format("Compile error in '%s' %s:%s: %s", target, filename, line, msg)
end
local function assert_compile(condition, msg, ast) local function assert_compile(condition, msg, ast)
if not condition then if not condition then
local _0_ = (utils.root.options or {}) local _0_ = (utils.root.options or {})
@ -1331,19 +1793,7 @@ package.preload["fennel.compiler"] = package.preload["fennel.compiler"] or funct
local unfriendly = _0_["unfriendly"] local unfriendly = _0_["unfriendly"]
utils.root.reset() utils.root.reset()
if unfriendly then if unfriendly then
local m = getmetatable(ast) error(assert_msg(ast, msg), 0)
local filename = ((m and m.filename) or ast.filename or "unknown")
local line = ((m and m.line) or ast.line or "?")
local target = nil
local function _1_()
if utils["sym?"](ast[1]) then
return utils.deref(ast[1])
else
return (ast[1] or "()")
end
end
target = tostring(_1_())
error(string.format("Compile error in '%s' %s:%s: %s", target, filename, line, msg), 0)
else else
friend["assert-compile"](condition, msg, ast, source) friend["assert-compile"](condition, msg, ast, source)
end end
@ -1465,9 +1915,13 @@ package.preload["fennel.compiler"] = package.preload["fennel.compiler"] or funct
return (scope.autogensyms[base] or _1_()) return (scope.autogensyms[base] or _1_())
end end
end end
local already_warned = {}
local function check_binding_valid(symbol, scope, ast) local function check_binding_valid(symbol, scope, ast)
local name = utils.deref(symbol) local name = utils.deref(symbol)
assert_compile(not name:find("&"), "illegal character: &", symbol) if (io and io.stderr and name:find("&") and not already_warned[symbol]) then
already_warned[symbol] = true
do end (io.stderr):write(("-- Warning: & will not be allowed in identifier names in " .. "future versions: " .. symbol.filename .. ":" .. symbol.line .. "\n"))
end
assert_compile(not (scope.specials[name] or scope.macros[name]), ("local %s was overshadowed by a special form or macro"):format(name), ast) assert_compile(not (scope.specials[name] or scope.macros[name]), ("local %s was overshadowed by a special form or macro"):format(name), ast)
return assert_compile(not utils["quoted?"](symbol), string.format("macro tried to bind %s without gensym", name), symbol) return assert_compile(not utils["quoted?"](symbol), string.format("macro tried to bind %s without gensym", name), symbol)
end end
@ -1822,6 +2276,27 @@ package.preload["fennel.compiler"] = package.preload["fennel.compiler"] or funct
end end
return handle_compile_opts({e}, parent, opts, ast) return handle_compile_opts({e}, parent, opts, ast)
end end
local function serialize_number(n)
local _0_0, _1_0, _2_0 = math.modf(n)
if ((nil ~= _0_0) and (_1_0 == 0)) then
local int = _0_0
return tostring(int)
else
local _3_
do
local frac = _1_0
_3_ = (((_0_0 == 0) and (nil ~= _1_0)) and (frac < 0))
end
if _3_ then
local frac = _1_0
return ("-0." .. tostring(frac):gsub("^-?0.", ""))
elseif ((nil ~= _0_0) and (nil ~= _1_0)) then
local int = _0_0
local frac = _1_0
return (int .. "." .. tostring(frac):gsub("^-?0.", ""))
end
end
end
local function compile_scalar(ast, _scope, parent, opts) local function compile_scalar(ast, _scope, parent, opts)
local serialize = nil local serialize = nil
do do
@ -1833,10 +2308,7 @@ package.preload["fennel.compiler"] = package.preload["fennel.compiler"] or funct
elseif (_0_0 == "string") then elseif (_0_0 == "string") then
serialize = serialize_string serialize = serialize_string
elseif (_0_0 == "number") then elseif (_0_0 == "number") then
local function _1_(...) serialize = serialize_number
return string.format("%.17g", ...)
end
serialize = _1_
else else
serialize = nil serialize = nil
end end
@ -2274,10 +2746,10 @@ end
package.preload["fennel.friend"] = package.preload["fennel.friend"] or function(...) package.preload["fennel.friend"] = package.preload["fennel.friend"] or function(...)
local function ast_source(ast) local function ast_source(ast)
local m = getmetatable(ast) local m = getmetatable(ast)
return ((m and m.line and m) or ast or {}) return ((m and m.line and m) or (("table" == type(ast)) and ast) or {})
end end
local suggestions = {["$ and $... in hashfn are mutually exclusive"] = {"modifying the hashfn so it only contains $... or $, $1, $2, $3, etc"}, ["can't start multisym segment with a digit"] = {"removing the digit", "adding a non-digit before the digit"}, ["cannot call literal value"] = {"checking for typos", "checking for a missing function name"}, ["could not compile value of type "] = {"debugging the macro you're calling not to return a coroutine or userdata"}, ["could not read number (.*)"] = {"removing the non-digit character", "beginning the identifier with a non-digit if it is not meant to be a number"}, ["expected a function.* to call"] = {"removing the empty parentheses", "using square brackets if you want an empty table"}, ["expected binding table"] = {"placing a table here in square brackets containing identifiers to bind"}, ["expected body expression"] = {"putting some code in the body of this form after the bindings"}, ["expected each macro to be function"] = {"ensuring that the value for each key in your macros table contains a function", "avoid defining nested macro tables"}, ["expected even number of name/value bindings"] = {"finding where the identifier or value is missing"}, ["expected even number of values in table literal"] = {"removing a key", "adding a value"}, ["expected local"] = {"looking for a typo", "looking for a local which is used out of its scope"}, ["expected macros to be table"] = {"ensuring your macro definitions return a table"}, ["expected parameters"] = {"adding function parameters as a list of identifiers in brackets"}, ["expected rest argument before last parameter"] = {"moving & to right before the final identifier when destructuring"}, ["expected symbol for function parameter: (.*)"] = {"changing %s to an identifier instead of a literal value"}, ["expected var (.*)"] = {"declaring %s using var instead of let/local", "introducing a new local instead of changing the value of %s"}, ["expected vararg as last parameter"] = {"moving the \"...\" to the end of the parameter list"}, ["expected whitespace before opening delimiter"] = {"adding whitespace"}, ["global (.*) conflicts with local"] = {"renaming local %s"}, ["illegal character: (.)"] = {"deleting or replacing %s", "avoiding reserved characters like \", \\, ', ~, ;, @, `, and comma"}, ["local (.*) was overshadowed by a special form or macro"] = {"renaming local %s"}, ["macro not found in macro module"] = {"checking the keys of the imported macro module's returned table"}, ["macro tried to bind (.*) without gensym"] = {"changing to %s# when introducing identifiers inside macros"}, ["malformed multisym"] = {"ensuring each period or colon is not followed by another period or colon"}, ["may only be used at compile time"] = {"moving this to inside a macro if you need to manipulate symbols/lists", "using square brackets instead of parens to construct a table"}, ["method must be last component"] = {"using a period instead of a colon for field access", "removing segments after the colon", "making the method call, then looking up the field on the result"}, ["mismatched closing delimiter (.), expected (.)"] = {"replacing %s with %s", "deleting %s", "adding matching opening delimiter earlier"}, ["multisym method calls may only be in call position"] = {"using a period instead of a colon to reference a table's fields", "putting parens around this"}, ["unable to bind (.*)"] = {"replacing the %s with an identifier"}, ["unexpected closing delimiter (.)"] = {"deleting %s", "adding matching opening delimiter earlier"}, ["unexpected multi symbol (.*)"] = {"removing periods or colons from %s"}, ["unexpected vararg"] = {"putting \"...\" at the end of the fn parameters if the vararg was intended"}, ["unknown global in strict mode: (.*)"] = {"looking to see if there's a typo", "using the _G table instead, eg. _G.%s if you really want a global", "moving this code to somewhere that %s is in scope", "binding %s as a local in the scope of this code"}, ["unused local (.*)"] = {"fixing a typo so %s is used", "renaming the local to _%s"}, ["use of global (.*) is aliased by a local"] = {"renaming local %s", "refer to the global using _G.%s instead of directly"}} local suggestions = {["$ and $... in hashfn are mutually exclusive"] = {"modifying the hashfn so it only contains $... or $, $1, $2, $3, etc"}, ["can't start multisym segment with a digit"] = {"removing the digit", "adding a non-digit before the digit"}, ["cannot call literal value"] = {"checking for typos", "checking for a missing function name"}, ["could not compile value of type "] = {"debugging the macro you're calling not to return a coroutine or userdata"}, ["could not read number (.*)"] = {"removing the non-digit character", "beginning the identifier with a non-digit if it is not meant to be a number"}, ["expected a function.* to call"] = {"removing the empty parentheses", "using square brackets if you want an empty table"}, ["expected binding table"] = {"placing a table here in square brackets containing identifiers to bind"}, ["expected body expression"] = {"putting some code in the body of this form after the bindings"}, ["expected each macro to be function"] = {"ensuring that the value for each key in your macros table contains a function", "avoid defining nested macro tables"}, ["expected even number of name/value bindings"] = {"finding where the identifier or value is missing"}, ["expected even number of values in table literal"] = {"removing a key", "adding a value"}, ["expected local"] = {"looking for a typo", "looking for a local which is used out of its scope"}, ["expected macros to be table"] = {"ensuring your macro definitions return a table"}, ["expected parameters"] = {"adding function parameters as a list of identifiers in brackets"}, ["expected rest argument before last parameter"] = {"moving & to right before the final identifier when destructuring"}, ["expected symbol for function parameter: (.*)"] = {"changing %s to an identifier instead of a literal value"}, ["expected var (.*)"] = {"declaring %s using var instead of let/local", "introducing a new local instead of changing the value of %s"}, ["expected vararg as last parameter"] = {"moving the \"...\" to the end of the parameter list"}, ["expected whitespace before opening delimiter"] = {"adding whitespace"}, ["global (.*) conflicts with local"] = {"renaming local %s"}, ["illegal character: (.)"] = {"deleting or replacing %s", "avoiding reserved characters like \", \\, ', ~, ;, @, `, and comma"}, ["local (.*) was overshadowed by a special form or macro"] = {"renaming local %s"}, ["macro not found in macro module"] = {"checking the keys of the imported macro module's returned table"}, ["macro tried to bind (.*) without gensym"] = {"changing to %s# when introducing identifiers inside macros"}, ["malformed multisym"] = {"ensuring each period or colon is not followed by another period or colon"}, ["may only be used at compile time"] = {"moving this to inside a macro if you need to manipulate symbols/lists", "using square brackets instead of parens to construct a table"}, ["method must be last component"] = {"using a period instead of a colon for field access", "removing segments after the colon", "making the method call, then looking up the field on the result"}, ["mismatched closing delimiter (.), expected (.)"] = {"replacing %s with %s", "deleting %s", "adding matching opening delimiter earlier"}, ["multisym method calls may only be in call position"] = {"using a period instead of a colon to reference a table's fields", "putting parens around this"}, ["unable to bind (.*)"] = {"replacing the %s with an identifier"}, ["unexpected closing delimiter (.)"] = {"deleting %s", "adding matching opening delimiter earlier"}, ["unexpected multi symbol (.*)"] = {"removing periods or colons from %s"}, ["unexpected vararg"] = {"putting \"...\" at the end of the fn parameters if the vararg was intended"}, ["unknown global in strict mode: (.*)"] = {"looking to see if there's a typo", "using the _G table instead, eg. _G.%s if you really want a global", "moving this code to somewhere that %s is in scope", "binding %s as a local in the scope of this code"}, ["unused local (.*)"] = {"fixing a typo so %s is used", "renaming the local to _%s"}, ["use of global (.*) is aliased by a local"] = {"renaming local %s", "refer to the global using _G.%s instead of directly"}}
local unpack = (_G.unpack or table.unpack) local unpack = (table.unpack or _G.unpack)
local function suggest(msg) local function suggest(msg)
local suggestion = nil local suggestion = nil
for pat, sug in pairs(suggestions) do for pat, sug in pairs(suggestions) do
@ -2370,7 +2842,7 @@ end
package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(...) package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(...)
local utils = require("fennel.utils") local utils = require("fennel.utils")
local friend = require("fennel.friend") local friend = require("fennel.friend")
local unpack = (_G.unpack or table.unpack) local unpack = (table.unpack or _G.unpack)
local function granulate(getchunk) local function granulate(getchunk)
local c, index, done_3f = "", 1, false local c, index, done_3f = "", 1, false
local function _0_(parser_state) local function _0_(parser_state)
@ -2419,8 +2891,14 @@ package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(
local function whitespace_3f(b) local function whitespace_3f(b)
return ((b == 32) or ((b >= 9) and (b <= 13))) return ((b == 32) or ((b >= 9) and (b <= 13)))
end end
local function symbolchar_3f(b) local function sym_char_3f(b)
return ((b > 32) and not delims[b] and (b ~= 127) and (b ~= 34) and (b ~= 39) and (b ~= 126) and (b ~= 59) and (b ~= 44) and (b ~= 64) and (b ~= 96)) local b0 = nil
if ("number" == type(b)) then
b0 = b
else
b0 = string.byte(b)
end
return ((b0 > 32) and not delims[b0] and (b0 ~= 127) and (b0 ~= 34) and (b0 ~= 39) and (b0 ~= 126) and (b0 ~= 59) and (b0 ~= 44) and (b0 ~= 64) and (b0 ~= 96))
end end
local prefixes = {[35] = "hashfn", [39] = "quote", [44] = "unquote", [96] = "quote"} local prefixes = {[35] = "hashfn", [39] = "quote", [44] = "unquote", [96] = "quote"}
local function parser(getbyte, filename, options) local function parser(getbyte, filename, options)
@ -2497,9 +2975,16 @@ package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(
return b return b
end end
end end
local function skip_comment(b) local function parse_comment(b, contents)
if (b and (10 ~= b)) then if (b and (10 ~= b)) then
return skip_comment(getb()) local function _1_()
local _0_0 = contents
table.insert(_0_0, string.char(b))
return _0_0
end
return parse_comment(getb(), _1_())
elseif (options and options.comments) then
return dispatch(utils.comment(table.concat(contents)))
else else
return b return b
end end
@ -2572,6 +3057,9 @@ package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(
return b return b
end end
end end
local function escape_char(c)
return ({[10] = "\\n", [11] = "\\v", [12] = "\\f", [13] = "\\r", [7] = "\\a", [8] = "\\b", [9] = "\\t"})[c:byte()]
end
local function parse_string() local function parse_string()
table.insert(stack, {closer = 34}) table.insert(stack, {closer = 34})
local chars = {34} local chars = {34}
@ -2580,12 +3068,8 @@ package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(
end end
table.remove(stack) table.remove(stack)
local raw = string.char(unpack(chars)) local raw = string.char(unpack(chars))
local formatted = nil local formatted = raw:gsub("[\7-\13]", escape_char)
local function _1_(c) local load_fn = (rawget(_G, "loadstring") or load)(("return " .. formatted))
return ("\\" .. c:byte())
end
formatted = raw:gsub("[\1-\31]", _1_)
local load_fn = (_G.loadstring or load)(("return " .. formatted))
return dispatch(load_fn()) return dispatch(load_fn())
end end
local function parse_prefix(b) local function parse_prefix(b)
@ -2601,7 +3085,7 @@ package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(
return ungetb(nextb) return ungetb(nextb)
end end
local function parse_sym_loop(chars, b) local function parse_sym_loop(chars, b)
if (b and symbolchar_3f(b)) then if (b and sym_char_3f(b)) then
table.insert(chars, b) table.insert(chars, b)
return parse_sym_loop(chars, getb()) return parse_sym_loop(chars, getb())
else else
@ -2661,7 +3145,7 @@ package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(
local function parse_loop(b) local function parse_loop(b)
if not b then if not b then
elseif (b == 59) then elseif (b == 59) then
skip_comment(getb()) parse_comment(getb(), {";"})
elseif (type(delims[b]) == "number") then elseif (type(delims[b]) == "number") then
open_table(b) open_table(b)
elseif delims[b] then elseif delims[b] then
@ -2670,7 +3154,7 @@ package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(
parse_string(b) parse_string(b)
elseif prefixes[b] then elseif prefixes[b] then
parse_prefix(b) parse_prefix(b)
elseif (symbolchar_3f(b) or (b == string.byte("~"))) then elseif (sym_char_3f(b) or (b == string.byte("~"))) then
parse_sym(b) parse_sym(b)
else else
parse_error(("illegal character: " .. string.char(b))) parse_error(("illegal character: " .. string.char(b)))
@ -2691,7 +3175,7 @@ package.preload["fennel.parser"] = package.preload["fennel.parser"] or function(
end end
return parse_stream, _0_ return parse_stream, _0_
end end
return {["string-stream"] = string_stream, granulate = granulate, parser = parser} return {["string-stream"] = string_stream, ["sym-char?"] = sym_char_3f, granulate = granulate, parser = parser}
end end
local utils = nil local utils = nil
package.preload["fennel.utils"] = package.preload["fennel.utils"] or function(...) package.preload["fennel.utils"] = package.preload["fennel.utils"] or function(...)
@ -2821,6 +3305,7 @@ package.preload["fennel.utils"] = package.preload["fennel.utils"] or function(..
local symbol_mt = {"SYMBOL", __fennelview = deref, __tostring = deref} local symbol_mt = {"SYMBOL", __fennelview = deref, __tostring = deref}
local expr_mt = {"EXPR", __tostring = deref} local expr_mt = {"EXPR", __tostring = deref}
local list_mt = {"LIST", __fennelview = list__3estring, __tostring = list__3estring} local list_mt = {"LIST", __fennelview = list__3estring, __tostring = list__3estring}
local comment_mt = {"COMMENT", __fennelview = deref, __tostring = deref}
local sequence_marker = {"SEQUENCE"} local sequence_marker = {"SEQUENCE"}
local vararg = setmetatable({"..."}, {"VARARG", __fennelview = deref, __tostring = deref}) local vararg = setmetatable({"..."}, {"VARARG", __fennelview = deref, __tostring = deref})
local getenv = nil local getenv = nil
@ -2851,6 +3336,9 @@ package.preload["fennel.utils"] = package.preload["fennel.utils"] or function(..
local function expr(strcode, etype) local function expr(strcode, etype)
return setmetatable({strcode, type = etype}, expr_mt) return setmetatable({strcode, type = etype}, expr_mt)
end end
local function comment_2a(contents)
return setmetatable({contents}, comment_mt)
end
local function varg() local function varg()
return vararg return vararg
end end
@ -2873,6 +3361,9 @@ package.preload["fennel.utils"] = package.preload["fennel.utils"] or function(..
local mt = ((type(x) == "table") and getmetatable(x)) local mt = ((type(x) == "table") and getmetatable(x))
return (mt and (mt.sequence == sequence_marker) and x) return (mt and (mt.sequence == sequence_marker) and x)
end end
local function comment_3f(x)
return ((type(x) == "table") and (getmetatable(x) == comment_mt) and x)
end
local function multi_sym_3f(str) local function multi_sym_3f(str)
if sym_3f(str) then if sym_3f(str) then
return multi_sym_3f(tostring(str)) return multi_sym_3f(tostring(str))
@ -2916,7 +3407,7 @@ package.preload["fennel.utils"] = package.preload["fennel.utils"] or function(..
local function valid_lua_identifier_3f(str) local function valid_lua_identifier_3f(str)
return (str:match("^[%a_][%w_]*$") and not lua_keywords[str]) return (str:match("^[%a_][%w_]*$") and not lua_keywords[str])
end end
local propagated_options = {"allowedGlobals", "indent", "correlate", "useMetadata", "env", "compiler-env"} local propagated_options = {"allowedGlobals", "indent", "correlate", "useMetadata", "env", "compiler-env", "compilerEnv"}
local function propagate_options(options, subopts) local function propagate_options(options, subopts)
for _, name in ipairs(propagated_options) do for _, name in ipairs(propagated_options) do
subopts[name] = options[name] subopts[name] = options[name]
@ -2951,13 +3442,14 @@ package.preload["fennel.utils"] = package.preload["fennel.utils"] or function(..
return nil return nil
end end
end end
return {["debug-on?"] = debug_on_3f, ["expr?"] = expr_3f, ["list?"] = list_3f, ["lua-keywords"] = lua_keywords, ["member?"] = member_3f, ["multi-sym?"] = multi_sym_3f, ["propagate-options"] = propagate_options, ["quoted?"] = quoted_3f, ["sequence?"] = sequence_3f, ["sym?"] = sym_3f, ["table?"] = table_3f, ["valid-lua-identifier?"] = valid_lua_identifier_3f, ["varg?"] = varg_3f, ["walk-tree"] = walk_tree, allpairs = allpairs, copy = copy, deref = deref, expr = expr, hook = hook, kvmap = kvmap, list = list, map = map, path = table.concat({"./?.fnl", "./?/init.fnl", getenv("FENNEL_PATH")}, ";"), root = root, sequence = sequence, stablepairs = stablepairs, sym = sym, varg = varg} return {["comment?"] = comment_3f, ["debug-on?"] = debug_on_3f, ["expr?"] = expr_3f, ["list?"] = list_3f, ["lua-keywords"] = lua_keywords, ["member?"] = member_3f, ["multi-sym?"] = multi_sym_3f, ["propagate-options"] = propagate_options, ["quoted?"] = quoted_3f, ["sequence?"] = sequence_3f, ["sym?"] = sym_3f, ["table?"] = table_3f, ["valid-lua-identifier?"] = valid_lua_identifier_3f, ["varg?"] = varg_3f, ["walk-tree"] = walk_tree, allpairs = allpairs, comment = comment_2a, copy = copy, deref = deref, expr = expr, hook = hook, kvmap = kvmap, list = list, map = map, path = table.concat({"./?.fnl", "./?/init.fnl", getenv("FENNEL_PATH")}, ";"), root = root, sequence = sequence, stablepairs = stablepairs, sym = sym, varg = varg}
end end
utils = require("fennel.utils") utils = require("fennel.utils")
local parser = require("fennel.parser") local parser = require("fennel.parser")
local compiler = require("fennel.compiler") local compiler = require("fennel.compiler")
local specials = require("fennel.specials") local specials = require("fennel.specials")
local repl = require("fennel.repl") local repl = require("fennel.repl")
local view = require("fennel.view")
local function get_env(env) local function get_env(env)
if (env == "_COMPILER") then if (env == "_COMPILER") then
local env0 = specials["make-compiler-env"](nil, compiler.scopes.compiler, {}) local env0 = specials["make-compiler-env"](nil, compiler.scopes.compiler, {})
@ -2999,7 +3491,7 @@ local function dofile_2a(filename, options, ...)
opts.filename = filename opts.filename = filename
return eval(source, opts, ...) return eval(source, opts, ...)
end end
local mod = {["compile-stream"] = compiler["compile-stream"], ["compile-string"] = compiler["compile-string"], ["list?"] = utils["list?"], ["load-code"] = specials["load-code"], ["macro-loaded"] = specials["macro-loaded"], ["make-searcher"] = specials["make-searcher"], ["search-module"] = specials["search-module"], ["string-stream"] = parser["string-stream"], ["sym?"] = utils["sym?"], compile = compiler.compile, compile1 = compiler.compile1, compileStream = compiler["compile-stream"], compileString = compiler["compile-string"], doc = specials.doc, dofile = dofile_2a, eval = eval, gensym = compiler.gensym, granulate = parser.granulate, list = utils.list, loadCode = specials["load-code"], macroLoaded = specials["macro-loaded"], makeSearcher = specials["make-searcher"], make_searcher = specials["make-searcher"], mangle = compiler["global-mangling"], metadata = compiler.metadata, parser = parser.parser, path = utils.path, repl = repl, scope = compiler["make-scope"], searchModule = specials["search-module"], searcher = specials["make-searcher"](), stringStream = parser["string-stream"], sym = utils.sym, traceback = compiler.traceback, unmangle = compiler["global-unmangling"], varg = utils.varg, version = "0.7.1-dev"} local mod = {["compile-stream"] = compiler["compile-stream"], ["compile-string"] = compiler["compile-string"], ["list?"] = utils["list?"], ["load-code"] = specials["load-code"], ["macro-loaded"] = specials["macro-loaded"], ["make-searcher"] = specials["make-searcher"], ["search-module"] = specials["search-module"], ["sequence?"] = utils["sequence?"], ["string-stream"] = parser["string-stream"], ["sym-char?"] = parser["sym-char?"], ["sym?"] = utils["sym?"], compile = compiler.compile, compile1 = compiler.compile1, compileStream = compiler["compile-stream"], compileString = compiler["compile-string"], doc = specials.doc, dofile = dofile_2a, eval = eval, gensym = compiler.gensym, granulate = parser.granulate, list = utils.list, loadCode = specials["load-code"], macroLoaded = specials["macro-loaded"], makeSearcher = specials["make-searcher"], make_searcher = specials["make-searcher"], mangle = compiler["global-mangling"], metadata = compiler.metadata, parser = parser.parser, path = utils.path, repl = repl, scope = compiler["make-scope"], searchModule = specials["search-module"], searcher = specials["make-searcher"](), sequence = utils.sequence, stringStream = parser["string-stream"], sym = utils.sym, traceback = compiler.traceback, unmangle = compiler["global-unmangling"], varg = utils.varg, version = "0.9.0-dev", view = view}
utils["fennel-module"] = mod utils["fennel-module"] = mod
do do
local builtin_macros = [===[;; This module contains all the built-in Fennel macros. Unlike all the other local builtin_macros = [===[;; This module contains all the built-in Fennel macros. Unlike all the other
@ -3095,7 +3587,7 @@ do
`(let ,closable-bindings ,closer `(let ,closable-bindings ,closer
(close-handlers# (xpcall ,bodyfn ,traceback))))) (close-handlers# (xpcall ,bodyfn ,traceback)))))
(fn collect [iter-tbl key-value-expr] (fn collect [iter-tbl key-value-expr ...]
"Returns a table made by running an iterator and evaluating an expression "Returns a table made by running an iterator and evaluating an expression
that returns key-value pairs to be inserted sequentially into the table. that returns key-value pairs to be inserted sequentially into the table.
This can be thought of as a \"table comprehension\". The provided key-value This can be thought of as a \"table comprehension\". The provided key-value
@ -3110,13 +3602,15 @@ do
"expected iterator binding table") "expected iterator binding table")
(assert (not= nil key-value-expr) (assert (not= nil key-value-expr)
"expected key-value expression") "expected key-value expression")
(assert (= nil ...)
"expected exactly one body expression. Wrap multiple expressions with do")
`(let [tbl# {}] `(let [tbl# {}]
(each ,iter-tbl (each ,iter-tbl
(match ,key-value-expr (match ,key-value-expr
(k# v#) (tset tbl# k# v#))) (k# v#) (tset tbl# k# v#)))
tbl#)) tbl#))
(fn icollect [iter-tbl value-expr] (fn icollect [iter-tbl value-expr ...]
"Returns a sequential table made by running an iterator and evaluating an "Returns a sequential table made by running an iterator and evaluating an
expression that returns values to be inserted sequentially into the table. expression that returns values to be inserted sequentially into the table.
This can be thought of as a \"list comprehension\". This can be thought of as a \"list comprehension\".
@ -3129,6 +3623,8 @@ do
"expected iterator binding table") "expected iterator binding table")
(assert (not= nil value-expr) (assert (not= nil value-expr)
"expected table value expression") "expected table value expression")
(assert (= nil ...)
"expected exactly one body expression. Wrap multiple expressions with do")
`(let [tbl# []] `(let [tbl# []]
(each ,iter-tbl (each ,iter-tbl
(tset tbl# (+ (length tbl#) 1) ,value-expr)) (tset tbl# (+ (length tbl#) 1) ,value-expr))
@ -3210,9 +3706,8 @@ do
(fn macrodebug [form return?] (fn macrodebug [form return?]
"Print the resulting form after performing macroexpansion. "Print the resulting form after performing macroexpansion.
With a second argument, returns expanded form as a string instead of printing." With a second argument, returns expanded form as a string instead of printing."
(let [(ok view) (pcall require :fennelview) (let [handle (if return? `do `print)]
handle (if return? `do `print)] `(,handle ,(view (macroexpand form _SCOPE)))))
`(,handle ,((if ok view tostring) (macroexpand form _SCOPE)))))
(fn import-macros [binding1 module-name1 ...] (fn import-macros [binding1 module-name1 ...]
"Binds a table of macros from each macro module according to a binding form. "Binds a table of macros from each macro module according to a binding form.
@ -3266,8 +3761,8 @@ do
(do (assert (not (. pattern (+ k 2))) (do (assert (not (. pattern (+ k 2)))
"expected rest argument before last parameter") "expected rest argument before last parameter")
(table.insert bindings (. pattern (+ k 1))) (table.insert bindings (. pattern (+ k 1)))
(table.insert bindings [`(select ,k ((or _G.unpack (table.insert bindings [`(select ,k ((or table.unpack
table.unpack) _G.unpack)
,val))])) ,val))]))
(and (= :number (type k)) (and (= :number (type k))
(= "&" (tostring (. pattern (- k 1))))) (= "&" (tostring (. pattern (- k 1)))))
@ -3373,7 +3868,6 @@ do
local env = nil local env = nil
do do
local _1_0 = specials["make-compiler-env"](nil, compiler.scopes.compiler, {}) local _1_0 = specials["make-compiler-env"](nil, compiler.scopes.compiler, {})
_1_0["require"] = require
_1_0["utils"] = utils _1_0["utils"] = utils
_1_0["fennel"] = mod _1_0["fennel"] = mod
env = _1_0 env = _1_0

View file

@ -1,25 +1,3 @@
local function view_quote(str)
return ("\"" .. str:gsub("\"", "\\\"") .. "\"")
end
local short_control_char_escapes = {["\11"] = "\\v", ["\12"] = "\\f", ["\13"] = "\\r", ["\7"] = "\\a", ["\8"] = "\\b", ["\9"] = "\\t", ["\n"] = "\\n"}
local long_control_char_escapes = nil
do
local long = {}
for i = 0, 31 do
local ch = string.char(i)
if not short_control_char_escapes[ch] then
short_control_char_escapes[ch] = ("\\" .. i)
long[ch] = ("\\%03d"):format(i)
end
end
long_control_char_escapes = long
end
local function escape(str)
return str:gsub("\\", "\\\\"):gsub("(%c)%f[0-9]", long_control_char_escapes):gsub("%c", short_control_char_escapes)
end
local function sequence_key_3f(k, len)
return ((type(k) == "number") and (1 <= k) and (k <= len) and (math.floor(k) == k))
end
local type_order = {["function"] = 5, boolean = 2, number = 1, string = 3, table = 4, thread = 7, userdata = 6} local type_order = {["function"] = 5, boolean = 2, number = 1, string = 3, table = 4, thread = 7, userdata = 6}
local function sort_keys(_0_0, _1_0) local function sort_keys(_0_0, _1_0)
local _1_ = _0_0 local _1_ = _0_0
@ -39,28 +17,34 @@ local function sort_keys(_0_0, _1_0)
return true return true
elseif dtb then elseif dtb then
return false return false
elseif "else" then else
return (ta < tb) return (ta < tb)
end end
end end
end end
local function get_sequence_length(t) local function table_kv_pairs(t)
local len = 0 local assoc_3f = false
for i in ipairs(t) do local kv = {}
len = i local insert = table.insert
end
return len
end
local function get_nonsequential_keys(t)
local keys = {}
local sequence_length = get_sequence_length(t)
for k, v in pairs(t) do for k, v in pairs(t) do
if not sequence_key_3f(k, sequence_length) then if (type(k) ~= "number") then
table.insert(keys, {k, v}) assoc_3f = true
end
insert(kv, {k, v})
end
table.sort(kv, sort_keys)
if (#kv == 0) then
return kv, "empty"
else
local function _2_()
if assoc_3f then
return "table"
else
return "seq"
end end
end end
table.sort(keys, sort_keys) return kv, _2_()
return keys, sequence_length end
end end
local function count_table_appearances(t, appearances) local function count_table_appearances(t, appearances)
if (type(t) == "table") then if (type(t) == "table") then
@ -76,167 +60,320 @@ local function count_table_appearances(t, appearances)
end end
return appearances return appearances
end end
local put_value = nil local function save_table(t, seen)
local function puts(self, ...) local seen0 = (seen or {len = 0})
for _, v in ipairs({...}) do local id = (seen0.len + 1)
table.insert(self.buffer, v) if not seen0[t] then
seen0[t] = id
seen0.len = id
end
return seen0
end
local function detect_cycle(t, seen)
local seen0 = (seen or {})
seen0[t] = true
for k, v in pairs(t) do
if ((type(k) == "table") and (seen0[k] or detect_cycle(k, seen0))) then
return true
end
if ((type(v) == "table") and (seen0[v] or detect_cycle(v, seen0))) then
return true
end
end end
return nil return nil
end end
local function tabify(self) local function visible_cycle_3f(t, options)
return puts(self, "\n", (self.indent):rep(self.level)) return (options["detect-cycles?"] and detect_cycle(t) and save_table(t, options.seen) and (1 < (options.appearances[t] or 0)))
end end
local function already_visited_3f(self, v) local function table_indent(t, indent, id)
return (self.ids[v] ~= nil) local opener_length = nil
end if id then
local function get_id(self, v) opener_length = (#tostring(id) + 2)
local id = self.ids[v]
if not id then
local tv = type(v)
id = ((self["max-ids"][tv] or 0) + 1)
self["max-ids"][tv] = id
self.ids[v] = id
end
return tostring(id)
end
local function put_sequential_table(self, t, len)
puts(self, "[")
self.level = (self.level + 1)
for k, v in ipairs(t) do
local _2_ = (1 + len)
if ((1 < k) and (k < _2_)) then
puts(self, " ")
end
put_value(self, v)
end
self.level = (self.level - 1)
return puts(self, "]")
end
local function put_key(self, k)
if ((type(k) == "string") and k:find("^[-%w?\\^_!$%&*+./@:|<=>]+$")) then
return puts(self, ":", k)
else else
return put_value(self, k) opener_length = 1
end
return (indent + opener_length)
end
local pp = {}
local function concat_table_lines(elements, options, multiline_3f, indent, table_type, prefix)
local indent_str = ("\n" .. string.rep(" ", indent))
local open = nil
local function _2_()
if ("seq" == table_type) then
return "["
else
return "{"
end
end
open = ((prefix or "") .. _2_())
local close = nil
if ("seq" == table_type) then
close = "]"
else
close = "}"
end
local oneline = (open .. table.concat(elements, " ") .. close)
local _4_
if (table_type == "seq") then
_4_ = options["sequential-length"]
else
_4_ = options["associative-length"]
end
if (not options["one-line?"] and (multiline_3f or (#elements > _4_) or ((indent + #oneline) > options["line-length"]))) then
return (open .. table.concat(elements, indent_str) .. close)
else
return oneline
end end
end end
local function put_kv_table(self, t, ordered_keys) local function pp_associative(t, kv, options, indent, key_3f)
puts(self, "{") local multiline_3f = false
self.level = (self.level + 1) local id = options.seen[t]
for i, _2_0 in ipairs(ordered_keys) do if (options.level >= options.depth) then
local _3_ = _2_0 return "{...}"
local k = _3_[1] elseif (id and options["detect-cycles?"]) then
local v = _3_[2] return ("@" .. id .. "{...}")
if (self["table-edges"] or (i ~= 1)) then else
tabify(self) local visible_cycle_3f0 = visible_cycle_3f(t, options)
end local id0 = (visible_cycle_3f0 and options.seen[t])
put_key(self, k) local indent0 = table_indent(t, indent, id0)
puts(self, " ") local slength = nil
put_value(self, v)
end
for i, v in ipairs(t) do
tabify(self)
put_key(self, i)
puts(self, " ")
put_value(self, v)
end
self.level = (self.level - 1)
if self["table-edges"] then
tabify(self)
end
return puts(self, "}")
end
local function put_table(self, t)
local metamethod = nil
local function _3_() local function _3_()
local _2_0 = t local _2_0 = rawget(_G, "utf8")
if _2_0 then if _2_0 then
local _4_0 = getmetatable(_2_0) return _2_0.len
if _4_0 then
return _4_0.__fennelview
else
return _4_0
end
else else
return _2_0 return _2_0
end end
end end
metamethod = (self["metamethod?"] and _3_()) local function _4_(_241)
if (already_visited_3f(self, t) and self["detect-cycles?"]) then return #_241
return puts(self, "#<table @", get_id(self, t), ">")
elseif (self.level >= self.depth) then
return puts(self, "{...}")
elseif metamethod then
return puts(self, metamethod(t, self.fennelview))
elseif "else" then
local non_seq_keys, len = get_nonsequential_keys(t)
local id = get_id(self, t)
if ((1 < (self.appearances[t] or 0)) and self["detect-cycles?"]) then
puts(self, "@", id)
end end
if ((#non_seq_keys == 0) and (#t == 0)) then slength = ((options["utf8?"] and _3_()) or _4_)
local function _5_() local prefix = nil
if self["empty-as-square"] then if visible_cycle_3f0 then
prefix = ("@" .. id0)
else
prefix = ""
end
local elements = nil
do
local tbl_0_ = {}
for _, _6_0 in pairs(kv) do
local _7_ = _6_0
local k = _7_[1]
local v = _7_[2]
local _8_
do
local k0 = pp.pp(k, options, (indent0 + 1), true)
local v0 = pp.pp(v, options, (indent0 + slength(k0) + 1))
multiline_3f = (multiline_3f or k0:find("\n") or v0:find("\n"))
_8_ = (k0 .. " " .. v0)
end
tbl_0_[(#tbl_0_ + 1)] = _8_
end
elements = tbl_0_
end
return concat_table_lines(elements, options, multiline_3f, indent0, "table", prefix)
end
end
local function pp_sequence(t, kv, options, indent)
local multiline_3f = false
local id = options.seen[t]
if (options.level >= options.depth) then
return "[...]"
elseif (id and options["detect-cycles?"]) then
return ("@" .. id .. "[...]")
else
local visible_cycle_3f0 = visible_cycle_3f(t, options)
local id0 = (visible_cycle_3f0 and options.seen[t])
local indent0 = table_indent(t, indent, id0)
local prefix = nil
if visible_cycle_3f0 then
prefix = ("@" .. id0)
else
prefix = ""
end
local elements = nil
do
local tbl_0_ = {}
for _, _3_0 in pairs(kv) do
local _4_ = _3_0
local _0 = _4_[1]
local v = _4_[2]
local _5_
do
local v0 = pp.pp(v, options, indent0)
multiline_3f = (multiline_3f or v0:find("\n"))
_5_ = v0
end
tbl_0_[(#tbl_0_ + 1)] = _5_
end
elements = tbl_0_
end
return concat_table_lines(elements, options, multiline_3f, indent0, "seq", prefix)
end
end
local function concat_lines(lines, options, indent, force_multi_line_3f)
if (#lines == 0) then
if options["empty-as-sequence?"] then
return "[]" return "[]"
else else
return "{}" return "{}"
end end
end
return puts(self, _5_())
elseif (#non_seq_keys == 0) then
return put_sequential_table(self, t, len)
elseif "else" then
return put_kv_table(self, t, non_seq_keys)
end
end
end
local function _2_(self, v)
local tv = type(v)
if (tv == "string") then
return puts(self, view_quote(escape(v)))
elseif ((tv == "number") or (tv == "boolean") or (tv == "nil")) then
return puts(self, tostring(v))
else else
local _4_ local oneline = nil
local _2_
do do
local _3_0 = getmetatable(v) local tbl_0_ = {}
for _, line in ipairs(lines) do
tbl_0_[(#tbl_0_ + 1)] = line:gsub("^%s+", "")
end
_2_ = tbl_0_
end
oneline = table.concat(_2_, " ")
if (not options["one-line?"] and (force_multi_line_3f or oneline:find("\n") or ((indent + #oneline) > options["line-length"]))) then
return table.concat(lines, ("\n" .. string.rep(" ", indent)))
else
return oneline
end
end
end
local function pp_metamethod(t, metamethod, options, indent)
if (options.level >= options.depth) then
if options["empty-as-sequence?"] then
return "[...]"
else
return "{...}"
end
else
local _ = nil
local function _2_(_241)
return visible_cycle_3f(_241, options)
end
options["visible-cycle?"] = _2_
_ = nil
local lines, force_multi_line_3f = metamethod(t, pp.pp, options, indent)
options["visible-cycle?"] = nil
local _3_0 = type(lines)
if (_3_0 == "string") then
return lines
elseif (_3_0 == "table") then
return concat_lines(lines, options, indent, force_multi_line_3f)
else
local _0 = _3_0
return error("Error: __fennelview metamethod must return a table of lines")
end
end
end
local function pp_table(x, options, indent)
options.level = (options.level + 1)
local x0 = nil
do
local _2_0 = nil
if options["metamethod?"] then
local _3_0 = x
if _3_0 then if _3_0 then
_4_ = _3_0.__fennelview local _4_0 = getmetatable(_3_0)
if _4_0 then
_2_0 = _4_0.__fennelview
else else
_4_ = _3_0 _2_0 = _4_0
end
else
_2_0 = _3_0
end
else
_2_0 = nil
end
if (nil ~= _2_0) then
local metamethod = _2_0
x0 = pp_metamethod(x, metamethod, options, indent)
else
local _ = _2_0
local _4_0, _5_0 = table_kv_pairs(x)
if (true and (_5_0 == "empty")) then
local _0 = _4_0
if options["empty-as-sequence?"] then
x0 = "[]"
else
x0 = "{}"
end
elseif ((nil ~= _4_0) and (_5_0 == "table")) then
local kv = _4_0
x0 = pp_associative(x, kv, options, indent)
elseif ((nil ~= _4_0) and (_5_0 == "seq")) then
local kv = _4_0
x0 = pp_sequence(x, kv, options, indent)
else
x0 = nil
end end
end end
if ((tv == "table") or ((tv == "userdata") and (nil ~= _4_))) then end
return put_table(self, v) options.level = (options.level - 1)
elseif "else" then return x0
return puts(self, "#<", tostring(v), ">") end
local function number__3estring(n)
local _2_0, _3_0, _4_0 = math.modf(n)
if ((nil ~= _2_0) and (_3_0 == 0)) then
local int = _2_0
return tostring(int)
else
local _5_
do
local frac = _3_0
_5_ = (((_2_0 == 0) and (nil ~= _3_0)) and (frac < 0))
end
if _5_ then
local frac = _3_0
return ("-0." .. tostring(frac):gsub("^-?0.", ""))
elseif ((nil ~= _2_0) and (nil ~= _3_0)) then
local int = _2_0
local frac = _3_0
return (int .. "." .. tostring(frac):gsub("^-?0.", ""))
end end
end end
end end
put_value = _2_ local function colon_string_3f(s)
local function one_line(str) return s:find("^[-%w?\\^_!$%&*+./@:|<=>]+$")
local ret = str:gsub("\n", " "):gsub("%[ ", "["):gsub(" %]", "]"):gsub("%{ ", "{"):gsub(" %}", "}"):gsub("%( ", "("):gsub(" %)", ")")
return ret
end end
local function fennelview(x, options) local function make_options(t, options)
local options0 = (options or {}) local defaults = {["associative-length"] = 4, ["detect-cycles?"] = true, ["empty-as-sequence?"] = false, ["line-length"] = 80, ["metamethod?"] = true, ["one-line?"] = false, ["sequential-length"] = 10, ["utf8?"] = true, depth = 128}
local inspector = nil local overrides = {appearances = count_table_appearances(t, {}), level = 0, seen = {len = 0}}
local function _3_(_241) for k, v in pairs((options or {})) do
return fennelview(_241, options0) defaults[k] = v
end end
local function _4_() for k, v in pairs(overrides) do
if options0["one-line"] then defaults[k] = v
return "" end
return defaults
end
pp.pp = function(x, options, indent, key_3f)
local indent0 = (indent or 0)
local options0 = (options or make_options(x))
local tv = type(x)
local function _3_()
local _2_0 = getmetatable(x)
if _2_0 then
return _2_0.__fennelview
else else
return " " return _2_0
end end
end end
inspector = {["detect-cycles?"] = not (false == options0["detect-cycles?"]), ["empty-as-square"] = options0["empty-as-square"], ["max-ids"] = {}, ["metamethod?"] = not (false == options0["metamethod?"]), ["table-edges"] = (options0["table-edges"] ~= false), appearances = count_table_appearances(x, {}), buffer = {}, depth = (options0.depth or 128), fennelview = _3_, ids = {}, indent = (options0.indent or _4_()), level = 0} if ((tv == "table") or ((tv == "userdata") and _3_())) then
put_value(inspector, x) return pp_table(x, options0, indent0)
local str = table.concat(inspector.buffer) elseif (tv == "number") then
if options0["one-line"] then return number__3estring(x)
return one_line(str) elseif ((tv == "string") and key_3f and colon_string_3f(x)) then
return (":" .. x)
elseif (tv == "string") then
return string.format("%q", x)
elseif ((tv == "boolean") or (tv == "nil")) then
return tostring(x)
else else
return str return ("#<" .. tostring(x) .. ">")
end end
end end
return fennelview local function view(x, options)
return pp.pp(x, make_options(x, options), 0)
end
return view

View file

@ -24,7 +24,6 @@
(looper (prompt next-line))))) (prompt)))) (looper (prompt next-line))))) (prompt))))
{:start (fn start-repl [] {:start (fn start-repl []
(let [code (love.filesystem.read "lib/stdio.fnl") (let [code (love.filesystem.read "lib/stdio.fnl")
luac (if code luac (if code
(love.filesystem.newFileData (love.filesystem.newFileData

76
lib/stdio.lua Normal file
View file

@ -0,0 +1,76 @@
require("love.event")
local view = require("lib.fennelview") local event, channel = ...
if channel then local prompt = nil local function _0_(next_line_3f) local function _1_() if next_line_3f then return ".." else return ">> " end end io.write(_1_()) io.flush() return (io.read() .. "\n") end prompt = _0_ local function looper(input) if input then love.event.push(event, input) local output = channel:demand() local next_line = (output[2] and ("next-line" == output[2])) if next_line then elseif (output[2] and ("Error:" == output[2])) then print(view(output)) else for _, ret in ipairs(output) do print(ret) end end io.flush() return looper(prompt(next_line)) end end looper(prompt()) end local function start_repl() local code = love.filesystem.read("lib/stdio.fnl") local luac = nil if code then luac = love.filesystem.newFileData(fennel.compileString(code), "io") else luac = love.filesystem.read("lib/stdio.lua") end local thread = love.thread.newThread(luac) local io_channel = love.thread.newChannel() local coro = coroutine.create(fennel.repl) local out = nil local function _2_(val) return io_channel:push(val) end out = _2_ local options = nil local function _3_(kind, ...) return out({kind, "Error:", ...}) end local function _4_(parser_state) if (parser_state["stack-size"] > 0) then io_channel:push({"next-line", "next-line"}) end return coroutine.yield() end options = {moduleName = "lib.fennel", onError = _3_, onValues = out, pp = view, readChunk = _4_} coroutine.resume(coro, options) thread:start("eval", io_channel) local function _5_(input) return coroutine.resume(coro, input) end love.handlers.eval = _5_ return nil end return {start = start_repl}

View file

@ -24,7 +24,7 @@ cleansrc: ; rm -rf $(OUT)
LOVEFILE=releases/$(NAME)-$(VERSION).love LOVEFILE=releases/$(NAME)-$(VERSION).love
$(LOVEFILE): $(LUA) $(OUT) $(LIBS) #assets text $(LOVEFILE): $(LUA) $(OUT) $(LIBS)
mkdir -p releases/ mkdir -p releases/
find $^ -type f | LC_ALL=C sort | env TZ=UTC zip -r -q -9 -X $@ -@ find $^ -type f | LC_ALL=C sort | env TZ=UTC zip -r -q -9 -X $@ -@
@ -37,8 +37,8 @@ FLAGS=-a "$(AUTHOR)" --description $(DESCRIPTION) \
--love $(LOVE_VERSION) --url $(URL) --version $(VERSION) --lovefile $(LOVEFILE) --love $(LOVE_VERSION) --url $(URL) --version $(VERSION) --lovefile $(LOVEFILE)
releases/$(NAME)-$(VERSION)-x86_64.AppImage: $(LOVEFILE) releases/$(NAME)-$(VERSION)-x86_64.AppImage: $(LOVEFILE)
cd appimage && ./build.sh $(LOVE_VERSION) $(PWD)/$(LOVEFILE) cd buildtools/appimage && ./build.sh $(LOVE_VERSION) $(PWD)/$(LOVEFILE)
mv appimage/game-x86_64.AppImage $@ mv buildtools/appimage/game-x86_64.AppImage $@
releases/$(NAME)-$(VERSION)-macos.zip: $(LOVEFILE) releases/$(NAME)-$(VERSION)-macos.zip: $(LOVEFILE)
$(REL) $(FLAGS) -M $(REL) $(FLAGS) -M
@ -48,9 +48,13 @@ releases/$(NAME)-$(VERSION)-win.zip: $(LOVEFILE)
$(REL) $(FLAGS) -W32 $(REL) $(FLAGS) -W32
mv releases/$(NAME)-win32.zip $@ mv releases/$(NAME)-win32.zip $@
releases/$(NAME)-$(VERSION)-web.zip: $(LOVEFILE)
cd releases && ../buildtools/love-js/love-js.sh $(PWD)/releases $(NAME) $(VERSION)
linux: releases/$(NAME)-$(VERSION)-x86_64.AppImage linux: releases/$(NAME)-$(VERSION)-x86_64.AppImage
mac: releases/$(NAME)-$(VERSION)-macos.zip mac: releases/$(NAME)-$(VERSION)-macos.zip
windows: releases/$(NAME)-$(VERSION)-win.zip windows: releases/$(NAME)-$(VERSION)-win.zip
web: releases/$(NAME)-$(VERSION)-web.zip
# If you release on itch.io, you should install butler: # If you release on itch.io, you should install butler:
# https://itch.io/docs/butler/installing.html # https://itch.io/docs/butler/installing.html
@ -61,6 +65,8 @@ uploadmac: releases/$(NAME)-$(VERSION)-macos.zip
butler push $^ $(ITCH_ACCOUNT)/$(NAME):mac --userversion $(VERSION) butler push $^ $(ITCH_ACCOUNT)/$(NAME):mac --userversion $(VERSION)
uploadwindows: releases/$(NAME)-$(VERSION)-win.zip uploadwindows: releases/$(NAME)-$(VERSION)-win.zip
butler push $^ $(ITCH_ACCOUNT)/$(NAME):windows --userversion $(VERSION) butler push $^ $(ITCH_ACCOUNT)/$(NAME):windows --userversion $(VERSION)
uploadweb: releases/$(NAME)-$(VERSION)-web.zip
butler push $^ $(ITCH_ACCOUNT)/$(NAME):web --userversion $(VERSION)
upload: uploadlinux uploadmac uploadwindows upload: uploadlinux uploadmac uploadwindows

76
mode-intro.lua Normal file
View file

@ -0,0 +1,76 @@
local counter = 0 local time = 0
local function draw(message)
return love.graphics.print(("This window should close in %0.2f seconds"):format((3 - time)), 32, 16) end
local function keypressed(key, set_mode)
return love.event.quit() end local function update(dt, set_mode) if (counter < 65535) then counter = (counter + 1) else counter = 0 end time = (time + dt)
if (time > 3) then return love.event.quit() end end return {draw = draw, keypressed = keypressed, update = update}

4
sample.fnl Normal file
View file

@ -0,0 +1,4 @@
(fn a [b c]
(+ b c))
{: a}

2
sample.lua Normal file
View file

@ -0,0 +1,2 @@
local function a(b, c)
return (b + c) end return {a = a}

76
wrap.lua Normal file
View file

@ -0,0 +1,76 @@
local repl = require("lib.stdio")
local canvas = nil do local w, h = love.window.getMode()
canvas = love.graphics.newCanvas(w, h) end local scale = 1
local mode = require("mode-intro")
local function set_mode(mode_name, ...)
mode = require(mode_name)
if mode.activate then return mode.activate(...) end end love.load = function() canvas:setFilter("nearest", "nearest") return repl.start() end love.draw = function() love.graphics.setCanvas(canvas) love.graphics.clear() love.graphics.setColor(1, 1, 1) mode.draw() love.graphics.setCanvas() love.graphics.setColor(1, 1, 1) return love.graphics.draw(canvas, 0, 0, 0, scale, scale) end love.update = function(dt) return mode.update(dt, set_mode) end love.keypressed = function(key) if (love.keyboard.isDown("lctrl", "rctrl", "capslock") and (key == "q")) then return love.event.quit() else return mode.keypressed(key, set_mode) end end return love.keypressed