From dd6741910b1e202613071596f96bf8c7941927ea Mon Sep 17 00:00:00 2001 From: Patrick Demers Date: Fri, 19 Apr 2024 15:56:18 -0700 Subject: [PATCH] add diagram showing system overview --- Makefile | 5 ++++- README.md | 4 ++++ doc/system_overview.png | Bin 0 -> 48446 bytes doc/system_overview.puml | 26 ++++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 doc/system_overview.png create mode 100644 doc/system_overview.puml diff --git a/Makefile b/Makefile index 7277bca..34c0d10 100644 --- a/Makefile +++ b/Makefile @@ -78,4 +78,7 @@ image-gen: docker build -t $(ALPHA_IMAGE_NAME) . docker save $(ALPHA_IMAGE_NAME) | gzip > $(ALPHA_IMAGE_COMPRESSED_FILENAME).tar.gz -.PHONY: test build vet linters install integration image-gen generate-protos generate-golang generate-python generate-ruby clean +doc-images: + docker run -v ./:/data plantuml/plantuml "doc" + +.PHONY: test build vet linters install integration image-gen generate-protos generate-golang generate-python generate-ruby doc-images clean diff --git a/README.md b/README.md index 2b30c6b..6eefd42 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,10 @@ The service handles device connectivity as well as receiving and storing transmi ## Configuring and running the service +This diagram shows a summary of steps taken during configuration and how the system will operate. + +![](doc/system_overview.png) + ### Setup steps 1. Create a third-party application on [developer.tesla.com](https://developer.tesla.com). diff --git a/doc/system_overview.png b/doc/system_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..b533a6ffbd349e3b0503ccdd5401734ae6428f52 GIT binary patch literal 48446 zcmdqJby$>Z6fZh<6Cx-rt)#Sspp+sY($dmMN_Uu)h)518AYIZigi5!7bV&}4fOO1V zqkFq`$9c|u?zwTUe{3GuGvD`qZ>+U`u|A)>cW$0JNpcc_K%9}hB_@wR9OgtI4mKY@ z2!FA^VL<{v7;VMx+3Hz7bTTtAv_;%BurRRJu{F@YsOxmm*w*%;4L=*(Lo*!vdgOA)aT@#y&gExzEpLK zPxgA6*gJ`(HzVh%b%JjkYbPHhyQ2Ntl9&DT+wLz9GX<>(WeRf|@yaeY>RfRlQfa~5 zCood@CiIO(#@~99xXzaL)L}~}*H3pn+N^@lR_R?1IjSd_smLg)YQwTR$RnD@^X?=W ze)NmSH;cp>?pyZe+9Id!E}OnP)g$(#k-+bSbcro9)rd;Ue{Jy%P+R}{=?HEs(fJp}Mv9wa z)a@Ognry9K=Cqu!clOsZr|(;?y)j4BUtT=mFTmo6#1&~QFHLcip?4h*(X%A>ph(tA zfB3#>i>-?a2K^)ijpg z3(BWq-y$qdajIZ{UQeXq#BSs-LL3Cx-xvQM`Sth%9lGWMDha>H!-%I>-CrR*cP1K# zs~uBpSFZ>6wFR7KZ5eDmk5NA=HK~n{xZCcSamaIrth*1#i`5Uaw>ctz;!Ch~+Ah;U z1S3g+9pYhZ75{*(anDuSdxSL ztVcgSV^J^6&_vnKb!XPJ`w%ejSPWj};K;Q>w+h(LU&^EG^U=-F$kmsudr9uG5)|ug zjj~^;j`i5?j8*hns@Ta&dC-~UpLPK86o*pS1%U`@F8;{FPO<&v39dIw)()TE+&FUNh#wKlS%W~8 z&5;0RQq!!GsfadV%&r%uJ0ADyR0{$3-u9Y;xx|YLR3=F>k?Z3R5T37e_WKSYQe3T- z%yk86n{<(^jhJ1u@Z=)gi^V>>be7TMCCQG}R9+$`dZ*L6CrdNlb$woSeDT?-^Jz-y z_BDim+)QZin}U+Uy?ecHZah&dF!9O1Ij>dbm?IfP-<7U{S!rVP5Ilpx<7oc=m~Ex4 z$}haAX=o<1ms<|1mTnFWD}`%ouJ zhPc}>uiRCWh-*GryzI-Ab?f%+?TH}S)+oL_)1E9oo2h)$p4Qj|e^Oqez4^fsg+>0a zPModLJ03wvt>pI6J2~!T3M!2QmX$2COC@NEWwd$GkfG3N#BpLFiZO)eZNs88)}qFW++Qsij7PF=P)C*#KsngLXS#n!W zF7TG+M7vVDG7|R?LgaaX*Hr{Ui^FL}KQOeqx;lk-=>UStyZJEUivb*R;;Rqe)Jw-W zO%boMBd%Yff}`!I96)hxqKGa)X#0|OIO4kZ|M~-7!5EB;;9K_up z<7C)a?W4eB)_Z?n@YAPbl&+i2oKu&(og=SW&3>Cv9b*gIN{Hu@i4}fiE?98!0m-`i z(RWF)FIm3$zrWNrg`OrX*?zC*OBkOf4Fe@^W$zEZ9|0V-c0Yo;o~n>%nV*?S%ox8 z*S?H4Ca3W)oas!C6h50TVkjRnv%h=7Y&=z|W`<(D^+3i>vfe32nk$WYd;wbQNFNDx zq>T^W&HtZ#?)-JbvqVIOnWsPaH@}rG74|qd;Ao;`_2G<*7dozrN| zjk{LrDMJAg>JJam1Q+=pKZ|Z>qUUU2B6gVZWinx)OWfV?5Uy~rtSCTMDdTe*4K+qd zJ-zDHEOsO=em2v8Z=_MsZLqk3dOp^@^s|4e%e#I5cXO}cruJ==IST_}7-7t+zM7iz zLjS0W7V$v2OE#U9vTEd3NncAK6RB(_W2;ebkx7^R=*P*V#v`Xf3oQ098UFr}qGkeQ zD|wIFTKGKO+)K-Dd&ESt8QwQH<8N0Z{+1b~(pQO@8`-yyauk#h6RWP_uGpH|Zwk%K z;Ypv!jCzDmK{5PRvQw+v!hQ6a3NAUnj`@RY?P@b+sir5!7^Fl*#)cdMHqpX1nJm#o z2v*IhDM9BNeR`+oR_8qq47+V4yd)REtb}c-Me>;uvfFfLHkXKb+q6n&gy5{XTNuO) z$BU;w=-mI5YhW5{q>7Q~wYy~~Pme+eT$nJ;dLV2&O}H8Z z(Y7A_hr6$SfhQ*BnqF78AkMcKnsVD&;WghzFL?+vaOOo9sM1+Zo<6;m5_@f@AU(UH zP%4aKEZMUlr;T85*#oki&k8nb!xCI4ifk&*AWa>zA0i46%JyW?Y!@a{wrl9O{9e=^s0 zwYt8>7D}#5lAbxVES1$pVY_q#RdD;E5@{|U3bqFVCjvpCHH1Sa9P0UgSDozuH z<3zXB5W!8VRGyl%Z27d!eWhM{_x{H2)`Df-+Tu`;8XNDNXL>|{P(S^h7cVU~gJO5Z z1kJTv%zXq+Xw`k6-On?Wv1P~+eJ?$h~9wPG6ohrCT3W7Yo)R^d|6&z-nW-9 zwY`qgBTjAm^p(CtvMg7>60Zw5xL&_mz-;+gS-9t4z?_QW@9F|-J zd(Wf?M^;iYlFufq?WoXBkwxo)`PI(Jt!-1&Oo!rQv0kS=GBGXvC2MC}$sa$qkWOcTP z^JVYxRLVx5Tfj06u9ZwNUwevK{9u&Fkxh4$hniZ1oZIcX7bQVjnQqO9t}cm><0}*) z7j}bM&f;yvy;d_xjkpOxieC_+$oUxI6|eFFEsO30D%_Bq$p!4??bmPQ zw5peW8)DUT-V`)wjXE;M@YIpa$8bzmj>uG?OFn}|X!E|Gqr5-a)~#rMyMdxgt%dbz zt01!}vipJsU*5CMd*N1^HiuKs<{RfR)d`^$M; za@)=ru*5ve$?1*YF)wu8Qd3AAjAAn>^SynyW_@R*ZL6&JD`G&!fbNC;oL#vu z!S2y*IL6LkC?1__zfjjr@fivi_qX=K7}wZaeFmyeYtob`Q$%%J!otHdS~=Dq{D`LL z=4!F7rpKZaSIOj))r$@tt0}xfnNLj z8}mYL7CtX6E|GptkrR!k4zo4s`8@jJNu3OL?#2DbU6RKFn|DTNt#`iA32L z>Sl6v3;fvVtG6kx;R)<=h}U7)z2xRwP9?TsN64q?%~zj72njAR~T0tLzaj~+#Fu=qGB`CE)qEjX|Jv^ z#Qcx9tfEVasjG4RgP<+Q7Gk600hPuh`_6h&1#ZhV2bP0(vN78Q-bla`KAwSVt>=}n z`Omane&2y?Ir&nPsC&$!%_-gc-jvz1l&XAx?cZu6C(NF#^S9y$U%w1={g~S2$Pqy* z`LJk#O2soPjMm?L8>A;LsxeJ==ja(Nk9#zQY97OJMOkWBm^|RGaq788qfAxH{j`n8 z{(FU_64P8wWle_DXU9|+yO$w*@4>A3F|WLNoIqr7!{U~WDkegTx#XvRs7FV_2eAc-y-uvk%2L1AX=3`5RnPZ2HWzmcY9iC* zj^GcsB7HIA^;zm@o_*VCSyJ?nr;8(`_U!WY5scG*;7#|PF~8M} zs<(Qdo^r}C4-%r>Uf9rwpI#Q)bd{&2=_$Ux4eif zSjlT!PgyFKz8UQy&8(Ws$j?7j(6g^Em^dbp9o|gaW`##XL(?VTWLduUQZx8-hHB^L znS=sSrOqr(uZEylPVxeQru-1Tu;W&f4bo)Pb)&B?b9Ak5p?4DEXD?s~>RY3|#QmK| zTAh6d|C}ZocX|G@1KO4DPuhe>lI=&F(4w&lUzh8&y=Q_9I^SyB$hfST-_vRk_P^pL zlg)$D^g^sUan|}LD-#->Uw5Kg`oL@EIN6q>18AesFprf|%Dd@fK|c zW?Rm}U_bm`!R!;J>=%R&-kK;_C8$UnzD8g52G~x_Yq0|PW>VN!iA5%vmX@|+xi+?| zsJRVNt}Lr&?c{PbIkJ|dBy&=I^f|aL#j#N%Pl5Z!!bNQ953m>R37}UCr5`2 z)5xxTQQi{f$w3i&iR#lEB&UOAEnnLEriV>88U+(GN!@LDMzxv3DG zna#t$#D6$kQ!wR^DYqsS+GWk5m0zl8TF4!1*%nnj>||yZwV6)E5nH*pumq*k$mjQQ z9&=M<@9kq-onw=ny<8q%)!z`@a5_=IXFJ`t*L#glf*h3wd-L{}4=Mn?M z!btYI0wNw;q>V@-XFX!JI zA@wkQHx$vy_1wP2Rg0 zQs6Qs{}RPEEFA^;&=tnCm$&X$%btQYI4a<<2<(gmw=v#OavRHRkAoV6+sXv`wmZ4L zjFPC`%XD49^{G6#5{C2@kKA2*l62Jm zukD`S4cmQ)YEIjHZff_<6MU+ZL#maPr#zi650Dw zkJ7ung%(3YWlqoAv^^;rNgv6@v^Zgxn5+LgCgTW7lionf-p7KfI~(sDaPAKYN6)F> zyLV4tf5J4IC5PhV@^`fU9qN#nWAh;yQc@}D??d|&)&FnsIVDC;h%m41JZ<|bc2^X! z5T4h)%qUhlh(XwNKmU@<-1iA#F(zL(IQp*pPr^cZ>IY#l`*}vdenQnt($Bo%wLw!D z8?Ohgu|a!$%_5f%gwG1&BfYXzk1*NEI!O&UbbvIXo1Dla{{k2O?iP z92bv+_eNyvh`vhP4>npg`sSOiXei$ZVyFgc&Jz(F zm`Sp`54#LE?sIx%$iX4*&D> z|6{%xuC_={^Y3@B3_C+1!6ia<;fqprq51_Ue`8)%efk>-LxWXS{|lbt-|vfM#~)H6 zPhfv;1R{U_T0HXvSIF@st7@ftxswnu=v161NEU|KAA8~Zli<&dUn!oLNsi@dJNE6v zlh$A6YH=g?1B}+czWFUMoR#8qv!7E5kUoo!pGtn2xt42!FN{BXH%nKmZCzyyyzr2N zU}*V`&EJ`8b3p)rZPOBqGpJQKt`D%t3=HVrU2NnCDu}a-t^aZ|A1P`X7 zxPg^3aL$roJg%dqNqI`O`)GH>UA$lvHRl0OJTb$A2n*|0Y3YzjIYTc4p5yp8N@PK0 zIDX^%S_w#ey%H}+b3mWIRy0@8ygwiQLGtj9sN7%6hP3Slz;3oHy(i&jK%!JwnxStF zZ-dbxQzxKhXJ%#!OnWTgSiPo`k_ez6CnY7Npm1;D?#WOux>Lw}=~6hm-g9F-V&cn- zw+ACr0==Xw_SOfCV%^r$(zAg6#bZg9MpBzhP&t*H*K&+AXbK%O1}&f`Lsd^OAAW=T zVgLuVG&KdSfd=5`;{!mUf2t+Y!2b{j0q&O@Xd($Mntqv3*N=w~gNm)q`kP-zkKs}T zbNl%C#2bEid?em*Yh_Zi)HWw(GN|BDjznn9Giw_gadhnv?})2HFee9xeiKlMenSHm zD4D_cdI8ty8-d4+n(Z`RnP?cB_Qt0XW5CXYxGF8f%By+I`hewmFEM`FM(RiG6lb5Q zTa<{O%gxQzFRu@-wg8f4B8w9Vn^Hr+RZ7fI*If+=@<0vh0RwuN-rAKcP1I+fwb?Gz zm@gBQHG43rX^rC*XK@Kk56wNZUmU#L7;jX90y2J_PTS4f8a`?u6)568BrCk97%Z+u z)z}iri;)dTgnvE>14WkSC+FwQh!gukmXkes>;gB`ucBEGUO5@3=NaiQq|QX?vY+FmA*-C z52QPbLkKWLsi6{(O~+Dh35xLv3u_0{P*cN_#hW}BJ$OCiV3QhJ ztJxU`w^i!)7QCqx>htSae-sO>Xr%MnthksMs59XKeV``%anh+dF9$q+d~l2D#m$#w z4}_+$qQs9N;nVz95U3J0SS(;c(=gF~v42Dt$RvNv;wxnFb#w zRC_{PM+bvEuav@XyH#I0$N-Ww>pjgQGI%5GX`hsoeO3IyR{!Fd%{=xYClP%IwO8bN|jEhGb`|@UN zgsRey_ z5q55qp>BhKZuRkYCu{4K4As00w~CEn7bFr1PfbireCj-Fu-Cc1+AN#SYZv&UI6U@u ziCEOcBqZ#oKT!z?sCUN-d+a|tMuE41eEoW5%#V#^Nnx&>mFMqX`aCxj0BuN8@z?KtDu-;Fyv@$!RDZE9CYvc)BY+ zte~y9xEOLd5fRa1e}QT5JDsG2*P7@gmn+s+4c>bm0CkpHg;?0#6_!5&f(;Y^J1e=Ood`qV?vadl=u30t-r#8(g*Z2SDd7aE7XDbK98rbFf!hz zJrvLUnmQ1NaG>qkkkSjXBrWL{*f6{ngO?0PY;S3%ym@n7dd#jzQ)RnYdp;gt3Gdg9 zy;80$ikKf}PgBiHy0;f;$^v_ukdl(E$v$02$?5Bt8wHUuF%>Qw7OJgnZI;~`NM;5G z2ESm@P>1Q>3~WI%k+)naz)sv$b8>R5 zd%g{OYodiLrB_zZ6)+vufxMW@+&x{pqqsJ<&o(DOpn7FNP1{GV)PA8|$3ZTSv z-`j53Zcn(Gz9H=l;cFq!1G7I+XwJmUd=4q8p%Inw!pBE$>w1pcpAP}Y`ks}`tlL@a zw$UngPTi2KM$0cDZI_1Kn#0+Xa28ngw~ZxW&zN_-ZD>Yvif?UHV%%I^ck|kWm~i`| zEgT4Gyi#G3_ed?vsHXOIw^ongkQIYvqej0$G%4%(Y2uX*DK=tLn0vv7I_r}+7?kr5 z9mC0h+^DFih^;Jyqt$@^22YAfkIXN<-q~(D*PyAt(3}(>KM;v5u^8f4MTUgXEh-e`%nhRbCEa7< z?fol7&DQ7pYTJaMF0)!4`&1uDD^nJAhn( zzERs_uiz49oD%cOYyM6V%GYP;v&Zgoov0TM;mlnS1~y+n6~%bz(km}%%}hCn3ucrwhgE|xP1^joj#nN3*h^)U}nyfj38?@ad zphioUYe~_~NWHz2bcYl0Eq(*A%=?e&52M{{Ul2o5RMB#pbb}NI;bL|4lZ4@z8K45# z*W^%;g0)CVMblvW->-oMeT(|m)cIz8*7dKbpvY6yj>Gf6``d`2e5&WB{t}Nv&hITe zsd8xwA+D4-6hQZ0_IErjAn|Fa)}J(z+cc@;_0y+M;V^?SX_etl)WyG}e}d~$j4VEW zetrP~m22JV(hJQ+4Oi1hbtTSh(FQuKgMjl;nMdnwHQ=e-(m7okt^@hz0Lmtfd6@&@1^5Ec#!|N z?>`VfoR7Z<04PK^Ug8TjQ;}4$KKPu{4pF)Z%w64s)Q9IG$$`J?3<;OFuP>ncPJopL zdksMhv5sRtfOfsXhqSp#CHmZKuvm^lK9-4}zZ8xqR5N=ysI(TU3y93$Sr;ttF@@)^ zyTE!%+kI;?vuKzfVoyii5X0+}f!sa;52ruH!TERF9QA@2AL=DG3bhEq83?Ljk&&qT zA0DqS3^a+(+W2Ug&iCfP)(A#DJbv`L>FgGRQIn##Kpx4=%sH-OJ`_T?hiSPxNU!X zpo$rGSu!v*1Y3o^zCN=?@u#?sTeMO?3M@RMXhEkA4fT(kB`{Wj_Kt_|Zrl9FnA(dU zV<3-^@|dN}?rbc1Ow{9-Fm(jPTyvpdZO>FMvKp^#a1P|OUFf%is^li{0({nQGnyM4 zXWJ9%pmuvnDeR7pcEASeTp?CgiP5~wRLj=-S)Q`PEa91 zD1}RR+um}^f}F#ySF7PLWS1DAqKWeXVeJ2Rnk-zDD~+)1mWTyg+$=7IU`hlX1H)2p zj%a9JUY>%yygnZ{x6*u?p}e#6_TmuA0Pt+3YMx>4VE%(nB&X5T@^si%~qLnvN*7@f!u$&I;50fqT$q?zvuP=|RCj169*e(dpSgA$+${kQZrrhOxF3aJ;QGt_zEE#GAj66Jr&9@&wT@B?wPtUgXShY_|$|Y5vVN9H;mss0~+eS3_ zDG_mP8ze_ORko1G7Zlgj%8fc;AH&SoZ-XJxZlRx>fuU|Qrr`xKr`UM3fI|$QjUn(2 zP;>{a?d@!g6q>8+=)~O;85fcFJWzp;y>xqs06Eyx016Shjeu}++820rU#>~C;57$uxG%a z@tjTOBbzIT?VoJ%*iDxoz}w4M&~4imI0is#rb2f=T9jC-c&KKakaQ|#X)B4lcyFT; zXq@oya46v;a5cv8PJ4F$49$;M6Yy(DDu5KW@vhxkMW;6PT^5 zIv<~cF%t@G*waJFvazA&FI?T90$RMb`?U&EI27GykK{1T)hKDXF4rh$s`;#gtU35j z=gF-@9UUDXtEy@?A#+IaFs+t$w;3=8ubzdBKuD8qe*p0**hv-fexQ0~1L`{ymCS&y zMX1bySgiTzu)Dboj41~C?*tn`)nxKH zMOXWT&&;e4(*VeJ7DJ`5QZa%~D}Nw7{}zxy7hnMinUw1rGcq!O;Uc^G@C(%45GK$G z0YYipa`0d|dUa5(tv>XDD?r4&)9si3ZDBxV!dmw_y-WnHkRtFa5LPEF!dNx+IX$vW z$xW0lq3Oh=*fUL_LXg?IM}+wL4x${oc>;@&m?KixvP`;vhQ$WWAgCsX?FY=`uh`8h z23~277ElTH!Xe)dtK3cORS_AJHPp3*>U^E^BXJxP4MYV-mb=uMOBQ+K-R7*=34mo}4UuYD`2-ocevL7fvF= zq)=G)2d6zeI2afNp#sw)4W5OxkAIJv=(;32;A%bSAQ6fH5vP)=X1BN2 zyo!7p&iEJd@(M|jOL%TV-{CW|x9Ct?t4q!nDG7FKUWyP`_rrnj2#JUqb1!*os`3oI z7|IgvDG=z%8qS}4=mWvfH|{Qq{$g2%xTr4a?jpo zf$m?%hE;`d+Ao37j@fGKvXGW;hKi&sYbf^~;r7N-C7{@kA4PI90{r}Ta%SlM3&5zl ztRj)&7Lv5M)a85*iyC+Cv_hpVgQnoK7Gv&Xkd0wxGHMQQ&oh#>+J=l;Xx68@yI1eq z7H|c;<7+XJ5UA>25Yx;p9IeiuYqMK;-k&AgnN>x%y}n?&XMWgM^a?_a=1)~@C5QR? zeXRNgY2DY(92@86`)IHv2h?yXQ;e#Fp)Bg%ke;E2Yi@1^@^!EG+iP&`ml?K1K-MLg z1X5fr7_%JUQ7_s(>}p7#qz=%jp#B<^QCQ@3mSV01DwLM`ddDfGk*}2dqY&eu-|!QU zgply#TZ$CU({U1XVmJ1hSWySq7q)FQQE`QHo%yB?K0_#nRSz|>F0ntgwn;rz&-dSX zQM7Rs9OV|?5womkG1ZE9!0@bL`i1PYXT{GT{9PdWKf`T$^465LxQap^dinFaSvP5r zlG6{bUGO|9^5-bND}H-gJdWXW?Y9ii@@wE8ee)Ra@A9F|HIfEt5wE!q2t~YqXo&xL zS*Y`y*Nka7PmpIFJ9PKPKOg4bzj^TDCNR#3_mdz@rKLdS$$anKMPcC)*NYea`g^F~ zc{b2|o1PrQZLP2G#agExzIp|kif5C!;Xy@0sE2lH*xbS7&7UuI#+6k&Vx{;46?N5WqTGe7P`-c++V>W-sbM!XOh;xL5UD?`|QBh$C!1NFv><<&4IFTtQC4v_^l^y zsj5!7Mc9)sR->bWx)T{Q9#+Ge3F6e*C5`RUCBV;= zfJ7}?h+Wq$dm@K;2_abr9ceH^r$vQ^8t%1LFA6O<7orGI0$!5$+mFjq|7vq!o_|dL zuB1p^U4ZRFmxY;l=6U@*U8@_1%6X+{^_xL;4_k znc4n=^kT|!7kc}R2R(U1(Y-@_(g*z{9MAqrfa~g<=XzAGcg`?wR;I;uF-xnw6j;^* zlP=(N!})BI)@(a{gqXT4baX~Vaj$(&d3q_uLpCHNL@8VAnrUpUyW-Z)Ql-aA1H(A{ z8yhohi(z3}SnSL)LJ8!cY{Cx{`G2MTRdcBMn6(mh)k+tXb0FoWfCxfd4}snp;!rki z_qog>Lw$X-{`>~l@4bsi$!Glb^SvIJ4G*B*>uPFzge9f0M@&GUo)8@Slf1)@3Ab+P z>gfSz+M8=2)d3_E;{5>#d9J_-&Pu)Rm4bc*`i`@TLJPx=qBXzqa9~d0ge8CbmNp~^ zvB+`kQX1oey8-PNhQESc&>MUk4?wU#TEkf3>wIBzEY8ve^Wm~Bz@uo4(c|0Wc>XCSf4k-6DCPhzJbN#;6YSrbJpb=^*~l2T?g4{} zMK&MzueGnp78Sd!rO|UG;AdU@ZDSKXq30T5pB*e&g{Y|CH#GQuC|!j+j@bX7S^ z&b`q)F@jsw1hSCfK!>ibtHUMc&<7!CN+R)y6}~p8M}W2(tltmu$4Il&H;?H0Gq{SjhLx`%y3v<#vQFcP@TPb5kd7etP82DDoU1m^* z;XV-bK!pGeonAWpRe1P405&LqQ{QGfYv`EF#CbR~OZ?YhWpCfP^YZ0O3P4x@ZT(yH z59z7QipBO6r1RS8>Ry}8Bk0R*KFU_HsSDLXwRZvVv`}8c#*mVdI)#h7^eL_i7<95b zMZ?c80oLIa5~=_z1n=O(s(5if{coVkrwZ(ZS$M&kdXk!a{!V}7hm{6$6LUa5Gf}o zChDPMqcqs5lsRQ+e{Y8pD)V6Q)X=P)31qAn-59iK10KfT|43juvu0`jyLWfrUWZ2y z3c=}-j}ExN{;_u;__6|p(*(Y7+YzWB#`4Fi4RT!Srr}#4_(64I?&#Cg>s)xPQ`U{`btih!wN7G`rQ$_X#%|66PtbcFbZN(Co<)YPLS~x-G%LUf%E!S`#B%i52EFb9BXFhhVu^ovP

j4G6&Bi=&x5opcJpR(Vq*Dft3YnYs9J3+?8iLEWnH;@`Nr*_o3hOfo|HG_il6=M zutAI)M-RqcwW0>8G_*#IkC(UT^XSUWm&Rg0>HGs0UCwKp3=w01kx@q>)P5SfQ0q z!1+0^&tJ|x73c{3VvokB$&3$>N?C%@|g(kB)IpB9J?Kv<<} zlR+N#yj#_wtfx=!e)dpEczChhoboC*$2>h9S_nUWHO1T@nB!SJ6L+$6(Vth5?C)u8 zabJsvgWy65ssHiIzm{ZJ|LI_~%m3p4>CQ=w-I-%5^gPJ@yO zQaAuB!m!YDLC7~;rd;ujzpVlsM7`Z|v$>w^CGdyKEOB+7!$lqak zlydd&6H`5y&L*jUhZ20j5cxXN>5_^h-Vkmg8>{nY$5(X?F&k zOnQ3yMzc}yN8Xl|&3?Khji6bG5&P$zU;L;#UJ5K4125$2>S}Gx(QtwhX>VB;2Q2Sz zhTxNLD?~sNl#-UF<-_ic`BzBA=U5}*tV(6tCrm6>S^GZC3UL@*NBHHs=}(yWzlnwF zkFx4#9hDLd{a;^FeV5a<_Zl^nCNs4whXoIO!u#D)Hqvwy{Llq7p-nm|%wVz1cRKin z>KA99s!ode#!q+ch-z=~Z0wkTO=nEoVrzq@aNwGWwRv-lz^PT(1 zhN2O7$Xjh%c3nzfgaQ+oLXtE-xJU&}VK>EBNcfW^w(S&w-UfaN$Y9hQ9P;`2EaLwB z{0};4tw22Kg0{Lw?fsQ7Cnu-bPn4L=Iv{aN!Jh-i3>fUtkQHmTvaeVhYE27tHai2= zJ$sI(vyOccOVE}B!ztbdSD6Dzup?2*pu8%xv6EaV=>*az?59CmN~r4qVi7gitdI5L zegZEpQ0yLibJ~8nx9)%gwHp#EXngm!-(tdr+)9lf4wx7D9L0)smxQ6pnN2AUs>JLq z0l&9bMY(?wX9$3Dt~>AqxKOouqMqNE89jp{{!pAms~vf0U}Ub;EJ94xOvOom?2 z@=0-9N{YZBkjmQ{2<}UMB;%^UCdluFdpF3MemYl-T6XluYscv$w5KVxEtNP$$6jKjTzN;Y^B=3djPh7j7&E9$)!pNzjO zVw82*45!B#KaEJypDKHbUG7I!zJ0~^yr5=*S(*M~BY?ShGJJe0T)rr}t}IRULOFOm zI^4YlOOH92ep}o8de#Z55JTu+Qkak6@EQ+oLfZR(oaYPz#i73bR^LTVPMaEE!rb9e z<;g7OohqHE1Ms?)s4(bHLR_@n)L?HC1&i9{%a?Utjv#|gG$VG`MctcpUIWF71Fc23 zCIr23DS7NCccXoVvI3j!Cw8uk%_fCXqoIv)0~Uyd5yWhR#Hvhwje3TC?(^_U7aOgQ zq+f5m{lQMj2|Ox4ApDy{7b)nJD>(5mly*dpn9KMRh@wE(l%tNCnXdpyh5Wka3 zl{6bRq(S1yE8`QJcSJ`Sxr&n0pJZGV$?kO@?WQh9vResA%UI$^f-fb0#@C zxv6JPsR=|M@2F&ubnKv`1t1wb#%ERgqS=R3->tjB*v5bzG7f^n_z(-8azLbj)(FYT zi{J*nD}i--(|nIO2)xFhRIylseZ4f}v0u*_HpM5&##&?@)DYn^@oIi+4J`~O{-*=j z&+yj)(Qzc6+6SMWbNTeYhfxA-IJ5j|-2ZMM{v#~4f>sxsbpZ};KuKC7L4tV_BV?RTBoq zEs=mRBGkU4hf)8ic|b4%!Sa)|&nY|}fpBM2pUhrh9QCyidzW6cQaNd`+?Uzb_{zYc zsM}eOOD%x^u78tYdh^la`2YAe393ZcX=Q>yRxmI$ln5d}C8e-_{VO;ujiMp%3OP07 zSF%%jyLPgpu5Ahq85z8PJP;Xz*$Wef26YU}C@bnF!5e{}1WY&44L#lsP{S$!e}l~L z^1ID9?P&oy(r0YdHa6tIDGN*G{S8^egEfooho@iubZr!ff9h><`-$qS`z`i&w;*76 zzj!eZUO$MR86%KR{^9*i+Z!yg0ZuDjDV^Tl?_aopG@~vpIc}lsdxk1C>kf8s)ngQn z*FPtNy0$syH>+m9CV%6`4S>A?zyW5ItTZx-`!8E`q1U!lKbO>MqIS3nc$M6@XOgk@ z6Lvj`oEBq%{%7C~QSuDXj&O;Uwe@OVx4^lQ=_*`dGE&k3@IuSsq0+2!#*c57J<{Eo zQBW!S$@|8~#{*w)z;Du%8E9h0d{z7NRomk?>;vepJNz{L2z8qre*w`BygI~SFT-lt zG1pA_X}j$Y9X(y&(n4rj4Qimn>}SdDq6eLZ5EJ6d?`=Yr^8^@(Y?Bcni~+CI5B=1L zuV)x6m94hkq;ym4CQY48=wEXZ_bAOprDJPi5Sg*wCFt5f+07+o8LMQ!xWKLpxzWU- zG5B(T;L0tl8Sb3rRW)J1Hkgh4Vb3&ItZ7?US2^Pz6_eY`+6Zn_@Z(jFX%&L`(&Ys& z8*%xdB)k@722Dgt4|qv{npl7@i0k}8P8@Qad4aj2 zDI#5Db-3E|LIBY~falPeUYXcZ3lo#H?K`4!Hy28|IdCc%do@4v+d|Yju$rSRdIWs8 z{gAT$G~VhJ6%Lo$nSwY97=%(e9tyCu4>f-0m0WTpg3r8##FQ@TJKO2h6Pq=^cw1is z3{$zxC(~q6&I#a|Vb&_UcMh~BF4xV6s;O$vL-xy(DCX^f=|!LMz8xqG{oR$E%KiSe z&_Ua=tAEMVy7*?!OJjB2H8r{+QIV0R89A>l-(Ip;`IgLtLY-X$T_o5b z&^biaG9UVAAUFGpfNKB?beI-|vS;$Vm5R5!$G~zBCg7ZgwU~oW24s&yh0CacJjC3X`DiBoEz+mdt56-aF(u^et5cpm&u6{XYl##pH*(HZUm222MVhX9uC# z3JzAF*L=4ta3WwaK5wdR)eSplq1&6&uo-B!L5N4BA4fIMU*$XEk!_4@Xvx8q6w z8umd*AmPK3S29!aU(OqT3(jG%mY+ML=s$$!b_<2N*Pl{&A2>)|#hNqPi_^qRSU0}% z0@$oVLvRvufC{o|WXdj!H+doLaP?OuT+euiX6}y%`uJ8d2%ON2LdCbbGM13NcBc9Z zom=rqaX`c$4-Y6HIjFbsGBAab-_{ru1du_3UcZK&qICD}Mcls3Enpg0lwE$P19+y& zC~jSNZQ0d`U*&9)fZISeLgAe^cVl6@Gh|59hwOf}H$K>DZr!;9T9G|+jUH%Q=p5Mw z+oY2J&`^Ysl)b$@tXcILz}d~Q!WiqDZHkveSK?!hVw{qCt+YQ~d4U7!uJ1QOp6A9P7kM?5aN-mBpHALT z?2{%8Eg6U+EJ`Lrp^EC%Aa(xtj#7Ia4W!KI*qDy4AMWdT5U2(!2#g^*6qHfr_Kmw{8ECDHStNxrW^t zst_yN+uOlt&F`^amf-=Na2%YRK(Ru&CSuiaoS{zaM!}@6VtecK`uaWO@TccnaiT8eM8};t610#>NuRiSE$?~ zQj208kX3UfuG&uD)zBCOvY&iWnVV_zYbfNQAQ+2Th_i|(4R`|c(j)Kq5$&Q1%+t#Fo4V(*@DUJCuA z9me<1 zTz;~t@1VER3LyPY>(}kB0Z6!F2b1Rz?{aS_rxVaQW&@N&B6hogm$?Gy$XpOdn(ryBFCS0@Dh8IhI*0taoH& z3ii=kSbvvQwcMJOSlf5K*zZFQDbx6|%R$SvVqREc064ZHv%Ywe3oa;lZ^xvHD7Ja5 zAzanATqj|JA%->$ErYoBiO`IiS0QjUV^X;6UK$gMkl z2#idsM9;v@rn(O-$I;Ul@W{!dLqpeF1(tRlKhiGtq}Tvy2OE(05dabM(As&P)2(eFg9c5~_bl2XsmOAKbllR8?!#K8gv5f{KJ7 zpmIbS1*Ah!RJyyA?hx2CsDLP`QX(atN`tTo1*uI*cSzR;q?{Qm#o!08l`RE5U?GhkTF^)knJ7;~JUiNL> zX48ToNA}}k;VnpA- z3s$(=Y;*4?#;8*Jvf=FbfcYU3 zLc%!W^bU>Ybl4n={DBx^jN1$*CWY_~fOOvVmmp&9(%hy~Oom(*(=C-4(-zzN;d+zL zh@k;}xjfS;g)uz+IW-EAm z6(tfT6>sDty_;@j&hfbEPSoECb{A0jdtA;)^Rx=22$09rfh%3&xH5~V5Ow8L0veS2 z@l#)3%j`^SLo@(kDhRw?hB66kqHNiG5;thU0amdzyGofke_2ajo*hop^73*`O%23B z@6`)s4@@kG<7R!y0PiIv^pvZALR*P(^CzykYaiF_EkE%S_AE%8O@3kI!_>ZcNWG{y z06oVhz9rwhf`S1@1|}v(3r% zrRNQ~p4PDdz%|eaA3?vhjRpVsGAkfhfY1QuaL|6l&w6~@ZFTPGhg4%U71z5zq-o!M zI&|p#u?x4~OS5CwU$XGuVW>UcTJ$zVb1>UUft}5(X!vGIO2Mtxwnf`y@%LY1V%u`l zXt^$VhZw%t)J%FbwAYtooY%iK>w@p)(q({N+H&nkYU(k`;E%|QvR0Pz^258ZaRU0A zpUk*(wmpr9)b+I;HS=qDxqSh|wM{P0<j74dkSX~wYL?UAXz<`!dW1Xuk8hZ`bIsm?dpYj2 zIVX~WtJ;Z25*=ZTZm$|Y)n#g<*4Y2v`ks;H<@{SDqz+GTI8}Ju#O+zXMO{CP`7(I# z0#W>`tgMrTXT?N{52N-?qFD~A;eO^~X!G`-^XL-E-#-ExZ?w>g1FuMa z_Uu_w(l-EI2OeF=+|Y@Z->$$<{Sf(ZFHsriHnL1rB6qL;r)6B2Gw7_C^LotE~aMH6$-4-^#nkKc6h`hpS()3 zy%mIphYufy6N`7^gf2y!$)Psxn^zeWlKgLV~y^PId50Fy8I#n^20<;mY9kXDP zDz7yZS)l|S92zR7R$gA7EbQ0|9BPm>SX^CQeLdu~k<}uRw-vM!dPDTy5FBmDQ@s8B zPT}KI0=xkd+LSDyWA3$RnbfZ|^Xf6&hdC_X zl|ON4!zayaJ&e`0?hH|KYn-sLl~q=8yLZM#2hT@ufH!x6`_U*|Gd#)QxgE$agl^vk zs6z!=LeNBvC?srRqN0Y^d8~%N`1+nS!uFHHD2y_Kk}=@5axYK;sTEQ{l`RN=fl=cO zZ3Y0P+RS#n(vp84Ne(O&0GY0j!{>vRf{N9Q*&1{#pv68KUYt{v*yBQP@t6~J_adO5 z*w~i9c?SJ)lJwdGP%Lcw2>5`uHhI;)90BkWuLt<3kw>rKvLC*hZg>>Bp+?MRW`VtMWbkRe!i(UPby&?d;nCR)1zL#%yipxRZK#TktmoQI9DSTB16d6lTd(1g3D5lTV4gIY%OnE$%$@QgP!6;ENav@8C(&J zP!Fu=fz=O;h;Rln5Yho9_og^^usa}U1R0IT&ylMk&9!AucgN#dQh@HW|lV& zY$thiz|e(n^VSuy$+HBt6y=bk++e9Ve-kok9$rT)>Ee? zA3K?r9GRcprcJJXYTrcGRZUQH-TPrY;VDC=o~_IXfz`WX-yup(>ah;0~Mc*v+64Dz;e9gc9^djMIeji3z^ z${CPWnAZkf6vK_VnHh3I!rKf+u8d`=%%_vl~Seci~VTc_wc_ z&!ISkYGQi2Y3=JPu=4{sdg9OY4$1y{&j;@JsAS&*(5KPS)Ql=7N~g3RdIF8@n*+wg zkbeb50czP4@bHT+XNRluCx5z9NPltQ!IEPz$}RD@dljD(gTlkfDJV1mD+fJLJAilk zJ9{3+qInF>LadvlnwpvrdtfSc^VcFF83#C@wEiNDQ2^ceuX9SYSPwva3O@A{h0G)E zEP%R<0o@52#qJr>SoNo%_4GI_%ah_UE`Xq*qZ&mIm-U71K31X!CerwEA3#VMMm047 zyJRFx1l9?B5XcDFu14Z&_tGBRH%RLJX)YiNxFynh79|2OA_=Az{9ghP2rjG%ATl`$ zA9*?U504#d+7>`z{2p8#oMS+_c-%G;(bkS#6gzwVKcbDSp~1&?Zogat+g(hgHFWyq z1I1sy7SqxBUypl6!)lkOGUB+DHrL#gyPubf0UQosm2^IwmS?^Ry!d4M+eOr}1-eO6 zIpxHX9ur<;Ma(`22Y8V?g|gh`?30;`q@U7%c?M5qB|L>@>YJQiM#vNV^P?`Y-AYL; z7s9I*SvfuTg42@X=#e)>zpR9GYRbY_p+^{;J(g&VIQ)A5HeT&M2fOAX=DnBknEn8z z8Z4}fp7lo)-g>j9igndee|T&x!PLf*MRbKEJjQeMi?D~&@F{idUqjlE+hH#{ zsmd#6_;>B2qusg_W=Ham(RqiT3y-lStbJjEv!-H=+h$?Mw+4|y6ZtmUP zUDuS97h)leL32AhNJ@r|4+z`vtFJVVRVE03wDS+Iu>U=VO=}4g>7JrknLf6(s#(Gl zy?uRetx~V?O?^E_<-LLkra}G(H|N3SDWvv#;5OOKMOY2%x=y{Y;6aE_kOYq%N3A}8 zo*AInSm>OPnK`+%yF(>CQ{~;$ZWeXNfy>*++j9N_r`LDPY4|H+P#j|=L@@(~lSSU% zsW!{3SWQ$^sQC$t@(w(NOq1+#l_;YV_ut3HzftdbzZyj?=2a5$gEh* z9o(jd)LPciTAu0SG6*1ps_)3-gL3VzkR zIQD{i&pPYf`XupmI=~fIri)G1u7+lula+;H7)>uZ8Cf|YrC(Yv--~5FT4ttSK7WPW z%V0wCzK948&H`BdskeDc4DD!Cd+ep#*|2GbN8%y4TzJ?!d-*eSkt5^RqCQ>v)n1%s zVawXk@NT%f#?siIZ+)-O;a^|&=%M~_?6KU2)*e%vy;wxAG1`BYC>Lj~(aO4<|NHR| z?!V@4bsP1gpFXq9bP|+3%Ddm8={o0?C=u8cGOtKkE=okw!9h^aJ-J(1*o&B>8RCs*D7su;5c}XJ)gpD5xv<^7ZM*ZIMiv_ZG(W6$8cr9@B!Q0!qAe zaK)fc0x~GZs=y(t+CbDXWpZsj0lBW#p41RNGCJhmB1;=ROdG zG>l_Y^6o0!xzkm+v=$&EQ_HH zB1Qb{*|T)br7gi30e%BM(rfS5l4abJt#+Q-$;lBqaNIEbdRs2ZFC^0M z^^?X(Hc=_(+X*_=%il+$N0g@ew@Tx#sL^5DI}F$O`i5j5@j6-iI?4>yMgnP&z1)~2 zyJU^lNW9WL+eyo&Z`9##JS+WQV**gCsga6bo?=1@tWOmRH`r=>w?Bh~{6x4!IE~v@ z|6X_M0c)Eg%dp%uJDdyyp_9h1=vf`HndxflN0{ea)7G!oubIS4nyYyr* zM~l$j+E)JJ_wNtUX`S^_lKy3g9qGMY0$|y`;|q`0dS9n>LM4(uw>IN4T7OBh$j+k7 z)PY$+K$(M=A?>P(Jd!YvaM62NGN`{zl0o~Hek_ac)!&OG7f|B4bzp0dw#ZQWp!?E~ z%6o%nOcjeuN)p0z*T)A{w{50*2e>a?8ZQxUb>l|*$Ue^*L$)_ok&8(=2fpbV%In-~ zB&XZqQq5NA4r_@A_6u;|r@Fdm#|DX!DI1Y5a>E;VyEDI+bi8jhS0&8XKngzeGq#IG z2x*Fldbb1L81v}94RD*|kKjUV^-JZ6f|XEplGCVVp?_^xq|U_%`6#kM)X=a7jCkjc zJS(eeDWBD-8#D1as{WQ71A~EXZCs7KO(xU@|8o|QZG`u9$NOD%t52%j9HnE)tP0D? z=Cx~lXCgD6<5F$R!#$6ARutI_T5`cju@L!O+l|0YP#dW_6{zV+5^g7yU^NooT}U{2 zvRD``*(O=TkRiDnjZZNbb0%{m;sxet{i{Xf(WQ|mE{m4S(f3;mt$)cu-`Slm-gKVu zoP0Rv9FuZ%R21>)q3E}7KN^0w8Q7gFDxhmvSb2Y*kWd8AB`>Fz%;=cZMA$lN&|G!T zh6s}d+{9!7;19|K&r6L}1Pq9adg~E*(AJGHc!I1b&?fll<-e6lC4}6sK|vS-xLpoY z=YWD_%no%J>m0=QKfh!uA9UsNWz)H0k?a!VB%-W+^GYi9dptT77>1)nX@Ajr3OgqV zO?#IJvnrAwuMYezWOPv1e*{5J!MK!pOMJ|7^ut@%|1_PHp<(t84wY4R(Ordi3-KyH z{XDzyrl-SEKV9=}_=WiAFV-UZv8(se>NWV56lN5lY$x{5?}VfOy(l>Qi1!RCu{c2k zIiQAIr8sluq5EcfWw@aST4LEA90f}hv%D{4@1KgyisA=G# zZK|$rZrdCS)81P2;Ua!LWKWjAdflske;$kV@k$wua84(}`5kTeoORjWuWLna3qE;L z0L1)_``?N4yGwWY+a|gVu%%apf?Eg&rLk3y%I!386MCI;@}+Nhn_!AkbDUb-wVv4H z2fyWxEoizV)M{O&tDjFNP~`dA@6Zv)0J0nR9i8N#ovekH75iWW>q_M-YHZ^Rw7hP2 z?vN&&!USm??PYsMiV4zm4G8A@xZUTXMPY46ss*cgm*-ptn_s_QcGQaElGQmQHFapr z)CTG>x7aTZnrS7>QZs;kw&ihm^lA`NmCw5()tESB6U7-6f zdm&r=N=ek;ED*8#J;_34XE?znccV3Bem$|Qj7p&+J#ufMfd3KezVwK)%&YXM@+QU->EA=~I{yUU%QQ5L5D+9w?)mxn=zFD6z@6IIe3|XTtrjZ_ zi3%*6USBud&1*Vvc*X9EE5@PkdqY}HMhz4hkO()Se#G7aZtwE3I>{fWofRH_%&Y6ZksQvGiN?AF{_B*h$4w-IUP*CNW)-s3*uavyhHySsQa+mPMz| z-hQS#=7yB*_6jX-pps6_)SF=)h~43TmMzE~32XkON81QOcLS2$b7B%+f3 zg5U^yVj0OfN;`{e$uMO)1bTOe94qgLS*bWmfz~ctSxC=?y_D@0rTJ0>oWb3ZfW0;D zKwwROSYJ4`>+7u=GfL0Os=hj-N!H}rHOs;j6w&AE^f+4st?Xx_koq%7oqH1|9?4PU zy0ZXIDp|l}bv>E3F1J%t8%cZW-5t-4nS0&^(EOA@3$YpKK?ayrW;p^GPyW1eKRC-N zO-(XR$=Eb$DI_+kaWGBEKvbVui!Q$YkIR?EI}AYUa+^C)GEy~woU?vh#1vm6N1qN( zRM$4L1SQ0;qkVbGTn}wMA(6eYmfg0wHr47`5;2mXML@OtahaRYHPE;^RRd#dG1)z2 zV%7D!YXs3yh8$TAiKEpeX~+}@G{wF_Gd;Q4NCcEl^NULi6jDRLdTh6Zt;zp|hN zCx;ll+<<_lXMXeD{L+ZsJ&hX~4omWGZe@@-hcAYpHou1R3`{>9;wNZJHUa zm10kJ8hgPhV4@MohU7IJr!uzJzK)jcO_ssw0dY!SO-VQpT6;Zvp*dxHYFB1YqjlOp zD0KhySm1JQ-D*w%b>UD;sp5YYLog2PpRPm*TfMWE zbK7N8o_}1agcMU)ScTF#b4y9fEqPY4dvP>yXLqx6wE|`v#BFbt5`47qHIYHd$3Mi>#jV!YX|7PN`+fEpSWEDq>YJY# z^F@Lo8D!BI$e2x$!KiycKa2}FFpJiL?53nwcRD|BWWQ1TM17afD9huSS7+P_v+R)lBE#t<7@(o_3?-o-@iB8&Ky5QzS`BUMX-QCQ61EHIN$G? z4l@Mag)rwBcISDnh0lBH+w)~7lQozj0)VIeUFJtmWg1ANa-=MN6iK8&4jXN9KHL?%CIvcH{W2Zh z>Wqazkr4%Fs+>>%nec1h99Cbe@Xlwfl9>(M1_Mszm|Tt7G&`QpdiZOeDJc$UvAU0c zFlrsutFsPvLPP3=SuIM*=z0$n9t+rA`_bBc}K`A|uI{K%|jUaKe-^V-_lh@B*D>rg-G6!#K`+fAdY zkoR@=KC5;#sNLe4#`HehF=H914YUyGH@j_Ee9Xc(rlv8O*twxeoz}$&)rmykxffSA z>8V~9rhE+PSwNwX^E-iuAEUO!^l8_6puqHxVh*NCdiT|b$3|Jqm6mMS#Nq!3K?ZWH;#J|>sTG-fPSgjRT38j|D{Gc;ABE<+=V2*tsAExuOv)|eL zQk<*I7z1Vk9?=;l>#da;ed`^B>vy!oc zw6n;VO+*lIG&!_x78GKIXq^@pr|Nd8~fr#$e2j%uceQ@d|9UU%|f!?d$ z(8xiQF3Qi+hV5-Nx$Tt`m4rZh@9kV5N{nSEc<*vx@fy`mFw#_0tee(MiTt{wAA~^7 zGazc781&-c4wqLrsrZ+r12$JGcD9Y1Cox8j#b9r{TG?I(i5)%>FI1R3n}Nr-w@nCh zNu|2w;{G*f1g~>FKAGv2%oiri?MM8lr#uJ*e#`p^S=nw~*ZLW9y$pNzQTT7a{M%uJ z)<7i_xEYtfXI2UI;@L70kfl?;H@#z(`LCB-%SLGV_ODjYU&ZZT;4r@@#h2Lr6L^9t zN?~F7Vu+Lf`Iq0CRe$@sHM{Ol0IT`EYPt{O`LomXOEu L_)95N`Zt3lv>J*MxU%)l2^nvurs^on-93B^5rDS2!?PBGc3m&k6N z`z?UaypWC$@G8KRo`Oc^$&>XpHOfFjFZR+g?)>1gGOgf{7H-8{Z8=AK1lO(t^90QC z(-=YlB?hX@>wsGaxafOiyjpMxdbzl zV!+rII>i7|R%Rp?)krQcBZyI$AFlKvzhQjt^y!yTQJT`ypUAlLYo!1~@e+Oj=LKk# z1w?m?N>3@!VnB2h66&5}Xf^`o9q^6r?(P6Qum|AelnkJb--Fn-gF|61z_xu=+wgN8 zmeL~?0KE_r8A$NuKfaLTFw1E>|iR`0PKJ>qm;cWs$cvwgXv?QQ- zQ)DwGi@>RF!l>C`DLkuTdOe`!OYmqy*x3MG4{NIA)VEJ)7W_KbAQ#mE(jV|E%my|F+Bl}h6Z~l5iujvr zPoAxT#JZ_H+TXXw0l`V6Gt)H{ z6+7PDI#TKr69{l2btK|_`KIkXb@dCp>gbzD&geI9YRc|^Th|2V$Gv{mkT0Ra#7?)Z zkr0ry;o)kkswj^0oK50wv1j;B|5gbs(A0P#jGoUnayA&An5YgU20%|*8dId1K8?+} zy&KnfUNkheNTdS)HLyT#eCWzI@cMRE(7n?tb>>z8{zXV|a3xtg{<3TtbJ~5a8`W!2 zRz}rjgE4?27a#7Qf_JIe(e*s+flM602eC` z7Fa}MHX6b0!mmluuEtr)T{KQ#D$P=asqHWR)^vfUb{xkVz%F9PWyhpq2cEgwR1FNY+|-B0U5RTJlVk2BKcQx(>)C(8B}K&s;baaG`)l6kfZ@V6U1E zs>be)qHB);rqI~XkProxPgph#y$`y==SWC;oiXKF%n5-R2V^e;727_~)g(tI!O02= z&?tQ5$r=cWMh7Vw8LE|%GoILQ=*e%*W{fed>T5ll4{$J`$~}4V1TK24?93gXe&BmC z_j%KAD+SCl&n4LMOotgn;o{@_`}o9dS9f-X=8>E`7oU`bee`I2Vj{C30yiL$Dm}<{n3irLWUR424=dFPL=NqZ|_)z-F*~CyClQdkl4%J zcGjZPf}&=y|8ju23=^QXwzfcTWo&FLs|u9S-b!~z%DV$P2y`_gc>+LW202?<8Ah*;WvLpE$Y3_ zd+S9GI5R-(0DmbYENr8oY)7J$JY766>?Kfi+cLBSL30=$56IYOZec*6K+9!oQf&wX zh&%&5Jv}4iEX>OoZ$h~HhOq{oFnJ^thMBVB=;#O~!BqfQz|UNhyvYr$fb!RbJ_@R; zm?=FA`=9h2gMsWieCE?lfOYNTNf)oKV0vG7p8SAU#P()BJR&B1-_+DpR20R()>l!= zcI)4Olv_yCi|kP$uqd*sV3>>T1Lz``FF$n?xjgfDA8YY9kI1=p zG5Nreb%*}J`X8TjxxDNUL9pkqZNYs==MR+I?>&Tr!~*L9-~afRqBC>nss95IT2^=b z2QcIx7yECJjsql#B7bwu?hQv4mhS?0BajoK6k`JJa{QmMq<8*=Q?TwPB^vD`aN7y} zV4XEUH!uxZakkIO*e1-= zunA6J-Bbr70yClj|Fj7-6c+W5nP5V|C!%<{s|r1{c`fG}8EoYfczA1wCLqeOq*~|3 z9#Vlr0Rq=!UKn6j zQxNL~Y$_=c(HI&n5e}nU-T)LI_L`;T0{9USwyi000S-HeNbK(J0(%cAEMpUw{^7(M z^_PgU5Q>Eev?}n)#Klkg9R~y-xR*z6_9gG=8>j33%- zPK8@&v1OWP?2i|PnQqB!z4d^cudfG~8|@eo&~Zs2&M^si{v0zR24s;9EBipSsH3JC zW&gXs5ARpHQ>zB+<_|bkhyuX#?{`T>Hyv*rSKRDLFfG*_BjsVW0XtDwSBG@oSOl>$ zkV=5O|ADJLfPp4&v|JRA;^V${Efb#TIdan+i1CWaGrBIY=bZ;d&t%4JoI?wYfNG6j z`B2K6FT`K+#I7Cy^fvJQ^o2cE zW`vheP*5-`SK5<9MWgVdV*U~jMWvhC3rX#q9GgIT&=DU+=MJpAUcmHJK|*6176%Ru zkRCyFi)|o!29y;6$D5K3N>u6Tj2+1c4wjYhhcIcx(iz(63Gty{NtLHeLbEpL-o@>r zBW~!uZV|l{)Qs^Sc4S8e2x)7t0EDrd4_8D|5(33n`S+WJwxRZwr_8uWK}7VAP@++P zjYvk|-S9+6Uwnb;FI>@P~}a zsBC^h1J}<0aR4$7acVLG3Z6R*{h-eR5ydcoegO^%>_+n58!(_|m+KBjj?0g{x~DxP zz6GI~6u6Lt57bgrF9fnQk`WMSR|1O$z}&6lA~k?GouoX0hezkvouz}lqKgKaORVz< zfRA%!VVA$8EWcsi$HmDRia)_*Y>>0%O(PZ62YY#VSUbEaEICq9)DagOTM;!rbL!No z1fN9#e0+@u4~BrX45vqwB?-uFD3Y|2lynH*^e=pBXBU|KlyHDnT%d-m3&;pyA6tg= z4nmDweK4_1dwQ2tu`xO>0G<3+_BcNOk6_FOS*d4hI*N@A2U})$WM-zW2QchVxIc3E zFi1H96xDR;526miYr@^aqM|2OKm!ef$yC{bm;;#4bC3{(goK2KUgh^t`)C;hm1=lM z4n95Iv!$`XwljkXKHz18h(HTgYCpkf5#!>@l;zN}kd(x4c)MtRJ`YI-Q^-JVN#YLJ zFk5L}bu&4YS7xaVT#v0$C{zfe$|F#r-M~MFCg8E8IDi(nNBc;t?B8Yhoe@}L!#sKm z&uN9o&yUYzYXAj9&Y$13D-%T5>efW$4NTpCY(os|W8ZgVHFG^0t%1D;qI!$~HMelv z3U}s|&j6jtdalVibitrM;JbZ&FPxed$IdL`AbPfy*1L{hF}ly?tg2ut?z>F*>;uAIa=P4?qG;hYwrxTw!90`oT#s zQdL#;<;%$nT+%>d`2~3R8wB)>jH)bPRv}LHV-fk&8~>hmdjv*DL$Z>*{rb-Fe<8v^ z0)CTmopY$4>hDyV|L@ff_K!Z01O6U1{S1lXs5vYK_&y)uTWOP9q_MoJmT&sXi-zks zmCc{Lqr+H~-o&1oSa+SkWskwUrJ)q4zCZTT4ifG9$~D6Gttp2uM1R-W`{3K#f|pKY^uUw1(?kh5I}$=wEK9a zdLA@oiN3iv{)!{+a|iknMNDMaY(J8dfq{XKudlPSQ#(r*Egg?ma_Y8h{hxo;n4Ek~v^t*=(;{ZL+kdRGI}6Rx4F-D15g( zQur;B*H!Fq&jOyCC^g&EV3{ELEw?p|Mc8$n<9WJzdRY?ro6a!I5S+#A{QMyBO#nQ- z&SdzU@krQ;w2 z5{gmW1j>rdl1(#YIkI@YdTR+*#h&OZAdh6z*lST%0wQ{#3lKaPydpmrOCo6}WG!QE zA#NDjqmaA5H6BvMKvMvvuYZ=9_%0I2!qsZYl1#)to@UuPR1TxBUcY_~3Vza&9f_u$ zaF>QTK-mFiM?zeb!}$3Qh-qz%F}j*CMQpVkk3~8%n<8IqI;)y8P6H@8y5YH|2@Sx! zDOO*C`>H@>74?*eY#FKx-*p6}9%Fkbql(Zy5G^Qz=%`?IC$i_1co?f^kJribLTgff z@=2o}Xl}S1Bv~RHMh4Sm z$9gZz_b9`bAIchaz}2H!gmEWWO`keEIoJY$jNS49Eb@0^Xrp9gu=MIur2ySKX%j@d zQ|6$gfdGizV~#QyrsT?ad&bBZ=DW?ONcxzj0$ZqV^Cc*Iy+tG>CT2^dejUfmBL3iT z+;8h4Qdt8%5bwhN;W9Npj7gi!?=^=t3$*zf)MgHgUON*YpZV_HyW}iaB-!6yDMRuyuM?p(xreD&qTm31>_Kyz|*dV==M^Uxzr zVGAX|B+EFa%nNXu9vGJFGR+M#i!i3kUd2t=JI^HI)`)AoZJv|dYL)}h`6-#P4&e>p zp@J~M%$1Ei&hvTX_wV0dXxVP`ShH~sbTP;VT6I3%R-?yG%)?c7yb|RpW~0bv(meOvU)WQ&fE^8Va@`Gon+Y|<)f=3|j0+tbkvajd# z%HFL2t34sI{~%cM2vM`q70_J8X#6NED?{cn zRfd_`1XYni1~nHH2S#-O#AJ>hKVDT`-4rbtT>!b}H6|v%9=aLKm_j4ECc9dYEqD9dvpkAYyi9=vk0YofgoZ~7GG~4?*!T`C=iH-iiwCgfD&yyHcGPG&=&%2{4!Jo zw>2;-30VW_%m4NMc-amG!hB>4!y-ELtNCmA|MkMdVK1gI!_k05!v$qCsO>l>;;@~N6)k~;vVO3MybJ`PIjJ|M?mZ#pJP}R|321Iwu|jr@M~2!X1W_ z5ki=PS$wR=qPO*jzr75jh5Z5;)SvMih7@giMygS~YvkynB1v*S9`~WJ7q7|nY07tS zZvMp?KLfb_kI!dV3G*)~4I@XfgF>nJ>@y+D0wc4uvH~rjLJ*=J<4*_5=i~x}D%lNC zv__Nz^)@R6a;s*2Af@i|RT1a)evPyyc{G=df|z>rS=fvHoBx%HO=6{?Urwjgg(4n@ z+s4ZSrs*>HVVIM3TVFr1*sC2TP>J@#h^a3eM#pL;;T-99u!77)PrSJsrH)UJ*<@oO z9=Dym9-uab^kr@L6M_BM3oW%Bn>IAeDbxWJ;xZ02yzubqYHA)ZVbWIoHos}8ltkVz zA@0|`dGn^MYzr_pC7II6k$#}Y3<2^sRGE`Xa!K`&H51Wp1BnvkMG4S7LA`>0OKp$a zU(pb_E}I(Y52ScfVQehupg#2n@+71=lqNx?1HwMU{V)#;BC>b9bV_CX2%NR*sg>$o zj!tNiT?sfz@T@+5`gdYGi4_l9Eeb_XN2ijl`@&|)oj~B7Bj|)>mm%;fTqS&3d=E&g zlzjHm0~M)I(<+i-wgR0lsN(U?eRTh@3wrxsAMJsnOxu&}bJI8blO^XVQZbXFppxSR zQf0{kI#nkTln8Q&U}DrK!Bfb`!2BWSKs1ONBuF?uvB9L}5HLUyEIru;Mw2c(MneRa zD)$INig{yDp34NTD)_Nx%_+}hp~4gWx(^;)Y_gsmpiD#7fF|G6S!iAbd3hS#{<)lg z=5<4tB@Jk1!~GyG%4z_g5~@}v^{xoi*)aE)W8Pl`h5MY6c!)A)od^=Z#LGh6okO~D zNUwoPV0+;<%M8gyU?Ikff}(rw1n5mj*`lr_M@2-`L$m_};oQw+E5%+b!fY(egNM;t>e^-xqUfou z!U^3S&@1 z$}NC13%fkXFS82TUaiv@DfZl%lC=RHzgee~tHJ&!k*D(J#Zm7IQ3nx_7#afa8!bd7 z5u1&pBLRYm7oN$!g6A1M58t?`$bXTk`CxNGsq|(-p@M!3kgGvMWCmuLzYBUiMj2#U z!>dBU@7Pvdodh@2=7s;z57Vv5-enFeC|Cp8Kox2y#(2;-X?q0P0nl~9sy?Sf`# zszJjNw4z}CXD|mSdz{MWJWxe}akcAW!0zFU?ZZ>_)=!FKPR`@?w?@8E;lX-SC9ZVb? zt8lE>R#rgiS>XLF-H}(6w3Si!Q&e(j=B=Th+iQ;WBMWCYx{MY%F9z+E2M-34>UsvJ|{>zd#BMSN*3y z$K>$pUtZK7J$gkH&ttLotaECzRYm32M#}~5oFx%ZXoI+A-=!SrfMD2IKF{8STx63Ecy zS&Q4JKnWq|)-!wxdW*v)Fz!-m@kMo#H++nO*Y6ZwX6^OMC-@V&ctLxO_(T13FfjuXn4@E1*n;lxgZH`0kCFsi;O63>)&Rw6s0pwS zBEf4whNh)82s1E2ejw@*Onf_f?AUjSKd-vD6>5gR_@HMj<)?c$=@}T*vUO|0<&W~7 zySDg0Y^Y~l9U5SzMMVL=-rt#_#WHyH$txwDgI)A{tx^5Uf-tFeFA**G3vj2;pM$x8 zQR6m%R4K;3s~P#t;>4A|Yt~qvsUUgy+>GSmV8oZoN)^D%$bcH3o>t6*(RR|^MCr4C z7r()5xMy7mijWA%-c{0d|M5yp_v8SHBz#iKBTJY~o&Y62Sr(KwIyUxAPT23~RbWtD z@^8tR%Wtwo!-#fy`Ev=E59VK(G{+v>*;fJB9%Ghz#wpzXBPy-9T%WG2`ufeAu9(}{ zoAV%smk$c*^GEZCBxE3TgAaVyl8M8X0Aq75^YFZNQFzKCLjT*Tf3pE)w4}tuVX?DG z-}c}1Z;Jz6VJ+KdWpqJ5G>hiuvwx}u`H+_4+{VcNWKZ9}@g#o`1u0!L4KcKi--CKh1D{)q46J?`AWk2VGpq1JJxsVoV6t1dTu6 z;=sccmn{xUc}nl!CB?#p5x{c6YaDksCa9^Y0U2XH6%SewTps%vq{*9MI=Ti11f`fn?9oJU$gpi%4j=%N@P6W+Q1(_e&sIbmxa9AzOb|0UaVKDgv zTGKGrUE6j{CL))d>y}P-U!XDVO+DNLxvZZxena14)@m--ZTmZSj;77`73M&Q`uX$c zS-S#2YJKj}yO&~nVsmg6<+?KmUDCf0hs~r8t6NH7dF}eF?!gcukTAqdbuYzqM4=s1 zT3QN%^H8nj8>^|U#XWIiINZ4Z6E0ccSk$%d{benu{ly}F`2mEy`3LBTKsOf#=d44` zc5Lg;vjc?W&1-4}<`7G{!su*O)gA!j)PuU&exnBq>$~(LDB? z{vezelm`;hz*vJ#BJUrPV}C18tY0SWlY_GLWEtcD^>uZGb7oI}JHkIdh!uMG&;jyU zAt?gTT?=&berTA?^8O5&{;m)<=bmr{oLg+fA9Qp^Ak3IOA^w{>+Fz(lBxbJ69jO1` zy(CJb!;>LgRT|;;Q6em@o zqpZJ`AKMV~RC}?tF{1uCiCF&mg;oEfnIALoE2o}*N*1-!U8d)wXA9$5iG~a?BqWL? zi&1U03<_p1%lfz<@;KJO?;}?ks_zFqS{(I+?gUEfERNpds1Yjc#=V$O8n--4h8RJ&2!{2x z!!Z>D=2&<;)6x;lIKHXpka0@iWWq!ct7)j~XOnT(>;`Wh4|{QyaA&Ey@Tn9N!BxjD z6YR{%pI6>YS#m;`<}eY`8rK{`_5WYIuJJ|vm%2K!?#X9BfYOLPc+6wpmQOkPHQn~p zz(-`Nf_sZ=IYG~+P!_m>~}Xv2q@^~ z5UsQy-f-(>@rDkKv$GOXdR(wjLLiE}_?@@c>CUaPlsVV=eRq;BrEZgaUjKzTuZfD@ ziy(BTY0poXU1|?j+?pud);^1B%svwAR}@OGIac$km8FC|N`Mjyv7m4a zQ_4D170847Qw!y?T_VmB&rb?y)q(c@pxsXAkVyi^?Nlo1JdZ6Qhh{rSEQJwbx+ufY?-+J&)RDX zcm3YNoNjVJU*uP~>MFWVZl%Z>tWGwob*zV$Er)TKg~0vFU&)W;RpfnaR$3&xVv>@_t9*gG z@0CEKEuu*NJH5-6z~ZMPE=!B~R08TD(Peh4v&W2#-v7AUu6sMh4)b}2R!Uo|Vaswi zySvAq_>)XsVz&wBoUcJS#+vowqoR5$Ux@WG9jvYV^|{^xl8!Wzs%f=+XHZDzcYpfy z$Pp8}nblCYJ>(mz#U7Kwpi(FJ>GwvvOhk?`sSQZnYkyDPQ!roQw0dD|B1sRM>8J(r zJ#j)NOYt?h9j%~=paB9F#KhS?bs{#xyc(HaTayPpTzi`GtTRw=0V3>W9r_jh7oZo$RH;4^=fjmSXz) zfNd5JPpU<#oywJ~Ty656uBGLDndSgfIqHEn*Zf68120Z9M}zmOuDG}&g@t$^gy-O@ z*Np!lJmW)KN3UY{2P*;&JCT8oy#&6(#j`zEgKRq{<$|Sf$IP5W1lY?fm|BFnkKMd~ zU!!}kGYJnSGOG7nX5wH`b(~S4&5bX^xou17>VM%wv0;kqlUqurogb)o&OHd{=!_`9 z|K`^8ASb-vr1=vt_LfSrNs_ex~yDe9vofF;msy8lylJC}PuM0=h&2SMBy1Gy|af_TtUV`Phoju1D$CqdrJaZ&6 zaMx*Jh)z|x&&eXGIWEU6N={|A@yf@-R9zafS8-Wl=-hNbVvPE6?g|ILAk-pfH>9=b zw7-`ec^ZrcEYGZ0Np>XB*yE)TsPq~bNHNoL-JK~8X6OVMw9(SbV|XE7rEoU6V$GMe zQd@ic*W&Xk#~XMj0|DUv3i5Oq5W(Th#+E}qlSuIZ%=9Vahta_+Up`v7&Aq+$&{(k} zF#Q9Cg|VQTLzkR4C9%H4TK|}*=T(6{zG!00Y<#i_C1Ny|qLVGE;C;Hr2qilrB~no} z$mIfe3?e$!P4xc!z0H_gUS)6`ojaGOtU>nZx{(2WbMq<1i~(8`UE!_Rmb8VV!Km48 zyg6hBa>T2bk>~hvm)%yWLyDcs)}jP5Gc-&sxACc%<8<{uJx*G;qk)y!(Rr!>dg;dK zCEQ+{{z-+4Y!BUQ=;27i1}>5acQV=y>Yvo{*Y~8#wi@9?u`M)!)%e~3n@pUJH%(62 zd2>p?)CV(f;QKc16nAjtoch!7)<$t%d)_p|JN{M7t{<~6@NZgIJfl0eB%jo7rmO2> z{E8yM`LE}mXS~t8&d{qOgU@AA2(!rzKcFdFvd8$B2|X=Zq%N)spPvz7IH{QA^wO;5 ztVes^k(1G??`|>8cE0b0B(9z_Fc6B@?Rg^-XafdzWn-9(C}4MRF>_xk~o4r8SKh`(RCVz9xC_E}7m=F2tdlyPiRvtUAOTZUIoeUj#AK@EW7V>h#! zH9apaQpD%RocXPOFo}YL3@%T41ZgJA0%>*vTasWN=#w?8pAUI`a{#CbeK}3Leuq8L zo2$J~=lZFV)e0zQq~q?Ma>Y?=`7Y6o8$iJjnwNQ^Bz#`=2Z;88i=q+iT*&xbSI zWJr*tG~Ss!FR<;luAiYvusfqgwGc--#w&#Os1cu)-P(qVe2ha(iraGY6E=g=m7O*0 zAPQxeoqgZYHB}C8p3Y@mwy>7I=g>1SB=3k<6FOLS6jiA7G?A-fQ#tcJ-xF7Jf|U$k z87y7bx;Lx>&QuxQPB)mJjqr2&+LeG%HIiAi8ujRLN!_LUypV`mzGsI%r=?Xa@5LP1E6J&*|x)g593W>h7;uAC9CAGd5o2i<2mZC zqH2M;nBcD6EG>`Ya%hEDoxN1|rJnE>VpY%kou@grlJ^6j5A;Ae95tMk-a%z@(^?f9%i|@_`^;KHhE`6yy ziHXC$M9#(zTzQ!+dApih?gXnzqIuTBT8(V299 z#P-uLPHLYUslla~iYu8~K0n~RghtM7&hJH0aW5tmS`R8vGBa2df6sV!N=~`|yAM9; z!a1i9o#ja=Q<2MeR|E@Je^M@S)QP(*q1^xZMv^M0kqpONkL^ph>MOlzJ388x-cmCi zr(EVs2ok(Ln*U#gU1?NOX&5dmElaE6WaJo@nCWOjYMUELU?`!DOK4gyD7n!Bk{K?g zQkj;TO+qe}C64B<$e?1mWh%miOSyz;MVbqx=CyK}>vGPV`8EIVx%d5^`+VOy-@81| z!ohlXZhlHMweP0B^82e*cc3-U>2@ z6u$6$JDrc&^jMD!@#i6OBsXyb_@|FJdVVCxxR={cH0mRQ1v5I&?yUrbWX?{SsW{=f zFCY@8^8rhSEJG-Y8LgK{9O(8^uy2@RsHdy@<+PWHzSAxW1+n`V8%hpEpHNL&r)9?y z##~S>#nCvD4{@T$vn zgW*lRd}D0gr|Q>=U=1gwy`xB2YY#7LnY1lWh_5Mu#S?Fw+}lY0DXb0u0{VnQAZ;BT z`#zhex@PtXlZ^=7y`Ww~r_bjD4ZptWG@UrerOKczZ26_JKlp*1TKC(HYHDQ($5duk z$I3dnT)K%_wmR$RX5G;FH1UX258ib4l%u1u;1QADvOZQ&iJEw341p?*V8tXp}R1}fvy%(Ojlv^ao3 zNd~Wns;Uv30;AL|xpy8tLg+yVIw(-w^Kn;yLmctqh#!xV)f8f2RlhEojTCvQ`HP&i zh#|pM`CDKIzufzoKnPN*GeDCE;`Yo5g)^W~dt7?D9JF4p>+MAWV-}{75xCi0ulczH z{_cbEMi#S2fBQzKP0#|?`YG;5BGFCS>6sOkVz9xb;$!#22WEgjWwfoX?s1vAK*E^l zw4Q^Lkg1w?H*vjhw@wwP!opHGn9tG>B7QtI)Ilftb-Ov%L!~*az+*l_E}iXGJ~qp_ zw5sRi8CdoSk;bahmulkDF?4JWGUa_Sli3^iC4C3zdtF`K|1xP~8I_oyPdOu=0_|+t zMn?KbB$NX#7{T>@lYXD!9~5@&BBn6c$0jvU*?)ubH$Xm*)-!393+z?OTMuz9%kuBh zJ+_Gp`9Zw)Pt^Ml)jJCdM~8-JC_@kVp_j*uf_9&-++R%}Ue9D=P3%sc5-fl{H&;_p z@ndEtjMtm@x0{jCxXLZftg5>JkN51pZMbhivhy-KwMijM^pv%_>E&I*<5Ccj{c|Kp zPYrUJn`~yb3(RsR!m+Isi)|S0bY{%AX|0*PeOts0)Ng4aIw~AFvwq)dlPI&0>XHEG zP;5iD1>-a^L2jaCk%TieS1q{`s-Zpqio6W3Dru3mK0E31N{6us$6ZqFx0}Bf6v&Y)rd$jdSF>)Df^CkC^QPsFQ=&*Q{Yqe%>PtrxC8+>UVH=N0&CgtppNL z0$}vb5{+9b5K-!Oe3i%+Kf~UZTxX^HH$cjPWnH|l(JBurub)}gPv zSqt_zBN# "Fleet API": Call register endpoint with CSR +"Fleet API" -> "Fleet API": Process CSR\n(this will take some time) +"Fleet API" -> Partner: Email notification +Partner -> Partner: Setup fleet-telemetry server + +== For each user == + +Partner -> Customer: Share the add virtual key to vehicle link\nhttps://tesla.com/_ak/your-domain.com +Customer -> Vehicle: Click link, add virtual key to vehicle +note over Partner: Prerequisites:\n- Virtual key on vehicle\n- Firmware version > 2023.20\n- Not a pre-2021 Model S or X +Partner -> "Fleet API": Configure vehicle request +"Fleet API" -> Vehicle: Configures vehicle for streaming + +== Once vehicle is configured == + +group mTLS Websocket +Vehicle -> "Fleet Telemetry Server": Data +end +"Fleet Telemetry Server" -> "Data Broker": Data + +@enduml