From e390b04de6e368ad7decefbd37d06f076631a31b Mon Sep 17 00:00:00 2001 From: jinchao <383321154@qq.com> Date: Wed, 25 Jun 2025 09:42:39 +0800 Subject: [PATCH] =?UTF-8?q?V0.35.1.250625=5Falpha:=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E9=A1=B5=E9=9D=A2=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/XNUDPService_V1.0.0.0.mcfg | 17 - .../C909_V1/Services/XNUDPTestService.scfg | 17 - .../ServiceProjects/XNTCPService_1.0.0.0.zip | Bin 0 -> 2612 bytes .../XNTCPService_1.0.0.0/CMakeLists.txt | 49 ++ .../XNTCPService_1.0.0.0/XNTCPService.cpp | 29 ++ .../XNTCPService_1.0.0.0/XNTCPService.h | 26 ++ .../XNTCPService_1.0.0.0/XNTCPService.scfg | 10 + .../XNTCPService_global.h | 11 + .../XNTCPService_1.0.0.0/XNTCPService_p.h | 7 + .../ServiceProjects/XNUDPService_1.0.0.0.zip | Bin 0 -> 188048 bytes .../XNUDPService_1.0.0.0}/CMakeLists.txt | 32 +- .../XNUDPService_1.0.0.0/XNUDPService.cpp | 29 ++ .../XNUDPService_1.0.0.0/XNUDPService.h | 26 ++ .../XNUDPService_1.0.0.0/XNUDPService.scfg | 10 + .../XNUDPService_global.h | 5 +- .../XNUDPService_1.0.0.0/XNUDPService_p.h | 7 + Release/Services/XNTCPService_V1.0.0.0.scfg | 10 + .../XNUDPService_V1.0.0.0.scfg} | 0 Release/Services/libXNTCPService.so.1.0.0.0 | Bin 0 -> 393072 bytes .../Services/libXNUDPService.so.1.0.0.0 | Bin Release/database/XNSim.db | Bin 1224704 -> 1224704 bytes XNCore/XNScenarioManager.cpp | 2 +- XNServiceGenServer/XNServiceGen.cpp | 2 +- XNServiceGenServer/test/CMakeLists.txt | 8 +- XNServiceGenServer/test/test_xnmodel.cpp | 129 ------ XNServiceGenServer/test/test_xnservice.cpp | 126 ++++++ .../.vscode/c_cpp_properties.json | 9 - XNServices/XNUDPService/.vscode/settings.json | 77 ---- XNServices/XNUDPService/CMakeLists.txt.user | 424 ------------------ XNServices/XNUDPService/XNUDPService.cpp | 229 ---------- XNServices/XNUDPService/XNUDPService.h | 27 -- XNServices/XNUDPService/XNUDPService.scfg | 17 - XNServices/XNUDPService/XNUDPService_p.h | 15 - .../.vscode/c_cpp_properties.json | 9 - .../XNUDPTestService/.vscode/settings.json | 5 - XNServices/XNUDPTestService/CMakeLists.txt | 65 --- .../XNUDPTestService/CMakeLists.txt.user | 424 ------------------ .../XNUDPTestService/XNUDPTestService.cpp | 133 ------ .../XNUDPTestService/XNUDPTestService.h | 29 -- .../XNUDPTestService/XNUDPTestService.scfg | 17 - .../XNUDPTestService_global.h | 12 - .../XNUDPTestService/XNUDPTestService_p.h | 17 - XNSimPortal/components/service-development.js | 385 +++++++++++++++- XNSimPortal/routes/service-dev.js | 227 ++++++++++ XNSimPortal/server.js | 2 +- XNSimPortal/utils/xnCoreService.js | 119 ++++- 46 files changed, 1071 insertions(+), 1723 deletions(-) delete mode 100644 Release/Configuration/C909_V1/Services/XNUDPService_V1.0.0.0.mcfg delete mode 100644 Release/Configuration/C909_V1/Services/XNUDPTestService.scfg create mode 100644 Release/ServiceProjects/XNTCPService_1.0.0.0.zip create mode 100644 Release/ServiceProjects/XNTCPService_1.0.0.0/CMakeLists.txt create mode 100644 Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.cpp create mode 100644 Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.h create mode 100644 Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.scfg create mode 100644 Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService_global.h create mode 100644 Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService_p.h create mode 100644 Release/ServiceProjects/XNUDPService_1.0.0.0.zip rename {XNServices/XNUDPService => Release/ServiceProjects/XNUDPService_1.0.0.0}/CMakeLists.txt (54%) mode change 100755 => 100644 create mode 100644 Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.cpp create mode 100644 Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.h create mode 100644 Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.scfg rename {XNServices/XNUDPService => Release/ServiceProjects/XNUDPService_1.0.0.0}/XNUDPService_global.h (50%) mode change 100755 => 100644 create mode 100644 Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService_p.h create mode 100644 Release/Services/XNTCPService_V1.0.0.0.scfg rename Release/{Configuration/C909_V1/Services/XNUDPService.scfg => Services/XNUDPService_V1.0.0.0.scfg} (100%) create mode 100644 Release/Services/libXNTCPService.so.1.0.0.0 rename Release/{Configuration/C909_V1 => }/Services/libXNUDPService.so.1.0.0.0 (100%) delete mode 100644 XNServiceGenServer/test/test_xnmodel.cpp create mode 100644 XNServiceGenServer/test/test_xnservice.cpp delete mode 100755 XNServices/XNUDPService/.vscode/c_cpp_properties.json delete mode 100644 XNServices/XNUDPService/.vscode/settings.json delete mode 100755 XNServices/XNUDPService/CMakeLists.txt.user delete mode 100755 XNServices/XNUDPService/XNUDPService.cpp delete mode 100755 XNServices/XNUDPService/XNUDPService.h delete mode 100755 XNServices/XNUDPService/XNUDPService.scfg delete mode 100755 XNServices/XNUDPService/XNUDPService_p.h delete mode 100755 XNServices/XNUDPTestService/.vscode/c_cpp_properties.json delete mode 100644 XNServices/XNUDPTestService/.vscode/settings.json delete mode 100755 XNServices/XNUDPTestService/CMakeLists.txt delete mode 100755 XNServices/XNUDPTestService/CMakeLists.txt.user delete mode 100755 XNServices/XNUDPTestService/XNUDPTestService.cpp delete mode 100755 XNServices/XNUDPTestService/XNUDPTestService.h delete mode 100755 XNServices/XNUDPTestService/XNUDPTestService.scfg delete mode 100755 XNServices/XNUDPTestService/XNUDPTestService_global.h delete mode 100755 XNServices/XNUDPTestService/XNUDPTestService_p.h diff --git a/Release/Configuration/C909_V1/Services/XNUDPService_V1.0.0.0.mcfg b/Release/Configuration/C909_V1/Services/XNUDPService_V1.0.0.0.mcfg deleted file mode 100644 index 8fa1279..0000000 --- a/Release/Configuration/C909_V1/Services/XNUDPService_V1.0.0.0.mcfg +++ /dev/null @@ -1,17 +0,0 @@ - - - XNUDPService - UDP通信服务 - Jin - 1.0.0 - 2025-02-04 10:00:00 - 2025-02-04 10:00:00 - - - - - 12345 - 127.0.0.1 - 54321 - - diff --git a/Release/Configuration/C909_V1/Services/XNUDPTestService.scfg b/Release/Configuration/C909_V1/Services/XNUDPTestService.scfg deleted file mode 100644 index d80e723..0000000 --- a/Release/Configuration/C909_V1/Services/XNUDPTestService.scfg +++ /dev/null @@ -1,17 +0,0 @@ - - - XNUDPTestService - UDP通信服务 - Jin - 1.0.0 - 2025-02-04 10:00:00 - 2025-02-04 10:00:00 - - - - - 54321 - 127.0.0.1 - 12345 - - diff --git a/Release/ServiceProjects/XNTCPService_1.0.0.0.zip b/Release/ServiceProjects/XNTCPService_1.0.0.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..d26ecbae8246f1fbb39fa82fc5adf6ef797c1f13 GIT binary patch literal 2612 zcma);2{@Gd9>-tnh;%O|nz~GACQHVe8rhwk%oxkqE2%REMP(UVj zAi8O2EjM#lutTOtw!5%%S({6zOY()2in)>QnWW;FTzRZVS}DmTrgKfW*aW|nqb^wt zj~vBkd&5V)T`dBzKwMgcf;7foNB?*7UW$abPN^lS=y~?b9;D`}se+}NXJgH41KRTQ z#^;CT37)e(H|y5!rr*1Lg%_wmHwpOw=7vpL!4u3tC04*Jy3ll zs^CeTi6?7~u)^9OHD<0T0(>tk1eK%S!jn^(CoTMkWDUXj_|{fe(mEa0&{`S{Is%zIgL)_qHFYC3+rA1;8R3w*XgY?H%wL5V$-(jXYcW_vNpsuL z95I-A?NrQ+_8uRTffv&QdBcx9rOwZ#!(z`VqS1OY$y0ym%?8Zf41$chTFMdaa>0N<~Jhy4s3~=T!Ac=dKzb z3%z{d!Y`+i?0tfWrd(rM@cgdEF;O?JmB#G!W_<7=+{XburpOV0<<#yNG8ea3=hnH(Zl6 zakbqor0;l0kdVL-e`ZVpc%J`fL;*l`tHrXyobkuoo(&;{AP5nJP-oAJgF4{oF*kQd zD9fa%41S&o*L`y^RIl|+fVQhd!llmsJo2D3_jUMeV>TeN?QIm(#56C;GIu`{HTtw` z35`fuUMfr(9Podsx?5+ivHnZMk-IJrSMRf0hIQBp>3Wq$F0|GF$Ow#>)-V7RyQV10 zJb#Ete-!zCIP&%L^824mIUp4wZPnPE#QMaKW~1r3DlV{oYJGHotZ;Z5=Ta>KDZiuAc`6L`k@_cDJ;jw0 zJ!_Z|_{W~TfL+*;oQZN9`lphNrJCTo-i)53tu|$oH4(&HJHabMG`KEk zG0xMi-JraSn2-iiX2)d|0UBn5I zHq{m~T{FLNzE|m9n)U7G(80zY<<ecXHWeNn+UJo_S`=xSCB%MlfGqJl8eTGG{)GCg%})kI(SLOs7wk>_ zDNgU-rhYVJ`O4#V9DIBPBEPtBI``RJJTh412?o!Ua4FY`M#t)Ua8B8=DCw!tu?lC>E=r9zN_(SN#oN;D!g!5f|QI#Zmat2b{EbSca`rO!2X9b4Sj|1o-VP za0zh;=)VqpA^rW@;$l-qMj^e3mC?HxA)Qh~=g^DjdGrjFG>lZy#LAO}VK5|_5@d5p zudbRlOg}{mr8)k7WJX>f)pmrOQ55A(;3MzYGSxOu0^xT)-P1o_XV2tYZK*8e^M-ORn|*T4pw}k&Om3YvS0KatC*BCnMC@AS!eAl&2+LXTQJSK zv!mPvwtNNYQ!OtKz44$@?ZlyGcI}J*qz1$rbVBSIWxoFGJq~CgVKb4f8$Hhs>)RI# z{$;a%o7(}D*ynBV)eH|Z07QR1HO&w8&a_8Z6K3)%e^`Jf1}#`62WhQf=t2o zvBAvbRqV~-|Ch;cCW1)8a=(E*B(eqa`{FMM6wJ&G;E>oB!0!hBEl&lxg2}SMEfoI& WE`R1?ybl2Y#M=+? + +XN_SERVICE_INITIALIZE(XNTCPService) + +XNTCPService::XNTCPService() : XNServiceObject(new XNTCPServicePrivate()) +{ +} + +XNTCPService::~XNTCPService() { +} + +XNTCPService::XNTCPService(PrivateType *p) : XNServiceObject(p) +{ +} + +void XNTCPService::Initialize() { + T_D(); + SuperType::Initialize(); + /* 在这里进行其它初始化 */ +} + +void XNTCPService::PrepareForExecute() { + T_D(); + SuperType::PrepareForExecute(); + /* 在这里进行其它运行前准备工作 */ +} + diff --git a/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.h b/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.h new file mode 100644 index 0000000..905e7ce --- /dev/null +++ b/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.h @@ -0,0 +1,26 @@ +#pragma once + +#include "XNTCPService_global.h" +#include + +struct XNTCPServicePrivate; + +class XNTCPSERVICE_EXPORT XNTCPService : public XNServiceObject +{ +XN_METATYPE(XNTCPService, XNServiceObject) +XN_DECLARE_PRIVATE(XNTCPService) +public: + XNTCPService(); + virtual ~XNTCPService(); + +protected: + XNTCPService(PrivateType *p); + +public: + virtual void Initialize() override; + virtual void PrepareForExecute() override; + +}; + +XNCLASS_PTR_DECLARE(XNTCPService) + diff --git a/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.scfg b/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.scfg new file mode 100644 index 0000000..70e9890 --- /dev/null +++ b/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService.scfg @@ -0,0 +1,10 @@ + + + XNTCPService + TCP通信服务 + Jin + 1.0.0.0 + 2025-06-25 09:16:45 + 2025-06-25 09:16:26 + + diff --git a/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService_global.h b/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService_global.h new file mode 100644 index 0000000..9526fc3 --- /dev/null +++ b/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService_global.h @@ -0,0 +1,11 @@ +#ifndef XNTCPSERVICE_GLOBAL_H +#define XNTCPSERVICE_GLOBAL_H + +#if defined(XNTCPSERVICE_LIBRARY) +#define XNTCPSERVICE_EXPORT __attribute__((visibility("default"))) +#else +#define XNTCPSERVICE_EXPORT __attribute__((visibility("default"))) +#endif + +#endif // XNTCPSERVICE_GLOBAL_H + diff --git a/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService_p.h b/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService_p.h new file mode 100644 index 0000000..9df1708 --- /dev/null +++ b/Release/ServiceProjects/XNTCPService_1.0.0.0/XNTCPService_p.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +struct XNTCPServicePrivate : public XNServiceObjectPrivate{ +}; + diff --git a/Release/ServiceProjects/XNUDPService_1.0.0.0.zip b/Release/ServiceProjects/XNUDPService_1.0.0.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..ad37f12fb9d9960c1f8026f6c161470ecb6e570f GIT binary patch literal 188048 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 z z-`S83BZj>)d^h`x7a2g`G5Pt_QvJKrFKnl})%Y(Nm*gvJRjBLdeU`q)0<8zDkN0$! zOct$1DA(ryZ1|`@m!AxyIjjPQbK2jWQcfIi4nr>S0|HTC!h*5>?S)8~=bqCNZLDA5 z8t%Bi-}ZbKcLIBmK%pF}I9*uImT8Ce6h|f8&_1~fNxPlsA3ZK2F2Hf9%TM3&`1JOb zwqeV;NWW_@;w0sIQ8%}pNt+ABEUxy2W>m@>5DEipUm2LuwOP&g=zZpU<;kS|XeVaH zMJ5pyEZLrmqlmI%%MS7`Ej0-p#IPO*@cAJ0wzn&%!6FeAt+hRF0Lotz_|kZ5`_`k$ zBU*S?WKEbrgUF07{##H;B89^#Jjp?9g-KG^mkU|iHBpZrOmeG2_673)s10Kbx_QJM z14;v@yUJXob|E)TZZr{c3t4R4gFNr2$xzJUCsqn=HM`n3V;)UL+ac^PaT0ZZV}wB1 zIiow6E4sTVp&Cv649NJFLE;LGMYpK(7&Sxc9LdX9bsgsU!>iY;P|qg$gcnP*awPTK zuH}T4nL|91p2Y0?t$7e}a@TJDf=+u-L(s*2T9-_TI8>zW_IQ)kLBfd2uE7QQoR-YI zrs>hf*s!DD)$8*k_Y|>e>o1vtV>lMx*+Th`irn3Ub3;=#`=p3 z9jB61An2d37EKZ`cB_K*)sz$S5{U>>ciRzM{swU|cJqqOs!^mvv-OAz&H(k5uz82n zhV`5uKcCRbf#$vv7tfpmq3T~0c_Wdc8?!}=Q67Tmp5KcmIgO$-fky4wwd-pNi9t>G zmehq<$8RHh&2lDJ@=mXgf%zQCUG{GOZG;`8p5Udo^LMgtD{_04tyiTRncU9~yAYq! zlzRPfD`H#AmV2*XR4qaFJ$TbNl#$#?hiD;4UBx^+qE9)Or}0r)Y(YJn>=@M(KJMHj;8s8P!oS z$i(G~&z4yw0li2kWm}E1L|B11Y`E@7uM$?{D|&%%vSl^Qd)wu=?X9;xa%dN2UMu}J zcET|+$neQD${k0H&^(f`h?XZi;ZtJ$*7T_fl+LvdCxEKGwtP!IY@~vQI2Xb%!*hQn{Eprpb=}ol?m6Gf!%>3OZD%)6D9kO{EpBDi zN&Ok>_`Pw&IdPg~<+9uRB@;W2vL;3zp3{~eyUCVbQvVuPiJ)8CTa2d;VA3)Xru8-^ z$nx1ot8+#*`4!be>rHIMqb)76^eN|f#U1wvTW)f*?Haj$Cdrf8LEfthJ<`duAvdw@ z#v3gZGt{UVhLFk20kLvuznNKl-=Tzzk2L0VKMvWsoFD6QsnK6VJu=YM{ZBg^iE02b zvO0!VazppgH;V#V%3HK{VFxi}-g{|RBlQr;_TIRxX_O0i*{%0yLci=K4pNbeT#~}a zZU(RMi_9y{dEx#%e^R92r$0ab)DUrb5sF<_qZtmItC3Z-kKE~Cg7S@7q&Umgw;H`} zNlL~h7I_D`f!RN}i<{$ds_vB;nC`F4mf)hOy!xiZjj)xJMWau<=@TigpH{`Gd<eEQ8fD7Wrc%R&O2QVUMX8S=%Ospc(2bgGVakbzr@znOb+v?ZgZ@&VyY&geIp$U z;W1nT_{BjWqx;ou0?OdH-G34vTtN@M@l+rEue09@tlab`tr?4tiM=1Ymf z=ZgP+eDg-g_Kw6SLy?mVwhJiee*uj^a=*Tu%{yE2gxG%D_av9% zcaUQ@u=xK0K5`K&KXg0|^K%M2&X)n-#Mvj;K11>5q97HbCY;JCqFBe|Gy9Tz9+Eq#sPp!oP70bz*hl%i)e8XfZzTbmakn6_&3jE z>GQPbV1K^I;sb#H8{~vnG`{wnSU-(EPv!qj+pzMbqGw5CuHE zl$AG*e^)F|-uSLq-`W4aApiV{;@z76@jX~~jxHVdp4i`X2jHh(!rJ-&@Vf$t$2vGW@Si?}eZ|qG2LL~m(~q9|2FHEBNDA4CNzz>~F z@gz5%%K`VpJpTwL?j69t1^YR!#T$H%;vYTB?Ki+@oyf|=uLAz&lk7SD%eEAs@d(TJ z|NME1H*@maSEf*W%1!M2--vM{AKuOB-H$>0*AHX+`FKjBaR2mfN83Nd*_l7yu2GdA zP99@g2B*^6jrue2?eZ_rCO1@j5ns4bCIzS=+;YUIjSsceoSqK9K7sLHnI|rud70 zW4~(?;BVZ<>Qg6u9mdJY&-;FZ;u|@=dyie{z8V@~=V#wtU_bng?dR*?r1%DoPyH2e zUO#;S@E5OP>DvY0qIf&UH$VSvil22KJI_ylTm0VN>`Kqw6izQ&wJUAE>UW%+kMXI3 z_4*jv-+LT;E_VG+qtHI!_)eoL$IbvbHmJqRLHonGc#`V?zxYA+d*|*3`}u6P{bs;F z;`~Q@eHZrC*kSw48(_r!GairpK9dgz;g z^M0A#zE5$-i|l?l9PoAPSpUmIfKNYxoj3P1il6@!i?0Nnm(!jDym>P_&X1>w=j|&$ zfc+2ab&%#y2mCBfZhRYXFQ(bX?Opqb=X06^&O4_^M;&5%b&-S4+ku~B>Dyh<{twr)^Sq}-@dJLx+Pn4# zeB?fMpX}*u6vi`jI>qCUK>J%cd43JxXFtpKzp_azM{VCs@y(px`be|*y+3Ga6zXgH z1HS%hia)RUvs@IPdOs^Ky$JaBPqXW|)D7Rooud;y6#pxypANQC{O-T8d|}>CDW2ux z&9?iQ_`3#vM%(Yk(fN;lM%TRo)?MrWyZbf@{VcZw&ik+b4*068+5LaX&q3ZegT*%i zz9$z)wBLRdcRs?N$DjWK=9#ni24+zFhK-!R1MqeCvv{nH^6`zFpK)ys+VclZAW*^i#Z!Pk3;2he z9ez!pSZgV$*{wVie{{o8tg!6|UwLp9> z{tE4T*RlP?ehKvRQMMo70Te%XJ&Ruh_wvF-c+rzIc^fqf{dAKL1UZwl!yE|s?uW5)Wyc&S z*0at9oR9B1JOcX@=$H@iTL3?RlV?ut2l~(PsRsdHwu#+8r$i|o_HcCgiYT1NXITDn zR!po%AFELO49-5e67X#=V&ydN0LZKNvg`XM;5%_~0uK*13gZyo2YkohvGUAUh8l(b ztbYK0{246&`g&Zf*K`2R$E{rs_~}3o*J$!T;1@1uNUVOfc&;dqw|a4y?1f(z>CE1{X4V|bNcwf35tIJ-|N@xa!H^MheLcL$X$O)QaZT- z=%iK-`wnP-@Wt%-Pfm%)^XHVfpBq!OpE*ynd}nzY_8aGy>CcGum*odF3gf+}WX1C5 zO2GL%lp}ItI{atAdHk|L(t`__P;T zK5_)$yWYa*7l7XMHx{3DM58djBXflKd!t8EJbybI7q`<8Vhv-{^?%f<7y@Be~7;x8;c+4)51 z=Q2)D1bqH#)(&ti;4>~{>9c$i@P(t;{F-9`e~_ck51j<|c5WWtf%a!{`Hxqh4D|L! zmOd~1Bj{Oc*zx@I6rcmkS$S^(;PbBJ@*hv7_~fN59s4%mr*QhnKTkE7=hGU6{^b(@ zKbZ6TEcrjNKWNtJz&F9Jb)e>dJYC$+V`qrh<>VEO!n_annG|n5mmTMS&lKykE6#%T z-OS33ZvsB$Hdda0RdzYuWdH^#ZZoAOyJUX?7m=xKM0wM}T);!t(KVF;3zWrcP${o$p^H z{;u|m#Cp?|i-F%g&dSM$0M6&P_Fh8qMVueuQov_{KWl%@E_x}&U*+s1!+(MP?`7ZX zxD52fi`e;m9`FTR9P%lbgWL=K{8BsDS2POql;>UvcFxDy{(o{6(5n+!KkU_j?{Gd# zmtMIV>;q4-`~THzD1IIn2ma)>Ah(>w(!F1-0sk-9VKh4YFTnY{k2QY>t+@R>X#d2+?0&x0p#7I`q3z$flbyF4ZxPeO6}O80 z2tBs}-{)HK( z^xa}Q?7pW_n5X{|;42?u*LUMOkYjIT^_|q;!0xny?dOiaiT(c1Li_7hv2_MU?*)1F zHuk)~ey@0ar`$*P`Eo8Fgu9-#ySMj0Zji z@Jr5N$Dds<9?u=?;XHEr`{4)0{)L+!6zl1m0q5gRpMHqqU*-I0*FP+dEBhDV8#%t; zw*mZ~;Qws_JH{m&#D2+b9ue!a-v#_`_}=57aLhWuf6vKR&PPGMJ(=apdB9J3fYsxE z`WVGuKwa-%gNj|UeIgpF4VExhapBMWPMxLkbPv!gwmpm_y zi}>m0Mq&QTT)_E!^RqUK*YTFkV!y+)o5gf;3$(v!Ej!MeUx57vc7p|){rN?)-)AP^ ze4O(OfIr0fO>X~(*#1BHC9%AB4d8s-^_Bl@6xR3fzbu}gg)h_gJ1=GJ9=Vsr>-bw} zKkx7C`2YK|cs{@SN~17t|LIr69@ps^!{%*3iG&6dRy%GnfZ>` zpK{bYV!y_wcf@+V`#<9NmizxBj*orvKjQD*=Uvdh?qT=UX22a6vG$^6{}uOh&woLW z=HhCedQTkJ`seq>^4mx6i|tf1J`l%A9s@XE59bBIkG_(n&&Pi#9{*(@isklSeFXZ# zF|2&MQKD(r0AR9?4C^no-F2RrJ{)KSMJkt~{ zSm2jD2o2_kvPvX|BGG(&L_wJm+36@n^I80WxIO+wpcUh(VH6!5^*bdzR%IYEoXDd@ zI=TpD(usI6CLs@;Bv_gG_##iDZp`+lqgShEt|Jv=n~t zcRIqpc|Cq7>S^oh?L%|qzL2js!2ZS;F!)WdE!^J8{Kggb1?EG4^N{S9d*nbEdF5cZ z6aPMx_v7h`r^(Ed!Ff`N^iVRAN=Z)C;qRT<=0_-iq}G9KI*AtM(ka=bl{=pnv~k6h zd?cP|#XBN`;&`|CU5nZhnW0GeW*w1a5}GNQY&sWDM%)9DTs{`dHR1pKlH1$c)8-2x zpBK#zbO(Cp2FzN!{Bocp+=-j|eLcRg>=id|&gL_?wI_<^D5+RF>x-e;sYR*u;*@Fo zR$Y4~NSl~F;B@L9$mZiHnogyZ(Y)nBr8D?%v7Bl9X0JS}ZMHv*7)k!JlPvNsqU?zi`ph2il}g>1bmWa(Wl-BW$x zU?>>D2PPWNL{g^5#p%{PM+fJ}{2&p>{48hrK{`Hb4>r3p#i5~GK9W}w_z{%E{}&ll z&|-BEguCIsQ9L%5zOw4Lto7BTpTY2wjN(tH7Y%1{9|sL9xjc+(EInk)u3}TOQ4g8K z5-TGxeLibp$HsCfr({R)q>aS0`C%-kEVi&?OP{jvuGVB4v($7}eKa0b)b$(AS$Lt; zOo@>-GDJ=T>XzrD&bCk|3i%eu<&K{(g@=-gDxHy3ETJ%O3FW00Ecq#;gcp%kdHjkd zC7Z?HfhlPM??B^r612`VKzxMA5=_&6ykOMRJ) ztXUgbtV~1bE*nV=mT#5InD*6Dcq!iON+fUG(xt5y5z9yMStR=w_qI% z&nFrjw(-1?wvAGEy19`s{ZwJ?+!T9S)Li4qyf zN6=6@mmkaX!#N{*OP}|Yc^*F$HRSrV3umzlB^Bw%RF$LtW)C-&yq~O=I-8NfNM1a9 z(OA~+P7Nm#>5R$bxJF4=F#-kzXe4$I}6yK(E8z2Qy^EyLX? z&>N7g3^+_W?e)uT0c-uvoNr~U9^BFw2um)@O`DvSo4T6IH*LjDXImVB*4D}pw6<2p zpib^Ae{Y+mo{Oz5^(|?wC8x*Q%HdIatj+Ok>rLA`+xk4#rj0bUvK;C}gu;EkK!?ZT zM9|h&cUzm^*A}uiXL4Y6kJVG;3-`2zx-GPBB4Y>ydc$pDU$2E@CpqaS&TbFS?z4FK zW(O>F-AV@@!UV|TOw0SvmILh;N72^T*EYX=Qx|U9(-yQa1XtLnZ4DH{MAl#7Gyb-| z4l88QU3f-vS$+}oki|DSoA5(HKe4T8Q)~5oqDQU1)lqmSoW%n79WX#g`Mtn_Q*Xm>ycG+E;VRcnxOeX zx$@_vW?x_qrb}MrpV>P*;H~6|ki{pQQjbE^g;|NnU=J3;laWMEB)7=It6GT>pyJ1z zo+6PW3xe=)XBVc$!a_Fbp6|tLh{;sDl}^B_(-JMX9yn808y4rHs>Iip&u8QP!+FKr zO6AC*WMnj+98UI7n@}izuwrgVD?H)D0%|;x2r5`Y? z_6Da%djfwWCN^H5x?SYd%!E{80A4|#zcXq)Lb|DM82 zd_6t0!=yQ0JHM}ezUk@}9tz+u3i(1|;>jxiTwz(-{C#qpcRupUM6)p)pwyy06ZZAU zcqS~h4fLuT%WN!#wm!^hI@Ya-j$4tx~<@VWqzVLig3rp^x z#6Ubj)XNlBGYxb}$qlRp6K){j=9EV}N%Pvh1y7{OFv_cb7Ii)g%AOT1&x(3yMX$4@ z&{@*tEU9o7bvKJjn^kSif|_PUKeM8kS<=WXs$y1kFe}QJ1+B}Xx@BF@vaDcP(X1?~ zR91BBUWDUmvQFrY_qW?dCw6IKdpeO& zqN;BPlUU*_vr7}jJqgFvYGE5#99Wa>u7o3VmE}jp&P;Zc+hMOC;R!U|4)SPTNyU^{ zTPl^#s}`G}=ER#5Neqj3m`56OmzD2+Sd6ly%Wb2R%6EUs)-YR5r`?_^-(wp4D$Knx z+i}?I$M(vVC8KT|om4I}QEH>^05g%>Re2w_qy&cYnQbD;W=Hm=C?YwJQHo-^u+Qos2~*@oyEa#9v-3ag<+l^+e1}$ClXB)=GL1O8%|ZB=@+Ih>3^MRAC2|uMTWE zD%aSS){J_wE!zsXpncias59YgS+YH7%-Z;Dwc6^Ya=EP_Cl|iaj2brC?#i}AX;J-e zvfY&}URKmCZ0i5wK5S`A^bjW_xkY2qmV~{Gksg?FdXJr6?DH}*#a=Zubqu_W>%_K9 z1`}-S!8=4f2=|hsGJpGX{;#+_>hdybt?wQ+bm~tF3PAdrhsFuO*uuRc^@v&b4(cIb}Mld`GGFM9d~a zR3|jDNxCZUV{HC+W0Pb{#a&dslhiNLvN+AnwdRX&(oyC77$1>%YOu^oHCNh0BW{DnM|iFhq5%=?`v$nb2C$@+eRmLXUZ}=ZMNT+eQxUC3f$DfnR8bX zD>z2)uw`qTy8`PD`B!iMLagi<+IigWF?DC(@?VxzdF=FJ+ZJFN8rf7~2exOWyphyn zrx)Qqa#kjym!Si$vGi6sB`6WpZBPPnAGUl)_yCu8Ww~v1VmE@OtgpsZc^|edB-V(e z({4|;JxJx8eXh#;uz%7l%Oz&2VRHP)kiIWig7-k`L)D zp47Y>slSjUXMZGzzd5JcpnTC#UXr3i5xlI~2-YBcQ8^UB|A+sys^$F1B=|xu)YaD} zp>Fbvkzg2kGreI)xtA6zIXmb(N&RMDDBqNfWI}n@2<9{Ctev6tCz7#HBoLC2)EtQ= zNFg+J`IM|2YDT^x+-!(^f$Ub7F}=hW!YiW=oD8|U@>hDIkxV2?Djtr^=BLR%QwuXlsAGL-+CcXUL1c8V}ElT+yt81!!Mr7V5&k zE3BYAI}yYfo}G5d7Yd*e{9F&}>&Aao3wTRTyu3;t4Jiq{O@02PLk`**bk_oFyCKwq zwC{5ZzOSwLeT6S-(QQrrci}xt7QL?<{}X=@9vKP`W3r~!|MtxbBe^RS#LdGJlC?UP z4%8XR4dqFdJzHlclyA;N;#pre9#v3GizJ6Pl8-p zB!Tj2@}=YjLwJPh-vfBzBoFFI$7mf;M1F(Er~bm}Kwc;Wqy93c{#N@{5Nipf#xKFN z^7LwV?&1V!ALs9vWPiUyCO`2Xr-XX&Na2_(sDC)RNXh5qU{LL#MeP8k(lPw2NKTQH zbZVVVD3n3b^l%ExmgJOR0+&fdqKZ#)>WL|t5WIYTJza4kzpjkFQKJwOV7Vq_I{ zhrKYK1?p@IzRkJSSFjl|yr|@8x2W9JS;}1lRki8x0mlrXa1`4Srb+mJeVB4p+gLrB zbVjY-4Z9}dY$(cyz3A#H?u20#P}pE;2)&VNgu zNO``lU~S0&gh1kESPbvOe^qG&UAW$m4{6F46;a9MLv%`1aoj$YBx0TH#@uEIcS)w- z&8c+BxGy;IY8?3o78uA(Qn7)YA^f%!34u)@HPn=R7uJRGR7x$e_`raYRco88waM{^ z`BA7BX0Xy>x*{18_9$aEoD}PRjAB97q(=8%aVNlJnMs(|zE2v{_c;aMCvo4W?g$-e zbD}xwz~~7X|II7nSxtg9z#A3@Mz)Ds{k@%vJ%nX=!A=nz8j?rC2!CZCevqtAorr!O zB3{G?hw@mq$V-LKDJqJEvxMnaW(i8BN0fr~1?@zXipqoxsXU1a1A#G5i%zi+m}B8B0K9mN??wEzmH!!G4FQEQFs3^`Tz6rRu_dN6dFttaoIfL<-dN=yFU< zr;v_a7`He>p27^Z31-Nvr>uIhR%*_q<0u&gDkhqg%P>3hN=`3}<+@;_51p;~#yoe&B>+FAVS)_4x3RV$u6 zQd8oU-V@ZJ5+K$GRO0`rE6VE5V%dhAD0R`g>%r_wZ1}{bOWe3%Y2M04S8ZDu@on9~ z$1F-SJfX-ZA;Ogv+2w+aLPfMrL{#!{!8n0s3C-j|KTVzHO6E^0H-AOaKfy!`uM=(p z7wEc2)M{~gxxh-c`i@5;S;8e4qo@3aZ$XsF6vSh3#c|0|xcM=Ub+UzJed!ZyYb1l&kN zuPURR90}q1(!4JKXFPv*)mP4 z;|3`-T~yWai{2b>CgdkuteIN$Lm_J4NGWP)kGtqsE*|FbSLI#Sjihp@OVht6dbbt1 zg{gpE10GGOm5oIrug}TEj#y*zsZjvLCvt{e=HgM=GYlaPteR{TxTI~p!XQDjkem>U ztC|{oG<+kUR>zJ8QnK8lsvfeD7qnJ{Now9EPF_OJdcztStEXU>{=O1Xzf*P1dQ;;N z-i0TVj04M6WE^GumP3W3rfcIO>U?}Kg~yUqlKsO2p9u3PnsZtO6Wz`*4;Q9$c$&=B zzFIi~B{3s@L{zBc_~|cPn4!x~d9&VcC3c-6%i#v7jjx(5Al!m>78bNl z!v`7ON?wzUEK)$j<#uZqb;#?)x-eCKg{JzNk}$L_+g%U&7SWOZT5#E8ih-AkcQ( z5|OIdLS&Y$W|XY9mD6ZFg+rALc55PcbSRrnr9H9XteSG{ON8<*>R)~S1YR6W1GGOX zk@O`-)J(?eOB=x&6pE#dGDnDMmV_V;l3Kv3Whau#`})<@G4{v0I%fO4C~w`(SvlX) ztxBJ!4|Z2|DsySfM*So{(%40o))2{}T!fofD)oERi{zln&lWu+LA_^WE;5O9aA`$C z0>f&J2@>xRR|6hOD7(%{U|?>Vi0H{mtY#%LO&6AFeClCWeMTscsqkXFmtyp&mxPX% z2oabh1h~LpB0>gr-@YL{u+1XOQpMMfv{-O?NCL#MDOAi?d+EsC1kX5nPJf z+^D!rQx@+VvZqwj3*J}3?x?tBrP~awRBG~BxidJV)3z)AP_?E(A&Q*D_p5ns9yMrd zAe~(t$;SAAeX7(a2?}-x-QWcIpPxYJuqb4{MZZ<>KZyDhA^%U4ybz{wHRo_7Hrq%n zrdlrXXdqI?`rFaE5AlH#W9 zv)WviYIEr%5yCkaE0IN(0;?q#R7e`mDf9soCtMvB zpt|f8T^0=%ru9U7xq70t9l}ESV=v*40YvOFstefI{;dkV1^cct8dWmHxyk8^6XrUo zBwIt2P}dAuzd9W&Do06SpAhbe@CTGmskEwS9~_@})>4=91P7B!4mD0+4beAD7&f8; zwPDKcvg)uiqYq&neJFS>Yu0w#*KNf)*{yR{#I4@TpncO|$#@$Nm5H|PgLb7?%RyS&6muU?qUgD`|FQt{ZSj_$6 zv|w|1&iIs6saUgW(KL5Hi2$i4empVhfpMu|LM#GMQnb`#DOs*5_DO`fw;D>qt$b)S0piw zWEW@&hM0t?^(p)K1ZvJE)+;uMhc$b6FI2)X))KfLfdmoKVk@Gcs&;L&E|Rf^N(o6u zF&MQ)(P$KlY6E5?xbffeX+*}5BT?Jx$1NoG-RMHRaY?)QARbw@*ZF7#dtx}FkFQ|M z00IMVEto2r7Y{{<;W4Qsb4tF{3AI(}DyJkAN73%A1)*|`sbS_~WtbH!3pL&AK}Up| zCu-!A%dpZrc?&(Gh-a(f*j{JzoCqF5e?sxAT$#8s{qZCoH0y*I|H^fRN?3FUr_=zR z#aT?<$6R{p6Y}}XsxQljsLfNY7*()Ws@LG9lNrqQeZ`$$Nr^cppLsp;yts)}xF1n@ z!33KU3kSy|WMF}ALO?wD1Vt0FR^_-@KfMZUD!N)Gg7nsL0f1Nx21Xw-Z%zTozldXhApW|D?5k)&L3VY$#w-mu(+g81u`)t)WtEUhP| zQouqc<)rwu9dib)n^j93RZtnrr>l%r+gBA7 zNJdQD2z{s!IaRnJ$2M`)UyoC()sM&p z&AsXsk^!Vy?y97mXu)39sw?GBZ@NI$pdskO@rZU7Bz&n@&A+P6xMMT235zdPI%Y!H zMcHO0*^#>N^9e0xqY_PJG%q~!wOJs+DY~4!kVaAkI(To`F#SW;rGIdx8fr1mN^z5O16=lWuJF>7?@Y>B6D1X{loj>ny7Hl@~g|R3e9|1dSMylOlr{1l3f7G*dQk zrvr&Abd;tIh-g}O^$|6C5C|mDF~%o-Lhmke zm0o8Uo)aLKQR0_I`r{)KS-@xlA8S;gp)#A&LKR<#h)WORFE$E@tLB>8MWWh)G%qGi zV<+ovlFc*mL-$JM>j%}y)r1Sf?1%dt1t@aJJ+LA6|kb1 zpVY-wB}MyDHyB}A))vp9)Nmq!;HqIC*$(}|aJ^J$Be{JEWx({-dSfw~=r}YPz@TJT zP3eavG4P)i<*-zgL(*AAYy3FqLbj`#Oc(Obo09Pq)`dywWUMD?SGR~m^qd{T@mLT` z`|;804AOIF72IN^Y?*3{WpjnhX$*2TUth#1^G79obr;8LP{EMDTt}*UpL03ePnF%0 z%2e|1fa1P2pIL3s$sn-q=&y9Nc7?D}anZUetF0Gn%NC@o0*2rGp` z;PDt7C}eaA)fQ;2@~z-bU8h>y&)`;Fv4fYnF}*;2J{7fmEGH<|`i-o5mk6DX5%peH zE`4SUuEQ~2ac{lau?>$jm#pAI`kMg^R(2~BAi;e^)g*M3$!>H9v*~;~noi77vbi{> zEyR8@H1w&s-jX^_L)BLmq(w<)iX}nB`*^5i^JBqzC^?qf1ej8wpP7iQn21}Vc*?Tl zXOsgIm3H5J@d7%@peq?Vt>Yw8Ln1buQyNE2uW#S;`EIsm=*()hM5 z?I^Wqr-YWl%=r>>GhV{9-H<6_qEbcup!lwr+PF-(aO)VeL&!a9MpGKfVL(^793L~FLfsC7VnI?n79o{XepWnzcQ97p zFvrL*aW=KltwMrV(y4*?An>&Emw{H7Q;<_?IuJ>uN`5-@QK_hps@;1{b$9KuWleNX zDYcm*CrGXDET-1;ka*?dv0nL^`t}Y&?5{QmkNKzl$&2hl60!WZj=U`mjeKli> zv5-L2TaYJ*Q|W9>Ax;&$-)4pH==HV|osKJz(uSBgFbl;Gi{fDos7A#4U>wdZG{D*z zxHufLTO7Jmg8~;{9k6Qmv1D{e^saJ)s6_E`MTx=ex3?0^>SfWtW@ zhjRE`3C$2F2ZL${CGG_E81iY?PG_Go7|-D;@OneRNH!mj#xsSqZT4754j(=SbPE7Y zA^mZ;pw)#`&w3>5))nS7bA{QjHfG(!r4zEY{*@gbt$Ip14XxZLIrXUt)F&-p-;O1@ zynyUMyerw>i;Nw<9=*eN4CyqmhT=l1RE0?`PI9^6wAe?XT3Q52)xcOGmegB_!|g;G0CZ|ubCxUDB7JJo z0!oWq3+m9(>4+tQBS~Gkg6XZArjo@(mWUl{nFhYRopIWBH7RK&$=RK#?13A9+qOC) zVo|eM&@Z5@tllzt zZheHl8Z=biD$mhOy<=Z0t%>tlXo@A3R41`ioMPmtzErc;%rKq;lB$JILOa?TMl!4$ z1*7BhDFd{`O)5NmLfeY+L!VlNz~%&0PC1zho__&tdum0)L%#Q>9B+>DqQ! zuP}qpN@WuM8sdqKr@-yX*vDq_zF%WiwFXI;o6C0@e^;mF!cO`+IQoJZb!EdP`Of8Q zWdwD#GP*-^QQei~>Mq_(UH3L1#!_g;O{(fn$uSkr4bjV9)LVJ60F6aJJlEn&8LCNv zC>nIiIo~I`ZnHy8iB~gsFoVU-VVG_eLivLCP$ZPrGBbu7HD|$%ntta28{HQwFL@b13Cjl5&JNca;9;)E=mVg%zjIZM@S zw=k!U8PyT4MLAnnPgoL)II~F2Ahn)w0IB!n^cJJ*EnO<0w}3jd5*SiRQj^1|x|)S5 z)YVfdd#nX*HOa`MI#AxzUQ7lvE3GYP~uS?hBH`U4M8O|%C z7VihG{p#BgprjRU&TZ$b zBPjUwsoO%%O1IEfJ;D&lrTTG&_o>+zRn?y3xlB4IzE-G;vsH>IAyrgJOcxApP)?wE z4!P|N6BNJdqb4)pS1+Q|$8Z{IPP+6lhuIxzgz6hygH~!LsUF@$h;_)U!A z5wBb^GNih1QpT9>9%!Rv)Di`yIueX34d(^4JDw<%eVTBk3k>N`HbkZBjE9CsPPH;|v35kQ>I#DBpGr2kaUJ3@7)-jV&PHw= zztgLa-{GsD)PvCo_6gzY<+g`DTVxzksn`sQPe3hk>eUkF*7SPv|Jc1tz32_3^tFGd11SPh5iY2zxu<42o^xDL<=F>1Ka$Hn&V9XBR zPbkWVR3`A*j7BGhl8K<=?IY+qIbkih-lvHe{>Z8pSt3S5o@zDG6SM3x8Ho<&(xr)O&r>aS+OH~_m#u$9X7Rs#e3Tw_ng*CFhy^uT=98#|& zl1lI@h?Kx9H=-8#=_CFhct_YTxjb7pGbf4SH>t>c*_5*4QEDl>niE1ro<) zplJ6^N$LC$-k54yeev#Vb&R7WxA5x9%G8vt9t027xvdqA=|apUNusy|KIDg9vSPiW zhO`wDOe`swnzUvhF0}N8gZe^ALXn}OAdGfh*(s7ZD2 z11}#vFeD4oxJ0)}SK*b%RE_T_F#>vYMnF7y>WnNT#X_PB*;fKmTuDW~2nRYh08>KTXiBGQF84NO@yI)aEOGMLUTQSZf8Ez5;p!6@-| zm)s@o<)U9?974*al92LnNSIN_T#}2P7QVw!eG#8(N-iIghm$KT{SNc z;z@`VOHZR$0DZ6aR}sW#G%m_)$x7Hj8L zx($p}IoDkVHV*kUS{6*b#FDs6u9vT0x+aK^wvaCElox&qNWLT>`Bi-dU8xD*Zq-n| zzpPFpzM~`kI_FmvSqs~1pvFh}yLxM+OgU2?*H7IRC4MQxd*rLR0El24mAxOMq_n)TIe};%TbfHIuxocJcKKpVcs|mWn|}w?{WQ z`jlLHI2%>eOkX9|uCW_>b2whuWHJeiswU#LnseI4Ud*(+bb5=rGQNpaSM=n)R8y=U z5rB)*6=eBUm;Taa@s0_r`FzzR_Ta&WP%<)#)B}R$Z7(fiQ~pNHii4nv<~LV#D4R~D zJ+a}e8eZm0gz_!wUw!_BB;)@a+8=Uu@z~SlD-xRaR{8=e4$$l4(Jwx$CS2?T} z<`MC=28*ST>UwwSqOodEoN^Y$sVcS*ddnJdtEyB{sW{Ss3b(RVZ?V1cDH)^Bcdt+X zO!-phwR4r1S#bjUD<(_|8=pHeibu~irppku@)Jp>`b4c?kp$_QU8)E{?{w`#z`RUu z)OOU^?Lx&((7|kinh#?0XhIe-_?F~ab!dsfFLse11Y%Rx_SSJlC>|h-P z<>Oc&X+gB$4jLRCMHwZF$BMhoFF_*?j#kxn#UTr+)LZ8Y5J99}Rhz)9q`;N8>W!s% zh5i~*H>&dZ2a+ebANH4)~dzs{i!3^;m8 z%TFaOPRc6OnX0XfheGbNk4TOx<=5&>`SkUs4CLX7kO+#a+A5fYc2*+LiGZEdX56LO zj3@q93$>&zRGRv%rbwBZB7`FsMcz+Gk}F)z*G2D1QWdiRD%?(6&($PLuSlu~CGg;7t@L);LixeE2p?ii zQ#BHJBh^>{S{;=LR|EUOHfJ?)8fN(mFYaJ8joG!xIERRcxk@&My=YSE&5T>9vq*{Q|xR19I>H=I;v zbhNi)+25gNO$sWCl5Z5%!RW5#+kK0-w$_SYl;IOqlxO5rlB)EA$gcKv(b4wdA7sky zg-z8@ji90vv70&({m6C%JfWg+bw*!Ol!)Iw!4@x1JclCLY-GtN6-%X4IL(TUOD0ND z4bdzsYELg!dwPl56F|L%%Ra?Uff|fA&FC&t-@u3aI%VW5+}@$q}Q`#)I}`~ zBPB@`wR*($(p4>N9f{pKwhy#dsxfO^k%8+{M4hDy`}nvY3Tf(*($Xio4OIDsn53d; zE*Bq6;qB%?;=2|wjdemDp3>K=wGx=O0@bbIy@MGHC7cqpXajL}m`911!`}g*&xf`$4g8x>lP` zrRRAXjPSFwv5{5Xa>Az8xL~C60va_6Mulqtc%r)B%n|Xc0+h>aMwgAS-5|MxYDKVt zDB5V&m_Sw>i^G7rDpfL5MK_rfp->-h+zefeu~ARYbp~Za$uY`P#2?>;Lu)J)eI?)D z(3It?GR@{bGoM_qSdwRn&XhhbbXDgA`@o3kC&Kpm_d{j|P_%KD>K3LPm3i^*Z2UNq zb@RpbBK9OAoJLS8Co`w&=m`}4Vqqi7JS;HZ^UhW+aJnT9x5#kCh+210cS-ry=4PYL8kXNJny5g^A+8xzB#e^nVD zQ%^FC&bzq^UaK}mh&zH7s5^oh*^rZ(?{jJX*qkZc_vfuGJ4ulsAmQI?+<}sv_giB% zCVe8CDLWwi{S=u?{|!}O;Aty~{6P50oLkHv*3?^k%a;?=y8QUP=T7vT=w2oGg#qPn zo`$EDFd+Xo_l@Rj8ZtV=-C~ z&AKb{19Lqs_qXKc?ApIe&a<^^2FMRi?Y7%wFg^U>y$d-vpZg@oW~Pzu-%U62{SVB| zFE>09Z|&_xQ?oj4 zFS2{Sc!RvX=s63%wtNzwzE`t1?I*K74*&Y@lCJ4m+$lnIWvE3((ps+S9^k&?+yqVGyjeqi{B6KYcKuT^GPSfLT`7c zeS>|^+mjdK&x^^|_c!a;Mv`b^$iY$W4|kNFm#?_{zoW+~;q9dt)~c45-;VNYqwCQ4 zIL~g7x7KH6Z}Z~>7ksw#Y<9_HEA$)o+W7kuV)LONWv_j3`b6)8xjf!* z{Q+X&KaNSV^qZYo_P;OO9NJ#rVL00qubh&7sWBlZsR#>xH<3S`UG+)6Hl?}TTe&*h z#iu&>=?g!#m^?pI+_{AhE35kNpFbc9(jcIy0AK(lz(jmaGjt6|!XF9%fMNmwC;4T&hF05n$k{%9mv}!YNyLI zrVfT)rq>$9R4|721E4`L_HvHwbb)AE%$SNiWOr{*t)zJ1#0JQT9*02Z-+Yo=)vB$% z1a8vEpg(_U#TMFMu;qF2eZ2{R@btU|nXw8_qCl-ggqp}0pOvw0YUhll-Q4g01Sh`v zO0Brxn{yen*E{%kgUaLJ{1Ec#4n1N>klebK(?y0=-W=Fn-UMHO!SagM>ISlL4ArOZ zvwCiy{05Lo?@J2!(5LZ$r1S=r65NR}A9@iESS0{E<;}hpBoX;tgkVQ~y9g9r7~0C-ggL>^|Zkm`E<59p~Jkdny``c|ls~OV%S=5-K?&l3miFd&4gY z?4>6BqKRRo*hi^Z1eD$l4`Ynu&*k%WWY|!N$-xGMrtON*IWVTvbU9DHdQwE5kv+Q} z{5jKZUr~*$Sm%e`TC6ec$frepxz5l+XvDVbj`0H}8QQ|KjyIn&F42-g*;L22?M@9B zqs%9)GKM|2{EJA8#&3rG+a37h8$q)5RslheqD;sMnd?vwmVVA%+i-`*MOdePxZ6=% zi`}mFR~350R%RK=UgzloKsCkGBB|IsdzfVNkVT4CdGeoE+(*3Z;rU2Il-1-Riu=Ey zsXCw|sHs8t_=5U9{_zD7AAVoMplFX+UW&m+X@oB&wYr~Z{eevOEqJ#~B}l6pk@G9_ z6wnQDP`&6E1IJpLgICV$qJmwY*gNB!eR^ zF=*Sj2aU7f#S($%zOl9$>gnh&sd7SK{}(F(CUyyZaRw#Lys0No&*;+24vo5g(Q5;?>T?sm}LV@QA@*qt- zeHj_?P)cJ+@k}e4vL`+!P>j+W(-K5%*;auyYOdQe_UxKCu%MTcEFC@4A_GdBp>l+UQ4+-h4*sD<<>3HL8MwbT`eE*y*o&Qd1 z>d2xW`g>uG;WAVq1jex?4=JbbHnX^lQDd8K5_L}RZ8i;rZ@BfBZJXYP%Bec30-|H4 zT)MHJ2jwzl2~~yJl*r(++Tr#dDO0+|{z!c=?_~9$m8`Dg`mn!UdDj|~=GYk#5ey&b z{jI+=D2N3*A{-Vagljc?Fg|<&uveBD#zQB0DzTpcFTl|);(%Ua9QIZ|d(+=l0L;#m zciS;cNaUf}w;P+T!(=%dN5@#70eJ!jjMnJoqezOx_K?rR&Q$HjIF5`I0se0wJ2Ch} z@W0&NND)K_--@&R=jb<1L0*fqf;Q>FM8NN*Ik6-3pvz$QQnPuuK9yuny5E4YiMcux zS;!Piiz;az5432#mfQZG(|b^|)dCG5uyl#g#G9f`fp#OCezmC{`;eZY+e%xfuS!MX z0vNUmCS)e4D4jCS!BwdGzf%IicPCcTLZRU7Z8+DIbtOrd|j(+R=z}Qw>d{ z4$gNpB#jiqw5ZhQ@*P31WCmSVXI! zmfN`(gGS(V*FkSfI>T)h>Oo4r->b43$=D~k`g?8}Pe4)-L)PH%7b-7t>*bWmB%vqd@0r_zVMflyJgy6}Frv zu!TLQ4e&20fV8zVwk%6bscTdwhb+%Eg#z~`|BHLp;9gwNzTW+|gl!e5 zyP*M3W1cyNO(jgsDhG1*(XXgwCiIfmf0s!vJQ_YLV4I6j3XwBBn59~m`L8qhu)7bm&B84qfv7UK9LFa=Hv0m z&X4^*kMgK_sFT)+F0}5>y_ANH(~LIN0Rb1Y18a&)%m>nrJ0*v}6DwY6MrKoz9lP+C z-+$Y6MR*(G7gqThVZ%#MVGD1O)7I35xH-LElV1WwLd8N8OBGWOA#zavefQezkUKmQfR;VC)rgn$455ikG%-TyO;GqU*y zdm9MAKZe0JJy}VFaE($c5nm z>qg?r{C?A&2oDvdu(_;!SJc_PW!L-V`U001bw?o^Fbp=%Nz&v`N@+i3arcP#h^Axo z6=3{+Xd#lSp3BXrae*i2FjRMauumOv*OZ5_4~Ejp>{J0i=r-7TfAO^KAIo`*23`<& z1SU6T^e+eOC|qCD$XLA$rfd{~YB&x*gEe=S=f1n|Hi&-OOYBy_Gn2av_syO)WkL1} zCcT8~&Px@w6?_hBb96lEXO=~tg+0&M+KbT%_THm}DdRMi+ByQ zm|DJ(3{84vU3V7Y25eB~*|R{AAL{+q3AfQLCD!MY>#fu4kR z6!t}>4t*uMmD_2Uv=56Jee0m74%U><{1g-BX0K(~VEXJ>wQ{Lc%tB^`bJ~7n56_8? zqD*3BlDBlWTdt(Wh%?}y3jKqsi6%ifazI6Oi>%Z@ zQ4pvPz5}T@p8(=J7*rtv$0@~l3qndUT8iTFrbm2~aRV(PVLIY}803WQ7Y(=3y6!nf+yg8}h{S=e_<7>5 zoN*nBHWNZSvtJtEFS?*qaCyr4a?kF>md=J$Cd>#brFsg(D1Ewbpi%R{1x;BJ^ZpTF z=9Be{&Ac({h=UBOUm8vu!Ixl8gkf2Y9k>jiU=%X$!dVW-r!2r)^R^almPr^}$1~Io z#K>6dTRLoST%(#^DuK?0u;cwIZa$xB?zfqS(;)=War)8cw~irueCt`T&jcZ6OgpxA z0^MQQ_q2$_-k{a%_LF|4YYBE_LH=1gR$4{jKv$lj1_LJ>8L)~hk|XHJ`h_5u%-k}l zyHD|z&J9L{CSh-Qlx^dQm3&dm2$3jfA;@0dIu)(THC*d^VqtB_maBLuZbytyBgQ8_ z9(2_TYGsC;fz$y7+=`+Y^3-b_zhg6EXFw$^d$Zh4N$)x(?r=J0|EXrn-j-Q?(y(QU zmxnv!tE0nmy9gCQo{Hq}+rj67D%B~re?6M2twp>kSEp^T?=|n~1ub7)_Xcu{a1ww} zG?okosR%!+fd7zmL@L>(wS4{{?756vKG-?Gu>bc7{cr99eE#WW|8f35HnM+(|2Mr% z%);8liT=L|g+n^zTRk8EU=kPr5dEKS<3H6r5er8XBWF8D4@p~7J4YJ>XA3*q|1K-4 z?FbYdpmy{b@)7g93 zA6j6B7!5Fj#91U03?=j_8vUsb}k7i&@s$j!l zFyMfsBY}N&poWHVhaWQn`?aKUz@{p&NoH*@7={AI?;NG=FBZaxs{~2omS0iT98lqV zfzR8$H($`F+G0GTxtOlhyeK1gdPCbMCY`kx59F27QH25yJwX3;1Vt|Xo{Yc)07z~C z0MGxo5frwwHMKBvaWs*!Go$k`u(7_vwNT!Wcz!rkbM|P3hO`}L3nnq;RmKVZ7aYzi zGu;|Vj8xi23q_|erLXAq?nAS+YVclA$W?{eLFVP+MYp%J_7>deGn5B$tK^Cu(%>~{ z4ns6`qpSo;Y8a{?VLD@j2f3KOg;c8O>Kk&dY=nDpUqu*MB}Y#5&us#kFQI#`)op6% zWm)h&dFq^_l(nHnq#U^XA{o|6V6#@VoB0NLqw=4+4q;E|W=gZ!%V)fGHrfMuqBXua z{-WrdFUCPi!NuVy)O9glQ8!cnQ`{A6d$_KZfs|-bS-#bp7&F1@OW8~L}C9xV3vB(+e&d#wLURP8VF(Z{Mf5JB#3G%)_4$fON)`nI%?Exy{+Z>ReR@Ol%9QDLZ6FskU!** zNB3t#aZo>JmU-shxn&|n!T5+5g7IU~r9#l%t)=X~g>#2km;Am%#;3pL(+4i0tp8Zu z&!hUYZkurLbL~a9JfWuDPP!k?--Xys;P(+29jZDc5pt-ni$m*xp3)x>|4ow6Gq>Ki z7D|}*CdoGufSJI--lou~2aMJI1Jh4c&?KKkmae_ALO-VwX~eF+)W`aQe$ z1y7H>9`sSx+%D5PkZzoe-#=-d^xu?g^ooSvWdSW-C5>_wSD_ zD<m_i9j+?jm&G5;3L^1fQPq$h)l2+Ri1W`mcJB2|HAjke$* zn{TA_j~0wUKb98o5uW}IIBk8xJ?uquMD{)7?!b2j`ix8l4}#9Cx_&5Rr{+#D^sk2-avw0#(L}@2-t-frXQpRw{*0FaZG)yOKae zUC6}9#?yOjhStQ%=x=>JFw`Om@)6Nw@AXp$x$xfSVG)WM4=8~CN(Vn1da&@@!;L~4 zSH~3s_p86jOr72NZ|J)N(OFegmQp>O-@RCl>uijz*Pt9TC}!kxus^)WsE`7@JLZdWqYP^4_IUsXcx_IX%^xaD*chPa@= zb1|Rdi)GFoeXP~v0-m^5V}|$`E|xVJHkDQ%pR>VmbpHIPi%h#ul%^PJ%ur zE*Vf`o$(-Hg)5L5At?#M3gJ-VX7h*zrCa0ZyiF3WzL-augmm~Iw7g)5^QjwU@_c@nqa=pum8q{*vs=KPKr#)+Ap&P8Zpw8BQ8 zpqzXQ85AB5Jw$M&HxArG-iCN(a-b)`C<9Tauik6Wsx_}!UuP_Zs(>p1c{#_j?$Z(O zp88cN$(9uA?QR$$sBFoc6LBQgg1eAlhCzAvPuJejS9U<@9{1g&%rM3X=nc`gp5e*kJ8&=RT#j&M}P@V-W=~g10EUhp* z4m8j$(sJ}FoLdqa;go}b_OZy9F*OdH3GBT9d1vSJ7wpDZbAdHTpPe#@1U!cKh)COjaBETqB!#e3A>0|BJtpT*7BH?U-=o&cB% zxecaB1u20lLxup2nv0AX<@`dfabChjHo{!#i297>B_sN!8nKvZ9+C*pWd8(kxS{f&en30q{FK$l``;79q3Z$5l; z=M(++0Y^0hENmQ#MfpieRqflp!4g32?PuZ}AJkxo%5pTi?%Ou0uvyXQXHXp(YHfqxJRF}t zK~b3R^|oed-Rot~r&2JZmTM<+QA?$MvuVAfnPNIT3E5_d1mm=3_^SIr^Vf4Qj@yx^ zw=33wEi>vU0O*NIwC-9cr~CR<-7xUU4b?6t^yiZ1ap1WF(TW(7^F{~fCHDPi4fEhl zu(kX5l&QVV3o{6k6}$m(6&R>;9So=WES&o^-C__H|EhfCXjt5LW|V&J>Wot_q;)lc z0@TDn0URaxaLZ`FNx!T;D4^~Y(f0;_Yt#ATk4*xtC!WER5pw0aXoYKh zg-($rM)|tv`_I2>WNpQ3U~HL^#~!YLunHlUFvI=e%|4dsuK+bDJPz?_eG)bquX1Q| zM#R|uTG%B6H%YEsp3u3_Jv1kS&P?^%dP{|DA4Y#`GgX=zv{$von4TBgK@T{JwtYH+C>LGHC zqK@1bAXP@sW680`(R7ZZ=T#O0V5NS+0@#TNCV)2lu4sYjff8mHl!ACqOobZ?1m^Gr zkB0xa>tT5!VOJICT99j*6t7;>{R{VC-jrj(1R~#*G>BYG8I7Qke0^I zmMfB&5G=$j8pV~JivigS+Q6e?tglzr{I^S-YbskLGy`TX zRnaqQQHf1Sgw24_0eG#XDUff1!tfXHuh)V-jrm~H&OL))3mh~`mj)UtI3=Q*GG7c< zuAK5>J&Gw7&D%fp#=lxv>=XTq+Ytf_Dv50oyb+D#q0$59KkK8n`JC)-UT1S}+*(xL zY6AGTd$)YQKhrx=)+Re@Uv6JkK3c0n2Gq7>*nVBVY-O9-MP42SF<|07g_$w%d%N)R zboO*}`E2)m1jVlobN80rJJo$}-f8aG7M}FpY?7}AH%HrGS`MA!zC!`-W@nqT^}25S z8(nW2zbCo6ZZ54?axP{i$u>KMhLX|aey;7P?=dH>e%R>g@5_4Ugrj&IYj1SK@Jg{g zOX?M_cb=BS@Z8c*Ufc0fovLyndLQ?^B}Mi$eDJ)t=Y6h+boV6rk_L$k*_as-xyQws z?&a^(0<}aEyn-w(vG9Nnc8NY7|{FO;S|&76h{3yq42rGInw3PbIq=Aw>tAcWxJI! zAv|ZrtF8*`e8f({AXYw?l*W4+rq@P~new?+!nwV7RsN%oaUD%ZmQ;VxZp|TQcWOd7 zwwRK#z1Z2X~R9>)W6&`xgz4jI`nHAl8O4)Fd>a&|z8-jm1VX-Yzfn8Q?oA=$e z-FEAsum^qw(}ng67w(=Kor3w2bA5nEJ-yu>d!!24kitJ~tsrr!O1sqCq~Q+LvGOqKMS2 z)TW?=F7lN<>8}&IpRtn=wqzurE#yzp(80Vpk!d6O4K9Ntowic zR<(l(ad+P1AMiHdllb`L`1mCA4zP(>Rvu^S-mLt`InYpDO)h3!D8;Ci?A3*wK3E-g zF1=>cC)`NYD{9x+33yjZnzc{xg4kUiU4?fKJsa-lyPk^iKYLJ!?l6x8w9dOm2spHj zB_gDb2ZbGh+#7gcz>}l-rRWNf;Jd6kr7dJv2j3lFV09L}HONoUuX-ut0ut;dy=?zN z`30S9_nZ2$nqQ7{eH`U&AC;eC1bb4-D;(kHdRk zomRK8TbDrm*8Yj)%y#2%6!i+e8!-NlFAYWg(?K^<;P)*>&|g*okVjfBQN(gT_J; zyD>oALT*-NTh4X71M1$hY9kU-n%R}VC=6KENl3`@r%(d!8fzqi_*95XGX*t8l7$hZ z89eXsak~uNW^ne|dC)Rn=Q~CaLpFxQDvlH14?RR?>Q7~%T!_TL>?l4cX38+Ea*i)% zDQS<<4m?B@k7CBM^JpuyfOgZ~Gz9KH+%Isu0E@*cTH;yp2Ohir~(IjX*GBQ;oizZMm zP&>IpKF<(o9TqnYM7r$vUyz?maab z_lqm(ITRxzYe_IOm;pz1vA_yC2?3F)l)k1sivmfm5pquQF}{giTe*Yw3KJC&1%n!F zG;h}rADS%Q;;EE}W`}kaX%H~OUz*TDqu8)qgEdSPMRm$C&MPHcFU>A0Mj@1Af%H%! znp`x4_&f&CB`}6S$1-pBCO9TZTc=aT&9ny|Bn2GePj#>_JCddNd6mytOeg8-38az^ zM2 zMF}Tv0z*k7Cge}-_mtPOBJK*^(A=un^A`t!4qAv&r)_N4&)U&HqszBc6?lIZi28Nw z&`3y#Y5KE8`x?wAw0x2ahgR)2jW7D0~tLJR^qwtcWln75Owx+t?|sjpz>-bjNrcdZqSYgYK1*vCJgLC#apgcNCB> zR_YGA7m8|6zI?p6(-cu@DQw1ig zg+u9u<-V9tyoN^+-_g{WO5_VJ>TUvR|P(Y3kU^*YhhHmfS>|A`XQ!Bt*3 z=7mp&C702~Uhl^1{H|Nr8Pdn3%)SOl+Nz*gE}<5hbyCp-zngEL?32riD{EzPYf}uG zg$2>{Hs61Ia+sYa9k6_1#r);JrMNP(+<9TpRj}_Eriy?Z{Vc5v@p?MrDl-gWLT8yo zprQ(GCo!BLwXmaWid^n_7Xt$;?(!9J$DoP$(ud!{3h|RFU(P9l&lIVg9NS)l@d^#P zLXcuv=Wjf_x3H@0ipFEZrVjc-N){#vMI|5YjPLJsyJdlql6ZT)Xd>S2MaNgc)y*gO z!pH9DVC7{yAe~Oqw%A%PTQZoU_OizOA6FVZF@$Ar{u8Ia{xQ=3Kg6o3wSk$_e~MM! zC>{BKa8B&zgIc#$dXozU1tn2Oe}gt!0TLfZ7YY2Pg$h+zaI3e~)}i%;=Oi5j=1UDo zoQ2~zF`NAyEgwj%faotsx<+oMuq)Y{S%%5z?|{1ZzTWEWuMOWeH#_)2c!)|bkl0By z2bV3kTwACrie0T(^1MXcQ(bILFFc2)LqpNW7E z4?Pg%>o|rIknUmrPa4?tpD`fS2ZK}$5ddJb0|4az*Z)XHb~g6^%mj{l#wPYAw#IZ8 zw$3Jwwg%SCI$BN}Z0NqTwYM#?ozR)Kt&NR#5m(N<%_u953qA(|BqW4nK;Qt{@?PIr zpt4L+M2IBrUs_CeJ`fndC*W~!-~0F1U$rY3Fm&yvDXADvig!QS+CDw6k8gMT@8`#N zc6L3zuO@0d8`|D4ov0UoxSxlRta>(5sJ;;5z*Fga>}`S*F!;N__NKAj&WMQ`e|+A* z&V47I8Yx~klui#|L>IbL?C2VbD?FZ6#x8B0%BA4*%F7xdbRA6Hm-BC$-zQ+aXqf$8 zo*_Qnh+gR9I=p?--wKqNRli6JumgV+{;6-@4)|9L)~Co90KJdn#b{gfLbqhIaK_TSO@p6^Wk? zW`$cxPWU5;v!Yos4x51#21gX!lvwfpRw}4a7^QyVx?s;74nqjL@_guc_tI;2F6y@yg(gp3G8xsZdKA5s?|S9WOej4!A&9eC??ZlE$pjos z8K*V98_R)sHKLD=5Jwg0Xq50WlZJ;A?ww&Z^MEXqd^l(WmM?%58QCC;H2kYlbQTK| zILriHx`eVYrcG%4!~n4@aDPpVpZz z6s9x;eC*=p;chXUG_!|{7C?lR4BR43M~p$$Np&=1b7J6K5j!Q615+&xAZ;3IrJH7X zaR(>tSULj{psvBUu{!1>o;GYDC43Ye_#S2j4nn|^@#sz*;;kw_s1gJoRcRpDVKVT3 zN_ew4eLIF&LaT|4nOGo{i5u?TQ=y2_$H(-2jKEt-*v3q3U(cXE;kx1f)2jNMAI8~pr{ zDo!xn?LbkOfieX=eC%t522b3NKQBWk5RV4N9txm2CyQb7pq>v8YDe=Ev+fCnD$@|5 z(7R;?V)XXIB@;*J0DmGrxQDMp9S^C%R&>YO5&HB}p*z{svB*4Xr zxN>xrYE(ZCG!o$#z-)HcL!<;_e{*x$#-LE*=4@19NDzoTPTUzjuq6lj*XePhRj}mY zP&BAx!39HxbRXTG`3O{3X^V%1A9 zr?+D_ea!Gi+&uD~8tfEt8{Z8BrP?4NV3uP7>C%`G6DgWtlT?brUP2*sT+pb2YM7Xz zbhGGGk4ScPO{jEl4^vHj9Q^(umGE~$ZHT5n0{PIXDu(DZLq`}CpvuUW=g^6X{SCLg zv~N{9&XVq!@p*rrIbOJ71C}=QnqZiPhuJ_}I{W%yf3Nd&0eG2mNZmM2@}WC_0q@CJ zG#@i%g$tz}R<;p22-xL7O<(+GGUfejxhBYn19j~j!G^p5$s`Sfng9%FB@67)HLmFO zuxEJYK?4Qkpvsobfx`3=flY#I(t^WqFRbZt6*Ujw;wYKv*8+plm7`D$))n+ZnwsSG z%?^AEEx~S$^v_%O9gKVDt(&X|HO>oSpshY^J!2r+nl?ocx*AUv;XpidO&pYC@#|HtFx_N6B;TxnXcZz8NQ6e=!(6FI=WN1?=_X*JoC6D!bilsTsVK)o1Zwr?SAy3#{jDTbJq z+hoSQ^V9_x_{Tl;3Gqf^10$Maa=?CtX#Magob%kLnyeNi=AG$_wq4$tuuaj!Sh@(;~FPv8< zb_*E_mA&a{wc~~&l)XBx+>Qox@q?&CDrV0<_&Z-?;y|cfds!w``tYX*Wc6|;l6LbB zz4UGeb_wT$RB$pGtl1x1r-h-y0}swBI+GxfOptG!v^F>Qq( z6-ZBz%YZQ%96hW966d3$xl|z!wPJ#5h~-rPvWA6VrvdJ?Ur||nj6@?0F2pA=qzJed z%EEwcV0)Gorc=@*?BJ!+DKcvEma(+1s`m$DCC3ifzVNqZRNM;=$n_E8@P~4SyP?%m;>b;y(I=h8 zbop&b_M;8cQ{l(fy{~nj20rj)PY^!gK;xX$a@P%mkiSqS=y#NEaawYs&{A`PBo5Q6 z97owO6vam|Re6;uliA4M`DD$h@Kdl>XoSt@t4dg=O<)2g(41xkCDbY+CIKt7#A2st zazsiC>60ZC;&Vr(`vPD~?m{_K451^$rQ%)AUo;qrO3lnnAVy7+`UtF3{$wiP;5ERa zoNFa$G7SKGswU0izh&+W)!&-XKvf^cy7eJzd~EST&k(lAm?C9bpf|{5(Zru=Qe!H@ zI)H4DeVOUtGegcm@uJ5M79g5hcY|^LkLD81o^2i}%nrFMz8K+=0xPxv{PYoX6iO-s zU=IxY{VCM+K!^h1(H3w@&n2%E!oD@ksXs4xl;>uzoa@!ck`vljE(U`Nk>af&*pOk! zyNiUf=Xi#VvFxoYlEFOqg6Tn0{{Y2iOde@s2k}vPlV|88TejH{u(Lc7+^hvp^xmrk ze@O9S;w~r6PqvAC(r!yWGH2m+e;YT0e##&#OLB>+yDb(^& zQX2P_(XTaCya@Zl_${$(=6~rgOG@BSmyf3Ns(r$2 zg^EzAZxZP^^^`yA39G9IOcJ{O zsaydu4J{34Q!L=-_Jg+$rE|=~LDu$TVq1u%iQ}yMv6F)`6uM9FxM4z{acJG6nV$Jg zb$IcM`b!3qd*nn8i>4x{@fQetS}hcj%4OVIt6q@-LO@>qk3`9iZKQ%lIJRnW6xa_9 z+-0`U;yh{fqUDW~N~1_C4GP5@m#bGxp!Ldi*vF^7W@aq-o6}sNgD`5x$Wu) z2XP96*Xd*7uNdoH_)Yv9bJ_iKUFOXWoju6i+*0DV&3s~uQ@pm2VoH3XmRtCdV|;b@ zPHxus-Cn^DowKxjZh|#W8uCLbt<{7tQ>#_F|3vlwPzdo$A}|iRp_a z&bb~MDoBS|ep{TfUdm!xEqrN68;w;g$TuT_p=9H9(wOFq3o>>ko0`4#nEiI8-k_oU zjjF#1SQ;ykM4$VAp2Gb;J)4T9lK~5}kwPr`HwYm*jFTf0R%Xc*o9*#xacp2t>gMxZ z2^^!iq@#9GChRlxRIh%W5Id4G(~TE&-}(D?Xij!=?Z45m4p;XtkL2#wU|wK_sUDD` z>^V!$A#Am1@21t9XN)k86YjQ!^9I}yo{dvC?2N{gF#s`$^OVJvm1k-FYmKGmTl(

0X~?V)po(zGO8mT8t;dC1tOwn`9cR_}62z?E~HtxqDtO zB|6Tz65WAv2Ei`mQF})cgzU(A5`cHdV^2n<3EDQ^Ra7Io)K~QI`s#Kg^aW4iHHeNM z9zkVQb~L|Ty)C5XdZEoxTxR*RMUckC?L?)e-FQ>A>w~_I9MSKwx%{o7vDcERa-7F6 zJUy7exWIUaT}e*IDuZy z{aCUR^PeCEar*QE1qH|;k>z`0TOHW{21`{MkLZ0D&!WGl$+=+`q(9FhS@-MhMG}v z?D+mY5UdUc0jeZgNqksm{yLst%+VTQoNvcZ z`Is%@S(s)#@5GD zGJlw{*(r)@n7c<=GsN*SUGbQ6a2l8;vZcH zp9r(wsdgpgf{gGYO4A*!*MxmETCkoh=fo}N)>mE10%eOS% zPs=8fCO4m}Ukuy3UQoAS4}~V#^m_pq+B^?;Hu1g^%+9iEU6*37)(!*^J4rV>1$uB6-har)?eTlL30x$(4Uy4aLrf#Pvw{Zo zm5axy5?@K&hHmXKySoMQ2_B5yiNRodd&Tj0bklmL-J$O2G8JNZ_O60RZqP0D$!W zzPI@g<3KmBmD3?x%+870t1JJu3)lFOlG+>Fo%?giGV@)GS>wlE#c#`qt?7Casw88# zn_7PVq<2z2K+6eL@+u?HEg>>}U|+7CEq~9~#n!YKi_l3oh23%ka_?r>$JOzIou2LW zw$JOmo!z(hL#ptDrQbtoFT11L1EU`@YHWJLrNYBI1to=Nv74OP6GA*T?( z`I8Fj7w7b4*iFx>Y^5w!5Zq4{vk&(KFa= zzP@9X;>gXlze_NKcECE^$f)*k=-2Ooo}UCGrx`R+sA zfoTpXL+Nm9M*aD|nZ)l28(ycN{jj+TGk^YOt9}r$sshD0mTwX~D@B7)NXe!vL<*;e9tai}Xnw8=%&Qsfa0 z*jUDqKUZ+;^d@a={u@FO(bo{~L*~jsreI|#QT%Fzcz1**+fyL|epwsmk-Su(ixh)O zp_x5)$OSEqdj%BN5fKX+JP0uv1xs9Myz(zk(`4&4(;Pt|OJ`J{7eJ~R7pP+T!v?2n zg{T&a88f4xwenYSL|)xtoqUT22JS#frQG8J!*A0faaeS(Y1I$D9$v(T(QMg&`Ru?z zBH)2UViwD6$aP*E+C?6b_~k1s;O zdV}hmgq(8YF}Pr&^H}{RMym`%3Ry)6pk4HM5!tZm>q_2MmZ&&6H3h+os(?!mVkh_= zK+9tCIYoKShX*8hFUq0@vUQ9Vti&8gf=RKcEBXd22SXh%1?>c`A@UpWjfqM}FKhJI zqY(&Q1GV77yiRm00nlk}u22hDqyIr$5n-`b&mNWh6TLd`U*Of}Z(@$V*!LF;c?rdy z=u2p+x+=INo?jrboLwiE{Z7ZAzu)oqP<(hcMQ9G3ERLJnp{%e@5)_A2CkSh{DGM$k zv(*IyA_Z`AzGq$_?7KW_)Wmv6&(yt&voOJGk*lKqMSg5bD$dzg3tHvjtQV`r zBBuJdeLT=H@O1^oWZ>86aP^Vdsu_|&tuc5Dd^N)K*cxPbp_f13`pdi(F91=1GTP{h za|M}~*jHhWqmKi+W$+EEwNl@SR4w0?XX@J((JY|9H?Nap5oZ&mSRF3&P6`a2nuMOF z?9C1lIxVpENk0^V;GMMY4NkM7k8h=4*d{9g>dSXZ2T zazHaQs7+ZRivWE>_jfGeT-Gz$i2hDM@N-ZWN6eRiYR}sS0-Y-Tm}1_Ay&kg6u2@UJ zGuGn$2P3sA?D3 zm5l}5=N%SlQ!dmH&MweHxYkd-1{87>C6lM9 zR^yegRQOMY(3ZBfv+i(!8!fJT;))Ai$a>)F9Cp6te4zt2NUi+8oHOsA>AV|&qG$5A?zPcFT@Ynb!a26FTrzWv<&9pD6qVK?QjN)oNBnRoDw1-JutEUIf1m z7{PgXa->+}?0mh9h9q&WyH+IK?t22P>cldZU}VNStheD8KR<`HdMrQSw=^n|JM>-r zICzCqEP5E7u|h0APX0c(I+MNf$fw4jAnbU$e?J-y}!sePSD=DQxT9vg!RL*xAf(o5U%m z!rEK+VgTUxO8~#uE2nyy^RYmyj-=`FmCN2i;Lxa|7^5yB^dEB&yhbH}y{PTE=5CFk z+f?uL@YS1Xe@o{K|ES_~$^?F4y64w6%q#PcMqfT5zax$yvzWGjzBoftApf>;Ys7d; zJ#&ubM>OU$UYD~PCX=NM-M6K{!fOIcbpBTP@t892<)_BHFlX}}`FbHEf6|6Ebqk#S zL*!V^8!iF#JEcfz^V|1oZbXz>Z%^WDQ0hNWkM!lviYCjtxv4~7LuQ}tE-w^I5i#UV zG1AzY<=+ywORa#st~%OpXa0%`ldEjF3h?RzBee@w(8#I9DOsLG)0Th2kD|+lV21^7 zElX$d>1PD&-sVW+ti`FEKvX2{z_0|=?O@WU)fBe6$B#-BO#^@1OBruj*s>UNWgsVtKls_FnFH2`X`gV& zS20O(kCp~)Ew=MKgRu}uE18|tYl$Xt0ol`ljJ_LzhwOShn@x$isi}?$=G4o=`VyH& zYv&&m)SpY^bz@D1epF9wY{jgewPwq2ek{R&KZ0mQ|MU*&c4|2q{EZ@ursIBwK;W@G z`E`-N_iZq;<>VChoBHLhN<&A`7B1mV?G*%s;H!!zcP&H0R8cx=*aL+|5y*j4T`fex8Q#FY!em zkvxsJQO}4Ns6U!Yd+_W#^3cZIH*6!sRZ%X3sOdblhM&0m10l>yF3hs`2jcrd+Ly(5 zuPEE;ig=%VrNqVmXqkPR@holkBH=!9Z7$*`l9BY?wDl=Bp_O?7Meb3roOLvrXK#h5 z2+pQ%?cQ`&G(mRpn3m4?cdgiJzWS($$G_h!#> z=^Si(RH(@TwZ5zSuK5Kg?K}qI2Knb14SbmJ>Rowvvaws&2=)`>#&l##hB6YN=@`_8 zBy+~_#h?PC4$sDBieLCSd0x`aiN~e=PIoG(_C>6}!1X~qKS8}+6}H@9C+W~jz^)J4wR(T@L9Q*t-#dk^gE(vK2r%j5yp&r?961$rLlbrP}pW_BZ15!O>BZzvbM zSY=2xW_64W>%-n0Zfi+rJawP3q-uC9y_vq+(K$tdPh6!=#rAE_|EWv_l&8tvDy3Ln zo7LfjBa1Q7(=ZnMveE5BYP0cb(je`lZOd&o_PLtM57!jLjTC6IHKCjsIs9QOxuvYQ zN7vl9@?zPtU!txYgxAF17_!?~(=jaYc$Ke_pD`w}=BYT?JD;pdv(^4h?PVF&`ezgO z*?qFKG}QtJ%nDLgB>?HIJi@TePRr&II!WaseR$%-bmHP*GEu9tn$G{YrW=V9Sj(it z=)$N&kAVD=O+>PzwG<8#1tdglG7kef1ZUOQ{Yc`eh<_e>wq{4|#0!LthxqxIQM^rM zGMWt@KWrf{8Ze?b417$F*tA=fX0<7L`s)WrM&*;5z?;dtw`5BTu%0QMx>cc(yYKDd z9Qu-Zy6N{exqYEky;7h1GaO3g!5Z~m`H9Q&CHIB8hur#C%HLEZ>aCQ)aiPbI$?HZ0 z@cs*0#=q5<-`xh4rqt+EzG!}u{y14U{1+ThM4v*PJ&Yum2}o12|HGEb9*Y}F_rUDr zZC|VAxniT?$Z&-sNa`;4<6Xydz6yG6vxV@^rUJW^8~^K}$JW#J(a%DC{sGV-_4fSZ z%l`zW2pA{dnMaO2f6bn0j6)FK%GbDHDy$D6h2Z~#3dt1z{=gX1V$ic0C#N>`)H5|m4)C?n6peHUP3-gW?*rW);H2=d~NB1 z258p3J7{0I?3m{IXMRcj>(I*OLy5Q~`WH@`eQ%;owpHPJVA=Flx0dZ!jdDBwX6NR; zk14sEZFe7w`ZKk!xka-Z?XU#;DN0tK{#|&C@-}{OWSYa`-7M?&&io`%%j)rzq#)nM{jNZ&czT<$OW`ZJODGK5zBi_)fi zmEm5vHgeEh_xf&o;|u}~abuxf*RT?6(`Z;A6Uv1(3rmRHcL5;m9#{K*KJatG3U~JyysbiW?#^>ZBiX!8~CoHQ11xE0pY|yUj015{#_#)dUri!$O1cqBp`M2CH-1lzzVv9ohCAXb*0uiQMznxnWhnX9CB7niV2 zk;zwde?t+{NpmOs;W*#-=!`z}=F16JMq>&)y6ohchBUtD8q=YF`MaKkGX30v>iLY| zK5MF)%I%PA^gPBAKP=%>*a{aZY|)g=HYJclpqEdR)tyTq4-tN2b9X_aK4Y*Hu4|oD zq=YTLn0=lM83aK(@T4nL@o|aUF8~Iz*0!YFOg=&lO}6s#NCwQCb#z-Z75? z`m7?Ezxo@7E&s4Kf*z`q|Vji@|LQ&DCT7tiKd0AJT* zDNTmxu@r@&LX`JYFda2zR(^k}>MOEK@Atw_bN=$mmpi@80wJ>u&PlE>HNkHQ>n3D z;oj!-fi0%2eBy@+2`KX2QFhF!lyu0`>D23jJChVvVUy)~8MccHTN1}m3p%E)?*J=9 z!tT$~TjUp{ZQMJ(lI7)7TGI5_uC}t<5yv+;}wvFD3Fe1TXnb^CFH*Wv9GaeY;_X}_2K2?6PdKfT$iv*HvGBz@H zqZqK_*v&GWmmenB-?AkF&MrGi#Jz_#j?K zuzLGvlLTr5$`>&;dz&szB3v*lfC6f_+-wVX+F3U9FR9ytKt`r;FSNdG_b5%^LpLlGu?G`bPfzk(M_7D_Pwp!(xjmmO*g8#)RquN z84;%BZcuT3ZQEDy9YB}x^Kpw7tC2iSmjALd`TCbvua!^@xfY~Xotmqmib)wH&i%e+ zj|hRF>fPN>d6ogu6A@|5ab&#}(ce#EpS+Bya7J5= zD#kcGgHlCZ%6&3bfXX{@1lxu&xK#wdnmQO7_(|^?`y^T9S>o{BPOY?Scl*D$<(ySg zZZnkFZAqVWA@4V=wCM*Ejlsp{EEzl zzk)6sVrlxv#v${K{S2fQY)n&V;-UoF;CbVdD?yT%-{FT zbYOt4)dmN@2TSUT1U1J=*I?F$gnTVtuGnqmzqHHF?qoft?qIccG7_a;TskRxGMnqL z7hA^nvax?#V#jDSMN|F5qMXC$b<8Tr(VQGj)A0-|{K7w1v2zBNp7LGKhZ%vi5bl$n!{tT}Q$GVc(2i8Fu=N*bCTddzm21Z)P52hqwr+}1Z?3Vs=4vL{(@L|>Zc zqV5Ylmyat=WeK##XT_tCx#?O`;`930mHALCp(^iF#7jo||U7JY>j9JK`CnSHjs z_g62g&>I0*b|)mH+e{jY`ku06ZLRpyr|^TGJi?vKtCG9*QJCX;PXj91)~_zQxgQ>0 z(;6{zIOOfW^jQcrvNm!fA0d$%Oa%Zgy6E^9xl@L@tKEqxuH^0gQB~2j-0RSn(OGdJ zdsSHF<=RZSqxBIX-FDKSIIvMdtzK^OMUl9#F(MOM0t-{5JDAzLE6L!)59>(+nBLmR zJ%)tU3%|sB0g(Al?kB)gKSYSErf(knH#|)sinmEVO<_Lt=8eWQQ363}IQ4AmXME=2 zvg{E>f}lUTpKZTQdba)XeT3_DfbW^NCi!hTE#uX-2by8^!;17E^7P4A?{)RDZ-Ee7 zv0v@^FaC+Yqomaf>S8Ucczp0|HP+QUOevzLO%b+ zTc$8Nm*n&#Ljdqp<9T}_W5ET#&DVY^ed*uI!~w2%i~=Vox5`7cI;p$8QXJu1r!_i6 z4FDd2qf=+b!D}1|gwx^ILLojF^@GyK(gV`QJ{D6Q<^j3BsyBz75gM90wA4dcA<`ma zR8e+}1Ue@+^GIJQ6^S%G+b7*+d7LttUK zoQ7fi0V@vH54{#!ubdKsMz%R_ z-;d5Z>w0Tv10n@?eD%f|cmK72A3512j?;Cvy6*hgdg4melmcrj*O5xkCmEHfe>TCY zvESYHEfbSC==d5?(nu4RsKuC+>78ZxUG?}{*>&|Ot_6H4Le3j~Y)$|1jF7{(E}PO{ z!*6pGF4%N8D)FeVxjsLF9NK=a+$s@PV#D@8sGdtgZ;kIRw)%D`>s|AVSOw&i?cv;` z7Oz1n{>$*CPNjjs(4iW&@nNgClgosbPaTF7wD=m<9KW$%g#h=qwg)AHE}G2U44kfi ze@ggQ_3YAE#roTBChwn-?SHzu90G|K(>z;mcBA4GvZhxzOU z{lR+ydQ7Eji#Jx7@uK+Zio4mBUrS{u1m0C|RuF`e;nLDPYOq+Z?r(=MM*i-7u%>dZ zTRZ1CkUwZL;jvZ&VN%IbzU`zFK(jgM?AE_CmJMqtv7>&__$P;ZND*))m9E#GHJ_w3 zYa-Gx?1KN!wt~W?>$g<=!2FvI!hglT_O{MMrcC!0zPu#9(BYFX$+G68{A*kN49%mU z6#shS*xU`2VQcBWEBB9M-NfiMJUseH(OEP>mx!yKEahM~;>ZjP7Qv%es-pg_IC{t0 zf8qavgtx%UP@y5Crt}bR-Wh1`2Y9N4s$QSbQOB(1W~);n)igmGlKZ@9y7E;CyN# zE<71DDfHLAWXvKoHlxgSeXAl@+Rxt#b|a}zXPH2MWS;W+z!^joeF)DvhBn$ z%T_?wM0Rs*?qI~BTZU%}-kTi>66L4a^tHG~3&Y>GZbvuj^2(M*S26HFsZf_;XB6&Bbx-`M>%0wAo1Qp;uk>PcqNNWdsKP%1et!TeC~Y44cA9iLmKJnQkN`Ium?Q zz4#vuDtOSAu`>^$6}*5zEDe4jB8KFxVq`o*)!&nS>1-a@IWhlYemcjk`iY3^0TIpB zUZZF}wc1Y2XKT{(Gg^x0k9BP*^TgQ-qlH5LbDlAC?qh>7Sv+`G52t!-|~*j70Ol0&RAxhu<+Avj1HZasB5m zn~S%aOj`PpFtGichNago%U?8FoJOFzQL(9tx+w7>kf^UK6#1X?37`ePu0KUU86YM& zE%#_rYx0#)p}Osd*Un1mLRsm5Fy7`Tjv_BZIr+z6bd1@I`pRyIzbqwt7r+8)Es-C@V`l$$*_TJ5rVTmhaH&VFDcZ-u*QqtaC zF4LL!AHZ)cHfQK0rlh6zeq6H_W!ZOk!1wJ@d-_u^dlE?n(lO60r27fC=!=LfLTbzvY_U*a1^gr@L@BYs%{x7XEJ9h`0 z|DisVk)lO-uRaugU-R+g@LNpFExyeY`S5R)tM)7O9xfIR1Fwp)tDJs&x)A7UjMHk4 zI;Y?4tHde!)F&8@2^^gDYo-p^WJ7q4YPrYP?`>+y`tJ}gPisqR5IqV5uQ^P@>$^+c z+G%$2$_n1l!^i|9aVHc6EJ&(V)(LW+2>lcKCg|}9M{*8Fq(^ZoXI^(9UB5>Cv11bAZ7@Y?(!!M7MONOBTP2C4)yVm#B{oruj zUrPVygXHbw<>cew`(H&dzE}Pi0ZAlJ&w(U9M8wHr`t=6#KT=Wur4iMvJLVb5Puhu~Ij1pwEJM(j&MVBOlB-07#RGlN@xK1F$A5Z?~YM8_4xA%j-W&9U0mhtrD z4lf^7N{R(!hVS3x6a^~3WOK+Y*Y57%oPE6{M}zCzpWRm}KfUs*W!kWlp~@8D5%sw> zI`xV1LTe(we~pnEZt}ZS8O$q6@e$i&?z`U)t}6lGbF9Zqwfw)fX$7{UAuH+fFX)4` zI>_jkBnOWJeI6^LSUHTHcK_Lme6#o#>VVsr#uQmw+jaCTlVl#fVg89~KZHV4toG^! zU3h>+sb;ua>t}|a_&11b<%tB5jA|XCZ;(a&zx-&4;%UMA*g)*lT26Yvs~=w}W8@RR zuAhn@_*R&U-~6`9(8=Zw)5c@`LA{JI6MBbmVn>EAV7?vT(wpH5REE!u4g7eoHoX7D zKR@{J-HB3mq|0Oy@PGO5KZQZ*uFhm44<0@U9L4+plV$VY3S#ZNy?MQk3P?Wc&tiI! zULHzJpX;A03ksoRzk2{(%h7I58nMeq@VWQLlhuohHBWWk#F5si-d9VrV}p985n`Y3 zNSHp8GJ_Oisl#{kL*V1U$+oqSlX1^nlg`!xp`s9Y+ZtlG5Fx!AI@Lz~mP@6yw5+WB z6sxQEo*8rw;)+2&MX8>G2!pqf-)uZwI5@7Fo(B{~g2kalV=Ged`%kPF0PS_m22?t= zgB^ghhbO=C6hNkIdEx^!+Sb&dI$K`CSc^dmYQT^;NF2xoHdBLg!t2;PiEbpLu(hnU zd3S%$*6iXWlkW=DF@wGVGyrXOkkjcJMQjKgvS`2}s)Hi#a03$z7bR^?MRh?6An3HX zWe8dZ_I?9X0rg<>B)mZ&)*ixJ$dT@F67tq0lp@4q7qbs7=v(oP4dF#jZNY;e(nTn~ zS8#54&zBBrGN34OiU~dd1>pnuwlQsxf+2Jk8Bhjk^&a{d3VIBv+rmUay5doFY;X~1 zPb_%B2kQ?((<1rU;A?HzVAyIeS|b)kat>svU1$T*1J>3tVsR)cWF0$v8Hyzatg(VbP34w|%eqKHAUz{1DT zd9f&bBuE`P1qKNLWq0A!&=mzJUmKPS7CwPqBL#9HK^o8#Fg66{xrt!}qga3-W_Z9k zQV5GC1Y(C)=ppC~6lfEE0?|@4LRUbwSUe?=PTpc^9n!JOX{g57~4|T2I*ZNjPLB3x#BXW1wqAU_5W^Cx~<`3eOv94P*F?j`0!81IGZc z8xZLT6rKpH&1t8Lys2Eb@+jFsWtV|(T^xSE;haNJqfiZ{e06;PT zLU7L)urgFO5zOw5^@bG=quI&svB}uCVhc;&!jQuARhyPg1E z_u7*ZX++T)jnZcF)V9iqN(9P-1wI3Uq(V z>&cB|%w56QjV7#c2)#>z#5osBz;=HDQ>XSUZg~+qQTrmvVV0w4-#Ez>6yGL16mI!n z_ypE%!4+VZ185`Pdpz*MFm7=n^hj({M?xG52=6Hbi+N+oVVFpi*A`qht|J}g#SHHO zV;y02(mPTBNC2!BhGCCIy++C^L;pgt!hoU;j8j`jbjK7KG6)X( z1m^R>YCytrP*zNEQ#dH2qmB&e54Rdx5sO8!A$tZ^E+JugcU}FU9t|iF6w3fuV+S#w zuF=M!n2;bPXv)YM8wN!I3m-)nkpYEnQ2AI)1lSCW)qsU7W4d>GdN$yO@bIyf6EI2| z&Ti`nLva@d8lLj!`CL7t213B(POSk0> ztXM);l2AZ)PcQgdWJickD+vJQgT4PV4~5+Dl!d{^&?qt>=zO6FEAtVI=Yy4p(92J7(2wFmULzTmp(Smg{|-+$qdIi6ZB4~o5-Ay**N<+4Ot64% z?tl*ggl+eFNg@By@4@>wYT*ogY8Dv-eOStu;g9LY;1@GvPd3^4+XISreNVwV2ZXi zMQAYG>y;-9G9*qi?oMl`ColGJ6T<;17)4J&JT}5*0gs?->d?kE+2IvYSTwk&089_P zNBV3V=m}tI19K0)G}IIe{00ho2yg;m?|Cs6X_j7*vkYjr1tcjt^L37`5G?U2I2sCF@vzM9*787V~3gk;TC==`k#)`varqFz(NM$%E4$S9^ z<$_p@q3g(zB5+Uv_z;XGf_0Cey#PRIz}gN57>nXXdcA^&K(R6a*>y}31pNgi%M2fa z_QZjUys_m_bRsyf4eJXFm&df6u33>Ix!~Ab@S6Ai5)eLyUL!+>z}HlujQ2ANhJm1$ z+fYIP&;|xe2E;>R)uC%(Eb`gXIzr}ChYLh&7xN6}=mR2wUu}6(0YU&+PsmCEDue<^ z0$)o5hYedmE$SjK12ozVF*}#e`Z2n7+ z-u21mCwV5~ZfcMDS$8zO?V>R(ZYbY-II zSm0}5kN^NXiC&;UK7rp)K#(`~-q-9%K32FE6w3!+)r2}gL4*M81iF2e#E z7`8fs{{LFrNs-}j&_^(d&;8plStv$kcs~^T6u`KR8Hz={MbNQ*giWLM{ZD5)qVHqf^P52?yLKP|o#%jU4@3|8imIprZ z#&$qgdRLHO)PG?UivH5U2teAwJYg7ZFp2{xy9sxMhfl8X#dbuYdS1hgpjZ(=&jzLj zg3i1PQ^j=ey3+zc>lns36a~_Y9X_>nLVb>uoeUsF8o{wi;2vL)ItlD*9sLwI8<*FI z&Ve4wLkpqz1N~pjx$Ef#gZH8TCv!qq^1vu>kSrXo3Pq1tfzE*sobbqzui%Vw(8x9{ zDU4why$F#`M3Jz=$)K`dI#hj-Z(s})=t!_+Hh9Pz`wL2cPnaWX{~Cgdq#)@*OE{#v zFoWY95*@1|yh14iM{t|_Ro0>dVshEMrMIoweYG*qr2es8Yvu&dlQ$3Ph^x%Y_hX?j z#FeS53p}Z1yQg9IGy7!a?)ufa@MUz6cE&^qi1kv&?==dox7caa!`D&bzKSQ+i=srx z=yjR5KNbo5J9K4XEE?j!CKS(}Um+7EYa8O%d;I#_fp=RWg`#S$4%Tk*=ocqx|D@a6 z=O#KLoe0r!H!E3GCs9QhZy8N*)NTzH z4b-)#))Ogl?~4d0NU_BXy*}lxNYGhV!~c=c z8vD_8Z-za{XCMYCBg2MRv+~@lUEq_W}4V&!Jp-?*E5}E$ycbVX2M<`s}`gFxcXTs zqf+;}8(z?N4CfADubik?i#=@p%&j8X!;@sr+^X=e*_Kk2kV&O`GFHEr1B^Qn^QxWN z${Fc_+Zq?6Mtd1`GhAzX7CE4ufM%YsMA6(7A^+_%t8grOynL=Xc%J$2ij`1}6fN_e zEddOXWv;5;8=3wEERp(c)LD)pJ3xz!ya<}B05PfxteXwy^)H!edC^19SDdQS)+M-a5N^)IXwSrJb- zUvh4B8&27iOi&kp4o8NmyP5{8IHnYubOkJTAsNDuqcY>7#o(QEQ>2o1*x_PdiwQMv zr|Z5J@?4F82k*V3OThqE^saWNpG;A43^u_c;bdic5KyH1ea8qKO0>n&cgsDZUv$5% zj=V+yH$7$Hj^6hKo^?Lj__5=WUNK1a_sUWF-r>vGs=s~RIE=6FTJWb9YTc&xnWUyN zX~IB!m=G@>^Qk?cyvCXo@hxJ_s8m@NbP1m^*J!<3tJZX$Dw*_G6sKvU!>%L$0>Z_C zyQe5>0wg8Dw&3S6P!=0sN-G~wBkJx2?g4dTtGFUIs7(svpb)h5Ih2oLDSe_tHRg~f z)6Uc{7;-zK=q!}!`^op_L^|s9(dP>X{ImHpl%kYXmQSm&Vu+>od2L0RDg8q$yOtjD z={eXLDu$>E`6WQ{y9ey_;Fe=G`UAbo(`b8YyvV|rl?(I)w|8j<*kQSEi-%`bvXx6_ z2VL@6_dTGh-Nk3Br;VS~a}KRG0seXimbe=yOCRu9YuD<}mg z1$_DNX&wI+&l07wOSa64=Yn8y(&HDa(_8q3emI)E_*UBC1+U6;&0UDE*_}{#-zoeA zB) zhJ49hUW5!M2r=PSvEY;im{g&ErdCZ22L}(qF>?cnq(DdiEEH~_&>#KS816KcpR-cT z|2Cb1e0XgY3Z)@9Sl#_T@W@N=VW$RCrrCQvDL-4Pu5kNNX9|UPQLfPaU0qF17iB-5 zZ!gmx1zoAcwANdHW$EEx(@W3V<)}nT_|Wa3 zZ!AsJl6LfMYWNCIL7&-*1?04>@T16MxK@%a$Z|0H+XBToF(>hRPsxLyN8c4=hIO6O`4OFmUr>C!2BaI}0s0&(<5 z&&;4kf)R%9!CD1}o4y`XwZ*W$7y7A1oIrnGo^T8I3jM{vlK)y!7XWiaq|r z=A6!kn*$}-U3xy3c&rm1?|Kf+t zpAKxh0iqjkoeZ3{!IMo6B<_FXpzYz7sP>yle{FXezgk3|$!=I0`GHzErYT%Q0D$Z7oW6hdQYU%Mg9-Dt+svWpp!_@*&_a0`G=H%1uYDBV+@lr4p{4jX!|;T^=Xvi54=|(}SIw?1zYSiW z2lIK?ekJtSzjIrZCge0y&dBkl;&2kl9W9+P%EZBP+B>)zzGf-P@A)WggBj3NGHy?` zHXE#XT(8faYQTK`#NuOasa4>t%?5p-?oMk3N4cY?rk1!QB4aK+Mo(zBywv<_fU`Py z%ek>D%n~JfuHd<&@-%PP$TRY<;m|WCR%K4f`sBLVx^Yy%>Qd0u6n%$BZCZ_6DplYz zv>V#$@2Pd5(Dpd!Cos_F-?z!whwJ{iyyW(ne;!|(RpK+e=NLU7n(WT+ej?lVE$FGT zoL8BsQ8NN1p$k}JpQsVyRj3*C|A^|Z|3Nb!dOmpZLU#IDKkvbnc$nVlR!>Q377s4z%F??0#=oJ|z;zs|+B%ZGf$ z*o3iE&$x$2zu|TD60kg8#4HV=yzE+E!g1PIaTV ze2s^05Ld6Ji_{1_+j5^@dLREuL0-+0vS=!dTZ+gWR5XfB#ordRJtv?ynIkR_z{FzO z(P4(6BE^Wt&N-h(N<$@x1mi@pJ@imW&`}ym%w8%7*?tDE+!kZo)#={@|t7-e{@LVakt>D^65M8sC=#>7(L0FS1sJ z-cTM$3#6wAC$ltveD;)DqkrJIlDLPGo;Tu~D_?8#)FX~4?JJWe^%rpIL+Jacz`+|m z0=H=wXoWWU@fQ2HpHr*3>d_I>V~&!o<(?*ZxB8JZFB!N<#YHDsa^1F<+U%W$u$p~e z&+yNEd78P32@;kDFN55<@rNbyC*(33h0XWEwm$jA^aeWm^I@GD7mq|^c!o0F#u~Sm z3EZPvm^&ssTP2UgugpUVrPnO2`I@N3-HAK;H--UQ66bU`$vCRtOWq7++D!qr?teR5 z+grQOx1R4j-(K=LZcB#dL!r=4=p8fy`Wsp-WmYIXm70~7m6w&3Rb=$VDBCFAYpiuw z^4#~_7lAlOAPCP15eWqDkFRi4<=@MD%3I2Z%gf8#$m@KsnYP?}GtM#2GtM>6$Nh$z zo12rFnJRUNI`wD5u!l0P%iqt*ke#HJcPd?tV&#)8EQ1J9QNMh}V7srI-3Bq1o!jXR z?4nMxzr=kHatDLl@aohI@G5CXdW8?prP$-_P!SDtH+H~!ZZ?0pnnFb3Awo`N9x5zB z$C?tTdt4k$;U7x`GJZVvE-z1_!$EZ^(`4(WOXB@2l5Zr;CF>rq)n#rqD4CzB*4Iou zLT3kvw4P*2kJL08EzS*%9}_l3DM$>+9gtUW*)2$I-bL##dg<;9D;9}oRr0Ma?R`h* zo=)le6#3fe$1?8@CO<01Ars^oU5cLzlni2>|MNj7>G=!Jr+TDj$t+^kI*b=(L8rq? zkx-TK@}2qnVihX0L;t)b?o^#$edV&|X+yqHz{pWen@z=7CM&j(* zJv4N;ac8N@d}`wR9z>~8XQYMh>@;3GdEOFPqmm5E%gob)?@$#SUT%$IOW7RN%azBg zhE3xws#%KxT~zN2h-ciO^QvN=4qKFJ_{SQ&?zsDF#+mH_8dQ;6JY0F&%=uPrIV(5u zmxEp@?tiW`h&(lN@^TlOT|}mTG|atcWBp_CVo$!{Puvb7*+)hvX+D$4vP4bFiaxTJ zfRa+r{;rfgl}gRT@Y+Er{>^(LKG!l~SJRL4q!KG+Bgm-JcGJ`BHqM_XCaO+_y;noZ zDIc6y^bZ|=bk7ujRn@iD_uX-1;HOV!Xg4KHDQWugw(Tn-`$yVgX6|Iihc<(sQmISJ z>I!^pM$}bHU|&?@q=(;m5$*0(TL9%g3$dYBd1L4D{aQQ0*b&!VYKD@U0j@6bC|(a- z9x?yTpP$ms*|jHHzw1U69L}-%Fr3v|ybTHAoSE9GJ`mcqa%HBP9ep>%qPb|MiF=0@ z;eGE#zMtz?>pquVQ~IRr12qewG6qQ9J-idv=3ef8!Vrm2=l zwWbxMKi(84?-l+lwE18P4mi(0d&V)7K1T1MBlJDX{H+yr&t%k0pn{|9d z6eg7a;t(MwLA=Ma*XZ*_#O# zG4T%}GhEdzZ5s;J6E`8bf0|4f&j-!vNtJ)TIY*819 zWS}G~uo)Ei@TmMarBtP&YO>}u5Pt=k*s>$iDgMWl4nErDJXa8Q_B>$w>4?JNOA96* zP21OBxj|nq{9Qa>90~>pCt+~M6ZYmxJc*l7XDn|~s~%Z>A-zi1Vexj>VJzYI zvgeQQlO}(|AADt0dbE4?v%D|yl}^o%(TRAI-I`a5m8$=^V|*Xa4DlMO+PYJ^gsYe? z+D_o|`5&LqHV1gJy6nox@`rwThS#M#u>T?h#1)a`TGDm?Qn1Nn2yM=U3T-|Od5o2= zm=de%K5R4^-4!EzSR04YB2WM0G*c-Sf5KEd4%))?ZyCGLOqAM9kyu18+I6Upuh#-*h)X<%eF9q4A!E^``knpD@m>1i7G z`lBnOA<3j%TTh7Vz}bE-fs{C+Jt6Fs&*z)bLHl>gaqHkrB z`$cO;xyzx^$f?osUF9c)+wG>v2V)YuzP2mbVm|3ihrlMygST?@vL2Z#l$u3HRYc4! z|1=GP&JpwiRQtm(XKj??w_D%Kj%>U_mlzd|Jb-ij;oE;lK3P3Xx?g_zqeEoPi!>qP zaiOBmmGSK>3DSUb6FgPF@ZZIYZ%D51ljAc-OnC$kDWn(49h%+zWk%e)2IZWVG_B6& z41|Gw#s&;8O=fZI!fhomkZe1)$7hg1&90|d@SSjKACwm+e&)_lj%T&LlhHwzyrw{d>Q8Rx{jOp(KHse0)j7~{9BTPSy(dUlWHLx-DY{&@ znKOPV{4B?LF)%`R;}@;7{mIjyb|K$mV|zrljp&s)FCt+sy=A;rPcIx>RhzTW?5(I_ zkogAjq@b&NNM*;cG$^n83F>3{#4e}S%GagS{Eh4+X+z5Q zbT&gmasq+6b3bsX=F}%&GPF69=6tI!Mr2*kyD+!%vbXZGw(9yeZikv`Ct}n`VgJNaEnWrdi(h{dwBV# z+LzMnI8(JXAQhd7@Cc>){6@elGNzU@@A!wK#}lA#RK)OHw`HfE*5jM1W3vEm7ok0J z(i&!+;}f61^=*8}T7tUE&mxB+2c}a#E%Pi#U*i3Fe;czuMpSJFM~?rLA0FI`5>l(% zy!uSr3gvP8Vr?lVYNm;v`SNM8Y9pa~ay!|;>EWR2g2#Dl?@fcVS(EkASaus()#_2L zk=&Q~$2@iV(6gn%`m>gpE1xywqtp_PXJd?re+%WaGGSy^`SK-c3G=)F&Adt3X z=-WZS)ZYFm^X|_2D)at73i6h)VBa6LW>zx$8k8M>rj=1dYku2lW@X2hGrI9@=Fi3JLvs&|FTj0=K`ay?>=c z!VClVAJ^H|$A;5C$F1rdF~PyzPidRp`P!`Y4w~K1=x2w0=cfWoZj@n11Ht_!bqFE8 z_gZbzf?O|}8OTk%TYZYNC&%Nr3#W4Z<(_S`q-@$9KjBVd@w*@lRn~;>GY9OO>2#s9 z1S1xd{L9HLU}h(D4POWidPirXpQySP%lr3Yi`(FX1bRY!mxMD4GT84C7q={s@$|u9a zzRC7E*io1dIQ`~{*+G=jR zRC2aaTRflP&uu`2FOSf&sh4wbv-&?}f#v&Vn>S9rYdj<)1U>E#0Ninw%__x)pYrr3 zWz|AqIN&9e%nS9eyS;9WW}@YuLD{8pC*zOD<{5&UwWh&;)4l%Y=tYIllo*OMHN2Ch zXq?%c;#0?dGn~e1{R|I&7|n7b}+;8vZ>v?1AEpP zvYx*BcbmF|(RB0NEm5}SsR+e()uWoEPxyRde~+4eg=m+$BI`~9<>V_xT+ z*Yo;#zRo$X*Iice1pM8>T=sIz^f?whD3G1ARdN*Fl?X558 z@W-R?xIZAAjTSWDOjTTZ-E|)ESkcJyf~K&x*u%`Wb$E);`?9pJV^{tRXW$S#}Fo zLYNnM)5$O1f0CB7b4B6)$E7i>bqkJxrhx~Y9#FK3?@o@ZI3=u0dNQPTT9nnA=O4TA zZvcEYP`#SeH>ZQLfBlm74CgUA8{d5X#*6!peS<8PMus^f8~nZQ9(z2bclwWg{{`pD zeIGf)IY%q)-BDSV6ZSB!(RN<@v;(If9YoYLcQLGgyniY8Fz$f^^a{bqZ2JCUhrcly zZ+E?SbsLg+{rg6g%~;Z*K71;oUzQSB!8lpeeWK|S7%%HHdbP=J{!f%uPU?yJxl%zy zLBA-q*7dzzVk)U*GNL@3drNR2>}S=RTG!E;p-&}Mi=k!}t&LH#R1@rK9fU%K{Oe3* z%KhCRGjIH2^RG|0-4!HVl8m4HAup5PHG3*apZirltc~^J?rw$0atEYon=u<7U=VVW zgtwQ2QfDjk%HQcGT77$aG%|e0Gql%B@+-{4l+xE0fj2)j-;8-4gn1J@Y$({*7-Byu z^DZk{+h-Uu{Y;b$4qqPG-@Sh+UYyZvQ-QnHeyVXKc#%K$i1X=T%|32L%6@Kjgp%JE z72hD)FTBD>{0-6XRKG*-4BcqOe}UgF;C{%F>h>O8@k^)(E{^h2PEJV6!4x7_#!EYwNdDT$nd^r53iO+()EAQGhPbxZ{L@GkRgoly0$8u-wQ7tO!y~i z976?Z44>LDwjI{$Lp#XWh1 zneKUOn^0KzP8YYd{bwEBMu7Q!gkukVCZ@{r%Vu`%k5g&mY|u>}BwS>3`l07e;Q@dU zdS~Ipe(26Tvz-*vF%xrTkxqgulNcF`#AA_j9pXz#A#IP2ulQwGR_i6$CYS7Uito6Z zI^#dF7>tt`VbUTe7B>~o=a~ad7+bV-vZEGg? zPb{7-o~ZzY`G2RRTn5|*ew``870=YV<;^#Kn2go2)_~v&) z`v_W^_!RWyU&z;tmetnnk%6J%WpW2gVO1sz* z1MFsRo4}vxBBqgHm`p5;#JK%6EsLW`B58A&;Sa9px%Fq*4<`0lE0^Vj#nm3atz<$! zGy0>+pb4AAcCIO{xL<~fb{EfM5(u`4QOolqM|^CI7~T9CNs4}7`N)VP<<@VlWL!z* z-ReMx>}b=14h!10^}mp=`S*A&s=tun;#kN9x3r^=zdW4%b^a++^{a;^++FV)_ZVon z*R~l^jACkp)*+M`Gv;6ma=OI^D=Bo#?K_k4PH14kQ22f3`$H8bq`iZ*dC~K=_ttj5 zC!0&YuZ?2<{Cy@ezwgfuL*&z+jQKHP7*EPQ6RDz`mOIjyo|a2Qed~6F>+hW-e(XL- zK54-x?QAALDu{QZ|B3}c$O0Y(3IEv{sT#1PS4a9V=A6brO-!FnjX8?Dxsa?!DlmI&U#zmyE?wB{1A8$loUx@3iH1TUG3x z==*lKjjY`owPJ|U7!N=6x-mW#XG53yKg#W+ru}Lm|4jSU20ATyy_!nR99ejks$Y=Z zs25qcec^{sTh!J+q%KIC-A$XP0iioD#bYAnG@LCi@>0CTBvZtDfMzT4aJCURjx})?xjwb0cDW0+3Q%|x>mcEwcasn1- z(XOLCKbV-v7X%L1U>vxf_voXnyjNIV4$b7UEiXp1AO>9(AC?k!qB>qErOm#3D9P(4 z>q_$GqmSa*fwVxPN{_%V+kS#r;@8YP_-lKMEpFY`9)m@F!bNEVL4U?;{RT4qrBk@;SW$ z(#G}%RGVQgUUkP@_?+weCPOmj?qJHAWZE#8wp4_IE0T!X%@mP42JvAB0fX3Aa`Cnu z)wzFM&LmN)+tZ5wWmNo!KCyTsW6w8PMlQ#+(SSgAdhrK+g+HITx1OPFi^H9UwzbQ@ zQ;zRC5w{B+b+jrQJF=%<((usbp|2vOwG5T+9V(VZVLUw9bAmmJP{Tj{p! zI_}#qnF$RTCK_QOMk~R-;|)3TQ;fuBfa!Df5QOHBd>eY zw3!jk&1D2QqFZ?WyJ%nk&bic6C-ocO1-!^x8Vwz$rEzKJ*yNxpUN@VL=s%dGdn`fL z*^$dpK4ow!SPHp^b3aCM0gCvxp?~+4c}^$LShO=6FiqLg#HM$P43_guz!}XBIx(>+ z-f*+acTC(phn|eJHG#ue$Ed(xj&0Yvw}oK2N0f$a=(nrNs}0_fzMFpfM;J8aWQT2= zgRzq~T_iM+TYo`Yr@GW>u|YF?swuNDwqV-feT_{2^meKKX>i}QwR3fo%`9GzaIIOt zzoE~AudlCOJg0NIQq^U(9%ufFXQ(AY=68x{XDKG^}< zQ=Q4*LC;Dp*h$a2WRVc(^6i8)=4L!%LS=ioY{QA~D8g#pneLp`x+80z+9pe#ac!%j zknmp=FeSsa+AUO{{s(^UJ6c=iOSzoMwP-Qp_IFD1b-ts;j3av{Bi}A6(TdHmzJKxghhtSwryLFR zor4v2gGY#|m41tR>q$<7P2f&=%u{xZvi(+yy9J{U5Zc`zLT)XR-lM(#J26YIQQViM z$Kl?&M-#tE{yScJ(g2N3d(Wqd4_|JLm+mw`f4?>8HtLAK1xHsRWAh#SD1M92&sj`0 zme(+^)e$c@iUgpn?yJfzR3X`jE$AP18>;`bIO?^N-Font-C)ioXk+x0-QW}4Wp-Gsghro@Br0s-H7{^+_&DB4 zH&=$aeN*Sun)mn(7^jbp{>g}moJ)dp?`53Z{rE|px=Z)pNnSufb6}g{fv3IMHSU4Z zJSUpu;n^K$Y-OdfuG(%UjDz?)rxVh`>f?_bx)bZlXzTTq=2`Hc84t(7}fIcwO78*(RP_r%b z;9x2wXZvRIXU{=?@|TItn{9D}nBtj_d+Tks+75C{OGXs>MN0gN=(VA-VRC#3VgLjhYyw$U)!uTco`#mQl4|)!wt4<2QS}$5O z5V~3r)E2AOgKA5j-NAc0+L3!wcY8l(?V-0MqG9Qm2G+}+6`gpoZFJk%K3rPmSB{)Z z*Q<^_qxj;Pv_M;OoXgvT4v(GQHX+e&ZyocL0&N4?YczEk<&n%&32n>^(YlFQ6@8Al zCcmYagtUft!cvRv^^HbsmExGSjvs)<3&k^<`*y@FovJ?VYWaM^Gy2Cwp=RFFb!AIE z`ir?SMxA#XshG;0xl;UThT(IBvJ;yI_|eX@3B|dy8%|Z9_+Gu)>764Uavpq#AB{V% zqA6CWJoj9-bb`$ZbR0e?Ew>QaI1L{p`|Oz*IjSLpeqWty8zIv>7A!U0)5|oInlFD% zNR>@I(ps$MW zl+Fop0pvSxCl*zTXXN~INve=8?sa06&z#DRm;KW@A@x~17sEmF7D7)@}6;`x5ZWA@o1JH#Lukc=&8Ty7YKW=8Zg?3m61F^{fc{d;vfbgvoGVehj zSZmCk-T?XP?&R|J87I;h#r|#m&sP7j!1yRr9?_As9{4b|iS+S&jD?9f!X`ecz%R2RUYgv0}vYuJ;V+`h5Yl=^%$YknH?gcot&L69VpZm)g z$(?jPJO)oh>>pb?`51e%-P#du!pm`NRK%Kdnpev1%Oj;PH%v=hpNmvK2<9GqS-jxBGma6;9OR4dd7T2hi;wVqOBF_v30 z6UqC>6#j&XkEfRkK*@1@#*xyvDQ6fWeIZ{0NxR9$`d)+XajMn z@ol@u#FgP|S_|hlrK1LtU$qm*TD`{(J0iWtmSzWpn(5k!b6OZB&ZU)<^!bLB`0Dxi zm9q5t1M;|Eh}Iuk7;{dYB8VLf)CPW35{o8k6F^Z9_NOd4`&~go^ zKIpcR*_+(fUhqA9Qh6n^YTi2?)z=(87VAVb<2{vxAR@+09nl&X1r8z|n$u)mI=&-0 z@$5zXHVnSBan1LRWZyAJqDQXF&J5E1^1cM%+1Q8e^NaJii0hQ9d8bDyDLof!s)*^l zL^Xsai(?F~%tn49&ICp7dq(MXy)vVE6_l?;ZRNGEXvO>G%=t*)LIS3=vm-W6#7w7e zq8x(cV58AQobOt;1hVH?K_WS1jCp~)XDrL0Q>d0s928frq!i7kc5xEOyT?WxQC2)- zxe)2~cFP2^|5#Zf`OuiP6UvlFa>56Vb#Hk3hmt{%CjEYU77#xA0InQ#Si}F`Ew*4u z4t0wySIXcV;u`R#M~Jk%-6w$@F;?s-iySM9mu7zDCX&5MisxAN;+2&)EG=v z!YXspChW~2pgoV12QVn>qlxgjFJ>vi{@unqNrk(bUZEDzvVsdr{E82 zjB}ydoM-6-1>>i#qf({TTl2V;sQzSpI=)l0%=X)aaTr~}(9=l`Ivfleq3$W|c#k$Cf@QVUL^JkD1cI@f5sc=vJ~Gf78J zVjB+5)h$avJDwbZEpS9x+)CX7{STy9m#zd37?sW)!)CSzUWOz+R(1i3C=AFhu?5r1 zeQ+LRz(DUo)H)!%lC-`rZ8KWdCAvN@T#4!yuTF>C<~PcYOD3?z?a(n^e8nY5Yuf_? zC!vl(C)+#5O&}i`^T}K8XoVAloK?eDaHOjNHkC1o*oiZ(5_)cRSv5^uy;9}?dA!t_ zlNvKU+!1-bpMxUsoSOxhOrpN*lkpj51>I{Ugy=qWZG1; zH?W<+yvjSQj?<@dcL7x}iV{m?1R@ABI5pe|#1W9!d8IHsj8$L+1`&|?JWDm{Ix5i{ zcmYFY@Hpzyl~mMjz#4{M&mtLP4X8{{Aca85;3>oKsw}t>=s~~}cza>8b*u_?sS}m5 z3(z9qGkIt==@u%*2T+B{)LBSlFoqzz%99ym6{vU*fC~%U%ix@W(RX1isHsM-N~|}= ztqxStE)1L?@&ck@Oa+!ijSQzQnS#3rs=I)3 z!DFk(`83I~nqhPwj4?IK80$z4+zr48+NQ0mSo;VC-c3rZNf^l!V^0lqZ_@vN@fA{& zwT9{jL+@(RW)-W?c>p1VMx*ZqJZKR&bwf{#K6OMLq0F*V!)>L;n1EOUeK(K^Bj)jP z)NzVbjtRJ(K=%PAVU(4ua1*RCmE;ZB!zfxTsDsA|r~;ljjH1qxc>;T36kS%M5g0~b zUgNo_;k2n-cOVTWQ~i(pukaMqr6>Y2m*=A{)uF#foBCndpE&Z&tR%1t;(!f81WiU7lzdS z7c~$dGarUgbXa9ZU@(F10bmI>yMR&{WetmA1Rf&Dlv$8!+^Epc-UJ&jfTD)8qm~(i zOc-T7tI-&|Okig7-l*ejsIm;+dKmsMmZ}NXoC@C!n8NUDSx?lYW>n&C;3EvL#iAR7 z@&pQj7p^AVL`C@k`Y^l_YerqFLUk|#)BY!L^?wT-viWQtNu9i&#Wcq1Q}Ld_Wr8dh zGI%hYAj{`{+H=A+led-tS$H5J#u)2B5P1XDFm4X7O^pm0zB>jZVc)XY<2^eV5nT) zj5>K0%fSR|MU`dpD%5dGRLBI+!zgmBBxBH!z|7*wJb*O>$U$Z}TsuezDt11aXS&HZz`p?exb0lEmyS| z=*lG;@ek|3xAHANtBwX>9c=oPv%~EW{(}m%J~Qbm_M`^aDO-Bjif^q$DgsP%!}}%& zF?pTH7;s&7-QI_?FaE8n>^P^k+=5b|G`FC5M3)v=3iMknaxvK=LBk47QGk6ZAY=!I*;t>EZ0D_1IZf58`-!=oy_Cd`cD0f&7uj> zRdeC?Y-T&aG>__fK9=ItHoL&Y`-0qD=EnF`h1etJh${X`4SXek#EcB@TO2V*+~K=S z0J@X|bKSa>@bML41eqm&L>Iq*yg1^6G<(dnrxZz3 zD?1NsZFln@{~W$;cK0}CJ0f^IGyEeyz)TuQ3ow@|u^*TrCiNa#`eL`Tw`L=0fKE2N z6R~dpR{p#WsT7FGC2r!sWjx14j33ZNdWNJS`EfY3o)g3Jp zTQpETfP)5-vvrXh7GX$h^aC^BL~t$m`rKm=jKygop)1ay{xmHed}7VtNfVU-$7!lv zP#L)FUqVprvKuZuz;fd>iD|HS`?cs!a6 zSSkdLk*hW!gs=*3{k-Ra=5Ex;$P=CNk9>76Dfd}vi1~1@!RKqz_>AQec1Y$Ptg<8E4)&znj zk`G3Xs;@rh1(^LiYox)5S9y=1tc_8kN?@u+t?OAarmoj{I|*58qxn1)LZAn5kpLaX zX*rGCspAZ(5H-pFUpk2~#i~$kya9-o)}5e&sv?Vwwz$j5>OdD zuVuVq7=!5LL_;wJQwYo}5N62~sAx|BsZL(Uaxex_%ed921|=R@9)!K*4gX2~={y(p zW%lw0++Y-KmdF@H!emGSX%`^*KNOJV@UqmTwp6$~@L(AU3QV! zf=b{0Uv@EMDZ|j7%lNK_&}Hp~iHxypsC6a~$83R#OkJ<=!Uzzr8&OBp40mH(s4i*{ z&wo@$$gv=ZiCo5-WEc|8(l)|sQEfZ{uVuK0Dy#njrWfE!KwaaBVU!IlB{iHpmE;NR zCZIB*S_`L4)i#EZ6P3lIEZ1BRSFV|vG|Dqxz5Yp&MmdF%b@$Z^UX0wc@9WeYVR)Gn)ZMilJh2dAS z0!=_G0?B)sQz2S1!75XU9>Dy+sst0zd>Ng>)yP^bk_l)}pycx|!SHe{w8_6qh7lNE zfyFh!%2Amfz!FUM7fWAVYD`7$2D<-KKUh(b9>6IAKA&f!MwVxxOh9V_J`bwrmf3b0 zs_+H8^Dx;87SaT?B%pl&`f^19F`WuQc7w-Mle$n3{KF+1yDGD${#)R+T2f!AjV@Pt z*ra9hHH0xWSx|MM&4TO`O@Klq4#w1mN)0TYAo2lLz>sPz1!FA4!rp)}tosk;gehoC zfamj|!F4s3j|sSu0MFyO!{E8RXf@o^PD*n@b?-5y#Pi)=i}>J+NzXQ1;YCXy!0CRu zF4V{uO$J$=i55ykeHGFyfxo?4`{%cP`bd^T?YhinEe|p?aRg9^(v z@gWyHjTnVD?ncTIBQP-=WG2;*0D44a_I=+9 z3YRPMe#wsN<^6!`2e=GX$XlWdfwJeo5f<>uz@EE3YWbYc7Zf(ylugTgY1YsMHh)^U zB2Bb8#d^}gvRC>!qKI5u$*i4)rL4&29DqvgPW-Qo62`UW*9n(Z*oEA^vA0&xw;77- zU%pO^mX$(RihmZ-zQY!=6Y9klZIb7-q6Tg~yUw5c!N=DX^$)Kuvm@3zCt4biJh8;M zb8>b!4PH7Vl;VYKBw(zEyJ}Xa$=ag&Aps29)cwTp{_NKX7VnOUXbt;DXA=H44H7sIf+w|@dYm7T)3!%!l1+*M4IW`rpMF+_)}>+i33=9p5mYUVnIc%z@Qs=Zp+xGHv11jmqUF5#xGJXLy z(xs5~RkSeDAhRW#LoV`H^k^MeXG_V2PYODg7E^wz!}m+Ch9J-9%1qvUYzJgDd_gVz z*Gxx_4*t-PT(~XSbUWhnPvx7uDSa!H=Fe}6@^U(|y^pg#=gPKzeiCL@ot#_uFlVYI z_5n`n+6e?`$TFeVo2m~WKB?l@v)zWga0=`9hOWKPXUTRtmNuipG;a=Q^zqOt0 zb34{j{sitR6P2pVHLZQZut-beI@6Z?Sy^fKNes88Y;yH{M_mbbeZJ3#F@E7x?^11! zWU7QN6yC7bW!fBhs!GDwlhBoX`AJC!%jfj0F>^o^eJc>FX%_~6$Zo}nFb%8cYaVN32JGqi_L5KOAI8%^5HIBg&Wewu# zi}9lZKbnv4?5-u1-kgtJ{38_9aBE77BS~n+Ha}Kh<(NoApR0!AcX2E^8hf$Du^z>9 zsVFEF%=VOoICD3B?hxjN`(tsNChG{zmo+|4?CAY5lzOOWU-GMU^n&Hub-iv0(V`1g z>?hU@22(|M!4RwJ5nZUR(at4Wb)iOz6TEK7jA?Gcu8$&0Qfo1Xbcvh0=2x(lgI#@u z_d(!d10H)lJ^~KhfIhy)I`pOuB?jmcH@$O8k8hS$y{f>GpB-=YT0@b|J!+AVi2OZ| zq|DwXXtJ-jO{g0j7uuw>F$vu(7Yu0XqDzNT&DjaEH+k{R#3QXfkK^#p*udV5sc|s$ zAJxh8kR(M7X;$bmz&y2f`cDDfZmTFmIrRWyOTT?U=hL)}NTi7>=UJ}m&Bd7|MaB%H z`V`CN*3hfJ;ge;)v;V}Ppt$s{&EwAl@E7ESzYf!zz6TDB5Cwg;f*&O0WVo+T>_sD$ z^iKYk3%<1Uk*NcRVqJEKgMqJ@dNBxYn0gZj%qmP#>dI8_f@dF97r5RQ#MTHTCH&Z0 z+{As4g}#$h#ydb}jr1aLuf%4bwy@Ghhk}5#GgjaC5SzUa)ui$O^!AfVRO&z?q`vE) zmSDZ;qUnw|KEL`XOS|-NaVI7$eT=n_VOS2_^{3N^e3 z1rI<9B*|lc_V>c~X>(Y3!^ccw)Fs!+0)KwN%PCO>*H(Ia9gbWj=r&KLIc~)7E~*Px znGEz}Npg`@Tc>3t&M(mmg`dIFr)KnpNQrbIp2qNHsSZ8><^3S1r*qJW{8p?2S zT-g^=nmcf8EH(67_LJ1=r*Jw%_0ki1vORuC)$L?^6UsxPo%DQ*ql)v{Rg+9#$(aF| zg!6j&P60lPclCH0!hl6L!WI-Rg8K>3Alx|u%CYDtJri1!yT|uXKE-c-dgLaryKFzg zjxVgbXKb0KMNEFxPdOt-2FlHLs=sW?{Unbs`C zIUhlS_A$R^yD?kbOt2XualJ)Z?q|zs6>BKYNO^gUO$PjmU@_ zF~GWBB`9+>3we)9&?OTP${zQV&fKv|@)sx^+6Xsw6PY0=*B60rP2)k?j)7x~dmx8c5Rz|C+3AkA&i%|0ExSaXnBAcPS9xJ*|N&AAVlCe6ZH@-9S|={KI|>CbMx<|zm#8`l{w|2tX@5V zZ^!Mu=4ePvkgrfJoMx@2k;{G=YzePYvN z^~1v1q&6I;TX|73RT!|a^yY``?Si=#UfK<8%El*~P6ql<0{zHgS15)en@XkvAkl$1 z$=-8@rXGjaaPk9a3%mqd+hIfwJ;ZFG}8gOj<>79{|uaa#03 zWK#!Tvcmsl(tcW-Md4j4NH+zuJeRN7%n~%xPMZH|&^6g|Qoja!7^6MO4G`}X$Mwe6 zUQC`lmXcqBlow5BH8Sf+mNgO|3LJlpUr>WRxPUJ~7hyWq^dd_I948vGSP;XPl;91a z+(A!uZU1?!228HvlWIXRBjX&xvzPND?0K@2Ra=&-Cr#drZserssLV|<9 zPAmLt*IwEO4U|kr-zPx)6I&@D)?yQ%9-oPWL?yO~0mH4B(0Uko4{EU$d^3HU82|a% zz=rtvhhO)NzQcGw+$cNqWZ3!8?O2rUx7jli@h#KpQ|!}I%};dbYZ7O3R-UKtCm)7> zg*h%o^rpt#nEVydLF+qKpJog_e6&+Kux>=$Mr1Io!?uwdOX^Ld?qc1qHI2q=QK1=P z$~OrbUcEyV1Zkcrc)ZTVXZ*ImwnxDN)U$JSAC14gf34kGnBN>mO?S zOFjRrFB-FV;l)0lIN%Uj~__q8$ znA++sz6Xuq^E+x5@%C(=6F27ng6y!S1g%ZkC$1_2nMUBtOXm!CK_MzvwRhdD^{uwI z3no*|T*^I?_DRYklI)Wm?rDfDXY_bV$vQkMrMEySakkI-b)!&7bm#sfUS)N}vbAr) zBzt71ZJY1-py;b}ehE5_S?7w}5Vd6TNyMGW!vB`rNipN!%3H*?XO(FCi|2Q;y@I8# zf7B;CYQP9V1GzeJ&|)Xtq_%NZ6Z+ym4jcxdk$U2`G{2&l_osRT%#(2=Pf6iVmnxyf zPr*REdvm~ePNQwAVK!Y>^eo(8{6~%*T2#qQ>-u7C?u3*af=r8}|4`;jmtd_w;?1Ok zjU@%ez%A}ZIMHg5qbjZze6;gg%FD|Qyg7kt${Toc;s*PD5&UcGjdjvgnx#J|gb#z+ zpSJ$^qxtc0&E=)5vx|}=Q}jj2;1A@C$VP%cwix*E??#j~2PZ3%B2Oimy~FQh?+r#^ zrAUc%{HDR;?0j-=U?Gr^>ku%xyI|DO)!gWvT`vF2p7;%E#_YGY4DuDBGuzmzx*feZ zJ37G}b}d*(-eI1{gSeMGHo2!3+Y+K0`*9=EXMFTxZ;ZcdN#VnhxvD#UVsTMa*>Hv+ zBDi@(w`}AI!p(}Z-=7hii!!U7p+uC>3nyA%XhXaP-ukhTXw9EV3j7E?w3d1RS8hfh zfyUP-BAOK@p#+E?Ef!dtlmAwo4EF=6VgwH(4UWVzApGINOij{h^gUmHh75jn!gv+g2{f>_TAGI zpFrrGURF{Ci0e-JRr_QGlf%~Fx%?8F!qEpGcBV-YY|_aa>;>)Li$bw`7A~#2!b3b0 z{3bqS>*S1?xNm+V{=gc%FB#V+xy^4hbAoStPa-BN31>L(yh=!A)k~UebU*^xHCK>S z%PXtiC0^}U-NITF+AVoX7LyIxTt7ag4_Hc|Bx+3R*Ye&F_lUEKT#?mJQAme;=uov? zC3v$gsDy|2r3id`k%d&*&R|N^d8>Qi0Vo~RE>5PBiUsrSQrpFEBlcH-fh)W!4 zCsSX1^VbW6TUA5%K5hX9rHfN(Ygxnw%n+6T=`?#`Q?Fe|J=K1>)CEVWd_rn-@3 znasAVzh%rT(2d$m=8G&xx_C7^Rd{n0WmaANc?XsPm67<#ce$!6iL;|eU*TNKg6b3f z8O)nJXf#xPd33zmev$hjA~!~)Hd1b>i)_vMnt!r#_s7(dlF{D>P6O#~oub9fw1Sdx zaktfC0-|diZuYrDRR;-;XW8U)k5oLAl_pIte6;?Zd1JfNr*#V{dg}u{dKj$GLoSsn z6?;6~6Ebj^gnN&#U%T2PQ~F0*Pm~_Qx6@&*rH=?-~Wu|uiNwQNktQSP?>FaU$#8|8d?iYKiCjD z8Tz>{OgD3obRjIS-rCgNILw=v{f zjZvlarp=CyL$i0!z_OAUC0{-j{d}jNJ9X`6QW)1&lpELI38qqKciGzG4&zq+6>fS@!!8xZ6@#(s(GA3*0_fA})f z)fjEp>~+RihOtO3J+lYa)i)l7&8y0`?wNS56|U0%wng{Z=#5=R&!$>uvwvSkAHLrA zxm@S!!`j=$IbH9+xpv%GbxowO<+?0GH2)AUe%)7SyEH2snU&KduRhBtfS-|S1e(}vrMRPSPrZJ7u3E82nr zp@qKr^8Ig)J*i&T@ziOsO(_RbvJ## zufA`4FHzw8dEq7I3}aV)V@gJiJGwR{;PCaIb=#ZW@|WB>>NrawH)-9}_rN=CDyE

70m9)&Da3SfqXDdtltz zU8!mIYkbVskeCMo4~5owr)z(9IfM*lnFz6bZY z`7bI}^p2Evt=HN;;`gg)y7$hSn5vJim=%g{&s*yIclWd;)IM(MJ>xaztas*8=8LA@ zL#?KPFHB;M6{j9Qe!)4ca)uGgG=P&nH9Xe=ja{Ab_p7!lYAzqgnYHyp~ z+tPKOv3tZI^NWAJ?~&763c3%e9tsYNJbZe~$m#voU2nHjkA%-W);n@~o9U{Z{=dpxN*^Sx8Zwa1UATgIUolQJ2DbNh=OU)RK)d)8HkK37`% zcTULLA2lnU-~Kpwfad(ff3ts3cJqaf0uczaasdEu`x3$LC+B=NIB$EruKh!ooan!L3GP?2$?xqQZpN zmG?d*MPS47k8HU%{rJQBy280vk9#A6Ih#)!Y)LkMy!q3`tOr98PD2q-Le_^n4_~Zz zzIVndW8af_8jk432({0D8Bpur)id1?THElQ^%|4a5j9oYkr^~l{jStg5zXHbp7QPC zAxwyR)vD{_oj%8E3LnVdSBvky_M&UI`_C&&PyBR?PCf4QH^YWml8jpyjP{&duX(9H z{S3D2-v0ODOhbVlJ$U$Ai5C4LDj+qW*4c96PZis~+EP0ezc9^ zXYg~~X;Fz5W4-mO!8?cQDq5j8jtr)JVyiBhf3DqE+w%RwuSfEUU%rGf^fEUO?aqIe zQ1I;7@iINdI0m&~^VZO_H)7wVMsjwfTz#I_4mRzF0Z|19W zZOXcL=1Ib@-!$q*f>VCURfcw%TIYV$#9e>#JmH*y^1j}BYG}fpV^f*v$0k+@Z@yo; zXx;~sFEp$R|Kyw#5O~19>f(uLv%7AAZ|Vj^r_7v=S)B{De{#_KIiaJ)H_)!7Y4@Z0 z_%C-pQ#QEtM-BOe68)X?3u{s@-pYM;>2uX7$Bv=Pm*>q;b_P+4?`$=71HLI?7`yf2 zMz82Mx_+zJL9W@+s&U5Xn)p3^{5G9>l-|3M-pd>8Z5kZ9GC1TrIHWc>{&isd?!ffv z0jljlFVNrH-amA`e|&%cv`&BTSReK8zVQovi;jJQzxsN6dWUZIP9N;;HR{DK5bT}T zi<1vs$W#dbMSP66GCz0LW#UrS)mdfZ(4-pwyxrfn?Y#8GyTnLqZ&2iiJ;K4851vP4 zpRKXkk$w8XB6WhMmr=jrTEnLusaWaw(f4*8v*-T2E=jQz3r||*T526hUb8p&vj)#a zGP`B;uI0q}r*{KT)u)b>ui3z-)mWDuJBMxBwf)V2{{3i}B(k@_O~oxjuz8~J*g$;e zWl9|G>z10@reV&Rju)mjKQ~@9xB5q5=;^OlTGwtEraRuN`lO`XXu3<&9O23;qd++ zXUDp%R;f2Sx`7FYHRx98omWR!)-@lYTwDLm#o*-cS48b=XFi6i`It2@aF5RFls+^a zy?vY%eMq!^Ftv50p-VgPyLrsFT&+%Zzu(Tq-@g5$ceEyf({1Pzd1!Y?Urb2$?|AQZ z6fG}%&c3rjK|!5NcDYrPe7xsSd61u1S+4)4ejoFl^SfivojtqQxqx?U@Y=o~&`DRq> zOL51U9cPsj$MZMEcN05DB=U_AKLop0IXJ=e|R{vVdUIv|Sgdz+<8x;sTe5b0d$k`_=95K&SO4wbxS$ctG`OWA1zJJW_oU=1K&zyVi-MMFWo~Iz*(I;O?m_|oH zbFtZKAERv*&3_mu)fDCzy6-sv7O>iJ{>eX-AoUTww57c?yL0hErW$?o*zAWywK9OD zw1%2F^M!M;UR<|wW|r$g_k4?=>}lejU7)xYb?}m^a86Ci;U;$@zN=z)z^`C!zV@JO zWbpHUi;MfG(uwabrJ^8^Zw$udi)R9|?+Oyc53#xlW1l}f01|K+GSX70Ysu#D-P~yY zJ9^b4tv2D)f2VsPZakkn@@aA`Mm&7}hT?+eN`N5zp-A4^w!+!#i8{U3c@~Hoy}S(e z+iKS6YJ{gd#`CArh?AT4dbG^_WyO)E71^R)GO3K99S-+~o*!EpEKwx}z$14rKWFgE zT0xF|UJp1Ze$V6#W;@=~-!#4dU%>CGt1@<6gY&6>DyQ`a*VpF^iN}asu>9Nv6#J0o zza!@J-vIIQald6RO8pZj7d!7tqnFYeHyzOa_Z#XSPiz(RdiVI5hBHOA^MeG?$PCnUWp7R1s+n zFL=q`s<>oM)xS@1Yi13OB=?&LEDR4f&|tj#)8lMv#$+hsIZnWotGPMAr1J0kYh@iv zz}0>}NSzn!K1H$af4_C!3RlNCsg!>riMPIm_XIaj>@7Xe4LTVlD_o`i!+S{{)1o;= z?eWyJfh*_X#RkwTFdn&Ym-%`m8hB9+yZ+_PP5ks(V04C-|nPZRXT9xqVFiJus)({SJtUpg+6AbR2X=6S-zCgl#{s_d_n0L9}a zrCh1>|2ozXGqu0PXms{bt>BlhnbKpdwF2yK;&eP*oqv+X2xG+?u2NqDqo0r0o#sF3 zhtEZh$J4VVmjS%RykzYJR?B+(ELxYQ9ec40B%HoKKeDV|?d6y$uZs5psY3AB+$Z$R8YyJ!v)S~T$1|2Lx2M9TJ#Najy66Y1trtN*%i|kZ ztSr~e$KfoC6N}Y_?=98~RuFFGm+9+r3K6D9`+>SSm32DDL@ZspU6rFXw7=|3U9^b| zlHl)3>}Dl8w0m_HRf2Whx@bs)x^!t>1Da*a(h`gLx^qtm*PfJXOZo+K&8Smyltx|s z$oBDfUm_bw^HH0S5F1N6YS0CEKx1(x< zFVk=@(pczFh9~;>Wm=n?5jw*|b?2@4sw<>HAGNvWEBte#JuBAdm(@3z7nGe-WeS(r zzpp8(a4KQz`}T_1T!hXe6h#CbE*G42V@@8$vYQ(9CsF&XtE(G%e^S~G6BA91RwS#e zPVb#EUCdQf@!(Ygue|l|btuKnXEww&ho!Bu8wh;Hm6nWs{~&k;Eu^ePd*+**l4`T` z+VQ|Jnw@*Qjxw2{EN4Bkrq9tkb`&+F33>9n!icpj`6vZREbtOO|Jd>QyWQ6B$NEq@G`Xp%WW^x7+TiPuRrPfD7G9uI zv&}cZ^6a1&xlTNNx*REg=*PYLRXa}U^d2YQ{40-@5DI=5yQG((zVF6OW5?}0pfsxc z0KwxqMKmFrb5--NlrFf~gxTqtA;N5%o`0F?_@H4EZ>z3e%wfecn(x(s`f~zRvS=MeY2w%E+l;k|2MUL zF>xU^H$DG!eD7^3xuqL>Y(u$y@+cLh|c~x}M zUInAG`xG1E4K*b>k~wAEbJ(~;k{8#nynD#xyCP^df%{0A6!RucVhMx(`lYG^56%TX zvdtdSXtbp)UVUBgi5Q6?uAEh==|38veqIQAl&QbtQjDLYTk=Nrx)C>fXde@Nz%Vhl zh3=Z3X^e?Fw?MXyJ$ULE{K#8Qeoj1SAS{?9h+xj}=i$s#jlSzeQkmQPnbVS8BvZ!s zzs6gOXKUwEe85MZb`!AgKg&i{zDg}!{#e&5I;M|Tr|jv~APG{So_JGjm{7CvbE-HZ zO}ANF|0{%jh_u+L_~o^;q(ziu@e_i?sqHk4_0KO2^81p;hVfHto;AGnq?;Kh4&2dd zn8~1fn=3Y>K1Z~JTcyY1MP}b)pl;gk-AsQHwP*wn%<~lO;Mc(duEp^~1X^n;J;JSpUp`~9FTn!L$ z@x6Os09sRiKYE<1fY+O(?#Kvt?hBYt)lAYt%Ger1#@Heqg#D zMqsBPF%j+m+T^FDn1+pZX~i49eIKWt+2k$ykNo#o|MEkkUcAHz*>xRa*5cgSKi*eZ%Yf2>no}z);$JjFew-ak2Pj^?|mV zenEH}zjTXuqw6pMgPXJu%!7W#But5&d#oa+W1$&palCc zgV6_%=d1=1X*)gY*CzZu+}r07oz273H2ehBemG-|qf!xa^lrz~FII$$AbqKd$`!)Mh!^95i+bvqZaLm^Ee4%S<_P^s}wYXMiS<(=2N;e4Cd{MPn zO6Q+p*;3;)ThC|K@w6vDP3*W9*P@a1Wz`otzpMymv*~~VMWszq1vuK5T!7n<+0^Qt z#V~7G#QKY>!Z$dUb>`zPmP$3+=RP|buOIX0nvJ-aKdhn4{QAZ)+0Hi}`YKR9&uB&` zrgS7rHM*6Emev1l%S@(Ukx1iApI_;^X5Ia8ZnG_^tAa;vIJP6tE$mA&1=!_K?&k2@ z|Br zQ}6V?p{K?I*4KHxEMNhXSJ0)XIH?dE?W!E?qWt*i9l5r^XTN*P?yo+}Fc@4jm!+;- zW(bPcdJf6iOq&&!&G6^7HzJoY!|E zai(rtNECiWZcZF<3Ds~(Q(JIurwWAS8Lmd1s2=VS+B(=>!4kqx^Pog}=xn=`isF zcAeXMl|r@!MAIfxnlfg~pZwFOYAsSdE1U2|VU`?ksuODdUN0QzvX8z$r>}NulFYw{FDBazZYR}Eb47cRTz>tl19ddE@~ zrJBc|9b;xJG+d^)wcT{j!XKzQR>wY}epaeMl@y;6KWvyAUjou^pGq~DSvNSFd+x3Y z?myg@zNIw$qQaPN6w@*_6UJx8uaX+idM`P9cfjyzrOmsle?F8VO+J1529}Tnb+W{t zzDB<&&+9m(h7W2@cVo58Wu0kufBpD0Rp%$w?uF~TNi}(&pwn@h+{i?GQnGns4R$+i z>EiU|*Jdv8IL23bBlWb|)tp@d!s)d4Fo{5GMzs;&#jY zvel<;?@?d+Rhc?w`(xM_kpm8(0}-yeWo2+mOKYbAcipQ1Tr1_JdC(@ZRE%CIgYQJz zgZLhGiY-LrByR!q)gUxo{Ie_}NT)H?c2aAMJ`xwB?{jUUYsk)WX27D$lc#L$d`>tN z_tfUw1bKP?eFtAr!A+QI(QHMswzX;gn4oWLl3}x?EN{tg$hQJ(<+LQ52MG$Aa39CG z2T<Lt&dShIlRY=y7K!dk&GikUz88wS53?lSgOKLIg?SyxI&h{<1GN-n!w0R`?w@-#2{l&t%>^yzF7A7=i0fuf~Vc4)(>cCEqpj zaOdEW(xN9W)D6fl2SUEt$}{fBPSneu%Ab0VxeL38ezSl~94EK}YReK@1%3VeLQ55r z4Con!tZA&JVxlz`-ZoN8^{)Rp*FI&i_Od*X`8KNAnrwo227u5(?}N{)o)H{mtKSyu!-8=#2*} z(YfJ}3hs(|-9N9J>^Vc;zhc}!2L5dx1}tah!Hf{?zAqdvVt=fBH#C-&_wP^|6MG@M z+Bv>bZrl6b$NAmG7}T(T^6Eh|cktQ1%8HZ6=ZXs9?!U-r?=;_Mv^1B~2btaUt6%71 ze{GobMB$4)I{)KNL`&0GVE-(bkE$u4B4TI(;n&~vV?!+e^H3G5fOU)o=TGJG*M?sW zt7K_*n!UAB-`b?o`#JLf3-Dg0bPQfy(}qyff*JLI#f}p@m&NoH9J!7bZhJlWFnARz zJDh^%xgRQ;i9NR*IFZZZdtd~dNbR3V0?+w6263bHSzV7j;bIs6v` zXqyiOPz2GaPFj9uCa(YF-1ryIw)>nyJuj}`X~M_J#yPgFe|k(uB;-~hQm!gnoJe9) zqh8jFe;!pQjCwT9^Q+=JLaB^{CJ*T-OfBq=s(kMv(*vDWmD6OyXP|UE$Y9-vyP%~ zUU8c^epaz+nk#)c^egnGYo{JnZ@&0NTZVKja+G_D@b+bQh)qY*^6ZlyZ^Zpw9Cqdh zATae;U&4Ryn6(=HS2sjI`9=JoXmHqK@aO`RHnt(;1+IZe88?Nc;qNY=-+B}6%#qTr zvVQOM%R1Vn>{<_Aobj+iD{Q;eg43yVB{A5iDy3NiEZKHf-tO0bi6=z*W|CF5`uQoy zZ2jUNcRdn^K9U;!l&e;1p-|udVtVE^6T5@H-E}@sJ=xzD(ubU8#JaPc{V{a∨tkvzsC8kDu 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 + +XN_SERVICE_INITIALIZE(XNUDPService) + +XNUDPService::XNUDPService() : XNServiceObject(new XNUDPServicePrivate()) +{ +} + +XNUDPService::~XNUDPService() { +} + +XNUDPService::XNUDPService(PrivateType *p) : XNServiceObject(p) +{ +} + +void XNUDPService::Initialize() { + T_D(); + SuperType::Initialize(); + /* 在这里进行其它初始化 */ +} + +void XNUDPService::PrepareForExecute() { + T_D(); + SuperType::PrepareForExecute(); + /* 在这里进行其它运行前准备工作 */ +} + diff --git a/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.h b/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.h new file mode 100644 index 0000000..ec9b764 --- /dev/null +++ b/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.h @@ -0,0 +1,26 @@ +#pragma once + +#include "XNUDPService_global.h" +#include + +struct XNUDPServicePrivate; + +class XNUDPSERVICE_EXPORT XNUDPService : public XNServiceObject +{ +XN_METATYPE(XNUDPService, XNServiceObject) +XN_DECLARE_PRIVATE(XNUDPService) +public: + XNUDPService(); + virtual ~XNUDPService(); + +protected: + XNUDPService(PrivateType *p); + +public: + virtual void Initialize() override; + virtual void PrepareForExecute() override; + +}; + +XNCLASS_PTR_DECLARE(XNUDPService) + diff --git a/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.scfg b/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.scfg new file mode 100644 index 0000000..c9921b5 --- /dev/null +++ b/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService.scfg @@ -0,0 +1,10 @@ + + + XNUDPService + UDP通信服务,提供UDP数据的发送与接收接口 + Jin + 1.0.0.0 + 2025-02-04 10:00:00 + 2025-02-04 10:00:00 + + diff --git a/XNServices/XNUDPService/XNUDPService_global.h b/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService_global.h old mode 100755 new mode 100644 similarity index 50% rename from XNServices/XNUDPService/XNUDPService_global.h rename to Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService_global.h index 2b3bdb0..6ea4ab6 --- a/XNServices/XNUDPService/XNUDPService_global.h +++ b/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService_global.h @@ -2,9 +2,10 @@ #define XNUDPSERVICE_GLOBAL_H #if defined(XNUDPSERVICE_LIBRARY) -# define XNUDPSERVICE_EXPORT __attribute__((visibility("default"))) +#define XNUDPSERVICE_EXPORT __attribute__((visibility("default"))) #else -# define XNUDPSERVICE_EXPORT __attribute__((visibility("default"))) +#define XNUDPSERVICE_EXPORT __attribute__((visibility("default"))) #endif #endif // XNUDPSERVICE_GLOBAL_H + diff --git a/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService_p.h b/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService_p.h new file mode 100644 index 0000000..b94d4f2 --- /dev/null +++ b/Release/ServiceProjects/XNUDPService_1.0.0.0/XNUDPService_p.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +struct XNUDPServicePrivate : public XNServiceObjectPrivate{ +}; + diff --git a/Release/Services/XNTCPService_V1.0.0.0.scfg b/Release/Services/XNTCPService_V1.0.0.0.scfg new file mode 100644 index 0000000..70e9890 --- /dev/null +++ b/Release/Services/XNTCPService_V1.0.0.0.scfg @@ -0,0 +1,10 @@ + + + XNTCPService + TCP通信服务 + Jin + 1.0.0.0 + 2025-06-25 09:16:45 + 2025-06-25 09:16:26 + + diff --git a/Release/Configuration/C909_V1/Services/XNUDPService.scfg b/Release/Services/XNUDPService_V1.0.0.0.scfg similarity index 100% rename from Release/Configuration/C909_V1/Services/XNUDPService.scfg rename to Release/Services/XNUDPService_V1.0.0.0.scfg diff --git a/Release/Services/libXNTCPService.so.1.0.0.0 b/Release/Services/libXNTCPService.so.1.0.0.0 new file mode 100644 index 0000000000000000000000000000000000000000..04060204b79b001e4968243babda2bedee61c35d GIT binary patch literal 393072 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 // 设置服务库目录 - std::string servicePath = rootPath + "/Services"; + std::string servicePath = XNCorePath + "/Services"; GetFramework()->SetServicePath(servicePath); // 设置域ID uint32_t domainID = std::stoul(XNSim::getStringFromSqlite3(stmt, 7)); diff --git a/XNServiceGenServer/XNServiceGen.cpp b/XNServiceGenServer/XNServiceGen.cpp index 2ca830a..2d2ba0f 100644 --- a/XNServiceGenServer/XNServiceGen.cpp +++ b/XNServiceGenServer/XNServiceGen.cpp @@ -250,7 +250,7 @@ bool XNServiceGen::GenerateSourceFile() bool XNServiceGen::GenerateConfigFile() { - std::string configPath = m_codePath + "/" + m_className + ".mcfg"; + std::string configPath = m_codePath + "/" + m_className + ".scfg"; std::ofstream configFile(configPath); if (!configFile.is_open()) { return false; diff --git a/XNServiceGenServer/test/CMakeLists.txt b/XNServiceGenServer/test/CMakeLists.txt index 5e2dc7d..41182b5 100644 --- a/XNServiceGenServer/test/CMakeLists.txt +++ b/XNServiceGenServer/test/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10) -project(XNModelGenTest) +project(XNServiceGenTest) # 设置C++标准 set(CMAKE_CXX_STANDARD 11) @@ -9,13 +9,13 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) find_library(DL_LIBRARY dl) # 创建测试可执行文件 -add_executable(test_xnmodel test_xnmodel.cpp) +add_executable(test_xnservice test_xnservice.cpp) # 链接动态库 -target_link_libraries(test_xnmodel ${DL_LIBRARY}) +target_link_libraries(test_xnservice ${DL_LIBRARY}) # 设置运行时库路径 -set_target_properties(test_xnmodel PROPERTIES +set_target_properties(test_xnservice PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE INSTALL_RPATH "${CMAKE_SOURCE_DIR}/.." ) \ No newline at end of file diff --git a/XNServiceGenServer/test/test_xnmodel.cpp b/XNServiceGenServer/test/test_xnmodel.cpp deleted file mode 100644 index 0d46c44..0000000 --- a/XNServiceGenServer/test/test_xnmodel.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include -#include -#include - -// 函数指针类型定义 -typedef int (*XNModelCodeGenFunc)(const char *className, int classNameLen, const char *version, - int versionLen, const char *planeName, int planeNameLen, - char *errorMsg, int errorMsgLen); - -typedef int (*XNModelCodeZipFunc)(const char *className, int classNameLen, const char *version, - int versionLen, const char *planeName, int planeNameLen, - char *dstPath, int dstPathLen, char *errorMsg, int errorMsgLen); - -typedef int (*XNModelCodeUnzipFunc)(const char *className, int classNameLen, const char *version, - int versionLen, const char *planeName, int planeNameLen, - const char *srcPath, int srcPathLen, char *errorMsg, - int errorMsgLen); - -typedef int (*XNModelCodeCompileFunc)(const char *className, int classNameLen, const char *version, - int versionLen, const char *planeName, int planeNameLen, - char *errorMsg, int errorMsgLen); - -// 测试参数 -const char *className = "XNAerodynamics"; -const char *version = "2.0.3.5"; -const char *planeName = "C909"; - -void printResult(const std::string &testName, int result, const char *errorMsg) -{ - std::cout << testName << " 结果: " << result << std::endl; - if (result == 0) { - std::cout << "✓ " << testName << " 成功!" << std::endl; - } else { - std::cout << "✗ " << testName << " 失败!" << std::endl; - } - - if (strlen(errorMsg) > 0) { - std::cout << "错误信息: " << errorMsg << std::endl; - } - std::cout << std::endl; -} - -int main() -{ - // 动态加载.so库 - 修改路径指向build目录 - void *handle = dlopen("../../build/libXNModelGenServer.so", RTLD_LAZY); - if (!handle) { - std::cerr << "无法加载库文件: " << dlerror() << std::endl; - return -1; - } - - // 获取函数指针 - XNModelCodeGenFunc XNModelCodeGen = (XNModelCodeGenFunc)dlsym(handle, "XNModelCodeGen"); - XNModelCodeZipFunc XNModelCodeZip = (XNModelCodeZipFunc)dlsym(handle, "XNModelCodeZip"); - XNModelCodeUnzipFunc XNModelCodeUnzip = (XNModelCodeUnzipFunc)dlsym(handle, "XNModelCodeUnzip"); - XNModelCodeCompileFunc XNModelCodeCompile = - (XNModelCodeCompileFunc)dlsym(handle, "XNModelCodeCompile"); - - if (!XNModelCodeGen || !XNModelCodeZip || !XNModelCodeUnzip || !XNModelCodeCompile) { - std::cerr << "无法找到函数: " << dlerror() << std::endl; - dlclose(handle); - return -1; - } - - int classNameLen = strlen(className); - int versionLen = strlen(version); - int planeNameLen = strlen(planeName); - - // 错误消息缓冲区 - char errorMsg[1024]; - int errorMsgLen = sizeof(errorMsg); - - std::cout << "开始测试XNModelGen函数..." << std::endl; - std::cout << "参数:" << std::endl; - std::cout << " className: " << className << " (长度: " << classNameLen << ")" << std::endl; - std::cout << " version: " << version << " (长度: " << versionLen << ")" << std::endl; - std::cout << " planeName: " << planeName << " (长度: " << planeNameLen << ")" << std::endl; - std::cout << std::endl; - - // 测试1: XNModelCodeGen - std::cout << "=== 测试1: XNModelCodeGen ===" << std::endl; - memset(errorMsg, 0, sizeof(errorMsg)); - int result1 = XNModelCodeGen(className, classNameLen, version, versionLen, planeName, - planeNameLen, errorMsg, errorMsgLen); - printResult("XNModelCodeGen", result1, errorMsg); - - // 测试2: XNModelCodeZip - std::cout << "=== 测试2: XNModelCodeZip ===" << std::endl; - char dstPath[1024]; - int dstPathLen = sizeof(dstPath); - memset(errorMsg, 0, sizeof(errorMsg)); - memset(dstPath, 0, sizeof(dstPath)); - - int result2 = XNModelCodeZip(className, classNameLen, version, versionLen, planeName, - planeNameLen, dstPath, dstPathLen, errorMsg, errorMsgLen); - printResult("XNModelCodeZip", result2, errorMsg); - - if (result2 == 0 && strlen(dstPath) > 0) { - std::cout << "生成的zip文件路径: " << dstPath << std::endl; - } - - // 测试3: XNModelCodeUnzip - std::cout << "=== 测试3: XNModelCodeUnzip ===" << std::endl; - const char *srcZipPath = dstPath; // 使用上面生成的zip文件路径 - int srcZipPathLen = strlen(srcZipPath); - memset(errorMsg, 0, sizeof(errorMsg)); - - int result3 = XNModelCodeUnzip(className, classNameLen, version, versionLen, planeName, - planeNameLen, srcZipPath, srcZipPathLen, errorMsg, errorMsgLen); - printResult("XNModelCodeUnzip", result3, errorMsg); - - // 测试4: XNModelCodeCompile - std::cout << "=== 测试4: XNModelCodeCompile ===" << std::endl; - memset(errorMsg, 0, sizeof(errorMsg)); - int result4 = XNModelCodeCompile(className, classNameLen, version, versionLen, planeName, - planeNameLen, errorMsg, errorMsgLen); - printResult("XNModelCodeCompile", result4, errorMsg); - - // 清理资源 - dlclose(handle); - - std::cout << "=== 测试总结 ===" << std::endl; - std::cout << "XNModelCodeGen: " << (result1 == 0 ? "成功" : "失败") << std::endl; - std::cout << "XNModelCodeZip: " << (result2 == 0 ? "成功" : "失败") << std::endl; - std::cout << "XNModelCodeUnzip: " << (result3 == 0 ? "成功" : "失败") << std::endl; - std::cout << "XNModelCodeCompile: " << (result4 == 0 ? "成功" : "失败") << std::endl; - - return (result1 == 0 && result2 == 0 && result3 == 0 && result4 == 0) ? 0 : -1; -} \ No newline at end of file diff --git a/XNServiceGenServer/test/test_xnservice.cpp b/XNServiceGenServer/test/test_xnservice.cpp new file mode 100644 index 0000000..9fa2b0c --- /dev/null +++ b/XNServiceGenServer/test/test_xnservice.cpp @@ -0,0 +1,126 @@ +#include +#include +#include + +// 函数指针类型定义 +typedef int (*XNServiceCodeGenFunc)(const char *className, int classNameLen, const char *version, + int versionLen, char *errorMsg, int errorMsgLen); + +typedef int (*XNServiceCodeZipFunc)(const char *className, int classNameLen, const char *version, + int versionLen, char *dstPath, int dstPathLen, char *errorMsg, + int errorMsgLen); + +typedef int (*XNServiceCodeUnzipFunc)(const char *className, int classNameLen, const char *version, + int versionLen, const char *srcPath, int srcPathLen, + char *errorMsg, int errorMsgLen); + +typedef int (*XNServiceCodeCompileFunc)(const char *className, int classNameLen, + const char *version, int versionLen, char *errorMsg, + int errorMsgLen); + +// 测试参数 +const char *className = "XNUDPService"; +const char *version = "1.0.0.0"; +const char *planeName = "XNUDPServer"; + +void printResult(const std::string &testName, int result, const char *errorMsg) +{ + std::cout << testName << " 结果: " << result << std::endl; + if (result == 0) { + std::cout << "✓ " << testName << " 成功!" << std::endl; + } else { + std::cout << "✗ " << testName << " 失败!" << std::endl; + } + + if (strlen(errorMsg) > 0) { + std::cout << "错误信息: " << errorMsg << std::endl; + } + std::cout << std::endl; +} + +int main() +{ + // 动态加载.so库 - 修改路径指向build目录 + void *handle = dlopen("../../build/libXNServiceGenServer.so", RTLD_LAZY); + if (!handle) { + std::cerr << "无法加载库文件: " << dlerror() << std::endl; + return -1; + } + + // 获取函数指针 + XNServiceCodeGenFunc XNServiceCodeGen = (XNServiceCodeGenFunc)dlsym(handle, "XNServiceCodeGen"); + XNServiceCodeZipFunc XNServiceCodeZip = (XNServiceCodeZipFunc)dlsym(handle, "XNServiceCodeZip"); + XNServiceCodeUnzipFunc XNServiceCodeUnzip = + (XNServiceCodeUnzipFunc)dlsym(handle, "XNServiceCodeUnzip"); + XNServiceCodeCompileFunc XNServiceCodeCompile = + (XNServiceCodeCompileFunc)dlsym(handle, "XNServiceCodeCompile"); + + if (!XNServiceCodeGen || !XNServiceCodeZip || !XNServiceCodeUnzip || !XNServiceCodeCompile) { + std::cerr << "无法找到函数: " << dlerror() << std::endl; + dlclose(handle); + return -1; + } + + int classNameLen = strlen(className); + int versionLen = strlen(version); + + // 错误消息缓冲区 + char errorMsg[1024]; + int errorMsgLen = sizeof(errorMsg); + + std::cout << "开始测试XNModelGen函数..." << std::endl; + std::cout << "参数:" << std::endl; + std::cout << " className: " << className << " (长度: " << classNameLen << ")" << std::endl; + std::cout << " version: " << version << " (长度: " << versionLen << ")" << std::endl; + std::cout << std::endl; + + // 测试1: XNModelCodeGen + std::cout << "=== 测试1: XNModelCodeGen ===" << std::endl; + memset(errorMsg, 0, sizeof(errorMsg)); + int result1 = + XNServiceCodeGen(className, classNameLen, version, versionLen, errorMsg, errorMsgLen); + printResult("XNServiceCodeGen", result1, errorMsg); + + // 测试2: XNModelCodeZip + std::cout << "=== 测试2: XNModelCodeZip ===" << std::endl; + char dstPath[1024]; + int dstPathLen = sizeof(dstPath); + memset(errorMsg, 0, sizeof(errorMsg)); + memset(dstPath, 0, sizeof(dstPath)); + + int result2 = XNServiceCodeZip(className, classNameLen, version, versionLen, dstPath, + dstPathLen, errorMsg, errorMsgLen); + printResult("XNServiceCodeZip", result2, errorMsg); + + if (result2 == 0 && strlen(dstPath) > 0) { + std::cout << "生成的zip文件路径: " << dstPath << std::endl; + } + + // 测试3: XNModelCodeUnzip + std::cout << "=== 测试3: XNModelCodeUnzip ===" << std::endl; + const char *srcZipPath = dstPath; // 使用上面生成的zip文件路径 + int srcZipPathLen = strlen(srcZipPath); + memset(errorMsg, 0, sizeof(errorMsg)); + + int result3 = XNServiceCodeUnzip(className, classNameLen, version, versionLen, srcZipPath, + srcZipPathLen, errorMsg, errorMsgLen); + printResult("XNServiceCodeUnzip", result3, errorMsg); + + // 测试4: XNModelCodeCompile + std::cout << "=== 测试4: XNModelCodeCompile ===" << std::endl; + memset(errorMsg, 0, sizeof(errorMsg)); + int result4 = + XNServiceCodeCompile(className, classNameLen, version, versionLen, errorMsg, errorMsgLen); + printResult("XNServiceCodeCompile", result4, errorMsg); + + // 清理资源 + dlclose(handle); + + std::cout << "=== 测试总结 ===" << std::endl; + std::cout << "XNServiceCodeGen: " << (result1 == 0 ? "成功" : "失败") << std::endl; + std::cout << "XNServiceCodeZip: " << (result2 == 0 ? "成功" : "失败") << std::endl; + std::cout << "XNServiceCodeUnzip: " << (result3 == 0 ? "成功" : "失败") << std::endl; + std::cout << "XNServiceCodeCompile: " << (result4 == 0 ? "成功" : "失败") << std::endl; + + return (result1 == 0 && result2 == 0 && result3 == 0 && result4 == 0) ? 0 : -1; +} \ No newline at end of file diff --git a/XNServices/XNUDPService/.vscode/c_cpp_properties.json b/XNServices/XNUDPService/.vscode/c_cpp_properties.json deleted file mode 100755 index 0b3cbd5..0000000 --- a/XNServices/XNUDPService/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "configurations": [ - { - "compileCommands": "${workspaceFolder}/build/compile_commands.json", - "configurationProvider": "ms-vscode.cmake-tools" - } - ], - "version": 4 -} \ No newline at end of file diff --git a/XNServices/XNUDPService/.vscode/settings.json b/XNServices/XNUDPService/.vscode/settings.json deleted file mode 100644 index 9b6b487..0000000 --- a/XNServices/XNUDPService/.vscode/settings.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "files.associations": { - "cctype": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "csignal": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "ctime": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "any": "cpp", - "array": "cpp", - "atomic": "cpp", - "bit": "cpp", - "*.tcc": "cpp", - "bitset": "cpp", - "chrono": "cpp", - "codecvt": "cpp", - "compare": "cpp", - "complex": "cpp", - "concepts": "cpp", - "condition_variable": "cpp", - "cstdint": "cpp", - "deque": "cpp", - "forward_list": "cpp", - "list": "cpp", - "map": "cpp", - "set": "cpp", - "unordered_map": "cpp", - "unordered_set": "cpp", - "vector": "cpp", - "exception": "cpp", - "algorithm": "cpp", - "functional": "cpp", - "iterator": "cpp", - "memory": "cpp", - "memory_resource": "cpp", - "numeric": "cpp", - "optional": "cpp", - "random": "cpp", - "ratio": "cpp", - "regex": "cpp", - "string": "cpp", - "string_view": "cpp", - "system_error": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "utility": "cpp", - "fstream": "cpp", - "future": "cpp", - "initializer_list": "cpp", - "iomanip": "cpp", - "iosfwd": "cpp", - "iostream": "cpp", - "istream": "cpp", - "limits": "cpp", - "mutex": "cpp", - "new": "cpp", - "ostream": "cpp", - "ranges": "cpp", - "span": "cpp", - "sstream": "cpp", - "stdexcept": "cpp", - "stop_token": "cpp", - "streambuf": "cpp", - "thread": "cpp", - "cinttypes": "cpp", - "typeindex": "cpp", - "typeinfo": "cpp", - "valarray": "cpp", - "variant": "cpp" - } -} \ No newline at end of file diff --git a/XNServices/XNUDPService/CMakeLists.txt.user b/XNServices/XNUDPService/CMakeLists.txt.user deleted file mode 100755 index 3432be7..0000000 --- a/XNServices/XNUDPService/CMakeLists.txt.user +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - EnvironmentId - {5b958118-2d32-49ab-8eab-9018ac74c7d6} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - 0 - false - true - false - 2 - true - true - 0 - 8 - true - false - 1 - true - true - true - *.md, *.MD, Makefile - false - true - true - - - - ProjectExplorer.Project.PluginSettings - - - true - false - true - true - true - true - - false - - - 0 - true - - true - true - Builtin.DefaultTidyAndClazy - 5 - true - - - - true - - - true - true - - - - - ProjectExplorer.Project.Target.0 - - Desktop - Desktop Qt 6.7.2 - Desktop Qt 6.7.2 - qt.qt6.672.linux_gcc_64_kit - 0 - 0 - 0 - - Debug - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=Debug - 0 - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-Debug - - - - - all - - false - - true - 构建 - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - 构建 - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Debug - CMakeProjectManager.CMakeBuildConfiguration - - - Release - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=Release - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-Release - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-RelWithDebInfo - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo - 0 - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-Profile - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Profile - CMakeProjectManager.CMakeBuildConfiguration - - - MinSizeRel - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=MinSizeRel - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-MinSizeRel - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Minimum Size Release - CMakeProjectManager.CMakeBuildConfiguration - - 5 - - - 0 - 部署 - 部署 - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ProjectExplorer.DefaultDeployConfiguration - - 1 - - true - true - 0 - true - - 2 - - false - -e cpu-cycles --call-graph dwarf,4096 -F 250 - - ProjectExplorer.CustomExecutableRunConfiguration - - false - true - true - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 22 - - - Version - 22 - - diff --git a/XNServices/XNUDPService/XNUDPService.cpp b/XNServices/XNUDPService/XNUDPService.cpp deleted file mode 100755 index ed97f0b..0000000 --- a/XNServices/XNUDPService/XNUDPService.cpp +++ /dev/null @@ -1,229 +0,0 @@ -#include "XNUDPService.h" -#include "XNUDPService_p.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -XN_SERVICE_INITIALIZE(XNUDPService) - -XNUDPService::XNUDPService() : XNServiceObject(new XNUDPServicePrivate()) -{ -} - -XNUDPService::~XNUDPService() -{ - T_D(); - if (d->udpSocket >= 0) { - close(d->udpSocket); - d->udpSocket = -1; - } -}; - -XNUDPService::XNUDPService(PrivateType *p) : XNServiceObject(p) -{ -} - -void XNUDPService::Initialize() -{ - XNServiceObject::Initialize(); - T_D(); - if (d->_initialType == 0) { - // 读取配置文件 - std::ifstream file(GetXmlPath()); - if (!file.is_open()) { - LOG_WARNING("无法打开配置文件:%1,使用默认值", GetXmlPath().c_str()); - d->localPort = 12345; - d->targetHost = "127.0.0.1"; - d->targetPort = 54321; - return; - } - - std::stringstream buffer; - buffer << file.rdbuf(); - std::string content = buffer.str(); - file.close(); - - // 简单的XML解析 - size_t udpPos = content.find(""); - if (udpPos != std::string::npos) { - size_t localPortPos = content.find("", udpPos); - size_t targetHostPos = content.find("", udpPos); - size_t targetPortPos = content.find("", udpPos); - - if (localPortPos != std::string::npos) { - size_t endPos = content.find("", localPortPos); - d->localPort = - std::stoi(content.substr(localPortPos + 11, endPos - localPortPos - 11)); - } - if (targetHostPos != std::string::npos) { - size_t endPos = content.find("", targetHostPos); - d->targetHost = content.substr(targetHostPos + 12, endPos - targetHostPos - 12); - } - if (targetPortPos != std::string::npos) { - size_t endPos = content.find("", targetPortPos); - d->targetPort = - std::stoi(content.substr(targetPortPos + 12, endPos - targetPortPos - 12)); - } - } else { - LOG_WARNING("未找到UDP配置, 使用默认值"); - d->localPort = 12345; - d->targetHost = "127.0.0.1"; - d->targetPort = 54321; - } - } else { - try { - if (d->_otherParams.contains("LocalPort")) { - d->localPort = d->_otherParams["LocalPort"].get(); - } - if (d->_otherParams.contains("TargetHost")) { - d->targetHost = d->_otherParams["TargetHost"].get(); - } - if (d->_otherParams.contains("TargetPort")) { - d->targetPort = d->_otherParams["TargetPort"].get(); - } - LOG_INFO("UDP配置: 本地端口:%1, 目标主机:%2, 目标端口:%3", d->localPort, d->targetHost, - d->targetPort); - } catch (const std::exception &e) { - LOG_WARNING("解析JSON参数失败: %1, 使用默认值", e.what()); - d->localPort = 12345; - d->targetHost = "127.0.0.1"; - d->targetPort = 54321; - } - } -} - -void XNUDPService::PrepareForExecute() -{ - XNServiceObject::PrepareForExecute(); - T_D(); - // 初始化UDP socket - d->udpSocket = socket(AF_INET, SOCK_DGRAM, 0); - if (d->udpSocket < 0) { - LOG_WARNING("无法创建UDP socket"); - return; - } - - // 设置非阻塞模式 - int flags = fcntl(d->udpSocket, F_GETFL, 0); - fcntl(d->udpSocket, F_SETFL, flags | O_NONBLOCK); - - // 绑定本地端口 - struct sockaddr_in localAddr; - memset(&localAddr, 0, sizeof(localAddr)); - localAddr.sin_family = AF_INET; - localAddr.sin_addr.s_addr = INADDR_ANY; - localAddr.sin_port = htons(d->localPort); - - if (bind(d->udpSocket, (struct sockaddr *)&localAddr, sizeof(localAddr)) < 0) { - LOG_WARNING("UDP socket 绑定失败, 端口:%d", d->localPort); - close(d->udpSocket); - d->udpSocket = -1; - return; - } - - RegisterRTEventHandler("SendUDPData", - std::bind(&XNUDPService::SendData, this, std::placeholders::_1)); -} - -void XNUDPService::HandleIncomingData() -{ - T_D(); - if (d->udpSocket < 0) - return; - - char buffer[65536]; - struct sockaddr_in senderAddr; - socklen_t senderLen = sizeof(senderAddr); - - while (true) { - ssize_t bytesRead = recvfrom(d->udpSocket, buffer, sizeof(buffer), 0, - (struct sockaddr *)&senderAddr, &senderLen); - - if (bytesRead <= 0) { - if (errno == EAGAIN || errno == EWOULDBLOCK) { - break; // 没有更多数据 - } - LOG_WARNING("读取UDP socket失败"); - break; - } - - if (bytesRead <= 8) { - LOG_WARNING("UDP 数据包小于8字节"); - continue; - } - - // 将数据转换为XNByteArray - XNByteArray datagram; - datagram.resize(bytesRead); - memcpy(datagram.data(), buffer, bytesRead); - if (datagram[0] != 0xa6) { - LOG_WARNING("UDP 数据包头无效, 头:%1", datagram[0]); - continue; - } - - if (datagram[5] != 0x00) { - LOG_WARNING("UDP 数据包传输方向错误, 方向:%1", datagram[5]); - continue; - } - - uint16_t dataSize = ((uint16_t)datagram[6] << 8) | (uint16_t)datagram[7]; - if (dataSize != bytesRead) { - LOG_WARNING("UDP 数据包大小无效, 大小:%d, 实际大小:%zd", dataSize, bytesRead - 8); - continue; - } - - uint8_t planeHeader = datagram[1]; - uint8_t ataHeader = datagram[2]; - uint8_t modelHeader = datagram[3]; - uint8_t structHeader = datagram[4]; - - if (planeHeader == 0xc0) { //C909数据 - if (ataHeader == 0x04) { //ATA04章节数据 - if (modelHeader == 0x00 && structHeader == 0x00) { //气动输入数据 - TriggerRTEvent("C909::ATA04::AeroInput", datagram); - continue; - } else if (modelHeader == 0x01 && structHeader == 0x00) { //地操输入数据 - TriggerRTEvent("C909::ATA04::GhInput", datagram); - continue; - } else if (modelHeader == 0x02 && structHeader == 0x00) { //质量输入数据 - TriggerRTEvent("C909::ATA04::WbInput", datagram); - continue; - } - } - } else { - TriggerRTEvent("ReceiveUDPData", datagram); - } - } -} - -void XNUDPService::SendData(const std::any &data) -{ - T_D(); - if (d->udpSocket < 0) { - LOG_WARNING("UDP socket not initialized"); - return; - } - - struct sockaddr_in targetAddr; - memset(&targetAddr, 0, sizeof(targetAddr)); - targetAddr.sin_family = AF_INET; - targetAddr.sin_port = htons(d->targetPort); - inet_pton(AF_INET, d->targetHost.c_str(), &targetAddr.sin_addr); - - XNByteArray packet = std::any_cast(data); - ssize_t bytesSent = sendto(d->udpSocket, packet.data(), packet.size(), 0, - (struct sockaddr *)&targetAddr, sizeof(targetAddr)); - - if (bytesSent < 0) { - LOG_WARNING("Failed to send UDP datagram: %s", strerror(errno)); - } -} diff --git a/XNServices/XNUDPService/XNUDPService.h b/XNServices/XNUDPService/XNUDPService.h deleted file mode 100755 index 5c9a44a..0000000 --- a/XNServices/XNUDPService/XNUDPService.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once -#include "XNUDPService_global.h" -#include -#include -#include - -struct XNUDPServicePrivate; - -class XNUDPSERVICE_EXPORT XNUDPService : public XNServiceObject -{ - XN_METATYPE(XNUDPService, XNServiceObject) - XN_DECLARE_PRIVATE(XNUDPService) -public: - explicit XNUDPService(); - virtual ~XNUDPService(); - -protected: - XNUDPService(PrivateType *p); - -public: - virtual void Initialize() override; - virtual void PrepareForExecute() override; - void HandleIncomingData(); - void SendData(const std::any &data); -}; - -XNCLASS_PTR_DECLARE(XNUDPService) diff --git a/XNServices/XNUDPService/XNUDPService.scfg b/XNServices/XNUDPService/XNUDPService.scfg deleted file mode 100755 index 8fa1279..0000000 --- a/XNServices/XNUDPService/XNUDPService.scfg +++ /dev/null @@ -1,17 +0,0 @@ - - - XNUDPService - UDP通信服务 - Jin - 1.0.0 - 2025-02-04 10:00:00 - 2025-02-04 10:00:00 - - - - - 12345 - 127.0.0.1 - 54321 - - diff --git a/XNServices/XNUDPService/XNUDPService_p.h b/XNServices/XNUDPService/XNUDPService_p.h deleted file mode 100755 index 1a2a6df..0000000 --- a/XNServices/XNUDPService/XNUDPService_p.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include -#include - -struct XNUDPServicePrivate : public XNServiceObjectPrivate { - int udpSocket{-1}; - std::string targetHost; - uint16_t targetPort{0}; - uint16_t localPort{0}; -}; diff --git a/XNServices/XNUDPTestService/.vscode/c_cpp_properties.json b/XNServices/XNUDPTestService/.vscode/c_cpp_properties.json deleted file mode 100755 index 0b3cbd5..0000000 --- a/XNServices/XNUDPTestService/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "configurations": [ - { - "compileCommands": "${workspaceFolder}/build/compile_commands.json", - "configurationProvider": "ms-vscode.cmake-tools" - } - ], - "version": 4 -} \ No newline at end of file diff --git a/XNServices/XNUDPTestService/.vscode/settings.json b/XNServices/XNUDPTestService/.vscode/settings.json deleted file mode 100644 index 1507357..0000000 --- a/XNServices/XNUDPTestService/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "files.associations": { - "functional": "cpp" - } -} \ No newline at end of file diff --git a/XNServices/XNUDPTestService/CMakeLists.txt b/XNServices/XNUDPTestService/CMakeLists.txt deleted file mode 100755 index 61ba363..0000000 --- a/XNServices/XNUDPTestService/CMakeLists.txt +++ /dev/null @@ -1,65 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -project(XNUDPTestService LANGUAGES CXX) - -set(CMAKE_AUTOUIC ON) -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -# 获取环境变量 -if(DEFINED ENV{XNCore}) - set(XNCore_PATH $ENV{XNCore}) -else() - message(FATAL_ERROR "Environment variable XNCore is not set.") -endif() - -# 添加 XNCore_PATH 下的 include 目录为包含目录 -include_directories(${XNCore_PATH}/include) - -find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Network Xml) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Network Xml) - -add_library(XNUDPTestService SHARED - XNUDPTestService_global.h - XNUDPTestService.cpp - XNUDPTestService.h - XNUDPTestService_p.h -) - -target_link_libraries(XNUDPTestService PRIVATE - Qt${QT_VERSION_MAJOR}::Core - Qt${QT_VERSION_MAJOR}::Network - Qt${QT_VERSION_MAJOR}::Xml - ${XNCore_PATH}/lib/libXNCore.so - ) - -# 获取Qt库的安装路径 -get_target_property(QT_LIB_DIR Qt${QT_VERSION_MAJOR}::Core LOCATION) -get_filename_component(QT_LIB_DIR ${QT_LIB_DIR} DIRECTORY) - -# 设置rpath -set_target_properties(XNUDPTestService PROPERTIES - BUILD_WITH_INSTALL_RPATH TRUE - INSTALL_RPATH "${QT_LIB_DIR}" -) - -target_compile_definitions(XNUDPTestService PRIVATE XNUDPSERVICE_LIBRARY) - -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "${XNCore_PATH}/Services" CACHE PATH "Install path prefix" FORCE) -endif() - -include(GNUInstallDirs) -install(TARGETS XNUDPTestService - BUNDLE DESTINATION . - LIBRARY DESTINATION . - RUNTIME DESTINATION . -) - -# 添加自定义命令和目标以拷贝配置文件 -file(GLOB CONFIG_FILE "*.scfg") - -# 使用 install 命令在安装时拷贝配置文件 -install(FILES ${CONFIG_FILE} DESTINATION ${CMAKE_INSTALL_PREFIX}) diff --git a/XNServices/XNUDPTestService/CMakeLists.txt.user b/XNServices/XNUDPTestService/CMakeLists.txt.user deleted file mode 100755 index 3432be7..0000000 --- a/XNServices/XNUDPTestService/CMakeLists.txt.user +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - EnvironmentId - {5b958118-2d32-49ab-8eab-9018ac74c7d6} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - 0 - false - true - false - 2 - true - true - 0 - 8 - true - false - 1 - true - true - true - *.md, *.MD, Makefile - false - true - true - - - - ProjectExplorer.Project.PluginSettings - - - true - false - true - true - true - true - - false - - - 0 - true - - true - true - Builtin.DefaultTidyAndClazy - 5 - true - - - - true - - - true - true - - - - - ProjectExplorer.Project.Target.0 - - Desktop - Desktop Qt 6.7.2 - Desktop Qt 6.7.2 - qt.qt6.672.linux_gcc_64_kit - 0 - 0 - 0 - - Debug - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=Debug - 0 - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-Debug - - - - - all - - false - - true - 构建 - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - 构建 - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Debug - CMakeProjectManager.CMakeBuildConfiguration - - - Release - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=Release - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-Release - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-RelWithDebInfo - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo - 0 - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-Profile - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Profile - CMakeProjectManager.CMakeBuildConfiguration - - - MinSizeRel - 2 - false - - -DCMAKE_GENERATOR:STRING=Unix Makefiles --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_BUILD_TYPE:STRING=MinSizeRel - /media/jin/E/MyCode/xnsim/XNModels/XNAerodynamics/build/Desktop_Qt_6_7_2-MinSizeRel - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - 构建 - 构建 - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - 清除 - 清除 - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Minimum Size Release - CMakeProjectManager.CMakeBuildConfiguration - - 5 - - - 0 - 部署 - 部署 - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ProjectExplorer.DefaultDeployConfiguration - - 1 - - true - true - 0 - true - - 2 - - false - -e cpu-cycles --call-graph dwarf,4096 -F 250 - - ProjectExplorer.CustomExecutableRunConfiguration - - false - true - true - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 22 - - - Version - 22 - - diff --git a/XNServices/XNUDPTestService/XNUDPTestService.cpp b/XNServices/XNUDPTestService/XNUDPTestService.cpp deleted file mode 100755 index 72a533a..0000000 --- a/XNServices/XNUDPTestService/XNUDPTestService.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include "XNUDPTestService.h" -#include "XNUDPTestService_p.h" -#include -#include -#include -#include - -XN_DLL_INITIALIZE(XNUDPTestService) - -XN_REGISTER_SERVICE_BEGIN_SERVICE(XNUDPTestService) -XN_REGISTER_SERVICE_END_SERVICE(XNUDPTestService) - -XNUDPTestService::XNUDPTestService(QObject *parent) - : XNServiceObject(*new XNUDPTestServicePrivate(this), parent) -{ -} - -XNUDPTestService::~XNUDPTestService() -{ -} - -XNUDPTestService::XNUDPTestService(XNUDPTestServicePrivate &dd, QObject *parent) - : XNServiceObject(dd, parent) -{ -} - -void XNUDPTestService::OnInitialize() -{ - Q_D(XNUDPTestService); - XNServiceObject::OnInitialize(); - - // 读取配置文件 - QFile file(GetXmlPath()); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - LOG_WARNING("Failed to open config file:%1", GetXmlPath()); - return; - } - - QDomDocument doc; - if (!doc.setContent(&file)) { - file.close(); - LOG_WARNING("Failed to parse config file:%1", GetXmlPath()); - return; - } - file.close(); - - // 读取UDP配置 - QDomElement udpElement = doc.documentElement().firstChildElement("UDP"); - if (!udpElement.isNull()) { - d->localPort = udpElement.firstChildElement("LocalPort").text().toUInt(); - d->targetHost = udpElement.firstChildElement("TargetHost").text(); - d->targetPort = udpElement.firstChildElement("TargetPort").text().toUInt(); - } else { - LOG_WARNING("UDP configuration not found, using default values"); - d->localPort = 12345; - d->targetHost = "127.0.0.1"; - d->targetPort = 54321; - } -} - -void XNUDPTestService::OnPrepareForExecute() -{ - Q_D(XNUDPTestService); - XNServiceObject::OnPrepareForExecute(); - - // 初始化UDP socket - d->udpSocket = new QUdpSocket(this); - - // 绑定本地端口 - if (!d->udpSocket->bind(QHostAddress::Any, d->localPort)) { - LOG_WARNING("UDP socket bind failed on port:%1", d->localPort); - return; - } - - // 连接UDP socket的信号 - //connect(d->udpSocket, &QUdpSocket::readyRead, this, &XNUDPTestService::HandleIncomingData); - - RegisterRTEventHandler("SendTestUDPData", - std::bind(&XNUDPTestService::SendData, this, std::placeholders::_1)); -} - -void XNUDPTestService::HandleIncomingData() -{ - Q_D(XNUDPTestService); - return; - while (d->udpSocket->hasPendingDatagrams()) { - QByteArray datagram; - datagram.resize(d->udpSocket->pendingDatagramSize()); - QHostAddress sender; - quint16 senderPort; - - d->udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); - - // 处理接收到的数据 - if (datagram.size() <= 5 || datagram[0] != 0x0b || datagram[4] != datagram.size()) { - LOG_WARNING("Invalid UDP datagram received"); - continue; - } - if (datagram[1] == 0x04) { - if (datagram[2] == 0x00 && datagram[3] == 0x00) { - TriggerRTEvent("ATA04AeroInput", datagram); - continue; - } else if (datagram[2] == 0x01 && datagram[3] == 0x00) { - TriggerRTEvent("ATA04GhInput", datagram); - continue; - } else if (datagram[2] == 0x02 && datagram[3] == 0x00) { - TriggerRTEvent("ATA04WbInput", datagram); - continue; - } - } - // TODO: 根据具体需求处理其它数据 - //TriggerRTEvent("ReceiveUDPData", datagram); - } -} - -void XNUDPTestService::SendData(const QVariant &data) -{ - Q_D(XNUDPTestService); - if (!d->udpSocket) { - LOG_WARNING("UDP socket not initialized"); - return; - } - - // 将QVariant转换为字节数组 - QByteArray datagram = data.toByteArray(); - - // 发送数据 - qint64 bytesSent = - d->udpSocket->writeDatagram(datagram, QHostAddress(d->targetHost), d->targetPort); - if (bytesSent == -1) { - LOG_WARNING("Failed to send UDP datagram:%1", d->udpSocket->errorString()); - } -} diff --git a/XNServices/XNUDPTestService/XNUDPTestService.h b/XNServices/XNUDPTestService/XNUDPTestService.h deleted file mode 100755 index 0ca8f22..0000000 --- a/XNServices/XNUDPTestService/XNUDPTestService.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#include "XNUDPTestService_global.h" -#include -#include -class XNUDPTestServicePrivate; - -class XNUDPTESTSERVICE_EXPORT XNUDPTestService : public XNServiceObject -{ - Q_OBJECT - Q_DISABLE_COPY(XNUDPTestService) - Q_DECLARE_PRIVATE(XNUDPTestService) - XN_DECLARE_DDS_SERVICE() -public: - explicit XNUDPTestService(QObject *parent = nullptr); - virtual ~XNUDPTestService(); - -protected: - XNUDPTestService(XNUDPTestServicePrivate &dd, QObject *parent = nullptr); - -public slots: - virtual void OnInitialize() override; - virtual void OnPrepareForExecute() override; - void HandleIncomingData(); - -public: - void SendData(const QVariant &data); -}; - -Q_DECLARE_METATYPE(XNUDPTestService) diff --git a/XNServices/XNUDPTestService/XNUDPTestService.scfg b/XNServices/XNUDPTestService/XNUDPTestService.scfg deleted file mode 100755 index d80e723..0000000 --- a/XNServices/XNUDPTestService/XNUDPTestService.scfg +++ /dev/null @@ -1,17 +0,0 @@ - - - XNUDPTestService - UDP通信服务 - Jin - 1.0.0 - 2025-02-04 10:00:00 - 2025-02-04 10:00:00 - - - - - 54321 - 127.0.0.1 - 12345 - - diff --git a/XNServices/XNUDPTestService/XNUDPTestService_global.h b/XNServices/XNUDPTestService/XNUDPTestService_global.h deleted file mode 100755 index ad16e20..0000000 --- a/XNServices/XNUDPTestService/XNUDPTestService_global.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef XNUDPTESTSERVICE_GLOBAL_H -#define XNUDPTESTSERVICE_GLOBAL_H - -#include - -#if defined(XNUDPTESTSERVICE_LIBRARY) -# define XNUDPTESTSERVICE_EXPORT Q_DECL_EXPORT -#else -# define XNUDPTESTSERVICE_EXPORT Q_DECL_IMPORT -#endif - -#endif // XNUDPTESTSERVICE_GLOBAL_H diff --git a/XNServices/XNUDPTestService/XNUDPTestService_p.h b/XNServices/XNUDPTestService/XNUDPTestService_p.h deleted file mode 100755 index 636b0bb..0000000 --- a/XNServices/XNUDPTestService/XNUDPTestService_p.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once -#include -#include -#include - -class XNUDPTestServicePrivate : public XNServiceObjectPrivate -{ -public: - Q_DECLARE_PUBLIC(XNUDPTestService) - - XNUDPTestServicePrivate(XNUDPTestService *q) : XNServiceObjectPrivate(q) {} - - QUdpSocket *udpSocket{nullptr}; - QString targetHost; - quint16 targetPort{0}; - quint16 localPort{0}; -}; diff --git a/XNSimPortal/components/service-development.js b/XNSimPortal/components/service-development.js index e78abe7..ad58c3b 100644 --- a/XNSimPortal/components/service-development.js +++ b/XNSimPortal/components/service-development.js @@ -407,7 +407,7 @@ class ServiceDevelopment extends HTMLElement { async init() { try { - const response = await fetch('/api/services'); + const response = await fetch('/api/service-dev/services'); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } @@ -421,7 +421,7 @@ class ServiceDevelopment extends HTMLElement { async fetchServiceVersions(className, serviceName) { try { - const response = await fetch(`/api/service-versions/${encodeURIComponent(className)}`); + const response = await fetch(`/api/service-dev/service-versions/${encodeURIComponent(className)}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } @@ -466,7 +466,7 @@ class ServiceDevelopment extends HTMLElement { versionData.OtherParam = '{}'; } - const response = await fetch('/api/service-versions', { + const response = await fetch('/api/service-dev/service-versions', { method: 'POST', headers: { 'Content-Type': 'application/json' @@ -1758,7 +1758,7 @@ class ServiceDevelopment extends HTMLElement { Description: serviceData.Description || '' }; - const response = await fetch('/api/services', { + const response = await fetch('/api/service-dev/services', { method: 'POST', headers: { 'Content-Type': 'application/json' @@ -1779,31 +1779,376 @@ class ServiceDevelopment extends HTMLElement { } // 生成模板代码 - generateTemplateCode() { - console.log('生成模板代码功能'); - // TODO: 实现生成模板代码的具体功能 - alert('生成模板代码功能即将上线'); + async generateTemplateCode() { + try { + // 检查是否有当前版本数据 + if (!this.currentVersion || !this.currentVersion.ClassName || !this.currentVersion.Version) { + alert('请先保存版本信息,然后再生成模板代码'); + return; + } + + // 找到对应的按钮并更新状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('生成模板代码') || + btn.onclick && btn.onclick.toString().includes('generateTemplateCode') + ); + const originalText = button ? button.textContent : '生成模板代码'; + + if (button) { + button.textContent = '正在生成...'; + button.disabled = true; + } + + // 调用生成代码API + const response = await fetch('/api/service-dev/generate-code', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + className: this.currentVersion.ClassName, + version: this.currentVersion.Version + }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || `HTTP错误! 状态码: ${response.status}`); + } + + const result = await response.json(); + + if (result.success) { + alert(`模板代码生成成功!\n${result.message}`); + } else { + throw new Error(result.error || '生成失败'); + } + } catch (error) { + console.error('生成模板代码失败:', error); + alert(`生成模板代码失败: ${error.message}`); + } finally { + // 恢复按钮状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('正在生成...') || + btn.textContent.includes('生成模板代码') + ); + if (button) { + button.textContent = '生成模板代码'; + button.disabled = false; + } + } } // 下载模板代码 - downloadTemplateCode() { - console.log('下载模板代码功能'); - // TODO: 实现下载模板代码的具体功能 - alert('下载模板代码功能即将上线'); + async downloadTemplateCode() { + try { + // 检查是否有当前版本数据 + if (!this.currentVersion || !this.currentVersion.ClassName || !this.currentVersion.Version) { + alert('请先保存版本信息,然后再下载模板代码'); + return; + } + + // 找到对应的按钮并更新状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('下载模板代码') || + btn.onclick && btn.onclick.toString().includes('downloadTemplateCode') + ); + const originalText = button ? button.textContent : '下载模板代码'; + + if (button) { + button.textContent = '正在打包...'; + button.disabled = true; + } + + // 第一步:调用打包API + const zipResponse = await fetch('/api/service-dev/zip-code', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + className: this.currentVersion.ClassName, + version: this.currentVersion.Version + }) + }); + + if (!zipResponse.ok) { + const errorData = await zipResponse.json(); + throw new Error(errorData.error || `打包失败! 状态码: ${zipResponse.status}`); + } + + const zipResult = await zipResponse.json(); + + if (!zipResult.success) { + throw new Error(zipResult.error || '打包失败'); + } + + // 更新按钮状态为下载中 + if (button) { + button.textContent = '正在下载...'; + } + + // 第二步:调用下载API + const downloadResponse = await fetch('/api/service-dev/download-zip', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + filePath: zipResult.dstPath + }) + }); + + if (!downloadResponse.ok) { + const errorData = await downloadResponse.json(); + throw new Error(errorData.error || `下载失败! 状态码: ${downloadResponse.status}`); + } + + // 获取文件名 + const fileName = `${this.currentVersion.ClassName}_${this.currentVersion.Version}.zip`; + + // 创建下载链接 + const blob = await downloadResponse.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = fileName; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + alert(`模板代码下载成功!\n文件路径: ${zipResult.dstPath}\n文件名: ${fileName}`); + } catch (error) { + console.error('下载模板代码失败:', error); + alert(`下载模板代码失败: ${error.message}`); + } finally { + // 恢复按钮状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('正在下载...') || + btn.textContent.includes('正在打包...') || + btn.textContent.includes('下载模板代码') + ); + if (button) { + button.textContent = '下载模板代码'; + button.disabled = false; + } + } } // 上传服务代码 - uploadServiceCode() { - console.log('上传服务代码功能'); - // TODO: 实现上传服务代码的具体功能 - alert('上传服务代码功能即将上线'); + async uploadServiceCode() { + try { + // 检查是否有当前版本数据 + if (!this.currentVersion || !this.currentVersion.ClassName || !this.currentVersion.Version) { + alert('请先保存版本信息,然后再上传服务代码'); + return; + } + + // 找到对应的按钮并更新状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('上传服务代码') || + btn.onclick && btn.onclick.toString().includes('uploadServiceCode') + ); + const originalText = button ? button.textContent : '上传服务代码'; + + if (button) { + button.textContent = '选择文件中...'; + button.disabled = true; + } + + // 创建文件输入元素 + const fileInput = document.createElement('input'); + fileInput.type = 'file'; + fileInput.accept = '.zip'; + fileInput.style.display = 'none'; + + // 添加到DOM + document.body.appendChild(fileInput); + + // 监听文件选择 + fileInput.addEventListener('change', async (event) => { + const file = event.target.files[0]; + if (!file) { + // 恢复按钮状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('选择文件中...') || + btn.textContent.includes('上传服务代码') + ); + if (button) { + button.textContent = '上传服务代码'; + button.disabled = false; + } + document.body.removeChild(fileInput); + return; + } + + try { + // 验证文件类型 + if (!file.name.toLowerCase().endsWith('.zip')) { + throw new Error('请选择ZIP格式的压缩包文件'); + } + + // 更新按钮状态为上传中 + if (button) { + button.textContent = '正在上传...'; + } + + // 第一步:上传文件 + const formData = new FormData(); + formData.append('file', file); + formData.append('className', this.currentVersion.ClassName); + formData.append('version', this.currentVersion.Version); + + const uploadResponse = await fetch('/api/service-dev/upload-zip', { + method: 'POST', + body: formData + }); + + if (!uploadResponse.ok) { + const errorData = await uploadResponse.json(); + throw new Error(errorData.error || `上传失败! 状态码: ${uploadResponse.status}`); + } + + const uploadResult = await uploadResponse.json(); + + if (!uploadResult.success) { + throw new Error(uploadResult.error || '上传失败'); + } + + // 更新按钮状态为解压中 + if (button) { + button.textContent = '正在解压...'; + } + + // 第二步:解压文件 + const unzipResponse = await fetch('/api/service-dev/unzip-code', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + className: this.currentVersion.ClassName, + version: this.currentVersion.Version, + srcPath: uploadResult.filePath + }) + }); + + if (!unzipResponse.ok) { + const errorData = await unzipResponse.json(); + throw new Error(errorData.error || `解压失败! 状态码: ${unzipResponse.status}`); + } + + const unzipResult = await unzipResponse.json(); + + if (unzipResult.success) { + alert(`服务代码上传并解压成功!\n原始文件名: ${uploadResult.originalName}\n保存路径: ${uploadResult.filePath}\n${unzipResult.message}`); + } else { + throw new Error(unzipResult.error || '解压失败'); + } + + } catch (error) { + console.error('上传服务代码失败:', error); + alert(`上传服务代码失败: ${error.message}`); + } finally { + // 恢复按钮状态 + if (button) { + button.textContent = '上传服务代码'; + button.disabled = false; + } + // 清理文件输入元素 + document.body.removeChild(fileInput); + } + }); + + // 触发文件选择对话框 + fileInput.click(); + + } catch (error) { + console.error('上传服务代码失败:', error); + alert(`上传服务代码失败: ${error.message}`); + // 恢复按钮状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('选择文件中...') || + btn.textContent.includes('正在上传...') || + btn.textContent.includes('正在解压...') || + btn.textContent.includes('上传服务代码') + ); + if (button) { + button.textContent = '上传服务代码'; + button.disabled = false; + } + } } // 服务编译发布 - compileAndPublishService() { - console.log('服务编译发布功能'); - // TODO: 实现服务编译发布的具体功能 - alert('服务编译发布功能即将上线'); + async compileAndPublishService() { + try { + // 检查是否有当前版本数据 + if (!this.currentVersion || !this.currentVersion.ClassName || !this.currentVersion.Version) { + alert('请先保存版本信息,然后再编译发布服务'); + return; + } + + // 找到对应的按钮并更新状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('服务编译发布') || + btn.onclick && btn.onclick.toString().includes('compileAndPublishService') + ); + const originalText = button ? button.textContent : '服务编译发布'; + + if (button) { + button.textContent = '正在编译...'; + button.disabled = true; + } + + // 调用编译API + const response = await fetch('/api/service-dev/compile-code', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + className: this.currentVersion.ClassName, + version: this.currentVersion.Version + }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || `HTTP错误! 状态码: ${response.status}`); + } + + const result = await response.json(); + + if (result.success) { + alert(`服务编译发布成功!\n${result.message}`); + } else { + throw new Error(result.error || '编译失败'); + } + } catch (error) { + console.error('服务编译发布失败:', error); + alert(`服务编译发布失败: ${error.message}`); + } finally { + // 恢复按钮状态 + const buttons = this.shadowRoot.querySelectorAll('button'); + const button = Array.from(buttons).find(btn => + btn.textContent.includes('正在编译...') || + btn.textContent.includes('服务编译发布') + ); + if (button) { + button.textContent = '服务编译发布'; + button.disabled = false; + } + } } } diff --git a/XNSimPortal/routes/service-dev.js b/XNSimPortal/routes/service-dev.js index 1c5a731..333e90b 100644 --- a/XNSimPortal/routes/service-dev.js +++ b/XNSimPortal/routes/service-dev.js @@ -1,11 +1,20 @@ const express = require('express'); const router = express.Router(); +const multer = require('multer'); +const path = require('path'); +const fs = require('fs'); const { getServices, getServiceVersionsByClassName, saveServiceVersion, createService } = require('../utils/service-utils'); +const { + serviceCodeGen, + serviceCodeZip, + serviceCodeUnzip, + serviceCodeCompile +} = require('../utils/xnCoreService'); // 获取所有服务列表 router.get('/services', (req, res) => { @@ -105,4 +114,222 @@ router.post('/services', (req, res) => { } }); +// 生成服务代码 +router.post('/generate-code', (req, res) => { + try { + const { className, version } = req.body; + + if (!className || !version) { + return res.status(400).json({ error: '缺少必要的参数:className 和 version' }); + } + + const result = serviceCodeGen(className, version); + + if (result.includes('成功')) { + res.json({ success: true, message: result }); + } else { + res.status(500).json({ success: false, error: result }); + } + } catch (error) { + console.error(`生成服务代码失败: ${error.message}`); + res.status(500).json({ error: '生成服务代码失败', details: error.message }); + } +}); + +// 压缩服务代码 +router.post('/zip-code', (req, res) => { + try { + const { className, version } = req.body; + + if (!className || !version) { + return res.status(400).json({ error: '缺少必要的参数:className 和 version' }); + } + + const result = serviceCodeZip(className, version); + + if (result.success) { + res.json({ + success: true, + message: result.message, + dstPath: result.dstPath + }); + } else { + res.status(500).json({ success: false, error: result.message }); + } + } catch (error) { + console.error(`压缩服务代码失败: ${error.message}`); + res.status(500).json({ error: '压缩服务代码失败', details: error.message }); + } +}); + +// 解压服务代码 +router.post('/unzip-code', (req, res) => { + try { + const { className, version, srcPath } = req.body; + + if (!className || !version || !srcPath) { + return res.status(400).json({ error: '缺少必要的参数:className、version 和 srcPath' }); + } + + const result = serviceCodeUnzip(className, version, srcPath); + + if (result.includes('成功')) { + res.json({ success: true, message: result }); + } else { + res.status(500).json({ success: false, error: result }); + } + } catch (error) { + console.error(`解压服务代码失败: ${error.message}`); + res.status(500).json({ error: '解压服务代码失败', details: error.message }); + } +}); + +// 编译服务代码 +router.post('/compile-code', (req, res) => { + try { + const { className, version } = req.body; + + if (!className || !version) { + return res.status(400).json({ error: '缺少必要的参数:className 和 version' }); + } + + const result = serviceCodeCompile(className, version); + + if (result.includes('成功')) { + res.json({ success: true, message: result }); + } else { + res.status(500).json({ success: false, error: result }); + } + } catch (error) { + console.error(`编译服务代码失败: ${error.message}`); + res.status(500).json({ error: '编译服务代码失败', details: error.message }); + } +}); + +// 下载ZIP文件 +router.post('/download-zip', (req, res) => { + try { + const { filePath } = req.body; + + if (!filePath) { + return res.status(400).json({ error: '缺少文件路径参数' }); + } + + // 检查文件是否存在 + if (!fs.existsSync(filePath)) { + return res.status(404).json({ error: '文件不存在' }); + } + + // 检查文件是否为ZIP格式 + if (!filePath.toLowerCase().endsWith('.zip')) { + return res.status(400).json({ error: '只能下载ZIP格式的文件' }); + } + + // 获取文件名 + const fileName = path.basename(filePath); + + // 设置响应头 + res.setHeader('Content-Type', 'application/zip'); + res.setHeader('Content-Disposition', `attachment; filename="${fileName}"`); + + // 发送文件 + res.sendFile(filePath); + } catch (error) { + console.error(`下载ZIP文件失败: ${error.message}`); + res.status(500).json({ error: '下载ZIP文件失败', details: error.message }); + } +}); + +// 配置multer用于文件上传 +const storage = multer.diskStorage({ + destination: function (req, file, cb) { + // 获取XNCore环境变量 + const xnCorePath = process.env.XNCore || ''; + if (!xnCorePath) { + return cb(new Error('XNCore环境变量未设置')); + } + + // 创建ServiceProjects目录 + const serviceProjectsDir = path.join(xnCorePath, 'ServiceProjects'); + if (!fs.existsSync(serviceProjectsDir)) { + fs.mkdirSync(serviceProjectsDir, { recursive: true }); + } + cb(null, serviceProjectsDir); + }, + filename: function (req, file, cb) { + cb(null, file.originalname); + } +}); + +const upload = multer({ + storage: storage, + fileFilter: function (req, file, cb) { + // 只允许ZIP文件 + if (file.mimetype === 'application/zip' || file.originalname.toLowerCase().endsWith('.zip')) { + cb(null, true); + } else { + cb(new Error('只允许上传ZIP格式的文件'), false); + } + }, + limits: { + fileSize: 100 * 1024 * 1024 // 限制100MB + } +}); + +// 上传ZIP文件 +router.post('/upload-zip', upload.single('file'), (req, res) => { + try { + // 检查XNCore环境变量 + const xnCorePath = process.env.XNCore || ''; + if (!xnCorePath) { + return res.status(500).json({ error: 'XNCore环境变量未设置' }); + } + + if (!req.file) { + return res.status(400).json({ error: '没有选择文件' }); + } + + const filePath = req.file.path; + const fileName = req.file.filename; + + // 验证文件是否成功保存到ServiceProjects目录 + if (!fs.existsSync(filePath)) { + return res.status(500).json({ error: '文件上传失败,文件未保存到目标目录' }); + } + + res.json({ + success: true, + message: '文件上传成功', + filePath: filePath, + fileName: fileName, + originalName: req.file.originalname, + uploadDir: path.dirname(filePath) + }); + } catch (error) { + console.error(`上传ZIP文件失败: ${error.message}`); + res.status(500).json({ error: '上传ZIP文件失败', details: error.message }); + } +}); + +// 处理multer错误 +router.use('/upload-zip', (error, req, res, next) => { + if (error instanceof multer.MulterError) { + if (error.code === 'LIMIT_FILE_SIZE') { + return res.status(400).json({ error: '文件大小超过限制(最大100MB)' }); + } + return res.status(400).json({ error: `文件上传错误: ${error.message}` }); + } + + if (error.message === 'XNCore环境变量未设置') { + return res.status(500).json({ error: 'XNCore环境变量未设置,无法上传文件' }); + } + + if (error.message.includes('只允许上传ZIP格式的文件')) { + return res.status(400).json({ error: '只允许上传ZIP格式的文件' }); + } + + console.error('文件上传错误:', error); + res.status(500).json({ error: '文件上传失败', details: error.message }); +}); + module.exports = router; \ No newline at end of file diff --git a/XNSimPortal/server.js b/XNSimPortal/server.js index 61225a1..24ecb65 100644 --- a/XNSimPortal/server.js +++ b/XNSimPortal/server.js @@ -94,7 +94,7 @@ app.use('/api', authRoutes); app.use('/api', versionRoutes); app.use('/api/filesystem', filesystemRoutes); app.use('/api', systemInfoRoutes); -app.use('/api', serviceApiRoutes); +app.use('/api/service-dev', serviceApiRoutes); app.use('/api', ataChaptersRoutes); app.use('/api', simulationRoutes); app.use('/api/udp-monitor', udpMonitorRoutes); diff --git a/XNSimPortal/utils/xnCoreService.js b/XNSimPortal/utils/xnCoreService.js index 3bfe521..253e8b5 100644 --- a/XNSimPortal/utils/xnCoreService.js +++ b/XNSimPortal/utils/xnCoreService.js @@ -27,6 +27,10 @@ const interfaceGenLibPath = path.join(xnCorePath, 'lib', interfaceGenLibName); const modelGenLibName = `${libPrefix}XNModelGenServer${libExtension}`; const modelGenLibPath = path.join(xnCorePath, 'lib', modelGenLibName); +// ServiceGenServer库配置 +const serviceGenLibName = `${libPrefix}XNServiceGenServer${libExtension}`; +const serviceGenLibPath = path.join(xnCorePath, 'lib', serviceGenLibName); + // 定义Buffer类型 const BufferType = ref.refType(ref.types.void); const StringType = ref.types.CString; @@ -37,6 +41,7 @@ let loginLib; let monitorLib; let interfaceGenLib; let modelGenLib; +let serviceGenLib; try { loginLib = ffi.Library(loginLibPath, { @@ -115,6 +120,17 @@ try { console.error(`加载 ${modelGenLibName} 失败:`, error); } +try { + serviceGenLib = ffi.Library(serviceGenLibPath, { + 'XNServiceCodeGen': ['int', [StringType, 'int', StringType, 'int', StringType, 'int']], + 'XNServiceCodeZip': ['int', [StringType, 'int', StringType, 'int', StringType, 'int', StringType, 'int']], + 'XNServiceCodeUnzip': ['int', [StringType, 'int', StringType, 'int', StringType, 'int', StringType, 'int']], + 'XNServiceCodeCompile': ['int', [StringType, 'int', StringType, 'int', StringType, 'int']] + }); +} catch (error) { + console.error(`加载 ${serviceGenLibName} 失败:`, error); +} + // 注册进程退出时的清理函数 function performCleanup() { console.log('正在执行清理操作...'); @@ -907,11 +923,108 @@ function modelCodeCompile(className, version, planeName) { } } +// ========== XNServiceGenServer 封装函数 ========== + +// 生成服务代码 +function serviceCodeGen(className, version) { + if (!serviceGenLib) { + return '服务生成库未加载'; + } + try { + const errorMsg = Buffer.alloc(1024); + const result = serviceGenLib.XNServiceCodeGen( + className, className.length, + version, version.length, + errorMsg, errorMsg.length + ); + if (result !== 0) { + return `生成服务代码失败: ${errorMsg.toString('utf8').replace(/\0/g, '')}`; + } + return '生成服务代码成功'; + } catch (error) { + return `生成服务代码失败: ${error.message}`; + } +} + +// 压缩服务代码 +function serviceCodeZip(className, version) { + if (!serviceGenLib) { + return '服务生成库未加载'; + } + try { + const dstPath = Buffer.alloc(1024); + const errorMsg = Buffer.alloc(1024); + const result = serviceGenLib.XNServiceCodeZip( + className, className.length, + version, version.length, + dstPath, dstPath.length, + errorMsg, errorMsg.length + ); + if (result !== 0) { + return `压缩服务代码失败: ${errorMsg.toString('utf8').replace(/\0/g, '')}`; + } + return { + success: true, + dstPath: dstPath.toString('utf8').replace(/\0/g, ''), + message: '压缩服务代码成功' + }; + } catch (error) { + return { + success: false, + message: `压缩服务代码失败: ${error.message}` + }; + } +} + +// 解压服务代码 +function serviceCodeUnzip(className, version, srcPath) { + if (!serviceGenLib) { + return '服务生成库未加载'; + } + try { + const errorMsg = Buffer.alloc(1024); + const result = serviceGenLib.XNServiceCodeUnzip( + className, className.length, + version, version.length, + srcPath, srcPath.length, + errorMsg, errorMsg.length + ); + if (result !== 0) { + return `解压服务代码失败: ${errorMsg.toString('utf8').replace(/\0/g, '')}`; + } + return '解压服务代码成功'; + } catch (error) { + return `解压服务代码失败: ${error.message}`; + } +} + +// 编译服务代码 +function serviceCodeCompile(className, version) { + if (!serviceGenLib) { + return '服务生成库未加载'; + } + try { + const errorMsg = Buffer.alloc(1024); + const result = serviceGenLib.XNServiceCodeCompile( + className, className.length, + version, version.length, + errorMsg, errorMsg.length + ); + if (result !== 0) { + return `编译服务代码失败: ${errorMsg.toString('utf8').replace(/\0/g, '')}`; + } + return '编译服务代码成功'; + } catch (error) { + return `编译服务代码失败: ${error.message}`; + } +} + module.exports = { loginLib, monitorLib, interfaceGenLib, modelGenLib, + serviceGenLib, performCleanup, stringToBuffer, initializeMonitor, @@ -954,5 +1067,9 @@ module.exports = { modelCodeGen, modelCodeZip, modelCodeUnzip, - modelCodeCompile + modelCodeCompile, + serviceCodeGen, + serviceCodeZip, + serviceCodeUnzip, + serviceCodeCompile }; \ No newline at end of file