From bbd2198fa2c7fa8a61c282553a5e8c5ed49de2ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Sat, 2 Mar 2019 21:45:15 +0400 Subject: [PATCH] :sparkles: Add docs for WebSockets (#62) --- docs/img/tutorial/websockets/image01.png | Bin 0 -> 17229 bytes docs/img/tutorial/websockets/image02.png | Bin 0 -> 18326 bytes docs/img/tutorial/websockets/image03.png | Bin 0 -> 21283 bytes docs/img/tutorial/websockets/image04.png | Bin 0 -> 30900 bytes docs/src/websockets/tutorial001.py | 53 +++++++++++++ docs/tutorial/websockets.md | 93 +++++++++++++++++++++++ mkdocs.yml | 1 + 7 files changed, 147 insertions(+) create mode 100644 docs/img/tutorial/websockets/image01.png create mode 100644 docs/img/tutorial/websockets/image02.png create mode 100644 docs/img/tutorial/websockets/image03.png create mode 100644 docs/img/tutorial/websockets/image04.png create mode 100644 docs/src/websockets/tutorial001.py create mode 100644 docs/tutorial/websockets.md diff --git a/docs/img/tutorial/websockets/image01.png b/docs/img/tutorial/websockets/image01.png new file mode 100644 index 0000000000000000000000000000000000000000..c6de53b56c73c6be490f38c145cc197373dada78 GIT binary patch literal 17229 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%0DM6d91AUS|hfZV1c7a5%V~3jft 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

(Px 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 literal 0 HcmV?d00001 diff --git a/docs/img/tutorial/websockets/image04.png b/docs/img/tutorial/websockets/image04.png new file mode 100644 index 0000000000000000000000000000000000000000..7fed0b03b9c9350fd57d82a5fb797ba827719f7f GIT binary patch literal 30900 zcmb@ubx>Tv5-+^CdvNyzcemggLU6Yr!QENhErAf+-66OvF2NzVySqDl3%U2JSM~n9 zZ;E2i9?t3M>FMeIb@vQmpFc^VAQB(~000yjY4I-r08~2w07(N63%--uvQY{CfOZs> zQGo|HFZi#a;P2>85*kj*wx&+5h7KkGWpigICld!_|1ksrfD9lb{!ztk{&2}v<()bd z%qhS2EX-awSr6*0_PZ*>k4jZWU5GAN3LHuk9K+pI`V6cV994u-1W~;<$TZgkQ6LC4 z@nW)2Czq9*zP~u1_xzVvc!^B5hf|X3t5ZP_%Pl{?N5#a%NGmA7V7xUY_k`r+@G|Xs zS^PFR{EnH4B%-fUR(A#6E81*a?Lw)4uadeI~ha(3n!E-iM~^*6q_RezTaOR&@#|#k&}_3XJwIFk^dvcCYv)ZTB1PzqsfE~ zX465laXE&npG@ZW(7p3R+{cosY{{$Q&s5aZJ(~rHl*3MhIfb(_d+#E2iSn`vA+fkN5$XT zmM>`r{qm zZ)%=#D#XDm6x+P3{!%nlORBA{E#QXU4UqpwJSb;8*Ko2>X?JDipmD3tdLf$Aa$4jU zu)@|bH$UHKC~+M87o_xbkQ0Pj`5)xAhwGzW@KaS5Qx=7r#a>gIn*auNIs=2uzj>ZX z$X_rpg)p$A#>}&(EPmw6h{-yz)qMMA_3l;hbX;0xZicrozRypfN{gv|3R4AMwKA=! z*RQrK$3y6;7(fVvsp6^c^jml3)zT2NV}H6SS8U`HPt{D9zyokVi30u* zb)6wdNoIY-jJKx~6T?eMt|EV(+(HdOH+1B9t@xeMYJYn}u}ZM04xffefbp^>ex1yp z|Bx8eW|42oE(^)4ko<{9EJQ*1@iS3F0DC+2M8u=R;f)vjJYHT^ceT}bCEw{Y*^EY+ zmE5!0*hFP55Np0kxGmSaeXNW})JT8rFFZ;zF1VsCDXKS$K(Kx>Z!m$?v6ogNIklL> zB;yoOWE*`q($jzI{Tlh0tQcnnQ?|n&5!F98<pSw!?5o2T8w7 zzxy)}&uoJ9?bYRB(D%x*p|vsaL_8xqVJj}wl*P;FPFVaz?>q_2ofSE4Uyy%o7!saxG z^8HfOU94KdPU`#7r@Vlz&Lwu87?bFZw>d5EiHs;YS%bBvi3PSGq zRXBI{$wT&cdI(aLvnPCCZh_<;b+N};@$GsBuL7fh2i~GzySP-=)-q1>IeMILB3M~l z%XtasISb{H_(Ehla*yg{H8h970e))0Pj?bUd0zSV4IgM6s?Tag8Z1@fThQwEg|(Zv z9_&u3wj1!7>^s4eSDJTt)e*mmGp_%g8{Q)TEr9f=^wQjm&qnVRCV$9Zp^O9^-;49* z2U3HMMP3QS4lO9{24uppEaHQ%xqOPr{xdfs4?=ZU>+VHROoUhDH#(`yyRS5S_uiq^ ze&dG{`RdB#9;RsrlOJ^cm@>1xcIDT<#r8+erLYMdKuTN^=L2*B{!GxxqAhE$ z5C-?lS=ZmedUX1v9MdI9^RFMo*j8v&J}D$Uavd*&Vsx8b4;W9DN^mVE3xk6qfL|%! zEJ}O zS5}876g>$Qqeoll_F7drz#rrekmr?Xb-se#{Ukoun{`uiM{IXr!qP!6D(=Nw97p}F z9C0==CpF4gg3#!{!c8jmH5nuIA*%OJjIj7^?gtIhpNIhI)+e;-mj<|TR>*UYC6;kB zBGcgIzetTSXpg>%F3Ye0s=$>EY;kIf7YO0PNjeV8c`8TE*Iw5;B@TsG)gSpczkhvQ z&PD*HX3WwfrDp%Yhx!wWeHb+6Dd@DIm9q(Hh|^I)PJ+@@zjLnT{SX!N8-2Y=EqlS(T>M`S_4?1$$PN`kkwq1 zF+656(~;;#NXS*JD_Oua$Uh?6o)csxFl?l+AmK7Wifr5M>N02Hx~<(@I4} z-wPJ|dNO$;t+?^9n4rx5${VJ6K{daitgDJs_coS0mY=4a`Rp`}P_tv;{AV0S~*Z+g)?$)M!aI zXkX~Zn+wI+`!fwU;3IEKEa}E`YY@++?PtGWT`cVGPKk&Mo#)>)9j^*RK{raJsHpfO zAG^VG$EKBwr9`7@jQ_#&rBx?JkWL<-f-ZHou+XT&abR+%VcR2%(Yny}BoKz!AW- z>&Zh2jY|!W^q;@kLTJQhsuax`iEkx-G+ge&L|h?c_-(EDN>4=(vN9`+fQ|PAf`)F! z)~ylQf-lC*WM}=0bErzUrW$IOg@00i0^NyaoOeZXUmO2!`=fvpi4 z%ncjw11-L9(dR()F>_8ZiiN^+d!2{SflV_P2ng$BoNv-lR0y&`L=KIRu~b!lc)lNm z|Ni9|%gz6YWF2-ag$b#J@V%Xz_KiEEwRezg5TSpOvqi}`IZ={T7~jeAZX)*9uJ;OE zt1~`YaDaRGaCTbqkkfwpHkTDN2$*`)JhF^6(lQD`Gzwj~U?-d|5tsi_*1_S!v#P=E zE6dsHyfAHxqs{#v`lTmWpxFV+OrqvLVv{>PVP1I+)k}J0B z_!nP*)j}Py;`%xO&??k*HrS*efd_>768puS^A%rU#DAoN!UpKZ*nsgQRhLK}-StR$ z`cm`8H!p$c3;_h0*s*+7`ozR!gPU{^a=QdV+cXy!JQ9lMH`*eV_Xg%)16`~ae#*kz zjA!!-0e$#}hK8>axNW0xhEsCXV@MMDUpyx()X~IXJ#l#fmNm(cD;Jg)M*hI3`;NJO z{OIUtfNy)d$SvIMM$FN|*=9f1bKdKOQqaK;YuEUqL((dyzn{FGzocz>zu7~$;w6bJ z)*~B_PKX5sU}5K$a&mGif-}(1SUbfRB0BI{@~u6XPS|agwSsrLJ|!f<3GP2p@cxFo z*sojw284|OZ^Z5^I}SQx*>?A#@Xl}WhjGF!)dRtHg`kRg89~;a%tjya*HH?wLV)jdB~Mwd?(Yw@sl2Ih zPo`K1>h5fn@sEA5as<8a?MvaCE{_V2r!#?Fi5%gVlau2pRBuyR=qquxU2608NVsj4 z&4p|Dt!nbf;`7P$)_Z5EC^S48_zhP_)Ce*cCmd$CIgAqSo_UF-lT7bLX+nc7-HkBrz-^f!S~`Hm||)q#MthA`;GZ z)TcT~)GPGqYq{oIEpfeq(fY2_nq|H8V+#rjq$dy;K{-gGrr7j2ypK#;ETn4jWdq{3 z!y|vj;H?*Gg6GH3!w?X9Nc`EGj?svPBIi~fnMc`_Y1*Qe1wHo}9dCBkcD?g+b9Y7U zgc4JdjJxiy8oY0~XcXPK9q(3r?jQhsu2+9_>de>B3RQD(f@4lQHfH;uGoL=UtSpfvnBA^|Hk8H)G_q{c=sp*i zeJL9tDx)3ob$ygic`eW3d^0X6q7YHTUlJ5lE??IPCK# z;t~W^*xSsub(}|3J<-5 zxbN@MSGmd-c3V4UTiHjijHO}*uz?Y!fE=>>>m#Tn`C!|0jFIYx>xGj_k1g5DtNj2@ z%bD#Q7iv0`jPMUGej2O~bRKOhYQjvC#NDNaePFu>36K_if#%f3ZLikkER2>S=cUGc zPM~BT6n1_=t|mShO?PUJ`^)DtCpXS1F?_s!d;!V+Dw{^H)4; zpmmq%Z)EDYaUnll#sgHFj%rSMErkDzK(KGU?wHSjuD6MJEz8tK! z_0Sh%z|Cn$JQNL=CE~&$TzHF6V4U}>d5r%MOO@qs50i+O(%C(Wmrs*lSy>|<0E<#- zzXAJ)3Sl`Qq#YE;Z)9YQfqMh3xRFl5#DuE2k+E&-=E#cdS65Th9cn1Hy88L5af_m} ztJ3tyLtGN1mB!pd;LG004A5AZH5jxd)NdGG^1KPRcG14a{z7z$JT$M)!$8YiA#;O(mX6A#-0tD)mKR^|Pb>+~q z@l2PaUJ?6Hb->qgVUtsoQ)oeAmK_?F$ck%dOn)^RzY#mF@xw008$>tPs<|RR(|QdX zl;#XgErP@1mL<0an&iJHrbga2@GLetBkeG!hUn0U$*HS@2M%j$YWkVZS+EiOhDOt- zRCjmpy92YA)X1o)HNi^Zd(W!?*|LE?oT%|4V_K_)XE-jK`N-SAKupW#zp2nA8c=q! zva){l-phQGg8Qt7D>8_1& zVzG6WNuoYsc%B`vpgEMaExE7+YprzkM)jd5^j(kBU>h>6W8Co2^Jz;;kxNiFo z&uc!L=!@TVlL7}Hohw*XLYk`V-`ef`Lz(XJzD|^0s!*3 z_VYAzUGzBx3<9CbC@%+BzaKXRn> zH6+WvQB)N27lU4C71-E-s`=^g z2n{c`SJ(ndIyS7OPhTSB}|H(NOP~v8xbv=7)10 zFE#6zR(}#!{PxLTwNy7A;|E6K<1&Z1q5xtg|_qR1&m_gFw2hWYh9|^r5+tJi5);mXU+ zHJCfkus@pTY-p{74_I@STG@sHvuZJdZ>Y3JLQ}GF=MtRVv z7nAw2{&s0MU}k-An)8=ttM-fM!}!6fDY(hHHZHA#*D?9o-|#DoXe^4Mv2Ai=Yc_~6 z(wGwCUPb#qVsZJ#K_D(6LC!!yB-1ZbS?}r#0zt*b#-X3R$BZEn9JqdT6D9?)+#QAC@mo;QRuDhYI<*L>lWCz&P)roCSE z?S*yTpZu7{=lr=opYwMs)*yUAy*;m*@Me$dUNG~`QAfU#LS{67fC(I>;SoOysk2Rh zDOA2OuzsN7qK_n14l9W1f#RFw$S$7?g(OFnpP>`FKPFvPn6~3&O`U&G8s(xkZ-)RE zGFrL?xtymjJGYU+axvljWN|PZ3V)6n6qa~un=d+ogx*_NXrf)FRf~>K;`jUnXE0y0 zm&oT#aDPSUds_KoS~4~D3sO=ez;cS-qxQH6$%Gx)YpeA zsi?%f;klb%TZFF!k@4B^#DbAWRJXtB5Vh*F;7Uc4GM_(hI^dr_Y$-X(b8HV~geaN~ zb+iDCTTgY9-Us0ng_68J4|%QT!P7%>O5&NHgt9 zPsb9_S6j}BXbeYET2x*d@O;T1437ZdkmhS8NbYzwmo%tWNvr^En0S!dgxri_M`q zk)R8a&C&e&*#;gFILi+ho2Vw_b2$vH`S}i+hzIaOB%nffq?#OOAd{Y+PN6_=cQc|3 z@YU>DSGdC;g^iAi=nAZ-Y5j>*2}&VE{yBh&);5PvNN6k~%*?~jpQAQRFlJHH;B|#K zlKzAi50!@G`#xe z#u=@hjjO-pzgS!3H}dL1=#a3oP|}#jgitJ7 z6zcB{GCAH4yHXLRy#?f3(Dz?lE7Xd})c@S^u>dBj#VU#D;t76#ar;IMfJA=F4qYOe z>cdMje_LVulli5HEDr2~xIa-|BgXbq;T57}j^~ndDkvMR=pe{=eDittCTiJOXoTz< z;X_%>pRzEUY`j!q88zVS1>l4j0Wk;@{G%0xLr?|_{tXG~FP88xlhJMFA`?p%*H0eT zPnO{5%LK)Oog~i`AkPHFBlRzf1{#?QRSp45_S<8(z0=?0(>B-REyv zs%O_BD(UE51gD`o7CQ;9KcS43Do9=8vq32PXatF^nUEO_%p1(r4)O@(57T>p6b1pI z589H#4VRY2v;DBFN*N74^cxx)LRh907ml}Z^0|2!-+JmBpXGyi9GJD*{I^M0+iL~g z+Dx#YonH|cg-6eO#HNoq71Qg|1zodzt~fXu2vhoV#st4&_D~D*70!kdv5#UVaK%o$ z{~}nY%yzurxvyhibL~XpKGyB6o6|RVio(l0(qPEo!($>Q#NMY;u&C=MMD6WK@Qz{j zt3Sb=_1?h%v@echGxFE@M2>@Bntl`R4vLq1e_Gw5m@MBypQ!U+M%i`K& z>M&FrNtD`32K1qa;fN3aDR9KV+#ID~dfLt+ySw8X!z z_}{$%oNz;(w8X_1h@QcrJ>E(ZUqsl7V>%Kh5Oo#LkLw*nRv-pfeGGV)N9Z3Ree>8C z3mE&BM?Kn!L>j0DT#O}1yM7WhkzfDK)JN|b40)Afp%WAf!xC$avg(tGQUR;k#gv&% zY?C!(-D1SVQ+61P8ne$fs58Np$Y1!cubLohcWLC%6gA1}X5(t<3gOfregg==r1@0s zhani|-#R2VUHmWng~A@0pF8ZBdlfYbNP(8f?fdb@Yq`Jl8X9Gs;S%$xb3~0ak0C#G zZdC|(+gvb%_(|r1#`5wG{=paTt>d}3bTpkA1fK7M!DUgp zvBQU#r`zL|$wiZjC%+6P$z5i-)+l!Rmp_8J7xTiiKD4Nn=3%_LM;Ej9m?Y2DkP|J< z?LAe93_~bnni^eohL$xMJZKBYw40QGl1zbHB-8tA@n+a5C2DQrCEAg$isv);Kr-dR z;VsQJ(ihlaSg)(Yr@6YWh7;5Fg5*bhxF3NFp11`WQni;CEFpQy>?k?+M zI1b2!LU;jswjAP|mPpcwj*0Us5@o@*nR#aV$lkUvpJ;G13AF-^%e1E!+3o5FHdsX{ zh<4Py{i~LAR#m28f5j4Q^9^Gj1S0!ZHgA?oW*qv(Dd>*Zxet#I*5_14jxVQ=m!|=U*aarr@hZ@fV zI?pC*w|D1r5nSTMNFrVMjT4NYyB_iK*H_*|?Q3HUU2E9whr z=TDFaoLi;tX9m4dx39BXcX-a`^4lcZjjf-PnL6~X2*#vc)Ax49O;6oen_?mgVS{Xv z7Ud0Q+3d+>Qp^@sbcJL&*i=pUx3#j<5@PW74ygHNs;3xBHp#aGzd6)f_j1JxbiWvJ zcyJa7w7joFvn{9JS(Nko{bXy;tMY=4tt8cB##mxHr976+G^At*uVae^6k#Dtvw@93P$W{ro+ZpBPkbK0+-U| zvNTKIwQIRCM({x~{(7DAWm1RJq^`aZRCvNG8hLkWd3H2&66S|rq1YQUNL9su;Vk`b z2e*yU%Ns7jJn?>H$WOFEgotd>Y@^C!gAap6S(B9Ac zKGGGuI#vTD;@Q{m8FVy|#aio8rc;g~AxQ;SkjKd`s7ZZ?-bKp-Bp%mBEzfPpjX=pOzjo8bqYxLm#IV3tuDQydL9?oOa z0;kN&BZME#eT91!?5ah%(XIbVk6+wO_wWm9SX7tx4r*82^$xyoyt`LFC5bgw07F#9 zlMuQnytS{!s!@Ty>8e(+-Wv=Rg<)-q7tJ?V%->dRC{Mlt#xV=eH&>+AJ*)kfT zw@2ZErO44yWmf=o@Pa_r+mcae$%}fyougw1G%*Tg!PCl#hZ2S2)MjDiSG!`g{A6|W zNq8~1U;nVvJ9jjlfg8%Sv|WD3%9T@Y8gHybvqOKhgmCrf2_~A3(D>Gtkfqt4WK{9_ z!OZLV=BadrSlies=hDG?aU8R_)R`aHvpu`s=EKRzfvM=QjB9BUg_*+KqU9>@?F!(l zFNWJOC1&|L=ZdE!*yl`Y_hIJy*LZgcyc^;u8Qzc%?YfUQ_c-^1Bk3JbsIqT`cRE%H zwDvDz$S30>KAN&D<Z6R5k#Yxpjtxq2`Ivr{4*bZD37*20~ z5M_y@?A+9^Zr&H|8kyZ4HgQz73)8b^8Jo%TU#Qrsc4s`;a|taB^=#LUQ$1XKx8%!; z4*OX5*&8F{L2&4i(_w>;2)-Yu)Vj&wEOYTjmVOb=(20^(W#Hsd0qw@%F|%kkR)uhB z#;W7~mwR9TAV2D^>F$WZ61p>6N+0qz*PLF+?!oMF#fNJoZq^UHF_ubCshW)uNlK1R z7T+n`d#SgY%ody$D?;`5;yfw1Wl+RaqwDn@Ffnhr-@tt#GMoV*I_Dm|n)2FC$0SQp zXCV8y*LSKhe4_|)(27x{Rau>M;GRe(Yv6Tse|h7f%_`v|bvrYn?;T60{*btCCh8|k)FH`5R(`5>ma z@$los^vaGBfjee#GNYv^8^822x(ksjU-rrI?ncyuC%mUWNBy$CVhK|BJo&Cc&8PI< z%>LO_B3dY7^g*#RoDf6gC^~U&iu}X@?A9s*5184N4`2j9Gvr(3HbLO}X}o3OfTR64 zSm|0>we}}k@;iHE65;5NR_5<9<9Mst-~34qLW-s9>Wb|865N1Z5C_} zDq^BOnCJQhX-02&U`9&|7~`09S(x*ia!qG6h5cCwIej<`+f^Oqa&6RZKHDDoa|ytY z7@H*;O;b(T+HF+n>ST~YM?;f4Q9|pygX1M3-~5b%D&cmAj0siga%$)0P9t5v`dDG! zOtFfeM`_1RAvN^iO-1*0NS?tqg7=2>pe$O3?s?}hc{cH55Ygy;RAY>k$stNUsE+W$ z+oSUpmE<9Q*4AqO`xkP%&Y5)|4^H4;S(rwmYLbFC`=yP?_PnKl`=58eF-N<$L4B??{gGD2oaF#`gcAf-o^E)pzv%Mtfe zcYda(E;lDe<|ZzRg(C@GsuPB_NnLfdLd`+iYC)e4J24!Aps>mufl{%Nxw%ArCzB+t zWyQkAaCDPpYLHNImK;HGRhWi~)hmR=fhqlv)+%3;+#IQ&o?zzD(gJ)aCp_Cx4%Y-s z5rvMvpw*dvxOMCm9}>hGXcK)4jJN0jP?ZGxK{(Z@?aV?8b~7afr_6wwo1Rk1`(}&F zU)+n+x|5#0drL1P2hSVJ*w*K>AzJaq=L~~ti8ZFw_c&(eG9%;7-@d_?M5gx!R%_gi z!-}J%M4@RD2O=(Q$QLh=i9Oj3iJ0qon|n-@KuDZ(e#T${Sx!cQk#@k5_` z=2>Rkci~p41V(t}=jUkzc~m6@Lx|S+DOyge;RvV29#$0BJCkcQ&iqoIK|_S528-iF zU1du6oOC;(O)@f}bVu~+7NM+N$p@si>&}PE4s0(s5D_A!DZEJR^}6)W8_nL33n$`c zPfXlm*fG(Kv|Vo_%67o>rM7fKwMcq66Hyhc>|Y=sJ=fc4&eR(DWL^-BH}U=?daqbv ze?LJHQBuT>^%E5pq&?ehn4bB^o$JPv3Q+8WJ$IwYK~H=NL=@Y$j9N~ST(nGewh=~= zE71>lB)M^6)P(#!hY7!;R}&?c@dmq61}WYQMLON>B)xTaogFP9QNEf0yVy+$!~WfIzu<-L27Jc zFtYs;ega)i+-LY=6~pk`CX81I<>LL#O$5|V+Q#jLmIqpT&Ocj9wL2~4rC8^dvVcT(D{b$P*U5m8}!Irb8}wuo7y zS^mPXDH*`OCp^fzirzXnrTkdREbD;$FhxU2k^dcZ`zx)=?y32n{d>smS^$RrLCCdP zqbK$ama^P-T3(%hl6@U>fH>Q6H;xn6p};YW;(AW(8;Tqd2S`e|Mjj_x<9r>=cQf-! zFLaf9NaCz&uNNElShLX?Aj!t;!f<-#C=bNW zROes?SQaq#wn?A3tE#{XWklSRU6^NwG@nH;7!1w&aE@lRB`?68c2qJu-G~hi`yy1c zfVApZR4n0J&qr`djhT$5%eCGpPzq14w068_AUTPhvPsrhy#Sg& z=tjGUV0ND9bSG6lO3_TLWvu7m%mwEcNB~y6{Tt_?JQn(IjeL#k>YAf{yxQt_NrCc2T*s)1sbmm{3nf0oE*!ZiSq8q|hd&1PhBMTR3#ud;PG48GNdqly8hQ%tW;k$Z@c~|$| zwX0?90%vC&+IXCx5q|;P0tX+%pi76j0T!%Ne z)|9HgW|n{>#R@$~DfRK%iu%*5E9{&WP@q|ebQVVWom2&+ zhps&`bSVVr@V6|OUvJOwysmhRy}>_?(Vv_HLqbBn3kV8IB&)3+r!@n70WX9Sa+3%z z2BJqm4U!_s0Bd#oy!t65uFxKRD4j8DZ2*gl@VdIw@QhU_!pl>1-XNFpPX8c0arsR=BJ;XE|1~X z@i1Bq%-Ypk+HKqcnk_Kj0-sKJJcQ6Y&?wGk7olC$IF&%|+Lsqek=)HwKpRinxE$S^Z%-pFQ$Az` zC`7ZPukrBuaJ4S&hE%&!pfllThI=zkS}(&cNqy?LyuJ=x?u;`x z{wp(%JrMHEk6*PQKS4f{hJXN@0jr8LHLvR}wnIK=7&QO5?`n;h7Sp!Ay(C>M)|~(j zu7q0!l2?UMB1ug>Fnw+VpO<<6{NDp5DzH$MkqZCdjd%srf45c|{dd#l|9J6VdjJ2P z&HwS@e`M$XdOdsQS9T_$4*c}0PN>1)IDJ-QSz!LP0~hqGz%Zcfj!*e5_2G*@kW_8$ z##i1LQF|SKE5Y?YS!@hoH+v3}%=y5*1FpKP?$2X_58`Y_$iCu46(WdRolp_Z9!dtH zrJsya6@jiZI^A<2Tpkd&lSLD!=lj~nBPI{m#Q&+p^kDmj>A`*b_6=S1=itU$dNCUl zzCD&Ie(<}#c*CRM_hFFYw5|bf7#(DBOJtCpx~3kA z`}|%Eb-i!gd;B^o*nGAUf`H2+7*#04$Z>4K%Ub_Csf;IyK8H+&1{%C5WT4u^ z;>LeO3jUz80|50B-%;QtoFGo7O(JljKnDW;PP*(q4)di(aej0z^96i&GUd!4zK2my zM})`gav2M`-AlVJ%mw*n@J00${fPVglp)waaE0#rrNnU6KjYN?3Gq8Qo{x_JaW(34 zKz1ynRdbz`2?Dy?xIOE?Q46Ah%Tj`r0O13v2+7?YO?-0w$o5g^PGqa*yM<45GH=fvn}ehTtHh(I@gkWXLEN)yU#(++c~EkW1` z?%~IG(6MzxUAZ~ftZVHuk03L`?Ua@7wL~giMV9|m!oVzGn*pXRYDXW(&Ew7Qhq)fF zB+xX{AE1zWul*y8<(x>aSbyoeLzk&V)Z{!=_WVU5y(vcpe|tB9gEs|&6?J)vDi8(l z<`MMFX_ZvhKk{%9`3g<)t+v5y9g?K+QpDDH$zH?LJu4o1mA5Z<$^!piy-m+oEHmsJ zzMUB{4idI-TL>|uIR+At3!~faXR=~2P7uy&W_^$m7K{ODM z>02H4aT{1e2L*scmkD)`h382WNfY|1mBZy1Rz$FhZvKXhVGXil;X6jNk=vrvb~eVl zt6{7rBKnDwGj}2pX4^I#4;%A3-qXu|N;wf<@XM=_%Ygq4)$@1B-32 zPzXiC_<}CfD?-P&wm{u+yK4#FdiN>V7jv7b>r4WR(7Zb02U-uEz zHqHv;v;wt^^*kev_=6YCYXdLD9wMOrI}Q{=H^W|Ly~MNB(^3l|NTj-$Kec)h`*@%i zDoHc?lHD6Y|9glrM03N4@|On`-D=y*U!zC?yj`qs>_V|9`9aya6MY)`XP&{w{!~`U zG)cOspjciXP(pw)0M63D8vHY>*)tRXEKu=RHqAyNNX9t(FRrh1mu-a9K5R{W2+}|} zDR2DqD@VN(G#P$cJAoF>#Kd%ZaS;HvTIy>vJv~9p@877}!>odB9@w%)RHIqXI$X-0 z*2ZNOfply&FSdurTihMF{>2yvM852zb|dZosUxdQpXGmi(-!dQoB!<5{~s^@XLpee zi8xn{cj8)tR0YKr>s ze6m`-a#>OKbL_MD7JMZ;ty_DQ7X77`i@dEaaFg#jHIl%nJ+gn-Aa~RG?U)2|d&NA0 zW>ZX8%Z;GY)WADa-08K89Q#Hj>eQYV6m@bctaeW>;JFQI&bilL^1jNAzY|8q3<&kt z#DPAVLMvLjEKfTzV;#~cZt^|nA3&=B0E<|P%mvHBAU=y_c$Khs$lA#HUqP+~m&E&t zhttaM8-`13w+?o7mU4j`X!^E8h|&{CmHIbMos2OtmF}YaDhx#%U*sMwrT*!C#eP`P z{I%#zIL576Ppb~dqG;jQTA?Lc173XA1n%0c?UZO~bHxWc1Hp@7IJ{?Dr!%6yBZb8C zahkhDxaxU@!3}F3gXU6gEAd2*H zqdF){@V3U*%nkXhrxHxDP|KL3?K81pasR}@Qh0rHV@}G9!R78GLK-gdu(6vJ!$^e} zE~!;3bl29#xaaP}EKvyzdW3Sd_xL!7IoQKlGJ@n}*WcL)P}eqr;!H(d3hNc*y@miz zd5JmMdqL^qkcf1rE!|qJ3mhT|1;Xg*?Y17vMt>&>45)_73Hu6Ic%G=*{c?{%9lYV9 zaWAs6AXVkzr9NAGFlyd@hl+z$a3zWo&fT}$dQg0kNIOmVAqna#XCqU5% zL;{dOR!t8hfD5~SL%48tchg75g`chtCi9tlA5|-pNnZp>yZBv1SIEW2+LX0x(rTD4 z=Kl;Mr-OBOf13Oe$Xim+Z9ajzSeglWT{_yNul_&^Y}11}spAGd1I2kzM@S-j!8vTp zBNB$IGhfGzs@Weq&&Kv^eF%28IVEP3g|>D)d_g`(Z-4_FvII%hA9s!yMcX+QQ|i?P zz@de6FT05W(80$*)*tUKU@A5b8OGg)P{~Jt%sK{4mAhZ2n{wF217!HcwN7Ej7sf;l z?w&5O!`A;)(m;0kV8sNYixQIIG|VClHNF>r)MM=|Pjc%MR#m?opgTK@h9|EvT(2Lg z{k=byj_rthoA)9t!tiwMs;f((ba-+?#bOi^iYp3#(JX zoj#gs3I7jBBxV=YgiAY6; z#CLSjP`s)(A7hAm&Gi;^3e&;nPDf3(hul&^^3P_Gv(Key8yApPs6674WL{2e>X+TAaW-_#z=T7Yx&WC>CW-DGldOILBv zeBSdG-!+;YatrfIsTX4e`ddg!Viek#^lC_lh1Q_t)=roC><{mq&kk$7fdZlP>5Py*if54R`6OX%a^13;1Bv-+p; zpm9>$T6PFEM#U5Rh@NN(vo)bsIEN+tWIIU0Yasxv%gj>92i|PwfbjOJ33$bD39BKj z)E2yK`UL}y);(hwGW;0hIA1w#Cs6elM|q$6i1NtI(0U<)??A-@g6(M<5qUgJ2(mM} z=SOZFXWjk$gtBncXf=_{w&Uf6jfFF*uc}_lQ+oBwb>zwOJ;pOX7VdcVG#(p|->)xR z-}`vFl8{V*ZtWl08Dkr${X;pksAL&yr$1rJd}RQiduC9wEb>+_PT4mqn8fC%o<=O= zY)DqK{J=PG5m;P?Nsud>&9SmV%C1>jTT@@Y@^B@PPRrVtlP^DA?hDk>Rh^D3JTWR z&xK;u9~=hWUkD10Vl}EX$PiA^tA9E&Z7o<$$(W(~*40@iTRQUzw1~G!4F10tf0+7m z>O{bY<3VdTk$6Bd99Qs(F6l1*it)nXlRqbW<_fCxjD^0IiEle0y}sy&*XoU6HUOF4Q!3$_Xaf zRYrL=sN!iZtV1_U6={;i7RbHDpJePvbR z1{d+QeE-XFHr<{b8WesK*8TJ1iGy@tx4J7Cii4?&dFe}=Gr1WA?md5+P0X%NW;Fe%PcCF@=c!7 zZ@Wgn7{&HVh?^%A?6zOemzv1rzG#!l`0#D) z$+(8BH36twshHQ?R<6@{Q5aDhnQwFZnV$KVN~e(emCr+wr)N6m&F>o8+LN!zoBH9F z;Sd0Tuauzg;Li^^lv2@OpY>`jYD1FsN5-NN3F;)3smHeif5Yk zFV`md!1|y}yjPAo$2}UxKGgvhvx6czd_GiMW=^qs~;pO-a=VIN5q6rfTqr zWbvqEeKh;ry3eCgQ=;x%Hq>x9S(L0b?L6LDOZbxrryNrK+I$MPpN^${!KHh4Jo~2r zI1X6GL~#UG=D4Xp>8t&J?R|G#Q`@&EUaxvB;8g^asv;mDASEDOQ9w#SAfXopX@LL& zp+i)}28i?~L^>n{q=ioKBE6G@5=x|n5+Kx2LYZ*iomb{f`Mo>y`OM5`Cjac5bN1S2 zpS{*zd#~?WXPr&pGrz37nP^q5&KC5*ruyWz+@6Os>SlVNMcSa7QP53&KRmLiv@9UW0gIEL|gs|_*Q*(r>JTWOjafm?nYD-&O z2X~fHfVOG(tJT#Yu6lN55SVv{q@XhF@)^f@hk8gU-y~5Ne(3i?Ohc70t5m#Yyh>7$ z0JX=+b|E1^emb1F6+8bPni4(Jn8(GCe2-Yo74G)@{QRzYF{9iFhu-up59zLDl=Y3- zoFs#DN>41Z_BX~t6cR6sByZH{?RzW@w(7>{*?2#BRf8soLSm;h2 zP87)iAz?+B-hB<}>$gc)%p};g`-eGvIduIr-|21y%6v#L`Rwhi za)tcVeW}9+^EV3Mjtro*NqY%waK88AzLMPSY{M0nf$xZ_N&sUZSM$$&tE{Y~tsH2# zTot%=D_=WaK^H?3oP^f%;RvzP`B+xEd>^TbquLbFOzVJz4p$>7FM8*Y}w(33SIzi;d&-hHk zzCP1e*T5LRYkM44V}py1h>k;@LVd6(O^7_aKKi)H+4ncjGu8K$gn3l$j>gRf2YWkV zlq>ad!P(O?vAbh9l0x=Mv8>TyK+|SOewppNI+xmX6GOc-;ob{{dO2gt4d*K^BpfY_ ze-s<)zyK+4Z{MX}Bz|eqymUS*(@1luQzUI zpj{=7h(1iU>AK)kyJ5(y4(H!oh^J@$9P>`5y zUz|TzTI{Xf1Gx(;B7;;4&Ti?Tyqgsu&zXl@YGVZQE_;#`4UJu@ZW3j{WrR;DN|-XG z$TB4_w|LIl--dTzo;+08)_O zNF&Usi0WE5eCMp7*Q|S|Aps}rybFDSY}-gAQRNi`vnqP-Zah@lB2`TOCgMKbkZTOZ01nd!CZHKw9S&_-h+ zu0Sk(aZ~#nL_F%ri(({1=1{0QzD+=kFH4vXH<~P6Fdr{1dCh+lFXdh3^DY8cciR7O zUtNV0<$NIILXVeOz%48)N)I-C5hlvbu|--UuIB`y)lW`f#t#eB^uxqCjv)G8NsIE={jkPfI2y@1x3H3tQj;+9Kmx=Q9Lsx{EkW=)jwYY+ru_)h357wtY!S)8F^#3jx-GVwFyjmht^ zwSA}kp(QfAwo1Q4b#kL%F?jePTEsE!P(XAAWl z_~I7kMIuQ_xu027xDQS-uD`@SV3GZ<`ZYjRY(W{suclVsGNP4GekBdNh$MQ+%~u3g zpJqR9h|!F@hjILbbVY`o#V^Na4lVAT;{2yeC;gNxhoykQE{O>_{ie-F{5qd=?f5s81qkc#JdBH)h&)BmXujyan zN$c5nBKeoMPqZ9GWR-9ZRmO`bDt1hP!73^$G*uWlOHIq{wEG@CUD4;wvVWj^4GbZ9 z)?9T)U^lT{RA*8OxjfByYgYv6T7P}Z(x*?hp1~m2)53+w)H}NfaO{a`=(bJBV{Gw! zPG09}=dtA#HnH}c7w*iMgt|G?gTtnfb%}J%gqX-HYwP8yD-Y5#5v*kgA%`!GKV8dj zLpIM2yM9}q=&bYr70~zzIYASu!7C5T-rdHxYQ7qLYIZUhj1J%dd?aqH^7-`24mBFH z`5iHy_xHxAsQrd#1TSv>$iSR>R zNjjV!?vRknPpLe3sCkxZ;H=7=taLxpQ&C$?(3z14iKePp?ues691e@N^l?QM9E8K> znm>2QTe(7|ejN&KnE~;lx8o!6XGSp#8}(<{wrw9kDVH)^QhT-7+F=07t zs;p$4w^Xe?*}X;^0?5Qd=7dope06zk?@SRk99xFV&K&rFEq16WU)B~E213O)d2coD z!b7mqLgjALmHQ?P>3_)-vUv~hQuOi{#|qfsUg42JWi1AhI|TuNyT_vX7E^C6r%BJU zX!fq~y4FtcB5AcpnfLE;qC=XpVDs>;FbQ)Y4<+$1aPX+Z#C%^q;01;KPgTe43g37{<2Ij*Ls52$zqF*J8Uf5jQH(Iw@&RAE!W0v zm^9^3M3_9fW9&_^=B>Fa85U8)s2p zV*qkOK$|oiwJuP^Er`}hac|Zdg z9EA6SjEUWl$Z;Yq9dg#VV!ve8pwvfim?y-D3#;2S5DX?7zC*YMOaUphk}%lfGxQ4X zQLm|IM+LzNtzVPLXTlPTa0KiEKM+RvR0mNKkwbe%NB!BKe?KLz3+T%_aVgnZA82>(apqNzp9B?#WG}C6Q1GpzCf_ezf^eAX=U7B`Dv0=pM5#C} z=e-ph&4)g=12Y(IGdc|oIVoXgF45Oc51tfbBZyQ*EYA%O%}%rCzkmN50A*wa&?xNw zLW0`#W+BFc4=RgrYZ|~!JkD4h6zwBs4o@AL@%aM&F`}hi?dOg=+D|4|6rqDY*@N8g z4=%J0_3URGIb#ka{abI=b3RdDS* z>Smhd#oYLmjOE#FS4sIfiLBRl(<^nl1T}m%o>gIE4PKfnj|G=ub&V%+FBZ$lpg}rx z{B*PIMZ=N65#Ni!UuhFtpmyBDFj0U(E#PdjL2~b|@WRHmfCZduKXeV`DY)1i1~3n-RTfq!MYt8I#lJ2U53Oo) zYzz~_;kPO(28!At90M9zJ~r5m!}G^RN+JOQI0XI@nKvZef}>p9&}S%%)B<^?P#nn!@@u&TWR`*ea1BK* z*^gjS-~@q@#NeE30M!ZF#%!-HDW*u{JT!_2E`8l4Fcnm0-{rkg9X#5dPj$W`OKRw< zTx*@nb${lV^8&k-BX{+O^vDO{ za7HJ0VcMS!O32ArM}&B;SwYuwYV|}|n)|SWq7Bk#dwIX}GEM>h%;;IS8QsQGMzT9y zGG*@}dBfG64>GZ{u!p8NMo6BO)(xH$F{3y|$RFlL8FarQPluaCNEVRu3eXWc58xXs zVwBIbtBr3pn$44|Y0e=w!{4hI&KugqD#A7}cz_k?z0u+@zea(VQgc%xGjhr%&Il5? z!y%5^RUpX&DeF9bFW`o){xuwnvV2bVCw+~W9f^E zi0Ikc3~1S*(^EB9ep~(d{b9K;)mqC?P3?6Jj6(Yjmtiwdfh zBZvt>tVc4MDSFz^UWq(aT?FN+omePK)7I88=xDatYL-(S%|-W_xu2=lu0fs`b{;r< zh~c+PSmYcdNo?eUdneJZ8!=hy)w9v!f+FA;LoDI#xUh&x*_U8*U+|W9{N*XA=Aw!X zI;y9dQt@&M(;99JinmRypy9H%zYPczzunbKqyS9*5rm3Q({!AT(^!(iY3ilMhaMJ! z+SscOq-R1)oEN#D^vMR7JgFb)@1&K*rfSc23tQD)*Q!ZMx|#OgWFO4mZqUGQZD>Wu zP%inJI{0hG@02m(*sgp1eg}J~vx!)W0`O&5ij26!mJJ_=6(1m};+(=;dc|{AmLs{% z3z1izsRHEmom?uazFDvi9j@mUx5}|j;B4cKuqzGQA!z>-DB_^MHmPXXVYD))64K6* zmkoAt)x1``^kg&s^f@ev0!(f)bsX6^xzGN!9x#d%RlpDtO7)S?8fD~5*-5zy@k-@ z_10y9vY!L@6@ZkPywdnor&V#f&tXsjIsFbY<3TUck$k&X?>qA7K&rlyo>DGn&d2R- zfLI!>u@;Klk_c%EP)<(Bk30}un7f3-^V@Mv%u4_CX^o;*9WgebKcnNP4J^I}(-~48 zsBuB{_wZUG%q4p=ZO92v_MO@GF3&~Avx7Qrq%}Ab&kJqgD!kd!2Y{FQF>TceNjmD` zW}AT_sMDC_!k<0>&^?j+VmW>0T^&ysJfI1OxV{T z-uv7Bu0ra+M$KZfg~Zdrvzhu7n`^i$=LzMLI^eYmf%UNl8+)o(SAD+-0zy57LF-Qdob)%l7!lU`_tH z#n3Ole#+E!8Emlynui{h9||i7Rrxa6!&a<{INJ636XaIfjPF>KDCWH&-^~Dd8fOnd!!W&Jt0zO?P77EKjqAbub2R+=uMXQ zj_x3d4P7j5L_u}N-3rF~z23Ws$T*v3ZPK`noAF)BW+8ikhn7M;*d0&7o!O%{J@G~CCQuf|6ZP8sM zlrft2WTW#M(cnST;BAO;xh%VNmgRT?X*Sn&Roput|oPR z6*pgO>+K)(uo{+>MP2m4$IOqU04CMJA9fAsn2X?7YZCcuniUmxbUJeSX@8M5p+ai< zZj2G2qL7jq<|21n{*L7-h8cjAhyg!+St<4hx0rUjkvWw;rwMQYqZ9sweNmSuBo);{J%2R7jvF>7A)_O+{!8 z419tT2zDvry%(Rj#eQw?4Mz4#k&QCSWcl(@!-Vr}fCDQtJ6V@~8i8~3Yu0ZjE?Lo7 z;?PWoG4pSM>VXsE=wS4Dt-QqiW=%V(>C#Ca>)tPwX)iuv(Dj+0EGj2f11wWG3x9Ff zaG6*u3fLms)6Nb3*eXVLG%eLKtf4a(`p$4+!7E}K-=zbQn<-57)eZmODL%g5{QJz0nEc@?#E9 z?}VpzRPv$pxyAE!qw0yCQx|s+PNCwccs<~4S*>C}mj1?QudRWPD4Y1uoMoKPA9^g zOkRUBN*Bjg+7g?A52zPFIBH(L*N^ib=cNp=n^DF=zVw1W)IXvIwv6`nc1}k8{1>oM zsj9zH8o!nIJM;@l6QIgl@V?4x`+$4!8*-qPn%|pPw73@Z05Cr<(aY1nSTa+mCanjT z)!dw|6c!oy+5y!+0RC6O#-GKoLv5tl056{^FMfz4ysg;y6`e8Dulu9O*|MO~)Ysxs z6(1lr%3p^Dd3OURE}RM?42~Mmb6E&uuV0mtQH3-hBAUG(nJ58jIKmJQsxug06vUd_bwwRHc-?=F2Dce6hxycQaxk zEuX+UWH0#PwN=tEoMC3I9!W5gqSROTQca{`ryB`4ECjyTIN@fb!`8p7yI+)#l$)ssvm{ z<}XTVW+V)(c+lDY!Z~BF3I1o8vs`#IKAhGcYR>}Mvv`L;AUJf`xF=0qgc&b=_LZhO zr{ccfv{FDB!99vv5k$Abho*%(z(U_tm z?&61uMfN?@eQyj>()|w#Lb-XYKn>q;O_9H(?S^TnR9h;dhtn|Et3BqwUX~76V=2y~ z^9&vl_pTnaV*AmKEO9h&8%}Sa!yb;C$M&3a9l!5}5Ndlvzg>Cjcp>)pNIWz`HIM7V zeLUlg_5^|vNqei|24atZA{?KCMn#oI6Pc=0Fb3f_#SL*U3;D;lE2!F7@pQ&yba4qd zZ(*wX;u+S#O(_PtcV#&pt4`W02Xj>lWd}gy0KUV=QDf`_!eNj{YGG)DFz1|cmd-xC2b9g?}=3MIa=0ERX`mflU(X~`B!VYWJ{ zD~7m^6IA-~Yk-_2)Q)9TbM~Om`?d*QY1Wtsa+V*~r3|*UWo4YT_8GqF)xX3&<8qFo z#V<^W((#|(E`Z`mstpHyn{KAz(}bupk%K|Zh|i>&YSG!b~xp3OUt%YcP9scchJpYr{#?+1wLHJHHMRc*L*c7nj%-fS8*UFYIY^8odj;=ZE*VI zrIz=w_71@tonoWV&Yf3+g)PqTHISuDb7_yZ3^1yfE_xOw=7&&h0t~uf|_+ zHYGCH_QA5I)v~IT6ogl7^iwh$Q&RLu-YqK`g!`4{oZa0Vve2lT7|8(-w&9XHz2<_q zTh$MAA3yzemW4&um|8>jN3f8`)8?d(mXp~Y0&6v3K!&ui;st-0*4G2;(+$X-OZ;HI z5k?I6I)GX258$YvO0HYycR9Bv+zSUa)05L?nQ#1S)WAlaLT$7LB_2mXnPS^G?8h~W zfJRG(ardsIJM!HZU=PL)O8uZ1eEO0?LIXc?8^k-w*pR1ZuY1VyLWqn2b?EpiUGQE5^ z4aQiKdvmmFR0HzvA7NK_L0c+I8OGPvM78vIk&DSTp5D*tjG9c1q?b&GLiglvJ9e0* zb*T*Z_JcXGlE520LHG6;umcklJe1q@HT?coi1|QZzQ&t3PLXA?cbtV4-~@2RoLip@ z^ZK_x0ci&6XL%2$O-&~DrHUPQg6T-?%P-8wf3Cm$^O%988T{!?Sv422ZNH(jELSnj zf=lD#$lp&8vUlb#NbhVIV55Z{UE{#$8X*LGN35}&Xo9Z;1K?J2(sLS5a$A>}&JcmV zbD|xRc=tbanQ$6QVeg1Jh$MF(yK5LwY|4KGioM7hAomy-y)}B}=(pk`o#}~yqb##U zqY>a<_XF7I4)Re;D7!C!Ilvej&y}5{(^B9?BP>4`%Zgw-e!3I;`JVYh zmM2d2Kq!SX?!0ro5Dmh-}U*!oqRnLXd0)|dF+kq4eVt>}W|d;PN04-_I&7I2xPc4lK57}ILFv%tKwGjuifrH1#~E<%<^POD>^J#6M#T@k_^1+ zEnkDUR?S{}Am{Xi1x{onYQLpHoDXqd{n4X*v$RE|q%B%cyXKqyYx6jtgdA6XnE7gQ zj6hC^ip4{&_#vZbM$k^D7YVUVtTAQ$h${?kHBL7|Dmae>UmfFh(+gV>yLr%2Og9K+ z-2GUJkrT^-)DXO_8msJ{)L~^CF(TcM2dQKg(93wkxt@t^ev};27n2qHVi}S7X_W6V z0D%eY$v-gM2$yWh=97(uuuF5&BPA1ul3ALODJpA2uCcsd?5sb@yXXdFnh~qK2bBi4 zlU~Hij>1)3Rs0;opw@x}*9%)xi@)26bJ;Ppr*v_Ma8|V9GLBbHdNJ|tVuhraN^ydi zeR-n_$tWDS@!DQD+$zz{YG_lLOel358Ei_53*+g+ifl`jI4`s$fy&BE#IndovO*D( zEtWD|4@J2Eeoaf#EtZxOBvVHRD1yY{b2lJ2+$=Z`ni?|Jm2c3MKcq2QbJZ>;_w==j z6lWU~J441ICDIwQ#F+XKDSYnq-F3%YcP*2wFih(w?6uDo^+4o^ltaz#Si`adep}{T zs=E!j_Flzs`R!GS<9nYqp{0Ic4(%TPp<2poqc{;UhFGfsN&ze($&<99wVh$XKe00o z>0GRnaV5mrx|2qgdmAubb?m!g+CfD3SEpO|GGg@M8*Mx%c$NI#(^keswX`2Ue!@u6 z%NyiCP$QIu@H*?o*)D79+U2f9yKm9*daTPma{2Pmam&=nZRxc0EzH6AMZg!t57<9B)7y5Ik#$z@ozWS9b13Q!5S~3 zRX~C?tz3ymnf0ikYmosp+Gp1=F7B%TOF*puYo61$#e4L% zdUkhmFEIGvcVWg4&&~+Ks+ZeOztnW`$5fHeIH$AU9DuW8muFX*2VDTkITi2uIL|$W z_J`Jix0qE}p10AXa zOToubNCGiXlMZF0K8@}ITXk501bFVi8+yoZ8dSGyxnl%{Z`wB8TKEv|2(F&T?U^{p zyoC@~bC5g4%l>X8IBBTke~kFNz-Z3wDyMAhJ%=6w@+`SShPLN$QgcQHj&i$zg***w z$#u68vjaNJ_-Q*GOB@Vdy;@&2tm%IEMB637xNa>l^1lRq;wl>SEeO>#E=ZYYXpDs~ zXkv>3D{V%}J*w1cP(sc;Vq!Sy7=BvPSB9~yz{s0TrZTc^2j=h2URcim`po4DK-8S; ze6c~1TPM{MB$?>RY?JMTwX9S!w58=K3^=0`#FMhN19zM^O(biS8ZyQdy83-#iV&?$ z*Y1?nOyrOK{NT}d$i^KG{7x2;SaJ|dc=652qB`X*4q%-_S44Bdzl{e=*2(~5&3>@!Z@#D^oosN9=BqoNg@g3 zJlS!Tr!!bL@1!-RyZ4r}b1PN(MnRuh>P0+wX))|$%3)EV zWGWzp4q;yRTW`S5=bPV*@^06$FN14&*rQIrsn1lVt_(H|hGpY)@KafmBZq0JYE6rx zR4!DxQbF~(R%-+Lb~tIL<_yND`0~+I?6LRU?}CzN-hEAVb$bnW2KpouNGp7o`pnH{ z>zuGebA;i~S47TP#2gJ*9rvXD%Mfhpon57hLyY%cX6QLQ6m4ygdPS}#quf5s=Qhx> z$FeV0U+&4f=<{rqH3$f|DcZhOg3?#?Yk`_Qp?ciFB0Tl=#I^iflD@&*dyXsp_L(6I zeCVAOno(Hz6_XrF-saZYCf&v+ytbp39HY1IJr_6>qWI7Xey+b|HyE@r9sTjWqA#iU z88b>Gc>mL0&;pXTmje{~>2Q7Q5}H@1M^t8d)6wgZO-O3yO=jen&z0FYX-97XxY;i3 zS{55Z0&KI4e`5uo)%)SATL z82#g~hB5Y=6#u|L7wSau^9Tcms{jcqSnt~?#7i48f4O6r$l*GaG$9*@LRsN%4lGs5 zZ1@d2br(2m?D?ZKK7Hz}BYcX@3Y{V6#3*FMOZ1jRTHew6k7>3Kx9rI;yjET+PB^GtHq6CG!> z%Dw7Wp_bg~ai19P(XQNaq0G(Jz&=_NN;zhe2 zw8xYmDoButL!p7QfULg;4N;)bRQzoUyfS#O2cLg?`W6je$?7US3ybRx%t>L(w*)2Ih(0skbXYpr>?*CxT5-g7h?!7;NQVqenFrP1!w zzcTac8cYWM+0Of|71e7o_d`i=5u(lLZAvSEHb zKKxmd@GwUF3pQz&gAwUm0{*8eJmI$pNUPRcLI_8fKhN+go;o)()FXlYrgTHge?uwf zms9Iye^s{HCwFhe-J)OmdExNz@WQ*}XlEurSJ#O;`Le*Hi*FltXUT6~jU1oVQrCM_ Jr1tdne*y#-E3N + + + Chat + + +

WebSocket Chat

+
+ + +
+
    +
+ + + +""" + + +@app.get("/") +async def get(): + return HTMLResponse(html) + + +@app.websocket_route("/ws") +async def websocket_endpoint(websocket: WebSocket): + await websocket.accept() + while True: + data = await websocket.receive_text() + await websocket.send_text(f"Message text was: {data}") + await websocket.close() diff --git a/docs/tutorial/websockets.md b/docs/tutorial/websockets.md new file mode 100644 index 000000000..703f57aa1 --- /dev/null +++ b/docs/tutorial/websockets.md @@ -0,0 +1,93 @@ + +You can use WebSockets with **FastAPI**. + +## WebSockets client + +### In production + +In your production system, you probably have a frontend created with a modern framework like React, Vue.js or Angular. + +And to communicate using WebSockets with your backend you would probably use your frontend's utilities. + +Or you might have a native mobile application that communicates with your WebSocket backend directly, in native code. + +Or you might have any other way to communicate with the WebSocket endpoint. + +--- + +But for this example, we'll use a very simple HTML document with some JavaScript, all inside a long string. + +This, of course, is not optimal and you wouldn't use it for production. + +In production you would have one of the options above. + +But it's the simplest way to focus on the server-side of WebSockets and have a working example: + +```Python hl_lines="2 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 42 43 44" +{!./src/websockets/tutorial001.py!} +``` + +## Create a `websocket_route` + +In your **FastAPI** application, create a `websocket_route`: + +```Python hl_lines="3 47 48" +{!./src/websockets/tutorial001.py!} +``` + +!!! tip + In this example we are importing `WebSocket` from `starlette.websockets` to use it in the type declaration in the WebSocket route function. + + That is not required, but it's recommended as it will provide you completion and checks inside the function. + + +!!! info + This `websocket_route` we are using comes directly from Starlette. + + That's why the naming convention is not the same as with other API path operations (`get`, `post`, etc). + + +## Await for messages and send messages + +In your WebSocket route you can `await` for messages and send messages. + +```Python hl_lines="49 50 51 52 53" +{!./src/websockets/tutorial001.py!} +``` + +You can receive and send binary, text, and JSON data. + +To learn more about the options, check Starlette's documentation for: + +* Applications (`websocket_route`). +* The `WebSocket` class. +* Class-based WebSocket handling. + + +## Test it + +If your file is named `main.py`, run your application with: + +```bash +uvicorn main:app --debug +``` + +Open your browser at http://127.0.0.1:8000. + +You will see a simple page like: + + + +You can type messages in the input box, and send them: + + + +And your **FastAPI** application with WebSockets will respond back: + + + +You can send (and receive) many messages: + + + +And all of them will use the same WebSocket connection. diff --git a/mkdocs.yml b/mkdocs.yml index 432a23051..2760194af 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -62,6 +62,7 @@ nav: - Sub Applications - Behind a Proxy: 'tutorial/sub-applications-proxy.md' - Application Configuration: 'tutorial/application-configuration.md' - GraphQL: 'tutorial/graphql.md' + - WebSockets: 'tutorial/websockets.md' - Debugging: 'tutorial/debugging.md' - Concurrency and async / await: 'async.md' - Deployment: 'deployment.md'