From 4da930814d389f3966bda90ea3daaa23ed522191 Mon Sep 17 00:00:00 2001 From: "Dr.Lt.Data" Date: Sat, 29 Jul 2023 11:33:33 +0900 Subject: [PATCH] support preview method setting feature --- README.md | 3 +- __init__.py | 79 +++++++++++++++++++++++++++++++++++++++++- js/comfyui-manager.js | 21 ++++++++++- misc/menu.png | Bin 38622 -> 0 bytes 4 files changed, 100 insertions(+), 3 deletions(-) delete mode 100644 misc/menu.png diff --git a/README.md b/README.md index d3d38a5..b3c957a 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ You can execute ComfyUI by running either `./run_gpu.sh` or `./run_cpu.sh` depen # Changes +* **0.17** Support preview method setting feature * **0.14** Support robust update * **0.13** Support additional 'pip' section for install spec * **0.12** Better installation support for Windows. @@ -51,7 +52,7 @@ You can execute ComfyUI by running either `./run_gpu.sh` or `./run_cpu.sh` depen 2. If you click on 'Install Custom Nodes' or 'Install Models', an installer dialog will open. -![menu](misc/menu.png) +![menu](misc/menu.jpg) * When the 'Use local DB' feature is enabled, the application will utilize the data stored locally on your device, rather than retrieving node/model information over the internet diff --git a/__init__.py b/__init__.py index fd2e899..1d7bc7f 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1,4 @@ +import configparser import shutil import folder_paths import os, sys @@ -32,7 +33,7 @@ sys.path.append('../..') from torchvision.datasets.utils import download_url # ensure .js -print("### Loading: ComfyUI-Manager (V0.16)") +print("### Loading: ComfyUI-Manager (V0.17)") comfy_ui_revision = "Unknown" @@ -48,6 +49,71 @@ local_db_extension_node_mappings = os.path.join(comfyui_manager_path, "extension git_script_path = os.path.join(os.path.dirname(__file__), "git_helper.py") startup_script_path = os.path.join(comfyui_manager_path, "startup-scripts") +config_path = os.path.join(os.path.dirname(__file__), "config.ini") +cached_config = None + + +from comfy.cli_args import args +import latent_preview + + +def write_config(): + config = configparser.ConfigParser() + config['default'] = { + 'preview_method': get_current_preview_method(), + } + with open(config_path, 'w') as configfile: + config.write(configfile) + + +def read_config(): + try: + config = configparser.ConfigParser() + config.read(config_path) + default_conf = config['default'] + + return { + 'preview_method': default_conf['preview_method'] + } + + except Exception: + return {'preview_method': get_current_preview_method()} + + +def get_config(): + global cached_config + + if cached_config is None: + cached_config = read_config() + + return cached_config + + +def get_current_preview_method(): + if args.preview_method == latent_preview.LatentPreviewMethod.Auto: + return "auto" + elif args.preview_method == latent_preview.LatentPreviewMethod.Latent2RGB: + return "latent2rgb" + elif args.preview_method == latent_preview.LatentPreviewMethod.TAESD: + return "taesd" + else: + return "none" + + +def set_preview_method(method): + if method == 'auto': + args.preview_method = latent_preview.LatentPreviewMethod.Auto + elif method == 'latent2rgb': + args.preview_method = latent_preview.LatentPreviewMethod.Latent2RGB + elif method == 'taesd': + args.preview_method = latent_preview.LatentPreviewMethod.TAESD + else: + args.preview_method = latent_preview.LatentPreviewMethod.NoPreviews + + get_config()['preview_method'] = args.preview_method + + +set_preview_method(get_config()['preview_method']) def try_install_script(url, repo_path, install_cmd): @@ -855,5 +921,16 @@ async def install_model(request): return web.Response(status=400) +@server.PromptServer.instance.routes.get("/manager/preview_method") +async def preview_method(request): + if "value" in request.rel_url.query: + set_preview_method(request.rel_url.query['value']) + write_config() + else: + return web.Response(text=get_current_preview_method(), status=200) + + return web.Response(status=200) + + NODE_CLASS_MAPPINGS = {} __all__ = ['NODE_CLASS_MAPPINGS'] diff --git a/js/comfyui-manager.js b/js/comfyui-manager.js index 5d75c0c..44fc04c 100644 --- a/js/comfyui-manager.js +++ b/js/comfyui-manager.js @@ -1338,6 +1338,20 @@ class ManagerMenuDialog extends ComfyDialog { () => fetchUpdates() }); + let preview_combo = document.createElement("select"); + preview_combo.appendChild($el('option', {value:'auto', text:'Preview method: Auto'}, [])); + preview_combo.appendChild($el('option', {value:'taesd', text:'Preview method: TAESD'}, [])); + preview_combo.appendChild($el('option', {value:'latent2rgb', text:'Preview method: Latent2RGB'}, [])); + preview_combo.appendChild($el('option', {value:'none', text:'Preview method: None'}, [])); + + fetch('/manager/preview_method') + .then(response => response.text()) + .then(data => { preview_combo.value = data; }) + + preview_combo.addEventListener('change', function(event) { + fetch(`/manager/preview_method?value=${event.target.value}`); + }); + const res = [ $el("tr.td", {width:"100%"}, [$el("font", {size:6, color:"white"}, [`ComfyUI Manager Menu`])]), @@ -1400,7 +1414,12 @@ class ManagerMenuDialog extends ComfyDialog { onclick: () => { window.open("https://blenderneko.github.io/ComfyUI-docs/", "comfyui-community-manual"); } }), - $el("br", {}, []), + $el("br", {}, []), + $el("hr", {width: "100%"}, []), + preview_combo, + $el("hr", {width: "100%"}, []), + $el("br", {}, []), + $el("button", { type: "button", textContent: "Close", diff --git a/misc/menu.png b/misc/menu.png deleted file mode 100644 index 03660c9959899a3870765205541e550d4161c907..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38622 zcmbSzcQn`i-@k@3(lAmQL@0Yj5z5NmS=l3_Bzx16B*~^iW+XEdkutK1tRk`{BYTGY z9`Eb=-se8Q``qXE$L~7lI$f7O-s3f%&&PUwg49(nP*E^YkdTm2Dagxcl8|h%!@n(L zJMa_fj`@rDW4p7If;Jic@gcLkhyOq5BCF@3<#5@>-OR~~#QK_py%o2!g_D)lHD?<>oCT&}LEBugzM1W5~a3bIi6QA(plSn3kGn4UUOeZE@ zWS(T2j7^<J2ErM zhAs8R+79M50l^AMk12a$;VlOz%Mz@QUY^?Mac(LfoqIRx*EISx#ilbaDVn*ix%onx z=9XvbCmt**b-}3cPzQXF2wK9cLiaJ0I6mPcJ`elSFT(kq2SKEcAjD_XYEpwdL84BPn1e;^L$H% z71IjjpR|78QuAF$=3Qk|;gNfP_}InvE^1JVNpFe1s+i?#kX`&``tC3Cq5-YsJm2(p z6Z_w*-*c_tj8f#{;!;kybFH^Ei2j1@}uvnd8Bg8FGqKt|6Yvy#8yfm}b$;*ezM&ez9OXhqPH#tT**d#N zwCGq{sney@cKM#ZtK$8`!o~g~M^spF^%qYbd(QeS1%=LE#Az_hG)uocO&@r?G~MuExXz0XJMrAxNv0FR9HGd2HD!xVl8zrd8&Ow}e+!&)lTO`Vl#?-0Dyh6UF;NnAWcTqFLv6 z;YFk6i^&;vkHQV>S_{iu=XtJpRpwm9=znTdZND%e?{+uaxGFSBeWLg=>+z6wI;*j_ z18(Ar`GJjI32r>x}xW zD%Bq7*{QI8X`)Jd;@g)BF8ek*lONHqhFeJ<7#?bMS734d!H7}u;t--Frj;4Pn;zvckgmTS;iSgj$ z4R^V%j9h#_h3lT5(^bm<68=lkoGXpJL_GC_Na>Lfxt!2S!=tSxC;5#ugx9%!Q)92z ze~g^jRuF&fyfXQ9g~SJ}*|FiNwo|$0YQgb$u(9$YR$hM#Oxim!9&g6^J+CIaTT!@U zPUi$|Mu#1X<5xQOvD~o0r1Q6T7@QQ84m-u#&?-^Y7ZCLN8iVG?^n?QeB_j8oyd&>c zigJ-g-NyB#FscKd0VQI)Hd^jVTq!c(o{o@cb*t(twZ%s2l1oy5)?%ZsZ(#6vS9!!= zJ0XUb+1ZPRhr*dA?mHVBA6;EtwY0JtBXy_TzV$-|RpzXnl~q7mS{hexNl8h;gfz89 zlp<^Js~mMsT8fu1U;YjH^N5f2YinC|UdPLB@3@2nRX;z!G{e0&&oS|dr0#!}8Z0a< ztf#MEUwX3S?D0$QQzxXQF6upS(TESwyo_y$n~8sDqbJ*b>%|2(H(}hqKu_tHo1S8} z%@=p_Cl6AD4_7B2l1iQkjqW+T6<0lxu)gk7Xu!R+v~**Z&*g{N&%5*NCqKCCdUYpr zx74|Nh3A;|Mp73UsHmzwRLBjub5dMqoZ;7>bgIBR6U8r_ot$K>lkkzVJIivhY=YrEaRKSz3yKvd9vAf=p4(*f=2!OV4{z#&9_>lWb2_)5o&1vIbER zJckFzqdVWP`vm1IF|1}#jjnzXC;Ji{AAMJrV*A#c{j*<=m|C75?4C*Ku+tbB9i5<} zi`n|hRoCZHwf=o7TC(k1&v!j?xyZ1RtdpgY)!{T*B$dP@DY=;#7L;zDnzni|$yAPe zY`MboUMBHA^rerlbl(3O|6U=bC3Z?#Xz^ryf!;r(aWMU-HpgU2>!QlUpBGdt=lc7^ z&4TeO+O+A_`tFIE-!hFlZ_u~A*pCsOOUu}ipR}J-4ntkQh!ohR9%90WbRSr`~y*%w7yb*l`cFj-iV*|(_Q~XQ5uyahOwns9XFr(@Ub?e z7k>3{t(Bstk>cJ@YryNDQ8*MpB_I?~-&8&5#q{qhM9Mfs-Q7t%`Lnr}jv?xR z(J@A&1lfJW$U8RJd)0)~-l~#(+ol_US&oDWs$3pYZ6+APXoSjFacBJ;( zjbRe=3kxG-0=5jzi2w60M}M56nV+ApZ)|Kk6i4>x$&*Wb0xj3GWvW7_o@Tbb7>@cd z(io$lqLN*>PP+9&n?eMeN``UyADU)eU0qj6beH{CY=zz^G91l$`z(84uanU+dOtf{ z`Gi>MAQ!herzaPn$_@WJ1}nsqzW=oEpW(gya4+#8KIc2?#0136Yf}`(#~*2GYKme= z)6}_YZ$G=RQ2qUTX+bdaUNVlj7g?4&JiNRLY+9J9sj2Jg>X^=)iF@#1*V6Cq3$L&J z;CSo7`mv$mzC*=EbbGt@wVpTUu?745H+?hP&NvN|#qbydLrJ$a4GVwGZe9LHK&iyium2ZxrX`*;~eeE%$Hj&hzj5^_i+I(Iou zDdtyixp&Y*%3ZtK#hO}L@^2||s9$v3(r~*eUhI|gsOpQ0S$B1^So!(GA|q)TPT9#! z_m+=!WYNE}ZvL4PD)C}6d4FSjrq)4z^X+?%o;6)t`kk7dKG*-@w&wG;3=I~$Z#gPO zb{+Q%on2jPYHN2|TU(d^MuAvaS$Px@p*3E1dnKY!*%6aDvlDo=dP z#yw)z-^ztBq&4ZPi=q;acx^o(?j;ns`v}L`M}vZbNbUp#&|MMpS-DP@c!{n14S!UIUM6oPN32DH7?x-P{EoX_}b_1T2Y#Fc@Rv=c!raJ^1F$o4tn)HO2{A zcUJiOThU)&6Bdqcd#+|-Z~ytxG3on-ROIC6(=_+(+c$ehad{zGtWI6m`Qi)z!$%6( zbj{B+D$C20y?ghLL^+o4W>1e{gxmDHHJ+-wR8^lphhTlZ+gQ59^2Dy=May$FMjs!a zyu3Un35f)8@1;lK;pUbT{r&F+o6lC2doRl?D_6I+hCh48aK$#`&jmJx?!<>E_>!JAr{(SvuT*7RIV@d*$zozq{$(-QD-|8Y?$Oa|f%u#-?@| zZx8xjbR|VI^NsW9Zg#bV;hqv_x#AFpQZauh-}|G-^@#|c|wnh4}OXhEVS>AzDspzu0z*^Zk%Fnb~fok=+X8U7lT1pFfqCh z51&aE*}Q!xD~oe+;v4(PlRb>*v zOmeFV+{4bz9TG3*F5vw06LVW(QBj(1uJPIB9%sEvmm=^`*q9i+y9#Sqya0@+y_dL1 z(83pfwQRd^;exq^MOV?47zJHJyfd+~UibO6T?tVHSRa_0QZ+YcUY`2FS@7wnV$}Ze z7-KK;8(7@V7&EEg0)m42Z{4_!N?rK7l6O;5S`1VMoIZ1A%wA1N$zpwFR<5!)S(fr4 zqhymvpHI~VM&Ihc8*7U`ZjAox{HPxTlU=V|eto(5yZg1)tIH~$n`NH!WE2#GE3-o+ z4;W4fwlIPE#SAKdrtR|TLP?SlUrsLeOLU?$%O?R<<(zgKx?A)LS z4~Bog?qlQPda0gtRKn-9L3T7MB6C0~*2PP`d?~+s2Mexz!ryq zx!S{$eutwJ1Io+Am7=-KCOh-J9A;v8P0~@e*Eg2?ya)np-g@=dh$2+p}i;Aq8o}R&D z?eO>a-_NCYBRiWrOE>rOO#cVAHtkGp8ChA!!D{mFg|^aoxRs@D2h=EQ40(H&ZfHiv ziQ=nWQdl-)Jtcw~8X9j(N@np$L;d|E=d`tH2L=XwWkI|jstq|SI*6h3azx!XtGdhY@=IOf@5+$Ci0*WMQH@~X9TxYB#B@JauKM`# zZbz1`g{^JStiE^q_U#^u=r49fP6n>y?E`IUk{#WNPo6XaR*-o7jI&nMZhHFkaIt;&4%(Fw z*G!#khHX1`^#ekoV?CD{6Sqy(DawrgJ~L2-b!rA|B%99f|JTQB;nxRLUgfFHp-{;; zzH7pObbuC3Hk1V(xD=5)$y-5Y3p1t_tYs6~d;)D!`?vM;@6C@}_HKjXDJysnAzHMWJ=e_MX`S=4`rY;FdCNQO?CTqUTvL8)zG>sFST~nEq+!7$-!1Q!82J`;n^WL}ap}kt= zE-N*JO8%|G5ZSb6>_amh1?Jg7(Q`B|E^Zwdl~r{@!FhSgh@b@L&XGU^RDLW(eqvR! z;!au`tHs9$15vuhNk(to0(R$$6m6g_u-UWngAH*x`|#Tl_>m){(s}V7ROskoUMhg_1LsK#Wd&`_PlLx z$ol1s9n8eUbmPkx^>o#EMNBfLas+L9?vj$mX;D$9nf~+G%oosQK{JK`dk21gegc^y zsl#q{Fqn5{VL`~Vsm3+u;L-Wht3R+5)Fd||4+>t+vu-|m`BUr%v<9@UeqfDsi`s|B z+1SQQwom^4ee>3u@@tc1KIIY-MVcQPhpn5QqUTedU7LJ$=kDDCk6H7-)0=5+W zE-z9Tbp}FWuA(1E+~k&4yo4pK4Y6d7f(O*`FG(vk-`wM%fb7^y`Tzh=@hX3or<;fC zBZ3R#QM-;EJ4Tf6&5ddQbLX>qy1EYT*%K-i8X;#V-o!UG$0i^U9z?@VefaPv{0fSf zEM)9!`;3kcL^CT3}a&D3AHMW}AdI|Dp6qOV%u-OSc zejzTPF=utkw)GAWQjUB#YJN+Zr*rvv{?@GY#6**%T7|Lw-$XsA*Z)l98ou+v8}A`X z7h2F8_vwV5W9dqon$+q(fg`V)B`Dv2ej?IX@m_Rzc(`tnZvTEAyVrrkPZCc%CM&eK zxVWUE$&P4s)_!VkYl{%HZZb79`*3d`3)$}7KQXJ90gZ*Oe0?zW<89+2^Rbc(k%}W0 z6$hh5Ccfq3U4}+SYj14X_Nz6G5;dPo<9WG@M7m)BT>x#H{psCXDHxsv$Yy8@ryY#b zOB16()wj&&wyR9TFeUgd=^s7o@g7)m_;)MkawBiW)mD?M*4DM}Z*JS7EEk}?L({sM zJ<;b@ZZ0ostw0w=gij}L`9ipH&4ebXN~!y_>a}ZAG@g62jo$9R0c13b-L#jHQB7G{ zIls26v$IaHkWRR^I+ovpLcF!8q3 zYXH#^P2;hF=M&R02lz~H^ypuT%50T_@_azj@2p+XV{EH9RLp~`;U=CVbZ4Ro%HWl| z0@eu17LO|nST`LmA3}}SFS4UUzd0=C_TbmAU-u=GsF}!%7WSJq{61!{o7Ew7wewLF zr!IqREYTq_uND>-Rehk-0l>V#B z^|?Q+;y?d(oR46Zk$Z69!y$*Vn-vw3;HN@%?PLxP4n049sO zupy7c?V4E(Coak-EqoLLx@BfzIe5yB7Tw{c(c9=>zihw;-h-%ZS#L|axc?}71z>T3 zS=9~$e)X%J{4@=UF^8M!?;b58-zSzDX=p{8@T(XMq)^{rAF?g{QdruYBdoF)nWaZJL>#ZF#bD z7`=tqQ9kRlwQLsUocF;uXIm~X&dxVW(jVM!TZh&D#YTwu>pOSu)NS(zEUf{T)GNLk zHyL~tE@sP(h}OB&tKj{i=z)#^FrW^Bw{LI5zR=D!J|ZS2HaR(I(~?Yjdk0nW#Vj3^ zC*`HwyMci;P-+&&+7@@5f`p$B8SwJw$FdNN;+isr(9-Htt|=W#@gJxp6?OUb9!qiT zTP`EmZp88i%BXUpM7d0xL}VnEAkE&r@9~^7^Yc~B&3m$S8u0{JcgjgxyxOd^0Idd) zibgxXy4n%GKz6p(^QDcoWzMrw?`gpWcv`L`zIr8y7pR3Qh0Dd*d3b_e%`7dkv9R36 zj86nn=-Cp0HswNSI=X?=Q+G!~{lHF!1VP9>#70iA@i6mD(&m_5T&(HnhytG8M^CSt z6h_VZxfz%ntP3BO1}{?HedpG#wRzM{f>b|xv^PZ_4(?4zfJcuWO-)O4M3s}W4tPm% zT1>3%jiUvgxCD?gNpLi3Cq=+k6B83dL&JNap)p1pH7(ez?1O6})m2s7;C)>1k-xGH z>#*R}D+u=|q7;P~KDV_be`RH59m(IwR!~roE1&y$_sNq(Xv3&lFRPiUNV(5DdkcCT z7GhAzzsMMRVyVzh0TdfZl(aC^Ivx02QVo@}$pVhi=*C-?g&Eua}-m_&&xM!t{1@ zc1}Tg1h<9s9VhPX7Ps;1mj9lMUY3Iu0RWNEQy`KIf-=^)F;j2^qLdSg3s7hfK=i_PU{9t)qykZeI;fo*pOV5d+MM{Udun7PKr?d~1i*^N-E7rB zU*BWWT4s>x&6Y-M_Ht{+43kV|PXwYOJ6 zxj5}QPRr;sv&Gid)=6}8wb>s#bmx2MEIX(eX4a-F1U=_0XMZy9rM-P1?!*Z}G?9W6 zsEvZ4vG3OBlpqUmFOw7W)N4->bf0{`4KK(;U8Sy9(jqT0WpH5Wm`Az#YP0e1@Ra=- z&w^DD9u-vsR??Yo5m?rT+J)YM`gjOjGw9*N%OD7>swSD*0ybZmMBS$zfH9%7I`S*C~`z|BAyZr2%0Kj)0X$viN10eZ*07p z4e&-X_#ArAV&xDGnb4{~+#-eS zO+!zA!PJzA<-$YD-ZD=Dkg=&e<^v!b92~qC9PB;m{0>3@-ZU9E3!retFl6fH9)(KP zVlm3Hm+S$cp3%X-PMn;a37$U>qPN#U4nei!AOMiqDd;xuotwok;3ezp>PSp+*H4L( zi7*0kI@P6s+@ZmeQ&JAKrYVt>E%$m~?J5WWeH#L9iEg=CHOavdNrl+sP z)#D_5OMNC$c}_bHZU-9Rj!@rroRzf&le@Z%o3U3Y00WvslEFf024ZZ83_Zv6<+&oI zs}=0K#%9UQPrwMo63freM=xfq{`hfg|LEuiFvOvcArYbY@rU~QAS@j8rx510<;6wW zl$KwzR=7=ATwFbfMKGEiIXQWO{5CG5QtiJ-4;>0lOk|8;SNqu3Mg!o;AY}6%)w9uO z3Z}SM{2i?BpFiCDNGU{VHrCfYHaC`uEet`%s!5G$FD=s@gFt9Du-P9JU((l4(#aa> z!^P6k_k;)6az1oRvV z5m|x0T>=pg!U(hp!K+(v{6z}RCag2ZQpYWHYNT#Q|tNe zEnBwu{9PR-1Q{e$BdQ7tW^j-24(b2Cn1+!3cWurP<@O_;a5RH4QLuEp|n0ZMqy$gy8`40H7AKRPy$1L|E8) zFRwoqBM2&R>=zLcLFNwWK#^6zI3!~b`l67Ol(aWvp}ELG2M~y)pMJ)4Uxgav5Ua!# z0yEg2J$rWe9UE?oWXQU>nAjo2YnEd!>N65}W&P6sSNs3`A1Lt;Rx$kfxKwZ?r>n<*kyy;L(FxLvI zs?ok5eyT>zX>@=8-oWfT^pOfpLC(vobgwNy&~d2eXFXAzCbM!Wtuo={<#55iBtlK|vY-eUWuM3`;u^U((Zi1RMam&GGg$9-P7%<^&1e zilgK>tMti`yZr0&6Yg8)+=~p1Y*}cabdh*~jHV55I+%hq!jrA5*tT`+y@wBp(jBG8 zao%$d`q{oCN4Pg7H!cB*OB?X&q`i2WQyQKV7n_(E+S=Mm9i?cs!2kLbOW8upyYc<$4gdGo`fIw(oYHQH*X6G7twQ`Ncp%7rru(7e-C1^Ox1F&QDua=Z8 zQ1{qQpN=K6Fm-kEBzSx|U?6;`2I~`-A{OVDlz95-lX9=`ve8se ziG?L$^8#+wK5=*#l$DiL=8G4Fy>UC=qISINHPR{2iM6NCV$mKv>%sT?dr=iAEZRHX zy|dW<5W)kIZLgqgo5Gz$J@Q(f;(p!@(-IJMc5Y4zJrS}SVgQx6$w;h$nwlCjGxI&T z+Nk+3#3`UwVcDF%-cJIL_9M((w9VFM=eL1_RRgxJ0)8q9-IGew%(twkj^;6H04nr^ zHK^ng57XlyVjhT`Btsw=9vOix_Wt1!vC}>)c?tG_vj@f8xIRBVC7snlWM>M@Ywk;3 z3d6^lPn@`i0VD)cK(7^`rY=lP@0nBAdSb!4k>9xPFW@jEc~kQ(SBFa!aD(UA?yJi;&?sNsb8j5bLCAB?CI*e04yZpB|w zcGahZjRmB!mCy7&3Hq!NCvzZkek2KSU{^7(%?cgGXfxEZX6-j!JE1f5kZ3RrJd2rNe!w~$fT(2{`~1wc=TfkFBNC7+N_ zk)DVM53fW4l~+*sfItqm`us?YiGbUr9xCO<yP*0bp5&{a3a&_15z8 z<*lUIs_3@HKC`lA<>etgv}v;AC$i<;<$$vZbVTGM5YCxfIwIyq&=7FYo#&L5cM;O} zy3sfv(qsE!k3;s4JE@gkw@(FWgHKP-L}1&uAPfWfkNY|IYH6B!4pL4;1^~Jc`JO%O z5)wymz}*&go0P|LP~vI_%78r~>N+liI0C{}P*=;<*RX-Uywn#&zO4yJa^yFzj=ab% ztc1NtfO&a|BBfAOQxgCdLO|56CGeKHD)~w*C8+wU31{nfGWsw%Ab`M&coMS$cEG{XQZxq&QGkrU!gsoyvg5)+$|P1CFJ z^9`$YpX}ThAoT(9pGCII-|UJI=Ga2mkmVMz8B^U=!+BRxXbR+|Z{D!BwCo=o)O_LG z(9mEG(ht#05RjSK-UO5Wtp8Y+(&fu+2#tJbXi%JzkN$g9)J48|2}Ko3+rhLeC=QrK zbfT8E>gs9|BA-OkMQVQFgA0^QFqn*Q=k`YOCd(QH#X8Z*=f_hMK`yAN0}x0@VIMvf z_l`F4-zciiHU;7&^j|EzOpTPg8uEIcGIH{p@99eNs*y)j!J0TC>eAosP{E1<50vUS z)pKU`m^LlSIO!uJsZztYZd4~`R3@A@|N55qY1(8AxY_m%88(8K?xmrTh5@>B_u+ob zUqG};wvIC<*1XXK&dS{Ue8|zKNDN^q&U_MVuImO(A-V5z)6>I)gtU^8mbMxO(aiGl zDAd-cXPoZ_)ANptuWug--8-(BdYq;b6@u7Aw{G3~)tS!%erkmZas2pkWLEAo|Db}2 zttPR$9l9gzbV8x=SeZEnst&ogp66Bpa|rF?!b1BM+h`G#qjYR3f)%`ff6mxzj1}n; zAdAZ|-ef;^Djj){el^t|)W)lua^e7&gN8w=%SjkJmV?zn0UuSnJ3Enxv?vh#lD7`9 zHvIGF_&i*yirpMx0fVi3Al;yfzgwO~^sYbB5L zA%xozXenOruAjJ08c9zOj`ugV5P=7%LCp4tz>l$ug3Cjdsdlv32w_d`qoWG|8N(YK z=i_?>%8Tl`I{B)ZLPhQVwXi!1^tP8241UsmK+(p!7DquwPpY%5HHSY!=uw+HsTva_ zBBW72RK7Fpj*HG|#77s_=L5o`qd)$~_kt))O4iw3v8oaeq1)D zCiCo1pE_*tn)`IX@JQ2GAgN8av$GRH4e@*&QGi{dG`(_j z+s*>l2^|*6f;&@Bo@HKfL_7s-%6Dz))Ew*bbRXl5q1w=xpM{N47zxBD9~2dx!aNCl z=Z)fKVmjyWmNq#S`bpO->zlXuwgo z5eh}-=zzGMYf9{Py4y1vPx!mKx(KKM1!8b~yaCX$uD<>Q+*|x$4j>P(X)A46sa+9v z!&oJpi4q7{73*`9=)2puZwJ$8z!=!VK_RwEOR_8>i4)?$vMr9SLB}vrEUNI zk3c}Gz@oFWvna)obk3no)qnbA`SVj8Aui52;<+vB9vvg9IpjVwYimMH!$8#5)?T>A znuzkCYvLOv8@%5U;sW|=Ku8D`WFaET=4EE1d9M@5jBrt*k3qKx1pa|8!KS91+G68@ zC4(}4lUAx9*_(px{;&j)m zK%`}jeHSkx&{dCu8GjD-C$t90D_i=0g>VJ1BX8sNiMSSk$Qk#kr#&B5 zQIgw=uILi*5%5x8MWqHgS3jo7-tska!!&<(sf^E0@nVQ^%OF;DK=|r`=;&yIfPpO( z*tW5iuuK#78^kAFW6uEOeV3+wGy=~-lG#C29Z&)+lBNXlMz}7Z4_hQR7H9x10wHe#qb;Ow|lCJ|sQE2pbeV91Uy+New5kG&k6>z(Cb_Zr+L= zY^<#Owyno^>^Z88rz4;#P#M74JfzTHA)g`)ZUSLI`3@ww4b}w81F=wupj7tjUa5a| z5W<4pBe|~rbDnn(;*y&!Xqqo{b8}uBWpyBAt4v%S12zWi2=YmQ5-dlskBYittTsZi zMGwALPz~6cd7*d=ADD-i;|!ROK0!uFDGkhz_XEs_zZl$OE`huo7J3;H z;oC_`2m1TZfgZz_C;T2mgvZE@()<|-5hHsle591ownfi&i++@14dKM4wbj(rkOF1F zRt_;gPv`-K0EmoWWRO`xlFbsfqY7f`kZy+?tGX7iY3{4<4(KQAwk@Q0XFdK*F9vQ!NS0i5aZR$wBq=T!y}O118}%*sID4;X;dH3;}noI zIWuL#3!%kK;KYDVse?hQVdiXBw|sO%x@IQDozhlC{T+x9*EKaE)uy`p$jix{_aHQw z;1c*9c%&CgNDGoE_ILpB0?q`*;sC}>yH?sird5BRe3ZS$B|SZ|Z-E$>eU*zEb#{T}Ztatd zMWA9_ts>WY`my$4UsHy`E0PU|Kn?W)+B?gsQ*>#XwoW&9IHxI+7r~rS=j+Q8I{6M# zOe8IQS#;sLPoE-pHeV!-Y;E_t%V-<9i^(5Bi6~)#mX9BIP*PGB6cjx8DTM3ZYGum) zV%)B2L8pS0&Ck(M-FV0iC&?Mby|hoR#)yD!$y~TVIOrtfU$d2vj0tPJ7UkZHqL!U^ z78$onAaPDE-w$n7APV{gmi08B1-ZGYZ2#=iqC6={p3s2HRnpTLu#i70ye}&|I5D9F zFw1$CQ45;LUg!^~gBMec(3`sej$2wfM6vVIk~5Kg!jdt8=8k(H-xMjBBkt!7!0HmDEjL(T>3T4D)Cp} z+)Y2DIg%{F;jDSW2+UdqN-u8dkT#s#Vl%V2m_}6LoP;0Qmqa2JhpcB&W0GIHXvxAJ zDWg!SINsUS#SdTK;Po{XsHdY%@k1y$nCW>S5o(;aR9D}Nc>MsFIGsUs!#fj2DZE4% zQd0pYl+GUv3saA4$L%jF85kPU%3Oua-v^EzXGnH28H@}SVwF6)q0D2teA(tl=_#V( zL7BHg^cyZhB&rt#Jh{B<15zmHC?%=^7f7_1@V>e^hR5KZBg&=onDdErf-SO4%+ySOye0WH6jY8tA|(Dlw#% zYfy=ZR2~@N&0D%XDAM5ZgkX;H^%RkILLz|)5ZUcHGBV=$^V2~hXoZy!B1KzXUT%vU z!0kFa|4Gnm4Qanv$k9N4L$!?l+uvicBMs4p;22~OTnlFIBk<$Zn3knV%LQ+JCq32nL z9kG%C{NQG8g+zi1apK!F2(|t@pORjF{5mogeCPpP*;-%M(qLEO z3G*+{&Uv1A*JvDTB2p;W)FFmfp#2OX242(H82s`j7l2v~a`%!E z+?VL->Cx%s@JfzuZbUKyz9$n9tnU^Te&{@MDRiE9e+-cbHjONuhufsX-*M>H*11 zJm=X6Zxw3XFox@;L6Ks@w_+HLG0oXtE!zU{m}hi zS%8N}IP>FADr)T^lHiDFXlLn!0GGj!tcAPQNIWVUH%4Z zQaW{R1wdyOG!)`W4807&HSyele~&P)b+*Xw-GM@aCAy7}B~U3K{GiKB6fuL?D#Om| z^O>jeU!M&u+dzRMG9g4z4xlKqyW|Lxrf@!6vUGXHlXN(uhJDMmj+tPMESrO5pz@mlF1)$V=#UKz{u1_hroFuyJKx|hHVU~ ze_b0Pb_RUbJrXPD9M(|WR;K+o8&L-i;)K9V^J13%D>i6ZkJr1QPZ248JSbQy2W4qg z6diKt$>>h3)ONN5#31IojA?!hWo!m3r!3MvK})<5N-qHd&-DC;3~D!6+dRU*JoaZ1hnEm z!j~6kkO_`QO8EZi9~-MD#2Ima=TVcP6bXo_T)Wk;53#ednq9fVS*xkY&5O4$x5zcA zXhQOJ@o$`RK0?H7%CStrg>bkkD{n!{-AcM?Iii5JQya=iuxhWHYskh{qLd;JNu9>B z;Vfd;F5fH}_uuMH=H&h4zz z?e%m+6epp_5k*^$(gIeaRBphDax=&^zo-JEtLtlO(zHiuu?^7|Y}?YQP!D<9a}dHM zatx?L`l+lq_^F1C4;~ZK+yV6&x?m$ScRo&3r4*uDC?m*#qnqz*YGnVyha%QAa$3U^ z;cz=NGXeJ5yljcMFq9$*I%cZPTl+UT|o-LMUFt=R*z82;Q&`yJ{`gRS-e6#5<$5m5zzo{0mB>R)or?CrTFwOva5HcERPP|R@_$kD|mvM*g3?C3m#B>%fM z2F2h`>(hcRt+cPoT$HSFKCGusML|v9vHP$*wiYtptVqS9386?=qcYt;>(`#4v3=)G zA|QzJjEwYA9|kuGqV>FZ<{}_ntF=ZxA|e6~Ml$BWOG-B(a>Nhi zc?-qYEvEup{{E{};m~+lSob4kLVW7k`P*brg3)R*2T#s6;WRYl41zgAT7AJTj~S-ZF$S*2PY*!ahj5Kl zkU7q};s=UR59Lyhad6znSvSb*-y`Oi)KHqR(;RFgA?*`?zo$MuBj)u&CkL zxg-tk;&{^fGHxYzRzq?()DllzgNG00 z;P>F5a~nZa5!%$*y-R zgOu7FbdWb{;(uKs>>Uf#!8o8*tb z(%)nqy7J(OjIKraMGGMYIwkW^xx5-`{{2E6OIz>h*|4Kb0U>|x#RZv1pn=GlBRMg`>^yP zM!#lg5a-Xf(27pYJK_8d4q6iOGx6maQ!qBc%+95&V^7`{jwD324=i|C>!7MB z`BGu-2%&EV2PEN4X=fXBSXQ8hLKY^J1)QX6ylG@dAM@Rm6%jF~(b!>q3EoG2{J#bV zrGWjEi@)J`CKd;=a5P00%g9juh{Mj1M5MN55#IuU$R_l67(kybO>i^V=7&XH$m%L~ zBMJCiF^WUzT2E){Rh($2D4znJ2Q>~@g4srNTOuVg+*ibVsrY5}s$)azx^BXTl_-tU z5P=fMS_44r9z(Hu);4zC%`Mv52{y#B7zp>(I6eaW}!J9~*BEXMYb`R%!5HCVl9(LU9(o*zJ z$;jfKSKpDPCyo^(gOY~h<*<;^e;$89_!k;Xv*xChKH`QbSwxwGe@F;uaAvPxzy2Oy zD1a$L_HE@`#a~tte#ij(XlQQZ5C-Db%%Y-?IWE57v#i^TRw|3+%ZOON^+p-wbZVTM zWm8M|1R|=8V~l_cX*iY(Ng>~3c5u{5Jh28Fl{l!5zhUbRkz)zo&utEzO;~+s+DUC= z1eAm=3iFf*P?f9`@g%SzVjze}EwYvXEod1=HaEv{5#odzEF6S)hp_M8l$PQJ2vmX$ z!a2WrCAcGS$?#*sJcVnJfir;k0in)eM#^TcEC}2?XY?M95D_Ovk$?cY2O$XrCt%!C z5F`!+*QtwDDVktVSUpw$FP__4i+V$p|pbB<_l0%2Gs zWQp9M$GvQ zP44|@%%345+5n0mk?;%~2}?2-UNYWT@Ab7KAfN%FCGbmY&<2RZ)5K8;Xr=fj3e6HH zD^&g~;j9Z>i7_Z9gkg+K0r~FT9|1c-KM6tx?g>`u>(uA09~o$Tt$CjZ$m>ar4gU z=^cQCPz7cOg;habopB6JG+~klNS2o4qkBXFa z_}&!og-@*?a4rq~^q8=4@fVT2nQyb02;yiy1c=W@bRQ}`y}fbd8cLyJ*uj&$kKeu( z$`!@n>rm1t{q*;LTQXG{Y174#gt-QVf#+(ZOR{ zq>b#02lb@Hife>?e=T}>F3#3okRqp3!ZRb(gY@Kn0uF*n)Va3+O{}jBh5pP*HXVSL zW>-|I-s|LP#edV_&q-5j>%gq6D*?9N)D(>n&S6av=V`%gVD2ID#SHTftLMol4t6p% z=>~0n-2^ZFlMo>uwANMEc0UjHN=;3r6?;4`i>44UN~J0!HbfDorws*W+@G>q#JF7!>Hyy77 z3yrjB%rCqEG6#nYqRPx?kYB=Go%d^gXtUl{oJfTf$Zu zTnx$LA0&7Lr|7|4@!brUUta8jN$|F=H^b@R7Y;0Tr?HrgVI%bpfk6s57zu?AX4 zaoXi3xW&83Zw#leo90h&ypxB00ey=4;K6zXYxK>#AWk$|T`IJh4YxZH$=*8ti&Qt} zWG)w*y3(gEIi9m|a3m2mtj3wqtFC+pcDYP^rAjMU33W$zlVM*ldCFQt9ZcCSwfYq# z*je``j9NHGiYSr6J%knr?hKQkx8(Az8J7nCp$9XSL~aVU3BLD%IN%E0Ue(nVN1Q3FVv(Vj0L_ZM#Q1l5|Rk?g474P@_9nc>YD)y^?x^4Y9)zZh7MJ2BLv~| zBSJOOAVf;i6g zXfy2#kSe}7p&D6;yn=#cv=HL79Fb}PUl{eeMx6dfMU+i9fdv;&eAf^vn^g1s^0GC) zR|nbae7D~QI5v3>&6tdeDh+)QC`fMV3xEti^ZJ$ss|(= ziJUO;JviXlb?&dguMm06bLe{~)x3#50+QJ5Ox2EhhCmAR)$@qb4D;?M0aPYJL92)XmF&2PEnj#%mnQ{XUa6F`x=uZ9^1O;){SmjnB26e~n zn;1;g(!5u%yj86urZL>mVOrrcMEnNBWQQ^bKtk(^X( zSj*j)w4R?47E~GRi1e{kcWQHhB}ie}#!@#C>j9TbPDwd~L-(0G887A<$0M}`<04om zi`zwHtxPNRfgB6q#jZob56~8=5%I@2w?Ui8$jD%xpDjl$WccUfTYy*cii+W{^r3ST zVkD|oKtpe-YvZs(wob5I%K4NQkd!~>6O&U@4^^LY7H)vVAnwotWZ<_luygeffY+r@ zgD<7btPaN6Xk1~V;FYswOYeH)$nq`MgdJ=imqd8%PK(VjiVAVSP<97b5RRP@0Sw?+ zqLd;m5*`;9)M8@^ZVbu)Y;#+ftc(mFz6Ap&NfW-n;sP)y&f{~sG2O>89Ce=@KL|~B zMGQ#S!n?Y$PVyI>&cR9g|1@{zVLh+?zWf>X^n$v`c{mn3&m(Vvn8IGLzwW?)E;tqT4Q>p>+r%J^GZT8QE0~z&^*79j zXhAe+Y@^`AHxbD6#-*85G^u@u4#(~-5ZeRmQ0wtmrIita{o$o~^CWdB>-88g_M24~ zl(Y&tu883a6|j;2SZo9Dbq&! zAMgIkpOQ0??vxSfDAh*5_8SDMz!F8pr?D*bi7i5@$5ZO))k;pSXr9adMCt~9)M5QYO4o<(^@MQv6G1?gVBw&G&s zB6@deFGMxyu>=9{WwHiUH??X|@ZpP$C?NSRjO{|Rz=nCWs7mBejc=}L0|)`eM!tgi zq)FFTcE7(X%C4BJ>+$jUV7^M&oz?iV;blZ57}6o6dOJ*GpW&v?VqtK%UZ)n@52R`d z$;2^pP_J@qJokKYNG=? z-{0l?r`w3$aW?V7War%f!C*##1NMm~u|>8MpPtPwZ9RGd)E>+W3{8Igrg zJ)||W%>VwwHEFRjwov~ZH=a_@r1Pix(9(#pY2}}PNVk=OR1@p&;lo}(XD6+jr&T_x z51+>B=XtfdTeS-0TvV$p#}O+Fcn1^z<+1&mcWPH1Esr!#wR-ya@l8V=*gdvhLGk*X zRqQypu(}>WHIQo0RXXxhVtQb&TKVUR`|4`qcSut> z85{PnYF+by9lKkV`H}-2;Wqy$`gar%gfXTOLAZf;$#u(jQ)ZM^zJNTZor@;>@c^I#dfpb%T~A~TX*VgE%PUu~>q zlZ#yAY$~b}hK}od$??{(SqiHCXPXyov+*=DKjrycXpI4Trl{B9!q9npq0!D=Oi6&mH!O9d<37oUav_-zXhwWSfcBSun+@2I@GRcz`a?e!&X5wo(PK*2|A>kSz8yb^!;9l-=w`GeH7M^E9$GI)rW@9nsd09x&v*w z{p4;ZfT7qcVa-$M{-HyhYIWFgC~f=2$CyW4g#x-&8}$H*%7&nzpuH_m{G5AiY}A+! z%p^EgLN6krf9@h3U|$EZBoHHlG2=kk*V@{7h-p#!%O1Oz3#E$+bw!8(FL!{^ix54& zGF7t#F9!8S0DF?R#ff)_+88(4g^=@0_-9NXqA*a!1bXA!q9<-DeDYMi%Y2p~ zmxbGsuKCD!@J^wUvpGE{0uu+@ZTY(az=VRor*Bz-wu~)YQ1qwg=7R;7JHfVS0h@_m z1^#FZWyH2u4s3qXK4U*(ei19TI59&c2MB;3B_2enoaouf2yP_+&|SW+^2}U}P&6(+ zN7h|NJ};1B-{#i}aCW8s#fEWfCmwE*3i&Xc7>}E1fy9r|3W;%1$R^ozJwB9l+JJ6I zj5ff-!duHlzIy+@0DZ+rqxcX;5rIHL38pZT(pQV^Q3P`clni8&Cq|scR8hJonBn_jpBvMdkVB}fl2`Ri2LCW?DjnZ5m8|Ab695Sjf%t<=|R1pXDVV^?cZ^Fi3dwDPzjhL5$`i7bxCgUrMmXGPBRg^s?>N5;Ge1nKw*$oJ}LUDHz=H{n6wAu<8c4z0AGq37hz< z__N9`^HH}D=?Wx*ohZD`1yHRhui8#Dmlfb*%okQHZVA)TIG^Tm5;3)7@*ac;H?yhz z0_J5}NXEU{HU|=Fyll-MZmVf#n!i)_kyghYDLtb+!$ObHYF%C%g`maliX%LR9KySV=A@Lexvu1A`YF!R(DuI!_ROe61TpXP&^+jn5Rhk9ShJcnVdkj6a0#Umcd0{A@k>ifq4E zn3n@CIc2P_?ghVp9HLk`@%!5A+r!2*esfe`*c5u&5UC7S^<%*JAQ>z82AGwEH38Vg zIMem2!?syk_geSaaeYYpL8{YwjqW~$T64s$oo~V)J}!Rti5j)vhdO=S!s`Hx~un(EwzRxBW7jkudR^~aLe4+xt)do=jpnG z2glqsP}M)FsOo6CQI*p#h75^Sx_nSU!Q<&=Utg|>_g;jf)p{&E`yh0(VIlsHr76RP zMq1wB0SF9=$`N`%DFEmGW?n@E#u{U!&7!L*^9?rjYJt4!A-i`Q@w&opi!5DU38VCf zcN$xy$~Vo@O7as%bgZ~2LzTV~ECZoK^Tjewz1xBvSoTRpRaK`e?2r<%@W8c~ri3G5 zg=IBQn-Oolh1Yg}+l3q8dBWZX>LZU zZSJDPSXqg*MUmTmcbD6ytZ56L{$kmXvD}z{5$~6X@C5zJaoF`kSdIiy&+2Jl3EIE8 z{o?uaLkN_GS%R3*+f;!K%{vXLX?$&0>r50(B8!U1<~nGPA(<_8HLL=zQ3!0P2m+>^ z7Qt)LE`Oko%&@ztghV_9EAcgZ%WJ*^M;AE~$9GAuNH~l|(Lg8tE5){xTwS>_hUSTM6Bidl(skPbFXq$gJ*$upPa1=&U z-$lp`cba04lN&+}8sLJm%8 z&7%Eb*I7YxV&r_N{=1xdaL4<-ru6;vl|)~%qyC^)5^bRf<-}YUf+Xo?(S3uZ(367J z=V3xoWOG3xP|*B|kqG|~dExr&Mlp4Yg#aH^0}PlS+Q@zUyiOlV{yM21JZPa^TKXch z0RBh>^zkZ{iJ}bVT}Ce<3iJQX&;1w7Q`p-J;^#iSz9F>zNSTay*zr_-7zSZxVu866 zFc#|Z^}nFY8ppm>1S?g}&Kam{dCs zC=BZZFU*$OwOa~BG&;XZBsAY@xPCRi4)j`vkU~_H*-f8Y{~M8&6q&5C`#&SHG7bly z3+`-WY>nYph*NQaOx)#@746f*>|6O?BP|rxW!T$$&+*!@B|w>6VL(-Z-!tjaxoNF| z-~KhShMk*ZFD6-^&gg%UfvSbS?x7aOhgnlaK}fPO?&VZAwF@n@EVvicG)fk;@}!0H zOJBb)GS&wW3XspKKg#fUbEOXb_rFZ9^oMHh0h{;6(*&Su@0sp$>i$edQT1i>aV~{l zaz7IrD=@5IGm+}nJh&Ql)cf?lfc1p!I*sU^r8^g;Z{+knnAPU?#aCN8WG#+Nx#%}RQ+rdHn_2r!XSF!0~Fckffou+E>( z|A!RSCcd(usK#e@zMF5eeAL>keJ8BHCmP!Y+z?crh3U7KS#7k6C$8-UDJ6KN-+y27 zAwe&dB`L-%O6aY*JzuHD{9>oN1eMQdNPP7pWccyH#~<#yMo&y|uARR#e8Uxb^_dk; z9IyhwI13ENwxZS>6jnqa3Mm0#ze-vOAT5OEQP44sB#)^sAF79x6;;+s@tpoG?-H6Z!UU?lYu`~~wt$-#x^yb?d1^}Fc`v^{ z{u72tggIB#9%d-P{j=GL@L+}ysQg)^NpRZZtkSq>O8r>0zt-kx(8CCh>L=qrt>NnNb-P6m39|;4YRuo^+2LR z0sjJTqcg5A@w?AGUniAe-~9>-dU2Ek;7U1)E}BOX@!d0Bt$}E6VZTrJYS83S52UrC z(1DdA_;|%`-d5#HW2-K`M{GcnEZlUNO&@eg>{$5xk~V__HnMFr)l_Vus-;p4LIXuH z5&7Hb$pmfx4F%FQp@1_t_Zm<{!mv=7 z`fY&x(2f(CpyVDg?=URwjf&d0FP9i=V|sehsZLzVps5uB{FbRD)Mz@&7|=xxbq5C> z7ap3ZVc1tBFRAaC_q2W`W0_B!*cR?G8XS*7)ei~j%{$M)(nG5IFb{@u4I{|zYG`zO zktt6nK^ox%F->{axg-_e`CI2J>a=&`s)qAIzmA`heOL&o;SDG8Hw2A~sTJ8so^y9R zv{g4)Of>6`HOHQ zq2y403I=OY`wEx`HKq>qxQ5=jdN3FFUEw5s%WeSsXx*@;d6&XIDW8S3MB6YC%j#4> z%?T$*nc}eW+$jZu5mrsI#7V<0|B06Hz#LyRcjVu1XzoAxau>ST`R+lCjGriWD+wI8 zp3^RC_pJN56OX(T^7dz6`57%*BQTRr6A)v*VZDbqKYRAf%qx-~7SUC__vUGMwD*|ngere=+T){dmlA?RWP*q$!1T4{wqakr znZH-*@7g~(Kq;dGjg1g031b8ut;oHA#i8{I%2i5I{0AH5e2yk=-d8%Ct`k0#1Ox?% z$TH(_??Nv%0E9R7jn=*)jOhZp0{PK-AwyrRY`CBGJ6YUIo#R9)E05;rcUdIwTzhst;V9OL-Afzo^xS7JHMT!P-^k z<%d8?;+-0jdC1X6@J>gTurxnsYg)g|0|RHFO|93ViDLmmygGavWLx;={_YR8G3j}M zZ@-25EjP429M;~(G;3Dpl3<04hrzr=&SJOzdbx5AUVkMg3Q2infcd)aumQ6ZzA7>t z@Fph_WW#_cR=CKa_;{(VTc19CMEh)$ICNHf=+WhM6&4aAuV$6C6sjx!E+@B**%%CO z#N(w9_b^?cbmdyb)0MvWAX#(h7dd-quvX`h(H-$dX}TrNbKSbuxsl7QWh||Z>0++2 zXbFE3bth8y&$uP9Apr*dH^M&mpDfd{XC)v50woRegX4ZXc5gDXr&;}ezjEn~c4BH| z{JuxsFxnWyU0PCd{@(n!^i?laTL5(#`$Sy zmXd2q4)_4T_CZAxtyybE@++vG61-t;8X^=6zxdrqWY$BvsC;LSi+k9Ub5i|ND3cqi zQq|rz%Hufz_Mr{4T3{8_s!jVd3@qulg@;BIjzy_Yq7Qyfu{}HePraj6e@Gm$eTX-L zU7AO#3~GynPZ<#$I;+sM#Z{;4M5q;D2KV^@8_#b{Oo;ZGTj1?>^7loQIbIkh-r|*~ zKGMGKBPx$wa|j$QVvnQ6)kFuhCpL!*+RGk)b4^0KNO&^r$0-n2;uqG{3EC07@Q>U3 z#Ca&hd7WMIcsEw|T3k$k145A~v|TLg+D~GPquIlWW*A$9I6=R;xp@IQwGb0H{AiTJ z2Z1=~05EVb&+kaKL|P8^=Td6GJT`ySZA3{QGpxz_>E`NW&3`v|j->ijsGjGi?z;xie&Eg|quW^wXAqeB@C(sjCt=jeCw7zqm ztXQ~0jlOj0aMtcTh$?~A^HSKQEfItz^)bi(GQk1Z2_}P$t|d+lJWuSape-U>xM8O! zD~8)84B_m<+W;}+{WqZTQ{e%MdZ;x%NB}Eag{o@|WQ4t|YW}it4ka z<6Cx3x+$r>%z0By&@fY+IS7xm){JheWvwDBGJl~V=m-kZ&J4488RF08#+(R`!uele>o1~fbNIGk zoT0S(-v2|_hITdLqFs!O6>_wXDB{}eQJcY0Me#PrDo~vbT9?tEPVhIkBB7DmHGbf1 z505mxs7+y$RNy~kH)U%%Z+@aeEGGu}QGGS@J--ZI+QR=Avp#O*Kv|K2}s^ zo;);9m+M9UCnCXEZ@gB-(##vt`_>#SL+QMs|2%jJg%l<_m{83%52oZCeG-S7s7x`E zgG6{r1iZ)^azA=h)vp745V~2N$Zj##{wNjGPs~`Hm@CX~OCtjNVwtii-Q1x`yhf7EDQhROAKk4uSS-vUvAr}K)p&^sNOddGZtxyHR zw8Ut|pGr9{&RM_t7k13?>%Q>K`OoLl85Y}+QPd{o!7FE8K_wUuDE)|wY8n&SI8kgM z%g!m8;klHz7MIw3_9VfTk&DuBYzebn}NUU=L2`hyz^J+#N1ut`wbwsX9} z=1Yz*$8@NgXE$$=g_Sr32(2HVhtMRfDjfw+G{~q%oQuXJwmZD2V;$2)gc^sl zPl@xFFca5+f9TaMw(CLLt#~7S?(R4Gdl~WzF!>iK;dA;=Ju*!kYyqYC2b?k3?7eX6BwO~K3T6lv^|YcQAD59b`tD(YhLiz>;0CEAboA-$yr(KkAdn=w0TU8fk=dih*KRC zd;V;q>ZMt|)|kxw4L0hSjT+#jgkb3|eKa?t8Sr@b$f~rCI_MALt{VwUi=*3$ZAdtxoUiD$z2E462a zitOKnZy_|yyx<758U(nXXS!n*s3!+;%a9pW(#mVBcxkfGVfxyniHCh|f}o(kM=2vB z_}TG=xPxwC-MqsbZPt~oRZwPvvV_T^rPO~ zvuOye69+Si5F?S&$EByAYrs=!eByyPH3u=j$g)QaltrAecxT_uEctYddz!AcFxQ! zdF5gfh#9GbDvhpUAbDGqEkysqSj+TX!3;7u(}5uKJ}hTpNfOR1XbXYajc@tXT@5~q zWhA-}kX9kNt-32Z=2y@*EBiM$>C4v)bUy>KC8ovI#6 z(&_HOW`|~-{<#8_rd^&dUJWKoh9^z{Gz9xYICPASQJh@{5-i(P!c_XQx>`ykjUlk@ zK;Y<4zv9hTy7_AysK7;Ps_V@Wzd-wV|!G2>K+g$S49rqWu z12bUy@|=M}^Md#k>6I7m;96{?kFr=ild;sy%2+p=D#9o@u=kEh4KIw55Q{EO5WT#> zB7ZNhi58Rel6lPAy?0#Kj9kWB69*Omi=yt3IcNAqtjQuUlD%h&*JTbUn!;TmnNJG{ z>C`1}u2fjX!0LtTxS<5`URRD}3-kIOFdexD!d1aI(WYHRNnZpoHcznz7+HxOsn#mr!fPZ`wA82(iESP z*Y6{Fnbg0mjfsd8uRHcYRC9}kRh@wcg%~<+Z0e6RE4P{n2QNbcFAWBaNlU+=Qrk4= z_{mCL;0Iyr2LKWRYoI>1EFmIcMNPR?aE>$rn5x`68J{mDx4270;sMD9Tzi}2SuKc0 z#J7iZ@}DqwqyK1``~fl6rY!Z1&ARcW`?V>?Gb$!T?%C7s3K&|sN44BAl7-11KJcu$ zn?%yH#&n{g4VVfMnFnrWx<(9I%%UMCM1YL&*l#$5Z_+WVrM)&LMmrO%4M@+%fI4-`^NxFZ$TFJSZl>JhYqCyU^V> z@z(7oSauDgFB6WsSc9cVvXSh@0wRc$_{4ibo3$$}Y|viM@H+3mrJ)SsqJqNNVO$KH z=c{@hRXUOTR2+({a#OT&@Ayv9XCX+*&nN776D9#UTiA+iGTy`N&Oe14oW zy!6+dEm>uKW@r0NS!Ex0iz-jQaqm~C>Z26b;F~SU2ifs{Nk-jFhOd>IE?X5iVcm~G z)&UMU0oXOv9(aoT#`X4WvfcF|IVx?FZQLw)c{A$CBp`NSqsRuqal(0MceHOtue#L2H5nJYGL`spK@0(3?NT&r>sp}a&mV!6G7 z%_Q=-Jwq*jdxn01ouH;fccX?wCW)CV1*XQGM7=B`k&&Pli(oJ!`32>ggd~vWy^W`63f0*Zq zunxL|)(sAh6u!@R?(bguz1{Twko5UcVUgcQ-ga)e3!zwoH z`Ufpa#V4@@N93qQLwrBKU>(cOOG&l`~Qo~wQR^^E{lOd zBeq+B_GE_iomq|(5{pCk>~Ri}nm>E~;r3+@v?l)au0`g|7qffwjK8PtfAVDh1UoS2T1I|MIA7KGxV};91&qx><`;n z%Z3f&)@$A5WAh~qFF>ta{zY!;*RbWMsMB=Xv|Z^ZlxCd=KZ>?`{BvZVqN_O);MSe2 zce$b-(-&_(sw&%=Jwn(k1gnPQm31vd?nu+b)VrXxhkb7Zx^|~H89q8c)3F{qID%GP!WBeN}^ltf9(A>;PuPh#@3D<%&;**op)4 z-289U{#U-U4TlK4LUkaTdy0_!2B?S{SW&j9EczG;ws#i-CWYJUm%NfaU?6rL(x+=U z70kb)_p6wncK~(=bI%|hoyLfr94p!zbq<57Ku+EBX27Q*n-F$lhOLw(k2NKnKLe=I zg<&ef3nzxh2vS$k>w%%-V%XYU!4mvdD15l1A^9JOf@F*v>2j+#y>FBGYPrqHXZGnW zI#SBl6TwrrZryU#`6vGsq?Z8PA$)->%H8-P;=V$t>cO?Sp%P zwbl;A5J&HX)HXOYv`Fj0T9gd6i0zoMNkrvJm=N*d`C zw5N{Y_fv=6Q4&Jj3a$&%g3eNCiBJ<4z?hah*2^~FE@}0jIGkiz(i2(~6L~AgzgO*i zRc4QK!NeFs6=SS>t_wRC;%}5A@_r;FMh0!#^hZ*;u+&pu*V66;mS~Lj|i<^-tx)?B$a$$_5*|9<3>i zBtx0*1xryDBRtS@!c8CgaOO=RIYpSaw@uUQ|2X<#11mfQ#vakp%q1Dox*s9lP$eS) z4!-I0Z*HPIuiJh#>J$5=I`(3C&gNt$aHC`(b^<-k2$cYZ1*_mo7{U$xTmuDX#2KYy5xpT zi=`~icBV>>!;pkT2DC^V35%vSKYg-ajjt@d*!5Cn=iLvL!X6Ih@N#GY{grkPihk98 z!PFtp{Z{DUuy&+?GI_(}W}oA@)$m`b0*{E5W0Yj_$#wq2$VjBx(TRw2v}?a`b7b%g zVOc`oz~`E3;7$1meRgN7gPBi}DA znj^jWhQCu$q2IK@gEmVqmn#{$x2#f3gA4h|z@!vjek)9gJzkW?8=K9xt*U)2WV~@m-Z8qw- zqT`tB`sX_L9qQ_I|HOmNl2J|PrArr_PD~tmpul7QwH

MlM<}%WeQhQs5M|Q@S)L zX{J$d$n^{jppx7=j5lEbR3{(Z1oa4hk;!sptVJjUgLb(ZJ*8c4rt5lXz<#3d|}Po2SYFU ze7Doj*(}{5$?jAQb<^aIMU>a=?4%tZKULmQQ12x*$KF28qJu(Hd!^02H7tr8Q|(@T z`QoukW`2rc?6{|g{8!I)GKe~1kt$t!Go?;*q`ODHMewlXUPjwj=ID*iYri&8|HMoM zqmG|`*Di_cX(KftdsE@aMKNPGOV9iLjKVez8SnLr`ka?GD(U|2T>P4iy7Aqk9_@Vc ztk~T}9x;)F>B5m~hwsu!7iq7iG4x5~I&*+qE>E<=Huf{GjOZ_Ut zV;TFUVd%1c_w|-J?4I3mK=!jo#Z_A(*49~MYz(vFdoKLcvcGe{5c{$<6|J2g^6&dz zikj52*jMJTZn%l8;R*dz@vY-0?=MmcwF$eWJH}#QD3>i$`h9hj+*Eb{$VFbmuJIQ| zp_-Msfx5q?PTd&ou42@2fTc;)M~`*NV=Rhne_S@{l8~^dpHu!xu4nBMgNX-*gj8CL zN?E#I`L;_++BWlW=Sceims<}9uF#B#D+-i0Iw%=$v+Y!yr>9>ZC}^MZxXbFf1B2~6 zmUqr}`P%=<2yr1JZmnt9a@2R(`NvDrt{rUr@cMbQ+qB~sPS38C6IcBxXxM{SvwhF3 zs62T7kh!w_rY}z3vs8v}mM;Bp%O&N^i-3%NpCfie9`ZLxt~m1TT~o5ULS=EM0ogKF zf-an{-l^U1d8n?F_r6CSpO2g;uQSH|0iW6-FFAX@W>wqEAs_8r+8jxPSHKY>M;N3Ts4q0hk zuUL*5c+PUTs!3vXU(Z7yH6YseV@m>G0^_f+Koq5oCzbic7xk>v@-At#*`FY6`tz_Nq^xe@(Y4h6K`%LU^WF234 zX3lWkmIeBm-m41QgZZ8NZS!e$5xk)y_ z&%AE1_TX;sM@3gMYqy5yRGypKRI=*i3~#;6ov8`IK9SvrYbRLLkA8J_%hUlTT{XR$ z78rEzfBo8*l=>2v{$mGhxV>99{miE)25GltMm@nEAJq)*v3aa8uolmR?*KYUomMwe)5=I<*)af*fqS1xRNHNyD$K>0q6yGG^T{k`#SZM3ds zY-8`eAG9Bu$hK|l__W`;`R`aB3%h*LuhXfs(mn1uBv!}##=4gL@2%eF95qhAloBzv zX4!<_s_kz#)yn$~{Gguy#CN;O=St_f#aC8+E%n^mvMJ*9$E5fF^w|$OjMtx7al0b# z>CygAm*k}d6)K(FVXi+VMDl3T{exE>H;s9nT63_tA!Nh&l~O&rHN5ZLVx^?HSohQP z=Z5dCN^Qzb*BrF0A2~eo?ZD#+36|lCeMc-zdAv$#QPcASsq)3iJx&Hb+~|94ZP~p^ zvnzEw#g2Tmp0QecUQ{u&9S)-*(1LA9*jLY{pXF`KC;bDd*vsE zCO0qXPgxv2X-K{DGgI$xq1$ggiJhpfly-Joq$Fzdvf3MR+e0gwg4T81R`zg1%gjNQ zHMw78S0x0msIpNQ=`q*(l)k3Cyjt4VIukSJ_^ofvi(>Wb|M&8E zv%9nU#&KN><>HcWH!XSF{z~P&h4sH>mT6(7#P>qq;+w}mn%Q<4 zU1cL%Fn+=0qJ2&0H#M&GjN@mjB@b@wTeacswU<|tHR`jT4vZ>umYwl*otk{>amOqp z&7(|XJ5TN78@(e>w_aX$TJ{L>tb5a@dv|%@Ilk_CRP7&^y|