From 535da6517a8537dec0fd666259e28fc6bf95a937 Mon Sep 17 00:00:00 2001 From: Leandro Moreira Date: Sun, 2 Jun 2024 09:49:53 -0300 Subject: [PATCH] update readme to reflect current implementation --- .github/docker-compose-donut-setup.webp | Bin 33798 -> 42340 bytes DOCKER_DEVELOPMENT.md | 8 ++--- MAC_DEVELOPMENT.md | 20 +++++++++-- Makefile | 3 ++ README.md | 45 ++++++++++++++++++------ 5 files changed, 59 insertions(+), 17 deletions(-) diff --git a/.github/docker-compose-donut-setup.webp b/.github/docker-compose-donut-setup.webp index 8544c028eaad6dd523b3c96b0932f3b3fc27ff3c..4afac82ef3956c8c65ca8cc79db4ef1575bf8d37 100644 GIT binary patch literal 42340 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 z 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 literal 33798 zcmd?QWpEtLwk0Z-Wic}|Go!`KEK9POY%w!4Tg;3WGcz+YGc!X^`#a~(-23Lvn|Qxp zMRas2sRCakEg$VGGuJgvT&o}L94D{lyw;O#yGyH>ardz@x#tqzLs z2sZ&Xg4ynLAzhFkSC0|zf)~l-OL&hW$1!by7=Xve)1k^!r>w`-J0k<4;l~gF`gv+B zCK<3Pxa;Hnr1HV~TKsx-DcI>Fuz8{c=#N!BF+LME z`rLR+0n7yffOf#x#>=eDu}{4~y0_2!)~o)o&!(Wkdy{+Jlm2SejnBK_^vByL=cizz zPsHaKfH9wNs`K*G=dJ3Ja=7Y3aLHT$74eqwUE!*$Web!r1;7Kq|CoB>eYe5h9Qk~j z##~a!_vr<|e=0oc?}48QUb?eBGJaMyBi?17ZCwkteTsX50ucLQZ}jg3e|CZZ3IL9P ziO+~l%y)$k{R_al_qj*oYaKx0wQJO-2Ju*bUGM}D^|%KBTpm5i03_Oc&hC(pu>bqv>L%9MBm2?=Q#OQMqj)hxg#~ z=;?t;;+*!WFE-{o?r0>$MWxma3>`nbW>5p$5ArO1U!5dDtnL`o0|Y3YY zfn@zv>@Y=J z?DLSqUQhcDtF~$vHyhchUYyJ$eIIjnoiGik%2+rJ$dv(sd1)Yz$qBWt++Jp0qf%*o zAENdz)?_^vPQu{Y&q+_qAL$H-&zH_e5|-^Y-n&fF4*CrrSG@e0&@v|bVn(UgDm4Pi#IL9n?&OwT+ETxqt6a7X> zuFWd#KD$jE@GQ`@f-t-BR=t0m9G%AsY-f(RJg~ogZkt_T?{Hqg5YUe1M7i+?3p)YQPdb)2szg zFQGH`T!jyN!g76DWey0Q&wNIIRMz6jGIckO;8V)~qT>z~To zjEl^#+fx^e&46kD?R@8{!_5O_LY|#*vO)aw zH~wn16xnM^~sHdg%j}7@#1k8rf!GqRHa~e*>G}pyT2Y|^{?}D-Ng?6h&u4Q zFNd$J4>_qc-u0;D3X6W-Y-Vjh{%vJ{91e*U_M;bD9EI2xLB?`Ucx{F1t*$&gw?fa< za(ec@^iMpuxP79moXa!Svrmw7SuiEE+2z;I`w+y}X|((Ji)3k195nx}6Vw z^n7tgnGYt}!#IKyPstGlT`AbZy-QLV5x2Ulz(btAQKbbqdy)Btd=R5@#llI@;WBEE zT{+=nf+K5H`P!p?wi3^4Y)RMT5_auYLw%Tc6!MMZJPUtTnAjg87Zvy&4HXJ zQfR1~Ir{b^xUcDujtCLoVfEU>!lRZtqD)FFZDh_EM`Eh)6WRO(yh$Q=9!n_y~&2v@9ltHM|ZX$T#-Ync=mGR zQ}+GH@Q2vvWB?o!iiTjg_A?1P$)okyEv)j3nt5<*lJb6(GWjXNZPjw5_8g+RwckD< zV*N?UF*uaTXai)LH(E`|{{^d;no4_Y_-9#v(3J!Gfo6{(-C7EtVFw(=ujeY^$5_p| zCz{izwz_Xj5^d^BEQkAB*Qf{%_jDkBh8T|}!&a7@qgk*aqVAu{S5e^-&#ByX`k9ub zF(a=&A`yIs)j#xAHoO;Y?1dJ^_`1>^d22|Z{;ED9LGB*#cPK+Bk|xd84ero{yy^h(B6H%R>V z3Gu)pf|zlxwe`xYX;V&4;KV`|f*?qF@__)%dC!c9z;%257tJ!#{#!h44tk}fdFuOAltzg{A<5Bpcn?4M6#EjdUF#b9D5q5{u+$u zNF(%PJ-ndB!E+$zeW?84McoE5t=f1Lf${o~;*wDK>kOhoW6sWHJCG=Z7>`0qzJC8t zlM*R7kPc3w(yiq2&jOWo)$_=35-_vc@BRsV?slm_LsBA;3y;~XfZP%KuBdP*;4~ZsHmxfXWH~4%GT=Odd$Mls# z$McVM0R!vs*A7|SyAtK$Y3=RJ1JnC8_FGvW3!i#IrF?Wq6uC4z0~Xs8Yqp?E)sCLG zGPFmoP-K1G-%*Ilh-4ngK6mA0M}H$ScYI+AOyFF)CvZVKkWq3F6*NWx@TN!d)IFT= zta?TPQ=nzRYed2FMhE%w!AK5F)>5W(P`Q6gNZ)+G2*JVD`{{@RD|Dnrc7os5-}16S z16=l25k%2$MCZ=UG<_)qX8*}oRD!sjrE?EEz1~aLV0__CO%)k2=G6(`EoyZNuswtb;A?c$loY4QhrePyMH{*~CMI6WLhV&0dn!5ll{ z`X!y3V4Ag40JsF77a=L2_}zpy1^`js{$7CaR|_9c{(%4!IVYO#6XeBvF7fb$GWvG` z%|a?NJb!3;P9#rR{!cJ)!muu>6pS#=)89-86qk=Yi?n}H_aaI505lW*gqV>rK+^MR z<=H^B&R%^wmF~F#SD2mPPsQx`4=Cwweqn?BlnLV(uY2vvc!mMQiD-77Opq2p9 zp3MXLH=Lh=!X2<{FOnnym_ReP_rq`sV}`){N_p#jFzP^e6Xo}p^3W@9C0J7Z;IO-= z6|?J--zC4zU<3I7h|GM)RR%(1o#0+*7zoa-S0Y`&WJmwMgxCxJ=#&5`2f8`ClYmKQ z0-H?POy>@l)o40ZF}ea}9d7j#83c<-MIg7Z-()T)_V1!_+@w|7xLMTm)$+9)Yy5e+h07p4HEvNW5z(9(C6`eY<2|!4Jz>URb@2M%2dJ5-JjT=XTt?(>I18J zjd~oX&3Clx-E`f7g$BUATsKI&aaP?1EUf=Ep}HozrND{?j33eAj~lx$d{{wCuug_@ z=2fN+-G2vBz@Q+IC8hYK%cQ!avsKqThy~F53{<5t@GZvQ5kiLUCM)@-R zuM_!~yNRObguzRJd3Ew=US4y*RmVbCbfJ5!-bY z1IEtlk;;uf=fivJrnJ}ZZ2k#Z3O}pLUtVyIEX3l}zIIKQjqt##|)AX8ZK|?MePZ04R52DvO zBfDvZw-7dwwxRVwVjor5J>>(ba#JIWU<%|6Vtzv^nn?H~0w>V8o9_FQD-udz^!d6#wmz4Z(LUzRUBa=LJfpEGA#9w*sWX>p=D zN#-hr`d;&D0%v=-wuGS*pY6fvIp5CJ_0CK2?9-o*oK^UpF0gJU`Zx~-*_Y)mpS`{N z_H&nWR}BkDulApc0jU9b+_MJ2R z2Jw7|q}W5@HSt=wFPojJlpxG0A!QgFY7bSOeLDI*18jL*mvf<6p}kqD>}+n?)wfnc zeZ5fjJ?Ou_x9-uTC}%;H&t^x&@k>~;{AlKNvQ#rVqdO1o=X}Uw)?xy_`9MaBV~hdK zI?TfkFS%wRY`Mqi8R#|sr#5R(!Y!CxXi7XI!o*0`z{N?lXr7aKo&lzGT-bPmRk2*G z{uNq!W|FqiH=WJ9m+3rHa88?)YM|#pKWBs*TgNK4k-qN z+_F_$O)5!p*@2gqe>WRk&~g_ni2V`Gd2vOh0Qe$I{O9SStf0Y!w`bBm$}tAxX#>;s~Gj@b>4Z>33Z5l)%2adaD^z|NPgz}-`DmS5nZXa zx~Lxt{5>99EhqmfHVS_mOR;*OVL(4RAaeO%a5W+k;w;6EpRb4Wx)^hWA&}SXXE*aj z&3#LIw7#?#ADtz}KLK%}g+mkhm_`Je=yOi9 zfb0UXnSUm1XG2Zp{BSz;+iB)1O7e($Y01>~xvLO!uOR|@Y904~Y;3Io5NVMbAv3Gv zzz)v?8W(s2_FEJK;#&>LZTKdtkevN3F3=>^r~I`8wT6LsY)QjS5{&HlR$5 zfM5eH$L=Z-(1_4oec=BAW>4GUzetfN+Ay#{i8bW|@Bdry{`x+ei{rZr(Ymhtzg5D{ zVxmI_O;AvzrJdR&3PbtVeO=t#UxM%b?=J`(^Z#%;!SPO_Y_4VPKSMQX{v2OEB&YTuZr7Z#U?EU&>aqBILCn)9vxu?>JT5W)q!ZXMFv`V0|fMV(eA z_p5SdAW{7=r;yIBfEZDE&=1W(dm2Of+rR#+XKe_sp(&upclW^jcUyaoM&hN!riE^o z?(m-)*~vk9&)9mWe-CP1DjYc#I9Yqm+WnsoYMqZ4Po)-i!F6~xMXVL>?bUK|&Tpep zBvjmDm(ZwZ?#9Rs1)FCE(GDhpRqO|~tkT@w%NskzJuD9X_XQ7XZt{Qa$PtMDjr0Fy z&+k9&{QUp@<`j@mKq3)II#i93_g4f@3-q_<)+&kc3N`t3Y zMFt(Z`UV|(p^#PJbL&GQk9>fiKsb^jToDUI>`4G3_S6?FF1;w6U!-xY z#uo|C4Tqvn+<&s-z7L95qAdn=GOUUyLba-452S>XkV?my%Ghwp_P8*vMXPOBi(paJ z`qhbQp|08I&7odBrS3^c=&O4~~ONiD5_uMwu7UtE$aF z-$$RtQ1ZP)5UMHgw5O={o6z66T)=b66?_2ppl$FXyMo9(i}6F<o8wCg3R_hdnX3%{llmRWf^ zy@1k75oRBsJ_smRZ{822{=?YR{96;hzN#D;@l}ES;7>pV*WEOFs&Vdk=ue!qO+3gsW9=B@57FbYMm!*m{^l z$a5N?25%2@IYNj#mkbEykt#`VO0REe)IYKv#8gOM+_opXFtZ8G426poLwNTJabm4O z>^P-gvRY2izC87$b9Kvy;Ap3Hw_zYZj2{DW&EYi6jK4hB6{nVhQ(h0|hx5Fg3Q*O@ zgg^LY_KY6D`5?x{78YME4Np(5md275(iOBgrk|ptv}ydY~fymcvJb zLjq0x?1HanoGk(QJ~lp~C^+3#Fvg4T$c=;f-h6=(p&ms3k#bBIL!jG$5$LNQFr+_r z*&5l-H|KuFpEKh{3!7u`0bhS3S%KV0?*DCJL1CTr`8afjMR2)H4OZ0}dXd=HZOx|v z(R#(7!k)vm0s1UW_%w}3;}zSqg6#O6+%i#YP3y7g6eAA%Y;_nAbeGNT9@UO?+U&6g zZ_u|nS@`uWEX7mF*zmJ)cRd+7Uy8rd9cm78xNMxFAbfW16!Zn%I7nc(>Aa;r*%>Jo zt5Em@Zqg~iEAOP)>*4DAxKU6wl-mk&Z8x+mO;(&x)MTaoS+%SlOrARxnWZVw6B(?S znX_qQTk;Z43uCiT-hS>ixPb#~E=lx$7gDWF53de7X;_#J-;qnn7x67y(KftG5E;k7 z%R#_|vvdxMHN{Lu94nV7U36Q*q9ld8Z^R}CQQ2gZk10a9m7MV_x50YluNv;F>8#Z` z85-a8Ng3H%$lpJOAq~hv3+yu|M!d%_F8u3A%lXRF4F-su-;68Seb)(KCm#lEb6O7T ze+4H$QRov&8$>DY3%1J<*{l7SZr_=X2(nnkh`as%BMIy$xbk5k3s*Q5*mho!8iVuB zgVTmFqH(y7Y^Iw*#P=@y%o&5(xw$j1ZS-@cWd6wLvt6f@Bkgko)hH>JNAGj(X0CHB zN5boPKXLy9Qw8~4=AY7$ThT^NmDm-2*FWTRp`A~yMXK2d;`>=8nB7|h%pf-##nO>s zac|J*NxA3qeXBFI5GC>jTprV5`-slHjz>riDM}C%QZ8WLDQ&d@KkgA#lPZ#JTkWs8 zOOIC#`3~kn;MN=#wxYsu4eefIH?gE5qWOTk-CXHS2@Ff`%n^G~s zL8*U80G1TcK$&E37o?tgIQ-^Tu@YBvBIUur;i>apzX^vPmnwDI{rN(++YJJOGETdx zj)T;XU0U$*JqJ@0`&JA@$G%UA*Zvj&S~I z%&c|wJm8dvqx^}{Hmv>O?~xQo3>Lj}O|2AEKIhMKLE!zvf8gj0(cRE;bBFg>Wp^n2Sw{og$b!CRRZr^bi)A3RPGd3EVwF)f)jm zHba3I%o7XKX@V-sS|RAe*fh4{Cf2=@aCq&I&&OK37x>8$^EcL|#$4gudqe0BNhru% z<$>JI-n-VE3#p?Y?7h;_sK@SeI-yAeAwlWB7xdo@y^{Jx`BYHP^NP`H6J!`YTV5Dy zSdPQxw+XurUf5*MVRtjop+%H67Z(MXZ}LT&IA(3;qmeR3x+A4G(BEt)dnf7ByK3)l zqFAK@mZI@FA88+sEr=N*mekweHY3)JK39FD>3P%QqyYvv1z!=enmgQRwsx zgeYAMMFD!84k~7K>@;9l?5N23jDkB%d2U}T({?_tal&PL?;q2 z)Ur;B zG+X=HvIga#@s&W?Tc6tTbZmz^TLphgms6dUywd6~DdQ=eWy=5W2ekSdPon4ltfwHL zX)&iGTf9hA_vIgW??2M{-1?T{I7DV)%W8e)Iy77~Mp9>}m4ki{Z-V@)uN)()NB3tS zDhwT5yMFZr0YTjmgZ}04VldMx zR78A(HCS%ZoL}0OJV#-@INS1uYpD_fR*pYXScti6T|ZlzO7KC+EfFMzJQm};#+H%g zkr=27t_@|S)x!fB2n)ZY1PZd>qUjzF0w_BDuCXT}Z0czGQs=l{ zEA3)zFg(xj^uBBbOU56~=9))b&3Ifz>}^|*mp5NHXEeqI6Ks6_VQ3E5d01fHxPmg3 zPo*P26(O}SM&TTXO+8WXZOb29RV*+ z+T3~WalT-~%%NJrFkdJd)bmJf+6yRp3_VCSx$;Dlw#3e!2eXjD$ql=tiO0J>kpwmz zo>+O*7WD~{O1QWJa89^^wy&s7A3>2zruz}K7#LVT_|59u3hgu4u?ChYk{fm_wgb*Q~nU#Nc+e?6dy zZnb1p$~!|$^lKVRrRsP`A;y*`j=+b&k*g%b|0 z@0&6aL=!eO$>RdW`Uz7p^^6JaT!tMmC8s#&q+f-U!(-5@uO5u5rzT|F&{ZlzrQ)w- z_tVuVK-|{f(FOpqd#nR_Z-qRNJXWOFrNgkxRX_S|OFOlz3Yu~~Dd5-ck;QHUhu=qC z!u0Q~c%p}~nWv!TygX3Q_cXlCM5UTyKsa6GrQxHFe^@QXq%s?BZ{TN!zyvXwx6{!| z80_|W27xb`@@hKUd6B+H&2~F+wZq1m;k#bSjLXHK z{9T+)E zZw2=KlGp+CDh<3ibtnkyw#|~W(PLDbURa%K=HT^TRacWxCJqPEQP z$H4DpE}#PTy28eu$de>ZW=A!SWNXAsfJ;jR)-vfj&XM8~^8BSQ#;V>uNL;3s42dShr!uLe$V^j=2g0g*o zE%PgUWGY|jBPk7OzT#8*uqw7C%e#4>%%mrY9u!w7=qu<_20m=vj}Sl?d|w> z-=*Uln@y%Qh%N9{uvU zLCR5yaySkyTlF%tT(xCIQi|1)H2k`qmYQM?k1-C(wm`|s+a0!i>>&9^UDKirZ^--@ zuuDcdmraWoG^jd%o%>TaXid3F=~ts=blVdb=l9zFmJp>2fE?nLEpzf@Zbr!RoKEis zri}h*ok>tYK8SU7I)5z?uVw`W0){KfRJ<^&!9&i#;>Ai3h0|--Hf7Ec9s};Ugu4k1U!sZ8bkM2&*rn&|XH8;RzZO&aO|pT*i*2HjREU&>#?+m>&y?uOKu zxCSNfI;8sWw|!>#K?jcwb5(7GuK9KDMgzATBvh;Q7 zXCWCFbLkW2gx-KK_RY`l!((sfR3gHy7n@ovT_Gt|bkE4*_w7j}%ywv4`9jvF{y;n$ z55WMFMvp|Az0;>6Xoq4SjS_7}<EPWs_9NUv?P|`9XfWRiM>l*E^f4zv$lcRttAI%Ur1vC3q&ytRye~&hLi+QK$5W`$ zQu8&K8(XFpYHnQ-U$Z0Vk8Ir>ODP)j(K|u`<5ZT${5 za(`%-KOeV!l}csZT7ONy=q<^dLonmfcxN9PGHui4pMz58P4$I;!C-l~lRV(#iKD25m-n)H`oX-576&9eMs+yDbob<*Ldf zTH5K$?O}Q5W9no`9|}Hy-?$s*7l$L~_%4;S#?J5ul?KPd&RwbGja4AK{>GS!B7-w>TNAB3Ty`FLN1qXbTmq>WM;Q zoHW(8?F4FC1i9;X-^ml?m}uQGv$*PXzY+DmuEtwAIn^->eyn4zlrpDS8XHr(o`8s{ zvMee^SnLt=YY}5Ap+cS`$U6spOM|({G07G>u|8cl8-m>R%y5#Zzp~LU-kHOvgRW`zN%C5O<~+-Hno>US|56vT#%3{XiB0 z69@>R39YykGFwV;=*;Qm#te$)lK1Y>mD$l@W=%j@L)Q67plPgHMi}v?g-+#6}8U_C@l5i z?NYh8B+MiIqYG3Ybt;xEGbk+(_ZO^E-+Nl5cky}A;5asZE1PIX^eXM9<7|Z4OqKRckVj*5*sprOP%^q^ zEO7>DXW;r?hdyJ!2-4E@QgJBup3t}`y}CRNRFGMFRdspL(;mBJv^L2_z_3AXa2>^g z%M@L(EqIkB9R2pSgjV05j~j%N%$Th$)dq*E#uQ6?G$aR^2kw=aa(>;i2om_6imqxh zjj>&V)Z+N_Ku3(o|J+C%W{3Tx@!4ah^Sv&FqGEDgNmtO`RAJ^mMO3aSsyZJfd`+!4 zB`OVRj>?OS_eYX_`lL-vExl=dLj<@W;d^1p(dW8#w*IkBp%U{Z`i$knsC|e+m-a$uP*Ea_` ze8x?s$9%LOhm5U?Xe1-J#hUzMoH{Hee3d|T>3-L^5Ts{1b(*c;N^U`5BOCpCKEc>t zeK6P;5L7Z~HjSkM#q7iHl(_A0CtCVhkZD}Ed1`Sf&#y4;qK1!B}~}H_(V(zLfvk*`v&xu zY~TmFSpSsI@h@-`oEqjK5Q{eOD~$sCRl!f*v<*w7fnUN;#e~pcD8$d?zcbw$YqENV-;;^WF!gX|DFf%?AAIfYBrdD z+%J&w%7R9V(D>nPI1NmeO&&RAVEiZR18 zQNd1p+-y-pT?8zNcmdA1J(n1-h&Bf2ND87AIFpp&N^s1$cM*TinoYFMP#1iYse@hetHC-g;2;xJ9HM_}4*EpP5zRpT$t}AG3ZwCy&0dT; zrxcQq5dM}9eOLo(vo#Z61wEzH2rj$!ih@wi^$_VXF>eojQ|;dJN)x1<{lY{HXE3!! zuj6Ve>Q*@eUvnp5zxE?)>om+$=Ud^tfS!#_slbMb+{;}JA-E_*-Y1~kb>uPT!##My zM01Ad@7sT!Fn_X2QE7}p`PUK;c!WjQxXrUS`eD6n4b`~8oS$u zAc~m7jJ35ty|vu2{uD*!_+}tx8FOz+r#%YIo+!qj?uU~H?VAZ%rXYB=0^B2N`k9~j zQT9q%29i`}D;=ZVo{$JGKSC*#blppmEb|Mo&H?^IDOHU$WRaUX5Ou~FXk8~;`nFlH;hb%xaIi8RAy=O5igKB$2@<=qiI@?#7)F@9wp*fS zjleZ*UxEvq2W^AlHZ8n>j-3tFaSA_#dPRvv)XA_%3~Gl2PNsZ_I8!15dnB9=BoNB4 zKWAZVUHH4j0&>O0#Jj1=aR*EB9*T5U!~C#`qC(qQ-^ycfLH1*nHifaP^vL}_vB(7GxZ)t6E~Ef_rDc2=AE9VL{@)!rlf7^12=H6w&{_n5g#5{gjfC z49Q4LLx!OhGs!cS96h#N^kH{BXV6$Dh(S|xYpHn78?Zeq!+JhR2DxY4Au=YpYh$Qx zt%HeqD8G^&H>z$(j-pCxNFy$Qu@X$a+H;NH(X$dDaqb@-w~4M{nAeQi6nVzoC|_u` zYI;?YY1P>$Fw$@8vEkBbTfb=EvA%L>yuV~zdhMFgJBf9Zu#1O2WH8G^N5nhl=Qmr`@Cu_YAd_Svsbs&3fAN~q#T9J2&YlgZkz1ro*Xvut0$7v>J% zPQ0v#Z&xQ@X}yRv zr4!NYh)DipcFGe8KN_)N7!d@#2ldU);!8mt}IY8lt$sMIAnd%m2z8`qe}k z5N;qAThiFX?p@f(S%S(?C?BjDqY6q-03F71y-A?8&kWc5bF z3kNn6tZVxoc0p?S@9_!IZAp}qeVG_N!7n<5gZ*qU1fM&I+3Ily7sIqTm7GlixjDAM zf-79XzYWSZO#r+ap4Cj~aq;|)XS~gE2_~e!>%NQeSMNm8qBB^j;h$2A_7v%-T-yaX zVr^j|jSg_o@1w%Z-VtIM zs&f{dgVp`(nwf{Ah7!a|7>1pfEWGZa-OI4G z8sUR=jH(}XvAdFL+Z1fx+l+T<_i@Qls^@GZDLW;5`D3lY#44}oFcMS6Iy##BQ4e+-oJVJz5h3M?ol@9N=XSjbwLy!#bpi5XWivigZ91%SVU_{pOkY zTsl;kv!dOD7tMhdaH_++0~7s|oS%f9ufv_lO}d*5?`aD0IHsT9UGQvkQJ@=Bb#o@Y z0cQ{5x~11T|7UOJC+Fob)*6>_Pk ztB`NN(W?MdK0qv#6I&0eeJ1MnmXb9c79n=Q?`W>%&_+8)X8E{>@caT8KQC>*E(3mN!o~nB1N6Pbyml^CYxA@MI6)pKve2d?v z5wCpT-%@&|wAzSD7iro5^Oki_;n>Z=OF_FINZl2 zy-vUSQmyCO!~SVJRG8WOJ3#=iTP^IcG^+j6H+1Td{QKIsnrbt-%SmQM=zQfBbZ?u* zB~M=Kg*g*X!tSZ`m=`(_wnas$;jMJ6s3&EaDCkLUjf*SjnhwaK8He57?@E#p15T|S z5T0C0Q;?Ms>j{GE2Vj@`V`-Lz^XQv+I&er-Y??8^f8;4q_=3cLdZY|OQl>AYt#Qu^ zmlm_fj7N2%Vo(-gWR}xp=#8&Y9g6qY=^hW<>MQ(f>aFVd|B81k3Jk5q?51%|6=BMk}RT zt!$0BtjLzvH^B0KoIB^S46tCzOWI&?VK)^6KLU(|TrDh~~wleRqzcuqpV=r<~jj zR-|6nA?zD!!ggx(EM>J;<=U+sLXu%h>#|*^w_ZWiKUzcGNr{Vn-=4Dbics8(-WJFj zRW^)Ug5SLMm=vL4kT3%-N`Hc$%3e=0kS-T}b?USB%)y&Q^xFL7bG6lS5FpL{b-kSM zypfg`-uT>VZ$L7XW4UWzugHGfo`jeF>r<*^rz~=@= zDAIBoDL|kwB6Kx%P$@JrW(pAshzQZzdLn-D-r7Z`6>pD)<&OkNoij5df5$7Rmd#qw zcaYGK@5S&B+`hJuP4cK;67+C8B^nM>4T4b(>Vo0Wmb}n|b$~m)OELG$S`dL^SB@7&StgNbXU{N5?$wjDNJWuToiq+^e+ZhI1pGM^A@miWA@z0c<|W3W>ZC6M%Fiws)vvvQH=JqvfvyY!FlK5ynuW!T=& zFG2K{PwwmAWT3Yl-SJ*c13hySw>9&vu@PYtZMuKNGhq&#^{YFOp%DnJCmm2nhVM7B zRo#;&HBreiHp%-F9E=@mpSzFgC*r3BtOJEc>-0y5nWJ$-aR+0H!=I>wh^nIY!uX!@JD*|B8mS+QHRNuKG$ggrGFH& zBv8NXQVYt2VGmP)$$`mLkshm=-^|nN3;BlT<}kQ!OMHhk82J)8?43|Bi7e!_)FZKk z3X9FXozxO!0TZ9!Z}VDB_$3Xs(zVCB-0MG{?_KbfXXNv_&vn@gkGg7k!<+bPx7eLM zy{*i>iKvB*1(EGVrsW}Y<<4MG#TSQM5IstM+8B=+x6ATPFw>b7j)d>_$axGrN}4jq zcMS(wBoJaJ+TQr-jkl(bj>Sa>Pj@$htw<{?HEYH2>hISm7lkp% z{ReXv`g~d#)kPW?bQJ$73#qwkn($4iLB}MtGdj5j0}{zugF2>1y<2aNbJ14P$g`!| z{5CW1l%o}yh|9MYIsCSdMG4Mg-BQ$DbT-(-Bqi}cumLwIzP{pxkH_$^5vY6a?3l^T zk5$)zW^%rTu$Pt0b1xR2uUo^kBD=EnwKjs(kks~I-ojtl+pyY@c3q|-u>y3|icIuK zz%ae8)HPLUpnE=sG<4NGEbLCHV~SrNe&O<{o?i%4;}#qBsWBfc6x!hc>ZXeDk|u?m zrJ>)Q_q@~FqFgd>L|$EHf!DxG4r-p~ z;JWqV1|T>$JDK(%-z09C%#YQJd<*PA`v-7XI93g+|6b_@uc6WdV##~Y4(*3gF<05r zBEf>WUX`bh2%Rg#J580;mRuGuQwc#d82`R=?vEKsCw#MJC!&d=>gCg!UY^V7N@R?) zgWbZDXj62qZats%BS@PSE-AzG%A2t?dgZt9kWz5vK73Q6UVk{;j9{=ku?V^vnW42b z?9!1aFMJrMTr`h=cD2-Uojf(5fnpqqVu%G!Xtc+{SvzQ&E|2W7-gdC%r+_8CkDpZf zr5HBaZ>np&0dob({uNibS@|rXJC$!m}2v!6TP5KQZDu0~+OXBbP7$I1ZDwMX`So5v`UhsC7#U z76JWGcImdWfNN<&ZFropquNKuZh3M`XY6P^`Plo~vawgKt1QsD9@{v|DJP%uEena( z*vW-S3-V?5Il7m8t0lVs$Vnbf0)cmWhq2~HdZq2L^C`GE#G1-KbHueU^S zz1q|s`xei=DS`|UIpd@<&M`m+aM%9rub08=oQbFGMm!aSD$r6%yXHf zw-kQk;%Bx>P!M!~uX5gHj;Vgb18fJ8WiTAa zZ4m&C#ez0!NjG9)w1(5rvfU2imnh)j+YdO?z@lOFHQYL-cOdY|8Xb6<JN=#H*AHj0Qe90U!*Pd(zK(u`ke^+n-Ql~ z2U%S!y|7z%cv>&K=9|>WfFPL&yNkx$5j;U+E0~nXmINL>Cp?Cy@F}Da5`fE&K#o@c z7Cd%54trMx(rjjuXM#dq=6lmL*%hU?`gA(`qDq8$J&5UnY-=LPB(~v9UWk^`2{{wV zqE?D$)R<(aR%aoXD-H* z>`w}mChap#5_ZdqQ^4*5bX0iGrlOw!jO;)?j?;ew zas*x-k>}Q4~TZp zreu8j{6t7fEFim^@g^9DrNA#(fb4jd8OZW!qqd7^93e_~g}hdc`KI6i{kvxR>$HFg zS5!@cc%5^ag}iR{wI{*b2I7Ud1u z6&dZ8mwW;rR)W0;8gc`xFI+U-RVWg;9euCpnrJdr0$7l)oGfCNn3fL4bTWLM>$nLI zSW%T4Jhiwmsw4{|F|D`(QJu&lih1<4ybIvK;Xu_sTM0Pm=BrE~>)yI7(pDEhCtBY3Na8-IRD9t9O{w9Y*q-{Lh}xoLYR4NX8t|VCwof5r6i5ai3p* zAtoFh(uU_~Wf$j6`?AqBHydVz$x)vV!4X$Sr`B#^CfcFP(=i$V6^Q2Lzz$HWnNY2a z5%3AS^~$ZYewc{Zgal*; zEKgk&v}OeSvR4~>FEt0zRGD`R<{HK|5_V%be5T?^Wh8G` z!qfX)+8J&MF|IYUMiJx_c;Tb{gG!A`s^V?#Kwc(%O$kAs5cD0#B;=fx+Q6O79Mb*g zekq?Wi4wP3y{#cfOiBnPd2gfs)SlvN$3Eo+Nc-{47d@p7TY^UDfSa)jWbG2J z9^x(x(3&mM;@QyrAuT!uDUDiGwY3yer(8vX;UqzFG&ORS8UopcDrI`z&>JeZB-3q| zVXLwZVS>+nW2^7Nu<-SWY%O2h_IF5pvx?Jy)ta~54|TZ(P@F>Gi#R%fJ|oOqz(EPG zKkqEaOMRyf9jMyEk&$7wqmmeQZ|fnSVZ{5%To=0gK)eA0+tr1l^fNfvRNZqCYvc<| z_C}>S0E-!D7f4iec3b7){ozOrVibVGk!;d+sG3L^2)8?+&N4SWpo-HR6)Hb)+QOx1 zRn+Nx`zY&EIdgmygh@@DwEr-t95Hzh`U5bvp-dc=EU)SK6-4Rk&9?_bP6yCd8TK1G z!{LMcw=>jUFE8EN#i00{Ip2dC^FX{dn?LlrJzAPhl|}=_g-ZN!*h{Nh2f}d4e|qKg zN$(O`!rwXASqOg01||}8U)~Dy`Yo+{S39phzfy6SJOTyQQj~KGz^6?tgKZu(?XTfU z4Uxa@)33IAAuR*tb0HKezMYXxj*0<>C+TOPLQ!7QwG=2elr!`^1oBTkR<)eg3?67} z@zGr2$1SF&-Y|#5W)oL+_DorQ=p9X4t*{T{Qirz|>6yxplI&rYUx?m)Yq`|%5|FVZ z7UmY+YIZRN5iVgW9%(DZPEf)~qjwEHYp{J5Fn>MB!X@AJ_gk9^+166`qF)|V$x`J) z@)R9^N~O?hNH5V5a}jDEfN!R9-PjClRLc-v)27Ck%p3y*+ud&gT9O6?ik}_Fr#)ky zz)RuwV)~A>_+iv^>w^N~yb`{5*39t=?>-q`_V^BzT=r!NjzpQtE^FQQ13E0eZFP)I zx_oV|nnE}B!*+oN%rhfYKtuqS=zJj7S*YJ|aN1>nPCNBD0vxcgt6N3Z5W=)i~&`m)UGbY#c=13ept0h z8R3=K<_+@V;UD`tdkJ_Y3p2sdTp+GYsMLVw;5_&31zcSb!?)eAr$w*W$)ofwbz!v5t=OVA3AXV-RA$5 z`W3I|>@r5Zy2qI*EV+}IM$ShiHAfE68L)~&K9-H1y;se#klQ)A4Uxj7@%ehX_<4>1 z<&LVPCI^FcDuLzrg>%izg3n?4Z|FWp^j46IbGcurwPB)CS<=z*4h- z%cgKwubxcznlFr>rxS=%nmVF(zTW@3XV1G8OM3+2z;}IPr<@9C;Czxtec@*q#ce}^ za4(GLe#+mqn`l9=yiL!gd#r44rH`N(6O43s;kypsqjI>w3t!!8QPtTlY&!df z0r*G&By;?O8t+NXuKmkO)3hQox0KnG^f|q=G*&c&OKk_uHBi!+Gi0+Tp9;IdI@^llag~KJ(%Wmw zY!Ag(u+X`i;OE2B2rhgLiMy~?E!jyU;HRFy8Iy`Ap@^>iZXYNEOD(joX<0w3^D>v& zElUY}?|Qh`hYhj-yJmz)jgonV%qsuGemgGF0vYWPtQ!x6h?48q@j0@|?bqQMa@Xx?UqnO?Sa|CYn|q zz27GPl1Oc=(GM{_y+NOE!Y5_0%2n>3`s__EAGQEW{Ar|*kqlxM)JrJfd=0)on*p8M8FWc;lAv* z3>~tF)@rHlGLd_)d2t(Q>`P{%l+T_($>zbLqw^$E#2hQ2vR9wuDBf!j7pT{#XwjQut#Wyxav~KwuTR4Y*mR(r&A1%BVkY{YNVl`?wh1u+>jjPO zM&XxCgxVb1z7=2$y1NkW6XK4|v(A;NTtP))-c)x`GbnjO!y_1GN)3j$IWl2|`+&cc zEQ0@GQ)3Srt}KEGXsM# z!Yo7H8smX&Z3=D#7GZK!9v1CU(A6d$W2}?D6;Xn&uq!BSJ(kX7eXpn9xTx`se2S|h zcXvduaAc5!3Ld-ZxvoIT@GHp#$NKba7n--oE`NVgirJ~hO9M>_1Ym2%g-u7QHO6&Ln` zFoxnx?}LPQqh%B|6p{;e^3|;Q8T|lGGb-REh$Xbf$z$vV7pzmO^w8|Fhmv7{ovaTy zkF#!JINV^+jEq24x+H^86&RQvBGui?v%zF|o`_P{I?HrR%KtErl z$YxtX_T!Mq-nH#z@Y1OLgsn4Q=@zmHHLi-pxm%#P0W`B=Be5ln)@2cf$b0Lb@1aVS z8|fbI*=?)K7soeo;m=zUDOsnibOF~Uf^44HHA)mgXBMzfs-947)JtR5Uu;}bnGG#t zm@`0yi=M>`Gz_RfWm%G)*-q@Ic2mduhPSS~4a~#K8!Ltj3b>M{34#sXQU2Gnv1z_Q zONYMo7MsN6);YY>@Yt>CCCF3TR4bv#q=^7> z?388>k~d&BSs=I-jZl-RX-_Lnbd(7Derc8SH5P3oLlnTC=);1PW5jIOL0A{q-=le3 z>Ur^Lv<+VEQn6)l8mlVOL51?~(wxfyDm6uvY7fy93cUQZ%aYn?joQW` zL&@FU6U1@Jh?MAqe2eM}7m#@1efxGx0^_*UG(Veqk30#3EimroD8*9vvRarYifDnI zL=0*lf;`33sV@ipD3gHdoKla^NXMm%mVpQd_Tkcx6ZlTi z>678m{mK0pV&SKys)fMcHv%~(oi0D@vu`Y>OKeYfTV{!N9N0z; zb@D3dOp;gY^vl|=oFO`+Tb&c@6-nMF3HRwW^?LuYq~udr7OKpxBmqCxS*?L1x>B8 zEDsrEFlx!3Aur7PswpIz)#oY2t-71Tk+NQraa@;H)71h=wa1;zusfH^{Y{VFm3&|C zTIg|rds7+@GmB!-$0tf>J#OV?hfzWw1QeGZW9H&23DR-LkRk#fU`wBPscOQpG$uAO z9kc8jCWsCgj_9u}9i8vK!qu&qmN&yLXBx>NzXL=AU#u+FJ=25ZRR;L16$DqU76!yF3PPfML&QZ?($Jm1T8o2@9kVR79(ko>dNmZ){J86_u3_BKD zKZy0xZjo08YgQrc2R?!<_jUJjwh=#9YRN^XGlTHAZ?H{v$=RSy0~7`3Kcx5i;LuHPCn2dSk8M#KZqT*&z%-SK+70(EXS@|}DFBtA|{udgs}c(^3%^ieT~ zq?k;-nU!#9k(F{XS6TA347!D(+(zX@?5Eo`nZU(iZ2Crb53193Q5G836R_D7%TLX5uf7*zTrSGx&{fJIFGDO)66HLbhi-bkK?n$)0Z>e7z zmYu3gFkP~8k>>OB2|b8#=R7TImql|x8d~W z86QaRBis9r7B76Tmef1xKiU_vJvWf9cXmWSQMx&3ME158dn1yc&V64lBDfUbD`Tgh z0P)QVWUDJcC(0uI;{0D5Rv!GbU(JL^V|nCsUa|a?%Z`qC0wifJQ6~(K6ubJI9H^vN z&iO&JA&rz5$L+|8pkD_FBinSk<1{q8SZ44$PAYfjPCB4$Z#8Pmb_z{RZ(qHMX_P^aF~$ow0N^eC+6|gqCUVEBIxfWbdg7EnpSNZ!Tw4 z&oTdtqZwx>v4=Fcr2TKH*TP!C$v|{Co5ecX@0sWWv<@ewFj)F9sFx@7HYfZ*BPfX+^{ zo2Y$B?_)chanGeG*9ok7{kw16+~KY6%E|q5ztbpp12Z3j$0!612!F5dU8b3u%yz#| ztJINF5g@@+{Z5Rg+hqus}}XT7ikfUsVv#0 z$;0(10~_FqD9&$NJJ5V-G@tfV&~asuwkvc7#|N>W!fr0G6Gw`oQJ2Jpb@EWW@eC8L zr*4$iz8E)0kW8cX7-MyOs7vImR$`BmE@Mhg5O2%1=3Iq5m!Ql2Cyr2^gpx(!4j_l| z&8TzcA{i*;hmj}Fy%B#UlE>Gl{|Go=c3`neZfrgWDWoM`;qv&ZGf<-vh_P-@`UAA( z^H7ru%K#`vw*DgWYWHt0SznIA4HtH)FB&gAds%tOoJ5g7N#=|PB%C?G>7GM*oIOo4 z=IBBZ7f)Z7Ioe;NyC7eAoLbwiXA=#b8*RpF`w^iA50^0|P-T#oaBMRccZnoa`UlJ@5oX?!G zbT znRBq+Jx@NLnywB>XNA!39=p<~f4&1Ct|mZC@N)UeHVg@2I!Ze2GMr>3HYRrhQgb#qyxuCvh=sb&mfg9k%2tVY5d>Dazy*e%7QCcoXGA6e zj>9&BDTtb*T80bCiJBs0yx>^gGO4hT#jnflgWZ1XZB!Aj&0siGN04BqJE0RHb(Z%VhI~yp(9ZYS8wyv2+Bbq#i4N(iLkE)DBDHK)<_Wp+RrU(>!=K=Mv z!}~veabMd=sHZuOOjb;f?*ER1u0lgDv3q;VUbJw|9tVGp9CA)wtnXlv?0HP4q>Gkl z23J`_jL!rA(qU1$EwGMbB14FScD5AyS$xa>&GlIZp0O4h1+N{|$^fCgUo(1^<)F2x z)|b#R>OlaO5!g!SRvyjDr6g6XcDdrcNmC^=lK)CCABvq+4+VbGt+8Kmco>xo!Z}FX z-bdDvij-JG>!>;ehr0SKMIyNrpLf{(2EH!NSaM82U;@9*z*%DrZd!JYFmH(1NCW}fntmazL_XO1blcf*sPWNi z-6e8-b+FbH*e-+|_fr5ROX!A*a0P9R0teePLY5n!L&zt#CMdaa9l>R=m~S9fdJ?QFcfY?u zr#mbFkKXU@gTI;fR3Sg>r3jW@JS7=*{AK(E zjIpb@YU&<@h(Rd3S&4kM17!47`mp)H*{cgHpLG&5Rm}qvn=<156k28%I<8xqD+Yr> zS?fsBKgcLy7>QvtqRPV5*$Sk#7^B~|B5@seC}`K@Fu(;v>s8fzi^0-I71TkMmarQo+pFbs z2mO^9ziLActd(0lM}lmol6ZWeCaxvnf`{wSnnR*sIcCYBypmF%f#hzRH7JjDsKQju zR4~(^>V5Sjp3{>bVqQySv{Z7+AS-UDDH+EJkm|?%#I{7oeod1Pjh}vqs_)SewvJU! zAkq_&P4u*Vo(_KwvP`6!t1n=yU~7$gWZ)|r#iFy`!Iz*Q-okfOaP;^59(Z&~4>Gmt zYjLE7>kCzenn;wD(6ZlrqnFG;CY#tYt+NEY=v*xoiRtZ;n5nemP5#Dng=IZ~p*I>xZr1tFYz+LLX`QV`r94stU&d|CFGN5cNK(Xvex{R;lI zlvvv9^he<(*AczbJwNVd3g2qnDh<+sA{i=2`*XlI=YzyVM0=S z38r0KDI^S+k2TxT-cF+NbsX-Z_1&-;>)Rvqxg`AExbBCc>QXTF*C*$f2K)co)^KYF)$Cic|CAtj6m z6EmS#ZU}ch#g4fa@2E4}2KI)cHPU@P2AJ+hD7oQO~F4GsQTv*<7wi8up1y=g*0534_t)n0|q z^r|;!^CS&7vt+;JR9)KGOoze2l8uRM;s#*ou`NT?Nh*MX2H*?CoHwH+mf}6R;Ab0_ zQR6Bu4*W3%(&kfNa#@%@S)Tc7ds1^P)`_RKG}XDWQz@f+V5GWM;i-*6ZH=l+JEm$+ zf2x&k+==x)0=1f8Qe^-`;WaZ#6i7iHOgMGLO_& zm_`d(rPHPrPoh04yvmO05i2x1??v9Lej-|6C)sQnJ+8YClNq7uw0nz8*RYu%fW!A% zAd*CmrAo_V7-CIRj9R~dU=d=2h_hH=AdGB*cm9LC_AH3{q+1G`7^djPC89`!@`;tD z^dFHrG#?VL1~j%Qhe5hgTv6-{`e2SS3|X#_m$S(|K=oI>l;Ey@^+6={2KwV~b1gUT zc{e^(b7Hm6io&h~N*6rd30^RlZ}O3_y@zfZ{Xn)$_RoK7k~ZrGziTDqPs1p%@0I@C z+cAbDbwZhModJ4~6ypv~~ZC9rxg6G;d+{b|Rcye>77ybv&fA7B=2w^Zk9s z8KUZgho}WQtGuzk#hAO`EQb&5`aZwJif*7cxsIXoFrH`Xspe(TCWOdHA)@65ykhVX z35Y1hUxKez&Nxv<{q--Vndb+ z`I{~4g1Q~unwXRu_OfA3|5>vxT6c%NBD~UZzrUR|v>xPo2R)Tzsn?|Qm1CJHUGN>{<}o$veDt_R#D>g;4hvVD%gxcBf^8q;B10hEakMWx%GpOo?6>gL~yjcdkdV3FD$zBH8 z@4!YDyhxI@y2QhOXt=iIlIH=wCW0ygb=m;Iw)su4)2c*Qe#yJdfjFXF8<*r~b5P|0 z+{KYeqZRtQH+rTz)^L)fcdy&wrc(Tk6fbzslJ0M#GIAzqA)Ih<8@be96eyGs@qHimwd z>eF!Q^?leQplI@*-`BkRq^#{;WS9k#&03s8^twqp^(@^HAYt%;TO#}C9F?!=vbngc zBp#D;HY7N&C$N&dI>zBR>rH)>+3qW|gN@Zmq2NXGIa$ZYOq^f}Vl#O_Wcag4UEs+( zt*`tFoC21zpC-`QAHxb~Z}ox_)mm9fWiM6sKj;pDmpPwF_?N5OH$4FXrG!7_{R7G* zW%W&^rb;W1379OEwEm*{r%Wrp=CQpiQ#T^s{ORRq*RR0SY}ddigGUUDHcn=toJjx; zrzswQvymk0gq^ZTq@W;E$rzSg7mtnA$TiGNBxNXer(t-<6SO5m+F?y~Ql(oy$Ay0= zH&mRf(aT+h%~W!Z%&{E#%DQ#$%K-ObGBz&S~kZ>I?>f?BEBxz?X?()=*$%hK? zOoPg|KVu)*R7cC68O%6~EHLyT4eAqEB{{QL@4ttWEK5YAYA?|y&rY%`>x#&UT+#*f zBAjRR{KYdO=&3yGOvjkp9YeMX=pi_&k-La($G0$NU=Pt{vMl4_(6f7bMfO6oE@nmA zf(Te>)mx__@|E|-(LnxbROV`ITbWD#gNLeFvqStn2ai;+>^e=~2P!){T7#{b#bQI2 zeS!=hxx+ci4(dw8f9*z)BL8@plN)|7Q+d817amrfL#|)5^SS|nTWF7eSDGzWF%b2_ zW!0gqLgXwO0p;GANZ*MY-$h6USG7j;E8R~b9iwh%^!bVe@@^&3>KeOx9|i&7PlGf= z@vF~?)1$qUZVc8H+sO^8F!~gOLs8c8A-&?+xlDf^)zUpT)ukc-dwbpnvflB)IAX@E z>$*T|D1VS0?aV|1zK!;deK+nAAWS-ruRql27KgrVu~h2rJ}~oPsmOUS2GK^}h^@Rj z7b})c)ttJTq2I7=LfegtS7RTPOBlIad~g2pK_5dm=}vA(@c1u_+&U+Cw12yb8`u+H z34bax^c(`&QlM`K29yR?ox2yG?|4$nN&G8fp1I~7Y~T++p9o$5&w4BZv!y_+#?=EW zD?qbuRU2ka>j1S}0&TLvKgnuHe3p^dF>(X*Jb3aM;j1;p50_xV9+Zkh%tPGHw7XEn zoplB+R6f07f|V83Nxc&=?1mP8(|lk}jezU0EbrxV75mf>AZ^=Z+?yPQOCFR}DH>Hq z&PCOt`OKW$_**6H`*oLdqpWN7<2)qh=}-oR{ftxQKNiw*-gtUVJY)Y`rg_a!I^9$iku=ugyJ`-ddy41kdWTtB6J zfDeN8$kNjj5>-aV)&j8Ov-Mf>zOm?Zz%&35)UhP{NdQe9^||L!^uuTR2dRJDX2AFH zdpI*4k1S^EJB7A11w^UXUPbsJ)JB9BDLpx~dk8-CvVUPxRerOBx6)MDpie6H@3Nna zKQgI(3#9<9+B-1%o6Gbe&Od6i`xGrA7t2?8vupal6=YX)P`%W$0Gz?%dm=#h)M2!Y zHP%oh zTQv}-NU!a*x{doGqb$S=aJb#>M!7iV6sqjGh>OJ(L8ceu>YNO1Jg?HqhT6wa+s2lG zxd~bO835Ce)IbHLc?dfC%6zv%kSdv9HchwCCJNhZ=$@iRu6f_Jb_BgfrxrT7x*dA- zthJ#+Cz~}>wEDO3fx!7*g4=5Qoo1eM=%t#HmG)RCqf&ODUajFN21(#&xRZHqWxou0 zKg=YTd>}r)e^~>JB(4g?k@b;kz9N&-qH<0KGSy3iUVXiL;)r3*p1fr=y)iw&<+K9K zI5-MC?iEO-JfO4lL9Z7vdW1XLn%zp_Dg+QyoG6}1^J9javQieG4X3qWgn=q4yO0Ww ztJ1104cc0srzXyp;s0jL|GeR1Hc7M@l-W{B=!`K&Z_+#1V8fbm8>9~vFJ2$wvJl+p%5 zMgmIW1$V_3_I;uYud{M{=9yVL+iCi>p*-`FnvoHJ$mgWkwMLe)f%`VjU?RD6=`3L} zp(@5aZ24!~)tuluTa>b!2m5?Zk!!qe25m1lmYiW$LVQMs(FAi=$I#_3i3fZL(ANo_S411U^A# zl}jCZQ<}LR#qHMb_K$0TkFY32vJOwGAS);d{@)CGUneB6kE@nvWj?tVAW7_RphHAv zhrk?$zLuGHpN0Qd86B6Hw7|jxI_o#oeQrIN_=NN!$*=RG89)@Kd@S|{#mG90i$d6% zs4>$op)Wz&-pKN#tol_1B3UN9b?*b5=4E}O?<<@J{}hW!!wVZRD+k@B>NHLeio^wf-j3rRaxI+fU`3gL}3 z>^@L|r0(29#?(@iIk<;qSwQ+AL1~>YgSMJDH3dFtVfK+V0NpIJb zV_4w_=8x*7i_=ydxqW=b5-RW-@%I`vcVc~XKc(`6o_#;RlRq-l0F3kUQ7hzrb0Kj0 zN5~}GQ#lz+1t=EC6Z%AS&L=S!&(z^oInfKBNIW$Hb2zGh8Qexk(?9VIZhuayd4E5v zjUY8 zdbobV!A)_7V!jFq@UmDI{R(2s3u}5gseU4-^r^-!ku4E&5V?ljH zqam@$#aRkTMB;jjWS1>N9!0okqXE?#+Y(r`-Tm$-v{qO%mZ2D!Z0a8eSS*~Bm_vRH zGoDbpC*B{56sdG2MBXey+ID$5$NpMXJP}Dc6*k%2;^6f z2bQBrwYIUHF1f=36)D5xL6G4OZ*75|wyym*EW>J=pDDoPxk2a5xqf>Gh-Xkc=BM*& zQ>eM~AMIaAL};dxi(#piWXo%=N4~3FSnWNElJGKyr01#_(Bb~v7&xnHpB5|IuG5@N zUo&MR2gRCJCvg+E03ErmrHHOL>L`)+^v4iJD!ruYKommyAjv6Q7~osxLy8s)Ev3S| zzL%M?zTfV0|GHgl`rA&DkcM#id)=EtlCUqzqw^FZVBG2jFrteNd65fJQjgx^ zJ=YEWyqCdmanb_$S2PWX_~{~eO-qO-kEZP*iAN1)Tx8K|s-bQc9>ip{ebI%+XLo3n zXh{3ysWDpbbVdDzg5G@M2ZBdMz zEn0tWpKiqPr{QfFnDz)4q`IeokWs4M@YTT%RGTu2Qycwv{geJMRG#)WSb}`m%?V>K z)*C#kbs;zv;_1U#B@>Nk&Wf)2TU0nz;zM2O*cF>TFgaJI2}dZXVdAD~1FCP8Uv6Fc z9e9QGA<{t)gJ!3@)`Z_g7<2feh;C5i zfUtr&C7osTj90(r7V%g1C8cfB73sCbC7(ha zY4A8L9Z5UK)d9|tAr+EJ#mF#U@*Dmq!+IsEzC>VLa-Jy`q3%P*RjTUL$P9La{I&aViKCY%|!gGu$ z$psy1okTMn?~GwOYF{e(zEv-JJUc}-PNNhveP2U7Yk@eQ`$M!r5_w0C+) zEx&eZmq(PjAE-mwNspw?=yE{-e&8~JqF)4W``z}MEXQg4EkL(xewY5A8jsV>gl(qB z_X)JdIsLc8;m+x_JAR&NsFdiBUkK3IX-G!vA|IY6@bd#>tX=7F#+640$f50gdQaY zif#gr+Q~cO=dI%`*_xsCSsGsh;Z%G@d+a*_5+mFL@6)s#>{sq3>gKZ`swuG3T{PDR6ULLcY_)C@apPLp(% zAq&PpRXU!ByTa+61!u?oV-P|UrdC!&W-cI5j}%&68w#A701W7CY+e#+5LUc@G|z`| zD4DKd%&-+80001bLki|n;(SKPdTIawKn%w*v=KoTfPQJ@M{PNyhd!9nFFMw#4>IZI z2F{$@f1eYQ$)u~d*5x!URD3BA8MEb46~CIP9%#hS=aUdx)Ork!bD#mwXyi~ovZbVy8)os%yestgC z2YQwcSV@>$YLUJ$H#QdqWflstVL-!F4L{JOSQauk&JlS(%KIQ4Isf$A@qsq!_uySs zQN0s}E^?!kF^hlWsc6ND4$+PYd5zWJct?=^30CPH--WW7#>%(L4AMZPJgu^P0{mnz zG-Ox>Kr1;^Pt~ip{<1*I@N1I>#RgZUsaOOIeS|fd+-sf3!@utd=`Nhzd&jueA^3D3 zt zr><2~fhJ3FJ#cIO1I{>y;S|C@@o>1YE}PIiy|py*%Z zhnF##29jjcA68l!k^wH^GGF8O;wT*X8Gyv&7B7%LM74ANKF8%j>iu8aQWhg>j>Is8 zZ!^Y}*CU7-GX}w=toRVnM1CO%;FyJ5{tAZP5vdJOn)qq8zq4r-yLs7Lc4;#e(+ZV^ z+3;Z%aKT`zzf_o^!iusfTzudwgN1Qrr56iqMqz2?6@)qq_Mv(I^X9E_BqVwc=lWMm zZPPPFAsmw@BQC0Y8a3ZBCoC`}B~1J|_gtTr7HgiFc0_ts?n5$pV96l914;;=~zmTNz8fidL-+txNn{Tzk zzzl&9W;1ss)EhZS@gtqF1O&7uEf>n*5#dJtuUtaiA*bKyv@a+8e@@OHc`Nv@V{F6L zS7jvUlMyKssiIGl6~BDxeBg9GKZ7W_p0%5^l8-fQjM^Rmdel8s7d$jC%P_vvOYJ_ZYm)s?Ow9m> zpua1yuWIK9^ZmHrg<+UFFhvjc+Lux+Rk!VN?E;v!$8sNbnfC0-LP?z2m%GHLy)OH1y2++uQKwr$vZ=KoN1y-pq;9v&VZ9vz_m z1SHIx`0foxds%bYGPi?(V(-FOlXUcV9SqT>AdCW+i&1TGBmZ>!@oE=_oxx|w<1M5t z+W-In0000000010@Bjb+000000000000000000000000000000000000000000000 E06qu=vH$=8 diff --git a/DOCKER_DEVELOPMENT.md b/DOCKER_DEVELOPMENT.md index 613ec9d..5545a9f 100644 --- a/DOCKER_DEVELOPMENT.md +++ b/DOCKER_DEVELOPMENT.md @@ -1,17 +1,17 @@ # Developing using docker -To develop using docker, make sure you have `docker` installed. Run the following command to start simulations of SRT and RTMP streamings, and a bash session where you can run commands such as you'd in your local machine. +To run/test/develop using docker, make sure you have `docker` installed. Run the following command to start simulations of SRT and RTMP streamings, and **a bash session where you can run commands** such as you'd in your local machine. ```bash make run-docker-dev ``` -Inside the container, you can start the donut server. +While you're inside the container, you can start/stop/restart the donut server. ```bash make run-server-inside-docker ``` -You can access [http://localhost:8080/demo/](http://localhost:8080/demo/), using preferable the Chrome browser. You can connect to the simulated SRT and see donut working in practice. +You can access [http://localhost:8080/demo/](http://localhost:8080/demo/), using preferable **the Chrome browser**. You can connect to the simulated SRT and see donut working in practice. -You can work and change files locally, in your OS, and restart `CTRL+C + make run-server-inside-docker` the donut server in the container. It's fast because it avoids rebuilding all images. It'll offer a faster feedback cycle while developing. +You can work and change files locally, on your OS, and restart `CTRL+C + make run-server-inside-docker` the donut server in the container. It's fast since it avoids rebuilding all images. It'll offer a faster feedback cycle while developing. diff --git a/MAC_DEVELOPMENT.md b/MAC_DEVELOPMENT.md index 6ac0fdc..daa7dba 100644 --- a/MAC_DEVELOPMENT.md +++ b/MAC_DEVELOPMENT.md @@ -1,6 +1,6 @@ # Running on MacOS -To develop using your mac, make sure you have `ffmpeg@5` installed: +To run Donut locally using MacOS, make sure you have `ffmpeg@5` installed: ```bash brew install ffmpeg@5 @@ -20,7 +20,7 @@ sudo find /opt/homebrew -name avcodec.h /opt/homebrew/Cellar/ffmpeg@5/5.1.4_6/include/libavcodec/avcodec.h ``` -You must configure the CGO library path pointing it to the ffmpeg 5 folder. +You must configure the CGO library path pointing it to ffmpeg 5 (`5.1.4_6`) folder not the newest (`7.0_1`). ```bash export CGO_LDFLAGS="-L/opt/homebrew/Cellar/ffmpeg@5/5.1.4_6/lib/" @@ -28,9 +28,23 @@ export CGO_CFLAGS="-I/opt/homebrew/Cellar/ffmpeg@5/5.1.4_6/include/" export PKG_CONFIG_PATH="/opt/homebrew/Cellar/ffmpeg@5/5.1.4_6/lib/pkgconfig" ``` -Now, you can run it locally: +After you set the proper cgo paths, you can run it locally: ```bash go run main.go -- --enable-ice-mux=true go test -v ./... ``` + +# Simulating SRT and RTMP live streaming + +You can use docker to simulate `SRT` and `RTMP` streaming: + +```bash +# docker compose stop && docker compose down && docker compose up nginx_rtmp haivision_srt +make run-srt-rtmp-streaming-alone +``` + +They're both now exposed `RTMP/1935` and `SRT/40052` in your `localhost`. You can use VLC to test both streams: + +* vlc rtmp://localhost/live/app +* vlc srt://localhost:40052 \ No newline at end of file diff --git a/Makefile b/Makefile index f322419..dbc8014 100644 --- a/Makefile +++ b/Makefile @@ -16,5 +16,8 @@ run-docker-dev: run-server-inside-docker: go run main.go -- --enable-ice-mux=true +run-srt-rtmp-streaming-alone: + docker compose stop && docker compose down && docker compose up nginx_rtmp haivision_srt + lint: docker compose stop lint && docker compose down lint && docker compose run --rm lint diff --git a/README.md b/README.md index 9b8571a..a1f29be 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,53 @@ -donut is a zero setup required SRT+MPEG-TS -> WebRTC Bridge powered by [Pion](http://pion.ly/). +donut is a zero setup required SRT+MPEG-TS and RTMP -> WebRTC Bridge powered by [Pion](http://pion.ly/). ### Install & Run Locally -Make sure you have the `libsrt` installed in your system. If not, follow their [build instructions](https://github.com/Haivision/srt#build-instructions). -Once you finish installing it, execute: +Make sure you have the `ffmpeg 5.x.x` (with SRT) installed in your system. + +You can have multiple versions of ffmpeg installed in your system. To find where the specific `ffmpeg 5.x.x` was installed, run: + +```bash +sudo find /opt/homebrew -name avcodec.h +``` + +Let's assume the prior command showed two entries: + +```bash +sudo find /opt/homebrew -name avcodec.h +/opt/homebrew/Cellar/ffmpeg/7.0_1/include/libavcodec/avcodec.h +/opt/homebrew/Cellar/ffmpeg@5/5.1.4_6/include/libavcodec/avcodec.h +``` + +You must configure the CGO library path pointing it to **ffmpeg 5** (`5.1.4_6`) folder instead of the newest (`7.0_1`). + +```bash +export CGO_LDFLAGS="-L/opt/homebrew/Cellar/ffmpeg@5/5.1.4_6/lib/" +export CGO_CFLAGS="-I/opt/homebrew/Cellar/ffmpeg@5/5.1.4_6/include/" +export PKG_CONFIG_PATH="/opt/homebrew/Cellar/ffmpeg@5/5.1.4_6/lib/pkgconfig" +``` + +Once you finish installing, and setting it up, execute: + +```bash + +go install github.com/flavioribeiro/donut@latest ``` -$ go install github.com/flavioribeiro/donut@latest -``` + Once installed, execute `donut`. This will be in your `$GOPATH/bin`. The default will be `~/go/bin/donut` +Here are specific instructions [to run on MacOS](/MAC_DEVELOPMENT.md). + ### Run using docker-compose -Alternatively, you can use `docker-compose` to simulate an SRT live transmission and run the donut effortless. +Alternatively, you can use `docker-compose` to simulate an [SRT live transmission and run the donut effortless](/DOCKER_DEVELOPMENT.md). -``` -$ make run -``` #### Open the Web UI -Open [http://localhost:8080](http://localhost:8080). You will see three text boxes. Fill in with the SRT listener configuration and hit connect. +Open [http://localhost:8080/demo](http://localhost:8080/demo). You will see two text fields. Fill them with the your streaming info and hit connect. ![donut docker-compose setup](/.github/docker-compose-donut-setup.webp "donut docker-compose setup")