From 493420bb7639e53dc94f2084a1cd9cd045e5c8de Mon Sep 17 00:00:00 2001 From: GS-HQY <328580301@qq.com> Date: Wed, 7 Sep 2022 11:48:16 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4=E7=82=B9?= =?UTF-8?q?=E4=BD=8D=E7=BC=93=E5=AD=98=E6=9C=AA=E6=B8=85=E9=99=A4=202.?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsaas=E7=AB=AF=E4=B8=8B=E5=8F=91=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E9=85=8D=E7=BD=AE=E6=9C=AA=E6=9B=B4=E6=96=B0=E9=97=AE?= =?UTF-8?q?=E9=A2=98=203.=E4=BF=AE=E5=A4=8D=E9=87=8D=E8=BF=9E=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gather-broker/pom.xml | 2 +- .../idtgz/service/impl/CenterServiceImpl.java | 7 +++-- .../service/impl/ConnectionServiceImpl.java | 25 +++++++++--------- .../service/impl/MqttClientServiceImpl.java | 6 ++--- .../service/impl/MqttInfoServiceImpl.java | 10 +++++++ .../service/impl/CenterServiceImpl.class | Bin 16036 -> 16148 bytes .../service/impl/ConnectionServiceImpl.class | Bin 26645 -> 26680 bytes .../service/impl/MqttClientServiceImpl.class | Bin 12830 -> 12844 bytes .../service/impl/MqttInfoServiceImpl.class | Bin 14843 -> 15046 bytes 9 files changed, 32 insertions(+), 18 deletions(-) diff --git a/gather-broker/pom.xml b/gather-broker/pom.xml index 9695ba7..d3d3ea0 100644 --- a/gather-broker/pom.xml +++ b/gather-broker/pom.xml @@ -91,7 +91,7 @@ org.eclipse.paho org.eclipse.paho.client.mqttv3 - 1.1.0 + 1.2.0 diff --git a/gather-broker/src/main/java/com/idtgz/service/impl/CenterServiceImpl.java b/gather-broker/src/main/java/com/idtgz/service/impl/CenterServiceImpl.java index 07f671b..5445b00 100644 --- a/gather-broker/src/main/java/com/idtgz/service/impl/CenterServiceImpl.java +++ b/gather-broker/src/main/java/com/idtgz/service/impl/CenterServiceImpl.java @@ -83,9 +83,12 @@ public class CenterServiceImpl implements CenterService { public void reconnected() { if (!this.isConnected()) { try { - mqttClientService.getClient().reconnect(); - } catch (MqttException e) { + if (!mqttClientService.reconnect()) { + log.error("Mqtt重连失败"); + } + } catch (Exception e) { log.error("Mqtt重连失败:{}", e.getMessage()); + return; } } } diff --git a/gather-broker/src/main/java/com/idtgz/service/impl/ConnectionServiceImpl.java b/gather-broker/src/main/java/com/idtgz/service/impl/ConnectionServiceImpl.java index 2679cab..5a8bdba 100644 --- a/gather-broker/src/main/java/com/idtgz/service/impl/ConnectionServiceImpl.java +++ b/gather-broker/src/main/java/com/idtgz/service/impl/ConnectionServiceImpl.java @@ -362,7 +362,7 @@ public class ConnectionServiceImpl extends ServiceImpl().eq("connection_id", connectionEntity.getId())); - + BuffContext.itemBuff.get(connectionEntity.getDeviceId()).clear(); List itemEntities = new ArrayList<>(); items.forEach( i -> { @@ -504,20 +504,21 @@ public class ConnectionServiceImpl extends ServiceImpl= 60) { - corn = "0 0" + "0/" + uploadcycle / 60 + " * * ?"; - trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(corn)).build(); - } + + String corn = null; + if (uploadType == 0) { + trigger = TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(uploadcycle)).build(); + } else if (uploadType == 1 && uploadcycle < 60) { + corn = "0 " + "0/" + uploadcycle + " * * * ?"; + trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(corn)).build(); + } else if (uploadType == 1 && uploadcycle >= 60) { + corn = "0 0" + "0/" + uploadcycle / 60 + " * * ?"; + trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(corn)).build(); } + QuartzContext.jobs.put(deviceId, jobDetail); QuartzContext.triggers.put(deviceId, trigger); if (status == 1) { diff --git a/gather-broker/src/main/java/com/idtgz/service/impl/MqttClientServiceImpl.java b/gather-broker/src/main/java/com/idtgz/service/impl/MqttClientServiceImpl.java index f073a68..45c22e5 100644 --- a/gather-broker/src/main/java/com/idtgz/service/impl/MqttClientServiceImpl.java +++ b/gather-broker/src/main/java/com/idtgz/service/impl/MqttClientServiceImpl.java @@ -48,13 +48,13 @@ public class MqttClientServiceImpl implements MqttClientService { @Autowired ClientService clientService; + MqttConnectOptions options = new MqttConnectOptions(); + @Override public Boolean init(String host, Integer port, String username, String password, String clientId, MqttCallback publishCallBack, List sTopic, int qos) { try { host = "tcp://" + host + ":" + port; client = new MqttClient(host, clientId); - MqttConnectOptions options; - options = new MqttConnectOptions(); options.setCleanSession(true); options.setKeepAliveInterval(10); options.setConnectionTimeout(50); @@ -109,11 +109,11 @@ public class MqttClientServiceImpl implements MqttClientService { if (!client.isConnected()) { client.reconnect(); } + return client.isConnected(); } catch (Exception e) { log.error("Mqtt客户端重连失败:{}", e.getMessage()); return false; } - return true; } @Override diff --git a/gather-broker/src/main/java/com/idtgz/service/impl/MqttInfoServiceImpl.java b/gather-broker/src/main/java/com/idtgz/service/impl/MqttInfoServiceImpl.java index 71ac5a4..20af191 100644 --- a/gather-broker/src/main/java/com/idtgz/service/impl/MqttInfoServiceImpl.java +++ b/gather-broker/src/main/java/com/idtgz/service/impl/MqttInfoServiceImpl.java @@ -206,8 +206,18 @@ public class MqttInfoServiceImpl implements MqttInfoService { ConfigContext.items.get(connectionEntity.getDeviceId()).put(connectionItemEntity.getItemCode(), connectionItemEntity); } } + + //点位同步 if (CollectionUtils.isNotEmpty(i.getItems())) { connectionItemService.remove(new QueryWrapper().eq("connection_id", connectionEntity.getId()).notIn("item_code", i.getItems())); + Map buffMap = BuffContext.itemBuff.get(connectionEntity.getDeviceId()); + if (CollectionUtils.isNotEmpty(buffMap)) { + for (String itemCode : buffMap.keySet()) { + if (!i.getItems().contains(itemCode)) { + buffMap.remove(itemCode); + } + } + } } } } diff --git a/gather-broker/target/classes/com/idtgz/service/impl/CenterServiceImpl.class b/gather-broker/target/classes/com/idtgz/service/impl/CenterServiceImpl.class index 8256223b3dc22a1475171dbeddd4d156d8d27a1c..2125e9d192dfbef552339e79acb3e6b061f4571e 100644 GIT binary patch delta 6597 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 T^^tsBPkk%j8Kr4@goghI>s5%b delta 6328 zcma)A2Y6Lgw*J?;<=mW{K)4~03xr-%Ksp2q0*WF5r5c(d0s>06qF%9riXg`ZC`}X< zkrKTm#NNdMf+C7oW^_hptYaMu%)ib}qEFv^@9}Z>S!eCF*IxDC`{b6(H(Zw7b$I9F z0J`ZR7gbW~$`Bcvfl4{mk<(m+rPPsOF&UmIBV=SuM#W@wOinj}vJ4p`V_g|1<87E= z!x=W5X~RTE&T^3>rI|8G&bDE)i*_=_<;tnH$vO5q%}L61Q#K+Swxl`^kYIRK3nBQwNWSy+f#8A20kqxfgBlkM8(Zy-D>a?WX z=gR%^fDM}>Oa%XhK5^wi+3d0BqpmzAkDKTd7OE#5dCHNeUCb~g)8!eXo^_KXpEL4#W4>V2i$=X<)Gni5 zcI6d$)m~q-VYdx?Y-X z$;k)^&E{mno~X}R21^J zI-Np}O!rgKpZpJ(V(r)`aDXG42!<+si0(6WPv{aWB@p%!^~SBp8|El)d=(oWbTDDr>JY31*# z@3zBZc$@~6&Y3^|)9aRe^2F+oH*EXl;d@FJT;}Of+RD++o_5i${UGoZ0x9vd zoA&UuCpY^kr(<3(PkSqwee`HYkMZd(b2K~#N76|<8-{I6Lh?zXLx$1oapI99q6yl zZ8G*Oo#g1*o=%pAo=(xJf~@HiFPPZr{Q1+)?NmB(wxj2mxzhx7e&Y|AIDfLI({%>( z>gl;U!_sx0qcc67rCdT)b9Ans+u*qTc{<;dE_%MB7kGN1Uc>_M^kPfECAz?$)1Y&+ zdBVKx)=NFT%nZET)1+SE=|a8I)2pPR|5Ss~1FzO=JiV5JdY$EWk%eus@vb-C4VL{I zb&01p=~7moS+mU3n~k$veNS)ETRpu^egBMxiQL=u4i7J3m!m5@U8$=)y;GO^OBxn- zyh~Ttjp~|gU2Ab&=jnQz?X7ovconZXy1~1KV1nzv-@R@1!A)9q$_x%u+24ito^&YHy}JYs&O zjJrdJds<;Rsnk}24t|Sz&HQ)sy0zVD4p*7nqeeYu!jIeQ6S~0DCyjbaikb9$f47_A zT4YChcp0zwQxYv&KdsMX>r|TZY_=7_bIQVc!P6J@B~N#mYcK13e^a73`iiHo>TBii zB|g(kck1N%rIY8)n>cl{|6-GTe^S$C{+brC^3M5Bi{$zXTjXemQU2FW4@Y+^dn(so zSFe6_6b~MKy}WMoWl^V6_X;|<_Yc?YQhuQAK?zmrKEH1BM&*0j-(W9qlusz=DvjRs zbicmsNnbhMlU~x>lWx-8lN01be^X(1Ip}{__)hp;K^uQzQA7W5k>ejKDoj?Q3W7%w zLnG^9o;GT*VaE=L6`Xs9RFuzW10I{{Pds+YpLnd0Kk*pGKk}wpY5aj%kMD#rj<0je zJ~W8Uj;w+mkb+PJ^bv%%k)hbj(d859fG`TNkCc}d#v6E(Z-V`J%M|%v6wj2s{`ii~ zdYV*&VAc3)sTfA$0N$qDJJlM}oP*?uVP2r2ykqC2?P#$8hW>81=GA%*kspC(pJL12 ztM%YogwjS9q>z_FVkKG>JPfZA4FoAP+KBkz?PwCuFHE6nC7Ok>jmurym_TDLwLKeg zS71bv>`|O3QF{3MxC3h z(7bF1TEttX(25qcinr!altP;n+77NlyRyPWqyp_%AeM+EHzH#@I;6l{6qZD*P{gIh zB~HQ#r_eFsWVF`kZX2nQ%etk|JrPYf zDfCE0Q)svXS@!HnQQd0k-dYkhMlaGy-5Nx471l8{cVcbuOoyl+vgyv5$j3yKU=sS{ zY@CeAI2BVEtErfVb8r>M>oFb6F$1^bTxys}4YP4K=HNce4I()X8C*XVAK_yLy+0=4 zZ}>YL%D6~ccr6o~tHW#5C-^i7`DXkB{|wCAjL*mm1#+L03J25|q$02y*^k%}bVAg@ zmkz#i@O3bf_zIyI^7)_S5eolNB55MwT9H7i6JmeX{-)2CI4slTxJPm^IS=-SFl+Y zvU#qq-Sz*`JU`)QCe<+M5NpJmr(fOLmJV+t*~cH!wO0TV4VXP(5w~27Ox%FFxDm%= zNwD3p^x9e{`_-0EzuFS&S6f2;7{PQ2^(h@K{m*TT%{C<`@1B^QSn%3p#3HYb-g2ba{X9vA{aB8iUiVmv;7MI=h_CcD#k& z-in5}E$}uC$a%lRqrfQPR_Qcu@76MTv{d34MQKq%;Z7V2RN^@0!PJ-Va{Q2DqC`I; zW`7C|P?UtLZ~`YzEQur{h9CornfsH94W>>`VUS^K{FLHK3=Uzm9TedJLQ9B_z)Bjq zibmdr9IQrDtl_b7ACg^hKYC#k2H-)IvZqJjA%g4{oQ18JMLf1MU~ep5!t3sYMwaU{mHS&Eu-E?6lUjBT)z-w>KiFJP|1zokvY zlPqdw!G&gW?@ZSIzU?S2ti%xI2|aWO0ru1t2yZKT0oheJjWHRP!tjl72;UkdL1uB4)^+!bO~BhA*ypza+hIUJCO~pd`aWVCQN2 zWL<%VLG~9UA|acv#HA6GWN=Xib#dylM642*D@NP))RGLZW&CPhB5RS%G||Kg)U9Dg z*Mi4jn07}>Tsw#s7TQ5Zo$gLzNxD=MF>8txE~(k$D%-=Yz||{IhrDYNZY8c&R#Htl zu0}i3k06Uzfcn^hTkalC>hc?r9Qm#{^=fUU%HEXtR7QQO69 z*vo97S6EiB@~nD|*sz=Uv`4~toprQV>SLcY#T(KZZ%TLUmy>ZoPQ}|Y4hQ8Nyerdi zNEYLLS&k3n0emCn_*R}k@;i9}-^*V76x94ByiX+&l{!)nF^cw;IIG&VO00n|*(W*N zj7UK$my{w)o|gvFkhOliESEeA`zUav(2=5MIhjA>qyQo_RC4I76SQm@q*AswlcoH{OVu@l1JLIPL(h4j~;bwN{7%C)Z`pnrDKruI#?g%O?j3s zl1{9R5HC*`$WhXnIq#42sxv*DXxW9c4lh~926Yf4{Ko%hqD@CqIx*9<$`(l1+6Aq7 zW~MIz(h^CJpBB_*+p(&k2GUECgyTdcg*&S`cNq{r zkC|0iP2biSa!UytACi zi|-WPSmyDraw(DM8hnYR_`0@qidkVL43FKJmIZJ@f|NBs%aN3UgoQD=ET|{DJ1+~c z#^Sw~Z-Iff~#x%i~#?2I-*$b|fgr9s;t7bGGPl^iA^pT9i* zn(-Is&yu3{#hgwGUM1KC#Wb=C50w?|z?LCwwXM~C&OY2$7K(2lomW9-jBt zT*s3&-?!@nGt!s0hzyjIC|TWr1Nos9<9Sl^h2A1i17yT2E3mU1O$>M>xOAoO_U-s5 z=t1PEoKo}G1Q|>b`(WeWa`~|~PU<2<-_m!w=>a6b%(6ot<{ZzeMtI+_4MMlxA|up}&Dmk6>WU;#w{ldwhz0sP*m2W zWnVI^VU=Z|Nx%gyStKf;D59d^g8cCZMNy&!>g|bwR#{e8ojLvP{chjxx$iAME9GZp z-we~P8rO1tfE!pEV3-?Sx5<^wer^dMnOptb7GN2-`?2)Sz^T|?M)VMhFP0us-|ZbG>$6|Nj{<){Yi1W&hWy555)TsaaM z>G>t4$TEw~5}#RWnPsNfXG$z%o7XL~+^n#q+^iIMvQo2}TfAdd3H+%U(W{fsthUS= zvsU2Ma8`3cOjW=#>&$w~)G!+?Q);}H3A?hy+*W}9WocuNpl zIOf^$qsNRKUua30yk(i~Ml7?#m7T8aQd|Su?U?jrSrkc6UzK2AY@Z%^yKNm4xzoPm z1F@Cxzz^U$~ zl_eVWVh>Vesk#{KM;%$FQJ>6Lx^)u`y5)-GB`s2g7T-ln?xH0w8abC^ys`Z?90!<~ z$few#(zbraK^zapR^Wu70w;-o-JhcNkZmQcL1H;R2$kcsgGxs~PQU!xLqBqm7IN@$ z^)qT5G|09zC#Z6^Dk(cqhKG|pVYCg!ci4!mqe#v_jFjrK+!zft?${N_cU z8swHCkZqZAwAmN*C6(j6gU^CK?L*DyL0{18V5fsU>O2lE1bq&^@Q0Ddpry@zrK#HC*A6a~p)d->-y^iJ5}_)hJHCk`-~JP6S%t)g(WvSn;V2UR z>miq;#Fcx59T}2g>N4HFJY;cEuH2S!@`p?yWHLowAY~DaY@wBUk8?>kP>6 ztfrU6nv7#z-LdJspA8w$Cal3Wy7~wc*^9N-Op9 z@kHHzbvnzsc0eLJtwH`A-4H%pWomT0_;Hg7a!?K-Ry_LU965}D+$Xo}_l9+;mUDhE98{zFDPi5qs%~M1|f})YY(}apNEdj zS7r$MaVQ3I7zS}TMsb9_yx@4^7$u%WlKw?$9H*U+M;4#5CqJ<%?is{$iXQb-^*yH9 z$)iq(p3{{XT5+aUoQ2Muqv!ea+R0q>JVPW#({2`sgLEqvL#8L`|FnLnnOe*%Ok Bn^^z= delta 1713 zcmaKsZBSHY6vxl`KfCM;ms(Ji)m>gR6xkF|gd`m$(9{{75hFk)P$6Y%H2q-Z%WPR$ zQ-Z=(<3)4@6@^rE^|ItR!xy#8(y}NkD^0CF_@QykrqVihx3mvUvomM^_c`Zxo^yBq z&l5V&ThDX%3o6%%R_t(MCjzG0Wrj98+MSe$-FED8VlO)E*k{N7XtbcyiM8l*(hU8O zN|+gg!%m995hr31ltmnMlGj}G${Gbs6~GZYjyc%{!z}1AL&yxhW_Z_39GAv=tfe4Y zl2dWY486e$%k3n;P1S0uPHnQO&6=uL4Vu!`7L7w{E0ZNNIWt4U9kq?go}3>3Otz`F zHPxt^n5>e{%wUR&BsA5mS~N94ZP!$*vTACF8Frc>fSa1yg`drYO;c@VXji*6wI>U| zGC8WMSJf=8uBfTfxPwn@;d6`_0+?! z@CadwA|#LGGy-r)eYSX`W_^57B$x5WR2E8G}C1SCl2pKWk8m*PsvMJ`!Qjh&)Yd+!D@3 zit?Nt^r*)Ypd7Dj;x5WOPKjkbloWT~c2ul1Mm9WLj)T*-fO6^K`X`DK7xp!gsx+zTuBBZ{xX!8hRqAsP;77z`JN-~o8> zAW{&AbPT{a48$bFqfoN5kbnhnW06!X#Zau2Nee>%q{95my8i(n(`2j5qF!ao0o|PO?6n5I9SvX4vIzHxDq}E zHoA`Z@ENhwE%|MZ@-cF-g>SRLJ>=vE_=bLML4LIB5Axc0a_(=Gt7nzZExznCD7KFV z8Z^C+X5`ua&pzpHTYQv3SGwgKfm0<83eS=$Q)JOFj3pn&(RgI*7t440z8B9)^Q)1s zYa*|UAH`um+~=dhFFiqTe`+QFs1K?r9yM9+)+rQ=d`d_~f5;+~>!He% z@l`@plLt==u|y_cN|~t98y2?3EGHM9le>I{yvIsCf6*E5Dp`46I=(0!SJM=%mAiVK zOyZ|mSg)roK9{mVDqg2}yg}J`lk)Kv6{1$Mn`trXX$czigsOVJpm$akd$&n#BaOp$ g%0Uz5qM3@&BJ;JT8ZObOL5bqQ6>d-mB8rNj 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 delta 4893 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 OE$>yVtEGOy(*FWb^*#9j delta 4101 zcmZWs2YggT6QBQFlD&JkNiKzi8VEIo5JE@k5JZZFqDYI81c=5Ykbr{a0K1|H5A2F! z#jdBQG_e;%1+1tD_J)e0(hT3sy9@Bi{gQqEH?z}ccJE%FeXutCcKwsqOHOBdIh974d zj1LIoEQi`-f-Vz-n1sm&Qyj`yNf!E}eZYD_a6RN!2F zIZxS@ip~$93e{nSHA)FNpi`KmZToAqT7QutR6!5lzCQ%6%+|$MHle`4CZk z&nWj<-Mrf1Ifp7yq~zyQDGqBLtP5kk!G-|M#ET9#;w6KZ9jenPHsTdUuj=xezP_&L z4TCowx(IJ+-QHHpCWChz3M*wJHY?>_MeiwkU(;Eps8*LP23z&HP2-!RXhPWF1BVu& z$d3<|@R5f3u_~Bo@QFi9#T8jT)n&Vb&+xgy7Y^O5@N1;8uQ)EVm-If!DZX%Oc}-nK zbycmwZw9|d>P#G*Uktrxutyp-ve2J}d z@i(Z@EebSo=Z6~i{KsM+_FEjF%@zl72$Wenw`%H;@;Mb#%LmUWt*R=o99&&Btzx>x zzo@r3%mivB@~z@6{YXE#dqbl`u*|f{vX9Af9LKw7q>M~RV87vj`%ucTgthE|+PF@$ zHtob72SJIRhqLP{Dho%I)>!(7_KA

!ua-0=0LaG;RDt#-3`~GPxD0LmNL!t1TyT zlI3I$8BVdB%4wi{-Rb_6>aayD81nwH*Zu00JLV@KT+|#gRe?Rv&e1dJwCvqQ4d$=zs z>1ZZKR@By6iqJEl6Wx-QS#Dl>%bb3e`||)$pvZ<9MM`PqaKqlQ!A%6xw9C#B#5*xl}WIjzwSH z_X4dkJXQN-U5LxXt@02ORO>X=D%NLkh1PzPJGoJQ=DA+N&I@s+ZaLp@mE~#2}LAISJHG>ex<-J4-86s}-u_*_P+vkmU<_w%a_TL*iO>|3aQ?c^Yh^D{xl2_p%=6vF8Tq~iob9g9$nh`K4m*V}b9ZNS3SG|gEnlG_UTOI%zS_;t zY(D84mA#g)v%H9}w|s+YS&Y9d-^c?jFH!DN?j+UGu`QWeT~=<{DlRSsA+17++lp1%tvWWP32rr%N%!4 zb|ZH~Rv@w{t1bIh@$GJ;)w2n!_zqBxyTspYX;LtWL#0+{rhhXgofT{_ao!b=eOPv}$HE;!LA zs!5cRs8i2Bi+b+%?zl-Dk1xnS;`rs1L7&qX62b%G?hg8r0wS@d!AU_eCk5?{Iw@$E z=cJW7ekCEqQDa(3U(+`f@44BY5)RV<@*DbA95wWvq3=ELgZfRBY@6n1@24!!?>KSq zlViQ!DfV}HUdzSd<$HU<0?qfN!n4Ak%8~H}hSLsArY|v#zCyK_)hY}lL(OS0{Y<}z z(C<`4yXjZS3ZbSU7(u@YM>AgI<(X-bNbjLPL}ClApg#r0dAZM!Y({x|kMQ4JVV{0%wy~{bWtD3md#$gK%5|-YVoQO z=S7zir@bqiNZ4KiLyjIZYS?|VXtI~Urdn9(j(90|6DfFsl)9fJd<6aN+0WBaqmeLT zKtChl_u`C~4DFU7W7(Yq#~aDms6{ETu~CzA;1Cr=T?#Nvh~N*AxMJkA^L%-vOFz#S z`7SFK_Q(zX53MA$7G#l(kQZcuXHUH;KnmomxYtWT;zQ&Zk`~JL;um91 zD1;O-#(Ku8Ey?vbi8v@V&3&52zd)Tq9amFrWJcEqfeRv`?!$qO?!+FsiCT|1ukbsl zr~6}%ZQ(6^n6~5jf zTtWjqZh#k43Yv+8!^JewllAjQFC2VGWJ$nU5-p+U09wik>Zwx{)rM9L+K?^U^lY3$Nry;&%C$~O`j-|qjOCO= zXH$-3cc1*kJWTVVXA;^Nw3VH)@kKk?Kr%@+2ecT?y<&7bOkK#QCz!We4Cv_TRL6?r z=#A$!!i3&!2OPaRUi8u&o#-?#T9KnP>q9n&_C%H;JB^!EYc-<7ef3EbD z#O@zSN|TuVczBKB=rtT|jAQOGX$ZYbkG;nh{6|mL|LKvuc2WTpdY5sn*hXg|JSzXK zCH>9hsh^oxhad$of->1i4p#F0d@nV@JmK||-nmGA?p=&aaA^!J!BP+1fje=Rhn~b! PcsfRV0c&FDC*1Krj^-eH