From c26d0018a70b48b6d53eaefe674fbc15c47a5178 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Fri, 26 Jan 2024 22:54:00 +0000 Subject: [PATCH] auto fixes + some impl. --- Admin/Install/Media/default_profile.png | Bin 51554 -> 69574 bytes Admin/Install/Navigation.install.json | 14 +- Admin/Routes/Web/Api.php | 8 +- Admin/Routes/Web/Backend.php | 10 +- CONTRIBUTING.md | 164 +++++++++++++++--- Controller/ApiController.php | 36 +--- Controller/BackendController.php | 6 +- LICENSE.txt | 2 +- Models/Contact.php | 12 -- Models/ContactElement.php | 38 ---- Models/ContactMapper.php | 8 +- Models/Profile.php | 26 +-- Models/ProfileMapper.php | 12 +- .../AccountGroupSelector/BaseView.php | 16 +- .../AccountGroupSelector/PopupView.php | 28 +-- Theme/Backend/profile-list.tpl.php | 2 +- ...le-single.tpl.php => profile-view.tpl.php} | 53 +++--- info.json | 2 +- tests/Admin/AdminTest.php | 2 +- tests/Autoloader.php | 4 +- tests/Bootstrap.php | 71 ++++---- tests/Controller/ApiControllerTest.php | 33 ++-- tests/Models/ContactElementTest.php | 20 --- tests/Models/ProfileMapperTest.php | 4 +- tests/Models/ProfileTest.php | 12 +- 25 files changed, 281 insertions(+), 302 deletions(-) rename Theme/Backend/{profile-single.tpl.php => profile-view.tpl.php} (96%) mode change 100755 => 100644 diff --git a/Admin/Install/Media/default_profile.png b/Admin/Install/Media/default_profile.png index e1def9eac8a91f6cb75f58e14730eee9582698b3..27282619dda3286d7c23499db262c9f3023c60ea 100644 GIT binary patch literal 69574 zcmeFXcT`i|wl0YdK`q*v)J0Rn{HiyEqcfFMP>^rC?DE?t_Sq4y?L zRGL&l{dnJV?z!iV-#5l@+%dlU--VH|_gr&5YtCoRHTPbN6{oMO4k2P70ssIIO$`-8 z002ky_CrkozLk95ULn5y^FGAb%+Jt15bEXQ>EwcTg!%=0IYJ$ST$})aphb86B}hMv z;O2swIs747CTZ%Pq4?fqG^X_4zNQ@PWo~%=6M6MuNrKYh$;NYwUZ}McM2i|{6NxK% zg)69F{%(f&0TGhpTu>RyK;bO=B$MK)FE=)I2i2Y4TH=g28SOQun5o*8wEHJ zU$vCSoq!IXnzI~J@#+Bpz$h1GWqnO$<^OQ#){WdpDY6><`qa^SMx|_bdIRo%PA-&M zP*r8py7SDgupmUAT*ep%oL}TtuY&GZTDTXKQ9FJjEmYfrVbp3DpOkg4~U< z$9kTt{?Qhp*=zhhDy#(G%a7yPWj!makB>=kjOsyoLAe+z_$10i<_tCAYX zWZI5ZtwSw7jwFvu=B7AFUPmCy$^_=aS3r8_#U}or$h8Jhttlf9Lm2S1d;WY#f_xrt zQD^D5T=VyH!u2QMn#P*$Rh%6;P0xU)JqlPS#L6mAG?=V)8OWyBj?_rnD(6Uh&~r`y z$OuTVf)nX>uq?GJ@d)4pf3wZFzD}Nb-{`!3r~^M__uNy@`LVpEr%zsD9Z>}UKx*Q0 zn_y--+ENHlcL95(r-P$Fkh|Ay<^cdQ@g@o_W?(KSYdxFIBwZ1QqMGC@+e0Pc={_Rt`Aw1=-$kSyEZxKg**e~AUz zpnt3QxyiDb>F7h1J$)RZZ~?dgj9)d#B|w->jtDB_gLINIR8jjU#O<9d8_LhmOG;2M zFfdRcP(;Af$5~KFQc_Y7CM+l{%zvxF?;GslXCK7x;miIP#6K`p9DNZ!E?#~vo*vM@ zFzp>Y{rzOw*lydQ|6!lImyXWA;5~f*$-*rkfJ(3?TE+TUKg@o}-2#Fy1B_*5?FiBwt zNu-0rzd>nw`1;v4S5SDP{hl?S__$3^iVEp0;dm)6A z5E3Ejg!nfIJs+3bth7h}yH$TdA#b6C;0_Y@@LMRPkQ1CAE{PQ8myi&aVn>)cK#q`jZLioKuX zEhtPFE(H^k5|S_$hDqIC!-aWoZ(;wY?}>DA3jY7o{%iU`W&RO#4Hw_r@q_;s{bNoU zIeP!&?jN^km%k?y6#DnHkg`Yo!v$aa07vBCcHUzBqX~hs_i%Q+tsnnP*#D5b{9lqm z434-BqL>K3n4`mOQaL%m`5hdc#Q2et!V(S=uvQjULhwt##U%OR zBBHlh?<9%fmqdub9B)$wCN5ht^KGFQ{8y#_CttUr_@DgwXPW&_4grP!?;!sze*c%Q|E24{#lU|{`G2$Pf9d*f zG4S6~{@?8Se?}M4f36iBJ#Js{0&iD>77!o4+f^jkK}%f)@aM1Jf_LSqw-Q1x4Rc=r zfSBs94-k-@OLr^8_tVr-#oq%`Qql1=`;O=U08oIYilTAQ;_(}BRV`X-Y z=YHlN$?ZO>?r852W=B)3k?BGSTx&VZUsRgZNC=fwhvSNiW8S6wKK#R)>92qO{@2C2 z&AB+{mo4C09&p|bjQNAF@P`cZ7}T@=o2HOClnK7seRUD_g|}{vA{6zzd)v}3tSnQ0 z^N9G2x4!$wpQppW)oujBjF{!k^7X%a#-04(#Azi1TuAr803>3+tb(skJ-tJ;*=Ijd z>D!>%$$D%mZmf?*wtw1hH8_te=L)roWn)#g)hU5yU-Kv20j*cN{&xXVN~j0h3Tr2d{&528|0Z?qitHVCmf4^n+c+t?xIy7P{fDN{4o2`^J~Z#7f!Q& z5Uv9#$T;z~cy|MntA1v1PKsg1oL!`1AKg8)4-rw>q#^6R&lUiX0FZzQq{+}RbU`!e z6~G+#=j3h#0BqSVg>B;p?0bm(RtP3$kW*GUm4+M)paXm%1srSxAlo_gf2_Ot3JjXn z+Ip!2Z5N;xbG0RV3VyxQ!7fSYhYeY>;TnlLDus zo){oQQFQ7+JDuaNk1O@g(Q3&CbhNxgJFW8O zVS@`0G#;@@$_fVl6|b@idlvb6U(5nC|iN zr@egl%*8t4VGc)ajTki?T1w)bdy3&dpU#;Td_Js@%Y4?DZs$V2Q`(5*#Q+jJk#qD_ z*5Y+Zc!n!10h*?Z-mU_&d|y7s1ATj+nm!C-AaiBYDlQLkdauvcJ-lL#Ryozyxg_GL zRe=Fw0K0B`~nbP2yiz;Wi}1A#MK5J=`^wmi}O&ruxGE%msr4ZlYa@T0}qy)Wr?Y2hrsP(_0< zQzJD-If6F#r91sKo?H-Q|B!Bp$}DsEh|mi})X}dbB8Gf(|NA%Xot0^5t@a)wF6 zywEH%1?eC=ku4YU$6fBeE#K+bz8-WRH|fWmX!lZ@`V#)`eY8`mC2Q>rFaV=s2vAt( z$1nuyGEc$3VNw3hX+8eIl>Q~q?y= zwmPQ;fI;Yvhb@d5(|D|jh@M?^$Z3OCL~D)ih!+V#y?2E!R{d?E>-0LI7w zk0hI8DrROA!s+=eOIL-ehwg3A!;b5W~SYGs%>&*tQ_=y zrLFJdy2fH980l4AZTo%Is@fyw0hpf}-&X-aTasI$6mu*^3w=n7AOZN3M$yS}B3~P8 zJ_4H(l0eO&ww{qF83ZDXud~DLC_(fpBBUx}BS7Yku_nyXoE;#?(w*#{?24dxDDmfm zr{D0Qp0d=)+(#9KRHBGY-<onL zU0F{%X5|&(N89B%r$J0*2=gn~;n2r;6+rBiqM5VJ(SqBPDMEwB1!Y214A#*7)le*6 zExq9{Jp7JARO`8!1iJ>S$>{~|;>IkV`k+<=EQA=Rb z4Qy^fIE`GN0Vo`Pb(6Dx1o^dz16~2Hi{F!dN<40wedSy2Zjq`{=`xIJ*yF?O+#!p+ zjHjom{P_HnO@d-+I`P_Xrvng5sg^iTH!x?h1@Y4^Qk~+f-~r3&&pvyS_nT_5C*x*T z6w5mTeEA!WE5uKG-Igz@36q`Ch89&Ocjekhfm?Qiq;lhXZUq_B@Qq=X=;mxXI*vV8 zw-L!$*+LVVXFE@)YnXe-R-Wj=p7bfQx;L;GMWX$oWy_k~fU)kIre7+mJ*wXZ=|PP@ zrH${ZR5BLV!u(?VCd2hh`DE~HaDQ%?4cm_{NVc4vx-?Q-R)e2NgGfA0c<5eHnR z9>#wnL8AsQnnLLN+SjciB%%sNZCRoU>@8y9iZ@<8jFTR1z~q+$-#e3b1oly}vsYtv zMH{t|jfDj-OY=zL;nTTSgQ~0}BDli?5BLH8nAx8WpQQ`H9wlsn(i!rX&;eS@&XM$K z*#^A@dk6hG)7)Q@1paotAE_};y`e_SFDK)_aGia**1f+;96q)ZtTNF8lIcOd|HPCG zs2Jo3BO9KlmV71EXC`>EXAs@8CwGKhyM4d?gc)XQ_K z6z`FtWNLc_?oTTxEf!t4L)Mek}qQ+O= z4c7?@uBMFeHwzEo14(AFB#tk&%nimCC)BRZfI{rNwOsDs{pchl=CiSBQCfF@r4r)& zy%&fzd&#NDfN8aNYDf+FT!>H66&|dZ-lf>^QVNZ0aR*C)q_Jog{ljU7gKFHn+h762 zVzUd>t_Sp!zsN6y1;5L-t@${(JF|nA8_8Eu9FwenVe}eEzi19PoR+>BRW9UafYggE zRs3d9fLsPF1$=8vou$iuuo#zLRa&``XyL9?(HrY#|I(sEbKZ`c^3Z37_Y-5&OdT;v z5s)a)kd-5P52J%^vG0qlaih1a$`oZ$(n<8s0-f0Ci$n)s3BG|K_416V4fTEtT`bvDX!d~Rt=z;{bD^)!elw{%xRy<7ne5A3UKbt&=%5ykb3TG zz&CtUCJY%C-Mn(-`pIc-XiPd!I3uR5yj#UBA@0PSrk}4qV?AA$$EYS?E;05aOeBI4 zL=cHDmZz6qPaR)2H62qQOQlT%3s*AYFIweqhp1&(jreVgbnTzUU;P%4iP zc0Dq5R8k>1S{mETL#;*uC4cnnLJ+_5Xa@lKZE7f7YrooAKQbBh-FVk+a8v_n=(0VMb;Bm2xna>uhlsxw?dbpG(8LoZWumJ zkZvgLZ?*A&!qHi1X=u7+pb<0DbhydO?aPFYf1-W_VgG}$GnLuLgHwftqS8%n>doNo zn?ZlwxVdR`>SG3@!XHY`JM2J)qv(DZpyyLN@u=CO1kQ+uwE|{ygayh8^;94RhG043 znR{I0?EN1XTf7mk%os+d;o1#X2)z~E<*G?g9{ci5Rr120mUqh9wqOWj|C^*a28l^n zDqv)0DH(q)b`?5BqELs}|5!!K(@cD5YRm`Wl9WcpbP|Lehw94wi0)DQdAd_sUM$zr z*+GaRCrMJmxc zQQp=eFY3WdNk+HtZifF#sOCGPH1t$pGvKIhOf?9HEOxeoo(o^BupyC~gz9Zd_MhCw z{p_a0!()2J@$R^1`zE+&N0I@lH%`hp3^wv>pSof`$4tUAhvO@fx!WHHaUI%rp@IMf zYXAf5qi`W%b#+dLNK=b9O;IjCOe}y_Ng9aBzQ)PV$MM>!gXOPCQfnT{mrRJ}0J8O& z!d|}bW&HTYnZfGwC3022uo+CEK-)7oKcCfb)k`_e9v@A;Tvq!7`hlFhEsfd?1Y5TL zJhJ+075fwIN{X&0T@2LF^S0~nt^D#r{$+M}w&2XG`t2I*^>JNDW1>%`Pr^Nb&Z%3w zqU%yK3HCl$B3VAzP>dru9JW=kGa=_K7Op-AH0NiOD*PSMiTWx(66weTH6ecFon1)J z`_moc^gbB2eYXx+U_h37lTU(hEfRz5>#lq^%PO?T#FXd78caR4bLN@DERS1WDyNv^ zLkALQOfh72LOQE2g-nvz0u-9{EX1R~fEL z<6}dD5|+BR{|OfOeR#fBsChz@iUOPb>>zr~&UVMzrT29N8J`pwAlKPmtN!tHlPG56 zpdE6LIOT+_v;PP3_`90moEe={56`!}YyZXS0-}3UW(n(`Sj36(@2f zN*fIo5~<~>d}WK-`l%H6&zdmf)30eJ4eWAJp@98CoW+lUnpYN#q#mmb^ZMV$yzPv$ zV?Xny$#7|p;fXb_?+yXs49dRFB;$ja7+wN0@^Fa!_UgpzWc9#Y2h04-LRMPH-L7ly z#=t+@pXM(boJ_WK$MY|i1eH9}K8qs{G?k$B*)&P$_E;-@vYow%dfl%ZGI+UXQA8GsBEf{$+ z8BavT9pbxG|9mvg6NodK}YqMVFcNxBZHS*D) zSD}CQIx~i{utX2+!BAn4{n-F0VM2cUufA|*K=2Uq#>cfE7NjT_f!r$tWDC_6Nm*}_ zc)YFF)5Blz1{UN26P@u=xCws*cyuYdk&KJkJ)Os)9OJ>yc>{i>_8~6IW>S{$2i~z7 zNUqFft`1yF?<=NaEA^SVM~9qP1;biF$>@~%g@*NI3O94;(dcnJEz(PxbgU_&jBda` z*1GJZK73|@2a%xkl4|Nzc&Gy^tli~h8WldgQ=!$))#J~I9uvynIjk!~xjF4xm{r9Gd z=>ahv6~*E1z;TN=BJp(sGcgEp<4f&Ssr1*rn^~id+m=t{g-R?zW{tPoA%L#~*HA63 z71>(*YW9bMY^468b$xL9*a*cPWw@ewq1osB30r!T;yA<|R(9;%#QDg=nM|G56xK%Ef1XVD~Pj!%90^-lD3R9~YX^6i#?Wd7rJcyy)> zMbSxy`w%vYZ5@D$Nhn;v#ojOEX!a(vk)4lN)L-g93dNnK^KMvJqkduuRH*=FADtLi zaJ2kj?amQsL>7Fr%dV!HT3(%Hw9bxWxd!Um<;nteOrgt!gJp@4?lfV|dG%EvT=Wzg zhWsh7qA446V<+a5vS?l|qS|)!LAv!%~`%Zm&fR zo{xpA&wiJ*VX;)deo?5Y+B24Hs7%F}^!$>0c3jq>nV=*s>r7yr-Ou8(rZ^KuWC^l( z@EXUpUQ>_sYJ%*|G;O;4!owP71%FepOF93tG=SmtjYi?@kcZ#_Q;&m1!>8NLlXdv4 zQ#zilmNcF$gWClN-g@ls)U%Txa5Z~xN~SdbeM9b_PE4Qdk1BEuZh7~DF_>EAIiHIF{#Sn8d(4#IRW)6e4R!$ZFRF=f` zA!jzNc-IMq_e+(SQ~x-WUzLNFV$DHa9B`7fvh_>5kt^v_pTqXrWP(EL0L{kOk9;TU zpSu3S%sArNB~Ub7MT)e`0EO4o>!;3%>F7w-DP7?7eK7*d=PBdiiF{0?1#Lg9HSR}U z*$By>v?iedQnvRzt-gvIqJZ7y@N7M;6zZ=C)%QWJnEoGh!4J)9F!Id!leQb5xhT=l zRQ|rzD(x;!$on4FcWEN<*=zAQ#RTd1+3SaJm1mW$PhVK1zx&-Y1f}{205}vDEb80c zu7?P*!~1vB_(%{LH0H%bxFQ#?oWj2qNrx;>4BC&Z2jZ$Co`QwAqPr~e0VYuv7jIA~00Q9#6yNGtjep7b4c#a|wLos6@FZ@K@ zS%PHm3zq@Zid+;jFC&^%G|bYX04;QEU{?%JKYS?LN4nPGRNP_&OKvZGUB4#?5Uaz5 zPU~G3Jyh41AfGYkzmhdeMbX#w9! zuu<22;tA6Anl|W9d1@Mp1`~sMkqiUYoB6+=ZJn6sy5E6MH56Ms4Gp78!M`;wXTS)%d7ES@myB^K}fxtRCDGy}PNccXO?`-t|2r zez#i&i)6^2#q2>D0=)y-KHuDmeLAZZR~aUFMWH^DJ#QiHMhc zQXgk}eYCs*S;slt#-B~+qq?-4utHxACqL?SdqRU{O6K$W#71y%)|bw>j{z^dL!-x) z>XjCu^JyWshmvLk#O*evRIPepb8l1d_KBd2sT(~E4WFe;v2#IDk|GjigvX>vNV4-} z$_vkjkF}oX7pV_ZM~(0Z7877cFM6J0AkR%E;w*7;+y{b)V}yj^b#xM6J`F_C9Z2YH zlh@y=9v}=%f80%P9C|PU^y!7(QwkH4}Gpq31b-B6L z=XO^NBiaZrA_hV?4PMbNc9zQ4WUq{+K1S10QwD}o6N;=jsOk$=f_5=whPCxe#jJ`Y zDW1D51|+@K3gb*_kwT&tKfjm|^T;uJ?s>;VH@6-MZLc+e7zlMs_?7k^XD_$QQI)R} zW1~XvKFUL0pFcCwdrKE<;4T4h1D3r(9Ni~Tw-bOsU)Xxdwh9&E$?UaXwlgvS?r?dH zs4)B5R?KtKeVQJ7P^$U1HH$>Y_+T3Yc1B>;fjR;eFW-Qq%VH=Cg1;ECIz3gW{OWS= z3_kIzacH@)?@R>9h&R11_am5wfbr{T4lZ|kNPd>DLkN6WwaxUXqlI=VU(p;0HxI9+ zi7Lr3REAGsVsH!ExD*g;5bTkvu%GfuW;#v~{qIy*M2fZIr+M54ZDN#mjV@Z%5-!Ly zGw_h~p*9np*jM6`cjR}oLY(>Q{rNgkA8UxUqQmY3$J_flt@NMIV0-wlEhNx)?LJfT zws2T_>i1u*=vf}t#1&rCg0kDbQO@>!w9E`ITnw>)cRAvnM;EEY_ zdv;U?ACBtRWc;mi)T>=S+oeu~GPT{lvs$@z z;&_rDG>qJ%N)!>~u&WyH#X#as(I;QYSKfUjmo->VdY<=@C|BEFW8_=aj{{E5ilHpg zu#E@|2g`?>d;-pn`~X~0JL|LfeKmVuu4 zt@xJ=Gqwns(oaS=kdIoT8}B_(#uTKL<)xT1=G3Q)-&Mw{PB1Me9J{3z5KA&-f_=6o z7f5U&Osfan8EdNzBI6{aw3uBOb^B>!;l}=6KeN5|%tl{y?G3(eI_er|24HycQ$$oD z@@ZDca9s|YL>U~j6f;OqVaE6T zAQa9}TPAesTPkKR4JP}pnCTdZ`)XAeSi98yoX?KSUki^yUI~Pf9ttq~WT@KUuqvjb z`f^&!oz@}0f5)Vf0-G=+HVVcy2IvHJbf#Y$+_5*5G81Aa26JpviehX2y_u{Ie*r}C4?=IB(%gy(Zy4tPicKYX7@Q-hCCdv3xOqO73NbzdxUr*Et zYV$UeH4_iM;Rz(5K69_)UEh@w@7#%@tmR&%7pLYNTl|<+FAK>x5aHG!QYE#hwRjtS ztqJyXh)GK$;r4|U0~utrgSca}0jSPB7XEt?w#2S|P^BE?o25EHksyK0%VvPW;IvoW zyE+GLdvqnkX(KSpP`7C5iw4HY_2WA5fR*I&#*nduHs>!ALD=l2DBVj3-!aIQAGI$) zyi0@+!=#@UcTqY6eN$Z*`LzJ~^@Y}3j;MNgZduw?_9l;bi63+)W4XCa>4@GT@z3Wp zUBQ)MbcT`T1C zJ(M3wOpkqvqzO zRqTAqweDGPItSwCTR)-*M_1I^rN0n?NId|<)JI!jauSw;rXG|A;hlz z7C9HHN~}8$F9~A&)t5RarT^nB04tOMs@-MiC{*`I`_~P9QA~qtCvm(X1I;haSkB4F z`p`%5^Vzf~CsHN3g&U%9-XOzi}!b-yX zc&jG{lwINRdVxK5MNr5z2DL+U>Eu$8pq<{O+qv`wGrFeLH?jI^#ANz=UgBEM{3%*G z{>JT&Yj!L;uN>5&>yz3ti$aAnx1e468>TO}BGAvuEAZ_{-! z*bzZRFm-oiwTeGU9ok+Hm0NuorrxOYB|_)Jgj<$6a?KuBL##pC%UU-Q`>JqL4+#7m z8z{Tb9?Zc~UKVp=H}d|xKEE1_qVbom?#1RxX}IF`jU5se0@GDDlkfcTVT|gTM7a}u zHx)pF%yL@J_B#q4Gs|DO`g=7j7n6liwZ5WO@L)H<k__8f@-J&N>3Lp)zI22M16ene^4v_)YlGfPsUxwGk z5%r_(Hl)b#%BMfe7Q~T2T$)61u(^p}o^dn>GhP&LcCB5EiQd^5#G=6{*Pb1oF$j@9 z$YS5+8(Z6@`Hx4V@sXecdR+q4sOV|IE=_0Q{X1jejFh=KXztAB^ z)TSs=Oh5Cm15QLUTAcj@5@*4Zr zGukY@ztzL36?|Gb{p^K^G;Lh=He^Qoq{EBx1Geay8k5?>3qgIM`}z*r@+mkXJ5}-Y z4U9~8o-VIbR=ovTfE{A>n^dvI+VKzX(=i~6LSFwK%c5g2Y|qc%3tFU~)=zpY3i>dJ z{T9kNIQ+~A$hi7(d{R$>3R^|U@D_k}Sd6oT=4w3Ox#R1SPSq4V;e~yxXhgBsdcQr5 zkp#&gq#?jBO2V>EXX_?H?MR|}fh}%%X13ytt>Qj?i=xDiF%qVQ^YGDSD*_lo7wcbF zt!4`=x!%#hdPj&AEXp4|ZIkVD5H-{x%KIap zFBY^VZA;N1Qv9G7YZfY};H!qw-THOdQwgEMnU|{*UFP^%Kku}2CUh(}#~})^$dM^Y z0M-VA{m|hOlWCchSCqUSocTp_v&pE9Spek3F=ZyJNRUa71cDE@kdgjzfHS%^{(x=! z*AADhuVQq3yDkX6lw?vhmN+#%58aw2c*OHMilUo~siVzE8)D;|0A6>HETBL3molQb zTIhR#E0$lU=y^$yDg63!hdCsxoVqkoV}pAe?vWe22E7lk5Yv>fq-qDH;6@!kAa7hZ zSB6>Yo|^L)%J*N<=#eklmjJAM2HutWWCsjl}QW;f$*~*X#vWVSh?$S#30i&nb+;C83cnK zEQC5(A$eX85&?5~3!|C%OQ@A^S>P*=650Vuw$@5KM~{e}3(QQa{4q3qKYCa8 zr@M0n4!TFmB3a-?h!lGPeW;Z>*Zm+y@zar3!;UP8ix^(%4PJ>XJsgJ8r7wI3OI|Oo z&hFQS1ABhMfL%TF*wCin=U_`h1u4Kid^DQ`9H5LMz8D?P^(J&mFTO~MJIZ1$ZKV-^ zvh~$&AN851w}@|(2cxzeaY+!v&zsWX?H?uXLA#=7X+*fu|Ssvo6qMjjfK78#jXJ_p)xl zZmwfFmpNr3@)4pKgIZCU-)>h_4j9Mbye7obc{C8x=4X5Rz_er=wnlE3}1(tZPPSd7W@>+S-pZ z8Z|vKT5#qQ=OVyGLWQiw{I%O&jy#JS$;hDgR#tHQsfmbH2k2D18Ug5h^CJ3s&nmUh z{=!hoC$dQA$5^^2u4}DIYu%Bi;-K@Lv+T`^M_GBl4QlXzn0mnUVmAvvj$z^9zC@;+ zxYr4#b=)%pUr|BCH+SX+`sdidEw&}p#)( z-w>-Ws;nv!hH^$m#&!+HycpCuN+pVZUkH);skyyBu=lQDxSI(N86TV4C9L=kyP{HQ zox^B&GJEs}n0+cjDW~VpbwD*eox6PaWrF5=gG-3^m$`M~L)lkH6xguKw|scf4lRqh zEer5_&bst&E+r70rfa`@Y;0e97;k(}RFCN}I{2a#t-h=+5Ral*XB4b7CArg}%y(6H zOlJrl5rcH4S0D;bk!MDL|_*kmA0NPeEyRqN`M z=}ZB}xiN_}R9^tzlx=(YwQ7K{lUxCk$4boOP&B!4%udnh>PxdJP;Fgh*I>X16%jy9 zm1`-*lK%+fj1{rjN{{{J2EzmeW{dasIW*d3{tyw3;VjKHR(wYcWN7*$dCm$8#a-k) zMUPEuSmJ_RNsWr@09dQGH=1tWXEEbi@hEdk-or3q*{O;YG8X~;wsvz4f|>PDQrFlT z_F8eV=f_*LitA=Lt=C0!1!Cw`2fDZCM_D{VhD8*yX60#~3<|KMM}&Q$g>s4I<=9xA zFmvU8dWJEv^C0sWPOkCvX``NKM(t1E6(Gkke$kb^prl`QucmUU;w*%=>7F$#QMBi4 z8)|?k0_^xKl|RPHc-hq45aT2- z&H^CZs3rAK;1gtUl7o67PbCffUXl&eBeG zQUvRnjD6HBd_Vp980hNe6=fgE1bJ&79M7>pAg<)lE>9 z*_f3u1oTbT@sC&>J612EK?AFRVLmdajwY+4jP^de2PXFi)_c{|ySFa^FZfroaZh^z z^;sltie#gU9v3Io)N$>c82||(#`VC9 zy0rO`SihtzrPc5DTD(>8m)J{HoB^g`276NFsU#4+wU5G&k$u;rt7$5N0L}op+#suD z{}4E+L5a>{^h=1Z@H~^UgIm$aXS@zq^1;9&)p*iWd&hIV*c6+za0Z@HuKB@S!|Nos z4^lFyVoDf3K1QaE+xkrgmtiH%j7GC z!?rmdwL%VTXs2;SU?uTuQxtYcge%J;^TE6MRHSSBB!m6+_w~4Db$c?!kw-Z#o-N^z zC(`>lH?_VhCT?KXO$^st!^o#d*6$7Z0Jw9#SxGJC*Nk3=v;LMFU~aE|kwK)|v-KzM z>{ZHa69DyMhN0_f_@1su=^Uv&>QNaum^ZLAe`f}>Gs+g?_V)WJjvaf8H0!T{Y6?^S zwDl&*;oJZ+5{Ipi>4DP6IQCkJg>9cX*+HO4J;l1uR}~r8ukF-`5qRA9NVp50j^2P_ z=h2a*>zMp-axIdAqqQFwTE4{LpzEB!xcmx-5tb0+=CC53Jxf1Q$$6{S~MnSxw_Yao>wo`FI57w%Qd4!0E{R8 z&-{M$g~>T;(bN}h%$OQe(8V5p8Zx6}u(yQ@Voh9aPW<#8%!Iv^_}<@BOeFtcL>y6x zYk2ZnpEzs}2uZ;gE4kgPvkr`6`eaeaGFJ7WrE3df(JorHQ&3qBMzIhSQ6-FLKU3pu zoqK+tQ2v@+Qs;@-I|fR&P~q>>Ngps-27`l~P4@8Bpox;~G=5V(hHFz0AsfF+NhB4H z>2=YK^hYf9p|fiIYox#5plaFe0<)oqU|+wa$SYz-Lb7(Eox2}FcOQpw-up?Db)lE3 z(G*?w2fV3qBZI1SiY!^2%(#$j=k&`RXbU?o6(wenbH;A9E73j7_RnJ07Y@>~%gF{Y zCvc8Azgs0WPHJBTGB>8`;Y1Ifce%2L%RQSGC8DL&oVpjdLU5yo$Q=Q;bo;2$LoA3P zVt797g61tAdP_>HjXhB3rPCX?)r!)bKv|*pd4t$o#sR=LV+1=u2aLvfm-O|qReF(3YAb92kkA2DoW{M6G=9^6@>sb(aY{%uXUqC$_MNPryA2!I5~ zjJQGa1u(fDtGXuNwI_Q8C))Ru9mz{B_u6~ZZjaTezI6KFwvtrY%gXAy?DYHNPv&<< zcA>!9aQ;`-;nPmUEnz3j?6Qiw@K==GFM%83+`Kz!e$#5zZGOf;;OKU zmTvzL#6cIq?73T8=1ScGuC3wQ>tnO1?dK@W4qcDaSF!}6zDFM?k?Mn)fF%q%Kx2^@w^x8ud zH}>@A-JVeuY~OF@>+6KGiTRB89kVH3N%)WD07bk+?@E<;1m&a=%3Y~d-$E!~Aa;SG zBr8Kiei@G!+2_R-eCssEO`_xtiCoVX4(J(>@6(?C=rUAD{1&jNwXmNit$_!yYNsOl z6$F5`2Jc3(5X4Zwrnu>QFdCCqKki~UIz#jr*r?0(x>kr65p5)^H8LONTpFDv0?Y~1 zkbof&8bztXqV&Ipfe?httZ|d=iwIZDj_9+Y1`6Wnb(XhpDm{!|t>`kh=5>(Ir#8Vo zQKnbJm!13XHjKi}CTiE@s8+%W-eo?aJLvT@z@d+Aa#ajUqN(F1?udncv9<}=8+5P- zqx;A-)#`r;iS<$fWs+GvYCm}Plg>@OrQ!}cnBM8xnNWSoDd%y3b{P`urE0N)g@wbS zLbAzH9*2k|(*YB!_a=-Fp5zd3_U!aQhxqvjkkxwlX06nyI%nkoWV)B zW{8H}6PRb#?on=lj*`A2Dku}9{u-)OD3g#J(*53ATDUfjMK5C^8ISI$sHy$QLCtY| zARbo6;kg1rdUg=Y#Ii0kx{AC#zC(!r4A)3euXVCPeVYTH<$y)l(7yItKt1{_g0p@u z$>E8n;*7uDKwBvvZ%-Co+EmY$QDg!@3cwNk;M=<(X8Gp%YEVvz%(tkYY3j5|e~%2tK_;k?eSRsH7yLprH3=I4rOI-{_{d+jipvA;9GG|3{S)T zvFt*m>rR3SLtC&XO{PGd8CIh2?h`U((y}Z_B72X;!w+(4k@S%0+i_C){ojDnCS~ce zp`96EVi=)FFZ#To)~9Hcx+eIY%NHIbgT$aA~$uk26^1#K*mBE(OKbD1== z+#y*E%cOM{d)pf_QR;ntPc=VZ<9QxIdmg3h<^wI>a&67UHW7@Hsk2Y)cY0LS)C2mZ zk~3VZt*nggxT#s9w>5Qf2m$Ki?%G6Ye9^Ltk2MT@QxWBpgfHR_AcU{^xpi*qamZ5A z`<_9!sZ6rjLH?F-%LKf(N6Xx-{H$yuC?<4EmudYW;&InSyP73k^}EiK#}CIibz3SSYlr|Lc|OxH6&&DdDyCgtoSU731qfhu0!#V zub87CeA&j0T!3D%^OLOIq1;Nr5@AFx#iXseme#RFb|HE*{|$lm(A}W#6=MUU@lkaj zvKWdh2@d@X?l)Z!DkrZJd}x>QhuTdpPm5aRAi$50&Xx<-i0#|P5FHx(~JI4QW; zP(ZL#nsNG~lfVV5F}`fMXpG9l`FLh_T6~}Nh3&pCgfP4CBewH1{XKmUfgSqAtXht8 z5aFipFgRETq9Y=Fn|rkLJ;m#TBBIdTHi{qKtsmZ_B?yA$-2r0uAKc8_xvBA&z^KK- zfd|$3_LU;SrmC3oz;C`E4S;&|!*v|K{m+u$Fq;%bGbxmmA8jSg={JX}TjvCY+Tx>Q z-w-@K;G!&j{1)Nb+BaE%d&V7XYyTY9d<5Sdxd4bgi?oY1wzj!Xk{5(nymAnuOE9(< z>Tl+v2CJvM1Ecbt2Ly1D1G;U{(R7y=rCDisTuyNB-f22wpfMqFb{L`O#m+7q$H@+N zi#+zwg&ro&LqIgzZ%`qKKnKumed|iRgTD!MFuwccR}Y~Y75r0cay6QwL`}!ejb|we zj9MjLj$K*keDXp1)lb7$F*g3Jj6epv6ge&Fx`%wE9z#Y7>q@G9S-kbL{(VNmnS%2! z_I%GG<}#Y@HszPbxfs}cOq+TS?jyhO22k!hgw`J?yXNls_r%;OkRKp90J)Y0$=Tev zeL&Wf=_yn3>Vx3!g((xfW!ah8N4)zk=YIQ~U=-g}af(wqWTt9pHkWBx!{O~-01h)2 z)t`&oQPdo~8EJPF^3)c8LD^FR#0cs%mz2djV>fO@A@t&Lm(e_8wc5*^x&##B+# z6vYfvjZO9o5XHk!Fi`UOQvqhAEBEWx5-#l6=Ms}9sjHHI*)TdRlbjqXz(&~DH$d}# zERCizJSz$YO9bxuw0DaSE{JFk0w%36m;;(Ycsn&fvkka8@ik=KP8DsCIoFxV&S1S6 zZ7hmB1!$ z%nq{t0Jlj%1l7#P1b`FZap-R1ni(|DnzI3#_W?Gu0vO|yLko8VHq7s7moZaw=-Uw3 zaBru{t;YdH`B>Az(Zm1& z$|MDhd_BO@r2(7pQ<^xlhk*@4ILQ)$GVkhVS)r$CtemOQ79S(dPP&^xs=1ldN7w+( zdxD!;YzoayvSkMpFkdI0a$?<1*yc++1f~&Ym9m}zmk#%b3i}Uo zGhhUe35Dahd}%)DXqSD|kv7T{-( z4I_n*5H65F&8w*$^MetFan^fn8il3doHOn?2!esi10s3L6Z9d&Dj%gHfPVb}Up9|M)q%{rWrT@{3xbqBEb)FoA$ zVHcDrZ^uFuUC`Sh(cPEU2&1?HH$2G=cdcQjTFO10hC$b(X@F)sK!XQ9H+haq>o%wU zQCTSGTCGt{ZTBRMO|2HF*iUFNNNWM-bvahlN&B;=4tj30SMPcO( z=A2gs28k5}TVaW?@>r=^d#L{{%u%O7O);aGz#iQhpcx>8ZF|s|EzqA6;E%=!u3Z4l zSdA0E*9p|z>Q9@577Yym_69&d?q&UpZqv=`XUf+$khRU0qG&A$f_r^pX^L8!EpGCN z%iop{wP@d-NISJLwJtM52fwcszqHtCGE8fOEWNavFrV%*bYyY5Cn5pmj09gKsRCd! zPb<_ttum(-REnBMP=#hJI`s@PYlV!Zsq5KHrH=~N_Zb?yv*)80kp*Bu4QOfuoiR2& z&|OB|9MBMBX=rc&#@+zzHvoNmaB~N>|85G<;0l52Xo0gGbwEQ(Btiw$yy8a62m~7> zh&iAsyqy|IZu4^l(1?^1temAhN^Q-{a3oD!zXDSDLK{+3V+F{CStwTaS4!Gyu6~dP zY~1(KWC7>LF2-qa!&E8sxavdE01Zro8h|YQBtT47Uhl64LdxluSej5z!?{qoD_WAb z#f5?D)y&CKO_q0Hda&H}=<_Mm)O4=_HMA(~J-C31_U!;>q`+RYLTE>AEHSb6EY!{r z*;{Q6D@?}e;?bO6kGKNS*nO~|D;xt9nm8bekLQ?kKD3WS5||^fHaJd~MD~uga1SZ< zH~)1QhxIhF_~V8XHI`*gnrTLy z?2~6*Xrf~P03ZNKL_t(NLDta}LCnp6@4wREfJ~fe0H@(9X{(WbkoUnOMgirAC_#;P z<_1<%gShiJz!_TsTn1?3+#sPzW1CrJJ4T0*24+Y}J*_olv^tvNX9PM6do|=TvQ}ul z13Y~dQ&j99kW4Fu{s;?oFDn=+J_aRgg;QaeSJg}a8_^@=v}sZsH&5yyj)cJ(siHA3 z^Qf?U5A*|B%?u0)$V4!6V}M7|qoEnB1C6jITeg4CmEvA2jkMRKdlana)9?h z-;lLvgZw%`k)oOd5avqd;|YPq(Sr0*KvnJ8sWmmi=Lr=hVVZ-Mw}|REG8pH&+)<^D zW&junUN6PjfX(564duIFuArex(c_NueFdY-Q!+LWhC!;t!YBaD-)I1}sJIXVR8m#3 zK)H63C|Ra)#)cS@4S!2=T#noj(g4j^jm#9Q^AM=9-wwcp^il*fnhrNT_oQJWxV$pZ zJZ+4zUeH+m9M_!S^u#@i|JGF6xN!zMv(rr|c;tnPr>aNei-VgUO*_W0upKe0+`*Pi zx|3)bU4x#uFO0z1YnF%A*X*($26;OnR;&%)Op)=5xmN&kZ2oQgHD-eBe5HQG}J= zPLw*H&LRrej(x&UO%G(xsfwilT4WaR_+;11nVp&C4wGVlkZa^<^)_59bkxggEUS*G z;XC|N3O#0ZT~r4!1rsy3i)rPbdnEW2uW*gPz*;&$~BbBvjH&(zi;0prDSS10E7fiYNw( zP!66sd6sI#Jh~uH=>_2n2QO_K>{ervjx^(`1HexJ{2Rdh4PgFB;08h(>Mnf8Uh!~i zG>sUDB!CUCqq$ewx7*_ILQs7yK*Mn`@H(0imIn9AzAACdJz{V&5hvk!UCwQteG!-++Dl@a=;aa-!iB*#pKES2#HKs_r!KV9V@4weVN6$^V z=kHk$0KWjtzW};_1N8p_=zaloUuovjx3}L28c0+(cv)rUJjjcZvN93mW|ene7#v0R zV3i90cAOm8KrS>5(gvZz(!64!z}CRA>pG%|0oGVDs%`!Ws@+q>SscijoA6$$6E})6 zA!}tcfb$YiGk28Ii-Qosa%x9WS z)_Ed=lo*-F)NmVwRvg@bjn2@h#lbINXwDLr+EK=#h&_~|V}QI4 zhh$e33wyGj255qjIS`<6pym}FKhFT0rOe5aZrmdQ8$7^$U+Z&8Fg5t)Qcm4JiK#K4 zem3#`#?EUd-E^T2zJ*zfvB8RbCrRm0aeX92_ITP!T8OlxtwS(gO9Qf&e8+LayP&l2 zN$=L)eE=2*#hAewTf_clR7OQDBu>uW#7Y3|2&mcG1NcFv=0JdE47f}&GE0EYSs9zt zZ=2AAnonOK{1-s?cL{3H01Q0hnrh3y#KsbCVB=7v&vDQoEI&kW3JKdc)`+uGegPPu9xaYHO|(i_7(q zH*t=72T*0tdZ4)0U+Mu)0hkV zqao`vx;6@hH>XoibKbrWu0WV*o+Era-r^{{f}~RGK`}651@bGUZ7l_L0x+-C1M&F*JkFqG=A?heZ}sMfqENHt9;Oz}vU61Qdr1#frkh zsx|xV*mMom+{W23O+67pev5Zlp`w37^m^u|e>fvoy@a zvPcl~enVz>X*vMg`_~_rmcnmWa|1t&wV68zltGPJuVdw(@lL0#eR~Hx<#ucn7q-S! zlruFolfWYa1H|(7wc45!hhzavNw6@HiQ#Fg0M0Q1n<(^W5_5wuTtoZEXD7T)@O27_ z&ardAiJjXkq{%P4H9!FPWT58LfgDpYv*dlOgh?TjP%t-N4%Fbc13C1QcS%k5Ho|PL z*6fHWC*i(rS!G@Gb!q@dZhr++Q}{c*Sc&!7Fx!rEPXSIaOJmJg6fFJ*!Id`}#_Gg< z>Wk7*kGFKw$!A3FMv*@pQO2rG?@ZoUHo;18HqDl8qzoEPpSOA{o>|5 zpYTgCH5DZ^tWjgqbi}y#H4M<$-lwBJeKE0b|F$=nv_CEY4T|w@bJgHj99&78wd1&e zW~1087X=PzU=X6%vRmljsi$^ab2?<;gp_2xB+SKLuNWUT522B%!F|Tkv1}5K#@?*O z)Vw2`!!>H4^XaFcBJ5kWW8!r#VpJ@yW1+EOj1AMa!QPAY{diz=XDbU;fD@Lj9@eV{ z#};lyV6Oq0^Ds0!d{$;wIVc8!CmJ&-+IyincV8w(bJbv~Y{-#;lW2%Zxf+LT|Bg&e zcpsC`K~%ue{-A~~Hi(x3n`aoJcLFxqy$S+)AFT7qcR!&KE_rj>)JS1#{O1@0KwS=M zOb;-8dqv`J2XNpgZJX8i6l_f>435RYHoe->4s8lZ_w9ix4xF?Rp#V1RI6XrnQ%A8~ zTRwLz(@KDOyLYv|%0lKdg-{lruL*3{@qRixuz7}^YN@G->oW;l1W?ljQ9YcAlr^Ih zs()TcZD9{UzLv*+d*MFc{%wD}fL~492J&r;WqLGOr&F^+Xh&tm@F^#dLk!Ow2h_y~ za?P5iE_|YmCzl!^MFoTPJ`k3mMlBZRAc>C=n+x`#Z2QJ_#?Et~rim4d@47Ua_MJSa z5Ex4nUY}lLrd#R4N!d~aJ)5vqzA?|KkoNKnkG;G0Z=`%n!DqU)WpOa)Y_S2Fc9ft- z?RL7r#s-A~gDMTyfX!*vF10wgA~!&+_?L_DO#++1BLvYsFu5qgLj$eW8z_>&vHqrW!#>z9;E!W(=*PdE%^8}^d7A^8 zHug_76t%gyc9HOi6@r#sJ^P}s`a)3yHiuuTWG#&XxNCd$*xpS}GHeb;Af+r)vOdVl z81YG9(=P@z3$g^43W{qmQg7879&}}VCz9zMsEOv4-G&#;%k}-|7-UA7%x+=$_TL*% z)K~zxxtYsbxQB`2;1;~wLQw%TbVTL#ox)@THpd1wqf5FV!87{=*4{n0zG_Jw)-%AS zpAB5zzBXhbQ$sUn{nYQydSB7AH2BF{xVw}BLbFoE;aIOe=Qe#|GI5&)U$8tFR;Et? zI5_6UcD^QpazG=~PAzDkFsiS&ksw)@5Hgw42H`?1O>qrOT0h(mo~CNR=6GO68@ttc z!aboFpy8cR@>$C?r3$F1)U!Lyn0C&gcQ0HbYVbh0ihZ>+ss0PDWmhy`6GAv}3*5C$gj)mv5 zvAYz=Qkgy?W&N9a=A)fbCIMsa8ooZLk?5@*&#^gkO*Bsl9(n5ND>twlYyZFvAA%J7 z>rCp-LND3}AI@e0TpEh#!z&XbAO&L+@jz*#@zRcc=jWrlUf%8GU$r`#%iYp8hEIuV zIG`CVV%L@;?(;+}4W&%68nCIkgA>!XL5%8SIscApgPI0r)`iSVn3_|uHeGVkHosUs zjj3M*Zhf=Ghfz=>4o={HRv7~5?f~WnVE(_@icW9?w81EoiH;C=C}b;L*7DsZ&J}mN zpy|=P0ie+`$E_Lm_+yrqEajEZ6+OQ&FB~3g?;agLH4iCfl*w%XX#(8z?NJ{L*o-kX zXWHp=!M)Cd8q?)TQ-0B#ZuzLPJqR<>7ZQhAWGsNW19U$C-5*z5Lk3{@0m56%FJRo3 z4{3WIe?~5aMQvAbNkBt6pviD9!?#z?&}+`!SlNxY;~*d$6l(;KS9= zQ0Ue&J;3k>fE=Jfx(f|_@qK2?Y~8;pw(`^_+TPI}pZr^;+ljOe5-}&Qx}X<+P;K}g z7SLqll;*!dvAl%6sY%bCOM=0(z$S?L2|+&OKuY|(FuxwFscD0DeFkTVYxtahHEm4yu=+tP|2=x54 zCGp<{pb_khmWC=Kf$^37AC7P$0^-%5gXcl*9f$~!x4#hkYA9drV(raP{&(hhI8@l2 z+N#@*%~uC3W8oY|fyOK~;F0BorykL(U{HmvdkENs&*x#@ zCh$bO=7y!iTA}dKfXx)_o=X|x&a4d=69}G9rWZ=WzVj)J)Mpu)EZJMj1ysIQ-;duP zmu^BtAUgo|g9A3Pr5gpVlATYK%gloHtj+*bfSK@pN?#%J!ed4Ype=V88JKM#XVFFt z=l?xvERC&X5Z{rZQ8rlWLe+rHOIe$&ox8Ry5DU|kGbcczmP%S3h`F*vgmJX}TS@I& zMYOMhnk()mr@mji{)YIp2no+VnOFwp-WpRgtHyy!W+wbxEBMWr87Nnt$+bUhKft+) zlLZ6<(g2HAiHAJ3Ri>dzJ^ef-MdU#cNJTgCRo3V<_U5^HGj*`X$Ge@V0h+YXL7k~- z$7`7yTFBJQVpfF7WzepnmB&>CMo@17hsM;LoW&W-L@eo?T9e5^!_rM3$;dJTHMH!r zGR6gT#zkXhq{@`Kl^($XfwAd&0QmA)g#hdji-q04W9$ubP(*%b<7Pa8WN#!m@~JFe zqZ3nJB$=Ii-f@Mz^NJz>Ta0hs-HaCN$dRB*G@`3R|0 z_T~P;p#|HToY|ojR68WF0i|Xqyc(#v;;4O=sd99@vDH%sQ8}sWVAi>ZO zV{wK`+KSibxD*wIbQj7FD=P1A7O2|lqhg*io0u~+^uBCQJN@n2xVulMB5X_@ITc!TO0jJ# z*%;x7F+kJ<^uI)cdH}F@mzK(yDE(&Q48Y|s&7>3<*u?I5ihv46hpQZ?+MI&n;VtDb zNq5;5thVUNalvySiW^o|nz*DIx zRKSg*NZdfpyQ246D(Vr2Cc2z;z9{$?bLI|dC#)kTtu{vOSQ_hGTCuR9rs@O+&~!lk zXTI9mJ3D_{M)F5zZ}xA4l%~)vr@Y9+wU`f379+D-91^O>7z&SBk8%V$m3uoCCC}Isy+l26}k+C+r&J$XyQ`3%X0UM|f(8qS*fvE|g zhFK$Iv&xnbJL5)eg^?lMv}DWZTx>@=hc7xVus5W0vUi^*B0z1+Iy+k61VCdctWcX1 z)!+Jj<;{T2z52hv~ z|AlP=ZU}7T_@Y@%P1E{%UlwQSunvNI=8J(E*2b+dFtwi-{66hJ230F!1c1)5P#ppE ztiZzZl@AsIo0+p$1wF*r9M)3_R;VdUphF{|X2?3M2!s-Hrk_(2k~lfA5#oB;t!l?= zQ>p=*Z2(O+6ZZf(7<(d8!7%B-cFSkp(ob&_O-2Cgqt*+>(Sa)z=0(DWjcCn2K+L!r zBZJzt><|fyD2$#~?SRY&KxdQUu;pN2$(oM(PcqSu`32Af$Usi`UAnhOOlzD!7Y)=z zPpiC0*@+2iASW-FE?f@r_`9Nb6;{D~Y|bE7@Mb%Tg-$NEYqa^cV;s<^4WSiK@$_?$ zf{Uyhs@B7?Ca~e}(?HF;1D%;(H}l@icQ`?pw{R0HO0bF)tLg+ewT|x?4HaPH^msae z?!*1W4nX~oYEy<=1a8lh6-(X$>nlpoK1T3*H~@M53{?aHl`gALzY|w`Vet^Vt_VtT zz&+``%b!v-pJB|uyBvVr>Y+rQ@vw1-#xohuPSJOaE12*$gj5y7;v2V^i=DG=$(!SEokdGLDEBc+M=Vu^4dX6^zylNQ(~BG*2i zSvw3VB~<_$!S<*rE7_*MQ4rF)|CCOrtYkO-h2QympU{&J20h{#!4j<06Ua!ww zgG;_V@N^XIfG7IND`z|2ti zTt!`-VDX^6Xw05|MPLJZw-eb0XdY#0ICG$ZomN}3J+N6N)QYCZs(vZk8(9=Z!!KuQ zG;l+!Z6w=qS_UV8nH~T>JecuaPt>^uYxoUt_kwZu2GIRDm0|SVP{_4wYTM-l53IQ5 zVBZ^GBpuQ-Hh4E#zv~~KWNg+%s|)U~bSLDlbzb|}{mlC3?@pZsvbUMwH9K58 z2ZqeF6J-%HJgLFXWRtRbW?~p?D91mxxcA(&;m#q{*qY7abxrc?K|u3J$U$K3-G*hm z*?VsByjx98I~FXA9MF6M(5DABz5iL~7xDiExZeTb8-V=F{0(6K^1^(W*nuqZekNce z&e;Su%Fk3AYHSq6Uc{Y&&6?Y9661ljlk=6TsF&ixemq@evkoiuh5m1gT+o;`#=IJ> z>>Z?}kNB7dXr2T#G_70Hj+NP(H2@6?o4O^y#tE^fXTL*Be?Q60EcJ)cgT3Hvls@(K;Ah4G#2zu|ZKBdlq2h%`4FWg^sBH zi?I=5wY)=8={@qcbWXYl1!;v9ydw*P^DZl5=_mx5rYbETavO*Na)(J?48uN~Cd2`i z+GtQTB3s;B5zq(~+IFlnZDlRZGXOHPynqKoa@fBL-I^_HYZ_D2jtZa&{Co#deW&p6?0Noz|`t8zD-Cxd90Y4pc!_|k2nFYsRVWL)^Nrl72{GkQ_7{r1L zc)%!*Py7oSU)eGwh(OV#ll=cmRcXvx$~n8Eyg;ZS2cUzj(~7f!M1^wjv*kMNn6VG2 zi1IaHvjSVQ0z;$iN$7#-fP#dNo=~t|ZA}9;?GVh2VJu9~Kn<&%A(l2m!y2MY0yaS4 z>LhM11qC<9*w7yU`o|Ry(;c9@yILC)Tsu0*L=H}piOOfONrl6)SUC7Y`QmAk>bn<@ z;+h-)Qkk-nZQZ;chlHzS24ob`K(eB(oFf+pcnDm2&|yzfyPevx{#f8$G_Ag7MTQ2} zVQ94X#x>?Y_ch)K$Tm>ZB8+Rfj?7G7f*9b1z=54HPKa z0RA{YV?5~Te37X6^sG$)H)0m3jLk8D4Wc`L>VjC^;I)MR$Is{?=6gEES>MMWbA zeaeaox+_G|5UQCtV9`yb6vU{i$gHi2Zb0;t3`i{j5dvA__1xu-vmNUJ8)$%LYo>20$)8|)kkwBix;_!h*q?n0h1+rchyvh&jA39UFf$U+gugL4$Urt~k$o-Txb*^j zzOE#yLET-7ihcmP8vy;49KOM)xzMbQFk4ldJ0@>Hr1=0%V2Uq@HmDG^^tMyjT?GFP80?01{LJn`fR;ZLjih zIAmT>T(_pRbhl%L1t+9-d|eE2W+oH@_eoHX*Ue;!RmRMqf@QMKsW9{Y_=V-$wSJqw z0q9@u)&1Lj1;O~BV1;Bt{wR^USep^hc*X`%6b;|KeMGPti2Xzt1I}_A3F=D zsv-z4u#;@f0HJ=&4LE%Vn!P(fgBA!axYQ`JHgsr3!FvIlR!g%EpaIdoEn2xBacEhc zMPr>%WYhka9xXtA3e+@Z;fov|9K^1r&(xmHJDDPL)0Joib$pZo8o97#ZQ5ZG@ih*X zrwhmx6w}~RQ|2ohDD5E*Dquzeo2;yiFKkzy3L65ODNy!r zHir;_aPZH?=+x9u-lW(zHd|DX@Ii^pn;KyySNJ~7y+YLCJ0J5mnWY6GEmdl zniB#UOm#C-I4{~9^l1mH(JtAxRR9>7eyR={6ub5Cegily8(&{yLw(J6>W+fYl50~D zF>18Y0fQl?`Xw|yKu6I&0lD~`P4zVm*h~bV%zS2U1V?b~;Kp-5=q(<=7q|m($A=mj z*nrJC(}AXZRvWlk3}C31-F*_!EPf`agnl8o80{0dbpn*^U1Mt6QDJ8Kkzs@Y03ZNK zL_t(U&5Z17BI(7%XF{dmGfO*3L&TaKH7Ya9`j+oM?kj$!|Mo?lK-LTQg$^lS>r>UW zIVi9(++u>f;_v`u@9y`*E#0@H)eW6`F1SHK*|t!;3?+FbmVzRLOa!_Cn{^)z&R`eX zF%D>AEzJnbe|D^9jfnmSwB&t7QE;YNBY^I+;kzGYV&>Q-wBs-v*c{M=ni%HMlxfY# z)@;qGnRu0^9+7G_HIo}@Hp*i}yZc%PWHa^VMg0Ecf_>(TZLQ7t7Un3c4;lc2Nsfgp z4&Oa%WnFC%`65_sD<`P#;fp5-F_3(7j3C`yCsZ)ZL`tlt9v&s!+lar}VKg!5vmsV1H$lz`PyNHfSF zoCY&E7ubYh6Wl#bNtacjXOfd2L= zs_!J)7ks3Mc}Rf~#l#0(ebCo91z^KX8-rh#O>WfWXL)06o{Y>v)!E)1OB0!zAxZyX z$s|POTb7oR)1?8MmG@_)vk&baPct-Y3GQu*YgnOhw1PvO-FakgHKykD%#5$oppX2k z6wa%5HR*$Ca$z2A<$mJQf+ACtv;XZEB=9vg);WHMPO0v10P^Xm;QTFhZ8qI@Jg_wl z+mqlA11LVD>_0GnzKS8v6$T{~N&m1JL~ofc_28{g)T-Ben&gz4jf;08RYf)z_pB zH4A9(zRi1Zcimcl8I&v)+IDsE_BEJfM$tq1cIK*dkDvxeO2?v5oK^H|7`w1Vf#$p5 z8g6tiYirt3#p-Fv-s@gTVDrHE=1Yh*X@2oKt0GD-2;2Rv3uwnd0F89c{t&>1*UKn? zW;ES|^COTM!7CXk=D=pjV3Iw3Ua&8!!`{3>)?i{o_c!vo~<2vD4$;_9K18HsRus3Zy@IAqn7zJK>##gklPsqvq|2~RPkvV z1rIZWPeH^WJJ+@HQj+5ji_o{bPW#){+yLun32CYBm+O!U_X(#MsGR_V;`D}qKwalq zHUbQ`38AQUpakC9vG8_>x+Lc4O@jk8G{9V18d2;mfO*$gFv11I)2W0jJSphIkFf$X|q}jlRLF}b{eUEJ6 zvRa!k%5MPh8(=VgvGT^4@aP7y<$r-+phsqqhz1-H_^u z_5@&Orf2x~RX}4GxxQnqNsyU`qb+Q!+G0Et$i%No_hd^$DL{rV{4`_CuKA(#d>G22 zIi`6Oe4(DHRcoN;uz-da0c%E+9MEuvriLX}Oto<9VjN?ER;(Z{G}H&*`uzhi`~jf< zc)`AJuR`oKZ;W+}O-x6H8Khx^7XSukd>KqHot47iQ*3^QTY^%I_WCHr+C=>5i_R7fD3icTvIgh(6RY6`?VR1hj~DFw+Y9#n za`#Va+K`A8xHn^i{(lC@^Z@-Qpx5G|7`ePCACdp(4cLqYe2Vwiru3v2+jBpI@yzU; z8N`cP4Qv1AsQ?Ywv{hos#bmVR30zHE(>wB^b;*)cm-TQl?e8dGx^ zW=3{2anU@{rcEPtE4bxAlwMETsxZaSJi8c6C1URSO#nmKjeDzw?vJmt3Czuxn>~T$ zI!x!cySHdMAoxhG<$<}O!Ea$~6#Q?%W-J&7Koe@Nl7cX2YH*EVh^gHh&5Tr3dupS= zrif*Yt&s#x+=oe~X7{nR!UrN|Auze_D35*)uxZ^-F9$TCqp8a~n^YmannzRM^R}ea z1eih1Rskj&oz|LisC<@nDJTf-x}QEJ_1ha{4zA^!1}E5uAIu!nyk_gH%}&#~%j#UT zLhI5{u3HEE;_Mh4M1;0PhM^^V$9UJ1^(w;l2LSF76h6$DREB)02jI+2$QY`HkIe^Q z@)lELXmUU^*6D=XK8qYttq5pH0X3Kl3f98qGEmb1&BoK!r;lPQ_6L+oz#RiUBk3j> z(`8wYOqyu4blO9Y)%?VclBbXMqjy z=tq75`wg+>+x`Zi{{=Ar1wj7*bpN<|8~DeI;CaGT@V4V_X1=tRf2(e zus5HE8s2{Qss*kDXi|Z2G)0A=AWZ8{XJ%Ya!aE8W-X=x3j59dxIac;ZG!mZht%i4I zwz_#(rHON?$)4d8&zv(gD0GWvKKGV>+T}2!W=3IUs84Aqkbnjz0L?}dNMmY@FtI$$ z7^%2^N9N`ZFofD0zhm!)RIg&ZV4vxsOz}Ob+x_VE7z5DtK9y#Zf6)+tmyHYgTPqFA zS{m;2yA&6%mJ`;r{`^ zFW>h4$EBg@$D3o`oN1={0@wcCyY}zV^WOv580SLXiN%_GMMcKuO@R$5KOh^y4A4E- zrrBv>jv{iF)!LXuB*yeqYx^F*hix6ou7CI2@MtN)BjJ&SZ#21+&yrKJ_gxW*NC7oBh>YFdj01V5hI>a*!rO)P5(751 zVfQwGrd9;28HwW6$2F&DbTE7<@P$u4d*hcIo6=D56jRdx&I*8rGc&w{iHqlT9@v-) ztHCR^URYAdyPOJL8dSy$zL2TW&Oz{^^xLsD_{ViY(SKZxjrsPi-!{2{#||lz7ZUH; zLy2Bdx`UL0%ACE2EXutfunDG>EN>B6EMH5b_&n`$i!`@yVg-;Rz~t^41-PV%@2$cHgu5Q}W_axkR{{=zMrk9$gUuvR2p6tVGxzo!Dq8cI zaZk(#22c}r_TLWJ&_79m)@V`V5eM=|&)c|k7-wukyK>~Dhc^Z`!sjX2BG{W}w+<36 zATRmK*c&@<7yj0aO~t|c%7A9ckk}m1$nQ6D?*`7+*wpGhC%iRK^E99dtV^H17OAE& z;XJ66b|0WX7^RKs$Z6q`12UG|fOwAgw6iDQ_HBPVQ%rMnMZ}>WH>9M(v)obd9ua}i z1LBT@nt`QUY!c>!cM|gmh#<6a4_<7KDNVmv6efDIhLSIU=phAE77{mbQ<=q@CoC)% zXglR7r}3_*t**UT7Btcw;kmq&axJl~J80Hm-r`>iZ%usfAuz)Vdu8EoRQ}~H+DmfM$^9ou<_5)Ggm}hXwPP1Fb61MS5Ja7Hkk_X8^_|B$R2O^zWlHb zn4Mn8&~R2}%<^NUhr(O=149#m&5ZZ&i!&r>fMyin$&My3o<|=7)YNKb4#LXJ9bHpx z+_?A#9_#uF=kGrr54iUc%qrFxmZmly2&$XS~;AGUVu&ch3HR(sWX4%?Kr6JUC-f8(@L|GtUg&LwG5SUuePD z+yLO)w|jSvow2;_dq`i+F9&|`!`IuGv=VIwZ2T-Ye)?Jq7|a_ZYY{*WUM%A0Zh9n` z8dvD;j4Sunrdb2nfa3TauxaM}{f@w97KLzW{JyP%@Bt$`3hRW((v1L{ehP)X*MS1i zgazs|butykld@h$I%ltrX?FrN8dG!O=vfHsab21lIMF`i7D~E%fb;GAqq@Icy$yf| zHx-eMXU0NMbIWLF1Tq~!{{a92*bqxY4QEPrE(0{=<$77i6Vc6iV+EE*OFiL%qYn32 z(7K`w12%8O*c2JmD0A>WYZlP~9Lsl3I`HCp)a(-~_oHrT`F7xj0TL2*GxRCGau@Ad zUWQJ7E3gDM&w#`;U3?*F8oFq10K;$3;QY&d?f&hV9Uo~8LDls;ONBh4BhJnf0f5X0 zK+yc*WDa*69oIP_uxjV5pxG{d@{HgKo6t{96N*d?*E&diD%H{IsNL# z`k}ooL;^HJN9x}w;^mKDh|8eSX5R|Gg2K&Rw{a%SMJr55=w=}4;! zZKo`(?csubLiC0TwKX6VQAkTay$dTt{LY2;>^=uHJk^xd&9DXg3PGbLxM!XLHe)Qq zS+|EnVr(M78GH?g|JwaH|0wv|bw?SlYg0>0JyEX|1Wye3F*`7A7Ju%8&A-3Eww^po zlqC4WhShE_SCB#^XlSl+>DVr^Fp416|ridDYZhT z+?yL?b3W!KGqa?+aN{9Zn;igc04Nr%j5#O(#tzU8qB1f402tp2-u>fQ8*h*aD1glpkbx6hnGT@Cbf(tT z*rb{u>v#L9|MhIH-fr=>%nsp)0ULY0A;+&h0GrMamw-_%(qi zxuG|!mzu-WfMT7kgQD)(B@T^zU$!#P!9R8xLsE zy2S;3-Hr83O%(0(%ueu-LZf#{J#|h75REIM?X0&_2sJff^4|~8ANmBM@hLT;J2N5m zbxm(D@`%eTF-as0O2nA!+q?r~Q|pd8GwVcSx-@$~Ln`-RdsAh|)~U$Wc$E!)KK-(H zJR9WYsiqH60NmxTOmjwF@QDi!p9VL$U_9`)c({ITR<=zHoi{%K^gpisAO8(N|K&|F z@2o?|0~_N3_G(JRsdybt@7S1rNGwgzbQx?308X*mdG%oM9Z!*|`F0?Zbv@yQHy_e6 zAS3!f@kV;18XFD(&XgU;3PV$4aqu8u zM)hYBsU{RMpYL!45Mv;>#9i#b`c6Ven(+yFfb$2y`mt#5u7J4v1JHe^4k_~m0H3)r zCRA3Vsg)?(Ng*J10R5-`Spqc#1TZk27jAugl+~`VT^23ec8G<+6bgiiu01!kU28}= zaVKNSGL4r6Hj114|BQ=v*Od#fYED$6HoRd~skSBlT5qtz?`I zS*<8cSoZ)n(!rbS)r4R6mzmiGGoy&-W!+2_%Ku##@m0I9-xUqXYYs)k1Go+;?WM6hbHP|0a6$yA8YY#4Qt{{0fTpHS+{GV&j~l2V z)Jm~#O|Xmibr8E$0G7=rbxHPH^l$2Dk~^dIM$9az2PFniSQ>68-Yt)i(It9F$>xip zt291D-H-qJyAMbG(TAf}mVS@e(gU0KpW}N4=HusA&mhU3NmUqu%2Ntp3|?^0UAS@O z5gWh4)=_gzoey!<4kiM@@s*hxOuwf-Lsg*cB!*Px){tm)$<-)_26@5hA) zbo1jF&V(XBK=a5;We4gSIo@Mz+G>oC&!Ix&$aoCc`&l;x9%Z@ zQZMi#dcBDVz6wf&bv{IWv(B;c4EThdL5r*mVW&{aEdkAw zfa&9xq_Hw3kolk9mhoSGYlZIr@xVqT_jZ5wl}v$=9JFmXvxtpjclV~DMFOEux^+Jy zfw&Jt>70Z^$BKoAr?G^aAXu6xT-L6lA*HxVDqzNxSl<=PzOULBs#XwFgP^enHsRb2 zzw0{@f_m3wii6jsv3s@;Gf9RfFf%Ypv$-(^#lt<96#SL`U>ol|V%1V-Z1tK$y5 zDteId`qhV|x_=P8{yv7I27p8HBqr;0WtlhiW!?bs`_sPjfHyA$~2e zbFE(kBKIfJAF`dorw@k#DYS9y@m1&2(9f+JSDt!))QnA+2t`%AinF;jl`~Ed+Cfl2 zvH_ZT_c^#UAvXCo!OW3>W+=_}DLzAK_8;nJ*{8`+0&Y1o`>-|bI^ftW*MkQa15*Rn=hI*)e>d#4xrAkhTw}Z< zrp5{Jz6&I(OjH!0n4HR(ng=sYPn$)}WbvjQcrQBx+_-ryDQyqrsl zY+h{>rsk@dcDG>wRT&N-(B1NyAMfq|Jx@Ozy3u;|JCn6QG8bKC(ucslWhTsd$n>NkYM@u$3eha`Dm>V6EsHqOlGF-ykC2?NxRdw zJJjQuIo7qozlrFFi2hCV`8~E>2+T$I=_{o|60t1*PBJ&)s1x#QoD${}iMj`tPEP=h z8~Z)^y7P9H*^%L3@+7(wqJ5NZAYWZLN9S8meL3a2VP*9;Vt~Ta!HnewjsrEKdp0y9 zBl|OTqN1sr0-7hcGT6gPQ;)4)Wi9Nq`H?fyxA$!p=;M1x{q$id{O(2j@K-O|7Xq=$`$D`sfuz2V?zgaZeBvzR7C1eumCQq zsY4=3w-&~RrK0d2tjy4=KndqT=gY`1PH)0h^`yC?6=I4vCAitk23k`0_lJWhJ|MzT z_=|}CFA@LQ=ht-qO@#l`gPS27MSb}<`(9{KgG|kUb{^Q!5QbuWye^D?OzOjI5_izs zC&gvl_|@mqkWuy2u6uUq$%z4^$lgqU3Kd}8Ihzx}rEP|rt|Crgj@^d30h+DxO{^{!`bhcK3eHyvh8&yF zOX~FxBK})n{!M>~TpQ~Y+w~{)?hm5(-$&Kqup_u%)8;ha0vl2Gfj|RU`+<^`}qH4Q17S7jr+p)3-10UgOX-pc%@@ zy)KRWO@L2`CP%Ef?q*hpZ(vd1D9t!nCDUgC8=jVOb0wH&05miAa+x&JgJrDd=KZ}K z&{#>pvZCp&fQ@#XWNdT|*c?XHM1W?GV{Zz?v>j+4U?aUrD0`+pY{UQd;Kp~f?tYI6 z#GOn4jalo4h3*oqk zz^j3=;WUYeGuoP|s4Zn!n(6_Kn8(^~^_{!fJTt=-i{^>E(7fJB001BWNkl&FnCF&bK6vXNBKl8{2b?ec?*2pM{+Hp2KHp{l zNs_Jck9DtpUB7!U!-GKIk58-^)qjf_8(?~%3Ch70rBU5E`G_U~@xW48FTh`cOX7@fY(MHbSdv-4xQpjbP={;p+=;fK37fnM= zZR0x~&{)7GFg8(@%~n%`lB0RMHr;w;3HWDhw?HA`_OCu96@=_wzRy(WzYuyziS-@` zS>MrHhKR;#^}03$;yJ^a0GjY3qD8~d=V{uwvH_Y(O->MpOh&)alhu6L$N|BL0)m>U zi6SN!vT<0z=H$=t)&^=?Zj=BlJ7+6a20A|95`n97Kx_#a^2YshQ21E8b~{rKae&Z6 z>Q~?CoBty~&F}I1>$guT{(HZ+`40-cp$1@sKl&veff^5ToCi@vWxz%oTBvQsr)Ote zXxJITPH2FpHcR8_VH}+&?>dn<3YGemz_+{4Z9#^^p1@`jdZOvLTnx{|3Bnb*{P+BE z{-pqoEYsG)d0LXakug>7dmXp@-6!liQHMO|6N!n)u?Hca5!`e?y=Y(e4}bhteb>6z z=&b?(83ZP<$ZXb3ypqOBON&~IES&azL zSee3CN)A@~xV5y)c&7nPU|m%5?<5)cWrLY;Vr-&$^?092=!s8W3GLd~d$W>({q&3t z{vyKv*XP%C|MFE*e^H-k?B}QpYxmXX+Hlu{VPNd&?ckMvKRr+iJUa6NU_&G00|Byp z#Z$X31Z>`gVAwQxjBxeR3dK8Z)ni zcwVb`seO-|02^tXy!D$A*=b}A*c`s&ND0sZ+<=Jw<8g!UTIif_vG8l`A2kT}_27oP zx36@O$-Pb_^?t-m>rfQbIXP5MeMXi>i0#Q_gBE(ahKqq=a@eBB`P zHxd0$4bL03OPD`E)ARyJ-OdKYvh@l=3XvmX;ZS$w^p#Kqt4tEtyG&mfsJOR+O-Q)BPyEA zhLa(GCNMabwtfpSRexGPR11%3zW-ALHm97WMW3gBclqUk$Z!8|-*SO|`mfh#Y`egJ z_PI99L@!_M=>Fa}zr=^Y9nq&3<^x+^I~Gc(Uh9mSz2 z)$?diPoRbPbS2cDzzPOK^$0+7qV(K*2rof|nRF8H0A{)dUaksgqU2!S5m#^q+%(3f z8gN78kIf#ukk_!mzx%cdL(=ZYClUX{cm4jG2R1LF*P94``eS%Fe!Ee17>L6V+Tlgo zG@%RlZ!*R9+I1<@k^m>-=sMAA!5MoW_HhrE!tl`-1kg!=o6E71D6oU$LCv2ue*FpXf&V@V3wte^zxGN36XOwRCh?W$xaf-3+1 zJ%)bVUtZ(p-@an%7tzbJG98Hdj~>``9ntF#;`iTt(r+k<_%-U;M9Iow69d7GW!%7T z3POIDJ-N0k3n(Uiq`CxagMIHKx}Sp>oE)HO*Os8>^(T@0bJV54i^z3?r777p+f_B7 zNs%XqPGxIuSvO;YQ5|^DuOTA-iwOVl;O6%jmhzf5-2K@D8=qst_#44tR3BzHc5seN zRWdcc&y&ifX@KUYWKPg?MSRK+z(#|BiGSOYu?bjP73OVPfrT3a8sW-oi`%^E<;yjl zXJ(wJtD9u0H!pK3tBXpxxzd%9uwD3~{G}i>eqRC`XBE}C9{hP@B50U#PQTJa& z_`lfb{`-IYvEa*H}=nzBe zmMdI2TsD9VtFm4`;9in?;O(k^<57Zr^w&724n#jMKefM!x?jZfBGAh>$Ry(TpX2Me zAFpHMLrm@`RuA^MI1SL;oSsQM#^T&OfQb;nRKnOW&Trq`j+TTxgQ>an9BLqVG92hZ zO=L;rL5&A9AOCOSF&qV>ngy)dbT*_@4WN))_6THWBzyJIw-C-#AQM}h5a7iNKNTW41D-<)c1#RA{+&o z0^RgSYH<#uHVqvZZnBV7yY6+24#30_@oysce~I|NJ*WvRj%RH64{w8g3HX?=7qn?a zMV0VB&1#yt4L?ezW~S_W6=S2Camv?P`?|8y$qG50D7O2E>zy_#54(b3TgbCjkjH29tTWd!*QZ8op4fM|K?~w=lUCt-T{L5{;U7~>H7Q_{*PB4_PSTx z^`+e$5`_D*aNyUFOl;;xq=>x|+imBo%Y&N;WcWH3aw2)yO##jl0HVeCa``T6flUhB zTsApau`Yp~vHB#}18OFRZISFbY>+;Ci)GN0MLy`BYPIcJM3h8LEcrl>B*9EWvG)Tu z^2{mpW!$em--iF}fepM$c@QS?IXQ5@2=3RYO#?&;n^EeQmGIC&%X3&87L71{g%qpM zht`-`3T%?#c_FX?(yYxb57S&9U-2$tQ9>zq=dEdAZhRQZb)!**d_U=#8n`(D$dFz6 zblMHI>sG)m=vumm*FW+WRQ zT2E>wc3;LO%(rTUIi!Dz{RS(6O$1!Td*h1`*P|4KD=Kh(ms^%%Z=C<$1z_XDQi08J zG-YnuwX;JaO3)aGktt`=@-%G)rY4(e-YeYKJ@hQ&y6<> z8B$c{jm^20nMvD-S}f>Ibp^1Am>UvBe``Fk(Z{L;P_=7QP{ZZMH3ZN^ zM=KX9q##86xUT{oX1dMZaeziQAU(^u*AiuI*M6oaOI5;SZs;4u?&VpUj__f^=O-%T z29RW2bbp?t&IuB(s)Wr!&eyf8DqtgRLJ0E>0L0OR#aqSLU|OiOMh^#11T=Ms?|q?M z6oQ(v?`071b23E5W2ID725xy5ZVqM5$}xL9@i?Anu9DzsV8CqzmRkD=|&+x zM@Gez#XhvzU%b?%g0MAy4KubYhh36l9l>LZ&BBS62~L2V;c=SeISiXo7gw|>shX+1 zE)n$-gmAPmS&R-R4r<2xVg0I1KY)VYwe?yCY&fop3If$A05;6Aa>Q!bON9u^3iN{y;m7idYQ-IMi|_n zZ6kARTxh+3@v+9(te6a?e$=s{QB&C>Xj59TL&6luNbuqmu!+J;Fe_0eIpf|g2Q&B) zu_xs3F_))+l#UGyCdYaT+b%9u#3|VVofFSXT-i*RnA;jM$IKkIZUi_%pl@IW7lfiF zxm}oNegJz}-8Nh)$6`ZpGpF}s`G9S5YI5+I71Sk6b8VR8N*y5f5RJVlKdlfa1ozt2 zt_+xga={TeQQ;*GYV?;`Hezfka-Fl;(xhwoCIvSaFJvXcpm8U zk~wTkJqERbxe3X`6gS5-?LaX$(b8b!dukH~Ri)W-wKHofY-fR)6u{XQ)NlsabON-n z@inwvptwx5F*apm&I;Is@!GQW>?#(i%~_RRM;|Gz(v4)UjKRiW#uSX?b?yv`!iTQp zCb4Ai{+jN$`gc+utQ1!ka>46ZufgB1!lx|5s2Zj-fDNU?n8_+BCG5Ax_MWnJL8?9T z^06vWWS(PfwgELc3DC(3)1i_OdZJ$E#&x0uoSJywDo|O=kTqaaCp&{_s3@vrg8e-e zTKd8?ILJYO`-9ILeU+p;FCQU!hC+t)u_~?fb2$Stc)@csOUi7M#q`K<6^n5kfQ`_% z$=NaUbbjZGpk$Ay$K=y!KvTfjl!TCS&%+E5eQ#<(DWo&`bQl56P)XrKQvuj~*y~#; zOTvt&c_N!LISJR;nxM5y*d48yeYO%M*-_<^4l|L;mnmpcySDW(a}R6)qL)%XW1|3T zuO)8eLKJOE2{4lrIiBRpuze1QUfR&yVfDUNqU%J!a4R>@ZMsP^CUpSX>FR*$&yxDez-T%IWtyhDbkmrIMkHNlUd^BO8jWa z`h2zZR?a_*1(gP=sguG5|E2`aE!8&V%)MsB39DMuvb_SvqFdH^FQT8+tO_;KA2DKR zE^yW^2JK7cl@nkDWlYN?w6tJBg)x2~Zei8}km3SSGBJsyVwyI~e0uAJ37`?$G+f1v zQLJy?fX$(oW?Kf(A{kNx$V~EWcAO^}8jN5|xZaT(jPG&L zc?$(fxv9|BoEFRQcL{OAdJa(uU}IsHZfvm-C33@H#4_vyRPkQz#LXf=GXq?CF3SMx zLP<;5FF8l=<1Ne@Gy#9*2`w--R#LIFpr`JPBGZ2;$Pj}iqAaOX>S+CW(o0tc^0Z{?xp}D9lsLO!3#c< zQKFvJ*wKH7{A*@EmjM`;utb|oEvp~JE7XF zqe*QK%_Q|=VQ8u3dY?AHR${R%jSSWnwOdeMp_=Mx;KnjG$=Fo7kkY8EUF+=tQ+6d{ zVjzGG#W^%|+_4gK2YLx?z(g+)qhI5Y0%~+6`~Kp&D4+h>B?Nm@GDBS!g9ZcFEUDzO z@LkST?dTRX5FGy5*}{(z%Y%7){$?{igiGKwa80szdY=i;Hy#H~#Rqu-sM+FrpFYr# zR<6YRqJ<{_4rF+$i^Eb@*SkCIn_43}Q7&7b=fCNE?2QCc{Ju{3os?md5qhF2pjoo{ zV*SVHzmHy!Q{F!0(1D3xW45r><7HRIW~F)a!lm#HxPf63OI}x&u1}PcVK7Gq5XB55 zBvn3O{A`WQlANC+Q9{f8Ls828aKKNI0Ud6!ci^`OGO5Hv)vPk<4@Iq zWJtt_UBSy z#EJLhJgAxE{p8BabtPE=$k`;XM}M}C#vB`pb8VQvU>p`Qdb35Wsc;ZY8I)L9kjLkD z3Z!U2BgHZ`sF6z)MDF7sb1}eUGC<*ujMlq~MH@}HA>PNzp@)QG_JKS(*v@j|H((0P zj@+5AFHhII?9fb21+{dzU=Z9g55`%b26pR$Qae~vrkneFEO!He6^Qg}ULnkkIBEDP z(aWuY&6+7f!JBgiC~(a9By)M@L3CIUGj#o%1Izu%H+eP3!7%hdZ0V={3v z?Y-pSc9=bKnI@Niu~W2*d;-5qtxyrq6EbR~TV+us8{9KEfiv zQwI;COXqnQanN>M0IbX=bRrJWTb;1Y{!2y)_LgkSQkDnH4*S`Sy3;Sf#DTG)2LhWf zru8e^P0it)ttp_B1z?G=m8B`EMG4sgCc5H^XWrXtcOla}5i=L5b3~q9nI_my0Sb?g zcQnmo;W3QFidmU}A<`@iPx4_bU}cVJV%+-bF^n$E0~!}VpX|HL`v92>Ff|2d5eaN$ z9!&^M4IRKck%M5YlB-hLQNWWbLO7P&dN}IJfej60G%J(pkPQ@dwEhavtYvvJCX1ri z>iO%zv^&pdzvNCPfK6+Bdm2l$2prRwg<@8y3khIiJQtji@lUu z2K!op42Fc+-vC@)JeG(%WUuwR28*zo}JzV^y8 z%D@K($Me_DjZHFHR8GlseDJk^4I3S~ORVn{D(T^LQcjyB0x>F-Wc6Wk31((1;DMD> zy~n=D2CxZhRwNNyj7__)zgA`mAj?Ul#hnoF z6Kqc;lUZp^cm!k;xinRQvlOto(eXM}f{_ZgYYiEzBeqWVoy(Qs4L-w?shO+FfPrtV zpR@NfCSeR6yuMFe5L{EKyfyv*FyOl!TpXF|il0d0%pI<+Q~~ zF*ma9LdQg(F77QQh5L}x|E>trU8ani3%trrfsF+~%&yofyre-5QJJpH9&FNH>vYWv z1^OBzW0UH(+m4C~`gb<37jEyR-ZNTPc6%iTP`4xGJo*Ln&c_)wkx7tWh)kHrOIAR z8qBN>FYy7NXKRMWve!+pJQE0G4&-a<#ql)#ns&|Gs}jIN!Md={werjn3)G>{ud(uD z))>F;!j5vFaQGQA@BuSp3l%(}&hB=8!!`*!LUvZ(ZxHVb00(`o-jG;KV`$2P?1wr^ zt+1?sjQ)Nqu$jw_y*QxJ09UgtK)Py4mt*hE#MHphY`vlf#>TH<-AE|W(Ypbg#@rOM zA#$VE-^CJgz7}N&w{+*6b*-LgHTBT64jJKW7Xl}N>1s^P8ps}UZUO}E!e+yM12U?l zTxxSGY*6ym1_T?tkO6E?x9F1N|Alwdq@Ik?cgd-?2KsN01TnecuQhipyP}!kPsfA0 zR~M2IVRrOxz@`D43C=+V(5SO4tSTw5ZVms-oQ(nbd-;~FV6JwklVbt&U?#;jt^G{z z=UKJ@HUX0aaW5T~3cqtw#E%qo#}vkIWndFP!&A|{OM2>y02|GyL~M+1TcE>BWK=*k zK(i@hLlW2o)z>lirU9FFE!ll_Ws_!V^tyo?>r1#3#kV;DzXx1VsR$>2AJnCNKP^Wi zV4K-lXuEOQPd8Wp458(&+Bz1Jt&G>16X13eAA+QJ{ z>U?DsbX$uR>-GIi6Smqeh@lR#(LuZqqj=v(gr|aThNb6i0vrDRwwH>S)p#VTf+4cX z8e}*4OsfJIAts$GlX<(t0Zhs7_?l)Qflc?q*uyq-S8l+jT^6`t1!y>CYCwj6wK{M+ zamIDjheZo3oo)wYR+P*~jY8eX*nBfy@8_C%2G}rS#wCE85cc_ajqD-cMo3cYnl;w5 z&+Bj3Eah(3>XiuNIHk+6t!9!i`Y)Z4@VgYy)Np@$0hsRE0~r58r*o|W>SVt)4#2W0eK3bnH%qph{4poLC)KnY^2w8 zoF2{^7+}Us1}=CD*(OkipCCGCw=1z!Q;Ga!>(|JwV{U94s43ZzWKXGZ-gUfb9KeC>&DPb&BYv_ea%Rs}R=WM~19sj--=6iM)L_XAFOzKwm305+j3^589BOnx| z*E|U{Z{XI=92-&z{vIr%%LB#tP-vfZI!lgIT;{Bhd#{=;L3IEp!P*4S;ot@Pi0C7d zios&T<@pn})$1uY4Se#rOtNV=wtNe~0Mix(GPD$dnuNa0+}JfhbIk2-32Z{+O95oU z&IiQF!wuNn3(!C%11CdFyy5Z?K!)%fHW0Gcn#wcU1lY)y3L)^J1p20+#{Cp{K(p~s z`p)!o_NdI@Qja~CQMzVBNVI?r!NAaVA*5xtwdz zLhhVkXw(+QE8Yva^IGJhd|9{atDxvL-X!0CLcZVEtu;6i=<}RGlt?V*^-b=#a(o6? z#};)!Gr*^iPOxg}xS*V8l8aIr4c*9V=1z(%`bbHj6M9HF&)&#pnK~CGurr;keBy_B zEn|m_LQIJBWuQV!S4#N35koT!_sM{9V6mMm001BWNklCK9mL!p^2#+nfuXv!QAVh=1u&WNtjSpRQ-BjDgA=bE&fTrUWV{rt) zGtV^Bhq2;yCb}>Q0X(P6u#spcc~Kzq&1vYQ&&9$G;AHjd0Bk4-^M$;&zTSJX@ikym zx$P&I8B!8qYjb9b*Ig$104G`mcK5X@E%&web`yo7Bp=d^TPv98P42IljWL;%x%xNt zcox(Yuslqe%r442r+^`1P7gfu3`jD5=F}uA7)j*836B9n9hQ>feP)8N)l-TO1TISe z4S!*^lorO5rP)p?00U)?rvaM%!35PK3&X= z*m|6&<=K&32`?4CfCdJz+48<(ue}zDZu_SguVHl~-=Gfp^>(rNoJDl%T*=kja$^1qu9Hpef61jvN}V&)Wqc@u-le4hh0 z+Fjkqo>(N?lVG!Wr-jR@UQt4Mn1^M(Y2dr?*d<#IBsa@10TdEoh$*86R#MKMV20+Z z#4HdsS)mHp$k0s$Y}EV6pE>n=3k+!>sE$3^7O5%qVD1qJTpVPUA`X*Er9>6eB;gmE zRO#Oa>^x-*HuQ{rnYaJ>)ekU2u8pG!1K5DgdEj`GJ44EC?g?m&Wr%|3u-Icl-p8#% zO}RPaonL=Opbzq_vVBG$RzBsRv_h<1VU*tFK~z-IZZS4;wSwce3xUlc(RzUk01q4a zEb=jnU9vz;j^$y?s(C~!5a1?C`n81eknW8A)XlsBntg#yXs;l`nO2wJ25b&wX*8hW z1XFV$pjo_RWt7|rcCgvdX23=Qn(!T+?)`L^0mm1=F9uqv!0H?~Y4GtwXK(7mO&^LY zp~wI**3YbRfY?ZY<^*$-1U;F&Bu;1<4Uan_{360n|K*(jQlJKjuGkfc$yH~^eDx2+ z$9)8gnGJ8=`3k5Pjg?WK%<^v6F6Mv)LzBy;DeVQc#VsQFKzzo9W@)$=;d6{3L7j-l zGw5w55q`bkm?pMr-ov58;jUe}52+)?$~VVUgT>JZWIiOqGIOCYgKgndl5-+dMPvY& zZu$x6stkjPtS$Ty(QnVzc&6q_6-*7#REwmBoX?KN?ob}wFriOC zbTldXZeghH8JdZZp25`QPU=V9w&kvPM)P!FY`{LP(6fVl&(=0)q&!N7?0xISQ-ktX zYVsw38GsE6YyB~W!C3hIoGVc$o5it0R3;15jjzuiBKqk+B*YHEN=WdjC*mFYezt3g zi|9|#5o1F_M2y?K?0x35dN!qWV9x?HUyv6=I^kpH_e>2~zB{O?#riP=Xe3LcpTD4@ zdO5T$ym_d4I;{bO1PEdeURacrFbxv*L!#!=wgwH*TzWBbEn5;sU^B>)b|YIuuoY4p zW3w?s!*;p0_J4fhJ!7G;TvXhviat4|h;h+mbSU6<#zz>M9^eU}rl!j&P$R+2QfYte z<#9?IgJu$X!LbTc6zvKvBMd+zPsdLOIJE-wy8s&N4rLn!@~Xoay8}12W&>~_%psXO zQwyLeSer=@0@0BJv8?|Hlre;$WM88z0vnzj6wY(s4b&XDFpywp+zJcegI6$CzD7!* zImOUuvAsEfa~Fy6TLYR4e28FYod;e3b+5kDvfOkmwxJO=3jmD=FIF?kiI1p!e7U6E z42$$Z5INTa85ZSKxVQyzW%JZP%@Law6f;xG&~Rmzix+7!)>Z&Vc{4?11GcQIdVy)sXGh=pX~u@{tYo4_|(KS#By zC>Z|+YW8Mkh|)PUxfm^1YP=;2o+;bQ(tJ%6vNsm5d9_`o0h)SkS^}G}8^4%>{st$2 zO}l2yont_wb7#QmbI{e+tp+xu5T7sY?tDL}5Rw)7Anj^Q&G|;o89-y@&*T8jlQ*zL z%$vB2*opNuiThDI$LIh{{U9tQGjIRZ39)1t}RO`n&o z-6Uf(Xx51S$rrU96uRJ}&zud^Yz=HQpwam=pA5UvHW|5p#2pu`e4B#Ca#f!2o(O0z z^m&;3&fODPdtra=R9$G!7DJ=g`b|wg0Gp8ftGjngJGv?uF0JP{64*3Qv-PS@0h&+7 z0`3TC3R++ljYSI7$g$>`6?SGu=i>p*#q{7snKu|cgVXi#1H5AU<5m%6%32Yn+uGIK zv&s5w3oE(PuLa}lVQ1N+K5qjxTOLm=K$Fv;x$B91i*$IN0XD40)M9N=nT@oN)5T0# zNZWTH1{1vyZB$j*S&e`u)r68SWcpaXd}l$D0d9uR&lffX)Uy;CsQDJi%rP{%gy1`e z7buKZcV6$A{xrOqa7QV zRJz;_*cghy63}Fs8NRMre2ZhW9Yno+L!(P(V!l>}O$1`df0mi5-j*nQ85mE`4mq8@ z@uVuGQlRF@Jcw2yb1PsoMAHIe^P*%$)E$A13211h3FUFLbv!h*ltO$LmI%;cC!+IfVH&7e17uPmr(B6=3ppIe+V39!SOYa{7J9CiQw>n{EXTi9IrkP0$Z|+2=0iR9r4fM(~RW>V$d zh}&+EkzmYia2u%E1<>RwoSqJ7D(TdkWp8MPxhVxV4bbEP4c`;c3?}4TDNyIl=@m}d zBI#4v#g)PeW)d(@f8PMjx`h&KV*+fLA{#Q%&=s6O12vURhSl#S6>fTZmD3e;D3){x zcT_Ioms`lq!`~O@am?9J$J7zX$>d@39lddpeMvT8Oe6s#Bh$c7HSjM!cwlFoNFFBm zoSI6<*K~n~uWUIrS72xwpeX|lOxIA6O))pRGq{^srEUJ7eK8aH9#I{ETxg{rPUCa| zU;_+(A0nQ{1))YhMCj=&C;PnWEl7FM?5sY?8a&+mW}?L zy^OeqrJSl}dKjRYjLpn?Ups#jIjsKcK0FnQ5SA&X8r5lVoYm)_$&e_tN?_7atc0JAkNoW0%;7tOlIz z5*!BKzc`GAVK9h05sDJZ!;AxA9&A=70xlBJB-$J_lTIIEcne=cq7PKZm+9Vpw#Z%s zHA?`^5{9N-w*q;P|ByEDiGj-iY`F3j-VEY!FVCIVv7xal3P1#Cj!v712x-N@nAJ^B z1?VU@>n(?8NERN-yS>_Q1CTg%l1}=eP#2=0h%8YotiUa z@N_}Gh_-t0v0rxe4jsMG1Dc>?141v%=b!&|C@RG!2oPg7qfE##Jlf5TgxWZ6*k>6J zjIY+LLCo6p&*Q1jqGQhuSdt9ZO1e*CX;Og3oj)-R+#I+EX|^t~Gas6kb@L3c$%iz9}WngS*KpHZ6IBXn?HZIN3 z7#+1Iioh**X1zV{IA&6iuMa_a-6M`Wc2^b6RX((qZS(y&gH7eoeH)vKgwWpNx`kcX+4PH3)ujvIJpWt;fLZ7WXjK>AjgJh946n~KH4>!Lr5Hc zd4}c{%s}YoF9bGofCdHCh;5pT^?9O%2ZBCU7YqNL32czdNtM86QIClRYPJD0QYF|5 zH=(WaMJJhyJ1uCI#uYj=Z7&vhF>)(z4{X}{nW1aY56{apG&HtSfI3*2W#5(xusUQ! zNx=%xw5j>t=j}0u7FdyG-2nIP6Dk+6tVPc4eS3qPO9*bldfx#WzSzA>K=Mg|no>YB zw~2G%>$OnSGhhw(c@iAx6hP$IcxD9|(?ASlEI>nv+?h7~-yhtL8bd(j)(Bt|y1}2m zU%_yPRkcaDb45l9(4=x`+R86m=(;6B&0(liZ!ZaEex@K-o}ToA?I z1Ggzz<|=Ago)XYFpO3|Sd;`=gUhm6WBF_Mt5|!X)B=7fAJ7eV1Z00ahjLj2r zYuc6cEiC`V@S5(*I4s5{(WeQSMzYPMzB?12irYO?<9ykFUkx?p)(rP^@FX)E%ynh9 z_P%Vd8l9{ue{O)LozRtsLP{|>Jif;3ftDqiKLyw{EtH}$8W6}%IMh|l1(lN#LTBLHWJwI+@PHXYWQMK6*HTRqiJZN0h(>uncDk3 zsY;Sb*>G zb0&ycv@f3uYTSiRS8Mt>H9+$$h6V;h69A30i>03f8-bDs0-JWttRWsj4ZMa;WTTxb z<8FZF=4finpV9rGxT1-!vFYa9)Y7PVvzh}miR90=@;7wCHRjS-P5mr}MpnPAeIFg} zTtioI;cH#dRu%YbxUK9oOx%mEu{@cR(P3NuO}lnG6IB6h)E7ArUcnsr^l=Kn23D2n zNw?RT8Xi}(z6NL-GoyiwvI)%D#ez*@Qk}8{*zkpb;z8$=D?S-Fk`7>*bk5I#is@!vnfg^3)R=E9CSC(lhKAAD26 zX8N*jkOPyf?4GEa?A<2{hR>}C5Wdaw)S7c^8lX9zp@G5B)COosB?W)B12jpD0g*nk z)RC0*hHBT%m>C*E3Be{Y*r@l?=(_@a2*8fxjLaBRZrhJb1wo3M@f#5&GlPLegbzIp z%#8t>LuofUA(ej-JGdn3Ml^lr+=>J?LFjH$4b_YA)nEtpDhj9meYUf(@+CB=dEBw^ zWUH->q0xXwG%e*VY{LRJ+D3CZGD{enivydxRj984G!P|AfteXXOFshGxG^bMz7EGk zPXypu+ehcW%Qtb#jUNS|p{SyXqRJ){$fO1+ye7wN&BR<9u-OjKY*ih(1F#u# zYn^2(0Hgr-jWf+=G7dU6Y|5iX_ zE_t|h`96O=AkM9ldNX}8r^uP{fM&wX7E9Ff<(U3dS}5-<9$WOhHtPg zk=j@gotXPXUkpNzL%Ft41)eZ87U0IR`$~eIkkHE z1R0&-DEB&~0UMQb48wntG2a ze8M8uA*Tveq*wQW+T!F!2ZPKad*SP9`pcwrqP~(zgqk8CGjxE*gns`D(8%6CT48v? zASqxY5KaR&#ar_QfwmQfI#^;@Cwd7pJPBPyNn1$+Plg+3@-)%7l2VG*Img5dLdPb6VLosKD;UgocB8WNW7axpEv%Pg zXj;grE_UW91uD_ac%ns(A=My ziJXiDXcFRjRR9|K^O?Y=z$-k=Q-BQ;h=5dCtnAbD8T&O2;iV92I>Y{~HK*n;urNpfo8hAy41062w$0#T zNN32caeW9XlzSiMBXzalWtbWbPH5&ds{fs;aB>aMRL#ijEx1UDvhAOG8JgrKlk2v8 z#C$biQ*3JpW!j$@&;(^*nh7->w*KY-jh^NdV`JstG*^3R>IOn^6aYCeu?IAa&^}>b zUnz3yD{E-E#8G0paI)ZLX~?Oqvig9{&I^-L4JtoWW!GG))nu16rM>%(rZ;xkbkdC? zdRlWPVraxBcSsm#?vPlJJe&kJKHq}6ILR2)%Dpd*!TdZr_^LOl@VjF_sG70gd)24N z<<@9HJs3cy0h)HD0L_P{A*a2YRBn1?Igzc&0UMe>`QO*ZMm1m({QwR@@xGayNC1v1 znzYST1e#Ge{mD=ira-3Y*i5&ztJ!z}G|mxq-T2rO_tf`Sv!8OH63{GB32xUtsRtv! zVNQp}5?`zu&@h#iP#mopQA#yNwN&?1ZsVOdZ3J8+)oRM&_}~$3)KUK*%8mHe-4B z_KUmb;dy^;2v*psq{69P*I{fnvS3(=<2pQfRY0THLoK;AM*9o0B{hCv#{N2)HDmsfh(SiLt@PU^wShrCfZ}&fpX0&zP-Mw?bCI@hrfZ;7oREXwD|00`B!eC|sm|=Z?e7$wbH0|77VoJKp zv!42>SJZ=bjHHkuUmye}=QK1l4dvaPEbpc-62q;$T2Qqe&X+MYoM34*Q`5pt*IUeT zj<*IhMpzO$JZUV}D_p|~D8tlD_K36BMhUQ~$v)WtGy<%^S26`PV6&~kjpQRj=kC=Q zS?6LjU_)n~JNCF~onK?+)vRW2P&Z@q{@US?;W+f7DAmk3=;YU~olo4VldKL);)m{& zLqn=#@|->6bPZbTv`|DRoorXHfXP39@*1!fjB$*01 zT|tND+qJ1*2GWLL7N7xnW(DCO_hLijVG^oK$-~ZZ8_Z!1vV%gr^|jm zFT}?iHMxvJ?HbTjRu2DOZ3VfXI|KQG%1h`P@Tm*T@G={T9HtXMMkWW-O##htN}_bB zFe;f>4Or%qhAqk<@w&wyGgqEXV+U=?%HRi4YlED4-fe6vRBGwa6Kqg9YX-U8FU|nj z8=g6CmHH{>6|xd)3oy)faZjCT)Bpe=07*naRHp-^{TxB*2W5K*lK1hOGq4cixD%v?nFTrw^W>`>sLVVNs45z!M2j`l@QQ^sBE9#bwFM8vM&03$cd_v;O1W<^|` zK{otxuiwPI!ZtJUYqSpj@-40fYPJS6dZlrO>B)tx=9=?0VDsH#DCzN(3m>N1WEdfW z+X9*fY?c8UQQ0JOXH161ji*q)F_Z8Op!v%EVG3;Ic;78~SSGmQh9Pml&m{*TzOlTU zZ@f9aDdmidJa^*sZs~h-;fmu7q)y%6lKX8yXIlua7#fI>(@?s7_bR8Hy;1^@UuEtK zlZY2Zj-_~>^QXyA$dM5MCe^2jpSz@4*wGeh!}0~9arD4O&UNT7beF{I!3=R#y01Y?>ci3vaXBgPKlzZQxA@@4)2H8?14k>;G>Z)y% zuqILW+mk*oIKgVis#zN@aKP=_<^<1b?8B)}YtdLbG;Kt$YX@`UWQb4nk^2y0U~wWa zZ1Fs&@@5hS^mu#P5-jT$9}46QzrHwQ!@19VR}=A}T`-el&`U^0OF&~WIE(lB3I_6B z<;__+Gd$yDFVvgjQXnR08?yA)VrblhH=w&62}>CpOUouC01FjhaB zJX!OObFA0A05%fL+#(m_t^gu z0U2Y=VI2nj#>lLyqb@X0co zy(O!0B|x+0vlxH|iH_S(VrV!u*0OZ;N*ncDO9i#w0y#72&B!j=fyr}Y7|IGY@dNFq z%Bjx?rbcDo7iy`1ho&Ed&ka9ka750tHDCLp3g`TNNM|q5{{2Ka18h+XN3b+H2LH6M@0B(WP9Fk?1k~_w2#r-b ze<>B=JC}5uZd{dhZxueQY1-er-0hK}sI|bx0ys-b+L@jes#2kZL5n8G&@^CkYoG@$ zsjtILKNuLAs7$+E+qgU3v*~~wn<#n@+S(fKYOc6ySc(CM+($j zd86i;$8x$k7TubA?3)vOP2yQ@%5V`Pgmk3Gn`tkXCc&^N< z)(C7!$nbY|QR*f4$eSO;LOYTk(16hKZ4{!z_1^uB_`(L911~wjzmkTVXDuKr9A`DM zl$5i~pD6$|k7a0b6?H+FZm#;S631XMG!dAA05H~fWno?!^rg2NjC z8(G@TS`l~W&t{c-55T6I=GauLWAj9Sqt^1Uh8F^w=(Q^RnD5<^%ZThS&J}=7$!D_q zeF-wy|H*tjHOlZ31k_&atT#*vNjWlkt5FTLXgQp=oKc;9h3^)^cEfpE|l% zawsV&-i z0YhT}8_7B$;fH7pk(t;NF<4kNzkB$*ifk#FW1~Y+7w{ENYmz!93dWweh+d^wp7O9z$J7fe&*B-go6?{|4|L_ zqSMz8(r_ zEO2Ax$~Yqln5HN2Vs_%_U34x9J0XTS0WX?uzzm47fNQ~6Z4NjRA-vOw!SKcb&~#KD z%4^p#z=p`)jLB|HhxsH!thF^{Cjoi_s#fc*Vm*>{3-t$*Z*sxC7_@a@q*`KLt zz-BqXp#-2|THcE)<2fUS#x+25lsDPc++jN}qP&3KL~~{*N4Do@&)x>Fd@;5+YIDrz zK+W29yJUUWlDB99n@W<0TUVEO4+zyyt|MafC5TIa4Gx?r6WFNreN6a?muy?Dl< zrW|KUlCkCdLN{ftNn?ba+BAK)Fr!e$Ucd(SX>=lwuEI?OBixi@XA0N2mhwMhzvY!r zPL_11K#ukNoDf;2M;r=v2K_!#Chl6roy+6Q zFfKtaO#roO4<;?@Z}F zM3-#Z%qyekIUrIJLbiJBV7lb9_kJc7VpN?)CNF^vpL3f}1~#k>$r9Nt7&z=XDH^zR zG^uprDnZR%wQG)W6dJv1fTLL%iLzzrNomnEK(qhJh_{lC&jFc4(@DZUfF?(9e5)H- zuOv&Uv~ zM_@BIA6W8-Tn1t$PtU25vvQ{e9hHv)62txEa%|8JQD*_0$ZvG<;cM0zVP%0q0wA$2 z*Y2j}+`0RzC;Zfa&GsHxoYLl6#dFE&@(j>>69C0hJsM+ZfJ;7mBGEod^0nw=H*J4# z?8Ejb9wDmq>eCD>?69p8lEI2Xt5SOqEJ%u5o5^Nlw3pb`t1oB~N)f(}e{?w{-z* zu;cqnP}9+Dl~dhJP4j5G0-DK}M8oVIimPbRGu_GoC4o($qm7b)gY$6-HQ)jfi8D^4 zR_Lj@fpvSbImMg?uQD;+vV+sW&5SVL)_p)5rkVFMEb?lGkYFlQzSV$QEe}=#ntDJ@ z^Jx1rG%_ielmYn!VsrS{b^zxM4Si30I@;!RRhre5(fAt}r>IF~6WM^KDmvY&%4=(W z5sNZmTxY=R79o|bLYHPpECp5TV9sdMSoJ>iJlM|}C8Ct;@xtQl@=dOL7Y zz{bhVI<;}H+0d~=f1gMY(&h8PzTH#M>@e$h;CwGAhjO2?gmvD5p{b9lNuBB%gR^Sv zbY)Cbwk?bXDz_%;B+UyLjVpzWj=WEq^H6vXlO9b4iNIGneU^lx+Vwr4(Tq*XCgxOQ zO>Gm}II%Xz*leijga&A485CH0H3hN*vwMZnmyTt`K}FDDopgfCa7`dI~_X~1O{K(l7vbM{d3H(MtgGtaOo z7Q2jnOtOWZ45lWqHHOMC6i8gWU&}IZi<$W{YMu~~CpmbfP* zL$42GUoiJcG4{5nBwd;diNjEWju2CWL|V;E{@fl6O&y>nwK*&ad$enM>Q^BOtE+GH zKu1G)C|_k0;xBE?dJX>Kb>_<0IRQXL1361PFQqlJdAaMs_$Fm$ZOI!a;+;3+IY6^z zqA?f9N5~CSS4D+?6yH<9ShmZU`$%CJQ>JD~1t*JxvS4aR=Y4Ht(_Q@|+>GoiK$8Om zIyp;*qV75myzueT*IBSIB}j2HR>_5(`*4mV$azc(A2@yq?*DsuU8Ccpa4xSmxiqp;#BrI zk=>)~uE6G7+vTF^8t2NNUO=iuJEH{L=<@pmn%t&*& zujK}AmIIs4&Z)r+mK?@9QMSDYps9zcX^wg`h9=jbGCTINynBPPy2o6+Y`TVNvltpH z1ogmm^27}XsZQKDclvWl#1@P54P!IcJ(?_qbd=dq6W?1l*Al?Epk1TbGA1exyB`H; z>R@Ubu=(2YM`hbCQI=gW_EGYd6Uo9k7~Za;7S1p>ERY8^G))%1_4*JZUctWb;I;{q z6L4ky*-8_PE#@SpW?andAg%6!1&j^p1lM*Y=h|$^68b{I>Fot247giTtBFGtp=c47je?BDMeGXxp)LaQ@qhvVh<%uO)58M=>l5C*a%&k z24ucCqeU87aW*&4y~xft;KfDFWCV&_H7d|usBGc!Iwuc3E^Ht5U4pS$>i`XO4N6Gcx7yp~o0d2=0(Nx1{CPy ziW!<5z$www(Iwtn02|B3V6^>iYQoF+oW4pEM2@35o3v&z_76Ugp}8JY(>Br3As_}e zn*bX5H(l%u%-otbCyO_&Tz{sZ-(a3X>88;s3)nmi}fODrBF_cQFyEa)f! zHWtufV==X>%w~P1rXvtDr;8aBsNqgc$w4-Jz3|gR6IG+wvGrBpSj_dG+9jphqnmNK z?V6uAF@&WWBsseMs@QU}r=(Ea0|8CyId>`JPbCqjeol@FY@8Aa^eK~S3Bv2oxN((j zKZ=m)4pv1IpJ%%*QTU30&gzYV6-I;^%VQ=u+|A=hw-@SLsxLRa=!Jd`>pnB{Fr+&a&OQnVOCIe%xX=w6gx)7l3AN$HBDG zB~c;_)vo#JQ&k!zVI*V#OiHt|>g6GBdLn`b`-Dw5UGh(2XmXzmGrlWV60X;R?CLG; zsYRUD?YS@kik-cy@E|<@}435BrBnsXZVVl$pRYAPY<)EPM&^kO&9}g3sA{qV`iwPU0ULAewYJ zUF({BV?+i$5S0w4{s!P5xH0y!RT-mo7lCr=J=heEG zuA{?Pla;@pe~!@(-H!kYmg-pb#N+@IJeuqEz(ss5Q1etB3*836Kek)xKPw=UYjoKz zd&3e=6jY|)u?BOdPI8y1z*me7Wg`~j=A2Yg@BjTu108`>^5xSt|G#!KI81U+Dk z%onF68cgBV102x%l9qjAh2aUH(OtN4@UY7;6p^h4*BtW12?RC`8v`24m8C*bIbd_# zxpU#T@qGbJV`#p!bL*F>wjxo;iIwYIIN(?@Vfg0tw;iR#n+5)b%l>=-ko|~*(T^*~ z{w{hssKYS{ZM4VtetHOF1Km+p_ICQ-oWC3P&^CcZ*VU9v_S1ol)tUQ%d73K;zseHg ztFPY%XtqPS)~`4Xa0Yfpwj+_7FSD>OUVb~gY-`#U*lc+k;_sYHkeTO%KRK~X^Ex>- zHwQK*pqWz+K6;1oW!_OdyM>}MRLyb2V}+!M>@d~M&j!^2n&h0d0bf4O2_;IXMwWv> z97bR>s{GCSPZVMbEOZN(hWavvCNvP$fDbX|(ZDA1Gdnq*>y~t<1UzoW(4@jne6TTx zP!tQsCdv^*UF+`@W~Ly1zvo8A1uRXiz=p*M4{WdTT9Tmax_uUrBb-8Qd1T*Z+X^Vgp zUwHN@zeFkcjEyYE{N_luDu4}Lhf!(_&6hjl!W}=#^W*sEVV`s(pmDAraJ|6}#SkU5 zO}iFOmLF^w_|ZZ{rE&6Gf|``X>XnUBw?2SkXw)Ph>JW{iKR9M=lC zYz)npc!v{!CLz9MK8FmA8HlixW6#uxzY9ed9eP;P0L@ot@$$hFNjTcEpukz(mZ`ZL zuqkX*dA380%DcT@4M1_b`3EsH*=ekpUPx6(RRL_+*r6%~HjSZKI9{m)TLY+AOpFdM zQA%`AbdPrE0ZlBC0UsIRh+SsuJsO}{zm!wLJ#4JzCCPt<`%BlR;M^liq-RnQLz7(8 zoMCLXRH3SU`iv^48aFg9_?<1Ojdt+$w^C$}nDE@h9mKz@H#N%uj zN(m4uvJcI6`#hQ+%*1MZZ24J$$PsbZE9>%A7H(A@WCrz8dTm7O#)qbcbv@&VAbf+K zuX}}`E)wpD08K)VhHD;E31&KaPQyzWePt4*+*k37siKoyF$&JOFC!F%BiAd*ZDaE1J%Fwu&rKyskF*X_VcU=r}=#K3Z5c$usrwpzSXi7Gis;Z>UIDkBfp_v0T z@!n&D89r`JKs5V>;ZNnlWi8|HMAEV&qHeVCrRCmFXjl(a9`WNYV$U0`UP*gQ6P^u8cI$`nMs-J2)Dyz(V zS-K5NHJB^A|0T!vL{F$gcAx_Q4UCE>^JDRSos6*;90zPT|6W^~)nyr)`G>Q)E~ZXM z4%F~6yV>m$iNVg59TF!@X1+^u@D^D148|rZ=iPYBFU`>8_LY(nY}M_$NVV}qK!b>-8P$WWJh#zQ z*cT1kW5N*M17p+ooNg^HYS?pR9r#4|Vf^R&vY)aP(3}lytlbdygj}@@*irz!4VXb1 z&_v+w<_yh}^TJ_?#2dcg<*J+tO52N=8NGgI*ch&4O-fyw9H6m)jhSEsiUi@9JYys6 zy#br^eUYC8M1nT))pBZ%05WdO%tzv=&v&uBpfY@eDyWGj4aK@N2Nro$$<$cbA|=|l z2!|Zp@CkG=Ktl<=7-fiarPXUyd`~}QV45h5s2u`N?aVOJi2xkM=>k1-S|~Yu@ApK$E;RuEWJd zKPxdzq?Es{^;xi1xyCgq5`@W3%eD}mOn6z9snw5X%3NPLz*!{b%QkIRRLjG?Z@>@WjJgsVr2kkJRkOnMx2g-f&GMDtAx2GcL^bxH-9Ov-TxLeON)Ud6i-2UUiuH-c5T~GA6ZPy?Zk?IQYGC zUr#-{Uy-rV%E5CdyLKfv$W&n*uUxjn>#b})n9ZR{yyoU}ofwoH!veM&L{8S$iadv_ znDV4)-}8l5eVHAwAhX0oQc1{*h`|(~SwsC8FJOh4G)O7dlzAYa ziGWRDXdKU0B1N{L{Lma&mEEI5D5_^{n9!lA4L4A8g4fKg>`ismWfQdoz*%w1x-_tn zpHudNsi8kh3qfDOpxfpj~DwRLE=Yo($);26)lK?weHD7*?DGs8s z{zEz!S35zpnn?m1ZxmK;O(_mxG8p&{ZmK9E6Ow|RS}##)ltXl}Eoew5>rqP7@`a_b4>Vs+BKkO1BhfX4dw z7;?(b-=ckB>2~6&T!4ujh`YwvG*D9$u-Re(LTuPhAo_OF&o{cPqycG8F}Pj(0~>3Z zegkYu%qq7TZU$&%gGdYPTd&{tMH_s&kRZ%)8TZjng5u<1ChnVH^7y@74b+?iaJG6a zE9B%7{_lx^COCCf-fhytRZunQV}A2j`|F z6PfELwH7d$b6v>Ln1DtzFf%fHVI3uStSKeG-)iS#Sa}T z#nuof8eJZlnF|}(giWsjntIL{xwZ?YonalI(LElJ62CKq@74mEcFnI-d1(BKq1gav zSqCFPRbj#KD-T+;wcxn-(-+Q?rZh+a8%#Ix253aHIGSz{oB}a>GBz;glk#Au9k}XZ zY|M(OnOM~XGiyf2Nah6>Ff;|!OEaG@fsJ5i;MnxFvxllBzCV#^&YTWo!uh9n;-xum z#(C>C%XI;{dxDxJr4xmlDAW#^%cXfVpvhfcjE_4a`kXU9R@9=Ea9?LRCqWMkwuDAN z4YgS%D~`B46x9IDj_cG6J8iQ@lP-Tw%#Upa^1g|8Z-6Y*-rI?&ftt-dVG4aO$%Kai zXcXnx08ROPuvOlDFrXQx4XuQ`#?yHTu#s#V)7YdCoB*o@rPVp6CbHo+OZ(e^Zik>3 z?*{r}yoA|Nti*884K@KHI1qIL*l_E5*+9(^i)CTfJIDq!sXUtI^)llDn&v8y>fpWO z$xnVaUphK3BWJ(pgmvnW_T2+^jyv`@#( z24RBj;VoLya04|J0UO=HH&PC6fM(rpB~^yyX?sUtlWJNSfgS%p<_2hLu#?%nhR2p1 zQELuEC=FZ)XlB-LGl^pk9wSS`V~d0}S^P_Y&6j(Mw!h(}nOZee12qQ&n}P)v3F~DR zShL#%<6%`o`A*)ESm6$8!%5k7igP8n&ExVlw7>?;zhPr3atv(rWBPf_Mz?J!;L2r8 zOq=$TK#V?c7`Zg7{q2rnZc{!W#H0qr;Rb9PsHw?eC%SKI)!?=fuJ8g@Zq3FHDCsma zn{u1S0}c*c4s0S@QD8>D)-bPbT%*XnZUZ#c0h(}Vg!;bOI^8SHMTD|I7^KsC{h9`B z8mQT8Gex0srWhL67@AGzWY45wgQ3y=o!YLp14EMo4+*9v`Z)n&EP%rr(72JAfmJ5O zWhd@-on%)CJ)V4@ry#Tkj@IlZfM#g3@P*^iHYWe=lZFu(n+9wes5#SNM+u~45o70GSj6!xrG314G71d3dNmsk*J-y4V{RB?t4QjC*T5FhY)% zMv+jrh6grGzJ)>qHVxG5>Ts6;np{k`+0S=#(a~%<{nCMkb#j_h4Q>-T4+;zBlQV#2 z*pMv1!p3V9R4EPniJH{tM{Z2&73^(L=mir#G<4&Zllk>L@)ZAWBEeym`VWUF(LzBy zu>qR~YL0j6I)|n)G~0tq7@HinpUP68+ve0beX@EeRR+y@riKHE%{-sy7#_vSXyy%+ zIDj;{kg82A0s-y<0>TvMNFmq1 ztNFQVfz7lNx6h#g@9=IxPlkzi(2;;{mm@+^)cL9?!O&bC*btqfqdLdbDDCH`EqtwO zVRheb*Y+zw$kFp0uvxPqi5!|#a`0mS4bKc^4%ArS#mb8+05&|wz|45aL6pzvZ2`mz z(e0|-Mme6tX#Vz^OCvFuHwL}BM^xm_AO!jDB2Qf#q8UI<Fs&oQo?5~{y z7cT^<4hjp{d@;sQzy>?$-&_&UOop;FsaFG<1gPOT7H5O8Px(-@JMvxU`%Zqq8QL_6 zeebrZC$R+$!k-(yM+(@G^KhnXz-C`i!*3$|Oeu@24s=1eE|6hrXsT_&CGUp~4dh9z zP59o4$KARy)dzU1|Id|d7vGvsCh^u}R0=AUCKXERO*!`(8?Au}k(cXI+OB%d-C)@? z<90+Y?XcZ#xbIoOhCHyL0Bkr^MO{AxrJ1)g_p&$f-#ldgJwjxr+p-Un#%RjuP~uo& zIN;_)zgrNp5^62-hrP)m;dE{RXn5v#25{k2X>|tJu=QTG^~!2%@REnnz|^=QIrw0k z*~xA-u!;5{6^aS~r!h8LfST@KMD9&Q|0bf}G?x0@2-v9pK2S$_lrRZUr&Me(p$~S# z0~SoF3@>y*uyQPDV>QyFH)GB_Oj2XW7Rbnii=uE+LDdm2U{i{p^QDi8PWKHWT)_=T zhe{dlhZoxm^SOB+HiNO>+ZR}@A_IMTgJ*0Ot(S^sGc=Bcbifq=n>W4wi-=ymXLSE2 z!mk+E+zrq`Ehz0+QxzI0*oaUFSS)((=^k0IHIQsVL3ys#fjc#(mym|wM5k)4x=RV> zg%Y_h>ffBvl$pgRbJ{{jEbTs3W+Rsd?pOxl2-6sH+cB~?OmXfI)0J(r zuFdOBuYdKU>8KY8ppVU&)jEb5=L)sK4Vm?hrqxY>n(zGP>Ni;~nLleY{T8r%oltQh z#zs^^4c(VnRVE~W4GhslkWvsnqw_Wv{EDaJF##PK$Y|yzCw7+uE4gIhHTK8{*sR#3 zG*g2)MyLUsdH~H3cJiU8C`p)ia5S;6VBtf;A!1Kp6TKJpj14)z-waj7#peqlXH4*CPH>r2#zS<#4!_6Dg`Tx!bx1Ot(kdp?W!8kkk+N~-?f45 zzQ^wka&s(Ei$MU!pKJmh=7RrQ@xjv<-3#!Eg|!}xCxnmcxeeL zC)k;i(;+edX^!n#sozo!)5D3+qDA@ic&g75;Zy9ew_)LDp#)fwpd$lFa(XXZ(7`(O zo?lOKg}zoZbd}%kqc52_8(0|^a%db+S|aSdw;z#HqxXH2eU>d1r~#V|K+T(o{x)?5 zE{F*Dkkna6Ut|!jLjDurVkHC1g`@IqqTf53?@dHAprxcT3WcmsK?A>{&6qRKIkS7U z7%Qj*R=^g?f&p$eKY>Z1z`5I>>q^ZTFjLw#fD;T0Uk8Zn0cflZbkoB?yEgUdee+5l z!cQY8<-OlJxkPq-=LEw)G`{RYC-NT9)E|l(8-W61BgFa3tJkUNG{fL`_RkLy{~A-& zYXdYX7RCZL>UBAVGmY2dxsy1rFz6H;!-b3uC)lPn>OoH|z$h&sX0^bR(jm_7D#p0Eo2rVQN|>S)$V0-LU9X^7e1Z*9OP zk^EVeqVQ1i^X?mNO{AN-2Qv~a0K3k95}2ftfUR7a5{4po1CHX3YrM04a3Pbz>C?vK zGav(mIK%vG4PFX28Rn^)bGE!&Ff&`}lt42gB>-eb&@S11I`jBeZ3Ujd)GRvWH(+xf z_|)?jHLu(k&``vHNXN>%?`N|)AH?c{?40}$OUR2f5MFb<9%oq`)lghoB?WBTVN+P6DE535ebI)I!-!OMl;_>7%%n8S~ zU?mrFVZv=uC6Wbdh{$ZN%jJM-(+&2iJ`M%GrHxY^^CS+XQbCx8e42yiiPN?d4opYt zGqNEd%0vWF4HX5VY6do(UXw@P?t8MMNMO??yoKwC=-+)4O!}dcUQw76sLNF@6@-|+ zUJ#lNWX04lT~m=X$EI)ro0DT|a*Ru9u1@ZrIueST6gRvK53%}~GwlP+rjDgdjCc)R z`dQkw89OtWQz=u^t~%yTw?wERzqA5>9_jZ4#t0yG+;7DkSK(F#Y@`Mc*RdAgV~L5J z-7bb$opJ1SVT6^2&79J!)|PO_<2v!z6%Ou}001#dQ!J)eE3o+%1f>*@OZ#KZRc%=S zO9C1i0VaH9lnFEnbY8MayqQGahEXa6HW%N}9>dl+)#pk1{ZsB~?$CDzu#r{0U8v9^ zVwS1Hl^vKX12*q`Oo)j1)!%hzczQ=f97?_I?%psGA9C6<;qOu4wRW!%kzp>sq4E

LJ1a@MYc~BL0hd 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 literal 51554 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 TnEH(2XBv>rBC9LJeRerKwF^D1!&G#5qF0t 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 jxJmH;|M~ya0DjvqIMP= [ + '^.*/view$' => [ [ 'dest' => '\Modules\Profile\Controller\ApiController:apiProfileCreate', 'verb' => RouteVerb::PUT, @@ -32,7 +32,7 @@ return [ ], ], - '^.*/profile/settings/localization(\?.*|$)' => [ + '^.*/view/settings/localization(\?.*|$)' => [ [ 'dest' => '\Modules\Admin\Controller\ApiController:apiSettingsAccountLocalizationSet', 'verb' => RouteVerb::SET, @@ -43,7 +43,7 @@ return [ ], ], ], - '^.*/profile/settings/password(\?.*|$)' => [ + '^.*/view/settings/password(\?.*|$)' => [ [ 'dest' => '\Modules\Admin\Controller\ApiController:apiSettingsAccountPasswordSet', 'verb' => RouteVerb::SET, @@ -54,7 +54,7 @@ return [ ], ], ], - '^.*/profile/settings/image(\?.*|$)' => [ + '^.*/view/settings/image(\?.*|$)' => [ [ 'dest' => '\Modules\Profile\Controller\ApiController:apiSettingsAccountImageSet', 'verb' => RouteVerb::SET, diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 0ecd1e2..0eaa8df 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -18,7 +18,7 @@ use phpOMS\Account\PermissionType; use phpOMS\Router\RouteVerb; return [ - '^.*/profile\?.*$' => [ + '^.*/view(\?.*$|$)' => [ [ 'dest' => '\Modules\Profile\Controller\BackendController:setupProfileStyles', 'verb' => RouteVerb::GET, @@ -29,7 +29,7 @@ return [ ], ], ], - '^.*/profile/list.*$' => [ + '^.*/profile/list(\?.*$|$)' => [ [ 'dest' => '\Modules\Profile\Controller\BackendController:viewProfileList', 'verb' => RouteVerb::GET, @@ -40,9 +40,9 @@ return [ ], ], ], - '^.*/profile/single.*$' => [ + '^.*/profile/view(\?.*$|$)' => [ [ - 'dest' => '\Modules\Profile\Controller\BackendController:viewProfileSingle', + 'dest' => '\Modules\Profile\Controller\BackendController:viewProfileView', 'verb' => RouteVerb::GET, 'permission' => [ 'module' => BackendController::NAME, @@ -51,7 +51,7 @@ return [ ], ], ], - '^.*/admin/module/settings/profile/create.*$' => [ + '^.*/admin/module/settings/view/create(\?.*$|$)' => [ [ 'dest' => '\Modules\Profile\Controller\BackendController:viewProfileAdminCreate', 'verb' => RouteVerb::GET, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4f4653b..88c5d9c 100755 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,12 +1,16 @@ -# Development - ## Development environment - The setup and configuration of the development environment is in the hands of every developer themselves. However, it is recommended to follow the setup instructions in the [Developer-Guide](https://github.com/Karaka-Management/Developer-Guide/blob/develop/general/setup.md). +The setup and configuration of the development environment is in the hands of every developer themselves. However, it is recommended to follow the setup instructions in the [Developer-Guide](https://github.com/Karaka-Management/Developer-Guide/blob/develop/general/setup.md). ## Code of conduct -Every organization member and contributor to the organization must follow the [code of conduct](../Policies & Guidelines/Code of conduct.md). +Every organization member and contributor to the organization must follow the [Code of Conduct](../Policies%20&%20Guidelines/Code%20of%20Conduct.md). + +## Becoming a contributor + +For public repositories you can immediately start by creating forks and pull requests. For private repositories which are necessary to setup the complete developer environment, feel free to request access. Please not that we may not immediately give you access to private repositories and instead will give you smaller tasks regarding public repositories. Please contact info@jingga.app for more details. (**R1**) + +For all contributions our [Contributor License Agreement "CLA"](https://github.com/Karaka-Management/Organization-Guide/blob/master/Processes/HR/Hiring/Individual%20Contributor%20License%20Agreement.md) comes into effect. (**R2**) ## Code changes @@ -14,58 +18,106 @@ Every organization member and contributor to the organization must follow the [c Generally, the development philosophy is result orientated. This means that anyone can propose tasks, pick up existing tasks or right away implement their code changes. However, implementing code changes without consulting with a senior developer in advance has a much higher risk of code changes not getting admitted. The easiest way to discuss a code change idea in advance are the github [issues](https://github.com/Karaka-Management/Karaka/issues) or [discussions](https://github.com/Karaka-Management/Karaka/discussions). -Developers are encouraged to pick open tasks with high priorities according to their own skill level. Senior developers may directly assign tasks to developers based on their importance. New developers may find it easier to start with a task that has a low priority as they often also have a lower difficulty. +Developers are encouraged to pick open tasks with high priorities according to their own skill level. Senior developers may directly assign tasks to developers based on their importance. New developers may find it easier to start with a task that has a low priority as they often also have a lower difficulty. -Open tasks can be found in the project overview: [PROJECT.md](https://github.com/orgs/Karaka-Management/projects/10) +Open tasks can be found in the project overview: [Todos](https://github.com/orgs/Karaka-Management/projects/10) -Tasks currently in development are prefixed in the priority column with an asterisk `*` and a name tag in the task description of the developer who is working on the task. +Tasks currently in development are prefixed in the priority column with an asterisk `*` and a name tag in the task description of the developer who is working on the task. -The open tasks are reviewed once a month by a senior developer. The senior developer updates the project overview if necessary and requests feedback regarding development status of important tasks under development. During this process important tasks may also get directly assigned to developers. This review is performed on a judgmental bases of the senior basis. +The open tasks are reviewed once a month by a senior developer. The senior developer updates the project overview if necessary and requests feedback regarding development status of important tasks under development. During this process important tasks may also get directly assigned to developers. This review is performed on a judgmental bases of the senior basis. -### Code style +### Quality -Code changes must follow the [style guidelines](https://github.com/Karaka-Management/Developer-Guide/tree/develop/standards). Additionally, the automatic code style inspection tools must return no errors, failures or warnings. Developers should test their changes with inspection tools and configurations mentioned in the [inspection documentation](https://github.com/Karaka-Management/Developer-Guide/blob/develop/quality/inspections.md) in advance before submitting them for review. +#### Code style -In rare cases errors, failures or warnings during the automatic inspection are acceptable. Reasons can be changes in the programming language, special cases which cannot, are difficult or must be individually configured in the inspection settings. If this is the case for a code change and if inspection configuration changes are necessary are decided by the senior developer performing the code review. +Code changes must follow the [style guidelines](https://github.com/Karaka-Management/Developer-Guide/tree/develop/standards) (**R3**). Additionally, the automatic code style inspection tools must return no errors, failures or warnings. Developers should test their changes with inspection tools and configurations mentioned in the [inspection documentation](https://github.com/Karaka-Management/Developer-Guide/blob/develop/quality/inspections.md) in advance before submitting them for review. (**R4**) -Automated checks which are run during the review process: +In rare cases errors, failures or warnings during the automatic inspection are acceptable. Reasons can be for example special cases which are difficult automatize or must be individually configured in the inspection settings. If this is the case for a code change and if inspection configuration changes are necessary are decided by the senior developer performing the code review. (**R5**) + +Automated checks which are run during the review process (**R4**): ```sh -php ./vendor/bin/phpcs --severity=1 ./ --standard="Build/Config/phpcs.xml" +php ./vendor/bin/phpcs ./ --standard="Build/Config/phpcs.xml" +php ./vendor/bin/php-cs-fixer fix ./ --config=Build/Config/.php-cs-fixer.php --allow-risky=yes +php ./vendor/bin/phpcbf --standard=Build/Config/phpcs.xml ./ +php ./vendor/bin/rector process --dry-run --config Build/Config/rector.php ./ npx eslint ./ -c ./Build/Config/.eslintrc.json ``` -### Tests +#### Tests -Code changes must follow the inspection guidelines (i.e. code coverage) mentioned in the [inspection documentation](https://github.com/Karaka-Management/Developer-Guide/blob/develop/quality/inspections.md). Developers should check if the code changes comply with the inspection guidelines before submitting them. +Code changes must follow the inspection guidelines (i.e. code coverage) mentioned in the [inspection documentation](https://github.com/Karaka-Management/Developer-Guide/blob/develop/quality/inspections.md) (**R6**). Developers should test their changes with inspection tools and configurations mentioned in the [inspection documentation](https://github.com/Karaka-Management/Developer-Guide/blob/develop/quality/inspections.md) in advance before submitting them for review. (**R7**) -In rare cases it might be not possible to follow the inspection guidelines. In such cases the senior developer performing the code review may decide if the code change still gets accepted. +In rare cases it might be not possible to follow the inspection guidelines. In such cases the senior developer performing the code review may decide if the code change still gets accepted. (**R8**) -Automated tests which are run during the review process: +Automated tests which are run during the review process (**R7**): ```sh php ./vendor/bin/phpunit -c tests/PHPUnit/phpunit_default.xml -php ./vendor/bin/phpstan analyse --autoload-file=phpOMS/Autoloader.php -l 9 -c Build/Config/phpstan.neon ./ +php ./vendor/bin/phpstan analyse --no-progress -l 9 -c Build/Config/phpstan.neon ./ npx jasmine-node ./ ./cOMS/tests/test.sh ``` -Additional inspections which are run but might be ignored during the review depending on the use case are mentioned in the [inspection documentation](https://github.com/Karaka-Management/Developer-Guide/blob/develop/quality/inspections.md) as other checks. +Additional inspections which are run but might be ignored during the review depending on the use case are mentioned in the [inspection documentation](https://github.com/Karaka-Management/Developer-Guide/blob/develop/quality/inspections.md) as other checks. (**R7**) -### Demo +#### Performance -Some code changes may also require changes or extensions in the demo setup scripts. The demo setup script try to simulate a real world use case by generating and modifying mostly random data. This is also a good way to setup and “manually” test the code changes in a larger picture. The demo setup script can be found in the [demoSetup](https://github.com/Karaka-Management/demoSetup) repository. The demo setup script takes a long time due to the large amount of user input simulated data which is generated. Therefore it is recommended to run this only sporadically. +Developers should occasionaly check performance statistics. At this point no target metrics are defined. -### Code review +Since the primary application is a web based application a similar tool as the Google lighthouse tool can be used to inspect the application for best practicies which can significantly improve the application performance. The sitespeed.io tool shows potential performance improvements and slow pages. With the php trace and profiler enabled in the `php.ini` file the VM automatically generates profiling and trace reports for every web request. These can be found in the webgrind logs directory and inspected in webgrind and dropped into the trace visualizer for a flame chart visualization. With mysqldumpslow you can inspect slow sql queries which may need optimization. + +1. Automatic trace and benchmark generation with every web request in `/var/www/html/webgrind/Logs` +2. Webgrind view `http://vm_ip:82` +3. Trace visualization `http://vm_ip:81` + 1. Download the latest trace from `http://vm_ip:82/Logs` + 2. Drag and drop that downloaded `*.xt` file in the trace visualizer +4. `sitespeed.io ./Build/Helper/Scripts/sitespeedDemoUrls.txt -b chrome --outputFolder /var/www/html/sitespeed` +5. Slow query inspection. + +```sh +mysqldumpslow -t 10 /var/log/mysql/mysql-slow.log +mysqldumpslow -t 10 -s l /var/log/mysql/mysql-slow.log +``` + +#### Code review In addition to the automatic code review performed by the various inspection tools such as (phpcs, phpstan, phpunit, eslint and custom scripts) a senior developer must check the proposed code change before it is merged with the respective `develop` branch. Only upon the approval by the reviewer a code change requests gets merged as no other developers have permission in the software to make such code merges. In case a code change request is not approved the reviewer states the reason for the decision, this may include some tips and requests which will allow the contributor to make improvements so that the code change may get approved. -If the code reviewer only finds minor issues with the proposed code change the reviewer may make small changes to the proposed code change and inform the contributor to speed up the implementation process. Code reviewers are encouraged to do this with new contributors to avoid long iteration processes and to not discourage new developers. However, communication is key and severe issues with code change requests or if the contributor already made multiple code change requests in the past the reviewer should not implement the improvements by himself and rather decline the code change requests with his reasoning. +If the code reviewer only finds minor issues with the proposed code change the reviewer may make small changes to the proposed code change and inform the contributor to speed up the implementation process. Code reviewers are encouraged to do this with new contributors to avoid long iteration processes and to not discourage new developers. However, communication is key and severe issues with code change requests or if the contributor already made multiple code change requests in the past the reviewer should not implement the improvements by himself and rather decline the code change requests with his reasoning. (**R5**+**R8**) + +#### Demo + +Some code changes may also require changes or extensions in the demo setup scripts. The demo setup script try to simulate a real world use case by generating and modifying mostly random data. This is also a good way to setup and “manually” test the code changes in a larger picture. The demo setup script can be found in the [demoSetup](https://github.com/Karaka-Management/demoSetup) repository. The demo setup script takes a long time due to the large amount of user input simulated data which is generated. Therefore it is recommended to run this only sporadically. (**R9**) + +```sh +sudo -u www-data php -dxdebug.remote_enable=1 -dxdebug.start_with_request=yes -dxdebug.mode=coverage,develop,debug demoSetup/setup.php +``` + +#### Documentation + +Occasionally new code or code changes also require new documentation or documentation changes. Developers should make sure that the new code is also reflected in the existing documentation ([Developer-Guide](), [User-Guide]() and/or module documentation) or if additional documentation is necessary. + +#### Improvements, features, bugs + +If a developer (or employee in general) has an idea for an improvement, feature or finds a potential bug it should be reported at https://github.com/Karaka-Management/Karaka/issues. A senior developer has to check these issues and decide how to proceed with them. The decision how to proceed with the issue must be explained by the senior developer as a response in the issue. Possible steps are: + +* Accept the issue and put the task into the [Todos](https://github.com/orgs/Karaka-Management/projects/10) +* Dismiss the issue with an explanation ### Release flow +In case SCSS/CSS or JS files got changed they must get re-built locally before comitting the code change: + +```sh +npx esbuild Web/Backend/js/backend.js --bundle --outfile=Install/Application/Backend/js/backend.min.js --minify +scss cssOMS/styles.scss > cssOMS/styles.css +``` + +For JS you may also use the shorthand command `npm run build`. + Code changes must be performed in a new branch. A new branch can be created with: ```sh @@ -75,8 +127,70 @@ git checkout -b new-branch-name The name of the branch can be chosen freely however it is recommended to follow the following branch naming conventions: * `feature-*` for feature implementations +* `hotfix-*` for security related fixes/improvements * `bug-*` for bug fixes * `security-*` for security related fixes/improvements -* `general-*` for general improvements (i.e. code documentation improvements, code style improvements) +* `general-*` for general improvements (i.e. documentation, code style & performance improvements) -The senior developer who performs the code review merges the change request into the `develop` branch upon approval. \ No newline at end of file +```mermaid +%%{init: { 'gitGraph': {'mainBranchName': 'master'}} }%% + gitGraph + commit + branch hotfix-xxx + commit + checkout master + branch develop + checkout master + merge hotfix-xxx + checkout develop + branch bug-xxx + commit + commit + checkout hotfix-xxx + commit + checkout master + merge hotfix-xxx + checkout develop + merge bug-xxx + commit + checkout develop + branch feature-xxx + commit + commit + commit + checkout develop + merge feature-xxx + checkout master + merge develop + checkout develop + branch general-xxx + commit + checkout develop + merge general-xxx + branch security-xxx + commit + commit + checkout develop + merge security-xxx + checkout master + merge develop + +``` + +The senior developer who performs the code review merges the change request into the `develop` branch after their successful code review. Unsuccessful reviews lead to change requests by the original developer, other developers who can make the requested changes, changes by the senior developer who performed the review, or dismissal of the changed code. (**R10**) + +## Approved dependencies + +### Customer dependencies + +Developers may only rely on the dependencies defined in [Approved Customer Software]() when developing a solution. If new software should be added to this list or a different version is required developers should make a request with their team leader/head of department who forwards this requests if appropriate to the CTO and explain the reasoning for the different dependency needs. The CTO can decide if the dependency will be accepted. (**R11**) + +### Developer dependencies + +Developers may only rely on the dependencies defined in [IT Equipment & Software](). If new software should be added to this list or a different version is required developers should make a request with their team leader/head of department who forwards this requests if appropriate to the CTO and explain the reasoning for the different dependency needs. The CTO can decide if the dependency will be accepted. Changing the package managers such as `composer.json` or `package.json` is not allowed by anyone else than the CTO. (**R12**) + +## Other related documents + +* [Confidentiality Policy](../Policies%20&%20Guidelines/Confidentiality%20Policy.md) +* [Organization Activity Policy](../Policies%20&%20Guidelines/Organization%20Activity%20Policy.md) +* [Tutorials](./Development/Tutorials) \ No newline at end of file diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 48bd188..481ace5 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -16,6 +16,7 @@ namespace Modules\Profile\Controller; use Modules\Admin\Models\AccountMapper; use Modules\Admin\Models\AddressMapper; +use Modules\Admin\Models\ContactType; use Modules\Media\Models\MediaMapper; use Modules\Media\Models\NullMedia; use Modules\Media\Models\PathSettings; @@ -27,7 +28,6 @@ use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; -use phpOMS\Stdlib\Base\Address; /** * Profile class. @@ -272,9 +272,9 @@ final class ApiController extends Controller public function createContactElementFromRequest(RequestAbstract $request) : ContactElement { /** @var ContactElement $element */ - $element = new ContactElement(); - $element->setType($request->getDataInt('type') ?? 0); - $element->setSubtype($request->getDataInt('subtype') ?? 0); + $element = new ContactElement(); + $element->type = ContactType::tryFromValue($request->getDataInt('type')) ?? ContactType::EMAIL; + $element->subtype = $request->getDataInt('subtype') ?? 0; $element->content = $request->getDataString('content') ?? ''; $element->contact = $request->getDataInt('contact') ?? 0; @@ -315,7 +315,7 @@ final class ApiController extends Controller $profile = $profileObj->id; } - $address = $this->createAddressFromRequest($request); + $address = $this->app->moduleManager->get('Admin', 'Api')->createAddressFromRequest($request); $this->createModel($request->header->account, $address, AddressMapper::class, 'profile-address', $request->getOrigin()); $this->createModelRelation($request->header->account, $profile, $address->id, ProfileMapper::class, 'location', '', $request->getOrigin()); @@ -345,30 +345,4 @@ final class ApiController extends Controller return []; } - - /** - * Method to create a contact element from request. - * - * @param RequestAbstract $request Request - * - * @return Address - * - * @since 1.0.0 - */ - public function createAddressFromRequest(RequestAbstract $request) : Address - { - /** @var Address $element */ - $element = new Address(); - $element->name = $request->getDataString('name') ?? ''; - $element->fao = $request->getDataString('fao') ?? ''; - $element->postal = $request->getDataString('postal') ?? ''; - $element->city = $request->getDataString('city') ?? ''; - $element->address = $request->getDataString('address') ?? ''; - $element->addressAddition = $request->getDataString('addition') ?? ''; - $element->state = $request->getDataString('state') ?? ''; - $element->setCountry($request->getDataString('country') ?? ''); - $element->setType($request->getDataInt('type') ?? 0); - - return $element; - } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 56662e1..e6dd430 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -115,7 +115,7 @@ final class BackendController extends Controller * * @since 1.0.0 */ - public function viewProfileSingle(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + public function viewProfileView(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); @@ -123,7 +123,7 @@ final class BackendController extends Controller $head = $response->data['Content']->head; $head->addAsset(AssetType::CSS, '/Modules/Calendar/Theme/Backend/css/styles.css?v=1.0.0'); - $view->setTemplate('/Modules/Profile/Theme/Backend/profile-single'); + $view->setTemplate('/Modules/Profile/Theme/Backend/profile-view'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1000301001, $request, $response); $mediaListView = new \Modules\Media\Theme\Backend\Components\Media\ListView($this->app->l11nManager, $request, $response); @@ -136,7 +136,7 @@ final class BackendController extends Controller $mapperQuery = ProfileMapper::get() ->with('account') - ->with('account/locations') + ->with('account/addresses') ->with('image'); /** @var \Modules\Profile\Models\Profile $profile */ diff --git a/LICENSE.txt b/LICENSE.txt index 18d430e..4ba0161 100755 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -27,7 +27,7 @@ Version 2.0 Subject to the terms and conditions of this License, each Contributor grants to You after purchase a perpetual, worldwide, non-exclusive, irrevocable copyright license to prepare Derivative Works of, publicly display, publicly perform the Work and such Derivative Works in Source or Object form. You are not allowed to sublicense, reproduce, or distribute the Work and such Derivative Works in Source or Object form. -3. Redistribution. +3. Redistribution You may not reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form. diff --git a/Models/Contact.php b/Models/Contact.php index 4f90b49..23e45f9 100755 --- a/Models/Contact.php +++ b/Models/Contact.php @@ -133,16 +133,4 @@ class Contact { $this->image = new NullMedia(); } - - /** - * Get id. - * - * @return int - * - * @since 1.0.0 - */ - public function getId() : int - { - return $this->id; - } } diff --git a/Models/ContactElement.php b/Models/ContactElement.php index 967d69a..0efe868 100755 --- a/Models/ContactElement.php +++ b/Models/ContactElement.php @@ -68,44 +68,6 @@ class ContactElement public int $contact = 0; - /** - * Get id. - * - * @return int Model id - * - * @since 1.0.0 - */ - public function getId() : int - { - return $this->id; - } - - /** - * Set type - * - * @param int $type Type - * - * @return void - * - * @since 1.0.0 - */ - public function setType(int $type) : void - { - $this->type = $type; - } - - /** - * Get type - * - * @return int - * - * @since 1.0.0 - */ - public function getType() : int - { - return $this->type; - } - /** * Set subtype * diff --git a/Models/ContactMapper.php b/Models/ContactMapper.php index fe9e1e4..3390763 100755 --- a/Models/ContactMapper.php +++ b/Models/ContactMapper.php @@ -56,9 +56,9 @@ final class ContactMapper extends DataMapperFactory * @since 1.0.0 */ public const OWNS_ONE = [ - 'image' => [ - 'mapper' => MediaMapper::class, - 'external' => 'profile_contact_image', + 'image' => [ + 'mapper' => MediaMapper::class, + 'external' => 'profile_contact_image', ], ]; @@ -91,11 +91,13 @@ final class ContactMapper extends DataMapperFactory 'external' => 'profile_contact_addressrel_address', 'self' => 'profile_contact_addressrel_contact', ], + /* 'contacts' => [ 'mapper' => ContactElementMapper::class, 'table' => 'profile_contact_element', 'self' => 'profile_contact_element_contact', 'external' => null, ], + */ ]; } diff --git a/Models/Profile.php b/Models/Profile.php index cfabca1..6b491c8 100755 --- a/Models/Profile.php +++ b/Models/Profile.php @@ -93,24 +93,12 @@ class Profile implements \JsonSerializable * * @since 1.0.0 */ - public function __construct(Account $account = null) + public function __construct(?Account $account = null) { $this->image = new NullMedia(); $this->account = $account ?? new NullAccount(); } - /** - * Get account id. - * - * @return int Account id - * - * @since 1.0.0 - */ - public function getId() : int - { - return $this->id; - } - /** * Get gender. * @@ -181,12 +169,12 @@ class Profile implements \JsonSerializable public function toArray() : array { return [ - 'id' => $this->id, - 'sex' => $this->sex, - 'gender' => $this->gender, - 'account' => $this->account, - 'image' => $this->image, - 'birthday' => $this->birthday, + 'id' => $this->id, + 'sex' => $this->sex, + 'gender' => $this->gender, + 'account' => $this->account, + 'image' => $this->image, + 'birthday' => $this->birthday, ]; } diff --git a/Models/ProfileMapper.php b/Models/ProfileMapper.php index 4cb745e..9b693f6 100755 --- a/Models/ProfileMapper.php +++ b/Models/ProfileMapper.php @@ -53,9 +53,9 @@ final class ProfileMapper extends DataMapperFactory * @since 1.0.0 */ public const OWNS_ONE = [ - 'image' => [ - 'mapper' => MediaMapper::class, - 'external' => 'profile_account_image', + 'image' => [ + 'mapper' => MediaMapper::class, + 'external' => 'profile_account_image', ], ]; @@ -66,9 +66,9 @@ final class ProfileMapper extends DataMapperFactory * @since 1.0.0 */ public const BELONGS_TO = [ - 'account' => [ - 'mapper' => AccountMapper::class, - 'external' => 'profile_account_account', + 'account' => [ + 'mapper' => AccountMapper::class, + 'external' => 'profile_account_account', ], ]; diff --git a/Theme/Backend/Components/AccountGroupSelector/BaseView.php b/Theme/Backend/Components/AccountGroupSelector/BaseView.php index 533ffce..6045a39 100755 --- a/Theme/Backend/Components/AccountGroupSelector/BaseView.php +++ b/Theme/Backend/Components/AccountGroupSelector/BaseView.php @@ -57,7 +57,7 @@ class BaseView extends View /** * {@inheritdoc} */ - public function __construct(L11nManager $l11n = null, RequestAbstract $request, ResponseAbstract $response) + public function __construct(?L11nManager $l11n = null, RequestAbstract $request, ResponseAbstract $response) { parent::__construct($l11n, $request, $response); $this->setTemplate('/Modules/Profile/Theme/Backend/Components/AccountGroupSelector/base'); @@ -66,18 +66,6 @@ class BaseView extends View $this->addData('popup', $view); } - /** - * Get selector id - * - * @return string - * - * @since 1.0.0 - */ - public function getId() : string - { - return $this->id; - } - /** * Is required? * @@ -100,7 +88,7 @@ class BaseView extends View $this->name = $data[1]; $this->isRequired = $data[2] ?? false; - $this->getData('popup')->setId($this->id); + $this->data['popup']->id = $this->id; return parent::render(); } diff --git a/Theme/Backend/Components/AccountGroupSelector/PopupView.php b/Theme/Backend/Components/AccountGroupSelector/PopupView.php index 921ca47..8328022 100755 --- a/Theme/Backend/Components/AccountGroupSelector/PopupView.php +++ b/Theme/Backend/Components/AccountGroupSelector/PopupView.php @@ -41,38 +41,12 @@ class PopupView extends View /** * {@inheritdoc} */ - public function __construct(L11nManager $l11n = null, RequestAbstract $request, ResponseAbstract $response) + public function __construct(?L11nManager $l11n = null, RequestAbstract $request, ResponseAbstract $response) { parent::__construct($l11n, $request, $response); $this->setTemplate('/Modules/Profile/Theme/Backend/Components/AccountGroupSelector/popup'); } - /** - * Set popup id - * - * @param string $id Id - * - * @return void - * - * @since 1.0.0 - */ - public function setId(string $id) : void - { - $this->id = $id; - } - - /** - * Get popup id - * - * @return string - * - * @since 1.0.0 - */ - public function getId() : string - { - return $this->id; - } - /** * {@inheritdoc} */ diff --git a/Theme/Backend/profile-list.tpl.php b/Theme/Backend/profile-list.tpl.php index 36bde14..044c495 100755 --- a/Theme/Backend/profile-list.tpl.php +++ b/Theme/Backend/profile-list.tpl.php @@ -59,7 +59,7 @@ $next = empty($accounts) ? '{/base}/profile/list' : '{/base}/profile/list?{? $account) : ++$count; - $url = UriFactory::build('{/base}/profile/single?{?}&id=' . $account->id); + $url = UriFactory::build('{/base}/profile/view?{?}&id=' . $account->id); ?> <?= $this->getHtml('IMG_alt_user'); ?>data['account']; /** @var \Modules\Media\Models\Media[] $media */ -$media = $this->data['media'] ?? []; +$media = $this->data['media'] ?? []; -$account = $profile->account; -$l11n = $this->data['l11n']; +$l11n = $this->data['l11n']; echo $this->data['nav']->render(); ?> @@ -44,7 +43,7 @@ echo $this->data['nav']->render();

- +
@@ -276,14 +275,14 @@ echo $this->data['nav']->render();

getHtml('Numberformat'); ?>

diff --git a/info.json b/info.json index 049f3bd..55e50ab 100755 --- a/info.json +++ b/info.json @@ -29,7 +29,7 @@ "load": [ { "pid": [ - "/profile" + "/view" ], "type": 4, "for": "Content", diff --git a/tests/Admin/AdminTest.php b/tests/Admin/AdminTest.php index c8e5b1d..a905f55 100755 --- a/tests/Admin/AdminTest.php +++ b/tests/Admin/AdminTest.php @@ -21,7 +21,7 @@ final class AdminTest extends \PHPUnit\Framework\TestCase { protected const NAME = 'Profile'; - protected const URI_LOAD = 'http://127.0.0.1/en/backend/profile'; + protected const URI_LOAD = 'http://127.0.0.1/en/backend/view'; use \tests\Modules\ModuleTestTrait; } diff --git a/tests/Autoloader.php b/tests/Autoloader.php index 0089028..f458134 100755 --- a/tests/Autoloader.php +++ b/tests/Autoloader.php @@ -75,8 +75,8 @@ final class Autoloader */ public static function defaultAutoloader(string $class) : void { - $class = \ltrim($class, '\\'); - $class = \strtr($class, '_\\', '//'); + $class = \ltrim($class, '\\'); + $class = \strtr($class, '_\\', '//'); if (\stripos($class, 'Web/Backend') !== false || \stripos($class, 'Web/Api') !== false) { $class = \is_dir(__DIR__ . '/Web') ? $class : \str_replace('Web/', 'MainRepository/Web/', $class); diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index ddc049d..e1a071e 100755 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -1,4 +1,15 @@ [ + 'db' => [ 'core' => [ 'masters' => [ - 'admin' => [ + 'admin' => [ 'db' => 'mysql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '3306', /* db host port */ @@ -80,7 +91,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'insert' => [ + 'insert' => [ 'db' => 'mysql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '3306', /* db host port */ @@ -90,7 +101,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'select' => [ + 'select' => [ 'db' => 'mysql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '3306', /* db host port */ @@ -100,7 +111,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'update' => [ + 'update' => [ 'db' => 'mysql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '3306', /* db host port */ @@ -110,7 +121,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'delete' => [ + 'delete' => [ 'db' => 'mysql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '3306', /* db host port */ @@ -120,7 +131,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'schema' => [ + 'schema' => [ 'db' => 'mysql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '3306', /* db host port */ @@ -132,7 +143,7 @@ $CONFIG = [ ], ], 'postgresql' => [ - 'admin' => [ + 'admin' => [ 'db' => 'pgsql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '5432', /* db host port */ @@ -142,7 +153,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'insert' => [ + 'insert' => [ 'db' => 'pgsql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '5432', /* db host port */ @@ -152,7 +163,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'select' => [ + 'select' => [ 'db' => 'pgsql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '5432', /* db host port */ @@ -162,7 +173,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'update' => [ + 'update' => [ 'db' => 'pgsql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '5432', /* db host port */ @@ -172,7 +183,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'delete' => [ + 'delete' => [ 'db' => 'pgsql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '5432', /* db host port */ @@ -182,7 +193,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'schema' => [ + 'schema' => [ 'db' => 'pgsql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '5432', /* db host port */ @@ -194,37 +205,37 @@ $CONFIG = [ ], ], 'sqlite' => [ - 'admin' => [ + 'admin' => [ 'db' => 'sqlite', /* db type */ 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'insert' => [ + 'insert' => [ 'db' => 'sqlite', /* db type */ 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'select' => [ + 'select' => [ 'db' => 'sqlite', /* db type */ 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'update' => [ + 'update' => [ 'db' => 'sqlite', /* db type */ 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'delete' => [ + 'delete' => [ 'db' => 'sqlite', /* db type */ 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'schema' => [ + 'schema' => [ 'db' => 'sqlite', /* db type */ 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ 'weight' => 1000, /* db table prefix */ @@ -232,7 +243,7 @@ $CONFIG = [ ], ], 'mssql' => [ - 'admin' => [ + 'admin' => [ 'db' => 'mssql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '1433', /* db host port */ @@ -242,7 +253,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'insert' => [ + 'insert' => [ 'db' => 'mssql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '1433', /* db host port */ @@ -252,7 +263,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'select' => [ + 'select' => [ 'db' => 'mssql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '1433', /* db host port */ @@ -262,7 +273,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'update' => [ + 'update' => [ 'db' => 'mssql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '1433', /* db host port */ @@ -272,7 +283,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'delete' => [ + 'delete' => [ 'db' => 'mssql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '1433', /* db host port */ @@ -282,7 +293,7 @@ $CONFIG = [ 'weight' => 1000, /* db table prefix */ 'datetimeformat' => 'Y-m-d H:i:s', ], - 'schema' => [ + 'schema' => [ 'db' => 'mssql', /* db type */ 'host' => '127.0.0.1', /* db host address */ 'port' => '1433', /* db host port */ @@ -322,16 +333,16 @@ $CONFIG = [ 'password' => '123456', ], ], - 'log' => [ + 'log' => [ 'file' => [ 'path' => __DIR__ . '/Logs', ], ], - 'page' => [ + 'page' => [ 'root' => '/', 'https' => false, ], - 'app' => [ + 'app' => [ 'path' => __DIR__, 'default' => [ 'app' => 'Backend', @@ -350,7 +361,7 @@ $CONFIG = [ ], ], ], - 'socket' => [ + 'socket' => [ 'master' => [ 'host' => '127.0.0.1', 'limit' => 300, @@ -360,7 +371,7 @@ $CONFIG = [ 'language' => [ 'en', ], - 'apis' => [ + 'apis' => [ ], ]; diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php index 9aa023a..07ed135 100755 --- a/tests/Controller/ApiControllerTest.php +++ b/tests/Controller/ApiControllerTest.php @@ -33,7 +33,6 @@ use phpOMS\Module\ModuleManager; use phpOMS\Router\WebRouter; use phpOMS\Stdlib\Base\AddressType; use phpOMS\System\MimeType; -use phpOMS\Uri\HttpUri; use phpOMS\Utils\TestUtils; /** @@ -58,14 +57,14 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase protected string $appName = 'Api'; }; - $this->app->dbPool = $GLOBALS['dbpool']; - $this->app->unitId = 1; - $this->app->accountManager = new AccountManager($GLOBALS['session']); - $this->app->appSettings = new CoreSettings(); - $this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../Modules/'); - $this->app->dispatcher = new Dispatcher($this->app); - $this->app->eventManager = new EventManager($this->app->dispatcher); - $this->app->l11nManager = new L11nManager(); + $this->app->dbPool = $GLOBALS['dbpool']; + $this->app->unitId = 1; + $this->app->accountManager = new AccountManager($GLOBALS['session']); + $this->app->appSettings = new CoreSettings(); + $this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../Modules/'); + $this->app->dispatcher = new Dispatcher($this->app); + $this->app->eventManager = new EventManager($this->app->dispatcher); + $this->app->l11nManager = new L11nManager(); $this->app->eventManager->importFromFile(__DIR__ . '/../../../Web/Api/Hooks.php'); $account = new Account(); @@ -101,7 +100,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase \Modules\Admin\tests\Helper::createAccounts(1); $response = new HttpResponse(); - $request = new HttpRequest(new HttpUri('')); + $request = new HttpRequest(); $request->header->account = 1; $request->setData('iaccount-idlist', '2'); @@ -118,7 +117,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase public function testApiProfileTempLoginCreate() : void { $response = new HttpResponse(); - $request = new HttpRequest(new HttpUri('')); + $request = new HttpRequest(); $request->header->account = 1; @@ -135,7 +134,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase \copy(__DIR__ . '/icon.png', __DIR__ . '/temp_icon.png'); $response = new HttpResponse(); - $request = new HttpRequest(new HttpUri('')); + $request = new HttpRequest(); $request->header->account = 2; $request->setData('names', 'Profile Logo'); @@ -162,7 +161,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase public function testApiProfileImageSetInvalid() : void { $response = new HttpResponse(); - $request = new HttpRequest(new HttpUri('')); + $request = new HttpRequest(); $this->module->apiSettingsAccountImageSet($request, $response); self::assertEquals(RequestStatusCode::R_400, $response->header->status); @@ -176,7 +175,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase public function testApiContactElementCreate() : void { $response = new HttpResponse(); - $request = new HttpRequest(new HttpUri('')); + $request = new HttpRequest(); $request->header->account = 1; $request->setData('account', '1'); @@ -196,7 +195,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase public function testApiContactElementCreateInvalidData() : void { $response = new HttpResponse(); - $request = new HttpRequest(new HttpUri('')); + $request = new HttpRequest(); $request->header->account = 1; $request->setData('invalid', '1'); @@ -212,7 +211,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase public function testApiAddressCreate() : void { $response = new HttpResponse(); - $request = new HttpRequest(new HttpUri('')); + $request = new HttpRequest(); $request->header->account = 1; $request->setData('account', '1'); @@ -234,7 +233,7 @@ final class ApiControllerTest extends \PHPUnit\Framework\TestCase public function testApiAddressCreateInvalidData() : void { $response = new HttpResponse(); - $request = new HttpRequest(new HttpUri('')); + $request = new HttpRequest(); $request->header->account = 1; $request->setData('invalid', '1'); diff --git a/tests/Models/ContactElementTest.php b/tests/Models/ContactElementTest.php index 4182496..eb5fc62 100755 --- a/tests/Models/ContactElementTest.php +++ b/tests/Models/ContactElementTest.php @@ -41,24 +41,4 @@ final class ContactElementTest extends \PHPUnit\Framework\TestCase self::assertEquals('', $this->contact->content); self::assertEquals(0, $this->contact->order); } - - /** - * @covers Modules\Profile\Models\ContactElement - * @group module - */ - public function testTypeInputOutput() : void - { - $this->contact->setType(3); - self::assertEquals(3, $this->contact->getType()); - } - - /** - * @covers Modules\Profile\Models\ContactElement - * @group module - */ - public function testSubtypeInputOutput() : void - { - $this->contact->setSubtype(3); - self::assertEquals(3, $this->contact->getSubtype()); - } } diff --git a/tests/Models/ProfileMapperTest.php b/tests/Models/ProfileMapperTest.php index 949d792..6c76f67 100755 --- a/tests/Models/ProfileMapperTest.php +++ b/tests/Models/ProfileMapperTest.php @@ -44,14 +44,14 @@ final class ProfileMapperTest extends \PHPUnit\Framework\TestCase $profile->account = AccountMapper::get()->where('id', 1)->execute(); $profile->image = $media; - $profile->birthday = new \DateTime('now'); + $profile->birthday = new \DateTime('now'); $id = ProfileMapper::create()->execute($profile); self::assertGreaterThan(0, $profile->id); self::assertEquals($id, $profile->id); } else { $profile->image = $media; - $profile->birthday = new \DateTime('now'); + $profile->birthday = new \DateTime('now'); ProfileMapper::update()->with('image')->execute($profile); } diff --git a/tests/Models/ProfileTest.php b/tests/Models/ProfileTest.php index 1c094fe..0780810 100755 --- a/tests/Models/ProfileTest.php +++ b/tests/Models/ProfileTest.php @@ -138,12 +138,12 @@ final class ProfileTest extends \PHPUnit\Framework\TestCase self::assertEquals( [ - 'id' => 0, - 'sex' => SexType::FEMALE, - 'gender' => GenderType::FEMALE, - 'account' => $a, - 'image' => $i, - 'birthday' => $date, + 'id' => 0, + 'sex' => SexType::FEMALE, + 'gender' => GenderType::FEMALE, + 'account' => $a, + 'image' => $i, + 'birthday' => $date, ], $this->profile->jsonSerialize() );