From 3c44e82b65a8eb540f06901b8f7d1b13c964455f Mon Sep 17 00:00:00 2001 From: William Petit Date: Mon, 6 Jan 2020 11:07:33 +0100 Subject: [PATCH] Update sequence diagrams - Use PlantUML - Update README --- .gitignore | 3 +- README.md | 8 ++--- doc/sequence-diagram/advertise.plantuml | 15 ++++++++++ doc/sequence-diagram/advertise.png | Bin 0 -> 24237 bytes doc/sequence-diagram/advertise.seq | 2 -- doc/sequence-diagram/advertise.svg | 36 ----------------------- doc/sequence-diagram/ping.plantuml | 17 +++++++++++ doc/sequence-diagram/ping.png | Bin 0 -> 19854 bytes doc/sequence-diagram/ping.seq | 2 -- doc/sequence-diagram/ping.svg | 36 ----------------------- doc/sequence-diagram/update.plantuml | 19 ++++++++++++ doc/sequence-diagram/update.png | Bin 0 -> 25391 bytes doc/sequence-diagram/update.seq | 2 -- doc/sequence-diagram/update.svg | 37 ------------------------ 14 files changed, 56 insertions(+), 121 deletions(-) create mode 100644 doc/sequence-diagram/advertise.plantuml create mode 100644 doc/sequence-diagram/advertise.png delete mode 100644 doc/sequence-diagram/advertise.seq delete mode 100644 doc/sequence-diagram/advertise.svg create mode 100644 doc/sequence-diagram/ping.plantuml create mode 100644 doc/sequence-diagram/ping.png delete mode 100644 doc/sequence-diagram/ping.seq delete mode 100644 doc/sequence-diagram/ping.svg create mode 100644 doc/sequence-diagram/update.plantuml create mode 100644 doc/sequence-diagram/update.png delete mode 100644 doc/sequence-diagram/update.seq delete mode 100644 doc/sequence-diagram/update.svg diff --git a/.gitignore b/.gitignore index 12f8f3a..a15e297 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ /vendor /bin /testdata -/release \ No newline at end of file +/release +/out \ No newline at end of file diff --git a/README.md b/README.md index 53d7113..041086a 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,15 @@ Librairie implémentant un protocole d'authentification par "appairage" d'un ser ### Annonce du client -![advertise](./doc/sequence-diagram/advertise.svg) +![advertise](./doc/sequence-diagram/advertise.png) ### Mise à jour des attributs -![update](./doc/sequence-diagram/update.svg) +![update](./doc/sequence-diagram/update.png) ### Ping -![ping](./doc/sequence-diagram/ping.svg) - -**Statut** Instable +![ping](./doc/sequence-diagram/ping.png) ## Licence diff --git a/doc/sequence-diagram/advertise.plantuml b/doc/sequence-diagram/advertise.plantuml new file mode 100644 index 0000000..87d7282 --- /dev/null +++ b/doc/sequence-diagram/advertise.plantuml @@ -0,0 +1,15 @@ +@startuml +Client -> Server: POST /advertise\nX-Server-Token: \n\n{"Attributes": , "PublicKey": } +Server -> Server: Validate server token +alt Success + Server -> Server: Create peer with public key and attributes + Server -> Server: Update last contact for peer ID + Server -> Client: 201 Created +else Invalid server token + Server -> Client: 401 Unauthorized +else Malformed advertising request + Server -> Client: 400 Bad request +else Unexpected error + Server -> Client: 500 Server error +end +@enduml \ No newline at end of file diff --git a/doc/sequence-diagram/advertise.png b/doc/sequence-diagram/advertise.png new file mode 100644 index 0000000000000000000000000000000000000000..009ab91b63d68bd8fc0b1a328bf8ca58f1e6a9b1 GIT binary patch literal 24237 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 literal 0 HcmV?d00001 diff --git a/doc/sequence-diagram/advertise.seq b/doc/sequence-diagram/advertise.seq deleted file mode 100644 index 1f276b5..0000000 --- a/doc/sequence-diagram/advertise.seq +++ /dev/null @@ -1,2 +0,0 @@ -Client -> Server: POST /advertise\nX-Server-Token: \n\n{"Attributes": , "PublicKey": } -Server -> Client: 201 Created \ No newline at end of file diff --git a/doc/sequence-diagram/advertise.svg b/doc/sequence-diagram/advertise.svg deleted file mode 100644 index afc422e..0000000 --- a/doc/sequence-diagram/advertise.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - -Client - -Client - - -Server - -Server - -POST /advertise -X-Server-Token: <JWT_TOKEN> -{"Attributes": <PEER_ATTRIBUTES>, "PublicKey": <PUBLIC_KEY> } - - - -201 Created - - - diff --git a/doc/sequence-diagram/ping.plantuml b/doc/sequence-diagram/ping.plantuml new file mode 100644 index 0000000..51175d8 --- /dev/null +++ b/doc/sequence-diagram/ping.plantuml @@ -0,0 +1,17 @@ +@startuml +Client -> Server: POST /ping\nX-Server-Token: \nX-Client-Token: +Server -> Server: Validate client/server tokens +alt Success + Server -> Server: Update last contact for peer ID + Server -> Client: 204 No Content +else Invalid client or server token + Server -> Client: 400 Bad request +else Peer not found + Server -> Client: 401 Unauthorized +else Peer rejected + Server -> Client: 403 Forbidden +else Unexpected error + Server -> Client: 500 Server error +end + +@enduml \ No newline at end of file diff --git a/doc/sequence-diagram/ping.png b/doc/sequence-diagram/ping.png new file mode 100644 index 0000000000000000000000000000000000000000..1169e947303aa63655cec829b209b8f5af77903a GIT binary patch literal 19854 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 literal 0 HcmV?d00001 diff --git a/doc/sequence-diagram/ping.seq b/doc/sequence-diagram/ping.seq deleted file mode 100644 index facd0d3..0000000 --- a/doc/sequence-diagram/ping.seq +++ /dev/null @@ -1,2 +0,0 @@ -Client -> Server: POST /ping\nX-Server-Token: \nX-Client-Token: -Server -> Client: 204 No Content \ No newline at end of file diff --git a/doc/sequence-diagram/ping.svg b/doc/sequence-diagram/ping.svg deleted file mode 100644 index c8de985..0000000 --- a/doc/sequence-diagram/ping.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - -Client - -Client - - -Server - -Server - -POST /ping -X-Server-Token: <JWT_TOKEN> -X-Client-Token: <JWT_TOKEN> - - - -204 No Content - - - diff --git a/doc/sequence-diagram/update.plantuml b/doc/sequence-diagram/update.plantuml new file mode 100644 index 0000000..8879788 --- /dev/null +++ b/doc/sequence-diagram/update.plantuml @@ -0,0 +1,19 @@ +@startuml +Client -> Server: POST /update\nX-Server-Token: \nX-Client-Token: \n\n{"Attributes": } +Server -> Server: Validate client/server tokens +alt Success + Server -> Server: Save attributes + Server -> Server: Update last contact for peer ID + Server -> Client: 204 No Content +else Invalid client or server token + Server -> Client: 400 Bad request +else Malformed update request + Server -> Client: 400 Bad request +else Peer not found + Server -> Client: 401 Unauthorized +else Peer rejected + Server -> Client: 403 Forbidden +else Unexpected error + Server -> Client: 500 Server error +end +@enduml diff --git a/doc/sequence-diagram/update.png b/doc/sequence-diagram/update.png new file mode 100644 index 0000000000000000000000000000000000000000..6adb54d89b8ff5a653428dbef513c88b729f10f6 GIT binary patch literal 25391 zcmb5W2RPMzA3uIX1GkclG7CrMAt56(`Jp!T;)K zPQbsIIr5IfA8bxCI!+I4?c5%jK6FCJncA2-7(1DoT)yvi+1$y=PMDk9?vb&Lle6_B z)B{`V^E^Vda0NmOO&zCy{vCk_mvMa^6QyT6B0(B3sXZnBd?WhitD&>f_q15`l}^_B zzEAOb=1=L7JQ{CMK^0y6-Dj2hmZWvIrnt^X;%1`I+r+Es+5Ha_wB>J@HS-H{JyTy% zKgE++PdJufAj@C97NO#{$~;B9ftVl>XKpjupbgiPDXc%z_53zzJEDs&<)t17%TxJm zSNiB`%cJhNtHxt{>Q~ZtO@E*4xZ6YB>-V#YouXnPncaVm`u@v|tRHwkwli-jZJ*iF zp0_I6HI{15?tMX&Z;@ln#r&iD`>CqQLWf?2XW6L-cn0Vp$AEkJq^CTM>ct+OT5`Db zJ6@~9Ipx;%7dr#V!frBrW!FkyN$#GS-#Ef5g|cB;WqEH_cDnP-_b;eQ71_Qrs3Q}9 zkh9M41Ai+(zmStd_NK36ctIupN!IiigF_V^o*zZOzdy5Uauk%u-1pi+G(z?sGKBD~ z;ebok!vX6F*UdH>=k0gY!Rg7n<;wT3 zDDY3yJe!Pev_>#Bc5uYio244&X?Zm{rv7prdZR3VZm@r-UnbJod= z6@_;PqnwtnTkcXy_{e&nm@K+RVe#$KH3Z_`I|XS;P1lhhiG(`jauY|UFV1AWc3{Jh z;a`mSntHEW`W_=a;n(|0PNHA5jMks+Y(GBFWObkH2D3kbv#Cp1$hy=ESCa>SvGlk~ z@U1-cmAyoM<_zA982SE@)a-JZ%fpH|Kac99prFi(jEag1vmCL5rSEYoKM7#*b%z@Y z;{Ft#M25}Aoa;1Nn(_%dm%H}R?^m*(=V1?>#0@(_FTQiz)T0eYAvNWJH)x7ak56qz ztRO1F&_&{&N42}34c54S`)&8QNqAJIwRs=E$dS-XDIuZ2rM4zD`t!og_@G}yDQZL}{ zxpdd=eSz*ER$ib>bbchWOXF7HUwdsvvHSuV_NGxU-!_HOSXhp9jf~vye4UL%&fgVd zaH8){*S~MlpZV^GUJB~+hQ;KEt52scii(P&(S7mpZDZ`wrSEyX*1lR%Xv?`EL~D^u zvNsP7wv%#J$cT>Q!f6$ca&x)Is}pZp^kT~_5jfWla z&#?qf_L#ruZ!SzVR4E#f9TorH3vcNVy|sujdPB-^Bv3{vBk<%2cTTl%1^xmd>KdPC zPVpAafB|ESdwNEr3KWOs#NajR>Pk3Yi}=iER89KS&PS5Exsyk z>ifc339177NDm^S&K$wovlw5SZ)As)wSJ>XUSDL!RXxlXp5taY7zU);X)%}DiPGtG zca?z@gICGigqP==(ell%?-gk-wqA$n_%H>g22#cq<>kQ@NsooEI66CL5FE_cQI`l4 z!)Q#Pvh%8@mPPM>tNZ%=xqo1wW=OZ{>z%a#Dp}(4ncRZMdOELG#%b=}b~vo{D^N{3 z92#^{%0*q`HR+}@s&6&GgU@DAi!?O+yuIqP)S39w*;(6WT=<&Rmzmv7qn@vQhwax@ z)YYvP#4&Hbz$Z)gsPrGN+nGy1kBz3c8UG|(T5`Be;zLv7Tsdvx+^)A9`uoB^fBrnaaA4BWucb3^pETGs5}`3G&Ix)% z_jwp>6ahl`gfF@~03jiVNY<-leqcrW_hUHpg2I80uVnDcju3ufrHOfF&m6y^_+**X z3Eyyd(CNy*E`@s@{8X$&y%C-r%B5OK#9ufAm%+V!3xV0%GkWys(OgHub{lt%9d~+W zrfM8-x)E{oPM6Q&=c=u>Z=b_xZk(kP?r&~xo|y1%e13_F+i+&EQLbgtST-;;6nz>? zP=ts0grsw~OiD^R`kq_R`9?H>>u{@2_0F9;>gwtNT%K#Sr;Fv|ehm2f`Zk18O+wqK zt~O+O+0fMF;pUbt_RMGJTTn_$%JDt%VMt|UWMX4uIS+!w_rG=An4H0k6`8iZ7IM^y zuRBkq%tv3JsgmfvzhmEUe~b}%|G|Txzb;8F->vp^yLAh{Ewdh;%*n~g`fj+~@v8RW zmpr{ISFS|cT3QNw?K%Bww{959%FebJEw%3K?3|mMBc|lc%Fl1iq(mSvSs~5QOg?-* zYhP=9@$hv<8XM<26Gir;ip{O8+IlrIl;VUO=in1qSy>G@D?E7cHaJ+p&8-}ZPP=X4 zO&mQ`;mpx?wW@Ic}D+~L$MmbbXh+P<;9-PO{<#=*hF zoo`r0our$1!f_QkBT=N@mGYj_z4D#)FUT7H%VM1mFkf*(nneLLsFib6fyEoLRd*zxi6_vncG9PV56Wn?cz zt*xzfB-|+bPS$A>efdElA980`f48`pPh4Ew(b2J#n^`LTC(Wfx>)f6S%w(RH-^dVO zqe`EnXI}AJ#ZGw=w#Zt1+t}DRJoufv5LNh~$@}+m*=rh0OG}-K_wQehb?X+JWAlqEm5-OFT9d@Q;_siu$H$kGYkKwSB1)W{y|umlxeo(X)%UqMS-q{T zEhQC|#>_jJpTMKGeOzVv*TdaKY^<_z2OGthx@xe`_l}&LYs3PdhhQ&>8+Cz=bvP=QJZaAu6%|z zUutM*`10k;SVxDnogEJ*KR5S7QPFL$OlifCn{2*DG_#|_!&OIzzZI>fTUFoOEQkM^ zbS^=WQSfk1iI0y57%lq%6zBBN^0Vc3}PqN#+p`*%M) z^x9u}MTO9=VHKEi>9S6CV{a+vDQmobnZKK_QA&Q;1B8r`i*8p?05|nqqy{ z)7MACb5G*#-AiReVVT7St?H%*6sI+!^mTMz<>hgO#YBIdLgWv@eeu|RmH0(R6}h}J zS(8L=1(UeEtZcTI^L(Q?&)?r)+t96{z5UV3ShRN@^u`I44gAg*-HO5NV53nnqovYN& z*S}l(C@wucJt>KSt|cdjJv|KCLGgzV53X*&x=y=nd$9LYRrigQte?nsCGQAUdS3xg zb7yCLIy^jlFyBA}Y5rh$zAI^aYilO{s`jhLk5?zEoU$yo7cc8qxtDObsJB<)W7E7+ z*4?)jdYo7~Ymy6|HLG?IAG{VJ5rt*KseJw%iAe;#Xe!?UU=|(^g&1coTBY5|fHc>q zzt!d0f3;jqQj?B~k8h=*9JVnwzT!giBDL_&sKoD|2iucnBh4`!+TPGUqF?bC*TH^z zm0oH)+4(xB3SFN>E)l@i@kWY8JGk4E5Zz5vWzom7Uh1_y?m{j(MSmLMG=ePnxY1g3 z__ILN<5#mNy`uRko%PJQ0PoJk-u)K6kVj`3#FT<>1)a6;!oOp0kRBGP7yVn^eWmGp z_CBV@viX4wKKnhNKfg^$F|L1hzIb6}MP(zy z?!}Rw**_!5aI_N?5O8u^q$8&usj5qFrjSWZh0<4}#;CE%;$2!6qazR|zjy}Gt&XX0 zYC26op!W3C3RFj*gP()!`OQb!ZYfEQ7#jEL{f##J=|=Us(b3;~KbI`?a!vK4Fqm!V zzNPoA8KfLf4SVsMzsuFTHP z4xNo!$RVw_L~Q3PzHorq=4~h0$pRzs28PQ1A>0jpCGvq8>ksrf+)T=;^ru6GNbh#Z zWQ?aJ%5dNGkk%^vrW13xs ze)CKWYTT<35?a9*G8TEA7#`L~=|q)3pP!kVz|&8qz)}=lNV(iqS9hWbj}8xZuDSfJ zTc15vtG0X5+~3ro+#)atl50FXJL9X~O-H3~N0Qk2eYj5H>M()98H5u70^_9h4~(n$ z-06}|%#9@?K=`67%Fq>cf@d+fQhrt@Zys~gVplnD^5}4zl9KY^_xASsx)6XGJ(5XA z{;w8DS6%2(3K&^<;#jrUXk%kwV4BDFik7CPC$!%mP1+-)$nR&ZU3FV7+|0u@)sFK? z4w?tMNGM3&OL=AWK|-jMFMX1H#DZ(ZWHL9KWH$=wkwaoOu;5;0cT4m1Seo*QE7RSNbGJerZ2h$6bX0*9YWWu23WyrQSJy zhFj+|(}tv`Lc;VLmir_nxt}d z8b&Ph@?3k|bt#lOR46`8^%BeRrhv>CxD$AC^696UF*tOcOo1Co=$a$P|KMH(jr0Eu zWRocg{lVb>0Cbpo1WY9S`h*;L!X|f&%u~6r6lBNqo=lAQFUSthgP(3^%)Qq0#}9AS z`vu6|#6w7QIkv#iFE1~{bdFymdV=rYv?I^ll2OQ7BC{TQ>tw{28zjjz^3iS6dv}(q+_OCMduhC_g@usy zNbzWyZCQmy1JfkhRJt^4h#Ay|k;*|MA5m^@)tTltEskQLayp-#wQr4KG(l(SEKN+L zucEF$Y{$B;r+#lr5_=5=EcqOJBQ>n&Z(lexPKdvB-*|E5me}FWgS{@c%+r-KwSK1= zpjtb2iDnK3?(gq|K;ZoA$MBT36@Str^7H4f*^FWDG^wS_RSy(a4{)&u25b6AO4i2n zTQx>76i6OSiO`dhzIR=}&wJO)t4fI_G$LYqW8*$|7&U)LxB#8w`mLU^vFFbyKOqxk zb2Y*v7{oI!++JVb?$6eED;JSb|LWQUl_aq|*T?U$%?^MA7MP<4y1F95!qRIaJEJk& zMibrLm-G3`EiIaXAS8VF@S(hX_vuOEoZQ^Ihvkm*H*eltC>|UiKLGS0^_!8GzJ~|% z;>B7kN5Lzot%)Mrxdqj?D}eQ!FVRP1NMmAR`gPY`eb_H76AxjaO)W6e!=%%3}5LIePv2bx~0faFut4Rq;4* z)>GX-FaXH9Bc314h0!l}FdZ&3H8~?LUISWNaZZk+2_pUa0v`S;^Tnv%-dgwt(RJVuy z&+l3dyjzm#Wv|4FttZaIf-e3p^@H8b)AOTzT&2sZ?%lgR7nLpcR4u5Rv}o@*I6B5u zd;|VjlgRbZ1dGLH&63@?QTF4beNjl8`fLxW)*U;iJ*BwqoHDTQaYa<%%c&Yi`K zbF_jI4B8#}PPL%XS;%4d`1m{lMScz>xxjX7+|b5Jr_3fXWf-mgcJMDpS8 zjERZK`vEf1`P9puoW13i9t zZ}h2(hcSqYUAw0KfvI3crvNLH9)$VDar5Tur`Jo(@7+@~GU_S_o8VsY&85KDscqfL zj~Dl;)_)~qPblMGY~fC|P?hW=ZEvub+}orz!*~%_89VI>C8sl*$3OjWdgZg%E`B#Q z!CYNGt+^ zoDKl8ZLW8RqTfC&HFXgnLi~ao@eL&VTtwON;+az`E8erM6he!_A|h7PWU_8@`jl75;)vnaHLu1-&1xO7RuPew&W<=(x^+J^Zf3k&AinuJ|^&bdfQd!{-`@0beCEPN#k>6BlRzLEGA-AoqZRtfC8j<_; z&upuAGg1RK=ey1U4QUFeqsG>^wJm*mf}eIPgni+_pvZ)9nb;#Z{5qYr@Z5-}+GrZC zdz%Nq>h4~?_U6r-kik%#?gVdh(<1IvriN>NP#aeW*8fyClr}vb9ZrLaXpwWus;Zgl z?L$MaRD!lwC%HAPH8eDol%6Lf(8Q$8A+KKjuwP$a4`jYas3a&zPEk>DG+d6+M$M(# zzh)0(IWHYyadJ7Gv&LWLg>GcQ+ylys#GG_>-Vpc3ZZn7Ljb^CAd7S- zOOku_>eYDeZuIuvE}1y7_pJA{7U~1bs-&S*>vYAb=aLB2q9-jK-O4vspq4u`fw80AGaFMl*F^ zNnALhPGpWp*KFv%;JZgAt|Tc374DAOU>(Du)8?vUlSEM)VL}V|7oSCIK?wPRboKB> zsX2T*)xfAg$!(7k8fluZ+xn^Hve5&C6-52y9CWxx&Eb&;O#L!mJ<(;kw;%?XZr!-iSKHt$y6>OqB^8(V{RIMndN_HaBO*4FE!O zcBI6r>*l7ChQ#EuitjYx@!i8VC(7W*~tpe%rBc4sLfH1zE)5TI_{ z`-Je;)YjFtw6<0j%6Z3OcBXtzo%9kVrL5d10H$R6N-Y#X+ZaxrrM*Z;m$#BaI%0&K z@%gL;gz@soc_;|cAf0f*X5QYeITA%j&r;w`^ZTF9!D?EX zmjwlNSYGzLpuTizaeDe~F)}PHjD>||c6K(p^uvd@Od8tSn3x!Tt1s{FES)1FVrOMd z<_q8ln1vGW)GM)!30Vp`O>3ed-08;EZ9h?DN?bDps!-m$cPg(1Q-)L2Dr)RnY`@-- zN7Red?QYIDg&)*t%RRqn4;8fGJ_QAZ(-bG)Qw>3f%{k@Rj7|M?jDGZ&Pj-%u4vrCZOUyP5Z7XE!_BnpaIV_REjIvp+T{rmSpohVS$ z$bK_6rXQP8_-g7ZQJRh*zw6q)Us3E!A(bW|FYQmacPyzD0%r7QjDm8i6`!-E#yW0< z1&A&&5dIZ(4cU}>DkD$H`9pngUEO#Pbj!F3b^^6g2dLl%Zb)_+GbmF>J*9D z{*n+`uykSMzVb7ybQXI#7tuI^lAgZWZS&#EiOY#Kdb+xQx5vCMlVfA;1J_Mkqdy0o z)0pZ`xdoKtj+McAOf#LC?o3GJLjmiNv{rQrVRFT7D%2A+Lal^}`RY{=lj6wuR$i)L zJ%yLY%WRD-EEcDmBHCJ8$(xM4^`qkAc1M2}KmW_Sx|e!}<&?gGfhlj?4yqfGsi@DW z8PknmA0#8{sXq9n=Y2M8<4?=e$~^>u#$gO=-`+P^V5DtjAm-3Gw52np$^b@Z)<3Plt)3c`)kxzqh0#vvo6dTEhL}shMrXE^=sEG9z8M%m6ViB z!xKKpEF6HAmbVuSdXE4LOCV8MMFJx#Qbdhhz$D*$>ZzmsdGXQF(LNrz1XA1+34Vx<5EeKAC>?5er5i`vgny3AsaxpDZhvEHSg! znkDV%h!+oYN=X1bA_jvFFI-S{=p(sC}KgoL2-cGbZ zTirU&jgcUUXAtc~%kMsR&`B*n!q7X0UsCZ^!F`Z!Qk0UA<(j9|Bvr}<9HT5I(NGyu z$!?DN=8GG>WUW^Y9D8;mUaNGzHmhV%L61qLb#2Ep#J^RBKWr0sMQD}zmAIihe)yl^ zFHS*=?XP{N0*`5dhrw$rvJ{n~>kfbGHfB+IJtTm-B<{T*XhSSQif|Ii5RRyqL?njB z#og7b@Ryw_vLP;EpyHEs!I_RKL2Suw<^BO^gE8cOb3VGu#rfsq6JR&HU~X=YIbu)- zd+SXMwv*KcYHDig>OBGay~c(;?Z~mI601S*nEHUQgLe=?&7WgMeKN@v%I?*|yL>`Q4C(_?JsdVm0$D#&g;hAE z8ytiU*n@q#WWn_#BkmI)-2j?lHiO2LPe5;NY-}vvS@k*6OS>p;pruvfFsta{;QWP> zFQLV>m=v9LAdCT6=3s364a`WTTyEXstPfLB1=V{wMm63eSmw)@eJKHFiyGJYZ%=p> zR8+)s$QEhpo32kaL{Ai3Xn1*vY6thW2M|-;o`cTP*W1f_B}VbC7~!ke_P>7I_0Elc zScgRThL<lVj z1qI2oz_ME?MALyx)n$3cQwVi z3@aa70~87w#Ii=Ke{4+Wa|90S?Cc!Ufp!1MUIp%t#JUo$lw3EEVxr570=k%x@LT+7 zQ(WpW`BOlzQ^k0?bgG~**qWvQl)d)0uJQ9D3rrq9EZPU3W@KoH)w{({`9mLjh~sKV zoUyU-*|TT$5lyy;fXhG!MI7gz!>#vzs2vmOw!pj=cD4ioL{;=>bXC;>uu<+AGWXyF zo&{k>x2LP@Pf_?#wSAL@zxpAC2XcPs%TUa~S=Yrz7wIJLDjc#aVd z;hVogw$4y+8nz+k-!PQ+e_-fBHXWXLALLw!@t`{9l0wr4G@6`?odG}uT0O0>Q&wbT zB;3~XOV?3`ABW1%2Zls-e-+ByVg3X{8)CWlJoG6_ZbK!5iht}^N7Y-nTDd_3Zzb`O zNlj2HCAb%3GhRVKMs^>@;@C9Zii*OC0-z2=$Hds1vNpk1aDdHFYCSp!MBT=w8g|{v z`Ti*iG4-7|%Lb#o3~7CR+6EdBO|)y7};>zxTq+pUFL*87V0zJTeogadTkrz zw~MTP{9rl2t|%=dv-|t^{LIV?Z4mc9xc{_lux879KY;b81hz;-L^NZV?yt$-Vf%zk zugr#`KpAC}Rr~nyV`yuzknY|E3#p^-DqtW)u?kqv($e)=>TmxdAz7sLSsp1-{7lX+ z8;OTB_jh)3^4wZDpT2km>JONpY|C?Vu>iV>s3<6egoH{e4DO_`ql^>OoIZnq;zRtA zmsek3zuzHP&F?=DEu!lb>;tugj0_g)NH9*stw;D`U&hAH&Ci?J*mR;u7MGSBQ`%ul z+3Xj(Q-(j7eNY0`;n0~mSUMF;m_nrItZ*z!*quwyAShSk!kppX0V)9d3@meSDrUu9 z$#IKFi;bImb+Ser-4`eJa~GzsDT3icP+Zae-`FR5?bokr?*rjBCuirF7L%zMVy$Kt zDZv>^nXylz3-Kq&QK&1~{r&y#os5lBy6@D}DE$(4{vHk1m>8Lz0(vI2+yx;m@)Uy^ z1n99cQ8n7#{o>`z4<;>SL?T0Iz9^PsJGCzty!ZWUiL(CSWM*r&&PvP4^)ZsH@P$J( z3?K@-4LVB-XSNcBgfgNC&z!lpiG0bTJOWU<4aDu>=g;5e=Vy$kJUnA9lT`~iiCLb= zsTm2Ax3l&MS@RU!Y|_;;lRifWAi|s`p_b0v{KtGH`H>D?q_3qCT;I2End1D!GnyJ2 zz^o=x!@h>$XP=&%dk8CYaWU@o>vveL6r#7Osi1-QQ-UZ#LxZ+1eg9sk!ikM71ZSvg ze3I_4b8(rh@u^WOks?u1QljOzjE4Po%-@N`ZXU;F{+rzRJ3S+zYDWkz!7+t|?TrK4 z$;5Wp!J&U(jc+N-XGuUbIJLQA87CiiFVf+m@Ko(oc@WS3`hP;6KNo&lh5%6EYonS= z_f1{P+Gd{$0)RMNgg{to#K*eXH)dQAc!@@hNq|NKgqK?FvcvDUOji?6SR{)-6s$gw z#zo`6W2AoO|44AeY`8jwvy!fsiv{4r|k#>bC*>*YCQYeLtxV%gPG<*m+;o3u9qig?Xm~3LjBFYcD_zk5U6USH!IO)8jtU+$@(Ft~U-++G%PuHb zZDqKUzh0%=-PiY4KpZd(jld%aPps@h*)Zq%REwnh5tYy2zYf7y;L>1?>Xkdpg0N)D zdkKfP7zOO=8ynAF;;rxPb=cjQB_Sc_q zzo|MOdvLL&MPmIQIr{nY=VRmJ=jd-{Io+w?6#+DrJD5b zJ{|bWsq?iEtWdk)SO3nr_-uCExa)0b_y)M4w)aePB;-7y`-8BiUwFR(M2lz}BqSFm zC&jN`&3yOnd0@&wu6Ag#WR{AENG15@5M~7l1Zr=I`_m(!=RG@)^PP#HGJ}chFnxJh z-jKMMNw4(Lx9@~!&t~*lQ=35@^z!tK{=(fakUo0*8tS~oZ9tEbl23XEVycy;n(ne1 zd0vq6uwR`J(rTF3>b(=__J08#UGtH7RAmE$&uTI z#{0tmDbod04XK$)-thrco(uYKYM92(-WE;6iv@QjWg&B5Z`WF*f{Vg{u{RCacFO;} zd(Y4iD7oFA4W7cXtQR>EcEaI9wNnOnq&)VCA7!~Gbg$S90`VjoBdE#XfV6jX3{%i} zd3mMdlah4o6N`+^MV~d4at7QJCUqK(Zi6NJM#wQ^U_E~FVS3y?U39LTIWvW2La%l9 z0$C&r|BV~OdHGHhDbt+M+|`7USpWO=^eber5rE@B#j0_bB@&#K#IyRiB+_s@|PT2%+pu5*PQ} zS)&tqY=7!ei*exsQ*CNGyCiu2we<0%dUvo)*J|giE9%2oMi$LJ>hlonFo+ynL^Y<)}5U>KI5??Ao__#7ig&u?%&7a?3U}-uOE8pZ{;K; zBor22v%V%Ibk}5!EC;x~eSem^tgI|OJw0p<#T)gRg@x;2;(Vy85)BR-X*W3UJ{@-B zk!~`9OS*hB(%~m@iSlBp^hjfuW}$+^f5tWhWjx8fI9R{{>h02?xa*pP^GRs%TS}NL z*Azl0(~5>s|Kkcs?Lq+k1(uVM)x?AGi| zK>3W8KmJAc_DSm53re1&TFiEYkT9+dx(G}eD>0)TApdcw%f#9DKNOqLd-VMAeT_W! zw;b-e@uiXW#!nHOsWy`J;D_E6cX??Uj^T4w&-uTJwEOnKi8iCi%unj&mdtT z_q8sXiL8L&g3$teN;n_#tuC5*3GwGIdC5GpcecJg-kT6PZpqMKpv&l|BH^Wf>%jmx z{;dbYXhYBa^Ybs?7G8BcP%srsQPI)SzP^YH7cM~E10r|0(Zg*F;G%IglX zntuJm4|;)AfS+ZV2OklnEJ@ZtJ13`)z+N#-krBtl>CCMEHw^P97LKRk2Da5jxLo{RgFkm{r;W(WlQ}iXOS>0*o78Uk8A5SFwYpH z-o4{2-#4gy96Z*PeqX=tS$OyxaUU_vC3^Z!W!IhEUF(UDcMDGmuauUSGI*}x#auau z%TT?%s!C~OAb$!3&wV{a*0o~cS>Ow4$GASHM0jBeD#s_}a@*USk+B_aat7s`i)NZy zTA~)a-Ypf*OYOQt?~VP&Ff#oPgn2aJ0-8d`t!llIMu1CA%G}Ujb`2bizAvzbKy-3N z$&=~AdoiPP{Cya-kG(V~w}qLRW)2QTy1DqEfmEdNaa~{bnGiA-EuX0)`Pc!w5R*mq zY-~7jr{MetI0fU;|8;lDHh)_56fQYkB{8EjN%hh?^M!o)rSKqmcsj}=@p+!T{$+=; ze(sbb>7p~zC!9!d2{vgC?}5N|Vmamsr7Jt1lR6KLIq|{5LS@Gu?0?>eHU?V zNmFjC>LsU94hVDOCxuVo{Mph)DS*F|;tnf6R_ExvTIZkDFTE!a#wmVw!5Ie6h&93& z!bEN6&L!fi4K|I!KZDkXSmWmW)w`!9t|mA6L2btrbCYL`g^0b|sd9n4#8u+IOB17J z&r(56_yaiVR?%oxQ1vAib*0p1TrqU32EVtB<<#S$(igJS7HN@`im-R*);ef3zC7&IsXsSP5`ibKQ0>T|v6Xf{xTEEJQ3okM!Ty`R^9 z1!O*+Lu{+hSH^-mVQP9hKsFuH-WrD)$_d|>mh`F`OYFW$DJI=?iz>Op9ux8-U`I{< z7Eg_JakG&rPNX^)S5{ie68T!xBQ}X`g85EF_qwL3!McQ`CpS1xX5i91eE4fX+sMLh z>$nvB)W5B#H`?D{Kie0GBx{*zdC5jcN-D7k;}_h^C*bDp-Ydk>2I2^o6S<99Q-AQ{SM;`ydG!0h6iEPTH z<~JQzuMcW|sPF;E10mNxOD#eS28{YF-fc1S?#o(p6WMkU?u9#-W>ind6M6jOp4p0& z<7zAyYhnpy2q7y9&PWYGu0_)}3g*qr;B2|5r874;kT(DjD$2>q=6JxgIpdT-LQL@_ z)>rR}2mMYyBaZd2(XitzWE}kZ4(GZ7+=5OAvBj5&*iTn6MW!Nmmq{^qeDfY~y^n3$TDW3lfU z3g>yD(>EQsG9o=aJ?l4RPK^bfV*pFEa4S!*4C3%`m_kWe85f~jCvCGeH@}>uE>>a! zWKF6o_o{Q@yg0A=AA%akn0AtwQd3(yR6BjgUs}agaY@K!<#kZd=@Q_mxXhI58vfnm z%6A4VRqJY?-Vox=M)sWM|d zn17kQQYbF4<%KPs3I7&K&`>&eu4asg0Z=OL714;|CcTnS9~Q2++(cxVc%_ z#dW>)AHyFWG=-b?(eFRG%^1liAW+1I-1_;mVRJUnLd>Z;DKaue=Ur;*)2DyMW?Y=Y zwfe+2Z%{K)!1io@K z-!!2f`A*5z6$>G2JtZ{yE#Gi}MW9AxO3IaOSJv`e>wU{zjRQaoo)7FJI4E-zn~_pK z^(!B92?`E@S^zTOn5ifZibDL8Kk#c~tH5jS?04^G=FqI>$$sFn?m-?KS7VuH%^p5H zd~6vPd1Z#|5NA;+v1o9zXi^AeWMl-U1E(qXOmV+xQUHTLJTg)wBcO#3?Iie>Hg+rD zpfY-*02$4#*#!zA8K?-$%N>*!YAXLSJI`oGwZidTA>;eX03r2t-`B0x^PQe-*>p zK^5W*tIQnEV9lTPSOlC)e){6Yi-N+!jrH|*dd!t@zV7z7E4Kn)`5|T>S6oY~+rIP|K8u$-` z=`Y!)n66fNg6p&90nK?Y(kyW}HLDjcYpmDiEbWCZc52>r1 zwzB7)HGs7o7f@rW`%jv$O;eF|9Izb$s&Kl)d<@gn3yAHX$V(js%O!23&_2Uaj!#HS zJBx>cCmH3K4UfTu&7m<4D2?3a`n~I}Lw*uT*vS3f+gW;2q-7%=bhHTr9GmD*-tC$G z=pS9sh!XsQ)9WUJklg?TAmbXuCb#u5JYo0NRUG0mr^;|WSoHsCvH&aQE7>*OM29pS ztudzCpAhM0`vbH;<-PbHXOIA2F#_%DJN#hQS7Nd9%u(S-Z2HSCX%D{tcv?Jg z6%UbIiHg*F&0~B5GYt`o)}1=;>4gRPMbND}sYykuJ8gssI0R^LnAYMthV+Kb{vJ~` z90u_Vna|nhO%$ZB#c@%b%>mBeQD4%bbSUUVTF=o#_W@BXrsrxGv<~zw)uiAOk8YcD zB<4@p(`3@Aw01(l(*q*(*ula5dv+!*EiEjGYzb4-*(fCX5u{R-mBAeV(_crFH?F;{ z4XvuGD(xYaGkqszAUg_>LWwS<-8fc?)HG!B*|IBLq%2b07cLf^9tr)ZfvaH(dKJuU zY%KuVnV9?nH)du`(x=gn9}8H;?sUf%@`p=Hg$A9a3yFxxB;eWzT^|0BSzaEew?8_0 z_zTWXJ1pX?_UMaz3xf%@lqh}qMZnV;>FMfH>@h{|=Jhj!U@ZkpGxlrRi~|tP)yZsL z3FXsTZ+5IKSeYPPj#Lwc6FJOLkfUHkEt12uI`ts=z|JpM*O544>)>_-dj zp(X~zx8_;d*q{tE*(vRkcV)vpg9I2LzzyNmh2=?bMzf729WHAfvNsrI3hu8oc)EC!MwLm3bB|b(|T-_ zmdz+CtI@`C-*-Ic3IG8Yfb8~YTBBCN7%J~&NWQ=h=@FcWa+e7px0?o;W+ zPenn+OB8aHwfOK26mZzP69|Bt&8^ap!DmP*<3r)m_P*L1wCswF5 z;JlBa&w+EgD&=B0>d8!nAWrL1Fe`dATml+$^=Q-%?65`{* zRr~Vp?sZ^h$BpT~aKgytZ#cns<^MOFsOgpeUIZ(~E-2XY&-qO9D_lD7lPfB8Ke9I% zdCmK07Qcbr53540ZTwjE-XRcAKMCbg`jxOV`;9veaV#t>V-iOC`i~wyWO>8Qr$j|b zX*2ZxNjPEKB_RhBh+0}(a}hpl2%!k2!sq!?uD zq`J5N$xy@FU%{LicwlA*`8tUZ$b^)2IZZ&ocYELjGmLDBj~aZ7gJLiuU@^np5qUp zr3gR2TS`jpAfCubp&*E%jzcW=aEu6dJcyQclo@4gTKD<$!T$cxeO+DZ^cIxT_17U_ zSC$7UwisAXYquqRzro8pMHA`~UH}0e)cKtG|1k(rOSMP?+CQw8ubQF=bAq#mWFF1V z!BM_TMnt{v6^ukN?|m$2_CP%#MO;I2`qCvS)HiOB>>axLrnt$Wjh#k}MScL8RVPQ|G=w-srY_O{`kAnrO}b1{$)3Wo0+?(jFLpoDwYfc?g2V0c|k}q)ul^!4GfgI%(_ld7F=az z#VIx9!!OXVM|CowmRx1Wsg0Q8DKcROBZzI^B?fEet51!zMYYr=4M92y_@ zf>yInLlFJt<*Qe?bA};Va1h}3?b|vJH8shX1&?Fo3t4D-t%12lpB^27(f)N1ptE)4B*Fv_<=#_vMHcWvba9p0bQ#w*X??e;tfQLm=2*?INN|ACih z@`YrL%Y4A@0q8*Bh;dz!XFcFJfCOL6K{fSXp%m(t^A#cu8ySW#wX2|x9DmM#j>rH8 z`Gh1w-7T@C2xo)!OAS@idXWspmvZz6MJ&m?Pt^xw8&4t-$s7jLQI5e=x9mn^A16A% zvDU}-_L1_;%i9T+W04lC_$S>3pd1N*Ba+)8ft$d`Wq5JUow7t2UiJ3j$4XnsgAaGrr>O|VGiVVEiI>P$9sFDW(WKG)t*}38ALMjFDxw)mrEBS zA3l7z?+)jhL}4&1Ji{x zXLrwN?rZCrS$L^{qs{OMpE+FCp7SedeB(T2fTf`8S~7@4Q?%7;!dI`FLD(6muYW>* zFDJNVlKWKx4=0jhif{Z+{N?{xb&u-I;P7NPIT?)mQUZwL2=w6cH;~-{9Ue6HwV*mU z^bZO~LfL!!X<6Nwh*wjSXzjh*2@xMcy6#FItKh{_ZEQ`ZZL!vq)rsQdkZ$mR)2l*U zYK$n9%1?XvUYNv_e;E777*SkI%Do=rVQ#V62q&A$*qv)LCdu!>I`gdH}7_f08zZ zd;^UIw8x17^?wBPkm+mz`(TLVxv&MR!({l7f9!Stuf^JcJe>B{atiL10Rwgg?|yW$ zOup|J$w~eAEgq)@H6nW~E$@Y+I;t{mhnUYe#vv@cJ%PrHE$HwJuB`kGvek|dq?bTh zqGZ@wq)iI<_)ijfhc{Uedi%!Ljp3Vexv2BO=;&DZ28k!Rxl14(?iSoWYs5vXsrT^V zoUN^->?!@;ML>9PKn=cpVXVXo)3|Nl(Aanz3wHXXX0aU{#fR_@oZY?UNm^D?q72`X zpa5^I2`BkkCUmOIMW-~3tw-b z0Aa}fzeWew)o3@iM<%o!M-5iFd*A=KbIYqkLa}; z0&q0Hl37=hQsMfiMCcF5*WtKYFtx$LE1Z6B_*!NyNPK+%v(72-oAhy7TMHB@v|167~_qIv|B$|<}qLM-$jrM}nZ|ElA<uFpMsUHNY-!CUcqX0Pqe%&mJ;JMa_tq zCE`6Z@D3r`Po?P_n+qp>fYFx-giRW@-<gj(Md@<3yhn$^(9Tte`^hj;;OX^1Jj-=S7bi9%7IP7+SXP* z4Cc0g=K(4uCT8~`0LATXZ7}I!l9f=Lr>#<8rFap#fL91L2zQCI&kZ!r!%nb2bn9nt zBGM0HSq0@__PLiQv2AR%LnC^{9Qs#xX16zuv{zPEE_CE;YikQf1Q-a6f?bWq!!>*u zoLN4&TWL_1ATD12`n8GxajI_1VAcf5*nzEgu{KH!d}vh-B|Cv&eomzhgfeHxMMOYM zmK#~QVF$VLl|=c6pdO=ra@^U)Wu(vg?xZN)v>cnC>TsQZD_49%0^}Y-^7!a%(fSmG z%ZjefuUqB8mJMVNl0ZU6W5}!T56t+F|JeIe>M{EJHu`gH3OMG>xJviBMqv%tnC095 zVwQWUO2E*Tm4P#8X?$$#Yh#jyp<${kZ^w_g@nHH2LYf#Mt&hUx-$&s@UR@JpZopS4 zAuOB;XyMKsn|p+dmCn4Y%aB|H=Cii!1v<+N>C@@Ay--vD;5RT$q#u}|{PRXeQ6S-k zesTZT{!hQO<5a7pfNAaf}CR30G&Rc=_%c# zOlMbXe7=fy!Ap5=RcX&vTvF27+S-ivKq0pa&5R>!V^OvoieXYy{nJ)S=YjS|DhmlW zdSW0|8@iz<>pH!JI3mS~4hXvhIO@PV+GRB`k~$y4VL3;QAaBG#}%34dH~_=&;a$O}UxTL0t{hote~$oiXQFlnD>niAmV$;_==OAB+x0>a?{9F6v`oHm?XhWuY7=ASjw?S{8&2lSFCpKOlKIKg}jWfm@>z! zSiZe`Plu((0Pq6cxV&6BKNU?^JMGouy0(hUFOl3v+hcO!!`wU}i8Kl-!Wn|sj7A56 zA3riW`pGbROXEhHgI=h$2N;h)WH=-)9*rf`mUV|=goOa&nWrfS`FC8pwI0IU5RN7B zEq?T^>0&STd*%}<>E*CDGg`&1tJG}~OH{h;Ev4B;&2|P1*VVo&o7W~u@E^oZK0XCm znFr=_pWmWaCyb`pR0i+4{VvqTA1Rv~4LT6)bjl|jF(*Qng)3Nhm+Drl+pDPU326hh zy%zvEnRVG}Kgh|i455E<{>?`L|q6;gyKor}CR-7^O6jQRihv)|O$}7Iv!pG8C zvc>Y43#!*iU@Pe3p=P=s%HQNf=Ocb~JkS51`upM+7;#!?kf=BZ3{YDA;^HC*g%BKY zoSYNi-g+$EfYpTgrm&)7B0G49xgPuPXKbc{2>fwGYmW#OTkv<;p)~8lroyMc5*0jS z}}qtMVYotNgS&1FhH1a=4!0u?4mhjx_kq0NY27dQq)CLso% z(lUWUtJpWE`JYV%{iM;(7c>A;ox^y{rQZg|h6bdM8V7kxc2+3Pzn#P6X+BPE1X+aS z`bkjekie<5FtC#cqqI0Is0F&USr=wZvJFZWehht~%H@81|9+zG`Hf+vw3ws;iZc@$ z9cEZD2pNvqXU;JX9_SwA8r_n;hnxH3$Z_mLw`zomWx+CpB3ni@4h#Tf@pI=L9aq{6 zbedP1nsf_7Y^z=2lUvtb`)5{uyj9YtfoK((z7m-pFSMdCuXugzY>f6n{dW;737$yy zM0)-V(5Zgvo5eNkyEoWY_>?EurRJ}G@}+g1KwzC7+4bZ7j1$&krCCsx!%udt-4Z6v zfs9JHMx8X#zW+a4O3&~j+{Jp5mku%E&+=0{3)QA&F?W6kiW42(0W%BoUO(=e^ZX}i z5v;=vE8n+wSiM*X1x`Q)XNandB;%&N6d4#8kY&f(#KHo)Ou1OBKlJwqY9mxpH&`c_=BAd-9{%Q#!#nXp|d zBcFT64oD=;noiBlb?4aPviAHz*tE(mQj0lAXG)OBQjKMb6hHA4&z?Q!V%g!W(H6YG zb!IQK4=nT#ANE5wq@6;j3lRC=oP+3V)%I4TA1VRh_3-eI;buXt))mOuza$%;GhyX0 zA)2L1^&;k881e)>-n5%-SYVxbECd{rH60}C%)G*GaPs6EFpOoKj(bB`rs>Q@#N=DW zD&5r~HmqeV_$NfHL@9L|)kXuHntyj4ErM~GeRT`{9$7{tlkJe|zt8pL8a;FKp0eAw zqp!QU4eqO-v(WgbEaM9FFX2A3VPM&KW>H3IFZ43Rt6$YSfK^eVI{_luxVaxhM;jX$ zM8w31L}~T9f7u>g=Fovnn|ELyoSpu?zAp142vfrEEhPZDwHn)-QLB;Oxx%Kyrzh34 zwYPD6buqLs>4s+sdnqur(A@!mZxyTdv)_fLu+?4yXgUB}$lZrsxe0LnZj8|7d0gbz z*@fkwlOU1Hf*%4pis0>(uqZ92QX@-X0;>f=@;K!XSYZze39)Q%wGr7!c8*X4@=l@u zj=zNTCRu~lruc#*a9a;$D;@rIKm|GY4YvuiK!Xr z4!F1Ow9=DcTfjPv6EnQRhdueC-T9$@4MK0Fz`ECY~l*DB=u<-uP^Cp$0f z0J76=<#04Yc9PfUW*wP?KBI6+CUGw7%hEyPHM$e=D|Na){Hk$pmR-N}=0$bYvXFPL zB36@>Wc!|ge5l1My`fsR7Oo^yeVdSx8vi_TTY}HNKj~_IsV)++JX|`@y5_$kxG*o> z-iex8={(WdlunUhHOcaBe(_#3K|k-4Y3{2Lx!1WPuAEP0hN}K7)zxcTu#zj%v9?54 z=AC@gZfvWaUa^?2Vr^$3Wg=~sa@M+GY$Rx_X;mio^UVn#KEDyoQS!HaXs_LZSLpaD z&s%{h7;@=bzCABH^mTi=rTZ>6DL~OaR?L35>!9+DDoIL84g^CkS_ei>2k9JhN-M** zKUGlbXLBzZSrBMp4HvSqvyaC$r14zaPg~MQRsO}MEHXfo*vhu!`=Vb*G69GZfs=sm zNP^K9L)0?2l~1v4(nS}H)m2;U+ArWFm*DLZ^3-AMdJ!+K&8C?>nzmb0` zTtJ_6{ET1pDSsXm@(kSW*OlUbsWS-pLKs=GKy5KBd_b8sDCIQn%&qAwdwlx&wH60g*!E|XkPYHG84~-vXd(NS(7O^`9X?%k=vt~i0!7yVT(dg zxk|=&nSZ>hkZf6W7JtfJ*?}x_6FqsWqj^Ph{oAbD)QDTyjyB1RgmsfEA`f?7a#7d2Kf5_sZzA`TCwtGg%%A)irTEFq^CxrL0>$YRWjJ=9o zzs0j~-6Cp!h!QI^GTdcz;Y>OFXWu$feGMnJo^@m&x#pmtHQv?L5Q=!B4?)S_ufgt& z^b2p>9!Jn<=D1VAP{o*7XFDf9$$Q~WN z(OcBv{^bo{U9@*(+zGN9v+x8dH5GC+q>R#mvd=GHX5dQ}i!MWo&bn7IB9Hv^GN<^D z!&9sOpsGr(yVP62iCmwUa4~OkcEV}NgP>Jw*5e%;*RY~NyHHZ!;em;34vAbzU~l4?q&?Bu%>3YWz)IDy4jrZ z?xE=~*Z94*-9bK)kYnUJQ`16>gyXk?caL+lA+{lZ|I&@3Mvq?CNCkC{eO5KEhSE?) zJJE+}3RvfRtqXQOj?cfaHwEClI+vF^TUs^HX5%m&Bx7c5Qj#r~3f;o~+QQ1k&SCXRr0@bs)C3M$#y>D;8? zND(_nM{bR|q3=xjY{kB-kJmLfcUqWv*4=%Yj5Qki`kqiQ6T$Wb#O@oRp{0=;lSftD z;7~b|-4!eHoxj*Uew^|sB_;4rzQwLdQPXTs47(rtZSD6%LPA-kx8|=A^v|7p5E;q6 z`%_ZmCcjJAiEtkNO9Bv$IO$W7GiMakD%MpNx}_{G#G+_Zu`+;SFXb z9)_+j0<1nbSY)x#&f*W51ZNap)g47Ym1|%6;t+%E#<8kk%>V6_k(6^>U*zl78ooZr zC@7zti;K*@O+(3n1a)`HCmq{tBFLKj2>r7L&Ew$F$wwts~J5b2awE!RQx#fgt zhmtc&p+N1RjDD2}j-}##RHkOj|yKOWy&_nww!fWSrc$Iaq#7B{`;f5KN{q_bM q4^h Server: POST /update\nX-Server-Token: \nX-Client-Token: \n\n{"Attributes": } -Server -> Client: 204 No Content \ No newline at end of file diff --git a/doc/sequence-diagram/update.svg b/doc/sequence-diagram/update.svg deleted file mode 100644 index e2cedfd..0000000 --- a/doc/sequence-diagram/update.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - -Client - -Client - - -Server - -Server - -POST /update -X-Server-Token: <JWT_TOKEN> -X-Client-Token: <JWT_TOKEN> -{"Attributes": <PEER_ATTRIBUTES>} - - - -204 No Content - - -