From 5df65eeb19ad346ee1812bf1a9dd6ef1eb3fa040 Mon Sep 17 00:00:00 2001 From: Junjie Mao Date: Fri, 5 Mar 2021 16:28:51 +0800 Subject: [PATCH] doc: update compile-time configuration HLD Starting from v2.4, ACRN configuration uses solely XML files to store configuration data and customized scripts to manipulate configurations. This patch updates the HLD of compile-time configuration to reflect this properly. As the refinement to the configuration toolset itself is still ongoing, this patch only adds brief introduction to the key generated files involved in ACRN configuration. More details will be added after the refinement completes. Tracked-On: #5644 Signed-off-by: Junjie Mao Signed-off-by: Benjamin Fitch --- doc/developer-guides/hld/hv-config.rst | 72 ++++++++---------- .../hld/images/config-image103.png | Bin 39007 -> 0 bytes 2 files changed, 31 insertions(+), 41 deletions(-) delete mode 100644 doc/developer-guides/hld/images/config-image103.png diff --git a/doc/developer-guides/hld/hv-config.rst b/doc/developer-guides/hld/hv-config.rst index f7b9e7369..121007361 100644 --- a/doc/developer-guides/hld/hv-config.rst +++ b/doc/developer-guides/hld/hv-config.rst @@ -3,54 +3,44 @@ Compile-Time Configuration ########################## -.. note:: With ACRN release 2.4, ACRN configuration has changed - significantly and no longer uses Kconfig. The following information is - obsolete and will be updated to reflect the new ACRN configuration - architecture and tools. - Refer to :ref:`scenario-config-options` for a complete list of configuration symbols. +As described in :ref:`acrn_configuration_tool`, ACRN hypervisor configurations +are saved as XML files and used for compilation. At compile-time, configuration +data in the board and scenario XMLs are converted to C header and source files +that define macros, variables, and data structures to which the hypervisor can +refer. This conversion has two main steps: -The hypervisor provides a kconfig-like way for manipulating compile-time -configurations. Basically the hypervisor defines a set of configuration -symbols and declare their default value. A configuration file is -created, containing the values of each symbol, before building the -sources. +1. **Static allocation of resources**, which statically reserves resources for + the VMs if only high-level requirements are given in the scenario + configurations. Examples include the runtime base address of the hypervisor + image and PCI BDF addresses of ivshmem virtual devices. -Similar to Linux kconfig, there are three files involved: +#. **Generation of C files**, which places the configuration data in the data + types and structures defined by the hypervisor. -- **.config** This files stores the values of all configuration - symbols. +Some key files, which can be found under the build directory of the hypervisor, +are as follows. -- **config.mk** This file is a conversion of .config in Makefile - syntax, and can be included in makefiles so that the build - process can rely on the configurations. +- **.board.xml** and **.scenario.xml** These files contain the configuration + data used by that build. -- **config.h** This file is a conversion of .config in C syntax, and is - automatically included in every source file so that the values of - the configuration symbols are available in the sources. +- **configs/allocation.xml** contains the results of the static allocation. -.. figure:: images/config-image103.png - :align: center - :name: config-build-workflow +- **configs/config.mk** This file is a conversion of the hypervisor feature + configurations (specified in the scenario XML) in Makefile syntax, and can be + included in makefiles so that the build process can rely on the + configurations. - Hypervisor configuration and build workflow +- **include/config.h** This file is a conversion of the hypervisor feature + configurations in C header syntax, and is automatically included in every + source file so that the values of the configuration symbols are available in + the sources. -:numref:`config-build-workflow` shows the workflow of building the -hypervisor: +- **configs/boards** and **configs/scenarios** contain all the other generated C + headers and sources that encode the configuration data in the XML files. -1. Three targets are introduced for manipulating the configurations. - - a. **defconfig** creates a .config based on a predefined - configuration file. - - b. **oldconfig** updates an existing .config after creating one if it - does not exist. - - c. **menuconfig** presents a terminal UI to navigate and modify the - configurations in an interactive manner. - -2. The target oldconfig is also used to create a .config if a .config - file does not exist when building the source directly. - -3. The other two files for makefiles and C sources are regenerated after - .config changes. +Whenever ``.board.xml`` or ``.scenario.xml`` is modified, the hypervisor will be +rebuilt upon the next invocation of ``make``. +For the concept and usage of the configuration toolset, refer to +:ref:`acrn_configuration_tool`. For a complete list of configuration symbols, +refer to :ref:`scenario-config-options`. diff --git a/doc/developer-guides/hld/images/config-image103.png b/doc/developer-guides/hld/images/config-image103.png deleted file mode 100644 index 792015f23eef8e56f217ffea61f5ab9d1ec35fcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39007 zcmb6AbySw$6E=>bAP7iENrwm$(%mH?(kZRdE!|yGk`LXTf^;Jw(jnbQOLy0AKcJuY z`#bMC>#XyKOTC}_-h1}!*|TS^xh7CfMjQnR9|;Bq2IY;!YXumXhs)qk#p8$I$q$L< zb{H5>m^ZJ5lpLqFk`dowj$hnjbEtFRU@Ivp6;)~1n}~i3TC~tI8KrS9EGAGdHfjtC zGBwqDnrD}P!C=aS=u7$*9UV?+B+c`q@*)Pd4>FCYCi>u|$5MsOq0b9nI;qIrH7>LP zJqZJ@HNIU}1LkV(P&LrVMqV>lE&dFq3tS%!uk^&qbHTuXLDT4|sj2r54wzY33UmGOSPVM#n3b?# zV9FlCs9*Tbpx3M{#n3xED#?ZZT;O+g83ib_BuLRqo4kX;I-o+TP*GDGj}|C5(tNXBSBQ}KafY;`^WaXH%GS|B z)lFr{H{A|+czFMSfZUv%ZarpKJUAH7A{ZExl%K?nl$y*@C4j>yMmgVo8_paBqdwh%pbsj z4H4`+Tx<`9$||jb!=Syjxw*Nv_7eT^;?h#K0`&$a42;?Xm=RvZT$y6;d{(1DPu533 zpLgOUFE20Cbasc6iJZCe>pi-A^N;tNC`#pSB`IlXkIQWi=vIT*2cP=+`4REhkK7=q zfh9)e?>X|$yhpwp#`Z@9xpjmzI|P$`t1? z8Wc>{iS`~cOsaG~KGP1Y#2@NeQ5c8$|&P?s7M&DfF zc!rbDPhc=2{!czMU3~bO&zRGytyJdOm7wX4iFf5&wWooazoGgrx;)% zW2&ufZBCo^kwtJ{=N5B)o0|oUk-|DMIZAW989ZU2s`sR)qM`ZdM#09$X3}B#f|e|i z_mSjdKjES1xHw#ASW}vsqWb}D3tl-nIWfm?g@lFcQS@J)I#NVNM!vv6G)8KCaGHO2 zmOQx+Az)hLcMrR|A8AJ`AzEYAYRV*dBh%cQ-IrRAE5fdBpC2}PU{C(;7StdGk%JCX zjl!{4Zh@l!&*c#GT=tRZdz88*wXIkCz8fh$y*Hz`Dc#nh=38mnDMUSNrevhf&zfTt_Mvquc)X|A#QT*ucXeE)qd_lGt zTJ$)9^S`&av}2?F6VNEsxQ5)Hn84o2`YA%O-}H?NbBuEaP#n}@J$pmAB3Ty6ek-m7 zOdJ^VZ^HGj^_@zuaeUS-t71uL;O;-{R~piq)y7WcZlxr!g$R(jzr z$P6Au)>zZJ-XEq2O#{%tEy2!&299&V^J{C7vFpxKYgaG*YS)s4dKu!<%Q$+F_DprB`1nC$!a z?;Ra$UO$iMSqUq*OmUdTG~lDD2^5hS7IJ8fk{bX<12t=tbIGh>*KUS2_bCN6#f5#x z6@9;RJQg~3U`@c_%VNBHm`7NEoj_;V&`aWbb}`8j{jvY1CR-s#_{-uYeEYZ{6B8aD zUQtmgFJ#5QWq%J&1DqJB(ncdBv-7*C$xvCSd$P5a5>yQk3K>D9fSh!E&_ z{XOAzUQaTG|NReU=K@LUubGUizP~@^p7l)_lZVI`1gzHDa&qYZe(zEBzGaI)=qGW@ ziA-Zmc=*>22oE5>I#*aCw?(r%ySuwwo7&U?5{^7oeoz0q?W_HyG&s?_asE@ zudk_F&VQvkVgN@@(e1P*^wAk?J}~sW=lAB@@gh|7xe>Fct6v|F9?g~iwT!e*K=-}n z+sVpEc&EvGxL-Ft8{5ikAU|Gxl!%%ZC~h1p_cw;vane%2H(+C4-u7CijdlQ@2&;|3 zA^CH{{Ro;14bv$#{4CV#j1&{L-$xtC@^Jq8DBvDN`jX$NJ&i;CUR-&%Bu@<>42A{I zmk8_`_516NQ(Q(u_y>X7Q&y}0-m+<+r$%8Tk#t&1{wlIK+qfacOVV)2$Ex{T=)pPO}*RwrlR>IL46FC*``5T|qt zPrw2fA!x}ex=KK7%#q^!UZQ+JM#j2Jy?K4AWtQuCstY1-8@}L4pT%|mr zlAXh*-%Sf=gYj4XCnGamm@zAcdYQo0sy*-=2KM{&6xI zECDXNcAMP6-iZ0q`O0fyTR7;Jeu{2bmP(&Q=l&Rx^ZU%)cV%TMdKvMM>X7)>AX$^1 zfr<*;e!?I^1jeB1=tx7GH7RHnX647R_-TTDHF9SoXAi>o7Z{6Ys+wT7_{EC#!uBm~p%9H!I{1nB8G1v!_B_q`m z?M8JskK?ySc>$rJ%H~C?m-=IK>`LX~tqNvm&fADcNEpHGz@312;1Bbi(1|Jb3|^`P z_$_W~>qFUYl0mZOMUAc5-z??k{HNZjLQZMLmqorUR9lGy&nNLhQd%0)vvU8fXVD)e z6)7nx?M80ZYE_7dB|(8&Ar>~0np$oAHKhb)RC>?d&Tp0pW4fGv-5JR*&NtR|xzv6} z|M=!+U&3l?s?vtXzJi^_v`M#P=pa?0wjv{g1^JoGw^Acxef?VVX$*UJr>3TuU-jA?u8JPrpb`~fV4^`LJ1Qy!rm8KM)@wEOAu*HiD;Z@N{wU>PU*_5x z$jBDH$1$Z+m(bE%+=`PNr@3YE@qKz<+`SU(5oQ2_w#&(Z0a;S?9~~WUvlVRdpvL;g zt4J!2@$6@)1h>7##P7x5dt@xP9VE>*wp(t;CTE%AfnUG&t9N%_93KXtZYM_B9Gz_c zY4N!%J#^U7TwOj|Ki+&=QGv%I#-PETc}1D8NxqIu7asHT)u-7yrvwfSr?v@Whf}Uh zF|L_fOcDLFJ@*YgKi18X=14SR&GCwLjbI$Nb}5g8uKMn`$Y`e)vs0Qcrm|}#mB(tk zB_(79uI5~{w40*C3nOgw3d}uVt(F!O@H|mi=iy0OaIyW*{MoXw^b=Y zKjnf0lnolMANn0%vWbZWuGR!tdS0cAAkbRwVpm&;nx5fHthfLTgY(5mr6$icKT@%O zxRzUZNS*M0ElP^j=)JICTKrKpRB5{LkA~j%5u_=o{88LG74O!_?uSv58HRf^P@p`o zQYAT=@fG8BhSqM=bgizq=~&(bMG_wY>xb6&Z+l{9>+C{;ri!i4Y35-;#8LLpbD;-` z=$utkExqk_I5)r7*1{sGo0e8ht!3+KXV%ho1`=PVBfx)44%XH${W99sTpx>8YtmC$(nx>jPx!Lt=2yfk$|v zqvC$?#tNaU()20KuA0@SvrldCv8}C9<0axD1RS4}o9(w}7TPXXmI<+rFP)H?ndv68J$vz+Ys%2_musOC`fo}ip ze>BqF6B{{NXgEFbEbT(C9If+F zsrgWrRf)DejisD&?a#FVSq5!h$T=Ijbg2%avLx82!&Pa$DwCz3k3#X;ipq)@RU_xz zs#)lA%gVr!gh#n}O*+wkga27m(g{&WNJBzDFGb)YPu%s&ax1jXz@U$<`LEeF#$spE z#m8UuCr=ZsHO&X^De@ZXU)$fScOx<&w=6GrMGT?!ZFF#9p$*teDV!B>?uN35L(4I~ z63rAl&fI*}A-i|vZ&Oxga#O?tC>~43Uy7QU6-`xqi{o*4?qXW{4N`QRh*h?@iF{`z zf<)vdY*!;86zEvd%qu_E%6+E8pfQQsgS4GDHk0^6X79Uf5K#xH%+ehnvu`t;xjq1A z4C>v{Y^J+YHL89;4sDGg;CG>-IWu(tMh-syju`p!>SflXp{!-c5@~3wrV3&;-qRUV zjMRaEyP-WX!By(dN`N(eTDbT!_fwwO8ymH+HAQ7}J{?QvXJ==Zm&kstASI2L^6$UD zBt(egTTS14n0>E^4O9G7!M+Lt>D*SOrmK{JHH1fxB8uSP;6A_37#UHj)%=oj_f6dk zr?uT>+NV{S#FDQ$4G2CsDZ8@Ij)pRqq|HBJ2L3=iLAXq~`#DZ93p4Y0<&smzJ!VC#4tS3-$+mgLoU7&b+hbCJKa7Rc zBY%3`Xhx1$r9TL^2$BhTdG*jhz1i=il0j-VqQCvzdWg6eYJ44kQaq;ZZ*fhpmB=iafCX#tp7p>7ICHu zDFnkBD?;K0PHjUbf2Bmw)+{_)QHKhK<)V2(jaj(w<3J?269%^c)0T=@uTh;L1IjKJMF%w^574;{p9Hq@=Ea;<9(F9d$S{2p4rhV`@=}Ni! ziCR+$;(D-@Pr;duNos0bOcq?wOdt9Lx!t@9WeYo28ULgW8t8*~-47bVW5=P&&D0J# z!$GkG7)CL*uDAVJjVsoH<*Cx45xnkP9o3l6+>f3o9cADuydrynE&x-epf#lBux|F- zMVD$)n^$*-{qf5m7{U+tVM%E#BgOmatm|XHFIm@OE;ty(&|a^c*{38`493~`Hu*+r zW3_#z@P%7M5L7Xt49lwj>U7Oblr7d>xL7WhNRBS^@5gZQBTDfX(s8nO1l4BsN;G{v zJ+w45-uY>`8h?fG=50MDjNo)99{m)usiNEY^iBw2kELAgM(0F!bCb!k?9fnYB_%AD z!_~e-A9xg#v7-3Q%%x(DYErmx?B%C~y6;MMJ`jdc6C!S5g3s~($ob7Te6aqEOwDP3@sV_NOiV&t93x9# zZ!f@WjTiTqI#yR#(I0jq9X$TRq`3f6qNH%&p=S(Fp{w)V|AE#OR8|8`)fpiP)Fa8P zR~)P(Z9jiX9=cRevsDsaA7FDc`>BO>Ywl=$QZq0Mpn#ZbUBe8XzGGeu|1FWfeI`#$ ztK0F#&cVUsV7aS6xp0pSUC&P=M}gd_R^jc}DSS4Mg150J)YSZ=^9Cy`M%ucK9N>Di z`u$xUb`L_p|CATAT|x@+3w^cYH=2P06zU{fQrZjRw_*esgw&Np0yO%5wJlY~!#OoA zIAyK1rZjc36qVmtF)^c5OZt^P=pgE-jfX!1=lgmS2!0-8=W~QvekA$jB;1R@@;aui zCrO#$9p}2B$`jI<5SAC53L#w29*{?3Zy!EJ=E-%xzDVY&7I3yj#B6#<|SDJY53npJ;Fz)^6OANj*`mT|S_ue4%GJkfN2yYCMy#r~z4n z15wJ+`fz#KW}O?4^Pj<{igzdE%xWWPLaD5#CsmocyNMj_TLxw`HEH@i1{J0e5zWy$ zsFzld`ra3hpT)kZV4BkO2~DWD()|9^_+4xA#BdVPyXBe1WY?&sib}FRgy8w)=Vn~X ze*%Wf$F5_p+L2%%zqI?1MmB-|)}IK&(!HrZ{L8+IO3cwJ3V~*CpGJl0I5&++b=`4+ z*$(rn@7aP{J3BTv7qm{J1(uToGKuU%9fnK6&vNslns41X=op67-&IIS@g5yy`*Lq@O=5O8 zM_p)RkFkAd{Y~P2b_&A9?w)jtLF>GLVUNkMA}yZNt|%;i4~=RIA~rojNWGMwfx=?v zfPnmh!_SPWwj;Oi5mfa9D5ObB{$Bp?MPA|AOE99SzH?L{osf}iVSO&`uxnB1)TqwR zu^7N3y5WXf*2<*@fCgvlArB*tuZ}xKN;H9ilW$+5hZ1mP#G~NHm0CJpaR$1ftqTlO z7*SrTfe3fY$ulr8Fecx(Zoh-%^j+zDYqKqW$ZnP$Q{mT2$i!ceCy#4*Y$1M{*A7 zl6q~OhG1@gD~``3F}=~q?SyBoRcb%0=O=|{@c7;+-}ENP(q}$(4{ufFYm~(Fg`O=4 zcbzQ$(q0qG2JZ8WE&QY@gK(dnT}AwhqkJ_rm4r%@nT8l?_bCpyPp!?%9Hi=It!Cnd z_1XrHTeKWmlH%+lr5gHe%-82(sx(4IhY+qPBFD_N^NWiE$A-ALxR8)1wVM4c3?YY+ zETYB!0gM6J7jESBu4LDKmJ$m}g=HVZzv=CfrGG`N&|%<_jua{o!W>9R7QVvW6Cx^8 zFl-vi5LMh5C`us_a1TG|jHKw_Q0V&e3wEqHQG8de+<^U(K@v`BXFjaij@EgqB4Q=B zsH|`xk%NhcXKUr{8_6KFV)fZ^!3z2n(-fNV?1l&(S0=~yp!jHJCHmZ}<69(5-)^n3 z9L7m9$1QJ9PZ$!C)bHQFgBnEO>(&-Hp@8h))dEZ7w@QOQ$j*bY{l<52?K$%=@$;lg z@oZk(PA4A*iZF;g-vZPF5O!O>E%-a047RiyNU9eHLaQnYXx8MVxIEz6KGU2 zn@(4a`lHZqC?MM1$nrZ?8xL1E-MXun8(6Ziknr>FZ1D!kU~xNG$nsTPMJiK%o_Dv| zof`c)Qeg!SyNC#1MMI0qN?r80^`-sM?-nPI+{p?n=HW?DG#nC3W#2C87 z>$4??&m^5ldf7uz5S0H+gRWU?tO*M{dGed?y5|ED`~j8(n#!K;Nv{L%U4j~?^<%Yu zxAl@1h8_OboMbWR824XWgx^7;AAAf(-?M+P_~LSVZL!w>2=9%3-Uxl{0P0r0l!-}! zw!kvXg6}(F2~u}}q(andT2o_H2`1s%Im=;N5y6cjcm=%^*wEUamm!w@dxV>wFQ{@P zrV=h4PW1P7?BJAsRF)xI=56M^<@rhY?m84Rq6x?5i^7IXE-!{9?o#a4Xzuu4YEM=k z%J`CWR3FY{VE>G{8vyn(VxtUCr)W5KTQqnbE;}dasR4p7=0`*_uQM+Y1ex$9erDfA zwVo#~H3^>Y?o$F)qg8dpPugOkPyaN8_)MR8bZ^i}X_H=EU4h#%mo~?E#*%5bxR3c z!6_kn?;_lyA}T}7z}FZ6nBAbmLV7gg(>y1_B=!d$&5K{qPJ->t@taB$rO5|Ci9^HT zjGh%fns91NdTJla1EnbI9rvFG(l`NWq%|*#c$V9#jw> zMDqLlKFA_ke%=}6)q@lz4Uzz==oM?O_KIkiBxFwE&KYmy?d{3@ZqA+IWYUT3ZfnU7!otFFw>KA?B_Mw{ovE?9JlW>3oGbDv&i=Q!)~z(1 zyUoTGyI)*W(H~viC-|%YK>QrfZ~G^_yqrZ^Dv`Z!d_49d>)k8&+w0T#TlIJE2G>Qc ztoA{SVla>r+6|`@e-ZWt;xdyf!nP3n3$O3 zo0cCxe4W-nsd*2$T84L}p8Z~OQE9HgP+^8p^&VY5Qp+#?`N`IH`SASd)2Em(W%LFN zmaU!6!{%$O+Io5lJ#KG?b7jT#y$^uo4<&fQvA3S-Wvk%(^jkY0Z?Jv({r%|3)}a50 zgV%BI_sRD3aE`RDL4P8LEDZ$b*|St$r${hiyxwg+4?knx#s5U@=d!G<{s$fp1UVo4K>YubEZhwW^@LgnN-+cmd_ivryF-PjeO6wm`TkucG(Oq_oOw@0usmaoVV?O2J#?0GZGCC=p-r?8dmBQ|-0-jFRi} z%@9tSa7eQ%!}`BHd=Bc8AVm34EIzXrobj`!PJ@)yCgZ*ukXEMm>Uf!>6s`I^2{Cso z*~|MUu={^nD`?-09136kV*47=E$WqU0@s1m7J0qQ>po8!Ifb*N#g}z!O7fcvSTdmg z@VZ$1$4N?H!h?Typq|CBkIq_Q*zb8xdD4;t`*jCJsM53G>G&xDQr4f-oFN?=CX&9I zDgms~hyU!g(vhYI#e&(Bt3nQ1U*NMy>z?7EJlA=}w!vV=1-I~@VM`~WcwC?)vO%jJ zNDoGZ^q8Upv-2D%7sk~832)*Lg6Q{(?P_1r0%3QoU`Jo*=D)Oo!%#yN;r!2LSfDit zcNbE&pAjdzas+7!R2JpM^RcaOX55%fVDF8RjhYtt@7{sV9CPM=41qyE{H0|*j?Cf* zCf6Aat|HRUox0-dih4iGEMYCM>R0xUeO9z_>ostWwtvDS03rr@+5zhwovDpy(=L?F z9|TUO6|r>bfkM8Z#3gRGXHGE2rNr#i_25o@QSXZj!|XKZL<`4;jfN~2BR5fx@_6EGB9T5YtV~aLX2shDcHJ|S?P1LrfkvX+3p;M4AnWwJPR%CDi4n4_ zNzz7QwNNIA?YJ`hyk1Gr0Df)>X(Aa|$rDADgGd&U1eA~pfD~Urgbfa)ubQN`>o0i#z#Kz`|hbps$_l1*?()v@=`l;IFSq8g= zxTGY0?)T5=+m~hb;PNwG9xntSjUID+6XCa{cK zXCJlqWRl2WR^odHXH!9F3|FZS=hW2sH8p2r#Tw;?1FPzoU4}!t(#e^F z+1@y>VnCh%Tz-B&;ehy0GaBp*$^Sn*F)2O$7oXw~Gyf|XH6|&wbj%3G&4n(^)pXNz zrR_^&_obTv1P=mY;{FxaECNMDl;hHG-!eq%`7eSpGs#m2!ajeFG;QHnyaf zfWyMk$?14^-s9qEU9-N(``@^=?o`n#pso_&?x#>`ZLvr}xgz+=`aN^LxKr ze5R`{WfR#$^`U=HHgJ!Fd%&h`xt;I4^K> zHrcKpdGJs~*dE+rkg8I}+^XKnDCR-~JwJZY;L)4Qw3o6euGh!oYHDiE2^{z0!_(3N zG^rv7;ID(pas`SC&q@~AHrAGwFtM-z9=5(5i0ba_3=m7-7I2sE=E^Ega@lt3RBlW+ z-$+tUr`-bj769g7$|{^)nS%&K>0Ijx3)6l2_-CmC9a6?@J|#ht8p@!Z^d)HO`sQ-h zsJ|x`<7KX_uI?$t3qoAxEVM=??KD5po*zF%SfhH4Pqq+gN{R;YyTT6+WsPiZB}cMW zc1KP388BH=Z?E1diu~*(k1XeN8nBojRy23 zOY^oVl#)g=-K@C)yRk*?egn;>&;--d5F19|&7B+M$>1s6|WG*Db6KkTwxLOqczk)kX-WOyVaqy9z%REQ1fx`I~4erc<` zdZj*Bi>YW}U_jX{O@K_JupV)M-0aTRI&9-~dqX0X%3sI5AHK68rfhqrxK^6#Kr+9S zO6<725dr5kW8BR@`U+rWe%!CK|8QEG^c%2ENQb;uF z2{sm3VJe#`VIB9glW4^ILEdq>QY&rF(iHy~@lyCFE~7 z&J1&AjQun*0AjiOBodKG^c9^3GmA!rktDogzKX8YO4w5yS2s7)t5xw?L&Hua!(F^J z19#6N+=L>j6kfC4xlx+Sf`AS*kVYSGj_1Z^XB%>us~ee4f05y9J~trL*H|@I{rb7- zYACRuh&q1g1Mn+wkW<)#%NlC{q8))O7a%E0M&8;5GZ=j&WTzQ6kE$+z!8K-;zq2Dq zYxo2zT(JxRL%m5!nMaXa1WmTo(W|lZPfqB2x_6BIOyz6eC8QZ_{BNz7ly>Se=)i03 zzUB!SjitRPRnmz~%B%1ibozcj7Ncb6vco)XuPY4t=IEPG0?@*Ec)~Iq|IF0#r8bAI zf@8bZd{q{CzI(F$b>5vv+sUi>dUdX{5QU8u5hYoak!8FjRaQ&ta?>d!e^0C))G|O3 z1n!Ok`St|{c?9I(T2#wmFx);a@c$Hkdw9i2vQFdT*{Z9mo**C2G&nuY?zk@y8_PW1 zxTvW+j9FZ)s5D)(-!hWkocg9~?59?7)jB%MA_J{5zfP1!o~*Nbh=r{>ms>?L8OP zM^HSqS`j9)1i+c?s}HCzZL12b-_l%l0+i-+@bo|f8M{3Rkp!!m=RxZ;hLk$XdHjTl zazkvp_3O*ocw_FzkohNe0ij5z6|I$dJ#w}~9!p{`va0|RMo7r-TU6SFvCi6zG>PsPAXW5QtrN#WiI!e$Y;y<$no5e;l_ zjsZ(okzYtrsll91x2G!kZ79>>Llw&`6s)ZE`N_ajO1md(XXQxA76m48hh6|D9nN-UQL!Oj#Q`e zzDb`=msNXLk))_}KBl+nsp{E2RAraWVbVT3Cs#7I{mO3@eAVC?)D8#MvR zMJ?MP)xY0OjaoqGeo=9aCZpAmK3y8L+wNg}Yx(S*O4T`Q^D-kpWL0fu7x=fxP=ukz zdI0HA+IRJ`r_Q0e(Tcq6YWh#j=4O3hKQTc5hICF8^>-NLPp#+%5NR$WjEBW6=6C7< zE5mS2K7k{xw^jVhR(NG=6^>fNt!$}%2s!?dZ|8q+w_ z(9*E@_*aM+S^+-6pFYUOEOvKLOs#|((L~3?mDQi$4(shU-{sTNPW2#tg-S+6i-*Tc zOZzs$=-HuZnq?DSE^`eZUo0BY)aihLpQxx|f9f;WL-Y3zBwfQGR$Y;0PYd66P#f$^OJdEZ$d-5 z!)Rmw7SC(Lk|`&GcRk_pnt522>T?Mz>Yx9U}19d1M5qcr~xBF=|a~h{s%oY zTlws!)aCCwkzDZ#eA7RFcF#2UfeQuFosppL$IoUt_gdX7ksYUEDSD0!EJ>yl@Hrp6AkRF; zo=rqD)PI!y6FFJYZf8dO&_yquKPaHJcpmi*E06<;_C6$7z#=DfT&)&!$3=gR|CB+blu6_NFCxo^7?Vpr(6qKPe)GRKNb8uI)$&hJ(n~oc=syD z9QDbQqtnyVLjBI5yo`q`*IT(7M&m{Z#vI0mcJFEIAjwfLUxk(uJ>vSUVON!FB1ZAZE5!6fonQ+Zp4AmC&c2y1kc1HNElh&(_wA z6^D6ga2I7ddC>%5D0AUh`N0wm*Wu77wT2MYnI~?16B%t3Ut#Vs^Xz__OY52?bk41+ z%2;3$dL{`tbVSVnC!~-wrn3S3Qe`FQ-%ssPN4Fy>-X?HZT9})=f&A296;%G9%^lVA z?)8@QO(2;X)nVAi-zMFr+%5v!idtUY%Mm$txfVl*?#InAV1p^b^JP(kd*4HK=9Op} z20A(^MxcVCA~il4?L>)sb6JM#PgCImC(8S$0qE7TzU7RutYN)u%xk)fqjn!ifr>)6&Kf6$;NjR7RyJP*WM93mVJj zmGbWvDXTj*!o^e8XEVXIs_QQEmRCj*QPFO26vE8T&ZeZK?3H3+DZjdMO>n$A`&L`a zRrW5M%59&y?DWY2wx&*gVI%<&RRwMlBP6swF13%=1L1X-*K5Ku@9Uv;K3eQASOuE> zDJU6HF8?vB`sjsLsM0oY@~o-k`^qxIWLP82wJ`XF$V22c#;Fc-4Dsc3aIWMl1vYr&ozHTJ0mmV1~QV9i_phzuGUM~A}mE> z(}|ys8q~nDLph5r zqLu8(X$om^l}F|D^|vOz?dt*t7~4g)5QtC`+2%X%DTt)&~;|5Np{kEq4 z=n*_5K+kUXmw_ITQl^lALV5Oc_lDl%%mVy^A`q_H45kSI7~Ia*w!v-_r|g}+y!(#M zpGD~g{{E|K!jJ{ycDwVmYlFSjdX@xX`_`FU;j)Z!@uwL)xRpglTy-VvZK3dw z%-82;#{jPmkR3mV-4^$jc!3(~t9Oj?*C#^vrgJ`6Xd&NgsT~K7<~6>=tV;zR9*|~u zL+p(*M@AX9T1#F*r`p7DklRY1&8_1D54f$VrDk>UFq*MusFsRmSF3HRcW*CePf1*F zTIT0de~21}J%8=MXrlIO@^D7($U$k8KvS!FKjTufVXtyuhZwDVZ+_eYWMj{-dSn zjQ2{TQ~olD!gT&jO&K%QCEJLI<;2Q>q%x^y*bP*VJ$@GTiV&)Hyu)fe9K)&~?E(6-F6qNju3oJn%ZxNDn}+9Vt&hT{b>I z;fL#io!M@DXFp73007#JDQIuoIkTy7l`Bu)oPYFNY*C{;2`M6UPs z@>|2ysz!ACL8qj7*WKqqW0?h%p>25u%3ig7F_Lkk60lAGjgV0kO^|DwpjyE}C z!>Rq{B;o7X`a$&Q%)C;;0F>&^vorxem^Kp$x!pMD%*MSL$rDp{(^8-blajHS#QMMk zPpno*aiOE5^=bZePYI`t<%>BCN;jg~c?o|QRF+UZCFLQk_}vJJdaDt7vOazut}Y7G z>l{-AhqceHN53`NA2+j5&< z^6k{*RdC$!aQ)_mduAqytCl~z<{4kH?>v6|7(MWH zVDljbfyeNm73c~OQ37}gl2?8Ac>Qf-p`$-`%V_~w>Uw|80fta;U(Wr1IH1n{{8Om<*v4q9j)Rac3xh0 zfKwOfH1jvUqT{PK9v0S^wqISP1GHn!4+~w*9-m!Ak5*!3aB%1VkaPjCDiU6a_xwGr z4brn6qc?gvoaWn8wM0DXiScan-*l;24%>r=-^OrisHrKWBRY3k&}<9m%9u+_6HHH^ z)_oF^b0?UfOP8&!k;*{H@iUvP%aX|oioo{ZXva-`=tauU&u=&Eo?zpoAsGLKJpPhJ zdY;c2X+NaG=Wk{2CoSy@binQ|jE3wl5$(Q&0X5z+lip)z8_T3*8*aH$M-%I#w+U z4TVUm{aRh>ZU;OJ8?UThKB{L7{#VyN3CP}Gwah2%R#tELwtfLpkY(fOYafsf(raC~ zyfrc=jKI!UN?0v}7%03+EQ#aXKWAQD$u4&PUkOfVX{#*@o60g=+Ys;sec&mT9$!4W z)?a=5!b`;eh>63p#dSg0QjVH-ga7N-xCD0ho2v@{cvc|><*&hR`A{N!QPMBr8gkm+ zlIm_O_cnLHOEg9RHC3-7(#{Yq6-rs+DvxFtKZj2HT?>~bF}?F@yKR%D&HD9)wj}@u zuQOayugb(C34Hx(yE*nvK~<$97Q0_tEuAuWn~!DUh-FL(TrQtX>4s3D#|4yXg;cPb z;Q=m=6==`Y41ckjXhnnaec0w4?9J_!;yWeV)hnkKRUH(=RSgXde}Cr&N2`me%FhhV zwjTvX>ngb#Yg@w#hci>%6=uqXdz6|C_4^VgxANc)z!C{YX!8p6OF|7;9TZr_zc7o+H}b-BsY_}hQNvmcJo*4 z7Mg+@{X}Y@t&(`i79CU|FDyST-P}oY@0B`(zQy)Rxv%wa*OJq|1{XSLg0v_W{p%c` zlzkj&A06f5;EuB-x+9iSk-JgJ<5KOw-pL}*? zOp~kU_j!Xq{w9&pi2oz*KQGvcB&o%3p_5#s_v$d?R(tZPCm=oCd*UZ$8TD2kG*=RK zViI2`b&mf0J{3yPr%+7_`p?PY>1A67nA-_d=L^Bg5tG&CR4K~pKl(pDwo}qBY`&6= zb`*~cuk4|m%U%6G9CRj5OxnHo--6P^n%&(DCR*Rd3LEpgOwbGXmUYX2>50DY>G=T9 zF;`_CxVjMAQzX11(T~k9n|)RSMY%O%V8 z5ptH|lzCUc4yFOOhnM$2O|8Lkqsh(G=;J_&vTd|}O1x*-d zfD;OYk75!k?(dSi7h)l*>0rJU4%u1Jh%kX2A<7o1j-NZ1%TW%MYQc4*`O|(?<{FO> zb{zry-IusHS^iQG_-m;D2UG<%Qd)WW`dn#(H<+OPrsy5hAs~8Wt^;%u;EyK!W`%?+ zHN9~{-AiYsZ{;|y%D4vx86(S2%F0}-3AV9#aE3~n>x|2B>;nMj5cD%zjxB9h*CP8ikz zWDZgt#5|p^nIlb5>sG&6W&SoPS=?CrtzY3VulG@*>e}YJaDos=&--a%+kX>GEaXr zbosaYt2^Th_zGA|yJ zjS7-UA{DmHhv@~x7-JNCVZ$D*&ecf6k1X(8CVlm>1-B=M8NJ>kV+12orz?*<>Mm7W zH7Dmr5t|(Z6Z+h4NB>)A%c{|CeD z&nXqo-73_W@5wzhSALt0yeVN}VgI#8cIo}$l;BBw(raE7#A9A8hTB_Q2~~Akf=#gf z?;cY6=vD$N?^Pd1t)B-zsQ*{@3)CNW@6}~R&*urS<<(s3!O`eFQfu4earM2Hau;zq zlO&2+s|^&dbMH6h4!_+L`oBA2titVUzTf90N}+_*zizE_;Q6@p*&NsdH`YL)3YA9g zP_wHS<2a??mBjZ_)mG<#;q_3BRn5WlM_SMloC?Zt-o|W&m4rnS*_!1b{)!CUgMh#kML9qU-F{jhDjePs3VyGYM<<|0xSkUAI znxc})4{AaGfW$vu%t}9{{I%xnnp=xo+kScw?U<6weTD<#TQ)(vbWDf4_L|n}ofSL0 zx7!$It8uLQA5Ly`tTSP2qaLxY6n&bft+%(PF*K$slS@4$=4qEHKMTd4uQ~MZT_rit zzw5hE_ni_wFGB*c`xgs9TMFIg6WJF@d@%gyPjGo`0R(hB0md^H;7k#m6prY=hpt}m zk?mqiZ0t*jq@to?TU(otisiNLU{PBi{GzZ$F-}u9rpK1>O+Q~2wcbn6jq`$*Rk~Qv zT!>D1JHu5Cdc}z&fF5zAKKNm>7}iIv^5oCtWJ6NLy?ZvWgp=i+wTvPP2EpTC-aGa3(F zi;VfKG=BMMik9`wHulUBJ_$tVcA?8mDE>e+k!1rkv#f;Lx&Z=a`RNt!OZWm4 zyRbZesN?a)Ji)T^o>J_CriUybJ+!s&{i<4$VuADjH1^eTRc&3nh=Ph>5lSN|Y(h66 z9g@-=8w8XNN$EyJy4fI7A`KgmjdY51h_rNfNjKcNK|SZa-+RB`J%1dIN7h<1#++k} z=NX}12*Em!|H=LiZMl|}?N+s$NpcMQf`8tt)B(cA7TX_fE31~F`;Fa|B;MG+Ztx}5S<_WvS?nJ(@o-0-D?K3qONzZ^7V*q-;jgf(AH55dEIyy6F zECORU?g`VEB6A~)v8g!AMtp)q#u^-a=Fgc6?R7p%z^v#d29{3UcNS(@%?f)9U;%>^ zN{1D7jmhrT6$;i!QK#T-dXSLOPE=x{^$8YwAEvc1MYH9ot9Pt zdwC@GHlF;4qE+2sWyG&B zQR0IAHUl~G`3V)Fj>651imoh>z9xy4l!98m)fUNvga3;T*6x;8>S^puIy)J~lKCOE zOJy4bLXI?NXTxwW(w#YejBgHqeCfq7{?Vp-SE}dpbgPtMjew%I9^8P&Y}9f)(ac2{ zbuHH3_Cp>if>IX;Sj4g%mqW2WaHf{M5^cJa$w%6T1^*8|7hk)))Qty~OHdW7CA+s) z%wZv-y6-}=nvc*oz$pBOo|O#Nf!*0V4j7AMbA61G@cZcZILM|3)?HFp7l_>z@MK|Y zNBgw9Y#R?(?{eQ1TwT;w)z#ap+LEPXSm}VEI9W?9!gEfRWHuC)&;ADKv_)x{j!J3X zO7g%84EP=|z_P!TGdWxGbPGLpSRTX^#6-T1!m5f)IO~xMa8b?E3Y4!lN~=pVp@Mw5 zy_*QXLzV5)iIw2iMT|#P_+&+mYH#c*N+*$m!az~upOZ3ou7%G&65V^UNIYn#3-Hec zPP8I5I^^b39~Zz%lz%2+@Oij9Z%k#icbXf&Ir;8$^31|wq+;EEtkn9_mKg=0hC#mj z6O-;zH5Q)TM$K8pN%Yw9x%Y7;#yyQf2LpnC9Y@i#&0qUZ+fYN>&T`tKg_@<3ngD;( zPM_v=>^&-oa%v4GN?&?DuySn{YIvBQEB46k2*e)`?E0P`DRbb)`OvUNj+ec5!LcmG zoy>6j-g>yofQq%0dKvf?fe;yTyN&5w+5#xk}7d?igP!_09Wn3?#Y!{a+SlCZLdK%jN$d)ZLe(2Hv% zCOjV&`@{v}U)GlNf13WdYZ_|AwTCYtz*R~-q);@qST@qwm<^&7K|T(@+lTDQ1lTeM zy?(=hS{kB$=O|k3Ov!5zt$_~`eAu!)II4=@@>6GUh#TLFBOc$Az(}wa6}OG}C-j z5Q|GtWaF&jO2Dt+;*-r$x`;ORxeTPrRTVukh#)?ZxzAQ3W>I)Z+lShekUk zqmEl&se`l-oa)BUt7(~4b=YO?nq_H~h^T5uLen{sGZ}}`hAT@a`(Gk05j0B)rU~y* zGK8kax%S1gj^6x~;QSha7F5-Qd?r=de2$)znRa*BgQ(M)Q((c$3HH(=mqtn9W-rJh z4a!%Zf1-)HFDI@n<_+U>Ak-haug9!52!q2{wba{*LPP_GDiC!#r6K=!(zX~pX=0)7 zy=1JQf$MBLLI$-pANSHhO_Sa1{goDp8#rTXKTzA;S|-Z#%Rt^7Wzc?Q!rUkin!QST z6AOzHcKsZJ1VOSOS$6^%#17x|lB~8dZ9HTcH@txoo#&5%M^!ZAAF%GN*uRn<3BM>? zhnisz88@@o&(0Z+FTVM`FPswN?pts~57<(i4S4gCg|hkR`$UN{5*X?0%cnC`en{bx z&(Z?5YfyV7xGv+f15dpkpt&#|Z4QFt-pxZ6I5Vq;<|GZHGxxCPjwnWI6i*^N9#A6M z=6RK_o;GUfGkAG_`vY+VP>D;`L>>Mgm@mBQR$-Qu*P53AjDgZ3 zl{@bDs_aQgcX4X0JsNJoegCmjP2Vq-9UB0c8z@CAr7UEA6dr#K;e9PCJ!A?P@AkbV z`d*#PfzSzr?$}||N0@IM4kN1}PQYAUiS1OVR`Yn7FPqQG+cG(@s_9v(Sr+Uw zG=E-*$e&5zO@f-Jyx++LwQy`nQb|9qKy(Y<-z+&jJq;+>8!0)=9a&l5Wfhn7+=80^ z5S%v{8KhjueR45IN~NwwHK2HOMy$d}M6Hu676sShfN5$f zw^vOW{!CX__pQ)_*G`@xrS9<$KzM}d4^I_=BkTLwkFzqJm zEj&)A`=3RR-vwAkiAH||#oZQsvQS%PyAA<`cc`eS=;u=FMCw^>e^1> zkfGlcW*6HLD-s8pL|Gk5_~)9cR2rNa5m|Kt4(qZXuda=!vTRjt-pNrAVx?PTLC1Pl z^>8qecW7lK6Hf#K_yw+MA3q8*$3!mlcs*ffhliAI#7{0TH~1~1;uhu~DeEa)D!VBA z2F%ys<0(6yk)ZU{0y%X2Sp!;X2x~UiPZPhv7v5zKav+(~%j-*uo>w)Lg8C87j##X%dpA13Dm^N~w zao(fRkTAm#ECUl(^y=Rr8F(an88Y>93o;8qWPSGbrEkO9I(f{r`{Yc$uJ!;}9}~a9 znoGcM)cBKd=O#L+{Dm-LI*XBGIIwAh?k9RGDJtWJq8Tkifme~0i{{l21eRM`W!C2y z6$V#VYQdpDDLg7O>*AhjGmuC4AQkL4#{bb`e>{w4$qgeNB%%D~KCrFMON{{lI^g6D z>ctLjK2C|C4jIKCT7z)nQ@+T~;hR&;;P`uZcvqA_){C(`$bJF|M5VKkWOC_btHYE| z<-2%dN}w{>KX3ANrJ1}Z(C|aRtmFv%b8yf#{_!Kldn}OA1_)FXMO2Hg^Ab}h_-C=& zLp-c2=!X!3z?c7igPN--QMBNst?n5)@Rc?;Hn!C$!)uj6whs{=$k+l&NO@LtyKFu^ zpgiI>`FWLue+^rev*nX4-os1(9xy7I3H<`LyvTAo=ftoVs8B5R+elOj6BwP4D%uG`DfA-?uWbx_vZ4_wzf;sHtU&sS=hLcWl8G`Du$G6MA!|B)Kc*Uv{B{lf7< z@)N+({~7%RNx<+c;)m{6r~wmPbm{Nfw10Grek~wC6*nX_E~Q)|fhS9sf#}~OO`dbK z-g`ia`v)0MnHzg7QNEn_tb*lzzN~yHte%h7h1ss>Y3eyYL6oZ~s*` zQJn<58^d~>BtDu>8c@J7#i~-CRY8yRM1BKDt-F~<)al@w-k-CD9SN)jI=V6i^Ncb^ z-}D7N;H7H*NUix{TJMwMe_m?iV`k!j6~`7MJpDkgQIrBPvk*Qo)7`#c$s z^>&E+0*ML7oXQ4_WCiErh(DG*@6noBNw4xgK;JItQ_QbS+KehTA&^Wl z+Tpp|?4AFY#l05)VUo;{5AUj@FvEdIK-Tn?4h?#OK$^QCB^2`TpHv zz+aN(-$zAJ!zDqrw7<8&_IaJ3cdt_}TibGcj;OZdDMGBTxjlXQRJVW=s3TAc?o#OA z8|qNw8(?;e+*S~vY+5W=axxhR9-N(D{@6R2ZKs;IaZ{n~(0t_1pI9&ub%sv%_fsHc zYvJSRu;p6o>rbET)pnnCRwpGapbDr-jvil;aO!)P&Dfj%Pbstq6XAc(bNdT}G>7#) zNy*baJObd-g5alOkgX1aIrC(1&e)ZjlC}lZ40pP_yPtEZ+6-{Y|9E)Tm;7{f{S0>t z3W`ZJ7~F-BgY*(@Wc^@kYXr(+G;~+!iuJjXp$bk{g4EFxLBQ2GYWfD?7REnB9GzWLKmN2qigz0J@>!GYL2JyT!9wtA(IoABK%hEgF^N`_UgsheB*gTCPh$C~I*cj;sKJo37*IYT@t zjX$Qa%{>f>b|UP^vT7#kkypgqK62+wG`aa5+Z&yA;fTM+*QgWZ^cD?h9F>f@#ST7r zkP;vBlwY?wjK3+=lG9-=Zm`h%^5qIGj}J}Uq(t0nSsCbZ@y%figivAjM; zGf|&}>dgAY*Q$t!XllCr`<%ZD6iX5TTh$Le8Flb?7+*DujlMp7Age$7v!M4TDJY$$ zzL_~cG4b;H^}u+%^w;yd(YVxUYflR_F%SGIE19Af-=Ld&W9}q02OvbK+o4Qm!m7`B zlreAu5NNQJ4=t^89pSh57tVeNpT<4O{X#ljRk@TP;IWDflx~))*aDB$e|~vVeQYy1 z+s3sww!Al>!;^s5XkTP+G!&g2W%cvKco?TZTL8)Q2+ZOV5gzOkQfwy--~VW>LaNT@ zaprR))#@|;mNLZ32;tE}%AS#tcrYRB&x89TX;Qv62{3CdRn9_S6`-Evh84x&SFmQt zk(*WNq*{)P3kf&D)~Oc9Ys4)q%HJ|hJXfW5-d*X>8Th8-Q8narX|9u{%m}Q6^0134 z2|W2Zk`ht?YLmS{+e3ueKjUG0h(y;9))ZC!o^)nk_clD*a;o|5j!n>P8~fOpj7Eut z`$>sco=&btRr|m|MyX@y7W(tb%%fl53XrJ?F2)tUd4q>Bh~|nh$7u{HulaVTLW@!E zW-P!_T4C)_6QXuqE2h~5E_-Y3oU!#gj;9V>2-Cv#33<%t7PdJKB($TbBr_HbC-XAHm%wtJSxk}si zRy%*8H!ERQ&4ET=NPBHK!}iM%RBG+`LFeXTt|muJMCHkDppQ=liTNT9FQbNTTXZLx z>kl2n)*AjZS4@=P09!ga@&SbA@yojA=H^9cfz2!%A+5j>V=wgNI}Zz24YvNCb<_7w z#80=j?zG4^Z_3a1^;+cmL&*4yyHmRc@>{zuM>65w;+tXlR%!4ZCDj71Ns)c!iZ*n& zoQipkhc;8H3Jp)14!BY``56zt^Jvo2Fx|;GSj_lRpyx~RuQj?$%pq2}-7Oej1VNhSAFC)^mXi|x0C>d&t4FXtyf z{Sx`&R#!)7woPO}2|I)R?JYC20|}RVmY?lTy-&XDw90E$*fU-Kx*5o5Pu}oq&#NW+ zI=y`)ZLs?p-*U+~)Idm^89ao7x-x8XZ3tGpFBR!H{}TtQ44Y^&XA-p{E2wblc= z6SYkQOwJh|XJpWmnaE4flU^mSw8pLv>}Jtws?S~9fX7EFQ2q6wcICJ|pk9gv=XifQ zER_EPr)jU!ceQ277A>wqO5FZ~km4`kQ^jNUkspZ0(q(R-#1%N4LUh8ac?|*h>m26J zO%XKftzWPYprmB{X}z37+3>wv0-3GsGZp*Mvu$*H%X^uOF!fTiv(x%JREIh>4C1$> zi)CMpkvMhokAfs)0sHjk*Y6Z24FOYUL zF)Z`@2SxDD?o7>Hrdsr6k-of|)i~5NPFo$5{Sc*#>B>G+w_UGt*Vf(vqAbAry682G zE1ZamiI{a+4=jK%IN0DkBAoTc3gk@p2bivxw1<8u-SBE5+fjNf@RkJ<4*#VBE)!pH z3c=xo?WEVfr(<{JH8rqvz>{-)ffR3PEr}GuFS`6GB?Wc9!Iez`u|+P)Z1@C9XnP&e z%H^*ir>@_U-hBug+;0vHknQ|?)CY4t4PRJ&ID3(J>;P%-883mDUVSK583;~2sB@*d zpkIRiP7XIULT+8gFsR00s=I=U>Qj)wU%|hT>NoE+P)?iQ`HE@9OMos46V~K(m4j>**GOgQ~O)Mom zPj)Ez=^!(BvudzhUg{xVTzdY9!4Ik*_SV*vEYk=EU!(yW6DLrD^#2$99RrzP@Pg z?97Oav^SP7z5(tc6-#N_o)9@*T;g46AnqYuf!~+I&^m9Kq*L8#8z@>ZJIF)M#s|EY z+*Z-&22tbr15(qVzF2pQ1W-G}K8PPJ*&H@A=4?boEsJI@m6UzVt)JYS>I&HJIK@rL z8PZ#LafaV@a~$l(&3ar?SDe~N5{%tRM#R{mY$KGmY&9!>r#M}=3N5u~F%`y@3k-yd z)w73Ch>sZ-4!(F~Tr{*JMOm}NA=_1|)*|@K(e$C_6?#kz$b9~152o3JMCkt-4*`|CNovqX5~Aw&rH}Eam8FJ3@55Y%c2_$!bPi4)d4o zxqfV6Y>{lyY_V+dY~<;G?)K5CYF##>9p@?_40^Uj8cf13blJtZAkyVZQ!AhAHSd^E zn9!Oqnm|oBP57n%Tp$$Csi%>07$Q!3Rf->u8DSXFD5Ug^2Vlq$Tj)og zOD9(@l)0b-`r&n;LIav?fZ)>wzdX`GE64pIH?jLlUcaG(1eV+^p#Np~{v7F%d%(B| z{-x3D3v^a-91oFGhFC#PORAR{PuhzgyN?&E&D~4jk;DJm;gB(s+P-6+_=)F|i7zQR zICmCd2<@*D!HHq+hUVB3gstU#_Q45qvw}{8KNg+r+D?l{7k{=E`R`nIxXO}lJe{u@y>CVRmj4JR7QBayP9MGo8A1C=^0 zTW6;H<;iV7I?j$c*f0NmdROki);xs{As3@HPinhTXs3K*m-)59n@^_`qmDDlW6k2L{?CY9*wREv#N62YE?KU2aNRLy@O zMW@v77UVKAK`UXh7nH_hz!fdlsJ z?{7dv8=}pEvq-Nh5nFAIO28__TbLsEZe~3B`<+G(7HN3nzTv)aH^UX{$byZrdwj(_ zv5F2Pu)Ig+&FQftWH7g;NPCMaQi1tZ6iliJa~04l+A-vKLvig*X#wZ4H6xgsGJ(g5 zjpE+WNM-P#nukmTg#|+@mD4K+ZlsX)j&F1Ir`QEL5d*f&AX@MWbTqOk2Q<%AFHl(( z`~g)j*5RV31gOROpa1v#kAe;7GUwE^3rdfJ-!Ao{g5Vwa2H9_gI5kx#O>roQf*Ox# zo;>uA=CU+zaVEUZR35vdq)tKWL)G)l%rnN6l{WoVx*x#4?w3W~e`|!_5ejNh zqF$E-R?^?jnY!;5Z?OiG)4Z|B)DW$k{uF^rG#{$cw7gcCqB6pQPf!6uQLv^L;SfQ@ z|G-0ONIrzI5%vSDE}2|Kx%^2Dgw zMRn+u)g*M0hx2)5B7YLGX>WcHnWt64S0U`~WI1*Y&>{nh2_yR|T}}Tg4y-tNYpb7! z@A}lPKik>MBU;}!Z9xX`xmsZtSJm~22=aqpSR<$HKi7>q_=;&M)ky82Qcsm(@y~(> z*=a>i70+KAD)vq)X#m?*<*;T2V{ufQzd&191N9Q`edg`L2%QI8q*g#5cR7v1Auixk z*o$Y#d#Mh@3@&dCC+dZ^K)DjI3Knyc3L6~X(j|4qNqGrn9$Yg6SGnA#v-B+MM8&o_ zZ6v*bK+WgRVL_Lgu{?=?3fQIDZhvcwfpXpv$>OZyfUWkh6gY)38x(dKv&D7nV}Vzy z1e*vKZ*NvTP$G=JR%dbS^vGOm*;sB6FCEOWP|S$fSJQ3JKq9w>UaN z-)nX7z^70$>YxJ(CMKDT9>U;8kfUXD4GaU`)~92?oQ^l)oebGkWMK+J3bsLBN4cjt zVRl!e>J3r8*WP+;kBDoqx z%sSt#*9lZE2I7Ng{;o&~A!q!oeH}^^tbZ32*X0#erQY0fU^A8H9kW-AymnW3sN~>(_4}XK-n{M|We&zrTb>Lz_UoXz5!B>H79&_PyIbb}H8I zwms(u&L!~hfTi8q_RY6X*cY>AHQ~&z8;ERWHqA*WC&4Q{-J(-+WT1m8hz2 z26K?Vzl5}OdwV`u}-c2imU%k9WTc4kn%{#ZXGO>_5ev~qtTdFx7 za++)3-IxXi$@eNpzuAhL6$U$PjjfFyC5eZoH$wr6!pLeMy*jYorQ<$G-IdWv#cEVN zS^2X#$t=NMnJ#VVAh$&Oc&n2XgaEwi&GdQ|XmB{`yI!cJDJkigqdI1~1Eph{ZKcQB zvp|f>Ic(F*e)zeDnz+N*Ae7$3|KWEzfwW*!o+~hv3+iP`4^gGgZTtBm7Sy$KSop!+ zww+&N5uT#B?1p{ymUf&6NIG4XpEP!YQLtDB8kBz&G~)y5#7-&JDJMx^_h0+w=ZB77 z8txi;l>(rc{*>3l!%%$)W6$Pz#rm$D_N$8Nk`!)wmCjGz(YTk3dw}av$b9?G<04Qx zzrwzOYd}&>zoClQY_EsZEg+J%xWd)R<;7o*F>*NuMBkz$aihHzz%e!?BZWpBaE5lM zPUAaJ`(EN2GU&LdeQz_{sLIvq^thxyxvpz74U<(Zx}-`@C?jxvc<&DI-3byRW>@q2 z!61btnKA64O0+X+Te`!fHKcw1DQ)KV83sb{CQW*@AzLKxA;_t*;G(0&5dMY+TINEu zki*(UzUv@v-lXf3NenaT6N?})AYj^jB+|i**azP96LXE3`Sq|xm-U^(L<4#|TZ_HY z{;tiCcO>^>Vp7f)7Ro@@2NS~(l}GMb(MXpr4%l-X!kkt+r=EYo@s^PI7H@naA7mS8+2*)TD^{%b^ub@PUs@j@x_eXu?fv2ScnJ{aIY z7ns!_onq=Y*t_>xzKT^@T~H!nFG!hf8@`P4NM)&5MOBB2&3zDPz;+NUih*x$!vQv7 zd0-*xxR2-IQFFMnY_~cz=-f7cur*%2(Rkwmkm5J`9%lz~BHZtNTf11Y@z0aEgq5>O z+_uJ4ZNpHR9EsndhjwFG2WIl=6&nX$S_arVjmA%T082i z-C8TwOq)7~#)|Exc7t<&p##lHe~W`T{h zbh=i-LiMmjGojQ?50Z~2PW4SnpT-p*39em1{FhE)lN*_Ed>&;+9sWT8xq*ZlPytZr zsTYA#+2~UJDzT;$#y+!c@h5vhTU)k^hZI~VbtBX!s#|)(ufMUPc_OeI@u{Z}wfAT$ z0frO%Y-eAwg{~+VKHqn%_+;;?TVL_}?@yxrn_Wa+iSc<$k%9&Alx zHB#v~TqEK0O7^3OuRo|XH;da<#0*kpfL}b`;Wd~9S-ukAokbXStxmyMygDtD^dq)T zuKdGKpFaK7ZbZQ|x4{9(o|=)&9-oK`k<;Q$=y)%3`z8z8$+BCTBG6(K$h-IMWvJ#9 zY2>!(Q~IK`FaB}C(MJ+?_uuX;^v+xJA{5bby54!GP)aXO`?})VMU6M6gC&H!F^PJjv-1;`ZUKupVGta+7i2V*|aO73g zMBldP4{b;wkWV{P#rS6Bkqea}1p%ez!iQ(!ezVIO+eNNwgEq3F(lmz*(1h^t_ ze0oMkY8TWnK_K|2F5_O>jQrJ&0Nca*cYK99L>{kXM8?whBVkyd7^X!ew7j2O>RvIX)g+cV@?GD4juP=U>7A?n! zfYTHI$vQs*cjAh5oDWhoOjrK1%_&x3x?h6&n$jIu_#$ZKG$^hw7k=W?!vKtp(jK*$ zp9Ysiq!Onjm{{1o&d0_A~bXaa+Gh zw)8%hSE-kQ92`oFeDP8C84gcmInmigAH1g@8g>HuQ2{$p$+f|lZE43jSd7Xy!n8;O zYDcMz-wJz4Q-afRGlgL!WZM;G5;j*;xV&At_Z}saiBph+g9F+~iJO!(PtA%nT6$yU zRZ>}wgf@ZO%KqO!GaV%wLPaCqb}8*rc0hcoehZJwbYvD*2^F6X$}%-Zy%!A*|4)}< zWa&Bg>wbx`f)kc=Bi&-68B6r^LCR<)K%CYy_GLhiJn-CvEXq6WzbrdX!T@)uSMJTl z#6!8KsCFc17GkVcx{BUS4QdD{acPaDy6&fNG*^GJaTEElWCxd< z1{E%Je7M5j?!AD=sb=g$h9RXKRVF%Q_m@S|=$D$RQ_oZpImm=Ot)un60EzmB4u^tT z`?l!tf^5K!?kx4e&xZ024rx{iN<{_d(&I$%E}g*$3TAOmIPUn$ZeI| z?|$V2F$?|eWwx$4J05fgMBrEKMUTBla3)3j&&=QhZk5NLu}>6M<~}qqAg)Sj8j(~p zjfn*+I`jZGN7C&J70mi1op5yjR;ohv62Iw5onJ0QZ?BP#T;@B}{9t#_oa@R{W#t+3 zb^@h?<(SB3tXifiNT<0Tj3F#lhR3jkzjuysJ6aDPZZmnC3Mw z(2g_GXZ9Gre>x2SZU7jIiM`X#=ZKXasYIV>0Y_(T4-RbpUSRSAi-_LN+dM@KM{@MV z@+Sld7xEMs`H>|xTi>M|M!J58J}syidjH;O3Ie!REA1B*5dVM=JxGH>p7mE;F805` z=Rxhb6rcfDM@6tGhGvd2HPz}HbQuDkezmr?R!~p?p*f&cE_cFB(4I~e?H7Cs=joaC zth0QB*vrX08mY0>!9q>DgQ7u6rq6xKpn5gv^KTEt1?+qYP|caWdVb|ReELq< z6$3Ot1RCdc_~dP!uga*_GPP>gK+hBami+#^iQ-N88vc11_W_-Fq7m9G~4d+&F$ zWY_0S>^(lerWm@_`~q&BKjj&)iNEv4@9mG!>2#)mgBM;RE4@Bs_pMWC;m49EnG%Vx z%I=Lx%D|LsAT#9p_3NN53>YZKBt*kpLqkJX_Y=uUQ)6SJBlQ&UgROfA8kNaYp=pw7 zx@pcA-?C^`v*p$@G)yNs$x+T02^9fYu0D;my}ItsQwF7MWd_ykdrGLqoJdD$Q8G>| z!A9j^vB<@6ls43-aU1;5zT~Z(uAHTeP-aO-t!J&wfuy^8bx=A`pYK$>#UpTI7?DU0 z{y}-Su+}IBcmRB#^LZbM0chaGJiTwCJd*U{~4JZ+&S9@GDw& z$LFpM3=mxgfW?;FN|gSs@aTY2(oGfIx~p|K)B?j_bly%aZ-s_|D%B$G zT~7rLe5fBgUfq~qc>FThypPxbs`g-gl^v8&;Z2u9uR;J`8(B%Fbb!6j>=xIe-`d&9 z!pNA)fetQ*7rrM-Y5`d!+SPbonN$A_Mnio*?Xh_?0ZO0a+gVBdPZSL`&+b$Q7boF) zBW9f;Z;n#P=97j%mTaBa?7pdU4SdWZ0D02(C^jdg?*0hzurCH=Y4=%(+J$;PzQrTn z`Fwm%;`vuxW=wx}+W*AR4(U+4QSo}GWa((BQKk-`_krT+W9rGodAxsaI{=P>xm!2@ zE6s)t*w$A*ODpG_*(Y%y*N?Hl^EYu#3f$Wx5NJBx_ml+TeBn~a`R+Q0?_(r z+dWyJ%zV7SSuXZ4P!;pV5paznQ?2TFB@B${cMrqiw+PhpuMh@{In#rc@I*vCfUs2W z&j2cT=tRwWBeCrD_~w?`GGM&>)UGD+>;>C}Y5)IVWuRQ#7l}wQO0k-=L<3l3z*f;< zW13WjQM+T6uDoMbSXgnZA z(&zme=ATgh2o!z-w;(HP&x=Ptq(E*vntmEK%%rdNXnzC8{;bG$G4 zg_5zEbQ>>I@aaDzcZ#`I|8Hz7i8K7A(?RWJEhwuR(3;yDJpuO?=K7HPxp zIo4N!W#+VP9KeWs7upI{+D_A{5%)MSh!jcU4{eV>cn6>u_dGjpHro*;ISk2In!~;I z$!Dr7dAHA1(??2!H2YPJ`OY)9wXeG)pn2zbvhXrvPt9q0nqCu6Zs6>!d4cpjJY!sq=704-oZgiEsK3eWH0%qr0tyfXB$-(-l!x1-2u@)>GPQvTB z+GAiIqTjHF6@H;n_SysNUPO1PDT@h(#cmGdsgxosS7jb>Yq^eBhdR1&6!?WRS~?Vg ztS@3fg(K1p9MZvh&o>l9Ae+p~J5(@#Dj59$6C=2*Q2K=u0u7cl-R? zTtul_&*kVCplE3Ki6lgxDgy|?EhS|>k-MlU(>V0F=ybqFJdm9vx8n)u$S$A93dw5= z2s8qmIqE8B&{ExY7G3V|P|Lpw3NbTbU<`G{QRR9Aj4$$N$7S1>Tp7fj?5@j^JpNR( z^>nCVcKC})frZvjARlBr(G1!8Czb#v+|*vyMNMIAK4zqla=D<&$l!3hpx;IHaMz6* z>;w)7pQ?B6Z1udv7ta!eIJfNmk(33mjS$#Npv$1~&mTEz`Mx!$&P6*%oFKphbYNQ= z$R8*&Gb(b9J^wDptNj^Zt}gZG_9P1v!^RHB)1>Iw&H78*f%G;6mfsQ}0e$YLS4XK) zaE?mcbzCtG5OjcB>@Wk0(r@N*j5$74h0t;Ugh){X%p7Qqk`}B<-rZHDF*~)2IGs-a z-uDsXu-Ki)=f+7bJJ5M83;WB_SKdxzQc~+HYmX5C_ds5L&tcr{U{1}E4O%IpTBip3 z6N1fo{%w=u+q44YaVW7L2*@}(JVbdSI|DioAO09S#;UoIkef+*o0K&8eDYSoQ#bBK zR-*68B!)OS3cYe)p%Kk6x)7Pus~xo)Ca2zaFiM*K6?uSKvtI)D`DGM)7u=mKq2&`} zC{Tv&E!36$V!&q?AqUkUV~m=sUFn3|q027zKJ%^+ z;@M;pT}3n4H}w&^gO867YFQ{|u@MD#8K-)n?mc-M8=5{#E6Jt|!1*^4kJw*Y&{>DT zTi?FD5)Lmd95 zW`daB4+I2~5XWw?OHhvtfPk2kN`G1xzEFqJP|_ z301nOgKsX}>){WI+6+Z=H=SE>R(&Yz5t#gvX-Ja8He;gcEEE)|Mw?;hYomEV}Amn17bbWa=_}m zM+sSM>(^K1NL5V(W=L9MT5;O<3zN1rm(d2nGM!1XP0R}iI7~RaYNO@d(!1X5-rQc$ zqa3w?x$TykuSHbd$D@T+&QTC>c2GAPGfH^rkh&mj;M~Nl4aW~S78a{O>i!QjW?AzV zFQ9Ov5Pn&inm7-+9TI<=r9psIOvRM*%U3r5h#Wv;Lgq6-4{($*c+{d52UpJ!S3IfJ z%ju(p{J+td4LAT}{8OmeU4>55ZSPC}o5DTzJv$Mc9=aqRO(V~A{@x7v7wt;yt7dR` zy|dRJo08yz7j7R@(wAlw9gmtEnfTfeVy4(zGVfB~;@98yX_IwYrur-?H4-^yL{W4J zNT?&X$Ly)Sn8yq-9qY~UHN6`H5&E~BlCn!jg?9ID)Fe{wTtcEJes9UQa}kaeztohXN{}$1 zRfdeA@Ehi$zV+!CA34c zTrpi^syp@jvSv%ysTku>_+*U*%v{cg2_yFAdxDI_~LDi3n z`@nzGj|U*~ym!10&zkYil65M9#5m!D(4Y>UUIA)5aWH4-@Rk+$e zdNVu+cvW})lhqBvYQ`#6Qf0(FIN+Jp z6?)^^!Xb#ojy`B;aGCq=*4CMyTjCI@rbFtwHo`G*&+&I~>)1ofv*Rto=-7MAt~}OL z59vLDA=(Blq5K#1D-~nk`F_LM_og`jmMZmID)R0%wj8cnd`u~~*@mUH!X#8o9kvpb z7k9{&vw8a!TPogo`@)JH0JR(<+s0)Y^P4*!25l3!kGI@F9B5lt@wi|t=}y}64f_+i zA!hkJQx-M3LQUQZ)>T#ItixA>$XL5mU~j1AR>~zF50xS6Wwq{u=8qs-AU4+I(f#I3 zPlTs9XfIl7CDfTX3ffbHu-Ob?qrQIK1I$z0wTD&my4YL2m?*lXRc@;Y zObc=k>67VD^Az!0pi2ApPEPsO_h<`Bhz%?nUU%;B zTT_19v>B@`aoIba?@FQHECaOfbC#gUo#9bIal6@tLP>aGM0W4m98Z>F1-ZT^*|IGl znQ0Pl+*|L83 zwu**Ao*oHN*s{_bNQN&qaCbgz%}8>uYzNW;VD^cpNL`oVRzPur=G%a>MfGSm&9fOS0xtVXca_!Qqqn|t2M6;qX%_E4GkN1>wdXz};?S6P zSQ{C0mVSk!hBd8!V$bnIL5u4Up*V|3WhkmRkOh;vIta&ywS4s+;MeM(3qWuVjR~BM zOae>r&)BtL^lC*hIT?dY+OY=ADhmCFy!MPmz|pzK63yGh#_6aoR7a@~$dycYBh{JD z(jmW`cbrQrkyEoO>&FLX^TP&Hm}{_t>Zs>BsOaIRhOOhvYBbz5O~{L=;BSq=ckJ6H zS{oRLHE+Kfw*W&`GGr=KR}10KQRaeVNv>L);wWd0t`=zr7L01&8y5YCNsf)qeW+4w|=vR5N%?}I#mVK|J?k>vJkg!@&&t6Tql84vWuoD9VE8gahP<{a) z8g&&{(O?E1nff}6@X^G&i|TU(2Vu}a?u`noNlp6UbIO`~Xm>Mu&_XBsHq2Uib#}?b zKG4V^Jtd&L`X`@@{c_*(WPXh{u-B33ebTCoAZ|tH-R&yvmwbxYr!fx{P7@O-+!z=^ zdfWoB8lPFzHwAh-G>D7}KOs>RHE;$YRx4K!njOLN^fq(jzda?aI^RlS-eS z!HUMWep&x52AeJr9kpqHd27Hr&)&`kyful;?GmSFWWc6y)e5YRUT4t!p5>P%q9d9P z+K>UfOFtA8K1V*JfXFX4dxihytx1IZk*~-%cK=3R`wcV6rizej7jKK0Vyjs56uXHYl%e4Yg5J827wd} zA79KK;}gi-;VBr&phQyk06HN8Lap~~Y~l+_v5@J6>(NTc6+l!Q-ZF>$#^dW(aRDIT zVudeYdRN7oSgd6_>YJMA@a-KP5MV&V`pg}q3d1h#{VUx18-0uXV=JCJ9Jw<&|CXt($)MRN+UNK8-A?>_nfw7M$y)SVb~N- zf=I8KD=pX&uyf;J)typ?)xzKEr(WSY4IFfO9-(qakn*nPddrwmum2Ot1Y^S<1x ze)-h>Zqg()S(CV%9BJQP{2Qg86F6QMU+=%kiDdLLJ%2B+54v7rwuw#-g1Z04%x_M* z@CSB$ro}<3s4B=UKF9buZ3YZ!N=TJ$a580Y{o%Jm058C>P7w~@;lG@PbIw)Z4sw~k zYnJ>zOs<4~?u%Wu-d^ZB*qXmZ!fB;GoJR@iv^(}la+-_9hp5iX%_&}Zf;?bvLCZ~x zo^+XK&zj%i5Z_#|sdjQ$JWVJE;bfu29C-$9(bG+#z|>a8yI9`to*q$gVDEtVM2w0X z@m#OPs2c|c9QM{mmG7NHS!u6+etycR4_c8xwba#(pTq@=O?zFwYRjDI~(M+0aV^x~%ROdnZ{^=ko0aQn?udfFoqAWGX(2bf* zM|d*yk5d zL8*;buU@&j9)Eo5o#=jO5-g^-gP(l|wZNHp_G=@9poJ@l!vQBgFe|ff$z`o9qtVU} zS-JI{M?nqL+E)Rcz(CU0jhuWd8;pymfDZ!JfCbmE5cWlQW*S6A8%FZjko!+dI&TkU+-? zbeZM0U%3wwM)2`zEWgA*Pv%F(MSBLwUS-dtxso6o6A>{rLlg%8@#6;ZMjM_4QLL6~-)}v6*rxDf;+kV{;REjP)EeE(0wKzugjeo{n&}#Se#rE{GnW0CJM+ zrvINLoWm>Ukm-F7kF)ifGi_QZ6pDw{@N4p0LYyROy^c5Afb96ZeY?HXX9ng6Ws0WC z1Jvc8PZ4rh#LtSW0#44j>r=ViGIu!qf$+PB@K(@X+G#qFrJ7T(F^EPg8h~#o2{G6J z@Sy|1W*Hz|U0qb-A-4JqAR0B$-@l+aK)ns%zrGg%@^IPCM84_i>0Bfw_h#J<77+4~ z6P3lg{X-als(_E)Y-2I{9*_FbS&kLsbuK`y20(n7G>e0RgYoBYE8Wq#V}@E)baZsk zxOfd@<3*hykE9 z=z!R^UgNgiCB6wgW(Xu;0(H4Z>iuzNbx;i?bK1^lh5s0s^yxBjA>;yMHZ%*7a{PD1 z!($2PV;$h2Gl&c5pRhT=9ZBwU8MW5g*HXInJb5=xy;3$3>FwtAIKXk znAM|~b)R2;1GEeo9^Uqt%Q{T9#4pSBc%$ifg#TQWMAgalA5wN#IIKT0AL<1Q0y=y+ zj9B}Ec5%k7!2==N=Yqr_r2I`E3Ud|BRc&f&^4Ms&m!p~+ z;OD1apew4b{xc%SFQvH+L{``WwnSAaoI{u4d~#`#Kn?7`LC}?t(1X^y#KgpU-jz|Y zn=G(eQ-_r8*u7!^3RVt_T#&7Nx1PpzXO29^LZ=7+6_TKJKnvnMO&g^+8#_N zde&JTB-&oq`LVLtf`bq>>pPJx)QY;FpK7;CAKarmXT8zR;WO}WfG?t*D-5)W=&7@- Z@hOL+KL?rs5sQW