From 27ad9da458f2ea9167114e18223aa363bb3cc7c9 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Wed, 19 Jun 2024 17:52:56 +0200 Subject: [PATCH] added short/start/end arrows --- gallery/example1.pdf | Bin 31493 -> 31462 bytes gallery/example2.pdf | Bin 19551 -> 28818 bytes gallery/example2.typ | 10 ++++++++++ src/diagram.typ | 24 +++++++++++++++++++++++- src/participant.typ | 11 +++++++++-- src/renderer.typ | 36 +++++++++++++++++++++++++++++------- 6 files changed, 71 insertions(+), 10 deletions(-) diff --git a/gallery/example1.pdf b/gallery/example1.pdf index a1d2b157f646e7a4bc769ba7b0971d1eac1294b4..1042c9a2cfbeb64b40dab290ae5256b2e9306aea 100644 GIT binary patch delta 3361 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 delta 3395 zcmZ{lcRUmhAICdIopDBp+;Jh9=iD9cF3F~>$jlZxGLNj}Dto4^=xk@6kx}6?vdTO% z$}ZU*hm2%AzvuV7Ue6!T`2O{Iecu0k{`r1Bi#vdbT|hO>nE{1Ke(Z6XU^VSEslY)P zx66xK7h!kaKiWjFdQ5;UC+lJ+LHY;O28&35V0BSz^+~Aq*Zf3bXWc|_dBWXrG=e1p*dI%vt_e*V$L*m>!8T~g?PKfy)vgr?;8zC3&Mk4dIrGa z_zWdqTkBk-+aWH1u+k|12C(5Z-r0vn^;4W;ms9gK2jdPiT;ef;&1K()LBY0EnP8dg z+fUQDAxA)bAmql=uE)xS;bVkTSL!5r%}xcZFZd!)n$V%l7itLjUG1dFg0HKgxmbE6 zMR3&J$oe>taW7=<6>?T-umAS!A^uk$F^kvG1+Jo`;Q|Jr^hH}WnM9WLFg}@B{-N!$ zt4NRN+{l=3cc9Tf61BPQGrTzufW<4<<$hf4KrqkD{$89?G{oMrWm|&tj2mipl%whO zIXC!IA_Nyfyo7ETVD(xYwKcOdNqfw9KM+?2*Cr*M`C0qs4H@0?dojx^w4$zCvFdb{ zQF-#q0KtQ{7W%APX~=@QKKYgbUwufcv=XUtZ*o=H20KA%D%7|m`DY@ih*28TQ_Y)2 z7LDZWuJ}Q!))1GVMV{69z~f6tu!Q7Bj~S#8;g!UGg509!2e&%kFi(6lmwIUucQc6b z9G_ib8P$5*zk+1k@kFRK2&nQD%*rFD)3&LhBAZ_TGb*q`<`YqR6`h2Lyp~5$*E14Y z#3JUQv6tQyBOuipt}7Q`d8VEndcJZUG~UM^Q^pp8n9;7x{!5f$DIvz^G)ocrA+_KLaP+T7G2mK;#%(?y6&=EC z(OhUjht@R^CVe0SnX0F|+EZoLvN`|z%A7C(<5;&<9@?uO%n6b@OVdxUs=EjVy?f@R zY zD?B*aCOTI*uzdat`W)K`2e8ceh>f&lg@xptU;pEm3w2OQeGvk#`syt#T7SqPSdsn-f^ldjmqz#pgZ(m? z!hko*TAugkPd8JbY=24PM9`WlYAshCB zpeNF4U7-czF4)gu3AzzAy54W<0|E#}&yKg``c~e)V@<*v(A%2Y9^^l%cVc_ZF#;yK z4aGcMWRWH6H>SiF!aZMNIVhnEg$i~1Q-8eo7D1Lr=(x|&;+4~hJ!Y0GHO0aYMheEw z!1aZxyY|=$w3@sjbH&3nQb36=qzy^-?7$ay?6=kC8d1TJ4}fA&*=uDaCjrs{K$t9u zDh^mgG=ZnyXtMK99~q#4F-TIy6j)oX8(2uHi(f{`F`C`M!=l1Y^u2s~;}$B3%DpkP z^HO^qU*HV>MxIaP;?=QTmT^o|HTO8i_ywEY+ya+0QOq;lfQ`@V*DlltVKn-tivkdn zPr`iA8a>a^yI{#Ej2=5-v7(nk-J)77r}X%JGZK-s23CRp>G+A45EpVVaA z7^w`x3Bah)522=3wN;5~ZUyN$*W5DtB$ZoEPUB`3Ph~Hmy>sI)({;7;ovA{`44gL{p(Nn+HaNge# z$#W5?9OX2xx*O*8(hJq~LzVgKMU7n8yI4PeC*_Q%9jV5_3{B(wki&NUqE%5o z-!k12DIJpFE?J8i7GUkzSSqWtlQl*-YV4RxSmg{yk@tK%Q6`9*dnyTO>;u(w`6r*+ zBjvJCG`EYtgWf1ne28Kqy_VCd5yIPN>31Rdi4_| z8uw@n6HhND)qlh9$ZXAukJ?o1Ryn4xF9AYjkRNZ-d>Zas=iIxmR|ZMroA^+8M?LEY`L=L3 zdy(8iE=#7Zd#9_kWhA3{QQr-VLD7)rQI|5Z3~BVo`wzGGl}a1m8-7ozwPzSk=uZWr z*X}nlxCzX-UlpL#j$85LQzu;a580D(T1&}Y?hOFNzn9L^?q5q+Ol@Z(w|vTp)$#7eGWf^Rg?34PrD-}09 zX85zqR?{ddB$ZFL1e+gKqQ1S<;o>`z@xR6yr{*jB@7bsTKP?BOb!!Sg&%8t9H8PpT z>MZyl-Satk;nj`bu}T>WD3`gQz-oIz-j`r$+PR}BbZV}gN&)si%M0SqG#~Wr84cQW z?EHN5N@OA}me}SOW2%J=seP^{Vd5GvZFQvvA}rZ@BtHoLbi26wK;YK-1a@)S5zFV@ zXbYF2-SNC2fy@gcSWgeOL{Ic$AMN1nZ4`)KpD{5zId(pYd4i^X>t;VcZy_PO zgl9hD%$nZYtI_E%!o{i&;6H=L)~jok&-@9DAy&&>)_0I)yo8yhRmOqe*Y~qZ1UWez zC#CmG8_+#)FvpZ&p@;XT=?~7k(q!s4tm6+1yg03~Zc-_yoi{KK`MSQ`BbhK%C=R5` zFQlV8g;pO6r0+Eg#MJ5n*$B@2qpt{oHragN3U^=7nnT+pn@Nk0Ot<-;17tHqGMtMu zaJ@Jc?=IBH8oLziGI^v1Wq_-arp;BIas5RJmxSOP;?pk!MQJvP)i9>QG4}vInTFx| zxD%xjh2{gqd+wRX8;q}ANTr_T12{bjn-y$|v=tCFL#P;FSo;!@ z$b6fvoqFnkm#bTyB+|`I3yj0c3sf&$RIn)yK6(<9%u^!&vHiVppRG{n?%80?hY1-h z@~AgMin#CaK2pQ_&ezFW^9k0p0+OMOv{zy@F0JD$Q@kEIaFk7vT_@us;MpmkF6hPi zFOz!okaVWb+RH8`CjKnyV1gJae^@Qw>|Gx*w$bKTde?imZWnIX!`9Try8mmA7?<~P zctXiz`29yfYllj90LXbYE9u>1)+$SuV}n@XR4O=B_jUPdwfTUF^^d5 z*_Rg&s5TDQuv(p)&lj8m)Vn$|XVto1U;RQ$PWs_PI3j$iHa8Q0#zc4karh2|z2k0u zCzmQ>O*}VW+V)*JHcPbCppRJK_NT#0$)+=QP01FwN@iDa`#F`DmH(9Y)vKB)KO!61 zXL=plC-68Llsom@eb&m7=N=0$G;k=9)pEdXE zwCT@z8wXo8sVfaw}2gyu%~$%eihI$|7+`KG&@ODWU$hC4+f(v)$m^hxbl)3?CU7^UxJk! zYhjtn3Lg63XD`x0-re@pL3T>PeDXP--5Ik@!FE{v!K82ZLQ_J z4pSq0sNfaUU#6%_(DlQP$DT&HaI)hQCqrkiYoa55b*!-kZ=Wze6n${mcjpw5peCA1XTS0A{%C9 bWoBPL2fSY(-r0p22}h&lnJ-_~G}QVBH>6nx diff --git a/gallery/example2.pdf b/gallery/example2.pdf index 174b24b211349041bc8472b5d613cf7931c9f01a..69a594344025286318741d17156c1f28f5c39285 100644 GIT binary patch delta 22641 zcmbTdWlSbd^fibK?(S}b`-8&(1A{ZTySoi8jSmbqxI2TpySux)ySpyG|GT@%X5am? z$+_u1r|MSK?Q}Yo^r?*`@R%*|zY@?AKg5-kg`?#%{;#|11_4$O=_lCPxtO?lSU_x~ zY%HW~tfU+u4km66b}r7(mjA%X!NbJO!ofw#&hZ~O*g2Ruxmeg^8^Jw^*+@Ur*f}|w zc>a?}K^*_#|K>HU5JBMo=X|lPkb4lUtTnk`ARxfGV)LO%U|9r7`B_-lzQ=YzlVh{~ z4`CM*g#S-t`(I2vb_LoQ=TrQzBd5s!v~m2eG|ule(lBMWQsvm<4@@-YVK?$Y9IP+8!QS9$bBDKpVOn zx}I(A2ha1%WMpxu=(4ty{D4KrVa#dkKcDfa75jEG+qYboJY1lFv%JcR;HI$;E zy6%X;ULgE|N5D$8^xbU$lm#~f8$D5ah^rm&TV2F-GkK8y8FZ`t{E|v>Rf-;SKR<+%qH_-l-` z_xAT3(L!lxoDma+aX|R9B`|P&e$wm8>W5^`Y^To7!i|Z=p)EBi>j^8VJYRaI%dY&u zdVFrofrP5t7{4xw7>Ij~^Z{QyeU}C#-r8TycA`Pb*K&x&U5T@K{OS36+LUc(i&I2- z{MfjQm?JbK*H%<-SdYfo=R2t z8l5`SaT)dm?nCs!{A&8{@=o@?;N>ec1oUO1&m(Zb5(H(!bzru$wOT(mZJ`8rj+6k)z++|aW9vGp zG6kGsoFcU%*TR-Lfn%RLw7Y?0VFWugMsewIs___o$!eK~JPqZrxflZn&DI3;5wU~| z_49_)y3+=JOZWBbm^}fjxH&7v>hbFFs`0w%pvih+#kN+!k}t+!WHFA_78ra_dXs#)xlcT;Sl+1Yup)87B^3Yhhhi@J z+@80ZD3N=aXoN^05_|x8fN4N*AS#{ufWs`sDd-0JKt8?0^`Qx7^`s5DVmrP5VcOf` zh2f?7hiT+)xHeC<$8JV6jkqqZyVY)3bcMJalsPFApbs~SxclV~hogvqhSzm+EOVOIUL3cNsh4)_W`Gx@P_Nzy0K?W8@B#jT{ekyE1^f}B z(1yWVWoo5sHMtapw!;$)KrEi&b;irXxZ$X=ENABmG`0_V62HON&rAi31TEiJy%eb| zOH;~#1ar0|7`#%2-?MykzvsMW{v-vOID4-4t0X#VTwQ}s-GhcZSstS zC2*DY;mP ztQ0Z>rrw=itnT$PX#&t?q1PgHWuZ~{h?C=huDQQmNiAz@7sS_&x=X384R~xn$spOb ziH8CZ=fhX|uKA5G+o>VZQ6Xj^l2Z_eA#NbUAQGXMAse7wNbGn79begHp`$F>NM)dR z1_l7$_vy!*9r-8{V!--!^0CX|yz%^on$7kR%VUw?mqH7_b!s`~W zBhk5;nj=y1R=$e%W?;GBTAZqS7+5EGnW%Cd@L|6nUyQE$!1eSz9jnrddUHIDs9G5C z5xkGB!s*W-@-#gysu~z@3AZ6>@w7f!OsHDv2Ss?hmb#5{sd6U>C2%G1C9v-k-Gn#w zn?{;Mm_%v}n1)Llbswtb0{CygZXbYLlJIwz+p{T>NMhW#u0zP&hlq8)W~1AdT&~D< z7GC~lgId>Go7?TF;;HVbLJTvxG{LK-(9Y0Y8bR)=ybr_*$!ACYa2)*Dp<11^Lu2a9V1Ad(fg(`BQ#f#*ma_tFRTu_~b0h-v^H z(hkOl$W6drNuT8}LCCxQ0?dO?<(v1;%e0-mbNl3#$^Z`0@0xtGf5x&SQsYviQiFen z`O}}=_cPgrMqVjzP?BlbfW#-=eZaUq{z+H@D{j*pHj;L$ex?8Nvrz?`J%Zh>tIk}a3M+|^~?4vpt1xr zQ67=?*|Tu%Jz?pA|!Z<%2eTI`KpT z?*?5dI*{!lN%1OKzZ8Lm)4n45a%#I_T}pSNgY~0N7Wm$+`ra*FvH_P`e?PQgz>V;J z4qU=)K9CJ~Ap%hE+=ijwi2}|3szH{6y)!soQrSRVetd7&g4uE%B$*X{M188^g{270 z3y3$JM==K(34jU=!kPaD9PBrB3THMUSHfD=Bk{P|ihGfnlG)7(f0-CdJR;pE>(GWl zd*w3H-9PceA%&42`wjT%`M<(}xsk8`A*@Y_0_(tevIDz-{NURC0S-XCi|%GZertJz za2)I<{PG@Cj&J$pav_@HTrs_K>URp#CHM!XJDfhqe)6B{5ve~@oj44dchLRPxWz zS_f-|A$;w_4CRF9cC&y&DYX`qr}(T=MBs#hC~t#2GdJK1QT6zo@G}_CuSIxbiAh?k z&t+J5EhGDmNmN2v;baj!I_#E!sX>s4t)uAkUZPzCso<3gM^S^qsaQ^lS-Gl*zVTBp zIJ=WJC$XJd?4=clq}~yP&E{e{aP5%!d4696YRLxcS&4j!mkpiux7v`ZtA&M)OQk@A zeb7yVg=PU~OWK{;%=IVEf2TTKa*^3?`=NOjJI(N_>d!)u*}?^S@&l~Jk(b#)-~-%v zNlwtfFFokY(@PAOM{zu#2_M)?+)K~DxsgP_hW_RfRo95RupKsty0{F=1)rW)n(%q0 zAucWHL4HfPh8*0|JG+4R(Q(g8WIQ-)Fex0I&K=G>C?t}R6M%?MSj0P6N%Er^neFvo zPf-A(mZR|rsZl%fVG*PUtba8GA4U;0AM~$=Z$=Zm4@A`U!+z`pjk_tB2438V-0Kc5!2&Or zhG$oX$o+02_uYaI-AoZl8|@rK;g@JHq!-?k^c0_4p!u$(?t3raq>Fi z)vrhPAq7J*UmvZ+i))~yPYd^L1Bh4zU^W5BOK0&#SuhT$#WZ<}0bMR%ce=}XKSCnR zL)k2K7^qg*IPhV=03q;2Z!kgmP;q1uoX+KvtPLColrn}gMkYTRz+_9$i@~Er+6uyxu7$E)6=w@c=MITAj$vSnZL~+UEdYJ)B<-IhJNnX;<=^&^>`)UKe#>P;*+WS+e4h zwJDhY`}|+}Di>W@RfE08_*I%We?+N)e;CG48q9AJ9;zNG9a0{@Z=+8hLDiZ3qPFBC zk{!3~%ala%$T4%ffX5X^ZzWf()?nN0cZ|M=-i<#4y*t|%y(mL7*AGL|waSQ6LEAXn ziBcug)IQ%qAr#wiSMs}jyDrty)>NrOAV->}uvK9fR5xQslqK2rALlf{mhB!fshY!s z!-G@HP~GZ7(}hEWw`jhP{Zz%;2_olC0TSO+#0~(bnZNA=Y^%1sT6#u}$>VD_YYF)L zftdR+4A8T$eF|zytW&p6m>pv*?#RyW+pe&dRe9?}q_?$Ec^h7hWCEx?mG_I^34?bl z@tHxjg#yR>V?>41lhcvtDkZ&@y$E`Fz7{g>2MRI;uRtOQ3pH=Z@7Dl_)YW`Q2Y* zw7jKA(@*OOa~~;+SLVjfiiNsWO>Q1d9)!^~+Vb`QePd%z-m+`ya#e9evkLerhe_Di zEdSI@>Lq2FFHWLJUAlGdHNzg5W}4RKe0~MN%aFAPs-t$qrkoXPfYE`5pnkMW<=mr1 zUFN9ZciO(6#2sietfMxTWbYDM@yn6ABvF5ISk8-!$If6(#`pBLr0V?Xps*sCqJ+A= z|5oz@)82oL+~ZzIC$7yOg#Gqd^>Idw)?maE2AWW$7@}NB;xsZg1Uv8c; zjNZ=l5=OwUDF2!8j^9#6V67jpbHxyl9qyk}xh87HYMg&P7nL3Vqz3+l zQX{fpn8to->k&FD%WQ7u^0X=DwPN>hNcS%BsCy{h@LeyIzH4CLDQs=rW7Wl)ogHxd z&C*s^3_r}ECTdkTT)*tnk&TbPJU*)E3hU+UnK;I*?D|W1@98*FdGl-(Q=trUr~7Kr zvdfg z{GFv(jC0CiE`|Pj`Y&Ago=Sg+yW`cSrl7ydZPu*5GZ;VFe#k699dJ%WnDdiJ5TOqL zeL5Farq=-bPETw9qEkMW6-A5kXzwG0TCh-&b4*p*0zoQU$`{OFu*RB~>^$(dTe2(- zl>!qzzs$pc>$w!W+7{k#wg#}ptqyVS`P)}Y5RBPn(z*41gD-fIsbncm=R{p&ZBML( zIXaD>VhxpQjrLaxq!B!75NjfVmC7J$+LG+^JmUA9#6Z2MH@5ujJ6l|`_QI{@YuENI=u5vcZ zqUzkVk}0537xpQ&aDGZtpAr-`x$DbQc(7HH+WnyebDvr??pYW%f{!b?B8c=k;+uwy ziLr8?VH_2td??U$EEU48h;XNnaOIHDNbKRx(kXzos)U^Pn@K>a;Rk7Vv{I(Sb@B_( z&NRCod{q~<-0O3Q!NEewqI$$FXL)Ri@WoMlk!GhLiOUacha~9ao~kjQFF0NFOqNyH z*qD1-*Oak?P5yPJ()`}E5z9wb;~aVk7NBAwR-Y8Lz+51t!%US|iI$mCvD>L8q!U30 zcK3-X(o&CuHX^46gB`ti2Z@!bg_f3Qh?2)zbx2_|RTg0fo-%73QBOA~X^^oTS2<44 zJw-Qm?+!_$eG4->1%{%p;`a!mR5=5zV>!8U`GHGC!Bf?^)^XhF4ljzD0n;6~&M5U# z{J9L>B^(e3zpTx|ygcNB4Y8G|&$KGi?VzxFS~|MSKu;Y9Mt2i~E<42${3kS_m0VAu zI^;t?mVZ&yQY8-18SnWc(a4J(d(rA zt+t}RfL^s+u4ea|`Ii5q?FHM~I_2fK{C*#t#{gI{5I*$U9w&nFaU9v)w(cAMCzg8C zW_=zN({hP54U-%aH3U)DT)2inMk9%drw5n{K)4DDFrMAAlHNWR3^~PbD##mLiv9y7 zpOqv;0Nn+6mQ@==CbI#`ku=&gTVFCTmfC54SLi?&e_^%`j!OFGi{$g8^3OS@HS#?J|L2KOVnYwFd8x)TEN z1s*GO^ec3=-r2ruos5t5^oBI`*4cojC?Ne$!~ZyB5tc3VD(o9%z8#A_0#q>^a~+%P z%jC$6^!R+*b$i|PcS#M&de?jk8*xLz3AE@xY%`YY{b7<`9I^)!3Zf)qH&efCEt5~} zudz$MIu!ky3sbNQo5|QQcJf*e$JAJ#(*yqHFxb}2Gzf71va=RbXwR{3v0iJdCIm9g zL*+vwF~sE5NvtaihP9Cncy27LzuPAdrQsIYzXlSAK{0mwmnwNLHATlZk0}VFeisW3 zRXa3crS|@j2J+D~=W?qgkn4?fzQfr6HJCWAIe0G+zuZN1xRWRmQXeEHev7KXZLMy>9PzL(?hWJ$*EXPzP= zEBWLub{aZCKdiPRlM|ODm)!l$JAaW~&=&hK<}hDp_Fms^rL{37!}Y@RZcgDv3G_Uh z(r**Bdr#8TGLu<-EG&jss(=5UHHp!B7o}w<<-ot_3R{9B_5otnDYBGj(sYNu+(ZYM`c%y2>)!FrA$k9X zyK*iVAp>4yJbX*i9^5ps*^`)5Q{T=;F&Wh8JqXkMBX>*`KdNk0JGdW-GTu{~cvgSX zlj9AP3I;r6Gh|9Ihh8mw)~(AcI}vCpd6V@e(n7=XaS|kF5}bd#aslzcK?kv0Uf;C= zh4b{v&GzC=2(wVj$65M9RJ)7wf-c!20U{xC#1En!H?Bsl0c1) z2~!Ggp}9KS)K`BW>D2l8VZ2MDe_~KgJjfveHsX$oA~ME-e!y?Mk?2da`Ce|**s9xC z6K8+d(Gn{;-JBy1AxZxl*K1wN9exsXzzr4+FpnIlY>6s}a5WL;a4AK!$2 zQOe!?(6x<$%*LtJ86P=co_9Vlj6zS=(_|c(*uy?g*ege$P_f%saJd*ysNSo7-F#0p zc5jp#6ufc2=>*C1m1%oCa7NsY{J}3Emn&2<9%{}yC)*MqW;BH)#gNi0Bq(F!upA}2=ur}wMv8u%JU}VvkJoL6Q8GUVTa#F-7 zmIbBK8W?={55vZC3vz-@H0N->mH{vPs*xT-G+vc%tS#2=Z+)D!EcLC5n_-xi+RQSB z;ewV~D++M7F>tJ;Z>QXfqBb&iyc~vYjhVZ%Ry6+}#GKF^K8q`FR9yoa zzV3%&e8Hl!Y5oxznoApFFYTpiSj*tJN~twGBKL$~!P?M4`5}`Vg^eJKG+!g5bR$=B z(3rsB)Os*4Y>|_MVHhiLe01R?14KeEIJ6+5Yy)3#9q4zk7RI(!2^(U~{{&dJhRBCt zkfV`n;kFUpf{pM@=H8;d_UN22Dqumrb^4!BCdOc8H)6YHNR?F3O2@@Bh|NqDZ+dtv zU$Qhym8IpAm~!cVWlBlq1&gR*LD->IiON7`O4thpH}2`tYp3u;wPMg^BCM#$Fo`j_ z-vhq9n}KiF3cQM!?)2rAJK7Sjw*36Y!$u|Zk6d01yV^q9Nrp$55Zvwy(q7c6)(lffEq6&IaTDN&?HFA|-NG)b-CABBNbJ1#?478Skk+ng zBe-0%a)d6U?9en#POcPFgTrBmbdE&qu$LfL(`!0E0!^46!u86(j3<`cq5vBQ4Zr>2SMA>!NAzPkBNHLH#=u zx5s9RhQm-5D>i%FV(hlGYQ~`$;Y0Ki4&~WE=IT3i1Bbmi2ku~4{^y1OT8No zHmc3>s7_5?`k8Rj?c-_lMTOgz&ai;j!uxQzriMh4(sIpJSDlt8<3wr4Ewf##WPH1+ z+Bk%~&%OM^^Trybd9``xGR-&as*tJ{5?7`5&iQtZ5K_oL*kw)_HPgy+>VbeppUk!9 z%}>=3;XHqA(@do|>woi7|GZR-=Q0c$q}9hbKf>B{%(um+mvo@#v-vlaStT5vpP|rr zriO>x2;-Hj3>)*Um9% zyB>2Uqw&o%C4=u(%1m?NGE)!m0Z#0_v>~txqz-<0iZ+!lMqFW4YbWNith4Z_Tyb?W zF;X^6OLGU9Z+@>gGZrcub|J+;L=%g!G*26|Y)G-Dn`P|EC^$pQ<$)hD^ysJjeYj}) z`$-rj;Mb%~i=`66v6&MZ=&AnWN*v(Ba+w4TB%>VEdN;Ups!@%rFW>=ZM<~rrx1t0v zx?WMkU2CAN=(&}ps4o~O_w^cob%>Aj4x{`At3$rR#ViI73g2K%?TKUmVvM0p-D^@< zkZEI5KG&jeP!-?XQ@3$R9SioAk!<|-&9o+A#-D9i4*EKVCJtj6KQSruH&O14xF>vh z7kpJ&#g&|fEq$}-(787Ntk}D&NLm`C6mh?7ZSEJaEaVB;*g>WMwq z&TOhIp2S)e#Eg%Zx@(hHVF?1FgnGy6FXzr=Os)+H1Gx*o?F-Wp(@hskL?$AVxhjey z!Yd#Kz6BC>6GcOz4wHKoMbJilX+jH=`2Jm{Nrp-?(TE3AEvydMu5FAgo1===`JM$A zftrxEv9NKNRc%;ZMtM^`>mrA9&7(s)$kzcA=sBa}WYm)rRAYvPwR_NPW~x3mW_k0^ zrG=AjSu8n)%2F=vSp47FSaNhI2qtL1OIm`g$Q;WH!w~(~3?!xn7v@BMv*%X*eeFeP zEmxcndTY^kG}IaJyW$~Eg}CvHuKucPw36GUq-E!6 zyHUMbs$yr?mc1l+Iz%_RKWw}Bx)PJ0aJo7E>?~a|s-<$mP`gA*vYr@i7-~bX?$Q~r zr=&`^$v!`=^1^gZvc8@!u&HHs)^t_>L)y`sDNKV8A=wXTD@SS89T|^PF1@)-juU6+ z!n=M^7r7L3bCFeX=o*!A@<=Bm$3&HzQug^1_4{K>_S-Mj-gFWg_IgQj8@XSJxJ7Jk z7Aw@btQ$KlmgSjGcyvwD;_-+~iMJ7ZQUEpbTqKnerl-*lcBxvh+1bwWP-l87>DOia5QmEb=j`nD)lYha2 zUKhaAz5RV{CRk1oeQ~=xr-$}mSyaJ-iF(lC&T7iBt7yP3G8{ za-6Jm;u_sZy8F^t^fiJ_QT1hTTWh~TNh!}7zcw3SQR;ZbvNnGjZ8JnWe;6U~ed7bJ z>hA)%qKXDusD3|Q4_s}?HF;EFa5Yu{kD~XMZXxsPWlq>qcLb5mTX%EHwMG!n9DBaB z0@FqlJ-cx*x0Pip-FAo^8eka? zY6d)D<+#!$JbUW?8D7l7`krH0WCuBns%}*SX`{~CVuo7GV&wfK@%4g0D5kIb0F z-tH=_1dDuRIUpXXi0&^m4EmjCiT4=9w=_t!{L^K=C!S4kiA>L>o-e>yg%|U?@T3*Q zo$0|ZnU1XXRnt*!2{7@pHwt7 z;a54~wKpE{YS>N;wJR5Z6gMN!%XBWo5InKWTqcDSd?L^MbK)Y3E_q}_Jdr5`BdCjd zbuCQj3ZGJwu0t<562>DVB;~>-BV?Ty5f`RWKN zh~n-5-D4RA9CzlVOSQ2Ki$1j7J_+B0~-z@UZr?WgX_#G#B#Ct&^c`o* z@zty&#QADCrOb@V&J+VPGyHtYjov@jHF63G9Tv>=xpAdPPQ!E~r;z|+ER~6E`30R@ z{W?gdt;F}~N@s*K;OFk)ayfiz4V#(Ag8!e*D}&6dQmd3=j1=II@FVaA>sOBNXi-{v zpa4Rus~{(fYb5hmh^S3dM_TIBQpD;|Lx|MJT7BoGSkvWgbz|+g#8GnZeBu!Fx=Ki5 zFjhf-aovq6N}8jC0eqk@Qm(H|J;7P^j#Ecy^=7d7bbM~gztjzjs)dbjXu;ztWx`Um zZ1Bu7QjRm3R#s(~aRg_y%wlvxucP@b;n3LDIg>n*Ynl9DOq0XT^d#09Jq-c;gvq=KE&qONdzP~^$to_OR*aAMg2erYX2K ztwAf3P$tv@RWhbj_^ZrEw=xW~nMA zYBWF&C$OvVu2~(v6>Kxv-$OaJNq!gnawYJXx>J{_=b{VzmKgqGn^f^}L3rdto;EY# zxoiHlB1Lojf&$@DC|12aY8D}yyLLtHxXCIM28bxBbk6K*lE?=2bHwzIk-A(Nwpu|C z=1J1yND@6@U0ojK#jbq64uan%`$&wPgm`-wvg-I9sKg!g{|_@C^0XIPJ-(w73r`=$lJTQIe!y-iUb>mmKvEh=@GOvEZ1LrQ88EmXNaSxAC)P0{EciC_Vws< zJSn7$;7bWby8fWcuhml8xZSx!u6+Y1o-YeJx$_S$E)_(_XBVn`T!l#Vo-ZB?r3xpl zmObC}GPRn_WnDWo`6h+(%1Zi$hU<8ZUU9<4M31)OMQ!0n{k$zx%a@b z?XQN`767R9tW-{3_*r2(esX@HyE0V(Dm^(p(Gk1?N$YIz)uMafqPRC#XsoxH7P@BX zogH2%G8c>G)&$7SKG4lsweSTux7-Gw>YQ~hW35^44`*j{{##lqEg@FjCOW;kcSSLw zP0Ui`WTv6n7(0hrZu{ASW8s?V!aRRYb()cyy9PL|HST!_a7C=q&)+$h3h>!xaQ$FZ z=@{x#K(a!RAdRP_~H_YZDK^mFO&d!K*7KNnu6gJwQ<5`bk;7BTcL!$NCVf}vf ze0S33Z5`JhYN|VWdeI*Eo&Pw9Dra0nyC>;_C+b1T;}qO(O4dbBqJN2g{?=U$x$JyK z^EW_;%%r!{Vro9gx42TEB3_V}aU0`P9jPsb!T&v=hFl$BgE}-p9tWO$i4ycom(PYsaEQh=Iq7Hem%0&#mur- zjSaTcVv=ZtoKa<$T@485jCQnZ7E(a`M0GLaWe00=~uXpS3!c)bfRQ|Gyr{H zu;aZNJaZbuGD&LsBYhCYkhiYD8P|MgD{ROl#tY+YJlX4OhoVIOYrF{C9#Db#o_n;> zvG)d!F1LmG|A`OT>F$C-W_&GVMUNjRGi-t~Olohls=3eZEBL^+wu;VSRJ&WYUTa=i zpWff&32U1R1ukX_o)_1Hx3sc-Rx1Ak?I^MSDo-!A^RnN8G8VQ*NW)*o?=Vq`I{KKc z1wtmWcLDI}X%_F;ME0-Il$4lis!Ecg!t|d#Wh@L$9DiBZnutVeG19WKk+P5~>cEqd zGArAu*jgCb8Jm!@a{MR43kt%U*c#gzTEfG#vPGj&Mo;7a@5lMDfna5iwE^b`K-{FC z;AG)s;^yRG=O*Q1{STZV7N*Z%_B^CqZ2y6So12LX#KXx>%Jn~B=V4(2v2l`qdc8jZ zV&!H6ak71Syt!Ha0}l%a6BjqN(aL}g>9UKCjHTEAg2^ zU0O!zQrB|{7a7=EZ=m&|-DP}i^lgprAj5O~f{7j9Th$lr8=E#FgPU4869dl$pmB{k z-x~G1!K%jYvH5&W9_;TPSjxv~Gt1X;+HGerUK(BIW4!aV*HnUX@j^b7Z=Tf)T)g2y z%D%rC0_t7$J>?fLJbfbeY-gVenKw^B6KiouEFF*)YPSYr28HBsBMbUG9d=IkT1#Q0 zHtK?4`bPw~$JaVMKr3vPkKi&l(74oKqyC|q16#R|Q^<_`41yWXa64d05b8cJCnCm2 zI!+yA1_x;eKieTjeF+X=?3jW;^i%*~)z86hC@;ahXaNNAc$|?XuI%5EH2jd7*qCsB zg3HJ>g1K#zj-K*HT;!}Cibkm-p7;b$B{+lZxA=VhIA1;RHA6^l{I21FSLVv^acl!5 z-Nal5!jP$(8;e+{s4ektTrO#C{%v92@kli!HJO!}4hK#;tGEvs=O*VE?*p$0uNRL| zjuR7SV{MEN`DkF8C9iwk+o?#4PW>bljf7JFrYQyH{X#+)f*ZF#*% zna(`%iSHfs$=JN7OH&?fd7MwIxq4MX)tEkL(nUIWd z@%ZSbSR1o|Q?5loI{Kt!@uI4t1~C2@_UX^qeO+a7MRE=FOizqHS$GoK_i%i3C0YV8D?w) zw2@^$M!Jw=91s83s-pWYJ;6I6Ac2PQHzTvUZf)x`R5=cvHcaUo{DLdR0?snITm}2# zc#}M$@F1>Ze^WU^UEs2a8O1_RcB;s4ta3dhq6jA>115f$CR@0Mpb0q7p2Q$K&j!)0 zXMyL{+>v(Mx9-g<$hxdo-9Nc%ev$0Aq z1;joRFYEme*sW%s%(T~ryAr!WgIj|$(KHlMKaj0bxVO*p=E`=7z^E+;LVW6bxZxDGV5`JvDtz4z-ghiNSB3PtWU<^-}e)V^CyCI7IK1!fLj(gel}c6Hq^Mk$t3(pHj-+ml=<%( z0|2Wun6nalzKdrPJiU^5Jm^Lr(mL>_3qkPqgYQyj5h=09*`ED0=%Q=Q9>t5~Jm_T; z=8}{j45bTY3(XDJILY_zl7bryW($=cUcMXS5|f{iABAEP3H%TzvJ=#Z5WEEu0m&37 zoAP6eZ85hAN1QXtD#KS7cSgIsNz4hO1rWP|MeO8Sy0aJJM^5~PgJ^k9ZN&k@q1I!% zNY?tr=Mi-3pDIB;gpLds1vddd0VfY9-(!>_zok(v!JR*ZxsJL%TQ*;Yrt5pw&E6dq zq_(Bl2;tHl&w{Mh!)ec`4aLYl4!YD=E>p5dH(_was zIB-d#j5TN#jaymalX2835RNPPT6}zpY2uw*p;bSV)2&B%n)ft?zyhC7YBxm{nq1N@$8!l1(qntvqMNwh;- zkMPmBwJT5y_WCPP>ng-KXP77>_$hDDo>*95CEThz4&fKLg+K}kI2$lK`U3;>k)C2a z!o`W&)$=^yp&4~V7@?uW9Gc8lgy|f({fZ<}Mk2r6M51Vtjit$X{oAvl&5B4!aEinX z{3N^UXBJWIqJAr$fB#6CDlx6_s`|i0!2rWk43Obxn?0up)K_ED_6+$W;^~^=hdRn} zFLn~ia!+v*5xx0!5SXx!Hx5TM#-7f0@yPcw-rde#B@4Qjy&*hJ-FK?AOPT0vw-7{m z$!`LG$$#?t6q^>g#%?|v2+|j|V$^O)!*r#H-uYTY(Mzhn4juUcPtdV&Em-N*Q)C1< zjmEJ`y#={S%2Mrgl7xCI4j%vfK4o z7yA`9HmqsLU=|Sta7mBFOfX{<`DCX5EtNUd2WLvPPIG;fZ=%Eap})!)YIw)3>5$e; z*BpP6Gn&h}jcUTIL+EVgdTJ&n$8l;_w%R)W?2$IAi88J!reS$K+zMk>n8-A;7~JX6 zx)w9)?zP6frx7*byC|JVUi?(4x9XNhou?tfC;Mx)mbecaNC`=fiKB{yV%`fMxa*v$ zUqmk3Y5sA-kl`>zK&f;<8^#SShaVZj*~&>AsT`ru9A~K!#;%N+nrCX6S$(RSV|Fwf z>HulQyK2a38&dVeAv;KW{RJUmToIer;xy*L31VT6T+GUItb`)7&=@h^XrmXB};mn5BkuqW|s)4tgR zO+`(~$pm)(rxRxBzx}W3KgJY(3bNA|{6?dpWU`rx08Xg)Rp>dDBK3JVMTH4CMZ4fF zgZ<%G+3b7X2F%=Ugg`|Wg}>N~66|l1IJ;!h9n2Dcn$e@qDwxr#OQrwI%HWk2E{h$P zZ-O?UA_}v37O1tM@`qkd@E89K>d&B)>X7_%Lvmmqd=)<{g5~dG>E~Zl1O>0EfPgvs zvmYRESnZ{5C6kTyid1qL=bjcua74?IgTkWFtU$!Xma4QbS8^FM&-{V#=N=kL;Vc3^ zr}%)+Z*f+aie~xWnfjdZlO&Uql>^l_l4%)b}K=FpwBk|6hsaD&balm6J zFQKFVdrLU**HRz$2ktlu1U~9zbTn!`k~-)gG&l0Hn-{OV|FZw(#;RUZFd(zcD!&+qkt=K zZ*lYpI}EgDP?b>71ZN^9N>MQw{g~OBb3`oLPXDxX`$Q|KjGrJwZJHJ-gM9*<;Ezp>o3i{CLti; zBUM~VFHP>x_So9V?oYyb3A_<^U{j<yTdU^|)m&_xQcs>IC*<8VOGPHh&h zluBv4%c$n}$I(u1jrTXW@o0Nmj879H^bibq zQirK?))@{}WmKv8$nG=X;alm7G|HSgf5;hH^`O6{wc!oap+jr!0pAHbAy7He#MM#o zkv4*N618)C$TpX21D{7Gqq52l0lF?UZPb}QwAa+(bZ5!=(80RBO98F8@EkR!cOfT?|4nRg4+wvstIP)>DKhpl^RFOp8I|cN}XQa>7CjAeR>Q}%e_0L zC^F{q!vlP{11Ff-Sw^-oGY(@N#vY5L<1aZ=e?bWbu#!bnR#4atRjNdCc3#mxTU_pj zvC77HaJ5x^03Tf?!{8qO?A>VgpqSWn(cgS9Tp+^RT6Q!t^Y(3jYW6U~Iu6TFIo;|f zva)$S#YQHDfRV&GdzuAj>&%&#uxcGXLnUhQDXd`qp!`PRlK8~3PH3dQh1zhhX76kk z*?{_2^6N6^zTuPvc&l<-JN4T4$d>|SAhhlE>1m_@K(@0JENiA!su-o&jo=GzRq@Xq z*JaH#fLewA;#W(iCxII^@gGb@c2K`|fcH zeLLH7%KppHtdSY)+{oCejdpo;!x*@hj^JH}1!Qoj-CUJT_%}IKOSbjB+wT)6M7?PV z$&p$dfUS96X*GGl7kd;8>wPck8^1Fxd=DnUr{l|iz&q!ZPSwp>ruAmQl^v3o@erYzI|`vR(u-*+TES13{&i_mM+!5sDH5e8gGQ{cp+128koQLqsxDbE$^1I@Kd^fu# zomYU#ZKm4=DsVkjTA!47Xmhe{A^Oh4k5!w43<&kXx86a~>NM*FDbZn~nS{kY<5viW zLr0C*Ws-|eE*DC&BIsGajj4Y-ojR&6wr>i2)NuB(yHl)VbAtL)Na^{lB{OzuV@c#uB} zR*#vw7_@=?l83{C_kWfdRa_Ib-&>iTvA@zZ9{NQ?N}e5JccESB|H;mwwJRVcfImJLw(*JAoc02m`C&1Fy=kW!oS#CPlZZzJoKmDMgnNihvzj|ycP*>fHBV0pDKS$tI&n3WZEZNRX8Qm>5%#j1~ z*e$|wxM}D`3bbj@>KVF{V7R@1ZHWrOy3X@WUDF~n z9pNcJil=bxRoPqtyajxWpCVuE%41_|{p?$AeLD?<(NWcsc;PE`3I!(&=B+$@JZ%x z@(iJ}Mivi^Ea219Fs@6y#;#<|=}rBj@k_wD*_M3?gx7!|-l{3gNmvN7+XvxA(o)mt z>Pc32OU|s`xrGDzUOHN0tgElToxcJ7YF3`X^UA%ztz35qv{hfHB1$WMsP9HEaw3mC zUnItdq>XyfIlh%AW^BGv;*r@F;^u2^Vf9MMbdTRFHR?r|#Rqh)5PV|lWzLKMuNxr1 z+iF-OCg}vz;^}5%W?*n99YNt0&eo6iRy03nTcsG5fUb;D6MK-EJ*E#ep?MaMfa$@> zn0MM2mNC5_yB-IPiIu}=gvO*989iT~l5+LgQKiUB-)c9U#>)-)Nfty-aK8rg{c(qv zMC~fYek7(u1SDz%%eladUCI(CPz6*l8Z}TMsi9xbC*ufZ^vLJ?(Lmj@0widPDiN%{&n-zF*H|}GIDivb#grJgms!6m+GbR13>1` ziRV)4ZMA5#6XxWIR4ARn0O@uGsN$(!bwu)ci?IO8m#QVe zNAj&P{PU`Zc=}6=Im|9+=1H8+Haf1pt;Rr>ezpUrahK+*-oz9l|tm-qmw6Jf3d>X;(V$( z8)cumL}##acy{4haw1j`=wSnB^pA!jT!e4 zHAJ;FRS{d!a@hr8)=PXi8rLOsQ1ELG$#K2Ghj8o;e{{v>s1#Q40gK+oFl1-n7~l4^ zl2hs>Vu7mrhj>jnsM3qhabE4mV6^Rc05H13^@%|zjhNMohfM<9?=}GFrCr<&wIj+1 zC=^)n7zdVz+plY2TpQCBJy_L46X-z26t!1V+;0+_JAI!sd;UJCbjrKO8t==()^5%iFDX=Y-;!)_UFc;Ywhmh>4va&XMu<$Ma$m7g#Te6 zpb$9t4+CK~m^dL!hWf$n&%&;cn={$s7IwgZ6>LsZ5+o1RS1EANr9O@CySty2(w#E< zsT#5GXRLP%RCwI2 zv-HnPmw^5J6^+Yt^k>eqtY!CW{ieW>>tF8|`b+^7`jM1=$*=l`=Hmu?b+%brYDUtzl)@m)I2~zT->|gNUNF78|g#0IX2h*kBvMxFr{!# zwt#(ATW{?*DA(Q|dIj;^ai^2hM(^n|P->N{FBN}6X)E`xI94$ek1q&U<=9(aowWsvkF1EpoPoRcvr;&G@$oyU~w|=@@3^w1~WR9g4~V zTaSrk97KT=P+?5v0*Mu)&8P79zciQv9IQ)Q-sUPAUW=-ej8*NHrpZ4S`@l-cZ!bS}}aF@7hqxJ3%JEmeTt^E))4m0t}jbzuibTT^lOm3p` zH1Z*4nfx-@Z_-_Zb0%K<$`+p3kIu+X|Fgtu1US{EuBnkvwh&d z==dx2bd*+iWI$U8PlBLkIAy@7QF z;fYSFwVSJN4;9Rc?Qz)y)yXBi>oeV2LM`dgvUwHXdtT*!R5`CK2+z$<_+_B-F$QIb zXzHoVY&Txd#QsvNg(x2$2DWYZtV)!=6%F|gkps6AvM<$s)yVDXnQLGS=1H+VVSu;{ zy^jH4)D`U!tgt2k#P1i*#E>3+Pm~{jOxKje``9%1&{kY|NJ53jBaP)UbQ`m?PTzO&H zaf1n^O{cER)1>A}PWwzMm!n~OL!FXPu9jAUnBn$}<9i~3B}n-3(qO4?HFzRF5>KN_ zyj}J^4TqDvR4sVp1IZI^&EerZp28zF)N=Bb-$gVD!G`)Vbtz_hS2!;|g)k1`nP9xD zv1qSsylXuG>xVEC8Bs!ed03Vmh^rMaK}Pf<{**4_I5f^OxG=Ava8k#{hJ$GCCDzEN z^JK)Fd`VT>Rt}zz=d2StE(6y^-?6@YFS5VJf!EhiQK*Qu&Y$I*uGO2Ey$lI!tn+#y zyW#}Mjo1&ibq0)gSfWV6^xcm=g-xe1mx_%OSD^q4UxBr&NJUaRh|VZIo-+uwzkGqh z-gbXNSCbw4wYGapHid9Nc{5O1x6|NAG58GGnAU78nPjHx^o{GfC0LZnRbHg=&hq2J3s%)`S=?P07Qx#w5 zP{cZ?dPq|oaoUeio=*)lXPkCUqTbXHhJZ)#;C&CQ<4Bz3-)`{DiV zZHNQE;$S3B#zyDxmc<%6K8Fm-IHvC&8VPvBAFkehEVfGOP+?#6)5n8p;RC$pST6*W zUDV$X>UlE{Ur!WCN7630Y0+Dw(u_^-&6O0t5ymvjXb|0bvwUc6m+s{{r8!O)^PPqL zil@jvXjTcKehf1y%H;^iX#2KG+%nSms0bB(@JrtBT72%KT6up?Wgq((9`_wKzD3|m zIF(wKTtl|pjK5S~5ldmPr3tnLMud{;svL6_lIUq{2k(#=3pQ*>YJSF_7HSkNeu1K%c>U^WvI1kM^YbWl zEeq$U%aqk{XY6Kp3n>iTADVbH%T@p!fDC7bJ2d(o)_!?y5b{Mm0PDBf**w74R~uxy zpAC=}+)gv^ID1~$S-Mny3Nj{=`VtO*dFq@rZ#+^;fdRLE(+N*>|2imhM?NMUGnG{) zhHlz-cQQ>btQM4R7Dp+`o2t;HivAL6l{W2a82F_X&ZNx#@qxYHAj?lc&9F0)FvfT^N7YK9LIYjQ`w zT5id|DKxLGQBSHNwP(ho-2t~^f0DTM^R&Qf$AdHTX?+4Et!qq%eU`#u5A#b2BHV)w zD&GV80#X7c-jvTR)WU*Xj4CdCuj7`ssz@jOul8SRuk;$=>V~fmzbNGtxIkU=kO`b$ z?{6y+o@4<9{_m>KYs8*;fmT+X!qpNLcVlEYRk6AGQWTxhAVWM*PLHX+Q4}g(gV*GR zVbPmp)-sBdu6`SK9%3D^X#G32E3FzVp85hrJ3;fiB~ZC(01Y*PO5o2fyt)AmjCxXS zS-BtRJ8Pp>hS7Uw6A|_1S9+P|2LW8=*D-j{{F?z9w1o~V$-Mt{oMP5gN2%X= z!5#kX<%`~D$e+1>euI|<^nQGqp4~<2<~05tg+}w+;(ntKk*{o%J#a`S(j=05^zx3( zjQht~YVdb24coibC`ZDP#`=8oW!T4x%hP_x{YS4M8WKZB`I94aLSoN}$)0N_jNdw4 z(VzhC;y&`53hq)Fm8rt%9;ZZ_uJ%s6vF-3}ev*p7E=yj6HSD(K?9yiveu;GB94Z3w zs5mZ*z6x?A^z{fBTn?I1m&rBnko_#)L}c~sd+z;V4}RXmu|^VJ#%R3sdyMIw2krxO zEgSX-Uc`H9iS^@3|EvRg5dJodlhlGZa=c+-Z_}??#*OP*lI$srW*8$T zq{W@PK2$QMc^Xm4XYted^t?RdgW5dSK!`$_Z0VgrMO7pRw>44I_i}9YI7RHiMDmvT zoC$W4?$(2JS6vPgzu0IqCDM@lI1!$%&bH_(1)^6v-%yw$$n&6abHFb7!RY-epC657 zxDE>Rj0jhDyfc%xdlYd@T1#}o#iFNMZ+FRI`U88*X$PAM2f@8b=+n7gT<(cQU{Rr2 zj5^&y_pXC$Fhdr)YvU5xd%V#3iRBt=tSXuM8^*_oPeJfk;xQCg2g?g2bsUSj~ z)mEl+I|}LJ*4FCWCNGhfIuaE>vqCWZBc$jHhPFP7PEO`kHw9J)#jBms02wkaC2lP5 zJ5dhd$o|MVj;JDcww;ekBj1a)0sMi%O@S|4BItK#-%TJzt`MQ@5 zfAQ%^{6sq;7QuLbHV-|{Av!D&m#IUFd;6C^UR=jaYf^!N2^JKbs3;{Y3K0^52tiD_ zf6Lu8U91!=J*-){6vUulC=4tN`OEw-szNB__k3LST#*xtNK_vpBqjv8xsvLYdH%Jy zr(8;{Dry3DK_K)@6fE5pRaMj+g_LCFlgd@N{)=Ttr2z|iqgkX(YEae3x_J(nnkg1k zFzKlpy#Z8MMCj%h@jJ0N6BGT(K%sCj>qW71pkQ%!=Zoc3&xw+P+?Knjl%JF`m1x{U?@1LU!BPW`bQh7 z>*C_U^1FFA8q=GPMb+8H<@ce#|5sFCdC2u2$6H5IlAGl}o04QTC_zv-6apr?cTZ7U G>3;yOtn{$} delta 14623 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\ *short* to actor1]) + _seq("[", "Alice", comment: [\[->\ *from start* to actor1]) + _seq("[", "Bob", comment: [\[->\ *from start* to actor2]) + _seq("?", "Bob", comment: [?->\ *short* to actor2]) + _seq("Alice", "]", comment: [->\]\ from actor1 *to end*]) + _seq("Alice", "?", comment: [->?\ *short* from actor1]) + _seq("Alice", "Bob", comment: [->\ from actor1 to actor2]) +}) \ No newline at end of file diff --git a/src/diagram.typ b/src/diagram.typ index 916b5c7..26866e1 100644 --- a/src/diagram.typ +++ b/src/diagram.typ @@ -1,6 +1,6 @@ #import "utils.typ": get-group-span #import "renderer.typ": render -#import "participant.typ" as participant: _par +#import "participant.typ" as participant: _par, PAR-SPECIALS #let _gap(size: 20) = { return (( @@ -45,6 +45,22 @@ } } + let pars = participants + participants = () + participants.push(_par("[", invisible: true).first()) + for (i, p) in pars.enumerate() { + let before = _par("?" + p.name, invisible: true).first() + let after = _par(p.name + "?", invisible: true).first() + if i == 0 { + participants.push(before) + } else { + participants.insert(-1, before) + } + participants.push(p) + participants.push(after) + } + participants.push(_par("]", invisible: true).first()) + // Add index to participant for (i, p) in participants.enumerate() { p.insert("i", i) @@ -57,6 +73,12 @@ let (min-i, max-i) = get-group-span(participants, elmt) elmts.at(i).insert("min-i", min-i) elmts.at(i).insert("max-i", max-i) + } else if elmt.type == "seq" { + if elmt.p1 == "?" { + elmts.at(i).p1 = "?" + elmt.p2 + } else if elmt.p2 == "?" { + elmts.at(i).p2 = elmt.p1 + "?" + } } } diff --git a/src/participant.typ b/src/participant.typ index 4ff6761..f661d4c 100644 --- a/src/participant.typ +++ b/src/participant.typ @@ -1,16 +1,23 @@ #import "@preview/cetz:0.2.2": draw #import "consts.typ": * -#let _par(name, display-name: auto, from-start: true) = { +#let PAR-SPECIALS = "?[]" + +#let _par(name, display-name: auto, from-start: true, invisible: false) = { return (( type: "par", name: name, display-name: if display-name == auto {name} else {display-name}, - from-start: from-start + from-start: from-start, + invisible: invisible ),) } #let _exists(participants, name) = { + if name == "?" or name == "[" or name == "]" { + return true + } + for p in participants { if name == p.name { return true diff --git a/src/renderer.typ b/src/renderer.typ index 531fc37..d8b1504 100644 --- a/src/renderer.typ +++ b/src/renderer.typ @@ -2,10 +2,12 @@ #import "utils.typ": get-participants-i, get-style #import "group.typ" #import "participant.typ" +#import participant: PAR-SPECIALS #import "sequence.typ" #import "separator.typ" #import "consts.typ": * +#let DEBUG-INVISIBLE = false #let get-columns-width(participants, elements) = { participants = participants.map(p => { @@ -56,8 +58,10 @@ for i in range(participants.len() - 1) { let p1 = participants.at(i) let p2 = participants.at(i + 1) - let w1 = measure(box(p1.display-name)).width + PAR-PAD.last() * 2 - let w2 = measure(box(p2.display-name)).width + PAR-PAD.last() * 2 + let w1 = if p1.invisible {0pt} else {measure(box(p1.display-name)).width} + let w2 = if p2.invisible {0pt} else {measure(box(p2.display-name)).width} + w1 += PAR-PAD.last() * 2 + w2 += PAR-PAD.last() * 2 widths.push(w1 / 2pt + w2 / 2pt + PAR-SPACE) } @@ -79,7 +83,7 @@ let m = measure(cell.cell) widths.at(cell.i2 - 1) = calc.max( widths.at(cell.i2 - 1), - m.width / 1pt - widths.slice(0, cell.i2 - 1).sum() + m.width / 1pt - widths.slice(cell.i1, cell.i2 - 1).sum() ) } @@ -115,7 +119,7 @@ // Draw participants (start) for p in participants { - if p.from-start { + if p.from-start and not p.invisible { shapes += draw-par(p) } } @@ -174,8 +178,26 @@ // Draw vertical lines + lifelines + end participants shapes += draw.on-layer(-1, { - for (i, p) in participants.enumerate() { - let x = x-pos.at(i) + if DEBUG-INVISIBLE { + for p in participants.filter(p => p.invisible) { + let color = if p.name.starts-with("?") {green} else if p.name.ends-with("?") {red} else {blue} + let x = x-pos.at(p.i) + draw.line( + (x, 0), + (x, y), + stroke: (paint: color, dash: "dotted") + ) + draw.content( + (x, 0), + p.display-name, + anchor: "west", + angle: 90deg + ) + } + } + + for p in participants.filter(p => not p.invisible) { + let x = x-pos.at(p.i) // Draw vertical line let last-y = 0 @@ -185,7 +207,7 @@ let lines = () // Compute lifeline rectangles + destruction positions - for line in lifelines.at(i).lines { + for line in lifelines.at(p.i).lines { let event = line.first() if event == "create" { last-y = line.at(1)