From 97f21e192f2c4b533bfd1e1bf21b6549216749ee Mon Sep 17 00:00:00 2001 From: wan-may Date: Thu, 18 Jul 2024 17:00:51 -0300 Subject: [PATCH] move UI for horizontal aspect ratio, add load modal and new icons, tweak camera --- conf.lua | 2 +- icons/eye.bmp | Bin 3126 -> 3126 bytes icons/favicon.ico | Bin 0 -> 78429 bytes icons/layer-ainodes.png | Bin 0 -> 3126 bytes icons/layer-cities.png | Bin 0 -> 341 bytes icons/layer-coastlines-low.png | Bin 0 -> 341 bytes icons/layer-coastlines.png | Bin 0 -> 424 bytes icons/layer-international.png | Bin 0 -> 383 bytes icons/layer-sailable.png | Bin 0 -> 300 bytes icons/layer-travelnodes.png | Bin 0 -> 301 bytes icons/load.png | Bin 0 -> 3126 bytes icons/undo.bmp | Bin 3126 -> 3126 bytes lib/mkdir.lua | 25 ++-- main.lua | 43 ++---- mainmenu.lua | 142 ------------------ ai.lua => map/ai.lua | 4 +- bmp.lua => map/bmp.lua | 0 cities.lua => map/cities.lua | 2 +- lines.lua => map/lines.lua | 7 +- locationQuery.lua => map/locationQuery.lua | 0 map.lua => map/map.lua | 35 +++-- territory.lua => map/territory.lua | 2 +- travelNodes.lua => map/travelNodes.lua | 4 +- button.lua => ui/button.lua | 16 ++- camera.lua => ui/camera.lua | 9 +- ui/loadmodal.lua | 61 ++++++++ ui/mainmenu.lua | 158 +++++++++++++++++++++ modal.lua => ui/modal.lua | 8 +- savemodal.lua => ui/savemodal.lua | 6 +- textinput.lua => ui/textinput.lua | 2 +- 30 files changed, 305 insertions(+), 221 deletions(-) create mode 100644 icons/favicon.ico create mode 100644 icons/layer-ainodes.png create mode 100644 icons/layer-cities.png create mode 100644 icons/layer-coastlines-low.png create mode 100644 icons/layer-coastlines.png create mode 100644 icons/layer-international.png create mode 100644 icons/layer-sailable.png create mode 100644 icons/layer-travelnodes.png create mode 100644 icons/load.png delete mode 100644 mainmenu.lua rename ai.lua => map/ai.lua (96%) rename bmp.lua => map/bmp.lua (100%) rename cities.lua => map/cities.lua (98%) rename lines.lua => map/lines.lua (88%) rename locationQuery.lua => map/locationQuery.lua (100%) rename map.lua => map/map.lua (87%) rename territory.lua => map/territory.lua (99%) rename travelNodes.lua => map/travelNodes.lua (98%) rename button.lua => ui/button.lua (89%) rename camera.lua => ui/camera.lua (91%) create mode 100644 ui/loadmodal.lua create mode 100644 ui/mainmenu.lua rename modal.lua => ui/modal.lua (74%) rename savemodal.lua => ui/savemodal.lua (92%) rename textinput.lua => ui/textinput.lua (97%) diff --git a/conf.lua b/conf.lua index 1670470..826d89e 100644 --- a/conf.lua +++ b/conf.lua @@ -12,7 +12,7 @@ function love.conf(t) t.window.title = "dcEarth" -- The window title (string) t.window.icon = "icons/favicon.png" -- Filepath to an image to use as the window's icon (string) - t.window.width = 800 -- The window width (number) + t.window.width = 1000 -- The window width (number) t.window.height = 640 -- The window height (number) t.window.borderless = false -- Remove all border visuals from the window (boolean) t.window.resizable = true -- Let the window be user-resizable (boolean) diff --git a/icons/eye.bmp b/icons/eye.bmp index 96b2e45463efce1ac60e94668cef85be2898ccfa..97e1a5baf9065aa077fdd749fcc3457958ed556a 100644 GIT binary patch literal 3126 zcmeH_F%H8p3ZtlVb?WfGWiMm)q(TPh>AE<5oKBqwU9mXCf79DqUUWgF1;hd;iLleVq(3ee5rOp zdoA4xvS7bLstYVyb%*rxdcQ$Cii}vc_Z9&QEz~&;^%1P(GLRElT-=l5P=})OQ2w2$MDfydWTg;`Pi}vOSf-^ zhS*DWTi0t%hXw46%=Sck548wrQGF{ibpR}r+)3$90;ni>p#f6um zB;wXu=Nvoq-dlU`8kHq=Lvdq_D62T{pMxO((>%B3omNW|4Sjq#yM>h+Qn zLcocr-|alqNIem>&3#pJo(y#k21+~&yWOtT8|cIsbGcmbeOISx8d-2W9@P-?86X9e zhOc9-z1?oIoxx-oR#Rt34P>oNM!4^Lbdq<%5=22=EFUUr|1W{Zyt3VUzu)h%i+%tF C4wo4K diff --git a/icons/favicon.ico b/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2565fabc279728a9da83152b4cfb5452fbb1972c GIT binary patch literal 78429 zcmXWAbyO3M|NXy_0}(cIAUV2(5lTsp?vhZXB=@2j4I4dRNJvXbgM^aO9SYJRAYB5& zKvWvO=l%Kp?zzu%?m73I$G^`%E&u=o00I9K5Wo&l7Xt$50RTXpfu8z9awc*B0Ps*# z17Y;P_J0Q=0RR9my(=6601QAAp=1)U^y_vs>DLQCR+2E}(J-D7k{vi6O8bFpS~#Aa z0+hkNh;e|3{&1F140bfwM0o^&3i-p=N&mn)HTE*uP}_@elr zgy|!IL61m%-`ah0BM@xYW=KpAwgctuG`A&58PtxIo`>#1EjEB4h?7l3@ zYxY;s);;RzLl3Jkou?BGotgNlg_~zU@ab}eRdzU3;UWb6T{PUf`|_%Q&^g)l5>LG` zF|vTJUq+tvzf`!4pSV9$xZj()nL(4I3rvyl=z2#R0H^Hnsm=7=SLW z?=RT8{d<1{i`f1>-oGIbhV?|(qQv`uwH%lUSn}UyFR!a-Vbu6D3!eU?DPw9vDQF(z)yB+`n*M6>E!1~)d}G2QJQSL_dlpuPtS^Xv+#b{s0P<@Ftq){+pzLbY5G?3t z&`Cu}l(kdqj{k34x+P}wp!>1Xdl&(>M6B>fSRd8A$N9hErv(q=dT5lmc@^tQ&vvdV z*LweMWiBLPK{grPv#5Z(88p-N{XUuiAa~n-|M-_v!7U=}7;VEj_q6iVevR|bvmu4M zVe8oo09gK(c8l%W-dy1h3b4t~uLwG)JP1+CbrKq%f)WgYKgP3TJFcGYr!S}gXdy!4 zmX3{D@1JXBfs~^XToN!Hr220wX7&fq?l@r~0ukgG)haYP^=i_3xIch&T^m3NfNbP} zNC0#gS-`n&WS3i|7>OmnrRNyI?cUvwoncpt!o1@3(5uc{Rz3cKG7cS@*H%j7O0kM?qDfN9$%M#vhej|0 z8YOsSBR!nt6%tkhNmqUy15h4UdPq1{-w}|1-*0`Ba3P33s9 zq_q7aGQDDb2rDd8l4G`c7egza2KpY1z;mod=0^U`H^J>+xz$dXNtbK_8jaXX5jdp^ zf!}Tkljqb|tRFK1EDDt|uND}>w(<8#_ncvObvNlzBGRO+F>Hs2CtHVv-icIz?o<4Y z>_tn9f=N7r%N78mO;@g{N{bg%-F(>=u&NTR_(zLGk}nwKsa=<_t%*B} zn;Yv(K?Ml3H>rj&D{Od()s0=> z1hD^3gjn-XKabbo$IgQ+3FoyWV(JM2%HSt4c2)^|sYqQi|huR-Z!>8weF! z!#>G%gVtaEel)7gp;m3m{lrQEkbG~BWWN7ZFnG*%LkQ?OOMr77X(GHB^eACk4V^BnB^)b@1dgAH{YY< zX@N?5LS0DY-rh|<(@SI+d+{~Q z94JQ+K=6@(-M&KVb#sRALN7DrYf93ewSWo9(qYev@>M#V;8u)wvdg5$7_8PGUkr2t1`pafnrii)^GXq+9<9)-;^ zjX;cu$V0YVR%1(zGzyrSGA;r|yc20Tt>VITs%7ZRls(}jG%>-o-_Nl6il{W%S`bwE zm{OsZflpRADf6#9CF%M;SuV>v?E-OrSXOOhEz)RS*_4jI=6xs^K+Bs}SaZznA>R~BLfV=)|q;79`n(U?*1z66%d?=`6BoQrY?HU5n zgjn-a*KkDhr5-$iL6kvYd?f-s5FpJp0ttVm&*GrXWT*I($wgy2jxbu$Q*Zqx@DazD zqQC>LD8*jOI8)UuCq9Vb2*0QzT`fI;1khU)}nJ)E7ujMuLrsUATr9@dM&nUWy=8tCI!q-D@x}-7xd*)BQb|UTt zVK>>!RMjp3%mDPFR$H>m2n#nFleB#^kTxT)j6*Q4kM6(nCipVLFzl_#yH6Kclm>hm z24~3eZ7qZm6w#_q_r8Cb{A$Y4(b>`2-sS_jl~qDM&o7UqNHk-QHQ~>O4_+Slj$4^{ z16tbx7M5~}3-9}$`>k)c8Nim(d368;W{BmI{mdt_|1V-;|DwfuRGj@@lKq}G`JUQ^ zWX(K5URK?N?&C7Boh7n@ix0b@FI5GXm_B&5%Zb_dDUhvXT@Lu0_qy>M~5WdX^A|Cll z@o}{KDMKPaL!Ri7AVkZMlTktZ{f(>>VJTvA%(;=is%k*_KPDwpGCSIkf7z4PccVS` z|GGEUIQt52w`pz)?tT>X-ybPlP$jQN3r`&lTCK^G7bI}8AH-PwO!l#hks9&^CSeV-yfyOoZPZt_q0~kp2-Q=bHU=YXNCSEQf zW$I$=Ip&;8OLL5p7fN_6W9wK{29eY)+}mStx)!!$e8AT{c zOM1T(+x6JWvHVK>TC0*%j6^l_ZCbB@X!kG8JsE0`HG=!Ydx49Bd#4}55B|9&B-ISE zUGG>w?zX1*{@?Mx^!C=vmc^Uy`$J)vAb?? zI73~oYGD+B$K52DTlr1N%`x-^8^QhPeJTYyrDEcYX?W1J-oB#vpAA**NYBHg+d zJrr{K`G6{!@FMgB2l{sR5N&TPa$5%KdOO3-K6i6hoCIcLS&2!f%0;DcxO4ZQehlxY5tuVjHN)R~=&%Eym`BeBNaN=OVK z2I7XQ2uWZ%z?Alr(tsL75JpGc&^&%luULS0yUQMTVt2I9OEzg92dKfA7_+byX=fj> zQmstaJ9<47MWs@dB#y*F&tKPKnn>o=23P>+4Tz1k4~G{{$HzTx+8^L1j4FxnigZ}N zj)2-G#gdVjr?LQ}_ZkiHKTJSLG#s#QO}*jt6n)ROlJ*(>n|B5HgX!jhD-T2uCbbLx3s|=i zwuFfdDK-gL;K@SuE0EZE+W6DGAZX=^`bj?DBWVbvv_Dy~Cs%BjHq|?g$2QDMs$Mcv zqJbIur7*<+S1Fi0!k5Z|dF^RnhZ7sb+T#Mo&Uqn0^zR!$A_&?vm;;3il1%Fp;Vg4; zwu)#17B%*S&osEym1-7=`+E@DDP=Y>K6lnOf7bSVrtNuy&)jCHWUzG&hdD#>Ls&Z2 zB$c8QaYxy6{7wo$pytR*H&v3o7h?UeL0qdQCU8zmI400=UtX{%yPgmWAD54E@pI2# zKv{HJzXWMxz33q2m`Tytym{}srVhB8JY22I&F$t5{I{_EHfPOgj}WQjtX6n7B#S@I zn_V5P$+$9j;ltG}6OPRAI|LZ56x8t=E$}!1`P<+A_5sK7aT^};4S}YA#quepVJpB< z9SmdQp7IH~6VyYHacLavcSmhNro#F&jFmeZdIXHFWA4Kv$v)<-l1oeM|MAEHXe{?N z3-7nZR3VMDrijPhj^5CFRXyY{zFGho8Vyk-PnAYy27SpKjyPIT!$r~18W?(i;77ep z{*H;~b9HovnJi;J30-8)Anv;zHt<6gtZ{!T()=tRO)Uw)jN`J%MRP{P8YIWk=i3gl zk#25QP5*OEO%12vk#Yt7UX@q=kxNe1@Y!NWp#1Xi*&^%SBJ;u=#W-Vt2Nw|yKpXa4 z{w2W=I{-J*Sy4h<^wDmqk*f>NLe@USqvo*sZw!xsiCMge0|Cx)ZjCE zCO3f}@_MC`WrpA59}1+)RvBl~!5w$hx`TT2l+8)^er)E_*ylFQubHOf4`o9B(?OVW zn>>4TN6jgXi3AZBeUMl2`>_*5uTyT*BvOkfnH4gVyWiZoZWJcNXuxzhwwa>12&1Td z@P=urlM*1r$&d|;dUkC1?^r={kye)OwIJ&5I!c@Cp~D;7G;`+cjT&7@cdaIl0}M$h z0Tm?5S$sO-?#oKb=f{@*TqmQjkJ<3q~Fa5A0nvXapg25+|5XLrJbZUEN*l^Y^(JTUHj8+wbJNT zlU5J2GsAzAnz#yt{-LVUdOD_+z(;Lph=_)!CmBXVo3IrcB^roP?U#yMp~Bdsm#MJA z=VRld*Oth&M_c#<8952v4v(CVAF3uTAGz8`7=9J^NrrYl=>2whpf_5tmg3;+Za69i znG!{U(MzeyS8!?cZ3*F3Ui4y9H< zr6(&a{}qNaT)av18&4Ql^CF3U&S!*^YoX+zPI${(giVZuKnDK1VB~_}pAEWDYq80k z(qjhjXtwk7Z@@|2XU|LJ(l7(W<%s5af>o*tR4ZB&Br59$L`lOq?Yw!MnH7gmP zR>^CS{#52%3AxV^%lMa%MJUR#`@qsb@C4g8@zRt->n#VCoe72_TBg*>st94Yf6?DJ zS^g!nZ_*CZjbv;7jytai?!HMsz`@;?CBD_-4^`F{tQIV4nxe74$1A@;9pa><)VCz2 zT$uN(B`qB1$4anRA0T2sl+MZAldp|To+0KxKLRa?sxEDf(WmEHmiC*gmaTQjz!{19 zI^=$J`jX|8mMQ_)0Mu-6Q-c;UkT_n`G>_ZGL2r3#|_rrzOeL+7ue3 zt>wyc?(Hr##-Ca3O+VIA=$4|Obp=CU;zjc=m@m-eCWFJA5w%4!n|CQ4V_IQi%sqA8 zsmG(-9bg^^?la8fYZh&NdPF^am0Mg5x6wh-5)3dJi+i;_$VoT*nfW4d%6eS!4fE+& zp5liKorT}N*zSm7&YnhKs{z7rI}TVKtrC*D#>MgZ#MqFFo14`_-nsDbcVR_*_%r?{ zaZ7yleEZj|P-D|j2e-P!{l=!6nyNBQ%EE)|F4uQM&W^$ye8Xc?!Sz}xUrA-$p`K|y z#sZaPFW1h@i1WN@=^&qA5w{BEKcHgIAA#7j-E6bil zvIJ;H+!K%OB1!jM8O0&O{H3kZM(z0zYb|;P3%y2>8V;)aM&&{_@1(a2cFwZ3qC+yI z^L9-1s*!f@321ZQS`djF>CS^W(i&pcWb=FQ79^gscb7zI6;#$`JvlscSMxmbpW*8g z@n6!AVSwCaC9+T&+ePRz#A6rRxUi@7R;?fVOPgqYUWmE}eal`$zYh^(&(ZKDz=8pm zh*?8KBEpdv=j^6v5?J%W;xMMs{Sop7*?VygUt`d%z%-emNA*!o)j?aE`*pM1yJokl z<{G!3+d&HwmhtAnO~bj(WxG2RXY9)v*^T! zfZ8RaT>gc<>?nASkF|IWRgK{kh1vv=<`y8vIj25~QaPpU_hvavbo|O%AWT_?w6d(r zq$n!RW>2KB00wonlWWgM!@vAFPGx+F>ze(W*?4~?Ne1?L205b{(*Bp6|8#?>QWa{8 zD|7?akR8U0PEePT$-7XKJG^kl)Xf!N#PI>YK02(s461i6Ej-BaT~4j4lDHkz(HZbf zTsPx+;YaX}0^{RxK|CW&760;Jz=)dG&%$xmN-X>aRTR9NvN|TsKmZd@0Nawx@~fQ* z8BvWj*}L-(y}`V~5rE?Lsk@%P zsSJ5KCOXEy$y>^4av5w^-T|tz!N(dZ!e#!EOPEwu0>}ZJ^tO7 z*1JZbLx_1OP8;im>S4x2i$5t;9p8J&Gz-s{j`9IZUqWLQB}j_k1jagrMJ?Hlrec6r zb2(!_BW1=`-lEy2FG<{~Yf=$e6ISt5#3p*(+L^e*b%mW``Zz`|M<~sE+7amck_SMG z1upux!L*L{kGdD4d+^zW2Fp+0fn+*z@8{>0UuaiV6;|sGS;NqAo3Py8XODL<9VN~6 zw4N1(_lue%Wl?+*ONqV4wC_J&w*2=8_*KLDZ(40-R&7y>AOqOz^hvNs$ zl-29i;B|0#9{BITk5r98Myx%oCacLXUeNw?C35v|=h8Dd&tQM`X17IXKas)7DC8s7w+b&f-4E&E>w zK3+^?g%3%*C@}S-fZ*nf(y5CjCFiSLtX#bGgvYa8thQV%B4F_Z1MJjMeC$LM@F19_ zRjL=zwobomB1{OrPsF7h)KY%RIFR+|p`%qBt4w1^rlJZ4*G7f+!k6^etWx zgL&e)V7W_ZcqVCX9tMLgMcn>(;Vl_d^x-tqMEn`A_*uL0j8u%SE6c$j3R6}2Xx@zXl2 zTq>G*2k2RQCS9g6p%hgNx`aw&4R9$TVHA}T8X_wE^ss-h#sLia0Tzq8xENcPRCUKUk~Gn?uaz*l}~Y1lawXNgVwidJw;F(N2Thao8rs*0+r6vwa} z$q#_;R-c3(lsWWDO-N0MkB>&2)!TSdHu!+?hJ+toQYo8^oa5H9>v8K1uP`D@KI` zh9Ci}5#Gq|rWOn*2MR2lg;{*eoq+1|<`xuq$>e!5 zljN3>l?M(5TES&v2c;{1X;eWC;r*@;O-!2x(Be!H#7^NZ|Q z(vU;X9;=x`2fb(gP?`y;OnR9KX=nTC6-%hSO-*zYy^N}C0RB_0;I}hepoJ)tO0f}t z!-!t#Ijb?q++ODm|D!_gdX|P2L5JX?uLOw!YtnoFv~g6%pmH*)Z(4cuDYhg-YOia< zo2V@kNBZEkw0&CH0k6~JpCdn6CfJUzCKYq>f}{E3HN1%`Ut$@JK0_7AL3tR(k+Q)M zL!QUXCECWCFho{dR1Dff*!vp%mJTT(zs*wD;=)SlOX^uq0jbI_vHL+Zjt zQcqEm(1qS+;RqwCA*@JVe>-Z>#VS0o%a>BX-m`moBPrwt9(MOu|HNyp*qB^qD8Ubw zLF{GqmYo;!9s08>!j&njDx&6a8=zC=8tLOX8iC3Y{U%OQ>dB+58l{G0w$qtWw$Kbz z`R+jM%t;`qEThKKQCIG;zW~M4@0GEON!vt?SU?^kBtTQ_Jy6w{2^0kI9}9S~5U_k6;3HMId<4ez z+Jk=XG0sW!>KRv7vcrp-=+CWUJrv~D(dYZ+7ynjRf@IuHp{t5Bt_M(p>QSx-40u63b9v|PKV4bG)q^7D*-7O&r ze|+-qj`h|(wovkTp6;(yQ9XUl{Kzxk&(KeG0zXXYSaV3&P%QGt!N00?2`$DsY6V|f z+1CnG&qRSa4GtE|H0@YTi5)1kVj{ud^awKnTSAxtypP~yymUed39YG%eRe251U3PM zN1oSXo#7Q08HW%A7P7)&I3mp^d^+yog#B+$& zhK9Kb^V?&acm!sw_QzXM{qKTp>)?<|UEX!-Q*qX0V#jFJ=@2!&>vWM6d9@v7gU8Z< zEqe)w=xd$Q>YAgC$)*1H4Y4Za*InYVD&=jpiCQSX9GR=l1bWjsY9H-#R=7J2T;(Gy%i!J!Y#QC8EsA&{~MXQOJ;_G=`s%i!&`4ejmiLFXrv z|6*0FErMhekXrVd^7=IBk$cSJVcNT3S zDjWMndTh0SFkrvs+%#InYD;%v<3%iCmyds}2McAu&tT>&R^8=3Xe5+?H3mq9N=(A_ z4i5rFw^rKvm?EEv3+(l5Wzl9;6FacTJtr3^zm}h}o3)VPRdui!0c#*Cp z{1s{lJSoMExINE=Q?&?X?J;s_w(bFF_eB6lnMuFUV=IMh|^wSa2uZa0qAS7^HS z2>r0X+O=Y8+B7LQad+zV>M)2oQCb8xVVhqNvvun7=kB#Kv}nXR%}9Wlfi#7EOewxX zGyaN|9}CAmHY^~2is74l!a35wExkReyPJzuc1e}+HcHRPdOb-7=xZa-CEW8agx=6$ zE(m`D?o9t3M=RVXzxw$g&%f#D%z7#;Lu~eK;;XE>n1aND_;3#j1$2$~fK#gsfX;4K z{^5`_uXk%Oj0KAmH5+)@Fkf@rw#rKBKew{7e06uXb#-@_*xJ6FeSK}YvchPRK0i|e zwXvknaDlbd-nd(3?`7Y}*~guVc^bi3AXc+6DtecscrS9G_BiRy7h2K-^7k@T3s4r2eh}deuzWpfD(vu7j z)mSBu8ToBJ0P%T&De>H3hKP}5pejN_H;B!Wm$y(7cOJ)|-Sj&O#Gze%4Q4;gAu?*x z+b(3@S1JcYf1gA!Ok^ z2<=}^>9MwS+tM}H$cAQ4Yy$SL=NY{klp2Ok%(ZpRY<-^=HQ9Vgm)oGkzm+!q#`(D_ znI@Owz*}rN^clD4Ql_)M!}njV7ild0sxiL?eO>6WtwIn@8_x7695g9keaKP+3F>PL zp{j(lz~Ap+7hTby8AOlM!P7}E?97|7{ zZp8YNs6EYQUz$I`yn=_d!R}QRjCYpqsgH;a;N>?26w00Q<5?c zL2e}spHWPXnb5j~;>?vXPHNy@YR)03@wM>U#H#(co5&(Xv31@{mfs{^(`3}}K5%a&;YA4P-55#j^{ z9*bob`Wjl8)t}&(mVuYS@4gK~7U|8ov~nULjlw_;0#0}l@FWj4I1#sg{~LdQtto(a z#P?7oklkps1O9K9O~9FHBc_{A=2M|6xd&k{p<&TK-mXs~m+q%8=AJBV&6AbD&A4GQ zWg~SeZ|;zwATK@P)k8@&n)IsosD4ZTDwm*{^UlSiE7$I|#eQ2e7RuNI&(969{h?3p z)bM^e?T<_Qw3Mz`zij~g{ngvO2Ew48Qh6WQVqWXO?S9|Ysv==`KkkA_$+O#1I#tuJ%(4eV!42y%XjkD(?^I134h|Gzwry{-G(kYdFjT zY==;fA}#$WPJ#l7_5*g9FZRjOrjHpqg1-DxVCT4V&4&!bQ4f{*+G&g*G86RG_vq8i zyY#gQ@fV-6`s6$CvF`=uL+la#Az$R!3A$@f4s-ZMOo?5Y%#oG*GQRCBODmM7YyG|~ z`yC7s9cCb%UjB z5N)j{%frs9!^oqycGqr&St_dQgAH5jl{NgYu(kazyzg2|o13tI-exngDP5tYIZ>Gl zxPj(-BImIlZ^xHyW`zl3LZGMt!(5EE(<~DYMS}UD{;qbDeu`VIss0^pQicK+k4R zk)vd!)WmWjJ@IN24DiIQqoOU%*nNnf`2J|L>6ad39LQaeOeyRb-eevh-}qb`@XCy0 zT*(eG7R8w!KKT3ka0uMkRIyC|%{{j2(1=$VncT$x;UM@sG#mHHWFc=q`1ttvVCS;c znw4$hu-(7>@9F8!@N)1Lr=3akDh0$&5$?kdud5AbhJ8qeQVXZ##YsDYkhRy zxq9U4{-WQsbP!6v8}&1-A5W8@v>(i&8o>isHPy$r(1vafRRh-mG3H z*o%%U?Ik{ypeURngOXs+D|aWf^^)^s#12L9ssLWAAp|`+Fz^wL9mq2~R4NuT6)bcZ z&pnexiidBbj_mXMgk%Xr$CD$@UFfprM-EqQs#WJu6-)F>Swu5?3-M40&8gaFw^qkm z9K7vQ^Q)R8p4~9)C$>&}2J{huj!FD$3oe=ASBM%+F|-r#*dJt`UQKr*qzo_qekoV3 zJNQC%(@o9u(I8EFax$}a(L+JHLFmWxNetf}`^=yAdjIuUe?Z;-KN{drvImpFa_Uzt z`BSw_eBbFB><%OFHpGM??Cq7d<~cCW_-^!B@h#7Qa|n(H@H|VfRsfk^mDp6{zTA1# zc3p*EGqE}!I`$)-K?S=Vy~%nMHx+|&;7v{b6-bh3AI~*L*6T;fm0F}XQ;2-=>wt;W z-qVB}FSZs20#0z)=+4e-OC(($QXL&%4}H{oW1tO!&eQ47L=8bNpkA-c8b>3nKvK}i z(3!#(dQqN~ps#86xOH%0CuyDFIr$}bp#v}bWpHkHIVM3~DX>PGVAe^V&tLogiK7 zbAOxie7dt0U0|IQk$sk+*pSxD_s`1~r>h^0zM9hYNoeNsqy{#7x_iRM4PT=;gm}~( zvRegaDxy353?sTnzRr~GX8y((J!3bkI@zf=wxfMj4)w_>uRl8*vn%5l&WH3Kt%fUr zxB*`_FyEW8rm7{9{G}j^FTCe?k>d8x)Be`U!F=U6pMh7epbE(_1)Il1Y!RockJySI zBIv5!bY}jTE*yQv`fGrK+Y zQ2;Z1?~^nBnVp}q*0$L9*VDBiWaE3sZrbE@Lxy>H?3f%;`70xPpTE zl78~t{$$2L-)8vzd8Uf2EKz(pIrTwiB6>67VI)<{15xj*B;-;Z_oFbK7>|(nJ0AT- zMz)BDaC5`9=azV#g_XtYYf>L6xvZ7rac0WkhULFiwX#N4W#FpMwM+Um!lMzkIiC4E zI-{u=9vEMZ?FVwyvfcd&;Ky3AD-&Ohp($NXRh!NTov%EB=ewW!%Qa03MaxVCtmR~e zM8knd}Z~X|fnbH&a`)1!wVqk!B;) zwHFP`98$x_zVq6qrVqS^5$yoE81S#{TyhSB^rflSX?CVCbV}tYFt5d~v)iYaZ^!VCbkyNVPP4k0VP{!;`wjXb7O(XReX7qn(4yN<734cqPI?a90WDAuE?o5 z$+kANPN7NZ%@NXrE4I0slIzDrxeIirtlyd}?bjr-loekrTvQyM#KFz?q*Z6VqGVY= z$vv~Zx$$8}pAb?cC9&f-K9D=MsC2HWvb+vo_h;z^MziObJk$^!Wqd4ZX zFimn7d&4ESMU>0KMS7YG^6Q)T%sq8$A)z7H^fJazt|#Op@Bhrqo_|Y_>33Iu?`G&4 z_9f_O#8ti?a@Oa%8H{(mfC&&(u1=`20ch+RIri6qZ;6wL2k^V2e1zXq4%pgsps@=reh{fS|tpeX_khr`%ZJ){ozC_-=Xc`?j+)2qz5Uv)l6(`VR zW2J)r$2eXPmIHdtvA%#liDW=;>)+{#V|bCa%kVsYz(v>&7b6&uHvt^0RBY1DV2F!h~q6#h|31eA|N@I&nedBI_}> zI=#@ulLPyLo_J3{#Ha?I1CGe)D9_2hs?I0@c=ll)KNz-~H|&T5E<4}%og~~c)F+pW zu=0yM<0$RX;;ujMK?eeSdKv%pLi?$&_GJnCk6dB=P!a?WRG=Yo&RN}j$GD4{c#gf#s(HvaE6 za*=H{>-H{j5s$CBzV4L%@wdwD00e!i>nhFa5){4k4ndxS#AGo%7 zbW-M$`d_9|9CO-m_!?8B0FePbtuTKFkMay^y-NArq3;J;S9`_mHMW-Rg4`tnIFD z$n`jZOJoQ0-;*@=`;=DVQdvby-sg@p7~@I0Covz_9sp0QNXP%1U~47(eBE*9L$qMT-YPkbnF$nxUQ z0+#T07PWb}$NI-x-rj^O)xm;};p2!R z2WV`HTB~$q)GVs-mbHG3w?7Fk9pinGHG@+yx_*-zX-WTcjEzqb_K2`bV4y4r~HCx*hX>r9SFUmdqp9?wa3=Uz zMe088+j2p{1J!nsE#Sh`>W2;M;xL};fe#zY=Es%09@tg~`ykVW;2He!H+O#zzw6-6 zL#iqlzY-Lky-B@L;~UP*G<3*0<<=Hw*%{-RoV~DXn{-pxSOdecU#CjNUCK=gD97U+o7$F zc0d;W#z-sXzmuvoqCg^g4ld@>svcd!O5{atB=W^Ym6m|gVf<$yMUcUKpJP>>`-=geR<1W$S?3bB;`nK9mzD_*8Y zrdDhFwe2m}x1F7`a#`*DO6Q^KOC}Jzn@b({eE1&i>CGSmG(TUoV8Zi^!s{`_?sxd} zcjqA+9h{u)7CG-ycE7*7Wj$(BPAD`a_oyOQSVlqpWwTJK{WyG`AnRG~HD2OiZ_cG6 zduqq{{sa^8gtbNAnZR5Wzoizla+f# z1th54&(h9$grLS&N)C{Ilw`;eae6tl2Q1p~?F*2xWl=}$r51n9P6)DywWhE11i4U1 z`#h1Ns!`%6+Ox@t0kKq8)D~yfNwCF+7Ev4-_lVf-xRs>=6_DFeS0t_ zf*kU+kZN1x@omRN{kAjWSn>uTlnW_NjNVfv_?+}(cFraShc(ay$@i=attmxp2KS=e zij2zqEhZ)lU$2eRaN8@on=cC11}vj3thfAxPaytO#t{B&14yQY0$?RvKf zP&A?ODXu;;U0&U0`U?eI3N-2eJjOHCr|YZ9TZep1%zGrN$muPK|1XZum8 zd`Ks0LXRT>6=$6JNzAXJ-xJAl@;~ZJ{!Bv~`!NnVHW|bjj2>xy-Sf?b{XjR6DB`3) zSppCiOIdhw@Nk+w`*9Khewn_#SrsY#+G0Hh*w0|ip06i58o{GBJN9Mr7|)@pL-<j|NwjhC_eTIdvxS zX^0wBU3vN;I|nRZk$bIbl4yf0R0Sg|rvv^hUmGkqT1SN%hdK|m+EZ=Aee8utZMHN>&?H&YIKX%4zy$XsTQYVgbdd zs`7U{s+9KNLz!>He9@9>xbclZi<3y(o^$kj|KVJ|fX=udBxgRTuYG|vQl!+a)iGj)OICJtS|QxGCf*L@^x6GZb6B{eJ)(K;*vzu) zv)-P~izv0VDI=>Ys2CF_pmmDQx#maHK&lGS+O(Q21Amvt!pry$>vQj(Ed{0_GXk+fVZ6EZ0zcc%N!&PO4NV{=N zHGgi|O^@%eoKH!}a$SKamzt1rZC?m9WiEf40cE{CgJwTm_yk{J{9o$;wr9_34fH)+qWWI;=*e~aPJuo6vZ&(~ zd<1LnscH7A?|Z%9TQDm(jx;|% zWBT$-OixcK`aeCvO%tN?KuqX8UQT0OrJ8Qiq|3+;TT>HscIEAQo#!sH`D)%Vyb1+&|w*W*1* zjA^FcTByDU9S%U(A!?mSTv=(Bv&`5>U573Y_w;p*yS_))G%!Sn83+uS)>|<{=W>8V z61(vE8B)}c<{8U0!G!>-D%5Y@0DTYDbx?JkqS-t{rU{Z+i*XzgG6<=v>e40*-Xp9F z=5a_}oabjO&(DbS43(LOyj^0txu)-pU2j{PxDM!~2rG!r!%Y*W$H!Dl&oiq1K9P_5 z9=hw;?DrbRwB9*!B198lZeb|t9DuJ>b;nGhCLp)xbZi00AD33Bmj_FHiWiC&>A5|g7*|dpcjieHcLFW z(O)(?`L9L)7j?gg&8(|>iLr4&tB86w<_=Z$Kz03w>iUlBy5qXGTva;8NPb;0JwD?6 z*=H&3Kj#!N*LYh{=rW-v7ohcW2riMLXtS5ix7jI3HiS6OSn?PwL}1!BwanT!Mbq65 zAGa-@>l)Eo7!iD#pFd_@fCzkJY~Zr5I*$Vtc@9^*V?To$Y% zP`h1nEO&RwNR|L%bi(}fgz4QoOplK#?ay^6 z${K52Rt3KR_~exg0Gm2;!{oY@3eh?E7*iWbYc!dGX0u}NzOM0c*J0>;gk?cwPQCUl zlz~m^Pn*xbbRptKGq5NFdElxvv>kcPgG<~rNy=NP^xpFO51XmGvS4(YCJe)XX&BPv zTu#F|4?2~(eOLPTIg=o*p<+zgMF^m2N_Dw&nAR2Jx+aOQyt-^*h8aiP*EPc70P1_h ztVMwH88HKYah@TogM0KbbUGLr!K-CF(djh<9JE^w~_zi?Kg*GOU;y<)NtDgxCmcv zKDgol3K^qFd#P!{I*xGTh-#jpl|ru+K5AR6cXx;)n2$$14Ff1Uio6T&@)`;cpACb)6LI*v(GFb^{kaM`j$8{?y~NmW;rA_?R_5je&W3N*G20-iTtPy6XrZe{5CTHuCt`uU~wzj>{5! z#!42ExG3c;vr|L?%#mV@F>(A;0+@FYz8CS6?Q97{FS`iY34}Z>M7d=hMI>&{R?Ig2 zE(5aqwGv>-2do^v$D1O(EQZWZ;llDOwBK#&e_7Fe!}HIZd$wb~T9VC(n>T&?=8ZK~r4Ry#am0E$CD8B7FEKwoCF9S!a-}|cv9KbS11Kbs z53~Zy`fJ&&@siEYLhcI0+5P2Aw_QQFLU^p^fyPauq;@YC2bd;XPl=A&%=Pvk4OCAbi%vy z8DpNEXQb`Ijn+6+74Dh__ic-P#us!3@l1>`BA{V_n`bP?Bix#!1;gmu*P58OY6f~z3WVb_~bqrOA;26M}D?yh{L6n?VUQ6bNb8-UnoUU&sBNf&k z-DYeV7vP%}Tg8Fjf`nYMJ0b`KX?J<*deAswdU{MktKOs9@1VOLwrxpwoznZg3C48e zvP6D{pz*Jt}mI0FON{S8UZ%WL#QVHlG z-~TAm=B|j;N`B7)d@mb=*#(M8oa8=)IVEXN~iYr$;`%Zx)^gYNIKD24CG zh}}HHW~ptu0UT9cEMoHWyN%&*2RwXU_Z{+Ul#Jv{Ug0HqI`cBbG)+i^@&h*gEk7#O8sw1&z%0NB`zACB_^?^dj* z6Wr;XmZv(0kQIw?Q`TLsZ{g(UR_{e;adRzYrm}>#9gNs=j!U+JJ_mXXAD8a3DN9CrX|Le^V)F&L=_;AxvV9Rc)3CD{kurS zRahqzRFk8RK#Va`0N|9u$_y8yNah9nR*ZPcXD$NxIKStM1Nb*Y@TdOM{}jLWH~(gO zHA-Q~yWObo%b*95_tz=EQupWOmw12X|56IbOX}|nO}{MUY1a_yCB}9I`k>T~jX6|W zAGm1_&3?bD+O{>uREk+cgu}96Ih_)(|M4-6fEJ=jj)X7j{u>9to6R%)iUSC*0C2P^ z4N42K)QoPPv7XPEtp&x1x@}Qei=EcEXU3a(#{Kg%?v24Q8}PjOJB-BhuQm}Yh`{4I zS*8JWTBFw*jZ&}~kuNoJWKQzgd9%q( zNyFY4%mo+7(qMMCL%ptOL%8q)@XATeJGDVdLFb5Wn9~H{JSX;A2=H|cWes2~D9;4I zr1FJ;1i&pb)?vW>{EX#%hR+PnGPw0(E@4}$ZCgznXS)SbGdu5P8+M!JZGhD1JRGKL z2Zplo=M6r_7**AcZTp_P{hkm)2=hFt7)K9Ga|j+~RkhYp5k*Q1NFvG>;%oGe^nNBS z*|sEU5fSGMfg}W?7?W+LrLDrd9rXDO4gsxF_)ZA;qaygz|H*%XfB4`0H?Ow=f9-Gn z&C5aTl%m*ma8*TARcVEH>iZIhkjQ@572YpMKd-Fseo_C&t;k2_`nwqIAFf2X_+Pt>x$*+3Dfg4#^dn<3Y9vx7{1!p{TqazH<_w_Dr?a*<6#)^t){`3TEi&?U5oGeX`{G=+e{dmJ;v?>NsmO%tBS5zoVb zcjJi9hXFqrM?6jwh74$yvEVUx2Fm9^#=!PHn%yqx256lGMTtOF1=DrtLcjwNKCLRK zb;Th@jCp@RXAHhw*Z8z)aHuNONFEi}>6ADH z8Tc#PjbB{f;@mgJ&l_O%l0WCnjy8K7x80!PK(;Nyn3<4;*kqobV0SyHG(t_5N$vU_ z#g9Lcx^CQZKJV9InEW^{)3U@M9;CHs;-HDVO68$V96~pRa0o;XR;l}Dx4Y{<`e@hP-#1m$RMuLfyyx)z zjCB|=efi~Os&AR+GzgMs`L_Tj-RRP7qdym=l~-!WEihPGce2eOa?O5;B+G*Nd`^c2 zX&I^pVCou;Qg~=v{7hZroH_WEWv*SuUsTQj>U`*Y$xuX~nQ>4GpH>yV(=_P&xN^=}bo+Bu2zoIfkx7T=^{%?Z7R?xI47Eu`-+Oz@R zyS^D1j4{GFmoS<08T#o7wrSFJYg;lzwA=M$wARypSDzoBy5kq0-??@5ZkiBd5KZt^ z)TX#sEqQtc5j(OpJnceU%rW zFIr+RHU7YD3*EMmx+YPIln8MM#4)S6C5?2FGVxc^{LMDsf)Q-{{t+lkJ58bcE+W+u zW4!{s2M)q~PuAYsuG@DH58dv~o61^i$a@aMKe^zQPMYZVRqywKbwrX(qsXC}x-}((!52U}+k}y2cVCPR`+! zmxXd!E}9+AvWa39Gw!U#&omAGwZ6yC^*w&3ZE>h7XrC$@|N~(NOBb7%!rxWu?0r26V?Gc2$KQNJ5;~MN=R&ns>hiuSBG{a^N1tl>i;#9!y`e1W?VZCijY+WOc!b}y{ctOV zhO2hLt=1eDKF5X&P+GaP0f39~#|_rQ`TCaq4lz4MOcSQ(XINtr5h;^|+NPnp?Nqbt z4J+NcWe(Hv6j!AXBzg}l4l=JIE63z?4 z8I#8F(yDf0?;+EaTF>Q{?Ov~+ev0WAegXYI`6mg~QHs{OhO{kFT@!0fAWFa=K$ON2 z8JjtODUNr$VHshkV3px0e)?g^LXGtqJTV6tp zXGynxb*DxjdwSwW*U?(+Qqw+{z= zy5HlWZBc8Dm=|gc=QG|tKjZVqM|?hx_<{HMLFRQl#)#*hEXalJI$h>D8eyWJSIvyh+Omuh*RqC zJ;JgiOl8yhlT>eCOSW=tH_<xr-~`x`fnIU`bW=7^>8#{6Wy?5Xe15(t z4zbo{5sPAL%{njj*!8h)+Zfk1U|D7WV*rh7j4J`*lG2L=7KxHFfk?UGlcRmi3R*%} z05IkSJ7tVG`7EV~v`&vAfKrKnVy#s3Ob9_jRpI=Lzli3a{!{31cZb8T{wmJD^h?mr zaEyk5HV|vX7Jvgysu}GMwIH<+MPA# zP_^x$?YdoE*Ii|8rPBiW#PmC#amq}vDX-*0M*LM~=oOIWwdh~6gKgSRH~rw^4C2NK z&q44?6ZLP0h} zXq3XfY4G-Nz{hXi;O%aQzG=V!=6S}vEO>W1;j{A@-^;cA7vAHG+|qrH5km+m;^+2Z ziTd#s0aG7iA`Inyhv#L%<2a(tn|kMQM6We!=Cl?)XI`8IRjk&~c>}S{srKr98lcL{ zNLg!`%0gFln)O!-;yi*MQrqu*hMUIAun)4d7-fe-n`^bD_Nq;GcTwcoly!7-4e1rG zK-{znv3>pm62=HW&zN!~4Mb@b+inL#fYF-ky0%@{$$B`57V&!po6;?T)0kfXq5Xaj09Zfy1R-mkMeiv(mrzCT%XlwA>oks-QhT~h^|xXludx19+%W&v5bQaG z`q}$t20E>E-&NJFYTJF+_xrBzcTHV4hS?xSj?Q73CY(qK0jkgdlI3PLf>@=%s5pQ4$NqrO9B~L zz|v=t)dDmcB-PxVwYcj#yt%)}o40Rq*S4sM5Hh3hc^L4$^BMnQn(!~z72kIb@4Uxz zj5q-p%c}9r|M#2aq#wFT?n10FV)PzQ(*%PwGk-J&9dp__kQIt5rC^OgZ44S~ffy5a zB)3YZVZiD68RIwtM5y~d;UrB1Th&Q>VOijFcgH z(T(H0c;|yiV4`4{gJ$+DqAAz^vMB{}Yis9(w-vw-JBomy%Rc(sw81aZkjUZ9lI)N{ft()OVrzURi)I*Lh#te!1r_ThLF$ z&LPxe2;D-|*UUSrs$I3)?YiBrYx};fthFq{aapj=Gp5rC!|{mo>4bS00Oz2~O6?2^ zZTaumwgF$M{a;mQ-9(5jPaHRGuGdn^%eZMi@P3-G9FH(cB_Yn;4pm)amyz&;_t>3I z=$@Z(p69DFQ5LnRa(b+c!9!i+P2c0;aKPQ+fVQr|S=;V7j`-qqN)BM2@mtQ}2O;3u z`y@t^jkth%@->DJTp5qWDb3#FxGbO;u`COYN})zlo2jz{XpBK?47#d9U)Pt?qO}(A z9>e*Z9KbN7l;2u(tf1=#CT}kC^NjU)#FCengn0%+cuC#8`TTL40c`LYe89nPO8~hk z^o4lqi2#oSAb`*mJsC*os_ zUWeeVQmc+}RYabENFrApAa@9IIUOY}*X7&NAkpzyHhLVC)tN=KMlc3Z<#i?@;Q5z+ z3G2rnL;rVw`)}hfbsZl6&3}{pevhbBk{t?xkT~mvBu8{z=6U7)7vrZ5;J5Aha{>M~ z>$@*~f0w!bQK>zc54x&$w(Gijzi+CxwaOS3LqHfuEW?2Lbi$IEXMS10F(!_B5u_+a zzfJo$ssF9<)7R$r~_Mr*ib!Ial(zsnTd&zA+Cdyg-?$0-EN zIqLfjN#>j0B(oiz2jLy`oB?jTI=Ae<4@Cc4$In|1zy>gU0T!0- zLD}qE0AG>BhAd~aZ9yWWl!CT~>b^I`T!$FjX&QH;cnN@)7*|KMc#%1XtUg9h%#m^_ zurdCN6QIN!U;y#L1<2qZWmYa_K(LeuF>5nWq9;O~PIUN(|4{y)!vOu4hybmjzx*;G zzj?U>IY+#%1m{ZqzipOpx&E)u`)A`95hZEmvi3157o%QdG%m&}#@JDed&PXOnD2C5 z?+eqVqetj8+i%!1nI#>}Xt7N$wDJtj{M&_ z9PqZTQ4>Kzz?>2Nr)k2wdB$Vr-k);hA7jK?dilRiQPNW8gq#7an|4|t!jwPrg1;DM z)Xt&H_x-x!u&%h9XY7nYl@)(vo-dkxTB)S*r!|NPA^6nyKb7HKO;Zx*oc&VS3AAjMm;Y z^lWz#9Ivap z^_n)W*dS7qNT-22mHYm-s&=;TD|>gRwAS#$fO#A-l==SWXM}NtDwBO>d+IB9zNrh< zP2{H!M1@z^cx|u*d1W5p_5fYTMBZbW=hQdW8fF|(tt)B~R7&BEwfMOviF7`?G&KkB zp_x!wi?-{qzrV-+?hgCi4tKj94#q%vkJbA$&@)YVS{6Jl3yyis_L2d-Zz?qMq58j2 zWqsxS+`rH<^*1%{DCWb_T zTOHmY(SO_-ma zl4gSU5F)f~1KqXIl~rn*Dzdg0CW$H4UxLUGLcVxB>#ljJO3G?K7K;*igC+Jut?8cE84NghAE*w(ex zN0+p}82)D2r-*P&(Z6H>WtU$CqDCpzS44YQdska~sH&>7ZCmNKWhO#6pOXV9VdKI3Vc z5}7Br_FSI$D(^jJ#@i30M_3%37lA5{ps*BkdOzhdBj&$py+^GSx@EymDIAo-z1Dc6 zH9pcB+L*)yY#LNm1*I5>0U-pqCC@En$6wlh>c+6QpZ5#S{|&bDS{CrZYhDa{n-yfC zQrUol*oer<#b#3zfuprI2f;_g!D=Zd}$?aBg8iSf2A8h+bkjL&`U05 zmW*XoT?b_?Y62eW8s@OaNQ6;qOrwT(4%S-S)ivJMHSVek+8B5djLu=0XFQK1o`wOZ zX~LM9d?7RADk3yFjb-GiuxzCA4YLB-bOC&pAJfbUq{LMub;+{Y#qlU2*sOds02rCE zY7JBs+OA8i!M;b`_lZpiAS_F|*29n{D)WXW3L!E6HX@(58h^Lf`vv9uCWHG>HgM_j z7p$k?0p-2kU_RS!1PWOwcYb2gpD+ehQ7TRuD{HOER25ZiD`8z%r&Q-c=snO+AxpR;xeiT6RHh*SXd=UcRsh=iFa zZBij@mwas36y-MHcF;%4qK_N;Z!As#up&|eXqmaMjM*7&dRWt`x~Z#OUv*7mG{Bf= zO7hGD)(z+<&b_4XmVq3+WOZFyei?kbt@-I|4u;%h0`iKH=YlScPTdPxuCSK;bhWJ2EZ{J2#)%WqcWlwj44U$^n;qKpMYpjKOLQ z)P9fl%^P(4J*psWm;dUuCVJI5&}KBd z{BFE)FuduOlr?ez08djoyXP}P--C@I4N%)OVURyyJ0 z`*g?WwCG}85%R2iSu_0t%zGvE|4_S+Zl%BQzI4)dboA;6UhZ-)e=BZu25teT@){zL z7FkRamZvA^y!FO*9ZX$Aw=ML}fhr4841VS`@S-@O?l~ep&oe$hpYhrGjCb>lW2W@_ zjL^5t(9CE=&?$wp_c#*aOa#g@-}2kQ2DZPa@}ku3vW+4@0g*%wLSF4Ha@mWh0Ms#J zVTQCVs{4C%AAgKK1EO)Bv7FBdJ%4__hVR8`rvs%rP{UH`N!hbaVCCk$ZO z8#C`j7NqoF2@oW81%eQjk|1f9q)g!A45Vlaq_*IN7eHxgF9Ne)usebkzQj~tn1Ynl^zG45pochbrKNO{(l>Rp$>RGA1v36hgeOKQ<)VA-9GDaz8 zBIn_U0qgmU_4x>wx4mpzLAMM(x*6|PueAH9xucg(i*z&VRk#{EV=IU>gu>G04uECBTf^h5b*gp;(NycbZwL=vKI4P6|KI&sa|9aWmglWQYUGe?%8Q(pf@ZDj+ab4ju`%`DVKD`kYAtYglIY!LP za3zJ`d?xXB7XB-4l+*o+8ExK%8#4z$BTGByyDQs<0rX1YzOHfKwm7sc`nE;WG%#8t zjAQEipU;?&N37$Rq}w<1{jbTm(XE5Ojl{Q6|3f9fCgS5Z8`wNAZyZ{g45Zhj#Y%=* zGzI4w%jtw!>(sVphUq$R)37&2Rm)NtYdfvfs(_V&kzzc>7^@It6`5VgngNtbfPkBp zAYHp}7k&V)DnS?Bj=ZXmh*`L*p!a*w`3&9v%+G*~A*w2ZQdE{dA_-|;X8y~N4{e+P zZI^v+fWKIxe=`0=`~j)}v=P_|(LtCGWK5^(rqXSz2}Hp=tjmJ&c*OMljQM;{V9-rO zzy~7#?SK!xVw4{;`qvQRlICrVpKicGrWf*+FY4ahGoH*^NfEv4EU{KNQ*|Y6nL!^8l=Sur5$xEF=m-jm-T05$S5zd@EgI< z58W>F2+RrD*BTWwV(tQ1Akl%5)|N#P7^ToDh5M?)$8C#m@Avq2*Ws?JV3`w_J~J7o zVZbzw2zlD?*5F^X{cf0@F9O2W&~Lgu^flKT8z=uF8^HUMfxN{8HXW#o?m*7?!m?mF zpVP8gB5++p_dQf1a;f@!wyiPEj@g4~wZOR&=_tk~gfKZ^6{P|Lfl}(9B@0s`@?f$%X zQ+d#*Vn(YJc3R`k7&Js_8!izH5*>KWKqKer#fPkl{H^^SpX3e3_e#O!;iqMqFpVRo zJj_(ue)>klb^Cd~zy`K#z*ihReT{>EE$Y9@11Vr{b^vATP~86i{JQj}T#A_pCP*Xp zYQKjCpp1c5iYjZ(PV44Qsc4y3MRab7IwjJE5JpF|g2<~hC*X7aA8wSlXdC&l0Rb;| z>^*^*I8ph9o2IO9BW=45F-8iR{u?s#e`zVar2W#Z;OEBhFMNPf`{(5z#sO6Xn#kOd z);-EysTxWdFjJHyaXrs7#w`0BHj{oA@rK(8tq*{HTa_4Wy!2NAfbSiQn?tgl3)mX} zr9Q+}E8w;lM4VFZBmX_0L8+3yBa3jDOkhD~2}UBUHx8hXtV-J7wuPtC&)oP4X5X z-jpx2F@BpPf6t62kN4`0qupvHTBMzYy;68E2A{SqzO~=uXYTKD*Y{}Z8XP0SG^O{Q zW!ys62jCc!D9DXw|7+L#gM&d|kpXa`ITP&dl3P6kK_NL=>JV?LfIau8<6jo zL3WX7-K6~6sB}9kP?k@GdB$=&Vl+Da&H=Dp4^=nNB2aa52ql_?EZbG~3OW(2dD2hk z+M72EK-SFGTZ=?lPX8|yR$OJTTu}ikJN7c6sLhdouM|4w)br0yYz_fK79&B7sPgM* zGWfTzYaI4_?C1xm{mL`kT1n$oVsVSqA*v|1aMz=s&+yGSait(4oTC@wovS23n- z{DENbl_1{-TD|Yxwjl4OKFPXr`36R7{k~SA73?MiM zWCmcFC4TW}=jT0ok7FhnRY;ux&H|u~wP@-ZRog4deaz}|z6fwdM|YZC93EQ^(KY~wiYglG;#gNU3YMw^9nRg6(dW(97IpRRbo)o$Nk zctH@MmQq+vtC@^Dl1$z8ZgF{cYQSX}y>AG1flDE->#RQ4eEURoB+E ztv1#&GSIc2&sZ|*A2y3Tw{;-4pwP`?$8Aaoyv_#urnj%F1#yEI{{U_Gwd?#%Fn|x6@CfGOtT`S^ZftCV-%p^(g7%5<)tHdIR&_>{ljM4Pl&OJF?J%d6QC!hT2)n6 zw=HwtT;tXi^ZAVFbh(QxDP#H8bwo79Zc;VTchwAVP%`XdL0aPm_T}DaGFaftNL6 z8$pkN1pG~T3owvcceW@hl`g_&&z{OrKWv=I7y`!pcnSeS83IxYuomrZhr7EwJlx%3 z-?k~^$eVoDal|rBsr#{M`>6u*-rzUyIr!K5{vW`0=$ktI8>Z(Ar+6Fiis@;vizeG&PcR0p=*uiAYU=1(9JQLx9g<`vnKc zQ-UvMY*(Uu{6650wZXi~?ULhqbNWx5_d% z)Y01-5qJd&-j*U811$qsKBtGgrfI?TRCWv2r~%w}9m1P8n3Tfzh|q-qUX~QGkpMZL z!8yA5OmO1}UPPqK9yFQNSLH~*Z6|Ic{v0EQEG#-?2QY+yIge)d%+O7P{_YNM-oC|~ zyF2Wg1{Q#1#^0K+@w%>XdApA$O85a@C;r@me=iL8Hq(2}v3~>N*S6evE&F?~8?=dp zaYGQg#RLjJMRM5{ox?hgpuBBa^*t;RP*q@Nj_YcKxsD<}hA`*g*$_|>ktHHcL>h?} zyd4VqAP)Xs8Bn$gr^X;@(K>1Wz0dx8(fh{-{zw`9jev4l@MFz${{U*m+_F-gR;pvA zDmKQjF@#K3S(gRVIAYFIe=j!sytdKz71kfVqNab(3H*@d0ButG7qU?|szG#HqrOHP zy#A*pOKjIDS^*)1sX zr7D2VSpWerIpr@-z>6dmVG)cm;*=x)IcETK9s@2Jkx~jx+hTurhr73LahEp;Q3#in zY0L3=S=<`(+yFKi$L(kI-r0RE-TwyMj^B3Lj}Krzn@sRUwzplAcB>ARoy3dHLYWC_ zmIZZ|?uJqXrIZlaDAJTWk^`uTs3IaOfX{c8H*s&%``ZP*@jYjdrRMVFujt&o%kw9LH8ebs-@uRwJ%YYY7U^^|CnRxMro3PzTd(jQZhO(61f&g^i z!!`~2y2hQ>cr(v<`}Bmj*1~Cx)w>Ijx4j_Plus97&zuPqC%{Oc-NJk+5dd67R?F*i z*%6#F;y>hUpbQfk06S*f8H2mF#o=(k{{9|q*TKY?24XVT|8}>Zyk_)xsrA5HN3ep1{_A7ZO9*-l z!A>#Oj;La5>x#KHRaLijZ7XB6CQ=k5m5sW7UE$Uh&bgNo-ycZpU%ZH~(DtXV$^w2n z4q>xR=0l{B;+$R}#l`S*d+Wv0%$q0?Go9D3E9TQFfo4R|d1%8n4SHknb{O#OuES$h z!5WQ0BI0FP`$qK$*R|uoOV0Z3h_8wYqZud1L$vNfCGt;3K8* zNAlL9H@h9W!vUtQ5vK`@a~RKO3}w0JvRnaC+%WeFn7J7@eo_B#v6K%uclvE+daqu~ zSJM3#Iu9FO$hIr6Rg4B+at2BU7ILdot!v7J^0^mg%B$TOL^?BMD=;@vq(zJ^5zP=; zD6Q91TMoc$=5guXWqZEZHgi()ij%zazk2L`^Z8a|m`8siAeF zjj3vDtEy>i+qR}LMrnZIoRsY^-Z?nu;FAI|c#{&+2k4;m71G}H4UqpIDihc^f*Z?! z&k@|d##q>GH;3xN3&`&?tZR}x&kHs6exFuncO4pQ@#b{G&-Ojmra?becog6)f;m%p zWmCs)ODEi9A8R)DAwQO=%2~%B$nCxy@z41_Z6d!V!o3K-m5u-BstSLk>+oj3N4?*J zjDcHMOwQqaI$=B>uOgq@{f#%wN_qug+kWrGb-n%iw^`!do(K7w(%=R7yCnzR@&bTY z$A!!GDCDtkzpe=Dn&kL^B)fQ#zEG(+BvN9v~c3-}RZy*|z3l}|S=jKK| zPkMS3f=GdeGYx2DcHfyb(jy)qBORQ}frSt##rj|M-kYOy_oE*zkHfIbz!v&;T(OOK2 zomUhn=NXL&+UpUZb5x{2(OWIg9%c({zW0rR)MFnckbu0!11Zjv-(| zv?~`J0EVpVpQrsvd*Dh+d|edyyQab4u2%SZy~fpgjcT<5gn*S2<2niWq}D=4 zNqiH$uf4Tx09rxR>lg^MOx_!*42bN&=b}lGCM+ll`zGR;NNY}uglNqpMtaSEU~GA( z&f^nOP#}_)NO#^Bd+)1Jh`I*q%9u*mby2mguA4>`#z2OEFijEiJB~30O1^&iM*aZb ze~A$gzwyHO*{S5E#$ftfi>bibUyyqu!MQjV97jyn#!aU+3Z<}Fukq&U8uaP_O#wn1 zxW30Ujj*wS3!jxMITJ8V2~0NoFPSD>0jP|^^Vsha+wVyq}pq!*C;4xWR+ zJV$WQFhrMS<_Jh*q%2D%LMVc@l?58_eIr7s2q;7p?UOQY{wGLXu_ytaye6X`)(I4V zNbbOA))1cJ|HXo6aA_(a36L|9K88@-J68=-HY=ifrFDg-F~w@7%DNUtYry-6Y43aZ ztns%5?=0u)&p}Ne273I`nsAvee<Er-#@g#WZBs=2*SYjJeLUCWjGb&OWgLb_^ z`0O*ldr(zktlr~r`yLMu0iAVcC7vhrR4JqXAe(ord1P0!4S6#6P>8O;f|-PK(hESQ zo0m0XwJ}(2Hn@5H8ee?&89x8)Gu(XsIoi!8nwBtk!Ok;gYcX5PlIQZwL-^4678f$9 zpOnch$^ybKm;_`&l<+c3^hu_$$XHS!z%naDW-@9m{4l_EU370McMU{L(d)lGLnNjQ>u2x(HFMAR*4w_99&`6XWc^X0r+@M^oKuSfsEY>S@&cXBV$?vPYu<3qugXbIjrJ%mFdjBQ&{6het<>trJ5>;mJ zBX0^mfi!afaKixGb&;r5RWSh6wFpuQVXgL3mU9U8WNjn8uOMY%q|_#k409*0OFg;H+z#=v8=chGtV2EXv+e`)j6PY5Ds-MD2Yv9RWPCO?(? z4<-Rh4hBgKRaX_XF(6|wNQKQXpuN3ArSBK!d0kPJ_V&R7AGQK;1M-z#I#uGiSSevRFiUt;^_4OXiaq}K7Y=l7n< zJ6eosFZ%Z7fqKzAqaV4~%dY*UY~W)AftP~8IjH3$!F(+*%w+`8IRmg=7y0>G!xROS z)(BEcjH3=pm6oWUy>Enbl~k&5T5F$pHxUV#RDjR&eYt=SWqX>(lqnF%wwYz-YA97mBJe-u?5f)!AOaq6po0BMSCs>ByawP-%BY3N<{QwDFil3VQman zRfV=`P&W+}gO((Z7DciPU*I;71w`?IEa}`h{gDi7ndX1gAn;R{3jeN)l=S8O<*$=- zQ3Ipzqe@U+M`UDCKuIY?QD{=C@Id8(N)T0+sIVbuC#6oq4iloO4DtQ3%;16rt>S_U4k1 z?5)g-?44{`U$V2yj?Cxv{1Km@-XE&wSO6dta38N?d>hG1P7wvr=Kj?lk2Q`&-I$T0 zwPA%0hLC)zF4-<|_NQ>NS-vEI#oiy~`KxobmsWH4k6cN}EH92h(#=;ABKpU_&=7?} zYHhrbN51h1nQ&Ygg@H+m8hyN|D{_PFDW{=6ZyC4jI(V8Ic=93rf^XUNF@BSF@QzE4hblr-E3ss=R6FmQ9W zZHRib;|WTs-Oe~8-hI91gvh2kySK03a-yirf(;%Fx<%jqExJv2l8kS|`O^shQ%dHw zH|vs(#%V$95JZLv7-=!3rWw5fy@7v07yVl~a5cdoO>=OI%j4gVQB5r1yPjeOsHkZ} z|M^KQOtWo#ds`AwazhV9aixc%K;2pt`11lHDRBblN>ROrJAzM2+SpcKc2H@E>Yw$h zJ+5fKDcZV~(A#}qk8q~9&fwsVPrSu@iMfi7uM*SC?VeLt)ZxucFq{Bu>JEmL;C6C2 z+?tlW>Jly^oc#>oEj-2VxAx?I>^rD)Bvu8ycHK00$8=x6w(SW&SZlLDr5uVGntXI6 zr;Zk{Ul|nQajRC7qlT6;c0DB}^5;oeQ}eZ-)m0d6R?cnC0JNvY#Qe+MvS z43xnD4NSOg?Jps;Ak&PaZ~x-YnjMMe7i3T?c=zULhY#Tw02ipFbab{%mlmm}S$E^fv5%&g6^IYb~vo zhmoIWY5Tw)kseq;W-6v9K08k;O1UGBqUU zY_m3H({a2B-LSRD^PN(Zr_<`cEA2h$;6+qS2GwR48vielUH_f^6P;_;) z%s50je}7ALgbw#Z@+^fhmoVpwC6X)&KmNtEgb8uQ+3$YO-LTMH<|)BohqGXFP`>D_4!*g znr9aF$d5aMB2>f+3zsVEe+1_tWO?Kdm0S`Opf^`pWQ}Q?SFIn;+^6U7`*Xs~K1x>%9}N!=jrT79aeWkQLxcg%5aRUVBR9g_S5Q|9;z zIb6T5y!tP=?ccw$-;atyy=}xrCqwL?b)bEQ^~L;c8cywnVGad0Spw!xKNs>WKIRvJ zxso%JGzflCik#N_`{GMW-SA|OAiB;(-U;~~lp{a3nkiv=Obuwl1ht5FwL`!x%U;LL z25uTWO_U0aE$-t=&y2aI2GMg?QtFP_z{tEW74Po#PBjihcObxO5g0_ExMKZNw@}DIvkEQ2Fq(?&+Y|OA>mH3 z1Bl4wea2kP1mwVCfFk}@`GKH`CbqI*Ovuhys8}!*;;%VUer3b;9>cSLB&z2zD5I>T zLzYjqk<|W)0xu@X^&T9ycP+Mi^TvbZ-%>HO)=HX8Z8C4s&EWZGj1LVZFyp@Dr`>|Q zzC)Ob@g&n75E83lz4aEnUPQ39Y%366W6BpE)qlV={>Gpj@|^}a(Kp=e*nVlGHDsYT zgzLD+`tLH3{qg>IGA}LO*Mm0B%-tr}@JunTIqEK%x>n4mMCh7}{P!^O42rMDU5fM8 zbN0*kTi=ylQIVG>ANeAGm;ORFo-6B5t2@%X`S`8}dO{KWj<1L99;Yc=k;kLW(Fp7p7{Hi2{7(0qY^dd`OfpOz#@VuWo8|&b3eLDk;-9RfaALhor8G*58WQ?&dnXoE^d{O zo4r$y?UT`nklbof?YC~ao34uGQihO24|^jE!9-H0ej`_OV}^m&J#>6$(?p~J0An`@ zfPX*1Zv=dBejRcm!KPX6WjV@v77Ig>1jF;+7@9DNg5`Y0^hdUn%0i9Q@`>m;+>Aqc zRspnlI@LN&Q$32OgU2f zRuwMGG6~3MVk+HKvn zJx<`Skoazf{V+eWD0<0Z%r0}sAXfdpu>yo{17C1=$e)!{{`J+)DVMx5=exBdYZzP@YjS{RReZNmS( zj!C`zOYOV(9~uIm&s#opKX~=FB|ln??Le5s)cfC?`oHhJ3PZFId1~N(96{pe*vY@# zEAHt8Z5azRsRQ+3iAt+gq18u2DVl`oajgZ7S7!5chC1nrCuEx#i3!nztr`^Nz$dlZ z`TQ?UVROH&r(H8k!pa3vc8I2F{euO`>-#f8_6#dD&od&s zs!i@%3Ar^;62BFTXwk3{`5_B>8TDCuF#K4jU06HxlEX-g8o&AHY|fcq+1;#q%VN#Z zmWP`X)c$hq))e9U@KWr;#57ohgH=fm}(9*`X{F(O4>Ob}{7`uQMp)M;k0r+nRlPJ`xG^hj(kG<*k#Q8XZ84TXwL%qr?C z@MalZ&Rp5joKqkt0J3s>LTvy|Bu?oycq|obvtb`9t(UL$SKQ{}&#t1xCYtV)-rn8W zv{Sjs5~Lpdq}C10(?ND#e^z%3uw@m#tIws&o;@>Y^^4e<63QGV zt8n27PuUmGA<=yh=(tE#PJ#9#YGgU6w2;?2seU!jx98{Rth2iG#P2Kq#naPh5*p8D z&Ej9=0{0F5>Fh*|4SViu*dS`d?YUb0a>I(-knl^Dh5GIdzAnNN%%;QaV zd&1FGYvB79F9aI@bKbdzHlI4rRCFFWIuV@k#)!&}h}O0lG;*%C!>%wO4z~8cnevAS{A?!v z0d9(xcNMN1jePLG54A7n&=4ykoMRQw_M)C>{;HvVC{{!u=I^IW-Il+cF=1O7o9<)x z=ghb8rl8a%K~W^|T8mHv%uJj=e5moiX0Lqoam?*=nJL~Fm}e6co-<-o$CAOE*(Iq) zA^3+E%6mhYPEn&jyiC9fC#sbDxJe5}zO0XZt7{qY;RB{Mgf1X}s(z`PhQwS{#DD(~ zGn#pcOp8I~{e=smYX#TraY7Ulx?^e-uQ8O1%G~v$;n*&{0n!gjcNQ&JQtu$vWd)t9TcMGp2}!gT6Kd9Q z)OFmK_c1Kx%D;Go$|-!eK?l)19~e>DwMJU=BJ@#Ed+u;{9;2VK#SIwsojQUznO3>P zHga8JM0g^;w@mESSQgzNEbDuBJ;%zPIY<9_e_AHNL z-PLW5+h9n7x}XXc85*3+^RXkK0gp8+Fs(K`_;1XF)RHCjSJ@9c5_gKSZy;aV}3>jUV3QIL6X+g_+9Jly3Y3ci_DNB9e`KoyP27l6XLNd8mP z(`#Eq38nkR_H|z}=vcL<{FzAq?^c`y0Z~zbyujP?q>-e;W4xIq0Hk(Bf|U7jpfrwz z25LY&^|IMUs-bi2cDWq;-rRObC-=>xDgXH0TFz_5xdZJ?!2=#QNkjYB;)f^t0IrvD zhe`#zd)rJd6Xv~>vp-TZA7r4SfL@Rk_xOtqvPzlfW5Ivfye(CA7`wVj_6}nXSAeD0 z@cwA>oFonEpb(ZPG}L?F#E;V=uutVpbR+y))n}j4zr07B7a5vj9vmk754Ke)ghCr8 z@qV(5E^OS2log`T#itx6bjkf#?7Saq+lb>(U@y;m9VKY{$tDiehT@S7^i=dZS&*2o zSx{H_dd59LxN3B@qu7)80v^pY{5x#uZ=_}!&6+Pa)-agUt?&=Lz7zju}#)yNZC~X9=_lmtK0a=kW zU;w4JmAB1XS`jfwdu@%*3Tpv!^loT!?>{SS>U+{KH9w+Wu@ikzDp!nK#M?T&p$WzT zST2PCx142eu&FND?Z~H`p(+?m3=1U5%w09@@&+0B>GAUgs|`!W%mm`Wh|Nww0v+Af z^XHz;?a6vA{k(mi30G9p#iNFCP2sg^3?neYhX|MkJj6aEx*e}Y4s##rSbOelx+;yb7;$%$j=sm*8sWSEW9CA<#nMLXT;XY& z)UKdj>T6C2e(~!@o%Q_((?s8eYBNbP4JZO+9 z#i)iy$JZF=Kpol-l6n6Mo!(#)JSgB-tZ@B3fn%E#Ixwnq{f6TPcX4YUA;x~sse~0S z(gcFt5p!7R(2c10V3^6{C^KU77hc-d-?r-^|1K0d7G6^+=nNoz6~PY>(w?$D##Etlxx_enVtP%1S5Gq%3; zunQd~I~vX&P{ELuMw1iP#49)g=z0ej);QH&#fK#p6uLXGAWUCg)voUmux1TrQ@iJz zqoey?GU2$HjmqUPf%||DDr_^`ZhtFwNA>&3ZP)wb2;_>`2v1E8zi&+n)fy0_KZwBZ z4Fe1osq7Mj8y_|r`DYlpB8fI20FY?{{_BO}cg)uPmpaLQ363I14K)uM5J@G;I;kvw=?kC0N2NIO^ z9a4MC!Xr3ozBo~36=UnkXv6F{BZ{X#s^$-`rrg8KZeB+M%J_ICC3Fie+QloO^8Qu*{}(#j(T z{V(uEN>;r%NvOE`L-R@j9?%B%uR3nr?k$8&hV zxg4daMHlw8eXf$@2o{-_?U_Ief6J>SrajK&ZUPbNKv8d=zu;ytEtMb+#n-IG*uXrN z-W{mUtXz+&LNTt1{#iA(EK>A3W;plH*m?C8nti*^x87X`2ceT+U&*!v#b5sx>H84x zVe{!i>l${-C__T8X0qxRm041DOpaw#c}!J1m*@PLDR%csMp>(drvgq{L4m>N9DXT5 zAMZrcyBA}w4_{ia(-(6H77>hV-#%&((aN1+b)aAdUCG+!I(Y{r zUw-JO>kj2ELAULHvzF2I?cG4*&;u3Wrq#BSHM`4w^lRNDQS*BPSnzJE|_g~I)A~>zq3Z~GnsdnjK4c6b*~Qx z$Vq&VE?F)GWFwoxGuTKMrbw?FLF$*n~nLCf$gSk@u%_A=0!MWnP zjCz*Q0gG25FGQbSJdU54B;>mP5OTbUEdU_ne3OEb|J=a2o(IpIjX%3e)19KqUM_Y+ zu;nlSWXWZyVP^r}E^f1u245{Xoj_&(u~atqH4D=xbanucG%Qe0TH9Qea&8;yAC4qu zCV75+eEeB1T?*7t3dZ-76|7Ic>r0FxEkb^@Ivkb$P28?I=8#OS2nq)AVoTvu;Xl$(9 zX{T`^{4R$))D5|z+i{1*mfMy3i#^tAcKw9$Zs-q_M^(*sJM6=b5mTp9JEKafha0*L z%WbWZLB1UrUD=mhe=gw9t9xHjdzZKN2j`9_^OkrL>RF;(e_{!9<|mfXYuzNx(b2Ms z*8K2JSi*W&dg;2d!x~laZTRLfCBQ7ce0Pij=uFc%uW~P1Yfz%l)5K)Z*bNGqDvo2&{Ko*C}F9P{DQmf1vXvKhJNH)g22x)9S0v;;eE zxb>L@j4Jp4m2A@6JY{-{{3X}RIwtO+&G#fyfJk;OA|qX@a|kVR?R)o|1;XpPHL6MbITNS;zut4h@M7$XYiRX zXllk?UP$f8JU3|ZV`M#*wPgYQR9M4Mf5{eT`OLDf8k)v1v$$q2qW;og#QjGgB(szv zXlBJ*HcuID(@)QYBW6rra3+WraEM6)kBtp#iq07iX%>l^dAV&Gy#x4sCM~aO#FImJG>v znXNJudP^~8E>)o>64Zp)G zz5SalBD~PQ)v7S~lycbVeZK!O*~NwYv#qmzaY$HU28rf|eI_)*u;%f9(AA zDMhGz$-L?tzXM!HPuC?@CaBB?qbC-e7-nKZMZX9CeE}QU>gwp@S4aO)JE4S{&?r70 z!b3(hHaVb0UgOa2%h`hp!Lnh2EE}jA)4Hs>@#;3g1(r9bbs0!wC5r%yo{)%wfrnwE zmtNETFBFAS3y`B^M~>EMwwsenKTiLJmRYspJcDRjtu(xg8lfXV9G*)LYtG{k%Typr z{^buHj}o^^fCX)g8{HiYw-8xsNg1DN%;HL*Y|)Uikb5ZNZO0uW3M`*n4!~K%ULlnX zQB1^n0kHFZQDaXdrQV~OQ5Yo!d?(ch@=>NK(vjP@(F;^6fbXArL1VnZU0t^Zh%XH* z?@8mCel|wghHB4AqGULXXJ*RUuNbB_->ZIjc+k)5W|&7(^NRLtdUcue0*WbRe2v3HaOYtUK($9A;S%`!%kO3^B zxkAOAJ)H4kVN`M-=jx|aAdBQ^KJ&%*7;bTlAPNP146z59Lyj02{t>VCzGnv9Z zCtF2{U@OtL3hBD=_0$4eKp{U?(6s=HTaXZQmhSoIrRwjq&=!) z7qa`OS+k3$Yp)fSlYVD&eOwNmlg`jlB^8EpM&GBPw-~9@C-=)GJ!qfR1|U%pg1)yox&sX82tn8Q`MV!k2VqdZDi@j>zG5iKy#M7t}5*33HjB9h-AAX!9ra z@ga4l$r8{pTGb?6LOu35X-90dT9bMPBm~mD6Jj|g0zxSiZL)Hmh4~uRjW~bZ|15V3 zK0+L(MXNkpiR?ezFzf6y2RpKcL()JA)2JQx9}Ovs8u}_|6=Af%9Q|fh$Q`^SgUe%> zw6dW|+6mKY87ZoZkw%7> z%0K5zVt3b0U5%eF;&s)E5qF7ZQFvZH@AJ=@7R~$;`?4$3NRPmINM={Uo zRx(qUma9#M$^sCzlXb!XD%<|vlixC*;)BaK+D%DH%-W5{=Zb~b%0HQ_G>YKo!>3(S z#A}e&H7xypeXWgOd}v=Su4xitLq2LL0o^DB8k4Bf`9C}7^1jNEX>a$qYdK*cJM;bs zT_yPLPZMgh?#H)(F#Yr0NhbYctbt(KBb+742<{w;9sz_mW-_k1=OQ=R{Il|^)Kr+% zv}bl@61;jR3l}W4D&Uy}U@w<`MEL0QF38CkMZm6B6YJvVdQ6K{% z^UzPYJLI%tN>xI^&;}^aDUcIug~dO?W{%5w!N{*~JdBr?mZ(fjoL@&#f)gH8X>YO- zsa5_Jy?IN%=(pnF1GfaYTlg2fPbWI|M5h0ykUG|oBze<(@a5pliECSr zM9x$_xakyLf0n5l>YxO&(qemZH_SIbB*p7Ck|^FQBVg`eGG!L?02YDZ7jX3q2}xGI zxj8$({w;DNNqvq4D*#{zkaQM54;_B8-0URbx3S7E{}YLn@w!(@_wMEBdew_HMp5M= zVu}_HMIi=O2j<{9z6Ef$^p6MV;IKJ*rmX?dl}oqq$D3n&FHsFqJmC$}WZ`~Eoz__h z)0Y+!HJVgmJZ9O4jYx$fu@R29r2@;#MK4sDig~^Xa#Yez5>f*Ml`Q93uPDSEK-w&Y zruM+F@nE!&zzB=3WuexDhZ{r1CY!gs&Emee2EVh)qBao4U(BFI!8W4~#rg6R$d~<& z7!mk|D*y$Wn=Skh&&LohY5Pb9O`cmwNzcmLLO5Cj@=gFw9QPo zq)E+3`_IQQ#y^M-Ewf1Mot67M4S;E*0`-PZ>H>*@&t!kuX8EqOtj9m04C{h5_#~Q4 z=6w)Ep$lIOE7;`-BpfF!ntPAf9KfX?VAI|_ZDTbETjlRe$(bJN$}aNxu{$Hb=D8T|_ZoB~w9qhsJQrjrk^Ht5 zfkWa?FhqvN>9V;ctQN&+hNHyC!g?T$Q?~i8ujWC$ptf<9+H#AA4E5|QF4~~v&i{N3 z5U%SE3{T$-Rt1VE*xeNv2nfH?q7dT;Wrt;$M4mp4{OO^blm(fXZIfXxQ{E*#G`Dl0b~8i}`4!fFadBkmRE0~9c-eFNb6@JI(YsGoQu>(j z5cxr_%p=pQ`MU>yJUV_K#;nQO(yq8Q!ad$vdzWvf{fX>(kjBA1I{pjY%43Vls_XHY zUmf;Od{oIieFdjU*7zw2Tr7lwd<->@tSI-@Xi^>yY9m_!3iPB%LSDn0Nr`PzLP}|J zEja?-*!A8vdhLA#fRG@QEz5igKM0#~MKCM|c-nq1YvVS!A8Rxi1F#o#3)>QVq#c_$ zT|;r^rn7(;f^od--s5y*=%fZF&H0FmQ`RRn8d6p^N0C~a(mmO1WDEJ&$g+mX;~+bk z?z&4V_2~KiJ>d&0M%&YLHjzWgQ>J+?|_e&|# zy;6({KDcV~z+UQQeG$Kp-`Zr`PtpkdytEd*Mj!3jGXM;&1Jt;&PiT{C>^!hv+Ghjh zNC(?$YoW(kNTW)CT*)bw%w_H>?(r2a1?I*O6cP8pWY$-VvKrY^DnKv*s>pAy1cgF@ zTCs!~mBo{Q97xfb4!ik-TqQ>!B8NjAj|PAtDhvl9n)9vsl1v$1#chLrnBh3em|!9P;jA>L-`r~yaIT0L{d=y;nwyIelW z%0=f&k&dXt%+zH-Wq<|%JJP_*%n>-m33zBu;t<+xkhIV&S7EAx{RAGIn{x zW+!I6E}k#H=w(#7A1jqC8xOTrCANP^h^<@h%cBQ# zAP6buE4>K|0Inpk=(GYx4y4#3NV_j60u6eylxq;Gq0kr++|kLoUtra;-KYdKl@wp_ z;_0*hiu#5TU_4~@C`y}^Z_0xtTZhxk<}VY-KUgm{ij%*t>7E5}OSQus66j71wyU7B zGXRYpQ&0JLnA;sGWtp3DsEM}pV+oA6ZH)9}4;2c2>0TM|dW_Qqr?J@!YP!(NS}jaQ z4%3N7=Xk;1QcEWA3iN%itRpOwikSK9I@VaW)R>NX-Mmrijs(*@_h(x_hQ7~6<{0$M)u`He2K)u)$4`$ad!@r#DuVH0q?b#%eMacNs5py`KwFM zp7&L~tzL(UPx9cK99ODAM1B_J6B0BBHGT|fZGH6U-l(ZAqhQIS8GzO_DG}gpSy(GA zyC2~py5&dvJ9z(en`r^#Yskb`At*)0{q^=ri>)>p;0#mU?B$R#PP(SsE^z{e+LzcN zfI^WqpcsY%;X4i2 z%z~Jqk&1AXHW+Q^XvcM7(^0NpJe@GEA(74mpd1OWf@abus)5OSm|*;&u_T1`k|)-e zCqDDGpXY5ZcbF?im7|-RVsHG-Rde+qXJ?tSe=SPV)X-&h_;JZ`UlTMna(P*C@vq{| z51(_prM2Ya1ZBTuawYHq5}Bnvvw!EraH4W8z{ZzyoDiybrWv1ZmMd=)Q79jGhzFYVTbrgU>!?qV~X&TXRZASrE%)q30KO+ zz%z-q8T$NJv}eZ&pC<_~v&Ky0r3t8S%%`h{51A`U!k%YAzW!=cw|z9IAyn26@3?Cq zvR8S0cf-vg<76B5)k=zHusLdjngBh$D)H;X=xz0XX7= zEO==}lb6EKDDIq1_WNn%%X*dip9Qnekkh*mer32#f=XvlsS(83s9-{#$6!v_gqbuP z3Ii<2MemnTgs_tZ-qStrlv_ALrug4wAC*E)T>SM_3TIaK6460+ctqWkjqa4wQ7EUh z0P$lpS$GJudtM$R6dm8{PK;u($DDbmeg)AQ`C}>CQOar{B}#D3M~vF#lMJx7S;w4S zj06BpkTLoX7gG+k1z;%ij__SnFS*(bxXBTBTaAW??}YstLbNt7INRBL=3-&JXJ$3$ z(lzEI3#T>A)zUIHQum^&9+#$Bct%c%bcA$=`e%*lFjjaH{sdUVMi4Xy6imUr>Nmx7 z+JuO+^AU5VNwBysYLkt_wUz={Y*ZEps{GX3@)LBNUfbVp(%+a-p{Gxah8%rh>n}I`Y%^6(TG+tSc z@dh(`zG%J>9g1`vDA_GIe=Bq9#!?hKe4#lPy5{(5V%TCZsDGo)15^X5fp$?KTbR1E zJB0QlAV^j)joaFOoD{u&B?I`s04!?zHYESm#7dvI>39WQV(`F>|>fUVqlj{g0Q}I6w zBxNy(Io0QlbNHLnr;(=^Ynh}k>|}0VMMtda)r#Iln0jw1_eKDQ@V=T1W(k*15_uPO z7?rY}G>Z+`BBq{_ex6qY((vdkcJu4DfZT$a zv_Jl^-BGX;42{GpkpSP3bQoDZE}R5HUlW=Ef2e^O%3A68F z{*GCm)D)Wv%K?6Iv%108=duzuI8sEPOG|;#}w=b-c=hDWNS<}>RN&B)HfBvhidby{$JJVe|A;PU=4c^Q)eEf zjE)bnxz&-p;nVV&WT3M^2>50|5P; zEJhk=mna5)enGsrqnnDS9fXFb;J_lqAB!3ijUE8h>AN7-w8$?A@H?OgD`xwj=@8Ik zZbQE`WKl$at=>T&Icx^(h=e|`fR;_rq%qJL*)oIv`;^$hhc0Z)fR;5RU0ew(29f1@ z^kKUJGPxs?|fe>W^0r7B&55wg)!3TvNsJ#G&|*M4%nMB+bL8|MA@o2M%ULUSeo zz{;}bH_oY-QvF9UdXvkPNDLomH+MCzWX}3Y`+Jxs>(NJp-!CyfT)*c_DBAW_x}g+G ziyA-R&vVj9UfBxf?r*OKNA1-|aD+UzJE%Y%lzi~~DQWs~1~uavQxV6ewp5rckZ`Hk z_w}AmG|2)6uVP$nGrOYcQ9r?$zuC9bjad%PJzVCbeQQYR0LNICj z)A`rRdY~kJ#9)fRLcSSUgK%J$yAXA)C1>}?NC5_0CZta1<=YSt|K?j_)DtbQ7v)7M z?pF=}9;kZgobou)G}R8sHQHMzW;qQ3{s5~0l8c30WNtg`j~rrMt81s&tBp{NQI4AB zWxM@)G68?b4`cp$#}#VPCjH?*9$m_#)=W-CRgiJf`ubk7yfU{_O!~hjl!P_4sZUCJ z^!1#)hD3-Pa(m?3v82Bn5c{|Mi?%M@p+ZX~4>QBrBP{Cp$PICM8$? zdUyT4R-`>UlWh%(U%3wWGD*=FuonlCsbrSUrtvoG(vBSu*z2c1D@C<0>N1ujh=mGY zi}}&G1KrM>RsooUGim@W_pX7d$GsH#jF=e5&93tOpZU9clDZi=^?d>RrQh0tpe%ub zIs(yXtg!ltY$b`}6b}LoZg@IBuwIt|?xsQW&LLhe9G=i!sfHU4&X|8yk9kYT9Ju@j zoM!mEA@4oUl#3A7J^Sf_%(tMtQmEPgcL(CI=mUvZ1K3cW%m!M7V+8MSbUgu+U4^R&m(bWqn!H8Up$v{>3tzqhjrP1JQ8IzE!>P zXF*d_=gxPr+KW{xqKr&!x{~hrz?v^%X+OW2Hn9$ZqaycDEbNcSlxI)iN*Vvql5^_aNtpDG;t(Ujc9!1Ib})y!(t@HUL;A@RZ(u;>W9U$# z*T|7AUh*-AUeNyYvw(S;2%70;9x!KXZhKI+baWcK2q1zCd%5zVyft`;td_v|ptq&Sn#Mv;wSvR$YF75(P6L#(@5 z7skj96zUPMVve@&#@4N*kX+Mc=@&ErTT!$ycN9eg4-jCJO z%Bf4|U;V`TU%X4IgE=rRl{oC5I5lOWbNT$4!Ow-fFU{c=)jW>8Xa*V*+>)v;V-~dF zHS?NSN{1zycTG~>=hlG*z!y@z3@|v@`cPG|RX8T;WJjC};EVz)w}d1wg&fnggjn_Z*tk0xI@4eGgk#kJuVyz}TSDPY(POJY6zwu3f# zxP$!W)j#?_&u#Di2gMvtmb9vXw-tw{FM>J$UqbC}RkqV(hJWg=+(p!;A1MIk#1yEa z;TaDSVxFEL4+h)inee>9dxVA(@kZ)Omy;XxD(G-=Yyu`1(BF)ZpdaqBMs!L1UH=vH zrUZzz9^6YCDOPzXckWe-B1JF1oXx3lWvw{?zD0}V*%OXwy^6Gxl z2^t>Ap2cLZtx}4YFzbo?zZI<*SG-*S#nOrQupv=Mk2 z^y3Jn-MKXxbFns@To#1wl8f==%V%ovyOciqQC!pkBDGHlJp;46SNQJDOq%abPk;ot zUSBJGCEwgoBKSdU{;1a2K{}(bXrFvmh(OrnyKy=1Y2004*WCxdtFp2XJuOXA%Ey3Z z7FLP(451`ZSVG2P0Ns!T93}W8&J#c9<10mdo*c`w9sbV!rAg%IBcY*5@F*a)_3TSM z%liwP*qVM`yzf@P`Kx_IY@XhoCmwUk+)5&;RfQ8x&8av6 z6C121q$Vb*p8bJ-BH$LU%w!EtI&$w)#+EauskK4a))ZwLscNsJ%3~^b5$gE1A4qF8 z!aJx3zO0E_T=>AI>Ao+%C(3z|NwJ=PU$ui0JFF}Gktv7hWSdC|6bY39v;hv(A%Xn- zR%{W?s4=0)`{ghI?8Uqvw-ijQYE<&Sdyd85LT4EbuAcA9$$m*rp^)V{SqPyzrcU6^ zYU^*_1ioFlynY(++*%=|^@;OB%^VQ4~Mi-j2G;5te_4kl8 zWXhgA>LKsMucceXe-+`gZiM+~D()O4VP2kB`--V&o)RX^HeVyjx0WrI0oKvbl33^5 z*gc)`i0NC+&kCfWopRnND}Rs4mmXtZ=*oT>^?es^bTxuUOKh!-kO}% zEUo>WfA0CEl{7MRYKr;8Qj3b^%vc}Rm%Beq&67nnY}#O?lMqVQ5hY{M{kC|eLs=Y6 zhTjT1w(+nRPyH{zO*R6<2}m2D^nJG%bHE?E1Uyd=2Xkb^>=q?(GHwuazC5vi0`MbU zT<3zTC~IIg2ohnu2VmI~S9osy`?-KwzbFiu5LsEH8W3pk*klp5CT$`mRP4x4FhQQb zfVIeSf^v8j6gom~~?0uvqBC?RSu1rOozW4r(A2 znd-D?on1~~JWCK5I-L6+ZCW%A@95YL;3nEVf634zwV|d69=mfbc76s<7N|79~M2zmeis8Gk<W{oL&`q`lYBH!WwuMf=5ty=C=(04+e$zwu_vicHFTNbh-?5(_2*5TuA+g-T+EKo*jn#u2-Dh9QERXB_7l`+1JUtPs!(fk~ zo{QNfWG4Gn0O!epBSPmKq_t4YgLrK%1}+gL`{@;|?H8nkU?P;|U_XZdZEb`pv+B>} zJx1>_GRDNea7g8&=!E;9vvM+IU;Ee?Q3u4H)jZ>N7|V=uU^4NSYZ%CSP4v0h(RVO@MFXNMJxTz{gYw>!X@n#%hyvH~UxE}_*9|jy*iN_MbGS352#^0ar zD=Q`^IJitozDWRv30^dgD8~_B%rge(V$F}p5G=Ju75i3zwHN^$655kZRKz%9mNJT~ zxJXTQIjHOsXC+(6iF;zRb(2q@ehZLzVuL=6BPyj30184lq4iu8#ZYQJXka41lJ_1` zo-1zIG(cHG5Rr`FI8x3*P7~De2szK^5B!K>2m$8ZJ5u|-@J&P96Ci3^A+#oxCGgp2 zz!zU6OtIHeIxXd-i3T5^lLRdLlU*%S z!+`qk4zG&>cgA35-MqOdu&FAPWeHsr&`Lq7xSTz!54m~9I8Hc@Bfg&|{F`~k|1{6| zx7OnAJmbJqgjxuEr8Tad!+x4Dj3Y|tFbo3@qpspd9O8cNS`xHbk!eXA`gow>G_NvHb z#V;9#=2#QLWw)XH-#>bm$GxhPwYVQgVliH)wVukN7>rT_g)kYwVV(n|BoU$aWL7Jh zw1%)2s_RG}4zcF%`?&ct+=EUY?y~QJ7~x3m_i+^1wy6vdFb4SibHac6pCUXO5!gbh z$%Qbu5C#cMlE{(}Aw(X5c&P+P6v!z_esNS5EcL9p4o&)PNgkU*hzpA8pDBW0n%Uxo zasYU29vU#wgUL0Le_pB^!KH@J^!NW#0>H#6XrE-%odd=Z0>FvKdSy{S76tmU#HOmE ziX(KF@S;?b=sO>=bGbgYW&rHoBIW*!n}2#ytfM&~fhGfsVv!{LC#eveiu1Zz73IP}sGXx$l2eu`vfHNLpN;chir1d7xf&38pDRS!{^O1s2Vq*@@ zp_u1TPLr#KVXTUxS3>l&wPPWK71QKB5#gWy(@2f~Fa8Va03n?t=^XUoKwR@@q84$) zt`P#TFoh7_lj?gB=9y@o#TiF@eGPp5HNjd^LWD|d>p~bq2z~Ir_aTfFf+ZrKyvM>) z9VabdzQJ>bd~%u0w>ry9;|Z7Cak@B3`G}NSr29Xn-Iix2DZMXPTHI6>bkji8HGEM- z{5WSRllPGy{}&PjfR|N_-+PbJdl+jm%`?8AXSDN-Vw#|e0!k}(2NDPr#Yg=-V;&=y z|8}17M{Dt?5b*v&@EQ5%&I|{3#zY2Unk;ap)^p|-xZ7V4!FV4}-_(p10%JxA_q<`x z3zho|{qcyqckl3y5uLv8Q5%C-*Vm||#HlPXoK846hq~`XKmLQGZaG1#<}pno+iS7|K9`u z&3^;Dc>@&!iRivWT=OsOpn(uxhA|80NcO!@Qj*X*_5iN0NeF@e_uu^;87cj$C@ex4 z$@|^|y#s~-%oKtbu?$dnAx%o)hdBg{c}F&rpvs9pT`nFXWmF83G7^M-L|*HqD68hWF0!^qG#a?*YvF0Z!O$BN3s-ml?z4$5;xqA4BC-WMl%?e7E_4OZjU%In3xqx zQbO|L)Iyx~@yEjfx8Hw{#yN~_i-t83UcY*UwrL>i8pGWkPJNHj7}QMu+At?!B_&=< ziJoQENy_tDa(vjN@$=bagh_4mDerk=V@esDAKiy^?Y?LfBOZ z;eRJ3;oEP4hXna4l`x!*%{U6Koj_(%T;SgoLrM=F#GTdl1M zVGPy|QwaS`GLLRcU7ugQPj6LJt=V4GzDsX61huFpHMmKR7;44TsB=NtEPV40~2 znDhlIA)?6yTX~ne9aL4F%_8os#oavPz-q<*&l~`fnMu@G1QY}abe@`cir?dfIHT1x z_fdp%kG5cshHxMdC_HNMJ3g5`cuJC8-&RVjivl%oEU?vgf&*7dpAq45j-7d}QW(5PPjsfCC&!?G2)~|K>H1UNbHy33=FP9ABqgPHA=uH{ z;b?8wS=-It4+@xXr1TF(0h~^e{rT;;D4Zkki1kA{g)so6G9cTm>U4tYy2t)U2*7{! zUjhH){|Ncd|2e6fo3JVhMW%sd}ObhY-8K z%ov-wZj^}4Bc&7ytx@pT6Y}eK!u1dYm`D$6sYSOMbki(CB|{Y zeF*qrn(+NF;BFkzu|EH&ekk4ym6Rx%%3K%?!_GEwA4X#p=PbN?YOzMS=N(_GOEy-L zUk#_u>ohUoQ&aMF`n<03dcDS~uAw8!>?}c6C>6c!S)<^{wqSwf-%I`sjn=4zI8O#j zBD8D~9*80tM=8`wMUdDyV$aOT**TPDiR-H?H0w1gA#fA|t#c^(|I4b104JrOyhkkr zcI?U%ltQl*j#^`oGS0&pW^A;ECqic}j*J5Rt(hNZMka6kGj@aJzygtXAxyos!~3r5 z-gaHr6O91u4G``!y?^}ikB^|br0uaZk4c6r%P++IPCl~6@`Lq&JKFh##g2zwbKy@p#0yeUAg{^MC3PVAvSrb)qse zTd!EJq3aq#0DhWbyA$S97rg|gDf$T{a}n>)nsd)omsp2hGt$mzje^yG3uZ{lrh#r6 zR851cvcz8*gU^&g!x@J6{``NnQV2psI4xt`Ez84KQlcRONqP47Gi>>_;%pB@v5Cj0 zpcew2_c-=F9;}VLfa_~~CM9Ikpezb(0o*XZ--m#0+oCGVNKIxSQj({aj88~jj4RfT ztm_)a7|bEymJy#5a|V9ftpD-UFO@>cBXJS;h_@kF7s5PyKMc=QG^d~E6D}JI=Bh!dR7e!mLQ2$9Vy!jS zY&X>u1&lG6guu~zd^e8xcgG|Ccs$~E7;xl1z^8tcQsPxn;P2WNzgw^IX1BxU%^Os& zUqf%VkW#>(PMB}+Fy7u`Ivg;bP8f#)<2Xi}EC#~ZEE_-;Y)x8x#zg%;o*GoE70UG* z=K31u<_5)PgGOs?y~l1C&~_c>ucywDU1^Cz+B->j z6P>diDJ4!J;7_cOd~YqfvcztlaTEffEK$}qwjtonFaT@_yJ{M&iXx`b&PB0MhMWs2 zF=&lJDUed=jDcazfubzYIfvqS#ONFjIg_fV7n8iEwldZ^see^gaIAbuk_MGo=3lK%*31R~7zty~aPfxxv@3 zU*qcQuTg*X74-Ergb?r#515-4lhzoGi3?n7^h#mS8Y2T~=A`zU1pqB&42W8zVtciw zX;80LsJB~`*ViaN{~YG?&ta~vqQh?AL*Cy5x3_WJ=RNd1$C5zGGsSh_`#SPC&>}Vj zXI>Kpd;X=_z7!&=`f~a&q{JOdq&ud{&Mf6M5Jkg}qCi_!xTYBI&p*fY=bxi`^9G8Yal8u;aA>8Fy%I;w3*y#kdZ|{STL%r`b_z;66Z8Re0UD2yKgYv%zY! zi8_nZgu8K!K9k9S^*0Ruc?rPS7ZO4QPh=g@1YqKLTKHUR&dCV|vAf?Q^1~a>5E7Qa^QKyH zBdRb4TI;A{%qF5Un_NuXa0;I|?N5QS0I(4PJFRiOUgPG?8{B;THLgGZ9NX8gqdKlJ z5mu{IY+}_l%C<#Ggj#D%b&Z*kc{6VSpN(7-?!s^oD78jW6e!CQWz(Q!oA<&*r|0Cf zLv;!R$twXq?|9rPs_OE68`GuWl)640|QWy{&XO3KK^K$PR!0od|r za7BbV1QgywF|61n=cjp&K}qX4Nn+ah-dY^Jj|V|nLT|U&?sid9ZL>kswjiYt`X24^ z7-i3;{3Q201pyVa+CW6k5zQ`yF%b2EsCPuYCmIN6{S*&?Mqck4!2jmAC;_e!G4l=p z{ncOLU+#AJzkT~H-re2;fUl&qg_NTNx&Ryna0E8T$k%tgm1 z^_uVJMhI*G)FEIi1YRkHjvJLX0M_0|;}j|3STg-|I$^f<+>}&A5e#K5{$MTMc@HlH zuBr-OY`3_2^9EPjE!OKbs;Y|0JOHYyg8oDSAlGK(LyQ8Eo4p@r?|Vmd@D==we~SR{&jGySkR$&1NBkeV4!6$Xy|vg%87e8A7GeU>3E&Wb1Bf;RtRJ<7 zUWU>q)t)fVG3`|f9b?J0lxPsgf`bqkvkOMKm?%q`Ng+@ZVGZCFfEzrjxYYbAg+P;! ztdxqgZ|~vx$h zisB6A4Vmm%YT)V=0QmQL?<1hgdmKWDrkvhmD633`+xYmzYG6vzsLXQ{d)o*a1(%k@k;{0&;5wM z=Zy*ge^=Keg*YoH1)_ro4j$-S92176K**9H6gd6!0Hn1zS&NPhJ5#gBAmX@pj2N4N zSmScHd1ih<>hhO-f^PBH4@k{HfPLt*MV=(ev~y7dkW+tJ5RE>?Lvv&7#u$9jw)k?j z!t3=K+qOknmhr^17WR0=ba!{&{Gsnb({xt+IgdfpoIeFKJjX{MvtC0k>E>Jn5LpX3 z&rrhvwO*s}KGw%Y5$Ueou z)}MG28j3v*>#9O+ zOr(~F0PQ`L_t94Yj~W2Kbrv9#Fl(g$G7y%Ip6KX8I1w-iU=~8SfA;W-H!f;!@-gt=-<9Y_x3I3;}KyP zK+Jd(iSy4v?tHTFY&iHM?rtZNkOHR^Fh;~a|B3c@)QL{Uj; zwZdw>M#Bol!rC*GHiy(EK1i|;8@xx)&x!$JN$sar3Ty7%_nfg6)*|fp7ywwUF-;SE z*F_eblyRcK8`wyRrYNv$8Vue;Dut`IMOzdRnj8WIUpw@DMAZ#L)IGe^6#oql1d$z3 zDza^7E#*l|dGI0ZA?1mPMk$2zA%xV!IZnUam*^J1&eSidGP6V&OEI#F2GnspDq;(i!t1uhn&r#=IKqYiIZZK( zxW7j@oq%zK^!}_ug+)g7u{Z*G{ja1XEoBfwjDhGBh#n;H;E9ezGzlR*0IFFxC{4tLgKJ@yC>Y{>i7m5NM3SRomi= zt1JBV>(}^tx5KV1QO+~M-5us(!14WiJbe2t9)9=%!|@0|&u4uE$qmumM0HVPUd#YO z<{|KeDx2zhA)tx^^?HrKHehO+P}TLBpTAkJv2_mHX~L@OP@hgHxj$p@RL61o%&{9P zgvjZ4E<%NsItPJC2&j3+G|xB)0jU(`q5u^Iil~7H9i{Cety>5*TH{UApfv_k2&}6L zjSwL2`H-~`eUIUI#JJzXNAV04M5r>KOTodA7-IV|fw~P0z0iz=qXq-!u*0 zY&Lkc+hMm}qtO~+nlOzc`r{GZyLaesZ_(f1W9+)KC3v3xrp!j2|F1DuIM zX>y?uo49KLnt2W*LyUznk=b*Z>?`;V8oB@nd2*0bU zM=Q5qlWG3a|47e`B|W5^IRG3$^uVtjfRO+TA_E~Le#|t4Z@OhMgp+fq5u0{OYg8;2 zlBl^UMN=U}n{3t$I1%Ai2$%~&Kq88MRzzq*KtmKMv)QKkly$$(7WXTy@z=)SD<<4* z)@xKv16Yfx?{T`n$7#PucXx;Bctn^ch^YG(Pk)|VoKM+Qu4N|$WkF!s<2b7yC5}Y~ z)&Wa-g=xZcJfbruHpu1~wA-O#ZbA#-=5)eWZHs+b!We@+1AxGIgI1{s!;ac@P%KwA zu>x?zC+)z~9}xm7@3G-AV#itH3_!5y%X+;=v)e(GWgO?tGlpS6V6KDFItBs8#*fp4 zkqG1*!Z4giiHE+&G)<^Oz-K%b-AjpM!k#2u%EYVqg=-~ENQ_d^3au!xDa+6p|D^#$F#v>6fM}2ShEI6JEgKMNilIy3 z1Dh-7KrfI_Ibi)4j7Tx`QO#8<%W;5*c zk}`mE07%(U8t=XEnP`~_B($es}=sLX)xC{ z+Hu4?#OCqH?{TdZwpwFnOdNZLfJP}y>?6?fX?tQ+U-ElgbD$fTH}aqqL|NjdZL!(y z&@fVQ?7HY2bU46ykJ=b)>l&N7hGdl|=Y7-(oTkW`=sJvjkBM!@TOxeLf$BB{yaRBT zl}P~+0{u%iemebA+FvsvZCh1-T@-Vnbq^``L5O=uc`uYY3Lz#C`Tywp8ba$t76ShD zzy8DlVA&asC4gn$xei1}5GAjN6a)%BZ4`dQQY}Y`CGUWOn>Ut0J0sh5ft!Pxg*zQX zM`t#h5G)^_Y@Q8oxRnstNr|0OXqgx!Il9YFr~xRzO)4qzr7`&1y2kIC24B`Swyfb7 zgupn@IGs*7+~1?WzlUSsk50`wJWcgwewt@Z+vOs>B-WDf0+gA&=H87E0>N60rxP6G zHB8&0yuOAOBATsM6~1a)P}`!JCbR(FT8jf`6dNhARSG+;VWdP$gvLiGln>pe;#;H89;5>{*UtO>YUt$_6!dbI)xfq58kKTY`Vc!aeUo2r765_M6W1Hfo4 zx@kf`jyMiO6cgc5YHckV1|zK*otjjR239z7$wKevp28XZnkm#&DkU0Y!m23jrmDu; zm{VcQ-jwBi+qMtuwmoTMrePR@0`QNE;tYNN^cleO(FlRaaVvR1iI@#L}Xn9#BmbCYp;p|yRwX! zZ)2iLOr|eDOC!zS=%J;=sx0xkY4Fv0jjuKvylNV>T0?~Z@BJC)Kb}sQ`W`gTXC`0j zcBiyGQG7pi>OV1nU1kGW161&zMQQ}5jKI0*zZe3fF&MiJ^Dv-d)uEP+Rl;WTn4Jv+ zl(q0&?>9oAN%b$^!lJ zJ^;8wgmM>n%)&n$Uy^DtX8@Jfuq-NZKGB#MLOl02Y(iPHh(*P9{TeaN-+&!niLjFr zSH@shRamW7Fsl_rUBhyRSbU<5pB9qf=GpG*3UBziYg?26Lf=OXhQk4K*F~EzwrrC; z*FOhN(cdywNVm&nj*Q0gHj4UKrBsdhF|z4CvblH zYX<%ZAuJg9!%g(PAUYIEoxZ-l?q2=p|M`f2@DJR7^56cq^v%EfcYk34;MFVO?hc3} z!DOv=LX@U^&wH>!EWhiYvMG{g;KaB97eeHmD-}~+-u%H@fbFLW#O`saHC6!Dj3M7J zlyr+oCRrwT#X~BEx^1z&xxvkwH@Mnt&{h?c_i%>; zroP9t-^2BNMENcB4$|hw3xP{yn_Yb1ny2rjO96s|Ovti~Gz$;T!Sy}n{T`Ds5N#XX zn5zo7z6O;ACMnNw?}6v_1yLN~CbN%}!LbJ9$SlJX6N|v~-%1FWs=}+QD{Nl9f^8ZE zAz;T5hhe~d*WtVSd))5#IE^Eu5SSODu8PG*3T_N4AwWz93)2M4$kek_HJ6eT6PGMo z#sA`a{&@P6jL_f7d4HOndzhTNS5iI*DUZc4bVjKW|KK0YLI|QCeh|$!-~5FIfZN-A z;Uy`*jsw6uJj(BHI2in>eR!@KJTplIoEl01!a0z&@Ycq$6e7#7l@co2<$nJ_tIwNXAW2q7Xrc42=N@)l1eMePk!F~l##Gv$`;_q5!2y-NlFOk zqKHUc$JD$mG5UbM?_p0T7`7M}d~eU=VOIa~h+wT`;WcvbPl0YLC0131-DU%IeT}&& z@GuN`dpO|j?JeFO4*21C#J=k=TZ@tdyU1$qa{%C}faCz+xU`v^!^l==$)z~iflZtN z;TL9#;`vC{`4Gm*`{Ur;ePQiwAbOabJ9gF%e|Yz9`fDNRZvlwUKBNEdKlvwrVFBRj zMM!Q+Jz@!vGJqW-HzzrD=?`WA49T5XO(v(Y3g8Ulan1p(HoMju*HU6jgq2cQdylo0 zky6XDTAQkh;-A|sorz9 zQnNO!U^2^42%SIotV3q;T0|am67gpvY_$hHKa$Z295aSVK6ac_`_-Vp? zI$_|HS{FrZ3|19LDXfP9yQaZZmcTTjvoj9PBI$toC^1 z;QpEt@d*zGAQyt4qTJU*KhN*A5bs?G_fm+H>-+Kl`Op5D`#=5Te+&qL|11PNu#d-I zP5^lR`5a%bdp`MFM0W0H_z9M336h#_%H)0Ivh$)yYBMtj0pUGL09OD$lM-9Ru~ESQ z4kaaYQJ`drt7fx7`RWzq%?<2&jY%nt!+^WK$G3ftKb=l^+xIxJ2HaT^swbuBo zuJN}`gTHASysqn*`fD9~APoBHxeW009BI$F5>i&{=aACn=3im~J~#!yqcvN|CIKl3 zr1B%Ndp0xrWtc_|x?DuCa7w}Q=&Th26(0uUJmbFa@wV&mzV9(IC!j3~?CKiVb&YjZp(+X(tcGAMw}_qW8BYmRzx2RN>sxw{5pYV%UQ2negm~+T-d0-Q0qDAEa{u*z z_utX~`M>-x;X=T!u0Ps3{H+22@Mxg=fJb898$43-9Ui9w&&q++18{uuCsmmw{GqrW zoB8IM5K!{Qe=Q}p42TJ=PV0?9Xj@>rg}S-~lBA~}3et$UN z`_l>gd4^@S+Q)npLg0qy{eRoG_+8uLf5oV|l561ETJ(L7{&d37b+DZNE8fVgFf-_ew1(+>RI`nBzEmhpfmKzZuWKB~5tgCe z-&h+}gOdz6o0+bKz=i=sN^8tX##<@ON<|z;2&k-$;-lk;yJ5iFzQ@BfK?#8kPa7#z ze(0_Jq15_b5Ov3Ca`>yi!u!6D`{5(5!{0gpBwKZZ*aNuZAlmW2>Fhl`3jiSt0O>hr z8Gy@)Biu=@5h=qhr-_4~_G-4QRK6=h}bJI(ph!i$4tm{%|_so8uAh zI0JAWIRg*?Dy48!6!@FA#XnfD@w@dJU)D8ttYGWB$25)@hXF&HO=nPFnRVkuHqJ|p zr6-$znFajF!aQdH>GaPHTeAK_`W@#c8FMNeLvzP|z&ws9XA5NvjFPC!5^d9>oF)+a z4Sw%E?yN;1LL((M-oq!DF^>}!GZH)R(X*V_Q3&+jW1QzGKR%9l7zW%;6OPtmZ464S zv8^iHF+*90ARie+t4`|!Z>?>9G$y8 zS^Kuq`duOAy%1uUz4t;0{KwbV2t+9K$J@5QWdKOF>go49@bjJn=?0IqeT^kBC=(HN z47qgK3|eNJDe(b-jA51*Wg01IjZl`Lrh#u7%vBY|Grh;XwfIxl;Sa|n{&YIwhpxl> zVZb37Tz=#pfM!PHwyN;idX2AlJAAp>;HIuo3jxeC>@;EOI?R0^`R&$5b{ubhmB1(2 z2`#ftsj}waS&j`)`vA`}fJ`hTc`xQc;|XIh%K#D(CZw)75$rT!9(v4u2ix}$RRu}W zQ?OmH&^QM@TZCbV-G1-mSeLQ-2^Ua+313VLR_qlaiz3RBWr1g$XLPJ3(L0BdxdcW^ zR7#;X29+@=jfrbxnlM<4!!%((O*l>yI_EGlT9JN2w)879fPfeTJmY3g0QMtrceM7s zh==8o56U2gz`wn}KmY&#?LYmefAIkz^#KU67jWbNaEsU!Y|#4%^$_vg^wWe{9u0NJU({C-?o z+za88MA}Gw1Ik%&i+gl_Pef6)(^|M;zy*@#ehA5Zs(J&cfmogvp7=%z+p zR#A@PI27Q~V7PzLGLx@1=~XcTxdn2cgm!=&C|n*LY{%O)OcMZzGYH2$rTsMFUDx4j02m zEn-9PzyaWUL{L!4fuO+$Z~q`OmulGOzoy(;s*Q2nqa5f)fXUl^NGBGMSdnGw#L_@A@9M!+<@Hef@8*0G+bq zkx%~j{JiDOpZa9e@3vd~`~Chmqoinjnnywg9{EFVc;l~tGe9p*1)g86toA$y0hWet zST{~`L{A`%WaU()5X!acG6=luI()m|<4?!qZ+hbuW8Qa4;Z0TJi>ATrw#Bw-P*)W+ z`_b8PjE+8s1LnR*;IZGux&LzW=iif^{O2a&3t2#Z`sYeb%OH>xmMF8&M*1CDCXxU| zVV)zd9}((Yt~aPcfYJ(8RbtcBc-^)*wk;-WabqpMmJ(mGNywP#G(ZS6Wr^)-h4p%k zqOPIJ5-tREBEFz!w?n%`wdQw~qQ+N^Fh6S5<|-X;=8&W`nwqz<2vSzB?T7FbwE3>-SHj0+H{B zZ~6HSk5B{uDc;1V3IN~@-f;$yWbdy4e33=Gq!{&NU8Y4zAt10Tj9}#$!2}Y;n|b7g z;~2c*Q)fGa&FVzLNUxv3`l(O~*HwkTS+DV*Y`6H^?GAs{G`Lm@hLL9zkNXDp^CN4Y zY;XZY_oEA^zj~qRmv45l2n5d~Ej>jDW}80`IOnEdrXHLNkS5k(Dy19%34bS0;H{1Ne(B`p=HHWaKAZ7hLi{bc0r~4o?{~RUFYyNQ3_vDS;3ctKsbH&M*cjEOLAW1yA7EG5W$4A$a)9PzH}@Rn=& zA(L|l9^v951@~o!gHNXa7_yT;jl|z`0C4j2pT(sTdYP*f1n(H-GUBfAbd7ht`WPWVgZyHrr z0Ir0<8?EuCsd2N}Vt0Lowr!yauv2XM4aXzK!vSs_O+=vUUKAEN5GIPLvMhsf$ z{k?pL7N>p^0?A8*H0r}sBp_w)5m^vQ-%H-ZjU&dx0a_`L_b65?n7T$$mLOv=TZ`#< zgyl(sRthi$WK|&)MI;3|hnaEyUDx5E?{PPdxSwYnor|cM7ZzXs{{9S)eCD4<;ct2K z-{EQV?~|#~f9e2`B4J_*-Xo?z2^5r&fscNI{BQtzuH#@WEK7d{tx;{)eqO0(mSjrQXYwL>H)eQ6Bd)HQb74Vv8!x~vd} z9@BnA_wayWzmEc+<9LzmlQ!>@^dC9z+3@p| z=FUI=k@vv9L#+G1$7AO|!Q(&aN6>$!i;?P}Jzs>B@>h5i?rD&f0iJc(lIpLM62h3M z?wT?Jr4XcyU=L$ZHx0JC9j;!##%8sG5(51+;WSM+Fl2P(j`7FL00bi3cLm_JQuwkg z@l{pfP19i0wkX)t(+xd_aYVo0V|aLosK2D`FXg$e#-foYe+=uttod=F8Tf$+odBEci1l+?wVhf&52;N6zA8Q^^QN%t@-5`_|Y*E5l2c;yauHm_KlitIh zPUyN0@5d3h_xE_{dmODr&m57z&_^nN4~QrJw^;zVLu~ww_&79!{~!WDz#}f;J>o>5 z;LU%7SQ1otboNFd5^21bntOE!QD%r`out+Si+v5?xzrT-j3tpJ)92>4d*Oo$#k&z;{gj zo&8^A<)1cxYW&?Jp7`Ga_#?mGBBuZD&-EttpZNkMdNm=Q_&;y}*l++yjX_QEy$ZUZ z5#T}qv_@eJ3az1)!me$xscRI*L~TLma61h6?s&u>9v<+`!^3aJ_m@JT)*9QU#p|mp zeE#Yc-mKSH7e!?IjU(o+!^CVqpVHt3zW);0=SljH3mSh}{eNlv_n}7MlLjEN95(9% z+t_O9`UDP zz=O3I_#pTTd*oREBVwKZ4zcD>GyjD8OY#=~iwgj0jd(mwk-kU70vJ33gGywK!Nm5O zoWsD+N^7*nMBaB%VB0jPiULH0VV-fEXWVuj-kwf)dphBL-($~n6{A7%YW)V`tv@JwYL}aH@aMr>RVPxI@+i}F(am2fEM8~SVpTfN5 zXFk%r|CFuiZ~65t9>H$|encGif6f75dBH|RaK!h#(FMQ1)C^2tQv?W4Bu3|OoF>$) z98(&DqAam#8m#IXT1t%bjLCc4_dR~t@A3Y0isX-ZM(;f=gIRvkFGkY@t1ebabe__j|K63Pu=L*<4hA? zWCCLGJvlxAc;p1+z5-`9VF;1=csfBOSLdRDTCHH%^%nCSH~%!D9|m;8fD^O&dfxo` zN%9x+plm&-G57BQ{CmW@{|?Ob1Ac4p;eR**0Ens35wQ$N7o|YV2G)2qWhnq?AA%U2 z!(p1Bm4a3ZtGbTkzp6rARS*DrW{AD(I=p>&z+KR9rm0cYHNcKF!!Y1mR+wrzV;eDKv@b}HuVjRcFk6^lXGUWUVd*m5y ze)|6rz`x}n@Fxxm6Y!Vu5&n__K;X!jBB(&b(wxO%H~_Q&5QvJ=d&qf?69BDo<2^`9 z7-P<=uj4dDwAkr{htmniam3(U)OG(zZ(MKy*lCTgixPj=H27W9;;ZECr*)irT8n-d z&>xQ&*wr_U{iKvp?t8)A7nhoTz;l`Jmx92rDF?D_U^xa%|DFqnJn8xak34}C%wkl5 zU^{ScEquaZC!Z_l{tYJg%2$?Blcr05BA={AoFBabyxN6 z%BlF`^Fvz4z$H5&bw~QF!Bd#slYy4!!&l{%~fVwEdnweuO8N zmpEUo;IwG_jbrX}?|USlS3auBvUr`qqn7>V3PAM0(9$1d$*p4Se1?lQGscIEIm9n z9A@|IR{(xj?%mq$H>dde!MHI$Gys^RX^$L3HM0v`J%gpHwh9%eKW?j94xfXo|?h_kHtNYtgM%IDh;YS08?e%kwiVT?0xH;eHRl+ri)6 zA@28(qV0#W!q7toJ#Pkj!2PcV^ldW#^ap$%;4MqkNlySy`3Yxg!ZfQI9B~ew{60+y zalglScZbF~=xPO9+qtd9W!vIR6^mhj*>1o0n{VQZ$U>b54u+c0tWw}2kk=)-Ytru; z2bce^3kW>NA>;oiE&2V>0bst>R^i+7bHsr$Xbs>@b54L1Xo83xV>H`B4R!5Yt|1cP zyz8>=o(R@$i>_(V6i?v$YX4o#wEfN>UE%!c6Reg?xEM3T@7*1S`+E#U+Yd$Yh8{3} zIx+qu!#`2(eGN1oFs|+N7Mke|*0P|#zsH^#h!OVU0?m4j zv(*Y0ZHo)ErvHu>!xVc<+C5tg9003k!fDRv{=Bp~-<%+nzsnUxJQH+i2Bye&NNjdKuHR1aaZ-%moL7CC`u zX9_pp>cSOH!W9u7w=F(7JHvnS^eO)Q!w>QE$B%KbSb$^1u-RaDbA$c;J%-u5KZ;v? zTH53J%~(DQ7p=WhmfvqP_y3)Jowr?+stGWAOgMBD>Pas^I4^^&4Dnu>QuV#i_ zEYPf0FkOehjC=2Kv)kc*w?ptg_fOQ{`yD?f&)K5NHLuTM1_F|gwb92D&=YV&z%$B5 z{~Kfv;7jDBUtRtGWbMB1G62-fYQ1oF_BYGyGc-)(h{#N6O@zi;ESm<4(rDtn$9@

ia(_{XN9=OD9J9hk}4Uuxh^*08Rj7Zus+aCs3$80cE9C zF^aU&kXhhWn5vt6tt#ep64c1Kq z3*@dc@3WM6(F<4-P0~aFCRL$tDiJP?!G~>&UoMyUQIfn;001%eNkl0K-cBI0PjKjJ&gBoWrEX}G4by@4LB!R zIa=|n@fQFn#xF#)W1?3~^d%AfmVn<9(Qk?9GXP%~VUHbtpsxSB008tB%#?qV{u=?fbPk_(9e#CohQGMH#NWBP z!Y7xPxLU8#I)~&vc6WEUd-)Rg*Vh`*Z+QIB>aR27*AqaQR#Y530F=+DL|Oi=XbWm#bZW{pCo_XXfGfQIrclIfQ^H*l z_57{?@K9c6X1Q8GT9{}sM7M_dYtBah8z%ZK6Mas=*92UvY8Ao#0dti6aFc-Zdu=W( zQh%-jwN+c7D>qh1DXl1kcH@0>I}GMk-(&3@*482xtv@a5LZ-xfm4TG;_VQW%gPJnz zbJ=zH@cbN~K6-?YE-&$Dxx|79GLG`$_yHR5w_PZD z!{hG)1o{WQHotB(PXx}&o>LQ14FhnXX;%O|ju^@{Z2KO~Vu1w_9(CPBBYrJ{&q6>q z3~)sn?mORf^X8|T2n3XgB7jIlb-?Gjs(vZJ=Sk%Ar22)ZK2xF_1MHIO@X=}|K?MKZ zFMo;u_22*d_WAyx|9`ofgA#yFPFHwy27KUPjPv6hOTV^5scgI#Pb*S``p3y zHahN;lHY3$Kd0lk4;<$MH~I$P`rZ(E?%sbxl8{cS7!?d2df!wBE)86MzsG*FLDMwQ z^%{+}=(-M<%-A}IOA(y)J-W>X4Gwi;`U5_*%)+oLbJj4U$;{DehyoLBK~#l2zDlZp z6-9nGr1ZrQIh?Il zIDhmA>!(lAEtlYwFmAW#@9r|q*WF$2_^XUJ#VGU*#*dltKg3@9pi$09JoQA+@4I>c z4;uf;|NRgUoW^ahea1p}cA8|Y-VZZFMG%Jp`@6e5KM*76;sWh@jjk{&oq3P5+gq%y z%?eTF`_u0TdQ_6IZILGLtWB*kgJHfl%wH1oX8=Brs=pgz{N3$1J{x1a-p5$oewl-c z=npddf9C+8f;`YI&4|o8LI|)qXybJ2(8lArIgo5PL0KTT6a(Fe`?S({pB@e<}y6W~HRfW?Io* z*P*o*?(7U*)8MS{aj{Mxx!SUZ=_nr7cwd)Hd~ytVds z&f4ENV?GzvFSa2(`(m?s`C_-*6yuL$O8U6#un%Fnhu#Cg_i+FH=Yak@A|X{R%s)y% zazN^sv9z{z)^>)dRX~&K7*kp&)df@=0xSc>0CAz6uH>6e6{hSBFv&+NYMqg>G6omc z;^}gUkIv5U!Pyxu)@v-5OBic2=e_sncRTEg#CHnez~euwb3atx(9@Xs4PHPsem#-t zdhO>EAoxxfe^$bK5CkenJpcsL`|IC01FF+==UMm|0*3uQ8?$rhyw6pewnb+QF4k*& zaCU}|)@zKz03yOojM#jOS&ykv2{=?;a{IV8%xPgv?5qt-YloG!_iN{#FPr9zWz&4N zZrjh!+V%@;%(F42>x;JC{J$?=?DK7tzw7J${@Ybj-UGn5+t$c4l^3db0;Dg2P`ZP( z0kF2#tlPF}t+h;)RCO0bK8PYuMC1~{+5ihfWGxX{B3Mi`LzAxHD1xDsmHHwzCPio9 zylL=p*Wu^q=lHX$D|~u>j;pdNK@}lJ?8gziGP@qVpE&;K+2#4P+^G>f1Pn)pKQs2} z_nmgyJut=hy&&*uU%&|{oYwu17=z#N8Fj`iJP&~s$Q6NcL?8n8do0Hh>lo1jXsyMg zuEVG2=jgAlz%jxwBklLtmnqA)ZFQx0HO^;-tpH$5S{SomS$n^<_GW4A%cXN)t(^Po zGw1&LvTeV3v|2qsZ`&Kgy!~jk8voD#_#ean^^g7${*S->OZ+eY;2+?B{1^Y?duN*Z zNdrJt3(*1umw@a`PGChukK5KIW zG>*V9U^R{yy+;=#oO8HZEbxnq3*gC<%pl90NAY3=-Xil>SN(<=oiXT)L2C>eW@(Ix z&X}<^X0x>R`P#WJSI&LDa_)FQbJWJ^S{5t@P(uYj|enx~pKR>6BA3c&)*NqD7_TF!I;~0hzD5hjcl?;*E zye}+~bIjz*DDHf8c!&}A-oqewrfpTRY8pIRukq>Q$N1Z&-S^4W6;^EvgFNd$jwANo z=e?Buz?@^ilNI{ZIH(xDo{*GGbX&j?W6*2v<%x{f_sui)Hg_MVhJL~cP={w^267Jp z!n_m;$U#s z7r)S-fAUG5I(=Xm9Ovb?cFdmV~hr>Vu-vY@{W0JnLEeaIAe? zh5CzQgbx8BMo3CIOTS#g83S%xjBSgrRq())-w`t7~gz zWo_(?85?5;$Go-7w~aB+7RG$Ow)V3N=RUh?+po`?=2dIVy;0pgVIKa|F1y0-+cP1;_v=l z!LNQ5@yREEh`xI90vx09!{8(Y<5Uw=d&9hO#yoY#JaWtz&f1kTW?_jM0`jP5QHyP? z%}GGjJW04(;e*GI@#K?FaQV0X7S>l+=&a4Wb(>8tF@}Ip0U#wGFv|7hLLyQp{TwqE%(S#N zt(+T|)($Q6#xma-qH894VTrz85PjAWeZDs4*&}OTJ!#wfwK4rd)&H00=L!GppGghP z{tF_w5OCQv_`h#&-xafZcL3ni$B*&R zk00amlTWbvvp++7c?laM<^NaZ@#J&9ylF%iHR z@Yxyo@-o-!FD`K9JwABx0-t>SHL%&>UL;T9%mAP<25qL0(`C-`_no!(jWO4pyZgRU zk*^r|x>fzU6?xu?yjrVnu2lCIM4@38IH&mM|D1GoaW0w$m(JnLzB|RWcjhnsuRi@0 zOKb6QS(SIc{x#y`$CQ{McX#Bx$HjgR7?WOXHX-(X@5WIVA$X(O8*4Yt+TJ#ex7J2u zOti+RF@~AQP!=B{l+vK8;=E}fg@|IgT;kEi1=f!rqxs+in2QV0FaRL{&Q0}eG6rOA z-U~;ep18X@Q`VU@^)TbjFGeu$KAgOOD!x$w<%la_Mi4>|cm&_p2heWo>1&kUT72%pRfkTGCmz}Dt#TeKg^InZhazPf^0EV3%pt5~+%1jSu8i3) zi9#cik}>*q-_y_j<-b(?tA9n~Kao0_czy9^F z^UcyUAb?mE#(QA15in!f_u*=(xDmd4z!tbMg~?)k!)uUYkTCHg#ye2Exewj%czs{PNH$6qk}Pnn|y^xiqeIO64I zL)7=0yvJ9+{`GXto-7vcJ%I0fqrQJ_1*#hpsbL0&fxs;1-s6LDOl=5yAEWM=F*0*9 z#t1VBvj{MX>X2gGN0FTuxf((^+sC*ZLs+C3o8-ME5pJx_>ZLKl^gU>^$p8T4oA2TR zt@l`uBd!YB=gt_!-45h^27{6))Y(KI&tm-w1XKKf+IWLw&NO;}BJ53rL*Hu>@Fa0L zc{C>_z0+jiQ4T;AX`UOXp+fZtm|=?Sd)G9us}+`y9^vX|Kg0Ti570h&0()@*)3&+K zqVHk0TiE>`ZH(xM&>4f?T6hskL=u6(z(}fl0=BGrYk*e{c-|2`Uot;yh`xsE*Glx# z0C!7~{*mhVQHsd-_R8yns_ac2%H4#v+>c^CJF{SO8()|$Q-8O_LH{L(F_x{m7gbRqE z5up`8#u!FQK;J{JuaTZTLrMvDxde=XIX}mO25r+X)+prRU za&hD9Bw{TW(gQ2+QA5vZ5BzqTgT%ujCvADd%>giKleEc!aKl%vm2Oq$kp99Q5-$VKy^5O;b`a1Iks7@o* zq$&WSs*XwZJ_0u}rRxa1lo+3pwa*&W=WC*u9nrO6zEPr0L$qHL`3vTBPNXcN@IFhN z&*nyIr|1uzSmT`sfZdm09s@v(NHJztv1t&OOQhuz&0+x#R z{21o!4C)+swL*7!3F><^VeYUyh<a(EwEE0W< z5Wa4#eQ}|Bd&#`9z&;U;4Rcsnn>uEJwR%s4od|;W==Xb!!+=oOos6})((oPt{&<@| zDXoa=L32JO`|1@FGmYN!!h1BsKz6mtf*z%Muv{)-&dxJ!6#%vt zwrvr{5vi21G{!6hQs}{W<`qoIz!M_MhZuogGyW3|zTevmI2}TI({uA*Id4%uHT+uk zEZvYe(Ki$#2s5Y{kuCCWi`5G2vooAsUSf5Aj&`-m0xKdI_IspZK18FE|r+e9b96GtAGLl%AifzWRh{^D*<@850KP zXpKphIT5o6vkIV5By&6Ty@t(Zl9jW-_s%r^9so|Z(~-&=KUM=tF(Rgv6LUF}uVuhP z8$d}!7BNO4(v*_kjw3C+hw~oBd*KighY&eN&#HSi<{r$KDW&rvg!N_^mbkxP465zT zIJ(vSJ#{xXyu7@`Vzt7;IdmzZ9R?U8bjuD*fL$!mUR=NrLk0lvk%}v+rCk^yKtq6* zCKoMI;Z;0iGVE_d{`ofEfwuv{8yJV@&pp)t|JvhOLl0HPpR%(tIe}VsIF~CZO#^lg zrfp%H2Ci+NboBR7^*LAd7F6nHwqVwevXNv_c+7{%BafVAIFd+htXqKzY>_nDKhxR-+5j;wD00X)DL_>i*A zgDd^F1d5~3w4xgj`%1 zqmCh9KMdG}fV*+TP2c0ic8eFA4X(Fa-SmAN_xm9ZL!ZWRBO%;FH;UTnAe z)x0A8+$Uapy6u9>fwM0XwY{fc>eX3Xxwx&4)M z!4j@jR)G~B5U_ac6)8iyEz2fSAeA;*=zAzBCK zHd))Grm?bKTZ|(^gazPHl@{-sn+9eWV8?M{Evm`R z+5z`aNPwB3=ursphvop@@Z3DUe@GJmGnb!@fhj!`*10U$+O}xg7R_P-w^+a}m$1tv zOxJ-fNk(@EhnmH{}5<{dUl33M~$X-=@h-@|Uy`M#*)!zG#Luf^05rAe7xVsqLYPU0s zt}~0p0!`CoeL`lmz=3>(2;8=?#-Qyw#2C?)ftOeeKNVG6sUUE&W5#fFbesvK&J&9I zrYgaFMgcftCz?}vRRcdd7LR4Vv$ZfK=6`56)=pxd8Y8?2{4ijziasUmW5mvT^us{A z{a*UrF6}p)xWBs#yUoUL`rdEHar7Y!l2T71TLauR%(tB}*DK)Woap+J`TB`5H$Ss> z^VpdF%$Q+i%y?$4@2ri6ITDdj*85P+pHt`TO<-0QQAtV3+6)4KrV}spJplX>x7F!F zmUpe|P-z!ca*kkaZB9`TQT|>jg8`93B)?r%Nkoh>)Dk5o3YM9yF_~Z@CA2A}Ez#H$ z?M9J}C%TQmg{q!I^-NUH`jpmT99R8zySz=QTlD>+Yul!48d^GMmd;_-G+4Q;QLt(p zTIbLdBXLcW-Tc}dqnZUWO7DA$5fWog5*98)t;hLm1r#Qrn3o&tappPbyluFE0G%=u z&sv_APU4m=hBT5l#0(Nnk2+{z9wqPi#&pL9A6ZX5QVX?{XgCodJOJ2cDag zUI;VPnB03`jVZfms;W6u&Y(cG|2*Zv8x;{HX0gnvQw>zyy+ulT5o6qm413jnRNaoM zcO!5gZH!x6YtGu1FBS_LmrI1z3ajN3 zi>^bnT*A%duT2SGrinX|Y|PcrL&z0`5Hc9d_Zlw5I01oF5I6yV)8775Qqn1NU)=d= zRjocO-0wB+b~@~Ky4`N|X1kT^%|@?xJGmZ)^eTk-Dy48IGLEWy1MHT}8ztHh z^Ib!9w<5YdGv@A$=>FW8&80EhD`R$-#_ZSD4ohptg)x3%OthKXKZ&YPUi}XXc^>Pl z_epMHs2A#xJAx5`RaN&6ulnyK0K9D@02~5zzei%$loDx~07G{1fGi@asENV+1xtB9 zQC55bXP+=NL|OHhSqEkvRAp3+dy&|Qcnf&V14JWK_f~ZmfQ^Wp0azJe$-q*8g-@yN zMOvu3plY`ww(;JYVX)ly#w-@bHVr%HxN#1RG1J&;QwT*I5lo#EsFjUU-7wZ>ub~od zOe_5KaZ4@$C_d2}E+oB{1EAUSN0jBWXNea()pCS7(%xNT8gp7e&5Pw(};6Ut##H~+hl$^ zUKXCZm9opemBx|AR*WRaJ>mQwWL>V1@x0N7!-v(HPE;<8!DYc@H0g4%Sj^TQyxrZn=bQ z8mP63k{8I7}%0orAF!#<`Mcs|mY9IkW--eaq$_og02hCQb>)vKppRqO2@P zp>QG&-lO*(8}D)LJzj=@>lpPuM%{`?FOs}S6xCn>->Qx+Ff^)z71>+W-VpVzF@0yu z&Jb-auyaKHg1KK7VCb0l%e)UuV}{O{u`|Xu%&{>hFmn{51R@bYDaZNKj`H)tH^SU) zQi!OO=B?28Nc+9oaRkSxjp{qw`S+s)07XtPB>*u-jpIlF)YjN^p7}0$fHIPs0pO4Y z&SUBTl|&D5`TbT^!7M70qDbmQ(uz3^BEgG{L3I$INkHpW+g@b3OKG`DX}e2l9aUE; z1Hx)hT@9+;UbXYUBC58As96BcGrPoWk}*cCC3TL(ISNffL)%iDYw6^ghDygAnVg6t zb{1?Mku9VoYzQW+AQX?Fq`X1;0EiNimiYpu0|01A-l^tlgQilANFiwS9x(*<rM^+eP+%)3Qi?YB#! z-I95?%EmvG^T!4A*fEc7X7Ke5bFj>jnIkc$Qrb(%6!CfJ@bFy=%?-YEi_k3ouU>(K zplQF?cz+L+Uo;=qdJh19%B_B3*`5z0wW?}GsH*K!p@gadG1cCHe51>ec0Cahk<40b z56stqDzm!WN1zR}ED9h*Ac(3wv}(IWW7FlJzN>J|)%|%@`v$F|rMT%{VeU$Lt)DwM^C$S;H`vU=6_-LN?X^=$OY&bzCwJ9rM1+t9!p>?pMtHnz=tSraxoeuk&g@E{J?f zQRY~;(aQ{PdNk>R7@mNVpbTVVAcwPJdQB=e$kqgo!x)6 zp86gD{v^hKm{L;$-~j5%&CSNZG!3|Im7L2iZ7HYCX7XzxT$Q<&fJA2ru(|gzPl}n^ z9R|PhO^j(~}(lvF7_004#v4iG~m z1`wl~2oTOdP>)I?LLv$En35o+q&c>al2QsOMK2OnH7|0tujIbV z05EnH2#gt4#kF5C4=d(z$vn11p&<&6D7xIU5iN5x#zZ1YL{#Yo>QM?9RD+(5r7Zx4 z11-56rZXhhk|=s(LQLnpb`=nq)u;+*07xcl6-L7x8j*3yJf0il29ez$(hef+sM>mw zHsq>66IGj}+DP8p1hgfbXr!EzVstSjn?i7r$VQ;Mv~z9sUDyrTP-d0a4$_3^aI69vZ{ED#M*G(cja2%;oq)fb{fIhmW2e0g=x zkBJ1e^p{`Pc?dwYGz_R3qqyl zNqJ`hjLeQv)kIYrG6>{zR7vZ{1Jvg7XL3NY1qAr`C|p3n5T#;}`IsLE14Nrw>Coo= z$jBFSgP)(n92#cdDZ(~;W~&tST7r~pR+5Yc?|C8!!zO~M?bNDR!ui@1>KsccfUNyLV1 z$Zk+|qpBN3+#uriL~amqBat0NoXf^<9bi3RT`}g6joZXx*aZMsR4WK@0(d$X;OYU? z$pFp(AdX0E1^_9BKR=2gnn1u7kH->az#xjY>$x!>;ZMT&-4?K+6)3(j9)k#yOyIA5Kuk1Ozp)cZl_~u~*k$ z%TPsW^id+wlIYVs@S_0K99n_1rr>Uu6M%&Tmb1dpkE8DQ69E9|FenWJ8EZj{h0=0K zvRtaPZEjgDGXs^S7BLEkz{nGILIA^=bBt*&GRiVPmrqYz^ZlWG)I zwyH){Spg%eyqK-tNtL5WHta*p&c$`FD?Ev6{h6xKmzDjntJ3s(ems=|XGuVWz> zrP-0{^QD85bHU_roP$LMgbWHbshC5B$%~i)Oe*i0j%8I(T2}O#K_6oLS+Y;(a)UJ- zsNH?4LMf>NQZxMGoWR;#9I4%Zs>(4cd9SqJgZp01eh-RK_1m&6y$66l-u93ScJvz0 z3N)&jy1Sgl#!!6vRM9kq#R6)K!kFw0)b2ncXiCDWL?TT2CZg&e79gleBcA_Fg`;06 zhY`7omaA%+!asWhToQ$>I#t^0xpaCghRY~z=vv}+tulcCW8TgHlqr^j;g>&g@^VkE z+k=;s=3dlsU;JUOO*QipS^xdI1d77%r_L#y%ZWc#MM_GUQxY5k`2Jq)ix;4jjpc(?m7$Rn^Awl5@$nCV*Vg#yGB!Wa$NwWt)v$CU}97*T;7XZ^t z&5N>u=0!GJRyE+mIr;g6*iZid2nP?9r`P7^R6{>lY!TekLmsmdi&iXq$ZIzA2VIcL7M{D34=a`RB%80pK0w{{LwJz&C6Z0yv9{C{luS-89xJ zL`o^qwB=P8swyf{8);AsZW8F7gFqq7)=~|al)Q495eH9TZpak~s?pDX&ST3*#(uh= zJdX)L>f~but)my;yjsoa$E)|Gc|}KAE$85e$>0y3!t1KvGjNy#=KNeecnC)TK&qm- zJ8}AX1_C-Weyt(G)ZecvnAQ3xZ-hwM7*%VPRS!nr_uyer&Tjut#Vme0000r?+gqaD z4p=T#E-xuHjdIZus3exfII{aMQheHy5Ih)OH3Y`IGqezplpA&q0$JxXuXYa^{X7Ji z-2B*Irqf)50|8@^s~vIDSV-Cc}+{+ zqyEQJ2ryge568o}_1yU7=)4mz;KYdaD0DhL_cg)c5)K@_PSy3Fvn7fs=kcz?q+d<; z)!dM(nh;<%8@11$Pj3HI@||C?A4$yrqXB?#+`cI%(D!7AK`{(S)e~kZsD^$}2AUi9(Yb|&O{VwEas+f70vwf7k%w_=%zwx+%#FXS@^jFrVS&!e zv1LzMwv?3X?1#0=O``@ur{el+2!T@HYaE8mC}b^Z z^&$$NT}db%5^p&)P(7^5Tw>yBwMOL^$mKplO)wr-{>iXW5`^>y_y54iad@uO@vCva zrWK-eGz3hqJ;2<`55_;8r~0};@Z==Wu~(qwQXGc_6)5IYcLxTZ)9~Ry$#w7$PNw!M z2+)lE2RQ4V=CABHRIj2Sy#qIyexcu({VE*Cn@73&f6ab`@RK}5f zj2fAN!cSk6dh@KP2$hDRYbCGLo)6V;3;E_vljJ(XMys2QQ!Zz1mFn}=&a}AsPA=33RdGk;EwU!0($A;N1?`?WQ?`D1rp&2*5KF6RBM+VDnfkmEWUCi8LjxaXW}ev+>i+%PsIe$B!FdV@sZ>~+ilugBT@ONN9G0HAv8QOqg3vRYDQ?onhC)SQA)RVK=-e@cknYZN)k z%$^SRoZJ&Xne8VX0z7of$9$6zi@?RG&U>Mng3O55~{f7Db^6z8TBKo45l8UNI7FbmffkS|4 z8Z|_q%>SUFXe`Db4UyM-0Qml`ABS|a19ZiVwfE!-OKcROF$4`MAu$s#m+BUaEPRo* z>{L@C6;a8Co+l6I0KiOTrOC#hSF0&wh}k)M2pfQ^Wl(=UP6Qr~6$I*InoEBC0hW)0 zgI=GbLpgAE+96L+#aMA5U#-BPWzOPw^)E0uCGhglR!tP<|1ZA>T#TQL(cHnCG^uI` z0n+y{B6)PzIoKlZ8M3zGMCCQFPrl!N!~pP(If0YcUI6$rX8Z!c??mwPVE~PzqJ##$ zhz60&|ukBbwBFNhFJt0F`TiG>@Cka|N37);Y&el3!D(KnFpS{BdT6 zug9u<)5j&$E?raw+lQ(H-}?H^S9m(82+hNRBcZW}nuVs7yMo6drpFY|SH|W82vljV z>3x)YF_eiw)@A?*K}8jQ95w8Aa3XMkHUO4IyaRwfR>fxkeo^v3e=UMvoZcfpk(mD{ z0|3A8_7uRi2nGPRMEJ#Q@{a*(3Qz<NPgK5BD}qJ&uHSEY`~Lw5E@<*K5^7Qa O0000|*FYu~aIuz5>iG{dTLGD}2mV??F^HeMmn^;9G|y{{t~T$Zj2w?HS|fJ|fSztN(v zcxvA)sP}v%4@GV^`Qc literal 0 HcmV?d00001 diff --git a/icons/layer-cities.png b/icons/layer-cities.png new file mode 100644 index 0000000000000000000000000000000000000000..0bf6d6f20591a9b00fa8b3f3c8b17a58b77cbbbc GIT binary patch literal 341 zcmV-b0jmCqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0P0CZK~z{r#gJ9H2_2-EayxCz#Cz`-W&j|qn=n-0MN$0Ps$wtB#BoJ nLII$bMdTnH04R;hQ%dOv)9+qC{h91K00000NkvXXu0mjfLaKwd literal 0 HcmV?d00001 diff --git a/icons/layer-coastlines-low.png b/icons/layer-coastlines-low.png new file mode 100644 index 0000000000000000000000000000000000000000..ec7dec3aed47c4695132444b07c75802829bedec GIT binary patch literal 341 zcmV-b0jmCqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0P0CZK~z{r?Uun3 z!XOMp!T9M2(LQi7UnW4Z;dzpDu2Qm_Ryf>HLf{X;_$hKH>LuY`MXvcUG;X|0| z1h6E+0$?Ozh4r4N|CCA*Z@M=|-h~C2V2xg_o)Z$VibT*g1k^GGR)qFIU0v@-K!R6> ndVBPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0X<1XK~z{r#g>T< zgD?z3>Hhzp8J6%Ayj&I6lcGV%;iLs^tQ*UVJSJd_v0oke?7xqKo@tK>;GlKjmkYqC zX&r8v0LR-AF(truN9&OJw%!68Y~8W0;p)r#s7!kTNZ=*W&eSi8Bd5*)6RQZl&nN{T zS=IsYo>ws>70@XTypFq5XiXsFO!puZ(Ct7$+)Qjb0d$ge6BVoCETI4-=yWnu%%eO5 z6`Vpejf(V3h=gal>rj4*wX3TIm0N&%b5C4$Yfp!o<-{x_4!Qz zj+I){^#dqK0~&kS0yxouf@r|1=NhrG5jLK*4k552XkNiegmMsIgRNS7ZBY^Qn-Sqo z0104GVL%@x6XC9H0V^L=1(g|p_+m|C;I*yAiLStk`4ez^^@8#(xSN*+EXx<%f7>|M SH!M#80000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0Tf9@K~z{r&6JA{ zgD?n1+x`DPJFk(9HN0-MZYNoc6UqUMy|uRO?3cCl-cjhh`|vuiKjRR9o&27r>-lE_ zS61b%;7hDcKnMnHls(_#i0mRFHQSNO5no40|$#;N} z{f`e(#JJnLaRpGA+2t&zfG)hUI4}jI=<4wUcLlQ&vbyTz!k2J%{7habAgo+PDloGO zCbl#I26kPi=KSfwjn81cBz@(zJCD3BPt z)iD+Mk^mSF(}lwVdtCUuRQ;q{RFh4C{tn&@i d0NB%O?G4T~ycQnL;t>D<002ovPDHLkV1hSMp$Gr~ literal 0 HcmV?d00001 diff --git a/icons/layer-sailable.png b/icons/layer-sailable.png new file mode 100644 index 0000000000000000000000000000000000000000..d80f52e72d4a6e32c7e0326a00981e0569a80721 GIT binary patch literal 300 zcmV+{0n`48P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0KrK_K~z{r)s|Tf zfFKM7!TaA?g;-+<%WLTpCo%qroj!^&pEoIxDguN=0utc7m@A>00Kt)13P|@BU1yR2hpB+HdjeT+p1?}NWea8!LxJ7+QQU@b z)KFId?Vg)b?|HWbMz{;KDTF8Rzkfn)TodS>f-1m0PMXv$h#G@Z_niSxiBgN|4QIe= yTiSBa5bny%N{CJYDule+^%(XD{}2TWq;vt!**H~$w(g?<0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0K!Q`K~z{r?NwOv_Wyp5bL_z}4)z#+dvEmrX0aO4A zNqM>jbaNRN;4(x|o2SS0aYzypDTf9upmwo@b^ZvhPcoU5USfvJ0wx_LCxqlc3%`JO z3g9X@qeXWMC|)LmBK{oc7NDEYXfyiy-*HL{x0qll00%a;00000NkvXXu0mjf!nJFQ literal 0 HcmV?d00001 diff --git a/icons/load.png b/icons/load.png new file mode 100644 index 0000000000000000000000000000000000000000..eabbeadd10fc880281b1cfe7faf5a05045be729a GIT binary patch literal 3126 zcmeH^u?c`M6a}BX16W!*fdkmP|2PqhNC>BxXG9AR(p<=WKAGmR)ygPokkoIdQ5P?^ z`;_qW0n#6-Lbg+tX38u5Y^X=vB72L{15+qHFon_sQz$(!h0+64C_ONR(gRZ{JurpR z15+qHFon_sQz$(!h0+64C_OM0<#kR*SLsWKBd}k@z9zo9-w)wzM3sIz0>RZv!E&TD H_45!5l-P@j literal 0 HcmV?d00001 diff --git a/icons/undo.bmp b/icons/undo.bmp index 88bcfd0f13473ec1cea8e18a83c49971c2dae045..da363ef984e1bd5f513a890811a7063fb734a469 100644 GIT binary patch literal 3126 zcmeIyK@NgI429w6-UGOF=?ORhd+&doA+e-s+Ri{*NLFhb`b>veKt# z?NTY-=LcoY;xWZevh$OJL+6^J;%O>N(ltx`#c(aX^>{E~Kj~G5CBfS6MA0@(_{x z_PNMS2iu&r(`ogie+AbXm4`P~nSDoOZJB+isI1ed908`2Aydb-tlkV<3z$xUT9{G` zsAZUrz+xE2l!ZxeWQ8-}s~BR6N1h3b^zvVY)%c1@`m2V_R_FdmhCLyyKp0cVbnXBg xRv2acia#jK_*jP5Tl@Ihk+p@mCk)gba0EY2{lXdjA=z|_1CG$QnsVF!^#;OvcAfwL diff --git a/lib/mkdir.lua b/lib/mkdir.lua index 5fb88cf..ece0072 100644 --- a/lib/mkdir.lua +++ b/lib/mkdir.lua @@ -17,14 +17,7 @@ local exists, mkdir, PATH_SEPARATOR if ffi.os == "Windows" then ffi.cdef[[ bool CreateDirectoryA(const char *path, void *lpSecurityAttributes); - int _access(const char *path, int mode); ]] - function exists(path) - assert(type(path) == "string", "path isn't a string") - local result = C._access(path, 0) -- Check existence - return result == 0 - end - function mkdir(path, _) assert(type(path) == "string", "path isn't a string") if not C.CreateDirectoryA(path, nil) then @@ -36,13 +29,7 @@ if ffi.os == "Windows" then elseif ffi.os == "Linux" or ffi.os == "OSX" then ffi.cdef[[ int mkdir(const char *path, int mode); - int access(const char *path, int amode); ]] - function exists(path) - assert(type(path) == "string", "path isn't a string") - local result = C.access(path, 0) -- Check existence - return result == 0 - end function mkdir(path, mode) assert(type(path) == "string", "path isn't a string") local mode = tonumber(mode or "755", 8) @@ -94,6 +81,18 @@ local function mkdirs(path) end end +--- Check if a file or directory exists in this path +function exists(file) + local ok, err, code = os.rename(file, file) + if not ok then + if code == 13 then + -- Permission denied, but it exists + return true + end + end + return ok, err +end + return { exists = exists, join = join, diff --git a/main.lua b/main.lua index 97ba21d..4d5ccb0 100644 --- a/main.lua +++ b/main.lua @@ -1,9 +1,9 @@ local love = assert( love, "This tool requires LOVE: love2d.org" ) --assert( require('mobdebug') ).start() --remote debugger -local map = require 'map' -local button = require 'button' -require 'mainmenu' -local Camera = require 'camera' +local map = require 'map.map' +local button = require 'ui.button' +local mainmenu = require 'ui.mainmenu' +local Camera = require 'ui.camera' function love.load() love.filesystem.setIdentity( "dcearth", false ) @@ -44,29 +44,7 @@ function love.draw() map.draw() love.graphics.pop() - --Status bar. - local x, y = love.mouse.getPosition() - local wx, wy = Camera.GetWorldCoordinate( x, y ) - local bx, by = Camera.GetBitmapCoordinate( x, y ) - local h = love.graphics.getHeight() - 60 - love.graphics.setColor( 0, 0, 0, 0.9 ) - love.graphics.rectangle( "fill", 0, 0, 250, love.graphics.getHeight() ) - love.graphics.setColor( 1, 1, 1, 1 ) - love.graphics.print(([[ - SCREEN %-12d %-12d - WORLD %-12.2f%-12.2f - BITMAP %-12d %-12d - %s]]):format(x, y, wx, wy, bx, by, map.editLayer and map.editLayer.filename or ""), 0, 0) - - if map.selected then love.graphics.print( map.selected:formatDisplayInfo(), 0, 80 ) end - if map.selectionLocked then end - - - love.graphics.rectangle( "line", 0, 0 , 250, 218 ) - love.graphics.rectangle( "line", 0, 218, 250, love.graphics.getHeight() ) - - love.graphics.setColor( 1, 1, 1, 0.6 ) - button:draw() + mainmenu.draw() end function love.resize(w, h) @@ -80,8 +58,7 @@ end function love.mousepressed( x, y, mouseButton, istouch, presses ) local wx, wy = Camera.GetWorldCoordinate( x, y ) - if button.selected and button.selected:contains( x, y ) then - print( ("MOUSE\tx %f\ty %f\twx %f\twy %f"):format(x, y, wx, wy) ) + if button.selected and button.selected:contains( x, y ) then button.callback( button.selected ) return button.selected:callback() end @@ -101,10 +78,10 @@ end function love.keypressed(key, code, isRepeat) - if code == "left" then return button.selectPrev() end - if code == "right" then return button.selectNext() end - if code == "down" then return button.selectNextInGroup() end - if code == "up" then return button.selectPrevInGroup() end + if code == "up" then return button.selectPrev() end + if code == "down" then return button.selectNext() end + if code == "right" then return button.selectNextInGroup() end + if code == "left" then return button.selectPrevInGroup() end if code == "return" then return button.selected:callback() end if key == "c" then diff --git a/mainmenu.lua b/mainmenu.lua deleted file mode 100644 index 98ff029..0000000 --- a/mainmenu.lua +++ /dev/null @@ -1,142 +0,0 @@ - -local love = assert( love ) -local button = require 'button' -local savemodal = require 'savemodal' -local map = require 'map' - -button.new{ name = "SAVE", y = 222, callback = savemodal.start, icon = love.graphics.newImage( "icons/save.png" )} -button.new{ name = "UNDO", y = 250, callback = map.undo, icon = love.graphics.newImage( "icons/undo.bmp" ) } - -local tools -local layerButtons = {} -local function back( self ) - for k, button in pairs( tools ) do button.visible = false end - for k, button in pairs( layerButtons ) do button.visible = true end - self.visible = false - map.editLayer = false -end - -local backButton = button.new{ - name = "UP", - visible = false, - y = 250 + button.h + 4, - icon = love.graphics.newImage( "icons/up.bmp" ), - callback = back, -} - -local function toolCallback( self ) - local f = (map.layers[self.layer])[self.name] - if f then return f(self) end -end - -tools = { - button.new{ name = "SELECT"}, - button.new{ name = "ERASE",}, - button.new{ name = "MOVE", }, - button.new{ name = "ADD", }, - button.new{ name = "EDIT", }, - button.new{ name = "DRAW", }, -} -for i, v in ipairs( tools ) do - v.callback = toolCallback - v.y = 250 + (v.h + 4) * ( i + 1 ) - v.visible = false -end - -local layers = { - { name = "AF", layer = "africa" }, - { name = "EU", layer = "europe" }, - { name = "NA", layer = "northamerica" }, - { name = "SA", layer = "southamerica" }, - { name = "AS", layer = "southasia" }, - { name = "RU", layer = "russia" }, - { name = "PATH", layer = "travelnodes" }, - { name = "AI", layer = "ainodes" }, - { name = "CITY", layer = "cities" }, - { name = "COAST", layer = "coastlines" }, - { name = "LOW", layer = "coastlinesLow"}, - { name = "INT", layer = "international"}, - { name = "SAIL", layer = "sailable" }, -} - -local showButtons = {} -local visibilityIcon = love.graphics.newImage( "icons/eye.bmp" ) -local function updateVisibilityIcons() - for i = 1, #showButtons do - showButtons[i].icon = map.layers[ showButtons[i].layer ].visible and visibilityIcon - end -end - -local function toggleVisibleLayer( self ) - if not (self and self.layer) then return end - local ml = map.layers[ self.layer ] - ml.visible = not( ml.visible ) - return updateVisibilityIcons() -end - -local soloIcon = false--love.graphics.newImage( "icons/eye.bmp" ) -local function soloVisibleLayer( self ) - for k, layer in pairs( map.layers ) do - print( "invisible layer, map:", k, layer) - layer.visible = false - end - map.layers[ self.layer ].visible = true - return updateVisibilityIcons() -end - -local function editLayer( self ) - map.editLayer = map.layers[ self.layer ] - map.editLayer.visible = true - for k, button in pairs( layerButtons ) do button.visible = false end - for k, button in pairs( tools ) do - button.visible = true - button.layer = self.layer - end - backButton.visible = true - print( "EDITING LAYER", self.layer ) - return updateVisibilityIcons() -end - -local function copy( i, target ) - for k, v in pairs( layers[i] ) do - target[k] = target[k] or v - end - return target -end - - -local y = 250 -local soloButtons = {} -local editButtons = {} -for i = 1, #layers do - editButtons[i] = button.new( copy( i, { - x = 8, - y = y + (button.h + 4) * i, - w = 112, - callback = editLayer, - group = "edit", - })) - layerButtons[ 3 * i - 2 ] = editButtons[i] - - showButtons[i] = button.new( copy( i, { - x = 128, - y = y + (button.h + 4) * i, - w = 24, - name = "", - callback = toggleVisibleLayer, - icon = visibilityIcon, - group = "show", - })) - layerButtons[ 3 * i - 1 ] = showButtons[i] - - soloButtons[i] = button.new( copy( i, { - x = 160, - y = y + (button.h + 4) * i, - w = 24, - name = "S", - callback = soloVisibleLayer, - icon = soloIcon, - group = "solo", - })) - layerButtons[ 3 * i ] = soloButtons[i] -end \ No newline at end of file diff --git a/ai.lua b/map/ai.lua similarity index 96% rename from ai.lua rename to map/ai.lua index d35750c..43bb5d2 100644 --- a/ai.lua +++ b/map/ai.lua @@ -1,7 +1,7 @@ --Manage the AI nodes used by DEFCON. -local bmp = require 'bmp' +local bmp = require 'map.bmp' local lg = assert( love.graphics ) -local locationQuery = require 'locationQuery' +local locationQuery = require 'map.locationQuery' local t = setmetatable( {}, {__index = locationQuery } ) local print = print diff --git a/bmp.lua b/map/bmp.lua similarity index 100% rename from bmp.lua rename to map/bmp.lua diff --git a/cities.lua b/map/cities.lua similarity index 98% rename from cities.lua rename to map/cities.lua index cbda997..cb7b569 100644 --- a/cities.lua +++ b/map/cities.lua @@ -6,7 +6,7 @@ local table = table local tonumber = tonumber local lfs = love.filesystem local lg = love.graphics -local locationQuery = require 'locationQuery' +local locationQuery = require 'map.locationQuery' local cities local points = {} local caps = {} diff --git a/lines.lua b/map/lines.lua similarity index 88% rename from lines.lua rename to map/lines.lua index 551d25c..39d22e5 100644 --- a/lines.lua +++ b/map/lines.lua @@ -87,11 +87,14 @@ function t.selectNearest( lines, wx, wy ) end function t.save( lines ) - local str = { "b" } + local str = { "b" } --initial B for i, poly in ipairs( lines ) do str[i + 1] = table.concat( poly, " " ) end - str = table.concat( str, "\nb\n" ):gsub("(%S+) (%S+) ", "%1 %2\n") + --concatenate into one big string, one line per polygon + --then put each pair of numbers on their own line (without concatenating) + --we use CRLF line breaks here because that's what's in the original game files + str = table.concat( str, "\13\nb\13\n" ):gsub("(%S+) (%S+) ", "%1 %2\13\n") return str end diff --git a/locationQuery.lua b/map/locationQuery.lua similarity index 100% rename from locationQuery.lua rename to map/locationQuery.lua diff --git a/map.lua b/map/map.lua similarity index 87% rename from map.lua rename to map/map.lua index c727766..4dd42ca 100644 --- a/map.lua +++ b/map/map.lua @@ -2,12 +2,12 @@ local love = assert( love ) local io = io local mkdir = assert( require 'lib.mkdir' ) local lg = love.graphics -local AI = require 'ai' -local Cities = require 'cities' -local Lines = require 'lines' -local Nodes = require 'travelNodes' -local Camera = require 'camera' -local Territory = require 'territory' +local AI = require 'map.ai' +local Cities = require 'map.cities' +local Lines = require 'map.lines' +local Nodes = require 'map.travelNodes' +local Camera = require 'ui.camera' +local Territory = require 'map.territory' --flat list of editable layers for convenience local layers = { @@ -33,7 +33,7 @@ local map = { selected = false, selectionLocked = false, editLayer = false, - + territory = { africa = false, europe = false, @@ -42,7 +42,7 @@ local map = { southamerica = false, southasia = false }, - + background = false, coastlines = false, coastlinesLow = false, @@ -67,7 +67,7 @@ function map.load( path ) end map.loaded = true map.path = path - + --update references for k, v in pairs( layers ) do layers[k] = map[k] or map.territory[k] @@ -75,6 +75,7 @@ function map.load( path ) end function map.draw() + love.graphics.setScissor( 0, 200, love.graphics.getWidth(), love.graphics.getHeight() - 200 ) lg.clear( 0, 0, 0, 1 ) if not map.loaded then return end @@ -192,7 +193,8 @@ end function map.save() --should be cross platform-ish for _, folder in ipairs{ "/data/", "/data/earth/", "/data/graphics/" } do - assert( mkdir.exists( map.path ) ) + --getInfo checks if a directory exists + assert( mkdir.exists( map.path ), map.path ) local path = map.path..folder if not mkdir.exists( path ) then mkdir.mkdir( path ) end end @@ -211,4 +213,17 @@ function map.undo() print( "=== UNDO ===" ) end +function map.setEditLayer( layerName ) + if not layerName then + map.editLayer = nil + for name, layer in pairs( layers ) do layer.visible = true end + else + for name, layer in pairs( layers ) do + layer.visible = false + end + map.editLayer = layers[ layerName ] + if map.editLayer then map.editLayer.visible = true end + end +end + return map diff --git a/territory.lua b/map/territory.lua similarity index 99% rename from territory.lua rename to map/territory.lua index bf0a7cf..58786e6 100644 --- a/territory.lua +++ b/map/territory.lua @@ -1,5 +1,5 @@ local t = {} -local bmp = require 'bmp' +local bmp = require 'map.bmp' local lg = assert( love.graphics ) local colours = { diff --git a/travelNodes.lua b/map/travelNodes.lua similarity index 98% rename from travelNodes.lua rename to map/travelNodes.lua index d4ee511..63d0aaa 100644 --- a/travelNodes.lua +++ b/map/travelNodes.lua @@ -2,8 +2,8 @@ --This is important for a mapping tool because the DEFCON client will not load a map unless --the pathfinding nodes form a connected graph. -local bmp = require 'bmp' -local locationQuery = require 'locationQuery' +local bmp = require 'map.bmp' +local locationQuery = require 'map.locationQuery' local lg = assert( love.graphics ) diff --git a/button.lua b/ui/button.lua similarity index 89% rename from button.lua rename to ui/button.lua index ce766a1..802003c 100644 --- a/button.lua +++ b/ui/button.lua @@ -2,13 +2,13 @@ local lg = love.graphics local t = { name = "", - tooltip = "button", + tooltip = "", icon = false, x = 8, y = 250, w = 176, h = 24, - group = false, + group = "", visible = true, callback = function( self ) return print( "clicked button: ", self.name, self.x, self.y, self.w, self.h, self.visible ) end } @@ -29,13 +29,17 @@ function t.new( b ) return b end +function t.highlight( b ) + lg.rectangle( "fill", b.x, b.y, b.w, b.h ) +end + local drawPassOngoing = false function t.draw( b ) if b == t then drawPassOngoing = not( drawPassOngoing ) if not drawPassOngoing then return end elseif b.visible then - lg.rectangle( "line", b.x, b.y, b.w, b.h, 6 ) + lg.rectangle( "line", b.x, b.y, b.w, b.h ) lg.printf( b.name, b.x + (b.icon and b.h or 0), b.y + 0.5 * ( b.h - lg.getFont():getHeight() ), @@ -49,7 +53,7 @@ function t.draw( b ) b.h / h ) end if t.selected == b then - lg.rectangle( "fill", b.x, b.y, b.w, b.h, 6 ) + b:highlight() end end return t.draw( b.next ) @@ -74,7 +78,9 @@ end function t.selectNextInGroup() --make sure our group is visible, otherwise the loop doesn't end - local group = t.selected and t.selected.visible and t.selected.group + local group = t.selected + group = group and t.selected.visible + group = group and t.selected.group if not group then return t.selectNext() end repeat t.selectNext() until group == t.selected.group end diff --git a/camera.lua b/ui/camera.lua similarity index 91% rename from camera.lua rename to ui/camera.lua index 0fc42fd..68e8edd 100644 --- a/camera.lua +++ b/ui/camera.lua @@ -3,7 +3,7 @@ local tfTerritory = love.math.newTransform() local tfNodes = love.math.newTransform() local lg = assert( love.graphics ) local Camera = { - x = -90, y = 45, + x = 0, y = 70, w = 360, h = 200, zoom = 1, tf = tf, tfTerritory = tfTerritory, tfNodes = tfNodes } @@ -37,7 +37,9 @@ end function Camera.Translate( x, y ) x = x or 0 y = y or 0 - return Camera.Set( math.max(-180, math.min(360, Camera.x + x)), math.min(100, Camera.y + y), Camera.w, Camera.h) + return Camera.Set( + math.max(-360, math.min(360, Camera.x + x)), + math.max(-140, math.min(140, Camera.y + y)), Camera.w, Camera.h) end --In world coordinates: top left corner at x, y, extent of 1/w, 1/h. @@ -48,14 +50,17 @@ function Camera.Set( x, y, w, h ) tf:scale( w / 360, -h / 200 ) tf:translate( 180 - x, -y - 100 ) + tfTerritory:reset() tfTerritory:scale( w / 512, h / 285 ) tfTerritory:translate( -x * 512 / 360, y * 512 / 360 ) + tfNodes:reset() tfNodes:scale( w / 360, -h / 200 ) tfNodes:translate( 180 - x , -y - 100 ) --tfNodes:translate( -x * 800 / 360, y * 400 / 200 ) + end function Camera.Resize( w, h ) diff --git a/ui/loadmodal.lua b/ui/loadmodal.lua new file mode 100644 index 0000000..c1a5c54 --- /dev/null +++ b/ui/loadmodal.lua @@ -0,0 +1,61 @@ +local love = assert( love ) +local modal = require( "ui.modal" ) +local button = require( "ui.button" ) +local map = require( "map.map" ) +local t = {} + +local loadLocation = false +local folder = love.graphics.newImage( "icons/load.png" ) +folder:setFilter( "nearest", "nearest" ) +local loadButton = button.new{ + group = "loadModal", + name = "load", + callback = function() + if not loadLocation then return end + map.load( loadLocation ) + return t:stop() end, + visible = false, + icon = folder, + x = love.graphics.getWidth() / 2 - 300, + y = love.graphics.getHeight() / 2 - 150, + w = 600, + h = 100, +} + +local xIcon = love.graphics.newImage( "icons/x.png" ) +xIcon:setFilter( "nearest", "nearest" ) +local cancelButton = button.new{ + group = "loadModal", + name = "cancel load", + visible = false, + icon = xIcon, + callback = function() return t:stop() end, + x = love.graphics.getWidth() / 2 - 300, + y = love.graphics.getHeight() / 2, + w = 600, + h = 100 + } + +function t.start() + modal.start( t ) + loadLocation = loadLocation or map.path + button.selected = loadButton + loadButton.name = "save to "..loadLocation + button.displayGroup( "loadModal", true ) +end + +function t.draw() + love.graphics.clear( 0,0,0,1 ) + love.graphics.setColor( 0, 0, 1, 0.4 ) + button:draw() +end + +function t.directorydropped( path ) + loadLocation = path + map.path = path + loadButton.name = "load from "..map.path + return love.filesystem.mount( path, "" ) +end + + +return modal.new( t ) \ No newline at end of file diff --git a/ui/mainmenu.lua b/ui/mainmenu.lua new file mode 100644 index 0000000..4658938 --- /dev/null +++ b/ui/mainmenu.lua @@ -0,0 +1,158 @@ + +local love = assert( love ) +local button = require 'ui.button' +local savemodal = require 'ui.savemodal' +local loadmodal = require 'ui.loadmodal' +local Camera = require 'ui.camera' +local map = require 'map.map' + +button.new{ + name = "LOAD", x = 250, y = 0, + w = 28 * 13, + callback = loadmodal.start, + icon = love.graphics.newImage( "icons/load.png" )} +button.new{ + name = "SAVE", x = 250, y = 28, + w = 28 * 13, + callback = savemodal.start, + icon = love.graphics.newImage( "icons/save.png" )} +button.new{ + name = "UNDO", x = 250, y = 2 * 28, + w = 28 * 13, + callback = map.undo, + icon = love.graphics.newImage( "icons/undo.bmp" ) } + + +local layers = { + { name = "AF", layer = "africa" }, + { name = "EU", layer = "europe" }, + { name = "NA", layer = "northamerica" }, + { name = "SA", layer = "southamerica" }, + { name = "AS", layer = "southasia" }, + { name = "RU", layer = "russia" }, + { name = "PATH", layer = "travelnodes" , icon = love.graphics.newImage( "icons/layer-travelnodes.png" )}, + { name = "AI", layer = "ainodes" , icon = love.graphics.newImage( "icons/layer-ainodes.png" )}, + { name = "CITY", layer = "cities" , icon = love.graphics.newImage( "icons/layer-cities.png" )}, + { name = "COAST", layer = "coastlines" , icon = love.graphics.newImage( "icons/layer-coastlines.png" )}, + { name = "LOW", layer = "coastlinesLow", icon = love.graphics.newImage( "icons/layer-coastlines-low.png" )}, + { name = "INT", layer = "international", icon = love.graphics.newImage( "icons/layer-international.png" )}, + { name = "SAIL", layer = "sailable" , icon = love.graphics.newImage( "icons/layer-sailable.png" )}, +} + +local showButtons = {} +local visibilityIcon = love.graphics.newImage( "icons/eye.bmp" ) +local function updateVisibilityIcons() + for i = 1, #showButtons do + showButtons[i].icon = map.layers[ showButtons[i].layer ].visible and visibilityIcon + end +end + +local function toggleVisibleLayer( self ) + if not (self and self.layer) then return end + local ml = map.layers[ self.layer ] + ml.visible = not( ml.visible ) + return updateVisibilityIcons() +end + + +local activeLayerButton +local function back( self ) + self.visible = false + map.setEditLayer() + activeLayerButton = nil + return updateVisibilityIcons() +end + +local backButton = button.new{ + name = "UP", + visible = false, + y = 5 * 28, + x = 250, + icon = love.graphics.newImage( "icons/up.bmp" ), + callback = back, +} + +local function editLayer( self ) + map.setEditLayer( self.layer ) + activeLayerButton = self + backButton.visible = true + return updateVisibilityIcons() +end + +local function copy( i, target ) + for k, v in pairs( layers[i] ) do + target[k] = target[k] or v + end + return target +end + + +local layerButtons = {} +local x = 250 +local soloButtons = {} +local editButtons = {} +for i = 1, #layers do + editButtons[i] = button.new( copy( i, { + y = 3 * 28, + x = x + (button.h + 4) * ( i - 1 ), + w = 24, + callback = editLayer, + group = "edit", + tooltip = "edit "..layers[i].layer + })) + layerButtons[ 2 * i - 2 ] = editButtons[i] + + showButtons[i] = button.new( copy( i, { + y = 4 * 28, + x = x + (button.h + 4) * ( i - 1 ), + w = 24, + name = "", + callback = toggleVisibleLayer, + icon = visibilityIcon, + group = "show", + tooltip = "show "..layers[i].layer + })) + layerButtons[ 2 * i - 1 ] = showButtons[i] + +end + +local t = {} + +function t.draw() + --Status bar. + love.graphics.setScissor( 0, 0, 250, 200 ) + local x, y = love.mouse.getPosition() + local wx, wy = Camera.GetWorldCoordinate( x, y ) + local bx, by = Camera.GetBitmapCoordinate( x, y ) + local h = love.graphics.getHeight() - 60 + love.graphics.setColor( 0, 0, 0, 1 ) + love.graphics.rectangle( "fill", 0, 0, 250, love.graphics.getHeight() ) + love.graphics.setColor( 1, 1, 1, 1 ) + love.graphics.print(([[ + SCREEN %-12d %-12d + WORLD %-12.2f%-12.2f + BITMAP %-12d %-12d + %s + %s]]):format( + x, y, + wx, wy, + bx, by, + button.selected and button.selected.tooltip or "", + map.editLayer and map.editLayer.filename or ""), 0, 0) + + if map.selected then love.graphics.print( map.selected:formatDisplayInfo(), 0, 80 ) end + if map.selectionLocked then end + + love.graphics.setScissor( 0, 0, love.graphics.getWidth(), 200 ) + love.graphics.rectangle( "line", 0, 0 , 250, 200 ) + love.graphics.rectangle( "line", 250, 0, love.graphics.getWidth() - 250, 200 ) + + + love.graphics.setColor( 1, 1, 1, 0.8 ) + button:draw() + + love.graphics.setColor( 1, 0, 0, 0.4 ) + if activeLayerButton then activeLayerButton:highlight() end +end + +return t \ No newline at end of file diff --git a/modal.lua b/ui/modal.lua similarity index 74% rename from modal.lua rename to ui/modal.lua index 4fabd62..5b95d32 100644 --- a/modal.lua +++ b/ui/modal.lua @@ -1,10 +1,12 @@ local love = assert( love ) -local button = require( "button" ) +local button = require( "ui.button" ) local t = {} t.__index = t local i = 0 function t.start( self ) + love.graphics.setScissor( 0, 0, love.graphics.getDimensions() ) + i = i + 1 t[i] = t[i] or {} @@ -34,10 +36,10 @@ function t.stop( self ) --restore menus local b = button - button.selected = button + button.deselect() repeat b = b.next - b.visible = t[i][b] + b.visible = t[i][b] or false --accessing a button's nil field is an error, so make sure that b.visible is a boolean until b == button t[i] = nil diff --git a/savemodal.lua b/ui/savemodal.lua similarity index 92% rename from savemodal.lua rename to ui/savemodal.lua index 999dcb9..cce7052 100644 --- a/savemodal.lua +++ b/ui/savemodal.lua @@ -1,7 +1,7 @@ local love = assert( love ) -local modal = require( "modal" ) -local button = require( "button" ) -local map = require( "map" ) +local modal = require( "ui.modal" ) +local button = require( "ui.button" ) +local map = require( "map.map" ) local t = {} local saveLocation = false diff --git a/textinput.lua b/ui/textinput.lua similarity index 97% rename from textinput.lua rename to ui/textinput.lua index e206d56..3de9e61 100644 --- a/textinput.lua +++ b/ui/textinput.lua @@ -1,6 +1,6 @@ local love = assert( love ) local utf8 = require("utf8") -local modal = require( "modal" ) +local modal = require( "ui.modal" ) local t = modal.new{ } function t.setCurrentModal( fields )