From bbd1e12952bd1dc8da50f85a13855bb072ba0ae4 Mon Sep 17 00:00:00 2001 From: iTNTPiston Date: Thu, 23 Jun 2022 10:47:00 -0700 Subject: [PATCH] tested arrow corruption --- src/App.tsx | 303 +++++++----------- ...00_F1C11A22FAEE3B82F21B330E1B786A39.0.webp | Bin 77478 -> 0 bytes src/assets/img/ZoraArmor.png | Bin 0 -> 33330 bytes src/components/CommandItem.tsx | 2 +- src/components/ItemSlot.tsx | 1 - src/components/TitledList.tsx | 50 +-- src/core/Command.ts | 126 ++++---- src/core/DisplayableInventory.ts | 21 +- src/core/GameData.ts | 39 ++- src/core/Inventory.ts | 4 +- src/core/Item.ts | 9 +- src/core/Parser.ts | 61 ++-- src/core/SimulationState.ts | 247 +++++++------- src/core/Slots.ts | 113 ++----- src/core/VisibleInventory.ts | 166 +++++----- src/data/mergeSort.ts | 22 +- src/surfaces/DisplayPane.tsx | 156 ++++----- src/surfaces/ReferencePage.tsx | 231 ++++++------- 18 files changed, 697 insertions(+), 854 deletions(-) delete mode 100644 src/assets/img/2017022420411100_F1C11A22FAEE3B82F21B330E1B786A39.0.webp create mode 100644 src/assets/img/ZoraArmor.png diff --git a/src/App.tsx b/src/App.tsx index c9eadc0..69618a5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,19 +1,16 @@ import { Command, CommandNothing } from "core/Command"; -import { Inventory } from "core/Inventory"; import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; import "./App.css"; import { CommandItem } from "./components/CommandItem"; import { DisplayPane } from "surfaces/DisplayPane"; -import { Item } from "core/Item"; import { saveAs } from "data/FileSaver"; import { parseCommand } from "core/Parser"; import { ItemList } from "components/ItemList"; import { TitledList } from "components/TitledList"; import { createSimulationState, SimulationState } from "core/SimulationState"; import { ReferencePage } from "surfaces/ReferencePage"; -import { GameData } from "core/GameData"; const getDefaultCommands = (): Command[]=>{ const encoded = localStorage.getItem("HDS.CurrentCommandsText"); @@ -28,10 +25,9 @@ const getDefaultCommands = (): Command[]=>{ parseCommand("Reload"), parseCommand("Save"), parseCommand("Reload"), - ] as Command[];; + ] as Command[]; }; - export const App: React.FC = () => { const [page, setPageInState] = useState("#simulation"); const [overlaySave, setOverlaySave] = useState(false); @@ -120,12 +116,12 @@ export const App: React.FC = () => { height: 40 }}> - +
{ { !!simulationStates[displayIndex].getManualSave() && { - setSelectedSaveName(""); - }} - comment={false} - isSelected={selectedSaveName===""} + onClick={()=>{ + setSelectedSaveName(""); + }} + comment={false} + isSelected={selectedSaveName===""} - > + > Manual Save - + } - { - Object.entries(simulationStates[displayIndex].getNamedSaves()).map(([name, _gamedata])=>( - { - setSelectedSaveName(name); - }} - comment={false} - isSelected={selectedSaveName===name} - > - {name} - - )) - } - + { + Object.entries(simulationStates[displayIndex].getNamedSaves()).map(([name, _gamedata])=> + { + setSelectedSaveName(name); + }} + comment={false} + isSelected={selectedSaveName===name} + > + {name} + + ) + } + } @@ -185,55 +181,55 @@ export const App: React.FC = () => { }}> -
    - { - commands.map((c,i)=> - { - setDisplayIndex(i); - const inputField = document.getElementById("CommandInputField"); - if(inputField){ - inputField.focus(); - } - }} - onContextMenu={(x,y)=>{ - setContextIndex(i); - setContextMenuX(x); - setContextMenuY(y); - setContextMenuShowing(true); - }} - key={i} - isSelected={displayIndex===i} - isContextSelected={contextIndex===i} - comment={c.getDisplayString().startsWith("#")} - > - {c.getDisplayString()} - - ) - } - { - const arrCopy = [...commands]; - arrCopy.push(new CommandNothing()); - setCommands(arrCopy); - }} onContextMenu={()=>{ - const arrCopy = [...commands]; - arrCopy.push(new CommandNothing()); - setCommands(arrCopy); - }}>(new) - { - setContextIndex(-1); - setContextMenuX(x); - setContextMenuY(y); - setContextMenuShowing(true); - }} onContextMenu={(x,y)=>{ - setContextIndex(-1); - setContextMenuX(x); - setContextMenuY(y); - setContextMenuShowing(true); - }}>(options) +
      + { + commands.map((c,i)=> + { + setDisplayIndex(i); + const inputField = document.getElementById("CommandInputField"); + if(inputField){ + inputField.focus(); + } + }} + onContextMenu={(x,y)=>{ + setContextIndex(i); + setContextMenuX(x); + setContextMenuY(y); + setContextMenuShowing(true); + }} + key={i} + isSelected={displayIndex===i} + isContextSelected={contextIndex===i} + comment={c.getDisplayString().startsWith("#")} + > + {c.getDisplayString()} + + ) + } + { + const arrCopy = [...commands]; + arrCopy.push(new CommandNothing()); + setCommands(arrCopy); + }} onContextMenu={()=>{ + const arrCopy = [...commands]; + arrCopy.push(new CommandNothing()); + setCommands(arrCopy); + }}>(new) + { + setContextIndex(-1); + setContextMenuX(x); + setContextMenuY(y); + setContextMenuShowing(true); + }} onContextMenu={(x,y)=>{ + setContextIndex(-1); + setContextMenuX(x); + setContextMenuY(y); + setContextMenuShowing(true); + }}>(options) -
    +
@@ -249,45 +245,51 @@ export const App: React.FC = () => { }}> { page === "#simulation" && <> -
- { - (displayIndex >= 0 && displayIndex < commands.length) ? - +
{ - selectedSaveName === "" && !!simulationStates[displayIndex].getManualSave() && - + displayIndex >= 0 && displayIndex < commands.length ? + + { + (()=>{ + if (selectedSaveName === ""){ + const manualSave = simulationStates[displayIndex].getManualSave(); + if(manualSave){ + return ; + } + }else if(selectedSaveName){ + const namedSaves = simulationStates[displayIndex].getNamedSaves(); + if(selectedSaveName in namedSaves){ + const save = namedSaves[selectedSaveName]; + return ; + } + } + return null; + })() + } + + : + + + } - { - selectedSaveName !== "" && !!simulationStates[displayIndex].getNamedSaves()[selectedSaveName] && - - } - - : - - - - } - - - -
-
- {displayIndex >= 0 && displayIndex < commands.length && +
+
+ {displayIndex >= 0 && displayIndex < commands.length && { }} /> - } -
- + } +
+ } { page === "#reference" && } - - - - {/*
- - -
-
*/} - {/*
- - - -
*/} - - - {/*
*/} - - { contextMenuShowing &&
{ const text = lines.join("\n"); saveAs(text, "dupe.txt"); }}>Export - { - alert(`Available Commands: -Initialize X Item1 Y Item2 Z Item3 ... -Break X Slots - add X broken slots -Save -Reload -Sort Key/Material - sort key items or material -Get/Add/Cook/Pickup X ITEM -Remove/Drop/Sell X ITEM From Slot Y -Remove/Sell/Eat MEAL From Slot X - -Limitations: -Inventory corruption is not implemented yet - -`); - alert(`Available Items: -Slate -Glider -SpiritOrb -SpeedFood -Lotus -SilentPrincess -Honey -Acorn -FaroshScale -FaroshClaw -FaroshHorn -HeartyBass -Beetle -Opal -Diamond -Tail -Spring -Shaft -Core -Wood -Weapon - `); - }}>Reference diff --git a/src/assets/img/2017022420411100_F1C11A22FAEE3B82F21B330E1B786A39.0.webp b/src/assets/img/2017022420411100_F1C11A22FAEE3B82F21B330E1B786A39.0.webp deleted file mode 100644 index 2022f5def40bccf2def4f9d72a0d3bcffc018ca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77478 zcmV(uKDi ziDhnc*E-vWm6a)YFFc}BxaqG`a?tUA;k(`a`}U*Bqtd^%f7bT^@<#t#z_+%4!}byL zgv~+2Jk{9f-f`*w%dh@D`^I;DdhDLP|HS$6#~-xwH}{YDzi|5_|Gn$K_GeDN{=U!u zuX<_zo9O53Py9EdH>ba@&!VrJr>-xfzLw9&e3Jajus_Z}0slX&))oE>!Jq2C$G`9Y z57poQzEJ%|%m4oWP#^H}$>YEHdOrDE_j}8SY~MJ0C4TdI*XV!!ze;aL-~K%}eb?-O zDT_4mn71bx^vQibpY%J`nu0Xh`bMxtyI!>4n~HSL8Ed0Iijvb4ra+J^r}lW{&eZlN zk^Lr~gzTF>06hoHVaepE9HZ6H#~Ap#u#m_O-3Zpj7U=6S_0P1+XY5EblmW5a78y=U{v79X*kIm${q{3j_E4r|7 ztf^&?EfIz{U*!XwITV@8%FBAeELI*KyRse*yBAT9D$CpBtn~lKLhf&qHO?uY)L3AeyVu=Q8`(gdh@7$~-bZZA`?#b0R#m+h25u zc1wGyYaoxNMyj9YmJ0eE{Kr;d~Ev z$}F`7-w&I&#HnR*mLDH(E6N(5&_b!)hT0eQLM}e=KudbOcxa1u@McZrKpNQ*u4dR3 z?Hzl}{;Zit`3K@M*=)^kOD1Vf3Iv$^j@lbUjD68;8zG1-@R)hNQ4CbBiL5QUv0#Kp zz0X=?V`|xaB?U7{368irk$&S{vd&>0>GEN<)u|HEIgJ;;+;D9^5M%SO1j6n-dCN($JA;UtUAlFpov zXco#1+86UJ1NuOYH)yI#`nwnl1I$3gR;jYWJE@^Qc*w%F(H2@qkKW`s-9jfM^P==a z=J+&9FDcWsk1Bdv7fl#sJ0tW+N^o^`^gd@>G+7flMm1mf z>w>;rhZ!6zipK0rGAwd~G7~@y_D&5-g~s z;prPdlL4PoPE6WWGc+|GBs_(9Ar~nymq*KK4jknsZ{Ii4fZ~Q-5#+89auth$rl4q5 zVDT+TS13MwJJma6#}!l!b{%&;ZO$?9W*xNh#UP7W;iyin)-vyUR6bA!sV&`Sa06iE z<_cYjYU`?V#K8>(9$Q~qhFQeVwRfan6qcWV%Jt2H;h&m%6^N0g&JiFY+L?|78m<^wiR7Tn(qwgIdNLPE|2BWFj2<9_{NY zOcWb=P?;L6Rs(dRUH`i*Y&Zpjq+@SQqeV6_F%GcYAAR7?#2v`6hLDZMUG^ytJWW{u(SO<{pO7dO0mUb-sBpXaswHD}V^ zi2in}4ib-8!cYG)5nlRR5kh_JpA5WBYs>MV1RolX;553afWU-k6LG&QZ+p1;HrYT# zOQ)(OslO2p2L({Xp4WeAm%K5p3BsTXu8VFGL*+A$W5n~jT8X5O7MZA7w9jf1(NI^F zOkZi$bd%YytRDQpDg&jn9OIP?k}ktFW1xU+2#={?_3S|tyuJ`uw?XmGxJ(?SSF-cj zwASZMgj>E#oiWWVtn^E*=4K23zpKmZE$2Ncz@MKD{u?X30nNSB`e7>D2=Xqy^(}nH zi@PM%?D*+|^8!$BDu6-0Cr1?faML(zFk~q^zPSYFq#Vm)IL0e4_XF^Wci1{`SQGC3 zHV2eN-)4-VV_~RhikX89q^c#~Bi9LvR0)Stb5KIQ{v{Tdra@IG*}{<;%cy!6$aUAw0(o)kBXkM$Qs*h>7O^Fx;kXF~Mv9SwL= z1cd*b$6C@uw9dH5KJkQh6osM451V?3NGfEOq<#ImfBR;5d_4qR&FzwQlE&xfC~AV_M~Sf`-`aH6QF~JRoz?8byBXO;oIIWc$$1 z@k8m(A7=@$=Ia+w08&wZqXd)DoF@47`>Z3X2e>r|DOg)Gq2mK64<7ywJRXee4q?TJJMM1u4tbtpn(%_PyP(uNuL!=_5Vj#X$DJhWDCl zemr^=a&_YALCBG45~P<+;AyC|NB1B&JBlLVVz1|TqZzAPjxr=qh?0nQY`#jW@o*U^ zd={ifzNZ*y++qq)jQTFwx&a9!Sf4E?1Y2?SHPg6-k%S?Vc*1uw$&2~7a1l>nJQpoW zO&c5@^n&BPnYd_f@)+M2`|Y47FxtEbve8Znk$-X{9s`xa_n)F1nu!kjC~Yr5c9@~c z4?@D6kn!m67KmNA8U5?*Ry!N1qFhnvo$s1<6d z=D3VLew$#e;f17}}@Q@=6Xm_W$$BQ5o(N(cuSCTsWIAnmSh?*l!yn`;^01 z(Q&+deCo?zo+#(tL(|fh+ojaNY<8Yj{{aFG{g}rnL4BLIYEr-b%P;VuBw>bPQA!z` zPHLVN0=%t3reje{M>#Yi!OmkYiSzQyWIgaLoA+P7YX^3*&+}{N)~D1N%}C9j;%D9= zHuL*Akc?e{AZs-E_Q;&` z#rlKN@VGuRG&}ZE($Bb=P+Y6wW*^}sMtFxrDr!VFl~sWMCb!c@hQ~d#%|a#p_6ctTtEAkJLgGC(&Z0`+VJ&S&HQ9Z0J`GuSP5r9uU2=>E z@Bb>h-$RBl2|fJThP|B}qEcQ#Tq}?n&+sp90~dhjCK;K2A!J;%tHopr7+-37P^;(eJ&?FRqv$0hVq} z=R!aLG)={#Z3BbdR8l*UgtMU%g66J;1oq@kd_c`^$)c%MS}f6_0kJ8w#A)i8Rmm2i zBTH2wg4mu@ZU)NpPeA{DmjH4)eA!!Q*U~Kt7v_TxbKtsbK^*)h|@49ewYy!#tb+ z=pJvVJ!2z|xnKJ3*T9IyRLJPiQQpJ=;ZlO_lwht;>sebA^qw&U5uFgDLYAJ&QzH_8 zak_}B|7=De+cYhYeVqh;$lJn=g@KSW!x4KLD9lM;7w}YkF4JYejd-{Ld^P-gVJz*sCF`74 zhbb2l#&mRk1TC?Ev2~w$n>R&Y^^smRk}ZWkbgBRL0^xJBJo6XE70uFPK|9TGxJ?x8 zPO$R5G!fGT^v{SwJiEa$>*}VzH8|6H3P>;S0fQKtw82>#V<+KT&@Adk_ zC~5gaAS}22>WnM8EIFUTTZ&c(_};83KC9g5JOl3lC|tM&SH%)W8*Va*KYKAr8FsLU zhI6Mk59SB%q5ApJ0vn%kOpwWPje5d<{ZU6zUxwB>)bb{Tj!xi#Ye6-Ob9pCNp=~|8 z5RD;~6`{qON85f+txfwn6Zl4ARC=!49c1hQvd|khZeW6)E>BgfARvZmKNEdsUV_OZ zT6u|{J={T9tvxahQK7Sc8T8B2don^Us%G#7Y|ucH#|hzNB$jwcM{$TG)Sn)ZT>O0Q zCP!r2oZkGZ9o=&4E}Rq$C@1C4zivtmKng$=B1fkthKfe%Xl2I3qTou`<5>JOpf=dW z@Z6jC;r?7d1CQ7sEJ!ctvH+Vb5vTP(CGD)qWS4z+*^2>cYuZ~_blWjSLqRcD;(^@j zsNV{&S~bSxa#{k=>{4;BHL17%VgCcQy&%fP<4%31-TOvJ{yOhAUsXY+7i-H8gdV*PzKfc+cnCEOk;~f|Qhtld+1Q4y&uUB#cBHYS*n2E(J z8|38~CuD-Nz!PT)2x;xOKElMNCOfy;F+K9OP{*${$Q?iI)|EN0YSPW<{e8LDpcgHM zl9Y*RW++1wzlB~?13R<>1_VZ)!3amXbK8P#oum0R+erMkbhTWh4Ox3~j97}Va8Xbq zRFa`iTfdPtIhl-Y1cP4i5p@mXoO)d86Zf)tXPAyi+@FioSal*|9v#}m-^T=V;(a30 zf0(U=5TrSFYAO_i4He~jy*)ud&MEZWd(viCUDg#sck0KM^2jC%I_9wXBL91nJ|d9c zw&V|Zy6dkJ5isw(ADF4Dc7|+rY=;C>6(a>%e^Q!I4w(;^+)_q>GfvdlaJI3XB{>z! z6Y`D$vo$ z6UY0Y+M&lHq(i+=$)L$&_$o#_?V6GYj@s@-&F2u4$%QZG3x0B)o_(J;&{fu~fhjbh z?zsz+F2kdvJPMpHlCRKedo$He8yj0j^mLu^m{Sv?rK#od@IGp-rhvV*Q4^`sf17Jlxe}5?P#l zR|1N_o#^kjR14!NYKv19S0%~y>$ZZ4D^2H2qbURPHYBWvZDnW7DN3CX{>kL~1PlMS zKI{5~@Xz233Bfvj1ei#{L36W{?8!BZ{JEbM1$yBtB)L{;6jf7+bFsoa*7CnHTe;D$ z%fFL6g=npvIF3{yssjw0%AzWsiJw`W$T1YQistj0k*Ve+9-%p9>1{f59hdYr7@No| z^WCUHBZfyV%ZMw*Kb~_&Y{Cq03 z;&VvO4}wQa(}F0gZ;ht_i+1`7_G>-iUw-`Fx#j-WtFmIwuS#9l58Vlf=ZE@zM50kx zPgZ%A%gl;hVHJr!1T-i{+`>NQK2@X9{^iO0|8+Jgg%5=|AEJp}KF~ldmbcMbir=WT zbU9?N_v5CmF8{yd3b9@rI~TG@$0T!B%&H}^9rREW(|wf__hnHFx(u`fed{AimY-_y z1dm#^4CnvL6yz!Bt(6Unt(%dy$s`V91G8<3Wrh`n^K-(6=!JeVpQpt4LHv(L+I))z zh--UJX2Ry)NV7F$;Nbp6?H5hJ_a+aBj(Ox6@FUi8M6Ps>b`HVN-WCjEMc*SRgDb6r z`?R%nQPE3>HY6-(lZ(G^vsyw<&(_&SKsGAWC6jBZbh9zXBuqnuo(5_P_3)xD7V+Mu z;G78(^!``zgb+N_95sM|$uRjC2fU_Sp?B(P$0Q#XcDWgF~NyKTy+xlQ&FsgiiZ)u~Aaz(;zCctd|T8L=jb1{R1Q?d^Uj@Y%-0b`#0Ppf@4}f>0wVM~$@Ddi;8!Zc7~khDV!CEBgt@ zsFo0`>3)+aRo#ViwC;uPdfhCDrfk)gA3_=%4wK)-;sG{k?>TMC_!&D}%&UpHRCjvu z!aO0m9UWwJuMvC`1XS&Av`7Z`!U2$EXMV=y{nA_1Y^;%$pnb8jLACuG^6 z{#>vTK%D&9&nTe_c)i9KO#94*d(P(FiHb-)Ka7OQbG@J3Ue&#AF_YWSo_xP-k@Q3) zmHIEK;*hKE_4fF9Ac~#jLTLI`aVR z1uq<0jm)xyR5<2ikfjm^6pS`$xOlAC!#2sBJ6oBbvJ!950}VB)l;*4EbU_u>cLQ<2%<@~ceT z<9w{msst*+bre6!;bW|iL2=}rxwHYN1&7ojJ1Pa8iJ~5>{cseaH4ZOs_SM(J{dnp z>3N7G+##-$wS-9~Tog0h&~8<*F+Ir_6Y&&1q=(5EG~v+K^QKqz?jNFHDv^hJ^zcR*qcm0 zF=i0jv9gH0L!m|qQWmZhzn9I(q^mqOh|`>4Qay%8Doa7~!NoIf^--#Hzq|o#qrPa? z(q2TCYCUEv1}8hT<^1A*VgLPrbSiOu#-5iX7QBcixRRhNV9%@8RQY{ru=K1Nh*0@) z!kR&M!OB)=4bhqL7@hGJ&c7HcnC4lUL_E$*Z7Y73kcjLG#=9Z(T^R2u{9$XNY-XD} zMgUY3D}DlnvO|i=Z~Bg!q^&lr4k7PzsU~lv*D6!Z+)X%J2Y>*G$3NZd>lCFH^*=!5l^#HV5 z!H=F~Yp~DY>H3SFA95@W{@5d93Zq4vvAlN*;SNmspq?%7>M|My(-LxCU4eL9K+H6O z`^ugXosOEnk_Yg=F$L0H2ZYEI-ivZ=O22l46qi#re}@~T-TFAr`Dn%?{$z35?oms) z65lWJ-Djf4S7E4G?7E7P75834024th#il3;r7$~g6 zo>{oW@-bFb5^PR25Vfr9`uk$TC!(q`G}DB3&3Znp7eI&AL{j?I4>^;5BqwM)pr9&%y3Cj11`eqe4hf(b;nYxe+b0 zc+xQzLus#XjC*5005LQXL7?oEDe!Ec)g;n013QG$K|cqwo9*L6HcsU^yG5x=a?e!_NMvjOXdsS zbI@3S`21Js>5B*2(bu1L0O>%q^YJyYi-&?QRcO%=0~6YnY$=9>FjCB{NG&oV_H~g( zTr>FHonCy+`iYWU0)k$0qUmu&zR~!GF?-n6zf;9+Y`Y&(qL5n}NlOWxCnUiDgdJsi zaIMbYbc=SrjHxuK#D0}EJ3Q~9a8&P)MG6i}3sfEO3Vh+@IBx*HcUvic_y-nXqT=a; z*B9F=%j3c_W~T7?1qa_a_{=!&^wI9HHG#YJ`FnlwGG^{f&O^+FXp&^Li}Ghr1&HXNSI#y6+JMKuA#UCL+Ukup|dNLj^H_mfub&c zA8$Jj+!y$sNNa2+z1U3KREv`ZL$62ZwJ}~!!ch6 z^Y5NP8|Ehe#mYB|NqgdjU7{&nqnvq;e7AkNb#h5k`8S+ zwMdQjd;l~z53)65HR&7wV)#9`q0y7R6bOQvk`3B&i(MKI(% zR*Kf!5#U~?nqh{8Dz3)hq1pS-)oq4{hn0;G$N!S&2D*Uz*{i;q>Z1SS;}dtw^$qSJ z!B4n*qvKLu#5HhW<6Ng85NvsYroM)c-tQ=pL2)Dw4LO({VCZ>uJ7i(w)U^A~i*B?= zNz8Y+Poj<4Q_ZB%2m;8JY2fbIop6U>H=flJ%SXhLUWq4YtU#Cz`oaI!)#6N&$ts7_ zpBDQ7XI+ujMRp(Zk$)2ClWTT6T{8FAz98~oL7gkvM^AmT_fbIT(U;e!W`;Z z3{IbNAVKS)4ma!2r$}BdN0NPhSZm8{{O4DL-~xL?ke)i! zONca_j?YH-Wxp+fJ_LLJ<*3FcS}8Dm!t4z)tlj5YGsEMRz^^v)K@}-LKyD?W94jx) z25rcO6hrX)(wd?Px?V@kv$lN^h?UM_zr8i%(KOwCwuNb+@DiYa)@z;qO4a!_@B^%f zT}y?p_(z)CR1fTZ^WowJgQ==rEb4aP{$O6nDVjQUy?(s8N_FOsl0$^wfE-_P+O6)_2JNlNX-g`TP*1C3tR5%-^m!V<|Fi?1 zQ0N*kK60Ff!P~)ieM3%!Yof zqWl0#Tv3|HqHP;1#*YQP&2v6=6#nB6x(;XRK$cZ}=f=8XU~{!yDJPx!aj#gXeOe1p z)%_haobpB8?5H68AYKWL_~DA3e_W6ita3#ljeF(jM}s2lwFLcn${noOS)TIX|2=dU zum_py+Sl8vKt!+Isy`)eT{jKi7xwZ~%qOxi$IkG$A(K$`rtzMcfjcX+OYtQ?P195t zpUtH#!PcOxso50i^*H4T29YWsl&l-ek-upba~Y#6a$N0mdIEJDZUdDhi~#-y+TF%~ zsfjM&t0-erVI=E-i~z~#I=l4h!J2h9CQY|LrYK(_a8c!*AnlyxpomNF0jQ2d-E#Ssy2Kb*9ug^awd58=s?ckHzD2!gn_P$;!bU3{-SQI&utX_vkAMwtKa2! zPrjY#9jvwW(r5k-J86N9ub~if+t_*Tv~7RAErr30Rj z;m|W50=jhjOfa3dY}CCBkWtai7X(|mAujF-KXfp#{h>vAy@qRH?B610dUG6)4g=?x5|W3rZTZi zw{fdVU_!;8^BEc+P}P& zqFT1P5xo`eU2gA)#X^~-$i!gkZ;5Tkx1=sg{E23|h^=g~HMX-ICwM0I9&M5<9IK=#*XM)?0PY5*?2 z$zri);4vJ3Bws3&n<4b*B(&Z9`(|!bJpl^iK9X&O|G0XTcRPk4Yu9hFE3h}6RAEHj zzxnHfw@9~Y(#J#9+gG^}?B;<*F2`>WJ56*a9WlG`b+K+wR#sK6Fu`mmh!kp7qU>mV+62rzQcnakzI4;y~waO!rcV& zGkU(`(&V}FlH_w1p;mim!ymW=bJo3NPI}{_USo-6kGK;0IR!D5D#JUYNKy_o`-QSg z<_a*Vkub;~2Vb5ZN3@A<(pak8;>?{5{J6T>whlVLKmxYeHTuxIO#3m!bbOXeH|ZvM zWxZ8(`88+UeD@FCF<8eijxf=a6cnA;&DdkhqntQY!EKn&VJqfH$XB+TnhzlaoA=9*n_0zavYk$sb=k}%L_Cm%qd^D)F0sU zGHGLFdR{i9DmkZ!p~yV+Js%>l{p?zkfh}13Cx`P)H%&^#oXbF8)@b<&?a0H@ERn3s zWtQ)_UYtk<-XioKKXuSkn@X7L zx#PSp4mdfY(B$pp=3{@;y0(OE0wQS*CI2XM&x?kr*f+4bL5t>WEGo{>o29AKCdEr* zVF5J1e%v?$I9slSmF~0rQbrGA6R11m-oyn)Y(RtUK3qn~YtKybDs-2_xKk$gc@0ZO znCEK6=mXNDx!O#~(d*Xaq0f704yCtdZkn^|;fs!`2j56iqw6wTti@~U8YU#j_<9LLktlfhJO-ArRUZuQ>!HJ)XwThCou^LHiIW4IwtfS2Q z2s5kXvolQDTDdFtBJ-Gis|r!dA)~JHkz-Q5kTtrmBj8@C&@0&#SE9qI3$9&L=^khY!81lzkQ#5aOp7PkU1b@Aj)D7^$ zVKSyZvfu6q?eQQ2qsA>4>EDfM>!xUma24xENL(x4xZ@O5q6FICc4tY*g0$BmPP{P? zW1wxSr*T2LFA(wN3bfx-y>dvJ4<&oJs+%v*=iKXzcOAAaEfwR^7PpRUZ&3pQConpFTlURp6YKqd3@Qee8OpUywI&Dbx z)ziU67I!nh#Duaut&}^}QpbTi^W_8u?`(v6MIYcVI9}4O!I7Ok?j&vI47<0ksw$o< zeH(~UtL~T>!qwh7nC9Kym`0^ky_cN+UB4iDt$`QYIq$RnY7>d=HRmqErlqk$;1B8Y z+GhmIAEizJ;6=P1y;7fb=LK6}0Z2*h)2MBfZ_ne%`2!)7qctcGd3%hAC7~;>dV!mA zIf+;c^$Ld8?7^uFFrP>P1}4!Ug-qt}`?C-0$|_P(b&IeCn#X^7gUM&X=t%FD1aO)e zCk(<}VZFJ9DJJn{FFa4(PPwfh2k$H7NMJYNy?|H0#lhng8;V0|=FOFaX$)qYsy3js z*vzTu9TvB$X|I=wgMxkq*-+$Ck8H-E)TW;)rRs!x1Kubyjef zNoDebUhZnBZOrRJ+-dyK-kB82?#$$CfN+~6zMem!Oo&>+8&-6p7}?3$rlwF>w2T+x z*TTyt-Up^Xh@cUrI3ZGEJxjGHT6)DYx4&NB1mWnJhHKwA5{B0GGkpB{e(@VC79W1``Y}0+qcq7T zS&}v8wu}G9jo&H&$(zOCesGe@y%-X#kNfQ!%dnNR_?zUhwdST|Rm~lU)l21kvOaCo zOq}sZF;9_ujyOKY6Xk*MIWFX2-mIKJ^Zn70R9PWTh0$S35(&QH6*(7he;LRJ)G$GO z^f(Ary3uqupZwS46Io#{et#619ynqnRm6E92HZ`{4x6atTuZ8TO}Qz!4nXqQ?GN9g zY5Rk8z_JsLh+|>0m#sk)Nb`xZ#RtQCNCP@XHhAdWuJ&0$FN2-!zm3^OfjERHkUk?A zeDVnUOeTk}_MyU?dJ9HbnSqNFL%-YeLQMZ=-@o4tDoTshUaRjZrr-UQV$jn0A*NS< zJ9hriASNMRpvpf}6mx{Y)Vj;Fc6f(7=l?=6t&=AK8PLaStkDg{t!<`gCh}S(+?v!# z#A=^?v#I_lb^L-XGmDw5R(J#g7U(>lAstSK1!-vnJgGAXn{L=8Wgj?>vpZ=9Xh>VCWs@M8 z=kW9;*>&MC@x=&l#!L?gc)&glS?3!zg2I9x<+raMywe=X-;B?uDYWQ%#smE8lg*|I z-;~`WiKm_gdl}>w85_w#!j3wJV<{ID}kNPl?D_t79RM8rvu?D?2aZOy@Vx3aD zqCMION%JojqzZjXS>H#!2(PLlA2>Ja^`=>W0{B1;n=AV|lwPH&8S|F48#HD~nh;=#*i%xv0AI zYDMG}gFNMADq>uQMN5-2USPerCF}_72N#opZ6oVX^#jb~C=j-|=l1uPaGS=SL1FsV z&`Q~x0l=Mah}V@${>5<@Wlt8{8!i*EfZ2+0nisk^lpmE02eeCsnr*B$nXZ)7eZ^}* z5eX~)O=#R>LyXxM4iLW-vRQTd6YXL1C6y%3#{Heh%^za{eSlboVv{8s3ij0nL(n$zv z6}Gsi4M-VR1$9TiqGkJe>3BSJaEEq3kMw(mPtBtOuJL2UeGPp3P2s9`nOj?tYBE(v z=W)Tc=wwqt*bea9m|>T}=4IKw6go0-;g{=OC7@wJ8UAH6kq;d2)JInliji^BnQT{` z@>#G61b6$u))UJj+rBJb7y?7;8}J$@_`d!U=0Qmh_I;pbhvA<{y}to&4E)F;$;x-i zZ*_~n?rv!Q>QUb6146L`=z36mmS90I z0xUWfltMgknh%1L4NM^|pmD-yepMRTdXJ~3DB8tdCU9dGX)ZILNpW={K}ZlE7h4Xg z5G2LMVbIPw6M~g(-)t|2Ms53Q4JaRr0&RRkIaM6<`c$tL>h!x`oy*a6o0%k8=8$cY|T}sH#b&xQ^1R zEw%eDzDE1F)%P_5^Qb7 zFQNZJE<0f>(yD9Vk|ZW8DLln&B`Qf|T6o}(`wTg|eBjx@Xm)9C{$jP}GxaGAcP)Y> zJNKtAb-!beJU(2m4XV4B7FHhBGk9h*xqOyxrzRfB+gWSAj-r~3ksTWml7*Yqwr_AW zH%D-%p$5zdM z*vFlC`y!%7(>m5|aXnm~GUUJGOp+gg-9goC*(zFu=EXaVm*q^`zudh(U0xwt*7LS` zipWFR5F=}R5RdjrLqK(If!k;Me{~0k$|=j<+czQRu=$^8pjh&bL0cws-KSRES(t?9 zm$d}h_26eo5`W#ZIdf4RRJwpq#pq6 zN+)OkN=-g5Oiqw|P95rKWy~GlaxPlsH#NlZCHwz`hPYFQ1eH`Vj8db;`%H@UGuaO19Mc0Bz1kJxnKvgzBPE6R(@)XXAy4p>1?}4ej)+T2eE=lUE=z zHa#zp7!x*){@9o>L#(r^s*o%3@cqE_gi=r)y8-x4;0~1J!A7sso%ja|HKU-_X2_hrj%Uz9?S%J!!Bd?Mj?d7=suzP%ya#n z-V!TrLXLTLdOI|$l@g@8l6yOcxh5m0Dv0BtG@Rc`3;_Lyh@OldA z(WFQtI+4HtptFo>bOy16u5ByPc1hDdOLov8T$fzUnGBph_)C+|&aaN2N|{LZQ+xv; z+s&F*Pj!xJ zATwe4d(C+{8+C3IUcZy(A;fV>+nbU?VO7wv>VTSBCpUt_`x5Py?X@c;b(c__=qKy> zGyFZK{ySW(r-xQ!g7dKg-NJeKW>*bqw6EyNyp);t}DJhJMhICc`*rOMX_`*E_aee z1IDkTODOipQxvdowt>_2*{HdxzbNYKvia8PYa=FHs8_~7LgSbPEfu3LZ`-VqkZi#u zzSqXj=m7rAi!Q{U{AmBDojp+iN?(nwBwAv9uZ)DMe_ll*~=T|}{H>QAurUkB>|s|ONt3`;xn z5&k(w{CX|*&~;49ESF5bZMC0LKRh4qe#r0^`Gm{)XaTQ$-D*S>dtmq=Ln>pLBQ?Q% zjb>mVBFs>uuWXVPkv(9=CMi zxz_D|Z-z@t312$+jEiWA4W;6_EsoFL6mfx0@4`Q?SX2#n&J36vLm&Ji3+_V^?2Z+n zX%ltSX|~@Xciuem!i`;n!--<;vl*`=d$N+$qIUMV4a|{QjV1vE4ahB{C&-U{;Ad$% z8wTW=z~Q2)o;w&Yc{L`naPpe9+2qM#d|cW_6l_0OnttIJH7D;5qRj0gBZwxL3oKkz z3lf)Rx<2cD_$nu~arMRrmmjr~XLGcb<669l;TUVz{dUsBK;1d`N7B?extK1K^w6Lm zYk!btx}2!`zVo_ZITwn^q`bU*L0eI^JA7Hom#M&T&-tIN=`eBMfn~-4x`9pnQMUe% z6Kvv?2C>)ks)K|o@r3t^37XQE-<2pXjn^xo)I>SWV){#c);+wmNLYEzd+VGPqiigk zSilUix3boZ@%@fK3|ejA1FrMy72QO<+fggR$oImcm%)+MQn=E7ew`8hmIvBkr-%&C zq{LnNwdz+yOC^jWBVLHMWh5F-?RSdlbl?H3chXxBVLD8HE+ixU($y*aI^ve`{m`bGP^EQk?kI93pa|(ovF15*Qc4vY#QA{NBtNGc2^k*{n9E9$*>?<$PHsMy-4 zWvandRigaH8b#o5j&A?=m(~I`HRL9fYn{Nm(@}jIl0fC=L9z}sAPG9;NZ^@A^t9M4 z;GU-pGA1D3t6)cMdQck8x(>AuFC!Sx@atlAIbD;G#jdSNYVq1!@#Bz|kZMs0Npwv> zA!;O}H8cmQeHVM6FHw`4|Ka8Xy0PiDrw_~q)pGP*GV2A#S`^W;pDE02M8*$YjL9L`|c(TdNoSu0FwcTqHW%8Jz0 zN>9<|zlbm@Z7+JKq^E=P%{+>K`r{g78aK!k3C1I@XLU!~NX5RfOEyGIRWkGM1?!<% zRt8n?m*Jihu_@ea4I-pCeWb{a91g#=^3Wo5Xkn1Q6t z_2pzi(>;lMc29S6&N5#bS_jt@1E4%>d-$7;5xJh!3M!Ib(-!GAYcp|k2e?@^KweOO zQ7)q7;B*?>L-Hz+;$Z<=k}r6xhjKD4#L@1Nr}=?Q>3W}^4<6oD1D_)_DrRaPkz0@U z_0NF_l(4ZeIW>>s6b=tmGQYDL!+U+FmVYGx!4=Apt^C+ULU{(UsC;)%vB{p+`maJwAQ3mUBXLUK6MHNgM?~gCv0!7+#+_SRM%WM>r)c^vOZSdzC=I)ijDNO z&mW{{2_#%@^|{qkLCE5_ppXqFgn~j#(?JX{?;t*HZhFN{tT)`pGSn_A90Y`}JhP-7 z;tcsR3lsuGK3>{-HVTKx_6#}P&8~mn)SkNfmC9HEF+k40%^)V=Vte2*&wqG=m{h)% zop_1%Bz3>qWpHzwULkQGTgJU=!8-D;tr+Ag=|7SAa+}}@`AVoOp9WK&fQ7sY(RwbJ zPEnw`)WOK2y$bF&DZ79yUl2=D8^R2YoM_dw4X=*bf6g`h{##4xB1k#XPu646;#Jq? z%243yc8RD{j&r<9ooF^Oi9;GH!bLd9C*5jgd@d);5WraJkcU|@*jScJamFsUhnDFE zZLWAhJjBAj5RH1^U`0_)sEoU7`T`YDKH2E{=nQWtP;ytQFPnn8Ra0MjfUYnQ69p#G zcGFzJDK|6?PRGf z9!MhpA;vX)Kx7fx=(`anh3<$<_8TKHB6I(J&_*moRG7=O?$?CBAV|i)xJG$758tOu z6g8;N$9P14P@*1Xh)rl;+{8~ez$mhLV1XZ?Lxxq*mdcoiCMW~m&fK4f#ZTQZJb^gU zcuCkWlwEDv8$k?7cUT0ivX1ku%K23EiPz!3@Bjb@I5xMcaa5IfAlXibWVRP}|3fs| zC`y1=bxKB7ihEJwR;J|rtC4>Cq_4+tZWa51idm`JOJhjH+N7+yLT)##4TI!#Z5}CM=1f#L3+vn00OJs7*-|#F^&KL001xZ*_m`z@}0OFo>m}4698#7>)`80)6&u$Fr z$9F#!DC9xSvyl`r=<~tI)Q~20FPCXWO6@;NVLoG-aYY|NxOy(>s@DT8rx8VQK-dx! z>S0H>+@u>5ZjiWNic#YCyq@JN6%03<++9+o>m~gSFmzQJ4mJu8k-{ zydgoG$|1vdA{nZ1AWO^p(YqtXjrn8AKl%mc^1c>?U9GmTR}z|VeIy&47s$({84IO5 z=Zv6F!w>PR8z$&+NOFOXNFWcvLx?_82{?L&;eb;3}9YPkv>?2{^G>@>Oa z;pkbd3kT%5E&}do%xDh3duXkclvVKJf5oqsE`FV#60wsUATux7af*z^6(aqKGJt3@ z?;dK#shNb;v6qO6ujY~$oL;S7gVmdy#sjsf-DyWJU-82xrFTx(_D>Dek ze-182dZft>{_onc8+|38ubY-N&%MR2yZ*(vlQV8GI;FKuaUw@Yju31;l7v0iPx(W718l?)b%jA59;b;0hWHP)6_(h2ZiRdANgPrds#< z(I*bM)9NZ0OIM!t%PVLhIPn<t=j zseS8|ziyXn7GY2))@v;9N3-9d01C<6{MVyFVc4x>W)Phj#Fa!~9sm+y`)GXb>jbjKXA72H^7}@z+y8D7rNg z`PkO;ZZ8J{oE?JN-+jq`R=Z)N@38@uGByS(Jes?l{oJ!#^+Pl^`lTW#`7mAS`ZCQN z{C?Zcxfd@z!DMFda(_G_!RcJw{VAMIq&mgriI#Ar0rF8^RJRnfoGuEEKS7hS^>oW0 zWQ^H>c@0X+ZqL5nD-W?A`3>%>=RK6Q6i+`e>IBEDl((mJm5WA8|vZXEnb%g>a`mVtKx*iZ^T5lPmb#nV9jd{EI#N zLZ@ftJA{p_0%Xukgc6RnpyQ7H6RVBZ$;KGBZ*lnOn)BxG9DB}oO5hS|>HcvV1TzB$ z5!Y`wjj%hC?O5=V8+B585iRRD?x1PTDNZQtaByfMWkEOY%P1}C=`3?MSS=jFn~!2T z%IfZKPh@>{PT&9lABkE!1qyMSc_%?c_OOJwX6D^6;`DVGmXKUQJ}L z;-OSVKJ=|CpF{jz@rOfL8Eqk|pAXv!9bmS}LnM5*)1z%v-;&F7C{FU$8-rhiT&j;^ z5z%_ZWS4M2<*1-HrHyx7a(IHVsjpb)r!BW+BPa)uvu2K{e)CWl;0`s%=UUt*&KN}S zHTEw#xM-b?5(x+CW)Y#Xf~{APHS?@dq;C_OCLU$zA@DYm@*N`b{v(8ebaUF_sb|Rx zJfM^J!%VC6>- zam}FU5t@RkV>#zHFHg2+dgO)!GZIT=Azy%|Q`S3-I;`nzdvAavY&5nxwOQODF&M=~ ztH3m+OZowL*w^TNRb$RXh3wVD%RXS6AJe3H;l+`O;~W4AD~6dTtqyY&#VnOowJ=46fSU z{ZN54VJngGNN!XLMUK-o3RUNu524hGt#~`4y*)NE zqN_~mVp#9&fw7m4Eg9B|gmCJG^HzIs6M8X4ISI}Aj;%$3dGlzE;m@<3t!sU;H&u9# z9SeVeVE5uX{kxC65xp~{UA?YTO`NjDftH*_@bpTiqIX@Dx~})Xlotg*{KfeVihoPv z$RD%_f2N7bHgnmOTjBEmItx9r#RYGR=aIY(OMtt^|Im66tB0;qVo7MXX0BxKRf7@% zhrL`i+UC0E;zrI~omO$_m@-N6_X@^oSa+CIDIYcj8RL=m7qJ&B@1Ex+hgi?z#;iE^ z>F7NE;kWX=s=RqS$bKh#3LkQ_2OpD|9EjL`W#E0}n zHD`CP!`GY(WkknWkwsmzQmszUh0oLT3K#bnYlMMD+zRh^*&8#K9+Z|~*hV)a!qBLp z4->j8W|iuS>-kS15Tx`y`!1f|en}L!JwerGVCFV$e*SVm5WhEE?_Db25lDlnet|2LZ0waAdL1$%+0jlz zn>;4fSpVguVV{84Thv+=r!wEr5!$Me-OycgqA0iu=xj{mx*KaAnu)iWMM^RmJ4?Pp z(nx8eDhOY|%wcYva;e|ddSAo8^*SRcXk(8Rl~{I!yR905akw<{$vL6IaAO&v?yY!S z6QtE0C*IvlN2=heY#)SAZK>(^KFo(X5~<%Pd_tl@qw;0j`RR{x^$R3DPfG2^)C^ME z^n`w!6EvbFy75_xc3SNIwPSC)I7w<+8-N){cgrx^lW*8yvWcO3w6Lts7f{q%Ar6qg z8T`Z_5^y=r?&LP!C#xeiA&DiSw2~s6`fb4(f{*|TI}*#h78sDh6g^Gdp*;JGFN~7< ztYii)=F#SUbV0a}A`sIH8lwF|zhA?=!Sj>#t5@pp=S^L$Io$Kcd=l&A?hR{+SjGV! z^ZDlLtZLrPP z?x$Cdn)4KcPwXA79a( z%H_n<=*a^bN>iV#qy)T0&FG;^$wRVtc9rNZIduIWboS(=pUOe12B9g2m;z1aV;~=_d;w% z>%9r2NuJ$hBGy@RujIyB=7FO z4{T_s$0S<}I$QVIAW;J|E(oN9r6{{h-vYS}p*uFW-W#ev2m{5Py=pukQSstj;LNT->GBJn%N^g=J zf>+Hyr9b?5c-5QY`sqnJ`slO2OMSR4r(=^#T90C`MX~p-Ax593LFftCKUg9hrqbSv z#CHDpjT9=5U2vH?Rl;oYE^SAF$x1_P(NO{H{^)<13Gw^-ZR(Cq`AgLz zFs#6ON&HJP6^i5DACpaO_-yJC8`Dn=XgLqYJNo_miiaMt$a;QnOl$UTtS=LDoc=0v zd(}Y3>}e(gX&{70*VLaEMbUd2snA@yM!;B+*YjlXy>HXxHEaR%dPIQUv^s`9LyEbw zEV?|Tc&ls!(iSQHmJOy@~^Zg8DK_#JcVov z`)Jlk2Jm3XId5nZ6#H9DbaStVl0N@OCs6$s@$mtImEj+TB5PJ}MP^7Ca{{4IaI}+FA_0RYTPyv{%`q9`| zT4pCrm1;?Og1U+V49LYgu&2glLiIAqN;6Nq8h#TG!a!%Zc5=RY?$(^r;|=YD=+^H5 zB2WBs-Y$(y>&p;u_N?ykJBOHIaOT*M^OVEZzy!oA(r=|r4viW`SCE3|Vbp)ON4e>) zXoe4J&_RltUycZVR9pqiz7GWM3SHj&JC#AMb~}?t-kiyDoaij;pG^2h8m=`=D&$K3 zOE}l>n_nI!zXREnXy&>=`(D@xhwQRq-2puPU7!eW;(I?i?(`EaT)X~9;5h7NT;i6o zUI_wD^6?L~F9~%Ajd~&_V)Ga4hhtq-pw51oI;B0HBd5*jg?aVGJ7Wn}(|b-Fx4blz zwlnm@a-sIpVY`lsD_T@})yf|Dd@Ru2aGU4&9>ZtLOgV``e-i*PRD_E9kMI>P*J|4i zK<$gel$+2ju@AJ6QgGqGCV;Yc<}&dcD-{j%(?s<9I^XC$4}A+_;Y}z|n@^PSuteaj zc`fvcrNvhAO29l<%3yYh&IHZAx_UQ0({oa_m5B!|#0A8euh1P#8ttV)))}%T^EHy_(r5y;w5I7Pu$wp`u`B{f{3) z6^aZ=Q?#s6VlZ(9M~y5hFmW^MflK2&oRy3F%8=1hj`ZW8O-_kO4eDvQ zd_3B@oy%(%Cd`|Q3D)&*GG69F$JbWDcyZjVbK3(yQK;$830qC}c zzG|wo2{(#JucR0J>S%l9*hVZ>fly&~sWB{G8*lXtJS2oNQd0@i`wwO)M9F8!exSyN zXuao4cZx*V<$_>XD->p2#)n0&M=W$>#ZL;1=?(^ltx<=6_N>!3x>~`)?l2bd6OdoR z0yyGVvg#|F;DYju-vS6$|Aw#ei3Q~r#&Y^XoC3%Lf@`oK=Nh-A;o_7EoUOcQ$txs50+pfvWJZ0qh%Sexz(o&Os}yFrd3*8uQ%kuv78%aWWcb5jJqZ(I1(U6 zf6?&lb$*$!Uw@~ga0YKnN(8njI;q0NcJHn5?&TB)`mPr+!z1matVmGozb#LAV0Pke zX=}G~aLW$uuo879i41n%yzUhC0B#ZIV$sT($J|ol6F96pBES6Z676l#y@!ycm(mLM zsy$-~-VRu-^TqDY^>%2|4dPqv7M`L%bIN+`1P3R-Lt=R|OsIAX?9Q`@8=y%iUd66z zS9T+5CZuk!gPBDa(Go7;94o>FG{Vd_D z>vt5UAZk;Xg5xTQ*KGn*|4qh3T8Mi>%--Gu_1wstE?K-1BjpgI4`t^T^eMP=pm#n# zQg;=tI2(MvyXHR!RHOhTpeVdvP8r}WClJWm09gevZEmX>0#G_7hpBl&#i*2X5rsgK zftn;nm@`L-)3NH3BAbPfWyXs5pAP#D6!qIH!o2zG9C7Nv!>QR3O9~!clRKmg;;!bb zLPlMdk2WfFg<{lmJim|}&q%Ls(7(v&)0*Om)YkNUFuQ_>a+Md16y{=vOk&wFq%|jM zZk_}pXi%S21r3XWwo7p4d=39-1_2h1t!BS~%G9#;mk1`z@jOgi*oP^74A?&?ArXGOaJpsIJY9;q`x`a z)g?&GiW!S`WZ9Jw9B4HmU8XT*|D^dfngIn1NxxdwVU54~o{G%|?8~c0ypz z2N5Y=f_db*XC~@J@>z{0N`R+nEQBOmJ<9(G#O^6% zEBoG5HhsQzAs~LPKBz9x-;mMs)2U2{304YW>t5gv1VGi&Q3L0y>SRwNdV8ta`FW#X zjB(4Z+Sik5SF8O9FX>5#9}h|VY)5f6*@<31Sf2=i?%QBCEl-7Z~zYN*Fj0^Cg^UoFKc`|+qS=G=2em* z@@j1US6Zl+UMkn0V$2=GYpK}Q{HY`JZKTO4pEK2~I->2uQVc_jHnBs>tL}0I{(#0L zfG)M=h<*|-eOKmDP4)fQ`?n0a`G6DZf_#f27x=95(umXrKsJ{az!8)+v)@hxK?U*y zI?5%cfTrl1YD|x<@JTqtyYsCSD9GHB@VQ$c-%vRQ^P(j6YwrL<41JuK;!}V*?kmuP zRgV#>R*Lxk!JVE;9LNwP`ytW>x7rP4bG0`bnxmey97D--N*eYhh9`V?Y}~kYOU|Et zi?_pJ9@LUhOX z{f-TXp#?`=RKrOo;7b8}HaD(+dq%BNa*{K3_%Z{}q>K*3>{e(Zs(`^UTP_$-p}@F_ z_A~xFTzTQ@R{9ni)QBWrLKW=R(l6Y07X>L?Q51WeIGduj44|l2!jE-HLz!z^in7oVd4t4V$ zp@P#5t$-dKIo22#STXbKORyE!>3V+2i;w#7Mz}nRey*GF1RqS`q626~IdO{Ys0=~Q z)3d0@X-x>}s@13WjeyF4#L_5j2kdlIefpjJZvea${>nW)uc}FjAkJ20-g{mx;61Bv zA(|6M#ns1l5_{C&5c50l>_eENdaqVCSuTZ4DeWA4l0;*-=rl9cKLNy*Xg6Jk7gl%4 z9!YVgO|jCEg}9UvZNM#t(pA+akPC=Mu=rf0(ESex|2#N@qH-=;4#T0b9+%_I4A`BE z))uI)dKW`RDyA)%KMekMVnI1V#$Sy&qBP3Iy zDlrsO> zoXAs+Z*xJ)!idgY1Xo$IBBTK>&fXb8DA$%z0YR5f5pt5>0p|ACeYuVf=q|Dd){~%j z1mL3(N}o=3t_y)S6ERF0Oq1?d=2r%A&zRT5Yb%3^*Z@40Mk+}`a1?cvwW=VL`rMej zJ4`6|Otmv88Wqz71AKPo7z3@R+$Rr6^(q;u|A5X{rm?6cOT%wlh$Nug+t5^i*|N_2 zh&evF>h_L!M!%fNwJ*_EKj{>S2PRyPu7nXVohf%c4Is#(-FO!KwtbqQePh)yZ%{CS z^ay|3uNXa-^KB;n&0=Ssh2$wt`9W1z0a2^ikb!&}opZO7Gv-R19oQx99yf1F`zLr{35T6ztAcL`dGJnHS5B|@IkylBJVcu7E!sjpp<*Y5QFBCgq zFcGF2A*^5tt4UmX9Z5nPfR`oX`Uu(D=RELT0$<(e!6uGVy7DoTM=nbL*zOaR5MQd{ zMsClTILdBlI|rjkgSj)NLnV0% z6se|=lz4-6Q47+hH_cxw%EQ;8pEdX8`AFFeRTJcdaVg|`xinm^Rk71F!rf9T`7%Dz~jiy_t-j?s48iFDPmT>M#zf>Pjh|9WF>0jgLsBW?o z?Q|brpwbu!7=6`xS(otfi5qq&_DID%Z+GM~uIn@1ns2i*bKb%@=Ym3yOf4YC&CRq@ z7nwD!ppc#70!|Bs@^?JSA$L(!x(|v+LwbbMw=Cw&`rsazu&g@69qYK+`d?0KQL-3v zH3bCdR8vq)-JJr?IN|O+x{1|em*I7H995w>ZFN!iqnb|NP!|G9BH;gcs?FT305D5r zCZOjP+iLF-t$85-(tVjIqO%)3N-j2DkFqaf$Os{^XX^Hw(FG=8WQv2}-;e8VTc@YW z4Ks{cC7-tDt2IJHE>Bu(Z$o&a-S8erE^$BS=Y( z-Jqd?tRlEBaJnf3%bVf(`!!HxT56W(mfJMh}M9A$}3$xRL|QY6V$%ITZ~Z_A+{50 zLJMs*{B)NAteN!#%VcYfKr%)L5U11E$q-r)pzbaBX%BExOM3Cqh}>#BBCu;Hz!~(Ms|Ic}SPGu1d3Z1g@k6Z1o3ARow61028u4MRDI#)Trp| zj9kwUns~|I3@WnsjF5(=3*e$jbqN!!78<;M0Oyj6j)@}0{%TgwQDT6qL}Ms~H2qnG&4l&8Fb@jU96fMq4!DilTv>i~ zG%bY)^QKvYgrNm1p-9qTHo$kKhK!kmqtI=J^=%=K7{+TR!e}MJL)Y<4U=|cOp1BIDe;gLo_3@M0_HtQ{~upNaOlrMe=h_sQ)=LNU(TkSFC`Rztob}AKSR(V z5g7e=mQ~v%yuWu`8Ac2?Of}yZM65+Ag})ur2?T&Mb7>{+5t6!kWTE2??|FU2yNQwL zU2&i_m2cFm0GB1-*&*G7>D3E8J3wGRL4#djEJGKPS5!nQ`j$h7Q&N?K6^ zsnDWhP&FIYR!JfdVAot@15tjjynTM;7>@3?gF9TOrSx53_dPL77reHaD`KYylOGSWl{<)K z`k#81EJniXRz?7O;pjG6IYY1ESld{Aeg=<}G%2AD(#;FckqlcOx!r|599jDx1j5%n z%Hso6awS-^9_>(iGNrIYs-St~QdJkKX|3i&&lW&!RX)ruQ9_%cmoUL9A<-!>HAmE1 z#u#QuW9(+wha46%#Sj!DEYii?bm?S$HHQAZ4bigTL@*4k@Tx4z*xJS}qK2scWZL0K zf}w0kPCr>Eh4ICu2*SW!kVnIlQVRa8g=xa_18k4~oWD|IF)?(M)58c;W~&;gg<%0IE4km(aiwQR=Xx zRB{w?%?C?lE8h7IH2Dm@jdOC$iZWs>{^RYv*8riBX!qw*?g7g$+C(^xnkiHHFD$kH zqJh`#3?88{7^)aV_Ww_}svQDod&y)RWQREkhtfV4pNRUMYGj*`P|NLva3S)!e$M@) zT|-e4*7cw+RbuagQXl*iNZcneMr;Wm6!6Bl19XS=E2EH_;pa z%otWS;sL|Fe&2bb!07Y{6jG+#?+-lYmK$D=O<<|rfWR&T zZ+sKjq?yT#uj_@i_&9*2x!1As-$)Ss>DFdkO^7n9rBPHhSeO-@@C(e;4sGZTnzbi^jgf-9_U zMSYn@YFBtG9skyg z4ApDurW*8UG+LYB)(=xHPWssvW6uxE;ENyw3l-ZJ|XjE#cVT+N| zqmYuJc1u;xR$h$5O*og8wmnu5j53~v`0oRrZMZfX$}Gh#T*Jt{PBGUETy6py5c|RA zE2eN{P7XFQ{o*3oIi-1hAT>tk88W*?;Dcg!KstawIFi8|m!7Qombb1#vIXtx+-8xO zsFWWl1cz{k!g6Y*fNBld*4UNg9Svxa#^7LjO7pd3S{!25_wTk%kuGnv6Jqf^g)1RS z^J(BxmU2!SO+qmqO*-bi~5jodn8V_^RsmWYS(tsBlztF~(C4ko!Ip8CP z?_Vl3h#%rz1ID&plzF3xI}~cDlu22YfB=L#BN<&(sN_WId6dyXwJMxB$DD9?by-5K zqx@m!?&`3;HwQBf_`AmAmo(nv0J_}StLky>E(zub;4l0?;^77Z5gQzru+eFDV4gGt zI@Pt)>$k6IQOk=Ho8m6MOFFwpr;b1in+Zk zG>Ot`p$ApTxOb>_dp?7m4?cvHU zf5;IVt(1J2UzfixV_|XM?#k+2Ox)q6euZXpi>WBWAY9xe2y+J@woWu9btSn<*RZm0 zp5ne!tqpJzLK$`(8l&GADzB{1V+;KUi*MPkL|94VsS}#epf7M&AW2739?CZLdTs}W z22DWH1qgU7=1l&sliMtp(FV2#b12^I{IvO!A3N6%Jbl2TfFF&Xu*X+)H`=-h2?AX} z^Pn@e%~(p;xLutlyy`&KbUJCe(g|Z54NJGn#+@!;tiUY8SZk{?vgugGC`#uy5ca^c zBS)DrDVdXB!;g<`3<_Fe1b|#{C0FM{1!&Z`VXvaJC}_5AJOiL~wE}U-1MXjp)u{%A zQlHXJTndu=<$z(pKs{sedmRG21b* zt(Jrt&=6)k;)J1unu*~uSUf3cqK!zYaF9hn0#sCpr@{ZTwE)X_5@2L3RYB}~e*C*h zRxHpnWTWhnTMvQtAvtC=np?n?6BWbOqlyiRPp*o(xAX(LIAh2Whw z3`O7IoOO5c+?|!IrzjMBhCZ8#?G(xncNder{5+|XAVDDLW0dS~GMn6Xrlo&mNk$3u&dRFVq3IDE%!RbRV2~4s_uQ4?QVvL?!A|@qGgk3@+mb=OBH-}=Z>N?XwW&0Oq3Si3hU$>W?Od$St5`sEOpfu^HI4Y z4|Kl={lIolem?0U2#kBqhv9c%bV_-1`=>=j>)Le5#~~a9Zw*(k$2q=uL7g*6ef4i? ztAThQQ>-f1@QsnkYgVCDsM+=OdqcR%S|qpas4$hTji=JoT{l+!guyZJ>1_p3YJ00w zDWp*euu(Ld%)&CwExr#c*ffBZPQd_0WDn74W<8N_4*cv6Bz`0nwn@xf8{u239;9!x zp*kM+irN6G9N=1fu=von^B^bF`@Lp(GeE%G*5&jqyS6se4xmL2pjSSJWiDT+bZ?Hf zZAR*#d*k?7>LYA=1LJGgbk72~1Sj3nG?(A>F+fztZA}Y#i>yO4xcKGXu8=Y2DVf9R z;*$HT_|iOmq~5eFZr9k4)e&GfkB|~%>lTlCm_=QX9xF>}9~rI`MW7TiiTgp-tuj}+ zuMA&AsAVm=u)wMRO;-KP(8BaI&4D0)X`c?*cdyjNv3Mlme<0K z;m-*V)?-A^l5uvuN(lxT&h}^$mlzz8C)A6^Yc52VC6izHTEK%BiQnQM*zRnUv@D@KGM>g8a5RHq$dFk# zM15`JE+k~h8@kXUJG`;&%q<>I-cuQMvqazWT;TpE^TdlHvC8Xd;nb@;ki+=eAN0Id zvqzCiQAz);(28Oech`$}WR8Q~wBZMOnl+ta%|f_3X!GydeU@tjC_^~Nfy>nXoxE;| zk&?If(};8cR^V}3)$x-Bgh+#3g2YaWH*2<25`vc>GnR1(3COXaGCIc70o%WP@(hWu z%u&?T#`8iI{J;~#pv~vNt+s?T%{v#M1&BoYHWHGZBO_#^j8ZZeX=tL8I;3*4&st9v z3q7XU)HY6TgkAX@ufvq3xoD0jZYRI+euhXe*cE-mkJ($7#7?b5sHZrc#gldYKH`|l z$Bl~Yw1;{jLuAsTMH&g???0Y2%O>7Ac55w0zR9peTGQ|biG{CUOY=aif(kR+FL`8rrk`oeVZ%^*Z*$-YejE4bTWYmeUTXTGhJHG z>glQ~6=Z6ZLtt17cHFu|kqNk2<5r#}GUSamD1YpEoXL6@|E(v4P2dN(y$AQ9Mmqw$ z(V?o`5Szq&YG5`0w$@mOt}4BsJIlN-nhnBXRmm*w+Ge@Q+2H;Adf15(%5~Z=wuf53 zA{xqd?^VWy2uD-c?{->2xPjXYYRGXO%NfIjU-=ALkUS|+(9V{`pc%=z z1s&aO{+x4x;uOTWdMRs0xkJHdUK}2E?w3=ZKLDa(EHeN&yqlB}90fR}uIevR&E_@7 zwwm^B3+_8w?tCYRHHaBsj9Wjuru2~{!xrf@9eLFzh9B~k1^|Bon!N7-t`=RZDCmE) z6l;U@PCJeQlbu=L0%m&x!^H>R5d#)($8yvZ{cCyg<0ST{=t?(ZOyFq?yC6dMh>b0d zlCRSWWiVtuZHlOKz)+mLW;%oSlH{4i>W{7QW7UN+e%Vd8;h;;kJhOs|QyP6dFf_dBP>@*0uNIE`Xe|cR_NFqP+2c&`Lzg;mH$2{*=leZ$>Wbp^g^p8v1D04hmlYiQ%;Hoel!@Y14%nV-IUMdJoc z@o-p0_W5_~e9BCyNDxN;{=eznLJk^!1tAPfesSC23!A$hN5O$)`GtkRaiO0-puwT9 zmkf+n)uNTN_PZxzuKw>XzP&sr17-1|q4|?&b~noC7H1OYRb?bKT8Gfz`BgkTgD}Si z2CwIzrGz`=?XTn_aXrNPbwhEwceI6vjuxX^4B#d_o|V2XKg+Z_>F6r8@_}6f@dCC{ zx>_mRD6A3<@STs9Jd&QK_F{>lu+V({pUoD+t^bm<;7436Cb1e6Me=(a1YWa%0osd_ zAZqnOFrN=Ji=y^hBq%XcG@4|XaRHM(Re*x7hhh$C?8tT~0C3Z26%Rx1UwtWI!R#5F za2E>R{N5=^MtVU{{+E)2VUv{XnoE>|Pyo}tZ$)hd#&g?kHXxwnY$NqSK*yb3A=v8+ z^l91rAB=5P61Urz)C~^ywOt`Qw+!9>qZEOK2c&**3L}6)chK=U1&HjI#5BXuSsj>J zSJfA6!I*1T&I7eNUJ6b&6fQ?jLU;tN=CwiRz3lm7<9RRNX7S~SRd7535004m)C^&` z35+mF@`+Dn6*HvZ@60+8G1GDl(3}55!m9FPsIHZg;lpj!9 zuw*@n`irA+;jlO z1BPUKVkVXktoyZNf{>3fHy@qr4ZtDTa#bJfEArvT(t0*j?!J?XDD1+d24K=d>eor} zSErv|TasKn)`q~>dLGVSR8NDw{oWv8dtI#XyaD&m4yJXx-|L7_Ii}5xIANcQg4vpN zPY6+^cD}_+w29Mv;F%*bG0TU+Dk3WQYppwrzx9}1!WL%lY5 z!tMYYtwiX&*Ai>#BY8Fy`rf2?Gx0}?w3%UOtt=&y7>Ewi(Y}(xxJqW!g`L*rD4_To zlchg_euB)m)d6I_9*3N9D;LBRLCsqCPQc|T=iN9DL|d8Vn@(3#fydf6s(_MXu*@8^ z{1tFwu?)LI-1|#rh5PA!ND|cd(A496O~bX~1;%I$;m-k{KDAX*YNu7AyIN~SLK#WB zLS+cIwcl-srMm;ajMUPAVf}(Eu+eV-ntkF5H(13<$lI(D1 zFWoV2IzwkOf%Fr1g?!EWyNJKI8^l!dd(I@>g-758A;8)Sr4!6#ztg;hH~H8aloDHje66_N{FTR7$RJ_2G}V ztz#C&eW%l|Q3FoA9Y8Y&kF9KhM8~=vVkCXldiPF+TmgX38MJ_c&DR8YBwm-!I0XzY z{PUjgKl-QW!%2Db-V*Jp)K(E@1!9hqjyl_L>$Q}XWwev79r;t=0VrYbTi^l*oOc;V z+Siyxef1jxRJUVM#e>ZKQ5esOyogkx+b+suk$m6nBpGg<|5Y=36R_Uf^~O9uT6@-V zc7|=TiwfBexjx?FDb?DYCV48Yl3@>GVBRd_N;g5pG@Cqwhqz9Y$F=M= zT&d)66S*AaDB6}@ErYVTQuoF&udXnJ18Y<)I-U?_?r{bp`(gTe!?<}yae>AJ`3qLG z&vbLDa{__IzF6`kJRksNIds|X?y~RKgC8=MjEMQvH&pCM2U=K5)YJA{l++BRyJ9P_;^lC-yUA(dM@v z(4--Is&Xwk2j!N5QHgwe9&oM9n)X`FjW1;AGD_R%h|+X7<5=|t-JP%5$8pv*rsyF9EhQI zb`p?k1Hctwfe45zZ*p=-EFzJBQTBO38@a{CvM&(nO=-f7gSj?hmAUefVGNW7cC-8` z+7*=s3EH=hx`{o+=QG4exdIgD&L+LwHg26jGU6FF=7mqz{rkiTLFC37-J6_cwC@w+BaXu4#s{-t#%AxIO9lAi`Z&c+!qg1HucU zN!HG|R16PI632FGbx~t-)=*^e9coP#RZJyh3ywn#TF4_9x(2-MWN3Y<(eOaLi+kSU z4Iryc)U zW=35+_Smdk{I04LkgbF~WQ7*p1zJC_w>5PyRA zRM5^yP*k?n@TB}Oru{t4JMzgGacznvg#namS!=YEjJ?z*;GHcgCv{v?=#CqNnLmBX zbu4XMHq%to5iM`2Lt8h3K*O=#zp+oaI!P=}!|WEHAjttDN&U#HuLf;IuJI?YYXug$ zi^^n+#+6|-b>?%aT9?t!tVoq!1(m$`7Z&EtQ(N{S$-k7AC_Q0Dk^*E9z!i%3iKGr9 zk(KWP4-K~!gOhwLKwR^(!|L>MBV*hL5aK`iP8qQ{YgT|0%PZkhrpnZ6H*m4nAJ+NM z)+H;LBiUYYdemSM*k_+_Hfnxf!r-XK?>O-(_LJOH@cA0$>MWP^?tUxZ>_-}?t%grU z+Q*F*`7@3~pj*8pO~paNWT3pvER-bEjtTWO$OO`BnG{|#``j7qELF&!>I)_A=FMr* zM^~+XukSRg9HjDlTxv~&BB)r``S;Vf#g;{8GN08GmdtG5DgZ4&(!bj#QDArUO5)c6 zh^|*3Wq9*ntUQ`5-`$T4T!&G&`CuRAy?y)zQ`+Tig%U-w)AEkFx2J;K9fOFVyaDg* zS!RV=D5y!ta@6A#n;l8wJV7n~0o8z*9vc5XYCSPk&~cuz`7UW!xRsdQoG2GWxuUhD zNPN*Sh>$tyNyvRJvzTV79nPKXLvF(DWWiA2A|nm<4U=dHilwz3%O7h;f_{bb_n?+vqy!M9eR+vM<` zWEz!6ndy^Jd3f7SZGJmSiG_510wkrjcz=UyVX4rE#$4Aw!2I*LCb=0CE4K~ zVwTw4R7FzV&wgNK8ki@GJ5In9qNW~7M`IZl6?A71;}MPjdGG8sq-(VVkXX&y97Cv( z*t=%sDu=Bn=FG>w&6qJR8nNWNub?}C9vH-%-NgK^VOhVeM=hm@UMWubw}q)i1O!~g zrD1X7r730^=obRAqWp5NL7E%&S+!K;_BzV$x&teMww#U<(<7|RaW&)Lo=%X=&7Bj5 zJ!kT5#NWQYWf}4v0WZnbQfT*kerfSQ+rpsT%*@P?19A~21NTHdeJopP&+X(8`uTrf zj0E*0bG8lN`1IN#d-Zs=dE=&^6v0FOSb5n&csjSbhJc6tIPf zi6fe{{T+;~wqBS4m+ zu2V%b61c?ZAspAW-eFNvrx3n>iIyRHNF!o6x-zdNV{RjAW{Qj_V~$sC)Fg9!+w_~= z-))CS*X$P;lLQq7EFvUdSU`L5?C=BBvC70d_8!r^X+`y3xreiEhG*&TV7}ZO>(si; z(L53AsXr}7cjS!LCspvht7?Bt41~icAVnifSM7q}navl-ouX}Hu0Ql{3=sC z2&cw2hOX)QX>0vjr<8@Lf^RLHty5Yadg1o`s)FQVQ${RF zi(#Gi`&vSLEisVkn+VpMA=CIrTb^Hj=I`CgJ|V#pW@L(k0{m!3zsv8MS%x&Y$=#MD z1?7FXm2`@X5c;=@bZc#-nM%$PK|RgbVxZ(bL=Xg2aJXRJRZawW=n{U5bPg-Z_+ea!j%r$u>rU4E>$=f|&W_{Df)nnywq}E8hpI+6C<07VKd`_Z7AqCtz z0%mQ5ssDMgqoWY*{>aRP7lvZ`jk-l3waJkB=G`k+NpXJ)8Eh@Gto2hC_`%8oVh43x z&|Irm?PfSGO%GMS8;y*MFYd<~&6eBJ8)K!W{Xa{cGU~Q-@1ktVA1vJm3I45uSc0wn}OV$#=I(cS*drGJo5LkiV%(K9j&5y$wyr-OJ z494!`1I(5TE8PB-5M2d-M;owVbz7d0EiK%MOGuaJ6$w@i&Pc6 z*;SR#o97Jj_@@3*mx0}Jrck)M&A`m2-@wrwMfBHU2zG+f;a@^MUN}>~`MxK8#JCP!FWik0ds^#A0-7-4vi5Te_P973 zGSm*@-zH%lU8C5+u}6=$luBq3u3{7iEh`IKxruj%WH(wBvfHXN z=ht>M2s2NBnF;5Puj&RiM;?%W1!+CZiZ z?I6%pDYsj{aCj4=TyF(j4gz2hn>C>S9l~4fG0&*=Mjz65P{G^I293fzg+(5ClrtQ# zmmvOBo0+Q!kj2v1&p(u$UEra3L*T*tL->~;sxGw}MjqFxvJpZsXTYYvf-Ggj&Bb>D z<=)p*QFFL-2h_?^R<(t{n2p1Uiu)8Rj@epV0}V=YdZHh}6+|*m$8#SH-FJ|1&YgCC zw_pp8wLVkDs=^q>AYz`IKhG~(Phn_@+Um*Rd?n@NVKmkjtPv{^T7s!H<{p*+F;5^b zyt2zoGWJq8egw6mliM7_+D(0a>d!hiQcYZ{; zfQk7mA_M}Eg05!w{U#CkbWjLlDAD;e(hUOCylP4Qc7SgY%<(TF;?r>Se|k6>x|7!_T0=p9=Q!AfjXs z0i|q~GCc~saSibH$7${ z`Pn`4J9mENf~(P`NJDM3(wKXSjp_;Bc@CL$uqJ*Kcr8 z&+d6?kgpInqc3?dMr6zUMmw2~aVu-Sc(5lya_dI0H@n%bU=g~-5>^=dEqjlVposrwC>G)1V5#TL9yMBX zw(Iog$nfY9*Hk}}ub~)a!sj4NEc!V5-V9q|MubI984iXV&8fg3)NqC{=X>hm+fp2B zmGTW)7K$uc;@-%igA>ELTXSX!jezjFi{A!1s~%Y(X5Mln!%+&#Ma;9i(*3lmgLV8u z=C5DFl1UWQ+;EmrB>khs*U{2=38c`_1eq08=YZGkk~M}+A;$JX;Ed~1cp z(PQPLD3|{++yxWQHyVQ(I=dh}#MimvE6@U9Q_Tj;m&-PjIsW5`vnuWuOdBEbLW8}L zKJbMY9Pp64TG%-}5Y18??8)`g?8H?_WpRTT=U&Ov8@Md|8D}3E)xjpA-Kl^DQSwSJ z>r=@lB@KJ`*04!Ft#n~(jZ>Dj7(j&7$wd4PBcg4 zXDvUNhsxPvTDm8X?LQ`UQb)*WL&`v^=yFBT)A)e|KC*NMUwF3S=df)V4!S0XXU_Ez z;}6ds{jSDrzxd0l3z>zM?g`hWm?x;mV94y;mrT|FeEjKm1mH?9>(di$ba5DjHVj3O z#8h5g7>t_5^Ib7q`A>Y7Kt>&+;?Ub^qk;uTHc-E98>T8yl7D9N8dTM7hK5XPyaw=5 zd6GqK()3+c8w}~oqfs)8a{m_<{VDGR@AM!u*a}zwrl7vzuj5rh8bdC2CHuEzIobJ4 zUQMMbg`qHI8R#4t+U9@1MS6T3)6KX$LGXbK3=z2ayEgR>JvnVFvMr4=_PQ*`5fn>x z_z7&X5a8sg0zB`oSOvP5V|A-74t6jvm`ZI6EK35?-Ub5>#~~FVyP~K1SH%{deUJ|i zm%P<5=}uDFIfnH)nJHpA>rSf3Y=ze->H7nL0||zlNkQEHLC)V-#6=IzmCCwxj=U*7 zwLD*ueP=?NkDSI1W#zJehcPG7<9xaBO1F97-ox_aMRd-lMc=*o?lk-ZTQh{(sO3yQ zk-si2opmy}+6SVEpo+`|N&GHrRtBK6iY<2`+(swq1uwbm;JkaKMr zS)zgq^Z`lW%16kR5TdDrf=k9Xd1?EOG03so`%Ly^Bj%Ku2VAZRjs7yHv=qBYz!@;i zBpkU10$?X57FZZVp#GEC7-oHvx*4ApECVEnF>?xF$|QP0ya6H7+nXWMAV<7(j(MQR z*~R1Xfzq1o$AaZm?6mI#%Y(midV)d=4`a5dCNLjKSTxpd+j0M(ko=&qQC#97%hkvU zEw0-q-sgZs=vKR;9(}Fs0*w ziXn+7J1?5*aOT;rQDCmDF$UvQ=(liGMt~59Pse(?<%YcmP~%hLj(PNo?oudly+&nY zP&|&Wp0lzOt`HupwzZ%BBJK@H!R@PVe%yhjos4zrt^7)3QDbY(3pa+_-XG~{ z*a5>p1s;0weV-|%{;=I;sea=WNJU!C7=DZ7(h;RVONi+7y`&2CS4xqh=fW?}z~`wd zrkA*=kGJNA80XxQyuWY#g#|T8Q>E?EQAIua!4_ndIgYSXRd>37!g!Ezphu z*Ni=`xY@4^91pFRbmO8Re7}CkZB;FwhX?$BnhA^9*h-;f-95r1h}>P=xvhkQCXye| zboOD~vC^-OzGvft_>l(*^t^4HN00rdeFh8QNZ*PS+bL~wt?t|QrxOB>2Kg~j{(rcx z(T-|h7D%j1Yka8e>m_tEGkp3-l*)z$6qTq*4lbV~_7I`iQ*`};6WMcO%VAC(dgQvHy2x4R* z0Z|Ha7Jx%rk+liW_O+@Fq_ny}GpWPUJIeGcqUt2*#0;d+(Li%Tx^3;=)ch;cgVQI1 z#Eqe&R?%l!xaA9O9c{Swxw#HUOCmeef=E3LJlUxqLCRhwEQ?`TG*s@JSrP$MZugHf755b$*KTu=FL-LG0~%E-M7lam5UdMQ@iY(;KLOJS3}r z<=AF$;sZs(_Qj!2p~#U4wESSKaH!~x`d848f(w{ay1H*$n`TV`)K>iv>)u7REyU~U zNUx2y2wk90ABYB;x8IjhwGjv&*Q+%Rn|9Qd{Q)=Jrxsyr(%pcKlB9Zxw z?G;TWct8&Pkpkf1_@>8)r7g8u@wf30yp#NRXT_VAy+B#}IhECKZ(`PV+5xaQ=ps?cd@ui~w!}a^#e$VALq7uVG^ij_S6GHBXm8RFjMA=PI`J6-LO|qt1c%Ps}^~(T{XXyS| zHPZX6mq${98vMUSor}3W+YQs+PPU%>Z&}HEs_}AF9AxzB(kk*M;0K3mg$Km{0WDeN zc{QHA6@P^!7U9FmqOr5o3+z$!^6Ok4Vw2Z}5D@e@YPe7z-nXS#MIRGp8jYd_NIMO{ zNgrm&syQwJHhlV>V2dsMM5tGvJA*GU8Bd%BVNHI@o!9` zNuBu}3UYpmpUQ>azu>$LgWqu_R7%lABZ7lU2f zBFYA>N%IGjbGhGR)9h?b0TQ-+rHg-vLVmAg{Q!1*I{IH{KAF>69A!I&`Irr463ALN zbd^J^2j{Rypb#_ifvvifgnAq_0$T|vN}pI)f$y|?4=M&fT1{Mz--Dz$Ag96~c0vtf zK+mSO?o;zp-wJoA_d_}YT+pjnUcLP$wma>RNc4ljUm90h*yPIRDmKJO3-?hExs)E1 z4TO1E4p%iGWM`8vHiL2Bv4&v}a?o9T{N^pJ78Z7FxjQ|3dpTMfoOhWri)An^IWa%_ z=j&mVm2GK3!7A)R;JZN~KZpw73Q*bM+y;v;hTfKgGV?`TNiRqoQ9dnN#6$#t$t~o2 zHO;9@pU+|9U*Kpp`~@>>5#Ys)Djgeu3UqbJ$efe=7(itH?_w*$d2>!1UTNJT!`#*@ zmpmCeHYHbYeoe|KHE;}!qn&hOlzwQ=?WOji_g8VkMC*@<@Fr>&Wp+Ao9M4m_C!SoF zmt_W5ra9L!0)vme_si2`q^|VbtsFo)zz{SUuBt2umbZIG_Xf`OO5Y2EklZoDvOii< zNH#n4t+9WxF#oT!K|K9)x^8V&8G1UQ?D6L~LgSfb(^tK0&U@udR6=dms~De?#a!jw zJ_w+_i08oMO-@VV>pNF-6|2vm1NoD}h>LBRNZ$c+VbSwW%<-W8E$6k)DEdMvB%{WO zwm4f&+NLUG>ZK@z8%7-aC>9a(!oeZ$oWln(n~y!k_0oTsVqzzJJTNk4#_3~1^9-Xd z$yT{z$AQvf2MHJ30I` zL%|~J?}Sc(16$?4ZD(e>z;!u0<+Vy_9e{z>64s>dN}ZNjx*1CBHd8L8%CiL8c=p2H zbMS6&0f!Gpj%KQ2UZ)wLMRMiXw|n%{XTjcBqno>5Zg&y!ROT9PZUZ#s)y9@}noTRq z-=~Byf@f4!Nnjp5=9$I!y|1yYnfz%rxao*gmbl6lJYMy-a!8^r1DonhGxINJqteEGeYsyZfcC?FU7mMFzF6*)dl zXFc**OtlckxZ+e@j9INw2NltXrRdXI?}R*ir^YxG z8L!=Wro*l>8WFQ~MIfpTL@u1ScYZZ@$-x!C-Gzim zX6Umm#!{;Jj36`J8rP%xqY>B;8a{4Rg5$2#CQU}eA4&ki-0Q=c*6Ni*GeLW)nC6pl+q-i!2^=xJnT}svNLIOYC}&AtdCMM-Tpnn zS%|;Td~hO&oI9;_{&b+G+gq`rFCu2TPGA*qDvjBs%PXnKtXX-$WSGfQzyq*buw zIpfliC+rSkdb)4u2TH5>@g3mU2zG~EkZ*$Lhr#%!_yv#IExCWFufvH=6B8(}^&sl8)k&BpBSS#OT z&|gAJl$~NI31XLn=0Ez(N0n+!U{GLsCqX-vbPG@GF5bDxjH0c%f`g|=F@%;ok0wlj z{z!bavKo!>z=WzRch{D3DV7J6;hs4eKW<(>CmnB`ov5sr zX{gE(9vEc+7J1;AJ#+|;a_Do17$>|Xh|}dxH7#V63e(~OwZW3%s)w9#O_QA2!Der; zFxV7J%(U$(CKsUb8O{>dLBjVxrou=KtOY=7nN4Y%^YVc*%$NF3V!UZ7>&&GHlTZSnYLKq6 zkU$#Xr1fUj(`{_7M0gl98K-S)@QKqm4#hx~C&UoWeGjnDQ}=vjd!4`*^;D7b2vWO0N#r6w@*#5m zAe%z6d`m~ol%uxptq5!d9`rK#a!piCA%DALjju9W#}$S!?SRH>ZVpqh8kVZ5WT}uA z!@x>fDZ$oka3U(5+4Spe)^2Fz@B>K#C{89}tiROwlI?eKKn*kRu5M=iq*j8@E1kTk zf(nslhC7(Wm^Bdg9~s8HEaF;6l8lEMjreh1w~fB$SUIc2q|J}p2I1_IjjqJ(2K;^c z?wEt_taCbHkvLrgeR!-}#wk8uGb&S;M|?ph9M@bB1JFS@*i7Ou8NBeltE(GveNF?DDl`=vXEE-q`2Z-DlnPy>yk>Nax7QeP0HSWRzbT zhI)834)M1WX=(%X5Zu)#t^;yGIUGB4p?`XYRyeYjGpU7X7j}LAACCT`hOp~w^kmwz z_SI~&!$bnGIHv0so4tvVZy1y4=d?*FVyT2JDUSA*;h?-OIFGQzZo<6AdQl1b zf82EZNLo5eLA>a_N-t78DA*9$VwwX$+9jduzY_u&X~TmiYKFaQ>qPL6ZJ(2K_;mc6 zAB6Uve+MYiU8sb0fb`--M3PQ8HbV%e6X;`2&ec0ZV&>?-xaGMm%C>7&CkX)3N1L}u zs8J1tksAXxJmNIjlbe&DXq{6EW{n!HK)QrJ>r8=|= zan6u1J)y;;Mji!<=jyqxPAk2JtU^Dni8U50ztq>cC4K^*A_P;56TKtk%8TE&)OX}= z<%xW(ie(0wSIA;Bsg-p>TGqZfH#0T<_ z(ZJ;0hS&?|9kxK0fD)~||0QzRJ=b^a0p{{f6UBnmzy?Mj+xqXT~t6BztfCf z)p^0b%W7m>C;DL7$KtH|9(cj&(-I&TpGQt6OFM8hxOx+Qmc|!Cmr9;Jwc#&{df>@a zwoUj-Onh3#N~X;rnm`KTes-Py_Ko~>_#SGbrQue@XLt@xpC6}7vK9?%lH7?UW@Vg{ z^i(v%unH}u#daCwf5I1s^~Ry%FC}%we*i3jcH{-=E*=Pqe{?o*aHxKU@k9!01 z^Y4FtF(#zYZ(lPP|HAl)DEqi!CDg{K`zej zH`(V;$Ko!V@0Lsu?ZraBzs^1{K&r0mYJJh7SW2|aDTm|}L|`Y;43cn%&LJ(p-=*+Y zHt#HpOpzpS%-Uiy^jwWS3h5T2Rb{cBRPxe0_caMrmt69DwJt>2LUONF4#-|=-%UpB)FGRo z^)Npe;3Owy#6Cd+v_G!E7kdLaU?o~9D#{E;3&CHsqdz_+9-k!IQQmO}F8%_RZgrx}s@qOcIg%SGM z^q6V07JbIl-fqE_4Ki^_?FG2}d9GmJcb0gyfHTfCwjT3|(hqh)hS9+9-D zRt@~j=I=Iqxf|dlfBlo6L|zPcgfR|mWCPJ+yMF)Xj7t5%rBZsBhsYw_zl-5qKP&1Oj5 zv(~v^-Kya5JyUj2j+B)&_EDQ(#SA-g1$xor%8WwL8p1d&|41`c9L#uO$89h;I$4Fc z{iZPBXEbr~wXL?u%m*EabX%Noq1881BVXP6=1xSHd=u}_=3UG6pdw14r|v*UFAkA8 z_i~&Mh-h|!jQyk>Fi_4yeVM&$0($uuLIDJTR)6chlc{$?Z2vX7*nYvdUKNPf@Gs`~ zW0}2?MG>p8L+#HJ-A>^@z--Mi)aiZ{M9yN-dNIt-F(#iOm4sj@DX*=&@=9 z9_4ewMIPDAhgePq7mZ>a^=J?t$&J#t(b`=ft?|E$QNSQPC&}A!=?HTkJ|${GsXtH) zN~BCxwrXy*Yir1jj0|uPIA9VXyVSGh(DkY$v@r5c4u-}ivP9xAT_`=>ZobIT9`mh&9SdiIY{&R8RLx!Ie z)v{0Ycu>@pFq#NN+h113)Axi}qZEM6(?=TNiH=789{8`!H2-WQo3Zh9(Obd#d1iTV zMR_(oLDJ67MvtBm3tt0mM^#Hge{7O@69?Eo5}9)qaX3AmkBuQq{;onOTiAtO%HLe>JIemLh)2eS@z2S{^!Gp222}> z7FH*&DvV)5pPKB@-*bs^#tJUC$$qNyv}U=wh_PJSWqU>Qj@rJ}WxmUgnj+u*+NU)~TepP)PW|J-gC4P?ZE0Q5JQc;x_Y>4lu>)=kf;SYwPP*}$ z^(pKH;4zvG#+Y9>_fp`uo>I1($yETM=eLbt*w~n0oa`zmCDBDPUb-&AI1$=KXx!y~ z-CHI0wN&XaZX=x&%m9dw_OtZaTqgs{6u~(sLcb~81p~Xlr0g{>#GJw(c{Ez1z@XZK z@Td}x_5y3al^2s~9^>IgiB^^%Ipu4CO`W0jD-V(xivwjNeSw;GDj6{Bi~$0lP} zVkWMvEB8qBNJh_MiA^+IML23jFTCq|Dn^o99(h93Z#bk;b&H5?G~c5 zwlP?ZHZ=&6&rH$gw`dn`C#%K3k|2_FwghpD%O}!B?`ZtJ&8t@Nnw@n_L{fP^_m|0Tnneoe=0Mvwtpo z0T(yPTGHkFQB=_fl)X@*O%;MN_%73I3UKv0m+zYo42VClAzjX5<`7;;rVSdG<>mRU zH1-(-{~)bWtYPWQ@e9s?5D+Csx^$8s=Yf`om$b%i0cQx85iZjT=Nix3zL*%=j{dE|Rn#^ja_7YhA9t3H@P142WsKQA6PWFiMgIcs6h z;GHvrv;~$o3*9D9eo;kX4`cI$!ANx}a7rdXtj@}RtuZA!K>SIgBzs$Y1+H*1Iana& z<*vS_couAeEoWr~H4cnlPj(M)0TGED?i51`J=sQqv6gGPtRqBn#}uz&WlW-Xug$SC z2gA;6BO;$QjmaB}RsW{}8Jfx{)$S53O0@s^=-mhmcXPoUgp$J`;f!JcEL}vk-=&M5 zs)?NYTD>ifXTe=h`NWj^U;es(Vqo(BD(R}NF6n04Cg)gUHb^%2+1zIB$oC@D2WuWV zleuhB?oU9!5x(E(RmIze#6ZP&MCruPG`5QnE(;!vwnbPE6XsHJQkl)pfb6JHc`pb{ zbl;pE-xL#Ew#7u`01AX2VtZYNUQA*;V47b7!y)|CP*f;nGN9a*%r;sp^E0BZ|hMc3J4ZSG;>&$MTqt4_j@vf zja70_UCLw^Ev%CYY}=`ooF>aL5AOWB@4akpvRW1$shZyBhE?U!3!pt->6)?otE2KRtn1Afz7-7_xB>EKAX~MG_5bt-D z`NeR0Ldf%xt5u@lxW!aj1gdz6w2c7}H?|CkVyf|_egy?ht-eIBaywsaUS|QG@Z@~g zm%*VpC|HHUv&eNGMq{p1vIEWFljxxDLFQ&xYGn#frxqi+)dI> zcu9Uf!_ESk?G(p}o7(K-F0acDfUiNJfHy^*s0w8!>q=rRjL{Fe7()S4xmkKw?Icb! znr$@{j3;I7P&btB9YmyA<_X6hBODBxr(W;m%?U#7+vP;R7{3+Fx(0Zo?@Jtid`mM) z%}&Qp54&nIup&#!P_dfcpdr4mDx>IDm(bQ5_LYhOm-mZwMcP;g*AIdlNk~#FNJz~1 zaehS4Lg~)PPZggGjE0lzw>TwA5wyvOmbxwnhL##_irm_)QeP(QXa)*jOtOLLkv!42 z0}gOqr2mdPYvS3bo*7syh@r zz>4L_gOltI=Q(qS@$GcD_EKsWp%ld65QDa@DpP3(o#}SM2Lo-7fm5QDeDAsl5dG`BX3f3UJ%p94DUxGlSMbiARWyDmQ>ja)OKit6q2_C-qNacyVB_yb9Dt}Zqg=4 zjAvKq2DVxpGGvi=OWH@;?p>iH#dB=loie9p*f_!FXm1Mg|-mH58$>Z@5o@>A*- z@9mTokMLp%NQnHt>jRUMpM58&8Si+{a3Cj>Mz1$c~E1LTg)25&J%DvBSblDa1-dww~xOX)hVb396GR|Yz=+;=)w;sv=9@m-ZNx`G4RQr!c9 z&Jod-0)|-H??dGeqRCxgWJJ{^h;pK^kr6v&&?p`qC5LpzVY<3e9(h^>dtO{7XvGNF z0N*~p;LJw)Y!o$)xA8tPD$Z~IMvpFm8*znw*gt=6H=>%CDDV?uaFk3s#^}7`7AXEP zkvYyLDuNkmk)`1?PrRblX(YG*7yD$c3(d{kO?p=CmHcpMEFzWhUVej9t7D_t0xr3k z?bo%D#rcE}YD6rNwb8K_BKuf}Rmmc}*Bel9{}C^dsPEaK5SZg%QI7*osT!o=3I~$Y z=+}reWf)8BK2hTvbIL{XYF+n>wV%%T{A?DD>s*YCJ{~*U;pR`NK4{Q4uEJVqPl182 zgeCXe992PU2KSODs0Q~5Kgtt&l#%H_8w5@bOk{BovFXB%bIJ&jk3m@SN^O zN!$q{Hhpg-<)6^m7YVUQF=uh@8>{Pzc8)7!RioKP!j9vgZKaWY7Z_XZ2zcwh}sFBoy_b?y3 zn+$>A2Yo*@9%Qt6WTTk5cT5dtbhHZAuAup~XqsVBg~eI_N#8^tFS=_@r;Tp!%;G&B z+XngsMRSO%jk7>0j(B&EZI1X`#!-UCc&CvP+m>B59}Dzx)59`@(ASLgNeJqn$|IW zAF2K#@`i*TGUdEeGRg<~AGo}w;`oFZLLzuX$r(`wxjLWbMd5rM>>ux#^yyw9c>Bq3a7UN5^3%NYfq|CO;UH;gST0Wac?Tw}+k{Br8mrNa%~ z-f$P*bjqdZ_*G=3S4$3M5^^SD+~ceYS{>T7nCC9_Fkr>m*&IcsrrSBDyEz@v^rX?* zDtJXq7ED^UU4CIn?0>M~!>uUq5beIBdoL15j+`5(aaAPp?T|s`6p!MGTzD%eOL3ft zMo}&C@XxG;GF^XMrt?^jcGUpK$Q`{tn7Qe z2n3#jWtGPnbhs($?Wg0mH4=b9;TVchKGfWDCF~`Z6og@yycg!^BxlCAaR<05I?PBC z9Xn%hT2n5)U;mKR6QR1OyJ;3@7j5RPKR@zEoQ2PsI*o5#DGF+d>B1SAfCFV&`r$5A z<4onoB<4W|;M0st3MpW){!R@`D{5Y4d&jWCq`A4Fs*)aiYfnoyysfbL7IMdX8E|;~ zvJ7GbB9vOx$%$0G713i;a2GgS`NG_Xnn6H6?-K$2;6uzPp6dXiV)UpUftDjxBf=r) zZx9W>W`4gi`RCSv^6rs6z}jdcAl>2_QLg{R;X7Ky;TDNDzwWB_rCaq{<70_OS-W8k z!@WVCXe;HbvMhq8bdZ#74!0sFjUk9ha@3eiht(Lfj}r*P-f8s5mdW&!z-rrIUY^K? z`CY7}zH0go8Py)5#bZ#fwx=S^wlxnNl2&IcKrZ<8d8E0FP3_s2YZI8C&Aix~elkvl zGTjx(OVEyPJsA%?K6{WsjqGT(4<-`XK zw*cHrhNNw<`J9R{%96Ic2L@!VuZX9MdWO~ zQdPhi0_MQSpxYX#&Tnzk1t*Id8$aFyx)EL-@^IxO#|cGIdN(CTHncz!P}7-_#doSB zQFNQJ&*3KK`j(_l8b<(uVd}mv1prNtLL}cskF^hJm+9`+r{KZMM({wz0jos7xkRC{ z6M@&FbifzR&rCe~-{U=7V%!&G_;}^2vUmmYls5O)6Jsy8=N)X8?qV!xK^Tg?CRKAq zx~ok|(pUUtjqxo!tFd9^!{e-?wNFuHoqWSWz zUS^3i|1Z2zj3#(yU_DKqWxD0As;^MuHCxL2&COOtxuop0$zGJM9GNQl*SQqV$X5x3 z!<|(|aG?;oLbv_WoytMH03$xsP=h0hXBy|_*|;#B-xj*x5aF6an)SsF79s9Fe%IuB zU0%F;*S%4iH|ssS`h6|+f zDl6q^*vlV~2@?vav3{fdvXSHG5jJFp%x}bKE4HCHr!P~P#->c1J<>HbKSVY7U$OAm z3S{o_ph9Jxa)??;F7Y`Ku%l>8puct8d;efauZe@-wDtrjYehZj0e0BW8b*SR`9YXU z*cUtRwy-AyXIA!JX7bth3SrkUc4{G9VBhF1G4|Ul$tXb(Cxl0Nop1D*D>_Cvgdyr% z!Y%7@^B$wzivSbcr#c^}2Cp1_;IvKF2LJofQ;1huiT43UAWvVxZ~kpH%s%nn%JyMZ z1{5rif;mNyvhG@f#bIf!Sw!@p=nSLVOR2X~YU`^<)In>s#d;QlN0IlG!ANHq`TN!k zvjd9O+^xh@7;8)|H*jasR!YknCQ4KnT7zir_42gX%ksC4z5rxuQDu?{3JiqBP8}bn zZ}Mpuv~6abnuwmYs4Te*bzOf=tJxk#2U}cLh_CALNO2MW6;Jr5D07_HM>phlWiC?A zAKvd{XZ+FX%x%pfHyTYTGIthiFi?0lB~_S!JbTD>sr#mb1McUr>*GK{8O+*#-_@Q z8gR8=C|5W3@`raTR?!|&7n`w9>nqsID3Isj ztW`_P2u#UvDSIlx)P+Wk62zWo1*FRdG#*!jE2+Y}_!1MIyFsjgW%jIQnAFpW^XnP4 zztaf~z~q+s$gmR;NjGXxjuQ#QZ+@JhC)k!|2HmNeDMjXgWMD`^&(W!5?DC))|2na@ z2`or(@q5!4JT?IY`9%dC@Eb*E;^-WCe-d?ysNyrZ1L_}LPdsXeO-wz2g-V83lSB$%a`Y6 z?<&l)0+m3#g4EF5in4}}f+q@+K9zKDd;hHpDnsED7?-$Dv`0U)0CG(_pi{ePa$A4U zOSgHgv3H%E`*_=_W8$B{ZRD}~;K;b9bqKI$bK%~H<-VzF1tlQ1QxOY|+6n_3%<3!} zksg(@umK%ztjM)a`JZIu2G)}%VcDiC6=_`S7`cqPCCs>e_l9#0<&{P{1?FYp^($T7 zdjsHT=sVGn>r`BTeN?YN*qPKLa$f&8@Z0;8DghP*T^eFhMeip7J3z$0xouO5lcq*N z-xQXG081-sTg}|5%}3=RaS)V0h(lA2v6L1{jax#aZLH}+Tr9HS1!#}os28Y%keI83 z_}*ndwo7daM^G6Oly61FsWd0p3oNJOLm@Fv>ao(LB)^S-d$LSP!+D z%_42JLkHBQ!(TLKy>x)~9y||)yCbz=U>ZQI-Enn18m+nhGKB3O1(wyv%pNZC!kj{> zz-c0y*dYWsdy0{RL6+=0P8BX5K^~qe3#ACs(DNQKvuDxR$iIRABq@Qa6_|+QmlE%` zZzeZ8m-H+0 zd6Hz5DJRbndjtq(NT-lblZ0u{Z0UJeuSP>OiJa6Uz=E`>E7@gJ9xPvGfiO{o|F+09 z{{W(BV%BD!dgfsrg6^A)aPiqBokHoJgX#PTAmU>kaij1s=r2^v$ZpFThn62RP272k zo>Ve0Sy!1c6>J|h&;XOJeXxj=Q8%0&=>XEnyJk}^w0}v^gz=in>BdL>RS!dvy85sv zSh`hNca?*$qt3Bk*2VP|F%?nwmNn16|JE*Wc&f{FW}J7ZTGhY(V#qF zphm!dcTN~dWypGMS$K&2=_1qc{P{J<(vl#Y@ayU%SXs9K67s1v1tF7KWP@Z8d^)20 z@sE9u&1nl}Hd3=w@O%}w^>$)Dxtfugx3Fz}fFA31mJ8Zk+Y9 zWWPC{C#Oqtg}T+z5Ybf7 zEnFP@v;Gl%s$?iQ53UFJF;r?*1D%n)A1++_^Wos{c%n)J28NrQF}PMf{xCU+{3-J? zB4)}fm7o$m-cA7g6z)_8Et&MRqWVws{+96q86uJl_kPALb^#OG&^Q6qT8KxZYEM}(@H!hOcP1sCi9PX|ojKhS*fuiS-wj(blg%9dTnh&ug5Iy;&^~W4aEtf&d>^xVM zS7qQb25{ce>WE$(aZUP2;seOo`K)&MX!BR8_S@}n+Q9HWLIRr6SSK8M5h^4yxERi+ z`Dgy*JCr9)R@wxWJ#QluL+BA=aIk%9L$2Q-HDh0~bClkqfnffI`J-%r(5g|(d{2LN zLCva9VmHZ42Ktv2axVx28%(ih={kDcwICb4*>gw^cK1Dh6#<3tB-7b`^sn7b**-p+ zcyZzWoJ6F!3dP;T4d!=z0**APHvLq&Gg=}lb{>*VmPdhfk!eX)zo1RYEOmut$Lc(Z{FRwLSCdo1(*+5%q4EI zxjms-N#KBLB5Z7DEDkqO5Z9m&JKnao6djb%>e|#6sa)PkYGzYEo*7++scAJW^vInv z$*Kk3f&)*9T*I7Z6cKs+g18PjLsUgaAp24DxvYJJPQG-9pGeC?7yhqu>eFP&Nr(y8 z7nD2)1L(5)q#fCgf;d{dhu%Q+!haNrsQH9Cwky)t`o*zIyQwq0fSJbHb+V8@r%!+x zNjup9XM`QO)v^P)XyH2Y*i`>#CH?{0_)(*pj1HfJ3T*vCW-FBetKb2L{cufn^cd}N z)M1WaJh`6XdXAE0W`2ec8*@L4WGntK5)kEJnw_0Gmb z6r*C;CW*Z%oq7#a5wy@?@=s9_Hvu%82h@!3RHFCAa6QEBl$L}h4mDnxk(nt>L=^oF z7#9Tm6GN%4isZX?mau~;dkdqOO}WYRK3W;7>H%n>2Rd~?Mas3C8EF`|F;H$85Sh?ae4@^+z) z_X#yW+rQ`P2wxMQ{S`hE^1jS2uK!igFDB{?0zInvGk-zNL|u^EOqeQKbU9aKv8m2tiaSjA2onn31U>X>9@;~fMMj+)o(w>BOd>}|u0;T-o5$1~%UfJ<$1Ge51eSzz8(rMIx!Hr6 zsT01Z@2>`zo+c)#4L8!lgbR|6Y+U1#Wd_u$o|}rK<2D&W3%$Cg@D-n`;Z1Vo@5Ot0 z{5_Q|wI#koJ)Or2bPz;4!b*TWne_ou!wZ)czQD)T3DK;-j%V(K@&Q@b?Ag{+` zvS0Y28?@1*-}776YU@dkNWp>#ODH%?RO$KzjvaT+htXu7f*c)cWG%(rTkFgYH>nF% zISvebivoaW-y8=Swlxw0_XrI_iG-{uUFd7yIAk9Z-5CC%cN-(fa!>&n3wTaiGUF+Zey{ z2q$Yu1Tw~zv(f(^J`pW~y6BO`D`AuGb}FyfdYyDu`4^-kGNYBOcq$w6x=YBkPhD9+ zDXLI^bd{9UB}(t4ppYjb`yQvUv3~{A%{{N%%()GuvhKNVmXw$!cgu#qYR`x+Ok}sL zyx5#4*3yU>9EcRu9=4zefRW~dW9O=I`+ESOv>6?|0?m4R^C!XIv>2;S&lc1+`CMjN zjKO@UCsTlFf z6;Lvtg*Q}29=)Pz@h)<2Apom{se+K2{{&KAn6ZHyHT$sBH!ShUK}ch^ADhgbHgLg< z^!o7j!rHiFnmXTdDg=k~zOza}6s3HF&~z)(&Vj%@>3;|uav5rv7ZLUr?@#K(tH*Ko zNi7;(Jv)sw`*)SjXfAhw%kI38=CR!OlP+*+>%j`2SeE(7tk~;`s^klFg;Y zdx^_@_vA-=BfA~tb$k(1RBFckh;mz1eaYLR)no~wU#iHNcu4nf39@|lFNMi6Y(A@U z3U;w>FH$!=7F(~f>nty`?9UBtL1~bY0yY)wNGf-s8ADEofp(edMI!TwToW2$%qLxo z7Sc0+?9EG@M=z_7GO7jKSt5)%D;u7TwiiADy?c$B!^wk>nYybPMlcVRd^oUh=|j}j z;h3t5%(Mc7qYe7kpnkjQmjv+PVL;^1?Il~ebFcvCtU8B_|Ml&>&B{RNF-V(3`i}|@ zY~b2-s7jvd@2v5bnANTRe_3!Et? zAWiGtg_+Xn?Y)&=nw}3RL}grDXl!bm0WLP7=Kw;Pl&oAYdr5ey#-90)sXaoav#e#ThTOH&Ct_Eoqz1I+(&Q*+uBjI!brIWf^8#a3?DAYfOXa4juJt&1)l9=`-?6PUg^#=wiS8uPPW zt6{QR1L5}S?aAAZ_f~|agVM|D$gc$Eo*pIST5SUOT};9`;aE=IX)d#{r1%-LN62n@ zK%knd8x9?l^Iq*m0WTa8ih>@Rp?p*SY33B~>63;kwz z=e&N^#V1>C`%7yAQb%0hm_}B956BW8hs zW#Vw}Q=_MN*aNy!;4b)QWDxjiNA8)DlIk@|kRNIrXg1L1<*c7_7<*pZJye`5I*pAk z^U5sezDtS1y5+WBPUm^)(x9a9?9f^BF}#0SwN7k9t`JgqFYrU$$=6KKt+@8a+flMm zGni{zM_hd*qlD3N=s9WACkb*t^#BisCnhbM{Rh?m-M&5iwRe{eoi zrK3URv5H02);d(_TPrAcN>cujj?qs)3%j2+w;|y?M?iJ2v1o_9oB?80r zkbR(-t%M+Pv)T!y{_!YW;LIb7(B8<9aaW&i111@%7n2ApnlBa75kx_Uw(DOH6$q*k zZC0%KWBwu{ZeLI7!BKEi`Lm^W_(&;Eu1FXj^?oIil3n_27LFy-GxRUE?4=0flQw}E zMru5IDb!)+`VVY$Hcl?vV>G0HS8rev3ytj$kqBU`s}k_%j34ufhvgaXI@S=4tZqoG zO|lf)+k=}7Cc#x5{X1Cv_`YByHnVGrgoEhGje!0(oU8V}fUow-1kIn>*+FwfSy=i)E|5rY*;(+I5 z8!Lp{6QP#xX>@VqDf%i?forN8JG&dCF?=<#-}rucb{8-#!-0If0v2T?%qM@G8?m&* zu<{>AZp(oS3~>AeobvoG?^u>%tD(n&g5zelQcd&lvJnoLec~3YPvN%zcPR6dUL{6T z^~&Hr*0ch(WBAfeBLyOuHR{V{DdZHtlJi&j9}$s`eKKU|(5Q5;Qsh6X1`Aq-`=uZF zE9cWHJ~*;laZ$_09CtC(e)0LpTLzZa2Z5~Ua6DzRHy+O<`S52P*b22Ll~epflC_rX z$_m~p*@8;Rh9jn5sjZgEuq=pL{9H|4*Ns6B->PkMN~g;AnGT9YWh}Za_!i7SC>H%p zNz+zIS0H0QQsE%Bx`giO}LUIg8#7sB~yX^Rjk6Wen1K zQEkrIUf(10pZJwrb2%>$ndp~lE>bP}0#q(UlI;(S&%Nq5K2IRT6Qnt5ZBs=l2S>;w zTb)vo!OvvJ^7y}beW-1XnTpog45l}C7 zz7{@;1(bGAn&7PCw;Hy8UXS?Me!@cBqV&T8wH`hQwrTq|ywS}(S@Y$}c&j`nkjzNeL~t&#ZZZ|AbdK&Wy1C1561_u?O3m| zYVA;Co8n`(P^?v+Wh_}QMb2^jFvT{~;G2OX?d3H<0WHZ58MH>1{yk?PWpH%hg&Y9m z>9xx(-DimLv|hWkH~tjcqcJdsisKBpI9>cSjon@%A8mIK)+GKCwt3K;Gaam$uUieU zVAClD1SkmL0r$kLP+UJv=keQH)#@Tk{84`NJZ>zrEEFh48mTRoC7eVT02WqiE?DF{ zyhta|D>!>p>>@@%`)CjhCHg!1cxeRPlU_$nTxEWWM@)sYjNLu1d>O{x^f>H=gx{CP z{(|4s0b#>Zz{dye92RoJF%kce#<27-X7a>)KUkxRz6x_mGR|RU!;9_SUEF2CYRFhq z*avUxDLu95og~aO5IO=zcNOy`B+g?aKECZJmaQ`aUSf{wy}AkJk9ZHr^#U;y9Oq%2$$iO-R++;zFye=>3)uToP&+!}pO}4Woj<$FDJ&3D zXD(1R&kF=4#2~6O9`?SVvV!V8uBkJ`q3*M_c#sp(nm?(@iU_5_$Ws`{LBjerFc|2I z^kx;7pa;C3_q6r`Pm!(^K8o0tt~B;EY+-Dd0mVHH=5~AcRfv;$@!XXsj;xWZ11G*v zP|fxI45jI5Q?V#5uXEQa+3WL`q)b8SV^Ov`5Au~vTBLwY5HIKmR)>ax^HV-`vxd-} zCr(j!Br}i|S;~0^nM|2P5N&NESG+7}x7kAZRH5HB;||%T%&FYdea~AR6{4O!cXlH3 zwEnzNNf)$TFx-{w#E27bMp%QGA%%h;u{X}B3o11JE^U>>CZNAZeZia`WKv|&AL+1T;-t9vlI<>!N2ypQz<996nx;Z6t)@Ee#Wr#f<;UB z?7KzS?K9<-tJHDbs&H@2u5}{%7JJ&k2e_9O`b(qXAvlC7PgJT=a4QHtI(|m@XtOQJ zoyzIn!*TsYJHP!7#j(Kk-iDqeVtylm&8@abyBBIP8N&?0lhlnDP?kz816=T(3`43u zsKinJo*%p@RA_jpoMy?*t{GrQk4E=H96-DE^yP4xM;M{Gnz2`BFYK(CYcYA@&*haJ z>mnq{Savvw&yQ@mp+5aqtD|$14Xo1k)r#1XcZ3z%L(7*<^f4&Sk{e>@C=A=lD0)tt}mQt1>4lJ&ghRd#H$Q4RWiXN%aK7nf6T6nh8AYs+yZ7hu<*RI@DPc~LeWzJ;55;XU#b?}Xx>bLA|!LtL7VI_*sSSh zYVy0w8&~cPY-Gkzv4`nmVi(t*JYQ5VhJh`$GQLV9hwUBMPCm#~HV^Z~uMksK^sPt^ z@x#VC63OArhXBmilCBT-+*3zyPZB5!i`r=Ef=&SF zv)E-PX73r2_mcpzx|>p|SS=D0h)y7*9;Ru4;b1gkS`OoyrM^d8R!C^{_K3;`mtSUC zNUqmR5AZhm1eua95u)_U{}WWgYgq>kl0FQ2SwrjZCax7pv>CIiCIt=`;K~Q`q;C4$ zqe?u6JPVBMiR7l0baW4N06Vuv3bJlc6mrU3q*RUCzv9(t(mv^sC_f|liZ%LrNHs}5 z7JVu1A{ZEwsj1TZWT|Q!^6C zrNK+GExJZ&@%PqCXc!z6BI^)${Rl?L>MWyHO=;3pCqBZhB?2A6@!V4ntz{pS)G<%` ze;?|iMV+`c6Qi7MgEsB<^1O;luNstYQ>Q$3D$Ok5)Z2sn6s1ptmDQI%8%Yk_xW@IX z8an}to^oEv4xuBu+2UD-7s%tPN^X*wKzMD|i(NY6W`D*@k3l;%eZiOIdtQL8yv0#L zMLqTR?=PsQSo<4 zqr0jnF7!W^$*5xIxE&HMruiv-=|}RIV9LKOPJ9UP%eB|lJ3kYjyFQq2L2+9o16Kq< zn5{D(C?qjY+wY;Tl?8*LYxR(LDcmI&MuEn^A|)OiH>ED{ALFG#)VKgO^&U3|yZ|KQ zm*ih-n>zs=qlRT;zpQxByy}S^pJ@Og>F7}+O^XZf&Xi1?z&E=GZB|p1veL!OGESRAuu62Yb0zZExTY+UF zKT$aXb2)`%;;%tytys24Yeb?$$-o%zFDtGVW*JdnCN@>RnyX!`4=}U(yJS_3DOCa6lqe?oIjLQsvDR#IG$6f<;lx#=K%* zuj3C0XX*E6iDmP=mC*r@D*1BRG5)mi%^G1k<)j{tZ*J9UqWcpO&Vf=KZ^MElz`dg{ zLhAy34r$f~xzb4Kd;aI*2~=5t;<_R+W@ZSSr4EbUc?v@i`gC)8Qny?dAhE=%;}eh& zCkb1FJ@dfXg^Z7S?({mBVOen(ne0QBcU^qqjGik7eiWgu=eln-n&dndAZoqe3+=}( zii1z3+<^&oy_AZWhRjDgwIc-Y)ceV8o069T-%}uk4os$7?8dcodQNXY%VA-5kxk6j zBR9w9#6+0>zaK9W@GP{v#!Bso^jVjNvL#*uMOk~F8)<=gk)F#0{d71*KQia3r>i7+ z_V6rkr0V<=I{9T`Q)ASkG}7i)g(Gt`_Nky> z_F7KRERt)Vs|U5^Y`FWFIe}hGbIBx;)iOoTK&$c_x4DP8Ykf2BWR`}a@N9xe)E|S} zNG@s+P-yXH_n;EJ-gH#Q$%X_tA+)X!Gv&D_p-!dE^O}4ss^h!atJmR4>;h(-+*{Zj z42}{&o~{Z>8FsW9@Nlx;BYTbE(Uodz z%;iXp-iDSs3fhe8_S(ua&=>ufe`E$B$D|fXLL{u4vgrdwaxDsJNU1&xOvs>4Q@+su zQ7-}$D03WQtc(dH7p6a6mzCA`o;-#1bNEO;gfvJ5(fMj|so|?m&9@rV@dApWeCe&U z*2&%8lmDG5h9hkQl=5&S4|757NB32-NgE`urb&tli|6&nCvsk(&ejf>V(gZ~*y%#2 zDfSZ1KRUh=FUcX5%nPEzA|^od+Pt26sKmIzic~aOM7tk1T-0$ac1H18(AuLYiBSk&{8y}$s3D4s zfl66Mwb9+QYw*2P$v)^O+s@IObDbemV+=xir&^mim~H5S{yPv`{e(8rp{F{4Jn1D- zFb2+897qhBaCfSst_?$rN|E`=jQwz93=?}FI%kZO{b zn)!ibzD|o&pBR@bIqWIKS z$)C6VhNo0r0I?+tVQm~83;-NknKG@xbB(QGWa@vT1_Dog`s-DD#YSAeyf)=t@L2mf zEh3E~`NqGg$w59wyS(ANroiuRgebd^bDZWgyFggH#(0?+1InkB2NN;5_U6e~QbQxZ z#bj8Rz61^GzX-jP|Ep!94Q$7Dg>#Tnt_F?;3(=>wIJt}Qz>_fEU`N@2S+ba!<$=VVU)y(BCY*Vnks79}HR`RS;&f0e;Kf90`zTrf5Y| zL^}~0Gm~C{miR05=H-L%I+aMk+08~$nY|ys+mY#~{OB`?GRp}^bX=PV8sQt|R+8mr zPVkgJ%VGCYe3*T)-))-6pmf@1m>hHgb_1h8j^XH`HKyE^^lK6DW^! z(P2y?F~FmE^}(anhw!GjPPO&V?STYMEEvpRv&mFsTXppH_#XvkUsrLupTxX$F=C>$=*~umlxkF>>gw>)k!l zF_lgQRXfREdGc?l33mc@8L5GI*F9_*LXAl9u?qz#J=&4O$s)+i0<#dwJp?y?jC=VV z_t&>dwC<0J6@>(M=2JpaQSp#Fds6pwVPaf3tBlUg92l>@?&38~+kn^)xjx(yfkeCR zrGJ2u;=C06`Eaqc);jGK`p!D6 zDKZvY@~u;!di&Uw4Kt>@qo{~ysw>1z>@@ALUly96brbj^=eh>B{I!<`zd&oI7EoNN zGQdN*;LhtKQLR*m{d%X$7PbSBNht;Yk+9zo;{^wqWwUK={sZ**8pkppUR%>1vU7CHRM z5vSD@0#PN`J5Zx1T!=WKjGpSmq`%i#_LNW!i1w;d@)&jzJ%S_-!*3}Nn@Q4%-T__# zak6(zCauXo+6wxuSY)+RBB_3f=qAq*VbY$;No_nNW)OVcls4VgRKP8!yvYia;QQ7u zTCd$CiO39a&%xi~zMh7T)WGC9Io&Ug=GIE%>ZLed;DtwW2ejijs{MqY52dEYX4=)%6YCxdklZ)iWc=T8l=ZlVjC;?34?O9plvdTOm@_|HVY&pWoKU2A?wT%*38Ybc zD4u3#V0D|&#qlNHGNK=a?F(2UFfP5YUyA8|+n;RHLikJPfHKVl@M$aZYgRWN4)c+R z@*bTkz!2v>lVaWU(q}`lmuODMcj^zW5<+oX07f7>!hs#0}%$C6Cn(^l+X>Sr9HM^_C_sbS16HM!O||u{u7tNL-apFMn$>E8j)7o zHbEMq^t9hF{gu=&tSZI3@NI46*{5d7yn(eC) z7u0HR5R%yV6VIeEkBmm)n-rN`Ggpp$t81wd4z7Q_jN{E>&^?VC=WR#OH}zji!|$OG zd6JHqjn5eO*_J#;FRcY1tESzQ6iecoz%79h*Y#X?XJ61g zD_jlvs!!iuNK(i%G*Z0wHfV%AlC;9z;B!V;%{LlLiKz*oN&a$*HJncx>j9If&xwaa zuMcBc!16F=p7-Z7`cPfBuX?9h=;DjUE-Cm-1-q#EULPHHOHaN)$_#ZR7kTQ(O}i=f}9` zc-%ly5-YIcuGky5DfF3$$U2f?jErsdod5wx9M_h2n=NS|b{KCa6u}7t%xh|x`0S`$ zv9RHM&gn}F-mzXZ&FIf}B7VVInrY2ityCgP;TALQ)jh`khH7K$#eap&CKRiyFTS! zdscKT?PJNYh+Isjn##(*PikC9g9-LAiAM-9cxh>0iET%bZ_N zhe(&G5C(by!OF(`1<|h+6rt);bb3gr9`uI^6U~QCj_+jopTSI02sU*08z-`1^&;gy zpymNcVy~ek*V{P$2lNyAqeojlZ`ug)m&S^3k|};}P)yP<-P@XYhHh8W3X1VZ5($Se zIF#urcc0VbndJ4mp?kLuaF})$wo>_)bqNX!V@TyXYSENbBTChQh1X6+DcaTj&knmW zA#3yPd`HM#aSWbbthI>AIYjQ>rh#d1x>vBhGGR#NqSfqWrNVIPl7(gDq6wtlg@YPK@hZvIA$o>A zVL`V*5_IrN&BSFe*}RGAhdF1Rx~btUgiA8xFu=B8T-GVl_A09XpcDzD!X#9A7a$iE z(_v+C=y z*%2K4ZPeEvTX7&{A3M56rr{+4g&wP)V<^AiXPvQ4#Y^~L=@o+mvfBI2Uj#0sxWJHq z03L%?o{Q?|sNot4;cr|rO`2h?Oh568dz5IABoq%0W?3B%PGZTTNKt+}F=4F3-0!|n ztSdtpnHAV|6XaTe>pKgmh(K5SQEFknql@Lh9mTk(>lVt#VqbCQ3O(s{aWrsufy0OX zNYv6xJ4hK{{PaUis$TdR%j9icDmSU>Z;8ZahslQ^I!g5MA$X5}ac*l(6X`s*x*|3g zf}TPMH)xF#sYk%0o@Z!=J`e4zr^IZ&Up=qr7k%tTGIhEK8l5@}8(Lh~Tht;mu2t|R zLCOiV`W?^^>Y5qT!g}o#zpCP>y{KlqmoJsIFx@Q|7)?o&4w4L*HJV-Kx6mLciw?~! zYp_DDUkGk06YmLi+Q?zMU5FWvCB_0U;6nP6`5!$XNA*&+{tOMbq$7)2q)&%t0Kuyd z;>G%;wHe zfupiDSk6Zqb-{!uGmU^#@dM&HfGv8_N zKSHl7RGObyr=`QM7wzb8^n}n$ySKhQPOb$tvu{#Q0>Af#=;|2P0bX9x66Nu7FM#+< zHs8Wd-b<3LNb(ysz#XA&?mYyzqSKb{(e9cWw9dk{eQ1KcM!j? z|4#Gb^s~S+PFzGtdV(ENm_4`nNb*9ZhR7^%NMlYU21mG%w+*l50QxJ?e`5VTG%+M^ z`h-G6=QmBU<&`{q3+ZE5t!%0wdl8yaEOm+@rbYv<*;Yw2X|7I)9G*j@1~i?KP9320 zV=ZvIq3Kv_KyYv5m3c;HCU-sKCrI6|E6-expEl+(RLx65gPjQLF2L<~p%k<*>~5!S zn`9Ox0%`Omqg(1Fy?agA83_8{04t*j!|7k2&r%5-5 z&Kl=vBd$o!)*ayV2E`;G^w>|^(PW}E!UWtv^NuuaPgZ3}fC+9DrN+WjcYPH^t2s0y zsYF1A;25m!ONe%r%)~W&jm-CT+AzY6Ro|cAd%gWg62L9{XH{HC|Iu4M6itKGcuNCQ z;GOd9Se^j_wrEb!#Vrj^M)b%_1127)`oNP_NmwPwsNX)?yK8ki>zOT9PYK5*i}p-z z&A>y+VPNvCpVAmRl48R-=eUqu;s9_3sS0^|Y3D9zrr7-oRKIP z1Sqa|rd#{4ECQeuA@HYxoiq*=wJ!ZHxX6gbf+*idJ1NjIdKpaW&8$*)K7#=VS_I*X zB2W;Y=lw3UcU0)IL?h$Xuno7Qw{{*VVZ|NcwPg!(sabywfo2UgO@tCQD9;Xr2Pcf+ z+{iz_r}$jXj|uAuH-3Q@raPTQ+W;vCk(C^LR_5x=zYk27;5c7dJ#CFTD^K{R zWAdCBaj>sz>^hDl)7ehho*ZB-yxnn9+jTL*=6=S$2`~H&nL)Ow;M1#5hm$KP@OmnGPoNE4!(ibp zJ>h%Q(>vFL2D=}Nm;@5$Hhs?q5bk3JhDcTzc@gia!Gq^$8d2$sw1?*0U?jL!Y#)Gv zsfTdU2X}%~%mp69ymM@=SeFYl z7(^HBg@UJB5G&6o*q-{r5|V(yDflua@{1&#v+s}+%f$gCpiAW67HRC(5j>F3JCS;G z3%ffnLyb^1!A5Vo$9#7?rw7{ktVA2ID-FHQS@~{ix>}xsyz&BHC||NPX3a)z^##DG z7%(b#Bj_uW_%`n4D82v~dE=~h6Ur^0AYuu~;uQ>0u#dr=O^6qV*oRzle`7l!fN%E^ z@Mf%bW{IWqsFA1wt;VnctB%1a0~4xo%#3GR`1bp583*@oMe z-IPuL@Dlr;^M3y)56FzD=zjY_4vj57c1R@F--HD!>% z`GgKkB5btk>mHr%I+x6bz%SG)!^rr6&7E0dqtA$%(%8vGJD4ek=e!efUY$487A3{E z-{B{?mv3IT&Bsgv$vPlg*VA;>Occ;^DmxoTutg0Tu`b>uc}=usw7nj}oOU{sYGbW~X!j z72I+A8nkFIG?U_P*}-tC_&g8Q&{vcBXJVGk0vHd^BmvNvNLZ&0 zv)A_U%tzN4QHnCj4dRgru+bbHvKAf*Gbee>WnsZygS;s4r9)hn===5I=iB{SN+65R zGlZkxXf|!WQ6a0qi)I2&VPmyj$1M+hiz|;-Vyj^ML`CeRic@>bqw42*T{rveDRb|n z$Qbyi@!@%$aF{OWSb^*(xq_SCa`q!iowyTHk-KkEzE)HV+pOgI`XFL5_e|}wDjB(Y z^E}a7DYJh^SmVkrV;mCbP#Maog(ki*&zlG@_OUz3$372wys|?MClZH40JZ%V^<~rFH_P2N{ zXo6C1jaH~}DiO$L07Z@3;RL=kv0$5%4qjAh{Yn`E4?$$3bwRdS4Sfe5FmuQP4lwjS zN4T_uJNUA*jtmJ4c@iE5?#xP_=U5B{uIQn?Y|ym(FHYfs_?|lz4l_X-Y#*<8EI3Gg zzGnjzFi`6XC!@2cMuv-r7XQtE8q;ry~i`g&_O6@dDaynK#gn4wCva& zWI*5glCFg6+X@t<`?-QJCPhk_Z|8MRF?_RMaeQ9vV&$yA+{!vi-P2^me~pb}AHf9K z^DtMgEQSP&s(0!+{u*G%?EhuocY56&jTT=R>HxvKu$?qwvV~1px>1sT?#`MDyJThJ zSgJ^vF<(~N9YZPOopU_ceR-BCgyGPf7eSU>Go^sj?H0c3w|+vOdeW}(IACpQ(0%XG znncrGsyXwAv6N?oCndk>CI`$ia*7Iw>y_3?0|VK#sf(yq!X;x$HWU_gdx*t=Qp>~s z2vn9Ga`$2Pn*xsc88Fu$5Jt`Q^#ilt+h@KSI8XDC$YI8~2AHzmB@pW!y*eKE;@gfJ zUVwn(v!Ibug zO-=8MII!?~%;yN3Og0kA1|B%+uX4}*8P*Pk5x5Xvt_RTUoIP!`86T6|tGzXI{X{bZ zpHWPNq>4oW4U73fet_JBGl?h7j$zy?pKbB=9Q$?1Iwi-#%A$B@)@!MlJCl5z@|^YE zvl5Ymm#_>RSNZ$`NYL-4oE1s5cONIu*-pF1IYz`P&$>O_libW~J6N@T@wHWm9(C|m zpM=*YnGj^9LD4SDovUp)VIL|6J}36_!!yr#^P=j6zPWxHMq~YPg1hcS2|x;ZkGBXB z-^HoscG{EY+-Fe}3hHLr65pIg1=5*KL~nr~PaEU7T|M0?FczWvtV18gRfL?p63fiq zL6mPVgJiFOoUGVYJIx;EABh>{Uotn3%b1?)5Vsev0p0@wQhSR(O z03IKL3%>TR>4wD?f(otHhIp>$YMFnETB86LfHAC)^!zLWVL<(PPi+Gy$9A@^Dr-}A)=K^wop2N7p!bguR` zlXX1Z66nMJ+rq@0^?^KBKQi!qkP*QbZDR@r88bCr#r4;M5TN8Pr;Nt&xkawDj*HLr zm=)@Z*wq>d!{jV%tT z_J}{lx%8HAZnKi_nqtV4$9odGqi6Oa{5*9)j8rVgA+D!m{AW?kx)XOv42m^SyZD~o zI->*f)v{=kJ%u1Pua8@*!r7TTfTS?|$6l91X8ix71E(A_0DFrzv+?69XpO&`M64W< z=_nIiQ-UbtU(MWY3u={f2~D)Ru#~Pg(n;Su3FGIF<2JKPQcCDy;~U6G?kjRZKHmkd zf^i(z=h^OX-j&A;+R2^%?Ln5BhttrN0}7lJA+EsWM^V6c5lJs?(PdcTz~2#`8nD+S zKan52VKM5-s-Fa7)LU9lvI?sR6dg#mw;u$)#IPX{kc( zS&?ANHSOY$y_y@>=LFX4mrvTQFqO&d<>HN6#bhsH2{oJMlJJW3B=k~ZtCxD|JZ!j0 zBcg37W&!bhnJ||37;fdjR9IwUP#T^yrThzy+v=D~bL!Wo9B{pgA>l}X=oX|i!DbgR zMwx<6wT$V*A@%mpF#*~Sx_1+A2R8Xe7@LQazNgb!YHzh4<8o7(7(a@B$85GCgh2;t zQGSuNq#=WIShUpb4o~k0Nua9Hf65ly0q86^^b-d(8ncktr5%+ZIw!apmdf=$Q{Y2M zFCdBzz8T~Rb+Cz{y&!3*y%;MhZ`CseUi#FZK$wvf2E^@+)*0j9%m=wHf z+#EbQhJbsOZRWq2b$75nD?#M}Ypz-HNw_33bV$n~K~BgAO}L?d8K9A8<5NJL4UP_zA9@I? zHE770tlH!2?O7aig1_|raHnQpBOQ84S2#!pK)*-W7Yn8L7e=A3B=pJjK{zsBmN1#k zdQ(QUwTC@ljaSZ+dsJgcMi>G)u+P?YdrMfjX$1$Ly0rq1x;J^9Cp?%* zLKsbPOi&bM=Gg@rW$HjpXKOGd%9IX0j6Yf0%{cbg#>6lUv`lD%y<<-9q@p{Uyn2KdT#H3B8kr|)gwPeAt*nS`!`u$~;| zob{w1Y+`1QVanV5Mc#Nxvh4r-kd)VTlnKpt)om1=q=9YwO`8HN((@A8_fO&Sbw>Pb z!+wU6zD-A#nPc6VDB&JM1q_*ZKC=(aG*IKY745@)0&Sc5_yrw#;Xx5 zOpkc^Nexz^1#8%&rR(p;J3>q@pc1zV9bZSXbKL=gZE#=Z-S3-}r`#%I@HG1H6WLpq z;XKwYM*)HZ`vr&hF8Oaixm5H<4d#-Ln^aXd*)x;&QNvk6bqr~nBibHLXPBtRxeP|K zb&b4JuO;u5q#MJ<6MI=u3K&n=IA6Mh0rFogfViR+TWmIXcL6vXK7(3QjX2`3Bnj%! z2TPPJ?*u=T_3OT0Kn)32*&h`pNF5dwF@7t2#G_}HGfxLf8JlbD*aoX5#WT2Xva2xw zqYLLuPatK^kG%#3O6UQx* zG@87PrA>d-CV*29>^a*4^pRg6RS|e$5kB=dRk5J?W3f48E=SeyrA|Oz&az%y5%2Qb z#-li08DC_QMq`JkCxiqADQO<@T|etJ5^_D-PV%AAnY(m$eQ8^h%}nOva$n9yD zwn~cj`5{Jcd|8)crG;tp9eKc)z252AX_&HBbn@d`F9x!_s?+0-k-s|4uvQCG$%~o& z1HEp)ZWjrk$5*4;gCX8GB@j^t9%_)E&f&mb8oFDKCZ5{r_4ic-*%$PdK#NYwwG|d| zK=T`UMWgoQNtezcnw`;CE$-T@*`4y&NXa$M%9Ti7Y2Wis91#SrN{v{wPH{i;4Icx5 zKqi}4GmOn^vd@w2U4 z2Sv0Rd-PuTTJ0pN=jtEXa`69ooA&g^V8%_W^2#FI|M|vcS4azRE09$6d~zEqNQ5*k zqX(NzuvF5zhhpF5SHm_oc(hxsALfRaiYy9dMY(qdlSAENU)mHHZEk$kS2NZd9ns5i zwyauRNa1J7vP{LBOjTy2kx9m^hyQqHA-%&30)w3aZDyp z_<~}UjJqAt7D`|aWkZY75Ds7T5ro$a+WqX=?Fd)C9WmHgG%@xIRkm}*>RDF;XGme)IXHTUYtfTD)R0Soi>jJ~qCG}(FZ>AJo zExzec$Wl^~e6eyjM>^&$UvEP8Cj9;ynzH~n zXR!p9LNY(R^~##V9Rt+R1DJ>?-Z!!))217Q+qba(Eg1Um)5Z6ZNN-(W9UfSNkl8t( z7|z%2OAJE@G_iu`Go*p>PX<+Bzip%)SVefL8qz%KLoBH$TIYpsjtMj2Sw>A_`He6y zUStgOf>efVYwsqSc&$t0O-fO9y~#@}$gPYww$J)Gw)6TPD|?I@(&rG|Lah2?c*ktg zPJ5b!(rcY=(N9d*na^LF*?9)z&E6EG>x$H)2Z}@CN*_L976k~6bo*o>JIOtqK@Wj! zXX2qGMt>t>x2Lq#nQ)E^4M@@QU6o{;&sv_qY3&t!3oMZa zYO zE%H1}QF@kHpC~u)2*o)D(k~No!YhwSDB|Pv*%iN2_b#9-u)m34%-_v~>W%jo^o()|cEkxo;tpiq{#k-1)I=H)oN*&;K+ZZenQ#>kF?0LPlKV zsd>c<(Z?+OGtseXWs}dP)F7J+3SJdxZ|$dpy%P`?t8U3iJg&FAc(?w*cHAaooeBHK z8fdojSzN5Di|(ziV0Km%v7CN{+MG}GX~%XOB5fqzwO`<*87Gw4LR9R(VGkNH{JWiZ z2jj}(25(0uRmKPe^7F4 z0iv79Q2r6eR-y}5dl}ssW+^f)I&LH0*okVoZug*9w{K|c?3k)_pXLAb{;g`{EFhKq z(B9o{&Oidj?9AF}7TRI;khnB-zq>s zSI|A4REf3x>J?7Lt^x4!$_MJbvXu@p837JDLSQi-C61gN*l0Zg=tN74@upEes=n)$ z84q|Nk=4Vi)_|=ZfQ;`Z;h~7n$Fb^z#*P2$#vDucLcTE>Z&8}R6)qo2WGyh}XeB&p zx|#8LG@I{$jr*fc*$ac9Ax|Em34UxXBh)^G!;A=a^Tup3ECx&fPauV%lZ4{i+*JMl zRRtXj_%h0ywB&_{;BQ1FtBh6k(4FGnSU>Vsci&)KBo#y{8n6~M038njGgNZ___0y% z9bCB#j$baIyf=o&l1)0bam&3?Py!)A^t5Ni$TShh?C6^tT{4x+VgNXG1{?Ips+u_2 z<3kko4hL)gcbra{Zk>#Xv0^m=X5K*@PS0}7mzid~Iet-E>NAb`7f3KlWOQMRh+Kt) zV>qXA@*V&jq#_NSpG(_g6}|s&A9sey{De!}vARZQsNmI$YZ)#@@U6c_CWbWg1{72&}fC`2@d3u%$m* zt|j8!lMjkMxyi|dP(VIfDiEDhEm)1e&XKW?XUOO%rW~Q1)fP&kFVrj=d{1Idasi51sB3ky;e&HW_9{#1S6=4^<3TNZNyXdDJ_{ znlEM2u5CU=NTXJMnxw}G+t?L=xb$#-sZgq|3t5^X6fb-noMrjyBVOmkuz-V4wy7z^;4AV%Fva4H!Pgut-D2o zE_uq!AfsSc29V%xe=M;Ie(hO3NCGQRC! zf&=vuV#_W1ZQw+93}@C2Z~LkV=}>=I;|qP3J-I7b1GkLr96yb?jM!s+m1^Xhh4wje zC?;e_LIvp(A&fF%3jX%0;K7G)wt%{k4f03muTN=dg}vVbZ+R9~@%uERwst6}MawES z6To&C&?GV`!T22U^l-;OCPpBoL zWl&Z=55kQCD2?g+Br!6FP1n|;gT~vk0x=!xO2hB=ZNE#~2}T3FIaiz@1O~l* z^!cAw24I>M@rUb;>13!q7?2u&(RNxQ_n}O}0as)GmboXrPo`JavJ>5l$JU9LuY3Qo z>{a^HFEMgzM|P1A-DAVJVf+41M({xWV$|d!t&1PKn))UK1Pb4pmUYWZ!p~nx=k2EI zkj;|S3_A$d5F6hN2j$!je2R%!NRJh*@TT{R!CV1SyETl?$OAHX2A6N-O~neQ1UF77 zDtkEx0^a#!TY(ubg@?4}Y6L@}=DBo2M$EwmV!YVfY?B*g7%Vvd;D&2m! zR=;Vxt`E`xYU#^Q~pD=LzLpC@8^j`6`7)v~T2HB*j6okev2NJ9~^o%qG!{2oSD^ree zOz*1BmajF+G@H1e1QRaN%jmbCM6Xl$1xKaTWEJ<+dV=ED z6AM!?*ordq@XC)ihjugsSC!UB4Q!GA0E|UGAAWIK>-+rhJaq(Z6+u)h3>oGGHnsQtA++I0>9WBfkJ z)^h9q@0`7H$&hOdutLOBQrA)qs<)7H|IfHv4t?I=yqfq-^ON~$hu3 z(q41DxxE9OL2qUgVTbk#R{m+Arr|0ABlzA`Bsgi6QBCFQ8(sz#>$h*Zh)XEDUutCMZI!_risUiHo#T$CRR)u(lVYi^MsVCsM!vi!x*O zyQZ%J=Fc7i73bYKp9(-%H|8KV`S(y3K@=y;ZAFP1^~{HCNF_%xVjSJ4XyJWtzDqnB zQIrR680xrjP({cn+S!?<^PXiQyWsizb&VJvLx|ple$NG8k79K9VgwFR^zwx z-uj_SY*EUd8ub(MaGPj-MHMp5O!HDB8@&$FfpXvT;c;QQc6=nKC~Oq9gTs0QsOBSa zQM+K~Qb{*^mvd)QP`jYDOBGWg+H+BIr7>^RC=dsdrRv6|w|`4|G9qy{2O26_PXtdA zy>N6I9qQp@88q2AijvS#ZWNm+x^7>a8ucEYer&P`Ef^zVu@K9c+IT?*kZ=8s| z=|J6B@yE59aAmfCM`|>nn0?fhYCRO^nY4FN@6TxpoOd{wiqi~A^kNAgn$l8+8$q@t zQ590#%&%9SkL7Kx85JS8kbVMFf9??%Y{faE6F458;Z8}{_*gm0RxY|<{12Qlml-+t z?!!>NZ=jfrHn%#8w?US5Jo3LvGnF=N=8F$ipvPb=pG&`(_rYROH!YeM%vDyusY^IF zNScB?VcKz!L;8acSQ8D_121;VD-s3ex(hh8O8<;ehyqt7+Bp zrPCH-wYcHqVSL>2w)@C9ZO|4};fp@Kp{VBhsOn|YwVf6#wzZM}Yq7xFHdLLEX&gXz z5F6q+Uc*P=^z%e)H7DK{uo=HD@? z17zOBePT^UmugRQc?_|^E^GBAhm#=Pe(fK8<^wQEqQU%*(6g1%B`Md(TUKfD4=A75*DfB0G=cIq+3XtVKa z+DdJPd&5W&gB6|4D)_;LF;Ejjp$Nab>W1+h!pxP$e!i&;4uO@Y3y8H8rL-Y32oCDT9n?t`;2`)?Z*_4NFNH>xoiG1J zq6`@Y?C20WZLSsVRJ3S4Ox1V&7`~F{>%S=h2^Reu=Rk`@Q zL7_dVM~}LT02;X&pCJqn%=`17HED4nN8iMxH`tBS;le|=iXj?`ds9jrjg_W`)B1$O@slMR%56fxab&7q@wgIj|?sASRG zz5w7A^ep~Eby%su;Io^8{R)Ibg_QfxGE<_DF8_@oR_=uU0SXwS_a}LBqnV~j%gpk7 z-i^>i-@zqztP4*ULs=kH)%*yOk`f&Bgl}dFFCezrLgF~hjAH5>Z&p3!2Fb1kb1Yad z2K`D{i>2XiGGQlc7<%F;C6jBc-A$wM<5FgptH+|362AYQ4*N6z^}ttpbUW`3kme?M zF4x{>sI}f~Nq?@$Rm)Qrg4WSCZA1Ar`A;^BoslX2qMHBEwrBef*=>@3Gz{j&K}4}o z%rr4`)y@130?`X0aSQk<6a!lZnM#1a^*`q*9(tmosr!sT+QZ2`{=gs+zQ+?FLT5jx zOq665XSspvrwyyFQ^|GC2gX}Ur+0X&I)VtqAySwcrZ@dH*~@>X`lL}85G!QYjuJ&B z<>y4qgD$c$h=L)Z)@CCZZXRZwQCs$%WbNed_Dy%}8Xs9(1mi7dlU$9NoO8D;$T8*n z2O{ijH!M4?M<43yhSoy;gvw2-)c3+BOW25HFic+sQjO|UybXtMEL+(~B7QG@29uvo zZg7jzUG78$PoTX3=F*X%v`Kt)l}t&^K0k_6i+Gyj`vzdqtr#161AAkZgsHRqwdkC| zD@47FN{p^Km=elOn}mr!7-#U9MAGC5ENN@WJMa8hz}V|fawT5wyjGU#Dmx$@v5-}QQ#CW6zIFYcaCxW6|BsAAkZil8iE1@s-){ul ziQSu3k$bvV=yM$Y7ov23EkHQD2wh_!jGv+09(`6HW$&g5ar*3eSQ7b5U?u5vRf}2R z26lGP6JwRPA_N*yok)opme4^Y2bnE}b#MByeR#DC8=KIZN^CRA7loE^83}0umi}rry<>QETd(V{nMAMiLTXlkbsIB1$S@QVx^(Ang<`O; zLkczrgm2B0C`py(fnUYwjnt(m5O#62CAK&-TRx+|#j7R4nbMzhLy?@7gnBeMGYV+a z(7(0_^AhlZ?uRg-Sf-SI?%Mm8I=4IphV5Ph-lMNDIQ|Ih)*(X$i|2pp6MYGzeV6_I zl4!i)jsO`JwT)|$*q7g6%zx=-x^utBif`TMOrTgJ8X|HqJgt3wZlab23hzsyW&S0J z`3T1l^Y_BdaqylZhP*!pk7U9WZJ)!p+47)2YXcymAhfHAh3qvGI7w`yEMDYFK)2j;b;J_Da*qHf2eR9)VI*1|Eivy<*Mv~V~$A= zYNlH)ylJOXnf(8Zfx;~SMhfHJljj;SZUC8r=Z!X(tDw{?*HbdN4jYn}79bAH ztbnO~DMan{NdKbz(GJ2lpCVm?M!Fg0WKXQsRd_~dDPAKC;`Et`B)-O1rismMnIk1Z z`VJcy{V-~^XTRG4=*Vd?{}={6x&cTDmZ<>UJs?8m{ma&(OuA0Ii6n0c1W?Z6oI9`nUVUVjqaf*e`4ezS zSa5`<4XhAEpO)rRlD#1Qz%*nyuH4djzN4~in^jtwA7K`_{nHZDtLkax3ZH?9#HO!8 zKIL$uf=*P|4|00)7&&ASI(2`P%{-C_@;r+@VwhBG*T@FA(RbICGfKN#%;ji3RI~Ov@f8NLH{<)rgr?C4 zUXs_v3H+H>y_KpF%PvBsSR=JP9}BDhlwXTuxje zz#fxf#&^A0@IQ~l!?=cv7bVJ7_{d^tW3N;k=)*(_8ECMRpgQ?*hs%TO0nJ=vv#V+# zHmxq;lT~`#eWTZ`d0bwb`Qo+znNG{2`Zo(nqYzLDEuPtfxC4D3evrJ&5;;!NC!6g+ zbkIiJe-L#S()@gNf*KPm?jTt~g}U^yc#WWfB~z#+liid;Lt;Og!^SN&saf;=$?j&k zjb=z=NqCaiguK5PG*#ycqHa$MLGR=u0nsFh(hM<)Hh2GWNAET)-tVzsEP@zYMZ3|^ z)FVEO(wYho$w4z7g!}X`;w1nYARyaWi=oylKRt4@G;&X0@`B1rMM(I#fJ`%VEBue4 zvJott3p10tU1A7Q0dM{RYr`g)uWs{3gI{zCc5UTk5g?i3^oe5(>>DEuFbdck5Ew#5tO`HCH(YMbX7Q??((-@_o=_ zNB{viL1l4yuWjVEPCV5g2c;-3`aj;ELyhDf(ILl*@?oArc?r`jSh;nr86ipI{~+Yq zPNG^rF3mLVaER110FUlsu9vI`+shj!4YD}nqRFeN%>Y#*P^EbxU2Y;lW_o{_{bv>LS|TIeS!)@r z#-*7Y20muRylP024vgTIe|?mDb&A%fYzAV?C0X>HKa&7IH~K6L7~)X-jLYQ*;``Id zZ6Y0{%$c$-dIWs^*PXO7)7O>t@~PV~oJpJLqHWZK$v1CM2hd{ZMXX+$&#hiJ=40k& za{pt$?6wIsRt=ZVQg?TtOkhYMjXFjNjl7m1);bLpGZ^TPm4dTDeY6m-5|;PGt^<(= zv3L2@liGR!@}%cvxPgo??$DT3?eu+Nguz5F)MB5PmMibxZel#kr3me_7Bisgc8uX# zq+C8}gn7NnUXh2!FW?{}TExAsIqU7Qm<4cQ`YlM5p*mZD^bc$o7AxE0xF0Pys-rD1R^SOsfhI+pu-HSqEZ9#Fl#n%I;7KTzI1 zn0=e|w1!#Dfr68lBnUG|tbTl6PwxGPgQ4?+EW+Gi-t~Ym4!n-1_K|09_CeJ- z;4!d;%k2$*lyUNCPteHGylud%-DeNo3CTR&bt8yrOYE{e0`T2TCVk_xrel!X3~w z(w+6M=2e%KlZe{HP9eB_fqijXv>yRQ4hF%2dFppJDFi{PO`#pQ9$n~%io+nHs0z=$ z)TL<`0``R)gdHi13+ogC!555;*bDyc&Rj>tdQ@TxsaX8zdZ=PPjf+FFrmfAwD7;_G z^-QYz93h@zZ7=S<-!GC4niXX>9K0Mle)cDp(|8=q)$W#V5kLk&sS4)?b!ZP^ld6|mk@ zR;!{S=fB3vdANESgd-8^;RY=h5*^u=twN79GBhjB&O*rLE9EMFSo#i>Ltx|FuieP- zM%!Yi-9@v+2{ygE1xgGqoFg-S625!}`e@%ZCav1=4(DToxLyKi0@WyfZwWJqYg!i@bNy*E{OoUWM+Q zy&2&Q`pm}n+U-W$v;j?l=LoUp zhNu{bo%x>Sf9lc3u~Bt|v9Ck!?(PxqmM(8l|5Wr1ohWuIzeTL*tea`B z=4UV0*Paj&L5a({cv3rCG>2r9)@|}$Jpa#Kt1f57PiSvUsE{F%${x z^pMvuip(516Aq|3MB@7w?>ULAvwj#XrYIc^85bfs!_be)x+uCdC+?-P_9oB$oo#3g z)NVF5HhJ2PY@K%y!H#hx8{O+4v#FD!_ z6DoU-*x*-UdKYdnz%?e7Geg?`rtF8dYcnwxBcrUf-6FMN|4h*FDNH~~ISC$FHih3y z?d5gmr+TB*)pF&*ZM+^kS%1)F-G*rh)14q|LfvT3eJqyhwMRT|Zb2*il@2_Z*!6Ks zC*RL7h`K2!ZE$_cg!{jk>7S)|v7o3>qF)PA&6Af@ z?X$ktx0;=wq3MSNfst?G=F&x@=$IOF*Gm@}BlKiPc+DLX-?*!oF3;5}BF%=Wok!Jb zgJ9si7W-k5&!>r_EyFDoWRlhdYVdFR{=`L2(v?V|=3}B-u?aaD=8lG|flCOuNPFj; z#Mz4pVCsq8OyJBLuwgrfy1yObf71g0MpvTM zyJcqi0S(iB^%$pFKka8xrn+LT?SZ87NbO;qf-e%S{{$uD0BYAyAsHNkLR_R7=XGG- z6p|7#g>gjL#n>bZ!meO9U8FN(YIjuu!FIusj3}~ z)8HMIrrBAnGm}kk{Vx07Ko4`vED%TBft;LJ!i5qJ32EA;hi1wB0v8yU-Hk%0<1pH(d_&aD4;&KCl15VX1hN%YK zcHcD@w6v?ASbgroB&a4(aNmE8WI41kWLdc%Q>c?E((1n6xQ;nE)TEPp>3Z>r(m z%VR4}^vYJl(Z~nmY7dME>iwHD{CgcU^v#004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY4#NNd4#NS*Z>VGd0DtvKL_t(|+U&h`n4Q;k z@Bi8R#lvULFiRRSlP$^2j_o*c7#cTi(j*NQQoQZ2Y1&(cv?<;8Hq=m)G;GIq?3me> z1r|%AVWz|9#l3%jj2vjFZ5-RV?Rp+P^GG@~=RJFUXYGaG1^*-eBmX1+BmX1+BR`R1 zJl_xSlO*|k6Zvc!VVDHI|9n5r3qr*6{QxgSNhT8P*tVGsYX{i6X+2RGkjrN1>TJh0 zCACJtnX|)`$`xkk7ddhIERQ~Uh(@FSd_VegF8>3dbFz8EIBW25vTlGl3`N894bKmB97nNI8m%?JH@_N&Bnm@J)1XwUP^s3jEK_9DX+5`C z;(!13hbS)0Jl`MfIg|gk0J{3B%X#NJeuhFJPpwur>J5)53}fwipftiT6OLsK7?!;$ zn@)8~p}PGb>TzsqQ?*tyDDaM$reP&rJGy88kbdy7{S2Kv_nN?1Kqw(4 zQVJoZ6qQO%E3LHFN}oA%Hd76q|C?@V|N43BJO0QE!s&d@5t(d3FV0Us-yiqKF8>b! zNC5f=z9NxKa>a!gQVV>6VQL|qLdurEXzB31_uYM8;>^&9UMiJi(=@OwOC*vBDTR=L z{N}p|fs_K%Fz|h!Gb7{5&E;0xx!n4O7ktSJ#dN|&cK57^e-MBy+a}-KNx3+W->5y` zhxcEWpLhVRTf2t7{(f?~CaTp6lhd;tK6rrd1*YE4E}FYqFkFLVBE|H?>?hBjK6UNU zQ%9n5r53raV`S1PLx}Ib*`EQ86oP8K!P)5rs-Dl*ottE+ny>|`RI3%0kO(cb_&!JL zB-3o)cPaTo3qqP`t*BROJpIJO6z9jE@8kSW%TF|b_U+xrhK<_@V=dx1l&y)h>hA2) z?VY{cd*1_u^~LXa{jTlX$rW9y*!|gkD{Q zaYQ5y5~-x#e&N+TeCL-5{@pXb(B&rK^Vpij?Pf7)R>rA zq+DyTZuKhO`^&GPv!#u%-f@^SBeOb}5+q%5R%wWW*pNa*7xN>-dTwD>NGqxP*PqYnr*40~kM=($Kd}IM-CN(m=Din*IEu8CFWvrs&J0bzbj_L-4>rn+ljE~RvsMpu zBGU|}i&vgyetvWJ z2!iMPsDG&ZL|LG|t}b5lhBtA=YhFjLwID4^MsXA+9{a`vzjWxxNy?SRx-blG?QPAx zx8cSADv4!E_+&czbi!0LN<*AEJILCBex;NqpU>TP^w^Pwo!fRa|J={~j1FU8EX>bP zS}GAn5y}sUHJl!t;G>^8%;N_JSy))abqq538~{pb5l4YOI#}v>@%2}3%4M8~0$<7A z{(<;QpZ+A(se|-f`bt)9-%WX8-cab+iK1&KN2mYT3;f{N;ZqlE-Ms2IdRO+o-}f4p zY1`^WuX=ra(KRpOtDpK;zW%jOq2lQIKKkz~KM??OOoQKe|NrKaE3PNk*&(uRIRmX@ ztrVw@9{Yy_PafJ@tu|EB7MwYKs%w6}<&zt`3p>uwSN_0OL0J7R+6Y%{li`Css>3(vP2 zzNft4udsYB%SXO?C%dn@f!H=>Q(IO@N!+Mct)ao;_sq@}fBoyXd|j7HRjI?OP?4`9 zMLby-m#k`SPH%K;x2afJLERJUueg>i=kL^(Ep&5B8@BD{CPqeo(U3Y__dE_fc}(1L z+e19|+sNDQHsG7K%FDAu!cB`W0-Dr`L8>i8~s!CRm|`-gvKSzq@-=)2(gs)E!21v$=Nf z9<3C+rl-qohMe!6oE-bz;o+0bww0i>yF+Z))X(N^E3r%yLrM}!hw14epZU@w%*>Y9 zvZ0rYx26$N@pEswfzN*N0S+Gr#LplgY6Nn6_$*s@Z4m9f-Fj+l+{|a1uF9v9SB;zeDae1H7oUnd$#Lee&=t-McZyS-i9RrMNe z56oFBs&h;p^Y_HDaq)T*30eVQl=&{`pcB#sqN9y){TSZr9= zOMh<%#l;dQPoAN#e+4H7N9pLyvt|7NVFdR-^n||S_Pant;)xR@`udeQamCgZqq1%F z)4FZ#CuM8zrs;^^vRzBf4vortZn=dmdv~CeN#OZ9kG2?CE=t-;9fSr!-ONG21QQsVg` z4bLNpLaNmoot>>T7xL5_0Z$${$rF!1MrCn=@wt+oTde7AIjOH(lMzh`DG!b<^7ur^ z8-MRFm^LyxVVmOiPkjNyiRkR>AqWI2R)kT+j@{=I6id;c{qH|EJG;7QTLdYdf!qX#CZ zSB_85Mz4PP4W^Ki&wb%mD%A#wluO_%bgWpF^m*IP0?n3Su~ru!d3;QtTneH~cB~Xe zGR6GDsB~L;<>2rF*Im6%H2jECX@MZ{v2BNRCW%+CP^*;*!hrg`hZY*!vaxJ~mVBP> zj%F(5GI!kh2oFAbgs47)?^hX{DPyKw@y6X9VrxRjPc=-Csh4DhvX# zW#8rcisMJP`}SL&SAD&poM;1h-(P=_%Wk}pY&K!owxQ;xCaxYnJMnclk=*p?;bUt1 zrY*+KZR>gXvHkq>-+mMoDnwky36@C2MP9kBiT+HASeyLI{t1pQMdFIf*UI+JHu>1W zVOcI!h3vV2RIZ6c^(?u3ifpbxGL@lPD>HI-i220@&OdJ#uIqqSWKs!STcW~%$lbyn{{aR&e6j zG;=dENRgncqnSr1U}~|*u2c81u|G#gXFJU;1s;FmF#r0c`}z5wzM7=#FgQBJ*u)~U zm6(dBnQYk9MJGlf#rBR}?x3r)iS>4j>kFbx0x3cs99%+LHkZHXMucUf zwMG$>Eo8yafCkO-6&8jZIdP0+GC}W}PApf8Q-@FJ`Gr|^-X(ifYhU}##p!a%N|^7C z!qA8j(Y3FA6aV}Nzd;bi&x_7pFczq@x0j!K=etOyGa{EtDX(10&&)1-#7t#2EtHnx zLQAu;W6OGayV^PQ=#zZtA3u(1SrE)pi4>kp@TRNQFwmSt1rbmCS=^p=Y#YenBDw$3 z<1B~{dUs#Jo3HLhM~Z{9k^?gaPmYEh87;FSAM)t_LGFCuD0kj>fJ2KZCj2JsWRh)L zy1D=1L)2>_Z5^F-#i!Vm8E60TIVNTnxa#8V?Amrd`N?7Yx{u+)OfBT=gLNA9Di>dV z8Ez&|v06n30po+iBy&w@1yK~?Bohp*U(LqN>*?$3BwxtUx3Z57Ti1%&$ys^Vm%lDe z$DysSYo}kX4mt_@P_qn-Fw{aR=h(5M{~BBF zm3zlgo?;Znev(RnU@CaAy4iQxjl{F_44)Y%n@f_AK3BZ{ zUDS3|_=gYt7JBh0+08pqvBGj3EXzd2b>hgRxvh=08wQvi9p}DV?m!DozPSk@CAMv` z^TMt45A=$=zIuvEjsweKdi>Zm{z8&NR0ieDWE7)_% z9FF1zef zuD$$P9{ljV92g$t)TB#a(>!yJ{R^GV7EhfWra^|jmL_(%gZRFnUbS(Q&sA$QqCCcp zJ64fOrr5o;pT3m^_U`P%3aS_tO?4qanG&sHigS~sWRkYdDhs6m(|`;2?ZL6z`N&^OM^7t<9(jzjgQMgM zO(c?O>RyZx3g1^W8nYBy^X$4{n>_sJ;ppmDbhibe_%j{FFV_gPf|vZ%TlmL6ecyAg zJNcvkh#y^E`LjOHSA2SADwr`^n_Y^JQ232nSd zqm@^$nLTSZbICQ=|Mvq>|B4mtzU*?UwUTUUEigVd`nu`4;?~ZlrueE$E|5(vt!QbH za$LUf*;}~f*1Jh1Y@+HE)tW~>Er*nQ=TNu^T%y#Vy$H{6V{OrhgAmRdPOqocnlrOoPr zUa@(@0IPdDXzgs_Ov?2-uX(f`JcgdB{ss5h#DD2I@@+)YC z;d{Pz4e`d|$=SCkt>Q|tVGOM5r=>ZE?Ku4PpZz0`J@5$mT$(soz>k-ecj>-$7>-Fk z*U6DHAxDlJ=iYnnps%-p7iBQBeeAySWn7Ss*wa{G+Y^Iqk0N&L+sXMCT?(O(Qkt=m zF-9lHa9oSA$puz*b+Xq=l78?2?l+E*aueixJJG2YgjZ#AVV>!^D&tF4kQ&pnSg1E~ zY$T?u&1Ur zygv5SW5m&O(*p9mI?>zDJCEkJHs)sLl_>?a$bVz3HPR3iT63h+31ZV=|Nf`B?D%(Aw( zgVe6|_@xR&0kyivqYpg5)c6$Lt9$Um7(a@Ml*z*JAvW74SHAmI3~b-X{PYYjdBd+$ zw>$8AHI8jjt$NtDOLNk}G$OVSWa;Q_CpK(6FQDN?Xkn7h*&I7{lH|i*q5u3Fh=n9j z5vw+B!X7+BqgEk`727X3k3=#>!wZ<2oTay~hg>d8B9$gzXkuh=m_3(tk!vb2KQo~o zf8asmqD!v$6>aIS$5E&NR<7N`iNlXSCpvsyudsESw-QIlFpTw@{{FQ~#me5K>r$%+ z(sdFjLqe?h(nmkT?9411*7VZRlEC*pBBc?ApkAsIRU04_=kMJ`BgoO*(#nGmKE_8r z^f4xf#)#`R+;kF=cBuv)2`7P%VtDKr2cFo^#Ml(8HxDp8F~>(fb_*LT>RIdy7~>DeNwq)j&MlFTO1GDazdX_`z7O=I{GGKLh8 z)tbfW3V|;fKlu<#Cm+BTCQ+;qwng{K0V<0{Oh;mvk~oeLLg0B3Q54YD)`Zf~(c4A6 zTF0_2!qCTdY~#$a)9Qh5+zV4xe8Obm2u*t97}4^(xhz&s==y z)G1pjV#hL#^=nsPNrSK6@^$XG;~s3=;@98xY94sx0Y3P5r&-yXr8SvgX}(5t!J@sX zgO2tVT*qW)y2QbwqnrpAI4&l*pht7X_AW#mF*-8O%=A2$UU31#W1~njqIXRXcisOK zpZwgt%q>+|yP}pJ5b;!tc znfW{KA>p*LeN!I~-FKLJWHYewJc>HWR|kC#kDX#+@G!$g$aJivy}yqO_wC}VU;P@N z{lbIX{m5~asy@<6@cE+=Pb`fQ%|F0n$EI-dEjWGa*wMQJ9Y-i9kFSrCcE^cAjS51n zgg}Xy(6C8lb9f6296WZCjO*Ygvv{G6<%Vonvy)t|g~uNLB#AXIqN#r^QP3dS(!zNc zU&8G05HsUL_(lW6PGJ}Z3kypma|tZVB$;rS8J{N%LtN8FN+H82V({dd%T{gZ?qq!-sg%nJWPYp;ZIe*7?v1;Qw78?!z^mqP@p_6AR zG$mN7)_C~w1FYM+lh&3LEBf1U-6p0c$8lU2H(8^pVDp~0-^|F_L+qb)$Tqj4f*O$} z7?1LVoqOq6;ZpMzx9^|9@bBl(KJYmXpP3;NCaFw{Rl6=C+qDueh|rxa?7ndarfFhW z7AjVt6@fMxn}JP9MKWnos(3Wz(!@v%1le?gpk$)aq+6RHRLHPSHl1PHc~|lH6ZdlH z=wTKg9p|Th>9?@cd3?W)VG6p|Zy?v)#?Z;5Xe%ZPBc>}nwCkuETHbZQNEj%+xO5hu!dE;FQU*hK;--A zb2DAfe2>=OIpZaTrb><_PtezyL&OSKLM9=YnJ=@r)S#s~M=qP8IA0=RNnBUb(X|2{ z*O^BbhKZI*B4yI3cw|#q_UyTYk&zQT^u#e%uWF-^ zPqI8qA5mW#rm;AM_H9zF9SB1bL;+SZLI0Woa=ARGkDR7lu7X&O_=FV8leA)ak~Rnf zk;@fUB{EGPM%bZcCq+}+3Zf{a@nf3mc+M@*i(mC>u7BOn;Fl{>DAf4a#EMcQy3WmJ z(UFp${-;lJ^4Mw82~fcTQ6%Z^YGLoL6$mMrm>MUUYGro5j<5}qtyziB`W0)q6>!RX#xi=?{mcK>;cEUlNd)*Hd9phy39GP`7 zMMTnddE(Fr6%~ar zLnf0UolaQUY+7vIeHClBU;Sgz=W}X-Hg4U&UPFePD{6ZZa7k ze)vgw_pNtg8G<+{f)2>%Qe1xVdeTXgdfg||4F*>4W^#HK%ZW)OT<{|f9T-G+?80x~ zNxC*dadw)=PE6CWZYz$PK*teM2rOqAB%$vwk1uPD?K-4#dHjY)c#eJbdogr;3qTsf zvMI({lEEZhO%^B5%#+Kzv^1p&f(YBT5Qadbh*ij{fgRM!ArCzI0GIDsNzDt8riEc> zY|{Y4L1;l#t6`~GhL0R(cyJy&(L}D0C6RI|E-W!MI)!1|IEf62WDdh}P;o>U`k=K4 zLQiNNUewZ5IN%52X{{ndt61loJ1EYN<29;3xd6K9r{6;7iUDesl2CD^3B32lw*B5j zI>pS1v+^sS_yXvNz^f8RA*PJjwxONomK;ilM1i7Gs?*)M0wut#FJdDY9hv9w*&+j1 z+>EeYq>lKdH(X9jN-{j_ftx}KiDlWCwuOpfqA>g>ND`^kvenW0TNdbQsSm^Opl%V$pz5O?|v^zDI<;|B~|ohX}f=Gq!LOkmAUoPUlQe7 z6%~8mtah*JO|fpElayuQ`60!n3JQVehb&bBq^eS_hTQYOVG^tM(YAIMfnTSsDZ_dF zNxpvf6Wo6Leb|{SEj@k9#0dxj-(U72&H+Rzh2^>=Qb`QM#P>W90`UWfRy0xyA~Q>{ zG){M3F}vikP_D9mT^EzHRh~RFN)!ZyeoT3(OsF$t(n(ZY$23e537e()BDqwCu3U<< z@q=rpxTi0dQ~rm^hcYlTt@r4>R-G?ExwxXGN3v@oNX zYgTkOkE9$9IF>LnnXEoLc10$@x`wh zr%n!H7+Tk>6;<~lWf@9dczy?#ouJl;S(uwemk>(xWu(GVWUV_bCRL)MJhpqvtu;^KSBj{TsuV=_|)okoMaDmuShx}$hQ^n6g6bFQF75ZEV}YkR~z2S}P6b0HtGrjs-$1KL}(~ zHZzb*J0CGkBW%iL1S(`=eC#I=K-awDwe+oBC%sxj3)EUGY5zg3Trs$2M!~Y3iKB>mrHYWt^e%ztq0e1u-vt~Y zFzsbuYH@0mlc&a5n4V%~n@J&`<3h89-ZwSNFzq*W#`&34J!4Rv57L4V)hT zl{=%SpL*KtY|pTMWsY@gcFwO`-Fc#`r}<-UrkRkMKl-km{Osm5Mdgq zP;>bB1gY(>#7gA|Yb8K0kH#31Oj9#QDuS1;NsuUe+&xjEcYPbzY-r>CU!EY)E;@=( zT4NXz6NLbxz$et-0?PLiX_!>zCYd^Mh|0n&2!jRE96Gbe_O&hab+t0PFhb~uIEm%o zQGtPJ2n>9>S}knbqR|L3r66HhWD*GsSArj-f!MH!OovE%XcS-|q`iDq#SMzH$LZ6*^mZu^sWb+wz7O4U=sufJqzsYIZp zw&O^ol1aQ;8R955w9 zNVE`Wp>)!Y#bQPM)7;|XosLN^oie*qj zACjkd0Rm{`)G5|&-K2z+*aiDt7rx}`UrnVG+Hh0#k@=dw{X-w;C0Djl$gQ^GSgU%? zUma9R*itAdv^1qjvD_e?NT8KqYNmpa5vGjz_Y>MdtXbWbrQ%0CJz3-Aq{FUmi=LJg zwMek0-QwrpashoUX`X)iIFB7T%OP@<$^3_By_eh>+4)E|d5%OT`+!eR)J=AasNy1VSlll^UBiv@*BQ zAczFgFoR z^*j&9l%!k}zf!?(gv7DJYbfTHDwt9bd$sQhx5G%WwlmH3oAXR9dHln@Gt{)pD_(pl z!$afz^lNUSH5v1Z|LcRi;kQ1{=k_nM*bx6=@TfSVse2{utJWgo2*EOhO%Y>TE`y6X z&Q8|oX;0xeE@2R(Q5dFyAq2HrK(!hm5{cz2lx51`smUpFNgLaipcS@buzF=Ho7VS& zhDN=CV_8H|gl*W;4`UV=CNIpS+?86GN*R`ES(c#`rsv0ID(RT%q-&;9Nh6cZl1XPc z^7NC`>(3rd%yVXeM$a7M)Bo^SoOkKf!BUn>Rq zc6YBFDH>qp~3+59}I7`QfM@W<$hPzT8bFUau_b=$*2h= z5dxE-5t2ySC<9`pnVv0C=xia-F^QB*zPZ5Y*cgo=pA9`-7%7KxwSi?xlCDKAmtf)^ns14vvhNnjB+vcsC=J0(VA;52x*u85riG(W}UNw$mPiu#rA1YAV;Um}<)LDOa;b=6 z2@FFrHB)9?7!U)NElC)fuGSnA^F>DI7g^QcMWb9Jov_hBcV~{V$r31qKp;#olp)Ji zpHjK>`jqAW?^=C!Nm`buRz3arlSiKuojx!9KvC#ZDb0Szzjd{zu`G$!3deD?)tcWF zcphq($e*l1l6lksR%0-0y-d=#vF-VIz(T`CdMko(M znh2#ZOhKs}FgshJsbJy8F)9p6*bXZ@TbW%dapuf8xpV?4Ar51jvI!j9K*c6u7=Vxn zQwU2-H9fo7v3h0S%c^zn!%9opl+VVFZQ=(%{>J(j#AGT!sazurBLT5?ES>WGARk5% zj_crJVH+k|X&l?cG$i^QFM*N!S&uScIcGyG%M+Y1Ij{VP`D`O6Mz7^ybtCM{*V z8dHckh(Ku~!^9E-*A*zG(P)I5CjNIthgfN(H2B%eR+985`S>kQvNSu-HJ5EAkx267 z;S+4xxSH$tt>dyr#20S8mnV-^NVIg5$mV~@$_;@uOv*Fks4&EIT+o_WfYKne!ZIzA zsSF7>foa;9hJ#isD2+ajUzW4n3G)I+?_A63Zca3}F;P?1PkKde1|TK1%2nQL%;Tn4B1%WYvm1ZaPh< zCECzLUJX-7igQJpJDPAD3xpO6D=f4Nmj3HVQ#j_kz-3_ z4aN4=-8@iULis+1Ay8;qlknt;aqd5{NORVvf8RAcG9h_-s6Nof$42MGj@@}`9ypdsqgtcT+Jd1H%uFoO)@XbiM6&jpDByhSX_A!VkByag_~a8GnWM;d}Sim?+e zCJHm3VkwBx#ejvy3SQViMhQ%5fMFnr5olShRn^q=%!;~Hq_fR^WlKG}g{NDyZ zQX7O}M7B^Mirr4HR!1ZfSXPXV6$%pw86KU-v?OLKNh65x%4J5Tr|53YFg|Xe&jF|& zL>w4eB9&``D2eC!476vd&5!XXAG(uDxyrk5zM8GX{Ow&&li0m)xkCT_x)FsyNXg>x zNmLZk)4h^pGD#5l)XGa#D)UquHI$MFX(415DfqT>wMHY*2;w+YmLcVfui5j^osUhL zw~Y*4xVTtTI+8M9NP=x(=@_9Sq$#l7B!P-p*_q(JCt{@VY04TPY_v9+p-G$BSnk-^ zS&>ptYApe@A)d90#rKsL1b|ZMEa`L>({;4zJD6T@^^(_(PX!4bS%59xN7hvyO` z7Khl;A(^fPIIe?jXe9c(fFy)K$1# zb&LwiQ8t~lGa32l1$%mj+go0AVRe2&hoNS2c8Odn0ctrdA+$!S7|Sy0?8ws6(#+|Z zB)VRvDXH*dQ#WEqy!whY)y__F{i(APLsCj1gjA*Cv)g_6z2tdk=K!cx%bXpaCX>x6 zw1JaM{l%s&>&9F188Z@6VVL9{o3?C@blO1+wcIa*#*%{3sUl&`C!f!Lb4!jyV~FL= zfNnZXQz6IMvf#mKhkQOq&+2tloHo*%FXoLm?%{10HM7B8AZpYQhKZ2h8J-Iv3A{RC z5Ryt|iGzrRsd0+sDq6Zo!$FGg-yNeh_+hN-4KMb+x_#cx^^tH=_jR}DK6ULS+e?OF z7}7xJk_mFANh;wG87A6xFwYfH6Dborl>%u~Q7w#Do0xB;gi?y}>BV%hRExFNn5H4B z)jIPF#UH!wUJw8R7#f)(kw|JGgkc(mLvFI~v)eYU#j~HIj+taNV>mf=Gg1 z?&~Q5?=}4565wsc~jpVagao#2^e1 z7N#Mhp{XiKH*uX|XtYKyEIv1+n=cpued)_zXJ~keM50-POQmLgytl1Qby%_S^s#CE zg@>v{aX=zzbM*8)4?QtVq%=|mNU0f~Um|5$%SlG1m)X6<^4LopMEH#cD)31r++~(9 z6)(3}AgI=AJn`gV9(#He?bj*J&w@1gc8^+%DI`6{G>sGB*sDA}vf}+}p{(j?z)#UOSgkx(@M||S82_8Ezg;y%mY(TRc zb80xC;hQ{@yAE3UW-uTclX z_U<@Zf5+z@8g(Cge2Qwr5oB`oH^=C3xxv2PXi#pLSRLz#lwzQ}m8EixFp4ov6Ev8X zO&rB|^%|yS604Xn2)?zM5W&*KD0km^AGwsn4VP`@#AJ;`=c;9J=x=tHK^&q=3n&Eh zi*x7t?tk#_V5~G=Bh;_IZlg%r;>{D&#ru3ezz-39y{#&W6j2mU8cz0tq-6}u&rj=# zxw?Mpq#?VKUC^Lw0mQ_@#0I@{PXFvQ-39;G;P~b z6VqkAWy=bLKx(a{dM!TL-JE-QA(t}#?anE4VZKVHkQGgv_7Y~gDTfK7AVLyC6n%5n z?c8S&VXWg!LT1*k?RmU`aon(NtI*M@*KOH>n@BP}KKet?|Gy$Hm@5px5)Fpyfu8a) zy(kJ>5@LT#)+IZzQMtJSuJBoi@|;TSW3KIDJW)VI9#MH7g+aOIV>mAA8SM!{7z9K? zfRKVlz5ZQ&&Qb^r+o7YkkHz#V=Iky~wm>e9;GcSo`qBcCF!4=?rfdNzENayXI{x9E zi+&iZeA+gD>V_?+hel?8M{A8`nz3mZ`cwbYpyvKj$`6>tin7O zGKa+lv{n?WRhl!&Yg_W0Y8L`&n$*Y7;LT4hvu_v@yQ80kE$QoOXL`Q)?-I)AnmvAq z$&i3BZ2~h*P@Lncy=%Dk;w`L52PiEGa2P&zgoW}P2G$RpUey}y2a&jDPxnZi&g6{6Xg&kEW^=yQPaz zOV;&uu(;eBf|UQ!Ce?3=KqK8WRgw&k&9Jg9$=X%jtjcSS96ZjU<3o6j8iurfARd+0 zI*wv-{l#m}wzjnVy*8rh$) z%#R5XRS;6dN-;C>?9GJ13*-v3Op`5puAvfoQcFd1Uc7#4X=(G|)O>7PhBWxrl&BDr zpg526J%lt6LK68N86tuhDh-c9I{5<|!hWD=jZh(OuE4P9;$!!XGcq;prBV7^!<=5ea^t|KRw>buOYpL5cQG)~MZ!(+*wKl^u@fhDS*95_!bX0_ z)-_jNwQnOAZe3wqaq(UfiR81YyXVCM6`EUk)6c$%pSk%BTyxbmTzvJ*=~}g2_>CHI z80w~G=l|UH*zukdV{;^3M;JmN#d4J$DG`Q&H#_-E|0$l=;G$idAk{*o6zxq}W*18s zhWuv3`+xS2L}8gGbH2&sd<`e669hgjSqE)7y!6t|%+D8DtooS7_xL>&h+;K}%Ed}o zS8LvBY0lo}IF9MqwtDd4N51E|)GLd$x3$o>b~CkVRhy_eL)vdSF*fU(($JP6h0+?W z!3zSiNsAjVxqxIQ&*@XAIdk|iYF?E>KBbdMNBE6~Os6ubp3dAS9M{%8U2R0M;KcD0 z&zdfua|_hp-_I?d`xk!goi}sM#XF5F_pOtc?bv~;HH1bet-XEIHFaJx*-BHw6k!w* zX-#ylOHjuVMmmq((MK38GloS`L?)M^rzOYy>>R0ty_`t=VKgm2^l%g@$70yea3EgA zk?{sW5b)^TALlpU^Ey`bG~;_AUJwz*>N~BG219D{nFK9OiROfB1L%$G2WV?={l4$H z|A9NvXw{KP$<1rFjdis(KbT9ngmJ8tUbaLHzd_nDxbech#>7pdl6(Yb1~TD@hD zTEDKFRXNKrBR}P&&0h(z<-n@$cML-P`R$J5CNk+nY&(uv(ck}l-|g&)qm(AbS-)nJ zl=&9&h3psBb`?k%j;?tD)tX0BI?2nfzKE6m{Y*`cGdXewJDn$yEufXARu2fnkT42W zpH;of^6eD^K4-P;mZ zrt`H#PpVcQ#pf~f#N(Vxnhmkr8+Z9HEMo{p_N2yH9IrDA?5~LHiS4*3ttpmkShm6XfhIaKDcRrFt&g8sdfBdxoo{Y0BtKMZ_{No&?ux&5%V&P_ z0Q8wpd>H8@1)x38>zJJw{m^3%+|&N~fBUk|q!Xg)g4LLnNH2|!GB-2J>P>68>dIYQ z?QNw}_i6Z=Y*Pvyd)#^GDQ2d|iM7CXVshE@sT&4y9HFFG<^!@FEN2-&w(HWUR?p3r zt8Y@-JwrI9{P=r}^DO%t*|bX()hW)7BW;^I9ytSO%8h{Ok9?g~-A$wtHo3G*HtDcs zbvuQo438c@i)A^gT&_s3QR^r)HKVl>wVL+>&#AY!2W{9ws~ADhzGc%Y=iP65Il|Ty zJ&)m`Q4T#iL7*etOrEf+s5C-qp=Q%SE5H7ZSJ2np!zVxgI493kl;=lAcU$%iJ2&-z z$PXgb(%N)=RZtwy8!Z7saCdiiXR+W8VIe?pcL^RmxVsZvgS%^RcXwah7T3GKs{8P- zTXi3%_T}`vHBm_aA`1Z&djZ?*{^B5 z%5;OB(Z;{;W)HnClyil{-l_YSJ`udq#j>Y6wnNP4Y}jzIcply?tIJm zV`OfOJQg?qiXPO%u1Je(lXUXw&5j_Wo;8HRid$&CNyx!(W1(0;$ZbKn^de5 z<4Cayr;odvO(k~Rb>>O}!v?*0gYO6GPvFSoe7e!zRlEtd4Ns^k~z7{(dSKs(JaxsD7 z5nL||yYCG(2ej3)q|tCpa+V8C;J&S^zjOshkv|Q^RVq$lW3dM74t0X0Sj{Ws1j|3A zYc<7Q_b&Jf^=-HizFa|4J5j$j!_wTkm74N%2zRN6h>T3i@sBngFm+ViQ0&Cjd^p3# zn&9b_2o`*p9%i86~OYEj|N~HdW zIkYJENiw0hy!agS+z-+}6yY&*{FHJ9`Z9!YM%X6sO70375T#Z`yux2taeP^pumX4q z`B!O}O76T%ESW7v3-5aW_m_q`>rO@axSuSCc&Bm0vmHig3jbi{O9s(Hq{caiTvRm4 zM%1%CiEF>zG9-hNFTXf#HR<)WyW4lK)MBCGDtvFPX(@~txTO8?UDNT4>3$5{5@=@7 zR_L1?%qwYm7@m%>J~A}dCJ(!k$5C7|Hm@2E$!6|;e6G~3%L|sI9hx!O^S(~;`ZdGz zvfR-XI&zF@(0WIIr(N;KiQzT3NvFrcduz#N30a7#%||)Eh8>xJj4bqkldkDJhIw-8 zTXl+Kf``8E9Lj11#Ib()F(`02Z#IBf$=>hero|xj7X>%syYwV#y}A{8D22~CL7O0A z#o4J?0YW~0^dNVtyCQv2*Asa6NYKi#3x;7!f}3zHj+z9ih#XOTI$*rVJnE2Fl2;+G zGT1-aMy?3VePR|--^V-=iv{aHO0DGPaQx9=#gC?}II*Te%%6V<0tx*3`QhHV^x=8g zF4x##RJaxtZ>2dPZL)Fh?)y%KCgL*1rjkNccbsG->%VlBmaS*1=@8NVYwt<7y&zSR zb7=2NsK;IPt8k-d@P=2@^;5M_Z}sc_RxP`5|NLzQzX-SDMx=I7++Y5|23zK#r+C+w zOg$t00_iia-k%9tDMYczC>+gN%om%^a$t{CT^ipv&^@@^@9763iEv@P(ijzQEoD^R zp%kRRCtx(aySQ?f&vNV1FuSzj4?S2ck1X67cIg(c#4k&3M2NjZ-1^AH6Z)ZRC1Its z$So@$Zcp9qzVqVy0n_dIK;oW0@rP~ZPt_@u zE{AA$zjtkK)w_`2dkm3mON4xB@0X8bEbr}t=5N=~o3H=ezbH;Ei6A`)!*rN9?_$Q&B0a<#o@(cVh zJ3$Zi0=V!-0Y)q@+=H=(rj63eywStdMu_9$MA6cLl|JXXt|P&UDrn&09hmuYg=Nr+>rx_Ixjkp?OVT4!d)_+d*Qpm7G%2)BA$Zs zgt~3cIOTkm=H8}J|7xwSC^PC9JlnY$mWnhOU70op#@8tajPJVB@VrQ&8k|AOh%7Am zKqU3t;c?|CTPRWk?TpS}_VyVYAU$*o9nWaKj%PyB$8$g9+cR<)nDUliYS}hT?scxN zU($<(QckZ{*w&}IeGXI!^}jkNj>Sx5jgL>Fb3+@m99`P#>4!3)_^RXf;QL!?_iOJc zM7q#Ud8{qfdz{ijGouPW^Q)Oy)Bt}V3xhuJJlVWj+`zNntnrOr2S0=zV^_bm&M> zXGEd*ee&@e6ZJh&E;K19NJ|gKEEtMai$%$BA_z&voz`}KkMU(phFh@S5OH=x7KOjt z1){7e?Jh8h&JqaIiA-0Ktg*AmP;)AApG5ofBXXvDgP&vl&h{>!iVQv^0%QrGNH+9- zMgRU~9@p(T_W5;Zt=jyu%9XlKpfG9OeM`-IU(EnCTq-8NiOJXf?CpDErkT5k4Wu?iv96CCvJj;+E#M11!h;hFWSRV}1V9m; z&ud*|3`Ns2A(5RrlUv}n=oeP%TkkoCU$D_3VLk@%IHfWE$-rd>)#?-;a1`^ zK`|VrjpAyLW2UDfn-_*G@1V|8uSx$e@5f~C@qVxU=eao5Ezd$Cj~|`!iky90zWe3W ziW95v_KUZ7lqh112N8KQQt}JABS=C_5mY$RwUF)f1J&uhK<(F5-3~~QPLUDa_w9xI z+iG1o&b7r_`vt0-L<7;09kqh9%@*iB7qK3)_feHvdnqKO0nFpVvC@AWB9FC#Eq7Hi z>Dg%};277AqoPzW+s8c=%!b5uQ?%XP&0gcUVe6oGtF(biw#)2J`j7CBgv^)0puOCr z`~rqZYb$e8&zKRe(9)NH^&U5fbtUDk;&R5&JRL|z#t@M#^JQzR)@{SLPmwsxdupNU zL4__R_O@cH?XWWV{*Vg>bj}?y@Hxx&0wUC5Dd*&HOX%_^Aw=$U1c}UG`^NFGjGYjQ zI0tOK^bCzOV?S=cY)wv7x5G6Udk%tz!;QK;U#Ki`=72}0brtC%b;IMffnAdgyv&t& z@;qhHSM8qVA51sITI6DW24rIR))cS{^4A^dBMcD=;FFAUwm#HT@4ZulFNQ{r{>_~` zH0v(sq}F!;fX3^)fp12+?}?B1QGtP(XIFnRTWeZ#H^?=U-!nt!;#ZoA_l^eXre9ha zqUx;SFVh64BIQ9>KTDVuw7%G{iFGX8m~6OFvC5n-xAa9J{&k%ErO3*ht-5eeq{gxo zc5CX*!oSK+W2QE4o@!cL;#mf^UP64pRIy|&uXAMYukYzxeV6nut`QNMnnreV(DOu_ z%Xw6xkGFIp3{X3!YrpOy*-XqXZy3j_*FEvD_Q0IuW`K8~1r{m!7|i|Qd}{wqSjl@DQb z%ai{X(jCy|Gm?|3i>xJfLBSqW(io1u%K@umsUv6MXR^t@q z80{~`f=$D3^0GGwiOiDy_-ZlFiBcLoZ_xR26|s{S?$!9`m4GV?$k%Z}Q=27kaq&94 z;pcv|8EP*ez}s1+nuDhLX+`lO$Rs^VY4TFk@phZICt1@#Y_yR=Yr9JZHIQ9SFd_Ei z6tCr)PjsOD<4U4}V7SIt32nueRBZh93?Hf9q$MPD?~%W$R5~P8z39*+{f3y~28sBq zenE()&Q}DAgb`TbPCcXvmdZ1~lfUnMq95>XHe_sFJB;w=X$BRuYjfcm5u&f#B~Rl+ z4hKBd?E!o4uPA=kGTl9pxnri7O>#hF(2m!wN`ZR198zd;Dn}cqUn3uGnwxWSF%buc==hzS;+n)U~ zW>G^jbP-%lcEfFCNA(tdx19u{Zcqb`lGrlXs~Yg=*f%RQYq&vOLvwVYj-GroOB?@Y z*P-t`11Ilk%|W&`=+V{R%h- z(iIbMm;mVF#%Z`U<3la^C2G~j4BH+vc%P7sMj z1-7-ZV7%-hgZJI?m4@QzFFE|9i!3%HX248-;lXuaa?`qV2bn{59JHd{zSCR z*h?>Jpw*(oin&&?!eTVwrqx9sebVP0shRYtzWbS-?C}rUrSI#^kcKIjTpUpS1ckNz zC!OE(AJIq?IrRd`yf_Fe-j%TRT=d7|tW+$YKUcN7MlqGSflSg|#jB~dWq*U>lbV*b z?a|7yyti^b`;wjK;XH$8*+5o1>p@~p%k7_xj?*T#c!y)-x37W=o`J=>8TW_GDx$6t z?+Z*%cMA72VI~=CI#zae#r%SDj0bVnb~GEc3H-O+YERH#G3$jM4i;=Ii>8t(-%Xa% zpu}0euHtW5T<8sOOuU`S;-tJ}VzokRXK)jWzz~%PIH(~B+i0lS!QzW2C=?3ZPE)Pl zI~b6|OE3@7Ad44LX*Jr@;ADN1QBky8sj2e1?a=%4{=O56cJ}lv9D7t=-3D(&Te@Jv zyf%O&zUc&3(sf?Z*Bzo>N}|k?2eR_ulVnlE_yqLGAj+XjBSKRpI(BpO1Ne;b#pQR( zvFOl5|2rEo$ALuWJ}BV}h6B;Veq<1Va^9!5oZY;`BiY*Gf(N7qX)RV-9C0pROUv13 zX$OL(^2vL_FxuMMM<>=)=_3gatZ~Xk>{Dt|?fBB`$oku^|+^BuGK2*mF)s+FE ziIX#ykKByk7hR}-jktnlYOOyXWQ5wZQ=>#yd%q?M-Auz&Xm!V!dI~h-Jc=MCsu>To z`9F?Vq`nT*bw772eu9LqxNrP=JBWO7bKrL9xc2n9KclaAR^X3OD%CFD@w&Zhm|0C2 z!lW&ZBNpY6Uno~)VG}a3NdAgHV*7GbT0hV%n->qQSB6bM;^kJ%m5qgT3-QF(xo=55 zXJUq4w7uCFmFm`J1Ad8vz)HKCe&^@J-Y4V+tq1ybt=w;&=N({>{@`c9MRpAXd&k(` zFh$0RCUEoh_FJsU3)mFUjA=q~<=61#6+_ZSi8%OCOmVh$xi&A|zYF{OmV^vkr4q|{ zboBM{$IFyyM#j^V!OQo-(7~tYRC_u^A6#=<1{UUTOz!Y7fk`+GR+JJw`w{Q=5DJ8a zue+n9S#QJVp>r^U2PO?Ty}3ELy+R=^ZNY$@AzP%IEdm(VbnuHCxyB$~)6)N3lmwy4 z8gLR+Ac0&JIB2 zKVXyP>^tAaw4@{U=myi%bd4vzegS25CpX%&pYW zk5t;NQuMY)9f9L2s(lDZ!d&8gRCTf<6vMU&_%<__urr%QBFmJ27TjVV(eP)#ClC!B zjP`*gT)uSO*4!Dr`%3BVePF}P%o;CWVtINj^BJc@TPZ2hHHK*cSRE=XPDquqx9)jN z({7+&&3r_c15h?_;LCZr$x0gKK_w9x$gcEJ$Fo2%kt$WEDPs%JNDG01-j$7?qOqJG zGhj_-T5jqCTE&EtdT#%iJ9l;pCIS3P+euWx2*oL!b_8T0CXT?y?6LE3Os>>h99!B$ zj6R7@RMwGm-tP(z;DI%?Z)l$_zJ%7G!>W#FxZ3<^HiMy2scV`m*36L#B1JjhwhBd$ z#NX3>d><#f>Pst%7*e>eI`FAp?=R~pJY))Z{1RxNo}vuV`zGMZ1Nx;CmSr&qp$QfQ z{Oqz%Sx=-!;>z$6N4<9)K4Q>5o-S)W<{0gLAH2RX?jq&95-a!aKO^ypVFSw- zvxFsQn%O60J}8s z*4nITvu?H@tRIR;FVgqL4L&C;(Un->isDIeh|BVbh`d&u+zX^5F(u1)fU-m(<~9!M z+Kdc*zX@P%OP#(0{TgQxH*<#5XXR{y-2~xNhUBu>fi2$%iBJ`%w=sw9MYgTc6MvjS zumENZ4B)Uy=aTC0WKCD=;8&**jbBGSvHuq54#w|K&RR}4P7|NI>L}Sb*Cl;onUO%Vme*HLMEsiwn z{iZ5wCgAo6KSb(<|0CUGZ4l@6@Wn4D;itg;z8W%_kmOdI@2cIzT&!rs68!N-BSH6$ zQU3S8L1&lNBDEfG5nqHwEr~@rS`PAF$Ou|qcS(9(?EvlC15Fb)R--fsK4cPv{qlK@ zgRZuyLOyUs-0&E5#A@bq7Zw(Wg7|UcN>rywbCS|=}s16bxI#4 zOH0z~WJVTaGB-OL(7XLO5@@Tt5pMUx`)2Ec0-17kbxw;RaA3d+H)WKVn6$5!M&&~E z_a9m3m1NDEd4HMX%bM^Gx*tD=>jvF^+9u{(=kEkR>Ic&#ACO$W;@nq`f@79C2v{UG zAInm&BkWizPA#tnARp=vt$YT%xOrDoEeQrGbm?Wv9vs(>8|bd3+?lIkJVas-8e|v->VsKG+LI%xMQr0Y1{O~4Zg}MYt|1k}jEtDbdk!Ivi87+9T)zct zK$Gn*li!o7M)eu`(WORFInoXY(x;a9Z$%e29Oo~JOjhM?EijzvUu3%Ik$sdoa z8HXB+Ez+uvTUwFFShB-WB;KD-lS)F|{J}r%QgCr=iv}jo*E}A(y!c(W;fGK~dW>27 zaH@S!j*})jw0C<+i14>sGKy~-;kQ6Lbf`PYr_2-MV?6C{gAYQ_^F3MakjUQCs*MN# zHnL?B5|ZZRvFL8pu>k`xVRlAFCcCGnC&!f8Qm~f!MYCdJ&?)*52T(rc)L<~`D;3H_ z@9cVg)fx!)E0bmwwC%1|UJ|F>5Jze=EfIc*+|dHPsqSFO;jg3cz2%hfV{O|`L$p}o zdupXtVlD+K-KBxAT!K79oex_R>*L5T_ZQ}lBcSiq&jh5NM@EpiMz*#??e|w0zurwB zFOMZbzdtZ4SrE&^4XXbAh5JpDdq?mVow;A{?vm(p_3N$C$oEwJe>h9)k`|ZN7j2ik zwnHG4YConuEQR%_ZM*f?K|be`dE%E?)ay3QO-20GB*ui$9Db$7cOL6>-c^lzHHPo9 z)CmoE+6;1dCNFSqwnt(OjX%$hwHtJ<8-YBnFXe2WgG3={> zv^^T*<=W|^(hv5_=8r74OgxmKZjmk@1;}wNEBE;I|NJ~}1U)B7;Y%W;q9!UKW()ly z+(N2F5!3vTUsundiY48T@WFHR^bMc9KutL;F8zK=Of2$mM6Cor%R9q!V&^t}4}e{p6KNA}IBM~!lrlTD$Tuo2QFm#c1-12!5;ArVN{>R{Z-u!`2H#2fH%z!Gwqg*Pa__BK5 z@bEC#UYA3TdY zbvsF3tW9O(umv$&)NZ{zLm|6M!SxxiU5E~9^uS5iZ6p|dA$T^TsA%`kvuAtJEPz*O zjy{!%o&+O=onI)}PUna{*KPtTl&mu~x=M2jTYLRvxaG`x%-PctxmvZaQ4v$_Ur!nG z9WXgGrz5Z-alc9Dq2BL9Oc^EnaHE@h1Z7EgQgHK`QN-OVW{R4rL3OC#!1av#^!dj2$C3mf zt0(MpuVRh)cf4~utNYCEfQeHY9X@LKK8y>mqf>67fz#^t3}G%XGkf1o37JtF|I|gs zA=~B~Ym)7ONlsf9%$JUf7~{Jv2|c_pQ6${3-a?wrzb zi1_L~A4DP|X_&_f8w;{xvh9x-ga(y`d}eB|pOOd4N(#{d5ysD+o_+>|hgyw5o`#0` zW-Lo-M@5R9yaE=sU4D%@=kEpeosB9m+EzvxQ(c{pwJ=AG)xH9Ta$^(U&~67tO!M)+ ziNlvRn%ldf&Y=sv_H!iZv!YSY%4rK~BV=iCoUg5!;~gR|)t2H#LTIm9%lVNaHQi2k zEWqMpUT=dg@?5V=0z8Y=DCp?KlHw+{1)R+`{a2&KwxWNs`vu<4pffc`#pQZ31!euM zNA-QDAg4&3P@)u(XtBv@&Qs@hn;NN3qsyhjc?j#wNl+>AqV zwf{9JYHMeN?S;siCCnHPOsV7IZF#Txs2Jk|AAM~b++8#>5GR^H8-*FQjn-8OYD$?i9d<=G!iAS@kgj;d98)oyU!haKL^s>QNl02Y zaN=|=URk#CA}^`1O`WQthm*!K&=w#?Yr@6hgFOz*SGn~MC41;PvHtb0(!ku_F{5yA zW;2U2*($G*CfrUw|C=EpTvdT;-qg6{XCauKj4*!6bmdw4kf_+nZ>30#k)$e{er!u` z^N6-{{b&-_(Qrh~b_X+Fml8z0dZ+G*HuAIW=AVzf{mH}lZ?>s2MZDAQbolau6`XCj zNQ66YD=$(B*FSR>ipM;Q{nM-G@_N8%VVf#K1G(;Sc3zv{XtH7NEj z#G(8#$a8LTMRi&!6B`d?lH}}@@k9-7O^*B19OhG~vzs#t6~>q;Bg5P5j@X6@QWdZd zA}%5H0buuApse6HYZAd9{ajLbfOf`D+dmC^oLrg*OwGcGXP{!DYID=#fB*XE{w5!W zy#bKqhorb01$Jc2LRQC3rYPH#dB?~)-H@PY?RbjkDW`$#M>!6I2dzx zpOWZaZ!}^723A#aqI_;)adOhf>+z&SByyS~IbWi&r31;=$UerpwRbQ}XT|3@c>VpU z`g+9g75+~CH>TXoH<5+W*$nnD#84GfHhr%<9zvrzT}vPOL>tl(?#4Tt7^b2m?_wW5 zM5;D`_OMx^u~lh6(tSwk)-9#T!$GKQOTy%&{oqiJa7H`X7|#8W-|d&F-!i{7x->0( z?e9BDvh=cMolM4*B11r`GF_>e!2Y&Ek?~6=EPjpz3~wW z(#GX=o#Fym;GAGdCN5D}2J5|_Zj_WbdWY$5*M_`O7C zoKxyVIgJNwEr1s>j*M1_zqo3d`f{TKStW^`y1W!5pKOncYFtqnB3u-=1bBI|7lvz= zI&OD;Nh2i@Guq>Wjg}Y4QMS;8_-_W}_P;rrE;s32=rmqa%<-0n=HUX3(`bS6LQ_Mv zD8xFz2SNztw(hji*uGrX6-m$g>!5s7ku}w4(dDgz4vsUOJLhA)B)*vCldu3s6CZLP zoBP9USFf^Z1GgT7Qs~OH80{ck%iAVQzvJ)4h@RLMLm8D0*Qw3HYpy*v3mL)HIR2`M zvn%#k(Oc>uSIILhsf?H=p>hou^bigOnjCGO{7xDLHP(S~#bCip!O3;+tWLqDnYE3& zacx?f;~*)DoPKVl6#4HOw~e(%N@zFhgA#r0Vg!%b`9Lc}0IoR1!r`r)m448FOi*k- z`lv6-yEi+x&|B>416e!v@bGH>2oB?9AmoR!BQtRGP!%2?y$3GGL>dvwdf3whQmi=6 z=o2mgLUWd5;|MEzo!8DYwGe5r7+(I}**v3e{kmI_Mjr$qL!X;-IyA9#4mM4boRid* zmq#uxYB)X7YHRDrmdqNvIH}H`=pP1v`L+()?)yz%R7Q)7%}IhkQBeg>MReudF`Wrt zdJ7gO!hP#n>fxT~wzaujN9fOu`pY>MP8Aw1p0nbl*cW+xq5W@sJgsW!#Q5%{%Smc2 zB!X()6zC<7fHa{NOG+MLBDr7C_*MSs(n{x$3)_$&p{<19xkQ-{oKH+==G;LH;;B>jUK5`+?L_ot!J z^w^$ldZwu(finh2mAIhqceqKY)ydfauTlqlp%!DU&DLk3r=C8=80ENe^GT)nW3y3x zgau$Qe+Z(mskB*qGKopV~{YT{WTCn?S*T%h@I?)Y{hY)3DbMvi2Kx_)|o3+)F4V}Pn zFk1Tnhj(Z5U%^X(45`n$_v`grCdnW3pOaL{HU|%W7t$K;&Fr08MU|bJbap{I)R(%< zDeleK8Fjtv@%`$NG=nm<>`G#VCc9cQGmDaHtWqxaT{`gWDE{cUoV+V7#W{!GgiE#X zeHI#lehTUx-Z*VB!2r#u*O;YDCXB)a)+!S<#?Qa9iwpQvG-dp40sct|^f3spS2|2X zc7F!@$<+caj&!R3pQQ3H<;hdThnB^d~uxrbzWP7)^5;x9`m=_uV`g)R?$F(2qMqK*4Bw@if*70 z7XG}mEdA@Y-*T(?uJdx#0?Xltmi6#rQxzWV?`O>lh$w1?esU<>JJj)YInUs2t^0-k z1xF zAt58uKlUahoHa4__0e4~WbCC5_HComlG_N|XN#4>C+0ed?D2zeE~&y`W8x&4B(2zg z5nYC3=Yf(g4i4^9y-ZG_^8usoTJg@yI3C`QMqjF>uGa(aYXgxOM^@`m+#7y`RL{zH z68O}Rk=e5jMV_hM{S7^%N{DKi-=}P40{uBUlFZ`~;r-zLjk8lEItht-_pRX%ibezN zkCnN9Gki04&8O!Ib{Pt*gh3p4tstj#@adGk>RgcmR z=jbqIvI@=bD97(|v3kRd&(-C6(cptdRpHJE?-^ff1;V?)%s1{nQf-kRQ^$o+FeU@? zjH>O9FO>;q`y;80bl_Ar!RXFh_5Hrl%MVrzrawCCoS#M?MQmA42#hBz#8Uc9K8IPH zc!<`xDnWEhjgnL$_nW>+xRQ_xP)LPtV?@sbKEMYKy}_k{1CqiP$pu!7jyB0SY+h8C zs)fq`{%27~KqBXy8Jo0nA+;?w8*sly_I74Ba*t%7kd?D0B@UoY2DkT zdpyaC<>Ul}pi?;F!%N^p7EV{PYV1_`*;q4dzT4^Pbh0Pg>;?L>vuy(99D#D_atsS$ zo+t3-Q!t6&8=v3pjOg32XqcX6m#or~;xhoLLT^P;J(F6mgB%a& zJ7@fK?IL~%we@^DF^R!N4N~gL0AMxaD>L0>w!#w{3{X~a&h&aYaXeF4iqXhKK2UmF z70tWKcV+BHt>Yftbr{;5y7=J`l07q z8PuYL^YWGpDLk&}Y+7U=WSsb^VyjW}8WgMp>K}dsMJ|`?tU{%Gd0aAB0v$G3!9v-Z zsjcJnSmDCuP!W4+p=93hR9lL+Kb$xgyo+mGx9BwQ?{4Pb)mAxJo>vitURzb1KP*Ih zr?2}gQHGSW_m3sMSYBM@+6^EQaEtGRQpA|3WoG9AOVLBe#-!_3sI%;p`e*7>kzX9c z*jW@y34G7=4~K?^3sZcGtqVfL!J|1(R*)4pEj=?|qZCqaE4IRr!XWY4&;^hFku3yr zm+?5B^!&5zB5lYdCi8IBZKM;_*7OrWrjnMX+s%$KpDl&01;YA%<^4mxm2NcVak|{( zjC9&$m*+ZwNJ~c>cd%kJ$HD?jxp*vzI9BJoKlM}r^1tW+6E(QHieV%6{$4KM`rB}L z%%#@WSf8$K6%ssRM9e3aX-OF`PxXBmONEp?On9;4yhPt2cbeKZa85>r*_kv{gfYg- zVZ=mx(9b9NpELbz1BQMw7TN}63nt0f+F_on#V|X+IvEKeeqN;mvgvH${SKXfK; zq@GI$bI?~7PiAtsU94Rv*`I%?`S&W9%=eysY;7hF9=RriK+NtR_bWqOCR4v+O$5VD z65{wNkSOFN#DSkwt*kJrB2}cVuy zogWZj=M5KPg$eK`X&7b}=vT&jmcsS!l|E@7OVlIP$C`scxlv(oxDpm>$hy|wRK*n( z2uX!phPZ~=m~-`+ON(8zTJG;(a;(`OWDC@H?E$5!h)Cs55#`Fc*(_^4j&jT|c7jZEUoYO>Hq2UY`52>L3EMmPvax@s+3c*3%xPsB1Ylw$B^_BR zQ5~*al0X}+5Yr~h8y`uEWMiTX#YNw6}2x^ZI*M2HgE=+U|<= zL!R5?8dg?jX*R_Y2i1e=>A|RkDc#)cS8%CUB<=HfWtctiU$y$r+ilg~mXfNlfzWm= z4D_y6ZmzX@w-bwz<>>M@c7jbe#-yl1cM|8cm@VM=P>Moh-+e55uVt^b^T);1u7I<7 zZeq5OlI%xP>jUVd6n12+^=(r(V`xZ9rXH39^09GkF3KEbVo6M1V=IzUmfrH}h<{Tw zyqKX?u%^K;g4QAr{1mym6=qALjr)5&1PLpW1$i@Im2^2L%nw)SMmN_2R&EY{86na& z%OFHWBIBds$k$h!mzmAxCl(o-|(rH~E zCCi8AK~WgemdLgto5-LUo*t4GdNwmy%QtbJ${AJ&iQ)o$GgnWOfAxD!!m2K=z3ps^)6q#5$Y?za!53ya`Z z>TOJf4_iU@t)NLMvw^80%GH9&^>Q5+Hg@8QkBA8UWK)V9J5Hj0f|?;orO z#-k#L67yCOu;Wy4)rR)oh-!OSxv)&eJIL{~E$s12L6%NadS3aG>ueY? zZbiBdjwZ^n|CE*cKr5--5QeBch*zBO;Q5m+dQMP3DFfgNL@ljhU*zJ0XvJ`oz^ZYnJ42#_N zRpG@`YY`K%l{t(OYI(F|yyf;vRbI6k(%Qfex_Q%&4|^`m40v>YDt_5VCav}0X!_y% z*oY`zj+!bHf{mFW7*=^I2C1du;)1GKq0g7Su)Gclhg|Z%} z<3aa+)ipIPZ_npCQh-F`M(b$H$~alRK5mwMTyqRKl$P3MvsvyjI8NN+5E<39wP-~d zq^~4GH{r1bXGk5l^GHAUtojo<+U(cdQ2L(ZsH`6}N?$6t6&L5$=+Hi}hjMdp$^l4g zuHXrDqyA#tL&x{mRxfAzU4-%eRIh#d8IY?!*gs4U|GAeQ zDi1a$F)}1YL>pvjyy?k0-Gx@ zm*1$p!oA?>k=6jo08B4gcJhkq9lch!5rdM-#W9NdHnuM+N_hU$NQtI$9=M|H>*H88WwD5WIR^ieGi1q?UM=S7jxS_L%)&nlFoK3cYrR0I^{nrwqny>$; z4cGqSI`Pl>;Tvg%VnxPpp6e7Yts|>DccVg53B-$A&n*_^pRKeS8`+_^^R}Ll)Bc46 zfof8sGP+*XW<35xA6CS;l(v`d~b_qmeQ)LTH0d*pa_O^ep6z z*jTE(BnxQ)_^d07;ePF)u)A4kEu6RmkLa_~EbaNlJ( z5+O_<&jw?*7u2{Ta8dyEWG^(V*iTQHGR+;KLigP#} zzTV4s!Yk2}iSohr)nPoNz(&JK;#18l z(&{=2SI1m3a3|rlJ(`OL$}5WF~cmPq9HH5Qok>NeHfjK8;Ad=zqwoQA^r z#>(kdoX&XGUzs4cic@v9M9n73?g$g|=;L^dTm5>eP_f_lc0Oo4$>2+-slyN2!+}ja z**tiPBp^iX4?Cv4$P$!bX>Ah-|5>@y4O^8OoguHR5$=AYC0Y2_Quf?|(;XTca%}fF zeGwc8fbsBidtokh7%ZBnMPIdf+zB%}fT<6-!Zhbq-dpr}aUpMQKv81&gul01$1Kb( z6zw2#-8uHIEGaU1dnr>I*SGGXQIr8(b+aRd-Ql`6y;*8Zid_n@jGUIVs^m6F0>ng; zU#YUCy3YSioVK2EZe875x@_IaE-fvUYy{4UJ~q?I2^dJWHKN4eh1$^keBS05W}j~7 zZK|_rx?{y*!fE7A4IEG^oIC#5OYaW<&H}QWCp=o~!m2ezF1C}S%ObF|o|K&H+aqK6 z&KLpJ(9#0`wVzuzUck1^jVOtn|9MtSuapOShUY$g=pw%PZ1eTOWRELn9513T z3TU1l(nNv;3bnY}D=`RJ)Rd717|@do3L=e#QzWPdYJ1w({>Cbq+6xu+MEyv#S1o0a zwQfZ$5+J<$`hE1fMy0y6@E^Z=fp~TTI>9&kItHUv@NS_l1EnB`GN+y0=nc?ZbJect z%=BUV$}ob6_O(sraFA~L?|0QnPz}3qL5Z~Vu!Osv)fuFT7~43)DVR$QY?7}{WzSqZ zl?8|x2xiim)%p&7fLAv>!Sb6Sq-JN1K7#wRkx}b?>v1~4iD!1zKA76_(elUAXLD^x z)c6&W$G9Tf-?QkP`WMCXQ8y5kCScwO_T!ZH<#Eul~!9amjdQl;`L0! z+QN{_t5?G+OwyUp@*$GLhcor@s_WdG-t50^7~q%iWmS;GuA0Y0kOck>vY2@hdG!aW zC`QZ$|eABUP z-bqQ5*ANos-A@v+m_j}HB~+c6YGlaw+|#M=#lh3b)b=D##W}&yF>~~WCYm`M(RpZ_;%ikmXha_(s~{df0h z=Z!waw~K!Z!DbdugAvcrqe{bfIFKA3Vdf)Q&Vm;d;en%4WLc!{Z!nx+T|l5Vke~fK zH&*D^nBwWPlHcaX^CK3us5C#{-@Ts*y;tl0z8#*AkI7%$a0)aSc5OdCF^}KvTn5TGivz_$Ss=N`j+iGoC~bXSXTYMct#xqc6DSA*%GL-&m42jVr!b7V%J!D=9(# zDKiCS@+q}UOGmDmssnwQ7AyFCoxJfwj2Oh>5eII-DOUUVCd?_yR%1;y>VJ=Cj)gYr zT4l_E*Haou_4OeXD0GK%LtyofQ_$68>c^gDgb?086s)90G4$W)^4vz2HdEis&AaNT zE9w<^h%0A`+h2GuUrm`0^E4_)J&T|{<$?_)tStL-Ehm1N6glyX(SN3wsl=$VuCS5L z4L+m(+F%}4PmTLH`b1(Wj2U9i~3bo zZ=W~PQNdLRHlljh0k*@O67)@DYo2?aPRH6P-b^vhy`vmdNF`8gw1o4UsiPqv9 z*1f&HxOld712bQa?rx^U*AhvgPYlV5ynGbd@^Rv&A>uqOtz!6fU=RE#isWPMv6?DR z#ffp_+HaCVhrQe6^EUa+o8k=In)2nQ>pp&ccz#~?Kfke=S$xydh21*?dSq!#i^Kb# zr?57v+Y(dcZif`y1T*EhzELkGeU-3K5oh=`*|I2~2c&AEX z^wg_2?y{Q=idbyoK3yw+ z`J+>2sgY>homv{XeX>U`qXUg=ZL!k6ci0rLNd%rwhofVBzL++isgl?Mz<}%veG-I! z`RvTA#kKI#5EZ(@sFSTc!-7Ph+OccaxiaUmh=~C2s(SYn=I63?|bNKCgi+M4nOVRa!~-_8*a@m(8<^ z%|b5`&>0u8==mkK(o^^;gDELX*p)cilc3m2PMm=SCt}M|u0MxdzLp(Xs;w~?p5AqT zIbAd*VVwXDF>0-%#A`!4^gjD5q&0mBb@Yxm_KJiok@f^&|{1tiS5~E>e-vgE2 zgOAgL-P-lC%>8%HQvU9z!OCjoDOT@L%m~wU;L4d$@6S6rn#+iVe>+rP4Dqp}2(;xP z9a?;SUj{cpN`q0o;u=rUUz>_iY>(u(@{I3~k<-|iA^ zFn8O-i#0eY}^GIrTbU z7VXF=qdo?g_jkuKIZoPQ2nh)Oy}q8HJ#X4vak3npx-?*8l=3i=*C zRxU-;I&HQZ4Zwke2Fl74@4vYQ@lD8sdbm+A!NfuFJ?`0_7+seJ9_*LD-5Ya8-SpNU zdSGM+j4indCFSIx0!({t*uGmM$=evEk3I9Nh&=6=ftWWVWt-i13eYx!8wm0ak&2U3 z3>Q1INRIuWu4L5IxTfaJdYX_2TEofFzcKb2SA~J@$^IEvwU}Rbo}zdp0oPr?6U%LO zM3h@}@nN}1i$UM4GeS6(utHHudbhWe1ra~$a=rG<*WLDbER|Y+YfwiN@+!hn(9qLF zIl~P#70ve4e^K7U779byD|N)Y0P?SXexf0v)w<1x zsTl3UvOhpMb)p9#-GHH0vF@h+`@c?BhY2dRGVWTJG;Yn>I|dw9Vga0Kp2jdK`3Q=y=s zXk4VUTuhBz%m5}%W{@8!PIgXC7ItnHP9Aj*ZU7HEfQy}pogKi=K2$vg!T-+yI|oxM zbC3W3fTkPw4#)uV|DNFNVD92>EiO!8NkM7WoKkz2Dz+EY*-zfEIOu0vLIOe z|FG(ou6D)%fTV+otDTv>3jpv90(FMsDEVk-`+qQU|J?-ukTtWiuyldq;N~WdD`SCR z@c!pM{}-caW$I%2A0*c3`6mQI@IMfx|Fg{8)RM}AR0goC^b7LR?Kg$_p_$_w0#wCd zXl80)VQFDxY~Z%hE)u9j2+5q_%&JrdV^cFrBd5UjUz35dW=OK3L7oh0nK`LI-|Ls; z7U-9N{Fze(42pC^a|1&|6Eh<-6LS+&3u7~53sZCTy0h*;6Bs;Q{an^LB{Ts5)7Gl6 literal 0 HcmV?d00001 diff --git a/src/components/CommandItem.tsx b/src/components/CommandItem.tsx index c8de161..6c29e07 100644 --- a/src/components/CommandItem.tsx +++ b/src/components/CommandItem.tsx @@ -11,7 +11,7 @@ type CommandItemProps = PropsWithChildren<{ export const CommandItem: React.FC = ({isSelected, isContextSelected, comment,children, onClick, onContextMenu}) => { if(comment){ - return
{children}
+ return
{children}
; } return
  • - -export const TitledList: React.FC = ({title, children}) => { - return ( - <> -

    - {title} -

    -
    - {children} -
    - - ); -} +import { PropsWithChildren } from "react"; + +type TitledListProps = PropsWithChildren<{ + title: string +}> + +export const TitledList: React.FC = ({title, children}) => { + return ( + <> +

    + {title} +

    +
    + {children} +
    + + ); +}; diff --git a/src/core/Command.ts b/src/core/Command.ts index e807557..7ad4c18 100644 --- a/src/core/Command.ts +++ b/src/core/Command.ts @@ -1,5 +1,5 @@ import { Inventory } from "./Inventory"; -import { Item, ItemStack, itemToArrowType } from "./Item"; +import { Item, ItemStack } from "./Item"; import { SimulationState } from "./SimulationState"; export interface Command { @@ -70,7 +70,6 @@ export class CommandReload implements Command { } } - export class CommandUse implements Command { private name: string; constructor(name: string){ @@ -215,7 +214,7 @@ const joinItemStackString = (initial: string, stacks: ItemStack[]): string => { parts.push(item); }); return parts.join(" "); -} +}; export class CommandDaP implements Command { private count: number; @@ -273,7 +272,7 @@ export class CommandUnequip implements Command { } export class CommandShootArrow implements Command { - private count: number + private count: number; constructor(count: number){ this.count = count; } @@ -286,39 +285,28 @@ export class CommandShootArrow implements Command { } } +export class CommandCloseGame implements Command { + public execute(state: SimulationState): void { + state.closeGame(); + } + public getDisplayString(): string { + return "Close Game"; + } +} -// export class CommandEquipArrow implements Command { -// private item: Item; -// private slot: number; -// private noSlot: boolean; -// constructor(item: Item, slot: number, noSlot: boolean){ -// this.item = item; -// this.slot = slot; -// this.noSlot = noSlot; -// } - -// public execute(inv: Inventory): void { -// inv.equipEquipmentOrArrow(this.item, this.slot); -// } -// public getDisplayString(): string { -// const slotString = this.noSlot ? "" : ` In Slot ${this.slot+1}`; -// return `Equip ${itemToArrowType(this.item)} Arrow${slotString}`; -// } -// } +export class CommandSync implements Command { + private actionString: string; + constructor(actionString: string){ + this.actionString = actionString; + } - - - - - -// export class CommandCloseGame implements Command { -// public execute(inv: Inventory): void { -// inv.closeGame(); -// } -// public getDisplayString(): string { -// return "Close Game"; -// } -// } + public execute(state: SimulationState): void { + state.syncGameDataWithPouch(); + } + public getDisplayString(): string { + return this.actionString; + } +} export class CommandComment implements Command { private name: string; @@ -333,38 +321,38 @@ export class CommandComment implements Command { } } -// export class CommandSortKey implements Command { -// static Op = 0x5; -// // public fromBuffer(_buf: Buffer): number { -// // return 0; -// // } -// // public toBuffer(): Buffer { -// // const buf: Buffer = Buffer.alloc(1); -// // buf.writeInt8(CommandSortKey.Op); -// // return buf; -// // } -// public execute(inv: Inventory): void { -// inv.sortKey(); -// } -// public getDisplayString(): string { -// return "Sort Key"; -// } -// } +export class CommandSortKey implements Command { + static Op = 0x5; + // public fromBuffer(_buf: Buffer): number { + // return 0; + // } + // public toBuffer(): Buffer { + // const buf: Buffer = Buffer.alloc(1); + // buf.writeInt8(CommandSortKey.Op); + // return buf; + // } + public execute(_state: SimulationState): void { + // wip + } + public getDisplayString(): string { + return "Sort Key"; + } +} -// export class CommandSortMaterial implements Command { -// static Op = 0x6; -// // public fromBuffer(_buf: Buffer): number { -// // return 0; -// // } -// // public toBuffer(): Buffer { -// // const buf: Buffer = Buffer.alloc(1); -// // buf.writeInt8(CommandSortMaterial.Op); -// // return buf; -// // } -// public execute(inv: Inventory): void { -// inv.sortMaterial(); -// } -// public getDisplayString(): string { -// return "Sort Material"; -// } -// } +export class CommandSortMaterial implements Command { + static Op = 0x6; + // public fromBuffer(_buf: Buffer): number { + // return 0; + // } + // public toBuffer(): Buffer { + // const buf: Buffer = Buffer.alloc(1); + // buf.writeInt8(CommandSortMaterial.Op); + // return buf; + // } + public execute(_state: SimulationState): void { + // wip + } + public getDisplayString(): string { + return "Sort Material"; + } +} diff --git a/src/core/DisplayableInventory.ts b/src/core/DisplayableInventory.ts index 41fd330..09d4c88 100644 --- a/src/core/DisplayableInventory.ts +++ b/src/core/DisplayableInventory.ts @@ -1,4 +1,4 @@ -import { Item, ItemStack, itemToItemData, ItemType } from "./Item" +import { ItemStack, itemToItemData, ItemType } from "./Item"; export type DisplayableSlot = { image: string, @@ -13,12 +13,13 @@ export interface DisplayableInventory { } export const itemStackToDisplayableSlot = ({item, count, equipped}: ItemStack, isBrokenSlot: boolean): DisplayableSlot => { - const data = itemToItemData(item); - return { - image: data.image, - displayCount: data.stackable && (data.type === ItemType.Arrow || count > 0), - count, - isEquipped: equipped, - isBrokenSlot - } -} + const data = itemToItemData(item); + return { + image: data.image, + // for unstackable items (meal/key items) display count if count > 1, even if it's unstackable + displayCount: data.stackable ? data.type === ItemType.Arrow || count > 0 : count > 1, + count, + isEquipped: equipped, + isBrokenSlot + }; +}; diff --git a/src/core/GameData.ts b/src/core/GameData.ts index 545d36e..dbb9180 100644 --- a/src/core/GameData.ts +++ b/src/core/GameData.ts @@ -1,5 +1,4 @@ import { DisplayableInventory, DisplayableSlot, itemStackToDisplayableSlot } from "./DisplayableInventory"; -import { Item, itemToItemData } from "./Item"; import { Slots } from "./Slots"; import { VisibleInventory } from "./VisibleInventory"; @@ -8,28 +7,28 @@ import { VisibleInventory } from "./VisibleInventory"; */ export class GameData implements DisplayableInventory { - private slots: Slots = new Slots([]); - constructor(slots: Slots){ - this.slots = slots; - } + private slots: Slots = new Slots([]); + constructor(slots: Slots){ + this.slots = slots; + } - public deepClone(): GameData { - return new GameData(this.slots.deepClone()); - } + public deepClone(): GameData { + return new GameData(this.slots.deepClone()); + } - public syncWith(pouch: VisibleInventory) { - this.slots = pouch.getSlots().deepClone(); - } + public syncWith(pouch: VisibleInventory) { + this.slots = pouch.getSlots().deepClone(); + } - public updateDurability(durability: number, slot: number){ - this.slots.corrupt(durability, slot); - } + public updateDurability(durability: number, slot: number){ + this.slots.corrupt(durability, slot); + } - public addAllToPouchOnReload(pouch: VisibleInventory) { - this.slots.getSlotsRef().forEach(stack=>pouch.addWhenReload(stack.item, stack.count, stack.equipped)); - } + public addAllToPouchOnReload(pouch: VisibleInventory) { + this.slots.getSlotsRef().forEach(stack=>pouch.addWhenReload(stack.item, stack.count, stack.equipped)); + } - public getDisplayedSlots(): DisplayableSlot[] { - return this.slots.getSlotsRef().map(stack=>itemStackToDisplayableSlot(stack, false)); - } + public getDisplayedSlots(): DisplayableSlot[] { + return this.slots.getSlotsRef().map(stack=>itemStackToDisplayableSlot(stack, false)); + } } diff --git a/src/core/Inventory.ts b/src/core/Inventory.ts index 6f262fc..4bc5e26 100644 --- a/src/core/Inventory.ts +++ b/src/core/Inventory.ts @@ -1,5 +1,5 @@ -import { Item, ItemStack, itemToItemData, ItemType, ItemTypes } from "./Item"; -import { Slots } from "./Slots"; +// import { Item, ItemStack, itemToItemData, ItemType, ItemTypes } from "./Item"; +// import { Slots } from "./Slots"; export class Inventory { // private slots: Slots = new Slots([]); diff --git a/src/core/Item.ts b/src/core/Item.ts index d928ecb..c2ca4c3 100644 --- a/src/core/Item.ts +++ b/src/core/Item.ts @@ -76,6 +76,7 @@ export enum Item { Fairy = "Fairy", MasterSword = "MasterSword", + ZoraArmor = "ZoraArmor", } type ItemData = { @@ -167,7 +168,7 @@ register(0x50, Item.Weapon, ItemType.Weapon, { }); register(0, Item.MasterSword, ItemType.Weapon, { stackable: false, -}) +}); register(0x60, Item.Bow, ItemType.Bow, { image: Images.ForestDwellerBow, @@ -184,6 +185,10 @@ register(0x80, Item.Shield, ItemType.Shield, { stackable: false }); +register(9, Item.ZoraArmor, ItemType.Armor, { + stackable: false +}); + //export const idToItemData = (id: number): ItemData => IdToData[id]; export const itemToItemData = (item: Item): ItemData => ItemToData[item] as ItemData; export const itemToArrowType = (item: Item): string => { @@ -193,3 +198,5 @@ export const itemToArrowType = (item: Item): string => { } return ""; }; + +export const getAllItems = (): string[] => Object.keys(ItemToData); diff --git a/src/core/Parser.ts b/src/core/Parser.ts index 4b7e4b9..12003de 100644 --- a/src/core/Parser.ts +++ b/src/core/Parser.ts @@ -4,6 +4,7 @@ import { CommandAddMultiple, CommandAddWithoutCount, CommandBreakSlots, + CommandCloseGame, CommandComment, CommandDaP, CommandEquip, @@ -16,6 +17,9 @@ import { CommandSave, CommandSaveAs, CommandShootArrow, + CommandSortKey, + CommandSortMaterial, + CommandSync, CommandUnequip, CommandUse } from "./Command"; @@ -54,7 +58,7 @@ export const parseCommand = (cmdString: string): Command | undefined => { if(tokens.length===2 && tokens[0] === "Reload"){ return new CommandReload(tokens[1]); } - // break + // break if (tokens.length > 2 && tokens[0] === "Break" && tokens[2]=== "Slots" ){ const slots = parseInt(tokens[1]); if(Number.isInteger(slots)){ @@ -176,50 +180,29 @@ export const parseCommand = (cmdString: string): Command | undefined => { return undefined; } - // if(tokens.length===2 && tokens[0] === "Sort" && tokens[1] === "Key"){ - // return new CommandSortKey(); - // } - // if(tokens.length===2 && tokens[0] === "Sort" && tokens[1] === "Material"){ - // return new CommandSortMaterial(); - // } - // if(tokens.length===2 && tokens[0] === "Close" && tokens[1] === "Game"){ - // return new CommandCloseGame(); - // } - - // return undefined; - // } - // // remove material - - - - - // // Equip Arrow - // if (tokens.length === 6 && tokens[0] === "Equip" && tokens[2] === "Arrow" && tokens[3] === "In" && tokens[4] ==="Slot" ){ - // const item = tokens[1]+"Arrow"; - // const slot = parseInt(tokens[5]); - // if( Number.isInteger(slot) && item in Item){ - // return new CommandEquipArrow(Item[item as keyof typeof Item], slot-1, false); - // } - // return undefined; - // } - // if (tokens.length === 3 && tokens[0] === "Equip" && tokens[2] === "Arrow" ){ - // const item = tokens[1]+"Arrow"; - // if(item in Item){ - // return new CommandEquipArrow(Item[item as keyof typeof Item], 0, true); - // } - // return undefined; - // } + if(tokens.length===2 && tokens[0] === "Sort" && tokens[1] === "Key"){ + return new CommandSortKey(); + } + if(tokens.length===2 && tokens[0] === "Sort" && tokens[1] === "Material"){ + return new CommandSortMaterial(); + } + if(tokens.length===2 && tokens[0] === "Close" && tokens[1] === "Game"){ + return new CommandCloseGame(); + } + if(tokens.length===2 && tokens[0] === "Sync" && tokens[1] === "GameData"){ + return new CommandSync("Sync GameData"); + } return undefined; }; const isAddVerb = (token: string): boolean => { - return token === "Get" || token === "Cook" || token === "Add" || token === "Pickup" -} + return token === "Get" || token === "Cook" || token === "Add" || token === "Pickup"; +}; const isRemoveVerb = (token: string): boolean => { - return token === "Remove" || token === "Sell" || token === "Eat" || token === "Drop" -} + return token === "Remove" || token === "Sell" || token === "Eat" || token === "Drop"; +}; const parseItemStacks = (tokens: string[], from: number): ItemStack[] | undefined => { if((tokens.length-from)%2 !== 0){ @@ -242,4 +225,4 @@ const parseItemStacks = (tokens: string[], from: number): ItemStack[] | undefine } } return stacks; -} +}; diff --git a/src/core/SimulationState.ts b/src/core/SimulationState.ts index a31a382..47e4ea4 100644 --- a/src/core/SimulationState.ts +++ b/src/core/SimulationState.ts @@ -5,160 +5,161 @@ import { Slots } from "./Slots"; import { VisibleInventory } from "./VisibleInventory"; export const createSimulationState = (): SimulationState => { - return new SimulationState( - new GameData(new Slots([])), - null, - {}, - new VisibleInventory(new Slots([]), 0) - ); -} + return new SimulationState( + new GameData(new Slots([])), + null, + {}, + new VisibleInventory(new Slots([]), 0) + ); +}; /* * The state of simulation, including game data, visible inventory, and all save slots */ export class SimulationState { - private gameData: GameData; - private manualSave: GameData | null; - private namedSaves: {[name: string]: GameData} = {}; - private pouch: VisibleInventory; - private nextReloadName?: string; - private isOnEventide: boolean = false; + private gameData: GameData; + private manualSave: GameData | null; + private namedSaves: {[name: string]: GameData} = {}; + private pouch: VisibleInventory; + private nextReloadName?: string; + private isOnEventide = false; - constructor(gameData: GameData, manualSave: GameData | null, namedSaves: {[name: string]: GameData}, pouch: VisibleInventory){ - this.gameData = gameData; - this.manualSave = manualSave; - this.namedSaves = namedSaves; - this.pouch = pouch; - } + constructor(gameData: GameData, manualSave: GameData | null, namedSaves: {[name: string]: GameData}, pouch: VisibleInventory){ + this.gameData = gameData; + this.manualSave = manualSave; + this.namedSaves = namedSaves; + this.pouch = pouch; + } - public deepClone(): SimulationState { - const copyNamedSaves: {[name: string]: GameData} = {}; - for(const name in this.namedSaves){ - copyNamedSaves[name] = this.namedSaves[name].deepClone(); - } - const newState = new SimulationState( - this.gameData.deepClone(), - this.manualSave ? this.manualSave.deepClone() : null, - copyNamedSaves, - this.pouch.deepClone() - ); - newState.nextReloadName = this.nextReloadName; - newState.isOnEventide = this.isOnEventide; + public deepClone(): SimulationState { + const copyNamedSaves: {[name: string]: GameData} = {}; + for(const name in this.namedSaves){ + copyNamedSaves[name] = this.namedSaves[name].deepClone(); + } + const newState = new SimulationState( + this.gameData.deepClone(), + this.manualSave ? this.manualSave.deepClone() : null, + copyNamedSaves, + this.pouch.deepClone() + ); + newState.nextReloadName = this.nextReloadName; + newState.isOnEventide = this.isOnEventide; - return newState; - } + return newState; + } - public initialize(stacks: ItemStack[]) { - this.pouch = new VisibleInventory(new Slots([]), 0); - stacks.forEach((stack)=>this.pouch.addDirectly(stack)); - this.gameData.syncWith(this.pouch); - } + public initialize(stacks: ItemStack[]) { + this.pouch = new VisibleInventory(new Slots([]), 0); + stacks.forEach((stack)=>this.pouch.addDirectly(stack)); + this.gameData.syncWith(this.pouch); + } - public save(name?: string) { - if(name){ - this.namedSaves[name] = this.gameData.deepClone(); - }else{ - this.manualSave = this.gameData.deepClone(); - } - } + public save(name?: string) { + if(name){ + this.namedSaves[name] = this.gameData.deepClone(); + }else{ + this.manualSave = this.gameData.deepClone(); + } + } - public reload(name?: string) { - if(name){ - if(name in this.namedSaves){ - this.reloadFrom(this.namedSaves[name]); - } - }else{ - if(this.nextReloadName){ - if(this.nextReloadName in this.namedSaves){ - this.reloadFrom(this.namedSaves[this.nextReloadName]); - } - }else{ - const save = this.manualSave; - if(save){ - this.reloadFrom(save); - } - } - } - } + public reload(name?: string) { + if(name){ + if(name in this.namedSaves){ + this.reloadFrom(this.namedSaves[name]); + } + }else{ + if(this.nextReloadName){ + if(this.nextReloadName in this.namedSaves){ + this.reloadFrom(this.namedSaves[this.nextReloadName]); + } + }else{ + const save = this.manualSave; + if(save){ + this.reloadFrom(save); + } + } + } + } - private reloadFrom(data: GameData) { - this.gameData = data.deepClone(); - this.pouch.clearForReload(); - this.gameData.addAllToPouchOnReload(this.pouch); - this.pouch.updateEquipmentDurability(this.gameData); - } + private reloadFrom(data: GameData) { + this.gameData = data.deepClone(); + this.pouch.clearForReload(); + this.gameData.addAllToPouchOnReload(this.pouch); + this.pouch.updateEquipmentDurability(this.gameData); + } - public useSaveForNextReload(name: string){ - this.nextReloadName = name; - } + public useSaveForNextReload(name: string){ + this.nextReloadName = name; + } - public breakSlots(n: number) { - this.pouch.modifyCount(-n); - } + public breakSlots(n: number) { + this.pouch.modifyCount(-n); + } - public obtain(item: Item, count: number) { - this.pouch.addInGame(item, count); - this.syncGameDataWithPouch(); - } + public obtain(item: Item, count: number) { + this.pouch.addInGame(item, count); + this.syncGameDataWithPouch(); + } - public remove(item: Item, count: number, slot: number) { - this.pouch.remove(item, count, slot); - this.syncGameDataWithPouch(); - } + public remove(item: Item, count: number, slot: number) { + this.pouch.remove(item, count, slot); + this.syncGameDataWithPouch(); + } - public equip(item: Item, slot: number) { - this.pouch.equip(item, slot); - this.syncGameDataWithPouch(); - } + public equip(item: Item, slot: number) { + this.pouch.equip(item, slot); + this.syncGameDataWithPouch(); + } - public unequip(item: Item, slot: number){ - this.pouch.unequip(item, slot); - this.syncGameDataWithPouch(); - } + public unequip(item: Item, slot: number){ + this.pouch.unequip(item, slot); + this.syncGameDataWithPouch(); + } - public shootArrow(count: number){ - this.pouch.shootArrow(count, this.gameData); - // does not sync - } + public shootArrow(count: number){ + this.pouch.shootArrow(count, this.gameData); + // does not sync + } - public syncGameDataWithPouch() { - if(!this.isOnEventide){ - this.gameData.syncWith(this.pouch); - } - } + public closeGame() { + this.pouch = new VisibleInventory(new Slots([]), 0); + this.gameData = new GameData(new Slots([])); + this.isOnEventide = false; + } - public get displayableGameData(): DisplayableInventory { - return this.gameData; - } + public syncGameDataWithPouch() { + if(!this.isOnEventide){ + this.gameData.syncWith(this.pouch); + } + } - public get displayablePouch(): DisplayableInventory { - return this.pouch; - } + public get displayableGameData(): DisplayableInventory { + return this.gameData; + } - public get inventoryMCount(): number { - return this.pouch.getCount(); - } + public get displayablePouch(): DisplayableInventory { + return this.pouch; + } - public getManualSave(): GameData | null { - return this.manualSave; - } + public get inventoryMCount(): number { + return this.pouch.getCount(); + } - public getNamedSaves(): {[name: string]: GameData} { - return this.namedSaves; - } + public getManualSave(): GameData | null { + return this.manualSave; + } - // public get displayableGameData(): DisplayableInventory { - // return this.gameData; - // } + public getNamedSaves(): {[name: string]: GameData} { + return this.namedSaves; + } + // public get displayableGameData(): DisplayableInventory { + // return this.gameData; + // } } - - - // Shoot X Arrow, x can be ommited and default to 1 -// Close Game // Close Inventory, same as Resync GameData // Enter Eventide / Leave Eventide // Sort Key (In Tab X) - need more research on which tab is sorted. (might not be possible to select which tab to sort) diff --git a/src/core/Slots.ts b/src/core/Slots.ts index 874151c..9ca7ac1 100644 --- a/src/core/Slots.ts +++ b/src/core/Slots.ts @@ -1,8 +1,6 @@ -import { count } from "console"; import { stableSort } from "data/mergeSort"; import { Item, ItemStack, itemToItemData, ItemType } from "./Item"; - /* * This is the data model common to GameData and VisibleInventory */ @@ -43,21 +41,7 @@ export class Slots { public clearFirst(count: number) { this.internalSlots.splice(0, count); } - // public get(i: number): ItemStack{ - // return this.internalSlots[i]; - // } - // public getByType(type: ItemType): Slots { - // return new Slots(this.internalSlots.filter(s=>itemToItemData(s.item).type===type)); - // } - // public getBeforeType(type: ItemType): Slots { - // return new Slots(this.internalSlots.filter(s=>itemToItemData(s.item).typeitemToItemData(s.item).type>type)); - // } - // public addSlotsToEnd(slots: Slots) { - // slots.internalSlots.forEach(s=>this.addStack(s)); - // } + public addStackDirectly(stack: ItemStack): number { const data = itemToItemData(stack.item); if(data.stackable){ @@ -73,18 +57,6 @@ export class Slots { this.internalSlots.push({...stack}); this.sortItemType(mCount); } - // public addStackCopy(stack: ItemStack) { - // this.addStack({...stack}); - // } - // public sort() { - // this.internalSlots.sort((a,b)=>{ - // return itemToItemData(a.item).sortOrder - itemToItemData(b.item).sortOrder; - // }); - // } - // public removeFromEnd(count: number): Slots { - // const end = this.internalSlots.splice(-count, count); - // return new Slots(end); - // } // remove item(s) start from slot // return number of slots removed @@ -179,34 +151,29 @@ export class Slots { } if(reloading){ - for(let i=0;i{ + const sData = itemToItemData(s.item); + return sData.type === data.type && s.equipped; + }).length === 0; + this.addSlot({item,count:1,equipped: shouldEquipNew}, mCount+1); + for(let i=1;i{ - const sData = itemToItemData(s.item); - return sData.type === data.type && s.equipped; - }).length === 0; - this.addSlot({item,count:1,equipped: shouldEquipNew}, mCount+1); - for(let i=1;i= this.internalSlots.length){ return; } - const thisData = itemToItemData(this.internalSlots[slot].item); - if(thisData.stackable){ + const thisData = itemToItemData(this.internalSlots[slot].item); + // Currently only supports corrupting arrows, material, meal and key items as durability values are not simulated on equipments + if(thisData.type >= ItemType.Material || thisData.stackable){ this.internalSlots[slot].count = durability; } } @@ -268,20 +236,22 @@ export class Slots { // shoot count arrows. return the slot that was updated, or -1 public shootArrow(count: number): number { // first find equipped arrow, search entire inventory + // this is the last equipped arrow before armor let i=0; + let equippedArrow: Item | undefined = undefined; for(;i ItemType.Shield){ + break; + } + if(this.internalSlots[i].equipped && data.type === ItemType.Arrow){ + equippedArrow = data.item; } } if(i>=this.internalSlots.length){ //can't find equipped arrow return -1; } - const equippedArrow = this.internalSlots[i].item; // now find the first slot of that arrow and update for(let j=0;jitemStackToDisplayableSlot(stack, i>=this.count)); - } + public getDisplayedSlots(): DisplayableSlot[] { + return this.slots.getSlotsRef().map((stack, i)=>itemStackToDisplayableSlot(stack, i>=this.count)); + } - public getSlots(): Slots { - return this.slots; - } + public getSlots(): Slots { + return this.slots; + } - public addDirectly(stack: ItemStack){ - this.count+=this.slots.addStackDirectly(stack); - } + public addDirectly(stack: ItemStack){ + this.count+=this.slots.addStackDirectly(stack); + } - public addWhenReload(item: Item, count: number, equippedDuringReload: boolean) { - const slotsAdded = this.slots.add(item, count, equippedDuringReload, true, this.count); - this.count+=slotsAdded; - } + public addWhenReload(item: Item, count: number, equippedDuringReload: boolean) { + const slotsAdded = this.slots.add(item, count, equippedDuringReload, true, this.count); + this.count+=slotsAdded; + } - public addInGame(item: Item, count: number) { - const slotsAdded = this.slots.add(item, count, false, false, this.count); - this.count+=slotsAdded; - } + public addInGame(item: Item, count: number) { + const slotsAdded = this.slots.add(item, count, false, false, this.count); + this.count+=slotsAdded; + } - public remove(item: Item, count: number, slot: number) { - const slotsRemoved = this.slots.remove(item, count, slot); - this.count-=slotsRemoved; - } + public remove(item: Item, count: number, slot: number) { + const slotsRemoved = this.slots.remove(item, count, slot); + this.count-=slotsRemoved; + } - public equip(item: Item, slot: number) { - this.slots.equip(item, slot); - } + public equip(item: Item, slot: number) { + this.slots.equip(item, slot); + } - public unequip(item: Item, slot: number) { - this.slots.unequip(item, slot); - } + public unequip(item: Item, slot: number) { + this.slots.unequip(item, slot); + } - // Only clears first this.count - public clearForReload() { - if(this.count > 0){ - this.slots.clearFirst(this.count); - this.count = 0; - } - } + // Only clears first this.count + public clearForReload() { + if(this.count > 0){ + this.slots.clearFirst(this.count); + this.count = 0; + } + } - public updateEquipmentDurability(gameData: GameData) { - // find first weapon/bow/shield. this one searches entire inventory - let foundWeapon = false; - let foundBow = false; - let foundShield = false; - this.slots.getSlotsRef().forEach(({item, equipped}, i)=>{ - if(equipped){ - const type = itemToItemData(item).type; - if(type === ItemType.Weapon && !foundWeapon){ - gameData.updateDurability(999, i); - foundWeapon = true; - } - if(type === ItemType.Bow && !foundBow){ - gameData.updateDurability(999, i); - foundBow = true; - } - if(type === ItemType.Shield && !foundShield){ - gameData.updateDurability(999, i); - foundShield = true; - } - } - }) - } + public updateEquipmentDurability(gameData: GameData) { + // find first weapon/bow/shield. this one searches entire inventory + let foundWeapon = false; + let foundBow = false; + let foundShield = false; + this.slots.getSlotsRef().forEach(({item, equipped}, i)=>{ + if(equipped){ + const type = itemToItemData(item).type; + if(type === ItemType.Weapon && !foundWeapon){ + gameData.updateDurability(999, i); + foundWeapon = true; + } + if(type === ItemType.Bow && !foundBow){ + gameData.updateDurability(999, i); + foundBow = true; + } + if(type === ItemType.Shield && !foundShield){ + gameData.updateDurability(999, i); + foundShield = true; + } + } + }); + } - public shootArrow(count: number, gameData: GameData) { - const updatedSlot = this.slots.shootArrow(count); - if(updatedSlot>=0){ - const durability = this.slots.getSlotsRef()[updatedSlot].count; - gameData.updateDurability(durability, updatedSlot); - } - } + public shootArrow(count: number, gameData: GameData) { + const updatedSlot = this.slots.shootArrow(count); + if(updatedSlot>=0){ + const durability = this.slots.getSlotsRef()[updatedSlot].count; + gameData.updateDurability(durability, updatedSlot); + } + } - public getCount(): number { - return this.count; - } + public getCount(): number { + return this.count; + } - public modifyCount(delta: number): void { - this.count+=delta; - } + public modifyCount(delta: number): void { + this.count+=delta; + } - public resetCount(): void { - this.count = this.slots.length; - } + public resetCount(): void { + this.count = this.slots.length; + } } diff --git a/src/data/mergeSort.ts b/src/data/mergeSort.ts index 4fdea6a..c0b3e40 100644 --- a/src/data/mergeSort.ts +++ b/src/data/mergeSort.ts @@ -1,14 +1,14 @@ //https://medium.com/@fsufitch/is-javascript-array-sort-stable-46b90822543f export const stableSort = (array: T[], cmp: (a:T, b:T) => number): void => { - const stabilizedThis: [T, number][] = array.map((el, index) => [el, index]); - const stableCmp = (a: [T, number], b: [T, number]) => { - let order = cmp(a[0], b[0]); - if (order != 0) return order; - return a[1] - b[1]; - } - stabilizedThis.sort(stableCmp); + const stabilizedThis: [T, number][] = array.map((el, index) => [el, index]); + const stableCmp = (a: [T, number], b: [T, number]) => { + const order = cmp(a[0], b[0]); + if (order != 0) {return order;} + return a[1] - b[1]; + }; + stabilizedThis.sort(stableCmp); - for (let i=0; ivoid } -// export const stacksToItemListProps = (slots: Slots, numBroken: number, isSave: boolean): ItemListProps => { -// return { -// items: stacksToItemProps(slots.getSlotsRef()), -// numBroken, -// isSave, -// }; -// }; - -// export const stacksToItemProps = (stacks: ItemStack[]): ItemListItemProps[] => { -// return stacks.map(stackToItemProps); -// }; - -// export const stackToItemProps = ({item, count, equipped}: ItemStack): ItemListItemProps => { -// const data = itemToItemData(item); -// return {image: data.image, count: data.stackable ? count : 0, isEquipped:equipped}; -// }; - export const DisplayPane: React.FC = ({command,editCommand,displayIndex,simulationState, overlaySave})=>{ const [commandString, setCommandString] = useState(""); const [hasError, setHasError] = useState(false); @@ -88,88 +69,83 @@ export const DisplayPane: React.FC = ({command,editCommand,dis
    - {overlaySave ? -
    + {overlaySave ? +
    - { - (()=>{ - const doubleSlots: JSX.Element[] = []; - const gameDataSlots = simulationState.displayableGameData.getDisplayedSlots(); - const inventorySlots = simulationState.displayablePouch.getDisplayedSlots(); - console.log(inventorySlots); - for(let i=0;i); - } - if(inventorySlots.length>gameDataSlots.length){ - for(let i=inventorySlots.length;i{ + const doubleSlots: JSX.Element[] = []; + const gameDataSlots = simulationState.displayableGameData.getDisplayedSlots(); + const inventorySlots = simulationState.displayablePouch.getDisplayedSlots(); + for(let i=0;i); - } - }else if(inventorySlots.length > gameDataSlots.length){ - for(let i=gameDataSlots.length;i); } - } - return doubleSlots; - })() - } + if(gameDataSlots.length>inventorySlots.length){ + for(let i=inventorySlots.length;i); + } + }else if(inventorySlots.length > gameDataSlots.length){ + for(let i=gameDataSlots.length;i); + } + } + return doubleSlots; + })() + } - - -
    - - :<> - -
    - - - -
    -
    - - - + + :<> + +
    + + + +
    +
    + + + -
    - } +
    + }
    -
    ; }; diff --git a/src/surfaces/ReferencePage.tsx b/src/surfaces/ReferencePage.tsx index d653c60..5f7db8c 100644 --- a/src/surfaces/ReferencePage.tsx +++ b/src/surfaces/ReferencePage.tsx @@ -1,169 +1,184 @@ -import { ItemList } from "components/ItemList"; import { TitledList } from "components/TitledList"; +import { getAllItems } from "core/Item"; import React from "react"; export const ReferencePage: React.FC = React.memo(()=>{ - - - return ( -
    - -
    -

    Commands

    -

    Initialize X item1 Y item2 Z item3 ...

    -

    Used for initializing inventory before simulation

    -

    + return ( +

    + +
    +

    Items

    + { + getAllItems().map(item=>

    {item}

    ) + } +

    Commands

    +

    Initialize X item1 Y item2 Z item3 ...

    +

    Used for initializing inventory before simulation

    +

    Fully resets the inventory by clearing all items and set Count to 0, then forcefully write the item list to inventory. This would reset any broken slot you already have, and any in-game checks that happen when adding items are disabled. For example, the items will appear in the order you specify, not in the in-game tab order -

    -

    +

    +

    If you specify count > 1 for unstackable items like weapon or sheika slate, multiple of that item would be added. Game Data will be synced with Visible Inventory after the reset -

    -

    +

    +

    Note that this will not clear saves. You can use this command to initialize multiple saves -

    -

    Example: Initialize 1 Apple 2 Axe 3 Slate 4 SpiritOrb

    +

    +

    Example: Initialize 1 Apple 2 Axe 3 Slate 4 SpiritOrb

    -

    Save / Save As NAME

    -

    Simulates a hard save or auto save action

    -

    +

    Save / Save As NAME

    +

    Simulates a hard save or auto save action

    +

    Writes Game Data to the corresponding save slot. The auto saves are specified by NAME. You can have as many auto saves as you want in the simulator. -

    +

    -

    Example 1: Save

    -

    Example 2: Save As MySave

    -

    +

    Example 1: Save

    +

    Example 2: Save As MySave

    +

    Example 1 will save to the manual save slot, while example 2 will save to the slot named "MySave". There cannot be spaces in the name. If "MySave" doesn't exist, a new slot is created -

    +

    -

    Reload (NAME)

    -

    Simulates reloading a save

    -

    +

    Reload (NAME)

    +

    Simulates reloading a save

    +

    First, reads Game Data from the corresponding save slot. If NAME is not given, the manual save is used unless "Use" commands are used before this (see below). If NAME is given, the corresponding save slot with that name is used -

    -

    +

    +

    After that, the first Count items in the visible inventory is removed, and Count is decreased accordingly. Then, each item slot in the Game Data is added to the inventory. -

    +

    -

    Example 1: Reload

    -

    Example 2: Reload MySave

    +

    Example 1: Reload

    +

    Example 2: Reload MySave

    -

    Use NAME

    -

    (Deprecated) Specify which save to load on the subsequent reload

    -

    +

    Use NAME

    +

    (Deprecated) Specify which save to load on the subsequent reload

    +

    This command is only for backward compatibility. Use "Reload" instead -

    -

    +

    +

    Specify the save named NAME to be reloaded on the next "Reload" command -

    +

    -

    Example: Use MySave

    +

    Example: Use MySave

    -

    Break X Slots

    -

    Simulate making X broken slots with hold smuggle glitch

    -

    +

    Break X Slots

    +

    Simulate making X broken slots with hold smuggle glitch

    +

    Decrease inventory Count by X -

    -

    +

    +

    This command does not automatically simulate the hold smuggle and sell process. It just changes count (i.e. make broken slots) with magic. -

    +

    -

    Example: Break 4 Slots

    +

    Example: Break 4 Slots

    -

    Get/Add/Cook/Pickup item

    -

    Get/Add/Cook/Pickup X item

    -

    Get/Add/Cook/Pickup X item1 Y item2 Z item3 ...

    -

    Simulate obtaining items in game

    -

    +

    Get/Add/Cook/Pickup item

    +

    Get/Add/Cook/Pickup X item

    +

    Get/Add/Cook/Pickup X item1 Y item2 Z item3 ...

    +

    Simulate obtaining items in game

    +

    Add the item(s) to visible inventory. Sync with Game Data unless you are on Eventide or inside TOTS -

    -

    +

    +

    Like in game, you won't be able to obtain multiple unstackable key items, or multiple master sword in this way. If a stackable item is at 999 or more when you invoke this command, the count is set to 999 (not fully accurate since you won't be able to pick up more items in game). -

    -

    +

    +

    If you specify a count for unstackable items, they are added in different slots as if you pick them up in game, one after another. -

    -

    +

    +

    Note that you must not enter plural forms for the item name. -

    +

    -

    Example 1: Add Apple

    -

    Example 2: Get 10 Apple

    -

    Example 3: Pickup 10 Apple 5 Diamond 1 Slate 5 MasterSword

    +

    Example 1: Add Apple

    +

    Example 2: Get 10 Apple

    +

    Example 3: Pickup 10 Apple 5 Diamond 1 Slate 5 MasterSword

    -

    Remove/Sell/Eat/Drop item

    -

    Remove/Sell/Eat/Drop X item

    -

    Remove/Sell/Eat/Drop item From Slot Y

    -

    Remove/Sell/Eat/Drop X item From Slot Y

    -

    Remove/Sell/Eat/Drop X item1 Y item2 Z item3 ...

    -

    Simulate removing items in game

    -

    +

    Remove/Sell/Eat/Drop item

    +

    Remove/Sell/Eat/Drop X item

    +

    Remove/Sell/Eat/Drop item From Slot Y

    +

    Remove/Sell/Eat/Drop X item From Slot Y

    +

    Remove/Sell/Eat/Drop X item1 Y item2 Z item3 ...

    +

    Simulate removing items in game

    +

    Remove the item(s) to visible inventory. Sync with Game Data unless you are on Eventide or inside TOTS -

    -

    +

    +

    When number of item is not specified, it defaults to 1. Up to X items will be removed from inventory, even when they span multiple slots. If X > total number of items in inventory, all of them will be removed. -

    -

    +

    +

    When slot is specified, it starts removing from slot X (slot 1 is the leftmost slot with that item, slot 2 is the second leftmost slot with that item). -

    -

    +

    +

    Note that you must not enter plural forms for the item name. -

    +

    -

    Example 1: Remove Apple

    -

    Example 2: Drop 10 Diamond

    -

    Example 3: Sell 10 Apple 5 Diamond

    -

    Example 4: Sell 5 Apple From Slot 3

    +

    Example 1: Remove Apple

    +

    Example 2: Drop 10 Diamond

    +

    Example 3: Sell 10 Apple 5 Diamond

    +

    Example 4: Sell 5 Apple From Slot 3

    -

    D&P X item

    -

    Shortcut for drop and pick up, for sorting inventory

    -

    +

    D&P X item

    +

    Shortcut for drop and pick up, for sorting inventory

    +

    This command drops X item from the first slot, then pick them up -

    -

    Example: D&P 5 Diamond

    +

    +

    Example: D&P 5 Diamond

    -

    Equip item

    -

    Equip item In Slot X

    -

    Simulates equipping something

    -

    +

    Equip item

    +

    Equip item In Slot X

    +

    Simulates equipping something

    +

    When equipping an item, all other item of the same type in the first tab is unequipped, then the item selected is equipped. -

    -

    +

    +

    Slot can be used if you have multiple of the same item. When slot is not specified, the leftmost item will be equipped. Note that you can use this command to equip something that is already equipped, which is not possible in game. You can also equip unequippable items like materials, but it is not meaningful -

    -

    Example 1: Equip Weapon

    -

    Example 2: Equip Weapon In Slot 3

    +

    +

    Example 1: Equip Weapon

    +

    Example 2: Equip Weapon In Slot 3

    -

    Unequip item

    -

    Unequip item In Slot X

    -

    Simulates unequipping something

    -

    +

    Unequip item

    +

    Unequip item In Slot X

    +

    Simulates unequipping something

    +

    When unequipping an item, only the selected item is unequipped. -

    -

    +

    +

    Slot can be used if you have multiple of the same item. When slot is not specified, the leftmost equipped item will be unequipped. Note that you can use this command to unequip something that is already unequipped, which is useless. You cannot unequip arrows. -

    -

    Example 1: Unequip Shield

    -

    Example 2: Unequip Shield In Slot 5

    -
    +

    +

    Example 1: Unequip Shield

    +

    Example 2: Unequip Shield In Slot 5

    + +

    Close Game

    +

    Simulates closing the game and restarting

    +

    + When closing the game, Visible Inventory and Game Data are erased +

    +

    Example: Close Game

    + +

    Sort Key/Material

    +

    Simulates press Y to sort tab

    +

    + This command is currently broken +

    + +
    - - -
    - ) +
    +
    + ); });