From be2b495c9e3bb277892ec73d5c5d77bb397bc599 Mon Sep 17 00:00:00 2001 From: maranqz Date: Thu, 14 Nov 2019 20:55:18 +0300 Subject: [PATCH] Add session history --- .../how-to-use-session-history.md | 60 +++ docs/helpful-guides/session-history/admin.png | Bin 0 -> 148152 bytes .../session-history/settings.png | Bin 0 -> 140150 bytes docs/index.md | 1 + docs/installation/configuration-options.md | 16 + src/User/Bootstrap.php | 8 +- src/User/Controller/AdminController.php | 34 +- src/User/Controller/SettingsController.php | 35 +- src/User/Event/SessionEvent.php | 37 ++ ...00_000001_create_session_history_table.php | 73 +++ src/User/Model/SessionHistory.php | 110 +++++ src/User/Module.php | 31 ++ src/User/Query/SessionHistoryCondition.php | 158 ++++++ src/User/Query/SessionHistoryQuery.php | 82 ++++ src/User/Search/SessionHistorySearch.php | 74 +++ .../DBTerminateSessionsService.php | 43 ++ .../SessionHistoryDecorator.php | 461 ++++++++++++++++++ .../TerminateSessionsService.php | 48 ++ .../TerminateSessionsServiceInterface.php | 19 + .../TerminateUserSessionsService.php | 105 ++++ src/User/Widget/SessionStatusWidget.php | 85 ++++ src/User/resources/i18n/ru/usuario.php | 8 + .../views/admin/_session-history.php | 68 +++ src/User/resources/views/admin/update.php | 4 + src/User/resources/views/settings/_menu.php | 4 + .../views/settings/session-history.php | 79 +++ 26 files changed, 1639 insertions(+), 4 deletions(-) create mode 100755 docs/helpful-guides/how-to-use-session-history.md create mode 100755 docs/helpful-guides/session-history/admin.png create mode 100755 docs/helpful-guides/session-history/settings.png mode change 100644 => 100755 docs/index.md mode change 100644 => 100755 docs/installation/configuration-options.md mode change 100644 => 100755 src/User/Bootstrap.php mode change 100644 => 100755 src/User/Controller/AdminController.php mode change 100644 => 100755 src/User/Controller/SettingsController.php create mode 100755 src/User/Event/SessionEvent.php create mode 100755 src/User/Migration/Session/m000000_000001_create_session_history_table.php create mode 100755 src/User/Model/SessionHistory.php mode change 100644 => 100755 src/User/Module.php create mode 100755 src/User/Query/SessionHistoryCondition.php create mode 100755 src/User/Query/SessionHistoryQuery.php create mode 100755 src/User/Search/SessionHistorySearch.php create mode 100755 src/User/Service/SessionHistory/DBTerminateSessionsService.php create mode 100755 src/User/Service/SessionHistory/SessionHistoryDecorator.php create mode 100755 src/User/Service/SessionHistory/TerminateSessionsService.php create mode 100755 src/User/Service/SessionHistory/TerminateSessionsServiceInterface.php create mode 100755 src/User/Service/SessionHistory/TerminateUserSessionsService.php create mode 100755 src/User/Widget/SessionStatusWidget.php mode change 100644 => 100755 src/User/resources/i18n/ru/usuario.php create mode 100755 src/User/resources/views/admin/_session-history.php mode change 100644 => 100755 src/User/resources/views/admin/update.php mode change 100644 => 100755 src/User/resources/views/settings/_menu.php create mode 100755 src/User/resources/views/settings/session-history.php diff --git a/docs/helpful-guides/how-to-use-session-history.md b/docs/helpful-guides/how-to-use-session-history.md new file mode 100755 index 0000000..508c49f --- /dev/null +++ b/docs/helpful-guides/how-to-use-session-history.md @@ -0,0 +1,60 @@ +How to enable session history +============================ + +Session history is list user sessions. + +User can delete all session except current. + +Configure Module and Application +-------------------------------- + +```php + +// ... + +'modules' => [ + 'user' => [ + 'class' => Da\User\Module::class, + 'enableSessionHistory' => true, + ] +], + +// ... + +'components' => [ + 'session' => Da\User\Service\SessionHistory\SessionHistoryDecorator::class, +] + +// ... + +'container' => [ + 'singletons' => [ + Da\User\Service\SessionHistory\TerminateSessionsServiceInterface::class => Da\User\Service\SessionHistory\TerminateSessionsService::class + ] +] + +// ... + +'controllerMap' => [ + 'migrate' => [ + ... + 'migrationNamespaces' => [ + 'Da\User\Migration\Session', + ], + ], +], + +``` + +Additionally for upping migration can use +``` +./yii migrate --migrationNamespaces=Da\\User\\Migration\Session +``` + +Setting user screenshot: +![Settings user screenshot](./session-history/settings.png) + +Admin screenshot: +![Admin screenshot](./session-history/admin.png) + +© [2amigos](http://www.2amigos.us/) 2013-2019 diff --git a/docs/helpful-guides/session-history/admin.png b/docs/helpful-guides/session-history/admin.png new file mode 100755 index 0000000000000000000000000000000000000000..73281745bbd6ef66dddda8c20df164c07f4fdc89 GIT binary patch literal 148152 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

@BE$42xn2?};-rzWc2sMDDEa#jzcpf*p9wH!I?F zK)+5A;kRh&RBTyPK>prM2vU1+7ogI!o|&7vN_;S>sweq`z5Aqg341CEL92}j&=UV( zbM*tx*yalGV}Gl95{BUEr&4jSf}M)C0tFv}5K3Oqhpv(N_>#A7NwY9%W;S1S;mFcz z@PqSZB^6H?d(JjEb_Tz|gVi1a``B#K$NA~UtslKSjm|53lXz$XOXP`K@% zSdKdA;0&I5z&Ux*z)q5T$WK5j?bC*npH3W>L8xn`O^fQ!imEwjAe>XbvGa^;j;7Ml zU>&W1TG`ADu+T5Xt;{=7C49pH14@b*%5iXCQMug|jHv1%cyRk;(FSpPwF$C$@1O$= zw?9^}L2@Eb(2=lP1%_%r%Geq(#G2}tx7B!`67EeGNjf%%`0D3<$cj&ShYt1pNw*N~ zav?7O(IN^bnT*#yxNgsTh-2opBQ7?l2X}wNg`7u!iZgIiBq0Cc{Dl+fbK6=NXn%sr!h3Xdn{$A*2n*EEjWAmy@erbY=#-LCzO($3tf{``G zMj5o!Hi2Rv^`UX;=p}nl<|yt_eErPRh?0~=dcz*~!OIrib}nB*x#m_zHaA<&-w);O z^mIH@Z7%D&A!_GK8)aKt@DX3z@+A4F+Wra$Ia>Fbm|Hje^~_ns47G;m53xJ&hMulI zRb>BPTYIw4I}I4S__#GC+ELH9nB_D#>^A6xu4UT@DoKQ%iS0`zC7n`Rb2m!vDb^1_ zIE1q@cy~+uAwTkFlz|$-M^g9-l8QiAesueDZV913NVHje4^VV`O!8rCIOFraCUfSk zGnA@3ZjzaWJEzboK4ek<8AZotophw3zpf;vD!Y#V2eqw7cvbf3+@S#EyKzwi@FW%F zO_<Px1E8p_XLY@b%%tir>u6Vx^D8G}aWv?aj=Hs=M>uVwm znn>8myv2wY2e_!5TW#D1{crXG;HrDOFI^TKHuIa`6OUY5=f_AZAc^FRTc~~R9os2) zRO+R9YP`&`yetg~8B|oqp(qP~AXP?s`js4L*HSE9L`z3Z>)PTGJn5OGVX`4UVqO>N zgyRM38Pv&(aDH3gn}}EBelsH04hz$6wbD*rrCgP#{ee$g)biHY$JM$UB?19z8LP%+ zWM^uoiXT@sO8JWlC?c1^6*=gwT_E)fmu96Wfy%w(sUJ1uH8#gK z571+cq88S@U-NOB{H-PF1Wl+X!-bednV(lAE-zdE%|y1?u3W5qBMz3gr`K+B<9p5j z&WSZlE8~FH)C+%ib+1}J_j*N}3239CUBdEs>FE0cM71lfqFrcs>=dowc*nxX>OXF2 zik*%?5NYs^RfWys#N7>|7_*YgFZS<^_)CKAC6Hi~h^xr>a+psY zDY!W4sK~BqUdF9)mDsx? zaajt+Rl6}40WWejQrlbgCENC4$vfJSLpGg6sbaL>NdHh}F@FYRnAX8Ga&(s1;E`|S zRK-@_@Zx-SZQ1q!h$^nIKGklwdJ~9}`1;ZLC2js-8wM=HOik7tZ|LGjbPK}z>MSvg zNqx_yygxsGa4U_e&Xq%8M3Wev{hN{2>jod*blDyVHUxj%>R-k0Dv;^p5wn|3G!@NI zXB52mHaT7Hl%%$7eMxtJ!dCVwc)Y#AH^o25;$pzoUF8_wyeX7_sHcH5uvPR|hKPb` zLB2r5t7SFQnltxyk)M2v5&f&<*K$*(U5j*9uaqA}A5zBqF_MLjv}re5aRms5sgE+wwD_$)JYX=LW{CO#KHzYe8p5*HKB~qYnU!7j{G-NVbdEKq0}#s~_Kk`U=&C z8JCJVp+u+5$HlNZ*?&p2xi2T$EE{p@ZmGYp?z}hxf+B(}wwLM28*C-4%Dvdpc7K@? zzL5HUJ(f4~gpF1+L_umkPG*6p}Lcvr300}LJM(lhwlv_<&D2-G_St72_ zey9f~(|u>4axAY0gSLd%CL}$q>%A2(W#fx&YvFm~d~JHNTd@6NO-`;EAETuQlw&P|QBPVmv48m4Uo$G>9& zr0+aLzdcy-N?C3N%LC$$-t-XzVY~_tl3Hvj_P3U{+hrb^aGEZeC{w0mYV3%AU^NIm zzP=BtstpP`6|y-N*LsPrxi6*2k+2Qnmklj}8x@P7S36TzGFyob9RhrfSNxHPYzRL$ z70|l3-il0kS~T~)TPjv5)8bWesk|a~4TcCgDt(O7drCChLpjwlP(ZK>sPPk~_VlK3 z6K4WvZ}GJnA33wQb51MADqD&BnWI!M3f3!8)s|6N&5~9G$W~LJ!HH4Ompv4`TV%`w z0VEw}Q_){emTPH7QPgu-H{`XnA;}77JFBY} zHr%p$=|6LAFBDCni7Zl|4+wAjk;JKveTY1%S*3!F4hKMRPfOVq6|MeW>ByC>2N=>i z{WoEc^~+XXL~lm@muK3tQ4;QQDQn3+y}z?veb!f|7Y4#BLdUAEe={)W2OiC^Q|F~L5W(n{U$~pd1T+MF}7qS6&C2^AxN$H=maepH?{E~_Lmr(!L z6*B)CxBt&Y$AGfU|8D=(o2pl^K${9k@trU<-G9c zbcIl~YL6Zv%PPE0c~$mK1KYbLsN4S{g#>kM2+SN?fI=t7@KQhgFxOVQO}<~rLquV= zcff^BB>UMXB0a)M?Nr8yB#{PR?S+6a5(4(Ot?cr(@lk4*mR{qDymns9I_@Kl!KsoH zNjdWozFrfK@<8ec>fF{sm#*@^l`LTKBK%g?^v(8|awrg`vOodPJJEs|XT_`f5I)j& zHc?a??>#l?_>$`v`d#&4KQVV2AJWem#NCO#9NwDiSx~p2fKdun*|b^ z(Gcvi+Ohg&fyT4NO(ti=fK9)0rd~5`i_eY+@57R_9e=z-IE&kKor`z&wXxqu98b`A z*DRArOYsMN|5@rNkG+;8VZeia=SA}I%><8+j78)VaW290HE5q^##)XHB1pER=$$d- zMPvVU)k$hCp$0p}=KA#Ff2!rEIx%zdCt&X=F1lydk}_tV#1WTx;A!+)78chuwS}EC zA0m^^peG)+4CwZ6!AjdaG_7}>JSC-OCrFG+$f_xKMp3JT!>IQ z;e1P+3T%<=)joN1Lu@BN+Aj02HI@TLQE0KEO>j*w-_oV*JxeR=xP(k1c9ZlLzdes8 zE|vu3lj;VUtYHC@=Xz1&%%zW@?eb?=qtj;No9YO@FkQP!0atjVmDWm-{Ao5aC#Ou2 z^79hURpM2fb|Y-l$jpHBfP*nked=ETd<7~k3pA^DX)u`Fx) z6K2ftN73)+xBDeRl*MA~F2Is*3j0p)(DJAyP&d(KT=phL!VNQUFqV4n{-f?6cckQ4 zUbRqtJFGxa&wxFmPIj3zRv?q@&pJ_zu(!{{yWD}Mj#VuSy%BwtWcL@+`Lsv7zcMzu zI*N^r(w?rCrSsB1;cn~^D;o=QR^}psVitrSh|Iq99CCe~d^$&#=X!`rn9GChDuF$4 z^O10I*F(+*?Z z=cYukUnLS~xi5bbyq}C^l4odDd`8cml2=k?!u>sM+*)T(=6mJ?Y8etCe3hu1l}^f< z>$?Izoz-dlm8-FF@aOisf-O(8b1LlvxCK7CzLqks zCbf+K>hdfu>JqKQKJ0l`OXp~p+P=_->IaD0iPjcb<;bKDVY$=hYo@l+>|pCWV?XUa zZ$i}MBcMGfBSX9*Gie8m`4-%t?x^cg^$t`hP`xKT7pTzq2AH}pE-FH*zIrnA7}=@t zb3yfr8>~0=V^dwx&?nc-_jTPnD6nvSG3i-$dk-Rd}e5v1Myu_rbU#jEE z^VTQv9%a8LFan#>OKMBw>$UHlLO9xN{#FP#P<)_2B}<{_~L3@2so?jH>zF2Sr6)6yLCp}d5Y+h z_+))2Orb&cK$}!=Kxr;t2d%`Y6J$-2H6DF$=K zKF+WQ<+?S}U3a0#K8dd*(X#3y zZ1L6MomDE3;b~4VE3+pUSp;I2lr38vm7a+mjz(gI<8DTG+#cttsdQLO<+|JB-Mj^# zlbKCQlLmCmJTgI^f7XfMeuw&&1rsoGG(fKmGK}>o1<#$I8kpRbt`Z}m%Mdq<5U6A z8oM$)9d@nl^Zr^?i!~Gqnhh7S>G&lH#574AnA`@|^pHy>hHshHxp@J7Hzx~WYJcom z?k;hb*kv$NRsVBxk?EVzS<)6O^e@-$?%hN3Y&6(cc3LQk+Z5d$Uy`$5#-wH6gzfji zOyA@{w;RYOh76*Rs#sDj#(1|g6HWFp^l~LKJ-<%VUHaMGz+^iz3|Z->DHlCUF{lXj zW3;f!UHR3eQ$u<4q_d?dG0K#n?!n#pX9^MHWjem7kXkK=I zaV^pVmUSe}SX^3pZ1lj5O5`v`S6w8WZKc^iz89I$9Vk(N%J%tAZh4sYOW4j92-~GZ znxCs!nYSFa1I4a@i6xMWrjMWt2IsI9r!MJ9^KDI_yVcDN0IYWk9eLibu=|lQ#hlW6 znHuBffNvZq=880alZ&nAI%fq>mc8$smXGrQwKjA=Ex(rZMg5pKx`&S>uHx&2N27;o zN_9+SBpa{|=PT90kGn@aqv4>_I6ZZYW(Z$u(dwi7@eQ+J(50bBl4&FSpUf^_TTQsCPGxNt?|LBnBUiRziX&k{C4=?(-9!#!PI=q(TJq)|i{rNOu zB8#6Pf)wVuq7e8WyKG0Vx?q0hQ?XL-H;Y%<2gDh?tW$>$n(Y0U!LwY>;MrVUM=o5S zde$7YW06t!z3$J%uAPjVUov=ad2NQh8CSGuPI}$uC9jpp{p^GsYX^0Rm5_&i zDZKdN1@3Cki>rGKH-y*vlkrAICTcpySse{N3`expcV9=*S7esxW>(fE z)^s=Amq(RnW~A$-$G_hCZ)o3x+Mt$*`W`iSL=zf_J`(&{Y*SI&>SJd{Sc*mV2A8zbG<};&aB1o&Y%kib=dx+ zuNQl9j&r&%T7@;OPBGSlIMdzc8w~aYO$Mo+cGSiKd3?PRJ#i+!{Y2H<%{XUE5hwC@ zUi^mhe3@M<5{cr;`Cy=#bO^ieneTU-QsOP%DqLbXE~Id_Q;`5Wp>D# zkuvkY6-1h`ok^(;AC!kviNA|?OG^aA)rbl&u?r#j26cj@4a~V!@FfyegwDPV-!Pl; zyhPXE(1H?lKdy|*-o@A*ZoW3)`rHmn1CwW!B#32=664Rk^c>hrkliBa1-8hmUUcdR zKVPM2TT;n8&^RwMMam;I&aV_H|v|E^%Vd zi#>Z5NbE)UpWOQMH+{jzt8oheAB+@jJ0hjfadg~J(=syQhErwR0FE$VU_l?c>MSw6 z;v?8%^jG2=FS9wDRApFhG7IEKV$WnHKAR?>74HNp`_?j1t5wz=NVA929d7UY=HGl- zII8(R5x0BAbevGl04QR74O0}B#M~l&`=P%4G_b_--=xI2jwP{cR!ij_9KNO(1pz8E z_sl7X_@YQT(oK|1?D?K_$=td%ok;jSOqQZuIfUP2XCR;+ZJ9ak|#$$Lg!Iwzy1EvU!k>c3 zFL+H#_D{U_?_+&pLuA|fj~`IL-k?JozA%piRUOCE6+xa29Pg?}x}uRP`;nis6XjCA z?iLkC_MXGwYM}4@;(S-wU6PsHK zHbDpKQ+sMWL4lk$AlCA-y4#Bzb=K!@sSNbZ$kfdrbO2vFM zsJE6GhscoWCX2hMKd1HR2rjq;cQJG>29Q_s_8B@S1(TY-S#oh4eI}@Rzcu~5wpr<% zw{MW|7N0H2m#!YRh=Hf1w&k~`nLfMRa=r6XjZ*HGf-C;)aT6&2fEb@G!m)q#LdvL# zwUC74VlAYXl;qm28z}+1`iut*47u9sx(!VkeS)w~2$0DWB*kNnGLMU;kSBS8GU;=4 z>K%DnP*KGgU-8OP)syx5#=!=Jb2Vtq$@oRt3V+T));8aD*H(S(eVls8MWxpaLf^nA zo7onEuvD|4Sri^r;e$#gdO5q3O`OLYq2DM{018n0I1n&G2Ac2YyBu6|-v5oM+hMN8 zXn0-5FmKvH#|xy@9$j8_o=jl4OViK1_Jc=^)j*m_J~F84Afl~Mn^rTzaftrtg9NKz zAF6wD_F+m!+3SDAXFD%XzB&_o0PV~ifxvOVF|R}*Cf|-v8K46(9YIb zc?m=*u@2H;vFAnNcklaO;&Omqb3g_uGbJiM`rF=e4>rq1IA4Apw?ttqj_vBy`NnDV zIUTp}X$VCBauc6%rA^5)>1^3;DUjWAHg1}k=LIIrsgo2=YC# zlKS{EGsK(Fsr%`J_@h+P<{ehq&pue zZVdNmOE(PPe*+kj_*ko6=Oca0^z`kQIz>c-) zRz(YkOUj}%PL{RCb%gXSsgzVjePU;#lc%uMsj;fH9RZn%mTm17ou$E@at<#V0s?6o z;#3&G&c3T${{qDX`s&3_MIouDnXQRr6{TKcO$!6*$EmII3pv#5`GHvi)iY*Itz0JUdg z#{|t~uOh(BF2GBmTT4bzjt!a5Risdv<9D#AO{+_5chR5oCnE9tQ)GdE z=DSmuBc8(m2I%K^m(bfANU7W71fETlXL#>9Y#1x%X1RbvwTI+LxsY%kSR=Jcq1iox z6*6~RU|hXNJW*r!A7~+|tc;mU_#bMveBK#iDP%^?quH!i%vC8?S{(M&ot8cEvRC17 z>#s30K+cTMIt^<3O?J==n(M9imFElh8JO7vIkr&bP=`)Mzzd}-fns##cpmrL+y3r5 z4?WQ(of1*57j6GJ!{&)To=jexu`NCdyuYM^ycdX6GQTOou)@mzg`~jhRl^CII<;Te zKOd&UCE)S*;Am3T_Pos4UE`9VwuuaapF%IDqM|cF2Sr>leeBOOrFs1O>~Z&mdsVMq z7}`eb(LU-RBPez`MEUq{ZZNpFni_svtH8elrMt#A|3N_*pwdg$_JHhY#)6dBC zVssWB>aX~Nec~VN2f$Oymp=B74dI_|#$PwW8wMcYUvK#TtI4qM|E|LPi{cXaFn=jU z|2$T_tYci<{SOane|_{?Iw^S!Cld0T!GbO@!D7YxiArXdK4$rkw5Mx(c{lk&sO zr<{kbT>uI;{@Omb(Qfow<%vDF+fd{`=5-fcRcn34aXHUzUqe*+zSzoeaM9cER$RFC zw*`6Mt*}_R+;RBVlDQvN#4*3(#yH_^8SJYop(aY3slH2I7R<^WT?Q z8OF(jGMIj^;b#=^|Ms=PTB~$I`kNQtOP}N)e6K;7>CI#R)`e%Jm!?ilvyWGvaK&?Q`|7)r9@7<}+W?b;LR*|Ko4!A-bC zWS79mc06a-{=@Kzc~7jte^sz;1~J2fUw$6aKQm=^717VB+DNpK500ad+R-J_w-k9k zY3TbFEek=e7>-ceN;Og3T`4{=F-FAF_L4RAic!-%^PAOYt|vJ;9<&>3*sx`Z<|c8AIl!i-CYolHTYe70O?)^tP^np&lc#2D8~R=y^|Nr|0DvcH?kg{@0l8 z-{skye)}0bI;P{O2nZ#?zPo$=Da~doliQjW)T?&%3ulXRCwKj;P_j^I>WNO20=PLn zd}@TlD{l`HP(z=tQIsCTbO|KXTEgOB z0iqFNGrLSiiG^O;o)*&FEfEYx3xh zal#n->Rl*Df_Frz6P4wU?&;>7L-Gj^?C<*uAjDUGxuPNgYiH4064w9qN1tRDNaqY) zja6mHCb*Z!jv4chHE}!=iq!5eRbDQJ9R8N)@ITr5CVXAMlmc02<13# z`y`e;r5`$lp(8MQd6S-Au}=J;{whSM^kVp7zP$)DxI3$GzCBG2%!X|m{z%pe{!~lm z{}MZ&6%D1^9+Re7BdgH1BIyZl*E|lKW@Xna)0I<|Qz>fuXSB9_LHHM(RyKYrIf?Zg z?d<4i=y21FVPcqn`nYxAccav#=uUd!R%St+&I9X{bvKaBCDq8*?+LVnpQ_Kc9h(Uc zFCy+!4tG48`2>^>N^8A&EP<>HZs0V5wlFS$P`wPkG@P20@I!u$vzObG7J1rIsn6j? zcrR%szY1w{uF>Zm*$alEV`mp?8DVU?6$uC}P}3CrG|sA~?oVMye-J5?e(1;?J&Wef#&7zjgZ zLGiC!PMUsemb5CR!@(4tC)aiP0VO7U3Xq$M)bTq|ALwDwnCQK(G3|i)BfP0w)kSe? zDw;G2Jpp&ohqp{@_0^!6qc2T4NH*+-UBIcQ??T2&YwTc{`(#DU%yXdo=Klk|d$Bv6}d#$^q<>%6IE0x5oC5zHv`d+?W5c`)o%? zX>|K8lwgrVfN|`bvYWSfDh_;|XNz4CoOrgHc2f~!18Lvd78`l`iZmq+tDXZTtFd5Q zFFh&7MowYRDHDyW6ANXL=73akc$t^c!_HfesAvXH0op=y;(88|{l+&qEY zTMA#pW!!of@k;F615V_F%#=9C!wENP@nDYf;6<1JP%pWKT~?AAf4;3xPDOH}^4VzN z(;K?s0lS|FKD-0^hkD>*s0+~p9GV` zti8n*#G@XJvJ(4a=E9$tF$|rmuq9N^l)i*ok_ zfMvs_3e{N4;EWPnY*%AgQ;4gKuzVRzSBeQY zZ(McJ5b7O9aJY9X|E$FA7A2F9%zR$Cjhli?G8dA@nk zAxiD`Mht%^QhM-}*SIdvsHLwwl|Pjsu9E#FHd&*_*_$!LuC0qo-TszzV$YqpAV`<4 zfsQ(tO&tkj=%k1@KT`GS`E#cnSE=#bD$HnSnv5Gnv&$*8f{IbgZ?kNo^y7)AoBqnZY`q2)7)4{chM@NJ`Qe;L zi4zDpnF;2EBK2ecpY`^somvCc5lNRazf_*RqG8@5t8s&eSy7K8iVsYB^e!SjumMZO z=P8~bz)`9?Ac{^B2C~#35mhyb)q?~*H*@dF>wbe_I-pP7tLu|tQmM;)kNO0x3MHP! zaAQGt$QYISi=apG^_pizyR3l_;eDFI+4{1@2umsct^+;B{3p9k+Ag}}eG9*=|5-C> z1MZEgvT@6o5iyhc!T5Kh}Ot)LM>#RK+)kpi)2 z@&f?r@04Yv1$_veg5Z)^1tD!qGK((_FjG>34L&}I{wwOIZ3b}#Mp?2EXC``C_A%&d zL46gZP}k6pUb~zaAjxKZ6MSE7g=^`|noE0IGM0(}#pLp^i{^LyPm0N8EZ^oOD!L)OCCtWDE7XZbilbUNOX}12MGpfM@ezdS0H(% zzoLcaF&|-;8Lv+9EYNng$FcmZ?l!60tt%Zr5Zh{h0iuM*hCvr+>|{=sWS6pLw@bkM z-0lbM#|&71Le{_{DeJC^AhueUWw=#KBGrL{9?N=QJXJ*_(gC`{W4`=q3w?-y* z!iwcZWgI-j80O;bZ;WMg*!LmEjoO9!bWOQZ=HpFD#>maXDSIWkRcbL@_hS}cE;@i) zk~)+;0-TT|?@G59sdtc`gJHa4fK)vZ$Jtn_8zdxxZ`kU9(?A-Dk3BXZCm~mFej5^7 zy+ZslJ*mdk((&z=Gx}tfe22FT*R1*op&tGRZD+uL`HCmXj>eYaE7r=Q0EI#~eH3#rF{w^5yU%Wa1OncwMJLGbpV>q8-IAlDtSteJS zM;C1rjzsm-4WMHzu0^4xTd;o-`nzFL$Femrh=eU(T5H}=}HrkCM8NJ0)YsjN{LF`g0*JmTyw1P z9pm@A;DE}t;No-$GVSS?sEJ!UI4}fqBo$zoj$}#e&hOLyV~%9{l3nvYXOk{~{L8Jn zQ(zP;ap?0-?a0^P5`xUPc+1I2+WHObAC*paJ1gIme;$n@qZCz3Er6%#dDhS!RV4WaG0vO0{!Fac4+EZ_Nnt+cKnvEV3v0L3AzOle)rS15S71AwgazG0gXRBRfb)C4}4JqlN zm0_>#l?k(OyTMd?eEsN6`7d2sYnyf!dcI0o2xo7xG9q{$eKKMI$!wMr)-DzngZ;j(yGwzSZULynYn=^w~YG0Q30&4C6s+1pv%?%TF^+->5U4+XEegv z#dXas_!!L1NgdOjVkpg&-VO6N4vZL*^FPl7O<`Tfei#n9V)~XgGE^9paWA zvmS5X)AxU}KWljzBg#ZgA+*|f;7d$O2+hn&WIk2_xH+Sl#>|2;AGtro6vc(lo%HJv zh3AR}Urvp=Y}6{!q@`w%RFHon1|I{F|G=v|i;&I9E2)|S%xWn^jK5Nvpj7uDeapu| zr3%=_M`mAJw2tv)5fJ$jFMh>LdRYtAG&5VM;iziUK+AzS#(_h#&Zr!cs1Di{prxQa zV9++I?{8Op9Np)NI`dsmQLUo;7gso%YOhUdBn=EH_~`5?MQW=xX$D1R|5))h8$5h- zj!9Nlr-t;wmw%;9)4I`jV`9HIX!RX-{wAD=Te9a-|7rr~*n)Bp8*m6JtlciruF69Y z9%ypF+{CY(I{W%FO0!kU+wD~Ux>uX;h5tZ*mV>kP5f2@A*SOc+27)9U2A*}39>#+bwucFFK(j15+RR3Y~23bG1vN`?i)$ZK12iI<#t*@*5}7gH8$QXtco z*i%C_(`M4z15bHT<*4FfgnmoW?4Y4@1*pkoBce;}mxjN)Dr5GGA+1m?08`4h+DVn+ z7VVcAwX*{g`R2!$!4yfnn&jleE9Wx>>9e;L75kS6)1_Zz5*st~XN2d znZ!pn+TU$1nd-@sMXa8MF$!uEyGl3BPcMQ684gv|2^4#vA3yBRAKRWgT@799k<`4g zgN+Fmv=9FZ7L1w1b}R5G7~g#PX@TLr?c}59oWJ{k>-bjz#6xP6w0{ut`{&93|Fdz* ze3Nf4&tM(>fd~5RnI%<1U3~xPqj1 z>8}18xy`OBokEFtF{TaJAAFoS9gm&rS3XBOf!qlsE8RD9zE#wWT8H;Ii2Qv{S$?0B zl0w5;8rUpbf&u(-BL>$-$50wGZNka|oWQml-St0Y2rExT{9(PhvLWT}p&4K{l~|D! zDt2(3RYk>7x8%|)rIGVNihDHuL_6VwRDEgoy5m^xqX-Gzv#HaFv#yV1Er;AIZV&c% zW4e~ZSapM<925g|I*P<+e(OY>zsZ!F8m zkhc4U%;H}d%~+>>aB1|N*>cuAzI9#%Ah~1x)VmSE=sCpA7FQF?r9T?#PnCv(+pM`T zRpgf|fFS-KdV`ZJ;e0Sem(yy#2ETw`jmx^ld0=pr&s%1jlI|=x=(_YbfweR1wH;^M z9hdWJ73+LKK#56mQiov=rsZWVh03Jbhk4Jtb;$QDZw6s=p0!=9 z{8zOG5B|kw_IX>KS$h-g<|rj8G*lG9d~S_puT;HFv75z>aLrDk=O%6qRgVhW7q%rV z(qyksl#OA`=F089DGiQ&BQqrnSaWec5!fSW<3e&W(-4NF6gs7)*8pviEQmKDWim`) zRUIa%IRMST<&Mx?CKLRA(vzZ9+(Si*I>t4M+y}bpTgtP7ep@oj*p}YdxsUli?;t6I*s==&b^J zcATVKu3!B~Z{Q1E(0PGbdEEi!adgY!_@OkY75!6aaMAJNTHcU@)F%H(Q16quyY2=} zgIaeB3AdQAxbf-rkh%wu_0=(&xPdx@TxkneWS4WDtqvM4pJMKv0@NO4BIqq_bkqT+ z0#l&+Lcn5SZG)QaEko8c*^EQzh<4M@Yj^!QzEhbiTTq6h9K*WsX>iQ|c@WB!x7k!; zwqjfuOdn^3#0~kb2NZp|b$ZtlwCmZ)4}YsMn9eNur?uD)HE5LCcSWn3)|9zs2H35m z09`k>+IphS0g_uEU5{aTAYiCG`bR>jGL%x|3-%%ovsAS>U3BZG0Jq2UeZ zHouat;Ma(oN2x6<;~0lSuOh8$3N(P1J=yV3ohn}Hgfbn!M4coX{zbzt#%ZRs;3_hd z(izAZaD4M&aeFp)aOef6VH;B|#x zX-xSRjX7Nwqmo1BCJyhwLQhV_p>X4a;52H_P_&jGCAGw9zd*-OiBr!+7$qI%d2kvyNYVi8eYp75ASXakWw~VKBE%e&r z-@3nww3N>4v|wo0kk>t}_nWVc0on_WD`5kuxmGa!{aQ>AqxIRMpf<4|ON+2N%*y=c?(xbSAgeEg7Mwc^3l;uis`05y z+eU{0@(vrQgWkh>s&w#~x0Gc546~=@AI!dvaMb#r9jW6~lsAqXV_DFh-8G>U^AQ7IYsb@zQH_XQ_ zJ6o;r9CbQ$G?UrrWlFYMME1M%%ZjqzCeLduId0kZ-56($yT>&8(nj2lV%DGRNn%BO zj7;%=Z_`)lIsRJ;bEeU*#Xtt-TRU$p&~30Nx4XrE-K+5Vi>A|HJJMWa1$l;&-028M z1M(l+uQyX}ZK|NWG!KGCa5^g$5wr~=TymuZWGwxhrm^N?RI%Y2R)*^)k=;L&uK5-w zBHjY@J^~=CtxfI{24%pQF~5Nz2?w?TVta^$DCJ`i{>6m(-BD#WdZz40?wJ6l0$1S( z4={25ZsDJ%hG&bEcd2ZeVQx;i968dn5?WX9?@*eAsQThwjaeqZ`Zp_Pg_fYt(R$${ zessT9M21~*U+O&f0W9>|vzQFbv&GA5je%~VV=BjfEn)i)_Y8dpG2!$iURlV2_a)r` z#C@2=mR{f!I<9I2HT&jL8sYVw&AV^wU)cr|sVSPb|6V1930DXlzDsP|?>R0(7S4Jq z^UR4YM4Ip_@A|cn^n20c_HEm`4*Zw@yfQFNebeFb5Ju`gy}SS-33+5Q4r8dUCJEey z(cc{a)|vc@UrtU9gxsayuJI4XixR*_YqgJR5l*Uo5Vs5m_-G+h$=)nuP4)&Mb~aaf zyqNoXq#)1kfeq8t0+b6pCm>>MK)?|h3*C>IziUty)p7cbGUBe%_P|ZzDAzXhEmwft zS0j?AK1_u@Mb)x?Q{l)VE9(vvOQHgBg|dnwepd@l4Pja(H3(%7i3WN<`hXg{2Idxf z)KOV0EHv!Z9>gvp;VED9LYCmr9%NK1Dc-&={;$B7VoSS2w|Rit{gFx9;I;}&rpwp- zKGgBQr1U-yzm?ZRrF|12;Yg?!Txag%=H3gCyYR}$7o0R_Ej*&Bl ze9V4%mf}*p_YR1OUV4V^%zs)d>coKi&AvNx9USNBTsc+WeM4swnpRM#Ur=Ivvan%7 zrSx^F52s*Zc%x5j<>Jw?ba2eU-39XELk*FoQgb(0f?cA1D&_rzFCTtfo(u$DGwi>< zv01|iS&nVZFdN5vcgoSGLTdd@zn5UYmhX^L3>Yif>v;LA$CkdW{y#x4*VX!FT!U1c z+<+{&L4Xw=64&^s!q_>_p+e2Fb0vtE*>Gwv=2Q5V`;0hXNx36k?RPF)kZQJXE?bBR z-aT93<;>selV=4)V)M~lJc@<6ut zZ26*mLFkO)YZnzigP*sjnI@=v!wl?ugLJfHo+YMh>8m&%;{j46%p&ywJT}GwdL%_B z3Fm38Y~a1%`sd69I<6CkSg%Daym9dX6C+DIT-@NXgJyJm_Y*qtl(wW*NTx!tf>OS9 zJyYN-Tr*;%;+89SL=qq*(1nLMK<0jZXo4SHmTQaiia-|Km`RK`#%RxImlcsJJ5<)i zn|{^CGXjgOO*3`L*SNRMv3h@MpR=UxJyw`YC;BSbF{g>INu%=fS5_LRj=qqnI64ZWvYI>za_Pph@uWnDH zxH6M?M~6Ic{&v--K4CT`G_=RG1S5=u_!ULmrvihEv4iKKUV)~wE(_lT@tO-E9TjTH zp^(ykpRg7?vZ-_<+>#U*sol|Co)mt{CF!<;R%XukOja;bOQgZ#$Z$o%4}Ow|1E9_F}xnzAcSejJVQJJ5wq@^-y>Nx#MJZ~S;QzPKmS^CcgJJ`;KR(HRTk6cFD^{8+ND6}vKvbAImzTy- z>_1SJ_& zT#jPrY#FU1MJyboPDelQD4&fHElE-1m1P>TiI^v0I=)H~K2DDBt`;7DJ~kwovBg=Q z(!p+h3Zx(1NLyf%=}HyyPe2PyAxZY0^UfT!$#E#)$=XCWH7)wh<(VLx#h?)e;A74c2QAM?}!)SMC+@`6uaQ68$m1VgFi~4-R-$k`@@?N<@JyH>~l z(!h(Z?T@VRD44pyQ&eX3LA4(_YUaKEI;GyW;NR^=b^qteu;H4t5`jKyXLHynzA}#0 z+U)S~V%8QQ7nL_}fA{P){t8(t^~Zzm@7lJFfA8;t3e!r|Y2S4eAG3Rf?KdHV`#*2q z*=or6`<@qNCS&-&|L4EauuBbzJL9>&Qi0NB(w6LlzkyNz1tl*3iRkFx&%m}Y%m0`` zZMhr$8_l4Yb&%gA>u%4FEbf>N@fUbn&lvN=h0+tP_TyaGRRlY=`bC^;&rcNj#ijo8 z{%4j(h_P3HA#rZtu}R>iK9MN9@lzI?R<)SsaFK}O7v^ozdkaOdRhl==!^T-p`Y=R7 z3-*PM`Hn0+zUxPD_a`QWzxsRZa^jyW)+O6ozK$F+kEtV?510Fg`uX5<=KCw9Y@h{q zXDuo_RSdE8+|oMlu%oHc1l?niG>QNQ{X6a=^owMjD)qZ&9kU69C5u!xCm^*2%Uvp> z)926A%Z6kY7Y0E|bqloOkMzrn8xkNlQX7=nX3$8YKh7HSL!+e9{!z7VyvSnc8bF$W z3mzGw6ZHPd2aW9GYtuptAB^LzCn@cnKHj3~;riYxipNo>>z4bFRlG13V0GSA+-*JC z<#HdN6g5bs$YT75GToWKWiKLeKJbaq%XQpNw4T9+wT#nbN1xiIs>bKN9PUCNi4Z*F zu!vcMkBK$K8|u#TARsM=1datC+zcpweA6*`9I%J7I)?j_f0mITFM1jM(&Sh8^6_m! zk{Lt~=UwQ>A8l<0^Bhc{_%K9@ty(2zT|kv>3>2l-#!c{s1V{kq>XLAzUSaY`Ph@#y zDnu!}mhXTH+#$dk6I~-xYiKi*az}f46}1$ADzgzy_3z`LYAs8zG;SmbNMSH;$z`}j zkolN|rPR^UvvWhXN_{?4RlgK@GW!zOJH<=J>IYrr+tX!*vT|iEHDx*;9Xi75S*3$u zb%5t0{JpMu%;pGj9yUXCNwx^1oX>lT{u?#uD)@HSJl?EWsc zL_buxGthF%3TzxWF?3@C_%<&%e2DI9XzdQU?muyNY*R_VSjD|3Nb3#xalO*%T0<~! zSvpzbuY?dVP0%g(TD>kSs5G}PIJe|tXW@~r3NzlWt{ZlHC7H%g$(-Ab`dD7MXbT&_ ziVTwT_L1zavF+^*ltfPl$+8}Wd^ksPWnb{MzB<`3KU>b9lsV&i()Hz#)sVR?>$JR0 zPQWpo7*6MZoB7k@;QyxPPyd<_otHbRxgFXYGz=NqQld-Dx9(Z(M-;%Lo#(IlY_$Bf zsQft<5t%0r*ZjmW$=^(%9CX@*wR~z<$T%)47IfA}Qa3sFkxP+v+3ywRtt-l?BRM}L=1$kWDkfk!71`jiFVNbfbH`z18KZ=vhGC)?2Q!yXzowKVz-(yp zvxmNr-KPp++NW4-OwZ|)3d>?+Do`%?1|%I^o)DQ*VC`c#hw?2j_To*F=y4q4a&R;F zh0EyrjVKDhTyGoG8b(NT#Afe;AdX6j3w&LrjrU_z?MQP%Uv9@Vxyi~Z`1t2ve@jSb zD$VuG&NM!Lv65%Z>^5^Zrdtgf1R+;u=R#MOKt7anuGWy45@yGSFfD+`WFm75%(M=* zf)uF6FDhax`}qf6gkzd)r{rmZ$zlCuWk{Gbfye9CE%Q5XUVO|n8ho+cr@tySlSmK>ci;r>p* z4(UNv2&5F1ic0pcl|yhe+0UGsu$wImNSb0`Mk|Peu42}h*EwEe3G!OI#@;pmfqcr4 zzIVuX|L#4D&-W(hY?^3Z%jc0AnjSR`b=l538l7u9k||n(t5fpR^F&@D;1-Y1Ob+zk zifjvVtLHlPWEt5>J0bAQYwj@Xt(qtzfy(VTZDYTvd6acUS62W*y||x8;T8O$0sArb zK$$%F$56oh`N%2g>COhAimGIezJVQ3*lig^)x~RzY6)-Bq3)kHgzdGHF?3}^L0Gll z{NTcSFuTK=Pon*wW{RYV%G;9gSyFNL_HFM9z6^&)tS2xEH6-)jZ2!`z#+7aQ;mlmj z;<#fkv)LvZC$rai6@Hf(y5t%z7<(mfoX6jMa3IJ-z28uSG&C-M`Oh|u(?ST8Ir z=3x^Bf4Zw$XK^@f1mJKsd+I=#0$g!qE$lc~0%T;c*v(dwr|l3lY(^kbe^U^)*P=(# zF=NT-)qJX)Q!?b5<%-3Ge3Cu@9%r(91#%949RDmKLOrd*gjm;ZxhYO`*tndX+&eXY zxjGYdM3A7nD0>VAna_9~AdTTR!b-XxA!NDL0~l^G)fOwu9?bqEVL?%al-jpcnz`X> zdKQRW+s<}LK@R5DAD90y4F53swSVj=SMVu#A1z#xD#E?0jn0Crzg)BVAh;H+Y|H4S ze^_L*UDVqeXI;r0dxJscE_7Y8$pCo06z>(N_;Tk*C8;z{C#@FO%uW$LQ!;LMR>HzlR zGa9eW4AJ5Fk#Xug`z;CPkEx?)uehRi5g0iQzNUx5XuF>MNEh{xOZ!*Wr^@ zC6Nv8_FeMhv^>BAVF9iEJX{Fv2E;KX*Qe!9dL@JlXah2Nqp!W~yv?c_Zk$j{c~q2c zg#~plSWF7`e~1uCD0VZ^YI*1Z0Z1-FJD>Qy0n4pXWMV9Fb+y}Mt78mr6SO1B6&lyB zp!U{`%j7(j&vCu7^2TqnwyR_M9lFU-Mx=*VR9h#tQguQnqF8&<#$Ko-sI}q<@-`7d z4gdv(-0zH9;gz9IZ$#e7o-@%xo*`MTXcKmatqWqj#z=(=?yq=?^Wfz&e0jseSicJE zUCn73_CQ#lD#oAB@#d5hRaxsF>PH@w6eUq5Nk4W!$wH7a*(yyYS0S^3EH;k5_r zic1(T4;olCGMrg%=k_=U;+eYx)h)BFYVgi|PL>N?ur?vHqsPt~wsf+@&*M6SQB8)8 z7|t`2&*;k6P(s=qgI1n?;EEGHb=OR76Wics`e8~W);yk~r4rO7qr_JlBj@aZvxwEI z73rEVt(~p}>v+Oc=Wbe82E^*HJ^O0~tKL%^2mgFD@}!_0B@2Bxq#FU z6NT*pekxd1N`cq|g#oO#2hy5^DPmO6+NQHT-Zg48xe&@2t`SSb_6Zi;VP!LG;2<|A zqSMFLo>CbrqFDHtrq}`@=6}{3$pf#Z-^z*bw=b5yI~vc&IC|{LZWl;!$ITfXl)C|k zmKPCpM|gAkm}jx9!pT4sO{~uG4ZaMc8P*o~=K)y%LWRdin$GAw^%|_fSta8M3o@;f z_9->ygdu;R)^)voCZqnqM^t$mkvPl>Wss>g|H;(1No%+HWlf5pthbAYi&m2UnhcFP z4}Z98Q3dO4;3$8a{b3Vdt?1d8-D5;S_tMV;-4BEhc|lwYkHf|{mi>OLmmRW-srqY| z**PHs4{&PqVwQEx*t*(mhmL9r&t_SkCfIX0_Wgmi8tago%bfBR!yd6n~e6m@`v z4dQ1?1#TPOH#oVvcYTs|$3eT)jk5q*#W}6D*wx5#g;j1NYX8KW1?^EF+>!1FW@c3G zh~3QC`NyS$e~^N!D`d^WRTnqclyMkP#?Ec`EVuLUo!Il>guLNz|Hd}vS?~SQ=L$MZ z2$8iYz|WC*r?s1T)}GEIzrDMQ2miQqCpFjK1=_bNIA4S*-B6ZQ+_tTfV-%L59#pDE zhI-$}`Jjf}E^FnP@o@dHL{oU@@W+|( z$HkayYt3SOyr<;PI=9_vGds|s7-`%&a2&e*n))ZMCOAWCb_=3VaY{v!wK-dt$MB>;-Ak(~KsCcn*NfTk1I4x4t@^cnT7I%LR z>A%lnIG>oF?5`xtqA%5aYNUN*E;X~XHnp=+v$W=!qTOsA-W=sI(rR1t z2I)NW&Mbgw0XnLxM6udnXeZ6Z=|_OA)HstKb!d>|Jd;Vn)|qqSAJ)$C`G8)K`T>gs zuZXgEupwY*@XM^5Af~U?I)>?R)J)k!8)|a)Z^^RG2{#gthR8jUoer3heh~v&PJxyd z?A!xLB2@1lO~`9v#E+y<8P^R@B-ml^D!oCq+jPXi6aK{H8w`y9e43~RW)M_8?x#4h z##m2Ye)E`DT56*5S%}*7z8g2J{OYE?gxd@m;g^6^>Z+z|O_vW>_v8Fh@#-6?F`olY zHd$J%n2+L?O-g!cty783igSReRfT88$)&ofmZN#lPn3Bzxg^Ub)5Ov#pzexAs$&eT zFMJ-0yNP&gkC^CGum~8z>3w#o3A7Qg7i^J$7Z|2Q%6KJTus6`Z*3z;$vdlNR?Ez-& z`}9+F@Tp;7ot!P&tuPW6gESrVJP+JqFR4){F-~YBt!t1&Zxt_{ww2-{{z@yzj z@_Kl^P*F?znU=@J#?RYq+gzJh{nsB{z;d_DN*MSk;+B%VPtMtgESSDjaZoA^v<7DR zrRXCPZte<-rJQLUeilJ5Ltgbn1k;GpG>yTo*eUKQ-4!_xs76F&uvhTTjg5mR&Cqqq zX2FV(x`-aF=w6D?fPkb~sZH-@+Y65eRtlU)4h9HBkokQb3y(8E-n*Ca?$=3B6`tiQ zDhe5iQe@MsXu$EGt7mlz)qM%>>Yk?dr#Sd=)j_RLfwOU{WKCnDRn*5&ahRb`#x2!2 ztZ1%*qk>i&G!#&A?kJ%^+CYb$`PEeI?pxBVio}iQcEQfXf}Tbv;tm zM34>S%kfxPbIRy70W=AoMQ2_J4O*&J!F)TIHCcQRP`S6qBU(=^zPCGukFjvvBx%~adkFD+-1uwiZ zjdymCB3pkh@xqesG|pbnWG)|K&UDGSM!m(4hGW+6uRzNRp;2N3AM1;)`O`gWZP#YhrYBo8Z`+z|Q=&o& zvPU~*)tupxpTDVT(3Ssq!KrKF5?*QuA21KF8A3Kv4Uaj}+xPOdaORP>3n-~p4@>A# zO)PdQOjP%8{{zPUW0#PwAs{afC|U^Gxt`lV8yGn%Ef4ffGxsnkO>y&=uZ9ls%-6l4 z5g~V*xi!C!)cEaY?<>_~xEHW#xO;2+*8lxS1bQIQPXjZ|uwY*Mx1adWju_r{Z)e6C z4=5TVmPvU{0)DW-)E{ql_rlqk7kV&RWO{VSN@lZ}PNw{bl3Bo>_n2pWQvNRqhI~W6 zUCCCA1(OtD8Dai^D^#!8iW-?MGA8$!ahK`WxJ&*=Siy|DwvL@Uz#PTmudyBa=hOK6 zX@0Nf3c|m|U7bH7P-fh6foTgN8u|NCwY!;D)O zaBbwawl;DcYB88k)dmG70c`+vL39!L-8~Fs5PfNJZ7LE51TttVYpKcWP}BWH8gE{FivZDrTFo&+=G|EBAeeV7&9e&N8pdG$BRI}`8xzpHRmU@E zTJ=W2@^Y_&dKf&f%5g3vK3J8WyF3?kAZ%0ua_@C5^Y<@sVQ^>WEno2>K>T;Lnzdzx zuK*J$+M`(mEySN+Zfbe=f|KRJs$Eb>{t#OquSQgqe#yG>&K?mmH%C8r$-9oDO3pis zFO2b=tY-91cIFH3Iue$ug#Rr z(JMcA_Z1i0w7^JkKDC!76St>stV?*M6=yi4&e3PvQmK#!7O-7}Nk5PIjLUu-yn9on zkLV^uZqo4YkXII+3Rky;(DME1SU0kA^o0a27B%WwVA*(iCoBH)TevV;S2c(dUz9*p za78~o>00W21Etwq4Beb+k@*ymyuf@T>d#U!+>WW38ZL?(XwX~#K%$4IE&3hASG*f^ zqYvj09Ku9A9e4`DjM%k4NhgVO9Ld0+@Ufha6eBMFTu+9$$w6i|_1;x?9nx-=={pfo< z?AotUC{xRA5M;u~4jrkNO(L@VDueR93$l(KC+qJkAC3=^!=Q*Q_t)KQTir??%kBxt z$Z^AX3D}9UmVr>>q z{H}JjZ0ynM)U%m+<=;2B7g)CBmLi30d&+Va30*$jiq}48a)CiBR>@epv{nzAA-&(g z)jXf~+ALm}C#qNXCuSTd08#^=Uvl@QbYMhmg*QbD6>o+0HucG~uL+oF2(RC)%0!AyJlDOQD zUnFgR-xdony|a+J5`L1DhPls}ENwljpw%EMAYx&$+vZi)aPP|LBt0v~5Tll!OFu*VnQz!3&)G*D zSy47z>*$1@Zf}5Z*uotX;5hf-@SvbDpq`aIdtSg?t>w6U;H>$6c4|mdXNdc#S(sOu z!r+5t-EK&nE8%+A-MF6B&|jV?nBmD>&68ZbqQX|@OKRGjtY-0h!k@Uo1+Dfw4c69yj(VaLeRlZj%<;SXHUZi5@|WIrl2I}ZQRrIJ3`|D=)rrf*5;SyMetvo+nFc03$6 zzOgDHz`7B`I1VuCVhiuX%P6MAYkr}9CeG0uKii%L!!O3_QaKc4B1CgCtvj`*GM1`_ zUd&(#SEw&tb_Z(SWW)r-&^_I#$4Cau53a86{c|}Nd8VuQ9O97O=y8=+UnH>e?Be;8 z;ken)#h0@~_Ku*TxYeokDCUDwA+AIP9YN6Md8EaDY0wcmFeU6-f!=ptK<-iTv|8IS z;^RjVVz=tK3TmBFxR5b}q-=VLs)bL<2j)iFnCHx_iI9Q$OB!DQgns>HZ0(;s&J7W!46 zxIC5piw(q^JS!<}&D0#9zKQ|JeH4M)>cTG%s%fp=TmaGi>4R?`%!H!E^a^jCcy>y# zsKyo^%B)*TI+WfO9WkqhJ!^}&N!=%JU8?!gGZRY02PC519>>naQTiW{y`mcjxja8Z zb246^Iyt&z zM7c+M^VstR=hkEvd0YclK|o%R&_pQ$@ghF&=T!`32crE7$G_(!Un`JuPJX! zTC@CagK2VbhdMc0YtuMPs%Q;}lXAsS9V{+O5x8!}EZ2k-sEb7I?KE==u(a99w{cf- zhA9&Ane~wR<9;SR+4BoMiRfz|4?V*<6ZaATp1;p6>v2(acM9)$?losq)z@5sqxSs0 zq$}~ksJlT{21&`yNWI}{^jsV=@_LxwI+Zl`j_&%1R*RwhxtNngW#pcqCoQ0-+|8}>}#(a9Q;{&7;$$CrVe3Y`uy z7?OS8{SBV>oF+NjY{Jz~t|op`l$WZyRTi-5vn0UiNj8CQypX`={;s2hqJPtgHfL=7Zi7oDx@c@&suD)3Fxq^?bqq zAahPrH6JuPvc}Pm>{-ts^k7c11{S?Pw4uRY%$VA^McXCqC+sj*lzKX@_q+(0f0AI+ z`NlDBkuv^Ov7~vT&`9EKF?s8AB`kX9#kL812_P zw9o;osxaeilwpposit(e8LOyKGFWm;4&X4F;}YRHsc3Cad;s@Ju+<>{A)LcZ z8DD?4baR9huTnt~)$D@Qu_5gtVF41KNB{@1l|M8Bqb5+y@2%Vt=9PE;3jYg#ihC3s zD%);sU(*dQN*ErRBeJ~hP6<%sQT530INNWwraySPNI`{rDj9JWn>Ue0QIpHtDZr!J zm#hQLy7+^DRbgPL}$(H*w##bVr`(S+EGh&24`BuVkD7H>^xAqTlf51 zK$AC*rP`m1$Y5sTK0qsf)-U-OBg}Pr_e;3$gZ7g$PhD6UKVwI z=`f%KL2>7Egp)i*QZP{S18wV312G#H@YScDLsJ5UNI0*}#WjX3%wps^du4pHuWRxO zsv`=?8(5dZ1=jsy|9yW?2D2M_NnEm^T`M16!tETcROk{W?m%LQ8j%dKm1Cr9GNhJ*C(hj-zMuEN_LzhX;IJ%D5Rb&|!@qs=Bw$~` z$8RpIoO~-$CSduFA>J887 z%9$GNsAp1>i3_TLqT-QluP_ePet^NYfV^85^BP@uKR;XPw&5K{cDk zl)D06Bs)>L6~FM+7a=R~#xL_92zvu8jBr44;n zyb`}|MM`deU(yV5lh-JAo>Xe~%9FZP*>dVtV8DJi{u049+bTA`rNG@|&gY^(4Crs> ze_76YSAKsqfSDg*_|+J9WE_7pI*`pdNv(NQkYHhxXR0><1cutP^(;?<#(tza9+TWW zb;>#g9!uQg*up4xnHc5vH;khG6{B4JhEX1Lxd<(l3%NKO<*gqbk2SAVf=8pQBc6vz zc!$^8{^56sE=0T}bwC~dHWlhOfO{^#FQGJZV1|N?AQyM+m3TT==diicWoI32E7xM| z4V_J=uEs6YFfPKfrYG;O;fiS40KVKBv&Ns}7RU4lle9v70yjouEoKH!^=pbcU(S{a zscjY=XtUMj_?TI0RrZ8>H21+9=^N|kLtJ4(_(6r+bB2}|-Uo@6+z4W|i<-AM;BM7T z;jm^+y#I>U<(-(V_I~`KlAAi_&@dX|SeGBcmNFGoHz~Vkj^HaF=r1dh$$i^`U9`|d z>KMv;7ughj10IC+cv9qgzAW6cZd{Ka*IkqDni0{lN6X+7Xj|ouuB0Mns!G+Ks%mNd z`S|(5K;&i_I`78$T$D1Rxg11vp9%%T|LilgIr4M&v$DmMS;4@xNGTw zcu&VL>JmQ2^W{KqRpo7Ou5K24cgrRsVT|i#_W}>utkBW|Y}RKM&bJy8IWpEqchpYJ zV=!*_Zj`h{h3h`Ejd`1Jb0a!}GMpLuF~#0oAe-P8wm3Yb9aP&H#Th-@qRqpD9C015 zx>4ogVW1-5$A1!tGj}zFKQ`dWFc-qR?RWi18&p3df}Y+@aESu*MDXYhpbm>Xh`1^Gb+%vuacVmU55$d&X=0x3X$ z?Mf$>1;ezsQTReUke1XT0TS!LE)}uR#WAHV>l01X8P^lI`tz1hQnEO5&Ncf>`3RsW zvLtH!C8j^86MbB<^VsYtJ4n$BI-flW{ z$@>-M(-tr6;WlV&E~TG*##Kl`1?IEy*+YgbGmF~K#1XL| z>FxKZ+kZTB_&&m(8l_;C!5_tz$HSbF`IeXX=(m67S3l=4v~~v~8XxcLe*2bVT#Z{I zDAQ^)pG%(us(DSSWL;$>d{?OHB`?J`X=dcQRP{LR>xG-GTOv;-Y~HBd#x~=lX!<;C z8Z(X$in-nujNiq<<&xAa!(TB)mX8fZg9~2KA1FUx+*NG6f>r1%rW%LyScfj9^lqUquX{z^I5=rG&IEClH77U`-SPvznF~e% z=I9aaCIIW}hdt;MAM5x_M_Qj=lXFTcH~v63Q$w5L5?(D$z9U^inl*Mdj0{;$m?E1u z-I`1Wb)Y&M1&r{>a!7jR3KaE93O(sUVBe;?cd}!EnFv;OU?LRmuL$Mc7D5SOB9!Of z5lYCA`68#vlMO&R5i!CIDa0LY@g;=5*WdWBlljm ziA|gFWK|lGf23(a(;s$WE{K}9uB#zS%f(%Ho#HEX0(UZWVAZ=WN7x7QfI5;5fKwR; z0r@ZmQ&Yw%k=y2LDy z^Fpo3+qS9h{&6cl!(5X$L|h)_vt=^|&rXALHmh%p6wo{*foRp^KlARsjPMArOQFpR zyV#gn?=Mlm&*;yytet(2W=w5m#$WwDGd{m_&6RzfX&ZB@p*xAK#(iedGaR$7o2nK;OHaEEXs}?C_ zA0_1TuPEhnWxc8@3c0?PvQe)X>e6E7AbD#y5I+}7ZI`AEp+D6nfMz@mq(On14Bp)f zg1}t>DFy8roR!D(!QkTbu94)wrzuzdhNj5>LQ`h`qAAbFA-|z1!9^8|>Ce|=n)FuF zIn@0CXi@+- zXA^tU!NNY`Wnm-!8rN|p=ZPsKP<7r%@NVv%1ykf!C%^PO z)Sx(!Yzf1FtLx_Hg`*Q%4>(V?O0fwTHi^rqqH2RS`{ZJ(k4-i9tTr@dX!AHKj!xt& zXed9|eqg*XL90+!c#hXM!0IEqcHM_8m36#q+&zVtbNNGr(ttjJU0B8}<-cA{P!7q3 zww-UyK|sAdDY}GVZZcCarz~$@l{v*{Jo4$(XyUp)f11;K0~a^gr1bXv7dXR*`~)|s;OF` zKwlk^z(cc*NiZ8CC%VpJJW`V`biepWn|5EcOhmO7f&T1OhBNdSrf`=UZv>~p6TFgfo z!0VSu2~TPV9Vuy6Nef@Gir6=-QuKFNh0pOLJXJEl#PscJ(onCB`I`%yej+$SdllTZc_2{xC>X{SyIaAApT)g9V^X- zB*4S40c5%qD6D;4^TO{=IQmo$zaDVPaja-85vmwOIuawb;v$T(Fs*uN{{|}L5()cc z7Q<6O#XU3jgM33PO8;K8GSd|NH7_KT*GbrC)twU{sejR-bi0s3$(_Zz>N|7$3tQ3? z_X(%ORrfgdzIuBgrlapkK&{-->My0J6_D`@ELV@C=7ccFQaqQSY|wbVEi_PQ=_&v+ z{DBfG&z4KMH%YuAAXe>rojz=?t#BZaeO()FV$dRe%9JMG(yI7nhXgSdA%&gsu(pC+ z+kz|Mr{QhT>B{E@o5+;>r%Rx$&Ld>}_=jrgsK_?o{sDenftPfRh*`oTfTvY}4!l%3 zforL1xCkmbC4|1r__6>%Ox~J#ezdx3_;gaMduQ|w3jpz&C)=NaU6zi0x-l*jW6UPV3Qq@{8Vgo|)Qr)mrJn)gCq5T-NpY1k#@ z&faMe%Hy-p$YQ}P;(-bG;#_(<$|`oBR(&8 zTuBV=2UO_qp12v>FQtjHMuZ#RB3oY}NWJ_eT?fs`;AAlxta>}il&a<|Ja>qPZ3LiQ z$=y@-I4XkbXMwE5@ay)-n91|73`C4n((k+GLZ4$Q_rCJi=q_LjrJCeTT^`T`eO^Ch z-(49H-sHN7WF$sD-fV%f!Ou)TX_}rto?_5`YHj_C2X!5XwyQSZiz8O<%Co92YJTm0 zUE%bshwK%BEKFav9fsemy246nQtT8RKAtq31FgZx`@FHLMx&)7Ps?s07LuoUn5#xY zg;wPG)cH7QNbL)Px4$nq`n9bZbzxXGND-D9fB<%8ficB|)$UzsQR+umu)|)}mvOVj zwx7`9xALn$dT9Bbd`-BL{6$j?a)b1Eew-HQRxL%3@e)xA%O?PW6^yB(M2hR++si=6 zu*;Mk&1%KH)lN0Ic%@P^2j0;*S=k_H&AMDA&s-X*khtEIgQp z)KH{Iivo&DiJ{kIMoL6V1c8Lm1_A^K0U?l(ge1S{j5G6`cg}O3bKdu?bAIcM%YR&~ zExGS~?>l>6pX;-~P0avmV5*|Z&e56`zzwufYZ)3Hy>Ckj`)lrBz67so={9_{b3fSO zAmRnwa&-^d_l@1*qY>jGY(S6Z+GNtf*sNf%=sTN3)jOIUe_qH{t}2l&P~yEqxwy-- zXIpB2jV$m|qwjFt99wwdof)3lNX0A^>YMo<1X%C6WUZqRe0n{NWZ%;X9&y@Ok0$z( zb+yCd`?&#zz^#%X%XgtPa~Y=351nNvtCOVCR{GbP4NF$1b9+$l)&SiQ38$5GnRI!^ zUBc^VW>fcv+`NI%g1Ah3mEMb<-53+;h1M=dO$8n_Vu(kK_JyLgx-BD*Vs_<~Puhc} z1dfWpQ4u&Q0!KyQs0bVtfukaDR0NKSz)=x6DgsAE;HU^3mH(R6`hNpX5I8EIwC6wY z@ITXU1dfWpQ4u&Q0!KyQs0bVtfukaDR0NKSz)=x6DgsAE;HU^3mH$~sMc}0fycB_# zBJffKUW&j=5qK#AFNOa`Qh}H9-}$;KftT{1dGo8lOA&Y}0xw12r3kzfftMoiQUqR# zz)KN$DT3@2L3WBDJ4KM4BFIkp!%dK#BFIh=WTyzSQv}&5g6tGQc8VZ7MUb5$$W9StrwFoB z1lcKq>=Z$E%Kw|}6oHo_@KOX`ioi<|cqsxeMc}0fycB_#!VjYtcq!oEJD&nw^z9hK zbD!hm5r2e#{aF0X_VWj~ljHgE@s7!#Ud^RHit{Y~X4@SX{;Rn@CBbOh4z|`d-r7oI z;K_f4q4ATc_(%N`@t=!=5qK#AFGb*`2)q=5mm=^|1YU~3OA&Y}0xw12r3kzfftMoi zQUqR#z)MNk;d#$jO$A$Wx0%wT2?#E}w6oHo_@KOX`ioi<|cqsxeMc}2#tPd5a`k;rVrR>lS zk2uAgzQdEJE}|dynWcI*bFb1OWkSeam^n}Z($xE?0qmLNvwOIX_E6~&eQmnHOA&Y} z0xw12r3kzfftMoiQUqR#z)RWYzeC`qz)EH_bsG|4d`H-g6 zXgS7@DzCOcvxDa!!z_(zV9#lAaN%Q2<~NGkAm}3*$qemidPL2VQOxRD2ahhYmEl85 zf|uiPJ#YWO>Z?ey{$ae33;I@9JhFbRD0M5N(|WT=6oHo_@KOX`ioi<|cqsxeMc}0fycB_#BJffKUW&j=5qK#AFJ%=`l?M`S z#TvmUIXhWO_GSkLC!>3{HWq#uZ$0(L0%;I6oHo_@KOX`ioi>eklMCw zY!8kwzqvZvP3i9LretH*;-!q-Fkmv!&9F6^t%!)+#Y0E4*VkAJ@E9PF$E34fzRf`R z2)q=@I#20H)3;`t3YNgf0xw12r3kzfftMoiQUqR#z)KN$DFQD=;H3z>6oHo_@KOX` zioi?ZMKoXSEf#+@fq#Bvp3!{2;<1xknS(VR2u$?eH?T49ISn>~C-2|3%|DjxA8cOJ zCljlDN5tpI9lglC0x#vi-%BC!>KU2_xw2+==VIP5onDQBzF|vLRZ)!AJ#3ubR(=3H z56S7?_C~HIzOb=Z<@;TyUP^rJ@U!%hT&vTZ#F_(PrDw%fzrDxRzw^`$9o&?cchuLk z`^B#8n*A*w*ZWS+5ceuPT@bCx^`B$yfL$7JDzu#(%DBOhZ@TQ}-`x-eSP~-76O#n=Z zI)SY4o551VeADQK;2QI`I*K&Oxq_gfR=NytNy!1O1dc*kr-PkK<`TU|OOh{0g#f@V1{T z!fB>hGv?g_RQyS}pQ3dHEc$Vx#WlGr+3yFsGx6OA$+kR+dxk5>Rn=Om@gyu>#kjzG zV2IYJlds$!u9t0)g%9=1q%VMHgD)9NIpzf~<>M?|x-^>GYiDb9zcu6?53WXe)5V9u zM7)q+7T#%YYq66-AN_tszHh`?59@^rK|U73Rj_HS7X}X^x_v-beLR!t5Yx`V?{5`? zC+#Pt_`})pWjOwLBPE6Gp)O`iE--85-Zff)LQ)3)UB0T3+0Eeh^ZfjP)#2n6XW?V5 z`Lo*Ah!}mkauWk_vIH>y4rp)h7D9;jU`|Bd2;6a6`Z!l-Oaq{`Yk>p$cqz zV#x(;%-(mZp#jH-ryERwiWgDgV5G!UlcnTaW@uC?-3NaSJ7JSI`KB>fT7qcwZ9N`s zoBKB6R3KsKt6$Gw&cpSVbB*d&ENz0Rh=jlGw1J=rL8_H(Y%^3rit4G5Vbv*RE*9 z8!TJ7A@P%LSN4i<-fe}dK*wOmjzIU408?q5_$}cOfS(uLCr$SR>^uAMdQwAx_r;fa zV|nAHouiILurkKu%aOq!15=Uq=(ExFY-Ny=ix*UjbBZoDoXT=xOGto52e*iD&V?B1 zV&sP2&l2bT47I9RJOVnzKu9gZWLD>5&pw4x|0VL|zQ<;|I`5;RkzX!~2Fqeud6mF? z;PN}ntM2w|ioK;=`3d>*8dFM?b&e__8MW|M#|SoyS&s`AbM~8HpQ-EHvH8ugvog+P009%9y+1 zz!T=@d;GrgcYOM)yc75q3OQTGi)T|Hb%mwYyY%b)(c)Ik1(D1V+n z^q-&jr%wlwE==UP{B~ykGR99Ipfk2btNyo92K_lJclie;?d6a2w|SZUa~?l^xTB){ znNj~dlih#LJpb41Qdi;6rT6E#&;IjVeHy11;6F1U{i6O=D)xY_jA2wbYh4ezJo=$@ zmVH1bI-Ip;23>x*#af@$k|~VdWa3LPyw&ax2fPiLjgbXuXSiCx!f01R9*cIsj(o|` z09H*(Y!6v$h=PRx(k5Y%tdFGno7pd_wX?zA!$Rzbhoyzy9JR&*3ADGY z3Nh_t#ZY92*}BDe3_ZGL0K;2kTwnFxLbu=3M#?QIQAT6F^^Nh1Bx@fgr`Ldoa!aGp zBBCaDVFNi|xzt3Rz~IoYtg6f!@t;H%zhpG8(_3!EZyF&wQE!pJp+;cp6O5aggj4j9 z0_;c=EM{ZlgPL$jG%$G_;`rzg&rG7Wa2$CIipvsBecAvIJh7#^T;JLdVDZphZ_bHf z{yJ?Ve!#JFE6ryi#Dn?eE1_6i%ILJJapli|y=9^2H586_y*=&}UFqf{H=hwwE-? zfhpJrux}@Q$MJ!2jN0T1O6F1+cVc%s`4p%oSec&HbRPxnh-z5I+JeR$v67i~P>0S~ zc9#MCTQUV}J}Z3|{b+T5g%@RrlNo+xWYq&vSe!uDkLs@Uo)r@{xxaj|?q)BZcOuF!<};UB_UUj3+4%Pp7-=fLy#=c=CMdbd5{S5ftdY7xAS3bfJrdhNLP!I>Ylw zJYBEg2PIYM18D&B`=W=uvmYeygk>clWC{&A^NAL&N$XL*U=L2eFok@(rM$7@a_TpM za$avI13B_G``g2=KA=m{g~Yd`-+zGCT>+jImjn z&ib`}SD}Z9VBd{p3v8V`uvpEHtP^B(xVe%m_S&R7u3|+38qetdF?xX=05Dy18-d(f z+lXppfR_=fs!oWkkaF01G+RxCx>?TtFs~J?8Veer&2$v*KEPjG_~n)Ctn37`-O&W7 zte+Hin%fqT#rDy%VL?o!vce%77iJ#|bvlrJ4XuzOf1R&QX5PuFAa_YOZEL%{^eb5! z=jTd%VX3e~PXx!lc|khDXUtJ<7 zfV3n%ZP*<}XUkxWTR%iZ;4CKn=*oE0E+|W3r8fj;Qoq(XWu>IDKOxuyqi~}zt>L;n zpsaI0q3Br{h3%oo96#QL@nk+bg2APwwJ;b)(JssVADxJAy3qw;mB7N-Rc9X=3eQcy z1X7{FD%zkJ9;n)G)Dljk{iHq}GmDq}u;CM(>Xo>WA5YVE)X64an~ZIA;5jbc@+jVj z8qIjxpf%7$Hl60WB)v@2UYL~ajeNRhZGjVRc5sO+>sb4J2T#Ci=&tRxw+MfBM$@Fi z#yI)wkz`>D)4tNV{SZG&!*<8@lL)Irsn49YJ&5p{PQov?H(Ji-TfaK#{$S-<6xJKekZPa2k2fNM3^Xlth!=?EJ&ir6meVgt`Zi2;oMV03`->wjftLWlO<%KM z$?dB&O9`bwE`d(&)J>z@$BD3Gai^Zoh)tD6<oWUk!zR|#z^d>5D!KYd^&RoiCbpC`ynQ@5_a zg(NR_ryj`@Yg=vd&j$j0;Lq+uR01`HDy5p=-im98^Gp7*`ug_!Amf4YJx2n{9Qrf* z65qTTG3gWOoQ1fLsZZ9+&`|Gs7ro>k;`kLlf z;k`#@^{9KR>%Uj`PnPzMYH_PPIejI?g&~Z6u9Io|CM3|0VkBi0#BGRa%pyYRuIs>? z2XiCtKIDuLLYlf-M?K|5^i-~F*gLN4Lj#YQur=P^QFade@OkIQR7zEL)03LwU^$H` zqa`Y`5dp#xF%rH@7Ki`)!HVx}gsOKp zXaC%$ljn6WWvY1%s1s^Y?#>GuSDuP2@KUGmb|s80ydaungzhQ`1~sk{1;>_8{;&@CAtc z(N#=S48S@s=WU&J)eL+{1txJ)<|q%z==h18m*1>F3Pj+2+ikU$3xdIC#P2z6o$a;s zt5`2^Ar+ybe!oARMkS|g>2TfR^RL@~^=n3~jdjIcJAfiN199ol6L?!otMR0H@cC)+ z8xs!4D+;?oWhIT~DmLgxi05x717efw?UD0#byqbHc+9W*gs)s4 zWuIoAJ@}v$J(dBGtWFRoJb5m9=r^7(8;M(#~CvE=K zpL5-xobo8&SpAGeyC`p#=oWOCJQKB6ZJFTP68Ti9t4pCR9B}e=hIwnGu8PpcD((J* z3!C!ZO`E$Qu`wg7{9A}2lUuY$dr9rr4^obhV*1F1qxTs8CNYpasmR~0hf97AFj zWZT=@3a{6XV zxAPXIL)Db2=hntXqh!hUt4mvX!>HRv)DpEfHfLt$DuV zenX|~h869__Ph*#$r<`>h(`&MLZX#;SdWh@e;m@);yA!T#m+#+kv2LhI6f>-Q zqoCOC2bUPpE^hFo@#-aKXog?hV{IE%~ z26*Y+W*Yee*NnTEkSa;(Hw|jFC)?U$T$j8ZX`OsDIk6%89c-vJ zcEdewm>~rm(f03%r-Ra>40|RMoMidid&UE0arR*JWXTdL6l1bLDD8O~{F<$d9y!`v zIvH&(@^UtlaZHx$$aq4ljoYssUEpB3fOD_hz`diYI#)sMK&=?uc~>a!B!{i z$WfmPwjTCgv+b$CwK1qMv*cj{G$3(N!=_UB&wE(@qq^p93!1@^P{_M0Nt%i4pm#{4 zm{*5WktZvrgN;KI+AOD10QPrPL8_`N7Fh;c4U7vJ_y6Xh8e1&CWwl>5VC6!VD3#p$ zGbS?$^P)B9eoVnA2Va@>e!d}ddrWI}=aY2#ETeszPrLr60MPPN3q$nl?eRf$;Hq!% z*rhk{b_{avSK8nGzMcQm5AiM0#TU8WvBP9yh?)G>$T0tL{(j5b0A9=-Fj|a5`3A$? zx;Nl7BD=NFcfg1Hszb?=SzXj`NL;pS2WIZBdjSIq>(qgaYAfsQ!g_Dwqbg~ob|gsy z*sQ+gPMJgtVxSl4R|0T$WLPiKh-r{u6tfhi#K>8m+{n*qqsm*k*3p`M?rqfp4vCZ90!3OqUhR$2p7niZ@aCc ztEVp0>@Q9hT(4(+JK|Tht6$Sl!N1@&T;DOj{^>pR@*QCEQm-&BZ}agKF8eq>i_;P} z=ESezZlbUD?bW$vfV`yg9v5~}(`Sz9+~}drV*yS>Qv1wSu6`-`=-2hDt#Ry7yKiTl zRlQTT?$!_{S3Wt0h;Ra$RN}=UU+v!UQ_R$o=%HHAlPo|kX#SbQ$V(x|>Dlp-bA-_j z^Bm7rSJ}#`ytiXj2u7+N zzZ@k)4C`^7(&75@Mq-|zuSBf>z@?I-G7$S`#>?J)nZE8VV>4@j=G5sfbxX20RsmI6 zQj#^dZlQ+u%B0PDTgeZWR7d$%xLq}tzoraT#n`=@h_|nU zz(hv!5nn>+xF?`Yq*-BZkduZ#M57q^Lsd~Vi#6uGqFr@~*BCEID8-?ODkQpt0H)me z9{$JDLczicc^5T)dUP(kw;syWvQ#B^Bf*4H!q!PldU@WC=EbgLEzk3ZmHy?5LBZ-N z2zzUlGOIrF&{kEHOi6A`hjv6o4|5H2SX}CJ6}ly)xOmvuT-8VCr`>6u4*wCk5vkW| zeGWUsfFyhxk0j$U17Bwg4<};jO%@H6LOXZ<8-SB{lP4AkrLs#-1{GRLhKBr*y0h!gO;t&!-y*>J z-LWBJpM_7MOZV_oWKmU|j5Zv@~zKf^Wyn2a6nLOY~Qk5U|k^Utr4slf|0e zak=$p-_~2YP${A+JaAv;wM!mwb~>K2QJ+1?Vy;gYlKG<`E$>AUT*SzG;OEeDh!><= zveiaPS9U&wr@dMp4IHbldOCP%xp(<$VmH`-5Yo7ibJR{p4hmAf}#8fr{*cJryBzvTgNvl2xi0&BIZHh!Fsjf@`d$G&BaYD zQH%9%5jgkqFvy;FuD$d8qzZ9jl^D`8#-5&>v@jZl+RTg5JwgnA^z<Iy~Y-jk^|JGi|O@&5x<@%}T)`8)O!9&h^j z9_-U>1}Nd=0al+Wtkq|Db>pXhnHK$D4!httgQIv0Z6D$e@N3>Y!x+>WXMwiH;r|nX z=E}!xoaVCDH%M`%aLm@m!h$LgVVK37As>3P2?u76WF3uRiiJ$f(2D%-HP}dJBUjeg zI9r)$mNZo;R}b&aC`${n{!%;pIID{T~U=FY^L4|Lw0}lTaexs9hmP32P*0exj3|1Hp$B4aH2NZ5u zzi*hzE<++x9)G{VzO_`?d|Z|b*SuxW47}Is)4li1VTRiNSY8LGPL!d1;k!{aT$9<| z&n83jn++`o8^4AqmlJmkiTws|q>ufEZgkauNtSEAy#2XHyXb`} z7Cf=ylu4j8W9vdIcY2kznVoE0mHC1E5NEkXcw=%TY7Mf(7bjb{;n`+*Z>46L($K~x zb`Eb?()D6iwyy!ald~#2Caz?k2}R}{z;o6klG&o}gN2!aQ_(@V;$N67wJVL-Bvo&H z7CYt`@l@~MfSVmp*{RCTv|6-iU52sVzPW5Z;yQ|ZJZtF3Ry@wQ!SJOz$g=xJO0|&3 zI!O=x=H4-+{2nIXd zS{@UEk9rVoTTX6rHJB8ipHqBB0jJJGF_{9}bs>_8d~}-qFX5Wm z=Kln)5!YmDWVk<}tN*yZm%T3%*>zpC)TKX_A-R`XrC41#hE%GnHRxubw1rK&>fDYq z)o*4EPtG|i?H$lX#2~oMBY+jqCtS0M?h*ai;Z>LDWX9I@#H(Y6k0fY^R)>j6;7=GP z?c%*_q>--&>##+jvu&r`d#dV&fR#R7s2@2p!O|z+c5}h{+fAu6_>*X+cu0Kci^ETW zZ6VC9R~UXNq7Nb_0alZMr&FhiquR}J4LEfKhg*uYTM2fXfDDA?!9*f#Cudt5mmB9D z47H+s0|PJ5w@2?gi!%q5-v!wVP6yby&!)j$s2WA;zSqb#l7}Puh2QZ>EoBWFeuJs0&d3vnEv8p9Xwk`9>)g zb@Eoo@mq)A?v2bhR}V7O2+IMvVC5T%Y?*+BJEwcUKGP#B?9<|)*q8ZE=kc|xZ;}xA z|7(b5r_|1`jF2^`H%!mbNyDImkBuIfk4_zrBxR#A;U54_ahrFuJZx7~sUsb%U2nK9 zlHL+32vS(YC2IDQ42-}0;xTH&)4%02U!Uqb@+J`FzL`(X2s~t%O$o7R+k{D7L|I>SEGnFn;pk3S#DH1NL?Pw9+KkjdQNk#)+Z3UjMTa^`y9xz(5R z1y=2_HsTAJDGw}MmvALpCT$uKJ0@`IhS{WP2^deTSq$?| z%wcsbqV8=VYfMc>vQnhiP>W8A_WaCc%3TwpDPzO7vBTBpk}%g#Bfhk`c@=wF?a`UK z?mu4TCSvYB zm(Ek(LlnIc@YT_JQ@FaJn=1Zr;A3;rFsB{mYcrd1+Z8a%vc+o?VotyU*$R zXXs*sp0{B3B^y+<(~?2T{wgxv6Sj|UD)OUl>uL@qXvBm(JHO{hJm%~LIpPyfJ-g8KoJ)k(?b3ZC zauUJcO=j}ukR*aU>H()ar2al7B)yBE80-!yEiNqEEGzfpxjY0t`uZ1U$&bIY7@^r} zm@|89eLd6}1(E_ZZ{FktJSSLmJjx%fkoB8c`Dy_MpkSAn7?vE9B87Btw-^i0p;P zw->hOo~7<|xm)dT`isvQa}t{Lh-`==@s*X(jV*yuHXa zL#O%n!Bb)#Awh=Bk;7lHw0lOa){~7zAA)isT;gjYRge|wa~JshC5z8rz<H3|6FRXezP4PI@%Eq5mny`i3>U=GV%-kc8F2~?}_Bzy~B&IE@TM}~`SNt^Gg4Vze z9#GnM^lVOq9FgzJqJt+a5&WT`x~Mx{~Rl*_@tq*CiDT6;u7M!-dQ z=NsQ?3SlLF$1Z19Uz^q5j%Oc2`>||R+LnD0ui?1@PCV9QE1>tBzcy&an zOjTF2jCf+v9UG@ZY4U?S(msKoBdN!vjNHn9)hfXu=?J@Y*RJj$%u9oX#EpW=lV83- z*5nbg^~viGOa2LU8Og&gna%shvrdlkJ0e6d{5BQJPMLWzUnHtyLMLUmCs+CFDfTcI zL<)N`Vit{GMd*pbm6~=mu|`^-dy3>Kec~;jW;@Q++Db23pP@PVHo{(CkM~@o97nA- zF=}J+Zx)xHS;{Ww{d3%sma&ri1n^aA#wF|b$KB^<0_1y@(v$LSdkchbxA-${wluk^ zTj0A1y8~U#7PIHHfKwA4=X&*!3H6sXAQTdz_QIwULd>{CZ8pSEN*S z>2O@;8>vdmkKWYTSp(G4RB5Yd?%y_^o|^&&g-1X|PpcAf(4S(II)Q_3Ngt7rW*%|q zt|_)+7dO%;`Fw{^H)3br`@iV{CG87eQQf{Rt(uo$TTJr5FB2aF?EQs&{(nn1YBdW?DdWdD zF^zn;-DMDsJcbRWmJV-dE><3;=Hf!Q=WgW}mm>4c7Jl_qv(QTcOG>iK^hYDjRunO2 zt7LdVz^wEKPII9!q@mU8C1to!@hJ{7M*I3#<{z!x>q~VJ0CJq0pZD5}-l5(tm#2BO zS=|*LGOFPBo23SmVp&Bs4M%D-`QwsN;7KiDAj4U)Itm z!Py53pvEOF#3t@@)8^ZEO zrB2yx@>gMJbqKUPHi<8c4S7gyBsRn;=E zq3aVjSM1m~4xF{^=-lRb=QlIqJ(^cFlbLgo4ng3IsH>;4mu4ol>v}-gccd$#Bf7pX z3R@JuG+CG7{Jht8CI3QY>yJXY(Z|XbZd3x_S8csC}^tuGrP>t0}2P}%hbh-n1` zM?F#{9L>vFBZR(rgePY=<`|nC5818U3W#X^E|9y9QJbf6#d%joZPv%L=PwL8DYzOS z^4dl&d@kQd_~9LV5q%Cec;msqS_^C+GruMiP;CWpaVzuum8N<@OTy&_(!KXNOu7F? zM1gl7(myHyvv199I=`Y8VtvGgk$ZA=tjP!oCwk`8N7ZSDXb#^r^6|3XS2Wi}cikB8 z|LRw}KZX;^srCqRD#*u`F}<0F<{G>kZ+^!q_f2!gDF0Jl28#ZDjzsQp12M5DXeIF3!M=h98aa3?!Q8y^3rYTtJTrIM6o|W%5~@6Lkp*|^UN_T1XS%X>63UN&&#TK zlg|ZkcGOhGl#)zyJga@G0x;&Mg173Q{9B50sIsj6r~CkH*sYk*OCd|t8m4l7*#hb* z$Mg0lj1r$;Dir6+7m&99;akiYoBhsE`X85O&_0A{)-UGMCbWOAWCg~XnrUCT^mRs! z$J&BiPm~*G+cTXynZz1Zw}mJeXBHgs)iu@I&dA(8w>WyYC*Y#IeFlMqp4o`xP~~ec z_al1($W_>JQ4du8nLZI|->6l;f@ zO&?ayvG1iQHq^rbPuO@<+dGqIPVCRA-yca&0z~~*!l}A$%dpjz zm1hX5fnxA?P*jujYgBb{;`oIo|2&Y7G{lXv?W5)&7eu7%6G%bNA$6@BmZwOXj~)|0 zyXfDS4PxqZ|2R3TtmKr4-KuHqed61;h1>p(fs%qhzNPdFn}_EsB=7(B=f}3r?KHY^ zVB2jYK6&}yA*%d0qlZelthm%<^w!7qskXRMTTC?>Z2)sd^FB_+m8!icyT`{n3!7?VL9)J3Z|>fJ)Ez_l=19#?|!(Z^atG z%O?|l5>{_wI7b;H201<}W=em-C=Y3tZ_rg}j!!Bb|2!<^VxWpew?jq5BH1O-PL80M zeDss3u*P00Ym$RLf{s%hf+vUPKkEt;3fzb(SY8QXvXB8SGq1^mS9l=CBl0Uo8IC|B zsk7%78AAkvFq5OJF*SCS5sr8jgTEghO<;?~z2Qwqk0!FS?u*rV7KXsLOE@7;z`T28 zBC_26(r)*vf3VEmtw22 zmm9co9S)gA+Hh#}Q@5DaaM-GVzXmSI%p{| zzzcMS-wHc;Y<=}kUm!d*rB$rlLbAH&S(L~6X#Dsvjb!=f6PkN+%B%@iAvINUfT6d0 z@!{L!jrM1>1)s8Mj`cm%Y-;|zU|M0hG4op6Y7kXR=SJF1%!l1IYtyR-yJC&Q z57~wK62jm6yxe3?Eqs8Za|S!iaoL>;!!ib_=>6F4T$k^5=o~b=@L)>{51gL)Axg{p z=A^so)APUXHE8uw>iBj6qw270e`h@7JQ15c`3!oAiEFpJ#K$TxJFbpu)`~vu&2m^N z3;Hc2r(#8==8;)qTrt)3L9> z2wT)Wf+Q&Qx@4cZ;WWCaim%4cTz}0ypbI}d;~k?Z{jTwl9y25%0B!7ABz4MUKKr(- zA!advAq}TVc7E&9^MC|yZlG)SEgxI1?(yOKcvgdY1=)=J_3;~%L4J=~N(0s=01QB| z5<&u9Gd=ypT#*j)m^&JuX#b}6))K$dHnJYAT9+}YoW7-(1-!M&mgKME7#^v9R(c=e znR3h0Xat!x>m-H@p`*Af9T#=+&c&+Em}T1cRv+6EwTxs=@M{p!y=ty8b2}~SuHznS z!y%cF2%8Pp9MDEgN2P+MGp^p?le$y^^_N@5bmWM~XK)P$%0*A%9^uEjQmhA4ntJ_CP$Z{^i1rHk$wxaI@UQGUX8Z9oDz9{9@F3D^w{X zo4(}Xnjetxns>x3PxVjElKCR8hNPftQx416SKn!Ds6r}6)2|a>0~9^LQi|)lu^kVl zAceM_CYyjtyjo^(I;jLUy{cO`?@m8vGC${`we(VwoO6Qv(Qx;brFu-3UTKLTE*bzX z;z)Y^JE-Mz3wk_m3Su#hHr<+E$^fg9RqC9PPVx)KV3%dc9gB)2`Glm^??L&B98-K_ z`hSR964@p_hFT+V_9c2qjT%7+lwCBbTfcEN?Qen0aTK<_2pH^Dbvyo~`4`-RidU0F zQaYI(A@u8(+GHUg*(o9_u{`u4lrX$YGtuOS22;85iXT_&ZiyHyw46Ad?>Yl;2N;TW zD$`(WHJQDf434;_UD00gGK^BNu3=d`{D9Glcnl@ybf2TgN)X^8zhWQaUDylf%NOV| z>1W9UWItP9qcUJy?d;fjmmTr+1GGHCfyoNZL{xRJMCB^C+w{Q-Rjy7xF~ zc;2oPOPS3*t}@#YViX9@y~>mWh~n$GA68|_aCSE6WvkDm2`~2Br;imM{>fdgph(B< zfgvWiYEjWEHNbn{@oS}8zwP`K;#3nD_X0|YdrWD#w5XoW&`e|0r*#&tGdpV?#sG#{ zt%xdPy?7M8LEgqlBC(b<4G*q-h5Ov4&J9%?kB^V4Bs>$XUd&&|IO9eE6%v&hxSAAw z#pSZ5=IhihoBReba3XBZvVcAC=PSadt+*x;o^r?s1PHRMREBCd92ikNJ6lT#`lgdIHDyzqywYzm_*+l@|$=3`ci0g4CrM5e24O!K4Wb z?6<{yH^b;d`G1YW$W^+}`Nj~)5*5oIZt$!@~IUDKM)z<8$&~rNncoN zYi^)Z=U$h2g9syJ&>M%^>rSwKl+%!@-2pwr9w)qCUUB>RMopP)CZxxKbd5SbFN1qb zaIQ>N{n?c9W5)Z(0FnE9C=<$oc=5&bE7c}UbS;m#DfRNNTxMa>hmo6N53U@DsB`_S+PRB< z7_gDWwf1TSxryNVFuwaJ5H`3U_Zs~f%$!PY2(Xm5DU5&B?fW?Y4k@HNY`T6mZpKIWn)O49?iI{AxaDh|g-+D? zeX+_+h`a@exnh5agr>z0B|AorAfB8sxh&**#>=Gwx(cfB9M%!vQL_=2wq(nI$xBC0 z@6DD|e=sOsc{7dQMsk1rZbi8#!wuzlR^?u}#LG?4!sUWee?1vb-`-1RzHuzc^S9KT zs;_pd+7+#|iI3Q%Qmx9*pDDSX@SE{7>IrYyF^G4*J}32 zHsM7Bqwa+pY33iPj8{hLxk*oVt=Gt&$n2#Qp>NHxdW$c%)Cmq%MUNVwU^(l zqOYwLdX2Qfp{nQpwue;T`3+{~;~HJXE22MoV(*qq*JdIy(P9(dI37d2wL3Y*#o{Ag z5A@wBClBU_ABA)O&ZUuf3ynGUL+S}1o(RGeJ1)0nzQw+^-_Z8&dR9O6U;aeuTmljMB~oUZ`%^gfg?_EY zjEu?RO&YeZJ_x?Rb;ZT&jJZ_}hJbKa^>{(Jz1t(uOJswYKK`pa;8Z<>W^QoiD zWBpr@kh468l79kg-d6M4pM|@F%_EOydtQ0t8j=ESxLGVqct%(E4^A=Zb-td%aZ0OO z9%-$6z&CF171V3&^nBeiqb0Fl1E{e+9v@N`kjkeu2mMH%)5E*jZy_BK61wx0{hLE? zC-hfa;t@x=Q78XTd*>b1RJQMN$7wP+q9EW<-v-m5VlD)If zIm!9#@8=ibw>W3{55UGV@K`oBMJ9WUvAFR3ean}1YdmtcuRH7|OJvYcB#8-U6`s1y5Jx9gCkva0f5D4QF8&tpC3Za0e*mk^t()HoOaG#EO4 z5LDo`i*mXKKCZLpfhMPJyss}X>Gk(UsS=|kThKT@7mFIDZY)?zcqT$OAq3y zf}*~uv4Wv`bzz=kce~e^VAg(WngH6YrWHL&0izMU_ExH>U^`mGg?EAD=)y8jxKUD>^% zt-aXw1vaxHup!)!bFX+uc`RXS^kv`ilxin|AlH`Evfe^UbN?ooIBbO{H3>=YHIcpx z%dG3&B7Y|QDyd6nh8!GMs!TQNIguFUM>1+G1E%44+6^d%%4^{V$>mIOn*zHlFTxUi zt1N?21`4n}S*qN(u5qp9E0)ciSR7ga9-y#|_eoe<1@?qhr6O_}0k!jT8w$7G>(u@@ zsxov9;7XADxbFHR5XP-L(ht_Mk7}woCR)1hv;jGLV5wnO^$?t)HH=V1JmRjODrd?j zDDe(%_rr5w-Dq6o8sVe%nO;m$2RN%J6JwQwEU+~Q!LSZsdQvLOtDOjs^3jo}bjqK3 z)Lpmby2R+TOsEIKp=21>&vMWv6IT|3Z1$Y+*tQ|tl}VX(ge|87lK^kGHM*3daZPD5 ztF`URr|(T8fo5&|tXWn3gAK1s9=;CqXa%(}P42Os7Y$}N+l5M_Qw^@V2Hv(2jDTwr zX)E=Q{X=pCg?0M$N<)qF7uo|wha%iv^MVJmeYIBQ2^D7IzsZ)7YXNivg-J}bkPk@| zM^9zieQ=oB=OE&+R}`O2i>;!2<5RhtW00=c+~9VC+PCBaxGLGWny&td8S;&1q+_ zL5tQoFtdZ=vAjWOlnZIbA1&CDZ|sctu4r;-ywd6;!Req4t^cFSEF)rKGxYSMKLDJV zIn=5Jli7O8-TK4MK+q!L(?zu^Nh0fm%q%l#Z2WatDnd=4QuC1n0(1YbK_6NjN^;r_ z&WcDUPDtO_PMGsboNG|a!eT)lOJ0g*b`{*lk#6#4){q>mUMkO3feBV;xFIUMrT3{+&!85xR*VFwW*hT#M;=;{fU$*2DLwAoi!m+|@h@o(0h~59evSP`r}VC@-#f z?a(UlnLIb#du+xwX{>L|fg1!0d3gGc%F&~`&>}#M*C*Wwcq6{$Drm=<+1LBmKqSBm&L%;jDMV zreP-qFSk<(QV!ZoDrG}3Ms_7-%*Q^-e`PZJ5;7 z5Tz@`nMopw(hT&DD}G6E;-+e(6x&sU1wGvM&rD{!3`Rw`PdRgFlU_*1p#F-62g(|* zWn-J-8qC&xo8M%5>314~s{NB!bNlFUf61JIFkeaTWEJjHik0!DAbz9;j^{ z5uC{F!f~~`Vdd3Jc0m=%4lGE&KMXpwzW%;Ey%46{-NZ2+SM%aG;TWI&HgSwcqFO`~ z)wYnH+;ew`U-ur~tond%lqC8sOGM2MZ8i^Ew;Cg;?7p{WH3dopy_f(gU{Q!3OJ!I6 za3rg+9;M-Sn8f=|oMV=i7Gom15DHE^@?p;%9jHbgjY+N!j3 z!N`?K%RD&MS&mpA;2(nSI;CAQof&?PF5_v4>^^3XzheW-+Ue%s{s0Za0zRPvCQ~$b zB$R*$J?7U^!_mkLu)=fwsrI&F=}X!pX-73jC31)CCd;!Gont@QYJ7s!fk~VfB3>ud z4p})^B$x#h96Gguj;vO2EHcq$y9N842>u4ooQoAky>asO6XWS4m$=}lkj(kRJY>G`d(^n)f zUV@HN?R|?)i|0!Gpsm=Ir;F`n9kZr&H^iOKb zHY9;A9Rs{&@UoJ%MRYcE9G}rTTk8binyBfPu z#*frpeuvH6fk2w2;vmJ&;6m|6bstyW=(%fhqFn+LO5(-pNn+!!Loe*$StA)($J7(i z)~f(NQz{Y5=>r}`7)BRAmcr3C_Gn^i;&HIcTy=WSG=d{DYeyM1QVp-@aZY41+y^rz zvag&P4XjI*lKwf;Zj!Wx9#`LBUFj4rf8Wezx{KKm!oHudNNJ)1#vrvI<_XqXzu}$= zdfRLZZi~mnq!(}KN^}sW%v`Yu!VFCifuE&~QN9P}=+5{c$2r@K6MT!aw?P#sn<+Dy zZ>zQd#^P9aTi;S(^0{HYlkY&F5>#N+_`))iF`am<#v%0fElP}gK~deyPu4=Rj66H? zo^th`H5oZhsyXHts&5ctl$9uZ1EU|52fJNV<6I@?Eo^}-O$ojXI;okR$^9Jol!ebUF2eBzjL)zn`QuJizZr> ze2rZzxQdG8H^YC;*cfEuHG3w~j&NK%EQ}ROV&U{4F*RcM0nVaE_l57%dhcbr3igLt za}V-lFdCEDAnq`Zy;8Z$Ca^~Brao}3%uhv%dcpgxR^Wb$l)?W)w6 z?WYFpc^jQ`<{1qS{n{kc8!e96i@Q5#)OD_QK6#w z==g?SD9ysa`6Xo}js+PQ(!9MxE0HK!#qe~>O6EIHgk}^3*9Fg{cMa=9Auk6Syir+t zP_6DpaG(;K!zko%7-gQ*55+LQeTruEzPTI&QvNB?cmK}0=AjKL&Rc#kO-iJ=mk^tM z6InZyOmluUD3>^@8q*UoVDoA?)3(Hf@XlQrK|#8U`*h>o&e&9XsHVq-@08X#WAOGt zEdFWl96qwreACKI`(GAWj3c-&zl>;W@1HMO)%CdS3aU$REH-Q3?&b#r1|8;ng#^BL zo4$3mIdQ1$@ETBC^P0Ym%wVv(X^l;o<)&h1n(Ye^`V91X7i9LS&s)8IKrdG)(Rd9= z=R7y0G z)!ANUHbdr5EgA(A;m}t=Chu%NC0K^m84t5q05CM-cAI}mM0TMvD!n4bvVbzvyZNLh zz+Zd-{_^ZI{Bk~BZK8y)Y_UcW0lLs-_D2mF+GTh>xoD#5PR4;2P5|n!=*tFf&vtg0 z+bIK6u2a`uvMjh0zVXi%GKnB7ys9}z_gTd=TFZ=~Ol<0QRF%E6{OF)K@XL}*C+ghI z$it>qiOGO_cC~iKh+bjN0*v0Eyf(FXU4jpR*gBsSoWO^v02!|evz_(0h6er;N$v?e z!>bAKkIA*$*E^OX&cY9beup*`a;|S+m#tFFlm4yUQ0_pk7Td2=P) zDqR!&#BCT75;lB2Xx3-^V$*8bo~f5lo=Pq6In~$O;^vszs&cOAXyYLzXtm>e?6Oos z4ECjdOoYpl3(udO6=pI_`z)uMxuK&GMc&0FoE$IQz4#o3kgzlyrccKr=2CzkSd&gk zD{8#kTh(ryy{)*+O%`%Ke(JHxO_~y+H!YT9T@@4F9B7BK1VT37qApoAq0itEQ`f%g z9?K#hXe;blzp~b!ir0Zhe=Z)oQGg!sF>oq=AmlBX!rty~C@t-53iPMPXF50F=>9Hs zoPMw?V_P9{!8^8nq}J-Maf?11Bl1*oiGEN04;tdf?D$R{)j+bG{i0w0JHo`Z>3V;% zSTj-OPTERR@GbaBg_J{q9r0dOB3f>06zf}M^UQmfn|+7a^=}*1Y9{R+uCCu0qq(M} zsH=um)}=Ke7r(TZQ))nU`Jsvlhs5~gZAf$-5!)$#l0 z%YyE-?XAc{6_<|P&Mn;)j{IFi#V5p@y+J%&v8yR0388Q4Awh^V-_vf>-85yS0H|1b zZf#Z5beXOvTj8(SrGiBK!}U#zxMiLJk%Ao@*tc8{ZHds>>Wh$7;)OEUA#U|G`=$yo z8iit_MbkTKOQ8L+5>(Q9c32u-5*OvAk2`#&5nMK;y9rh};Gg&E0M)~DHo>jmB`G$SDXHg z*{HE3|DYy(;d9Qsc!Y5uXL$Tlf;5{dAkMdl3+Q z@pJ7VsP+7NyYHJ(xiSI1B)GS`f9}-vb`0B%VxQZne~$As^y&(*RB|b~sqt|!{wc2L z3K}f?F6JPz9|u5{O)&0;o<_{7E`H@|iFUiAm}>)@1ApwZ zFsi4S6PA$SP^RuC>}(!vruI~IC($&zP( zA5PdQ|Mxl*u*eaH_;VHc#sW6c9>M8EkGP?d1n=;IeBI>hU{r$f{IJ-|X^725`%C_p zP(ZqD$t!rob<{$V3Kx%jw^Ys}YG}l)vg`cWtJRYJi4r@(oLLg&WQef6{VNv+L7R@j z6Z~8><)y2G&+mrTgRvD)MMm=%)_CQyFrc92?W^F|$whax*D7rAZ*U!ps9b#m}3*hA?Or;lRg+~#Vlgb9#@Tc8(>KO3*1Y8C~ zz?&Uc^r8IpT2HVSJBt!fIwACQr9bazch8$;w#Y|yGV(xhih`K8w-@yJ+xRHS3!()q zV>(Um&&R-N8}Qjfbt!_0aRHwxn0 ztunXZ^W?;MM{nINoBmj=|ST!tJ@MybXmT8>k>=Xb%kM zQeE~k;C0~4c)t-)DU6t0F`_}W{jv>!7lQt}=&TJa86`Z%l*JvI@CsUVqn&2>Z`?g_ z)n|30`B#mNvR%F(aRi3`QM=cOIO^dqtTwga@_yJp)*_mQ?9=iBnMS9VX literal 0 HcmV?d00001 diff --git a/docs/helpful-guides/session-history/settings.png b/docs/helpful-guides/session-history/settings.png new file mode 100755 index 0000000000000000000000000000000000000000..d226ce1f860cc562570586ac7e6d17365161c8ef GIT binary patch literal 140150 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

ar(yg#F{86w#|J@VO9mmn?7x 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 z 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 "Da\\User\\Query\\{$name}Query", function () use ($model) { @@ -315,10 +317,12 @@ class Bootstrap implements BootstrapInterface 'Assignment' => 'Da\User\Model\Assignment', 'Permission' => 'Da\User\Model\Permission', 'Role' => 'Da\User\Model\Role', + 'SessionHistory' => SessionHistory::class, // --- search 'UserSearch' => 'Da\User\Search\UserSearch', 'PermissionSearch' => 'Da\User\Search\PermissionSearch', 'RoleSearch' => 'Da\User\Search\RoleSearch', + 'SessionHistorySearch' => SessionHistorySearch::class, // --- forms 'RegistrationForm' => 'Da\User\Form\RegistrationForm', 'ResendForm' => 'Da\User\Form\ResendForm', @@ -338,11 +342,13 @@ class Bootstrap implements BootstrapInterface 'Assignment', 'Permission', 'Role', + 'SessionHistory' ], 'Da\User\Search' => [ 'UserSearch', 'PermissionSearch', 'RoleSearch', + 'SessionHistorySearch', ], 'Da\User\Form' => [ 'RegistrationForm', diff --git a/src/User/Controller/AdminController.php b/src/User/Controller/AdminController.php old mode 100644 new mode 100755 index 912b8d8..7b8ebab --- a/src/User/Controller/AdminController.php +++ b/src/User/Controller/AdminController.php @@ -17,9 +17,11 @@ use Da\User\Filter\AccessRuleFilter; use Da\User\Model\Profile; use Da\User\Model\User; use Da\User\Query\UserQuery; +use Da\User\Search\SessionHistorySearch; use Da\User\Search\UserSearch; use Da\User\Service\PasswordExpireService; use Da\User\Service\PasswordRecoveryService; +use Da\User\Service\SessionHistory\TerminateUserSessionsService; use Da\User\Service\SwitchIdentityService; use Da\User\Service\UserBlockService; use Da\User\Service\UserConfirmationService; @@ -66,7 +68,7 @@ class AdminController extends Controller */ public function beforeAction($action) { - if (in_array($action->id, ['index', 'update', 'update-profile', 'info', 'assignments'], true)) { + if (in_array($action->id, ['index', 'update', 'update-profile', 'info', 'assignments', 'session-history'], true)) { Url::remember('', 'actions-redirect'); } @@ -88,6 +90,7 @@ class AdminController extends Controller 'switch-identity' => ['post'], 'password-reset' => ['post'], 'force-password-change' => ['post'], + 'terminate-sessions' => ['post'], ], ], 'access' => [ @@ -346,4 +349,33 @@ class AdminController extends Controller } $this->redirect(['index']); } + + /** + * Display list session history + */ + public function actionSessionHistory($id) + { + $searchModel = new SessionHistorySearch([ + 'user_id' => $id, + ]); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + $user = $this->userQuery->where(['id' => $id])->one(); + + return $this->render('_session-history', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + 'user' => $user, + ]); + } + + /** + * Terminate all session user + */ + public function actionTerminateSessions($id) + { + $this->make(TerminateUserSessionsService::class, [$id])->run(); + + return $this->redirect(Url::previous('actions-redirect')); + } } diff --git a/src/User/Controller/SettingsController.php b/src/User/Controller/SettingsController.php old mode 100644 new mode 100755 index 3b0aef3..e40c30b --- a/src/User/Controller/SettingsController.php +++ b/src/User/Controller/SettingsController.php @@ -26,7 +26,9 @@ use Da\User\Module; use Da\User\Query\ProfileQuery; use Da\User\Query\SocialNetworkAccountQuery; use Da\User\Query\UserQuery; +use Da\User\Search\SessionHistorySearch; use Da\User\Service\EmailChangeService; +use Da\User\Service\SessionHistory\TerminateUserSessionsService; use Da\User\Service\TwoFactorQrCodeUriGeneratorService; use Da\User\Traits\ContainerAwareTrait; use Da\User\Traits\ModuleAwareTrait; @@ -91,7 +93,8 @@ class SettingsController extends Controller 'actions' => [ 'disconnect' => ['post'], 'delete' => ['post'], - 'two-factor-disable' => ['post'] + 'two-factor-disable' => ['post'], + 'terminate-sessions' => ['post'], ], ], 'access' => [ @@ -111,7 +114,9 @@ class SettingsController extends Controller 'delete', 'two-factor', 'two-factor-enable', - 'two-factor-disable' + 'two-factor-disable', + 'session-history', + 'terminate-sessions', ], 'roles' => ['@'], ], @@ -463,6 +468,32 @@ class SettingsController extends Controller $this->redirect(['account']); } + /** + * Display list session history. + */ + public function actionSessionHistory() + { + $searchModel = new SessionHistorySearch([ + 'user_id' => Yii::$app->user->id, + ]); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('session-history', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Terminate all session user + */ + public function actionTerminateSessions() + { + $this->make(TerminateUserSessionsService::class, [Yii::$app->user->id])->run(); + + return $this->redirect(['session-history']); + } + /** * @param $id * @throws ForbiddenHttpException diff --git a/src/User/Event/SessionEvent.php b/src/User/Event/SessionEvent.php new file mode 100755 index 0000000..196d8e1 --- /dev/null +++ b/src/User/Event/SessionEvent.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Event; + +use Da\User\Model\User; +use yii\base\Event; + +/** + * @property-read User $user + */ +class SessionEvent extends Event +{ + const EVENT_BEFORE_TERMINATE_USER_SESSIONS = 'beforeTerminateUserSessions'; + const EVENT_AFTER_TERMINATE_USER_SESSIONS = 'afterTerminateUserSessions'; + + protected $user; + + public function __construct(User $user, array $config = []) + { + $this->user = $user; + parent::__construct($config); + } + + public function getUser() + { + return $this->user; + } +} diff --git a/src/User/Migration/Session/m000000_000001_create_session_history_table.php b/src/User/Migration/Session/m000000_000001_create_session_history_table.php new file mode 100755 index 0000000..a33ccad --- /dev/null +++ b/src/User/Migration/Session/m000000_000001_create_session_history_table.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Migration\Session; + +use Da\User\Helper\MigrationHelper; +use yii\db\Migration; + + +class m000000_000001_create_session_history_table extends Migration +{ + const SESSION_HISTORY_TABLE = '{{%session_history}}'; + const USER_TABLE = '{{%user}}'; + + /** + * {@inheritdoc} + */ + public function safeUp() + { + $this->createTable(self::SESSION_HISTORY_TABLE, [ + 'user_id' => $this->integer(), + 'session_id' => $this->string()->null(), + 'user_agent' => $this->string()->notNull(), + 'ip' => $this->string(45)->notNull(), + 'created_at' => $this->integer()->notNull(), + 'updated_at' => $this->integer()->notNull(), + ]); + + $this->createIndex( + '{{%session_history_user_id}}', + self::SESSION_HISTORY_TABLE, + ['user_id'] + ); + + $this->createIndex( + '{{%session_history_session_id}}', + self::SESSION_HISTORY_TABLE, + ['session_id'] + ); + + $this->createIndex( + '{{%session_history_updated_at}}', + self::SESSION_HISTORY_TABLE, + ['updated_at'] + ); + + $this->addForeignKey( + '{{%fk_user_session_history}}', + self::SESSION_HISTORY_TABLE, + 'user_id', + self::USER_TABLE, + 'id', + 'CASCADE', + MigrationHelper::isMicrosoftSQLServer($this->db->driverName) ? 'NO ACTION' : 'RESTRICT' + ); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropTable(self::SESSION_HISTORY_TABLE); + } +} diff --git a/src/User/Model/SessionHistory.php b/src/User/Model/SessionHistory.php new file mode 100755 index 0000000..4331e55 --- /dev/null +++ b/src/User/Model/SessionHistory.php @@ -0,0 +1,110 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Model; + +use Da\User\Module; +use Da\User\Query\SessionHistoryQuery; +use Da\User\Traits\ModuleAwareTrait; +use Yii; +use yii\behaviors\TimestampBehavior; +use yii\db\ActiveRecord; +use yii\db\ActiveQuery; + +/** + * @property int $user_id + * @property string $session_id + * @property string $user_agent + * @property string $ip + * @property int $created_at + * @property int $updated_at + * + * @property User $user + * @property bool $isActive + * + * Dependencies: + * @property-read Module $module + */ +class SessionHistory extends ActiveRecord +{ + use ModuleAwareTrait; + + /** + * {@inheritdoc} + */ + public static function tableName() + { + return '{{%session_history}}'; + } + + /** @inheritdoc */ + public function behaviors() + { + return [ + [ + 'class' => TimestampBehavior::class, + 'updatedAtAttribute' => false, + ] + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'user_id' => Yii::t('usuario', 'User ID'), + 'session_id' => Yii::t('usuario', 'Session ID'), + 'user_agent' => Yii::t('usuario', 'User agent'), + 'ip' => Yii::t('usuario', 'IP'), + 'created_at' => Yii::t('usuario', 'Created at'), + 'updated_at' => Yii::t('usuario', 'Last activity'), + ]; + } + + /** + * @return bool Whether the session is an active or not. + */ + public function getIsActive() + { + return isset($this->session_id) && $this->updated_at + $this->getModule()->rememberLoginLifespan > time(); + } + + /** + * @return ActiveQuery + */ + public function getUser() + { + return $this->hasOne($this->module->classMap['User'], ['id' => 'user_id']); + } + + /** @inheritdoc */ + public function beforeSave($insert) + { + if ($insert && empty($this->session_id)) { + $this->setAttribute('session_id', Yii::$app->session->getId()); + } + + return parent::beforeSave($insert); + } + + /** @inheritdoc */ + public static function primaryKey() + { + return ['user_id', 'session_id']; + } + + public static function find() + { + return new SessionHistoryQuery(static::class); + } +} diff --git a/src/User/Module.php b/src/User/Module.php old mode 100644 new mode 100755 index 0f10f49..349f47e --- a/src/User/Module.php +++ b/src/User/Module.php @@ -22,6 +22,21 @@ use yii\helpers\Html; */ class Module extends BaseModule { + /** + * @var bool Enable the 'session history' function + * Using with {@see SessionHistoryDecorator} + */ + public $enableSessionHistory = false; + /** + * @var int|bool The number of 'session history' records will be stored for user + * if equals false records will not be deleted + */ + public $numberSessionHistory = false; + /** + * @var int|bool The time after which the expired 'session history' will be deleted + * if equals false records will not be deleted + */ + public $timeoutSessionHistory = false; /** * @var bool whether to enable european G.D.P.R. compliance. * This will add a few elements to comply with european general data protection regulation. @@ -226,4 +241,20 @@ class Module extends BaseModule return $this->gdprConsentMessage ?: $defaultConsentMessage; } + + /** + * @return bool + */ + public function hasNumberSessionHistory() + { + return $this->numberSessionHistory !== false && $this->numberSessionHistory > 0; + } + + /** + * @return bool + */ + public function hasTimeoutSessionHistory() + { + return $this->timeoutSessionHistory !== false && $this->timeoutSessionHistory > 0; + } } diff --git a/src/User/Query/SessionHistoryCondition.php b/src/User/Query/SessionHistoryCondition.php new file mode 100755 index 0000000..c774c66 --- /dev/null +++ b/src/User/Query/SessionHistoryCondition.php @@ -0,0 +1,158 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Query; + +use Da\User\Traits\ModuleAwareTrait; +use yii\web\Session; +use Yii; + +class SessionHistoryCondition +{ + use ModuleAwareTrait; + + private $session; + + public function __construct(Session $session) + { + $this->session = $session; + } + + public function unbindSession() + { + return ['session_id' => null]; + } + + public function bySession($sessionId) + { + return ['session_id' => $sessionId]; + } + + public function byUser($userId) + { + return [ + 'user_id' => $userId, + ]; + } + + public function byUserSession($userId, $sessionId) + { + return [ + 'user_id' => $userId, + 'session_id' => $sessionId, + ]; + } + + public function inactive($userId = null) + { + $where = [ + 'AND', + ['session_id' => null] + ]; + + if (isset($userId)) { + $where[] = $this->byUser($userId); + } + + return $where; + } + + public function expired($userId = null) + { + $where = [ + 'AND', + ['<', 'updated_at', $this->getExpiredTime()] + ]; + + if (isset($userId)) { + $where[] = $this->byUser($userId); + } + + return $where; + } + + public function expiredInactive($userId = null) + { + return [ + 'OR', + $this->expired($userId), + $this->inactive($userId), + ]; + } + + public function shouldDeleteBefore($updatedAt, $userId) + { + $condition = ['<', 'updated_at', $updatedAt]; + if ($updatedAt > $this->getExpiredTime()) { + $condition = [ + 'OR', + [ + 'AND', + $this->inactive(), + $condition, + ], + $this->expired() + ]; + } + + return [ + 'AND', + $this->byUser($userId), + $condition, + ]; + } + + /** + * @return int + */ + public function getExpiredTime() + { + $module = $this->getModule(); + $time = time() - max($module->rememberLoginLifespan, $this->session->getTimeout()); + if (false === $module->hasTimeoutSessionHistory()) { + return $time; + } + + return $time - $module->timeoutSessionHistory; + } + + public function inactiveData() + { + return [ + 'session_id' => null, + ]; + } + + /** + * @return array + */ + public function currentUserData() + { + return [ + 'user_id' => Yii::$app->user->id, + 'session_id' => Yii::$app->session->getId(), + 'user_agent' => Yii::$app->request->userAgent, + 'ip' => Yii::$app->request->userIP, + ]; + } + + /** + * @return array + */ + public function currentUserCondition() + { + return [ + 'user_id' => Yii::$app->user->id, + 'session_id' => Yii::$app->session->getId(), + 'user_agent' => Yii::$app->request->userAgent, + ]; + } +} diff --git a/src/User/Query/SessionHistoryQuery.php b/src/User/Query/SessionHistoryQuery.php new file mode 100755 index 0000000..d8ad71c --- /dev/null +++ b/src/User/Query/SessionHistoryQuery.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Query; + +use Da\User\Traits\ModuleAwareTrait; +use yii\db\ActiveQuery; +use Yii; + +class SessionHistoryQuery extends ActiveQuery +{ + use ModuleAwareTrait; + + public function whereUserId($userId) + { + return $this->andWhere($this->getCondition()->byUser($userId)); + } + + public function whereActive() + { + return $this->andWhere(['IS NOT', 'session_id', null]); + } + + public function whereInActive($userId) + { + return $this->andWhere($this->getCondition()->inactive($userId)); + } + + + public function whereExpired($userId) + { + return $this->andWhere($this->getCondition()->expired($userId)); + } + + public function whereExpiredInActive($userId) + { + return $this->andWhere($this->getCondition()->expiredInactive($userId)); + } + + public function selectSessionId() + { + return $this->select(['session_id']); + } + + public function whereUserSession($userId, $sessionId) + { + return $this->andWhere($this->getCondition()->byUserSession( + $userId, + $sessionId + )); + } + + public function whereCurrentUser() + { + return $this->andWhere($this->getCondition()->currentUserCondition()); + } + + public function oldestUpdatedTimeActiveSession($userId) + { + return $this->whereExpiredInActive($userId) + ->select(['updated_at']) + ->limit(1) + ->offset($this->getModule()->numberSessionHistory) + ->orderBy(['updated_at' => SORT_DESC])->scalar(); + } + + /** + * @return SessionHistoryCondition + */ + protected function getCondition() + { + return Yii::$container->get(SessionHistoryCondition::class); + } +} diff --git a/src/User/Search/SessionHistorySearch.php b/src/User/Search/SessionHistorySearch.php new file mode 100755 index 0000000..2775652 --- /dev/null +++ b/src/User/Search/SessionHistorySearch.php @@ -0,0 +1,74 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Search; + +use Da\User\Model\SessionHistory; +use Da\User\Traits\ContainerAwareTrait; +use yii\base\InvalidConfigException; +use yii\base\InvalidParamException; +use yii\data\ActiveDataProvider; + + +class SessionHistorySearch extends SessionHistory +{ + use ContainerAwareTrait; + + /** + * {@inheritdoc} + */ + public function rules() + { + return [ + [['user_agent', 'ip'], 'safe'], + ]; + } + + /** + * @param array $params + * + * @throws InvalidConfigException + * @throws InvalidParamException + * + * @return ActiveDataProvider + */ + public function search($params) + { + $query = SessionHistory::find()->andWhere([ + 'user_id' => $this->user_id, + ]); + + /** @var ActiveDataProvider $dataProvider */ + $dataProvider = $this->make( + ActiveDataProvider::class, + [], + [ + 'query' => $query, + 'sort' => [ + 'defaultOrder' => [ + 'updated_at' => SORT_DESC + ], + ] + ] + ); + + $this->load($params); + + if (!$this->validate()) { + return $dataProvider; + } + + $query->andFilterWhere(['like', 'user_agent', $this->user_agent]) + ->andFilterWhere(['like', 'ip', $this->ip]); + + return $dataProvider; + } +} diff --git a/src/User/Service/SessionHistory/DBTerminateSessionsService.php b/src/User/Service/SessionHistory/DBTerminateSessionsService.php new file mode 100755 index 0000000..ad0021a --- /dev/null +++ b/src/User/Service/SessionHistory/DBTerminateSessionsService.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Service\SessionHistory; + + +use yii\web\DbSession; + +class DBTerminateSessionsService implements TerminateSessionsServiceInterface +{ + protected $sessionIds; + protected $dbSession; + protected $fieldName; + + public function __construct(array $sessionIds, DbSession $dbSession, $fieldName = 'id') + { + $this->sessionIds = $sessionIds; + $this->dbSession = $dbSession; + $this->fieldName = $fieldName; + } + + public function run() + { + if (in_array(session_id(), $this->sessionIds)) { + session_write_close(); + } + + $this->dbSession->db->createCommand()->delete( + $this->dbSession->sessionTable, + [$this->fieldName => $this->sessionIds] + )->execute(); + + return true; + } +} \ No newline at end of file diff --git a/src/User/Service/SessionHistory/SessionHistoryDecorator.php b/src/User/Service/SessionHistory/SessionHistoryDecorator.php new file mode 100755 index 0000000..d337825 --- /dev/null +++ b/src/User/Service/SessionHistory/SessionHistoryDecorator.php @@ -0,0 +1,461 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Service\SessionHistory; + +use Da\User\Model\SessionHistory; +use Da\User\Query\SessionHistoryCondition; +use Da\User\Query\SessionHistoryQuery; +use Da\User\Traits\ModuleAwareTrait; +use Yii; +use yii\db\Exception; +use yii\web\Session; +use yii\base\InvalidArgumentException as BaseInvalidArgumentException; + +/** + * Decorator for the {@see Session} class for storing the 'session history' + * + * Not decorated methods: + * {@see Session::open()} + * {@see Session::close()} + * {@see Session::destroy()} + * {@see Session::get()} + * {@see Session::set()} + */ +class SessionHistoryDecorator extends Session +{ + use ModuleAwareTrait; + + public $sessionHistoryTable = '{{%session_history}}'; + + /** + * @var Session + */ + public $session; + + public $condition; + + public function __construct( + Session $session, + SessionHistoryCondition $historyCondition, + $config = [] + ) { + $this->session = $session; + $this->condition = $historyCondition; + + parent::__construct($config); + } + + /** @inheritdoc */ + public function getUseCustomStorage() + { + return $this->session->getUseCustomStorage(); + } + + /** @inheritdoc */ + public function getIsActive() + { + return $this->session->getIsActive(); + } + + /** @inheritdoc */ + public function getHasSessionId() + { + return $this->session->getHasSessionId(); + } + + /** @inheritdoc */ + public function setHasSessionId($value) + { + return $this->session->setHasSessionId($value); + } + + /** @inheritdoc */ + public function getId() + { + return $this->session->getId(); + } + + /** @inheritdoc */ + public function setId($value) + { + return $this->session->setId($value); + } + + /** @inheritdoc */ + public function regenerateID($deleteOldSession = false) + { + return $this->getDb()->transaction(function () use ($deleteOldSession) { + $oldSid = session_id(); + if (false === $this->session->regenerateID($deleteOldSession)) { + return false; + } + + if (false === $this->getModule()->enableSessionHistory) { + return true; + } + + $user = Yii::$app->user; + if ($user->getIsGuest()) { + $this->unbindSessionHistory($oldSid); + } else { + $this->getDB()->createCommand() + ->delete( + $this->sessionHistoryTable, + $this->condition->byUserSession($user->getId(), $oldSid) + )->execute(); + } + + return true; + }); + } + + /** @inheritdoc */ + public function getName() + { + return $this->session->getName(); + } + + /** @inheritdoc */ + public function setName($value) + { + return $this->session->setName($value); + } + + /** @inheritdoc */ + public function getSavePath() + { + return $this->session->getSavePath(); + } + + /** @inheritdoc */ + public function setSavePath($value) + { + return $this->session->setSavePath($value); + } + + /** @inheritdoc */ + public function getCookieParams() + { + return $this->session->getCookieParams(); + } + + /** @inheritdoc */ + public function setCookieParams(array $value) + { + return $this->session->setCookieParams($value); + } + + /** @inheritdoc */ + public function getUseCookies() + { + return $this->session->getUseCookies(); + } + + /** @inheritdoc */ + public function setUseCookies($value) + { + return $this->session->setUseCookies($value); + } + + /** @inheritdoc */ + public function getGCProbability() + { + return $this->session->getGCProbability(); + } + + /** @inheritdoc */ + public function setGCProbability($value) + { + return $this->session->setGCProbability($value); + } + + /** @inheritdoc */ + public function getUseTransparentSessionID() + { + return $this->session->getUseTransparentSessionID(); + } + + /** @inheritdoc */ + public function setUseTransparentSessionID($value) + { + return $this->session->setUseTransparentSessionID($value); + } + + /** @inheritdoc */ + public function getTimeout() + { + return $this->session->getTimeout(); + } + + /** @inheritdoc */ + public function setTimeout($value) + { + return $this->session->setTimeout($value); + } + + /** @inheritdoc */ + public function openSession($savePath, $sessionName) + { + return $this->session->openSession($savePath, $sessionName); + } + + /** @inheritdoc */ + public function closeSession() + { + return $this->session->closeSession(); + } + + /** @inheritdoc */ + public function readSession($id) + { + return $this->session->readSession($id); + } + + /** @inheritdoc */ + public function writeSession($id, $data) + { + return $this->session->writeSession($id, $data) && + ( + false === $this->getModule()->enableSessionHistory || + $this->getDb()->transaction(function () use ($id, $data) { + if (Yii::$app->user->getIsGuest()) { + return true; + } + + $updatedAt = ['updated_at' => time()]; + + $model = $this->getHistoryQuery() + ->whereCurrentUser() + ->one(); + if (isset($model)) { + $model->updateAttributes($updatedAt); + $result = true; + } else { + $model = Yii::createObject([ + 'class' => SessionHistory::class, + ] + $this->condition->currentUserData() + $updatedAt); + if (!$result = $model->save()) { + throw new BaseInvalidArgumentException( + print_r($model->errors, 1) + ); + } + + $this->displacementHistory($model->user_id); + } + + return $result; + }) + ); + + } + + /** @inheritdoc */ + public function destroySession($id) + { + return $this->session->destroySession($id) && + ( + false === $this->getModule()->enableSessionHistory || + $this->getDb()->transaction(function () use ($id) { + $this->unbindSessionHistory($id); + + return true; + }) + ); + } + + /** @inheritdoc */ + public function gcSession($maxLifetime) + { + return $this->session->gcSession($maxLifetime) && + ( + false === $this->getModule()->enableSessionHistory || + $this->getDb()->transaction(function () use ($maxLifetime) { + $this->getDb()->createCommand()->update( + $this->sessionHistoryTable, + $this->condition->inactiveData(), + $this->condition->expired() + )->execute(); + return true; + }) + ); + } + + /** @inheritdoc */ + public function getIterator() + { + return $this->session->getIterator(); + } + + /** @inheritdoc */ + public function getCount() + { + return $this->session->getCount(); + } + + /** @inheritdoc */ + public function count() + { + return $this->session->count(); + } + + /** @inheritdoc */ + public function remove($key) + { + return $this->session->remove($key); + } + + /** @inheritdoc */ + public function removeAll() + { + return $this->session->removeAll(); + } + + /** @inheritdoc */ + public function has($key) + { + return $this->session->has($key); + } + + /** @inheritdoc */ + public function getFlash($key, $defaultValue = null, $delete = false) + { + return $this->session->getFlash($key, $defaultValue, $delete); + } + + /** @inheritdoc */ + public function getAllFlashes($delete = false) + { + return $this->session->getAllFlashes($delete); + } + + /** @inheritdoc */ + public function setFlash($key, $value = true, $removeAfterAccess = true) + { + return $this->session->setFlash($key, $value, $removeAfterAccess); + } + + /** @inheritdoc */ + public function addFlash($key, $value = true, $removeAfterAccess = true) + { + return $this->session->addFlash($key, $value, $removeAfterAccess); + } + + /** @inheritdoc */ + public function removeFlash($key) + { + return $this->session->removeFlash($key); + } + + /** @inheritdoc */ + public function removeAllFlashes() + { + return $this->session->removeAllFlashes(); + } + + /** @inheritdoc */ + public function hasFlash($key) + { + return $this->session->hasFlash($key); + } + + /** @inheritdoc */ + public function offsetExists($offset) + { + return $this->session->offsetExists($offset); + } + + /** @inheritdoc */ + public function offsetGet($offset) + { + return $this->session->offsetGet($offset); + } + + /** @inheritdoc */ + public function offsetSet($offset, $item) + { + return $this->session->offsetSet($offset, $item); + } + + /** @inheritdoc */ + public function offsetUnset($offset) + { + return $this->session->offsetUnset($offset); + } + + /** @inheritdoc */ + public function setCacheLimiter($cacheLimiter) + { + return $this->session->setCacheLimiter($cacheLimiter); + } + + /** @inheritdoc */ + public function getCacheLimiter() + { + return $this->session->getCacheLimiter(); + } + + /** + * @param string $id + * @return bool + * @throws Exception + */ + protected function unbindSessionHistory($id) + { + return (bool)$this->getDb()->createCommand()->update( + $this->sessionHistoryTable, + $this->condition->unbindSession(), + $this->condition->bySession($id) + )->execute(); + } + + /** + * + * @param int $userId + * @return bool + * @throws Exception + */ + protected function displacementHistory($userId) + { + $module = $this->getModule(); + + if (false === $module->hasNumberSessionHistory()) { + return true; + } + + $updatedAt = $this->getHistoryQuery() + ->oldestUpdatedTimeActiveSession($userId); + + if (!$updatedAt) { + return true; + } + + $this->getDB()->createCommand()->delete( + $this->sessionHistoryTable, + $this->condition->shouldDeleteBefore(intval($updatedAt), $userId) + )->execute(); + + return true; + } + + /** + * @return SessionHistoryQuery + */ + protected function getHistoryQuery() + { + return Yii::$container->get(SessionHistoryQuery::class); + } + + protected function getDb() + { + return Yii::$app->getDb(); + } +} \ No newline at end of file diff --git a/src/User/Service/SessionHistory/TerminateSessionsService.php b/src/User/Service/SessionHistory/TerminateSessionsService.php new file mode 100755 index 0000000..d15f13d --- /dev/null +++ b/src/User/Service/SessionHistory/TerminateSessionsService.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Service\SessionHistory; + + +class TerminateSessionsService implements TerminateSessionsServiceInterface +{ + protected $sessionIds; + + public function __construct(array $sessionIds) + { + $this->sessionIds = $sessionIds; + } + + public function run() + { + $currentSessionId = session_id(); + if (session_status() === PHP_SESSION_ACTIVE) { + session_write_close(); + } + + foreach ($this->sessionIds as $sessionId) { + if ($sessionId === $currentSessionId) { + $currentSessionId = null; + } + + session_id($sessionId); + session_start(); + session_destroy(); + } + + if ($currentSessionId) { + session_id($currentSessionId); + } + session_start(); + + return true; + } +} \ No newline at end of file diff --git a/src/User/Service/SessionHistory/TerminateSessionsServiceInterface.php b/src/User/Service/SessionHistory/TerminateSessionsServiceInterface.php new file mode 100755 index 0000000..f12b112 --- /dev/null +++ b/src/User/Service/SessionHistory/TerminateSessionsServiceInterface.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Service\SessionHistory; + + +use Da\User\Contracts\ServiceInterface; + +interface TerminateSessionsServiceInterface extends ServiceInterface +{ +} \ No newline at end of file diff --git a/src/User/Service/SessionHistory/TerminateUserSessionsService.php b/src/User/Service/SessionHistory/TerminateUserSessionsService.php new file mode 100755 index 0000000..7a91a94 --- /dev/null +++ b/src/User/Service/SessionHistory/TerminateUserSessionsService.php @@ -0,0 +1,105 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Service\SessionHistory; + + +use Da\User\Contracts\ServiceInterface; +use Da\User\Event\SessionEvent; +use Da\User\Model\SessionHistory; +use Da\User\Model\User; +use Da\User\Traits\ContainerAwareTrait; +use Da\User\Traits\ModuleAwareTrait; +use yii\web\Session; +use Yii; + +class TerminateUserSessionsService implements ServiceInterface +{ + use ContainerAwareTrait; + use ModuleAwareTrait; + + protected $userId; + protected $session; + protected $excludeCurrentSession; + + public function __construct($userId, Session $session, $excludeCurrentSession = true) + { + $this->userId = intval($userId); + $this->session = $session; + $this->excludeCurrentSession = $excludeCurrentSession; + } + + public function run() + { + $user = $this->getUser($this->userId); + $sessionIds = $this->getSessionIds($user->id); + + Yii::$app->db->transaction(function () use ($sessionIds, $user) { + /** @var SessionEvent $event */ + $event = $this->make(SessionEvent::class, [$user]); + + $user->trigger(SessionEvent::EVENT_BEFORE_TERMINATE_USER_SESSIONS, $event); + + $this->make(TerminateSessionsServiceInterface::class, [$sessionIds])->run(); + + $user->updateAttributes([ + 'auth_key' => Yii::$app->security->generateRandomString(), + ]); + + if ($this->excludeCurrentUser()) { + Yii::$app->user->switchIdentity( + $user, + $this->getModule()->rememberLoginLifespan + ); + } + + $user->trigger(SessionEvent::EVENT_AFTER_TERMINATE_USER_SESSIONS, $event); + }); + + return true; + } + + /** + * @param int $userId + * @return User + */ + protected function getUser($userId) + { + return ($this->make(User::class))::findOne($userId); + } + + /** + * @param $userId + * @return int[] + */ + protected function getSessionIds($userId) + { + /** @var SessionHistory $sessionHistory */ + $sessionHistory = $this->make(SessionHistory::class); + $sessionIds = $sessionHistory::find()->whereUserId($userId)->whereActive()->selectSessionId()->column(); + + if ($this->excludeCurrentUser()) { + foreach ($sessionIds as $key => $sessionId) { + if ($sessionId === $this->session->id) { + unset($sessionIds[$key]); + break; + } + } + } + + return $sessionIds; + } + + protected function excludeCurrentUser() + { + return $this->excludeCurrentSession && $this->userId === Yii::$app->user->id; + } +} \ No newline at end of file diff --git a/src/User/Widget/SessionStatusWidget.php b/src/User/Widget/SessionStatusWidget.php new file mode 100755 index 0000000..15bcfae --- /dev/null +++ b/src/User/Widget/SessionStatusWidget.php @@ -0,0 +1,85 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Da\User\Widget; + +use Da\User\Model\SessionHistory; +use Da\User\Traits\ContainerAwareTrait; +use Yii; +use yii\base\InvalidConfigException; +use yii\base\InvalidParamException; +use yii\base\Widget; +use yii\helpers\ArrayHelper; + +class SessionStatusWidget extends Widget +{ + use ContainerAwareTrait; + + /** + * @var SessionHistory + */ + public $model; + + /** + * {@inheritdoc} + * + * @throws InvalidConfigException + */ + public function init() + { + parent::init(); + if (!$this->model instanceof SessionHistory) { + throw new InvalidConfigException( + __CLASS__ . '::$userId should be instanceof ' . SessionHistory::class + ); + } + } + + /** + * {@inheritdoc} + * + * @throws InvalidParamException + */ + public function run() + { + if ($this->model->getIsActive()) { + if ($this->model->session_id === Yii::$app->session->id) { + $value = Yii::t('usuario', 'Current'); + } else { + $value = Yii::t('usuario', 'Active'); + } + } else { + $value = Yii::t('usuario', 'Inactive'); + } + + return $value; + } + + /** + * Returns available auth items to be attached to the user. + * + * @param int|null type of auth items or null to return all + * + * @return array + */ + protected function getAvailableItems($type = null) + { + return ArrayHelper::map( + $this->getAuthManager()->getItems($type), + 'name', + function ($item) { + return empty($item->description) + ? $item->name + : $item->name . ' (' . $item->description . ')'; + } + ); + } +} diff --git a/src/User/resources/i18n/ru/usuario.php b/src/User/resources/i18n/ru/usuario.php old mode 100644 new mode 100755 index 0d9850b..f8b486d --- a/src/User/resources/i18n/ru/usuario.php +++ b/src/User/resources/i18n/ru/usuario.php @@ -302,4 +302,12 @@ return [ 'Unable to disable two-factor authorization.' => '@@Не удалось отключить двухфакторную авторизацию.@@', 'We couldn\'t re-send the mail to confirm your address. ' => '@@Мы не можем повторно отправить письмо для подтверждения вашего адреса электронной почты.@@', 'We have sent confirmation links to both old and new email addresses. ' => '@@Мы отправили письма на ваш старый и новый почтовые ящики. Вы должны перейти по обеим, чтобы завершить процесс смены адреса.@@', + 'User agent' => '', + 'Status' => 'Статус', + 'Last activity' => 'Последняя активность', + 'Session history' => 'История сессий', + 'Active' => 'Активно', + 'Inactive' => 'Не автивно', + 'Current' => 'Текущий', + 'Terminate all sessions' => 'Прекратить другие сеансы', ]; diff --git a/src/User/resources/views/admin/_session-history.php b/src/User/resources/views/admin/_session-history.php new file mode 100755 index 0000000..8593e42 --- /dev/null +++ b/src/User/resources/views/admin/_session-history.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +use Da\User\Widget\SessionStatusWidget; +use yii\helpers\Html; +use yii\grid\GridView; +use yii\widgets\Pjax; +use Da\User\Model\SessionHistory; +use Da\User\Search\SessionHistorySearch; +use yii\web\View; +use yii\data\ActiveDataProvider; + +/** + * @var $this View + * @var $searchModel SessionHistorySearch + * @var $dataProvider ActiveDataProvider + */ +?> + +beginContent('@Da/User/resources/views/admin/update.php', ['user' => $user]) ?> +

+
+ + + + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + 'user_agent', + 'ip', + [ + 'contentOptions' => [ + 'class' => 'text-nowrap', + ], + 'label' => Yii::t('usuario', 'Status'), + 'value' => function (SessionHistory $model) { + return SessionStatusWidget::widget(['model' => $model]); + }, + ], + [ + 'attribute' => 'updated_at', + 'format' => 'datetime' + ], + ], +]); ?> + + +endContent() ?> \ No newline at end of file diff --git a/src/User/resources/views/admin/update.php b/src/User/resources/views/admin/update.php old mode 100644 new mode 100755 index c598588..f884ce7 --- a/src/User/resources/views/admin/update.php +++ b/src/User/resources/views/admin/update.php @@ -67,6 +67,10 @@ $this->params['breadcrumbs'][] = $this->title; 'label' => Yii::t('usuario', 'Assignments'), 'url' => ['/user/admin/assignments', 'id' => $user->id], ], + [ + 'label' => Yii::t('usuario', 'Session history'), + 'url' => ['/user/admin/session-history', 'id' => $user->id], + ], '
', [ 'label' => Yii::t('usuario', 'Confirm'), diff --git a/src/User/resources/views/settings/_menu.php b/src/User/resources/views/settings/_menu.php old mode 100644 new mode 100755 index 9c58638..69c2270 --- a/src/User/resources/views/settings/_menu.php +++ b/src/User/resources/views/settings/_menu.php @@ -41,6 +41,10 @@ $networksVisible = count(Yii::$app->authClientCollection->clients) > 0; 'items' => [ ['label' => Yii::t('usuario', 'Profile'), 'url' => ['/user/settings/profile']], ['label' => Yii::t('usuario', 'Account'), 'url' => ['/user/settings/account']], + [ + 'label' => Yii::t('usuario', 'Session history'), + 'url' => ['/user/settings/session-history'] + ], ['label' => Yii::t('usuario', 'Privacy'), 'url' => ['/user/settings/privacy'], 'visible' => $module->enableGdprCompliance diff --git a/src/User/resources/views/settings/session-history.php b/src/User/resources/views/settings/session-history.php new file mode 100755 index 0000000..0e00a77 --- /dev/null +++ b/src/User/resources/views/settings/session-history.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +use yii\helpers\Html; +use yii\grid\GridView; +use yii\widgets\Pjax; +use Da\User\Model\SessionHistory; +use Da\User\Search\SessionHistorySearch; +use yii\web\View; +use yii\data\ActiveDataProvider; +use Da\User\Widget\SessionStatusWidget; + +/** + * @var $this View + * @var $searchModel SessionHistorySearch + * @var $dataProvider ActiveDataProvider + */ + +$this->title = Yii::t('usuario', 'Session history'); +$this->params['breadcrumbs'][] = $this->title; +?> + +render('/shared/_alert', ['module' => Yii::$app->getModule('user')]) ?> + +
+
+ render('/settings/_menu') ?> +
+
+
+
+ title) ?> + 'btn btn-danger btn-xs pull-right', + 'data-method' => 'post' + ] + ) ?> +
+
+ + + + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + 'user_agent', + 'ip', + [ + 'contentOptions' => [ + 'class' => 'text-nowrap', + ], + 'label' => Yii::t('usuario', 'Status'), + 'value' => function (SessionHistory $model) { + return SessionStatusWidget::widget(['model' => $model]); + }, + ], + [ + 'attribute' => 'updated_at', + 'format' => 'datetime' + ], + ], + ]); ?> + +
+
+
+
\ No newline at end of file