From 8c31d63233af6503e0ad6c01d5ba422324227259 Mon Sep 17 00:00:00 2001 From: Christoph Herzog Date: Tue, 13 Jun 2023 15:05:08 +0200 Subject: [PATCH] Deploy: Add logging and remote session pages Part of #6 --- pages/deploy/_meta.json | 2 + pages/deploy/observability/logging.mdx | 77 +++++++++++++++ pages/deploy/observability/logging_webui.png | Bin 0 -> 43394 bytes pages/deploy/usage/_meta.json | 3 + pages/deploy/usage/remoe_sessions.mdx | 98 +++++++++++++++++++ 5 files changed, 180 insertions(+) create mode 100644 pages/deploy/observability/logging.mdx create mode 100644 pages/deploy/observability/logging_webui.png create mode 100644 pages/deploy/usage/_meta.json create mode 100644 pages/deploy/usage/remoe_sessions.mdx diff --git a/pages/deploy/_meta.json b/pages/deploy/_meta.json index 4ef64f0..2f6944f 100644 --- a/pages/deploy/_meta.json +++ b/pages/deploy/_meta.json @@ -2,6 +2,8 @@ "index": "Introduction", "quickstart": "Quick Start", "get-started": "Get Started", + "usage": "Usage", "configuration": "Configuration", + "observability": "Observability", "cli": "CLI" } diff --git a/pages/deploy/observability/logging.mdx b/pages/deploy/observability/logging.mdx new file mode 100644 index 0000000..6810c13 --- /dev/null +++ b/pages/deploy/observability/logging.mdx @@ -0,0 +1,77 @@ +# Logging on Wasmer Edge + +Identifying issues in deployed applications often requires log output. + +To make the experience as frictionless as possible, Wasmer Edge automatically +collects logs from your Webassembly instances and makes them available to you +through the web interface and the CLI. + +## Producing Logs + +To produce logs, all you need to do is to emit log output from your application +to standard output streams. + +This means you can use any logging library of your choice in the language you use. +In Rust [tracing](https://github.com/tokio-rs/tracing) is a popular option. + +## Configuring Log Capture + +For [proxy - TODO insert proxy deployment link](./) apps, both `stdout` and +`stderr` are captured by default. + +For [WCGI - TODO insert WCGI deployment link](./) apps, only `stderr` is captured, +because `stdout` is used for transferring the HTTP response. + +You will be able to further customize log capturing in the future through the +app config, to turn off logs or limit them to a specific stream. + +This configuration is not available just yet though, so be mindful of which log +ouput you produce to avoid leaking information. + +## Accessing Logs + +There are two methods for accessing your logs. + +### CLI + +The `wasmer app logs` command can retrieve log output. + +Some example commands, which assume that your application is called `webserver`: + +* Retrieve logs for the last ten minutes: + +```bash +wasmer app logs webserver +``` + +* Retrieve logs for a specific time range: + +Note the `--max XXX` entry to limit the amount of retrieved log lines. + +```bash +wasmer app logs --max 1000 --from 2023-06-10 --until 2023-06-10T10:00:00 +``` + +* Retrieve logs in JSON format for further processing: + +```bash +wasmer app logs -f json +``` + +### Web Interface + +You can access logs through the Wasmer dashboard as well. + +Just open the apps dashboard on [wasmer.io/apps](https://wasmer.io/apps) and +select your app. + +![app logs in the Wasmer Dashboard](./logging_webui.png) + +## Log Retention and Limits + +During the early testing period log retention and log volume limits are subject +to change. + +Different billing tiers will be introduced in the future to allow upgrading to +longer retention periods and higher log volume limits. + diff --git a/pages/deploy/observability/logging_webui.png b/pages/deploy/observability/logging_webui.png new file mode 100644 index 0000000000000000000000000000000000000000..4830302b0230cc99ed1007369a8d5207eddc72ca GIT binary patch literal 43394 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 |9Jr54g6sGd_^QvwzzV`st{Rh*U!Iu0;v z>P0g`qBeab)AEIdh2*UIU3umH3Rq0_7>kv8BXhaXSFGSF66-3WH9)d^kDl=zXr-sS zKNE}X3i5`DN=ka^4_Dg$oUYY6z1t9m_ZOZ+uI%D;l+QM7ek7 zd6a7g$o|nSR^a;9K6@H7I0~NrU|?)&Zm8s1?EFca6J0o59={b60~GFhGNti5O+E2d z>YS6EFY zfstP&%^`}|7J_ib)$V_1$nqc?M*tubH)cdojZB^yaLM$<)lkH6ocd&=Z$V*UPDzOk zcSCuG5%idOs_bBwZzwy%B2S%I4OT|TQ8ubYTbXvo%L ziOj{!$F?ya#8MGz6%P;kNCn$PSWA#??(KUO4B}Rjc8&Zb;UCg6Q|ajL_S$-c=2TY+ zVR_3h2?%985hSV^jUwqs*Q)AML57j-%o~B5>QHm2z6NUkq0`9sNRyOs$F#KWh0`E& zz;C1GgJ$X=^aa|bqOshO2`HRaW0RAG^Ta#_Pjk@cfJhXsutcK<4zH~F;NW6EfXbRo|9|V>|68zG6bR{*@uayW=2OlOj2eU<}f{}6{a6sM@#|m z3$SjBJ3o+>_ckZ;s$Hyn!*M?Mnqs8M5A(g{aNIMD~OPZX^|w-(42Ijd?ER=AMX z4kUd@+ekmflt)WBf5ZuI?`o3IkA}^QCMnxMtQ-S8J-lrj%bE&+I(q`B{loM|Oxwpc zOQpeK#J(OF%$RY6_C;#*7v+Ogcv4ifHmDlEa5?%r`UeJD+1ZKE-u_;(`<1E5-U#XB z66Dg1$OM4B?Y=b&=50U8EgxNrZ;8LhJ1_5qAXASVhE+j0U2q{c5yuT#V+Gud+eLQJ z#nxok>1yW$kRt-cn`X@~AB*NOR2PjcW29Kq;2%rI{xyp`zSp#7GQwDLmXaUtpY3?` za1X-tiZUS8s1lq}i8UFE<+R^6n6X_<`tVp4FFYrzju!?fZs}=s+ehEl_t(3+CYw$N zo7AG!j!zq3az+2D)fOyjBDbKGpPGthwyqdWslK`Y88$I8H8D2%C$9GJ19OQ`ZNArm zHvn2#+4{M7S~Kg>6sZi|{B|&x70}2h=_``by%H)F;G~(*sAfmY&x~@cBa|M57O-DIQ93+WlA?AbYaJB%f2m#Q>{923iML>Cuf$BO1}dar0(2N24v?s ze`2{Ej!Ns(nW;G3M6ICPBQ=Wo=+sh>qiw$8zNRSi(V3;~G*8OWajox)_Jd5}mKPDU zcqdF$RMLbNsprQY6;txn8#-NTZ=Q||h-D~Ki^;VrS$qn&{=T67L&%J{)Tj_hb%XZ% zX#kX*u)QZsdT^>=kB%$CI=8ZJz9=e%hDICMcCXu>d-OP?%}i9gdwGULKy>M=8#G_b zo!L^*8fvQM4FUMmkjmG8UcCO|1*ndPlZRyh$Gs>L2D&~bFdLR>S43Fkd2amf{BAysR85<_cUJQp^R$sg)sGqD8pA8r0IXjG zMA7jFGbhv~Mp#J5(;ND7;=tBhpCbw0uy-`xX2JvAKV4BsMg~(yhts3nNhXU`2PY>c z0n`o7Ra8_kxO_0|Ko4wl?DWS=1MrgWlGK%PJ6IO!&;6hGp16}sG{7v&DE^+nC3&>x z%d9N~|5(&e(B$vuw+{$GP6?E2!4BvQC<1|}Bnn9yS_L#a-Uj20=LTZmb=QxAYC6O% zpWmYaxCqGXV7ZYA>?#SlQkK-q6aX{enbr30c;dX3PImCN4Iky&>PooWHyG>=3%ZKv z=-cj47hoOpR*Ac}R@ZSHR4Odh?aw!&lQ@%-liQ7aO)v;=!~txWgW?01N?G?@^3Kk% z=R|;o-b*f?Hr#@u9HUhJhTYnpP^HnLiptVbavqLV$$C+MmlCg>dh3dBpruCK$Yk;1 zDKm?MlWuJtd}~Xa2e$y}iJ{92IfC`F-TA26{uiEXboSL@T|yE7k+2XHkk7% zWgDDuZQBuabHPo(nM3!Hd0xTixf2R-y0GzgntksB5`=iHm7!jt!IZ)DhqT%gp#D|P zbuyGn0hF*tSuNp#_tNQrtV2pzfFH<~Nt;d}AyIK^tEuzP&2qT;Y{E(*_SOjXVtgTJW7{c~Y=w+$m^bpz>|C3y`Wy`a#GLFr&&A+f#`=7o>QMU%)OUrjit8IW+!jWKo8kTlSc?6fgRp8Fj z9tNP7*uv93YtZsMvyequ9aLrNWLs}jEl>(@EOG=u?D&_hd{xSMwe|H+9t%Ad7U;)fsG?8{SHa=|Qsxrm zl?--4F0-AZ`d5EzLgDsL&LXU_kG;T@Z5Hf@X!DB<3e%(GiKesQru3|}wKWIQkhiS{ z<(ejDMya&f%4MI@jnZ<W&F z!tG8vgJ3YQS&5XW-8dg1dX9Ln;>DLt1{F&7OkwV*Wk~%yD6Lfn#j;7lhfy{`A&%wV zIwK6FlBL|xKyHSZ0HAjPV0r>z5N*6Ha#gG~d5+W`pPI~~O*i>q zZW(>;&G}nSvd+j1#dfe720MOo5PbGb#Teq~A2qt{?!=bZ!QI8J9;@N(3{zIAVR*%oRp_} z=HQlH?>)0@QAzNWLAAi$I$aN^bWS1&vdzuF!CtGj7Tze;%~V6P8uHCDxJi%WiH=TE zTgYlpESN)VQ9z%P`nGaV(@Vnuf6T->_opJ_|g+$xy`4 z3IOc6;PWC<3C4pGI%qO=^5_5^PfF?c$QGo1T1dbH>bTwA{VE`6CXyQp&;79ni~@5n zeHEqf7g5B{Zb@Ft&8fgrFX|{am;LN*p!7);)c?ePz3Jm7K>0iV-4C5t0aDV@fflfB zf6L?H&^BrKh>~HSt77aVV9crSRb6!JSvjJw5v_OK(hLbqt zd}!?ZA>7r4r;D2?*KL2YaBx}uT1zuxKY2K5cR<#Gy8%E4tz_}ScOpXL7?`AjJjUE| z-u>i*f7Q5A@NB7_eR3-Rz;6JKN}AEVhQ@+Ob5^CuwvVQg40)D@gF`2Hsiv}mGR*Q$ zY^=I!v^tQwFYUBhmVb6|5T$o|SgEyP;AJC} z*g?w!REWi5S#G>R;qC%$C#IZeYri&%*ccBF0aY~9!H@ll_&?s<|4}Oy5Wq(rH&yHI z?_&GH*;z6LO>R}250tO)na+|8rVN>Qvup)2La+`1ApHL39H^}sWSCD(O+3=wsmMJ% zYs{H_Jv;vvSew$T6k6sFqT}<+0SIS4a6sa~&0xFcnifcnrq*9D+q}3ak$MScZ0s%N ziXj;lY~G;3(JkzI=OGQfkc2Ck6bg{ijo(+g3|r=@JWa>2@J`mA2uGM^%Dc0m7xw*J zl=RH$;h+f05dPd4`Xtp({m+kOyJfaGBKGMBBreFad!`iI*Y zP*q)L4QFqelqx>i8;Ra?aVp*bs<})*ZiYOArO^RLq)9A9TUUrW3ISO4t{2n`dUzJc z{w9ZA`Pnl8N|G9r($_hSK-DvhMls+p_aNfU%$_g6Cjlw>S=+}e3Ql52lZwmgm{3Kq zG{uKOJEKhw_Rfq9cg;=B01nDRg_u&Zgqem8L`TEiPQz6nq5@!Xa-hgJy+HNaX_VO1 ze@L7xn!g$&mHmQUvuQagBXjQ)K5K^1^n|j^Vno)9 zOYd6O;B#%x3BrG7Txgrw`x)YRk zMw}9K+FG8U{1Ah9mNRqat&}k7qOSu<99_n*;5im<0fh$!1xk6-QJ~BvddCB4a^Ofg z6rS*d^sv`l6bL<%(2HDX;oFjAn{|^sT9iO&eX%or#?~}V6C)2g@?Qbpr#)mkM>SDh z<0rd4G{D*Z0pS0SeuTkL^NjS2UCTSR!=UF0pq1Kn(!(pwuP}=+aGh=R(N!rh?grs$ zswzU4%Mig$^d{e4s!4>B2tZUG)+Yr2_U38MyTkNpKlCD-ny?=DLF#)UH8R3{99R6i z2D5UwJa-Di;6g?syMVk6Ps+?55l_nZv1amSF}sA;+s~rgKOuzWMF`bwa$9vnsEGE5 ztl_#I;ol%4qyej zFtajoTB75tQd*QupNm?;S3;8&N9Lm9Mi-!j@) z!UYUA;jwc2ES=q}&k0rsMdZ4?3~G`l+pUvazdo>V4}*Xl1t3j?Z=W4@Sap}gkkVZE z0*d(vHZU}BI2wGC9?(b|^PKVA15k@OFMe!a%k1WvD;WI#C08!HvW|)sPkPaN&SV>Y z8BK88qQ|vozm@g+H~AjfC5?ZYTu@~piiw@i#;0v!8-99=ypE_T+ z=*tF1p2R`kM&WM$wE*S-P%FLb?xn5nAOrGDW;0YOtZDuDC~p&(VB$7WLrfgbKy1w%J%>3`b%BST6CWoU-&xRz2eg{bxzn&RDNP6xP2Y?tolbNQb>P=p&V_{9l zQJSJ4C20pSnV)Xx70t5Sqw-eLVxPk~VSr_fhkM==A&I_(ia}-29S1z*4^Vy~kVKqRm4t3v^1?rr~XHtWLEWK7XZO`~jj<+aU zl5HME(%<-d{IOU+T zLht?0Ad7{|JHOt7)Jz)8Wzf#=&J2Y0BCinyNyI&8^6qolD)c6~x6p6q7Iyj68Dejs zt)KnbwO4ivgFjMC7bLKc8DGa62R1WYp3EZfdH&ZnBQg0q!6|LRW))cc@@@jNs+PRg zD{Rb`a%<;Z=)aC8{rW2l1HSs!??v|O3c-}qw*!5NV(0qL)c;)ck)-EgEu~tYk;~Ze z*C{YJx%JO?^^7DbcYuXIy;#E@Kpi+H9ruce8zc4Z;D{I}A^!MZ0 z$GsAlh|5|cLyR~=f$7}Z|8fA=Th_HLS8!)@`#)M-H^zO>CB-g{%8gIL-9>f&@_^G< zsiTJp)KC)X0MA}Vrc28frOjd&(W93ky9PvWs3TZr*v{TgW5aS`?B!C?gX+*R_LG+% z$Jjd8^O@IONWbXQFBkQKfnC!mk0jW}X3?eCMguV}`Bf!UzWGq)1hZ@gg< zovS`rJN|&Gzdo~ZN50ve5aX>ns72`>U{VLIJ}#!&vy6D2mtscr`?CZaF}SYLrxz0c znc~-5s}T?@o8XaaYd5QnH;-B!h99NiyOOD5I;=?H(&ssw#iM(c_AcJUq$h+j-<=GT zSB8QfF{{1$TR@w%-p>c-s$143Znr8BWk3VF9xsW;I%9hMsCEOp<-f& z&aO}zBHKc1Nt{=ML8Sbn6p<)-M?a$?J?Cum=;!iURoqeLf1Bdhpm!jpfW`?{X&IN| zfX7>I3TL}n8@@|GNkL>EfDfdA1s~Q(CiXT#c;U{i#|gWLA~UdfF5m1Hrjv@v|n?0?tNuh zK6W+=Wk^&JKR4^0gxnjwqbc%#Kazx9i!wV=!VmhWykcHqxnR<#9i+5<6aYwc>}pWc z`~jx_vpDu;vNFP6boa)zUGDwxgqa}h zZWe0-Jo)aIY*dSE#gl>Zx3ZT<{zNUj6Yp?NXZaqMK*Zj#1o`)t#`&)OvP6jshr$ht z<#xf#!&n4siJ9@cAMrx18}{5EUYA^Q0cy(iQJ14631#~p1ARWw6Wbr=-+0;cUjq^O zuYuI1N7i8emI496*XA$4bdO$_-kZ*hJk&*i=!_<%-8A`ON3K z|LT>giJ9H(oo#?BRNgi}wHQaIof5fxg`Ox9t8k zE~|g8OWfQtzUcdP%cjo9UkW!jZauL`APic zLeE%?sVUc2Dj(m>XO`My{Mpsl=1sy!|6XNlJJ1=S4tciU<<>T1;q&Ib!GEtkNhtPH z>pyc_``@%thxO7b#@K!xMSm6e&$-nxwt>I)EAPuSa^qWj$eOQw`TGiA{)Bm`xI()oM+vH^?3X4U`aCQxA>FIaME6*D1hco&X27m1N(f%byAPtC0&N=6^K$uoZf#O#dbF6Dp;_+DnO>`G~WuuziR;9QtLt*IOt)wVr@k z)z~jrkGCH1l@zM-0jvM5p6zs(@!EdGb}`MXmJTiv2aZH=q5Fujd|ZQ7&KLxP3>ir4y|q%ZO$uhw18HrT{OPKhiVFq-(*wA1 zb_L4_;m3Q#UYVx&?vn1v?aKNCk3wyp6b2MIq0D zcj8JnhlQ+Se z9)-XI+`o{cwuthM^8T%kh{DCZ;eb-j51PKl zEe?df&>eQj(d3|ts&$dGihs#x+o7WmKA3x`R^YSN5W_&j-|2of28=8u?Ei-F8?@-9bHb8={ zoIe_H6*>&}5u*`=3h!(>;I&fH)theCYiRW7^{`{JAbcKx9gPgLn!1cWR?P!WFrBWQ zb}dYHt(hQorM&09&wgz2zoVqznFQprst=91-aBEa313)QIXZiF^F6i-t+|~92cstKT{;3WE*fNmFXxqIsr7!v^^-3MpzZ43Qu796eN`^*m<2V4aHh4*%e8$xKD-E=)rUI?r(io9cGh`ubU5s~-TuRx z;DcuWi>+mVI6pirB(F917sS7ul>zXTLs=dKe=TE=EX7rDg~>MiNB{_1R>sfYGw`{W zXSuSY!3*$T?JAK^`Fv*Q#w(XKMj2tS;qtKgkEHED`QFjBk)9;%v2iLumu8L+CnX{E z^nxCrHR5;Pt1P0;O@I>|0^B>9<`)%(tPKp#(riu`;oDY0K~m}6B*etmuDrHu$Za?P z*3hwtuDW#kyrt=4wcWLib37@Y!5P54^YV_2<2{iczyWU!snagLT^3ZRj#tMrcfyFE zvxmp__9FV$ty`flcK7!3vQg4G?=XQ{VlAeJ-Z{GvPr#8$+T{*}c6& z;1p#3k|!5+l69d0dr4`jB>i1uGoy}WqFi>Pd@vXF@-j8R21T%}7-={>6A?5OAs$3< zqr3@~-h&LatgA72?>fpwV_tySISk8pOmh~`W#_0Ut}#jATB&tOO}4_kVehP1^FY>1 z#pSZYD^4BYFg;l43nypW?IT&FE`m#Cu*$Oh{diY#nRCq~Pj+t|0}}>Of(y;T9gmhM z5^B9;1^CTM6~)1DBV#hcYRux6Ujt(tYTo6g(_tIN6;J`&%5h!O?Y_RJFsT)fNBQ=v zX7=)?+3*r_*wZZcL zgRC!)hkF11zn|NBZ;O)RW-Chxp{!-ABzv;&6xsKE9X@S@5XFR;i_nZ^vdm~~QwcF4 z#+VpPmLYqVu^Ydmd++D-`96O4-oLmr-plKCUgtc|^Z7gwW3L-LKi&)Rb)b}golj$? zB;U2VbSllY4|i5OR|h1+0{iV}f=}cb@f6FvSTA7$*pu1Q_S($}NQFUpN zTc86%nmzXQaSAI)uh5eQ7e0ERx|BP5LZQ8)8qJ@JnVg|jsj^l_=I7_N^B0zB-YC_m z!SO}jSCM;FvqLZ4KgFt(RvNp|@xnDdz2tM9;tFwfx^=9n!1YDBxQ0NEk@L-LVhFyb zP&!?E@BM#iv74B*Ir%|j5UENG+vu^Wq76{Up-Zbn+4ZHj6e*u9@5U9dM zm)+_P)H8kVqwpM~6BvZ6!c}!ssIkNHlI4^El&hvOx74KhH@QSI>nIrIp#l=W+QiGMnp?wh4_6;TwlL zWtE?`BqlsLFD~v`?2UF)Ke9Wi`B;L6m6g?HKmo0+YU}6DabxRn1!tVjoGk#+c#&IU z&~74~{-PA?U5vc$3k;>8Fw-LsUBvqads%&%lFjx8SC4qm2ETrNnU#^5@p7=Q)wmTi zqHym|)l}^uW&nsBWM#VNW|aTRJT`e4L@8Rd_+AE`b^~kUP+Ma*bJjh~NVYi1c6z#tGi&5+f>E3B>$+7d|4-9yuBMiR)b0rG@j z%|)y9?fGWn6V;aiJizfl7B3xI`gkn%T8*4LtN%oQYbZF%@`X*Yo2AT&P$n}TXsn4N)^&b1C9gq6TG*c5 z-=GQko_&sj>?OqZ?DvwXs=@*%(=@6m0~8XrSo!pwWy5!pPa$Yi(@ftPp_T=vI{ykg zZD(z3OF%5P!$oV%CWuR7ODi(O)09GKRAfT;VS*DM4yGHV0iBy6sSX$H(Q{NA!qB5}UldJcZS~<3b2NQ6DTV zEO>eU5JQSh6f_l#EhQAmn<1%u{rt*)9t!M-=4NolCT-)t7m2y&+oMkuHx73ii~gbW z(OSan{50$X;GRoz#NizY%Gn_TmZE9#kL+bm=*i2Tc@_&QVLZO99&c+>lp?x`Rkiz#K@^l9p|oz8;$wX#a)3s&EqRsH9pnef10J``zY|lM!O@pcT#wF z*E?%{NO{)k#`Xo-3w5|uw6U=oq<3jT=PFWdY^~F|GP!vF0M*uZVboeo8ot1?uEO<2 zs-G~j%~{$)D@D7ptE(%H1RUQ383pMD!rJx{nRZqdnd#Xexq=4EK=Jjb6@*M6oM>EPKylDD1+0M(BSXW&RB&GnpDqbu0{F0K-ldYKMsdJ;h zA2*Q=P&@Jve1NiitPvpnaxz~#*616#*lhs&ZETcO854uQA_)|xU)Vv`MIgf z9&GS^X)Qr4!(WhBM0PM7)h|UZxG3;oa1}2ytyUMhC@ZWV;}hs!Yq>%UWhR>obWWkJ zfgteN9QxQl{XuoB(5|XdhQbn;)dPo$UXN1Xlt*7smQ}oQ} z#Cg)v9QE}(BIhUaSGJd^z3FQa62z_Rj$$=9!X>%Or6RDcK8^o=ADY4U{0R0mJY;gZ z%Udg~^~OS^#;j^_-M_?1emtiuQY~yOP}wg*IoImEIL9Jk*=Jt~DQ^%@{am^KcK+b| zGBux)ya8+iu(QclLD)wIMMB^ldQhgFZ#X6L#*7na*N(2t!GV3KC?EyhK^vB?Zn9YK z2aO7oPzng8?8mY9U$l)uYChlSY<6M{=|M`o-cX0IktX~5R~%@F*%!6eF8RS(UtB^w za=C>8e50|7P$VtY%PnGr6MLBVQg?sXQZP{K{DjyEK128EbMglrJUpiJl2i;i)TvDW z@%GTVL6knMYTZiP=c2AQ)SoqDm7D7NuKK2chUAeLt3FF>FRI|a_*@Z^A4VcoS2*|v z<^C!2v{cd<77@Bdk6Mi3rg{NIENd>DR4z_|T>%wC2j_t`dl8Nh1`fG5W-lM%p(hlm z`PQY~5@w`Fyd(oLjHLl+g4C+(feO`DWgGsP+t?&ep; zWn}&>qSTU&@iK$t=nu>hbMdq6^9LkRGc!}6qka?&(ENc7UXF7Lk;4otyWg)pG{4ZkE5vJ%bRE)A&-onv9TTsiOTvh zH#b03G!#v(XJ&kdw2Bn^d8oO z{QD~_Wk7i2A|r|zKmT{Q6L=jsYHnf6%b$5fxU8aRDspoT3@Sc<_HYuTef|2z zj9M-Z>KxlTzpW%<_}tL>Ti{!Nk}HW7R5je|CJFYJ~=pwwRV6_~KRn0~WR znJ=lpmAJh%M_e6_XH!|d!U1+k{!8CGQFrzwY1D~;0ci$27{fB_jSE}{d*r(thYjYE zg49EVl1}WtYC_q!azhfa%z&o^2k?jjBx3bB5+`Fr5Vl~|BqyDjX@!%RI5u)DDsm1B z$3tDkz|>myfyQI=AUnS+dOFs=%s4wUeY?7<8ctsXykaO8&l<(%G{jhYt$h4C`r$*a zqh;a<)V$FF2&JP~tUkD(oK2a(R{vvO17)+du)fe0=lVhd$-aMY*F=B_PXK|#hAQ7v zCD$X5VpZf_IrUVtDKmp?i`5`A8I6p#gc3uv`2G)@)5C4KSpY#Aivy;-lEISYrKlRfs@OFJ=DIxKi|;;?m;F zctLGL1&+s!08N;uEl*ec$;eN2H!F==pXZb|sz`H;&E?Ynn1a45!U2jG6AC4j2^1&y z^}g0Vq**DUZZ@%94od}CAlRF}y|93*shR^lq5%g2bPN7QN=Fy>ZQ>mners^yOxz(G zDnG%6U~Fq+k%_YUgc!)F0basjFR(!1VfX6Fu^$dx3EUBA)U%bF$^X^q`>|-BZYqJY zv$gCsrxzFL$jTOGW_0aR+k(`@D$@$~!$iT2s^+@0)W2$Uq{{X}6V3{}#m<+sm4yWO z3rZ`?hR=|=-{1N)c|A23fNZx zHlV*t7Va%?yCQXp)HNb`BaIQF#Oia${tVH*d_sV z^<5{i4Mx5@&>C^=LY*#^Rm5?oU2WfB=gEV6773fchQeA`UuOB_E(9>T^x6`fJ5Z4$ zC1xYBAu6ctA6S(2`X(tx5M;67&ceho6L1M>Jq2ziHA`!Znh^LOz@z# zye!nmB>cG3IM{qVYZ--9GosXIYqD*mFwvyd?bP?E(YQ2M0E)~7`nvl1`@6cyROSf3 zkWz9>>;xby5sslyW0i{oUIJ-!`%Be3a+eMBT;F6mQGG%C&oDU?G3Bhs0Mad3i@Gjtw_|XpXcQ-NnZjGL1B;& zG|IF!72F`wvD`Nts!y{Y!eYIjsBlevcX6L_8F=QNN=oIn8|328yk%V)%$hfAPUOG& ziXGm~&Ox-Yy^4fW5ML?R5*INyyX*Z?AU&?JZLbD7I6NqDJzsL(P2I+h_ByNiC=aQ8 z&($Acb<9Id$e3gA))Mm3C3TE>&K*vX$b87=aAW-Y+h3%fKwZ5P`_de3sQM_Ct%}KS z^RGFDXV}%RrsdE4(pTX4T^z9Ae`SWgRjyt{+Yma&-2-gMb7mZWILGRa~5go~7BYMoZq&bExGQ-8#B3ed~QqS+te0v9aS8LA&p`OIJu${pp@@YJY(% zs6|S}OG>exGU4^itvv=D176h5V=;EsA*CgGve{3l6yaSt?@Fn}XCn#+7UQeD2gQ)0 z_fJ8R4dot|$eaXwj+Ypn-|s(d8_lrHh}`y$GPkmlKU868KsD`w?PqD3DQr<46@1s# zmk@-39RY{TGTV|j z^4!#qtCztGj(P*6(wdyINPVwkKbPG%XAH&^6gu$i^cuvGtq^EQP8Aho|3}vhOo{|o zG?MsKYt51?3np;BF7qMNpL>tRBpu$^6{$yVzHzqHh5*N|lDs1Qsn;hDM-UGrdvZ3y}_b$H!>w!9Z=kHfpO# zBo6SykPro~gR?COb3{(zlr+anClgjT>-&-zevbbBMdpCD%?7D@c@iBhFqqPkQqBX7 zec3>|U6jlM6y>?@88@2;pmnE>u)cevJUks+^UF`|@AdF<^$lJ9^d*=Iuz6Q6dDf4x z`|9JSJYcNCN-E{OoskAumZwhnXxhO2Q*W&$=BI87;5xLF_>wxtkM9PW9T>*}6?mqY zP=(#V$=kWQxh{p(rHF(g26F_}az*O5n~5G?9&UYkB|?05I_`^*G^!;(B{6=Fz7I=N zRyNA$msy3IIE-rs)LMYbHhwVUO*`-?_p%C3iYTO$aw-nTNtQZTVmS~AQp5JU7Y|K% zGv37MxVjV*edec$td8vzO>kRD5+H>y1RkW}!THb8A8;PrLTJ>xC~$LnR+zN1ydn}O zzW>f#sg1Fa<~mVbR{6FTm-^eI`=B?^A2yT!+SlhdHr-M>+wLMR00}Dz zPB^j*yttCmVr6!%efRGL_^*HY@^4E6voy2wq>S_oh!~pr?1vI|EH%r8&~6YpCkpm< ztl%R4>LMxp;Au91S zMV!#@rIohlDzp(8hSm~|cu#VrE}4Vpz3r*JI}4=kbdP2vT%yYn#bmfNTQ2{g%j;VLf_|^<~X{Cshx@2vN+zQrAh>u)k`ue-L ze&1W=KXY5;g=UjO*$e7aiF#K?0a7O^$Ol#?*FoSy&%Eo*7a8*TG{yAduh<$ZZSkNG z{^0`D=~az<@5=)+WQuwCC#fge1jCIRS7vg6%=@+b+v1wrp3Rg~kM7?K5#URFIN-HH zzTU<9w`BHX>VmJj!H48G9pkk5w+^(#I~mob?itH%l~;f_(TNwo(~K(8F|bx-`B{50 zYPL6igeimCpl(aKWafO0OXY$C&sFLnJ+iDGwys?QDK^mkLiY@w`@yGj9;4Cg0(^&K z;v2!U3Ga#20g3wX{M$f)n64?XySWsvtRY&d2svvnvr}A}6yXQ&HQcKQyn@xLhs@^c z^F>;bNNif1qaGFf&OSs0Iym^d`K?1L6cfEyq86M znG15sy{%zNd(V6cZq-h-k_sCfRkIKjVSCG6)X+> zD@0W??o@Z2Y4D9lszce%jZ=%u%$32~u%hL>9PX(iZvM?RLBJ*JLza^V#qge)1(()u zdn~vd!{C9zP&K;wX1JQ(DP5WLu^eW7Z|kpBG@BE`i=ITb&@Ae z?6F9@3&PgUa^QY>&`O_+DK3UJ`-+oF8>bRI57-<4D;M_3e;~ljEh{T7@;f3MW$w|x8cJPAkp8~46i3u1c*4gTd^U+4a z|KePP%pN}gu7nguzDW{wK=o_zSbvL;f^oQuS5V~W`v%C`B_*-#H#=r>S>@*92uS|n zfQcmPA9;9J^pDsZAmeCiK3f{GbNGjQM|fOJf8y=sR9_pRXHwLBlkX3OZhCk3*Pg-4 z(#jhQhWn7_>zuOpQcp6e-Ue!<7p5P&7TooE&m!UQo1G8adzi_u8d@3kXH|Vp`_zhX ziZ79F7tVJ6yafGiB%HMM==_%P#ghdD(2Gs2XF-58*>a1!t-w?2{@N%zOfyR;u9fP4 zDR96XB2-p(d}E#p%I^8c5Fj?xR2}Q;?OiJ}D~02YL+7K7ggW&JBcGvIH4AbO*Y#PQ zSNzY4KdGSPPb95v)%y`Zr$n2%S-|cr`O-^Qeifl|^++p2JLi_j37uq3q2$Lc<^6qw zmS)JX(MRkM_k!luDMcnVpjC#}vj$(v-AhM)#9YfUS4ty|>5>gin1fjxdTkTtO3+l^ zb5#T>>hFKx*oYCqdazRb>JjTWL;5Ywcy(9`N+$;D-{&_1bUcfzl&jKC>6i=VQT(Zd z1rXND)2Y5j3h2sLqX0j}1PQ0a0&JmsMp3@v2jIBfA1g-`GP$iB*v>Zb-IRI7{kKK@ zy8|u`2!{xd+^3S=@;!A+3xudOYVb4k-I*Mys|AxkEscI|?P~qBWiZ~d5yTOnudlk^ zzs)oo3}3I-f2kC-@Od6uJH-;%ghZv6>DkP%I?#9@c{o^~Egw1G_hsmPi1_+K5$Eo! zFL+Svi{Vj+9yRbKfzef39AieB8ukQm+Ox>E{7J(#Yul7p@UgM6O4`VY{N{vLygLXc zB=eJ$qU~kxZ8=p{`j;<1itM1yk{{&a;fdI^{n(M?ol-y3N=MmuNRJ2AWLlnt-Fldx zuiAggD+hW;4uF6@SW$hM{qmBG%-8;m#Ab(FA=pNgR2U|td*{gO$tTTESQWC{CIRnnDEdwY9mX##fKrm`&J( z6#W&3l32QYTk1u}IM%Li4Q$W6y*w<&j7+pt4@2>-VyACMU0Bc#4ZC?{$78we?r{q= z7F*=~+JE<*P+!6=5hrO#>pMFsM-$X@%UqsY>a+J zbT5TQsI4{3PUqZx$0=<28Jnt30XrONIXQzeZS!TZPz5Q!Ra_X*w4^RY|A*Zx75t?U#hXOlYUM=4W zcb@w8i609NJPS(Eea5Sl7QL|V`%TS8r@!8>Ck9L{Q z01PSq31X8p6Y8zt`P2h(#S!zpj8q22k1)*)gI5W~neRO1KwBG}NKy04Q@J92_`0(C zWYSn}*{2`Lr{5pFq0w{~oIr&+4rg78GNj^Qi!ng%!(J0!13v7C)vrD!xl6vY1HL>q zRO$53XHgLgHT11nsAVSq9?Px|R>zZH}2^4=IQ2?MdxXEw_icW(@%*FI+2nnb5lfY(8r6z?mY8a@M zM72U2I~6(?o^f_-98i@tII`>gyWRtZV1f_EcpfxU%4FAYYcqeO9Jp9&HhI!)?daAP zmIHnLmM^S6-z|q)^!MGr#fWM;{qcVBwnpuy*+DgSB`T=h!E?Nk&MrOnXB z2OG?7ENc8FCi^DCE~fhI&Uq@P`$WG4>)jnz@oF*!@c@x!!wZV-lGpH^(5%hQf(3XQ zNlH-SN{tegk`Dk0pNoE1CAW(oHFZcT4$li`v~K98dZ%|!5iXYFg%8<6Aiwfvcgu#n*c-~xy z=kTNZp1dW1J6f77hSdQAGXrK?o^7^RDt@MCxd-~iCVGpZb#XfLA^r0qN)@TR+?fX- zU4s*b>)=Zzgh2LV-b-@U=gc^e?D36Z>(ziA($S5ZS8z>AVnzGf;Q?`j$*3+{@k{EOc;i>G?qAGVexr1?@1eRZr5FGG7kSi2> z|28er(`qM06K*k-;sRN=YT(#)aNkxsYQ(X&+9K#*;ja^~BW<*Z!KCS=CWq&Z@C4S5#%UsVUetE;O9ZxVKFSbY<{P6?q5wpDapx8gV+UJkpIMh ze{|GZyd=PBQ_L_A8roF0#1bd&9_a;yCh39hr(W7~YZqZL+0j1T^~+nxOAc@jZYHvj zQC@CdO50uO0CNF3$JWBO!ZRG|Q-o)poWU2ohmE{0>AB-2p5LJDxeB!=9OEH7?o7~& zm6KMMmsccKzOi;^^P8D$gFbCbxd#pJY7TV_URbM3P%<2CZEJ20pf6>u_YtN54Agb? zbvHIuNci|Qdr#eb+Du}T0Mu|a6zi|GR(q>!qUriY-}UL=)D8OilH4`U=XH#`d%A1& z2=7#97HN(one(*ejffO+^^xT0fCu6_UO-Oqn^7vHXEeusyw(FBtpti`av*&3jx zd3jZelgjoOupd{4*oZ5ds;-wJzOAh^G${fWURj8-&%^vj3`6uZGt`P^H5|KYme)C) z4A74U?I<8hjOIDrnhLvS@2Cx$B{8vz9=XvbPv_y|8{F`9@Av?$t#HI3EYxvMwVtF3XeYF78>D3Qf_XGJ8v9;>JtMtmFboRn;6X$Um^RI;{<3xyyRmsI8C z&ONrzH^zI=d|&qMzj~DeVqp4WpW=to%rqXeUX+F8e@3_QSHUm z6uF!1RaKLZn*f@fYX%Fsq5_GYK@lK>0eVG;TmyJCQm!{L3^^J{f?^tm_|qd+Wpv3G ziC8nO{9Mbl%n-e_lM`E6kY%8(HNjbi=aOa?pb*=kgG5m3Y~eYv?>?Qb8?X{k zV2CbhD|WPqzBA^x7E%9gf8weA5>>zz%AYja^`P#7+7{Y)vM|Krufi_dAAZLOLd>b9 z2oaRMR@eesO*j}axim|$J@2<2sHu)?G1;Z2-QaH#1?OE%o`cadGP?RXDIdI(f$ou? zc@kI!J@P&Ax!?WHNgx+S%+^i=B3RMep|UYuMckVC4qzwHSmHV9h?N1DYcTHoYRJg& zp$+hnnc2=dDX*@)qm$|9Yo4z+RYNjZc&1>?iBqmeE&nGprU)|>B;?9`-Xc8J{)>ZOzppN|x&e(x*2ZA;mXNg>a(Z%B zA#C##_)S1`h^UI6pA|A{89AF|+L{V}$oY@*?aS_F6o4}{|FoXahy=2zzJ3l!@8;i55-E;F{4rSl#YS_*+ z7n+*&fPbVZ<+{Pb8X{R!WZ)$q*R*2Lu!~)kzCyXYWcM*&f(@9-^ur%f@xD9&{I*YU z#DY7QCHnXK-{z|w=FNeXO20CPCO0Q#DfIQHlpe1om5;Km!X3P|p4AkJ81Jcrvi78&kMBReM6tkUc%707_#cwf?Ds~v zHb;x)wTQBi%DOrxgcF zVN8DaDAEz$*c(>ZR0t?2U{Q-}*Gx+K5@(oUP@iHXdV4A0_d)6DWIr6k=c)|QMp#&l z!@P^LS@VN%!A1XgNZiRX>dARKl$jhrKA}b{$t&p@%2_T3Ev16YpQhdRW#8vR;Cz6r zaK>M|oG0PNVP3un=|vO4%(S$z+dnd^GJu1pD__fO&wQY^3rxcvMZEuVsBs1|CKtDx zRId_ToiNXD`I9LFh=FG#IFWU=509 zwV^LiWLwfQ+^Lskl(-TfI%;8X{Gk)6i<#V+xR}c|mxJoFQ-p#7gKMF2;HFwIX$Tk{ zYOaV+xzpwD?KhI?Pga%!6I8gYtam657))Hs_mvH}b?|-$hS1x}9_d)3{Khw{3#a$s3LdQjqdzSBIw zBOoHuD<|j;bqbs?%EduV482Ud+O05uo$8uGf3F~*shSj-SfuQ_8U>l&?954pZYmkZ z=fvbUDtm*QCT!G?mm?Zdr1& z`i@na;Qn&)b2zQ&_g7AF{n$XzX+aHmUb0MFqv2`0*UwEFq&#Ts>W~ruoODZp! ziF3<{-l2;^y9z}oX8oF3U?Kke_ea;z#yzqFz8(h8`@MptIDUjEJ&L$$QiLl@$hie} z4A4lnNTb9-5@}Xq>V8&BXasHCHNNskwSfrO>h=WKV3oUHcxlSZ_M}16Z$tqktneRB z1MoWN8Sxwrt)KmHhlany1+1W3BIx53sQ^+rP~IJZWxBTOo~97ok)y?6eH&E%OkAKI z*@Fh>=85DQ81bL$XZ88?M;!cM$3y3Fx(66v9H4PgOI||=&(0qH$s8NgbNVCj4 zBKtq|9&lz&sBSexu_U*x%}|)YJ)$SHA4Nck!By>L0Ta>U1ZtGCZ%c6<-Urq{g1;&J zee~p5UN-y0S-x`(7xavF`tiK6H*z~4k55S)&{s2|tgQiFf|ZbvU@ahtVCwVa1`59r z=Iv^Nhzx4vUutGIxMM~rGcWzV@#f2Pk3Xl@F8v0)r<#0yt>4yS5)o_J01OeeN#CB@_S+ooy!HK$N|C>ksdtMVcuyOu znVA_-g@S`u1ZA-u4>SZOY(j=WFcjYC`x0tNZFKr33DwQ62TybNq#N-Jm$X zt0U~R>S^__7v_Hy(tbJ2Wx(O6K07%Pp%Ws=^*dbVMWANk@wTGRWo$TizaMAb5EzOM zP}7fE0hS$7F@OhfsD9bb#^^P7XQY zuDO*)hq5vJ*n2euVykZcZvRxiPw+)D|a1rXsFbf7`7UwffDVRH4c+Uen z6HZ`~-5O%ZM}+I3sD%2ci4Mh8@zO?Z23of zdhGv*gvLwL)@KF&kG3!3m{wF(O;a$p*EHons<;P3v3?E{MX2lVdoQfNY4Q!44y|_h z`=$J{uc_4E;lJv#<=CInAKJTZ`XEBND!E`STmQhRJ6cDCzSkWS)_yK&5(xjAnFV(M z7BrD{$^Yidgn`Ecj}yLTZlRWktv^qHPM;l=lN}(JVn*xoj@9kCa{tGfWG~56W#)cH z4}}Z`h^PbV!;S*;XO6Y(-}><_^zY~T?e^>Q!lpchX(mVA2mjI4{U|LesFxl6Uln1p zH!SaxxYf9gf9~LLv<;)FYeb{Q`nYe^e}DQUSOyO&t~SIccLKW*7m;|Wx=i>qXZvjY z1cY;j)5Ua|gAT;A|A?Y+MkctN9N@%kWost*mX)hM8}Ki1Eg-v+WgHnT`C;5Cet&;s zNUXP+npFXK$%t@-aSKfJDHZxQXVSjf;i0LS8;VE~`E7XQCN0q?KmEa*M3lCsaG}Ui^fcSM3L~kBzzrTQts3Ee}%_b{iPe}ekWC8Xc0V^y-v5B(R4zs z{l4a3Z_KJ*?$t;<6$>4k4dtY*vs$?#aVa0YcYQVL5BvEH{@k15LaeiS9Q=%1hlXC~ z^O#m__VpO|oT&WgY0j1Q84fp?wM+IP=F76;By@S^sf+#Bt_AjG1t z#s9tKzx@cMEqsSh@|tvYylnTs`6F} zrjkZQ3vxcibrh;+oD@viMFoy9p0WNOAC@W>7g6#Hw)J9(AAu*n z(WoUr0x7L)lm?yW4@1=eZ?F3RX}gyE^M2pe-@=Q%CTg993qG6xlYV3`Y&Bw8Tf=6^ z;6$h^F>a^6!Mqdx%NIjt>&P}Xyugl$D}HR4;0zJR$AQe#>YcXDT1qfU zgKBCDqk@=2Tl0?y`4OkFu9p5fOHlLxz5L`QxzTx-^38HS1<4E;sFfL_utwiTMTwq> z1BbM2+V(shJe6#f|7<=z{`IC@rj50EJz$R?SCN|;17muU1qIc>ndCB*gEls| z3^)w`Qmy~ccGHgijrik+d0Lj%&LDuffzTh_VDbXc9hqDKwFp#p{88&e`}nhyt_xsv zN@j3)yy4EwkITxJ@b@we11=WhD znjYW7LZ?T4qu$vy9F&(&8DTpEl15yruBWHx)~aMAm#fE*4Z9$bZwwyV1--@gws5=6 z_289RC36c4Jz;WnsThWR|EhC=GhnqnJv~vYdHUP}hst&T9zVN$GFfI&!GOccGOshu z2_|zjmwDD$_W+dradmWf7#y@Yc8}*JsqWYKfIGh5xuTcO8l&^~b0^)%tl#c!R=%+^ zl|g`J-L?7InQ$VD;f)+aLTXdQwny!rA^Ih0j8BED%0tJ1l0E2!?GV$F6n`Gsc~ITJ zn4@=YB{LfBnz1@8_zOMx4%fW-a9=9-_Hq&3)8mY6+c8hqE~RYkd`Q&*W{B;3e5hTQ2rzGFwW-OVZ+mX?Rq^D^HpP zvNhjuOF?K<(!tjDebF#2jAleq| zWRX^C_9SlTEB;h0CO1R|6l=Y`ydaskvNwctW}i&6J1Y6yPhkb4yr+@U^id=3xPHUW5VNg0y-&x!>u8fx_%}g-r?>F4jT$Qp<-leA;oy_r*e z^y(2^vaT>W*lQp?D?O=^z2FWI=*QB&&zCunpCx(GYsL0|*xU}zw!OnJhz#* zuswI;$lb2=?Kx*+eI&yP@DhD6SOXKr8f)MvEmrI_b53xkT|^h(IhoPCV;oGSBO<0l zY-}_Q>|V%Qq@`*(UYzhio3rn}Gx{|d#oF5WFvEWh{Oon?Y!1sm)X(NCDmtJnPX*tU zl{uB#@C{bH(|5m`CvgNEF11hl5%;99fjCE8MbcR0N+W-HuZIYSlJCOmn3La~ATZ^- zBK4)SH*&U4dLqEdDJ%(fbsu`&`D}bXL(&|Na30khmv0a%)Yc>&*!FkH};G${2<6M*_NPb(odt6gvyeo zM#?_sW3e#i$;veK-o5&so-vT@O$6LH@=(*E;d`vZz(AJKv!pR+PW!UABMOIxe9ZL6 zdso`8pKS122{QF^>`IS~dB(=C`_bOF!v3xDtc!nTKCYKxh_xXYNKDPlct)+TMTr%) zE)Q_TURT-ZJR2Kg@8y((t0MsaAJF!&+|%rQmoKiqkKvr0TbOcXKu#S2@zgg>H>?q3C@pK~19#DCMe#!n4&eq$38Ga1<# zTjV(~^JU~;%MsZRO(xgqM4%Cg)kww+G|jI84_7o`uNjr*hy>Md5{ zafg!*dI^&q&L#z~1lGMawS>(Wcuv3dEDR>qFbg*eE)*w$3G1Qc^=M5s`W0^}t`INk zVH@mc<&3D7gHsL637ByLUW|=fkx}{f91D-21!=c691oP^>he)91WiKMS_# z`vb~Zu^|Gu)NC$PMrM}ei5;A*q(ru!kIHQQ+F}5w;`uf{epIzDa|}n4A9ETz7Mq}* zpBsv6YWkF%r#4p?#R3QpG6uf3#U=^G(vl4Jb67+glq^Qfu4bN#-ba$SO5(!in*(@Nc{NV z%J|$jxYX((MiUstcW{{S^6`1hxzq)ZUlmPd-bI zjB|UP6dOYZf_etk2+g$-a^YvhRCxNcwDR2@lPXTatd}?)jmuqPu2_d`_xCtWvIaJQ zqcY|0OP28`Y%=1_wwqPAJizeZTmHJDn#$p+6g5-~{I&I3MMWni^%Ms3^P4^knv7na zJy-OQLLx-?JEP@IQdkP zL-BH-4AzOOX<=cKKXRkcjm ztf54i8$fBb?K#VLlQpptr4krcTvA8j|G{<`Is_6}eVD;gE)KJGC6M5Hz19Nt1`-n)W66%a7eO-e@}_f@+_MZbBM!({^hlNG z!v)LI^_=C|xxo@z0;$;7@3P~Fu3dOBSLCMoGq4(<$nl0*bT}X}|EkQm$(~U-EMd^>y?NZIdb)b?Ram z9$32;_<>S$E=!yH_=uV6wqBVr2TzW1S9o|PumsGa*28=wTjmyp;cD8B>X8F%K^+Q4Ujfet zW@tKtNcPCX>h&)h{PonqK{r}EBc7VZi3B+ZSdI+#b)NL}+8l!fnHdfZplAs9p7{l5 z_!CrLfS`3Hq`!0QdkZ-aNS&FnZM3S{n|iua3`HPKXr3_|imskOr_&?nW1vAk?nm%> z%Nk8DbEz~i7{%efjy9li>7kJFdZv2OZkCz9%*QV5K*Kk(a@9(?e3_QS$K9zEk^XbJ{F@4MH8yUTj#gJc9i!}c#OZ`V zxxfI*l&tI}8}xTDv*3>i7}`KZeC_JVH4`Q2kTRP67uRRj2#+So%6w*OQNa+&71&wu z?9a+qMMTmcv91;D5WjxJVrw0b_R7zoQU=%E@0{ykdJ| zrnVyKMjAdfz!@G$Zi?n?lRBzjJGydg|6Uc=Qr-dnmkDz6%5PQgWb_Pgri>_n3p9Ou zG+cGF#W`0bkx_Z zNIVoX5kl=%`MjxJLDIi3q zqR|@j%tHF4n%b^yGM&YkFUyNvZGvY9&C9q)xy>V&Lf1b!tFAA7M0X~vM!Q---gzg+Eh`xZb4n%%rwCW70KFKPLxwmGc)aBnXlxRn)Oh7P+4zA6yU06 z=9GgrKg}P@gWbJbk0*c+M9Bg{Rohryf~<~}w;1}J1EXuO<2lb^e(-=>*z z_r;Bf^LH`|94+8E^nb1`o$6?pK#@9h+khst5f7VCC#Acq&l;vT;0=ju459@-A5#j> zyYY55^>CoWGDKYt_w#wZjTQvv`2M{SD)e|Kk=TxjD|P3&4o1x79dIbTu`}z?I2ans zlOg*0<4|UB@l5&?1~3>IS@}l$Snd3BT&i{L=Jyd&`Ru!GB z(f*XQ#*Fl99qmWQ{8$CzIziYhPF zO@}7<5!ctV(?NurFO`;=NX{yhZNi|n7m_wpS}Gx;l`?5K00DdE#O~85(%IqP8e}|a zu_euhR_Eqh1RmaK{6eaBw8%F+_pHS-jXAvpYy>as8s;}vh+L-UoX18c=(r|Z*Wu`c z9{l!Z40eIA3B(r&)RC}l=D$X3EH1Gvso*}{35>okQ0o#csZ}Fn0iGY{ODNZzF7%1- z`!#9mty*9Xe)$BdW4u!dz%x*{VSaM4E}=-scm@!7j1OAjsZ{%xw$Wt^T3Tucr*1=~ zxY)Cnv{uGREYDyV%snJ44f!CP%{F4o9AH_uE=*2;-UMweT$Pd4MD;oZ;k|q9meW7R zv;2xMecjz$Ui*RkboI#n!1wFxmo3ujY)ekFmlk0cH@4Co<>hWfsGuAa87Zui7v>xs z>S#790A!lwuSDFS_UP-e4n#vs`%v|Qc1VlJOIyeSABe%MeK39{ z17&6X0xTpf>%v#wuUmeeVrFx3&rEwn&6el?orwTGY$Tkpb%*PQn^@r7>;oJ{7D=LX zcAC;}fdpm*VC?<5r?k4-1?-`3tHo|-X)3YTG~pkeA#ZMZ-qKIKofNPBA-6! zdWD}^#fEI61-{HFG$4PP_*fVSY5DP7P061L&`oosf3%`_<_g| zh8L|y&;vNo**N+fzp`)Tkm}^4gy3Y?j5TYO6FRTR>6)){PIp0l?`7HJBmiKPXT}&) zOx|IttjNskNtVh5sjqf6FUdP@T~(@?=+bJ7PBBGJrT#NZK~rLAW7oz)@86 z!iy-4s&(b1;fq#=m&w8wDUO8o;+euI|GR4wg0%LL2Oj+6E&LC&DpE$zHiw3NNcq0} z*2*&X{cWG{FN`3VbG5P@sBuyd*4$`=E0((AGHIZK^mg}Fyd3r_U)FNtAFoxsU`ph& z>Vmh|?wBX88I-;oKXFQNFDQP?*x0w8+gX5&dcRGOj?hv$|NF4qRiA7RC3te$ALNtjLmiQ%{7-STku;cQxl*^n zB0yTWvJ_0(p%dQW0-C%D2Z~NT@*7!m{Yn?J6;eDbv3AoX%xQY*>sR#1t_KJhK@~Fv z;}8HLghCE@!1hz~9+$=9fMS+%yb)h)EeBotrE-ZDLxS;OpZ54-Xx_rhGhDeMn#1x# zSaU@9TnK5FC!(E9WDcIVURGUbzLmZ-Q&qh>DzZbBfUF=6V_uNj-w#{GctC>KarW_j z*B6we$D*mN6mGoQZ@b*;644iG*|*Q-q>qew+Y^oD3w1`n#>8iruGeyqlH?6yQl(SH2HlC^Pr|9p#mRNu-sQsW3s_gw zMeO0kdax3#L_xvP*)@`ch=Itp3k{2@M8W)nNUwXDO=kjy@(~KMU^Dy@mKI&356P93 zGv}@C69tna@rp`HD!NaesEahxF<#|dUl*2#j3}$Hg9E?^0CSIb#hE0EaH#yTMN9w9 z&Zx|*_!uc5sZEO-&X@xi&7iGBi?{;5euGOhKhgMQ55^n##} zP-;W7j{4!l#}{%O&}MRvA=D#aZSQa&xw<%-Cq%d(9CJ_;qoygB6-TnvmW9&dcTlS~ z+@l6`J1bOQv`l>cFo+{!^iG9T_xV1iN&GOaRRZ({Z$5SGh~0t1P8C%0ZGL@=Vfa>G z;%sZHf=a5j{;K#2mqYlgM!%X~lkD9{Lbytjr_xJH2dF*T%0BGG1 zcAz`l^HN1a0}MNq%{h-77Of>?_WuHb8bMfNaAz-TS=Qw5qHZS4y3P#l6(<<$IXl|rJ#sCyY;vJ(>a<6R2!-sU4ozmcIB0aj4CAKhL#mNxNxAw)7PJA006CdqGN z=COY{5N3Q0_5Xf0%MSEJ&RubIbex3*4#zaq2I{tYPgxt?xIv!US(}h*JmLwkCmO!H zx#PI^=nD!R<1xIJRebfE9wI`8d<&|{$Gh(o78WAdqpVIV7@vihJwC0uX2BY#0(&v0W3`X2(kT<7l9_ho(hDGhC{?eIT%QH#=DxD&y4q7u0(PS+-5shU(As`FiQ%H6)z8x+@} zBg8VF@x}((7Z&YsS^%Q-Gnv-R0QXJTKv-n&;&QF#d8GXlh*cr2m-?+LAtX|ac#;W0 zUb%M5=2_%EWsBVm#yDVAALJeAfBPa;5|nysO@uM7{&&{a(4@_J{yAUI?cTA-SQDUS zdNBEo{570{Q&Q1`Dk-pXHU0Y-U#LYVUdfX|M=8QMdWWX317C0fsa#!SK@u;b!c{#n z4=`GXZ@pcxKiaB{t9vbjdRkCpWx=!J#t9==*S#TT$W5|5lRG%)zISUb;~;nem3i_F z@_7YsJ&{&OCqzq=Ce{D*a-Fzds7Ast@tC_d0^L721rTn3-?93J(D_=3iUT3v#XSj` zy0)nhas@cJh;id_^dUL+KyYJF<95|!W$!1ACvSIc(%z)GSa;37VE*&0Er*8@JtwMB zm4Ex(+-%Y@|Iy`Og}VV!>We4b{h%cVyw)8MLxH#i)Fk)Qr%tPi8x&J;@DT0l6h@;CzU6@}&HwPBN+2s&xTuu;U4 zhvfY+Ltx4kov%8?NuafNbpdl8&?DyCldi^>T~~%fTeJ5*UMEP)-(6uZ%J~ap{L2?- zA7Yz|&ksPC@QJdzh^&|zp_FVxNNRv!mT74S47{aff$0sD%Lsj9ubNV4S0^9muh}VX zN`)eOMyI!;XZsdM>hu5@oq2I_Wfi`2>@^eMR&zo{Y!7tvoViEI31c$yXQFCrBc;Nj zORla6nGjwSJJ>kc{4keBkdwP7KdECZl9M?nn5V=yW)Ap9i5$nQ`j>TCA<%`Z~2mU zx>P!cWViG*!^nu@@a90ShOKNIGEWxF648oz^SW=fa+xl=Ezphe?H*+~j}%84*1*hJ z9OAd&&nT!oz{3uQ$^6o(+Q{}$I!)CEYI^vJBAgINtKFj`^y7z>Rgb6&vv2N6`sIB2 zsrDptT5XiFP8HOy00~r4`}veJP)9yIt)!?dd`#8T(=$CS&3M{r4KW8H1wh|RbwU9` zLgSEzh!3O#&X!~mDzAAcjLa{*^m_?T06F979wD!+Y_r25QQYkmilxKh7OESXaXrI) z+pn8|do)L*-cdJ9QTeH=#%HScA^y?v5zsQQ*sY3nSA5bSmEEb*WQFl9E%}~iN}^~s z?Tk1Dfmb=o!0#VG3o{wLXyz`XstS(oV8w-qSQ^6L z5H5n`LQzplE*-#s$CKwfmTnBo*WU6c*c4;_NR*{n)~|+AXd1Zs>kSu}D6LbbYIa zjD4b`HCW`242O$NOVb2&4FDTDaLccv=ZxgDmuS$=e=c4RU}WQL2@5?Kw-O7HY3|S-K60iZHVyg8yWuHx7Fdkw92% zo&_-yR5;Ye8So7hMVut{9`#0IkcaqzV-rfIJr*ppxu)3Iws9HgXjyow#x@Lsmi*S` z=$d=v44XI*Lo%`FVV7Rn@Zbbvah>`Orl{}OdC`^^Skha?E};*<>fC@=`YDc za8S?rR)lA>2R`hA%q&%rQ-Nm&jB)su2g!IBp%5q@ERMIcrU1{I1am|cqYz=XbtR6r z37Mq?LU_zKMt8}I44Czcor`U6fKZTtUDd>vl0@$7Q~{`UwGus-W_rq07^6*D<7*AD zGRxXi^yaE^Y@7}bhtq4F!;Pie=O2{K^;_w2OV7uP^B9QQ`#rqB?>4xBk>Un?Q*tCV z*9wBx5h62Q?E?obn6{0_6FAy~O_DXBhV9e$;pWSFqodkO8ft52RnovKofhDOcRFyq z=+n-B6{MVzO;luP(CHJ z@NgURb^#hE0FiRkQ?bB%dGMK|bzrX~jQ@7y+iTCF3IPLsfHoi*jHem%2Y)>OLHbJ4 z+Hdfqw@{2FqRz(PWpQbZCvy{xkLhUf>%hih#)mND163kKEidqd>rNp}<#$+# zrDliIhKilZ5WxZ#6#PEgEz%=H(IkBvejty9{VL=lW8N-6`;Ya$s2iir`H>hPPEZPq zld#T?akO?PS|H<$TRR(}a%R%WVdc18bO~)}`(`xW5m+ue;#@kwKa70d-R5bR+L#%Yqau&?`s`rm)$Q}%;Z%(X3E1t%u#*XEo{2_ zZrv?GSc=vcmwfU-TZYQSU|YO~45A_rAPo54rLE0Q5H!ibZO_QL^VwSj*-iblm-Mn) zz<|S4Zq)nN3WcPeM$~$5L9&#eoWPNOOh6z<@D z|8^bw>$XQYU4OdC(!gq8x)BRrI1yfb{--d+?tfkm8y3yR759Ji?{?;louUmuNNN2O zfO>`MM)e9kkT+_KQ>euAO8-}@A)r$iD!2p1*gq&}Vm-vyuM7yfNRgTnQ5qMEXF=7Q zjQ*>Fp_d&!lW(Pq4(4Tj>(_;JW*~(1rwB;8OkA>j(;az6ily1GwN1|bvM$dbf}rpC z_X}@F3Hm%d%|d5?`8gEg?fSlcZ>v=Z>$8;&klPRLXKmOOQF;Q?LS28EvtErm&ZhrT zaK={F1!WeO3pa>biTw8S+Gr<41>KU@r;^q7e{Pp-2(jL)d`UPZ^Ur_(RCM{<{EIo$3XpM8R%78kN}p>iSQ`f0+z(WIB&!qLAvWfh zba{k_r-E*tJC6Q2-ag6VZGZA@#F{hb3Z8QNXOp0dyQPW{&hlu>~JC-}3&ldc{jI8vEO*apQganS!j=7xW( y-!K=M4{j>~O%px)i3L_y=gb;5Y61BTe&3q?yWZYJHCa36YZ>U8=;WWg5cnS;G{aE< literal 0 HcmV?d00001 diff --git a/pages/deploy/usage/_meta.json b/pages/deploy/usage/_meta.json new file mode 100644 index 0000000..c8ce005 --- /dev/null +++ b/pages/deploy/usage/_meta.json @@ -0,0 +1,3 @@ +{ + "remote_sessions": "Remote Sessions" +} diff --git a/pages/deploy/usage/remoe_sessions.mdx b/pages/deploy/usage/remoe_sessions.mdx new file mode 100644 index 0000000..dc31349 --- /dev/null +++ b/pages/deploy/usage/remoe_sessions.mdx @@ -0,0 +1,98 @@ +# Remote Sessions + +You can start interactive remote sessions on the Wasmer Edge. + +A session opens an interactive bash shell, which allows you to run any package +from the Wasmer registry. + +You can even forward ports from the session to your local machine, allowing you +access to servers running inside the session! + +Note that at the moment sessions do not persist after the connection is closed. +In the future persistent sessions will be introduced. +This means you will be able to close the connection and then re-connect to your +session later on, giving you a persistent remote environment. + +While this isn't available quite yet, sessions are already useful to explore the +ecosystem and to test out the behaviour of your own apps. + +## Usage + +To start a session: +* Install the `wasmer` CLI and log in to Wasmer + See the [Quickstart](../quickstart/http-server.mdx) for a guide. +* Make sure the `ssh` command is installed. + +Once that is done, you can simply run: + +```bash +wasmer ssh +```` + +This will drop you right into a interactive bash session. +You can now use standard Linux commands like `cd`, `ls`, `mkdir`, ... + +You also have access to the `wasmer run` command, so you can run arbitrary +packages from the Wasmer registry. + +For example: +```bash +wasmer run john-sharratt/catsay meow +``` + +To forward a port, run: + +```bash +wasmer ssh --map-port 9000 +``` + +This will forward your local port 9000 to port 9000 in the remote instance, +allowing you to access remotely running servers. + +### Example: Local Access to a Remote Server + +We can now combine all these features to run a static web server inside a remote +session, and access the server locally through a forwarded port. + +The below will first start a session with port 9000 mapped. +We then create a `public` directory and a stub `index.html` file, and start a +static web server on port 9000. + +```bash +wasmer ssh --map-port 9000 + +> mkdir public +> echo HELLO > public/index.html +> wasmer run wasmer/static-web-server -- -p 9000 +``` + +You will now be able to access the remote server! + +Run this on your local machine in a new terminal window: + +```bash +curl localhost:9000 + +> HELLO +```` + +## How It Works + +`wasmer ssh` simply connects to a server in the Wasmer Edge network through a +standard SSH connection. + +The server then runs a command (bash by default), and connects `stdin`, `stdout` +and `stderr` of the running workload with the SSH session, forwarding all input +and output. + +Port forwarding is also achieved through SSH. + +In fact, you could simply replace `wasmer ssh` with `ssh token@WASMER-SERVER-IP`. + +The only thing special about `wasmer ssh` is that it will automatically provision +a token for your user that will be recognized by the Edge servers. + +## Billing + +Remote sessions will count toward your resource usage on Wasmer, and will be +included in your invoice.