From 646284b98793a23f9099bf965e7840dd0cbb9a53 Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Thu, 25 May 2023 13:46:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/HaoYueNet/DesignTimeBuild/.dtbcache.v2 | Bin 123540 -> 123540 bytes ...264911a7-fcbf-45b9-9f01-f6b4684fb7a8.vsidx | Bin 68484 -> 0 bytes ...4276406d-9cd1-4677-b724-afe7ec1c7148.vsidx | Bin 0 -> 41298 bytes ...52ba0b33-f7ac-464a-b93d-8478ef174812.vsidx | Bin 17159 -> 0 bytes ...6a19da00-ad65-49e0-96a6-8070e9505ed2.vsidx | Bin 0 -> 44528 bytes ...d5b6b639-3bec-437c-8aa1-0d19e483a59a.vsidx | Bin 0 -> 38385 bytes ...e611adbc-4f6c-4e85-99e1-a2450d1969e8.vsidx | Bin 20133 -> 0 bytes ...f605dade-673c-4f67-ac26-a3f4c502f3b4.vsidx | Bin 0 -> 57139 bytes ...ff9b6839-1a82-4879-9ad5-c21bf2a1418b.vsidx | Bin 19025 -> 0 bytes .vs/HaoYueNet/v17/.futdcache.v2 | Bin 528 -> 1060 bytes .vs/ProjectEvaluation/haoyuenet.metadata.v5.2 | Bin 171298 -> 185297 bytes .vs/ProjectEvaluation/haoyuenet.projects.v5.2 | Bin 345868 -> 693001 bytes HaoYueNet.sln | 49 +- .../PublishProfiles/FolderProfile.pubxml | 13 + .../PublishProfiles/FolderProfile.pubxml | 13 + ProtobufCore/out/CS/ProtobufAuth.cs | 1145 +++++++++++++++++ ProtobufCore/proto/protobuf_Auth.proto | 75 ++ ProtobufCore/proto2cpp.exe | Bin 54784 -> 0 bytes ProtobufCore/update_build.bat | 6 - Simple/Client-Cli/Client-Cli.csproj | 15 + Simple/Client-Cli/Program.cs | 41 + Simple/ClientCore/App.cs | 31 + .../ClientCore.csproj} | 13 +- Simple/ClientCore/Event/DelegateClass.cs | 15 + Simple/ClientCore/Manager/AppChat.cs | 28 + Simple/ClientCore/Manager/AppLogin.cs | 18 + .../Network/NetBase.cs | 7 +- .../Network/NetworkHelper.cs | 10 +- Simple/Protobuf/Protobuf.csproj | 15 + Simple/Protobuf/ProtobufAuth.cs | 1145 +++++++++++++++++ Simple/Server/Program.cs | 20 + .../Server.csproj} | 2 +- Simple/ServerCore/Common/Helper.cs | 26 + Simple/ServerCore/Manager/ChatManager.cs | 24 + .../Manager/ClientManager.cs | 94 +- Simple/ServerCore/Manager/LogManager.cs | 20 + Simple/ServerCore/Manager/LoginManager.cs | 26 + Simple/ServerCore/Manager/ServerManager.cs | 27 + .../NetWork/IOCPNetWork.cs | 21 +- Simple/ServerCore/NetWork/NetBase.cs | 22 + Simple/ServerCore/ServerCore.csproj | 20 + Simple/SimpleClient/Program.cs | 22 - Simple/SimpleClient/StaticComm.cs | 19 - Simple/SimpleServer/Manager/ServerManager.cs | 8 - Simple/SimpleServer/Program.cs | 27 - 45 files changed, 2855 insertions(+), 162 deletions(-) delete mode 100644 .vs/HaoYueNet/FileContentIndex/264911a7-fcbf-45b9-9f01-f6b4684fb7a8.vsidx create mode 100644 .vs/HaoYueNet/FileContentIndex/4276406d-9cd1-4677-b724-afe7ec1c7148.vsidx delete mode 100644 .vs/HaoYueNet/FileContentIndex/52ba0b33-f7ac-464a-b93d-8478ef174812.vsidx create mode 100644 .vs/HaoYueNet/FileContentIndex/6a19da00-ad65-49e0-96a6-8070e9505ed2.vsidx create mode 100644 .vs/HaoYueNet/FileContentIndex/d5b6b639-3bec-437c-8aa1-0d19e483a59a.vsidx delete mode 100644 .vs/HaoYueNet/FileContentIndex/e611adbc-4f6c-4e85-99e1-a2450d1969e8.vsidx create mode 100644 .vs/HaoYueNet/FileContentIndex/f605dade-673c-4f67-ac26-a3f4c502f3b4.vsidx delete mode 100644 .vs/HaoYueNet/FileContentIndex/ff9b6839-1a82-4879-9ad5-c21bf2a1418b.vsidx create mode 100644 NetLib/HaoYueNet.ClientNetwork/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 NetLib/HaoYueNet.ServerNetwork/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 ProtobufCore/out/CS/ProtobufAuth.cs create mode 100644 ProtobufCore/proto/protobuf_Auth.proto delete mode 100644 ProtobufCore/proto2cpp.exe delete mode 100644 ProtobufCore/update_build.bat create mode 100644 Simple/Client-Cli/Client-Cli.csproj create mode 100644 Simple/Client-Cli/Program.cs create mode 100644 Simple/ClientCore/App.cs rename Simple/{SimpleClient/SimpleClient.csproj => ClientCore/ClientCore.csproj} (58%) create mode 100644 Simple/ClientCore/Event/DelegateClass.cs create mode 100644 Simple/ClientCore/Manager/AppChat.cs create mode 100644 Simple/ClientCore/Manager/AppLogin.cs rename Simple/{SimpleClient => ClientCore}/Network/NetBase.cs (75%) rename Simple/{SimpleClient => ClientCore}/Network/NetworkHelper.cs (88%) create mode 100644 Simple/Protobuf/Protobuf.csproj create mode 100644 Simple/Protobuf/ProtobufAuth.cs create mode 100644 Simple/Server/Program.cs rename Simple/{SimpleServer/SimpleServer.csproj => Server/Server.csproj} (72%) create mode 100644 Simple/ServerCore/Common/Helper.cs create mode 100644 Simple/ServerCore/Manager/ChatManager.cs rename Simple/{SimpleServer => ServerCore}/Manager/ClientManager.cs (71%) create mode 100644 Simple/ServerCore/Manager/LogManager.cs create mode 100644 Simple/ServerCore/Manager/LoginManager.cs create mode 100644 Simple/ServerCore/Manager/ServerManager.cs rename Simple/{SimpleServer => ServerCore}/NetWork/IOCPNetWork.cs (79%) create mode 100644 Simple/ServerCore/NetWork/NetBase.cs create mode 100644 Simple/ServerCore/ServerCore.csproj delete mode 100644 Simple/SimpleClient/Program.cs delete mode 100644 Simple/SimpleClient/StaticComm.cs delete mode 100644 Simple/SimpleServer/Manager/ServerManager.cs delete mode 100644 Simple/SimpleServer/Program.cs diff --git a/.vs/HaoYueNet/DesignTimeBuild/.dtbcache.v2 b/.vs/HaoYueNet/DesignTimeBuild/.dtbcache.v2 index 1a45331a4820a625b3eeadf5d8964f18117966d5..2bfafaab5657d454c9bd8edf81c582d7b329a51e 100644 GIT binary patch literal 123540 zcmeHw37lL-wf^m%WVR3jVF@5h2s?yXGnpia++;FY$Vz5HSO!8*_noAZp6;Q$CmUPX zWZwef0w}1U{(U@Go{CSDhYO-2ii!_J;XP5GYZZfnfb#!N)vfBj)ji2DQ+M?JUI(i0 zH{IX8bxz${&pr3l9aWCw?7h(I9o%s7{Pgze9jn(~>>RdWFqukp#Nr#hj!ZfqOQv(H zW7&K%mRcCg$DE0aVyT?xOkJJLZ1UpyMalFAFFTM;rt^;5+%#)$tgpGRrM0PjPG2nE z+ZXR^Z*6Msjm5oL__4RGx4pMH-ZFd6>{)Z-b9&qRX1BDq_a){u&yKhC#e1CtM7CYq z)A5bjOgg#4%XVZEo>SG_HrqM4Ba=!Y$F9K*8@ycJORUReH>WbOM9w+H|7lS+*6(e_ z*K52!FYBe_Ud}mSMKYevq{0_IoYP`bG14x{~SE*=;>bVwtlCy_H_R2Wfe-x9~+nmzUk*W$`s--_x5+_lRQc zNqhPBhNj_&4GBmwOY?#U%K_dxiDmZqkjuEgeCPoO9p@KsMfmfhgxb0lC) zUAl-ycTZ%QOXeCnx;DnL0}W6_OCj{%I!^hQWPDX*xSR)KaZ_DYa~e=fM5(kEG;Wjy z))>z<7K&(TI`3sO0}ZFgw#2&P+2laJ;q{B25s+M11J zx0lO*+jx{hS7tC9_k6{Zne^`O{OC3B+K#TFzoFaPhT_g4pRyT;P~^oKukkhvrefL7 zZ39^^mxH#shTtuq=66`DQO{x72iMHNm#^P3u>!S-%)xba$?y zZ)TT#gR=~de}U%Ve`qd$M$2$#w5%WYjF$43Y8~!Ut$|B9`^w_N-AiTSu{`R4b6_K? z1IDGSm%s=cOK+IBW8=vkE1fBg8=m!^Z0ZWL$I zh&FE&!%?PpQ*b!K)pk21Z7Rxd#@MRT4ka6ZsK7LoCfGDmiF>s%%*+-H_Mz+XYsJc3y9xug)^vX&0u*El{eHufZ8XfdHwxzi8;dwwKEpE(MOk;@7$L6(sHpU z)C{#WMaCkVPzSk%$=C*30w&`y-(aqijm7h!&Mf`PQk<`_qsf{RYReDgsr8oT1DXBB zVRk&l*^?FSOw88M2P{qZWn}K*tdq(VIBbD1oQ}s-u~_G>JWL+ls9=6CaaClzN}Fs& z>#|97@FM%=Sjv!nPL_H&3#c-s-kr&${4x)98dqHALf_&VK5li4a>kPbS;iNHd8b7u z8R{6iFdN&db;*UPi^|EI5eGpK2A1jPCgXugTh{#*kA7+k=GTHtZ#+muKbhFGZ z)G33?t~=(p`B2;6;#8)WR!(w;*AYv>L>N;G^HArO!JI|A*dFF>4CZG}k3yZdEL}x& zKxKVzSdh)+Q%PBsLS3sF`HC_Qb*W@zND~KtY!P{fI{7v7J|{Uq*~?Onhgq?ZvCuBm z`4}=OD$V(Eni7dAa3&>l54EiZa~Il%+A9U~TbP9fxiIq#wU-FyY>sSU_Yy_7cwH=y zr)B;S5b7`vm6u}G9fJ=;S3Z-)13+1$219N%E4=w7FWXEXn5wWLBY8 z4V{&6@DNoo)Y`A|3t9$3FU=LPq+jtv9gRr4mGGMro+pC^yK|^>N0F&?mZNzFt@pIS zJM@BGtyk-z_9&#IIiCq#w=)LS!@y9N=%m{k@4`ViV*0a)(6j6E@F+Q%_nizvZ}8;M znT&g@Gw^JceOjnS2rAI741Bdzd4}GDuJd|3Qc3-2KGfv}X@~rlc(DYz^a?*--QGj5 zImj6{?QMR|33W-~E2{2faRG7UsRmC@oYNO=R8IEuJH1)1U-=#m214TH78x6 zT40N`C1(-S%pK}Hg{JJ}R-eOMj7C;j%pt2=$Wo#e!tmkeJx=P%$F)-3ouNJ`R!_Zr zkNd1YEzC8n6+ZS-gvYE4&3_e}6;uT2}WrC_=$x`Hv`o z@tql!z4>SL`$o-B?Tgx2ROYc$s6&a)xFZ!y_WSiL+*@79GP`{sPw(*#Y~0>3KeZtP zbJ<2EL#VUD@*;F72d{rb-Z}qCM5v37@_LJYHB=Y<^7(eA zT{*vf|062B*}q*A>KvwgA)M9LG`9oq3ncrJc=1y`WDnICrv(u;FVv}$&I(11*OCWf z{@o6BC@qsIUOY@>w)*|+__T2$g@;G`x`~B4UGvuj(g+FLu3YAYIwke93^;&?x(pJp z>FaKbqD8ER6NP_QLwy1g%vrRXP;I=y{LIyDs7*GIb&j6H$f^|1OWwZwp~$o_*$uxI zm5I3!es9>l5q>^m$nDq|OQ${M!5?nX>P&@#p?ZxK6kLUO;8MbMOxB)oTZ>k)JC@s= zYoOPi`cj##GV4$$@CA)!)}o9<9o@_v&CX$5OFHOr73u(2q_?=;^5%|Hb(Wd0#!ENj zTc_{_g>Nbk^|3eJuYrA9JX7>X({P8F;_Q|q;E7+Vp+37jGnN|kx(5f8&v~d$bb8bb zwez7|$cb)kKAF<4E}>fX1M}!mOHdnrLR|_`F5~1BOIgY1ZpDwILVaP7vJBc2#qbpB zOqudLYhfl1tFiKg3bhT0{Q6VD978Wvu?*=^V*tQ5O6FrfR_vrSL9^p z*v8CYeqKrFs;*=|dVE@`%KPLrk)5k772m^o55XIaGbT04u!ZxyZJsk(gfN4w6y5A( zXHw%}zHbgLH!zqN^5SVhe=?1Cf|K!+5Y>y~b|GhaHG5ujb3>D}t`X0_MNGxG2*0)m ziGBYQyeQBm;%s&%lKBi=;wbDxgD3uw*Kw|mm{%S)+QbL~H7X%W$Qcfvjw)rwO&GZK%~#En*W$~k6|Q7c$aL7G<;0S84h0G-}7CvDU5uL-E{97QDqsu7$wGz@=}bb{n(MB zj2Xl)6B%uEhI5ebu+t-*QU53LhA*N&^W8G{of3Idb=f zFapXzqSraHBw}$OBckAqYT>u-M<`85k0|j(A3kt?xaA@pm2xe6j zn9^AvW?s}3l3`{L2tOHaxdkImI-A2(%Lp>*r0r)Gh^%OYb#$^J=SL4U%slON%YKWc zfh!n2GIYJl1dMe0LoUmpLKz{71HIu+W3A%HZnQXE^6zzVRytgx{YDtbrc8uJ zCu6%27UxJ2Q~Xt)3XNlNhFhj2i`;NRsN=f)at*=Ii_Wn7v5d?@K}$AFL@D5Z8KuZC zWSC%!;nqtXU(x=grMQ+*U_(z@fy4sU-WsS}VHTn&I$gHwK6OggC-^FYAzi%Bw#4e< z#$+IFJ)hEuh|UGJGm-Bq6oMeyA4gRVe%wR*?IIWeFc9j{{(LEz8P%_p?OPJeBIu@L ze}#w0Su}ai${mD?Vi;Pq-S~Zqkrfr5^$EL?M^WH4%Fg;?-^i{gIH7Z{n5hMR8z0``rcQqGIvc@5<@w zrQ!GNcd#O#vJv;fDKQmf&whI*O^mTTl%}CV>Dgb~kp{)l^TNqNzcoh_IqSm%=|FxW z#WC{iuTe!Vg|K+x^iuG;E(B_`KjkGIkVU!Rcj4T4WTxYX*Znk2MI~qb;gyjU z)nofDy(k(+2(3h2y(o5_{Z_In7_QF#oE8o~!$zpH?`2Sw8{Km2_Pe6%t2lJ_A6A%| zn4#zFn+wbwjc9ZBdxGK&0|DmjKNl&=syL=xs5%*Q4C@xLBArSj$Jy_S$_0zFZ{{n` zr6fLFm`WAi!Eti7S70iX57}e!6tG+nI43`DnHGh8v;TlbsY)HM^#?TS;)dzmeg|I~ z&&~d{PAOx?QKORE5>{m}GYbZ7b1ogPe0}AOFm2)080cLTna%#1Qr*l#Ft!l-sxtA{ zLKwixM%|)H8Cnm8WnfWsH~Cmm1zEH2wWn@XFjsA48YeA7pB$9Ejr1lT-Ae0^%e1Ya z^eL0|-dX2W2$5#LZWb~bJ}8>~*-!ag{WxgjmYocJX1{AGuN~D#>#nlpv(k}*D9;OR zk9FnqEQ)D1UbWQdTXu|(qUGY2**CZ7LZ(}2eS)d4jv_2XC$m2WmC2_lkV1$pPh?ya zgUtRc#kc7O!j9RWZz;=hVXJBT6ZAmbEBMkB1sAh#M-FC2mD{@eQ7{W*4Q0J41#;6- z!z{l4=KCIreDv(iy1$9Ie3_SGL+O4B5siw&frU_JIy@GsVcqMaphht0R|r*FD^eQg z%f8*WpqCEqWq)WeGcnq!{a(Q+!hkP@^{0MC+Ub~GVOBtyp9<3zYL!rtx$HlaGlOy2 zpZ5fE(DAqIKbZ-J+_LZLLh-MtOS8V_qzfB?wd~tYi>H9ry@1rx-}(bkx^Q@2WOQ{i zNS6H^|pn?ML9`xRAW5sZEnPH`b4RbqZ1C3~R_{HdMLMa8(X|4guO z`QSaV_ddPfpj9L*=U5{IM%Th+c!*aT`r;s;=f?&qaGYr(5(vCAXn#2wT4ZrHGdSR! zRW6Xl+m8s6m1aX3-Kk+yE|YeS2t@KIL#RU5&LP9IoQd*6b4M+rGrJ368)ml^LV5U6 zPWBM&WO(z#2qIpoU{i%qN-I0N8@dvk8~k6Kj^PX|Z{zCDz9rXpYIP1Hj`LCy_#|*U zs59HA$_($a&v-zQ&b ziKTk{AZR@ugV`*?>GUi}rh8)jiP^Jy^flC*zCOi&15=l9X-p1%<`{B!j?h;rpTBds z9|i}HgbU5PDEdv=FhEPwh$>e^I@-U;B7{)#wj#b#*-M>TQoxB!KJDduM)W?WGm!!) zwK_-nd8w#KWwV;t7fajW&u8pzmz|83?91~p(|IM7i^`qbX0*1opB_P*xkL|ap=HD+NI+z6$Sf1@d#sQHsGS`*t!ugj1# z?Iq6n1(F&6rl3r7%c!*(`+J?G+L(e0z0NMHNRbZWevImljNM;v_c~CwbzVVy8BwQT z+%D)a`brhXZ7}5&x8Yn<4;2~6h8AOwUsQS{q!vm_p~Es2cBmlptPwYW_V!p?ylr;# z+}2rM)10{$f*~oHl~h8;m1yI+Joe#>WfKK4TN)5*b0l><9&hh$Ztd%fCt4DTL|e0k z7jBf8MS=-QyZu>iAtq8m-qBa+v4?C@@|K7vq&~y{+K;p}3Xw~ScjfQAO#mE!D<`3S$pnwHp6qQF@;)EWCTncdu*B3Xq#39U~cZdFm7EE_6~J(O69 zO2dgOwAxr+D+>NoR}jirnti z3J5GTTcvGvpO|omWOL zKOCbCee78+hnG|6p?hFm+lr$-+EB%Q4_sDMp-q1oZOOl{Ogu>&s*ODk=5A`;Fmek$ z%k_C8e5DPoLhbVkK{l0LqPV3M#m2OuiFLcgFtQHYBalAW&cuc;q4o&AoI;PKvJDkv z9{uEN>=8$e_Ca$OwTkd#d5%U-^TDI_RfLK&O7iL$x7pZM+84aAR4s@;`ia)qy}FGe zR-zZg6t&`P)w2d8o7zxe?5=#K3PBl#{Ac>|tB|JibLr+$2wyUz8hcb%L-=9=h2&~& zr+z>%RvUs_U)vSQC*)TBdoU)dj`2DQ9ZF_>*8BHiWEJ`-%S(V`LksJcmw<#q_FljC z2Y)Fzp4(7k?0)M;OBhaAp^pttj%lp1zJe_)snA7P$Ab(TN?5m!2SpUp zEBmqWQz0&GL6OnVB&^$yhm}_7q*g@+%a0LUP-x`iwpqQbuZqfxDzsVdxBjK8MkBd7 zSsHtAWTTx!a+)V8O9B2Y)SZUF+vYaJw{9uejl4oHHEslWHZ-w5ZUiJ0va2yX_=}Fo zY(op{WB4$#3VqZ#7~~YDx;7NDJ`N5itk9@v94u-zerRbM>Vz>4mP#sgQ7a`VY{ag% zp@{XBQmL3ii}Q7F+fWi2+lC%vf0?ti|1A+zXi_u^mWjM=Lzgf{!7`!>ZPpa-i=fz$ zf9$VXmEMa&;PIl~s%*S)8ybYsTa^`7+ynK5jNT@*A-(k{WcoF?bNt#Oz9@=uZbRy^ zzjJHU8dFG7)@t4%epK)L+7RFRydxl?kX@~a#4kE9yA9#3uZV&o3h7t-bw~E9qma79 z$~5+9^hS*-iblV}mv*I>FNiwwm72Lc82f9jhNzHBl&b2#>2G>bw;=4uS7D~G*86WI zT%ZN&FDZz{D8w$Q4%S;>KtdtA>i^U)DuBKX@vZlNrjRA|g@W_jkUW(7qIV8Z^IuXY z81R1-vX>Z3t18w=u|AE&_F%aqnqMylwhOitv}T(l26F3Ru%L;LZ-;Q9Y!H}NwJ4A zr_mA$*_AcZm)+cMV-#AH46@d(nZw8`^eJw?&{XW`F$yJ0Zbc|Pj}lNwuB?{6cEO!O zMxjEclDH{rneVZ)fSg{UB6-L&m~I56s4|b z&HlbQOAtaT<>hRYzWrHqP(~rYvR*0mjE%l*=waP@HH@r6pOn$g4SgC48<*KoZS4E4 z4b#$x7h7nV--DKZ2^DRVW<%St@A5W6ZA--$TB|3SMfcy|oNW}^mDndk>oIUIi}#RI zmOZ6~-1==48kEf6tXuYiB8q#U=bwIGva-a&_fKReQ}Qbzg$8=n>1&{(QOEMhVn2$} z8!GLuaLP$4bTMZ&0bLs8yHm6yo{icS+N@?cp@oJjE|69p@oKe?OnF+B80jP)$Fgmhm%(5ql+#~BVin5Z5`=cU8mS?DqFl{JhJu2buMHbp^@YhY{ss5ImHk2FtCZWbsX}1y! z-PByLJhL!7+fZ+u`on_ILc@XG-aT_4Q5$-WeGAkP-9}S%p{??vQ1`Q-&&Zc1p?jt) z;e^C$eXhU6{gb<)7Gxj&>d^Z7yi`n~g<5fx`5Ce86Pc}6R#Vnj9K(w%v?>{+1mEA$ z)yC}!Z;UFIROq5?5LgRtNya_BWo$u>5x0<%IL6kWwwOW+4U`SY|FI;*+lb{aS;<*yB`92?`tC7H-4n8@qLz@i4LqeU$fUfMY`o>)xjU35D#+dn)*g-DfG* zy{Co~R%oO~kpM|-1U!mc626tUR7{~omp@k#KabK(RU-V@cgi!SBU(BkbD&+9?p-{J z;xFl*!fDr~vIc9C-l|q@k30%hN^XYr`AA`pTP0?&CMhjOA$-YwuwRpubV6not)QS% zVMk{h;#-eaP)<;xiSA#ue!(51ZD?b^e;r0xp^>ut6;u`)*-*r~-OrFw$gk$-=5J#f z^GaH`_4)bm;_kMd*?h%5^m?X*6&k5odXeIyTH2^+)@SLakV1pfUQE(xTW}j%gxHG} z1QnW;Y4f!0xD6%3Z1Z|+boEXWBFd(7u{b@cEn0<-e6?i0Q)2y{q+$U@$?Mr{k>m|x zr}R-2en~H7e-2V2rqDvY(NNfjy&yf6e(R|A$g}=NLqR+twTeN3my?3xj%Z82k~x$0 z7!;5z&^qbwqRrw9GLLv2T~a};w@yPwA;0oGEHRIbykVM#O6#77zHEVd5qJtca#_tz z#CpA;4aUhsQdxlMZwd%gs1TzU*7{p?N;o008uRJPH6Hn;{}cN`n?ec=R1AFj5vH$X zES210%`?b)4Ez!)g$~M|MZfAT>I;=;#Jx#L4`|(<6_8NKu4XFYm;ThkOdJkoqk09u zM0)Fep&?^Q{lV|53fY-!g;IY4QVJcE?MmpkI+ovPqwZL@IB4mF%<(7)Ji}fryCT7aq{l4w(q1-}_qqlL1~S>amp}~p4PIVvDnCD! zjOCokX)hnoWWCtH0QORLCO53??4I6%FQ$t>i+^nn{)#^fzhcMq;$Ov|#lHs5#kS4C zb6bMv;?Kgln7bDLD*i0~HE`utT)7&*w&A2&p$Z}TX14x@5PgGw*5?qK(48Ih95<0@ zZfc3O#af!%=gdyT=OpHMvAMlo^Q^gv*}Z-3a}#Z?E!bIeR(nfRqOEOiQ=2!ZwW%pS zC*GH6>1+1pI91K9bDZ^y=Jj+X)2*}HdX~g8XAgQSy?hVS@?>w}iv}4+17B~=WHT5myUb$cB9GS zOlCvML%5+#KGQqcCj?86?9^cd=*jeM3Kjwc*=<1_+n5>5&nr2tE7?Dg@?-%Extd6> zvQ&JZOy_aCj5F3X#?rCW_8nd}o}oPr_mGKdZHX0K3kH*^L}wzI&tyBqsSTd^Lte+3 zs_r_4lT>)2j$XUs~>d%d!a+QE7E8DZnFlpEJ#%_dpp)^g2hDw2MGSL}@4|v)=;B z)zSEF_|__B#zrQ?NP`)|NR zU2f#Vz`+oI9S!{RbKBGLwK*@_o!RWAsS~ErK>V~|un*(#3JgRW)0;QQBU95Dp8&=~~rZ<)<9&+ZCRNCRrHAkPB zBR-Rw;>g)FO3W-7NQRS&*dv?41?pkxt0 zi38E(%Qp0;cwcL8bD}-gl$h1pI;*v%y)A|*b6=t@)|N+}Paa*1mQ$^f|42Zs>t2^4o3br6<3gb{#x>bRhHi9>^X z*MJvyYR<%~h;*?!*b-JOr2RUaeLMSmy@da|Geu{~IkofyL8n&D5pZfUm+S=}*PswoJniE6c%|~JYv-01GON7X~?;bF41DiPImwa#A~>8~vs-Zf1RQV0k^XI(;W*5> zl0{gQRj~iO^mPhQvQMneEM{NQ_Ummxe=ZpIwpn zvVA*-*uLOQ#c?W*`{B6X5ZfPz{fF2AI2T3puZvRN)`bJ=W{wYzMN%jUXlp36>g**jf!s>|NxveR7Vx@^A77Pzd# zWeZ)_>9R#GTkNtWE?erd(_OaAWy@W*!euL6w#sFzU3P}c*0`+8W!)}Y>#{Rlw$5c| zx$JD0o#V1|UDo5W^IUem%htQ>0++>H*6Xsk%Mvd0T-N8Z4KCa0vZTv4xooq`QZDOv zS=wb8mkqe=LYHM-mUCI&WrHr;;^hfS@3I?QcB9K~a@ox;yTxU$1{~8-+-2W(*%L1Nj?2F5vhTU62QK@e%bs@Gk6iX+m;J%s0rXdJcx8zF8HYa)vA^K(mm&5l4zCWe*Kl}ki2W6ZzYek2ad>@*y@A6U zL+ni)-W+0o!{Kj3?C&`IeTcnlm!vT&Ua0I|~0@DGGByc3a3<5I%jv{arz|jPb1~`VmF#yLBI2PbI0>=RyPvCff z69}9Da3X;d0Zt-t62MFXGXYK}a56vxfd+s^0*wGo1eySv2{Z$=5NH8tCC~~mi@+>^ zHUez`vkA-wXeZDPFo(b#fVl+b0?Z>Y58xC6rvSW@z&im>C2%Uhy9m4s;4}iK0k{NQ zfcXUG11uo00HA|F2f#uC3jsO_bOJ0Qun1r=fyDqz2rL0uN?<9#=>$#(SVmwOz;Xi1 z0ag%L0kD$5N`O@aRspOguo~bD0%riMA+QFZi$E7ZH-T<|wFK4zoJrtJfOQ1c0h~qP zEP%5KoDFaefpY-PC2%f44}l(l^9Y;=a6W_3P2hc~L4`2g<4FDSnYy?OWNCIpkunAx@fz1FZ0x5ug0{sAK0%?E@fegR^fdPOE z30w$}C6EQk5y%1L3FH9=2@C>kA+QBtD}k*5+X!p}*iK+OzzzaC04^eM5x~U+E(W-S zz$E~e61WuLG6I(Y>?E)g;Bo?&16)Di3VNIw*cHq;8uX!2;2s+i@+{`+X>tb za0h`q0NxWphtBU5pYO%zF8;pAA|(F)2z`Da!taXkyCeLb2>&4H`07Iues6@|7vUd{ z@Q*|mW6JV79QjA-FXG=H;SWUk$0GdW;Nz=LMEL)U@J|Z46!=? zDNsKhVSDq>;LA5Z!d_lF#6KGu8seXe@XzD7hk(^Tj3(kA8&afyi|{X)B%jS*QKT_?J!6pMBC_6zSh1{3|BuFFxs2MS3K{ziN_R^+~TO($^yVQIqtV zPx`AO{YQj9W|IEulU`S(uSfVdOw#K<=?z8tW`uvsB)#F2-c+Q=BmCPY=}n*XH${3P z!oOpZ{^pbZu1MdF@b8(Vzx$-O6zRzb|Gr6jOOi0AE7nsH{sV(WBfj{D5ns`M7~xNw zw1}cbHSI?c{$rCCRkSKi`$>d9W74V=ZGxu#G{XPWq)kw?iJJCogg@R;y@rn)Y82{@*68PSNT$?Uxb$l1Zyqv`L!w zs|f$KNt>i-duiHlBK&_$+Fpt_S<`+S;lDF!lND`mP5XU>|G}i~t!Ps;?T-=uCzCcs z(e}|a7UA5a?W1V>YTC;YK4jANRkW#^_DY2R*`!TXwEZ;gFA@H#N!w4+_Sdx6BK)r= zZGS~OK+|52@Hb4_0g85@ro9>Ae=}*Ah02ySP1F7!;cuC=X^M7`ra4g_i3YoCn!(De z9js~5D6cYU2P@hknl>TICz>?Oe&yBPp=s4oUSrbUp=gI{T5XiqnKaCt<<$<;wE8HY zWYP{(w8J%RuPC2v(hgU&BQ$OAD4$}|j!?Aenzm1r?`zVgE83BoHZ{ukGigUE+6+zG zKgtgoB>E7~!dc1V=J!=xRfXvb>Wp;3OANjp~2 zj?=Wmqx=YycATOeuW8ex{792_yrP|;X)~hyD3f-AqMfK|M@RWFChbH;J4w@yjq>A6 z+DVEwQ`3%*@)JzjOhr3c(@u=?lT6yliq@cMGo$=ulh&YUjhfaF<&7q-QPG+-ttrZz zOlO=bE%xiq@uS^P>C| zlh&qavo-CVQGTjP!zxm?`gTowSCpS-(%Kbmj;6U$KHsEa1uCyLSJM_md51}xt7!8y zZDEvmnl!9l<<(Bnv_(<*Q8EX^Q4*+Uh7j!=$;2Heb`$M0uAbO%HMC&5{l+& z+6SWiE|cadTA!xf9p(3!v_3`KplKhB@(-D`4T`o=)9#J(`%KzKMN4Yhhok%>CM~IG zn>6jCQGUNk+oWilHSK{Y|CmYJtY|4s`*@Up!lb1XtzXmrUzC5+r1dLWTGRd|${#do zX+_Iu+P_Bmr%YN#(FQc_(^38zlQy7e7i!vPqx^Fw?LtM%YTD?cbyPD<%zAT-oZkYT6@F{#BEu)NxKP5X~1f6Sz9SF|0P_Vp zNxNFn-mPgri}L49+Pf9)8cq9ol>fq{U888%YT64?{-Q~{R?)80wEv3o|2ApYDcbd# z_RA=L$)sJcXg6ruucG|dChZ1AyHV4A6XpM7(r#3=n>6jWQT{uVc9WvrtZBcG@;{ig zn-%RAP5Wb%|H-7?qG-2j8jEsn(r#6>+cfRvC?7Iuw<+2#O?xHE|7_BBDcbFt_LnGs z)ui37Xm@DZYf=7JlXi!qy&l~a`2c?-dOCkI%KwJL-=q939Gog1sXCoUt9TU-6RP+` z9IC5$4Gy(cybg!@Dn1E^y{h*Nc{>x56KVpV*fDmIbtTUFligio#V zJx}<4Rd}GXf0gV(@QI%^w&i^CL&Y@(7X7L8Ab2XkegyUd*q^}u02S916haG?MhieIfmVQ71ZDwLTvJd8 zYp68V0CW-P0_Y~t4N!4SK_O(RG_n9W0y%&@fjmIPH3fyRi%Me`!0iNX2e^a49RQ`S zDaTeV;>T9;CoLoh|DGgP; z5hvh>x9^+sQ4AwXX&S|ws(3T5(jq5Syj2`&kP-hXE-dikRDKy17nUJjabXdyrbe%$ zDlROdK=#%JQgLAs1yXTg5d#RhcS}%lVUgufabYn$t12!mMuAjZSd0RxxUd)nQgLB1 z3Z&w~ViZWlg~cck*mUIhTXA8Len1yb=b5uF9iAtk8z zn8308@i8$9q~c>@6iCI##3+#e4L&Bf`#vVi0zM|E zlaI-=aD7a^Q}HpW?7g$Qy?6L>_=c=NGJQ-|?#9PtmG4usTKbfnQO>6X;Y);5$r^d+ zl85e!Q%Pk99`bsaiD%uF9e7X(l^u9c2$dapPze8PcHp^NQrUfnib3p`DM4lT9a#>Q-FFPrSY`Jeqd+RV?-&JA*?q?-kjm~m zMuAjz-!TfLvipuvAeG&Bi~_0bzGD8jsrMmam)^}ExRJOvaR&79b1%qi(TZhi(Ph!%Pw`}HqU;avf!?2|5g&}E--+2>sLZ!UY-WskV*QI|dDvTwNTahHA9Wly^7`(l5V zAG_=smp$vU=Un!@%YNaq7ibd}_A9aR%3oaey35{l@y@BsCm>BkIvD9tq$7}yLOK@d zc%&1NPDW}$YDH>C>O@+Mv=nJM(rTnNNZm+hA)SM?9w~+tN9so!K*}R+L)w9~6X^=1 zYmsh1x)JFXq}!0*gYhgM|$w*U>rXuZ!bRg0}NJk)>^ z2}mtSvyf&Zor<&+X&KTAq*X{~Aax;~iF6iH57PNaF{A`iA5s!&Gg2C90O>-cL8NU+ z7a?7Ov=iw{q^psxMY3v8aK)MI%LrC`_J&5!vq|YEdg!DzEhmpRF z^cAG9Aw7olIMR=ioGw!~MEVob%h((1R_w$@pReKb4(y}V ziPnPcvc$nb6cqe5K_2$1LbLcV_Q6_&y{>Rz)3KM;BE$i~<4^1ZK_9e*1HefDjRa^@ zhgJgEivdww0OkUmO5jw0`2^+zbQ0(USWI9s!07}|2k0iy4R9`ja{($&lC7Oz{3O{26%+PBLI&Q zcog6<0*?WFlfX9t9w+cPz!L?E)g;6?&B z0^CC27J%Cc+zxOjfja^2CU7^vJp}FnxR=1a01ps&0N~>UJ`V6n0-pr<6oF3xe3rmx z0Ujdo5Wp7*d;#EL0uKW`O5jm|ZxQ$wz!LM z;>TCh=LyyP#A<$0HJ@3{Pp%%KuNta(V>NH8=FQc-wR$P*!`J}8Z=^rzgqy1Q&DH#t zYJMwDz*o0b^Ig^ac5%WT)s)?P#OIy(#5C>nA$BN#FR1UUW_|qq`0~yBFmx;%;vcBS z7;{%OzZ*Z^1FZh(of0vyDB1_B`G-szh8^(_!;YfeTg~q?X&96wtx?lHT+KgX(lBI6 zTC1jgw3^><(&Xks5PYttJzmYfZPGB@$*Y~JY2UBrKQL(+3?*&8rv0c|jEp~#1wt7A z`~yIzCO%s&MovYxx2FBBn*ZLU zVVIV*b2W`u^C6RlL0r<#*R;P>^VduohImQq)3i6L`I{yU697p|YFea*M{A7Agz15# zr8I3~4X-h2m^?^YM$_tQc)dx()I!p-nl`0|?_<(1@sPAZP20bQPcvzlmPp!GO*^E9 zA8OJtX_2%Yns#IjpJCE4rIEDDHSL%hew<0WT+y!5v=eLiNhS@`A$hgyHLbCRH=8s} zmL%;)O`BE2XPY!kr6lb(O*^HApK8)D(UP<~HEn(k?=WeYhDq98nzp!xFEMGDq)FNb zHEnqfUun`Xg_E@VG_9+Kcbl~P6zzUZTUW!+Hffmt$*Vn}Y3JAQ^(GCILrMFDrp0S` zpGm{iQPLjNw9PfV-=tw;DQTbAv|J6(n>0*2CGBBN+g8K3n>0*HCG8PSyR?SyG-;T! zO4_5Ec4ZB}%A`H2Xpd>y^)>tklZNT8yxKQ4?Y%YpeI^Z)VM%*j(>_?k?=@+dDoffE zn)W~q|CmX`L|W3mt7-pI!yhzhm}X1blbZI~8vc+;!z5hNp4PN4)$oT+8m8!y_ESy! zN)7*-Ny7wQ(w@__uh;Nzm^4i9CGB}l`%Vr2u1Uk>U(#OGv>(*)ADXlm744Ur_Dl_b z)}&$KAg}ftP5XHbf5D_-Ss`h^)3ldr_^(YG79EoIM@{>m8vc8eh9!xly{u`hhI5mK z1&gG;s%fv*@YhTlmNSy}x~9EZ!~bT|u-K8bw=^wU%d2XQQ3gvPNvoQm#?zWwUTe~@ zP?EG7O`BZHrqaPp&NO^es^K9h!pu%x|H(>B%e%_a@YWJz;1 zEnCZTCJl>dNn5CC+iLj^lZGX>q%G03OKSOLCJhU4Nn56ASJv{YO&XTxlD1OQuB+uY zm^3WjCG8ANyS0|zX40^!!P5W#u|C~vKIYQDhn)any{$-N}V}+z$ zsA*rR<&T&&m@*_Sr)iJX@^6?l7&;_vi>5tZ%fD^XURk+i!t?X_C|x=DlCN7C-mw7=K#w@ez0LXvi`rcJ2h6YGpI z3nn8;dqC6b>iAwJ4F)Ai`?#h}spI>aG?<$t?UR~zU>%=k(qN2|v`=Z;A$9yvlLk|j zq3iYB<%~DHnWbOY|>x^leC95t+kG~nKYQlB<)d6 zn_I_EF=;TMN!qtG?X)`XnlzZ#B<%@JTU5svn=}~TB<*{ewych?FljK&N!nAIwz`h5 zF=;T|N!rtzc2*rf+oZv)Cuz@U+WB=nX3}8vleA|wEm6lklLnKZr2SmeHr4UXCJhEd zNqbS#2I_d$q`{mhX)kG7zK(A(X)rcQ+8;FS;yQkbNrNd;(q7iIE9>~xCJly4Nqa@p zuB+qMn>3g)CGAyBySa|vYSLijl(aWA?LBq;y(SGNP)U1B)9$Y0A2Mk$kV;zBL^TDy zua1A%q``bDX*HVmu{!>7lLq6eq)pPa2kZF1nlzYRC2fkPeXfo_WYS=mm9(jv_N6-h zut|g2R?-gAw6E6jM@<@xx{`Ldrae~2ziHB7@|Cn>H0_Bx{vDGBgRrC>uW3)!@gJHr zn2ROtL{0lq9sh|*gE3js8Z_;>I{v&#gQ;24S~cy3I{uiAzx8Vul)wm{SVR>z%sW0Zk;T+%u< zZBjj-Y|>ynm$W6Cws$?>$E3luE@{g&?ZA3I&7{HbE@>+@?a+FDm`Q_KUeeZR+Vpxp z!=%AzFKOMHc6>cQ!KA^YFKO#Et)ZSbnKT&uCGA{IYpLh0CJm1RB<(y+n^VtEF==>M zAZZt9+PmucX(kPi5+tox(-zkAPLqZQ4U*<*+R}P{x=F)h2ua(dX)EjbYLkYC6q1(K zwC;Mo)}-MPhNNXR?c92Po=L+44oTahY3u9x1ttxTKO}9NruEhH4JHi_Mv> z>q!482A@%lE*K`&A^zn_{NE?xISH`(hhHV+M`_wuChrq-NTz!!3LiQk&3bV>{x_4K>mFxv`o=YkM@_nwl0(w#TE*x*M$X;pbeV@b5JvZN#y8&O$bS65Y4QdwMHQC#0Rva&u_ zR$p9ER#DejUS3sF(pXm!s;(bVQC!;CP!_AJY$zRBF(MW#DJ?B2t&deyRgH|sswzqw ztD+Ur`ub>HRYO^2d0AamSz}#YLsflwWkXd}MQEMrvF2Db6>~iosz!1u>&mJ|mW-$@ z9#Iu5Lp~epaN6REy1I(uisFWmBP)uFM~tW|u566e6_<~wt7xo?Rn%9MR>Z2R%1T2+ zr^ix>=J~NPsZ^|`u6fb)SYs?1Ypsu^#>Gwb!;q>*u9vC&%lPiBzJoy=cn#nKg-ItY}PITM^DwTUk_GR9u^c1{!~O(3%-@ zqsg|ShUVr_ZX^Ggp&9A(I0tteGCP(`#S^Wg)p?4FcN|jF(cIpVjE!!Mb+jj=%{va6 z)=}3Suiq=SXl7zwtaWr7lP!%n&sEXE=l-Ji+R@GOQMk_~- zC}|v7(pXhmS5lAi*;w3&Lef|ngI-)!R#{)xP*+@EXRXUu$Ut?j#?rE~lE(7Vic)y4 zylg~Oc>@Y1zR?&fscWn#uB?MkN7UEXHCBx*9#LO{KPyWs>MBM?E1`_2lq5A&G&EEe z*GH@B>PEz(CFR8^@g-Fal@(=;(FR<2bunCOIAujcRar@SX?aOw39h=jhO(;Sk+`}% zNjfm?anlFsl2KB^MXXmvqwhaf*P>x2R27oCESCzthW5?qERUa*mwMwTYY>-@zUQH5 zXK|rkk4xkFyxD+F_Wk$iTIlMXE6gf1N9rpoOGcu?E*>$`n!;!7d%DGMk~EcWmE>tS zzhh;ez`TRIcd9+w+7L}PC_~D|OwP#^&!Mz?N{iGTWyMX6`ueK6lCs9e`i9bmhK7m~ zOP#du2^aTxQl}C=hn=G~`?AKH(7tfftP~nawPh7$WmUCBtsPCeSr%GYRmBJmlT)OqP%eJSb;W~4{}==2eJ{~gl2XD(%$0Jt<>GOw4$o60u6|& zhSFGhLuHi}<@5612~GVkvbe(Bac$qkr{+y) zsyAandVNC*ApKH|yChGg zzm3zcHixpto6!D2`)q7SBRVtAJ$^o$;Z107og#g-7v3_j`~XsJc*~peMV#nEg7!^K zqPZE}Wpu7m=vB1VcO=p4bIR6YHh8f1Qf96fPBVLE*5SeA%kW(0^r|v8yz@EgkLAy5^YraZYA?2X%E@k&6Z3 zKaF9hLWw|2As z44am!clw^^F8=N=3(DnO4O!RoMpY2WEW4b?&P})91nZ%>nLTdsX|Jzz*Rc#khGiov zDx*A(9V@GF>ZQKtvu8IO=~k}(D|`7?-f%qn&Nn_>HknuI)qhnSc2-8ia58Zesn7&GkKtJv%s^Zspqt*k)Un-8yqo z8$Y6)A4|5!lFICruxdSwO{g)mdwpLC!oz$63m~ICJJ*+LmC;9G)wz2;!3l^4@9EaY zcvDAGH4>CXzFApM@rJAO&>Yvl9x(0DmA*@L>5{7Z#ItOo@0sf2RZm(~rc{0RJR1vq z-~$B{4|Sc6m8#-o%tIeY`>NNsAxqU@F9(zSuD)`U|2kXf`=Dx<+Yug8^Szp@VCyZm zF~u!Z$ynMyD_@q(!SZ+cq7bH!@C&l^?U1wO37Z7B>4wX`H!m7_l5?8vZ& z=V01Zy)R13IUAqy=3(A^&Kp(9d<8A|K@U&rRo1u`v%cX?C)*3WyRPio~b4XG+9@Zq*`@n}mbD&Te4;Qspd;q|5B zg770(zSf{%^3{VM)A`zff4JprRaMJeBL~pX?8&9BduJp%lJ(Bbc@xgDG^TxyHRxXW zxXUw~zIPaU@~n|yRd_aICvVPqOa$G8_BxBB({vo&#MZ_Hn-0Y?lvac5g-^S*r}_SE zZ5d1sd+@H2a+Sm2f`>A=YFaXZ07<7NE#zNOwH~(Sj2_TE9)w3#3#IRQ>%p0xyk(&& zl5?@EHi|sC@Rr{+7lZ?c@sHH^CSDH?Os7{}<=b=l;Py~xK{l`Q znTQOSlZ<09Lb-Gj!mIePkV?XioCI!&g<3L{&ThULgtK>I!^3&QO*E?nn*hAfgYUb^ zi}HeM(3Nu%vf4P9nMgD{HA5BWc^5XAsd1pV0Gu2^ZhCU4n;X?k-Hmh8_oq`mGz3)X zO}7EuM{eF4!NUaLKx=F;nd-@lT+5|1WpV46N&JXtr1Ak!*=#h-XZywL~RC zHFsxgPkN8`!i{E^*-}m0x?nP5IMka|m5~@bjT^GTH$V1hPSkO@kMq2#CfXe1XmO_v z*TiPI8S6Ggx}kgF&o15NLxRbk;mU3jth_ppv&Rke03LW57q{Om->kU#Z>4zC!5eOh zTMK#PHk7Ty_|GGG!!1o~32(T0rW#Auv8-_;L*4c*zOAa8pT)NjOV#qKYIN%m^YY`1 z&f)@Vsp6!5Tz0yp{E$wXN>w^7Dj96tee&qbTmV0P0PgScS7-O%$QiwfbI}}hwc~R~ zk@1Y9PS-x&K|#2$?>Xwxef}I-x3ClYKB8@0FcYWp^R~7m2A1%AsAw!+-Dr-htMpd3 zC$X^^vEKO5d|-K7Fu5`unK8MXtKdVi3{za@@8CR1D3AU|hukWT|I2db9K}vSdBVo5wkGvxB~^z)M^ZpX8HI(j{}^ z)ZTc>?07yEOnSSziYvCjpXR_1p3*y}o}WD+lBYeHXjTq-j&mcIZVzw}o_m39^*x7O zJ=bFnUxHQZWj5XSz^ty9tj9E$w^!NN>ugK{&3rx$!i#UQiFbp^PmiwT@)-DdtYSR*!4YIJ^C=6 zVpTzX$i@95-h9l)v(a?+T*Gss?U+AEJ^J#tn!6G~cyoC$8S2rSo(x%^u)V$y`*kgp z6A^M5ZI3m~Xip^Z?zsBhK4oJvmWeWHFah{4fUI=JB+68~oIz4dZPYXFvk*oAo6Z=DugC ztMf9XS6w~-fI;hPbqQsm@Htkwz49%an4T_m>PQeC`!1NYcjqxqyUji#w$t}JQr9|d zR%=VN6_r_oQ@&@kCu7kTRkS@f+Kf;D?h7DCT|JjEv8uFv&z|gLPxd`t)$rt`cBm3J8oXJPP3{-;rRmi5%G6qHV4A)v zozHvWsxHqx2LzLD!&RPi4`lBQVk>ik_RbVc1jX&)$=WOUJMEH{AHp>U)HVnvv4%?| zv9;Oo!i4sAHT|eHnA0xpCpO7P(oR|Vu~@??p}r?OgFoD4Z^VUU6Ha^J)wDRFXwQ^> z{c8*L`=-l`@{u~+3rCq3Q~(+1&QWd#wq$P&8VhVlllEl4Ei z@fbCSM`@>8BiZUG-t5Ar<=LF_ahGod;pbh0$zdiJcS)~m|5UTVzF!6zTslocL&vZQ z?p zHd_lke388}J$7hEETvyl-IvWs_@eh{5FXniw{6-`kemImw%i zi#QvBx5B2@@gir=OuBr%Nh{3rc>pf5E(s>_hMzo%RQJM5*-GHg{ju(tp4q-=Ts+mr z!C>y~#0{|P4hq6~mj{zA!+G7MSb6daHW~Pu6CRUXJ1%7-vfM=aSO6{yAnDzEi<5p8 zC%x})eHz{Gv=55LV?8PLOI*#CH_JE?@)CjRch7eNaC-oGU4h3v=~a1sh%*;>FT(33-@K02ovC4_g}92E8cka@CMtm|S)5!*p_0;dqDb1^!l~r-1R? z*T%cQ@3BpJE3#WO2ycE6Ozyh(W`^8-#5VihKk8C0Q)*Jj6dvyIIG_6Qma{48=JDfh zp7v3Q0Q?s~HoCaZpGcLBzX$Ux_24nb=wubh?6~ezwwW%2=~Vg9Abi;Oi>n78`ckW$ z`FWO$pEE(8GWBKV;^z=SxUTP4QMa!1WaA&4ja1O#aWWwf&qsjwT9W#SSgL4NYbx64 zyc_g2TaN3|`4xO20DoHF!k+a{-q^w9*>ta-gs7)Hf6tcNSDCk+#iVOgdHsn^AF?8M z>u&_$?*Ov7vJUoU^B2x$;B%Qt@#GfeudrbK#%5$fGkr7&r}aJM-8hX?{s*T#6v4*A zCivJh@siQv$z@{_fYy}>z-?B3F!|}mcSe5JU}JqBMltW$y84)arH18AKzA6(e=Gox z1(5!3oaITsRluGK{E@E|p@~?{HkoL1?=4)!*JO+G3VAnR5bo=Hrn+%orcAAcOj!ds zXGdo1)?u2}t}`MYL+!@>W5r(!z}eQi!DM|UJ)Sx1)<8}~;NiNSBASe2T@U9WUzgev ze%6P3;ZO6)djPrU-j$wQSnG4S-GDcP*?ECKJ{IRqO1PcEjoFYqL-rrwGJ*vj_75Tf zC+_P`jG)xl+FMXVa==(|una zYXivIN_o}I+9+hr+J!fxIg_iX>>7j1W7u@h1vveUAiUi7Y_61-(~0IfHVeb&nd;4= zeOjD1zG~R3?$Bj-XaMfC#<8W~$1l4}vbtf7S7j#XM!p*z-~Fs9nUNsexJNKqGKyyA z^eP`tR3#*9KCEeu##@}blXTDB#5l)-@Y-I%WTHE-r88kof+cGTZ>F)$zE>i~T`29G zhEy6^SMO1Zhl zS-ivAmu*U|nc2TUgK+Hruw)$&OcqzlyOPC&g0Z=BZcRBa{@1O9TT_9|1km^LvU1MU z8EfE-^?h0Mm2&3z*7`()ybapOhGqHo%mr2WAWCafF!@|5-%7ewtLf0}-JiTw&(yY9 z>x`5$QBIQ{yUXlVO$Ol9P~Y>mQvUSjZ57?MjHYkTH>@-qgj4&T!T`N<<LhiPxE z{4iA3C#R9bDSre$((axeMZC2>-WGLgMR_jS^>Erpy&h8vex$u?GL^RiA3MrmXHLAe zA+f-@Hf7kTdn^d=^*vYJU61K9;LTOwBgL+JloG@AkU(uB@c4v1~*|WwfEJ zvOHE+VYLO5moC2RnwQ|8j%j~*mgBV!$tY*RbXXlQYAQ-6U9DNDEZX zf^O{jE%F7sknPA!2EM~V_-#=zx#-bvoQuV5C-Bz}eeN*Uz_JcwlQQRUcVrMgJUp1Z z_2@%?JXHXVq@J$f6wj8S3i%P7HEHkpe5jaSc+ZTiu#RLCeQ&z<x)Y|{#h(V@r6s{6Jd>9s;ns0%BRhA8>9MAc=4jHK_4s(U=({^~1$*JWE_c}z zgUMMY?{!VEx^Pa0Me9^H+xMbvUaE63qq-XXtC<^ZZH?)b&rf5EXYl4MHtSxrUFcpo z)Vyc|$du{JF3D7GJeRW){PpS@<6F~tY{R{1qL3nX#Fxl$Xi(Rv2{TU{$tJ!YgvEJ#j=Gf)3e=S>*C&~s8ga@w= zCMPTKAeV=}58HHm0Xyz8+K)0AWjM{#gzkm^%)5kj1N*P!VUvN6 zUU`b9@}n~K7@LyOE0YMquTKP%m+sw{&dXCUWj(|8vUvM;d^9bgSFL=OZ9dO7yWYdo zXb_HkDVU6{z>#joUg3+2Ao#!AjH=_4I+D9ur?p$Zi#r7%tsPFSTnm#g;Z+*_c_m^xd z_>P^|)}%ze^SI6WiYl^#Ova<{gF$y84cOlRtQ&eV@=G4L6*W=ESl zVlzA1^cv8=vZdeIl1!tO2GVZha#vPVyyK9Xj^_4`WNdV6tfL)ECha(6T1Q=Tyne6P zqM3<#vDVRD-1bK>nK0azPNS-C{>_;Pd~aFC?9fD_yIs?lgZ^VxaPms#!cW|`-EZT8JNY))!=gG&3U*B4;`ImzHBGbihD zPB!GtV9rk8U!XR9yVw|;z__SVYR`9?g2wRtefH(lmQej!^3d_gFQ z%-@=wvkjY&%MC|*;~4X1xLq*GHXI|#-jS1C#3lj{!C@0>oi*+iO9+m97=&j^f=PA; z&q%VZQZ^BIe~6vnOy%R5ilm%>iAuI7ogx!U`)s8vCA0FjMh26i3_k0Up`F=OEa(R` z>=Zn^H(os)&9?T}Piwj$X~(U6{bXK-y9JY*436uXn=x!F@R{}5E&Gg1)Z@ihy?#Rt z+mYwdzQbvc^}eW$4<;8GJm$~E9&9J@W`lA^OS8{k6WNlq7z`i?kL?vqPBMAS$jM~3 zl$C1}Zjl15*O2#KmcFAwxNK@L8OiK2e@3inuw_kWgMmNBQiW++w0*AXBFthN@)*lK z6ok9x1e5wq?s8MVFWU%whD+BCMjf`l%8{q$-$y0Hts;W(+5y4js9UeOiB-S;L2Rw> zt2#?VUboT5MpMqjV^Kc+6wjw=53Tgw(To%fAi3fkPr{Tp>XBTlfz!OMo?2{NEER8R zor!U-&>F*A6ZMJK#&}bx-|!AKx!O+nuzqd~3+*)Q6dHo#3!=%^Q6*KyB|BnM${Vef z78j2Q^&j5Y(cFw#&gZ6}wXxrShO+-qlQD?*}UwHTun{vBdTTf*rqVFAe)xbtB|Eo<+NgT#iZ_U7Fx%0KATsSb>-UQ+2s6HWpZLmOGi83 z&Ya)%1Q@qY<`k?lmrqHws>L8s;j8?g#?}|Es{GGri`A>4nV3^ogbvHD<(9TYD@vF1 zUd))*)(=Gq~RKc4L-Xr`|lzXh-J+u}k$%Yb|t~wW_?$?-MzX{*?Ji=q$!s^_^nX z75JG5CDc8FtTqt6K3Dnm6!TSA#@Moc|GY4Ca5jHwu06AR>m8SjE^zbW9Wx8Orz)1r zCe>YBJGEugi{loxMqAK}k-0h5J?S1c+mcPQ&fKJ_qA{t~5~mi->b0>)bD}QV9AE4- z+G?WB7)_1pe!8`cbDPyRqu;zLxQnvsUB5lEb#p)GH>)jl*SmhhNz5}bDJF87u!}fmhHa72ER`uB|XE3aCm(}(Y zjCj1+Wp>fR>|VNl>ngWdt*QL>#wFwPW9gP+Rx1s^W#dki_4>l|6VKtrkfoWH)!Qzz zJQ1C1%m&sl11o!D1l=jm9a+9;CdXP5$wiaZOQM|dRWV?UyiSX^!BmDTD4yl~I)>H7 zlkFlrtF=X~LD%5;7_%Y8qAkv^n$-@y#4;9!4$Y=Bl^J7FfGpR5%B1)8wZiP)zm>hc zJ7UR2?g)RVDVsiZN{UlPypP%fZ{_3Rxnm`(*Be{m_;trrR@=3%DVY%?%cWoJ`FrwN z_vYkiT+QQG=nI_4O7WNyZHe(Rqs<*0=;8c?S#3MAOCcQ8VXVVc7|Ob1r@6iBto8^v zk7j!&tG!z`I6Zb~M=YfWTC>}kW^?YOe(Elp)q9X*PR%YiEfIHuoC~x2d_b8@Algj) zne}Q7Zz|O^$K{cFb|39>?qF|%T6Q@7VBfj=vtCeP83V%$ohX{@w)1sHXXszj>)@u)wSJ}QNimBPLdh}s*S0bxV>!#Kn0$WZrK=vE;p5@EO#Z!nOt)J^D zuUQQs@|afn%<4$2$JqFmxNa$C_34;tapEKu)8cuuoz;OI)BGgFuC_0T@z$yOvN}fT zwZ0I~g?OY=Up(0f7uCao9=nrc?a>B)@~sNjs>-d|63XhZs3*4^tzisBXSc7+?dXnV zJ%&7-m*yNdXF0oRla4l7jYc@pDXS{G>DL_#Lrb#yv{jxO>30S)Ex}$GI{JT;1kZxq zS$<9^UQm~DRtGG_l6f6v_r|1G6Z0&(T$tSkv1HR+`Bypk)KyZPOw&3^UHZtYarf;&7-_|j5m+-<_T=F8x`bF7hhG@lWa7r(G7m1Mi^G>%OGgFq+E!6B6xy)-66k5+^-^uP2$lkRI3a#g}?_}4qD$g&n!K?;CrDr4d zPcL7X<;%#;XV>}I3$2$p+gWXir?c(O%U)=`!e+Dj7N=>}tUq4k6lAylG92%VDYD*R z`&oT%?eTz0iE0~IZ?fH0RL-3g$P~~|QRTVawvA8h1!3cN(#5a9$q4hR$X}!Z) z&F<~VYuKGPw=la?4ESfAE%Z&*5O{zP9$`D}*{l{BwqneGn&t6xUt2w^5qLbkmFfd! z_31xbSw-=nY|5MxvM{^vwy{b7@TKx-RwHuQrf>SL!t7R?%AS8Rzg6H>SQW?0`|R&> zwVBnnwaTi@DpzQ|#|E?d06cBb_(ii5pRFqwnV78*(~C9mE66)xwk)NL;lynYAkHb&MR&a;9cF&xz}ssuBThxQ$gC(+G|7RQqHYAUxCW<$q< z#2O~g7>ilP8pb!o5nqHC$T9svQB3{eoGEmYWuCj+TVJYSUMI3K6tspi=HSo1-Z2VqjUC}y7brKHfhgL8jMIz6NMk`m{~ zNYxelVxC1<4&h@2{F;uDR@ z@RcH-VG#L8_IK2;?~k6(#du6A6>F($UNoj1t8UkIv?JC8rx>2$6ut{yzNX&n!WY)_ zUg|rHnlh`Tvbe%}kaI9p$Aivlo0-6*5wRMcbdj&e_Vfge*2A3PM|tx&e`iWJbNV@H z@YOw;Ci3$o758@QNtKWlWeQ|y=!&4WhPu$u43h`?Yyz^L;@mvPhBwq6nC8rJHZHNC zwHc45Q<+^eu@$vq+BKnJ`r9g~em>sw8n+h;a14`WAu!0p4b=dO5eGMBVoE~|-8dHI z@V}fa(VcS9Kd&M;PD2}Zb1;7Gj zGo0u)6(f?qP|}x$^)Ak7eZVK48(0OAT)}LrAF{dj-kHl#N%ve`z#(mm*bB|E_L%h% zXZK^?Ea%N9y!n(jU-IT3y!o0p-}2@=-q^e$-h9uSPTu^$n;&`eGjD$7&F{SVH*c&k zHeudGc$3GQe!N+OH*4}{E#3^^%|PA^;>`xU8O)oFc(Vy_w&2Z{ycx=yVc3K=*R?(J zl<60BD?#@PN>icr(=9;VEZ}BQC^80j%5C`MTj}ECyJb&R&GmGl36*u%mq`BdqqH-i!W= z{Qb8)H?N8^G_Sf#5A$ovPr-A>hVu1%v7teG#M+J9NGddQWh)%Nhq^Pb8zVWGO*0m{ zAiT?%26QXYV?~whG{dk%p=poDQoF9zf5?zsj06qg*Cj_6I+c8(LIBN(H8<8^p0g+> z4R6?Wm*M`u`8w}xiSO>{IjjE!NGH;zDko^CPyCAUgo6DtR* zJPbE7fn@J8yr-Op26xy02<44wT~sq|Rw#ns#oKQ5xj&RIt-i|M{d}P^_XkYR@ZGfm z>N8p!I=o90&8;|xII-D7X0&%S#1plp#igaS_^BJ6`C_8YwR*^*w#J#(wstJ08;`a$ zRF-?j3s86Sbb%VtH}9f$)$&P&W@W{CXbU$FJi|>_`)FxM3Ra?mce=Q}tKhqS_rI&p z{oh~t`g|iKS9QSE)T2BXwOZznEA_#0$e9K?-E|LbEJvJI@YMXJ>M@x2Th1}hw>Fe- zDGQTRP4bnVZxKe$)YMPj9)8ca2>-XuTSU*5xBt5B1Rjh18>4;ckV^wKGtSnm6P*PbwqOPj0q`0E2zA73mA5m3N9Ia@qj5ais zSNNXE^{#rzaKAw-C0$b#`6>q0j#9Pe*X^PjaBg?OcVUw%vfMf1&0@B;uj9+#U|kLljz5hRJrvQY@i-eNzpsfrluQ$0=eRx7ou8429Mm z-%=NA(C^FeOMagF*!pQ)xT>F>_C% zwMiwrpPQMr^~(#AuzbDvY-oU*61_2AFGmJVOie_8HC`WYZ(cM`Eg%DTseuqAFvmHs zxFZz7B*3AZy|9cWyHt$;hBoC+uZkm>0S`B0RnwTh-q0N7T1a}qz-!0(7xoSUPIRQd*T3Zxe~IhvdoONQ2zG%Kg( zO-anb!aJe$q!Qy#b)$JvXz+w+Y6eEO@mu)EgF+iPA56p4SB;5e%j86B94AkOw(zw> zb<>-FXmQGh#+lr2u45cP&L^g(#~a4zsfR;rh%qi6Sd_*o6w?!l_Hpr~Q({`VjIQAZ zCWQ*H!VId=`7tKez(&2{zKBaH);mb)0~@Me7unQlbWc9mIFLTUAmfPgwuz_HvC_RB z-~HKh1N40^jqzQ(x!d|i>7A-W57|3^{8!(1Ec=H1_4oT@q=Nr#1lck#6e@%ag=_`c z8Zr#B4P;x$c988MJ3w}X>;x%-42Kj$N+6|>GDtb30#XU7f{cKSgz%!zqp;r@vI}H0 zZFe+uw!JIFYkxQV&1n$ZD{HqJ-x&iL3#ox*N(ZN#)5__?Xj5n$_ME=)`t#lO=X{dCgRwhki8(2Ad?|eAX6dJAbUfmLuNo`LS{i`LpUvSAp1b} zh3p6Ehx7fI>!fdO=(cr?onz@Z@&n}>*jWR+*t_|Goi#8<1LN&I{JM*|0Ipx!>X({5BBLc>32i+x-Z^X#}w#1)~oAX+t%vOD}nTGjbF?S&fn zlYPD)Sg3&uHE@Z2xgWSt14}hrLUbc8_1Sah5L9U;((0-bEpDF$?+K&K0IrbTBN(CGr5 zBha}P{mFpN5$HUD&bR0S13FKj3kAB!qKggaLV+$3=u(R=GoVWZx?G?uEV|NwE*EI2 zKv!AxX9HR)(A5H6W6`w+bhSX&33Rn=SgQ0o@?b?E>9t(cK1gyFm8| z^f!whFrfPcdPty0EPBj<9unvYfu6SL83TGkpl1bo-l7)`=vjeY5$H9G-Y}q71bS1T zw=H_dfZi17J%Qf0=mP_KPoNJ4`pBY>4d_FGmJ9TWMV}hba)G`S=pPn+Z9rcN^sPYO zS!5f~w*rws-&@paKqSx)0{v*w&j$2^K)(v~yG8#tpkD>D!edmkg2G{ng#ERz71p(H zoapwcjv8Bno6l>$|TX`}&F3N%WfUBa}h0gV!@riBL7A<$t09TBFZ4CpX{juzB zpxlVQBlL?!vxwkLfaY8FoAXuXvYZcWI#IzG+dyP2$dSpaDgfWs*KPG1F8^clt8;gXtV*1 z5@?J-H4z$TKw|_NFVG$lnrJ}d1=>rXNfDZ2Kzj)^O`yFaG{ba06N_&=CS18KI*L=m>$92y|S8jyIqs0-Y$($q_o$ zfKC+XG=a{D&{+m_nn33YbY6rmFraes1~?iT0)fgXy`BL?(`1ZOA*2cOmaV-iLeu`4I9E{S}KOkR0zJ`1Q`4;j|$afGMLXhtvosb_OKSF+j{0#X8@-N7*kl!G`L;isL8}c7W zD7Ts{NEi}<x0ts%o8J3)p+N+4yBa!4g)1Y{IsXUJ&CZjdpM z8pwFa9*_x;y&#hylOa~74Zo3ZLb*iG!T_r`ATPJ18h_Q69V?C>BdjvbyBwPM$b$3NID?6fb$?!r!cDRxUc z?d!0+uG78+yIVT#W!Nq2w4cWA=}!9<>|W`#-^T9kPWuz=KIyc-!|uCI`(N1os}qkZ zcIQnet;GtSNzhpR7j4zPQ3dRuV7gjJ%K!31; zu>i`AKtX?>)@B8LdRmVa^xJ7ORyKpOB`fHE(=b-h$EF=vK|h*?vx2@dRj`8oFpXjb zeO?;F3i`D)o)z?6X)jjLKc#7`pbtuOSV2FN4q)W~C=INjzesUb&?lr;R?zRGLs>!J zj@ns4|BV)~f<788W(EB)I)arWpe$hp{V6(;74(_tG*-|rqH|e6--j+@1^pYkf)(^( z=xSEbPoW!FL0^P!VFmpSx|8_gFz& zojzv;?Q!~+6|}kOM^@0TraxHu14<+Z3fjk1zzW*Hv>q#H=hDWkpe;*}%W(Dm>s$m6fM4HG7+JUq;D`@M{Y*x^oqy1Syn~kEZpj}2Et7>^U zwrA5PxqHyxbLlhwXvq?ek>J>cD>-&yfW$7W^UJ#Sx+->IAgbp?fqSp% zv3(2O z4b0ZSes--Nn5}_>G*D+B)M>}mhtTlP*vzy%t( z*uK;cT%dugG;pnbgCDp`12=2nHv4uzaI*&P)4=`qgMQ#X4LqcQ$L%Nmz(X2%MguR{ zFZqFIH1Mhh-n8HG1Fve}Lk)av|J@IKsDaNk@TL8=ANWiI-)i8Ww(SSL)xh@}_|g8! z4}7nIUp4T%{ck_;s{>Gop92m;%PwqDuH|EJOhao3RAABC2DFAi>j*T+q74ja9f39# zXbX#m7|^ByZ6(k)7HwxhTM1MwP^m=~22?E22!Tdgw6g(?5NKC{sx2C0K)VVwUZ4pU z?PWmY1)3_*bc<#g&{To;5$FJm4l$&uX0lg;Bn*zO+OK%&{n*zNf(7U? zkV_vL(E9>?B+#e1Do(-EM52!bQgI4gkLx%EFN8jh`iDM_zNAW>I0Y|+{*MExIE6tt zla5pHLg*Vgkcv}aNXIF7A%C0#Lpn~u3!zWtoJqwgFr?!Yyb$_Z4y57~7}9YHUI=|L z2U2kg4Cy!pFXWF?U`WR)cp>!RoHMC71%`B-f)_&n&Vf{%0z*1Z!3+806d2NR3SP(` zr@)YoQ}9CmI0c4uoPrlZe^UKJe^URzI!?h0p|9ycDo$Y#&ZOfMypTUmfgv5I;Dyjf zbI0c4uoPrnf$0;zR;}pD* zKTd%m9jD-h(3e*K(3jTE)Nu-42>omaQgI4{a3&q6;Dyi!cOVs~z>tnp@IvUHJCKS~ zVCYpRPQeSI@9sb=I0c4u zoPrm^xP=3$I0c4uoPrm^n1%zb7ty6a$0>LrjCVNDW&-Ir1uwLjKq^jQ5X|W~1uukg z66Z`RPJtmEr{IPBaS9CSI0Y|+@fGJxDo%kR9jD-hF!tg=Do%kR9jD-h{Ba5l={N;1 z3ZDR?1&oB~5SPQeQuA!kx? z3JmEu1ux`}Q(#EPDR?1&oB~5SPQeTL;}jUuaSC3@AE&^Oj#KbL{x}7Obew`0^2aGK zq~jF45XS%1KaBrrkLx%EFXWF?;4|qs1uukgL+4B?PJtmEr{IPBaS9CSI0Y~CfSgIi zDKMnt6ugi>PJtmEr{IPBaS9CSI0Y|+F--LjW0=|nI!?h0VSLkpRGh*foJq$icp-nB z0z*1Z!3+806d2NR3SP(`r@)YoQ}9CmI0c4uoPrnnLlUmy6d2NR3SP(`r@)YoQ}9Cm zI0c4uoPrnf$0;zR;}pD*KTd%m9jD-h{Ba5l={N;1tnp@IwAL1%`B-f*10~DKMnt6ugi>PJtmEr{IPBaS9CSI0Y}{k5gbs z$0>Lrf1JYOy^2#3YHAn?(Daw(KYRvv}(NQE#gwFe?Z zU|^@cA$A*f+C#A$+G%f(-S(aKXzWIJ+IwQRXQw?IyV-bLgdH9s&BYGSi4xc)@Zbl# z`JMJr*d5hrpMc#7o%YGto!n`kiQSo<_668o&}m-M5|g_t<^kY5$7dujqsEv-l96#jn8%o(0f4 ztYEyKHf054`m_}*7`LZlRxmbCBUr)sJMGE}#@J~*D;P(osjOhEoc3V_F=3j|3dViuC{{4G zOUJT;@mo5D6^zl+m8@VKmTqGOW36-#D;Q6uzp;WbQ+kjUjEmAEtYGYu9%lvPoAeYb z7{jDzS;06Zy}$~_BI#vTFy2V7v4Sy0dXp858`3+hU~G`yX9eSb7~X?|F}~HY3aeuk zP!d+hD!>U@jaA@T8#q=W!LbUPNvy)=m}g-N6{|1=9hK#c}=w; zPif#;`*}a`lm=eb!0Yx~e&A&dysLrt?T`GxyBb)ofluwv{lIb!e5HYJY!nXfrSp{r ze%8P*_HTaRX9pmQ9~qL=|i1!@xL z5R2v+P?JC@fjTT&Xh11}4io4|i&hG{bc+E}2?1sW2jLIc`dpsfVjI!xOd&{hKNAW%`5h8xfh0+k3<9;ONdDiLUe zKs$$Nv;mC}Xg7hzhN;GYb`xm4K)Z)&4+9!6&;)@dhG{PYnjp|5fhLD(ssT+BXm5dL zglU!m?Jdw8f%Xa0eg-s0pjv?r4AVgdR4Y(ap!zVy3@9p4qd;@Rbcg{p3e+r6YnT!S z)GW}U0;R&#Za{|$v_POmVOnfJ3j{h`pd-Vy#DESL=oo>H57P+-bc{eJ33N)BPBWmB z1Ug-yGsASY0i7<;xdQzuOy?QUxdL4v&_!Xo#DFdk=u&|$57QL}bg4i~1-dFsR~yh$ zfvy$kx-k94fUXtjMuBb)(_anfMuBb>==Lz(VL-PEbdNyyhH04r-6POL0zDq4Ck*Hz zfu0iR*)Tn4Ku-zuqCl^N=`{m-QJ^;jdMixt7|rTYe+=k%fx;1eZ;3=G2QSBZ z?=4|@o|Gq0euUOApge&J1X?pfYZ*|1Km!C?H$npqXn;WL3$#Im1{=`&0&OhNCK1}y zfHoFrh(LuA+RA{22(*nr+efI#fVL5+SfH{9l^am8Kve>bjL^;oR3*@^0__%|Y6IF; zps@n&9-#>aG*+NJ1)3b8sRp#CK+^@98KGGQG+m(C0__u_{S0WfK(zuL7@>m=s8*n; zK=l!d8BkQ9xdI&$p=JY`E6~vb9TTBr4d`frP7vs%2%Ta;CkS-9KxaniYy&!7pmPNJ zQ-sbppmPMeP@sz=bg2PdDA45sT^XUP4Cr!!t`X?E2>r!?t`X=af&LnyTMg(Yfo>P* z&IsLQK(`BYk3jcE=sp9wN1*!!dN4u{8_@j%Ju1-S5qi>q9u??mfu4)d3kLMGKragP za)e$rpce&tQ=qpa^o{|&DbTwDy&s_u4d`8gJ`(8T2rW0Dj|BQepub1xGXwfWpf3da zM})pMpf3daMxcL2=sN@YMj#TXGeSQY5DD~?KtD(57X$i9pnnPUTZH~&K>rfR;y2g1 zBN5J_9K5;it?Vs%b3Ip}{2W@tfN}-uFVLDfw3Y$&7ifS$>*mlv0~#REAc5A;p$!aZ zkU$#=v`G$aYCszaw1q%Ja%f8f+CreA0&SH;!whJsK-&tmeGctlK-&tmlR(3BsMvsZ z5~xg|iX5skpfZ6*2sA2(b}^t40_`eLbqgS0S%Mw!yRIZ6Vu1wukHh z*%49%DTb6nDj-#mk&s;=yF#iVV;QR zJ~v|(^6*(cq#tArNPh^&E)-zTu?uTrpN?HPGj}Y;n`x~)wOiZS4RCh7v?pOVsnec`-Ap|F!46M^ny|xTpBC&|@Eixb z1)cWc*d5+!AA{X7o%Si%oziKah22@5_C?rT)M;Od-Ibm8P1xPkY2S(6ot^f**xlP{ zKaAbOo%U1MJ=JNyjNQwf_Pf}<+i5SyZh5Eu6?R{B+CO9WGhY1XC;S$k@b_m0L;Ez4 z6%60gCahqHp0;FVODMxw83tu1Rxq4S<*Z=HoOWXc!{W3%E4xFP#0rMDX$C78!lr#$ z!7w#NS&2evVgTEj`W( zhGXeDRxspBFSCMSReFmR44u+vtYCPQzG4MKp!5?f80MtkSiw*xMk=9TxRUZ&$%nEw zD;Rd9^;p5sB5lkHh7W0TRxm_JTd}eglpR>XP#=}BQUYZJD;Tn)-B{TT%6L{V^hOg{ z!SEVQVg*BJv^OhzLz%-0hQg?p6%2P#lobqVQ6noDwxVWMFf>JnvT`Vt1*~9*i4JE4 z!$@=tD;O%GlUTuU5S`8nhJ5H;RxqqX7qEh%8@iMg4A0O~RxkuZ*Rq0P7P^rY45iSm ztYEl=?qLN(BJ>a|81|s2Si#T+y~qlNFX#HPBbAU^sz@6$}~B zkE~!=fPQBMU4IJmtNCHPnxDrCy6{xM3cBeufE9GbX?<4E-KLFML6@3_u!3$gZNmz> z##GD-y1!J#3c9$oD=X;6(pXl;LfMlQbVq4AE7PIOW(D0!s$~UTM~bq7?jg-(1zkWo zniX{O=mb{Km7~*HL3fSLVdWes7qWtG7hTQ@x>j@zE9gGaO{}1cM7OhYJCu7^L05-ed*c3woCobRp;?R?tnLPgp@$fWBY_&3*cY6*TFI zSV6O$eqsepbNUx6XnvE$lMtYZO}VU~8BP6JK~tFqu!80=4PpgNUfPHiG;3)KR?u{% zp{$^JO53u6CMfO13YwWz#tNE}G=dd07im{k&?KaBtf1LPd$NM29Zh8g%{Q9G3YutC z%Ll1#$y>d~15eU}f2-GcU@zbw<{onPPou-htA4Cr z<3afY^C>wFq19_V(CRfFX!RNow0eyPTD`^ttzP4SRIK2jh9{oIB_0H6EO~ z6VRHX)oVP++zH;I;-5Q#{q*4KH6B*4@gQ?2c#F!~@KHR!s<01{;#d^Fc9T( z5G2zY59{G`GbUkue6|6E*LT~G+4auV|@{qFCYdox8R4 zV%PPj>rE^r*a8>3xj+5Y#1;s4n2X)fpYAlV!vs6Z#qR4*%S_Cj@B26xd#FD>Vq(Y1 z*-mz`C;HQqCWeW^)juq?Bo2A5KRs_^rwMkZi@nmHUNtdUfeFhp$=TlOPj8!;EZT%M znFRZwKYeIo=ZVn^T>vH z&%|yO><$;(tbjH*u{#92+r@?!&{igPw_x|V*mec9y@}l?*!?axynu>L?0&%>aZ!QLtBBY*qoyHnCR(d&9-{FQ8fz!?f_u<@}C|MGL6T#5{An@1?83rUII4VxC#v z1)Enu%_fF9pd6!Z1-yh>vS1RW3aA6Sg$1+-yTc0TaO{pKprf!mx`2+w?zjRv0lO0m z=p^h;DWKD^JELI9l6BS$g~FKT=GsEUnnie;n|}6M_P}2T*&AY=Hhbf9th4P+$Jm?m ztT$)dL&iDA?U>z&DaYiW%z49q+s)@#=i04fv4R?yHtgH5Phy|MykuAg$X>vkMR>*F zDf_T$`|xV}h-&-DYI{kweRQ>bY_)w{wS9cGeL}T;Qnh_@wS8)}eOk4BdbNEIs=; zuVrZdj$~ydl+mn=hSGHvwLSRI9ysI%4A10GX5y3mS=k@Tfvg+|rID3JDDHA<&HPC- zK1r~WfRbb-38jOT4k%sMRdd6Pk7MRIFsHDBS4q?Bs-4ZB;Js1277FEjD3`Eu2^2T* zcqxCf6rZ>e$k*~G*W#1Eu!2`Su_QE6PEyAm=Ul5MJD)tytL#$}m>&mR@>MxE=YE9r1~~I$Sw_g5`?w zdL0zJV}}`kp^SvG3oCe`j;dLyhT=vbu4Uy~DA%)cJ(L?+xe>}OtlR?S zc2;hOau+LiLAi&Od!Q_1Wf_!5Sa}4>Q>;7%#6@-eTn~ zDDSfJE|d>h`4Gx-R+dBgjFr!ze9OwWP`+p7dniA!@&lBgS@{{tZ>;Y&6}i9tDpl|!JoGlnMllO#TIrw(1npDe^D zhpX|?Bh~h3Y|p{sQ4=7vZ60s8%cJe{Xoo!7F^_i2!z(ShRFp@<^QbtFO7f^IZ=&6Z zdjk|YjsN5?oSsK#@r~s?wLKqOG}ACK?51=9&70d31$|4HIk!7rQc#mYUcOf(>`E ztMcg2CN^BKG8el#kFGH>+|blN+|VQoPv_AyCWhOcgN=5vm-6Tp6T{8W!N$1Q>v?K@ z(Kj83u#SIv2W7kqzMH4k9~E%C13Ei^d${1od9>U#j9aZ^cuyDmERVi0F}%6sU^89p z>pc3##BiH-u>D<(@~G3qa1(d116}N=Jo?4NaEo`aMi=`nkA62XGyohd?qXIxh4YQV zObpE-CvB&=*zkNRF)=ij z9PBg~E6=A&6FW_?vt4ZGd>UV6KFu_-rGj1KVsr9oUlYR%XwKQLb+H5U=^ztB`E;s@x$As9>0%e;(}gC6#;{}bX&1XZpRP19cb<`FUF_O?y3WMV zkao`Yyo=qGPdA$wn%NHaqKn<0Pj{J^J8#KrE_Po&Ei*AR(Vers?P3q))59i)2E2p4 z=VFiN(-S84o?sui*mL>xyosUl@0@M9i@lOhubS9$!9I1dxAN&-6GO+rIop>m_F+DK zY+~qEIM~-N_E|oCVPfcXIM_d3>>v5`jftU4;$Yvqn4M2#V(73q*v~HZb3XlIV(88| z*sm`3dp`YPV(9ER*neCs+>avtjJpiFLJk(mk!C@DKk8>|%xeXe$##_szjJcCl^y z(RL>0F8#8Fiw*BbB_`%h&9bG7RrI4u6GO+)F}jtDjp|1`n;5!{4mQli#`L4HCWcO> zgKg(xkL_63x7hBkm7Mqwm z*USVLJE9*QWn$=nJ7?R=#g6Sq$D0_s=MFZ-#ZK-=r9 z7=wsYLndK#f~X*rw2PV$EffhYwQ)R-rzt~0F*LA?%IcYdtSEc*X&KMlTW+huwVXZUf z2(f39t*`KzGsX(Bxyd$G*yM~ULu_8M-U{2CF?5J^B->eGmosJ%u?5NYRp@udNFvsm z>_CNs&X`cdx{@8PaKsq{i`Xm4j#c>98S{(S>&Z@3_|6&QjM$sWeyDKL8Pko}+sOth z{OXKhM{H@bQx*Pn#_S`uEZIL5PCH{15?h|^yukTk|5;2%Vjm=nz(vj&l*GD|4GCQ4 zjJZi{WwK#`;m#PN#6C`TMPP(8rYf;D$wmemoH1mHtxI-opwSsKm)NJtZV24yj1f$1 zL$ap8SZ7RRVm--j4UBWffF`yhS##hHXUuD2eaY?)+~bV#O>A$n34sTlG0lnfCz}+Q z?2O?~>_Dzpy^i#?odbiqx|82rViCL2@G zOya|O?Hyil-+*?4g=3csQn~#ukp=8e2KG)!5FlqsC5-T{ZeR WcGuX$vA4!Pj{PV~x1_p1H;xh8&YYOG~=gx0d$S~g=X>s!@jR<&wXN3H6FRdubZXI0x)HL$9& zRZXmFYE?67o&yKXJdtl?2>*t154tWi8htg#_$<&d>%$Z|c) zO)WRG8m`qytVUrqdX{Hfo@;rb%#I5?HFn>#``PlUy?l9fc`aR@byuvgSFEV7SY@y9q7`1U!gp6>`B0-bAFrgak{C~Eu7RiY2c)Vlle|&oUH9+9VbhiEO)ZP$z3P+oZL8h z+sOkbPn>+l$$L%_I7Q~nxDIMJlRC2z>gQ}|IU8c9-*)<0ZFsm=!vn#s)f%;$SF8E8 znyJ--S}m;AqFSw6tEIJCR;%T;+Dxr>X03L1&F$3OtmYQAMpE;_nwQjkQ}eT$acU;4 zwS!vFtOZdm=+=U~7ACbQt3|z9)UU;+78kXosCC_1H?4JxT54)(QOis%YuB=*mgTh! z;!G`fYk5+eNk^*oh+P}8>m$zc5ocrsT{2>ij0}x1)JI0EBV(f@W2;71j*jd%G*YjP zjMqjQD@V-mNOO2(7U}kAb!gNcA9Y5Mb97`B+M^@Q(Xj(YSB{SEKRS9~bM)-$m}SPS z)|eHJS;?4{joJ0Fk+HGS>e$Ky$5z>6tA@r7aK;X5jCs{D&l>ZbF>i9r^T)F4SZ0l7 z&R8}%mO*TfZLF_!Mpll%o$AWb16Ph&D-T??(jQ)FMpxO+D!aDIuCE&1f7Sl>s^-Y5 z+3Ko|_5DWb``h;Zc71TGp4U7hvnwOTz`FiSHJzwt6V-g8+MgJyPcTeQOjakRs*_cF zvbti@vL`Kf(rQdv-lXMETEV0hOAyLR1mT-Whjr;RD(I+5$7u9IOJxTAG1s zT+ekq&-IM!wOuc8y^ibUu5Y>i5NEdUy1wuF#`Oc&4_$x8^?R;y-DcvpT(@Q1R@-d_ zZYy$IeK&~RAajGvoJAu6Dz^8#dg~cSDGQ8-{L}xnbc(mKzPZk>f^_Ze-jj zaAVhvJva8<*tl`ajbk@X+&FXNo}2XCuIqN&ZZ~kd8CUnzbyMS}EjR7BY2v1-n<74U z)1I3dH|w}r*Ud6F%iXN!=9Zf~Ztl9d=jOhf8#iyedEn-WTZC?rx<%#|xjSv#>A;-{ z+*!|^#cS-&rtWO!_AIyOxa&vU^|`yD>TX!xaKgq)(>Q3j;d%|Xh3YljtYO@S@f)Vq zFztp38YXQ7tws@ZuSmTj^ZK5@tm;>79BcgQkYAnjt*UR?zSZz8&$oQvGQQRHt-!ZJ-->)I@vYRi zGT+L5tMF~xx9k2;!yhvKP~Z=b_`{RFi)*MsoJJGWU7?Ptol%Bh7aQD!EtdcFph_99veKib8O_;#f_5~r;BYHyEQgu;}pi3F{3NZc+HHr z&3KMw)J%++i3u|?WhN~%X^d+d*TFi4#mLCwf>i@c0A@SpvvJp(MqxY`BOBw`cmakf zhNJN!<0Tkv7)-`rhB0A$+xU+0YsMcle%<(!#&?bHv5S0zrZoOWV;Xp8OkhlGOxKvy zn9P`I({xSKm}b*7L(@!5Gc_&Ow2Wy5rtO+`VFKR-O%uc>nC3AjblK;jF=1fB(1cwR zW+tkd$TpEE>o_frGqBUtm(pq&5zNCUs0&H|e-Z zU6XpOU)nNhVA9Z}kx65dCMNBgG&N~v(%hueCf#7tzQL(EvrRT+GRI_ft{-TaEHPQv zWSPlwlWjD4)#R4RZIdrI`H;ySldm%Q{w6=bd!{i=kKyFOlG}Y;0zs(>1fX=~-s|s9C?CS#Qkx$gJOJ`VG_fOy4(sWBRe_XU*zl)2cSD z9Ov?;U2hJLHHYJ-(`Y(=(=kmaXgXoj={B9TIkK`jg5eN0-KgmnO%KiOHBH)VR+~+` z*&J#%9S)Ob*lcFaz%+waGYFeO+zefgoiJ!dK{K(MiQP<`W-{4K!e){-ll9Hi#jt9o zNi#Fe+-VkJv)^u2CtFsvW!Wujq-FUnD{I+y%XV6Jy)``Da@>~VwH&|Yge@m(Ia$le zTTaoMv|0xbwcMcPMlCmQxkbyvJgo96$Ji}1#M8H_w@kBTLX0GgfR@QxCU3P(tDU!k zxD_O=(6qv&6`59?wBoFlG+Ig0N{UuDX{Ampt+&#om07LKZe>m@tGBYrR@QCh?N;7v z6+x?rT1DC_@>bt#^}|-b+v;a+%jKS9nYI9yOY9eC{^YzJ{W$l6iX#!{M?b`rFcw4FdK+No)$ zNjtaNdEPGKc991wRs^*KXAztLf`)_rIB0ALyn5hy*c55c3j(i${R!Jo;8(GQ1il^k zD+1Xn0>2*k9mI8>n_`a(KbDOcV+0K!1o7G+&Vo1(VyI0ANj*rsAc=z{4U#^uO1pN@ z9SXYjpz8)*6Lj++H9?x=$|=YiLFNUS39=x_k|65_SsG+nkmb0L#d(B#dv1cf9ppif zhe4hMc@gBjVA{pH6-)=gIyYEnf^}iA(GE5`YixUsU0-9oHA%3hz!m;v$EtQLt7DCJ zESF~lE5PM$$Le=%yJOcoj@NP0&Unxn&pP9IXQJAfj61H=aa$cP?08AXHyuCk7^`Fa zjxik*cMQZ{r2nDJ#-ql_zd-Gvl}{DxO#OsUc-?$bX%d@4c#J5a%Y$wj>Udj2lIYld^;DBFybD zUmfOdm=|H*3kyFiOxPO=d#l5q7xw(H*Tk3#d)=^?hrQ{jI*A)4k=2MSKeD38u1Ag+ zIX1Y>apZO*H;vppauL(xrql?dMh~aA$j5-i2>^Ti z5HG|{Ju(xKiLmQntB6d7B|9=RQ7erCFABmah@&8jLMIA?C~~66jS@df(kRKJWIF1) z9Q)lc>L$3K5oJTTvgbu`){2TSDx#>!qUj*&rBN@7`i-dXMg3;fkD`7Y^}A6&jrv(! zoy1L|*s^0QimfcR?bvo=yUq>MPU96T;^AT3m57~2?0B)$#BGJxNn+x?1r%$#cmomda-B4p2ywQYsX%QGb_%iu~)=?HTJF8w_|@S_E+-)#c#yE&rR5G z#(tX<*AHVqiv4cvr?H>KejfWXyfb9%*m$w=W7CXH9Ge6?Yi#n^AQhWapVPgW#4Rgs z*>P()ZaHzQ9=8tW1rS%{EN8hvM9c^ObR4kMqem zKRC|aIQQb*=b0jJ#(A4dQ69#5gp%VtiSurpr*WRe`T98T$AyWDFfO9F$m3}fPbcwA z5cjOO=fvx?c%vO}tmCF$V%fNZmRPfiT~CHv$?#0#q={1`PCu!2lSwOaLtM@!4L515 zNg74c=q27z;<<@uxc+$^&Jr(4Je+;)#CH?l;Fz2Ey~Oyq1IL>~&1TZfla`gVoTOFf zl;Vz6Bse<xqooow2b~C$u9b96(#?`? zo^*Rj>LlrEUKph&Njpgza+ah?lBP+TC25|dy(IIJ%p_ToWOwSq)Cw_MV?HXWX4Hm>KF*gOqTSDWc|jZ?{zJ^Yh_)#-gUjM>v!F_>!w{d@A_`n z*f@xH&1BbjT@%wgp8T?IJK^Cm2)jXy<+2-^ZWwf9(@lbI5_glNn{>NL+D)=c**?r*4lYTwd8Gsh{x%EiXLkynnz81DyDA{^e0V#iDB>Or6xMO${`0 z3@uVKotllQ>8Gt~+OpG@leX$SEVnWoYtmLf4P0K!27Vf}(jaC_1bG@vr@^|kW2M{( z>uF~)?RaU&$M%+X;oXNQMa>9Fz!X_TdLok#CD!1iON#!0g}&+J(sBgjf~JI#mEyw1BLxYK~MJWdK2 zS$Ur3MVj|gTpVD*n09%_pAORAc-osxds(`nnr>L0Zisp6ui9C4GP7*lcE`Q%%(gST zo;hyjG&0`a#nk{#e{CK;oFsF)8N6_^%*ivk$C~kWYMhOE+3H$0X=Rh+*`&!P^UQ5z zu9vwcb6XkipSnDxlj9~1f?2!Bf<_j!vLNCT7$jM+jvrQZ?5s1y8^#@zb%Lyu zWu1*#*voKp0%!1~lO-Xh7VjrX^7UEK$O^9p@7B1@TyFgFkb-@Kcj8djJa=buxoeg;Twd@siX8X0ymsz|xtHW# zmv`g*B=>QphkFY395*<5G0$stUKiqsisO%oxCQYl6paVX>718y>vPl3n@QeG^R}J0 zhx2xwH%EE3fUC(i&$jJ|D`guBIP~MJkJEgZ2NCx%ET2K12h+Ub#QB%!o)%6g*qC!{ zV97AR5Vs zAr)Jwyzk}xHF-ZPa2K_K2S$)rcl`qal|a5Y7yB*G*m?OB5D+oS44*AvUo)i4;OMI zD&nAs^P)Rhbba1H#XY$cZ?Ig(MVjJDy^#4@Gz zU^?l{40|(ejk~?^ zus5Fdyrkz9J>T@2L9dziT4@ibr`YRtO|P5wQqxO=US@h3hKT9qK@WqeFuiHB&TXu7 z^L3`W&RFY=z0NFOXX@+B_&U>GXHs0itsmLAespC0ejC@j*?QxwZ-wiFjlBO6_1CA# z`mD1)#~H!iuzb0E{FQ8IyBp%_hS+RKH*B=)Jh(Zy1PnJi=|(5p==A%Iq~9p`xvn?V zm%Gon`O8DPhl57Z_ual9^i9~u-J)jDZ>IgW>9>pinxr2l{mAXd2@Z?>q|xsteQc}Q zSU#PNxoq_U2;&|BqpIiQWb%D_nPCEX@mHR&TKlS+^ zG=wzAf6H>V`J_`fpQKGY;Pd0+|K{^`7hL|YxAWsH(B~O+9@_Ve;|?oM-h5Ji{L!0_ zo9n^z-t@n=+}Lu&5t~nnHXXO=$jv9s8Ls>vSk8_=?C8y>m{TzzyT>1Y%-?MP;imt! z&!y%6;`1AB`(Im@=8aB1a?oLnj(=o1JL=dIj@gX4NtE;NZ$pi2Y&v;<#+CDK@b&qZ zUio*&#y_zDVW<^*F=-ZOemA1M@PEA8+w*QgGXUuQjq$ zHl1?RVczk_{!_RAWy|IK+n|GML)oGKWvKnlVQ|fF{zad+v0RG(mzMvwSl~86SKt4g z-rT&$oBy>@r#}DdW8=STxf~m1G5>gM{LS()Y1#NYYaj5dVSjsWhxa?+$!(Ky)FF3K zK1umxkh)J%`Kij?G=8!2X(01F8&BHdH_*s^@Z{Ifs(8}Q^YCQ+zAC>!WlL#;3?%he z;K}?Bo;%{X3Qy+WPr1MH0Of(ogFxyZtnw7dy0%nqgS6XG#u}f1EO#xQ3?$_YPnMf2 z3+1$O2IN=p)~mchxl#E-kb$I~zVZ-|{jgc(Ba}xfU!*)r`C{eKApJU4dA!D-pgd7| zl9C4*>Tgl`ROM+Je+J0*I7{QtR=!l@&jFeL4tFyixgHkoMk>C+*y% z{D|_SApQF{Jelv4Dt}gaE6Ds`P<{!dov+}@Kr-J~m0ts?e>yF%Jm@g z^_i&T+e1_)`F4}?P~~BaL>MIf+pOtFfRtaPe6hwKt@5!dAE)vODxau4NqMrSZ&CSF zkbz|V&d~UmfGqDUmCx4ntty|R=`UCLJmvYy3zV+_Y3Cx9F9sO~$@EugJju70C@%%s zp082)wIKChukmlv_$xsMl5gLP7uM%(D!(11op*rDf33#9OZje)fn@r7H2!*!^Xfz3 zQ^3!FwDWn8dbfcLB+L7f@+-=(gVethKHRUW_#^F65YLm=0WM?w0%Bb1rG3rIhn0y6(@c-aknj>=1wRS;P#&sBL}kojzo z<&UVmO6598{c+`lrn?~P)zSD6#G?}9g?`O|w7VXpe=h{tK8LA%1jzY#oW`FFQvWoN ze!LW9AX)y)lv|bOD9=^C9HhNhf(#_zUZT8A`D#WYkhJ?6l?O>XS0bK%zg6|#2GYN4 zRDOr@ognqzt@3ps9+m6y!uq~n<39jW??cL)K|CrS#S8U5sr;PAe;%ZNw}K2L<=a5o z`4UKfzN+zG0~tu_eO-AwNc}riz6)f&Z-aPLzN_-xAoKlD`6J~$${&MxRDOaN=Ks0M zzXaJ|zXv%k9|BpQzo@(&3a8!el?&+%0?GItlskfK_ou478_05=2I5h9I$mJ1vKPpF z&(Qd1Y5a3Eejk;Wsayr|sO+n>K-wKrjxZ5{q}@@FQL9wmPvrwamcJTg{z*+gSUIJ1 zK|CtH%0}5#wv=s<_SS$5B;Q7Op&zj_QFfJUm8mjQ<{<4&t30EeRrZwYlNpGl6ohoO!Do?cwsrGD7R?* z=^*uAqVZ=c&(idlY5F-J`{{g5zd++JRQV$1#mZNLcvLP``7)5@yqb|p`tusd9N%wH zy*H}fl`6kk`4;6{m2U%S?<(arAj3Z*Rj$Pg%YB#XlYILgys&=nRelhp{SSdWH-8G` zeEdAfdG!^L`nQ9$_YIJNq}K{oNVHX@6JcB9P@Q25IMMOjI&{4^3YJ(%#-6%c+8RRGyC) z+P6XKFITPr*`FgSkAe&&^~N;)0F@6^9t6^ly2|4q?H>%{QStbqq#YkJX*4}hd5y|3 zNPAt7b}~)RL53$H^=6RH`fdcNx(P3|bC}9Uf-Lt%%A=GoRvry9JP~R4M5NQ+$*O;f z%BQM)8p!rLOXahbF9qq}IhuX}NIMs5`b8?g5~SXxAOlH%FH>Hw@g&E^8#Vq-Aj^Fl zNV`{oJiomcq`ePl{7oS9eH_H2@+rJ9{jvys?0&= zE0oh9%jHT{Di$NR@Xmj5Y@{~SpDTS1od1&#kQ zNc&$=epUH3<<~(xD&NEl^L-1X-S306_e156LE5=j`4i<&LC){{K<2++;~!A@k09+l ztb9cIS50Rlar`_5WVxRZc+K$&@o79+em3g??;O z9uCs}Q6TH}VvzZc16hv~R6a%1w}1>J^-ooqWWJYZ{F%zLG=3|{`dtFj?qwkTc#X=h zQ(ghm?i-YERK5wM{kN+8Hjs9%Qu%7-H6R1YcDhdE-=py)?Yvjx-v`pp2UPx`${$ks z!z$mb@+~0qe?sFw39=ra(fH4U^#4}nZ5sdYAj|oR#(!1iud95!@*B!KK-&GL^4lQu ze-~sRS3dnX_4ATD7G=2||`Sw&kQ~7L7e-23fr6BF?t6Z+>D?r+< zfpDd=zs4T`((Y=I`Nu(yhX#m8Wer}K9)a{PRwf|rWy%@ldXRQDg3Naa$b6fWhbj+K z9zW0Lcj}L(? z{}zq^nDP@K%l|i(Kc)PP#(x&1z0a$BtMWFGcE1AB?(G`?4UmCk`FCpkUCM7N|3lNi zt@3x2-&KAOWFYC^_d)vcLzRC7(*BQCz87S>{!-(A4O0Ji%KJguc>u(t@`%cR0Xbe4 z;BZ0xg&^f!K(6NcvLLB(C#ouJqKiYqagi0 zP~#5*sW++e!65B>D*Gz8RSrPf2{pb8vR|e(z6a8e^&rdL0P@^^tjfoMEbnBH<(#JR zr-KY6^PQpTXKOska<_uCe=bP9mxHu-p~@F2FIK)%`6}fl%1f1(fwcP?m0zoToyNZb zq@QmFS?*hvZ&zNe>DPj^a~;S)GT)6V50ZYrSK~?gf0OFptnnoCe;lO#CqUZ&6v**( z8%Te?2r~aym3M&Dzf;q{3G#a4UJ#GUukk`VzXO^7_aOD}2U*^ODnA6`A%|7!ZHGfE zxe%oO4l3`Y+(r3hM?R7FpJEw!3KQB{W0J6MS zfb{Pokb0Mbw0{N2dR__QQF$j`sP`_A^}Z2gIUfOO=Vp-QeN59o4YIu3Ks+k9Id{Aj|ow@)sb>`4vdLUxU)`D&GgvzlT-+6G*!|Vi98eQ$gx42AO|%E>23; zZ%@c9Z*Pq!DenXFa~=m|`6HT6GJO@udanj)x32LAgS6{w`WlesN6Ie9{JF|AAoVwZ zEa!zPAExqVkoJ!N*}lhvw09E7`n?3?xVc#4F9B)iGLZQ$SH4=~UklRCTR{48mBwGA z^1DFVe-Ft1`hce2r0F+n`o~oMB*=0;1+v`Ffb{E&D*ro3dtX)g>mc=S2dVdMjsLFl z`ylmy2vYAy8vkREe*a44-+&B*r2cO;{XXUWAnW;{$`7mj7m)goD*vi{3}hH2{n?H; zSGFPZZ?Ewr<%P-}lskePC%dZr6p;27DW3+i-IjnDx|MxE+F7bxrmQNT3(}qqGT#d2 zu(Ad+|A=xFWO=Jp-VbEH1C$4W3?$?0AoGtaCzO*Q1Ih8~X}qs;05X3E_qh8Jz%Anlw1a-5!{^2;^-JmvWy+vOsa zFIM?dkohkM>E{(HzY%0RycJ}*Z`1U5s(dX-d+!06{|1otd!MGiU*kUrGLW=$lk!8# z4=X1 z@)scM@oSLw9#H-noj4v%b?ok4!rb8nD(Rgmc`R2~Dl?>9i&Ga&tLf-JYK@g0!o zm~|inNxk(T^)@Q|%1xSnC`dn!1lbQqYy2@F1Icoa2WjU-<;faZ}(caz573^Ly> zAOp$tPip#SL6-afl(&KmgG5(V?m#^4+^M_^WdHm?<-0)!l6pS`Y4;xGy&&uHpPK%2 zjsK;}zf$=(%HL`Heahb}?^iwm(%wVLM?jYMsHXo_`IwS}f_^PfZU<6-p~^cbcLX^O zo(%G6^mLGVdnuo(>HDa>45Zzv%Fk0iA7p>n${~3)Aj|zYNIRbdd0*sfAnW@*kb%TdtNa3_o!=;b z4>JD)AoD+{^25qMYy6`i^DV$4N56LjIlp#Oc@L0&Em1xlq}{zh29ou8j`De${(O-3 zRwze6+8I@jfn0A60vSm9IS$hPBuM>(HNFAT&nCz~GQFj2D+A>kWk(q*BW0{iK$f=_ zWcfMBa%NRt4>FKUe<8^0hZm`QG|2qNf^4@_L5_oSK>Bws$Urjw5|DN-*Lae8uLimA zzX_zhH-ohIPL)9S66PIa;DtDBjGE&CMMA=oYRi?^JnS-=D4KfUp z?J$FQ_GcgDcsK%N{f`3K-lu}he>zD0Gn6mU__IKc^H*s6g&@cAt3lTP^%{SL%2%rV zW|iL#vb<|F{vFD9YWj7WeuMITApN}=q(8T4{KrA|_oqSn`&mu@oW_4aiag`@P)^`e|y#`4Aw#sXiA;>^d zF9um|qVXi{q#B=r)GI*t_X|}%MAJ7Z57qd?l}CW|?>Lb5PE?)(vb-(IQ$Yrj<(v*O z-&TlkV<7ea4P?2W0oe{;()h1{Ebk7G{@khY|Dp1?l;76)?}5z!6OjJ=O4EO>>AzF? zK9GLgukr)RKPdmGd{Ft2@?qtllz&z}qWlZUK+@kwm48(}rj&~(D&iuFdJ91MvpvXm z*ohZcO4er)WY%X-P2U@&{ z{f5e(rUxpo0qJL~Of^0OX}3^$8l>MFLF#YP_(MU~>u8YWo(MAE$sqMk137Na0_o4$ zAoX4j(yt3Z>Rqh76r|o|AjkI`RDL7Ka;^rM@0}p?T?aA@lKJ1GdN(TH4>JA(AoG1# z<&P+DR^9?KkktRE$|URcagg=-G)O-_2h!ecAoafhQtwL||5cFny;IZgQhpQUx%FO< z_I?i1-mgHm^Zg*}`v^$;kAc)%h((opJAo{3XOQW;Di>+|Vvu@!fNaNSff%wC2c&-^ zn!XaGomI;HH2y%4cE?pd7-S&nhY!+j2vV;L(r&8ELE0@q29ovKpfbt&Z3dbDD3JOu z25ILQP2U1C-&q>}Qsq{V`saWQB(F~{(fCW1mw~kZT99^M53*g}2y#Ea7G!;{2WjsH zkmcP3QtuzfJk?AkTGoY5F%o>VHe+Z>#)WmA|L*4?wod z&p?*^lN*NdOL%(yBMS&Pt*9lRDLGNdhD%y zmc~B^WWE<@yalq|_5)e&K_JT=*YpXMr&M-9mgj*CB+K!Y24p)Wn*KzjepmI^DpQc< zPlL2St6Znt0Mf5M$od}+QvXFN9}6;&j6V_NJUvZ$Hpp^cs(cwpJLiG4`wES}PCq zg7V8C?SBJgd3S=W*IgjT`S(E9>qi=YkH-HTOHLdlk(3X z$ItdpFUxxpNWY%~GT&1{29o7HUDKbT>CXgNzvrpEFG#&%kp7H;toQyP?H&ZOo^|Df zrn?}^YbZUC`P(4%*C<0xk5o=n?kd-UY`0mJd&+en{dghB`W^|={xO<2FfLMdPngUI)_t^&sni14ujXSAIz2 zKMb;*TQvR?Dt}7l&w;e_dF5>&?R`P{MUeTwto#~C{o6s7cbCS0OZi=mzZ+zK{tTr4 z&o%znAlLJUL6-9;O@9QW{`Py8VRL$aa4Q zNPqU$_-84f4YEGVK>A^W)LWtHL&{;0?J=VAC`i4PAoCxf@dqjo0vSl^)j{T;RC!9- zQ2HS4v_aM@02xTiYm^<3_347Nn}W1kX!^9q&w{kKLE|@q%y+299|1Cu9CycnEazB| z_D%q)zeVNKm1k=FR*>hNOF@p`*MrP|h4Kx`H!9x*(x0~~uU1~G>F)v=NY?8*O}|m) z_o;jn$Uw5Z4=FzkGT+T0=j*3I9I+~QX!@NX>-8TX>-9aA?*^IgMAVpMuQy zbCrLo{58n+{~?g}{sJ=pqaer84ttgIjv)8fr>VRLNd0GkEO&2>f0pvu%IAPAcbUpn zkojH!GM}wnp&SNTzN4%uN0g%=^Q}~Qm2yAj{+fOu$a3o-=W7dOKNp%l1G0S&0a@NA zjXw-z{~oFFFH#-_vOP`&>Hn!JzZ9h1SAn#1iSkmAfn@w;ApL$dNc*n`Y3E8!f3v2) z6{O!+fea+`Ukx(fwIJ=h8>HU#D&GiF@4d?Rfwcc2ka{<3{4F5!e@x|%gBB$@(o-nWUZP zg7j}+dRXAnW%L zkoi6da$emAvYao1^zTa`%l|4!J9lXMT_E#+OZi=pdUu1=yI13Xrt+^q+Wn2j-v_eX zhe3uxGQRT6vit=g{oVASy z8A#Ua`O4**J`A!xD?tX5c2_C)Q|=Ga?tv;F1TqYg?bkp&{cEXSTN!}N-vQ}Y3{o%C z_(J1nLH7S4ApO{+JXCoY$oxmBd?d*0qZ2{aZ;Pg%uIXneU!puyc^1fW&Qtk(kp5f@ z($1xztV{n|8-E|<#KUC$zL6*N+ zd4$HlNcm!rfu!BzH2wsT`A!7s&ne2&K-zy9$UstWE6DabU*!ux`g5Vm7b!2+_*bcX ziSknAWt#qKm0zRs>r{Td@(Se}ly3xC-jyo9S@{;_Ta|AES)Z#x*7sVCe;3Gly$|F# z|FFh?M0vCF7LbADx%XC(^Ze_Ye!KD;AlJVisC+lbFi5uB4-rp4?gi=B&s2}3{0mM0 zjm8g>`F^i@e*jtk2UY$PNc(?QJ_0h3)O%Fp|EhdU$sZPE`gS1mZx1q%lox9Hjv)Qp zMdc@J`mQQJRps4OUJNpjw6nYNX_~%7<)2CU73BDP0mwkI z97}0~tk(+VFv#{B1sO<|vkGLs{Zu|s(@Dl3q+AWs-nep7;|~TINZR*6+HEQWkapIn z9D%fxXna?>R+%a@We!sRrq|#FfpzA%T_7)9iTKTP6V?Mx8BMZ z$-9sV)Q}%1sx0NZMKra53;sgxX8hH=N-mC5c?!?U6tgU#$VB;~T7`cFRGDItE>j<2 z>UDTla*7M7IA6;}^mGp?i0^h_HZi(r-XZ2#KowEGoGQ{ndr{?LJS&Dy@~=WG7gBGE zrd;YRVmC~&d8ecvG{sNVD+{C^b1mdcbJBq5`SOl=7cj510Y989-H?L#w<={l4x#c+ zEK=H8Dm_Bimf~47eh;(!qgwf8B>8rd zOp--1)>z*?SYH_e{E?!8asL>-`UB%G#Ixec@S#1KDGQk@4M8s|MtY0NWfhnzgI_v% zIaQW0Zab=6g=eKp@mvvUfz4d@f=nD4X09v+()M&$YQ86PTt{UYL*l)(kW?BUKcFD# zX=dAj24obUL&xXGt_+%jrk3JaSwuZUhnkE#mk!AaC+)J9y(MdtcyJ3FOp2Uhf{doM z%=>JXA=BVQT47X$UwAF2%TiWBT5Tg!Sz?(gIrzg*+H}mZWNwH)mu2wlrj@mb)G#atKK3&Md7e2AJSe zl*Z<-Xbm_iLtd1nUCMDfZ<+P)%HWbX=@goJ!s#c;vvEH@jbUPV#9$}2`?m`Q&uWr9ot>G%u84aV_zSO+cB{vka04Va%(S&H~_FOv;z z-kvOi<-R}z1KR{eQJ&&-T*R@=KVhltFt;tridnA3R9Q%sg;Xhb4R)FIFTdebZchb` z&Wlo2sU;m9+)}A0dF9uO`pLA-xyJ%hh(yU0I~1zOwhoKrdHi)=dWCCQegXjILp6*Wg*{ zvLX1#edYEf4oSnxT2dNd6{hek7a19jGc+J^QlvDZ95rMP%9uQjD%ay#Zg-2=*s|9y zq|dT2E|P_Z=J{vJ<-#b7w74O2pT8$j`6^8fOkL?M8Avki*(B2OQidy)kzSyA=?ZaD zdO>P5#a`INu}k5g_jK>ZU6YeB?Dw%sw`j?*qW6EG~ea8@55OZpR?*Aka1!~#-GgnYYnncdoQeS*8NB5bn>~raqCi6-UinxTC zhw&^=MiKR7UP{fS*=4TE`mzW8lXvA}G&e-~3#1h`pB^TdAO>z_!c};doA49WLxw;( z7wDR-2U0Dz+(5O;av$HEQeXb;@W2d}0W4cWS^dYSF6Qu-GUl5^8e+%!g@QSzI3;DJ z=C>!yeM>IqWLc7-%~V#4 zR?1_Fyrbd>b9@F*`FZ!sV)32{qLnI@^yIFe)jj49*vdiugjmIcW>84No!VSd0ZrHbSjXr}pw5Z9Q4 zZ^~OB($3|kKG#h1g^QK4Tuu$K{DQf5DH}rCg{kvaN)K3w%)xRqq)Itn_--KY-|f67 zuv}&nPwB=Kp5-O&{HkK+n?&Xj&Cf5sve(XUyeX9JgCi~;dD5v=2XYw{PPp*{s z8=U3J|MzDtEpIzv*|2*sudKjJcxKpxFYe>rD5vRMZ^(5 z<^Pk$SZTrzcd9;^homR>b%k8*qQ<|3vCNqE<fE_q^1{cr zpB!Dpa{0p4`L;K7Xnq5iUYNf#Ha6FnvQQWnv*IlEM0UTNon zdrLB|_#)=FZOORb7ktb zT}A_PDI*=Vl;Tp>?eF&o+l6YSe{!Cj7x~w~l}&Sf#2@k2Ra6R^dy(s&tB_b;_RZgK zs?O)&YBs<6l&!`b(ulH@vO?vKQ!Zc9_AEmN*C9-mBm1^ZLKRske0nN(cK9>irKkLZ zva$^RiEi0Ai)B$@yDa3IyI`9OC+3j$o23=G{$M9mzyb_HML zf@24IAj{2(ENL;TFEy8X$jSUFmO&rOt2Uo`ecG!sPG+OHCii^HdQe3ST+erM6)h(K znIHTG^~zQ}2RAgvEoGdHCK<(L&Dk?j#*?T*SIRS?G=%h<%y_A#T-n?}6{*o;w%QJ| z0@Dp?_5q)1Z#kZ&y@3lc@t&#IGgS)uCud+;1z3<=Xv;~pc>KWZvTNm5;{5sf2G&N# zP_Z4~@$JA3A-W+;!M1(G;VrFOa8)U9ld|8WXSN-kQhgpU3r|a^fL0XayNqzbM z9R{zWDV8Hv<}?k;jh@HwrW`{)^OhIEEPOGmDuY3G_D?`6`$(prRDVwn5Lp<@880HO z$Y&>Vk`{aA4Fi_GNbWO;d3KqsJ5+#v(1mcHTi;V_xxI z@;*lI=cmiSQI{<)24u!hu_4y7A*6MG$b$aJyavxFUcx!B#0?p1UDj8&326vfy~~D} zb4Y3=i~fZ)D*KkiN&AV<(v4zoPulb7#we9#HTyorkfIC=$#E#-wz)AQ9xP?TRy@nr z;7=iyRwBAp?zNnL^UI;^GyK;Q1N+v%n$3F1wkYMwaqBaPD(?YoTWNYPvqvUQc`;7| z(o7G@tdIud%Xuu)!n3@dDl&aIQn;v#cfTeQ88lBMyP|#K#5dZDF}C z&CB{Mt8Llm9Lfa;zZ@K72z-lP{rT}jfd6-`91OBAluI8i%Vd)JE}*CU|0M%$FAXL) z#h!3O<3K8J{n0;}oU)3_a{V%zx`%GaXfj;%2kwTl2l-d^<(5_EWt_C%;jESnDd`@W z5b}9wIjA`z20n$CdeHmws+{jGFrIvR(q;=;?TMD&-s~!2EV7>}+coMJJW97%KvhK-*#lS)dNHsJ|B=luV^VI7mm3-#;?FwEZ&+70(w>+vcSKs4zi^tr z;m5`;TXKHG*pWp(mkDdxQL=Jvr6^}Tms!fQElaybMhRbBzQ~M{2`g=7xQdD!a=?&v zO>QnrliZ2K%378-#dp%(1M4KsU&Yj=c$U{LVnD`Uo2di)IrT22o=-Q*t&J1=U)a^; z0&tr<;Ih&ToDZaKGB4RAa+Z>9V&KYw!$Mq>y2)Nq?lYWLau0L~Riyf#rn}eSS&>8A z6cqz;%6OK2bvfcI@)ZTS{O?k)oF5$M`CWtZCO*fN>=kmNSRzf##*v;8Ph~p4A5r?HAC~q_ zmbMhnvOi?=`Z43~XPkUcFDs$!mokOq8bVGtQo)ze%E0Mbrn3w#wvcRDvNG@=R#gTr zt5~gVZeo@9JEc?Ph6Yt+S(2f5KBV#!&+@JdC(ghjfjMNHUcuItg-rZAoaMe8&+?wH zH0J^~&U`QA+w{U**Um8Sb?gec{Vt!5NM&RQ$Wf^LT9mXi8{+lS?9wER+ksV(&89qz zafZrOLb=LQPu9-)?}F{YY|?|$;ych6sg`V-%%Hb%Weic4gsn`F^@pO%Myww(7=UwmY0!R z`L5iGn6Q-MHun$qVm9gIDW=XZH>KmuCUZeNeFl|f)|MAAY%p0U7+>x}16w{L<$E`G zQSXmzwX!SbI$0Kl-y&Ymw#+eLfZ1dUN#T2nNEK;_fg>UlWbrMx7>;7;WZ8A)!d>Qm zIeg}8M2DntTskCcqIAk;mLVHoxp+`q%I0{Y6{$Q{P~~(kBLg0A-Pq>jE9=X}h%fg% zS$)JS*+k|?#L0A$Hp>Ag%8y)p+Eqe50?t_L#TL`53Ayk?@J z^rbA3TOpMVAxqU8*e?Hgp_S$=FNo$Q$zSN-3prt@@GRG7sjo#*+})0@ZF3K~TzJ^J z^E+`F$6gi3m(X%)h1DwW#4yLe62uza${f;GlC8=(Y27VyX5jK5sj{@lE+nY~1B3=7 z?i3bTj{CXMBnQna=z)BzZV8oT_-tZ9GG5Nbn~KZXDOTjna1G<+NGGkk&F!Lr6@*sG zw_W zYLwkmZg-Ry%9_o0{As;%PRmVWQI;m&Dh|oHj)hB{4D^@J735NTE6Z5QI98)v1Z62* zD&kyUmLC$z#F4SaywZ7c9W}+wGPnw{CwZw7(ZCLT_dLGHDk_6tE(N7X*>DH0N#=(# zbMSu?R;KVQ^NMTpB7dRipL}1S><{s8ZkEm849>Yl=PYR8raN0#dS=_k;qdt<_kCF0 z{Bp=&+8Ou;n5;Qc-+7fis3NPtR=RN>os`)q>+ZmZdUD8`8%T0)dW8Kpg=e|0J>lgc zjfy?Pmi(nCvs1P?v!2G(N9XM^+uNkU_^!NMXQ~Wa=|=fAd^wECb}XITrDZv|iYNna zDWb~pcc=_U7Q_}Vw{n^L`!bIGu3sHzJIkUk-vEWwOtHl+PgjxgmNTqO|>JN;;rC&QRQTE-+4J^2K;l zku_09@!|BjoY<^~oQq|Lkh^aKhiwk!ZAZym&6mxO2=Rq4?`B+C+P^yO=hrJ~ST;m? z9ZyqC)bAP14RrpC*$RhR`DI$UxZuB|DX$UBBQ`51!$R&lm-m7=!sJ?9Zc516OvZs6 zKQ_={foJ*cyK)tvL**@2nqMGiB-V1^(vk(q+>!xO-g}+fbx&tE&L0iR58Gw>$%}02 zQY~7RZw5WOctQJMcI{J)Gu_KF;%WEyOto-8AO#hbGI&!=Vo`8Rgf7a zPA+C&%043pmVtX!G&&+3z_yYxE zuq~&SEv&h$0y6&2riu)``Sbn!2aK}E%RVE8&wnYd&sxr}NPnaob0aq^9bE8RGQo7>pG|GPxQ<1+sDF3d5re>K}PL{GVY~nbROKGX9 zeEMI0G9|-@<3LiS%RWw{*Wf8X$ER1HG%CB=6cgl<+h^V6-i@sC@_FNOrshn@xkiXX za%_}xWh)A)!hZ-mZ~~PUlF1}3w9WSl%7ciMMx%05Ozta}w}n|Zxy>R6hxuB{3U@ma z%kLV<7tnpyV_*rVQK|I6$&xBh)D@z)m8rYVyFs!1q8Clc;F_XC^HcYWY|dr>zqYdr zwe&jc_({!Z+QudWb1c#+?j93+$W;V`D1v*(J*J8=dt~A$G-jd`^hRUALlh0!nG_x7 zsuz-gAdCaSc;bcl0liBbn`;X?4JeY3S}*3ZH4F%8UBBP|@ILD-_L(_G9C-Jt;YmS_`$EO#B;0gTt}ux4>Y= zr6#0RJd56|L;UUUtv7kLsA{t}C8FU?7_uw32ZV!ktES{Xmzcy*R-h0WV zTD%P%207XE0U=?;4}^Y^9*S0nlEpe6bh#s5RC-lgQxZ+Gz$di=D}z_+AhI3uQ+5C$ z%iAKPdZTI)qY6Ctl5Qs;^*TK)bZdSefaw)(GV#Z$QFNaBmyk zNPcjXWV*>br0TR1ia@Oxy$| zV?ZDu`_AM?Nt<9O3dx#lc_2CL?a@B88O0MQ6T>WH=p8ktE^DTVq1Q3^%MlU$e3QAL zTvGmJ&Q9PrDl`8U+~_JXGzkfSs!Tsc!0D+fB?c!<3bl#4T;A;;nP+QVhr4|>hr-sz5d{937 zHz(At0u%uz;A$i@F4dCmaNY); zj0%GAQVTcBV6hM(>%SXoI4*qDhxHfPEY{ z5A5*?D2L`PBaXpA{gclYn5_BQ*d1!Bvh<#(?+$&Po6a~hU@%S=06K>ZZ$dg^H$PB~K%BhLjQagDJkFd*9R@R%7{u9^0V*1ZRr-O)kI8&nci>Zb!`C z6~$~-;py-4^b$`cu*)N0Z^sBiqLjn8O(dYvQSR_S?fuJbkJ>tjDf-V7JWA zfnw1US`KQtlM?DnA|5$Jn|x1!Zeuk?gJo8(Eyx^m)^X1SeN&H6f{SWd%cq z?DUW9Q1|NIo`g2w<&{tLPjqjh2Nubbr8%UYLC9EWH^0Q*?nKRomA$w*o<`C@aU$Uu zLte6CNGQnEt;_YS+d}1S)-=H{3uFv*UMYa7>|DYK$-?G(y{GXWWa=Z-Y>WNLf_PxK zGZhkpvm0ul`UAoL0gOlul#xcwhJVSGL01KKTorTPZY8DD^(Bc`BX9+oGeL)?(@fmK z-XOfBiBvuUC)diOogBO~ApevgJ)VXv-JI`5n+rJ6ULh?bn2Gua?J9e5IxhtPResG= zWqBH`=3I7@JwPoPSDoxqNd|XztcBJF5H~|D=%$IQ{2zl3r=?mi+sVOOQQULFHs_ueZ!BAT$YFC*g>BExH z!<>JmoBMsxkE~T*8SXKVSnY78wwv2p#Me`6BnCNs;&TA#_QFC;<#1W}0+fjBo6H$B z=LhLKYe!xHD@#r&Li)}J?crz^O}O9f9rWIedrHtC0v4GYn3g&CY?`>I9fo6)W#Y9s zEQMgey|IL(a_MB?X|^G%ApE$bYeqY3S3&6Ww7USyofeqVxvUc#ggLc)(Sqc0b}!OR z0GidjT^*PZsEw&r@flpY$pEa3o8!UNY6mgNb8rvNvc!2syKxU>F&3=U679o*F1K6# zm%0F;06xlS>vnY2vYM-H(=N4wsVJt>=!R8MovNUmo#@#qMAF8sZ_BKd%JMm#yIjuNu^hYW` zZ1M?rD>?CdRb9?CcyO)E!8cwB(V`*jsCuvQ)jgMb5))*KiFhO>wMuh z7IjMt&IC%-9sVbS+>0?D>qS6dypL?Ad*aUi2I2}Nl!FPGE1gnaJegdPL zrNUD)K_@U;-Wy2zwRRk=K5TNTpqnJ0G1OQ~e^uZ#!+QWIO0cVKLXkelrFhQ_V{;nM z4;y0D>U97r|5-HKzQ*`?2JS8SiTQz_kafeNp&qQEt*Z{wF8A6=a$qB(eJxp->qTzx zYA9?OfGnt)1g?N*_PPr^HD}J5n3iVW=6gZ#)HGg6+ijr~@I$UXRP8|w9DEM>24Pn+ z%V#e@-0Dn~-+vEA{LaVP&!QcPrWVhxap@FAoVzy|!NB!+(+brwMY|HH762M@%{h+i zB=*pa3~$U0PG6-tU8Pg`vJHW<CXM(^z`~Ea%iqUQ>F5jB)^FvWF10FbEz0giJZ!tnp zofm-jqXPg+m#=9;+OIN4hq`?{NI~YP?In-yooWCWie%>{!28yv#-w8$7tyh|t|)=t zZ(0Yt8(j3Af`5f>yY0w=LS@JaJ2Y1MzJmJ_?H1sob8{*q3EuNX1e3svH2I_m(Zj8$ zNziz3fuE1^Uy=%xqnDxpZ)5$7qHte9!Yq0=Y$>RXA_l%Uz~%4oAoF&l zh;;%!otRQ=Ii$4QE};hrV<)dyg_P%k_Y9x}|HI%HCs^)_dsRw&9-kOJfYj9bCi&ja zy{gq$+B0wW<0H%&RG%e~YZ7-8SyY6mn#?dKc@CWS+i@@#2cZZ+oWY=!#wpLd-O7CW zUhxA!^u-W}4w-3fPs*x$=mcK@m%i(EWJXWd?Cw=iHRbs_Pws|5-Qj(cTRKkp6RgxL z%~Sv?+zOy3%-YOJfW|36)+Vh>Y7bfRS+BgLn;a6n1NnImXMs|#-#w1u7z|;KQ-CG- z`PzEt6XAjW)KuKX19i>XT$#93{vq5&newu_NQ#gt;;TIHQoRcARmVv@Iu8@2^4SaM z4Q;f`1{yl+xdH_w4YP8?)u4|9K|K|y^}lbmTk%}xyEb-((v)tGfvn}OX=mRQh#5qi z(IoFRkI-h2Tc#8f36)}-&4muETW-Yh2#+3RJ$?_bn<#>d7+ho^F?C+%zO-1>q{>b> zwB#QsG#JDETos;DzyY#>v@&FcB0G~r!%n&O1;*HIM^xbSlnOa%kR>Xijor^Grm0zi zflr+dJ4WQ8S@9zsl^&^F_IQ|aciNFD#jz`?45|7o@UimVB4t;_p~(#J-6jcGtZik< zUeVG{oPC|u^;H!_T(pHMIVP>3oB4s9{O5Lc@X38ZbyHQ`T*3rBG>vG9ShZV8SC??e zIf*>o;pqcBb=Rrr4k6#1A-9SI5VIR*q8iG^$=*2AfAx~kMmkfjk!<(KGh1K`{3 zh@&;X`akWIWy~ruSTyd+^k#S_e31Wx=!UxHk9H&p52C=HsbOc@RT5l%`#zVly%h5e z=y=Ts0DTJZ-Mj*m+?I=zTcTdA!ZpZ2}8@Q(^@J#XWu)0VL<` z*t~5Eo3Z|)WWFCLai#j4$+mO_@vNp5ZmXs7wiw`9QyZa&>XQNqP1K4^%)|r)qs5G|sUnvzYN8Qkc@o&IWdT(6=@Mb?b#AzL4;@;Wj1ZUP#q=11 zur`PVWWA9lmI<(ot&@kbs+Ut$QJE;F`u5bh0C1tqO2%@TTwq`<8X-GxUH0md6G4?N zAcfEd(Wc_%^(6mExqBVo?6@!@fW~gNbb&p zkzYOa3#{Fq4wV6xI9ey)i4hC%GyPajSe>U^ZP8MxGc%mJnXBM-3GV7Nf6u zNnUpZtH=29g&va~$rs&qnU$ClQ;ax1J@TzGL$71hWY5hb^VUD!*4QYo{3e3BrrED; zqG)9pXFk1aVu=o50cx~J3hQU6O-MDInGcYMs$yd(IN10^KeOD<=xBV32V#1$ootzD z$?>Nc+{vglqZv;({Q(C{VQ~+Da`2C!*_Lf2T2MatFPg|=PGT;G)Kim!ya3WR_Gcd} zb3(bv-6UFJ*cBG5dj7}+%CA7xwEj2X8xW~{hQGQUU@w=9_=8lzO;s{MZ#H*AgU+$K-}SWG^wxa%w*((-E0 z0)2MUdL7TTz@o(Y190x%CIa5qaEBEZ&7ktO4o@}H>zqBwPk74Ni-4LTP*r~TYIZaN zG?c0j5M_qRLb;4ee5_5WuE7l95woNGcBL3#C9PI!iY_m-)*!0&uC(g1yrJ z2eAMBc4YQx{2gXHmHDbF*J!L&Z1m_*GcK$nC{tbYQ$LJa6?HZ74um|~kwo(&9r~Pc zGY_O1x4PGm)og}LatuPgQ7R8Cz^ZTtrQzLDy{*b`3j0<1{yQ8>NI)L0zA7kXS^6@* zc}n9bCaPzT_+5bNX?&`_jB{NFLRyv*Z}UbA@O-ILP?h^smhnwUfWyg8$AlRGx5Clfo0xM!0e1Ib@#N8ss< zL?aObG~6m+@~Mzl^zCLRIuwvJHl`aub&N~SG;v>F(|SxW@)eKvF#hzbv3FEW7K@wnU|hg0$-uWm)dbqvjoX52a(wrwtE~z zNbTIE$EgYDzXr;hdnwOOGJ2l}FsS>3AK?|~nxQDmY-yp}9y~B%$p&?&Drpou+Zrk#_TTWPW}Y zF`nY7-@9=oy?Yyrr@}J@+cde@12?M%a!rHHlCvH}$-oF5nReu8nTFH1UPwJY-~tFMrIBn;&F^ zZgbXdr9v?5)zww0yHOhT1+~~z@n2$jQe-#PqALF9H`xakmi!9tX73wgs4q(}HE+^` zn5O6+Gz~wuvT6HIGeg=clC+>z}<3MZjW<}cX-gb z32@0ko%oTE~Z<#L?h@8QxvMP*LoPYRMSLgwhlO&bk{Lh&y!nc^gu2d&z0>f(#D zcP&c%+~|L%HS6rsDWjEyvk<7OG8-OLR2|xb%I?cSsFdXUca}{wg|aDE{w95Iv?EK6 z-Fr`r8(%l6=zpl9{8%49PLxD_Vy0NAcBuqiP%z}XUSS2Tj7}9rSW$~`1D!kuOJwZG z5^&Btypn|kbq`jaoPDZmd0U4j5iQ;FF{*YFC-}24Z0)56!DXr5m*|_&#sdRYEift+ zz2mw)?CNli=F?vRXr*s{cJ=~|li~n0Mh9x%bF`eP)BrGH5uORld3>=*s{EsW22?qo zC6@-i2mrasp;CFFs5!5;hsk{$O(W3^hRB|%3u@bd|2OEEwc}u+8N}Tc=4`h1q3An} zoL{8ze1ogfBxSKKNP}1do^dimyOXnxvoT5K$HA3?Ax54GrAxt7U`Y7lWMJLj?*@vM zos4TdqOnr|b80^rw%=~W1w9Os2xcoUolZcn@u1r2N|$g*=42_4#sbw+Y-|8h0E$O_ zp0#FqE7?lN1>9>2Y5ViCA9hD% zx=8&{l1kX5zv}qR7=oX-lO&%K_$lbP!94}A$GARN^57Z|6xkfFpplG*s3>UX;N>h| z;K55g&>#f=5gQ+t+omFi7<9o}FAA?LJ?C%l$sw%WSg|S2$n4Rn9=68pyoEVB>3abx zm9p-?+f`~`#!Dak6C`v7MvoKVC&%ySX%c1>sn)jf3V_+ND$J&J0u<~O2TO>>M07~AdY`_f5$;A) zBee6U0q}EZ*rFXLU4@}2PB^+Bhl&gsNJvp1`9wdx|>boxr>17u`7HTIekq{-uqmhxCJ zkq4a~OtT&Po}kBWJMzuU`YOL^&uvx#5Mxz8s=|_WXRy*F{gjLWa@Z7Hvo@LItPK(M z-xPzj&hj0?DfM>brD?G3m zVx=QBD5c;Sz$=ccotY=otxQd0{~6g1z@J*KwHaEHYoXQ~R<98C>NNwk=w-vIGcs5D*F))n_*?~EDGd+lL1&DTmuee&ot zKt}Tp7LhQBg&4>j9M5sA+gQtw`H<`JvQtpLvNP7w0RR733PTD?P)=?`WhT{}p^~xb zC8X*sZD(2`&Z;9gcG_Mpx0czI(T+|UQ06o%x~;h9Q(cBNMxFFY9;_yt-t>(HanTQL z1Jn4cCafX4mY3xkoad6oK)Y02u zVaMqTX!I~IaaOJ+&uC)FNAb8hTy~x=4@?vD$xH1d;d7s--P8@UcZQ~#xwC(t#!6vN z03hDQH?Z=9QVDYKFM07{Z#%{}w6&%HwL5UrEX$lr0bFanvL+{$2KDGY%%1U7kG|$i zzPJg-sUV&?x;EoX0x!{RmrGS@Hl=T66)M+*wEHsc1nL-bFL{8Lb!FV!Y!jlj*vr#3 zJiV(T_N1|5Ad>p$OaV%kNI{;O7yoFx%6^OPj|>_716c3HNoAnhvlF>ceKowl{6 zNoj;k?2H6l)OLBgq}w%q6j?TcqX*i#82D!{eK$Ol%)^2oQnk-vJ!uEf&jCsdj9|V} z>6}DHIPO)Ni0-?@G+ zSLmTRcgYEml?-go_gb{+ZWbe^3W^`S)OjRB*QC=f$e5N{-;hdQQW*rgKiQGYIS=G# xG0D8W!qcF^17$R0kou8f@wV;0{|I(8=ijID-_|F7C?`8VlK)?Jv(VPo{{XJGWnusT diff --git a/.vs/HaoYueNet/FileContentIndex/4276406d-9cd1-4677-b724-afe7ec1c7148.vsidx b/.vs/HaoYueNet/FileContentIndex/4276406d-9cd1-4677-b724-afe7ec1c7148.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..bb9e0e90dab3009e5b90d89828c982885176b2df GIT binary patch literal 41298 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 diff --git a/.vs/HaoYueNet/FileContentIndex/6a19da00-ad65-49e0-96a6-8070e9505ed2.vsidx b/.vs/HaoYueNet/FileContentIndex/6a19da00-ad65-49e0-96a6-8070e9505ed2.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..6321b4cf77dc5a7f8b88477c87ac502d92be2593 GIT binary patch literal 44528 zcmbWg2b?5T)%V|IL_k2-#|XR40^KsygblDWv%^$ZRd?5PbyaUw^@I(MfS^c}peTZ? zpkiJOm@^nK=ZGMJiaw%ZPGG?Jm~-ZTe!u&ByT|?G`{=u$?)uib;oNiYJvY?t?%5!0 z?Omx>uv&Zx4H4dVk(l_A;!g*4G?&+?rOlX2Dyt99F9%)q1^JpQ?IZb=<42 z_o_3~)e~o`LAx3x)u3Aq{c4m~TYj~bRoi~G-LH1zY8q9GPPOP)i=}GWt@g|6ykFhg zscv1YE(g`+^2jJTGD?q(n@9HYBlD=XX1P`kYSp4vtJi8ltrpj6WvyPX)kkXesoHVl zwehjq_{Q4!3AOP}wTX?j6Y4d;s5O>qL0k)xT9DO3zZOQdXtCBxYVCe4?$+Y87WZmN zTuZWAx2UC2E$!E`MlEaBva*)-YrRITm)ETHqEjofT2a=@dad+pWxG~pwX&#{OSO5w zwj9)!!`gCDTP|zM{d#?>?ge$PTldQPRHHr>*Mn|7$m&sE?-s`%TR-;L^4KyOsl_9W zrIDaJ68a-iK9WZx%f)fW%^Y_^^|+bpajnSnwtHh$Z*1Bd+wP55y>(S@gS|X&derj+ z&ksF6_58lq=zD?h1#K@#yrAm^nHS_!)77@a7|Lq3tc?X1=#Q^|trC<-%L;kK$i2I@%f?Ek{QeMo&ye{r+f> zjW!oXTiIwk9*w)BaXFgyM|=KgFB$FSqrLuU9*q|L(b69+v(bfobh#X>PmST<)Y!!M z*u?s=jpJh{jE_x^jx{F6+T&y0rLnXe+cGh>I5xJFk8NEX+uj@7F*RNt8TZD<$LuvR zJ~1*rF+RRw)A+{v_{Pcc6YAq9Opb3le!P*6$KiOV7~h(V@0gmX)hBB0iLnzV#=VL0 z&cyoq#QKqmjrEC*lM|bkCW6{TP@f3AiC|`8ZhWGsO%(Ns!kZ{&CW?67*u=Vt+PaBi z-CVLRpI=`q*Vm`kdmGlDP+eb?8@#a%-uMP@-3D*NhOw9^`}RJ>CyJ|XgocdPLKAcNAu~?VtTZk9$lV3 zadF!3PY20#kWIJa>2`lQ?oP+$bdpV{{pp@R-Akr>`E;*8ok!C}HeK|m%bDrYpI$CE zSG~>E@y*rso2$X*YPh)?ZLYR9SKFJb-Obf>bG6u9?QgCwZ=M+2JX4*i9y?R3&D82M zwZ=>>pYgnz>CqWKooU1~Q99F%XPVheJDW+PnLIi%iBDYY`qde~KIMD9@3nj{@f#h# zk@$h{2Z0|%e$e)VjvthM*zm*94`V;f{4n>!(vMnxl=;obZ^nMB=C|s8Yszm$eyi)Z zQa|?nIQ2VIelqDNfuBTvlK4s2PYOTj`^kde_5ALP-;Mlk%kTF5)c4cCPeVVA{Iun# zOMaI6*^=LD`@O=?eLrvcdFtnxpXYvVA*G)$`GxNnkzcg@qU{$QzbO2o^ou3Gtofzq zms5V}`(@ylkzY3bvhA0#Uv~X6^UKmN`+h(1`-R^x{rSjWi2a4Gzfk&%fxj60i>bd< z^Oqujd8#on*H~w-+`OmZ2Ms@I_(daVH=?`|Cyh95%tdUrsFB2tG;d^CBcE*KQKR2% z^jnR7*;r~cmdeKVR%3fRsLlkndQfWzwKAxW1obJKo&qljyg2ZBfwvq?6v0f*THjjD zS|sobt3VJ$L68MeEr=$AXeNlFAc}*i7eqzS8V}kvbW}SE+H*lW4cd!A><4ig#APto z3p%x+vjN@M34%@-bfTb>2AwjneomqwiGw5yk~~QIL3dNo4TG-T%m-N*WJ!>9gDefQ zJjnV%FAaMAAdiAP4)V-q&7kN7MH!T}pqvTHI4IMg%z`ox$|5NHLAf0Clb~M&^Sy9Q zHLQ+=)tRtX4{JeKOTt&!hs`)_=3(oEur&|wj)O1`!?+p7X&C2WT!e8McB)}#bC^V7 zl7vYXcH=PZhglkC{jir|G~`iO)Wc#Vw3Vco3X3Q#>o!EfG7A?rgv(P=wH{SRqUuak zt46hYR2z?KJ~|VtY&)vOQLSqWYE;W?`HX61R9lGZUR0lo>RnbPKyAFpR-?#kM_z0T zkF7e9*Ruu2mXK(y9c^46O^-&??P$6eO_w%JL^Bbp?sshL*)WUz+=hyc1oO+Nu@nWq z`H;DSc|a6&qacfdG79FSa7`4}qOcx?Q&Bh*g?)Li<%ZvU`l9(Q7ewxb5T2s+C>znQ9K`Y+EL<1Nf;$jl*Ccei;@D%Yb9b89Cfp(+l$hAl#XBpPW>ni&|PU1rL8C}qjWyX!YFG-SwHIeQLl`)gwd9Ml-F#( zVEY1Fw4;0~%BQ2;kMh9GjPh2L$5Ea{c{j?_DDOpi9_2-pmr*_+6}70SM}-#^Gd7Z< zB8rMQDtb{-L`4}D{is-qifvI@i^_UbjzpywmFuJO_^6zU%0^TMQ5i*LGb-Cr8AoLj zmEEXJqcV%iA}Y(M>__E7R4zs3ax~wF=A&pKh!(PFVOz9Vj~2aXF^Cq+XsH%0Ek@gR zMBCHIyk$8s$BdSvXt~#{&NOSSX02=SUW;W8yyk<6KD?l?#npxh=wl%j*G;_b1x0-p@EXro- zHTy}kzqPrLG`IJf%RzIw-CRzZ%XzC-ZPn_n+IXur(W;%$suitT*{XZ3k>!>bw7jt8 zMJ=yvjmNDMw%YpCnyIx;9DzGvelJ>q*9zLLAZ~@WMATYQ9UH4?sufMQqOcV;t#?~d z&$_A=6|JajHOE@bsMWGp){4_soVDiSRuZ+649iP*ODm09Y1YcTR%X|tmGxV_yk+~f ze5#datzxECwp-;=tDm>}ORf2()^gBVPFhxx<)U33u`Ox4KGhy?v}e4wpSJzX)(=}A z+Wvey$l76ysWeL3QMVoC?Ko-2X*(|3b8&lazMaPHtkcetc9yq$c{?{Z@3hOZ-A~)| z{q{oEUR-EzpN@|`Huf8_AKB^{`-!bCaU+Nuaop&~jqPzTWz%;Y#BtEE$utfMn?2*O z8i%zwtjFO<93B^kUK~!v;dC5sj>DNa4B{}d*(wf;I9!OsWgAFwl*VXQyY}NGijz3* zMsc?ncl+3|r}a1;!PYgMjMJ$&oxz%56Ppdnw25|2<2dcaX*W*OIPJyhmN?Dhw20F( zPEEu1I9-mjAkNab=f}M$?v-&q6Bo6(sKpNqq}B$-PV=d$Wt7SCl{ZM~Z7_2;$( zb44~cZ&U9~r#9ZH`JGzasn#uOl_b;HE+vg5 ziIOBuk}T;)N!myDa&yS#yzuTQ3>&`d3Oa1P0qq`h*m%H8NUUxZ9 zYxT5Nr1hzEq?USN>J|3*WZU0#rk2jwzOa#E)0w1x*Y=2MV+ngnTRMWo_AY7APs19v zmRS4E{gX88rD2|iMH<>75je<04rcq`qgiYURw2(%NHWy=*G_$l-OIu#r+MKpd z#6r|6(pH(qL24TTjGQvhzGt>F4>5`Xj&(q~RtBz!~dR9xb zT9(y%SuMAR^Q=CVjnuN^Y(n)jFSdtUdq&N?ct(Yy&G0p>;&8%5wEiY?L+4K!>ZFOy$&f+kO(`>Gq%|%&fB1SmdT~}sVKh65RteQ>teQTN3T}z z)xw@1^nAOfJwNaHWv?;WYXrSU-V0j2(CFbiOo`Z`)DS>P79iqSh{InH_c6@m5i<7xj^%K2>-=9+m9Lz_yuQtMIbI z>lI#E@Bpar7K(|Wm>ex;YQ@Yn_Mv{G@SBC-D*Viz?usBU!j3%^6j8m1MsTDQZ7iax z!j1~Cp%3h71N+vfTSO_$$JTSZ?azujMXP1gZP6+V?1ZL@ zc2Km#qTMUn^F@21Xm2m#RuOk?2T;UW5pTu0W2atpMv6{Ubc&+0qezwtd-$^rW0qjX zvQg2i6+OS`h32e9F;WyB9>j}wQP|d?Y6pQuSue^FI|eJtX*{6Y&bqXy#Ku`s=0({r z%56nIDEdj!?-um?1ULim>}ng^r1ZL&O|3t99#?w((pxCK<#OFbx&DN5ir`tgWm zk5Z*Q1=?=NR_3T{4;!d79tq}4?D)5p(GJ_wm(8qf=C&Cv+f!wG21gY3B+-t`w)veM zS2XZc9fxJy#grdsWjt@&g)+%-jL~hC-JUSC8h94Z>>1SN z;@CDjWtL#A$ZSfpnZukK(_D$^DJwCj^vk?%gVRP`ncMx6IcQl-;W?(r%A&;6jBWI6 z?kRI@?)r8u%7v_4nzD_y%|qqVa=A4sx5d_(_UKnBM+Df``#ez(!@2K{bi8;5?{>8C|ME&IKh{+6YF?)UScpW8BM!z}6-t$xw&7jfVA zM`hjmzF&s@GU}I2YqdTqU-TE_{*vF{IyXPIWqxdNep58RsX6Z_818;K-{{ZVv4|ZL zM78;-F^@;(HkQ`N7KD7hxn;g-Q$jGG#q+&nz8}snRp*z=`K_&m`qYBwFL?2Smn>`; zTk!LRAXx~y3+-s39WTVKg}7Wu;sx73rOkybU&t00^4Jcd7Rq>G+m1!Aw0+#-Sc)gb zAX|(Zi*eVs%Zqbc7Q4w}+F#7W#k{$gw-<}{VmY-~_7@j|rRvC1t!@YUOSNLj^OvTR zrRid6rnxlJUh-o*I9qD0TZ;0fR&HCRrCzj@x0Z@>$(}?@+k8b!{l%rld}-_a(sFle zwZ1i~ZH??YwKbaF8YNp>)=1&jPP#SOWc&K9^P9FV&TU=Hw~g)CHojw9E7=zB*j9A5 z?YJ1H+S8-kTiN!uZ;!Uyd-?WWe|sM7s88+i>}ep`;q`ZT%gc>EKF0_~mU;fQ9JFme zj@@67ErcZc?%6e8wzZ^~ST3?<48?4@pI%b0Us9j? zn?90xlzj@*oZMcVe)hVJ8@9JkI%ny^Q`1u~*lzFS^pl4HUU25=r=ER*1wZzj^Ug4= zzi9ipC!KP}Nsl=7eD9QV&OYt*N4Sr5?)LiIw{Ey)?Q_1q$A4bZ_TG8toO|kd7o2|T z`P+LJo_yx%=ReXyPCNZflbh$9`S4TEljxm$;mH@Bb>`n*|J6qx_3xHcoO<44PCZX` zLP-~#bMl3!wJ$vT0)__XoOh~s%K3L&qe^A!+N)o%`d^e(oPO51XP&y<>4%!_!8vE0 zbdQ01H_o_EU!|6fY_56h`kHa_;9f9*W`?!El~?-5cj zC;86`d((R!yyoBUCv)%x8?@W)sG_I)f7>G-^~R5G`t-ludjF>+W8lVsH4$ zX_6l)!Y|QZXNYHtXNhNv=NM6ctTxc|7|D+}BLBtW6U0lzOT{OOJH;o7PZlo|FBhL8 zK2?005#>HZ@-xL}iO)9T-%7%+=hz$d-z7fJi16o&FA!fSUS-6;{})2~ zy+3Sk*!dChIwSh|W0G$aKQ7)R-YkB?2>qXue2Wp~{I|WK=kxZ4{x8@Y;a`&cW$`Nt z|GMOFh~G5AzVF%_`R=qg^!&iy``P*7PiW5p5iI3wC=O!Bx9de%u^ulVDQuxm=;)8b}vMm$lR z6@9TG24W~iVpD91Z7~+-#EzJVT`?6iu_ta3b0g|iO74sE;)1v+E{R*kZQ^!uhxkx& zS$vpyl6bOsiuiExRPi+N5#l4o)5S-LXNYHtXNhNv=ZNQuj~34p&lfKcFBBgmK32R) ze4O}r@nZ1_;w9px;uFQ4;*-QDi25nn65PP|&YMtr^a2JwyJo5X9y zH;Zo(-zvUMe7pD#@txwk#CMDD5#KAmPkg@-|5g$~A5i=U#Se)e7C$0hXT-dAqY?AR z%|^@*wWjFNt3kzhXprUzhw1Bg(y9@*Rr*p5*T< z{zsC3EdE6NsrWxe*!gqGzmWVZ@i*e{6#si8{(-ptgZM`y?E8xm`u?Wyzl;A+I3n$~ zvWK{*xRS$Y`(1y(AwZ9x5It-dntn(O#ANiuW_3KOby_ zU5ATDD1MFPsu6Y^CHZK{b>lrOd_v*tjP|N*ki1bmUg4X>DTPmqo5dONL~&O1#fBJ& zp%@uqM=CiJd*T)`H`=RGO74sE;(`(N+$wpS_WVBc16uaEhc(%gNQTU^c z*v~vx;TIX2F`_-MmHcM$E#h0nw~22z!jIl#v{&VQcENt_IwSn*qvG{Oq`S$8 zcK)QoKPBEGep>vD_}@l*Rc@91Iq~!27sT7dFB(zbuS))!(O#8rh~HB9x5eAVJH+pZ z-xa?ne%}cDe=PYYMtfEMNAl0apBquXUrGM8C znb;Gzh`Cr8(eH~!=-Dc6H)5QeYDB$GGa}s?ia$%?XN%{E=NggjLdlO2A8W+8xzq^% zeX``Ii@S^{?_)U^;7C)izPf5PTh<_mJ|7r0v zMnv5z`E%mu#V?4riC+}IWQ5&cF=E_(OX1%ZZ&&0sv8j-YzIM zo;k@KF%i3BDrQEc&m|W|`~wj_FD@BT&Nd_Zce}Vle5etA{BR@Yl{1XUf3^|%&NbSr za)Dit|3dLGM#Ntv`Eimjmiz=G^gL1WPRW-Uk?$!Af2#O2g+E>LGbBID2*0{g;m;GF zFTTJCeOF0-k@#YTzto6z^0kt$R{S;M>%}*SZxr7oUTcK@w}@|3_}j&IDEwWL-z~mJ ze6Ql)FZl!F2NnKd@j8WnRJ>liLGd?A{Gj`GVvx zieEOOoxW{EKi@9iA$~{vuJ}D8^xY}>2jUOKABjIUBHd4o_Nx5CF6htSO8%n}e)1QE z-(^JkNCfU-MEu^8_YwCsLht_K0SdpT5$O+>d@scxYP477zIH+U{T2Q|@xex{n@20Y zuJB`x7$4)3*Gb-Fgq~?5?A)yIz-U#dw2bzuBzD1mZr%uc7mY~2ByJVAiQA3H|1ilX z8DZC>j41Cc#Xnl{=ZWWw7Z{Q5vEt*!ON^+;Wk!^Lxe@j}RlLH8e9ttZ{O1~xZkOVp zC;9nCq`OM;izL5Pe1-UGBlKKtgq~|8zsU$Y-mdU>i0>5NWrSVt5#J|%K=B`x{9*Ar z@p>cdy3vU8J}%y5M0uZ<{2B4T#m|bj8d2`&C4WJ@P5h$xB_q;(Mf{q=zb<}5{HEf+ zE%|ow4)HtUca3PL9~fc(kB!j(Q^o&}_%re6ivOkLUrGLr_&bIFUi^djNAXYMpT)lz z?NzzUE+}^oYb>e1PP8iU*1Zi3f}K5)Uy#?_rYfZA88AE8bt> z4-g+HK1lILNM0?jG2$Nxy+<0M?`Xvzqwu=qhls~2{5Z*;I4X{bu{{_j^teNg;Q}?F!#vM0-3;@=1~( zF8NgPH1QGQBaO&+hU7EFvy3R`(MI^qV-)^aBg%c8#33jdlB{rfG+-xhB-BL8!FfhY{ss@L~Sj zL)=r`OWfOtbo)x)PuyR;hY|HXNIcYdpvez5BHs~4=wB_lDy~)dQR30!F^aDnu|FGE z_=LDlTyKQ_jYiaOTH%|;8SzAMR`kV&7>J=5iA}L(L^-k8F`~RJiqFMDEXBSN?Xo0! zs}cRSY()Q@tngFBhl{6*r-_d+BHx*k&l1lT&k@fRA8mxa=S#joyik0M_*n5G@o`4j z^#sY6h?j~_6n7e-|H(%D1JS>iNd_TbE&ZVnZhrZ{8Y(L6R%MCGbBG#^0OsBM|`fhOT5wuJ6|aID)B|) zi^Z3SFBM-VzFd5T_)76r;;Y5i7|}kjlYF%i|3Hj`YsA-!Z!jYLn64(azUN{-}7pc!LrB`Eeuk-Yof3ioZqSpHcX&3jdrD?ej&+UlPA;gr2WT{+jr8 zBj$zMCEsC0y6=kLSNNThe`v&f@++fF4V6DC{!ikcjmZC3BkZ_K+{-G9@O{MnjA+OG z#e0Yc7*X$oBp)o^%ZU7kiuYFdeZ*DbeZ~J0?`K552NZ^SF!kc55ylT{Kw)?75+cs&lLU(@mJz+#NUa35dUOEyZqURdG#)Z?_rY@!uK@7 zj=hbj?|$L|3O~?@bO(tCi}zCep^^_XBL6DM_cdBkl_QL3@1u<3yf&*mn-}g;w!~hiLW-o{?|%= zop`l)jnQ6}w@ZG9_)hU%;=9H77@_ZdlHV_WK>VQMKP>qp;&tLj#p}fz#E%(KubU*_ zEPld>cKx*E&lpkuXC>b%e$I&ew@Ln@_$Ben;#b74ieD4IE`Gy^@@_YxobM?7yOO^z z`A*3{G-AB{QsKW6f35i6D*kUq=*5?sVCP;&jK96beT*n?KgA!Q@Oz2}D*j;c5QQIV zgx*!+{T2QI@qyxl#0MKOzgHz6DXtZd5|1{*&bkqH9cx56qlzChLeB;x(w!hq8SxK9 zzRgC|bH<4L4atERijmk9TSnxMCC?c#kM<;QQG6k}G{TMrg)b?5tK{vHcSv3qPZCcN zPc_2M(7FZjmw2TS`CcITg+`=%k>nSPFEN_SRbD6gYVjKJ^+wovt>ib0ZxP=rzD<0)_zv-% z;=9Cm8=>$0l0P7RQ2dY)|3KLL5rtnTepKN%NdB03qxf<0Ch=zR6GrI!l;m5)Pm7;X z{AVTKDt=Dko;>S z{Ny)Al=C~uznA<+@y`nXi}+XZZ{pv@e~5R9I8259J;Xi5y~Mr6eZ+mm{lxvndx!@Z zG2h+W2zytF|0UkvhdQYm`7?x^@oYDdNM8u=_O0k1!(L z8IsRb{MnMvF`}G{BtK4kym+w@`Yw@tsrW>3r}!lC$>L?=f7!h@luMzGcMtO^vW)i{f*| zmy-LE7bGu=OX5~>n-O*{8=>!Hg`XlmTs&1gO?-s-NF(a~C?oWoE%{vWJR|z+e8oRj zyjbB+FrwTiO5Q0xNqn++nRvMoJzxz8|SeD6~Hl?s2p_(FwWCB8^}vG@}4rQ*xP zmy543!cX5I`HkY6#B0Sji*FI%D!$DKJKrI`OX2U9{9YsM|FFV8VnlmfFZl-XV@A~b zX7LtVPZ6IgK25wre7g7y@tNYY#Ah3!_qpPg3V)vD7f61g5q|$lBj$sv z6@HBo`QISVTjBk{-LPsE=Zk^h&He&4YUwVgJ25cCmlZf#>+WvAE762Hy;<%;FNlf$+n&%4&!`h=)L23l9sK z4L-7mJyTVBP=L3)^pT^Fbo&e=ke8Z!h#21COS$}n$%WywA^vc&G6u~o^24~JdTQQ- znrVTBSMcjPR|RJQjl=~%d#vn)dVB%cRj`da{Qj|mA4OI03#!T?OoF?Q;Vz_oRFANI zX%Log{LI0bh97`caLVp9Q$5YVCubEL&$`MSGSGsb+Evz|lV)*;Uqtfbt;(U)jB5(d5Ox=`;d{&#e2K4e2x8eOvosRrvWa=w14;Hk4tx`nAKO=$ zj{0VicNJ9a0nLZujz<0+;$FC{Mc5(8%clD)a!>))M^u1v*_SkkeH0>W7Bf4Wqz6@B z!6ieELs7wDjabH^D2TSOQ$i&EBQCE;jy;Ce8nhaFixoVCHD?8Rha^7q-G?>e1s-z9 z&?gxN^?Sj?%3%aVjtXev-?ORA;*KJF8s8zVut>H6KGLtu4(vMwiCH)NrnRzmXd1*T zh9atUABt#=9+Xo3w_yv?s-4++u!;i_Kd|MeCoa~fNSmR6eMCoJ(Jn|rmzu>Le#zn5 zWfdCiP?*t27#$AZ<8>}@3Tj0EbG^z+LjgV-tjw|p5w;IHndzLbA=WuRl(NVl*$qG0 zsqDeJu?!T>`GCIbqn3xD9vo`-fqE*%9}?oXishoP;3sqeBxe8Ox4EuKP-114T2KZn z$noJL%=!JGa7L^`mc7||EE1Q!hlS&A=#CB4jf06DkH2YD;Sge<)7%iPK`*Au<72K$ z1oiiU1vuSx7b<0U;}>NWPHq&hM-Ga!gSO&`a!rS-?#U`3)+J#&XxiHZZ-)A3I3pmb4RM$$!rK4&P_Ck z?L4%eQ!|GyzNt{*G|a~4=xL*c+&Y81%VFOhxMNj)=0F(Rg$sroV7o0v$gw9Ij3bXr z4C{ux^dUCWDnxKV9F7RLo};%|B&Q6H?t4HV2Lz3D0~TS7_$%(N!Uf+=uDI%$gqiuQpmT)c);20NKE1D6iB+C#y~xEu)kxZ-fdrhR)2e62(hnsGet9)=5k zPvy#um~PNQeV9fCNTwviW@0z8tq{E$dD%yY>{d6luB#C%!xZ_+mYd4iXt%3#2OUL9!cyE-;up?mZnWzUnBBUyWxpftHJ5h7j zu<%UoBJTqQbfg}VjNx(@U4R!9$1YOBfOXp&t;>^!HyZb$`fFp|az!&|T z^RGq(UHQWZ z$89M7T#lP8Y4c%7%zErT70@x!J#0xj^`R^m3OL>DHr_(S?qU^i_ds0kU=9?{{p6v; zj>2*ayfsfXp&0HJVh!ONL$sH^Mm5Gq9M}MaC!ysm3EqB5o z-m#B{&l;Q_T-YE7{$z=3E4K5=C}R~aRN$r&B%Vb&`lMSrIM@-g$>Hec(3Nu*7P(AnP9A)%Be0{L81qJ1>w1+!a8v2svvSEkQFl$M_ zqEeRxPKbBK4IKIgETt-TPs}6;<1;q1;cq%sP@iOKr2k7Da>^cCN-8>F0ob~WUT%P7~zG5%9#SrP(Y8(*EyNqlHQNh6L_NNaaf;%lbCVunb9+8KR>1;+i{Dma` z*(CQ2Mi-^}opc{)b`u5q+&Ke^TCNSZsssel)h>mF(beRK%InC`Ps#eEpQgYRaudoTwg#u>&z0ug`Ssq!OS-i^x` z()qZfRrC#7fS+f(HJMK=ryoUXc=x;=w@tFd|lYBjc(Z<)ZOhVUY92Vl{K*X`2KjcjN9j@u0b)`&%Nrse}17d~## z*lP3~_J>=o*c!Ot*ZGxwVA?F4CPWyIKli>Hm*+A@efTlGTLL-2I9Asp%#GTCmplS@ z9OCqL&UI)d=cjJwLXBuR$28lD?&Id1LFe&lmP>xYaZbZwF8%;mWn@qpe=x7%FNRgF z$Avqxuc08WI2>yDy}q`@NP@3Zy2-;GTcdS{hW{E#W^rNX?Zh3vu&K415d(v0BpGy+E+n-hQQ$}P-W=nT*|e4gRS3Fi%WZpOjRHb9LyW4a~FBsc8ah~?gl za~-E^ZmsA!U!wvfX4r6F$GY*9eK;Yr()fzk&cL$@YRLWy@E-@Ts zbT00_*(4klB}&_E0q20gSKgfGI4_}7qocT-%-W4Rvt$)`hU_Kl#fmKsl5lc!v&x|JIA%)N!m4t5;92u3n0p8#22&OFZL#nb+Zk6? zB&I=JY^drEjs+&hrN?$gW!$F}jOAR12>hL^N^ejQ+m!XayK?~!Kj&f4!oyMa8+&0Z zM+F*;mEq91f!&QZa3cUBpAm;m%(_uz3(XFO&@YiKLD)(AgT&n2x%Oii%wS&n=_!LI zVc76_i_OlabIy-KSV2z6SD>IZtUm5&JeymRxxz@OROoRQoUIC5~+Wo1f;XW+ug z{5HE;F(LmIBBz!T>gi@@48v$Ws>L$ygci58#~uFgt&8B2z+uIPppiN9x>=cbxUdcQ zfflDjn)X*{ag!Unk?Ej*7MGp&UeWf{ykf;c-r*wv+mCxkhPkH+X!#VBvM)LD{G5)C zYH|G1X6F6IpsKGyHurfbMyQVnx6C41}xXb zBHh@a`m31@nrCr$4_YuNmx~DV^6dISNU~y%h4@We4uNqwja&qg)8=Oq;UKW9~w9UehpQu%+F~(+>BcIY~WOJE*YfTH7J}< zuDfM(V++kRJOScN!)|o7WH&-7r>}i*$49|KQ8+6z^i#JS!!&;E#KvaBJ{4`xb%6@_ zNVdr2Z53xOSWg8!fS|rzD3^wFw%~4&M2>U(D zfXD`;+YVPSH@(sVB<91n^HY{)L2g0g7^I&*6#BUShEVDw8=t%$i#zvJIq(Q>NQY-K zY=~XZ%vydEcX&Gyf9TR}QrV68Zd`?r9&TwvztLPe7w_mz+}v?ubQf4fFJUdY5_8Km zeE4BQxV3^%Tv?=K#h%fdM`3_t#%!?7#)MF$^=@h7zOg$)$s zR!KG!s_H~qfMLaQStIT@oDZR~xozYyaEB691@*(jYOdH+z>Z@3@eInhWUk|Bu6t0V z1yq2$8*t%RI1FJtRV!%~BKF4}Ys96EV-wAwE2Yq~Fu3f6zr)U)-^0 z+%!iK5yM^Xigh1mux=d5voMX9owN@kt#{AtoW2mYdXSEZ-4I8PVOQ|ThmFml%XAD| zP0g^19}Th%I3v-`oGplD$J5Q+2t|?ZAe0`<>BfTGW5(rB$|h!|cOo%up=P(H3`P&T zEP_vRsImQcrnM)+XelS7eTTCY)YH9bGmUifJuDr%54U-&?^;;E59`=CPAP4MGjLj> z7Va3?@pRGud#`XIxQn1x>hktap0+n)dIYjtFELl>?> z`}kc5A2vHnp~_9AXbslV&AZf$Fn0Iw`I1TCubUhfvHswO_O;(jPLP2g% z4OMR8LtFI_G5m-VKOJ{FWNzr`leF(g7Ve%jX(>-)c>c#vZe5dbjzv1o%AEP#kVF_y zs5svE2<3bn?aT*2E(t4keK3-Pj?epS5(a0qwg!|ku@8JOl{!2W9of%;QeeWYWXy0e0TRc-=6JzSH(0?zzw zD?WYV_uB5vd<(4FG8iA{(oZeORf~%QAB;Id-5zc@6%2ZYF2Kg7L2fIAaybi((_HrI zU^3!p9R$)j`wIG!BFIu<2NH#ByR}lh6g+^gnQ0t~0C_ zEm*OKgDTD&oF`e@zHDr6aiHF9CQybO>}(BO@LwJ{_i?KRN@L+}4uck&y9;^g@>`ID zW;`4U*y5bSXccEY#_~HroB-$+Jt%OUhireROTjePjVx$jF24*)cXX}6HeeIe@PUJ{ zrytIArk z4LB8Cia|ny{%$v}nOxgLGn@E%tOpwr7dH&hmu}aLFxRHIqpIQ8*?xsEo?o%Fy{MEI zIs@)FDKOg=5cxUm&>h)KwBCL1fjQ6`tDu=9lxH4p|AMM+L6@;fco{YG}BA?(9nY|bPHC-olYZ(t0lCo!iCc{HSa_Y zHr?Hh3e=LN4g1K4_3kW)HHS!5oJKgN*#?|SnV7ydi*)DWasw_r*y6??N>)59bC$>7 zPO5NB(=DLKwf}Pw``%H=qT7jMa@J{2BU{?E-_?zkKdyyU;3r=WfM^8&EK7Z|7We z(czJD2&F9YMi}H8n+3sK{LiLtOuLO7{EwR$HqQQRQ>0tPext|2W{w#qaRY2H0q{X$ zEppIiHwKZ{Eoi9pih)QAPzDQU*ShmCl;I{VByr0V(z&sUSa&vpa@}x2I`)U_o9BoIu?ckceOVB7V-;Ml z(pd-d0cUEimv=WGFoH$W+j-FFCfb1lR>nse{Ct5Ao+~C4x*lSwo=?ZFKVW!?#-X|F zh+KEd(9g|;R82S}YFm^&8 z-HczBnKj9MdDA_WGZvcJ2F`GfP(;ky+eNq;1WiK2L&R=F1(}T>1-K0#BG?eaE&GZw zgBqp9()ALY?c zt4QLOCt5(wsM{oRXvBh!WgXeJFcbils9+p z#B4hLoMyOA{~Zb#ak<^NY29s}2BU|a!coSqWv2`mTz-JZaXt$LT(bCW!{J!C9);6~ z_*jbnuEO=vEvOd$S3K8m?7UqN_hjec?sLe?Z~3@A9Kw#qg$o~Z;J+_$UhJ|#y*u-; z8yA89fw1xlb|dbF>G*jqTWA*&Q=j_{CDY;J!r1$;g=3Z7$n8F#Sb9juNtJuEGf)t- z9XO~5clvz#^r3}`Ij=cSWV(NDaW)t~i`lK&SJB%sdAR2&6z(QQl*<{|&7xdl*f>bc zRn2|e3JaV&B7&CERX8qJBO9y5u*;#|eGUfoY%BK}6-z_xF4hQDpg~(uB>m-dM9^P+ zDCK;`y$=s5kzdcXNJm%ZU}7`z$-#$xtPu@zqX$LqL}_jrW8vs?Hs{?v)bR6ecj$yB zcGDcP4WDbdpbZZ`xQg%g%@Eey9SCv4Lyg>~2=(P1hZR>BuAyw$p*OL0hwj7iF}(1D z5qB&+@MpJ8L23NH8CMdTHf(415zjJQbD~=NAcx!F(l=-yBHV9o(N-ZN22JNP3?gR` zdN$Y4yBowik=K1(gB(1=`@b7Rr9*?*E;~^q`#hw%5Z&idxO3YNM6l0!;R>;0u0uNZ zrF&$AxHq*7+VB0akFoqkftzDF76x7BMg_8QS>&L*0!_(-8G0C-_(y~3pIcpyHKDVkPsl;OfPfFs}^Lw7_$_&+Y(hJgLc z4rL?KLFnxq$-~}f)45t=2+LEl0wzstG%fQ3Q-j>Dk}5oZvzJquz( zxUD2-B&doIdngL$SDW}@C&w!H8$38-Ea#>bdmrQ&jy%?gUtr)=fMRttKIlgGnhoLBU-l~0b0%~x4t*RwJW1szw{AIM z>oPH#Ddd2lX|xIjamuA{u=hE$auH^my5lw!$>!wG1ly(!fjg3dQf~5Dh2d!m^|6_#lp>vQEo$VZNV{?BU5%is%_7l4 zu4h>D!Pw`Pm|F067v1*+hXxJ3n4^r_C^`rS7^kY?%)sTC<+@`?&TD8UI*scs7<3&i zU@c*l`>+He-8Mp)8&M47=s~}^brpAP7tW`&gr}h)8jLmi zCCcEIiFx_a+kf_4i(0ZP=;QdKi|*4o?jF`cJ-dgc;ZJSrYr06sBJV*zfI-8D(beoS z4qdh%wD4D#XV{IK(&*@SQVV;Z6BN?@968*gPH$(C11;`gmCeaAhTVg_{0TFc1Xku` zgt0^E{O-`0c@gm*D!|3n9Cz-?-)`Jz32bLN*Y$|yo!jfdW>#Ui_2Wq1?YL+sCjgYj zS>SHnVqg%RmF-M}xOo~*psd2b-m0-OD2RiY&BRsB4J(*|w{vBNah&sEdFao>rrXJ; z!(|x8mYhY{@#tEP9yW>F03nQyMD@=@y47f=2&QqxiR{L0O*sL$xd}taUx@V zxud1wT%PXsp#}xfT=(e+_KutYh68r@Q)d|D_TI?rw#m5L7Z)xpZn1`GbOH7U{$C^Q z!V$r33YS1uCPZHP_-fp_jTbCu`?=*EJw0ph|K&(@=WzQARdkEt9vJ^U@`|5%@KXvl zJ8fZUoFh2NaQ8s_hJ(|6jLLz-hCmto+@8Mcyky`_4aBl_hdxO^;5s8*yA8>g?Gj71rE^B)Yezm~;+4-{W>e|K}u;f}94+427a4TFrr literal 0 HcmV?d00001 diff --git a/.vs/HaoYueNet/FileContentIndex/d5b6b639-3bec-437c-8aa1-0d19e483a59a.vsidx b/.vs/HaoYueNet/FileContentIndex/d5b6b639-3bec-437c-8aa1-0d19e483a59a.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..9cd0b9594f1c56161389dbaae772c4b933a197d4 GIT binary patch literal 38385 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 literal 0 HcmV?d00001 diff --git a/.vs/HaoYueNet/FileContentIndex/e611adbc-4f6c-4e85-99e1-a2450d1969e8.vsidx b/.vs/HaoYueNet/FileContentIndex/e611adbc-4f6c-4e85-99e1-a2450d1969e8.vsidx deleted file mode 100644 index 04a53212a76694a1f894e87c7bbab8f6451d3ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20133 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 diff --git a/.vs/HaoYueNet/FileContentIndex/f605dade-673c-4f67-ac26-a3f4c502f3b4.vsidx b/.vs/HaoYueNet/FileContentIndex/f605dade-673c-4f67-ac26-a3f4c502f3b4.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..eaacc07fda4e7e2b314b7a8e5b757634b5bbdce0 GIT binary patch literal 57139 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�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 M2Ig|Nl)LHw1Khn=+yDRo diff --git a/.vs/HaoYueNet/v17/.futdcache.v2 b/.vs/HaoYueNet/v17/.futdcache.v2 index 2ccc4fc113d4f7f24bca4ec4afc4a21837be0e8a..57a6f56ae437750e4e8e3cc24eefe3451dcfcd26 100644 GIT binary patch delta 250 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 UGIxAgW&i#N5tr_JlpH7j0|EK#SO5S3 delta 257 zcmcb(oO{tOE~anXjZCdfj9ZzQoIDxbCJQoIPwrRY-d@zi)aWY200sO&dh=E-=J@F8 z7cVdcOg`{}ee!x1;qCb+m@Jru*g_b=>Lh@qX{{bqmEQCsRVKCR0)dQt(^QzWr}y(S zu`;GkH{@rEn{Kbo#LgH9VjEAF3uKg=E_sPbf4kTjCSN9@{Y#j@rilW{S|@~Q%o0p$ z)6|%Rrms?EQiqt3JpG{-&@`~gfzuD>Fa?4QnhrDwq*Qgg?0Kd|j6yD-nZYKi14&)W N2S!EF%YnXN1^`*@L@59O diff --git a/.vs/ProjectEvaluation/haoyuenet.projects.v5.2 b/.vs/ProjectEvaluation/haoyuenet.projects.v5.2 index 93cb95ef5bdfb56ac72a15258c49a53684b8c725..c299a61dfb60f59ea7c18f0f8fe1f801c87cf787 100644 GIT binary patch delta 6121 zcmchb33Qaz6~}q^ecw!yd0+yWKnMvClCU+zu*4ORMQo#lPzYFzZo$P*ZF2;9RcCYA*sJ%!J z+TID_TOFCl3u71OdLtux1kJ$_9%FKHg{F9qMT7P>+l1us(u0ue^(1;)f`inC%YU;jaB#odiu3JBJPY7pqU114AmC*D{1NC0 zVa%7_Ig_-^yy31)hZz1o9I%|>^6P{%-tGi+18hr+Nt$f;$u@$CKruP#fHqFw>fW2> z@_6dUkm@VU7)!y$xaTaS0b{&Ow#^x@!q%5_?->Fu82`M4jKdZAO7A}ha0m0v=sz_K zB5{Q;kSPFB%-1io+665cU-deERx2iUzfP7Ch-PBI7P6e+h*kx@>* zX^iy_wjwQ@4g|h&yyfw(cyt29GoF`g6?iiX(;wQu}AeHfTACQZ_E>9IvGROB~@jpomKPDn(A?8ZJ|2M*~{DmaKRohp& zbRgyVU1(3}!T9l0WQ0@ZD*n2HEU<dF7_27{tG63$;_T{+{ z&Cex~F5Ht$Y`9l@7bRoFecG-lg1a$;)fc#01d+T?3Ql!D=FSDHHD8!QT0vhuT09R& z-%24npdaJ24$>H2(V5tMMQ2=Jf9(NW!SkS!MEk)4rEXJf|( z*ckA)aLJ4tv~^l@BrejiyTjN>#-J^#W|B*FfG7g9$xRVa>?y)@`u`wtn4L0E0%?%B z7#5=sor9VDb{i{?J-awpoIeTAksJ7#CSG1i2!#g?K!+HBKBNIE?s}F~68LE&1pV1{ zf_nR9dc?>LB*O)n2BQxLG5SalqnQe$m4wgVMpiqA$`udA^e!h&1!cIDe}_zfVVb0T+b)t0*$Sl-VYtL-Mdl{VmcLp>Cc)1QNk>cr?yAcE%~wbI203+U#g(E`Mh#5udu26+MEtU$F)JsH|*xg z*a?lqqF+WdlZqgET(E|OiSjY9wrw4H4+M`!odWknZ7Xo+Yg>VPlC~AN3$(4kJ-H!p zPch)0ssk0c&14GPp1F_;ztDpS?r8qDbUdmZNbdnqsBL6+G=HoJ2OrZ81@0l*MsW9q zX?2zUViy_1qc{>fr^Fvuzd_7E|% z7^c|9BiVe>kua+s1n^nmk1n6kEXKcF1#Lx}`$-HHe=h||ak-VQ6bE00l-rB)Ughw= zqkO7D`LQ?WIW@|YS%?RLp3J9Lfx}@!km@Hzb~Pl`LAy7QP{U^&fGIbz-@P4lpDkY* zyoAvGNk#XJOJscmbQicgzLUZn1NONF>_trA&iGRT^BQ6LFRwFQlz#zhUBuvgK@jH) zgE*hBa6Sli4HvhF@grBDsUUyq$3gxfz|)4|QyEQ%#dwQ@qDpAk=}Zq4;Alrr&U@1 zCC}@=DL=;Zda(`jye){-Ep&bBI#hS_i&Zogexr$~(7saJ3hmEmTcQ28+E!>^rEP`w zXB$F$i9vg*4peA2lOfs%K$-R{s`ovBD_E@^YEO<1vnPK}dllcmlwn@&P<)@OZM899 zQ-gzR>O%f`J*qb5?t^p(tgT0S9zyy~hbWR>z6RGw|2sqa-`6L7{}7Z3k^?c)IWZXBI;Guq*6TmZ+bgXKilEh{tAg!C6g3ha+!viK3{*CdV)3wtW%EpVqQ$RtMwc7cT6pxn}|1QgFs(8Gt#N&s{DZAknB_3uiin+Kop04SR-)n4 zwi1mU+E${mvmw!V%ZP^1fl4&YWa>PyxV4=MZ|gy&9DkLLKWRsN8+!n}qiv-Z&$Pk8 zUD~1aVx6|z$J%}2-MUh-TMulCwGY6adMdFuL?!mb*{BjS-$RQy`;1gnU6+clXb6J1 zJQIX~Q*daltgwwmH-7ktX=VXXoW#dDr#-Hl~Z3X*P8_(|>PKHEUcx(vx53qng x!WHn>V0m`1J&4a9WY>U+ckGu>@GHK31nI-~)>4NMdC>`{y!Q_;EDhM delta 19 acmeBNrq$CY+R(z-!qmdt!m@>x#~lDifCeuB diff --git a/HaoYueNet.sln b/HaoYueNet.sln index c0ce52c..ae173fb 100644 --- a/HaoYueNet.sln +++ b/HaoYueNet.sln @@ -11,12 +11,18 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HaoYueNet.ServerNetwork", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HaoYueNet.ClientNetwork", "NetLib\HaoYueNet.ClientNetwork\HaoYueNet.ClientNetwork.csproj", "{696F6AAE-2D41-48F7-8FCD-E95CFE2A6519}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleClient", "Simple\SimpleClient\SimpleClient.csproj", "{C558ACA4-E59E-4F4D-94B7-2B78DA272CF3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleServer", "Simple\SimpleServer\SimpleServer.csproj", "{5559B94A-DA9E-4CF7-B799-2BCAA1F11F49}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HaoYueNet.ClientNetworkNet4x", "NetLib\HaoYueNet.ClientNetworkNet4x\HaoYueNet.ClientNetworkNet4x.csproj", "{A741610F-29B9-4F0E-9A3D-0B3E1318F031}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerCore", "Simple\ServerCore\ServerCore.csproj", "{3F26CB3D-ECD1-4D50-8AE6-EB6762CBACF6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Protobuf", "Simple\Protobuf\Protobuf.csproj", "{E5AE46D9-D809-4E87-8ADD-B1BD28ED60E9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Simple\Server\Server.csproj", "{3F52D1D0-4B1E-4819-9AB3-A770DD5C505D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientCore", "Simple\ClientCore\ClientCore.csproj", "{99E54CE5-4EF6-4441-9F40-8FDE8229041E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client-Cli", "Simple\Client-Cli\Client-Cli.csproj", "{45FBC25D-9EC5-4C8E-A979-005F04CE76AB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -31,18 +37,30 @@ Global {696F6AAE-2D41-48F7-8FCD-E95CFE2A6519}.Debug|Any CPU.Build.0 = Debug|Any CPU {696F6AAE-2D41-48F7-8FCD-E95CFE2A6519}.Release|Any CPU.ActiveCfg = Release|Any CPU {696F6AAE-2D41-48F7-8FCD-E95CFE2A6519}.Release|Any CPU.Build.0 = Release|Any CPU - {C558ACA4-E59E-4F4D-94B7-2B78DA272CF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C558ACA4-E59E-4F4D-94B7-2B78DA272CF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C558ACA4-E59E-4F4D-94B7-2B78DA272CF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C558ACA4-E59E-4F4D-94B7-2B78DA272CF3}.Release|Any CPU.Build.0 = Release|Any CPU - {5559B94A-DA9E-4CF7-B799-2BCAA1F11F49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5559B94A-DA9E-4CF7-B799-2BCAA1F11F49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5559B94A-DA9E-4CF7-B799-2BCAA1F11F49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5559B94A-DA9E-4CF7-B799-2BCAA1F11F49}.Release|Any CPU.Build.0 = Release|Any CPU {A741610F-29B9-4F0E-9A3D-0B3E1318F031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A741610F-29B9-4F0E-9A3D-0B3E1318F031}.Debug|Any CPU.Build.0 = Debug|Any CPU {A741610F-29B9-4F0E-9A3D-0B3E1318F031}.Release|Any CPU.ActiveCfg = Release|Any CPU {A741610F-29B9-4F0E-9A3D-0B3E1318F031}.Release|Any CPU.Build.0 = Release|Any CPU + {3F26CB3D-ECD1-4D50-8AE6-EB6762CBACF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F26CB3D-ECD1-4D50-8AE6-EB6762CBACF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F26CB3D-ECD1-4D50-8AE6-EB6762CBACF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F26CB3D-ECD1-4D50-8AE6-EB6762CBACF6}.Release|Any CPU.Build.0 = Release|Any CPU + {E5AE46D9-D809-4E87-8ADD-B1BD28ED60E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5AE46D9-D809-4E87-8ADD-B1BD28ED60E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5AE46D9-D809-4E87-8ADD-B1BD28ED60E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5AE46D9-D809-4E87-8ADD-B1BD28ED60E9}.Release|Any CPU.Build.0 = Release|Any CPU + {3F52D1D0-4B1E-4819-9AB3-A770DD5C505D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F52D1D0-4B1E-4819-9AB3-A770DD5C505D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F52D1D0-4B1E-4819-9AB3-A770DD5C505D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F52D1D0-4B1E-4819-9AB3-A770DD5C505D}.Release|Any CPU.Build.0 = Release|Any CPU + {99E54CE5-4EF6-4441-9F40-8FDE8229041E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99E54CE5-4EF6-4441-9F40-8FDE8229041E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99E54CE5-4EF6-4441-9F40-8FDE8229041E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99E54CE5-4EF6-4441-9F40-8FDE8229041E}.Release|Any CPU.Build.0 = Release|Any CPU + {45FBC25D-9EC5-4C8E-A979-005F04CE76AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {45FBC25D-9EC5-4C8E-A979-005F04CE76AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {45FBC25D-9EC5-4C8E-A979-005F04CE76AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {45FBC25D-9EC5-4C8E-A979-005F04CE76AB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -50,9 +68,12 @@ Global GlobalSection(NestedProjects) = preSolution {22ED65D3-E2FB-49E4-BDF5-EB2A70774C2E} = {D0066C06-A89A-4E05-80E0-D8232FB0FF3C} {696F6AAE-2D41-48F7-8FCD-E95CFE2A6519} = {D0066C06-A89A-4E05-80E0-D8232FB0FF3C} - {C558ACA4-E59E-4F4D-94B7-2B78DA272CF3} = {A2CAD164-0816-4D1D-9793-1B1F398C9D29} - {5559B94A-DA9E-4CF7-B799-2BCAA1F11F49} = {A2CAD164-0816-4D1D-9793-1B1F398C9D29} {A741610F-29B9-4F0E-9A3D-0B3E1318F031} = {D0066C06-A89A-4E05-80E0-D8232FB0FF3C} + {3F26CB3D-ECD1-4D50-8AE6-EB6762CBACF6} = {A2CAD164-0816-4D1D-9793-1B1F398C9D29} + {E5AE46D9-D809-4E87-8ADD-B1BD28ED60E9} = {A2CAD164-0816-4D1D-9793-1B1F398C9D29} + {3F52D1D0-4B1E-4819-9AB3-A770DD5C505D} = {A2CAD164-0816-4D1D-9793-1B1F398C9D29} + {99E54CE5-4EF6-4441-9F40-8FDE8229041E} = {A2CAD164-0816-4D1D-9793-1B1F398C9D29} + {45FBC25D-9EC5-4C8E-A979-005F04CE76AB} = {A2CAD164-0816-4D1D-9793-1B1F398C9D29} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {22107F03-013F-4871-AC8E-F082694E2679} diff --git a/NetLib/HaoYueNet.ClientNetwork/Properties/PublishProfiles/FolderProfile.pubxml b/NetLib/HaoYueNet.ClientNetwork/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..34e4f3a --- /dev/null +++ b/NetLib/HaoYueNet.ClientNetwork/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,13 @@ + + + + + Release + Any CPU + bin\Release\net7.0\publish\ + FileSystem + <_TargetId>Folder + + \ No newline at end of file diff --git a/NetLib/HaoYueNet.ServerNetwork/Properties/PublishProfiles/FolderProfile.pubxml b/NetLib/HaoYueNet.ServerNetwork/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..34e4f3a --- /dev/null +++ b/NetLib/HaoYueNet.ServerNetwork/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,13 @@ + + + + + Release + Any CPU + bin\Release\net7.0\publish\ + FileSystem + <_TargetId>Folder + + \ No newline at end of file diff --git a/ProtobufCore/out/CS/ProtobufAuth.cs b/ProtobufCore/out/CS/ProtobufAuth.cs new file mode 100644 index 0000000..2ab2650 --- /dev/null +++ b/ProtobufCore/out/CS/ProtobufAuth.cs @@ -0,0 +1,1145 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: protobuf_Auth.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace AxibugProtobuf { + + /// Holder for reflection information generated from protobuf_Auth.proto + public static partial class ProtobufAuthReflection { + + #region Descriptor + /// File descriptor for protobuf_Auth.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static ProtobufAuthReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "ChNwcm90b2J1Zl9BdXRoLnByb3RvEg5BeGlidWdQcm90b2J1ZiKRAQoOUHJv", + "dG9idWZfTG9naW4SLAoJbG9naW5UeXBlGAEgASgOMhkuQXhpYnVnUHJvdG9i", + "dWYuTG9naW5UeXBlEi4KCmRldmljZVR5cGUYAiABKA4yGi5BeGlidWdQcm90", + "b2J1Zi5EZXZpY2VUeXBlEg8KB0FjY291bnQYAyABKAkSEAoIUGFzc3dvcmQY", + "BCABKAkifwoTUHJvdG9idWZfTG9naW5fUkVTUBINCgVUb2tlbhgBIAEoCRIV", + "Cg1MYXN0TG9naW5EYXRlGAIgASgJEg8KB1JlZ0RhdGUYAyABKAkSMQoGU3Rh", + "dHVzGAQgASgOMiEuQXhpYnVnUHJvdG9idWYuTG9naW5SZXN1bHRTdGF0dXMi", + "IwoQUHJvdG9idWZfQ2hhdE1zZxIPCgdDaGF0TXNnGAEgASgJIkgKFVByb3Rv", + "YnVmX0NoYXRNc2dfUkVTUBIQCghOaWNrTmFtZRgBIAEoCRIPCgdDaGF0TXNn", + "GAIgASgJEgwKBERhdGUYAyABKAMqPQoJQ29tbWFuZElEEg4KCkNNRF9ERUZB", + "VUwQABIOCglDTURfTE9HSU4Q0Q8SEAoLQ01EX0NIQVRNU0cQoR8qKwoJRXJy", + "b3JDb2RlEhAKDEVSUk9SX0RFRkFVTBAAEgwKCEVSUk9SX09LEAEqPgoJTG9n", + "aW5UeXBlEg8KC0Jhc2VEZWZhdWx0EAASDgoKSGFvWXVlQXV0aBABEgcKA0JG", + "MxADEgcKA0JGNBAEKksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZh", + "dWx0EAASBgoCUEMQARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoDUFNWEAQq", + "TgoRTG9naW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNfQmFz", + "ZURlZmF1bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnByb3Rv", + "Mw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login), global::AxibugProtobuf.Protobuf_Login.Parser, new[]{ "LoginType", "DeviceType", "Account", "Password" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login_RESP), global::AxibugProtobuf.Protobuf_Login_RESP.Parser, new[]{ "Token", "LastLoginDate", "RegDate", "Status" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_ChatMsg), global::AxibugProtobuf.Protobuf_ChatMsg.Parser, new[]{ "ChatMsg" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_ChatMsg_RESP), global::AxibugProtobuf.Protobuf_ChatMsg_RESP.Parser, new[]{ "NickName", "ChatMsg", "Date" }, null, null, null, null) + })); + } + #endregion + + } + #region Enums + public enum CommandID { + /// + ///缺省不使用 + /// + [pbr::OriginalName("CMD_DEFAUL")] CmdDefaul = 0, + /// + ///登录上行 | 下行 对应 Protobuf_Login | Protobuf_Login_RESP + /// + [pbr::OriginalName("CMD_LOGIN")] CmdLogin = 2001, + /// + ///登录上行 | 下行 对应 Protobuf_ChatMsg | Protobuf_ChatMsg_RESP + /// + [pbr::OriginalName("CMD_CHATMSG")] CmdChatmsg = 4001, + } + + public enum ErrorCode { + /// + ///缺省不使用 + /// + [pbr::OriginalName("ERROR_DEFAUL")] ErrorDefaul = 0, + /// + ///成功 + /// + [pbr::OriginalName("ERROR_OK")] ErrorOk = 1, + } + + public enum LoginType { + /// + ///缺省不使用 + /// + [pbr::OriginalName("BaseDefault")] BaseDefault = 0, + [pbr::OriginalName("HaoYueAuth")] HaoYueAuth = 1, + [pbr::OriginalName("BF3")] Bf3 = 3, + [pbr::OriginalName("BF4")] Bf4 = 4, + } + + public enum DeviceType { + /// + ///缺省不使用 + /// + [pbr::OriginalName("DeviceType_Default")] Default = 0, + [pbr::OriginalName("PC")] Pc = 1, + [pbr::OriginalName("Android")] Android = 2, + [pbr::OriginalName("IOS")] Ios = 3, + [pbr::OriginalName("PSV")] Psv = 4, + } + + public enum LoginResultStatus { + /// + ///缺省不使用 + /// + [pbr::OriginalName("LoginResultStatus_BaseDefault")] BaseDefault = 0, + [pbr::OriginalName("OK")] Ok = 1, + [pbr::OriginalName("AccountErr")] AccountErr = 2, + } + + #endregion + + #region Messages + /// + ///登录数据上行 + /// + public sealed partial class Protobuf_Login : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_Login()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login(Protobuf_Login other) : this() { + loginType_ = other.loginType_; + deviceType_ = other.deviceType_; + account_ = other.account_; + password_ = other.password_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login Clone() { + return new Protobuf_Login(this); + } + + /// Field number for the "loginType" field. + public const int LoginTypeFieldNumber = 1; + private global::AxibugProtobuf.LoginType loginType_ = global::AxibugProtobuf.LoginType.BaseDefault; + /// + ///登录操作类型 [0]皓月通行证 [3] 皓月BF3 [4] 皓月BF4 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::AxibugProtobuf.LoginType LoginType { + get { return loginType_; } + set { + loginType_ = value; + } + } + + /// Field number for the "deviceType" field. + public const int DeviceTypeFieldNumber = 2; + private global::AxibugProtobuf.DeviceType deviceType_ = global::AxibugProtobuf.DeviceType.Default; + /// + ///设备类型 [0]PC [1]AndroidPad预留 [3]IPad预留 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::AxibugProtobuf.DeviceType DeviceType { + get { return deviceType_; } + set { + deviceType_ = value; + } + } + + /// Field number for the "Account" field. + public const int AccountFieldNumber = 3; + private string account_ = ""; + /// + ///用户名 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Account { + get { return account_; } + set { + account_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Password" field. + public const int PasswordFieldNumber = 4; + private string password_ = ""; + /// + ///密码 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Password { + get { return password_; } + set { + password_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_Login); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_Login other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (LoginType != other.LoginType) return false; + if (DeviceType != other.DeviceType) return false; + if (Account != other.Account) return false; + if (Password != other.Password) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (LoginType != global::AxibugProtobuf.LoginType.BaseDefault) hash ^= LoginType.GetHashCode(); + if (DeviceType != global::AxibugProtobuf.DeviceType.Default) hash ^= DeviceType.GetHashCode(); + if (Account.Length != 0) hash ^= Account.GetHashCode(); + if (Password.Length != 0) hash ^= Password.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (LoginType != global::AxibugProtobuf.LoginType.BaseDefault) { + output.WriteRawTag(8); + output.WriteEnum((int) LoginType); + } + if (DeviceType != global::AxibugProtobuf.DeviceType.Default) { + output.WriteRawTag(16); + output.WriteEnum((int) DeviceType); + } + if (Account.Length != 0) { + output.WriteRawTag(26); + output.WriteString(Account); + } + if (Password.Length != 0) { + output.WriteRawTag(34); + output.WriteString(Password); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (LoginType != global::AxibugProtobuf.LoginType.BaseDefault) { + output.WriteRawTag(8); + output.WriteEnum((int) LoginType); + } + if (DeviceType != global::AxibugProtobuf.DeviceType.Default) { + output.WriteRawTag(16); + output.WriteEnum((int) DeviceType); + } + if (Account.Length != 0) { + output.WriteRawTag(26); + output.WriteString(Account); + } + if (Password.Length != 0) { + output.WriteRawTag(34); + output.WriteString(Password); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (LoginType != global::AxibugProtobuf.LoginType.BaseDefault) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) LoginType); + } + if (DeviceType != global::AxibugProtobuf.DeviceType.Default) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) DeviceType); + } + if (Account.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Account); + } + if (Password.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Password); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_Login other) { + if (other == null) { + return; + } + if (other.LoginType != global::AxibugProtobuf.LoginType.BaseDefault) { + LoginType = other.LoginType; + } + if (other.DeviceType != global::AxibugProtobuf.DeviceType.Default) { + DeviceType = other.DeviceType; + } + if (other.Account.Length != 0) { + Account = other.Account; + } + if (other.Password.Length != 0) { + Password = other.Password; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + LoginType = (global::AxibugProtobuf.LoginType) input.ReadEnum(); + break; + } + case 16: { + DeviceType = (global::AxibugProtobuf.DeviceType) input.ReadEnum(); + break; + } + case 26: { + Account = input.ReadString(); + break; + } + case 34: { + Password = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 8: { + LoginType = (global::AxibugProtobuf.LoginType) input.ReadEnum(); + break; + } + case 16: { + DeviceType = (global::AxibugProtobuf.DeviceType) input.ReadEnum(); + break; + } + case 26: { + Account = input.ReadString(); + break; + } + case 34: { + Password = input.ReadString(); + break; + } + } + } + } + #endif + + } + + /// + ///登录数据下行 + /// + public sealed partial class Protobuf_Login_RESP : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_Login_RESP()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[1]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login_RESP() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login_RESP(Protobuf_Login_RESP other) : this() { + token_ = other.token_; + lastLoginDate_ = other.lastLoginDate_; + regDate_ = other.regDate_; + status_ = other.status_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login_RESP Clone() { + return new Protobuf_Login_RESP(this); + } + + /// Field number for the "Token" field. + public const int TokenFieldNumber = 1; + private string token_ = ""; + /// + ///登录凭据 (本次登录之后,所有业务请求凭据,需要存储在内存中) + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Token { + get { return token_; } + set { + token_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "LastLoginDate" field. + public const int LastLoginDateFieldNumber = 2; + private string lastLoginDate_ = ""; + /// + ///上次登录时间(只用于呈现的字符串,若界面需求需要) + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string LastLoginDate { + get { return lastLoginDate_; } + set { + lastLoginDate_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "RegDate" field. + public const int RegDateFieldNumber = 3; + private string regDate_ = ""; + /// + ///注册时间(只用于呈现的字符串,若界面需求需要) + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string RegDate { + get { return regDate_; } + set { + regDate_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Status" field. + public const int StatusFieldNumber = 4; + private global::AxibugProtobuf.LoginResultStatus status_ = global::AxibugProtobuf.LoginResultStatus.BaseDefault; + /// + ///账号状态 (预留) [1]正常[0]被禁封 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::AxibugProtobuf.LoginResultStatus Status { + get { return status_; } + set { + status_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_Login_RESP); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_Login_RESP other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Token != other.Token) return false; + if (LastLoginDate != other.LastLoginDate) return false; + if (RegDate != other.RegDate) return false; + if (Status != other.Status) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (Token.Length != 0) hash ^= Token.GetHashCode(); + if (LastLoginDate.Length != 0) hash ^= LastLoginDate.GetHashCode(); + if (RegDate.Length != 0) hash ^= RegDate.GetHashCode(); + if (Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) hash ^= Status.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (Token.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Token); + } + if (LastLoginDate.Length != 0) { + output.WriteRawTag(18); + output.WriteString(LastLoginDate); + } + if (RegDate.Length != 0) { + output.WriteRawTag(26); + output.WriteString(RegDate); + } + if (Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) { + output.WriteRawTag(32); + output.WriteEnum((int) Status); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (Token.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Token); + } + if (LastLoginDate.Length != 0) { + output.WriteRawTag(18); + output.WriteString(LastLoginDate); + } + if (RegDate.Length != 0) { + output.WriteRawTag(26); + output.WriteString(RegDate); + } + if (Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) { + output.WriteRawTag(32); + output.WriteEnum((int) Status); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (Token.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Token); + } + if (LastLoginDate.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(LastLoginDate); + } + if (RegDate.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(RegDate); + } + if (Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Status); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_Login_RESP other) { + if (other == null) { + return; + } + if (other.Token.Length != 0) { + Token = other.Token; + } + if (other.LastLoginDate.Length != 0) { + LastLoginDate = other.LastLoginDate; + } + if (other.RegDate.Length != 0) { + RegDate = other.RegDate; + } + if (other.Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) { + Status = other.Status; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + Token = input.ReadString(); + break; + } + case 18: { + LastLoginDate = input.ReadString(); + break; + } + case 26: { + RegDate = input.ReadString(); + break; + } + case 32: { + Status = (global::AxibugProtobuf.LoginResultStatus) input.ReadEnum(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + Token = input.ReadString(); + break; + } + case 18: { + LastLoginDate = input.ReadString(); + break; + } + case 26: { + RegDate = input.ReadString(); + break; + } + case 32: { + Status = (global::AxibugProtobuf.LoginResultStatus) input.ReadEnum(); + break; + } + } + } + } + #endif + + } + + /// + ///聊天 上行 + /// + public sealed partial class Protobuf_ChatMsg : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_ChatMsg()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[2]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg(Protobuf_ChatMsg other) : this() { + chatMsg_ = other.chatMsg_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg Clone() { + return new Protobuf_ChatMsg(this); + } + + /// Field number for the "ChatMsg" field. + public const int ChatMsgFieldNumber = 1; + private string chatMsg_ = ""; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ChatMsg { + get { return chatMsg_; } + set { + chatMsg_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_ChatMsg); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_ChatMsg other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (ChatMsg != other.ChatMsg) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (ChatMsg.Length != 0) hash ^= ChatMsg.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (ChatMsg.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ChatMsg); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (ChatMsg.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ChatMsg); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (ChatMsg.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ChatMsg); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_ChatMsg other) { + if (other == null) { + return; + } + if (other.ChatMsg.Length != 0) { + ChatMsg = other.ChatMsg; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + ChatMsg = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + ChatMsg = input.ReadString(); + break; + } + } + } + } + #endif + + } + + /// + ///聊天 下行 + /// + public sealed partial class Protobuf_ChatMsg_RESP : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_ChatMsg_RESP()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[3]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP(Protobuf_ChatMsg_RESP other) : this() { + nickName_ = other.nickName_; + chatMsg_ = other.chatMsg_; + date_ = other.date_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP Clone() { + return new Protobuf_ChatMsg_RESP(this); + } + + /// Field number for the "NickName" field. + public const int NickNameFieldNumber = 1; + private string nickName_ = ""; + /// + ///昵称 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string NickName { + get { return nickName_; } + set { + nickName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "ChatMsg" field. + public const int ChatMsgFieldNumber = 2; + private string chatMsg_ = ""; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ChatMsg { + get { return chatMsg_; } + set { + chatMsg_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Date" field. + public const int DateFieldNumber = 3; + private long date_; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public long Date { + get { return date_; } + set { + date_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_ChatMsg_RESP); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_ChatMsg_RESP other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (NickName != other.NickName) return false; + if (ChatMsg != other.ChatMsg) return false; + if (Date != other.Date) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (NickName.Length != 0) hash ^= NickName.GetHashCode(); + if (ChatMsg.Length != 0) hash ^= ChatMsg.GetHashCode(); + if (Date != 0L) hash ^= Date.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (NickName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(NickName); + } + if (ChatMsg.Length != 0) { + output.WriteRawTag(18); + output.WriteString(ChatMsg); + } + if (Date != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Date); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (NickName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(NickName); + } + if (ChatMsg.Length != 0) { + output.WriteRawTag(18); + output.WriteString(ChatMsg); + } + if (Date != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Date); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (NickName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(NickName); + } + if (ChatMsg.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ChatMsg); + } + if (Date != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Date); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_ChatMsg_RESP other) { + if (other == null) { + return; + } + if (other.NickName.Length != 0) { + NickName = other.NickName; + } + if (other.ChatMsg.Length != 0) { + ChatMsg = other.ChatMsg; + } + if (other.Date != 0L) { + Date = other.Date; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + NickName = input.ReadString(); + break; + } + case 18: { + ChatMsg = input.ReadString(); + break; + } + case 24: { + Date = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + NickName = input.ReadString(); + break; + } + case 18: { + ChatMsg = input.ReadString(); + break; + } + case 24: { + Date = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/ProtobufCore/proto/protobuf_Auth.proto b/ProtobufCore/proto/protobuf_Auth.proto new file mode 100644 index 0000000..5298c59 --- /dev/null +++ b/ProtobufCore/proto/protobuf_Auth.proto @@ -0,0 +1,75 @@ +syntax = "proto3"; +package AxibugProtobuf; +option optimize_for = SPEED; + +enum CommandID +{ + CMD_DEFAUL = 0;//缺省不使用 + + CMD_LOGIN = 2001; //登录上行 | 下行 对应 Protobuf_Login | Protobuf_Login_RESP + + CMD_CHATMSG = 4001; //登录上行 | 下行 对应 Protobuf_ChatMsg | Protobuf_ChatMsg_RESP +} + +enum ErrorCode +{ + ERROR_DEFAUL = 0;//缺省不使用 + ERROR_OK = 1; //成功 +} + +enum LoginType +{ + BaseDefault = 0;//缺省不使用 + HaoYueAuth = 1; + BF3 = 3; + BF4 = 4; +} + +enum DeviceType +{ + DeviceType_Default = 0;//缺省不使用 + PC = 1; + Android = 2; + IOS = 3; + PSV = 4; +} + +enum LoginResultStatus +{ + LoginResultStatus_BaseDefault = 0;//缺省不使用 + OK = 1; + AccountErr = 2; +} + +//登录数据上行 +message Protobuf_Login +{ + LoginType loginType = 1;//登录操作类型 [0]皓月通行证 [3] 皓月BF3 [4] 皓月BF4 + DeviceType deviceType = 2;//设备类型 [0]PC [1]AndroidPad预留 [3]IPad预留 + string Account = 3;//用户名 + string Password = 4;//密码 +} + +//登录数据下行 +message Protobuf_Login_RESP +{ + string Token = 1;//登录凭据 (本次登录之后,所有业务请求凭据,需要存储在内存中) + string LastLoginDate = 2;//上次登录时间(只用于呈现的字符串,若界面需求需要) + string RegDate = 3;//注册时间(只用于呈现的字符串,若界面需求需要) + LoginResultStatus Status = 4;//账号状态 (预留) [1]正常[0]被禁封 +} + + +//聊天 上行 +message Protobuf_ChatMsg +{ + string ChatMsg = 1;//消息 +} + +//聊天 下行 +message Protobuf_ChatMsg_RESP +{ + string NickName = 1;//昵称 + string ChatMsg = 2;//消息 + int64 Date = 3;//消息 +} \ No newline at end of file diff --git a/ProtobufCore/proto2cpp.exe b/ProtobufCore/proto2cpp.exe deleted file mode 100644 index 04e976af96ad6910ea7565e552d2239f7050236f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54784 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

~qRSDtvVDHKD*<$KDO;;Q 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 C + + + Exe + net7.0 + Client_Cli + enable + enable + + + + + + + diff --git a/Simple/Client-Cli/Program.cs b/Simple/Client-Cli/Program.cs new file mode 100644 index 0000000..30e119f --- /dev/null +++ b/Simple/Client-Cli/Program.cs @@ -0,0 +1,41 @@ +using ClientCore; +App.Init("127.0.0.1", 23846); + +//注册 +App.chat.OnChatMsg += OnChatMsg; + +while (true) +{ + string CommandStr = Console.ReadLine(); + string Command = ""; + Command = ((CommandStr.IndexOf(" ") <= 0) ? CommandStr : CommandStr.Substring(0, CommandStr.IndexOf(" "))); + string[] CmdArr = CommandStr.Split(' '); + switch (Command) + { + case "login": + case "l": + if (CmdArr.Length < 2) + { + Console.WriteLine("缺省用户名"); + return; + } + App.login.Login(CmdArr[1]); + break; + case "say": + if (CmdArr.Length < 2) + { + Console.WriteLine("缺省参数"); + return; + } + App.chat.SendChatMsg(CmdArr[1]); + break; + default: + Console.WriteLine("未知命令" + CommandStr); + break; + } +} + +void OnChatMsg(string str1, string str2) +{ + Console.WriteLine($"[Chat]{str1}:{str2}"); +} \ No newline at end of file diff --git a/Simple/ClientCore/App.cs b/Simple/ClientCore/App.cs new file mode 100644 index 0000000..c2567bc --- /dev/null +++ b/Simple/ClientCore/App.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ClientCore.Manager; +using ClientCore.Network; + +namespace ClientCore +{ + public class App + { + public static string TokenStr; + public static long RID = -1; + public static string IP; + public static int Port; + public static NetworkHelper networkHelper; + public static AppLogin login; + public static AppChat chat; + + public static void Init(string IP, int port) + { + networkHelper = new NetworkHelper(); + login = new AppLogin(); + chat = new AppChat(); + networkHelper.Init(IP, port); + } + } + + +} \ No newline at end of file diff --git a/Simple/SimpleClient/SimpleClient.csproj b/Simple/ClientCore/ClientCore.csproj similarity index 58% rename from Simple/SimpleClient/SimpleClient.csproj rename to Simple/ClientCore/ClientCore.csproj index 9459fbb..c3fefa8 100644 --- a/Simple/SimpleClient/SimpleClient.csproj +++ b/Simple/ClientCore/ClientCore.csproj @@ -1,23 +1,14 @@ - + - Exe net7.0 enable enable - - - - - - - - - + diff --git a/Simple/ClientCore/Event/DelegateClass.cs b/Simple/ClientCore/Event/DelegateClass.cs new file mode 100644 index 0000000..3c972cb --- /dev/null +++ b/Simple/ClientCore/Event/DelegateClass.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static HaoYueNet.ClientNetwork.NetworkHelperCore; + +namespace ClientCore.Event +{ + public class DelegateClass + { + public delegate void dg_Str(string Msg); + public delegate void dg_Str_Str(string Str1, string Str2); + } +} diff --git a/Simple/ClientCore/Manager/AppChat.cs b/Simple/ClientCore/Manager/AppChat.cs new file mode 100644 index 0000000..8e5533b --- /dev/null +++ b/Simple/ClientCore/Manager/AppChat.cs @@ -0,0 +1,28 @@ +using AxibugProtobuf; +using ClientCore.Network; +using System.Net.Sockets; +using static ClientCore.Event.DelegateClass; +using static HaoYueNet.ClientNetwork.NetworkHelperCore; + +namespace ClientCore.Manager +{ + public class AppChat + { + public event dg_Str_Str OnChatMsg; + + public void SendChatMsg(string ChatMsg) + { + Protobuf_ChatMsg msg = new Protobuf_ChatMsg() + { + ChatMsg = ChatMsg, + }; + App.networkHelper.SendToServer((int)CommandID.CmdChatmsg, NetBase.Serizlize(msg)); + } + + public void RecvChatMsg(byte[] reqData) + { + Protobuf_ChatMsg_RESP msg = NetBase.DeSerizlize(reqData); + OnChatMsg(msg.NickName, msg.ChatMsg); + } + } +} diff --git a/Simple/ClientCore/Manager/AppLogin.cs b/Simple/ClientCore/Manager/AppLogin.cs new file mode 100644 index 0000000..e2529d7 --- /dev/null +++ b/Simple/ClientCore/Manager/AppLogin.cs @@ -0,0 +1,18 @@ +using AxibugProtobuf; +using ClientCore.Network; + +namespace ClientCore.Manager +{ + public class AppLogin + { + public void Login(string Account) + { + Protobuf_Login msg = new Protobuf_Login() + { + LoginType = 0, + Account = Account, + }; + App.networkHelper.SendToServer((int)CommandID.CmdLogin, NetBase.Serizlize(msg)); + } + } +} diff --git a/Simple/SimpleClient/Network/NetBase.cs b/Simple/ClientCore/Network/NetBase.cs similarity index 75% rename from Simple/SimpleClient/Network/NetBase.cs rename to Simple/ClientCore/Network/NetBase.cs index dbc2f7f..c760407 100644 --- a/Simple/SimpleClient/Network/NetBase.cs +++ b/Simple/ClientCore/Network/NetBase.cs @@ -1,11 +1,6 @@ using Google.Protobuf; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace SimpleClient +namespace ClientCore.Network { public static class NetBase { diff --git a/Simple/SimpleClient/Network/NetworkHelper.cs b/Simple/ClientCore/Network/NetworkHelper.cs similarity index 88% rename from Simple/SimpleClient/Network/NetworkHelper.cs rename to Simple/ClientCore/Network/NetworkHelper.cs index 72b0c16..39f4efb 100644 --- a/Simple/SimpleClient/Network/NetworkHelper.cs +++ b/Simple/ClientCore/Network/NetworkHelper.cs @@ -1,11 +1,12 @@ -using HaoYueNet.ClientNetwork; +using AxibugProtobuf; +using HaoYueNet.ClientNetwork; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SimpleClient +namespace ClientCore.Network { ///

/// 继承网络库,以支持网络功能 @@ -52,12 +53,13 @@ namespace SimpleClient public void GetDataCallBack(int CMDID, int ERRCODE, byte[] data) { NetworkDeBugLog("收到消息 CMDID =>" + CMDID + " ERRCODE =>" + ERRCODE + " 数据长度=>" + data.Length); - try { //根据协议ID走不同逻辑 - switch (CMDID) + switch ((CommandID)CMDID) { + case CommandID.CmdLogin: break; + case CommandID.CmdChatmsg: App.chat.RecvChatMsg(data); break; } } catch (Exception ex) diff --git a/Simple/Protobuf/Protobuf.csproj b/Simple/Protobuf/Protobuf.csproj new file mode 100644 index 0000000..c12031c --- /dev/null +++ b/Simple/Protobuf/Protobuf.csproj @@ -0,0 +1,15 @@ + + + + net7.0 + enable + enable + + + + + ..\..\NetLib\Google.Protobuf.dll + + + + diff --git a/Simple/Protobuf/ProtobufAuth.cs b/Simple/Protobuf/ProtobufAuth.cs new file mode 100644 index 0000000..2ab2650 --- /dev/null +++ b/Simple/Protobuf/ProtobufAuth.cs @@ -0,0 +1,1145 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: protobuf_Auth.proto +// +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace AxibugProtobuf { + + /// Holder for reflection information generated from protobuf_Auth.proto + public static partial class ProtobufAuthReflection { + + #region Descriptor + /// File descriptor for protobuf_Auth.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static ProtobufAuthReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "ChNwcm90b2J1Zl9BdXRoLnByb3RvEg5BeGlidWdQcm90b2J1ZiKRAQoOUHJv", + "dG9idWZfTG9naW4SLAoJbG9naW5UeXBlGAEgASgOMhkuQXhpYnVnUHJvdG9i", + "dWYuTG9naW5UeXBlEi4KCmRldmljZVR5cGUYAiABKA4yGi5BeGlidWdQcm90", + "b2J1Zi5EZXZpY2VUeXBlEg8KB0FjY291bnQYAyABKAkSEAoIUGFzc3dvcmQY", + "BCABKAkifwoTUHJvdG9idWZfTG9naW5fUkVTUBINCgVUb2tlbhgBIAEoCRIV", + "Cg1MYXN0TG9naW5EYXRlGAIgASgJEg8KB1JlZ0RhdGUYAyABKAkSMQoGU3Rh", + "dHVzGAQgASgOMiEuQXhpYnVnUHJvdG9idWYuTG9naW5SZXN1bHRTdGF0dXMi", + "IwoQUHJvdG9idWZfQ2hhdE1zZxIPCgdDaGF0TXNnGAEgASgJIkgKFVByb3Rv", + "YnVmX0NoYXRNc2dfUkVTUBIQCghOaWNrTmFtZRgBIAEoCRIPCgdDaGF0TXNn", + "GAIgASgJEgwKBERhdGUYAyABKAMqPQoJQ29tbWFuZElEEg4KCkNNRF9ERUZB", + "VUwQABIOCglDTURfTE9HSU4Q0Q8SEAoLQ01EX0NIQVRNU0cQoR8qKwoJRXJy", + "b3JDb2RlEhAKDEVSUk9SX0RFRkFVTBAAEgwKCEVSUk9SX09LEAEqPgoJTG9n", + "aW5UeXBlEg8KC0Jhc2VEZWZhdWx0EAASDgoKSGFvWXVlQXV0aBABEgcKA0JG", + "MxADEgcKA0JGNBAEKksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZh", + "dWx0EAASBgoCUEMQARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoDUFNWEAQq", + "TgoRTG9naW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNfQmFz", + "ZURlZmF1bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnByb3Rv", + "Mw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login), global::AxibugProtobuf.Protobuf_Login.Parser, new[]{ "LoginType", "DeviceType", "Account", "Password" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login_RESP), global::AxibugProtobuf.Protobuf_Login_RESP.Parser, new[]{ "Token", "LastLoginDate", "RegDate", "Status" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_ChatMsg), global::AxibugProtobuf.Protobuf_ChatMsg.Parser, new[]{ "ChatMsg" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_ChatMsg_RESP), global::AxibugProtobuf.Protobuf_ChatMsg_RESP.Parser, new[]{ "NickName", "ChatMsg", "Date" }, null, null, null, null) + })); + } + #endregion + + } + #region Enums + public enum CommandID { + /// + ///缺省不使用 + /// + [pbr::OriginalName("CMD_DEFAUL")] CmdDefaul = 0, + /// + ///登录上行 | 下行 对应 Protobuf_Login | Protobuf_Login_RESP + /// + [pbr::OriginalName("CMD_LOGIN")] CmdLogin = 2001, + /// + ///登录上行 | 下行 对应 Protobuf_ChatMsg | Protobuf_ChatMsg_RESP + /// + [pbr::OriginalName("CMD_CHATMSG")] CmdChatmsg = 4001, + } + + public enum ErrorCode { + /// + ///缺省不使用 + /// + [pbr::OriginalName("ERROR_DEFAUL")] ErrorDefaul = 0, + /// + ///成功 + /// + [pbr::OriginalName("ERROR_OK")] ErrorOk = 1, + } + + public enum LoginType { + /// + ///缺省不使用 + /// + [pbr::OriginalName("BaseDefault")] BaseDefault = 0, + [pbr::OriginalName("HaoYueAuth")] HaoYueAuth = 1, + [pbr::OriginalName("BF3")] Bf3 = 3, + [pbr::OriginalName("BF4")] Bf4 = 4, + } + + public enum DeviceType { + /// + ///缺省不使用 + /// + [pbr::OriginalName("DeviceType_Default")] Default = 0, + [pbr::OriginalName("PC")] Pc = 1, + [pbr::OriginalName("Android")] Android = 2, + [pbr::OriginalName("IOS")] Ios = 3, + [pbr::OriginalName("PSV")] Psv = 4, + } + + public enum LoginResultStatus { + /// + ///缺省不使用 + /// + [pbr::OriginalName("LoginResultStatus_BaseDefault")] BaseDefault = 0, + [pbr::OriginalName("OK")] Ok = 1, + [pbr::OriginalName("AccountErr")] AccountErr = 2, + } + + #endregion + + #region Messages + /// + ///登录数据上行 + /// + public sealed partial class Protobuf_Login : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_Login()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login(Protobuf_Login other) : this() { + loginType_ = other.loginType_; + deviceType_ = other.deviceType_; + account_ = other.account_; + password_ = other.password_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login Clone() { + return new Protobuf_Login(this); + } + + /// Field number for the "loginType" field. + public const int LoginTypeFieldNumber = 1; + private global::AxibugProtobuf.LoginType loginType_ = global::AxibugProtobuf.LoginType.BaseDefault; + /// + ///登录操作类型 [0]皓月通行证 [3] 皓月BF3 [4] 皓月BF4 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::AxibugProtobuf.LoginType LoginType { + get { return loginType_; } + set { + loginType_ = value; + } + } + + /// Field number for the "deviceType" field. + public const int DeviceTypeFieldNumber = 2; + private global::AxibugProtobuf.DeviceType deviceType_ = global::AxibugProtobuf.DeviceType.Default; + /// + ///设备类型 [0]PC [1]AndroidPad预留 [3]IPad预留 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::AxibugProtobuf.DeviceType DeviceType { + get { return deviceType_; } + set { + deviceType_ = value; + } + } + + /// Field number for the "Account" field. + public const int AccountFieldNumber = 3; + private string account_ = ""; + /// + ///用户名 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Account { + get { return account_; } + set { + account_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Password" field. + public const int PasswordFieldNumber = 4; + private string password_ = ""; + /// + ///密码 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Password { + get { return password_; } + set { + password_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_Login); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_Login other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (LoginType != other.LoginType) return false; + if (DeviceType != other.DeviceType) return false; + if (Account != other.Account) return false; + if (Password != other.Password) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (LoginType != global::AxibugProtobuf.LoginType.BaseDefault) hash ^= LoginType.GetHashCode(); + if (DeviceType != global::AxibugProtobuf.DeviceType.Default) hash ^= DeviceType.GetHashCode(); + if (Account.Length != 0) hash ^= Account.GetHashCode(); + if (Password.Length != 0) hash ^= Password.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (LoginType != global::AxibugProtobuf.LoginType.BaseDefault) { + output.WriteRawTag(8); + output.WriteEnum((int) LoginType); + } + if (DeviceType != global::AxibugProtobuf.DeviceType.Default) { + output.WriteRawTag(16); + output.WriteEnum((int) DeviceType); + } + if (Account.Length != 0) { + output.WriteRawTag(26); + output.WriteString(Account); + } + if (Password.Length != 0) { + output.WriteRawTag(34); + output.WriteString(Password); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (LoginType != global::AxibugProtobuf.LoginType.BaseDefault) { + output.WriteRawTag(8); + output.WriteEnum((int) LoginType); + } + if (DeviceType != global::AxibugProtobuf.DeviceType.Default) { + output.WriteRawTag(16); + output.WriteEnum((int) DeviceType); + } + if (Account.Length != 0) { + output.WriteRawTag(26); + output.WriteString(Account); + } + if (Password.Length != 0) { + output.WriteRawTag(34); + output.WriteString(Password); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (LoginType != global::AxibugProtobuf.LoginType.BaseDefault) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) LoginType); + } + if (DeviceType != global::AxibugProtobuf.DeviceType.Default) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) DeviceType); + } + if (Account.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Account); + } + if (Password.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Password); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_Login other) { + if (other == null) { + return; + } + if (other.LoginType != global::AxibugProtobuf.LoginType.BaseDefault) { + LoginType = other.LoginType; + } + if (other.DeviceType != global::AxibugProtobuf.DeviceType.Default) { + DeviceType = other.DeviceType; + } + if (other.Account.Length != 0) { + Account = other.Account; + } + if (other.Password.Length != 0) { + Password = other.Password; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + LoginType = (global::AxibugProtobuf.LoginType) input.ReadEnum(); + break; + } + case 16: { + DeviceType = (global::AxibugProtobuf.DeviceType) input.ReadEnum(); + break; + } + case 26: { + Account = input.ReadString(); + break; + } + case 34: { + Password = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 8: { + LoginType = (global::AxibugProtobuf.LoginType) input.ReadEnum(); + break; + } + case 16: { + DeviceType = (global::AxibugProtobuf.DeviceType) input.ReadEnum(); + break; + } + case 26: { + Account = input.ReadString(); + break; + } + case 34: { + Password = input.ReadString(); + break; + } + } + } + } + #endif + + } + + /// + ///登录数据下行 + /// + public sealed partial class Protobuf_Login_RESP : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_Login_RESP()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[1]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login_RESP() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login_RESP(Protobuf_Login_RESP other) : this() { + token_ = other.token_; + lastLoginDate_ = other.lastLoginDate_; + regDate_ = other.regDate_; + status_ = other.status_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_Login_RESP Clone() { + return new Protobuf_Login_RESP(this); + } + + /// Field number for the "Token" field. + public const int TokenFieldNumber = 1; + private string token_ = ""; + /// + ///登录凭据 (本次登录之后,所有业务请求凭据,需要存储在内存中) + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string Token { + get { return token_; } + set { + token_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "LastLoginDate" field. + public const int LastLoginDateFieldNumber = 2; + private string lastLoginDate_ = ""; + /// + ///上次登录时间(只用于呈现的字符串,若界面需求需要) + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string LastLoginDate { + get { return lastLoginDate_; } + set { + lastLoginDate_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "RegDate" field. + public const int RegDateFieldNumber = 3; + private string regDate_ = ""; + /// + ///注册时间(只用于呈现的字符串,若界面需求需要) + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string RegDate { + get { return regDate_; } + set { + regDate_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Status" field. + public const int StatusFieldNumber = 4; + private global::AxibugProtobuf.LoginResultStatus status_ = global::AxibugProtobuf.LoginResultStatus.BaseDefault; + /// + ///账号状态 (预留) [1]正常[0]被禁封 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::AxibugProtobuf.LoginResultStatus Status { + get { return status_; } + set { + status_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_Login_RESP); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_Login_RESP other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Token != other.Token) return false; + if (LastLoginDate != other.LastLoginDate) return false; + if (RegDate != other.RegDate) return false; + if (Status != other.Status) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (Token.Length != 0) hash ^= Token.GetHashCode(); + if (LastLoginDate.Length != 0) hash ^= LastLoginDate.GetHashCode(); + if (RegDate.Length != 0) hash ^= RegDate.GetHashCode(); + if (Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) hash ^= Status.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (Token.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Token); + } + if (LastLoginDate.Length != 0) { + output.WriteRawTag(18); + output.WriteString(LastLoginDate); + } + if (RegDate.Length != 0) { + output.WriteRawTag(26); + output.WriteString(RegDate); + } + if (Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) { + output.WriteRawTag(32); + output.WriteEnum((int) Status); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (Token.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Token); + } + if (LastLoginDate.Length != 0) { + output.WriteRawTag(18); + output.WriteString(LastLoginDate); + } + if (RegDate.Length != 0) { + output.WriteRawTag(26); + output.WriteString(RegDate); + } + if (Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) { + output.WriteRawTag(32); + output.WriteEnum((int) Status); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (Token.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Token); + } + if (LastLoginDate.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(LastLoginDate); + } + if (RegDate.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(RegDate); + } + if (Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Status); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_Login_RESP other) { + if (other == null) { + return; + } + if (other.Token.Length != 0) { + Token = other.Token; + } + if (other.LastLoginDate.Length != 0) { + LastLoginDate = other.LastLoginDate; + } + if (other.RegDate.Length != 0) { + RegDate = other.RegDate; + } + if (other.Status != global::AxibugProtobuf.LoginResultStatus.BaseDefault) { + Status = other.Status; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + Token = input.ReadString(); + break; + } + case 18: { + LastLoginDate = input.ReadString(); + break; + } + case 26: { + RegDate = input.ReadString(); + break; + } + case 32: { + Status = (global::AxibugProtobuf.LoginResultStatus) input.ReadEnum(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + Token = input.ReadString(); + break; + } + case 18: { + LastLoginDate = input.ReadString(); + break; + } + case 26: { + RegDate = input.ReadString(); + break; + } + case 32: { + Status = (global::AxibugProtobuf.LoginResultStatus) input.ReadEnum(); + break; + } + } + } + } + #endif + + } + + /// + ///聊天 上行 + /// + public sealed partial class Protobuf_ChatMsg : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_ChatMsg()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[2]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg(Protobuf_ChatMsg other) : this() { + chatMsg_ = other.chatMsg_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg Clone() { + return new Protobuf_ChatMsg(this); + } + + /// Field number for the "ChatMsg" field. + public const int ChatMsgFieldNumber = 1; + private string chatMsg_ = ""; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ChatMsg { + get { return chatMsg_; } + set { + chatMsg_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_ChatMsg); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_ChatMsg other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (ChatMsg != other.ChatMsg) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (ChatMsg.Length != 0) hash ^= ChatMsg.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (ChatMsg.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ChatMsg); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (ChatMsg.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ChatMsg); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (ChatMsg.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ChatMsg); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_ChatMsg other) { + if (other == null) { + return; + } + if (other.ChatMsg.Length != 0) { + ChatMsg = other.ChatMsg; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + ChatMsg = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + ChatMsg = input.ReadString(); + break; + } + } + } + } + #endif + + } + + /// + ///聊天 下行 + /// + public sealed partial class Protobuf_ChatMsg_RESP : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_ChatMsg_RESP()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[3]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP(Protobuf_ChatMsg_RESP other) : this() { + nickName_ = other.nickName_; + chatMsg_ = other.chatMsg_; + date_ = other.date_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP Clone() { + return new Protobuf_ChatMsg_RESP(this); + } + + /// Field number for the "NickName" field. + public const int NickNameFieldNumber = 1; + private string nickName_ = ""; + /// + ///昵称 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string NickName { + get { return nickName_; } + set { + nickName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "ChatMsg" field. + public const int ChatMsgFieldNumber = 2; + private string chatMsg_ = ""; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ChatMsg { + get { return chatMsg_; } + set { + chatMsg_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Date" field. + public const int DateFieldNumber = 3; + private long date_; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public long Date { + get { return date_; } + set { + date_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_ChatMsg_RESP); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_ChatMsg_RESP other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (NickName != other.NickName) return false; + if (ChatMsg != other.ChatMsg) return false; + if (Date != other.Date) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (NickName.Length != 0) hash ^= NickName.GetHashCode(); + if (ChatMsg.Length != 0) hash ^= ChatMsg.GetHashCode(); + if (Date != 0L) hash ^= Date.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (NickName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(NickName); + } + if (ChatMsg.Length != 0) { + output.WriteRawTag(18); + output.WriteString(ChatMsg); + } + if (Date != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Date); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (NickName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(NickName); + } + if (ChatMsg.Length != 0) { + output.WriteRawTag(18); + output.WriteString(ChatMsg); + } + if (Date != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Date); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (NickName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(NickName); + } + if (ChatMsg.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ChatMsg); + } + if (Date != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Date); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_ChatMsg_RESP other) { + if (other == null) { + return; + } + if (other.NickName.Length != 0) { + NickName = other.NickName; + } + if (other.ChatMsg.Length != 0) { + ChatMsg = other.ChatMsg; + } + if (other.Date != 0L) { + Date = other.Date; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + NickName = input.ReadString(); + break; + } + case 18: { + ChatMsg = input.ReadString(); + break; + } + case 24: { + Date = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + NickName = input.ReadString(); + break; + } + case 18: { + ChatMsg = input.ReadString(); + break; + } + case 24: { + Date = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/Simple/Server/Program.cs b/Simple/Server/Program.cs new file mode 100644 index 0000000..764948e --- /dev/null +++ b/Simple/Server/Program.cs @@ -0,0 +1,20 @@ +using ServerCore; +using ServerCore.Manager; + +ServerManager.InitServer(23846); + +while (true) +{ + string CommandStr = Console.ReadLine(); + string Command = ""; + Command = ((CommandStr.IndexOf(" ") <= 0) ? CommandStr : CommandStr.Substring(0, CommandStr.IndexOf(" "))); + switch (Command) + { + case "list": + Console.WriteLine("当前在线:" + ServerManager.g_ClientMgr.GetOnlineClient()); + break; + default: + Console.WriteLine("未知命令" + CommandStr); + break; + } +} \ No newline at end of file diff --git a/Simple/SimpleServer/SimpleServer.csproj b/Simple/Server/Server.csproj similarity index 72% rename from Simple/SimpleServer/SimpleServer.csproj rename to Simple/Server/Server.csproj index f7477f1..57b0271 100644 --- a/Simple/SimpleServer/SimpleServer.csproj +++ b/Simple/Server/Server.csproj @@ -8,7 +8,7 @@ - + diff --git a/Simple/ServerCore/Common/Helper.cs b/Simple/ServerCore/Common/Helper.cs new file mode 100644 index 0000000..2cf4cfe --- /dev/null +++ b/Simple/ServerCore/Common/Helper.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ServerCore.Common +{ + public static class Helper + { + public static long GetNowTimeStamp() + { + return GetTimeStamp(DateTime.Now); + } + + /// + /// 获取时间戳 + /// + /// + public static long GetTimeStamp(DateTime dt) + { + TimeSpan ts = dt - new DateTime(1970, 1, 1, 0, 0, 0, 0); + return Convert.ToInt64(ts.TotalSeconds); + } + } +} diff --git a/Simple/ServerCore/Manager/ChatManager.cs b/Simple/ServerCore/Manager/ChatManager.cs new file mode 100644 index 0000000..7106aba --- /dev/null +++ b/Simple/ServerCore/Manager/ChatManager.cs @@ -0,0 +1,24 @@ +using AxibugProtobuf; +using ServerCore.Common; +using ServerCore.NetWork; +using System.Net.Sockets; + +namespace ServerCore.Manager +{ + public class ChatManager + { + public void RecvPlayerChatMsg(Socket sk, byte[] reqData) + { + ClientInfo _c = ServerManager.g_ClientMgr.GetClientForSocket(sk); + ServerManager.g_Log.Debug("收到新的登录请求"); + Protobuf_ChatMsg msg = NetBase.DeSerizlize(reqData); + byte[] respData = NetBase.Serizlize(new Protobuf_ChatMsg_RESP() + { + ChatMsg = msg.ChatMsg, + NickName = _c.Account, + Date = Helper.GetNowTimeStamp() + }); + ServerManager.g_ClientMgr.ClientSendALL((int)CommandID.CmdChatmsg, (int)ErrorCode.ErrorOk, respData); + } + } +} \ No newline at end of file diff --git a/Simple/SimpleServer/Manager/ClientManager.cs b/Simple/ServerCore/Manager/ClientManager.cs similarity index 71% rename from Simple/SimpleServer/Manager/ClientManager.cs rename to Simple/ServerCore/Manager/ClientManager.cs index 637c98b..8b1f56e 100644 --- a/Simple/SimpleServer/Manager/ClientManager.cs +++ b/Simple/ServerCore/Manager/ClientManager.cs @@ -1,12 +1,13 @@ -using System.Net.Sockets; +using AxibugProtobuf; +using System.Net.Sockets; using System.Timers; -namespace SimpleServer +namespace ServerCore.Manager { public class ClientInfo { public long UID { get; set; } - public long RID { get; set; } + public string Account { get; set; } public Socket _socket { get; set; } public bool IsOffline { get; set; } = false; public DateTime LogOutDT { get; set; } @@ -14,14 +15,14 @@ namespace SimpleServer public class ClientManager { - public List ClientList = new List(); - public Dictionary _DictRIDClient = new Dictionary(); - public Dictionary _DictSocketClient = new Dictionary(); - public Dictionary _DictUIDClient = new Dictionary(); - + private List ClientList = new List(); + private Dictionary _DictSocketClient = new Dictionary(); + private Dictionary _DictUIDClient = new Dictionary(); + private long TestUIDSeed = 0; + private System.Timers.Timer _ClientCheckTimer; private long _RemoveOfflineCacheMin; - public void Init(long ticktime,long RemoveOfflineCacheMin) + public void Init(long ticktime, long RemoveOfflineCacheMin) { //换算成毫秒 _RemoveOfflineCacheMin = RemoveOfflineCacheMin * 1000; @@ -31,8 +32,13 @@ namespace SimpleServer _ClientCheckTimer.Elapsed += new ElapsedEventHandler(ClientCheckClearOffline_Elapsed); _ClientCheckTimer.Enabled = true; } - - private void ClientCheckClearOffline_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + + public long GetNextUID() + { + return ++TestUIDSeed; + } + + private void ClientCheckClearOffline_Elapsed(object sender, ElapsedEventArgs e) { DateTime CheckDT = DateTime.Now.AddMinutes(-1 * _RemoveOfflineCacheMin); ClientInfo[] OfflineClientlist = ClientList.Where(w => w.IsOffline == true && w.LogOutDT < CheckDT).ToArray(); @@ -45,24 +51,47 @@ namespace SimpleServer } GC.Collect(); } - + //通用处理 #region clientlist 处理 + public ClientInfo JoinNewClient(Protobuf_Login data, Socket _socket) + { + //也许这个函数需加lock + + ClientInfo cinfo = GetClientForSocket(_socket); + //如果连接还在 + if (cinfo != null) + { + cinfo.IsOffline = false; + } + else + { + cinfo = new ClientInfo() + { + UID = GetNextUID(), + _socket = _socket, + Account = data.Account, + IsOffline = false, + }; + AddClient(cinfo); + } + return cinfo; + } + /// /// 增加用户 /// /// - public void AddClient(ClientInfo clientInfo) + void AddClient(ClientInfo clientInfo) { try { - Console.WriteLine("追加连接玩家 RID=>" + clientInfo.RID + " UID=>" + clientInfo.UID); + Console.WriteLine("追加连接玩家 UID=>" + clientInfo.UID + " | " + clientInfo.Account); lock (ClientList) { _DictUIDClient.Add(clientInfo.UID, clientInfo); - _DictRIDClient.Add(clientInfo.RID, clientInfo); _DictSocketClient.Add(clientInfo._socket, clientInfo); ClientList.Add(clientInfo); } @@ -72,7 +101,7 @@ namespace SimpleServer ex.ToString(); } } - + /// /// 清理连接 /// @@ -81,23 +110,16 @@ namespace SimpleServer { lock (ClientList) { - if(_DictUIDClient.ContainsKey(client.UID)) + if (_DictUIDClient.ContainsKey(client.UID)) _DictUIDClient.Remove(client.UID); - if (_DictRIDClient.ContainsKey(client.RID)) - _DictRIDClient.Remove(client.RID); - if (_DictSocketClient.ContainsKey(client._socket)) _DictSocketClient.Remove(client._socket); - + ClientList.Remove(client); } } - public ClientInfo GetClientForRoleID(int RoleID) - { - return _DictRIDClient.ContainsKey(RoleID) ? _DictRIDClient[RoleID] : null; - } public ClientInfo GetClientForSocket(Socket sk) { @@ -123,7 +145,7 @@ namespace SimpleServer if (!_DictSocketClient.ContainsKey(sk)) return; - Console.WriteLine("标记玩家RID"+ _DictSocketClient[sk].RID+ "为离线"); + Console.WriteLine("标记玩家UID" + _DictSocketClient[sk].UID + "为离线"); _DictSocketClient[sk].IsOffline = true; _DictSocketClient[sk].LogOutDT = DateTime.Now; } @@ -134,17 +156,14 @@ namespace SimpleServer return; RemoveClient(_DictSocketClient[sk]); - //ClientList.Remove(GetClientForSocket(sk)); } #endregion - //public void AddClient_JoinGame(Socket sk) - //{ - // var c = new ClientInfo(); - // c = AutoRoleID; - // AddClient(c); - //} + public void ClientSendALL(int CMDID, int ERRCODE, byte[] data) + { + ClientSend(ClientList, CMDID, ERRCODE, data); + } /// /// 给一组用户发送数据 @@ -155,11 +174,11 @@ namespace SimpleServer /// public void ClientSend(List _toclientlist, int CMDID, int ERRCODE, byte[] data) { - for (int i = 0; i < _toclientlist.Count();i++) + for (int i = 0; i < _toclientlist.Count(); i++) { if (_toclientlist[i] == null || _toclientlist[i].IsOffline) continue; - ServerManager.g_SocketMgr.SendToSocket(_toclientlist[i]._socket, CMDID,ERRCODE,data); + ServerManager.g_SocketMgr.SendToSocket(_toclientlist[i]._socket, CMDID, ERRCODE, data); } } @@ -182,5 +201,10 @@ namespace SimpleServer return; ServerManager.g_SocketMgr.SendToSocket(_c._socket, CMDID, ERRCODE, data); } + + public int GetOnlineClient() + { + return ClientList.Where(w => !w.IsOffline).Count(); + } } } diff --git a/Simple/ServerCore/Manager/LogManager.cs b/Simple/ServerCore/Manager/LogManager.cs new file mode 100644 index 0000000..b1d8e77 --- /dev/null +++ b/Simple/ServerCore/Manager/LogManager.cs @@ -0,0 +1,20 @@ +namespace ServerCore.Manager +{ + public class LogManager + { + public void Debug(string str) + { + Console.WriteLine(str); + } + + public void Warning(string str) + { + Console.WriteLine(str); + } + + public void Error(string str) + { + Console.WriteLine(str); + } + } +} \ No newline at end of file diff --git a/Simple/ServerCore/Manager/LoginManager.cs b/Simple/ServerCore/Manager/LoginManager.cs new file mode 100644 index 0000000..e936177 --- /dev/null +++ b/Simple/ServerCore/Manager/LoginManager.cs @@ -0,0 +1,26 @@ +using AxibugProtobuf; +using ServerCore.NetWork; +using System.Net.Sockets; + +namespace ServerCore.Manager +{ + public class LoginManager + { + public void UserLogin(Socket _socket, byte[] reqData) + { + ServerManager.g_Log.Debug("收到新的登录请求"); + Protobuf_Login msg = NetBase.DeSerizlize(reqData); + ClientInfo cinfo = ServerManager.g_ClientMgr.JoinNewClient(msg, _socket); + + byte[] respData = NetBase.Serizlize(new Protobuf_Login_RESP() + { + Status = LoginResultStatus.Ok, + RegDate = "", + LastLoginDate = "", + Token = "" + }); + + ServerManager.g_ClientMgr.ClientSend(cinfo, (int)CommandID.CmdLogin, (int)ErrorCode.ErrorOk, respData); + } + } +} \ No newline at end of file diff --git a/Simple/ServerCore/Manager/ServerManager.cs b/Simple/ServerCore/Manager/ServerManager.cs new file mode 100644 index 0000000..2a198de --- /dev/null +++ b/Simple/ServerCore/Manager/ServerManager.cs @@ -0,0 +1,27 @@ +using System.Net; +using ServerCore.NetWork; + +namespace ServerCore.Manager +{ + public static class ServerManager + { + public static ClientManager g_ClientMgr; + public static LogManager g_Log; + public static LoginManager g_Login; + public static ChatManager g_Chat; + public static IOCPNetWork g_SocketMgr; + + public static void InitServer(int port) + { + g_ClientMgr = new ClientManager(); + g_Log = new LogManager(); + g_Login = new LoginManager(); + g_Chat = new ChatManager(); + g_SocketMgr = new IOCPNetWork(1024, 1024); + g_SocketMgr.Init(); + g_SocketMgr.Start(new IPEndPoint(IPAddress.Any.Address, port)); + Console.WriteLine("监听:" + port); + Console.WriteLine("Succeed!"); + } + } +} \ No newline at end of file diff --git a/Simple/SimpleServer/NetWork/IOCPNetWork.cs b/Simple/ServerCore/NetWork/IOCPNetWork.cs similarity index 79% rename from Simple/SimpleServer/NetWork/IOCPNetWork.cs rename to Simple/ServerCore/NetWork/IOCPNetWork.cs index fef483d..ea03c91 100644 --- a/Simple/SimpleServer/NetWork/IOCPNetWork.cs +++ b/Simple/ServerCore/NetWork/IOCPNetWork.cs @@ -1,7 +1,9 @@ -using HaoYueNet.ServerNetwork; +using AxibugProtobuf; +using HaoYueNet.ServerNetwork; +using ServerCore.Manager; using System.Net.Sockets; -namespace SimpleServer +namespace ServerCore.NetWork { public class IOCPNetWork : SocketManager { @@ -25,7 +27,7 @@ namespace SimpleServer private void IOCPNetWork_ClientNumberChange(int num, AsyncUserToken token) { - Console.WriteLine("建立新的连接"); + Console.WriteLine("Client数发生变化"); } /// @@ -41,12 +43,13 @@ namespace SimpleServer public void DataCallBackToOld(Socket sk, int CMDID, byte[] data) { - //ServerManager.g_Log.Debug("收到消息 CMDID =>" + CMDID + " 数据长度=>" + data.Length); + ServerManager.g_Log.Debug("收到消息 CMDID =>" + CMDID + " 数据长度=>" + data.Length); try { - switch (CMDID) + switch ((CommandID)CMDID) { - + case CommandID.CmdLogin: ServerManager.g_Login.UserLogin(sk, data); break; + case CommandID.CmdChatmsg: ServerManager.g_Chat.RecvPlayerChatMsg(sk, data); break; } } catch (Exception ex) @@ -63,16 +66,16 @@ namespace SimpleServer { OnCloseToOld(token.Socket); } - + /// /// 断开连接 /// /// public void OnCloseToOld(Socket sk) { - //ServerManager.g_Log.Debug("清理掉线"); + Console.WriteLine("断开连接"); ServerManager.g_ClientMgr.SetClientOfflineForSocket(sk); } - + } } diff --git a/Simple/ServerCore/NetWork/NetBase.cs b/Simple/ServerCore/NetWork/NetBase.cs new file mode 100644 index 0000000..404f542 --- /dev/null +++ b/Simple/ServerCore/NetWork/NetBase.cs @@ -0,0 +1,22 @@ +using Google.Protobuf; + +namespace ServerCore.NetWork +{ + public static class NetBase + { + + public static byte[] Serizlize(IMessage msg) + { + return msg.ToByteArray(); + } + + public static T DeSerizlize(byte[] bytes) + { + var msgType = typeof(T); + object msg = Activator.CreateInstance(msgType); + ((IMessage)msg).MergeFrom(bytes); + return (T)msg; + } + } + +} diff --git a/Simple/ServerCore/ServerCore.csproj b/Simple/ServerCore/ServerCore.csproj new file mode 100644 index 0000000..e5bb8e0 --- /dev/null +++ b/Simple/ServerCore/ServerCore.csproj @@ -0,0 +1,20 @@ + + + + net7.0 + enable + enable + + + + + + + + + + ..\..\NetLib\Google.Protobuf.dll + + + + diff --git a/Simple/SimpleClient/Program.cs b/Simple/SimpleClient/Program.cs deleted file mode 100644 index a121771..0000000 --- a/Simple/SimpleClient/Program.cs +++ /dev/null @@ -1,22 +0,0 @@ -// See https://aka.ms/new-console-template for more information - -using SimpleClient; - -Console.WriteLine("Hello, World!"); - -StaticComm.networkHelper = new NetworkHelper(); - -StaticComm.networkHelper.Init("127.0.0.1", 23846); - -while (true) -{ - string CommandStr = Console.ReadLine(); - string Command = ""; - Command = ((CommandStr.IndexOf(" ") <= 0) ? CommandStr : CommandStr.Substring(0, CommandStr.IndexOf(" "))); - switch (Command) - { - default: - Console.WriteLine("未知命令" + CommandStr); - break; - } -} \ No newline at end of file diff --git a/Simple/SimpleClient/StaticComm.cs b/Simple/SimpleClient/StaticComm.cs deleted file mode 100644 index 2fcb9f5..0000000 --- a/Simple/SimpleClient/StaticComm.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SimpleClient -{ - public class StaticComm - { - public static string TokenStr; - public static long RID = -1; - public static string IP; - public static int Port; - - - public static NetworkHelper networkHelper; - } -} diff --git a/Simple/SimpleServer/Manager/ServerManager.cs b/Simple/SimpleServer/Manager/ServerManager.cs deleted file mode 100644 index 354cb4c..0000000 --- a/Simple/SimpleServer/Manager/ServerManager.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace SimpleServer -{ - public static class ServerManager - { - public static ClientManager g_ClientMgr; - public static IOCPNetWork g_SocketMgr; - } -} \ No newline at end of file diff --git a/Simple/SimpleServer/Program.cs b/Simple/SimpleServer/Program.cs deleted file mode 100644 index 451242a..0000000 --- a/Simple/SimpleServer/Program.cs +++ /dev/null @@ -1,27 +0,0 @@ -// See https://aka.ms/new-console-template for more information -using SimpleServer; -using System.Net; - -Console.WriteLine("Hello, World!"); - -ServerManager.g_ClientMgr = new ClientManager(); -ServerManager.g_SocketMgr = new IOCPNetWork(1024, 1024); -ServerManager.g_SocketMgr.Init(); -ServerManager.g_SocketMgr.Start(new IPEndPoint(IPAddress.Any.Address, 23846)); -Console.WriteLine("监听:" + 23846); -Console.WriteLine("Succeed!"); -while (true) -{ - string CommandStr = Console.ReadLine(); - string Command = ""; - Command = ((CommandStr.IndexOf(" ") <= 0) ? CommandStr : CommandStr.Substring(0, CommandStr.IndexOf(" "))); - switch(Command) - { - case "list": - Console.WriteLine("当前在线:" + ServerManager.g_ClientMgr.ClientList.Count()); - break; - default: - Console.WriteLine("未知命令"+CommandStr); - break; - } -} \ No newline at end of file