From faaa9a476a700fc181d6741a256fdb61ebad4e7d Mon Sep 17 00:00:00 2001 From: thinker007 Date: Fri, 15 Sep 2023 17:31:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=B3=A8=E5=86=8C=E5=92=8C?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=A2=9E=E5=8A=A0nickname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION | 2 +- controller/wechat.go | 24 +++++++++++++----------- one-api | Bin 26895272 -> 27241232 bytes 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/VERSION b/VERSION index 8ea9cc1e..12aa8c54 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.5.4 +v0.5.5 diff --git a/controller/wechat.go b/controller/wechat.go index fd5f7e35..babfbc87 100644 --- a/controller/wechat.go +++ b/controller/wechat.go @@ -16,15 +16,16 @@ type wechatLoginResponse struct { Success bool `json:"success"` Message string `json:"message"` Data string `json:"data"` + Nickname string `json:"nickname"` } -func getWeChatIdByCode(code string) (string, error) { +func getWeChatIdByCode(code string) (string, string, error) { if code == "" { - return "", errors.New("无效的参数") + return "", "", errors.New("无效的参数") } req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/wechat/user?code=%s", common.WeChatServerAddress, code), nil) if err != nil { - return "", err + return "", "", err } req.Header.Set("Authorization", common.WeChatServerToken) client := http.Client{ @@ -32,21 +33,21 @@ func getWeChatIdByCode(code string) (string, error) { } httpResponse, err := client.Do(req) if err != nil { - return "", err + return "", "", err } defer httpResponse.Body.Close() var res wechatLoginResponse err = json.NewDecoder(httpResponse.Body).Decode(&res) if err != nil { - return "", err + return "", "", err } if !res.Success { - return "", errors.New(res.Message) + return "", "", errors.New(res.Message) } if res.Data == "" { - return "", errors.New("验证码错误或已过期") + return "", "", errors.New("验证码错误或已过期") } - return res.Data, nil + return res.Data, res.Nickname, nil } func WeChatAuth(c *gin.Context) { @@ -58,7 +59,7 @@ func WeChatAuth(c *gin.Context) { return } code := c.Query("code") - wechatId, err := getWeChatIdByCode(code) + wechatId, nickname, err := getWeChatIdByCode(code) if err != nil { c.JSON(http.StatusOK, gin.H{ "message": err.Error(), @@ -81,7 +82,7 @@ func WeChatAuth(c *gin.Context) { } else { if common.RegisterEnabled { user.Username = "wechat_" + strconv.Itoa(model.GetMaxUserId()+1) - user.DisplayName = "WeChat User" + user.DisplayName = nickname user.Role = common.RoleCommonUser user.Status = common.UserStatusEnabled // 开始处理邀请码逻辑 类似 https://aiapi2d.com/login?aff=XqgY 带邀请码的链接,按照邀请码寻找邀请者。 @@ -128,7 +129,7 @@ func WeChatBind(c *gin.Context) { return } code := c.Query("code") - wechatId, err := getWeChatIdByCode(code) + wechatId, nickname, err := getWeChatIdByCode(code) if err != nil { c.JSON(http.StatusOK, gin.H{ "message": err.Error(), @@ -156,6 +157,7 @@ func WeChatBind(c *gin.Context) { return } user.WeChatId = wechatId + user.DisplayName = nickname err = user.Update(false) if err != nil { c.JSON(http.StatusOK, gin.H{ diff --git a/one-api b/one-api index 9a1b8f4c67051b8024b1ea2f674dc24a8d42492c..5bc5777bc6d57c2be70a5ee37b5872b752ccab6e 100755 GIT binary patch literal 27241232 zcmeFadwf*Y)jvFwWMF{c85AT4%AkV=MN9xS5mP4^;0#PODAg#ojYZR_s1ar$2$czw zK#s#`w5YY(idb9Q+Nymlau>i$mp)y$5~ug3K6uCzez7{Xqe;M3UaM z3%-=!v3Fv*9!P0j^n`3j>!SCQ-gRf&Wx0w-x`Joo#k%-ko}!}5Q`|BTdpqTq#S(if zD5?z0)tcpMQ{4FCx0^4EYF)=$waH@Xi8O{!hNly0{0qpZ#S*LU`pMUO(8?)F@A@vM7p_mr1ifA{re_fEd?{;LZ-GcUd*d;FcZRm{HTXLrt?u=upxr{$-P%#hu~< zXDB#Do#M;iP;m6l@n(D7o#GuPo;jW3m-kWdvpU6>nC;E%9B<<9>=a*Xwl|}5yiLJ( zbdFC^@%B#fStdS~PVprsKgdq|@8iD|_%8+iOM(AV;J+03F9rTff&WtA|F;y-g9q$- za~<2SSJ(Mc+BfOJ_4Y`>%S`qKDFk(>&GsFht|J zb0|Z`A+b1~s0wH+(}p7o1-@_SWL2nY6QI17HoQba_Jk%mOSOAluI$521+J`-O;xS{ z5^}W>x4GPUsK~B|+)hMpLgeMTvCQ>L1oZGU*GS!{atVBhaciHjB!G@1-O=*yQwv;< zpnI%U11>)X9JKO#hV&WLAAr7k=rJ1TVclwk`JKH{H_{tGM@7(%>N}`%>Kc-|AXB2$ zEs%H%JKCj(7PuV3y8Sm6(VH}}@qvHK53kq5XM56~v+9)xUcmQlgh<#VA8DCghp3T~ zMfBW@FF;P;Icvy0t=cOC9Q?HF#%}R=)^AYc;+}|Tw|$%XoHdx2g0RIuLO1s1udx%- zmN!_g*|rbK46Qm154}0f<-}XFg>0KyuFdM78?voIFngoXcOBmCEr#unc>4!uZ_$kb z&mp+P_Lxj~KvupHmA}ygK*Uwqzh)ES_|8QxpEJ8Ij`5EfAq#zaiNyGagkzh6XVeyK zOYx5azN^m%tn9k%EzPzokU&q1ZX7xECs~KyT;Q^|<4>H9%7S@=nZw_|*`^^t2aLkx zZ&^${k%BmXpJv-Z1W5F6f_eKHWPy(mAl7dz#6yhTz1;Fm^xGq;mVm|Lcj=+EHHZ#P zN(&0BF)7V|IvanZeMwJzKVTF8l<0pY!mqtx`MzbIHOt)eAC$SW!LFOOsoaL`4(RWM}WP(zYE=Z*lT=lV04RNwa=rT-NJ(+;^4pA+q3JI*gnv~ zgdlOc9?si@u(-(QYiMNnVH1Sc7$M>cD1!jwO|Lyxz;n2m33V-?!%DiEgnfo7< z37KWCMj3J7`1fzrb!Nfd|3PKvm}R!T`uz#9f21PBivOU@O0|3R5WW|=EcMtpLt zz1^7RN*6m-V2Id^z#;A49@>c5w1=-z+K7?EF-|QAPfXYPr46SyUF%aMRv^3hH6BIc z2?igP!KDl?k-62}3y-n+$GWjs4}RKOG;IO~=tjM{x#TAkEk6@K`Nz|iZ%RjLL#s$*i#F74 zX-xbqz${{4u*0h7@##Bb6?0Lo>-7dB+V_;!HkKw9a9h^N{FPtIm(i-%e|eQ&--H?)ZIxvR>ftwEu>2@;69AUR+8mj}uQ&;6 zJ>yCpb8?`?X6VLDmqQQp0deNkjayuqrM2QI%rg|tPCbMOF_IJsF;j4TMk8}#`nv_v z?+m?%lIYCmi2nX<_2&)W=4vZMCEDT(390e`#jb9==nC*1Hs4SWYVjTIp&PAUqfxKk zrB#iBx|6*zattrMxgKb@>(v{7ej2+JbHa{jHv3P{-JvaMP9v!Mta|PtZP82o81a@K zp5N{<+Vms4_4@X!^kFC1CBdU<3w~XhGo#!;%KupQ7Hy~{vQ~m`Ab2lYQ=}U{SA|}^ zMO%6^w2E3i_f2hyhaiK;(zHdRWli`0+hZIxAqPKC)5Ak@yy5Gt-rUXFqMpd%HM}mJ zWGT@{Z1#q40_0m<&O+k@&yii8`r}s>4%>N6c!-0s#lR`mKWL)%T7O4re&w-y@9|eK zDmnsPR={eHruj>eJd(-Z-dpOwX`;4rnjpB-cY_h zFfYU6ySr+a?`MG@SW0XCCFBZp<^pg9X+^xt#fAz=hUvcsr3Mk@S1XB40WwK4JkQUt zttf!>flOb92%$-o$z&k_(L(?iO{qCYZ*S0ZH)#*w10Iy4Rd274jaTw__*>`(+RCwZ zci_ZG|K7;I@QE_2ec;dVm1w)R@=6CfJJ0`FWGp^C;j2LaH^#>%E!+$YzydFCl(cyT zuedzWb6d3Fzme|2sH@*&17>P1RcWIo4hsBeL+^U_P@3nrJWZ;8Zbfh(t};0GD(u5(l_jj!C6*|!0Z z*EO`D#`^Po#lvfCsuj~w%PPnO$h^(s8hq$R3xc|#`cJGyMhHC!G?67! zcZwGfRhuAMSB*y&@D}<7qBZgdOthwSefw?7Z*8&5PDyc~gfhICG8_+E{wpt|ebe7V zQnTAG&5m&2A@6KJb#^`6H}w{nX@>4VVy2mxA`^8dQa_z8Q?rn&OYFmamww2ix*Mr) ztJET-mi1!W!hIL7Xkuy!g0HC5a=kggQAVQ#u}|I33^f7u^{~uSL!qxX+s|p}bLifhY4YT(7%7&X2!ul>F#GYA|o!wXtE)+Gz6Q=Lm=uKLKGR zKkDI$HjI)Th>i0iM>GhP#EWU*6gO17bi6%in&eIJqU25RqU24mj^s_SqU24mB6;(- zF1BB>=bsfL?zzTfMBCRJ$t(nK`^$|aPXQQlSfTMQ*zli76OWe=SFn!lA*74Xf84`T z2o0(`7JN`b1-sZR+X=ORENCk>!DdCzl_a-)^8N;?zl)~;OY*mEEI}{jC)vBz1QNnctuGNHFWU{vHPe>G#07SC3?c*B&GslEkX2OiK;75ffYuhSJm?ePu7nC7< z$$=Pnw&{d<=tm}N+a4m!Pw}ZYD-M)>)rA8q3B1)>TWD*0Qi?IxQ;TeHWaJ!<>Y4}ry+JyryNt%AJ}d|U<3KyaxF_D67$3JyeY zmI@9+@JA{*SbMa-rf;$ONY@^181`n(0NqTRm6p9Rng!&&;+ihVq`8Q|>|S`LXph!K zQ?l!fdI)eYB8DJhSWAuV*tF-Yh$;xS_0$$^K)Y(ZuB+Kb%rO?R6OYbxNJr^Zpx1zs z2-<)iRiCSg)}K|J9m&5{K{onVD#%7Zh+qeq=XVBQ3C|Lm5t!YZb{6b|^(Bp~7$JMb z+c`TB?++9}A=@|r?kLk;NZfrz4@;!wNQVM};&x02>Dmeq&;d=aKc~ zz{41jdL~q%tzrZAutC*K%dU$Kq3V;V2kW4rGefY^v08eapG6)vG6N)XCYqu(xfok) zn9`T#K|6?{)8(!7r*&unaDulhfv)xylg+8uN!ab z^&dmY@Y$&}5Auf6pe}m**gd&l`=??`LMhPG={4$f<2bYpao`L#%y%huXh8D0Fuv2y zlyVs^MTn#!KhVR|RSV_(w^kO=s@V!SBGF#ZVttlm3E6!0NebGPC2r&-HUF$rHUI4g zPug>eREslC*0U=cfdTYz-x@+lor7y`a zws%)9#%Qg>PK{t|uT!TRJ6g5+jBwhZlT@OA2Z6pb{W}Pxe^-Eh-U-LurPan2PAND46q!c-}BPsgY zG3K8>Y==HQ|}}|e(ty%pVK6Kx@;%~RXx(b z5Iovz!8-9b7IC16xCj}=@9+sNB)z1`vQ|!_kCiiB!gy6SLk~^VSz85^*CIXqx+_2t zOmnO$?wgSCA(2}tkz2(}RCq&oV>u=Y$;>$+r^CpC~^|B;?%D zUZ;nas%nF6+JXkrgV}FI_F6HY!Na8z-#^=cucYZ`_ohO-DFAh+ODJaP%KAE@8MZwS z+gcAl?P|lP$hgExq;gH9mab>4ZY*`RGWA!0E&gV9kBqScxJXUJF4)#&&`Ij)HhNOPleZXv;Vv*%x}kg z%{~pBxSf+o%zwLmHSKrtuNwh2Y#WuuW}SV(U#_rPK%LK z&acUs0SjY?4iBhaABD}+e~?~(EET@Xl-ZYQD~C8>i|h4!Q{glP@(a$v9P1pUmU*{+ zKJ5Ko$7_aUb>J@YF9DH^O{+0xu-=IV)W(Ev!u$KyKUUV?QTb3+`8rVEvUT6EZSJa% zw8y|kG0KU?Q3=;EP;Rj{F7GnV>Lvje4;bx*jyaksQg=Z(0J)2|6JmLSrhUM>(ee`kAu;2^n6a zDSEonlc1xm*BjwJDKz$Ya~rjX_OdN^Y$Uc5KmyAI>yARB(KDizsf(jX1!Y`l?n`?o zjQF@PJOlf83gBO@{soe}xgTqbUPquXTxKoI{Y+c(TYija^uWv=QSS}sw|kCk_tdw+ zyDvP}I&bbrJ{l%PY>dlm+~&&kqIa^CD(Ho~?_-R-gtqvo50WNmi%Yd7#6n<^EH4sD z45@w=Rc+L&F2IZt?S-0aBSR4M8iJgp8jRgYh=TJn7J*c+@v+!44Qyq+$>0(MB_2EA z|GeIehWwE^TIq`X46&UDKYI+l;$uVL$rZy!p(LoU)NG|915YQlTA+UQvNyBrkW@QvW#?Iu)L&ZKY}?CJOQ+!N&A`1gWt`4?adKq#;-?F-{b)RD}( zAEAARw1?`^s0nw}#TuVA!Me#~9Mnggp#5}6Tl{yVWBd)tLKAmP7_q%De6zJ6x52;8 z8!iQ}exNO($Hp__px4;uIkMAJe+*2z*JEv9`6FP{!_g@P=u@yM*7(S)VAD;i72*ms zfSsE>?j+t|Q{YX1Kl&Smj3(JichzC7>MF^Xdpg*#8@}AbVQ|HDWI)Mv_fBOHI>1ix zTN!L4FW!V;x4bCrqo*$Fo(m%@B;&~mEPEpse+F;`#Ty=Pb?2P$Xa$?(A`8|>-dea1 zvqD<3!?m$4zi&;=UtR_C;!4|(BdPu{%h+mr=D(KNR8EZ#v`1JX8twq;1 z>e=NfA z1g&})ig1&K1CMJR$t2RMk7I$7sZOS1$6z7>wd$>AY8F$oI;Z}Li<`kF2;*iqNR0nB zx3>5W#76E#r5jG%dnW#e;=k01$Gy%CpZOX#eEWVKx~IL}f8K_F`o6(ullmOe8Pu%P zqpxphn;R(sK)xrMZ#&-I@URX!VKhblb}}i9MBO+BpK9dMZnKo?+C6opT8a5zUT1+G z=~!@&r+K~XL*od(o!XKXc4)ZZoYv?-P$kB5n-6KLws@>yvSx>#+dSt}J@|>{yBN#) z4(1=R!_$nFcQEYMW1g*hQP6HubF+8Y7PD-j0q0KjE?>4Dp6Dq3L#yVyq=x0d=P0+= z6Wnh_!P7byG#rhdW}*nq`J~l(&uQ(ZTp&-lIiRX9LWf8Kc*D1xvuFL@pI5Y?#|Ccr z!nXrGw6&vgPH*n+2R_BacLkO&67!&o(B`2)!3k8*;`}x2X4T;2Mj|WQn%s$jycxvB zXNzpX@)D<3HQhdlS;HHK5fr((`;Irk1oF-^%OC7q9&;*yM9w;8dGs!X%^~6*Jnq&O zy@pUAujMM@RHmY+2cZX~tik&R4ym8;QOe3E{y)S2ky33}1OE5n ze?27BrWmj5!Kj=2nJgCH(-_rQra$hUl?Sr+z`ut78#r=);@t49?_-Rf{Tu$di$i8x z=ko3CzV++?fRO!g+&*Wp9>Q*jfyfCd*NlHiyWGvbPh>SA?>TL7%ngMQ+f0`M>b3YT zhcn8;U|yjW_~nrF;&0?sh*nh?84k!eOxO#=IJNK1THJ z(nB}fBUNSwuHP@2E7hZ84lQ`U47H`qb(KyCVZcor*j^gCytE**5})qNYf zTvj$UA=`n-HkGaC+^dL^RUgriAG*czZ!wJbjv}0dZpp#XXx|EQ?3bt~+s_dUkABne292oi6a%R!66N&OO=FpfbWyK*ACu@NR&Tz2_NE}y~j zPP2Sw2B2f(6QB0_7XNS%lGENSD2UBSj8AS%v}1OX zl%=$=qTM-imW#w^xj`rqpVd&p_fGE4*>8Fre8$ zNcJK8EN(E$Ne11|1nutd%E5`U4s^GrRhS{%}sB#q&M{>+1$>4kb*YK&_i4}P#!9Q~Le}I3d{tGrh81xnslVEpHvujAwcSI*BAuJ_g3DVev z{W0_Bsvhm)h8v%Z=E|jfbsg+L7ENgaUzPfz#1F4_u*;q?y(vR%bjaOt!_9mcRqWM z-=b%?=&RqD@$lNazPiq$YcIhg6l0LpX(al^S0)jCRYyTU>As+}aMjA;wL=nnM*1%z zgCRw_Z@P?C?O)TS{RdV1OBDes@cw_F0@wtH^@nl)8wwN-PNsn6`?P;f9{L{c8~TPJ zB^;!vv&vjQ*u|+5!VI#iJ`J14u>DUo%ea^;IiUmIIV-XH=nB(+d@A_!AxvZN!O{}` z&tzOT@bBpszP9)S)qh!RgSq}4a>)M2PH5lH_0VGAmD2#@LnG5hNCxbGT=6Q_ch+8%w2UF{8k9)l+6Ybk@8s`O(`VlIrp-IVdd+`E zn_r!(OlR8s{|6cGyxF8(r^e1KIz($qwI6|8?gd->EX}ES=(LPuu=@;NW1{k zk6m5@o+$%E%gA5I4Y|pY+-+z!DDv+02B9tmnW5!bz`+y z`Y-1vLsgCaU8l&F#Cm<)6x4(!aIAAZ4dMnm3ZvnZhURpp9{Mqa5I4(&c%*RwSAsT) zS6;Aj>q$>4K{?U0sZ>``J1H) z9+fdhUGSS%E#k-pNj$2SB3BGZWK@d4jL1DeA$c%!=hUfutlCO@&MCGBysf=vFFn=% zfsp-FsnmbJWB-9n_xF_w3HCz4afv-@8;urIt)(7;|2~*Uk)%CUH>^IM#+GuP#eW}8 zwB2QplS?;1*fDm*yVLNPk|s+x5PZY1&50Gr^4(P;0U*I`$72di8`j?yg4Dk*OV*9l z{x6KBGr0aR#f}AtI=Er5?dzQ{)wu1VjQ#D5#LkZXA>PRnKD6<~^;Hf+PBft@cECSF zg70I_PBSS3Fo?U`z=GhORy9q1LxN^*(MHxi4Gm*>=Dmd*9K(A>=2udq$KiY*!G4CsZKNXuS^a0 z{UhS6Cw<2`TLc|)|9NEksrx5cbCm{4$k>D`tE_tHk+Rc4wh-77G9GMpGkQzK1sfc? zp@O-Olp`0MoR|Ve?NlwmB#6_29Hhzc19^XPk`{wFJ7rR~IOTaq3KJ*ij7;tqLnGn< zL}6T-#V#oxdjnCx=Q`4xwYFufLGHl4<~mg}Xr!106W6Co%)a$^Jb zO~2U}XNeL|rm%5YdLFNBoULKjR!h9VWqo;L_Aa(og>@qhRovpTqZ$XQ>5pnMSj`Zz z&D#x3lVI`k9gR*1N&4LlDxewINI)uJ<{s||P0k42JR~&B8M@!)4ULye`k7MCH~Iq$ zOb!wY?gs`Iz-EYe`otoJLUw3PcwxBv`+;cnN8lEZ>58mZj(k-(*Q} z2m8W_To#-Z;;9VM8Z1_T;RKR6NnU({ymzH{Aw}G}h!Iefc15)#Q*1|*TA!Z|WZ6St zZ62=jb{Z~{e&agvALyrtCWGVC6{*B!-PNafSlkSRqpK3SBq<2UCF~h+93E&ddGzpu zpo}{Isa4TU9mqRv0LG10-5(#Il#7%KIZQAHpCwRa0aHnM zasb@oaucA=I7yr$hA>9ZbuahsR7Z4VH<3-)d3bUnuTiXw|9b;6buVVzFJ?3t)3tF}?x zk5)y0nbfHXAIUWb@@!+Dr1<$8XlL5j=$^+VB_-)VL{Dg4&1gTa{ZMs83AEZQlbp)>A$>V2%LNxr8A`|_JFJZQub$=ivH-w>!9=J5 z?L|@K^aO_>i%i3DF#gv zMoe-C^8EfPwK*Ad=jLR&(r>)zs$-+V>J7>8y6Xi*$iT}?!FFY;5!?p5N50Y5xN~U| zHlF#=;bB|D`4?Kf$VJ~N6Rd^kjQqf=OfsZDy&z`PvhiU!9AjxWwK~^J=S9>wE%Lbrcj9ENz8s&)$q11$K#>!Dun8xvDZzQplupc~&Uz6&#MvUFSeK-yobK z-~TlwwQ6NYepEXFdq}}X0l8m2<5lz1=bFF|sTqXLNPLs!f*aF_9sVa#mS7l3 zPsn!8e#N!z+XxxnCuBKXpXNI|`0??0_Rum3K@Z{DHZw;Gb9|eagG5QpVf8tJAD>`# zQvOZf#qnwmhsyOF9n|o!bM@H^v2RTr@7*<>ctU%CzCn4CA>L0*)Im71d-D`5>O$mcrbTEYj`!#{_LqSOgPz1uf)QZVaS!a6p{I=%~jAjjhSi7AWi=u!sh6A4Yl zy#j}-QgzO|Q*(l=BwszyS50S@_8NZIhH6*_d)SRy27*Ve{?qdV>s|qoEk3NEPIP<( zU*SoG7n;cSX^Us0Fxu!Q4Rc6COqGzJ?1CaC(xKs&1oQp@vkbE{g$(CW9rBriV>_zD z{>sS%v9B~g`0>#Ez|k{(nw*~yJWH#lfX_eN;Pj(CgXQHVPa#IR%1}oZEOap%+kLAr z*;g_Jz>6hB6P%TE09v(1y zUlepG2k|Q!QADzVv7P$CIBcIqw^uKa#bSB%P%0F2zdYipN=exz{yYZ45gL0ntXkBv zR7pHsOTy$b@g??f!G$|sTe(c)T3TDRMXTDz#$#S9?m&r*QU)FgDJpp(Z5JDl(bl09HYZFjOVEu}WCQwX%w3t^j~|LzA;S!FhIA9yDc9Dsr|=?ts`4 zN)NT*L-t9lN3ID&XP&0dB>MPP2(1#9K! zczZ{C#e3$GTD%Je=%GHKKbl78Y8)ZD%guH^YlDOVW|?hUP(ok%mtj$Qpe%*Q;T-a0? znhM!|6E^1F58@WG%OND83VOo*2P0h$e7Z?Lm&+4KRmwi}gA=Uuu z3PZi9vFKC6>Chw;D|>SD9Sfh2G|MH1PB`?7slEQaR{yB+K%}=qq#%ySlV>K0QfM9-?wSQI z_|R~Am`5=(#pC~0MhNCrC>2y?GPrj}UY_HmDwY}fA54_pC;&>nPUH9u9w?%Gh3U=* z;1;vxC33uo{+CF>_;-!?)LHG2Wtq`o8FceSorr@lHM$1F_=@lQCT=gd4exQw@%n zKmeJ|LRyIw_hQrS#GXsv6N6x+`gAgID^BpcvHt7CtlM4(O9mVCe~y)fD;vC_B~)xY zs5keuO$g1kVYlV1k%$-gQuYgy_AsdtNwe2Qwa!HCsQtQl?JbK?`_-tumYssBE3W8% zc{Gtvm7;rpmo>XYHci${$w=b~G()70OyT$k{m%tU4!@>*mb}H4fwiS!O34Aulmg3X zD;AbSY1DJ;AAp=2i-pT|iYVBeDeqs){f#0Gjswjah*XkB&;5-e3hnpfvtK_s_}WwH zrfjFwzbB!U5VbSmFTmJyN>&!*|B(jyC*@Dv6^c&>dl>BZ$&6TM&pZ4Q^goyxirm6z zGl|UoBb_00YaK@lG*UG`Jq1yWN$_ULV^T9X4{dP6xR6t9!(3J? zihyV2E)3uV1_xG%l}qmn3582<+1XRkq3#!l~ut)3BEJfTP0 zI3ZehObMr*%c>vZJdJjmRVQS$Go>Tr?a3KK1AaS-Q!lnl)p}N;J~{gqhSM`V^^vnY zl}FX|y9c#R4)w?71<}5hpJ0N;Otf^T#p1M7rQ|<2bw=P=itkR)=|%|*6GyEloR)=2 z`YbGOVV2Q?%ZP8Ne*>vF49AKwyW1-Fajw>_+d9wQU<^5X^E%I%Q;O;)xGO7rS9H3R z1x4}+V;OP*i+BU3um;S_7!^`Op|1`+Q^ry-4drlwOei?mjZ84f7Hq^h!2Zg92jR6~ zBj_QgeVD*!;>N|f(po` zMyoh}n7sh9NNoV;M~+EFKmz5C8dYV4CxR0=BWx?N#)QvJn2D7Va0&KyLDf(n=i;MQ z%|91+mW?+%u)dX{hwgVu7t;|mkieZ%#*3P-ZI)=08fBg2m%R9*2e(7lf83+Cmcz`7 zW>B1259wAk3Q~+0xZyN8vL;5#^~*h(Ui?!f`8^9M?+h5yS8SZ zW%d^Kb_TkmzbOo%Qi0Fl&DWu3H(VQqTlEavvGqlB@k?E5C50E7EuaVJx6e+iN6)Bftzgyr~KR*_It6TxJ5PQ(h z2Bg5TL0a`ed_$pjLs zk2a~L&}i_CXz`5L=&|nf;&9&}Z@Ad%9ntK~-Kjl%9{`d*lAjas58LiqU|Lv8|5yug z$_-;9j^MPv7n&_Li)o89B|ha@;E&Vh;DVBAoN7$0G2d{GFj|%WRnkY%m&j)lc}xrD z{QywMxmE2lJ@;!5hKn}o9qPLy-XZ4J9pt|wa{~$ZfgpC0#=%N5Sf^8D$nASf091?& zCU8=f?c@I5WR^+#QufuK75{+fGl3gsBA`UGadfRTec*EpR**67A7Iy(@ZMpz82z+e zKeA5?T*insyyTMSk>rW6^AM%VC~4M?^Z2!xauO6Wc~2O9_Dk4ob{ZJsNO-Z$L$WxVN~R$`8TO zhV`X!fEdhs?*w7tM6m3cd`A?jG6#M5S`d=QOU0qndI08Ts0q=mRVAn(hSD*=LaD+L z%nM5}kRKI}Xm8y(3ixZWv%_S{ex*iHMli2TW0xJOGhlai3AQ} zD+2JJKKE6$_v~-Vaiz&i?J#1)wr!)J;SB@|9AD#lN?on}JafrRT!@HTwqEgpxZ(>N z5Qz1D1!ULJY`d<<&Msa4Lg;kB&d--3wPh;*7V~7Q*7YCYa~@H~H&K zPqUkVFp0Ty^ycw)hNDHe+5}v7ls7gSTeG)_7y6Rb-c|DDI6uPk?cz}xyE8g0n0LN} z))P8KMNYIIW?k`5nXAGr-bNsB|5%G}m^TD+*xGycpJ~ zS7`t+fqKB@7@yJ8SZE83$0{Pn`9Z4=N{tbF_oiZapNA%DF2^>Ge zT^{U*LIn$&V{I^Rp)B7Utx+9)jyGI_L5Y%|tL!X4I9`Hd7XDH>qhWc4cUgcnZY?Sd z-BDCn{e{mH%)8iZj#1|D7!&LsBfls*&kMOHp~4OGPN5MI0t3Pmo+sybF;3$5xfp{t z_Q7HHh)xRTeR`C1IUT4;egq(00vqWKmnmRhnJt>Hfa&63FE;dZu^(>L>9G=6NMv zxNJhkqM!wQ3Q1fHJL*2PplOlR{_!w(Fl zbj_lUV{B3vyPx|A*KvUn-Hn$7^EOkaKqxi4i#qDX?JZ&uKnWkXSZ3t)H5}ox(G-xT zQXaYqlS{r+du?h4ww3SHQ*XjdtCpt4YoAcuEHk~_v*28Y9y}{k>R-9D>^xvSK9iN| z?J2RrG~<>obtoGGTMs@*Rx(N%C;4*99xU^lmFZ#F8S5}c)%+@sBh&>~#reT`5Xb${ zYgb;431tv6iZ8G`0}=bm<)riQotSj4I4UQd7k`XAgPCU|@|ak1ewz-o!?ssdi660q z9VKczW*~HfsffI^FL5f8ZeFQ~L{`EeNuF0?U(&zC^Kalvy1bx!V168LhY}F1E3U=- z&HB*|=F;wqpFy{OGgdmbe)=`=PM+zgO%^F#JUAZ*gP>zl*5K!}L@&vS4Tr%FxIbT0 zT-)r<01QhME@`T9;Yn!HQOF%^AQ*&;vt=K^mXPB-Bwl@lG zBnMe+&hF@e4qcGV&J-7bNGu6TCMkq8_c9|J6Ey@$|H+_T7U>U#h!1d`E~S+onhrWZ zrGm3VY=%i-nvU@1(BA>*kpKNb9w3zo1tANrznEeok;3nDeA)$<=!41qH>c?2^;{QyiGqKL zz(%I6myjiTisMFzyHZZVZ%*CF&rHZ4>Q|K#%zNq(>w_-wAo)2m22;8>yog~`h1=G} zTJ8-onj?ddqKB@9iiAe+ViG-kBPN6Upb8%Ld4qY^NkC`n%@ZX}@S|DKkn-&SWQpE@ zYl}b`!oy05uuI%A`xZbNN%)xT#6eY2bVM+(hlEA_XkiXUEZh8k_F+-W9MBuY5|uSD z4|)HQj$i4;Z$JOJ3aAW}n#z}fA@+|N)d*}v$z&`DR zN`7EMF?*rE9>(0Dkl7_Z!5$RQMUfppvj!n4zQS(}bUW5jtQ*=7WfdK?zf}_TS0?Rw zo*VY77^muqT&?I26ASdePSGD@<0jC57wNy{YXSrPuQuub6FrgsS0~WFMuIfyKbRk+ z|14Dz>AzUQlJwW(^xq{~!CIhyk@%beqgm1)tJ0uGS!;;UIF zQ%w3Hm|_5ao?$t&;BPJGJK?}FD+(S5mstkY*2?)6K^!cpS&j@OvLo6;VWiBf7`!9X zkQlbL-XUkb)iW@M6&#ea-iIpcaYkh$3gZ&;OYAduui9%PyReqpA+EZFAi12BoG?Z4 zkgB*SBQ8K90}|2s9SbbomCrrY4jwTR5Aq`!hEO;TH=Pzrch zqtz^<_(GTCXV-PiY$Ac7f@{Cc4TsS7Q2%_Kt(E#!*JiOiEXw}fHBVZWdhu~3K?(=h!CAYp#Ou}E7mUjZ&OaM>aJzXxFv-Yv1AjbWEf z84Q=BUBZbOkm;%rmmZ`-0q(_)0BI9q2?`e@x(h=;bz}FW4_4ec5}f8WN?;B`E_sac z?q~(J$~Yv<_hG`}?ohD`XnDdFc5w-|S$Odaj~8&e1#Q9B+9<5b_oJjyf-yKgM?x9} zdsRU)?NxD)gmiz7`0TiZMEw+@lbVAk4v&!LpuUqmPYqTiaZemc`b_zVLMHnHl@xGwwz_I3L zsiCk7;^rPM)}ooYMO-NNqF{kg{=S+Rj88EK>?(O*TX_p@%4AW6G5gTen0550L#SGM zgQWbB9-#(S6t2+e5u!r~G@l_cNpuKdx;>dg=m|;Vcg0tH(-*W@M(m89AIv*T0+PNU zJ$fejZllaqQDo{z`1*bhAviiZ96~YuRyu}8VgiohCtBbbLVI{rt|d~2c~2Uo+zSsM zsx(N;ImK46`N|-rkBA0oxim-x53QX+cXCFQYS<%_XfE=Nb1-Q8Ti(@O?o}*%SvSvCiZohB935*_Ox_LVk&LXgG$2Tg%h=t3M{ zt)crWd&}Z}n6$9NxplJ1o*n$s!It9SKNIVY{!Ud8=f6zCcT&s4<}D(XsrX};Q0re# zD0|pnLNQH_a)=el@J?|*&zw&8{{TL`+j217yOWI^hYbK!&|Rv z*8+KWeh41%rROd0kz(?g)gdooPb#xh9jv+~Yrkh6b&-|^4Y}bk9alV`Dt6i*)j)-LY zfi>ii{j#D%#4tE!I<<Y8xPSuK>MlBV@H{@Bz93)^-*?;XmuCx7!9H zh##v?AyJi4wOS$r{afrhVmsCPIPIfWbw2C}nY8kNG8$e~ycIUzus-Bm2A1G)E13FG zFf-g>-cSiHReqA~oe#l%h|rSF1X36ZNJHYz^wq8<-&9Ysjh(T&7nZRRngUer&L8$tVoFde?d?|1G1J z(4_|KyIK)yJJyf+N~&R>%Pn1!@5Hi;+pvkj&t(!5BHDAs6fLZuv4taJt| z#Yh>jQB~UT`*@{gW~I~M%ucAWD6z(}q#B1O*CY@^v;tT;afc61L4l3jCXJQjw7}G4(H$ch@+g(x(jX9+PtGF)7FS7R8q2!2IhC?A7=m zoI~28ywNuR@FFC?>E!4r#7RY5_ihY(9lalu02u!m@N{@U>ShsZH!n%>8s_;vJ@=71 z)>SPp6hP0q_1xaG@6~fB+h^S&^*g(K!u&#mkrPa2lgHr!3Qi3=JrQy;1j&g!3_*&e zxlH->k1qB(b3)3<7R1-N_mo3}KAZ5-u6XR5U1MV{Q*YHj6VS0}DTZWxehE!>$N{SE z1R&>yQp9P0$A(RuTY;3Lr@ncT{VdcN%=;(iK)O4^Hg8TdxT7b3Hq+)tSRDV7WbF{v z)XdP#9I5LhD>1Cz0TGdn*V=dg5!T3wFfy6j`u>ME^lY__mYE^PF4IV#DtLCZg zq?%aEd9s$v#`p&U)%2XPYJag-CD&HaoK$8yhndEVzTAI0GhLR0`Ztp{X1Z4WPkb@Y zWtUzm`9rI2L<}>JxlC;oh|mb+9F<8rgKzu#%9<>1^hK;V?Y9uK)pZN=IU=&SeScky z*4TsQA6PjLgvc80?-Q7pJ{Eg|a}N@&gZ`VDFgk0je<~7keECt&DFBSk%9Q{v!!;i< z0D}l1Cp*{g0D#eI#Kxv?I24I&@VNZ}kG^`A{~q5Rci%n=8;|{0#Mulo5NvkO2V^t+ zhK=n7{H8J34D%Nm?N|5`j~+;3G|qh?tTthQiMf9R+adxyj79iOz8-oz)-kb<8T;U+ z%>bsv5r)HJR7)Cuv9sMbDqb-cU$I|eSB$?eYio-0_k{?H!AaGMnQvl`@9#02nZrzt zuP4|g$?`8$yPT1b>A3qM?ucy)yo}hh0(rAjmP6Nq?;R3h6?Y@^cNTHKV^1ZdGNqj^ zw^oSN*loB1A(b(C=$Po2x6S%kQ*VPSK@q$ zx+w+n4|n0nF&4JnN8H|f6huWkAjoYsqgPwRCpWV)8mb01Hodxo3>4cRrQ5Mh1P&!R zFNq!dNqcCmRXu}wAv2>P9cAEe*qKjA$)db&FGi3V*YSiNVcX~*-r~Ck%Rulu9`xTz zvSc+`tf9rE2&>OAQrZ`jFwHWGBmjxpbYmS!gy74Bqc>Ob#Xk&qqphiu#Iho}aybGd znj1vJ-tw^R>g||c`y*D(PscxoS6}$iHIbLQQKc1qZ&dWnNtj7Z{_kLYJ-ABZfEA_Y zKnxo%4qAGe1H_eo94?ZD+=0BQ?a%OjrBRa4!TXz#?lB(UgV(Blct~c)sK#-b6Jo%Z zlmK8eHEsw_RAzpUaU(U6uWI=F&sT74k*03=zm@|6|L{}O!wl{kKkNe^!x!=Ra>Pda zfOPm6@GVLr*q85iTRXp~+Wdw9>&IcH%6sqxnt`%FE)$F4Z>N$O5MB$9x<##bY&X|s zGS&F?+@Qv5=cfkXc8qVPxP~-Rl!DFri>$sif-bkZ_&pY`;@hcYc|BlSYYaal717D>BqZ& z0=c{d0W!-eR)0i~B^OO_cayjaqq&n+7^lj$AX4@n0gS8bC>mn(lU{DR4K_IFp9$KJcqq@V`Gp&kJ)nK(m4^|v|j_teqBr@ zxblF7vdVZ-{Gd9I!5|h zxSFs@@Q2a4T%^EYBcNKJm7V%Fg*8f)#J6aoKuThP;5;X6jP(*V+3!`ZfJEVSWmkt6 z?&0`u<@jzDqob_rZeTbd{Sft)m}#j_fs?ZA(+VcMV15AGW%2?L6dFHugDgZhA8!@QCYV$8d>+?jdfDMH@9m6s*vCEpvJ56HxXCM9N0%ur-#+b zp!jB?QqjO-@<0#t?IsojOO}%~Iw>2FfJ}$bil=eCJj6)%-RN)u580+?Z)zIt5)QZ{I`BmUT|l zCU#b)S)ylmN`CQPB%j0NwMf=OCL2|*CwE~M?Y7(Ib8c7N_QS7F(rxGg*<;w#OHC1- zwb!b$CU%ycNeMk5J53T6-NA_x<$khEl}qe7&YQTJ!wH1~^Tn&G=TM{-@g1EN>pr=@ zI_`n4?OUxlYymxuSgnLpamlnMOa5xwARe3=Fm@5x+2yU&pBHs4uY_^^8zcvH(i=PU z>CQv=yT-Sa-@Jb`i{k^vH6LKA9J#@g8%WF>q@TsH1aVq`$S_MVX|I*IG=__mItllW z{y$d#FxLN&90gtLm&&wwd7ViRi3CM+Ms4&rohg$1ElCMBKN+4Ui;qE(PI$eUvKf^TVv*T{>3l+fTAZU{OhNnozL?s{DghS#Nt z(;-FUfMfExL#lr8nK?Yym^P}DB2xlb`8oWhIwo0PcS=J;^mz5LxiZ|>)_r*m@F3ulzt(aDhEPX$(VgG+u>TGquLV?BO1Bie&+l@3 z^cden216OaB8u!IajP86FREX0Hh;vo&^X`?-<4HR^Ws>7(c9mFAKM%Ht@4)R&=wBM z1dsQg1!8Q_SN+2rg&rIQJn{*CTsqYoc0KCZ{Hb@uCwlNi|5-2BM!p~zgtg!{gc5;! zjDPAQ4&o3U7N+5@_J$ug;5CkW>f7O7Kj96(t}sAPUd0KvoT@msO1$oJa&(4mE7nLt zdW{JCw*OU>jLZh{Smwo=5woeT^kP8eun?5Uk}2V|Oe%TC4pavEt4U3bILUW0?nvTN z$rw~DOH2+{5W$}-KvFE>uBOE)uHnA1*hfA-Ji!f;m~u{R$Js8h4qVnCVq5Q7mvkng z=g4Q0h##bem{Mf*nyR6PD6efy|rqi97? zl5eB<48c`)(!{72+f}^!rRcZtQESdB(8nQN)omo=^i@O<)3uzPpE@8`Jk-w zuT~y?ujhF`(3WttRUTdSkBXjtFBJC)e|t&!FK`=%R{b1BaOi57!muK7Z;({n#mD>A zCKxC&@K1^@*q9;;qbZii3?|tbMY@)q7~Xg!^9n znpyuQeyhz0ZZXgV;TC;ylccC2h|S0V`CfVS*p*-0r7a0c`dr!f+uQu(0O$E6`UE?G z6^S<^iY&4HF<$}VWrVm8xlC}?Q&}S1_ct$?=;ZTzhS{PT6GA!a7xRhHVZ=nPlI7D6 z*39u=gR_iU=6uc*3bI9{dsjpGU0J z-y;YBE6F0&bp8Nx%NTZk6