From 607e84665cc261ffb32a53c781c4bdeb6cc50d79 Mon Sep 17 00:00:00 2001 From: wehub-resource-sync Date: Mon, 13 Jul 2026 12:33:05 +0800 Subject: [PATCH] chore: import upstream snapshot with attribution --- .doc/create-termshots.sh | 10 + .doc/example-cmd-figlet.png | Bin 0 -> 33547 bytes .doc/example-cmd-ls-a.png | Bin 0 -> 64508 bytes .doc/example-cmd-ls-pipe-grep.png | Bin 0 -> 29708 bytes .doc/example-ls-a.png | Bin 0 -> 60777 bytes .github/dependabot.yml | 15 + .github/workflows/auto-merge.yml | 27 ++ .github/workflows/golangci-lint.yml | 31 ++ .github/workflows/misspell.yml | 30 ++ .github/workflows/release.yml | 30 ++ .github/workflows/tests.yml | 38 +++ .gitignore | 2 + .golangci.yaml | 6 + .goreleaser.yml | 53 ++++ LICENSE | 21 ++ Makefile | 42 +++ README.md | 140 +++++++++ README.wehub.md | 7 + cmd/termshot/main.go | 27 ++ go.mod | 42 +++ go.sum | 113 +++++++ hack/download.sh | 83 +++++ internal/cmd/root.go | 322 +++++++++++++++++++ internal/cmd/root_darwin.go | 75 +++++ internal/img/img_suite_test.go | 77 +++++ internal/img/output.go | 446 +++++++++++++++++++++++++++ internal/img/output_test.go | 131 ++++++++ internal/ptexec/exec.go | 231 ++++++++++++++ internal/ptexec/exec_test.go | 56 ++++ internal/ptexec/ptexec_suite_test.go | 38 +++ test/data/expected-ansi.png | Bin 0 -> 55994 bytes test/data/expected-clip-canvas.png | Bin 0 -> 12164 bytes test/data/expected-foobar.png | Bin 0 -> 13449 bytes test/data/expected-margin.png | Bin 0 -> 12653 bytes test/data/expected-no-decoration.png | Bin 0 -> 10550 bytes test/data/expected-no-shadow.png | Bin 0 -> 8555 bytes test/data/expected-padding.png | Bin 0 -> 15018 bytes test/data/expected-show-cmd.png | Bin 0 -> 19069 bytes test/data/expected-wrapping.png | Bin 0 -> 14113 bytes 39 files changed, 2093 insertions(+) create mode 100755 .doc/create-termshots.sh create mode 100644 .doc/example-cmd-figlet.png create mode 100644 .doc/example-cmd-ls-a.png create mode 100644 .doc/example-cmd-ls-pipe-grep.png create mode 100644 .doc/example-ls-a.png create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/auto-merge.yml create mode 100644 .github/workflows/golangci-lint.yml create mode 100644 .github/workflows/misspell.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/tests.yml create mode 100644 .gitignore create mode 100644 .golangci.yaml create mode 100644 .goreleaser.yml create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 README.wehub.md create mode 100644 cmd/termshot/main.go create mode 100644 go.mod create mode 100644 go.sum create mode 100755 hack/download.sh create mode 100644 internal/cmd/root.go create mode 100644 internal/cmd/root_darwin.go create mode 100644 internal/img/img_suite_test.go create mode 100644 internal/img/output.go create mode 100644 internal/img/output_test.go create mode 100644 internal/ptexec/exec.go create mode 100644 internal/ptexec/exec_test.go create mode 100644 internal/ptexec/ptexec_suite_test.go create mode 100644 test/data/expected-ansi.png create mode 100644 test/data/expected-clip-canvas.png create mode 100644 test/data/expected-foobar.png create mode 100644 test/data/expected-margin.png create mode 100644 test/data/expected-no-decoration.png create mode 100644 test/data/expected-no-shadow.png create mode 100644 test/data/expected-padding.png create mode 100644 test/data/expected-show-cmd.png create mode 100644 test/data/expected-wrapping.png diff --git a/.doc/create-termshots.sh b/.doc/create-termshots.sh new file mode 100755 index 0000000..27f89ba --- /dev/null +++ b/.doc/create-termshots.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -euo pipefail + +export CLICOLOR=1 + +termshot --clip-canvas --filename .doc/example-cmd-figlet.png -- lolcat -f <(figlet -f big termshot) +termshot --columns 128 --clip-canvas --filename .doc/example-ls-a.png -- ls -a +termshot --columns 128 --clip-canvas --show-cmd --filename .doc/example-cmd-ls-a.png -- ls -a +termshot --columns 128 --clip-canvas --show-cmd --filename .doc/example-cmd-ls-pipe-grep.png -- "ls -1 | grep go" diff --git a/.doc/example-cmd-figlet.png b/.doc/example-cmd-figlet.png new file mode 100644 index 0000000000000000000000000000000000000000..66f3ece72b5a464533f34c8de450516899ed4ce3 GIT binary patch literal 33547 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 YpDQ`+jTU&h^ZmWsdbbL0JpAW>0NRNkM*si- literal 0 HcmV?d00001 diff --git a/.doc/example-cmd-ls-a.png b/.doc/example-cmd-ls-a.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f55530c945118e5fe261ba3b1c5ddb61113211 GIT binary patch literal 64508 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 literal 0 HcmV?d00001 diff --git a/.doc/example-cmd-ls-pipe-grep.png b/.doc/example-cmd-ls-pipe-grep.png new file mode 100644 index 0000000000000000000000000000000000000000..df9b29b34867a431db0160bd5a014cd5a6cae294 GIT binary patch literal 29708 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 BHOK$} literal 0 HcmV?d00001 diff --git a/.doc/example-ls-a.png b/.doc/example-ls-a.png new file mode 100644 index 0000000000000000000000000000000000000000..253de15882a6b851d90ba18160224acb3434143c GIT binary patch literal 60777 zcmeFZ_d`?Lwl*9@MMVS)BHfO35ouClL!=|Uqkw?)-XSPTF9HH0O+|W%^n{WqRl4*N z0#ZXw=mA2)H`(XD_Z;><|G{_h2V+RqT64@%p7A_m8mguuM|XAdZsL4Pku0bnJPvx(b|m7jO$E$e}CxV?SQ4r?-}ZD z@`wip2Erc8HT$t%kTanfJ8Ri+mLA6b;hCJ%2Oaaiq-Vxbmvd+spT56AHJk`333~50 zzf{}jvk+^apPyfqUk(09rgups=8;By(s4+weyrw<|Dw)$Y2EM7f9@&Wba8*2!g1C` zJ-6>$S`-y{wtxQwy#CN(QF^xc%GI=}kn!^JaxB7gb&?e1ZQOrZ%euaWE8SQ7UMlKp zyaKxjLgUE4zX)ChjI~*m(wmnKE8=U`JI7CN8V0E+LRMFsIida=bKT=And(fl0|o{L zX1!U;-F3dt|BSUUSEfG7Hvjs88D;HqCQH4jdjm zTxuz2WMpLTHXOw+d2!68OBxgGZ5+sr^|w4&qdh%6bboKXuKw`-PfJRA;3IHpJ_7E` zBk=~(6(|&C+=FSRuupyS4st)mcdf-Tvv-~sGcq#yj>$M=c6Rnl8q?uxY{&!C*pqR0xSOIN5m3~n2bFqR2dgg3)D^W$0l9x`N`tlHy8SO=z+8S$ItDh<)Pwh0|k1$ zsNJqWT`$jHj~eHX(Ozs<%~Y2wuc&C+-CU&c@%@i)fR~pT76%H$2L=Y7W~y@u=zjl` z;~(^v*J~+2!SYU0sf&lG-N=PuTlde+hwl~epnG5-!Q9HFXMO|u@~tOHBN73BJsGAb z*D#NiR904|?uH(|(dnc@gUXwgU{QTlOqf0xAH(;ihS7xDTs2j}cLH1U3=974 zOUPwRW#xEkZ}eyTie$4=FQP`RZS+;rhY{n7Paz*aR`>Sw^o*kpf9Z4H^h+x)MokjG zSPn+R6X9s!gZ864Pn3LW7^jfQqu+Ds@aOYnMM?T+#NrkDFTV9?qg%*QSkmB;GUU5F zs__w_`5vKqW%3h>?dahz)vFcP)ktd{70@YOarAgGS$El~G4Cub!(lUh&%Sl>vOq=c z?e7?j^$+a3P{m`RyxNhv0f!$UKw7ryu}|?2#}_^?LMlhq9A0=LbR7|b<@4}1BK zw5wR3KXUMDiMvO3mXi60(AAW$?VAEeLk>sBkj6Ak2yNic zXIGUB^AsG@^Qf6_oxYH0FpR(~|MRk8$3ik58x-?^k8c>LtWc8x=>KF67FL`eO!H9E*i`^+W%g6`$AYGEUZ!uv(l^ zHMgBUJiCFo9bxE+?z@zE0W0@UtG@^kS9lwg@i+jnA_|=|;Cni%0YQv1IKlH6{<)RE zrm=8yM{$Ltp>5rX3{EJ4|FY<+{QILCA&6?yyDt-Ux1DmyYt6jCs+s@IK)d>{5xUP2 zj~YUmE11at{@ zp5orjY$`gJpBm<|ILZHGTh3bB*a#m}PJLM4(a|xZeHqU!l_F4V%m+SR<@h1*_UL&k z)58w3bzz5UQlLNB#>S@lXs}0cm`~~Bm=#BV*~vNvr@UWMrN=M|T2}Wpz znqK)cGBOfHx>46)cjHLI&cwvtAIBHZ5xN10A-1-nhkSqcaE>d<9SNryvek2KANVAG zU%{VheD`2d^FfF>I@EE6F!)XR4ZH6)STb=ahnFMmd z(^p^_Lov}^^k;Cv-kAD&@Hn=iq-S3XF|GB>|MXPzQx6fD4;xYkXu*=-k@^M(n()>Q z&(z+D$1|}-*}rLc#&EsUf%hVdK!4glHZl5ri+PV%zC6Uk!)?O6HZwC5tf4oy!$QOB z%4C#3*gXvIS)9%l`$W#0_VlN+!!$YZxs#4Beu-;M4=sh9Vo=S?57)3%3f<|w*<2u$ zVb+>c_0iCT$!<8LT+*XyguQw)epzy|sDE*i2rmkato{`2-72fhW^$g3Q&>nv{Hu_K zN`7?9d22IMGdpukNwK||O96I>4PJz0CQ6lYUlhb#O0Fn7z4;-WMFe%zf*pIwhh0X1 zC2OEL=VZB1Uhz$5)n8l6{KbA|F1AM1yxKA~6569^Zg=}v>bZ%VSa*MwZHbDO z-qKCy$h3AGXn(aTM$;LUaZ@?OHE+e~R*^_@B+YN~23p8a`rynwFYMGm}GTZ{RfTT{%7wh z*+gJfsFMkK4$CQv#|dKw?1h6mpyzk5A?Cb#B-lgiDw z(29z0o=y_-Ew;==MR`Wi)77UM&M#O`Elfp+Ol2z-c#acf9Nm|o_O^yK8xvO6_PL(> zJ1oup4e>CT8k@`9b{LVoU+eW`Nzz5r(7Ru_yR5u?l8noD_|;IS%E{16&#beGG9hNY z67q*XE8b@9l3lNOElq#eZG5_j^#`cF`)_7Sg zONT42zL?&+?<~Hm$jinCx23(}rPu2fSt!oew5y>4@zxp(#lm0Bz(Fj`V zx*5J_lm593PPr8Vm>}ir>pk`KQDRD|cde#UrTi53;E!InDs}$Y6~8ZY8;!qbyghj9IHhj&`VhTYN99|Yo;{33*>xb@6lb&BewO7 zkfK+N@>XO#T(>{Nd*)qvY7P9KBC0R1;sYFuzdIqRCh&E2&#s;}bT6MU#pKJ}_XXM0 zX{cfKktn5D<7U&>d5v9c*F2X}*rPKAhKzs4?pcp*>pHf-^(P90^k}+9^+@NK=g1<9 z=|J}*qW2*KLW0Vp936dLPHX|(qvmLz{^`>vP2(Grnw)ubaxt5?O8CQU3EWbK8`twk z#@WPuan>%+OP1AGcB^rkelDaMx_iAd7zU!l63^OypYq5KHdJ z0uI~F)3AJH@@lgiD_iI0us<5KhMFG%HVdOAFmd!2=AB_sErN$<+}uQ4+r!u;y&gv7 z=gzOM#9=7S5nI0u1a%Vq^6%ZRvD*FcG~3%q3pr`sGyf6l=bRpG z;<(YUARev61IlV~S990BDj{_(M~-(6(L!5%d4 zdKbo{M_J)9~#2tx>G^1&OTYEwHw(^a0{;`^?nQXygW0nZYYA_F-aJr;pY% zE05Wj{`HTCoA&xAxsHz6H&Ruy6*R93=zS4S?x+Y3p{@V*Zt6+sXUE(>j_|trXUkNR zdS*|6&F{6d3Fi@-Rr29;U>}ckvBP3n#}^l1HNPR^ldFG$AI#V+USRTT)1H@p7}<)KoV{W)WP5 zt17%7R`=gM%so8! zDLf5WZ9Kh0(Sd`^Jn9$z+ogu)&h7D^y~^>sn3w&MfM!3{B*w((yxs7Un(DPrm=V*K zymCJo{}wW9Mq%Np&Wy}L6RJr@dfO;lMk!7^{$WqqzjbPJ+4gmHnLKnJ`lsrfrTGH0 zz=pB9i!@U&ik;cKYdSwdSDcwy-qq}2YaJS#Hlp4wvDru+E!H@&><5ib1z>bGw~#Sa z!=%9bEBB|$O1jOvhpY(6QwP>^De{|r2UaROyOJ(eSO9X+)b6SFiPdBsEpq|#YC}hU zu=fG&_a8r6`3uwyXd~oJ4mQx15DWA;!*$?`9?(ibEJHM(L*B2HUDNq%$&+{*vCZoA z#6-I=5mkC4#z`GcyD%M&5h?Sj!+^M6KhLqnqBIw{2j7m}I~t2SN#@LFfKQ~Xmp7*| z*A=H1>6+|sr3-2mz`wAOqM^pmK<1a;QVp`V{g20jK%SfP0<=sMd5uu9Ko<^K?QvtB zlXB$4(l4*e`-$inJ`ch0z)j! zd*Wx7sek)ecGZ06m)Upddg2aIxsJK$gd0o`SLSusM6DlTH6G{&oIvKKo67 ztUoARi$`UqP%h?F6INRo9}e!>`O4ZplooGz?{jt=r&khtWbp=Ct}@dY=8xgTFRv=e7x6F64`QzAA>n=dzi`zco5r~|Io0&+9@}$ z=^e>c@`(kSyhX|$trf8u&~)9Rerai7FuJ$addWcJyqwA>wQdx;dJlvi?p(5-d?w|>ug&0D2yI?HvjQn<(IF1Q17XH zCj!wpqT+%0-%#N6r@ydtD=&Oh)7FQlUm^}9;B`#NPUY}u(;%Kpkte?OV#V@UVVnOl z5fGSFOX*@yJTPHc_j~c9uppxVarg9&SkP0_=MNshLNmBf#%}+3t<6AlBiJgFnz9m8 z7d|=sD>UwlveWprWV5aIXF_HQe&}6;t-0ClV3^-Md!)-Bp1Vx(k-9sM8U?=QE)nSx zJWVROi#i@~nSl%8=v70hN>9JWtP_V^eF+(K^?pi=`MqQB+D?q7?ZRd7k6K4$dM;%y6uQ`*x41kE(amDl9)_a7ap7$P5A!j z<4LCp3E{~(uc>Qs+yp6o{Sv4BspP5MWbGy_y*S`!_J=*yl7G-T$ z5|Ll{SCiiY8vS;m4AYSuV9^a5Ek6@1N?4mPbQW%li8&gSSfI~jpsyd~y^zX>gqfAx zjc92&DR;L?UQQ*1S!2<3p`q%d=uUYaDt~Y}OoY|Fu~kGe?#Bv9^hr>E-cDdi}a1Djj zcZZx{sI&o5WKyUb&sRU3U{~mb!7j$V6t@AfA~;$qq<6?}kV|ayU(yc01yPguJD+v? z&EE;LA1AK=(jc{a(i=>xY$>j*I#wr3`_GaW}Q!xfZ0x;VGds~YWkFSVeu ztgNB1a*V~G!j^d)t#x@vTQr4E?jjpIgg$1`v5cjQX$Om6gMS88z#+MU3Q0weePz8O2;|t&IdQN;_h4qWDTH|Pi;?2ePfyW}k+9X0IHF*SA5lG`9i0Rb-c6QM9lCKHr3FJ?h-X zUn_(E8ZMxKdSCFHh~6h}ckSOgYd#kFjxcC|5!kjSL1OoBy!o@&7T#IXY z3}o+;rSd^zr@htY=IU`W{`yfL^5!7di-Cz8T}M&ew>XsrjQ|7}Km|fhlMUuc!j>v2 z?jx^OW1@Ypd$BnnCW5wS1Yt>U%SlroG*q}H?@PHa4NW8ek|_fy2fD&74f0u9qXL>A zA?__V5=W?qi zH=I{p>P23#hMfjO1HYHeK9+XLkQ(}ROxUy2{k_pm2VT-PLMZE1SsWB!4w~HgtJ(VO zodfW}X%j3tupHKQ9CGQ7Vgg@iY3Dtg148Dz*(QpnzljA)sAV`RKXGrj*xpmDSpuwsKuM$3I37YqoZuNbeMm3MO9VRkPo4DYNeiDwMl&TquD*X zF7rF`S~#G4H*-=}f=in9i%n(QKZ)=nVXfTR4Y0jtm}@o6%*<>pg;5e!`R`>N0HJzq zOi+LEve=-Ubvr@;q#;kz`}UIu8*zzEhVy6u)MvGkDQ;#q*&(V;pqejAdTU4p1H66@ zF`t#JaQuCKV_&X@4GhTuowB^B3@w=h$6w1P_bF7WvC9y@C@H;5)6 zp`6q19IkS+;WMf#>-rzHamyA|n;$Fv11!o=N~>DeUm5n&se@-0sIVPAXR=+#G&y1e zk9^ge-{1IEHhdCB!NG!D{iP-5zs21vgo0FBY&%>sRQ5_kJxR1V|I&6GCGEden(p=rO4*(YHkYY=cIh$-C_%B9OvOZZ z>vSlL^10ozIf`9Az_UJxE_Fmza=FY{>lg(~@E>%70SW5{F!JNKjDFw~}8?k*sm8jKnb?2dUk;jM{}t zmT8XUYf<7?XWNs`la?z@ls?_%eiF@*nj(ka1LG>^Ri!sIrGS>U`s-TsM%6yIMwV+; zj>AlAe9L;D{V2j|wMh&ml=KLXWD~L0w8d75Xcy|o8|HXo>?&`p&qe?AuPtknQwV;az)6e0n^f+(PL#R@U zsB7+Fzo-ibH9iN5k9=0$^)rS=SfB(``M52Q$qW}**&GEOW$PXpT^8@(@G{TyckN>r zg)YppGl>Y(M{K-(C2vqxE{mzivNGDq9xC6X3?Y{)tS~i2Oa7S5X63N<0_tk}q4KG6 zndM_-3z0Lo8AsnUVT=3JI64u)Hc$pF` zyZky>uA`m$s<55=H&!mWJb$IfS)w~jQq^WQWp=uZ{JiOkotC)z@N3nDxkNK6*Noea ztkux$91A3|M2_7}GrMAosEfo1cZz3ZNE0bwjOzxW`M5s5c32g*+q*p{2Oa57U?qXt zZR3lR9OurD9^a=BSAWv`-$p|1M#`rBhR>@?b-zT9`ji`vFHZ>=R1~zCm1O5;5eZ|e ze}!*-Bb;m`$=%uU(r}~b@$;-jd-nyqZhocw(lFf{r?|kQZG87( zsL3?BqOz7Bj9O_9c!po(52J@|*BjMEN-Wzov$-f4I{rM?(x|>qA?$O2UvTa^1yMV6 zrbx8BgMs=u=XzFG$OYHAoWmC@iB8|&!>xiW_jM`!sEe7QYj^s-$rPHhh@J!(!`^ux z06gWid?B+YR|x^4VVYyz$<;9;N~{RAyP(ql(A(_0iC{6wv|+TSOKQFSdWv@ImtYPS z2d_4RNs#4LjD=KQ=UxE8b z`z;U-^6fc@y~jS8*lYdOn(i?~W;`#m)t{5<@;K4YdQ0Zk6LuHx2x$^^@jM1LKHtVjt5uJS$#pt!wlqwL z7Rp9VmH%)&i$q71lTZRrQdbgwp%#0Fil>>1XDr9(wB94|@5LTZ$?fk8EDxt*%r=8f zd{kpt(Gz>B&2t)E(VA6@J|90N(L4t5EMsChJ!08ok5ANuq$=CYQhst zVRDLyz)&AvfhJ*fIu1_e5IFr<_2ca;J0&&E96q*cvs=mIdpErZ2`c+Lv^>s)<~BM8 zTv{|hz+CC`4PauS@kj$w27?7j&X1yA9rKN44DAD@JAe?Ub&SyN%#hDYNzA0CZ*BhS zccl!iHtNt}Cz*`cV-#dNP{F5L_aM(N`vE77>Vi?$rL~O<3k#JW8gTCXl8dEH*maIE z25S5PhKT_9qreK0^HHzVqA?M*k$Ig#zXP>5BiOuyOCLAWEm6bo2~^E}-5wc4C1_s6 zhv#Z!->gLXJ1c^DJJjk_GgsFm|I9dNy4l4{te#~m`c8CzGM$gL97ND?2`#5`pCP+e6W~7s2co4>C_%o?(3Qz8HF^DiC0@^Y9X zvN=y>Ww%H44K;oAoOctN-JlH%3a0G`HQG2@M6JuD!@`;rUGmE&W$ohb7_G6hR|b+E_J#q;qnW(XutN7+tkyFu)# zuot|9J{P(-{Z0L8N15MoS8K@a-v=##XS3v3ccyf5M-wl+=G;LEFEFaE=&e}qfr8Dy@|&QfkhdKg!x&q3F5X-F zb!{pyzeu63wpPS#p--H&R2oOyx&{(FH>mfF0C)0ukAiNEEsjf7z$XP%{pp%TBSKi0 zAKpdC+jS6fAMeyIorZKu2h~)-tddvERq7mhK?l81<`2xXd8v~x>$c}8XdwaMpLc^& z@2tNkvB&rn4FU)P0|_~tBCylIB@?rhSPFVz&y}AvQ%GEucFAIwO#*6_m{W3`gnMzD zvkSml!Q6nm)|!L&HSkht{=4(j9*X`i^O=P$8g3*Ss&8F__=Jssw!dDIf?Dd5?WKzp z!b_)fu6S)W9>o7i7%}pxn9^MD>ilY)Y27%CYvBwOIqs61t4I%ii2s$I-Wrjxgq5 z@}2t_P`@? zO(3I7mLH55NBeJN9P|>V0Q0gh_hzd`SE9+w@}K#}4aU|I5C9aKtxh)9a=^X=-FVs* zE{R86;{fRzT$SlwUU(TRKzQmxlhOn))%G+p?vz@oMMqe)-;&uX(2_EB%&7z(lthu;+5WC$hN~g+eKk+y;%9L`3S>GqMdF zYDK(KGu3m=r9C(-)4VK39qZ{{5@RH10cAtza|b~5pvR4FKC{(T-yt@hax@y#{HxY~ zY_rJ2&DH__(V2+#Xol{uLp|Ouy1>g71#8R9&x>?KKe+w85;@j#m*GU~{3* zO2@x+ukD#pi^9k9Bu!sLz`9w^6{Oa^GS{qUAc5}YAbNa}qLOL3_K z?=l<3K$(-_867Y zVNLHBz`e&`Ml~ME*-3BPFz@&z(qieltQB<79s;WbrVh2^StF)O~B6&00ut&8!vL~K*M&joU&=M@8)bQhIQ3A*l?q|SP5`I;c1>L0A`$X&Z~cz zEmO{d^tsqS^p{&Gv`edU?*0y*#6kDH)o)j*KLMW0BXn=1EO-3Hr{u@#$aX$Q5@5RCvUwG9*UTlA2cndpeAs_Cp7bYEC zFN;SW1chXI?M{aSUW>Ca@8Y=cdIy$6_yUw3Ik+P-XxRHI;(!P!c3T_}ARW~DRAbgk zth>P-wEO1fW--{U4;jN@hK)*QUHxzcXekChNDai_{@7*G zw!maYiZyANT@;9>)A5rU*l!ze*cCKpV5MwkbZgcz3nq>a6RKpd}!d?r`{RbPEu)j+dTtDpshhCG%ZJpK_vDMjWICqzmpMHoEip zBDwls^x}`Fx24*CKp>B-+jDVpc@;MCNO#Eu%DvpE_t=3C1=%bt8LMQIu-y!m<@JxO z`^#}>b33o3wtq+xnrSs4jamv}2-{u<@T%MHJO#gaqw570*A#IlSk-*hiDd1Q=&9ySr}9 zvYo@CRr1|e>M5Z79(2@IIxd&2I7vgzVa7xKsi2B)gEGZ3XtKXQR823=-AY=W8pmR= z`J?P|G`VsP>QZ@EwSJ%YdiA&&rRk#b(i7N|$l6NXtKB)pauNI&?}ywv@icKPf5Ul{ zeGrqdZ%=dO;l~nq(}|1af*&m{(r`(`+>$OJgh{65`dUfDw%Sz5=`ed=4kE5w zj#I>U8?In)Uu3-qsG%YOMO9UuVW`LQ$czih%0ciGZxN!-CK*6N56yk*3D+(m*8j$59=DJ zWZ(eDkpQc(0rJoL@eYPpci?0_L)jhcp_CD&Ph*=|x+5=HR2-JQt6q5V;pJ|o`ec68 z=%H(tSW|gQX{%J2NsBa|n$&lDzhOYRnNTs-X0<4-Wa}5C*qAUwAzgr2J}COYx1IO_ zPF7ix+tL;c=Ds3dV6>~a$9(?!YC&$f^)^tC7dFq4d>2o9zZOkzfBCo+?S{ zrd#wXC^m^83$%O`LZ_^+udSJb6!c==r3{4zrrDGn{EK4;Adcn85x_~`|2-M3v>{Ps ziqmh|C#7C3GNCvw@U$js2#()mCZf0o1jr9<`ex2K&2xIL$FF`J@acYe z{)2=z+<-zqYz!DU9J@;Zc<;RHj|5A|BtYI;D>|3Q{D?*(XrF){;1oKzBNcDx5(;8d zQ~AM6ZtR1=<64QEbKTeGyb}aXiWYKP06cJ`YFKlDq@y8|z@fOgx$iiArFe|svDN+5 zHb2)Y4I=>xG{%5xtJ%}@%m2jZ zsE}FmPZseKdPPb*#!b&A^_YbE_RqMUjm|+jTye?(*5h4w4JWf@{I}vUs{A};>!}u> zEqy08QU6y_Q`=N6K6vj}lm;Es5--aisw^!F>F|+L_m}%}dRwdl}!G z9sMmUOX0z5BJ$d3gfW6?Nkl_MCCYXb@$A@{wl2Mp!9oKrv*xJ6G>ewl8~%ZsfoCHL zf+Js@$esUh04gA;j&1P_Ameu%K`0e0`_WvxfFgbr@I-v77kIbteYGT&8gjW#s`NRa z=8dIS7()Oz$ZR3GlKCk3Ob_62jfMerng6EYNKAS<{K#eO=Hg%%@6-#w3bW=jSjT+r z!Z$@zU_hSM>YkmSg{9?Us}!g8#)Xb$Sz+tGTbpX>)u8=*xBQ~M>4||u8kH9y5gEcW zXNjwktYRuJsfyIKwX?RypPq7q{c39y<|DS}OxaY`)jh;IT3cJ+U;gSY&MEuk?pClB zyz9%OVDET-L&WXR6-(~bzJPI{Ql^DODzB!%7T&1lYuXyk3w!pZd@Ok5VaAWzPcl^z zI%C02rkqdzS+A8MA(v_U&S^`*V868C0_Uy-%6Z>iVso-1=x4n#Sv;O!mQ&`ux@62Y zg^i0oKcbF`hF(WZ|7KL2+-W(z5fZ)r@!#TDr)GB0!$i-?0Ab|q0jInMx|Lsxa5SD# zs(@Sp1Hzv<0KY`WU z$^Ujcx}NHJeDnqv7b!(_1QULfmse42$x&Q0=;hl^VH;rlJe@yTF)p1Fa$+@B-Cy6| z**kizkNi^yt)QTA}plYmb4w^IckP+pAN~D}NrK*X6>VL5llX_Glko z6f`y@_n^zl?jnI6nAfcJ@>Y;TF~T3`&2rEv12NN2%cb>T#8k}5PS`Ihe+W_5w9_WW zchLridVyzzKw@xdR9{O!kE!ZHD!7EXXyxpIDGz&@FrUE+_`gatg}l>)DI4#u56^yr@SJs-2gk1B^S+6 zH35RrOZs&1A2w-kP3a}E=RX1#O622i?sN=g*d?Z6W=D}t%p*t6&Xa%6{nW`=yPr+# z4t=}=Vn*e!m{ILAs~@ZN3A9$kXajAsv&YnFcBgZez{9^L(Pf$Y&>{;Tq88S}+c1{%n=hJU2f;=;{3$ba;K#@PPFM(sCy6di$NFSD=&V zLHUsuCJGApigo#T)@`mcAEPBzJ=x$A6ja5!u-vtJ&jPB3$0h<$?)ikNJ-58mtfK8U!_+S?XwFAlJ_-9I&K4Db3E$cR z5GoTC;;K6w>a@{t)UE>4eJS%_4CS0Nv$HHJ&{sXzvEM5=?Z;{)azrzb&~5L_{p+s{ zOnSZWOc!Y@S+7N|KbwAR1`FBR-Qc5lH)!eXJY($*u{v$oxI<}999&M^ZYW=vb1@7@ z3*@+w6SUbMe(FMbXcS`3Jid;G8jPRqnJ$5bXWAvcUv#uASp@^jU%HDJvy_sql1aow zpiQWqVG~!&->q;M#}i*#mjig`2rmIW)OM;R&|jTFv#m|fb@OKHkJr>%Ue|%%0l#CC z6l+rgVtD~#>OspSa5`7UJ^|hIvw(t%$`%i; z=%4J*pD#~uouZ`$ZsqUKkOy*s^nIO1lYvp)@58pv^>kvtz#(lLBc1P54PVS@PHL7_ zCT?uF!b|pi_vxFi-3H{$v&B37{K|A-1QDQWm+5+X=*A~)%<<-EPB<@VcM(o)&znFB z%)T#-^;BW9b{9Dswf=15oeL~vcDJv|XY0z)k{L*@)+A>KS_q3|V(-~SfwuykJhRh% zA)+r7PAsz#e$ffs;?j)SrNm|%a&a?ZFU;zjrNUY68@Yl;J%6bj9~&F{4V2D17VVc9 z?;2(T5oiqzNB#m+8T#2Kcg38ipJE-|-7A*H(c=Uu08=%HTcg594w$F2^p{1eZqjdZ zjDq%e8fZh^*m?=CHS^zsU+V?y-2SunzWrD7M(fe@wArMLYjGH6K_QTZudi`rePx^2xbHOpt@8yWiK8xb)FHuitlI2Wd{CO5j$|>x&+aU1 zlz^2hH#P+ezQSm!mD3QqKyH~eW;^B8FR8+YFB@MF6w4aYom7s#2`&$h z`Bl4d>OQ&LgJ4|Wp0zj#PZUILKkNjG*I((9Kx>7b;q+a3fLzGSe~6-lTwiAKSo!m_ zs^tEgfby5aWv}7{0tq2!uT2BGH~J|w-_s(qe|mcQt)`B@KMF93+9f3=d2OhD3Q2#H ze&Xl90n7gwEwR4qk)k$%W>`AuT1dLqr!$quU@&b5nTR=?s%E*Mk3{m z9JVFF4T#m=#}pId<8uSr9MEL#mrquS&j&z(E+{D zj!*!oc^bIa2OSeXkt{!9XTVl@)?RV|(kD-{qp}p-E?LCpCP;dTsgfQ+wdq>=mG;Y8 z?!cVy7kvQGc}c`$`|HIXIm7mzgs&F-6O32a z(74uDJ#vr$`_g=F8umq1*x6&Nw7iLUBO_6e^^73J71C!|MU?;rCgE}<5B-Hee?qWR zZqwlIV78^fmkJ#WlRoh9GdfVwTj#8d&W*x>0c(hEe|Zx#r~ zQZ=OBb6ew)bo_Jw*CwEk<^9wu9i{)0Fu-Kdl`98_3ywC%xb)$~6-jt?%G43`y1~7T z6DF1^{v4lAiS&Zg8ZvB9|Iz#cFubw`wDDtx!J>YjrKn%`^!8GxRVtX8e$_cnpAnpH zIsr7>0XodG`_6j$J|B?#X%SIs1M+2$eS9R`7CvZdYcG_%w=g$9Dh0I`wFJlFAgf^b z;3ZJP`}JOzPaqH`M}$gBOJ4%kimD&`n@IDP374_U|7lS}GT{OvqddSkoonOqfMf17a3rv52kq+ZrjtWp)X;%RQ$T z4LJb^HOMEP`DMyVwo$b^m8#E14keQvoMd`H!|b*+)ScgcYlV-Y=(eTILieM6^_c#A z9U4YHZm6Z5n`Pc3`p0rUK2G;io#%dEG15c(liyeij@H$7G>mwR`(@MqR#Z_*c$V=* zi(d89U3oDw7*9H4Ohe}f%aMPC(Y{((oF2VUZ3S2D;+q9Ke=@HS;M?OO(vZjOM4CVg zD4uNa&`d??qUEa?@paXKg()8Hh}}Dl>W1OHz5v0M)HMBhq2c_AaJq?dk;l$3O~I_lLxLDB)1 z(@988U3ODFLr4AZfIRiDfL!tsBe7X7_ox;mk^Q17H#q<)k@R9QytJkPC+@Od@xmrM zZ2ZS@7sDY8HKgwVF{#tPMJ|qy6TP~g-tHxgl(*#<=)jF1ln<6#s=`ZBCCSj5B}Kg? z%7f_<3)PkOAqJ({_Pj09#(V~EsV-mnf`+)Pk54!Fk42QlM!!6wc{Nt!rRMfl15ufz z%PT0Dc#sfvv>ES?=4x=kX`bRbl9?Q_|HY^Q>mb~Z^=p6crM_P#OQJk4lb!T8pDA*a zX&$a3b!O3;-887_a*CRwu}&EuX(WcH8&dArvMQVCFS!^RwrxG=Klb^BCl~>7s|N?Z z{YjYdrUGc%lZZeV+|S{51DqDDqXluE$A8KnU&NPM6c#_o3*eO$k&BBQadJmUCOIkxM?V zjc_toIi07qLGOcuIFCTB>^5iET3q+_A}Xo(Cm?iMmG;={pwR)z)o8H_NKToo98#X& zTOYE70E~JxegfbDcH@@^^#6}_nwr?R-joi5(wU|HMSjL&cPV5ru$rYNV0JBJZsRD9I@oTfR}B{~Q4SN+5w z6ynz}E0ta7d^g$IDD>mBJS{1vDeFKTWG z#O(p13-&VK*HWX@eU4k%0jAZ?Y?s$|z{+KLpac>sj2>EdagtsTmXx*1X3lT{POi%- z)KZn!#sCs9VuP(Juh|;0Spy@pkJ7vsxOe^p(od)P;B&RqumESd){7=9XQ`%h{H{3| zKvT10hx!}36UGX8S%obkzGY?}y9)zhWd8f}gQ^lnUhSu{va)LAoP(YZ>o|_`dz6>0 z@a$QPz4%9(U+os9hF&xA#xwHr^5th5PG?)$3w{ErP~IOU<7wIy!3;X&xX+8Hg27f& z9-G3%N^AxNu>P;^Bu(p}cjJ{l-hLpKYWdkonWdicNA+%He9%{+^yshUXgP(l!R+p~ z8wdZlkD9^Aj@kCg!~sW9e4&FB*nKgS6vLRD7=Dd_m=HIBe~GCEat$=ok)@Y z1SOh;cAZ*c>wOOr*X}{~7$?*?6-vqjlG0c8k05n973l$iDPB|ll91lyh$}cX2JoAE z$8@Lp9YFuV_604-xjjWjlJmd61QxZ=?PlJLkB?uFwa2SK$r}MCC5#~-K3s^O7Z(xH z(xCuhxV6{}Wis}AsGqp#QS|?gs@}b@ImKOf`x$H_%{^QP$u0A&hq6-eG1hebJ{akY zxe&T;((;DBK?^Tg`lfJ@;T2`c_tn-mQ_oV%aL-;Y(sbF|`}gwEug*m8^r>@lM%Qx( zWdstUYWvm(639a`=~I(5Dg5)5ogcQZoNpY-OxL})v9WtJ*69d@fy2qkX>B@ARRQ$R zZZlKO(TRXqk(u@eX^-9dDMajo}GD%^uG=1kea(O}1b!sk|h^5jXX&2eA` zAfwQ1!mHtE%Dp)m&Eb-l;r0kHIb)4{SPt9w$F97;@~E%g^EG0rq|MhtAyn&oK@1=( z-K&jc$Qv3)diwgGyl<;wxZVf>?&=_g{`PakAv;cUNa>DL(D5sNg2s%D`>mcnGk^kc zJ6W5a>EgxK$;R-&yi%bhddgeUcF(1|1MAPqh{UI%v%BqWZR_51UacRvd-AmMSuoYR z3;9}(_aJ?4-8Illc4v{C^En@4;p1C+4r^XI^1bL9!BxwYYgtDF|M0q`=-%6mX;@8^ z@2wtBxY$L}iS4RYSE_jXKCx6Lf3&&|#I9Hidf4P3c-}ncjrYPB=N$H4d#*V@wPabY z1$_`EhAugJWyL~os3G9WY#?*)Z$1TG-Plp!+`<4dVxFjU&db&<=SbffyRBED+S=Oc zV2mgkMF?a`w5nZ;t$6wPw2lwwg|pBzUE7O2v!Gbm zoWF<;<$iY07%ccU|J+`>f~$Om)pX~3TKClJ*WFW%4=NN2afR_R1ySf`AZyviZ1le0 zUm+3E)zV@FE&SOG)-DXwLo_ZEJG+wW&Pv8wc@>xlHV?PDvaZLKBOA=#bf^quk4Rc_ z;o#36#4Q7C^XG;C;w0@78L>U*iI&yWhteQz16WT{l5r=2wa?Wo1Pgl^h*KuKZXz2- zh8)e#(MYmk^M`bS?5DzIDgcENn$HUn0ve#me_Rl&ouh90^Yd$RA$Q*73b0)2M8=`B z3p+De&AXEW@LGqf-Ac2y3LgpzM8(Imp2oe{Yy2`+*sBInt^O*JmXYauX{J54mRmN3 z7kM-Vn)7fN6I+1N${eZOn+i%nkhw(|%|SrNIb}m^auZKnN-Dq|T5r3>lxX$nV$+_7 z`;&fDGeBtQi-r&1+ldTtgc$%CHl)(zYpX1tH24#4g5Vj+!b_(-Y-?*%nH?@b zuTL1TR{g$TJgNpG1P!1gA*|ko9+;g1>x6X{y`R?rSy$25XC)9m{L=bniqicaz)~(S zI?aL!A`h>>w_izA^aY+|&+uA*&c_c=fpAz7ZL#5XT6xc+Tc+3)LZPFVTD-MZxt=Km zpklB2$KL*cpJEBe;&xs<%DTGQQRY+P)3S!~B!Q=YYVP0~AghywboyVb(`xXG=&H;b z!4H$CPg{jg_7xo8{460_eIFYZ_Bn(MK_TMR&Fig7-KtrzP)lLY#-WYz9}CT90a|K| zg@oW(r(H_!P@Z%kJNV%1d(Qdvh@4pFfch>Ta%+y}j0+vZ44SDks)XTE{M5Jt3M~WH z((biCeCAMGy2I$N$43}PEkC&aIcq?hb%vM5>phYj>-{* zRK@iYY_ZCV0(LY0Yafu(wp0^cyG*xwZyu(i%;Q=ox#W&%1;FB6T?PV)Y77Py2VP+? z=f%a!{{sRR`;mUiUyts!XEVPH-sgU>Nq?p@oEMH(k*{{oYPEU1EXb0mB^})n6?RfX z)sHfitNXYs(l^Vz4aK=5C>Q*af!UuS8O ze>a;fARvHgp%)oh+;R5Gby*|pK+6>0gI(bS>4*m}N?Kc`**|vp60GF_uX7Aq$&5!# zyN(&6-SGa&Tj zjy(pY4csA2w}E@&Q>`EBc} z4d1orquE-V<&(Z-hn>41Ud%d%(Md4T33WsLvy0cA;hT=a-L_NSv94?Pq$(Hb0%WWy z`zy#kekO>&rURS+wzdZ4AZzES(PiOBMFYIyeDYJ;MH&-oiA*KA5n=1cx225O@GIC* zq$Th`D6Um3=PpfVvNVJWY)S@ine~_@D7uWdA-#G<^Q09#e$)d7+_f0NJm`ebr%D`` z4^6hL#|3`d{{j%77GZT(hKsY*J%USYyu4mKlN?yr{Yzd9*z$UN{+b9^WFE5TwatbF z%E=@R162B%I&5B8L#bv)&_3s?$3Ylxo3y+9Jj?B{Z(0g6b>_ztR;!s8Ry(F(WTIW) zIAI8>nx^icx_}v%3)>xaochj3x>15cebNDnxOL40A$*lJ7f!IrxPd}__tC0C%Gm2d z1ITmK)HP|GDq*vMd?w4t0ItC|!LzfoOq`P@2_Dya-D^};Rlh@1mwQUJ{xK|mrtf_N z&c?;s_*9BIWj3D>wQi;`$f$aQ+ge-kWG22b0>^MjuA5Qpvhd?m;(>NbV&d2N-OCn& zrK5I1FeZHIcig|ccr^AM=IaZb+pu-rn7K#RcKl1GER-$yfe}AdqoG%5^0Qn8%duye z!561r;NCDD3F@zfAqu-s80G)^&!aCn9-0kgl^xZ4`q{^OWEpL<%0th|XiOgG&Ir22 z4Zb|P-KV-X!s4P}Kr_4SQA^xBY-ID}h|ztQkTHHs!Im#hwCjB0r1qCbFPhK5Km}W*#3HE zi(CMsP?p`bdB0J7%!^gK&6CdXZ(3cFv*U7v9=w@$BTRhzUh}OPwI@>2(VoY(EQBe? z6Uq1}|6HIlBT2q;5-$NH&Qx#03wS~sIM!1+oWUH^yZqu-&MKhxND63LL7lp)YP!XT zwOIMItJkmN_Kw5Oa7#naF|w6hOC|AL{|>P1NJsM)>2F`9Y~2zulN^$F81mOvL%c1$9RP3P;9Oivlhw2sntAnYc zT5K0)OpCA7x1&5Lj>!4ImTNb`7Pvi=$r8PJyREN{Mq&KkLonlKlS}MMuN_58Zd8?; z>-vSL3@QKatPjKdzFU0_4ga-GM5$@w^b?ZZZ15#QO_83hz+rkem; z)o&kNaKJ3-2j6Y?2>i-j^dHkvuSqH-+GeE@mV#qxxklWtkDgKGhYZptaa536!KtaS$%&wtReR2!}b@gS83aN&!)U*@ZUSrpqZhRth$D&K?E%VgWv%dP*uV35MVP8KpCNC`=h|Dhc9G8-#;*$3_Nw9#0LH{H7fop?QLsyqvHR?4y>zT7lPy%6~&fu_&fsbY|AIP<| zAtC!*T&?=EBpT+g3@_Ma>8PniJtVZNhwuGS1F4VM1cio1!%!q`XIC&#=HqiJ&w}?w z;Lh>!W*b`;YK$pMBTpSGcCveL2bX42poZ%%{*n9D)gwV|kaQFuAdH2_8(fgPlL>btOq3G`dDBVhi4hMp_b<#qiuP~*No+N zz2Z*XmLH*;pK$O|oVaObWwvkFmqXvf?@8(OtX}OTFFV_zOm3MwuesUyw^wwn!t{A0 z&XYaTwZkavdFsZ?#eM6;2dz<_lxQI=)TP@XHn&!#?`P5}wNe|pi$!C>=BVL!kzxjF zdVi$g;qQ8cx_gg4cNVAlzq49`m5k2cxZC{X_Gy$i4z+E&1EJ3SuRS`$j%pOGN$C!2hhhu%NKJm;4U3pDYY`On)m+B#UDaRbAt1>{+_ zcw?P*Foty#tmUOxnqS?k2Q*alxhwPwtu@C7=J_M5?8{d!T?k?OyY>I;pC7!MhGS5g z6>DQuy6H?0t$Ul*l<0R(^EbS+SB-s;Cf@#(oyU}^zte**SBtC`9l>%a*)SWZT?@uy zAkVHcGBM$q#e+m!^8Por7>q)^0ApJ;Td2so;=q?`E|vj3=eR+OlBLIf_0$Po$1bv% zS4~0F=l|;~e7*h$z8!pTaSnitii0!tfWW6rco64%!Y#7meA@oD?j>&9bpv;5kO@`; zW49M~47Qo5#h$d~R-yfwD}ZYgt}!m1Dv9=`W@VLUtz6+Cfd@0!9lXV$o}wu9{A4@* zKiB#9>pv`^J+}2IP3K{F{u(S3(Z%uV%2AMB*)8Xkwt{TT7)p78{k%NFIYdN7NrOP+ z2{hm!Ye)g6u)+lpk(^T{Kc0W7?iIeS=kU&9xnJ%`n2zoNl>6IqAMf_bsi>;b0^cM5 z#`WwW!T+owZ^A!+cst`Lc;+rN<^;^Bu_2}i)kQ6Vd&Qr75uuR>>L>p@g25FdgKl|YIwi>pEvjR z4gGV?3aZlb2vyv}G&wOrDMkwUMaxWcsX4T{rZVhwwD8#9%H6zd8+Fw`Yav3Fa*%q* zLnqmAMA~*P;f>=i7V7K}__o;Kfs2H@DwC&QP0Put!g6g|W@U6#cORNnV}O7P01!{# zCCYE!Q5NQl>s)HjW{sBF+}u=c>IcX$V|^aF=KQsrUjelJ&)2VTQ%DkLT@?n4e}E&* zvhYfeh7wZr?B{)t%U7tZ;dBZ8M%%dB0-R~DbbOJ_^2quzb{pYN^M_(v}GUti?!|2a#AERz4@<&E=)vi(1P zlZf?)i~B!*^GpO(asS89LECug|JRRU$zOwy5wUDAk-KWI9H`*}T2VvcB4&Dz|E_j_ zzKdZ1vaA%XV?LIIZIi`wl55nMX25K6kiK0Hsuuq%R4_;64RxvEW2XM)Q-tFyN$46YQRfr;Zg4tOmT)*P|{gD@t zY$z1h-N`*SBG0;mf1<~^&YS^{xAy@vYv=qe72O%Hxxs@3x|Z9RXbfoc&j1f&%} zFWB%Vr>9E-kvR*127-sTbTMdN5IG|3tkrmdKKJM9p-|5>|J>EHzTEnkyQ)OO=yeg? z-*D{jOuNLN;Lgg$`;dcFvhw4DWtwhvb@eF3#{W2L9egA?c$@g@fYu#?S~?7rWHL{m zJ`L_Mw*>HxXA_){64=);9JW*9<=_SISql}0+LL_{@}?CRpL9kI-Y>5WaGg`RCty*E z?(OYenuNfD@1PU~)&QQRKRQug0;=48Q#p{&++bGEehX&@AQO&Rtk8$$E2yi-`b7HK z3V;7KBBvi9u|gu=m%HNW8KXy;<|4K=o#8oum6(_)0yW@5GwgN&Llz;f2`F(K3_o0e zvj;n?%+BL3X+?lZ{BnWH%}|ROTUY&(y<_d<DO1JkUL0ICt~UFvIafBy9vB}5cpOKe^QiW?TN zQ6VqyOF01Q!G&D6KLlC;I@C|D&%5FU?N*Bi`YXmjbk+){z$vvF_kBAT@HD}QGhkDr zAha)zT`eEO@c>LYm!%X4guN5+AM zJ*PgBS>qsf9ZXWCnk?5y0Anh4u@@!|9 zuQw+Dv(PT#ee9rz7=vgHr)dBpRG)UnYE2(DHa2pY_p^XCJ!BM=r-Un}d(YZjf%a(o zXk9~6a_{!FphLiQ`XWJ-mYLlNy%3ab3O^^Z+=#+&@es z#5xDG&EjRqTOL=WfBB+_D1nwHK@LvBXZK`qi3%2tRT*f@V9vQ(a`5ksC$Z+nX?WAK zL3=NZ=pHZ7<~uCW%tbg5MyrsQHz(T-Xfx^^Qsq+(>I+%|>EAG#9jrl-`%NI9YTQz@ zHbqZ^o!gYu#tYF{2$#_;%-%`kjxM_!hu^$!KGB_G5PSsWid6DvmIa~mAS&L6Q-z&` z<`_ytX|tQT-8b{8gm1u|lNu@*f=PpP`Nv$L!-6SqXN(uj5WD-a1H+tc&&7?)Ro8}y z_k4&03Z=jKZ_$Bcz|iy~BYlt@y4lkr0RT@1qK{se&TTxFLir~rC(|M=;ssJJ$$Jh9 ziM}$@(lbC^6gaJF#{ekZdaQ~l5e*B6GW`fB?p^H_8v~-OyVlDKS#S=E-48&r0_fcX zfEH(<7ePv^R=Hh@#duY@IziCx>WD_MnlZvJZ#*s30?ieIJ9k&RIZMgNsLbx~?-!VK zQTF+PJveC0ilD;Mk|LOtTN=@87Fe6M&4VO(Y-nhx!1Kset+XU$IqBK$g#J#1Ac99V zQawxb;abgvwz;6W>!%nuKa!PmN!7kHlTS0vQW2`ZN>3#K}6pRFAs$YuLD*1vuzk>O^2r6A+se2+zb|b)W znP1tWx}bN$x_$AsS`2U86bs|k=AYHd`CAf<28ANA*nC(6%R%L)G6BLz7Wob<=-Qny zmByt5a1=43F6Gm?0Dw%O<|cC#h_3I@(<*<47XQ;Bas?Ho6&9~(GNXwe60 zjok&+xdOQl_>0>EOynb5k49)u`YL;0-a;vA0LJvtsv50s3Y5%18NeD@xL@<^XeTu+l>-SlbI z6s^tz)ExCKsyr^C*kpuTd&7A))8Id4gpQvglCKKSHmAW-OHMK$OQz%zAo76OaH zA;Cyn!>LPf_tj_~;C!0c=^Dt$F$>P?Y)VRQvk1h2+EoQ&8+_+T0GA zBf7>z0N!kVJx%Z(U^~ZE;6L;`?=7>$aGOU}K^sJkE~hs8KA)uNzr7)gsVSOPj)bPe z)i`!rVkFHMpccWZM|G!M00*j0H99%%ePFzzx$c$#zC=0MgUk3Id92mhek_2cfRysi zBX8Gpt)OBt(<{YTJIkfBwPAT{W}f%T3(ucQnMd*pU#wrQUurMpJeY$-(5I)t;Z^bL2 z_wOyU!H2J(0#-a)Lw7kO%=Uz({?}uLfF#zi?T-eR*<%{I^PN=>1{B|ad?MLYy-tcl zP+3^Cc1!MLJ>l{|fmrXswTu1nTHV`grPV%u)v3#aG9LuD-@%9|kzDnkzQ+$YO%IEr+T--f1?6h%MCHi$iYap!pbbj2TopfaXR+yo! zKoC7r#YUjsJJdsy3MI7ZJ(_{EW^d~J*l)n1>y`6NN+v<}l)iF+^8VULK*`XNuqO@T zo=%hBUl@RBITHLblypJ}LKV^CXs$))u#F!KmnWRX@$2fx+s{db*)*LAFdt`4-~YQf zfx3N926RAYgBzI^d1`Lib_|~pka0gLRHdK%aO%OQXuHLPQ~F(V5nQHrjUI&SDrN6` zv?ULM+5B5bseWwJ>-Z#3+*4^6wQxpVItLI-zOL(HivBE2+act9H<6uX=**a0f{-2( z8u4}*Ih5lse6BX^aH+_XF&y_E6Chv%&S~D~jmSa!h_( z0`y#3#`|bhB_(RNot1ZpgaRfy)e%5ji?uIi&@6L?VZ^xFKk_K>2pBf_lfG04evU(F zKCuqm%~59(MR<`T=mm31&L1#*m)iYgbuINrYn!`|KeQbQigE zmCy^^fcCtCW0fao%qmnX;q&7SFEsHQ!Qy7az*y@&27 z^?GA$7-je2T<-;`lb$TYWiNG+9tOEG-4BNc7uh!o{!E?7{rc8<`7c)(z2*{b z_OqdWGXQ8}Y`wh=c^uzCvXFef7mjaveF!#gC9Kd7z#HCM*g*zTFgbNc@{wP3S+Cxm zfggueRaGr*!iL`h?1idGOeNA;s^{u5fCWB#?Zc9{m7pZ zIy}hqkKkj!?iIN}XjU4t4iH%yB|OM}p#EY>ZDdAGLys=nz|#f22c0i^9hl!)P)BBt zhZLdHJ)G5wRuLGH;tE+(ldDi*#51Zc!`DXysHIf!7_AqY)iRS+bayMG$qJUp5dz-R z$gEbwT&xl&^I%NnL1hT9!@^rv!n3HaJR^%qwCF&Lxn5|CVPui80CPEk?3Lzo6Z2dk zM+GHXiFWC~7RQ@E!>nG4%kx^vgMP(?d$k6$u#R525udxus&WWS5_rBITepkJJEZL?%>*DCNn8i^5i1v(^)b2Z44G6HXq$oYIGKa11{M_4V7k}I zvCy)tq~zPmwF()HIUC-YlxThBx@Qlec}-awFR}b60O)$(PzKU)5|Qshk@hWee|ITp zmihMWNa$Q!V5?>-FE95@>nnNv`uz1wks3s8gxD9FO(){|`va~p9QLz6{&r@}26Q09 z{YM?n+Y3s?hr?-5Xs}F9Wyy@l(89{-4v}Nl$c=bh@2eIa=eAZZihYU9_%;aMor1Sa zCx*=Ps#DKD8|d$XvjfvP>dSj-baoTvR(aiqjH5v^64z_v?p_73fRkZ)fNviw}*(`A+V_;`Z*FRRebS=eu+hlYepz$y$|8MG2)nx%%e5S z3s}RbODrmefysK9vI$crr^8#3`~!i7yaux8qzqSkB`l7*u7(d`?)AjJXUV8_6WNTf zX)^JUGEuk^&OL4uTX;i4`dWKfAcc8DjGL_PMZfpqAN|Wsne&|%88(hO!LB$~Ht^4U zDWdlWM>(tA{eDsCu{ zOb@)Q{Zou_>lbtM6bQ<5G;L1SBAX^@hti6}D}4C-rNG{=m)uXu9l#C;ut<7#cFnURb0~+ovN}Qrb%|?;=-4NI z^z<;jLVPyIW1KK7Zc@X1ccjZpf#xIKb9mK>2!%PutOxa(sTsq>hVAcpT)wgXnQ7Q* zP99TZj(5+g6s))CbK-i#`Zx21#Ya|#3LTpZ5r6SU`_xJsXjdKThj+`YCu&INN6PKf zz-0h46}r>|<3u9x+{SSTI%l;@nGBW{nW%?yz%h{;ql}D%s2)gjg_`7lJH|yhYQV5m z)%r$X@ro%j?tlx!k1NlK@^B$3)F)m6b5stl#>KJ9Qqnb`DGqw+RcuU6GY)d{^r*^% zf`U}AT8B*#Qa*(q6bBKIsx2)|ocz;~_;dZ4 zm;T2l&uZcrlXc4g1Uw&~jAG(lX`V~!vJyrg6a3DVJQ5w(sJ7DjaA7_`(QAd_VkVk_ zsP@T%UA(}}*XzR6plWWkp=>i9qv?*8w28VVGk&G^N^?tnpD`c|jL)a_!55TnQU7oX zH}r}NhMKY+bxF;rX@QE?o|k;{zm4|Z<6yKu-FfK%kz(zSovuM5m$b1h0L*CxX^@)H zmt=l}o(~;Q%OQ%y!59on(GYCI`>O)PyectwEkAI9tr9;C*tYNQXpCX!!x|uD%-61Y z^wKX2q!Mi~gd<|;K4U@G?R483Sg>Qi!Jm5Htd`!<*6rN<@ul+!{t1jY_!+buW1QMS zX7m(9GZU5b8y28l$0}ZC4j+eG?}+uLCY2vlR2l}PNll(Yfv=uXbQuO9+YsxnY`Gc; z=90!k!Dgy~yNLsb$G(PiE0B>d565vB2fDT>S;D!f3`>o|z#wsxPZXPLpkvsLd`ZVk ztrPHW^?Nep8PwLOTWSRK9h~{$Exxs`W~(kmiZP#_V`8RVA2M&W9o$PX`XiqyUryP- zVi3?0^^04`^w3!7wEy&nVs;ibgVG<&&j-J(*1IMD>cFHtKjxoe%9*Uuq`+XP{#gq@ zAN}KOk+-Dp->G>ig*V|QdtE@c<8kyiFG0egPHsgy`-xs`0u5Moy5QvZ-Fkl|ysw@T zExHk%x8&nDM&$XssEpjH-ga(=E8huk6-xkhw$GpN;0-a-$6-BxF$kN<H|FN&vv3psvd+JJaz_Y?#1~^@Qb4#^ZIreURg`Sbi_G-&w^Uw-N*evO zUMF9+^GcScH(j1~a<%%*!3l1QzCgOykF#YYEpx_V#8`OahQU(L;3Y+LA9#aYvtHFwpJie%_03ybRZ*R}Wg^tn8{P0eX*s z*Xy+>`gnMFnSR9+AED(e&fSGr)o|GPupP#JK!Q??kVnNKI?qdOCJEXU9I44DS~wv6+ z`_i?T(yoops_B|&1M#V0$6)Zkf7Q8v-v@!gG@!GuNL(5$FqZk+1Io0XtaeUR7CoTK zTTB2o=_op?0`rWNtWGlo z#55o8GrCc2iGMk+g_P~Z{7g`AV4Uzl`)6IjjydD7JI}HwdCf6vQ*j?jP&bocH_$gm zDv+WhDCK0DLb!!eU6zLXFm&hKcJ{iq3BPYc2thc6JK(4(sOiOHr567L9x3l&)oD6= z>v(2vZpn89O2Bf>YcW0T8em?eVWUucIEgeT?5)YO`;Xl3-@hO1cmnNVg>m1oD>O5+ zaL-f;7H~g&Dx!BZ^^iWZ3 zFD%mV<^JbpD1G_Tc=VyPAgC@dkw%S8wV^l5&7a zAFw3bZ%;XU{Pa8x`B4%}M#b8FK~aceXZWY*6*A)i1!?IpKT20ghtH$@^~x!JzMnXf`~)iRw5% zcu>O`FRslJtzeEp^mIcNX3TF?_NW;2*#hh@qKDAPh4^XQbFGsXkzw785R$C4EwMeK7a_`7reT9pqhrr%?BQk zC{2Sld;`%enb(QX5NN|=3Ca`%q}_yG@nJF>>XN;!Iy*z!!=iI4J{#PR8cQOT!3siq zA%<8}a6{_ygmv-(7odX~gBADjggr%9FsHoAA)fNDS8%}JNMKOQ9K+TFW0&Bq%GPQs zU$N;~rYsk?-=!Vz56={x7Ab3NZgz`QQ&l~qCUK|7?WqtGTi(8adBc|Iw&LlMH+y+!{<+X@VM?+z{RwKy*umC zJ+G;$sbugFWqLsZW<(Y60f0Q5kS^y1W$Eg%qEME!QsSbjBQm_Zewu}U?JoCXdh}SK;q#0dMkuu;cy~BFjohjK_)pL?SX~SUPed?6!+V z_aKtn=FlmY{IR51r(mx!+IBjOo<9_HE~Zb&9i2i_p7nz@+Bso#gpy~ z3#WZd{K#%)JI<41dfP!w!CArY+{px=$I~UXKDWGzipq-2iJWD%r}>(vGHLGK-K%?E z_jI50qoBeOMaVB9{^Am0O>K``tgLVvK}W&?4WssmGptIP1R)QBR_H6$yytze&p!cb zQ|KiQ1B^@s*Kv)en}Y2Ch-n2Og4)h7)@hvH_v|@Pt2ZH#xdjmoA$ZZ6o#O`ja_g>` z-ftwM2l`P1zOhs}vc;cCez0;IjmiNLb&+KQ3y__?Jx#yDVQM~A=(pRk32<{3K;j;% zp#|at)q~4&@@Xm_Jk?+s>n&<|5(Zs+8(80O4u^tWSwp+TV$s%~KI!KzB$opsIwgu= z$rHZg72dLCU1VZ@H=1@rZ<}U78!&$)_vRcUmb&HJ2C0Fpi912H?sRA3{t*o&PQoY( zru7DmCQTJ>`~0?t3CkaqKfeB?k)HP^pBp!V%;O1(Q{+|OG6_^-UUG6n7RwJ5OHTGX zSE#{eed@25VrZ7{&-E^i%*%~g^IB)r)p4>gdUgo8X(1JJH@4GJjp z#Y->iCl!bI#|YrtgF`d|LRVy9kVW)l5HxW<&k@v02=UBRrj?g~e}q=PUS`0Ia08gk zZ)LXA0;l}P@akbgyasOB> zfI>jt5I3H+Utg@@(lo|bUX4yZp4FJSmazGq$KzF|e^xvC+#kW>jSwS0hxwQhhsc7y zi38n<(Gs17d(+$O&)#75QD6Ul1K%r#LwmrCL?gplgb?*g1{5e7TCgXn5gjSp>>Z+Qyp*3xaPst0WXioZ$Hwzb5^+@0hit7Rbmhqg+ zaIFtU^tcy}*VcD}TVQ3*!hMeblYjc+(~b`r)72VGsP^tZ5>$v6BVPS0UhH_8b2h$*Z>LDOZ*E_zX}Yw zop1^tILEW|3C^s>jO=E+#5f5$%=3jDlTJ}$dDnoR!Zi|c@Fd>j;N(2g-}yn^_0b7} z;&91}`T&Q`E+5!mrRAX5v>lGX;LR`EQhz;qjn)YX4}H_6gV!s@&- zNDX@3Fz9Fe;dHzAJPr$r3CsP(12SUUW6l#UXB_BhX;pD7zX!Z&P(!vq!md--nb5@( zM7)#_3@nAZX2gA`Gv73QW$hWbYa{@wS?x-voMs15ByF#b@R%J1qyjqBZsa=E5TLXu zp|2m`>|nt%5R1j7yTh_>FUMn~>%%L9*BIkmq)wn=EBY%A)^d$=P^)b0?xYY#^J4quOt8T6^U4X#FA$kYA_~aE>R&K4c$^+iXV&TFR_;{T`j2LZ3}dq zC;3={r^Qd?jzdZ;M{Uh!v2u4ztH$S5hh?Q-6?0VQ5!d=N12x%NrHZW;TqoZuh%8~? z;n6Ur%4GUcH~NAFj2Rd63Md7)tuqr-+??0D*5CvZTvdrO2qmjCs!&J}f{UvIBT=&h zS~liI;Py^Rnj2;P=@xM&hLTcn;Zgz|#YgLrh4^ST>u{-_N2DYt@3k}O4(PMtD`{!P zfJfwOQufVfWl)T}p~(+*G4MKa6vteb{^VIJLE4;DLG!+glW)T_i|Or~Z)*eQH?V%e zOoN=e1Frj6+lNqXEzSG0H_8Hj{HlA2p!|gE5`f(|7h&9pQN7rcd)2KaMmcK&<^wN8 z`$+8M{UUPqS3) zqB(ppFrtcHEj^#%b^S3PR~?=@&S1Df>22*F5S=XCaUoMqZ#HF$rM)NCSi0kqO5xp4 zmR%A}Mk>UoqUsxGX?_on!tuKDC3S;!CaAXzU zOk)Z$PLw^+4sgJXla2;C&etsAV#3AM^IUGmj$*zS2*J{zr0#JqB2!q{ik+R^lZ|S1 zK&I%`=9X+5RI)|(F_@wAE~U;{(yi`9 zH;iT)DX#7t3NOUrXZg5QinYXe={oC=e%}%sR_Emlq3Dk@k(GV-9xKf)Qs>^zyZ54> z2yQsZ5PQ9T&+YRHKYt_4efDL=GG76K|MaiiFWcut>VLp4_a`s~0Qa{D(2t~-A*qyV ziZkHq7EH}i&ytPdXv}kDEBoc+Jq%vqusD7}&YVz6L2cu^+Y+#+R-a;lgCFU^iiL%y z(M9A_wZ{ip5<^59x=PC;gOAiYtmqg{6`9d=k7#IWF0fNbio{ha!2K!LaDfEC!2`1E z*XP++?aGm4Oy~WI9oK*&8~1qAA;?&5o)4*e^cMW5Bg|WRXp!jy`rh^3XV2Q3lO(ID z4v7}#W1dyvi~;>Lui*wAJ;4`0c$&UJ9uyE3OGjuqU=D9AI^T!&ANwmL-pH+o7#StOyj%o6uz$E>8nz)b}}Mps5)T{ z=dB}C6*_kJG0KNjtkHYIy7ZSH{mNq(#n_LlEnwVbWyJpLUK>Tso?DU#-m>0i;%R7* zYAsd>q!!B12ZqTz%7#2Nu-0S5d~E&Imq{bcWv4L{5I zdt)xPH1txNMG|T@nQm_8ZJy6V*Q(xo($Jw(P3WHf)?ym$A1$dI5NrQQ@E8;g$!L(hv!e+=3lrkbB^>N?# zz0QKkLuNg+oaVvl#K(7HWdGQcfr%Gvg`Sfcv6THl=jxU#10y`It)>yIG`YB;Kmlj#WDR7dKJ{O7yh7X1ycDz?sae_The+0z*E6gTms5$j;H(6V9Y>-2d14e(wj$m`3G+8 z1|XB#dGA!4M}E<7ZPRfTeOYSqK%hrOkazHiBswZeolj3u@doe@V&6xClND-kt9Wz<)k|PM*Z!{FPtf`p@=Df);&C8X zOB9rml!%Vh-;J0L$n641XK7soc*ZfD#>-);R|;`9JH90HdKr>sCv4qkT`(h5lc!zG z^s54OgZ$g3TVy?bqrs6z>G-P+4as3ad)m1f&c;h0e^q<`q@CNTrnOq33v(LqqML5n z5Bu%cX5N0*Le})A)b;VyD21xMiydU0>LykbDuxPi>3m)9Jiaucv&?VRp8RX8r2B0k zyPRM4F5F?BclO^qs1-P5jc-j` zheiP@UQAxa*0k@5lHm5$DnXgR`PxMdoe~OjkIv9V9%aF8^6F)BTk>wISC^z_KSoK9 zW(=S14L-*h<~nTwPQ=IONq5XRS(U=_o+}C-nhqG3N^ST!-|Xf=p;aKp$N^Uxj^PkB zzI}my>k|;nFW-VfVXc)TsPVH;%xEYa8s(b93Duw5X2jxd7W#AxIX75O%fV2twv&u! z66Y92s)$IK&2x<)XaxQv8e(=`BG$*Nbs%JS&3WYA9p^P&L@Frpbp)XZPZ=b*t?@Ck z_SZg^dJVzM=^{VC<*5Pjx~V1kpep=T1K_4OwtZvMu~7QY>I68M>{_G;C-J+{8W64m z8dK}FE(5$M(z#MT|AiIVBHIPW7OK)42tsOE7z7{jpTO)C0h`AkkNUw}Rt_G7rf=hU zXT{5@$>_OOiz}B2b#1%Dq|79Os6!W*wDhjCXx_N{@%EF|2V%VA>+kwCLnS8Ng~d0w z+K&$NH1qF67?6@yf2FfE(V1i5KFo4^Qe>{X0Elxmd<}x9W`#mJ;sr;RIe~oZibmwh z!p9o~2{CJ96O*IO;=AlA5QMi0X$#_s1Cv`IM9f?#ud_*DKyp8qVw*i!H(=J20jYKH za(QSMoHdg)fFCouJb<>xMFmTgdFC}ZN|Uwj>LtB;lw>U{>958 z`8$GgyUxi4_}mHMY6EXQPyUg>CRRKo60xx8Zk=~m>1lTz`?EqF1(*)DUGkl%k||%@ z+CM%WK<479Xla(eK6Z0o~@LeTqM})-Olg>NTGl&a*&mrERN`zGApv+ zIEc(xIC*3f0>oPYs|Ce$X+brj%ZDT-fhgy4U9&_NITAveju_)bP&I4b z8MI1E`=b!HG5j#RCHa^x87q1wo@C*>RJvdIUww)v#7o=8w-R51vwA@^SGj{pu5 zDIpoQy-A=f#(tU$9{6fj0xBV0lJ5h_Qdj!sAa^n;Du)RoN8v1j zlfJTG$3>*79t!j*L*5BT^&+;JYL}ue)$8daO8nrB=U3Nu#gc`(MiB!Wc#lf6ax4Cb zWXDa`x;S>XB4c7QqR50js}6MSYb9U~ne4lZ;!+2VtQwCo*3`AHKnf*e> zadiP8=|UJdI_&U)=TY(8vew#h73dYcIzVX z9T9Z-lJl&{7--m*9*Wo5CGg9BynA~AoizfQSU^hkR_7m;cbz-lP7`hcl|!c06R;iJ$ln{f%wV~BtRC;|0I#Ld)@1w&Q5gz2}o$f7MjnhOzNNBL7{$J zE}4GU##r7p3h6(Bbp7#ShuSGKX>7^Qk7M8BT&kR{bxlY)?vc$W90q+pkaS9BlRKxW)*sOm&Bk2qqg`e8JUL#)T@b)ISl^=tFrCK6j3 z8pP2Dxd)_dATe7tEoNl!@fllB^Eov!p~c*rG9Z)u3IlyR$ld^vs{$l_2EAFPgW)bl0*&A3_JQ!TPpk{Lf3>@Yz;gd`F0K}RGk$>clKNML$89Rf zof9~vOR7%|?aN>{SblZKj|5JS0w-fc#ncJ&ukXsOA{lS?L69Yb@)ToM1Cw9<1u zQ*<*@3LJwR<{^!OaiT2w?|zRmRQI(@*jA{i^4_F{qlUF$XV`tl=kw=UynZ^DU`OW& zq_~Mcc@av;t1B+!eyedynh|g;<_)1hieJ?3rl6;_L`!Ib)KH)c(|Ox;UYS5} z57y2cn^*9LQ0Fx$mbOg&!JSl%NLw$yvW;5P6XTl{4b3Q%YeEiDr!Nf$A?>1f&wp1^d`FD3?KY#x0-OmTiJfzgt_FIDDLk|(N zqOYTtKG+=V8;=x=hD^X&VXq&_2DQyzHhJ%*Vn5VMcM|NE^5o}g(GsSR{5y`JK`oWy4hp3Pbjx?d z#RFSKsl?rW=$|t$}_C zN$}DEAVz9vT{w;f&h$vzYZsrfa)WSpv#)1wt@$I6p|8DeXEUMIv*bfPm0$*fedw-3bkL zwKh;NrYz>9D&BoLf4ea)p`+ntATPIaX2$wt_{ zZP$QTk}xj*i5dc-x&3Srw4Rt8>T?4a!EVx?ja#wne$U+F%Y}8|B+OiWKj;L0=&ivX zi`ePXI7DK=oAgWoyfm*virWRrt5Wmvqgv|$y0!ItYwLW7bbexa z1v*j?bY_MuLM&?pa%f*-dp#obL6qsx^75kv&!LtwVFAvz^D{x|pqaZ^O*cspEz>TQ z7C=oup694n!ofIE^RShNC92!lUQN$6P{>8zVr0O-c-JQ1NmxtvHvd6f^_Z6K4P)kc zsYw&ISG1DlpAP?HvHC(pX!(rz({~T+43SmqyT28O&0 zvF4;f>S?;!4-8!ML>|XsS3URg-WD182VXaGm0_n(_NS(o$L2E6KdE4La2Dc;X?zqw z_>x<_P|)PqmQZ7i+~%p(h@PQ5=_j1~#D-TIwB9E96twlbGj#e)6E6EP7KS%$lhMsZ zQ8YXXAd*-kv?U*=Ny(badNY8!ln%Or?}*zD`f0=pfJn@)Uc2U-Qw?&QfY4Bl)3Jqx zh1DEf$Pr^q3mNx8qZ|vuK&;a6_wUnBH4K+p=aqB_uI4fWH~>ejFe0i)0C3-0s1%hY zG(|Uh-ygxfT`^!!}G~_$sVPREskd=)c!B>zeX<-2H zXz%hLKFgD5*Zc|K{RIFOCt`9T$RJ}Ci4JsKFE3?=Ind(n$6;1yH?T*mg({jH=P>6* z+XQaU4}t$7>C|^-$WT*8(mYFcmVBU!!7)-mpB#DmH_ZcYl6rySo~m}SS<0~edL_iO zWw!r@1)?f?h(eWxDgfde1&zH7Bt;w?PaVfk2??!^RcaWwI(qHC=GomS2BpxF8^U+> zI@9fLj2-DU9vuS0(gN%@!Za_DpF%Aa+Z^f}-w7Qfn>eWT~zb@ay&%XM`^zuW1#WQJ2-=SMBa)sLPUOIsf3{3>W+fzW0mt`*(_gB9G8 zAj{o{gl;ygXObyT{?=JNcO4o}KxCt2td-}OC8$e!Qt2*8YJeE<{4-~2g>KrW znGwi#x$RRj>TOCjV9uaKk`ci>!fdI_TaQ<18B?6`u1E%ia1%DFfut2cTq7O?U3-wD zaQ1eH#6RuVpMOD?bxp+LO=}@|B1vDB{ZtXp&i7=q?p(>{xU{U~jE4*9)mdc=ijU#q zDJ`EzEtJE#H3F${pqVj5!YC~h+z*{5{I7T9a{o(#K&R(W`Q&h-G;BMqvZ1>?!M`rC z(gHB%FjtI>;T;{WdH$`?py?lLcXqC!yceXwQw)pJB?63?^kzp`C?t6x5{`YXPg;Q; z?Q-Q9Ww8)-5ijLG!~CDm6q$Y$;so1}$k9_-*~q>8=uAIwLaks*0;UJ4ZLiG*5(gW~ zN?(!j8;4ZnZWF=A^Ap!?%Ww8ugPENMT&<8qe_DGU@q!HwPH^s0!BGiFq=oM|mdI}; z+$LW;C$i_FpBUsbgs1PE`+x0yRa8}L`|m=;B1NPHR0Kr2kyJ#bMWkbibhD%zMZyAu zZbSr0=>{c4KtSn6Kv>evqB+lWfBV}T&wre&b92Tx^TO@e$XsjA`OfEk;ul+gd^~FP zx0}G#&v&1nR=~dQJWtm8>fFW6`JoSMgec!zh~k^ckB<+Qq10>wUI;hPG9@Fx!zd4F z4JOY5Rf#OMgJv@RkgpHomwdnR!hJ|PJwn@{oC3adayR$J=cQu@?rvfr!U!dE+T?Dd zFdP1E?gE@|U&pzAb=&G)=TZ>#fsaS&{AOvZjOINH@K>RzRNfl~)PFsO#T^^}o)W z_T=~V2n=Me-J5dGqgH(2m4Zk;6y2|)@Lqo?;yrY_Xb%r{s|N`h@vdXXK~_ksp!^W3 z3{=Sxp7TrSj$ALlbnMh03;WyRUr_Y$l{$1ibne2Hz3KWKG`g!ej5ms)J%-LHRK$d-1<9&3|3^ zFWzUgf=v^9W}vwBef}>ok+oOQv_-)DL4brcadUH<#{B&9(%gj<_3h@LzwZSs{o6j^ z_T!`;b`LBR{677-%$vnP5}0fml|PNf+G&fkGam8#G-WSBuiiw@+H}Ubd6UO zV+5u#=^QhKwuONT<315NM``|2XGpsc(VTK9|5)oG)U{I$=MOx2X#%4HV5$F42b1IP zMe#rU=>M`H!~fNf;k{9g|2(SHh!Lb0WE~7P0~qV7d^~=KQ?E|Qz(jXfJL=7M=7!lo zj*jw}j8p4~R3R7I%&{JE)Th)cn)FRB zAYuEQCHM;P8Gm`vGzD%=!s)0nfV=#buSfVO;60JhY&%fI`3p5>uV;r)+CZtKHpc`} z#re1N#c?#h^eSqZU~?)P5FzgA2l*T(vQonVfC zB_L!FS<6lRHW^Y0X7EG9v5!>yR0EQ%uzUB~oPbrgB2qYq5Pco3Sp!#^zmMkx$j71Z zs6kg1LaVIuBYudB{mJ7DBoRA1 zo`7rk9vkuM)m2}o%CA05Sn zUO2aV^#@?u5IY7O+dzd|eg!bo^E`02pp~(r12a|OhZ326;Qg2)hWM5t+P*>Sf0t2k z;@@H@-^h$jOdhwGo`UAryPA zMlk(FXocmqO{m?zZ4C7M=$T|&z_X+_tb!&&Eu}bzp55P|6KK^0Q70psOMf4W4S;85 z-*5Z+H8fkld`r(8xZ+_^rca+dF`j4&Gh8^oW5z=bLS(hc*3g%R#NqE>1T7P0Wa<5V zq){OP8{mnQ9?Jmw+-(yXt>`@C$Dn=}Sm<+15eDj-+OSRC+4@&JB_{s80RD4|>F3Zs z&tBe#Jb#J{>Df&I1b)J?Yqma(j)PL6p#1NTg8veSi}s%}w^uZMENbznjzm&Hv8DeB z??rvRqT3+%bv7lV`XxYSW%aVZ6G7oIp9oXWEnu6nLCyj_LP4=5?ZS- zmJ@tl03aqVrGhNL+v%(y!;=U#St4S-$jHbj1yO4OvOiFqmq9{I-q6r6tEjC~ z1?g46@L09Y0dRWEEG+5nLv1M@j9}EP=MAqmEjqC3j?XT5!3`T#eK!w<5k%t$!`ip7 zJ0e9!6L=EdS*LelganJ-xm@B$(a`p9JptHN*F4LM+eYov%Alk%0T6Kde0rP2w-^4i zp7q9*3K4q@vg=+0b?UL)_ju%I7p3F}za78#)%-$hh0$#QdsF!E-_T2`4{O%FycSl{ z!L8xN_n9T=JT@p4+#u@-hfiu^9{A8vWUVNnq$^K%_!QI;T~_0;DSLcYQVw`T_uBed zO=c+Nrc}^DBGwNyrzN?Ze`N*ROlq9*5o1XaI4Pr85!85Y?EaICf}63T+Mob*!&)TdLKUMjEaRM5*ALWUV z&reikHbT^YdxZSRIAY8Q(KfNWi{GYSKrk(f<3>}t8pfl`2)Dm= z8!S`P4~4J&#A2JFr74lueE42xn(FhMW?AX2Lnm$-=9i5C{H3^~+l7{bt?br= z-uvfDHh@dlcOg)Sd7;vH& zV-^k3X9-R|>b1_zj*UV2Ue4%iwyIA&SzsxZhYlWEI?DU5IJ9#no0c}Qqg18)uF#(O ze=6$@!yXeJYCYC>U7%!khtol0cV>svL3^V1E{_NRrjzBP#;^SrS5#IM8|*l}554vq zVJ4N`S?l%|I}6KeJl7|*ZGAIYpNFn`Om5JBoinxQ(QjXfKmSf6&T{D8du?60>isiv zWxs@~fyeV~N$!=1TbY2{4=>)XZ<|)iRuC&tL4>lNr0NOj4nb zl8$qRRoD!Q^SVYXM`4(INEVT)2rDhJT)g;(m3EsObUAn9fFk3*ae~1aaj$_6&JE&T zqDSzm&p;E=%bS3-`SB-bM6w(0$G@xk(r^RR$ZucyB#8U~YX;exch`cqvVq&g>FOg# z%V>y>bW!0hLkwN9I+HjY^kef$;WpE0ipb`!p_v3m*wq)DziET5WjPH8FS*p@Rg2|s zH}190()Ttwt-2cz_9}QDCC$-iE6qR7aKzU>-95P!`kd}9ZC}2m5ivM}`ikmD8}Y4Q z$?Ux%FMb$`V!SM1wIG;VIVgVcZH37+GSu~((;38ffZ)4zM*Qnq%GUGUfAS(}QoOpe zcWsAcO;&j#zj|}pDaxzi&lB-h;hT8!7EUuy;VLeM7Y+I8j0|B{qwJns?AU)W5m0hX zE@3I1mQCx@5t+H}qo~e{h3xS42m~{c8;H%@7Uuhn0`w&F8BB z!_ibQdx=jTu3&FcMasi|R! zl7-jO`lqH=PFv+9kqb|rOK6VNbqW7z5z?)viS@qMEn58aGvx4z-U=0q8cu#Ed?0aW zwwSIoTu>uW)8Ut^oFm|6-gM!AQ|2zg=iGZ(Zm&aeXp`M_BTDxg{b5pkX%Y1n$^ocs z5c*}q4&cHy_Yxu^5S3P9?E#o)P4~A$)8MzU^7x{iaQJ#>4qD1drW8W)i$Z;%Rm6(# zZHybxI3wVJu(fVRJ#_j=?|;X6D3s@t-C;gY`Knnw-nu%1f?%N4!Uocw*w0_bD%an# zf6^##{}aCsOvWwmZZ2(ek!f0}K5tIdThn?TrGP>`R{*N=9ijedV7cKV!t@e{Q~+@F z6Xc%M@uLT`E0&uQ`#piiaDj#8bH)xp+{yAq1<*E#R3<_jO9RVL)shJ@eRO=P&eg^G6u7>Wss0-IbW*)7dhPk z`-qjb5g;}Bpq>ih17Mw9)#f`y_vO{=*J|28z;X~p2)@!z>HwaK00E?C0DbulYq$)} zV@t;b)nQn`_cId^3jmqsCLkcNOb~|J1@zrA_yRUwcbP(R4IAUIwh|Sm4zpe5S~xJG znv=!BUIl^wukEN;gb%i1Va=F8t3Mqr?L`U8!btCpPjmft>%76IeyboDk*u+Yto~jQ z{48(NesoLMt_i$aj-PpgiYZRR3eiQzWO%1RKp3>YtlYiqv3t98kBszxYm7he2eM7S&MIU=K@-G#y9doYL7@zi%Ie0 z@eM;k-?qrb?K7W;IzHWmM1|MHcuVhdkxPciN?w<*xI;{KS#wlOVOSlZZTLfB#&vD< zPLxkL;EAnfWAb@40Xj>rDfg0kjJz)NyUrRO>Kl(f;^af4&giwOx(O9%Wq1p~rhWES z5|D;FqA}>#TBjrUD?fc2f88?qTu@hnGoq9Q!l`Gi#K;FU&(dz^T-DLhF{wnbBAS$U zVWA)jYBUeg!0?h&QOSuF1~(XlEh3O#cE_Gu3bL6HzVe~$JQOfjhpje&N{9##bR~9p zEUbO~I5|Jk6m|&^R|07^2m|&6iL-9*J%4fNJ{oAp4Iya%C%CT}80^QJ;fT{SvcS#NgnO%vWG{HJBZ4Q6>p?Q2xX!h21c}kyi z5HFbx+llXeYqZx|tyj2R<@LOdSW5Gr3Jq3pq&+)TQ(K@_7!S3k+hz1%n_3m)aKfRS zK{CIuA%6MjMIs*GUT@=s-lCk-1M|dVBFt zF*Fk-1DpiWi`!hRCAF$JqNSsg-mhKZnkx=Y$_&~M0A`nwT}cn+ahms?h|tjABK(ds z>)W~Al|w*yE}1Np;CxwC^%l2dLEsE?{=nI2E9RWy>*PI0|0!HI{7_>$Pv{(8wr$Fy zD_LX{B+*f$!T>yjIbyX3(Inv`WKI(t`BrRXz1g(UV^kT&H2T`6^WSuDXS-cBNopSq z_)Z0bBViaUCroXnd9MT1W@_*>sXBzs}hW?-TXVm1g^1FAN%?A=__*oMjUT z@!m2jqKjz0fDDP7Zf7HhnN%O?CAZ<%eW_Jcs^T|<_V6-jUL_K%Hoa*e^Q9O2<`Tj*&F#n1~al-o~KaX z>_cs|INZ30FJ#w@*ajP0_sh4>yJ`<9-g;WC?HwoUc6+(D;r3RC*}ai!eV0<8mZrGQ zXCNbk3*h!J9`(sM9DtiCs|{@eJvk7KP83?W#dZ7CgSh)Oah z5$`QQd(Jy60}F8rL?JV2f#u(>+iflYFur)<&_00w?11q9O8GowncvQD!@%GP5u@bb z!rFr}=4kAtq9HnohmY={UI&1}eujWKRm}B(8%FYKAyekDc85^3N48(?zS{oU685Rq zwl%q0{!?s&V-Iif{B*vuruJisihZB^tKs}_7b{u4j*#wGy;3+a>~R}cVmvjd;?h;- zEYaRsk@a?H?+x`hxga)zWB2NEe6`;XLsZa1h;oh4O=C~J0Tt|CFwM$#OB^_FXXdRO zIsfg)=m`)PH0Y^JHzg#|xPCog2MWRE5+Myx{Q;RP6`*$fnVuj`Q%)_9*f$UD3PqkS zcQFZa!o{T+k9s^1HW!eaCENWG_OOSMLQ^iu+2?-nul0r&%}RJ@zsG4-8D&vaEWMcD zN!OEgdxcwwdF$9E?9E9EI$7`yCwVIYDyOlb3I zlr7kVc$*q6I9*RM)|o zN5zC|UDM62G}EB6KRFYC8fT{%$t=E$qcM~2-a?`wR%Ulx=y5w=9TO7NH6_kt>e?V| z6JK8%)Rb*fsBCH$<~$9Zr^(Cg3OS8$bW_KFT~W^&-YRQSsK=~owrEcZZCz=0nsR^3 zn-zs*{nW2x%v-rPm-rifmbgx8+CQ)Wi#;TTpV&v5*r0qPhctqk3v89Cjzj*u5(!q; zZducaRLKbj;L$soXoHl^*GOI&lThNr|J&A!E;QA0F*j)GXYun!Fg*^=56-9>dyBh0z`Hfddn0|os_<}=Z2JR`WLpnHz4)X z7USvbe4FANhuq*s4vXT-w*x(|>KPUGnq7_#GNPo-cVTY}qX~eH>rYS*%8u2Pkijqm z1jSX6^}+=LeND)#PB3JEjFD-oP7s$EAhHO_=5yUQHsYr2z)YvuHS{7^fpIFYY%-eyY$e zeXP4QALmj4op6FqsjP`|$0_noUo{u~uA|SouY)#v#dPt&9A1wDKt@BRU<#sxBMvGk zbFLc88?Y>n6)fU2GJgAe(fZ}TMLKL{E8v<`wn7w6y~Ik?-S1ISMtpmeS?BgCdpVW4Nxnh#T&&79#Ii#(`KJg{v?po>Te7M)FdcoXQbheN}< z7@-sQ8oFfZ&uT!TdfJfBjjuiCfz7*jTZntZ^#`1XT1!EC#c;tPp*LoAHV{g97mkZgmGgiIkeO1I#3-n5NS z*M3rO(fJRG{?H9eHc?oZRd{gNuk4J3yTBuft4z~1dzZMn+hX6>kJ`H`S`jy8euHLp z$P~mqHv*;}W9Yb8+FNwp4Vv~7*ewJEY+`pu2hiF=rXnM$5%f2HcBA*0R+C2Z9*;Ef4 zPxFomcx1dFbgJSg^BvGS`IsXFF-rx8Gn(3oc+t@AK0ABzkSf)BLdzsNy!Gy#k*d3S z`E@-Oy8`mdVWf>qN4Y4DcdU@07Du3tL;UzwkF_J> zH#-0%FHG;TENmLtTNg$Q=PidC?j8!tIO?k51c`eyAm$H|yqes)z599ZpAiPxu|q*t zpUCKPr1C2!tr@akef0Je)XLm)3frVw9cS-qTQ>_@8fK93d^Nw^I`+{I19J!&Ma5^D z+A#B#b~;=pel;~|p*sCawJnt8SGv@|V&xTTOgf))`?lA>)fUUH{i@@gvcwCX6Sz$5 z??)}I^0m<{;H<0Gwb_2*)9ES=E(!zlT$Wbxrj1#ow;9 z?{$)PS`cq~rf|g}v6mA`v(e7g=;r>A*;Cjh4$NsPSL3Ti>$EJNOAhBu=nKWgkav9_ zFNc=(Gulrr2#2~!qcumZ?#neRtTp3ey*WF@Zb5zy)gynnF61z(N3h zi$%BB2wpv7wm#_tv};NMVx0n1#^qk45cTi|7}!96E-R0F+e1I_k02q_W zO{S?DKgp+L+R{bD)Ll+2jNqAw6k6PwRF(r)c#F#L*%j;6Ig18d=4p^ijT!4a%% zbo0dW^o`rETqp$+bIreCFa7l%ApEQ$H?Bba`wTJc7e=a5=)^hLe`#`~w8eZ&vd@eV z4#!`RMOQEvab7}lxaj7(RR)&a+I{LJkm{&01H1)82Mqj8Q0v03S`RB&)DiV}W9Ub- zyOz`du7(>1txH<-2-6Dm12)uI|HyEBrO6<}X&n!A!fN;9GBI8X=$bEGKN3 zoen#gU3z8P-Msm|?e46jIb~1EczH(VHDE7ki|Q|~pMvqF1y_vY5+LAGWHaqhzKhdf z+t9EIU5JTA!`&4DPMdz$;hmnlJckEEK<_KJ&zivm;B?F1WJupvs}F(1&8zUqk=&pe zg_o7_^wUNE?gsu&w_!5+Esm5&>gTl zYjEVj-+y?rX)fdGHg_nzwtK;V*}eO~5t+fW4^$1g*k615FP<_XnGJ-I3+*t3L7DSv z83CObrSEsgI9*aV;9WDZVFB|tWg_H5~)pA4@3v@fXt*S7E@=Q@qF zH8c*$xyzJZ?QeZx-dVEbeJ4no&M;7wRko73d;RhI(!HVh@wP36k8^!Eo6|RjRa@Ku zq4-#APCQ|Tb!U{1H?ol5vDZ2Kl%~Z?98s!FQ*l;z7C)vbi=C$r9Z*NXyZw@r5G;}P z%N$?A2v!cDke2#jQh7=I9Z>(-!0*^QYaq|0*_VH~`zepv}>AalD(INgoHTe z?odt7Wmv(zghBMAy7Tn=)FXEq0K+Bm4#p_};4Sa=BJ}Udkf@F+MH9lnI!MRIH_h_n zf8W21J7O<1zn8XZsShqnO}9DrJ2lO$FIE0(j;P1XzL=~4L~VUPuHZ!>0V;?g86dk! zB*0qXplmZTS)1zLf}xW!K++gY5NlpSu9C#hPNh{8r8AAA=1>1M68MPzKhuHZRZm3Xad2PV_2+W(kvu4_uilpa8sz;2Kq`?yKf7rC+kzg*LngaS0TYQ3&jzAmNh^*bDE#HpO59GPAN-M~e=v zsmn;9A0q<+RF|lettlIOxji~zCR(Q;BJy?HH}uDpxCdI(TT4S4Tm%a{GA_=`o!fO} zr>M$+W}~Y5n@{|OnCAKQWW=$~U;^~S&Q^P`)SXhfsjM7)qYn|6g@k^sl%Xf$oQs4g zz0JRO`i%_L-6!UAm?zBfKFOM;0E51r?RA@IN$!EV`K8x+P9rnLJvNE7UrlXC6o5|~ z#XHuv_4KWB!Wl(e*qGfgWrUKLYdv)Y(-f}i0w$R&jsC4^kV5E2{=0N(*^@76Y8F5b2Cv6g6?~@p~{6DopU+_ju*Jl7H_6 z-vB>~$(7}`9D~meW(qd=8=JkkMibFi*~iO<5#l0*a`7e*fj)<5xwNeT755?xgO8Qz zL)~bz9LWH(dIcZ``*Ut~sJzF>9qg-4(nOyA>wV~)Y+c*2Jw-=1(=#)4m*)#GeKPhm zV8Dm=uL${cAN+}jJr>+TOL5IG_kWn)wo8M7#;?2{{S}h51lrk6c?zVTn$`;8Z(dxX ze4dnrjra?4`I_Bw`TIM}a#SNHS3imh14!le&e}}b%5#`~ zdiL$M&-#bGS{l4>u|5cZfemL~t$U6=7d;m)hKbfj04DTgL`Wvnyz?nm16CylS9ElB z$#n6Ymv^av+lEnBRf-I^R52Nf%o6I@*AQVWTVr?(A2x~85#cbSAlA0Z2Ge48EyP(g zdIq6cAe2LJqm>M~^hpa8kZ;5xmkIFF>ipI%D>w;52UH|IL?Xn6x9rgR13pPWN*DjV zUx>|Q<{N{fZP`poLI)(d%|NdaZvqb^&gKZKqerhb1F8wwb({<)@D?Wxy3b@u9u3s! zf)Wg=ttLQd<`wW;`G2(?O5`$6`%ipJECY;B{eZEkn;lmjO#Hu(2BCU2Qa96?zAP0 z9Fhl6L0x@a5)Gq~e@)cHcNAIqg=QNt<>IU0N@K5_=Qr#N zs0Zpyf$spv&QI;!b=q^F8RE%h_DmryH~ST%)a&*ML9@<$8*R|wmrOk}u_?nn0LD4qDz~uhh-lgOOCCTJA8$V^3V(unY4&60T%V?@To_>Ovgfw9mC_g@-o>^ z=^I0UeVGWakkDPaqcIbdv%S5U6;FGHakI&cr=4tYx75_s^@lq6B|28Na+tMj3m zn8nZ%;wL|P3BB1=F&V8{F?PCf+YOxhSQbX?yjNm=GR&;GFB5b<~fcWI+h#haV~Wbo|4eY`cx zW9cb6)|1kqnX{NVp%jJ_Y}!6BfVq%RTrsVlBQI$;wLR}r9aB&yL|eTts{;8LDcB`{ z>1`M|(*rgfwLr3f)*jHF8nH4`8=pw;hiK0vaC7!x8}$L%H7Yi;sZ72&=kb|8{$$m9 zVU9oYdLceU#E?V{^FjxP5b!}BqoO@q+y5E<-^ssRB`CqNG@IK#7uT13J`UIGvuECJ zu3G(Ltf?V(uevz!RCzUDKULX4mi;gOg=17Zn?5J_2e=vcHae+;y?1NFa8gTBdot~& zg-a?Ue9MA(THbzFGj4N*e=nGZrrX3YrQ$i`>48K5>tDXM$IZ6*Rrmj0WQT&)1+t05L1B$M1* z3JC;og1zl7(4}i;3;^c!u+Uh?$3S}>dFbOCKD)+RE}QB}dmxCkn%mN_C*&AE%-Gtu z*-kLBcppSC z^nq=jll-F{;BZpWJ*vQ6DPUnaXDJjTw~=R%!!5E0D$=CD^1{AGYeeiln0tDb5plw~+_=0~hpS>B@tH>le6u8R8eFp5-M0U!ARN$| zD|237*j7*myZHM28N!d|fCGqUUX8{gR|9~h{fE!5n3|c@0uU{spicwz$y}IQj=AY% z)eG_?J-N->gD@ehN?RcU$nN~2Kewmhl}mNEb)RhO$}NoC-uNtB_0kh_zxT*!N2&^I zOD$kjb@Fnb*FuAlei(exS@$`)KSPR91MS1lLR^ud7CUYxx2clU z$yZxCJb!+&|MhxbJhrM@WTU-gEd2piyV0k*A-|z!$<8O+e*3d#l|(1EclRqjI^Pr= zSbaPS@%(w-KOswq_W9uAqD}D-rR3rRQs#uhogJ)HLh&4s?)P3jN5pp(ylD*jLD;2M zNq9&ghd|Vd)2FIHFM-v?DWL^fXWrma61-MnwYmGBe$^3OHN3Ic#S16Q)`wr0+pOnQ z(e@t=*e2K0nOQ>nr|zv~)VxpFV>*5wJC!Zv*5Fc;*2X}*^!`-RZs)1<=zNcz zm)t|tBwk}J{y0IqedkNDWjMPUHQ`DY`hB|u<>+TOFw^r30e%a+4Wqqi@1o_6fk2W+ zr$)A~i)>U$9Z&Uf9=O>yf!itz3!#~SEVQc8rwt`jH>j<^cL^yM%{wg(B^fE@3& zj8VwW^c`P2s4HNQ7gP5Hn3XHIcEk*a3b2x%Aa_|v9*!jGax>* zZ!V8|jBF48eEM(*_vQ)oU@!OtLz8H0F+jK?X|egkhknKJwo9)!+)km|`&D+T7gv?` zIbt{Vgs*zK7kQ4sbxCaq*VckD&h#&u<|buS0Kgm;pAG|Kkm_qKO`?r&44@r(%D1K_%K(CGK)q=JqJ5 zkBD7@nbdaQO22J`4QSyuVm&M(^qsX`2L^^U+y`~`JS|EkRpu|>|9R6DD>f3fGgfny z!8LK&fx(#b@0U@!^j8YEm&NkF^ZpoBb>ym6_zffd-c^;6ldWFgFCoz*X{|2VaNTE5 zR%9)C$f*3<+)g!JYw7efkHh!%TVi&)K`Jc)-Bswo4&0uSIpd&k(F{k)JONdplh1xg z?bmhW90X@CV+Y9+#9s<%2>Prv+nct9yykutqU$xlUt4BY&C|){dVN{ZDyEfiDM~HL zVaI-XqGrBOmjL|+|L!KVqa-RI)RI!^*008lsFeQS_DQVLo3zIddT06O6W zpIRa+XH7=^7$IFO#*-mWma4^ABrOig&Ez#84TvvQ+w^p4pDz-2gkUBeD%6h=)<& z$0|Hb>$r!!(6I@uIl9GMZdD+vXz*bUx^d_CqjZ`V82{?V5-rDK#aZ1d;YAsa)*0G= z-j1P=#n_2Pfk%M5KI?A3==OjY_8r@k%X9goPxs24?YzpnEDJrF=jQMGRP|XGscmzK z2=Uj8u3-8K)(_R8K0aC8>Zz8raQ-!rZ>G{-^>O;g-|^%3Cu+Pdq-4rg`gsu_Wo59> zsP6>;#3nJ3$VbqTxfpW~qgI0h@(5@vsOn1dJaznO5K7AUt1LV7qsG zYtZwUD;x#*Zk(>9>*C!KaPRyq&X>LjoUnfmMMk`PsJp5_z3*Ry)qD{VbOEajVtky> zS_b-z!FGR7t1d3f&g+un<+uy<7i25`l`^AH9cHHO5DYb{o4KpSD;B&K2p7C@<+ae< zqGIq|{Ir;X-em_?n@Fs<8y^UOUI4zud4$|O3UZmTF0+7I4n2G;ivI7L|NDD=bUX={ z`uW{=^G8%wi~fyw>Y!DfC^s2xci;aA0#**MMdrS+!F`96%y!(f%l24ZS!8w zH(|U)=(hjQtwN#Rg#eTE0~<)95`o#M8K09ZB!)Hv;fkO{uhM-6;51Qi^&?8I1;+ow zFY;($=vl9*8Fq9v9{h4!UC2coIPQAFb3FKeo*erZ(*ya@M+)RV{rm8}cn&e>{P&@D z4N*A#_wgKwp6_MPY(im(5E4TVY#5B}OmYJE_G zJ^SR1{qoPogfmj!J5zEYX4f!{TOx&CwpHOfDp~7T41EFuNUa5JxNw_-gID~40;yiW z;ehsXoU#YZlt;AZXNq;Qu9O@5eUiO0`r`O;(tez^?*`;Q+p-k0!VnMQH@}(%00EGc z_K&-qd6Q1a`X*n#K9I#W7vPURsVUyIx)xLZGkYzBN6b>+coF8PF0@Gi+FQ!KJ3rpZ zElZ>PKEM!@`m6&WZ4SZyi?@e-(YrL(LuH6myF{mDA&;1t2M*Hdow@lf7{a(JQpm1^ zkBcbh#83@BFQ-$(8*wf_b3?TgJ@1H4W}9|g3l|%j*eg;_-aFsIaxsLkFZQx)Vb%D+wu6nhm za@2ZW7=2lKu&ry7AgCNW9cRY1G0;VLtc~E|z}$KTnZ4BAK`TZE=M%L@f|4u3xZN5R zhH0*DT%(YsD{F?}IxG41XJMD6fBpkAxR1e1>A)!l8vD!?3rC0y%`{K$WYoUSn zYjIyaS@}mA4XW=MVPff+=H0(PHE?W1X4OW=MwL`4Z1kdw4@OuNWlqObY&P5mE$$FIYGr!y@mHj*$Mwdw8-EHdUC41JH<0Q5w> zhI5DJDxFr|i3BGPZ>_p+J@{Gr-XI6-ADX}N&&@^trkEpm5^|CG%|9OZcoF%bx|HMC z)lelnEOQBAk4wm0c5^0a)LW5*C+N5s#~IfgM`F&%rJoStb%uxYY1Bm7t+qPb0%P&- zC#e4+Cj9#p{4e%zroE8rq6dGlFQqw2XYFRwcXjN&jzw19% zV<;>0>~96+zdqGB?7Xmaztu_Q)qX#ju=UZriyn&UVXl$6!Gekvckss2@i{Zm^OCWS z-&_u{#4#QG@Vjg5U%zXJn;MT3k)^72o6J@E9WjWmnJ0LPjZ5xPreAK2vN=ogo@MNX z#rcDa;I4a$PM{16oo>HmY%yn-fS%BV_A<{>$)UQZ$BEk{N8r9dW2 z<5Gp&*@OGDub>?)0SdKxfo2cKK!tvP40w=0?N$?Pq*?d8~9zwMnhtIl&W znF-{x^exGB6B!WEyKq*b)6c3_3Bp}&hiJpS#vvbb_tcf_xl`tO3?y?NCWjVw0$5XI8P2foN$V)6v*^sP+iea9D;Asa|#s8U% z-0_7(-Ux!n4#ad!T!f@%Jy`XNfwRPdF)bzE%_$^*%==9f_)|R!*?wLd<-q!eZCdyw zu7NV;b0kB?;e!wBV?PhiwoW%kY|qWu*1B*(QsJ1EH;eYpif*5NBwekmJskA3rq*x$ zxmvTV@GYIjLBbQb2(hz|bgHvThHL}xoWi6sQrP~rghRa1mIrgQkF*-pOu=u`1egX# z!cS1Uq#u4t$X8fu#72$f!G%&6Jt+D0NYzw7)ZtT&`-CGQMv6Li<<{j&Bg^-~Z%#D~ zMZC2UnYM{ZrQ%V}?iyef8-8=E!1RxG()C{6$gT_{68gwjtkUbU=v-Z#;|mdqwYC^b zMy?a&R0M(f15f)OQ>D=|Ww%SllAJQr4a_I5Q@`Cw$Z(rQYtZf-39P^PsHo!@`Zhtb z)YLn4OMOo@t(Y}*4_*roz*CY>Kdg12>Cwmt8xW7RU~U~UNO~!9hlonEEa$_QBV*Pb z_68qI*m(3PSmtBBhUN0@Z_f2JehoAju$Q_vXi=ymhmVnBj-}DOe3QQ2D63~CI^f`T z-tB9kRg%MYRIE6=*oT!>Jl2MxHQgGATWUB8 znhzI`pVmB1f_o z111PtwXYJPQ$2YlR9zHX`5zYj->+LHLv85j=cvga#?y|M9aac9YvT-DMR4>}yI?wI zh!SP(>6aUlVf#`W@KuuVjs+8!6c}OhWcO<=CDl?$dR6 zZJ&(0a=8u?vf>!8scwiWi2bpIr*CWU#n63h5h6*w`tdCH4xOxOk(0>4H9blSE-RK+ zk28)cgzN9gnOYgNDAPF!iOq1jWc0Q|F{;Vme@VUYzEu+LmX_3I*#-OV)&MM_FPO4= zk>K$(Sm3eFKfe)D{&62C+^>vQxm_7jbg*~VW$oZW9xaANfF67J>3Hn=XvOSYA`hlZ zdNtM%zpn4pb+=jO zqPi5v<}aN%g_S6nT^{VT77}}Y{k+$Z4$HMzo0H1I#HqN)_oE*t@8L~haQ%-DF22ay z??2k34Vo7o+S{>H>rpec9w&8yM;5kdA0~})*6W)iJXAlPIouNPxC1{(o;@bNf!XOR zoWGLu%sB%xruo8?H(+*+;l8Oy&Cu%B!mji0>K=-@X}+}jVxDV*g!B#Y%F!*xQBk%& z3KXkcv>)b;dv$&6mSJh0Dx|>vFKmjkO5_iTouMWHgBbv$x6f>!9n-PX7or!ZVxISZ z{Ce&^4~Fd+DIw9pCzDC+)>7$^vl~7Z`_10KSA<)f9#(qXiKNjtOc>`_^?8%{D|lm$ z9`>r=gcg2I9T{Uw^%o&3DP!O66%zzpZXFVLW#-EK3^7|jEahS<8kn# z?z*qy*Elqb=A_7$RsL9f$TDW&TJl;OUFcu(%e@qLE9JdwFAB3|?Dw#?FA?)yW_I;Z zZ66b6e?tfNVC`z1Dm$Cr%tTPfl`(5A5j#n*dGC*|i3Z;eR?WVrSxymgsZmsM+TgVw z4$L1Ng&l|M1X%+?vq{n@`<1b)>NWYYbCqs*LvP-P^Cx(7Mx*VmlfP3tW_d@7*gbQ@ zWqKVv<6WCCN9+i7gB-5b623Fdk0K_*`undOs+VmbDl`2Ogl1kf zoiDR7!>J?UgLY?>+ipY|!4seNQ=C+ISeG;+A1kSuo+KhBbnv!x2NRqfGtd$VEhNJp z4s1U3QN5>P(hv>iTTlnx`J5;MbdQHpuyw_F1?32RPK!o%I;( zQ_TINPwwe(t*J{i^0KVGh6O2~@t$I5SRel5rQ{-fSX%kPp3Ukkm$oJa5p4Dm{*Uu}j$I&b zB%FUQkB{jJ47E8Myv)_xVaK4%jTIz~An~OqGc7>JyLnr?gbx3!KYuyY7_O>d7#?JMz zj8)9--nHNVq;A1Na{4MfnS)i zwN*I!_!4p2Pfu9R=~=b3e{`R^-x)@GW*l~3dHAt!A{}pRR`ls-zF!99NCtGZwhzMk zn&B5RjF5m{0sVDz##Y@way6UANrQ|cGBfmz-&=FBrDqoX{=z9K|4%p|94YGrfOKTF=h$FNzPZ5?1;aO$+G7oDr^qa1VW zz)ITh|gbNm(KW0T_>iT+AgJ}eUD<;wh4t`IqT}nD8lJkdsZyYD) zW)~k6R4XvNiD7>fBb?xUCIar&;@013`mouHqx)*lDuGyDZSD9Oz z%p80}v~;f@C)cz&->NHYzMr>3O1lz^d1P_aKPbOh-LDQlM4wAX)BnT4Efw}6p1Wdo z7XS;j$t!3E$@dRyXD86RVE@#o6 zW0;Ip|6Kg>_F>EBR#EF0uDwov*-}m3|GGW!SH+0*q(N1>$4|S7Pth|JWPQ6GU`|EH z%q7sD4ZmtJp9Mvr9VR8)^M7K!E{@? z`E*g%{kZy~6NDrOm(2%?^hfSg18fz)e%OyNUoBS85q`=z=;xC^&aBfbkkcybT0GFfGdy^e8n5b)ct?oy#1_&X qD$X!`cJQYkW(`Nh_oYy%{rzvoM<(OQ+q02>ASbJQE&J--hyM%uu=$Gs literal 0 HcmV?d00001 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..7d65c6b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +--- +version: 2 +updates: +- package-ecosystem: gomod + directory: / + schedule: + interval: daily + open-pull-requests-limit: 10 + allow: + - dependency-type: all +- package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 10 diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml new file mode 100644 index 0000000..92a4db4 --- /dev/null +++ b/.github/workflows/auto-merge.yml @@ -0,0 +1,27 @@ +--- +name: Dependabot auto-merge + +on: pull_request + +permissions: + contents: write + pull-requests: write + +jobs: + dependabot: + runs-on: ubuntu-latest + if: ${{ github.actor == 'dependabot[bot]' }} + steps: + - name: Dependabot metadata + id: metadata + uses: dependabot/fetch-metadata@v3.1.0 + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Enable auto-merge for Dependabot PRs + env: + PR_URL: ${{github.event.pull_request.html_url}} + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + run: | + gh pr review --approve "$PR_URL" + gh pr merge --auto --merge "$PR_URL" diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml new file mode 100644 index 0000000..f59f64c --- /dev/null +++ b/.github/workflows/golangci-lint.yml @@ -0,0 +1,31 @@ +--- +name: golangci-lint + +on: + push: + tags-ignore: + - '**' + branches: + - main + pull_request: + branches: + - main + +jobs: + golangci-lint: + name: golangci-lint + runs-on: ubuntu-latest + + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v7 + + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: stable + + - name: golangci-lint + uses: golangci/golangci-lint-action@v9 + with: + only-new-issues: true diff --git a/.github/workflows/misspell.yml b/.github/workflows/misspell.yml new file mode 100644 index 0000000..1947437 --- /dev/null +++ b/.github/workflows/misspell.yml @@ -0,0 +1,30 @@ +--- +name: spellcheck + +on: + push: + tags-ignore: + - '**' + branches: + - main + pull_request: + branches: + - main + +jobs: + build: + name: spellcheck + runs-on: ubuntu-latest + steps: + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: stable + + - name: Check out code into the Go module directory + uses: actions/checkout@v7 + + - name: Spellcheck + run: | + go install github.com/client9/misspell/cmd/misspell@latest + find . -type f | xargs misspell -source=text -error diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..00e6137 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,30 @@ +--- +name: Release +on: + push: + tags: + - "v*" + +jobs: + goreleaser: + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: stable + + - name: Run GoReleaser Build + uses: goreleaser/goreleaser-action@v7 + with: + version: latest + args: release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..decd1e9 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,38 @@ +--- +name: Tests + +on: + push: + tags-ignore: + - '**' + branches: + - main + pull_request: + branches: + - main + +jobs: + build: + name: Tests + runs-on: ubuntu-latest + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v7 + + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: stable + + - name: Test + run: make test + + - name: Upload Code Coverage Profile + uses: codecov/codecov-action@v7 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + with: + files: unit.coverprofile + flags: unittests + fail_ci_if_error: true + verbose: false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ca2c6cf --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +dist +**/*.coverprofile diff --git a/.golangci.yaml b/.golangci.yaml new file mode 100644 index 0000000..79b4303 --- /dev/null +++ b/.golangci.yaml @@ -0,0 +1,6 @@ +--- +version: "2" +linters: + enable: + - gocritic + - gosec diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..a12bfd8 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,53 @@ +--- +version: 2 + +builds: +- env: + - CGO_ENABLED=0 + goos: + - linux + - darwin + goarch: + - amd64 + - arm64 + main: ./cmd/termshot/main.go + flags: + - -trimpath + ldflags: + - -s -w -extldflags "-static" -X github.com/homeport/termshot/internal/cmd.version={{.Version}} + mod_timestamp: '{{ .CommitTimestamp }}' + +checksum: + name_template: 'checksums.txt' + +snapshot: + version_template: "{{ .Tag }}-next" + +release: + name_template: "{{.ProjectName}} release v{{.Version}}" + +changelog: + disable: false + use: github + filters: + exclude: + - "Merge pull request" + - "dependabot" + +brews: +- repository: + owner: homeport + name: homebrew-tap + token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}" + url_template: "https://github.com/homeport/termshot/releases/download/{{ .Tag }}/{{ .ArtifactName }}" + download_strategy: CurlDownloadStrategy + commit_author: + name: GoReleaser Bot + email: goreleaser@carlosbecker.com + directory: HomebrewFormula + homepage: "https://github.com/homeport/termshot" + description: "Creates screenshots based on terminal command output." + license: "MIT" + skip_upload: false + test: | + system "#{bin}/termshot --version" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8235c8e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 The Homeport Team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..160c734 --- /dev/null +++ b/Makefile @@ -0,0 +1,42 @@ +# Copyright © 2020 The Homeport Team +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +sources := $(wildcard cmd/*/*.go internal/*/*.go) + +.PHONY: all +all: test + +.PHONY: clean +clean: + @go clean -i $(shell go list ./...) + @rm -rf dist *.coverprofile + +.PHONY: test +test: $(sources) + go run -mod=mod github.com/onsi/ginkgo/v2/ginkgo run \ + --coverprofile=unit.coverprofile \ + --randomize-all \ + --randomize-suites \ + --fail-on-pending \ + --keep-going \ + --compilers=2 \ + --race \ + --trace \ + ./... diff --git a/README.md b/README.md new file mode 100644 index 0000000..e47d838 --- /dev/null +++ b/README.md @@ -0,0 +1,140 @@ +# termshot + +[![License](https://img.shields.io/github/license/homeport/termshot.svg)](https://github.com/homeport/termshot/blob/main/LICENSE) +[![Go Report Card](https://goreportcard.com/badge/github.com/homeport/termshot)](https://goreportcard.com/report/github.com/homeport/termshot) +[![Tests](https://github.com/homeport/termshot/workflows/Tests/badge.svg)](https://github.com/homeport/termshot/actions?query=workflow%3A%22Tests%22) +[![Codecov](https://img.shields.io/codecov/c/github/homeport/termshot/main.svg)](https://codecov.io/gh/homeport/termshot) +[![Go Reference](https://pkg.go.dev/badge/github.com/homeport/termshot.svg)](https://pkg.go.dev/github.com/homeport/termshot) +[![Release](https://img.shields.io/github/release/homeport/termshot.svg)](https://github.com/homeport/termshot/releases/latest) + +Generate beautiful screenshots of your terminal, from your terminal. + +```sh +termshot lolcat -f <(figlet -f big termshot) +``` + +This command generates this screenshot: + +![example](.doc/example-cmd-figlet.png) + +## Installation + +To install with Homebrew on macOS or Linux: + +```sh +brew install homeport/tap/termshot +``` + +See [Releases](https://github.com/homeport/termshot/releases/) for pre-compiled binaries for Darwin and Linux. + +## Usage + +This tool reads the console output and renders an output image that resembles a user interface window. It's inspired by some other web-based tools like [carbon.now.sh](https://carbon.now.sh/), and [codekeep.io/screenshot](https://codekeep.io/screenshot). Unlike those tools, `termshot` does not blindly apply syntax highlighting to some provided text; instead it reads the ANSI escape codes ("rich text") logged by most command-line tools and uses it to generate a high-fidelity "screenshot" of your terminal output. + +Like `time`, `watch`, or `perf`, just prefix the command you want to screenshot with `termshot`. + +```sh +termshot ls -a +``` + +This will generate an image file called `out.png` in the current directory. + +![basic termshot](.doc/example-cmd-ls-a.png) + +In some cases, if your target command contains _pipes_—there may still be ambiguity, even with `--`. In these cases, wrap your command in double quotes. + +```sh +termshot -- "ls -1 | grep go" +``` + +![termshot with pipes](.doc/example-cmd-ls-pipe-grep.png) + +### Flags to control the look + +#### `--show-cmd`/`-c` + +Include the target command in the screenshot. + +```sh +termshot --show-cmd -- "ls -a" +``` + +![termshot that shows command](.doc/example-cmd-ls-a.png) + +#### `--columns`/`-C` + +Enforce that screenshot is wrapped after the provided number of columns. Use this flag to make sure that the screenshot does not exceed a certain horizontal length. + +#### `--no-decoration` + +Do not draw window decorations (minimize, maximize, and close button). + +#### `--no-shadow` + +Do not draw window shadow. + +#### `--margin`/`-m` + +Add extra space (margin) around the window. + +#### `--padding`/`-p` + +Add extra space (padding) around the content inside the window. + +### Flags for output related settings + +#### `--clipboard`/`-b` (only on selected platforms) + +Do not create an output file with the screenshot, but save the screenshot image into the operating system clipboard. + +_Note:_ Only available on some platforms. Check `termshot` help to see if flag is available. + +#### `--filename`/`-f` + +Specify a path where the screenshot should be generated. This can be an absolute path or a relative path; relative paths will be resolved relative to the current working directory. Defaults to `out.png`. + +```sh +termshot -- "ls -a" # defaults to /out.png +termshot --filename my-image.png -- "ls -a" +termshot --filename screenshots/my-image.png -- "ls -a" +termshot --filename /Desktop/my-image.png -- "ls -a" +``` + +### Flags to control content + +#### `--edit`/`-e` + +Edit the output before generating the screenshot. This will open the rich text output in the editor configured in `$EDITOR`, using `vi` as a fallback. Use this flag to remove unwanted or sensitive output. + +```sh +termshot --edit -- "ls -a" +``` + +### Miscellaneous flags + +#### `--raw-write ` + +Write command output as-is into the file that is specified as the flag argument. No screenshot is being created. The command-line flag `--filename` has no effect, when `--raw-write` is used. + +#### `--raw-read ` + +Read input from provided file instead of running a command. If this flag is being used, no pseudo terminal is being created to execute a command. The command-line flags `--show-cmd`, and `--edit` have no effect, when `--raw-read` is used. + +#### `--version`/`-v` + +Print the version of `termshot` installed. + +```sh +$ termshot --version +termshot version 0.2.5 +``` + +### Multiple commands + +In order to work, `termshot` uses a pseudo terminal for the command to be executed. For advanced use cases, you can invoke a fully interactive shell, run several commands, and capture the entire output. The screenshot will be created once you terminate the shell. + +```sh +termshot /bin/zsh +``` + +> _Please note:_ This project is work in progress. Although a lot of the ANSI sequences can be parsed, there are definitely commands in existence that create output that cannot be parsed correctly, yet. Also, commands that reset the cursor position are known to create issues. diff --git a/README.wehub.md b/README.wehub.md new file mode 100644 index 0000000..8d1bcb0 --- /dev/null +++ b/README.wehub.md @@ -0,0 +1,7 @@ +# WeHub 来源说明 + +- 原始项目:`homeport/termshot` +- 原始仓库:https://github.com/homeport/termshot +- 导入方式:上游默认分支的最新快照 +- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准 +- 本文件仅用于记录来源,不代表 WeHub 是原项目作者 diff --git a/cmd/termshot/main.go b/cmd/termshot/main.go new file mode 100644 index 0000000..be7b29b --- /dev/null +++ b/cmd/termshot/main.go @@ -0,0 +1,27 @@ +// Copyright © 2020 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package main + +import "github.com/homeport/termshot/internal/cmd" + +func main() { + cmd.Execute() +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..9ea381c --- /dev/null +++ b/go.mod @@ -0,0 +1,42 @@ +module github.com/homeport/termshot + +go 1.25.0 + +require ( + github.com/creack/pty v1.1.24 + github.com/esimov/stackblur-go v1.1.1 + github.com/fogleman/gg v1.3.0 + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 + github.com/gonvenience/bunt v1.4.3 + github.com/gonvenience/font v0.0.4 + github.com/gonvenience/neat v1.3.20 + github.com/gonvenience/term v1.0.5 + github.com/mattn/go-isatty v0.0.22 + github.com/onsi/ginkgo/v2 v2.32.0 + github.com/onsi/gomega v1.42.1 + github.com/spf13/cobra v1.10.2 + golang.org/x/image v0.44.0 + golang.org/x/term v0.45.0 +) + +require ( + github.com/Masterminds/semver/v3 v3.5.0 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/pprof v0.0.0-20260402051712-545e8a4df936 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/lucasb-eyer/go-colorful v1.4.0 // indirect + github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/spf13/pflag v1.0.10 // indirect + go.yaml.in/yaml/v2 v2.4.4 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/mod v0.38.0 // indirect + golang.org/x/net v0.57.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.40.0 // indirect + golang.org/x/tools v0.48.0 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..38805ff --- /dev/null +++ b/go.sum @@ -0,0 +1,113 @@ +github.com/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE= +github.com/Masterminds/semver/v3 v3.5.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/esimov/stackblur-go v1.1.1 h1:jZhuCbyFBp34SxkMwCuuNQ+d42w+CE/WOlcJLOlPEag= +github.com/esimov/stackblur-go v1.1.1/go.mod h1:m0T0MjHYbo4Lib/R33XDUMbLBwyGf1/K48ZdqtXUYDA= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/gkampitakis/ciinfo v0.3.2 h1:JcuOPk8ZU7nZQjdUhctuhQofk7BGHuIy0c9Ez8BNhXs= +github.com/gkampitakis/ciinfo v0.3.2/go.mod h1:1NIwaOcFChN4fa/B0hEBdAb6npDlFL8Bwx4dfRLRqAo= +github.com/gkampitakis/go-diff v1.3.2 h1:Qyn0J9XJSDTgnsgHRdz9Zp24RaJeKMUHg2+PDZZdC4M= +github.com/gkampitakis/go-diff v1.3.2/go.mod h1:LLgOrpqleQe26cte8s36HTWcTmMEur6OPYerdAAS9tk= +github.com/gkampitakis/go-snaps v0.5.15 h1:amyJrvM1D33cPHwVrjo9jQxX8g/7E2wYdZ+01KS3zGE= +github.com/gkampitakis/go-snaps v0.5.15/go.mod h1:HNpx/9GoKisdhw9AFOBT1N7DBs9DiHo/hGheFGBZ+mc= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= +github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/gonvenience/bunt v1.4.3 h1:MLd8YWu1Vl1tiL+XfXJvVA9kL71yQT0N+x7gXVH9H7w= +github.com/gonvenience/bunt v1.4.3/go.mod h1:ggA6odP6FNOh50mGxxytSSJTs2Ghy5Veq9wIVSbuoAw= +github.com/gonvenience/font v0.0.4 h1:QAZKvx4PTQ8t6SL8yQhMP4p2OOeP4SsGlC9GH69xfu8= +github.com/gonvenience/font v0.0.4/go.mod h1:1OM64Q87u3jeCYHG34xR3WbchbG1fmKcbLOENJjndsQ= +github.com/gonvenience/neat v1.3.20 h1:KdevSy5GLb3h1U5AYGw3NwW9FAAU2MWfrtsDHzYaKOg= +github.com/gonvenience/neat v1.3.20/go.mod h1:GbVes855L3QYFkDg9pnxHe/FQVsr1Tl+ME0fyOZO4Lg= +github.com/gonvenience/term v1.0.5 h1:PYfBH7FB1V+tuuJl4KYrqG/tzAOUnvTy8IFa9YqYrJY= +github.com/gonvenience/term v1.0.5/go.mod h1:CYvcU7H3nE6eOP0gvGfYz4BjGJzM1GeNp+fx4IBWKLs= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20260402051712-545e8a4df936 h1:EwtI+Al+DeppwYX2oXJCETMO23COyaKGP6fHVpkpWpg= +github.com/google/pprof v0.0.0-20260402051712-545e8a4df936/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/joshdk/go-junit v1.0.0 h1:S86cUKIdwBHWwA6xCmFlf3RTLfVXYQfvanM5Uh+K6GE= +github.com/joshdk/go-junit v1.0.0/go.mod h1:TiiV0PqkaNfFXjEiyjWM3XXrhVyCa1K4Zfga6W52ung= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lucasb-eyer/go-colorful v1.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW4TvVgFr4= +github.com/lucasb-eyer/go-colorful v1.4.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo= +github.com/maruel/natural v1.1.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg= +github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= +github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3/go.mod h1:x1uk6vxTiVuNt6S5R2UYgdhpj3oKojXvOXauHZ7dEnI= +github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= +github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3vE= +github.com/mfridman/tparse v0.18.0/go.mod h1:gEvqZTuCgEhPbYk/2lS3Kcxg1GmTxxU7kTC8DvP0i/A= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/onsi/ginkgo/v2 v2.32.0 h1:Hw7s2pVrQo/8Yz5N77qdnpHaoc+c6cC9WIV1Jce+J6E= +github.com/onsi/ginkgo/v2 v2.32.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44= +github.com/onsi/gomega v1.42.1 h1:iN1rCUX+44NZ1Dc97MPoeFYbFR0vh8zxoxMFwKdyZ6I= +github.com/onsi/gomega v1.42.1/go.mod h1:REff/hsDsodHoKlWsP2mAPhu1+5/6hVYNf9rIEBpeSg= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= +go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/image v0.44.0 h1:+tDekMZED9+LrtB3G5xzRggpVh9CARjZqROla3R3R+I= +golang.org/x/image v0.44.0/go.mod h1:V8K3KE9KKKE+pLpQDOeN18w9oacNSvy1tDOirTu4xtY= +golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk= +golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= +golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= +golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE= +golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk= +google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= +google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/hack/download.sh b/hack/download.sh new file mode 100755 index 0000000..5b94ddb --- /dev/null +++ b/hack/download.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +# Copyright © 2024 The Homeport Team +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +set -euo pipefail + +ORG="${ORG:-homeport}" +REPO="${REPO:-termshot}" + +if ! hash curl 2>/dev/null; then + echo "Required tool curl is not installed." + exit 1 +fi + +if ! hash jq 2>/dev/null; then + echo -e 'Required tool \033[1mjq\033[0m is not installed.' + exit 1 +fi + +if [[ $# -eq 0 ]]; then + # Find the latest version using the GitHub API + SELECTED_TAG="$(curl --silent --location "https://api.github.com/repos/${ORG}/${REPO}/releases" | jq --raw-output 'map(select((.assets | length) > 0)) | .[0].tag_name')" +else + # Use provided argument as tag to download + SELECTED_TAG="$1" +fi + +# Find a suitable install location +for CANDIDATE in "$HOME/bin" "/usr/local/bin" "/usr/bin"; do + if [[ -w $CANDIDATE ]] && grep -q "$CANDIDATE" <<<"$PATH"; then + TARGET_DIR="$CANDIDATE" + break + fi +done + +# Bail out in case no suitable location could be found +if [[ -z ${TARGET_DIR:-} ]]; then + echo -e "Unable to determine a writable install location. Make sure that you have write access to either \\033[1m/usr/local/bin\\033[0m or \\033[1m${HOME}/bin\\033[0m and that is in your PATH." + exit 1 +fi + +SYSTEM_UNAME="$(uname | tr '[:upper:]' '[:lower:]')" +SYSTEM_ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/')" + +# Download and install +DOWNLOAD_URI="$(curl --silent --location "https://api.github.com/repos/${ORG}/${REPO}/releases/tags/${SELECTED_TAG}" | jq --raw-output "first(.assets[] | select( (.name | contains(\"${SYSTEM_UNAME}\")) and (.name | contains(\"${SYSTEM_ARCH}\")) ) | .browser_download_url)")" +if [[ -z ${DOWNLOAD_URI} ]]; then + echo -e "Unsupported operating system \\033[1m${SYSTEM_UNAME}\\033[0m or machine type \\033[1m${SYSTEM_ARCH}\\033[0m: Please check \\033[4;94mhttps://github.com/${ORG}/${REPO}/releases\\033[0m manually." + exit 1 +fi + +echo -e "Downloading \\033[4;94m${DOWNLOAD_URI}\\033[0m to install \\033[1m${TARGET_DIR}/${REPO}\\033[0m" +case "${DOWNLOAD_URI}" in + *tar.gz) + curl --progress-bar --location "${DOWNLOAD_URI}" | tar -xzf - -C "${TARGET_DIR}" "${REPO}" + ;; + + *) + if curl --progress-bar --location "${DOWNLOAD_URI}" --output "${TARGET_DIR}/${REPO}"; then + chmod a+rx "${TARGET_DIR}/${REPO}" + fi + ;; +esac + +echo -e "\\nSuccessfully installed \\033[1m${TARGET_DIR}/${REPO}\\033[0m\\n" diff --git a/internal/cmd/root.go b/internal/cmd/root.go new file mode 100644 index 0000000..20868c6 --- /dev/null +++ b/internal/cmd/root.go @@ -0,0 +1,322 @@ +// Copyright © 2020 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package cmd + +import ( + "bytes" + "fmt" + "io" + "os" + "path/filepath" + "strings" + + "github.com/gonvenience/bunt" + "github.com/gonvenience/neat" + + "github.com/homeport/termshot/internal/img" + "github.com/homeport/termshot/internal/ptexec" + + "github.com/spf13/cobra" +) + +// version string will be injected by automation +var version string + +// saveToClipboard function will be implemented by OS specific code +var saveToClipboard func(img.Scaffold) error + +var rootCmd = &cobra.Command{ + Use: fmt.Sprintf("%s [%s flags] [--] command [command flags] [command arguments] [...]", executableName(), executableName()), + Short: "Creates a screenshot of terminal command output", + Long: `Executes the provided command as-is with all flags and arguments in a pseudo +terminal and captures the generated output. The result is printed as it was +produced. Additionally, an image will be rendered in a lookalike terminal +window including all terminal colors and text decorations. +`, + SilenceUsage: true, + SilenceErrors: true, + RunE: func(cmd *cobra.Command, args []string) error { + if showVersion, err := cmd.Flags().GetBool("version"); showVersion && err == nil { + if len(version) == 0 { + version = "(development)" + } + + // #nosec G104 + // nolint:all + bunt.Printf("Lime{*%s*} version DimGray{%s}\n", + executableName(), + version, + ) + + return nil + } + + rawRead, _ := cmd.Flags().GetString("raw-read") + rawWrite, _ := cmd.Flags().GetString("raw-write") + + if len(args) == 0 && rawRead == "" { + return cmd.Usage() + } + + var scaffold = img.NewImageCreator() + var buf bytes.Buffer + var pt = ptexec.New() + + // Initialise scaffold with a column sizing so that the + // content can be wrapped accordingly + // + if columns, err := cmd.Flags().GetInt("columns"); err == nil && columns > 0 { + scaffold.SetColumns(columns) + pt.Cols(uint16(columns)) + } + + // Change margin if requested + if margin, err := cmd.Flags().GetInt("margin"); err == nil { + if margin < 0 { + return fmt.Errorf("margin must be zero or greater: not %d", margin) + } + scaffold.SetMargin(float64(margin)) + } + + // Change padding if requested + if padding, err := cmd.Flags().GetInt("padding"); err == nil { + if padding < 0 { + return fmt.Errorf("padding must be zero or greater: not %d", padding) + } + scaffold.SetPadding(float64(padding)) + } + + // Disable window shadow if requested + // + if val, err := cmd.Flags().GetBool("no-shadow"); err == nil { + scaffold.DrawShadow(!val) + } + + // Disable window decorations (buttons) if requested + // + if val, err := cmd.Flags().GetBool("no-decoration"); err == nil { + scaffold.DrawDecorations(!val) + } + + // Configure that canvas is clipped at the end + // + if val, err := cmd.Flags().GetBool("clip-canvas"); err == nil { + scaffold.ClipCanvas(val) + } + + // Optional: Prepend command line arguments to output content + // + if includeCommand, err := cmd.Flags().GetBool("show-cmd"); err == nil && includeCommand && rawRead == "" { + if err := scaffold.AddCommand(args...); err != nil { + return err + } + } + + // Get the actual content for the screenshot + // + if rawRead == "" { + // Run the provided command in a pseudo terminal and capture + // the output to be later rendered into the screenshot + bytes, err := pt.Command(args[0], args[1:]...).Run() + if err != nil { + return fmt.Errorf("failed to run command in pseudo terminal: %w", err) + } + buf.Write(bytes) + + } else { + // Read the content from an existing file instead of + // executing a command to read its output + bytes, err := readFile(rawRead) + if err != nil { + return fmt.Errorf("failed to read contents: %w", err) + } + buf.Write(bytes) + } + + // Allow manual override of command output content + // + if edit, err := cmd.Flags().GetBool("edit"); err == nil && edit && rawRead == "" { + tmpFile, tmpErr := os.CreateTemp("", executableName()) + if tmpErr != nil { + return tmpErr + } + + defer func() { _ = os.Remove(tmpFile.Name()) }() + + if err := os.WriteFile(tmpFile.Name(), buf.Bytes(), os.FileMode(0644)); err != nil { + return err + } + + editor := os.Getenv("EDITOR") + if len(editor) == 0 { + editor = "vi" + } + + if _, err := ptexec.New().Command(editor, tmpFile.Name()).Run(); err != nil { + return err + } + + bytes, tmpErr := os.ReadFile(tmpFile.Name()) + if tmpErr != nil { + return tmpErr + } + + buf.Reset() + buf.Write(bytes) + } + + // Add the captured output to the scaffold + // + if err := scaffold.AddContent(&buf); err != nil { + return err + } + + // Optional: Save content as-is to a file + // + if rawWrite != "" { + var output *os.File + var err error + switch rawWrite { + case "-": + output = os.Stdout + + default: + output, err = os.Create(filepath.Clean(rawWrite)) + if err != nil { + return fmt.Errorf("failed to create file: %w", err) + } + + defer func() { _ = output.Close() }() + } + + return scaffold.WriteRaw(output) + } + + // Optional: Save image to clipboard + // + if toClipboard, err := cmd.Flags().GetBool("clipboard"); err == nil && toClipboard { + return saveToClipboard(scaffold) + } + + // Save image to file + // + filename, err := cmd.Flags().GetString("filename") + if filename == "" || err != nil { + fmt.Fprintf(os.Stderr, "failed to read filename from command-line, defaulting to out.png") + filename = "out.png" + } + + if extension := filepath.Ext(filename); extension != ".png" { + return fmt.Errorf("file extension %q of filename %q is not supported, only png is supported", extension, filename) + } + + file, err := os.Create(filepath.Clean(filename)) + if err != nil { + return fmt.Errorf("failed to create file: %w", err) + } + + defer func() { _ = file.Close() }() + return scaffold.WritePNG(file) + }, +} + +// Execute is the main entry point into the CLI code +func Execute() { + rootCmd.SetFlagErrorFunc(func(c *cobra.Command, e error) error { + return fmt.Errorf("unknown %s flag %w", + executableName(), + fmt.Errorf("issue with %v\n\nIn order to differentiate between program flags and command flags,\nuse '--' before the command so that all flags before the separator\nbelong to %s, while all others are used for the command.\n\n%s", e, executableName(), c.UsageString()), + ) + }) + + if err := rootCmd.Execute(); err != nil { + var headline, content string + + type wrappedError interface { + Error() string + Unwrap() error + } + + switch err := err.(type) { + case wrappedError: + headline = strings.SplitN(err.Error(), ":", 2)[0] + content = err.Unwrap().Error() + + default: + headline = "Error occurred" + content = err.Error() + } + + fmt.Fprint(os.Stderr, neat.ContentBox( + headline, + content, + neat.HeadlineColor(bunt.OrangeRed), + neat.ContentColor(bunt.LightCoral), + neat.NoLineWrap(), + )) + + os.Exit(1) + } +} + +func executableName() string { + if executable, err := os.Executable(); err == nil { + return filepath.Clean(filepath.Base(executable)) + } + + return "termshot" +} + +func readFile(name string) ([]byte, error) { + switch name { + case "-": + return io.ReadAll(os.Stdin) + + default: + return os.ReadFile(filepath.Clean(name)) + } +} + +func init() { + rootCmd.Flags().SortFlags = false + + // flags to control content + rootCmd.Flags().BoolP("edit", "e", false, "edit content before creating screenshot") + + // flags to control look + rootCmd.Flags().BoolP("show-cmd", "c", false, "include command in screenshot") + rootCmd.Flags().IntP("columns", "C", 0, "force fixed number of columns in screenshot") + rootCmd.Flags().IntP("margin", "m", 48, "set margin around the window") + rootCmd.Flags().IntP("padding", "p", 24, "set padding around the content inside window") + rootCmd.Flags().Bool("no-decoration", false, "do not draw window decorations") + rootCmd.Flags().Bool("no-shadow", false, "do not draw window shadow") + rootCmd.Flags().BoolP("clip-canvas", "s", false, "clip canvas to visible image area (no margin)") + + // flags for output related settings + rootCmd.Flags().StringP("filename", "f", "out.png", "filename of the screenshot") + + // flags for raw output processing + rootCmd.Flags().String("raw-write", "", "write raw output to file instead of creating a screenshot") + rootCmd.Flags().String("raw-read", "", "read raw input from file instead of executing a command") + + // internals + rootCmd.Flags().BoolP("version", "v", false, "show version") +} diff --git a/internal/cmd/root_darwin.go b/internal/cmd/root_darwin.go new file mode 100644 index 0000000..935c4f6 --- /dev/null +++ b/internal/cmd/root_darwin.go @@ -0,0 +1,75 @@ +// Copyright © 2023 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package cmd + +import ( + "bytes" + "encoding/hex" + "fmt" + "os" + "os/exec" + + "github.com/homeport/termshot/internal/img" +) + +const osascript = "/usr/bin/osascript" + +// hasOsascript checks if /usr/bin/osascript exists and is executable +func hasOsascript() bool { + if fi, err := os.Stat(osascript); err == nil { + return fi.Mode()&0111 != 0 + } + + return false +} + +func init() { + if hasOsascript() { + // register tool flag to enable clipboard option + rootCmd.Flags().BoolP("clipboard", "b", false, "copy termshot to clipboard, overrules filename option") + + // register function to copy image into the clipboard + saveToClipboard = func(scaffold img.Scaffold) error { + var buf bytes.Buffer + + if _, err := buf.WriteString("set the clipboard to «data PICT"); err != nil { + return err + } + + if err := scaffold.WritePNG(hex.NewEncoder(&buf)); err != nil { + return err + } + + if _, err := buf.WriteString("»"); err != nil { + return err + } + + cmd := exec.Command(osascript, "-e", buf.String()) // #nosec G204 + out, err := cmd.CombinedOutput() + if err != nil { + fmt.Fprint(os.Stderr, string(out)) + return err + } + + return nil + } + } +} diff --git a/internal/img/img_suite_test.go b/internal/img/img_suite_test.go new file mode 100644 index 0000000..d1bb0b7 --- /dev/null +++ b/internal/img/img_suite_test.go @@ -0,0 +1,77 @@ +// Copyright © 2020 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package img_test + +import ( + "bytes" + "fmt" + "os" + "path/filepath" + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "github.com/onsi/gomega/types" + + . "github.com/homeport/termshot/internal/img" +) + +func TestImg(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Image Creation Suite") +} + +func testdata(path ...string) string { + return filepath.Join(append([]string{"..", "..", "test", "data"}, path...)...) +} + +func LookLike(path string) types.GomegaMatcher { + return &LookLikeMatcher{path} +} + +type LookLikeMatcher struct{ path string } + +func (m *LookLikeMatcher) Match(actual interface{}) (bool, error) { + scaffold, ok := actual.(Scaffold) + if !ok { + return false, fmt.Errorf("LookLike must be passed a Scaffold. Got\n%T", actual) + } + + var out bytes.Buffer + if err := scaffold.WritePNG(&out); err != nil { + return false, err + } + + reference, err := os.ReadFile(m.path) + if err != nil { + return false, err + } + + return bytes.Equal(out.Bytes(), reference), nil +} + +func (matcher *LookLikeMatcher) FailureMessage(actual interface{}) string { + return fmt.Sprintf("Expected scaffold to look like %s", matcher.path) +} + +func (matcher *LookLikeMatcher) NegatedFailureMessage(actual interface{}) string { + return fmt.Sprintf("Expected scaffold not to look like %s", matcher.path) +} diff --git a/internal/img/output.go b/internal/img/output.go new file mode 100644 index 0000000..2882994 --- /dev/null +++ b/internal/img/output.go @@ -0,0 +1,446 @@ +// Copyright © 2020 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package img + +import ( + "fmt" + "image" + "image/color" + "image/png" + "io" + "math" + "os" + "strings" + + "github.com/esimov/stackblur-go" + "github.com/fogleman/gg" + "github.com/golang/freetype/truetype" + "github.com/gonvenience/bunt" + "github.com/gonvenience/font" + "github.com/gonvenience/term" + imgfont "golang.org/x/image/font" +) + +const ( + red = "#ED655A" + yellow = "#E1C04C" + green = "#71BD47" +) + +const ( + defaultFontSize = 12 + defaultFontDPI = 144 +) + +// commandIndicator is the string to be used to indicate the command in the screenshot +var commandIndicator = func() string { + if val, ok := os.LookupEnv("TS_COMMAND_INDICATOR"); ok { + return val + } + + return "➜" +}() + +type Scaffold struct { + content bunt.String + + factor float64 + + columns int + + defaultForegroundColor color.Color + + clipCanvas bool + + drawDecorations bool + drawShadow bool + + shadowBaseColor string + shadowRadius uint8 + shadowOffsetX float64 + shadowOffsetY float64 + + padding float64 + margin float64 + + regular imgfont.Face + bold imgfont.Face + italic imgfont.Face + boldItalic imgfont.Face + lineSpacing float64 + tabSpaces int +} + +func NewImageCreator() Scaffold { + f := 2.0 + + fontFaceOptions := &truetype.Options{ + Size: f * defaultFontSize, + DPI: defaultFontDPI, + } + + return Scaffold{ + defaultForegroundColor: bunt.LightGray, + + factor: f, + + margin: f * 48, + padding: f * 24, + + drawDecorations: true, + drawShadow: true, + + shadowBaseColor: "#10101066", + shadowRadius: uint8(math.Min(f*16, 255)), + shadowOffsetX: f * 16, + shadowOffsetY: f * 16, + + regular: font.Hack.Regular(fontFaceOptions), + bold: font.Hack.Bold(fontFaceOptions), + italic: font.Hack.Italic(fontFaceOptions), + boldItalic: font.Hack.BoldItalic(fontFaceOptions), + + lineSpacing: 1.2, + tabSpaces: 2, + } +} + +func (s *Scaffold) SetFontFaceRegular(face imgfont.Face) { s.regular = face } + +func (s *Scaffold) SetFontFaceBold(face imgfont.Face) { s.bold = face } + +func (s *Scaffold) SetFontFaceItalic(face imgfont.Face) { s.italic = face } + +func (s *Scaffold) SetFontFaceBoldItalic(face imgfont.Face) { s.boldItalic = face } + +func (s *Scaffold) SetColumns(columns int) { s.columns = columns } + +func (s *Scaffold) SetMargin(margin float64) { s.margin = margin * s.factor } + +func (s *Scaffold) SetPadding(padding float64) { s.padding = padding * s.factor } + +func (s *Scaffold) DrawDecorations(value bool) { s.drawDecorations = value } + +func (s *Scaffold) DrawShadow(value bool) { s.drawShadow = value } + +func (s *Scaffold) ClipCanvas(value bool) { s.clipCanvas = value } + +func (s *Scaffold) GetFixedColumns() int { + if s.columns != 0 { + return s.columns + } + + columns, _ := term.GetTerminalSize() + return columns +} + +func (s *Scaffold) AddCommand(args ...string) error { + return s.AddContent(strings.NewReader( + bunt.Sprintf("Lime{%s} DimGray{%s}\n", + commandIndicator, + strings.Join(args, " "), + ), + )) +} + +func (s *Scaffold) AddContent(in io.Reader) error { + parsed, err := bunt.ParseStream(in) + if err != nil { + return fmt.Errorf("failed to parse input stream: %w", err) + } + + var tmp bunt.String + var counter int + for _, cr := range *parsed { + counter++ + + if cr.Symbol == '\n' { + counter = 0 + } + + // Add an additional newline in case the column + // count is reached and line wrapping is needed + if counter > s.GetFixedColumns() { + counter = 0 + tmp = append(tmp, bunt.ColoredRune{ + Settings: cr.Settings, + Symbol: '\n', + }) + } + + tmp = append(tmp, cr) + } + + s.content = append(s.content, tmp...) + + return nil +} + +func (s *Scaffold) fontHeight() float64 { + return float64(s.regular.Metrics().Height >> 6) +} + +func (s *Scaffold) measureContent() (width float64, height float64) { + var tmp = make([]rune, len(s.content)) + for i, cr := range s.content { + tmp[i] = cr.Symbol + } + + lines := strings.Split( + strings.TrimSuffix( + string(tmp), + "\n", + ), + "\n", + ) + + // temporary drawer for reference calucation + tmpDrawer := &imgfont.Drawer{Face: s.regular} + + // width, either by using longest line, or by fixed column value + switch s.columns { + case 0: // unlimited: max width of all lines + for _, line := range lines { + advance := tmpDrawer.MeasureString(line) + if lineWidth := float64(advance >> 6); lineWidth > width { + width = lineWidth + } + } + + default: // fixed: max width based on column count + width = float64(tmpDrawer.MeasureString(strings.Repeat("a", s.GetFixedColumns())) >> 6) + } + + // height, lines times font height and line spacing + height = float64(len(lines)) * s.fontHeight() * s.lineSpacing + + return width, height +} + +func (s *Scaffold) image() (image.Image, error) { + var f = func(value float64) float64 { return s.factor * value } + + var ( + corner = f(6) + radius = f(9) + distance = f(25) + ) + + contentWidth, contentHeight := s.measureContent() + + // Make sure the output window is big enough in case no content or very few + // content will be rendered + contentWidth = math.Max(contentWidth, 3*distance+3*radius) + + marginX, marginY := s.margin, s.margin + paddingX, paddingY := s.padding, s.padding + + xOffset := marginX + yOffset := marginY + + var titleOffset float64 + if s.drawDecorations { + titleOffset = f(40) + } + + width := contentWidth + 2*marginX + 2*paddingX + height := contentHeight + 2*marginY + 2*paddingY + titleOffset + + dc := gg.NewContext(int(width), int(height)) + + // Optional: Apply blurred rounded rectangle to mimic the window shadow + // + if s.drawShadow { + xOffset -= s.shadowOffsetX / 2 + yOffset -= s.shadowOffsetY / 2 + + bc := gg.NewContext(int(width), int(height)) + bc.DrawRoundedRectangle(xOffset+s.shadowOffsetX, yOffset+s.shadowOffsetY, width-2*marginX, height-2*marginY, corner) + bc.SetHexColor(s.shadowBaseColor) + bc.Fill() + + src := bc.Image() + dst := image.NewNRGBA(src.Bounds()) + if err := stackblur.Process(dst, src, uint32(s.shadowRadius)); err != nil { + return nil, err + } + + dc.DrawImage(dst, 0, 0) + } + + // Draw rounded rectangle with outline to produce impression of a window + // + dc.DrawRoundedRectangle(xOffset, yOffset, width-2*marginX, height-2*marginY, corner) + dc.SetHexColor("#151515") + dc.Fill() + + dc.DrawRoundedRectangle(xOffset, yOffset, width-2*marginX, height-2*marginY, corner) + dc.SetHexColor("#404040") + dc.SetLineWidth(f(1)) + dc.Stroke() + + // Optional: Draw window decorations (i.e. three buttons) to produce the + // impression of an actional window + // + if s.drawDecorations { + for i, color := range []string{red, yellow, green} { + dc.DrawCircle(xOffset+paddingX+float64(i)*distance+f(4), yOffset+paddingY+f(4), radius) + dc.SetHexColor(color) + dc.Fill() + } + } + + // Apply the actual text into the prepared content area of the window + // + var x, y = xOffset + paddingX, yOffset + paddingY + titleOffset + s.fontHeight() + for _, cr := range s.content { + switch cr.Settings & 0x1C { + case 4: + dc.SetFontFace(s.bold) + + case 8: + dc.SetFontFace(s.italic) + + case 12: + dc.SetFontFace(s.boldItalic) + + default: + dc.SetFontFace(s.regular) + } + + str := string(cr.Symbol) + w, h := dc.MeasureString(str) + + // background color + switch cr.Settings & 0x02 { //nolint:gocritic + case 2: + dc.SetRGB255( + int((cr.Settings>>32)&0xFF), // #nosec G115 + int((cr.Settings>>40)&0xFF), // #nosec G115 + int((cr.Settings>>48)&0xFF), // #nosec G115 + ) + + dc.DrawRectangle(x, y-h+12, w, h) + dc.Fill() + } + + // foreground color + switch cr.Settings & 0x01 { + case 1: + dc.SetRGB255( + int((cr.Settings>>8)&0xFF), // #nosec G115 + int((cr.Settings>>16)&0xFF), // #nosec G115 + int((cr.Settings>>24)&0xFF), // #nosec G115 + ) + + default: + dc.SetColor(s.defaultForegroundColor) + } + + switch str { + case "\n": + x = xOffset + paddingX + y += h * s.lineSpacing + continue + + case "\t": + x += w * float64(s.tabSpaces) + continue + + case "✗", "ˣ": // mitigate issue #1 by replacing it with a similar character + str = "×" + } + + dc.DrawString(str, x, y) + + // There seems to be no font face based way to do an underlined + // string, therefore manually draw a line under each character + if cr.Settings&0x1C == 16 { + dc.DrawLine(x, y+f(4), x+w, y+f(4)) + dc.SetLineWidth(f(1)) + dc.Stroke() + } + + x += w + } + + return dc.Image(), nil +} + +// Write writes the scaffold content as PNG into the provided writer +// +// Deprecated: Use [Scaffold.WritePNG] instead. +func (s *Scaffold) Write(w io.Writer) error { + return s.WritePNG(w) +} + +// WritePNG writes the scaffold content as PNG into the provided writer +func (s *Scaffold) WritePNG(w io.Writer) error { + img, err := s.image() + if err != nil { + return err + } + + // Optional: Clip image to minimum size by removing all surrounding transparent pixels + // + if s.clipCanvas { + if imgRGBA, ok := img.(*image.RGBA); ok { + var minX, minY = math.MaxInt, math.MaxInt + var maxX, maxY = 0, 0 + + var bounds = imgRGBA.Bounds() + for x := bounds.Min.X; x < bounds.Max.X; x++ { + for y := bounds.Min.Y; y < bounds.Max.Y; y++ { + r, g, b, a := imgRGBA.At(x, y).RGBA() + isTransparent := r == 0 && g == 0 && b == 0 && a == 0 + + if !isTransparent { + if x < minX { + minX = x + } + + if y < minY { + minY = y + } + + if x > maxX { + maxX = x + } + + if y > maxY { + maxY = y + } + } + } + } + + img = imgRGBA.SubImage(image.Rect(minX, minY, maxX, maxY)) + } + } + + return png.Encode(w, img) +} + +// WriteRaw writes the scaffold content as-is into the provided writer +func (s *Scaffold) WriteRaw(w io.Writer) error { + _, err := w.Write([]byte(s.content.String())) + return err +} diff --git a/internal/img/output_test.go b/internal/img/output_test.go new file mode 100644 index 0000000..9fe4dd7 --- /dev/null +++ b/internal/img/output_test.go @@ -0,0 +1,131 @@ +// Copyright © 2020 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package img_test + +import ( + "bytes" + "strings" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + . "github.com/gonvenience/bunt" + . "github.com/homeport/termshot/internal/img" +) + +var _ = Describe("Creating images", func() { + Context("Use scaffold to create PNG file", func() { + BeforeEach(func() { + SetColorSettings(ON, ON) + }) + + It("should write a PNG stream based on provided input", func() { + scaffold := NewImageCreator() + Expect(scaffold.AddContent(strings.NewReader("foobar"))).ToNot(HaveOccurred()) + Expect(scaffold).To(LookLike(testdata("expected-foobar.png"))) + }) + + It("should omit the window decorations when configured", func() { + scaffold := NewImageCreator() + scaffold.DrawDecorations(false) + + Expect(scaffold.AddContent(strings.NewReader("foobar"))).ToNot(HaveOccurred()) + Expect(scaffold).To(LookLike(testdata("expected-no-decoration.png"))) + }) + + It("should omit the window shadow when configured", func() { + scaffold := NewImageCreator() + scaffold.DrawShadow(false) + + Expect(scaffold.AddContent(strings.NewReader("foobar"))).ToNot(HaveOccurred()) + Expect(scaffold).To(LookLike(testdata("expected-no-shadow.png"))) + }) + + It("should clip the canvas when configured", func() { + scaffold := NewImageCreator() + scaffold.ClipCanvas(true) + + Expect(scaffold.AddContent(strings.NewReader("foobar"))).ToNot(HaveOccurred()) + Expect(scaffold).To(LookLike(testdata("expected-clip-canvas.png"))) + }) + + It("should wrap the content when configured", func() { + scaffold := NewImageCreator() + scaffold.SetColumns(4) + + Expect(scaffold.AddContent(strings.NewReader("foobar"))).ToNot(HaveOccurred()) + Expect(scaffold).To(LookLike(testdata("expected-wrapping.png"))) + }) + + It("should show the command when configured", func() { + scaffold := NewImageCreator() + Expect(scaffold.AddCommand("echo", "foobar")).To(Succeed()) + Expect(scaffold.AddContent(strings.NewReader("foobar"))).To(Succeed()) + Expect(scaffold).To(LookLike(testdata("expected-show-cmd.png"))) + }) + + It("should apply margin correctly", func() { + scaffold := NewImageCreator() + scaffold.SetMargin(24) + + Expect(scaffold.AddContent(strings.NewReader("foobar"))).ToNot(HaveOccurred()) + Expect(scaffold).To(LookLike(testdata("expected-margin.png"))) + }) + + It("should apply padding correctly", func() { + scaffold := NewImageCreator() + scaffold.SetPadding(60) + + Expect(scaffold.AddContent(strings.NewReader("foobar"))).ToNot(HaveOccurred()) + Expect(scaffold).To(LookLike(testdata("expected-padding.png"))) + }) + + It("should write a PNG stream based on provided input with ANSI sequences", func() { + var buf bytes.Buffer + _, _ = Fprintf(&buf, "Text with emphasis, like *bold*, _italic_, _*bold/italic*_ or ~underline~.\n\n") + _, _ = Fprintf(&buf, "Colors:\n") + _, _ = Fprintf(&buf, "\tRed{Red}\n") + _, _ = Fprintf(&buf, "\tGreen{Green}\n") + _, _ = Fprintf(&buf, "\tBlue{Blue}\n") + _, _ = Fprintf(&buf, "\tMintCream{MintCream}\n") + + scaffold := NewImageCreator() + Expect(scaffold.AddContent(&buf)).ToNot(HaveOccurred()) + Expect(scaffold).To(LookLike(testdata("expected-ansi.png"))) + }) + }) + + Context("Use scaffold to create raw output file", func() { + var buf bytes.Buffer + + BeforeEach(func() { + SetColorSettings(ON, ON) + buf.Reset() + }) + + It("should write an output file with the content as-is", func() { + scaffold := NewImageCreator() + Expect(scaffold.AddContent(strings.NewReader(Sprintf("MintCream{foobar}")))).To(Succeed()) + Expect(scaffold.WriteRaw(&buf)).To(Succeed()) + Expect(buf.String()).To(Equal("\x1b[38;2;245;255;250mfoobar\x1b[0m")) + }) + }) +}) diff --git a/internal/ptexec/exec.go b/internal/ptexec/exec.go new file mode 100644 index 0000000..85b5998 --- /dev/null +++ b/internal/ptexec/exec.go @@ -0,0 +1,231 @@ +// Copyright © 2020 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package ptexec + +import ( + "bytes" + "fmt" + "io" + "os" + "os/exec" + "os/signal" + "strings" + "syscall" + + "github.com/creack/pty" + "github.com/mattn/go-isatty" + "golang.org/x/term" +) + +// PseudoTerminal defines the setup for a command to be run in a pseudo +// terminal, e.g. terminal size, or output settings +type PseudoTerminal struct { + name string + args []string + + shell string + + cols uint16 + rows uint16 + resize bool + + stdout io.Writer +} + +// New creates a new pseudo terminal builder +func New() *PseudoTerminal { + return &PseudoTerminal{ + shell: "/bin/sh", + resize: true, + stdout: os.Stdout, + } +} + +// Cols sets the width/columns for the pseudo terminal +func (c *PseudoTerminal) Cols(cols uint16) *PseudoTerminal { + c.cols = cols + return c +} + +// Rows sets the lines/rows for the pseudo terminal +func (c *PseudoTerminal) Rows(rows uint16) *PseudoTerminal { + c.rows = rows + return c +} + +// Stdout sets the writer to be used for the standard output +func (c *PseudoTerminal) Stdout(stdout io.Writer) *PseudoTerminal { + c.stdout = stdout + return c +} + +// Command sets the command and arguments to be used +func (c *PseudoTerminal) Command(name string, args ...string) *PseudoTerminal { + c.name = name + c.args = args + return c +} + +// Run runs the provided command/script with the given arguments in a pseudo +// terminal (PTY) so that the behavior is the same if it would be executed +// in a terminal +func (c *PseudoTerminal) Run() ([]byte, error) { + if c.name == "" { + return nil, fmt.Errorf("no command specified") + } + + // Convenience hack in case command contains a space, for example in case + // typical construct like "foo | grep" are used. + if strings.Contains(c.name, " ") { + c.args = []string{ + "-c", + strings.Join(append( + []string{c.name}, + c.args..., + ), " "), + } + c.name = c.shell + } + + // Set RAW mode for Stdin + if isTerminal(os.Stdin) { + oldState, rawErr := term.MakeRaw(int(os.Stdin.Fd())) + if rawErr != nil { + return nil, fmt.Errorf("failed to enable RAW mode for Stdin: %w", rawErr) + } + + // And make sure to restore the original mode eventually + defer func() { _ = term.Restore(int(os.Stdin.Fd()), oldState) }() + } + + // collect all errors along the way + var errors = []error{} + + // #nosec G204 -- since this is exactly what we want, arbitrary commands + pt, err := c.pseudoTerminal(exec.Command(c.name, c.args...)) + if err != nil { + return nil, err + } + + // Support terminal resizing + if c.resize && isTerminal(os.Stdin) { + ch := make(chan os.Signal, 1) + signal.Notify(ch, syscall.SIGWINCH) + go func() { + for range ch { + if ptyErr := pty.InheritSize(os.Stdin, pt); ptyErr != nil { + errors = append(errors, fmt.Errorf("error resizing PTY: %w", ptyErr)) + } + } + }() + + ch <- syscall.SIGWINCH + defer func() { + signal.Stop(ch) + close(ch) + }() + } + + go func() { + defer func() { _ = pt.Close() }() + _, copyErr := io.Copy(pt, os.Stdin) + if copyErr != nil { + errors = append(errors, copyErr) + } + }() + + var buf bytes.Buffer + if err = copy(io.MultiWriter(c.stdout, &buf), pt); err != nil { + return nil, err + } + + if len(errors) > 0 { + fmt.Fprintf(os.Stderr, "issues in background tasks:\n") + for _, err := range errors { + fmt.Fprintf(os.Stderr, "- %v\n", err.Error()) + } + } + + return buf.Bytes(), nil +} + +func (c *PseudoTerminal) pseudoTerminal(cmd *exec.Cmd) (*os.File, error) { + if c.cols == 0 && c.rows == 0 { + return pty.Start(cmd) + } + + size, err := pty.GetsizeFull(os.Stdout) + if err != nil { + // Obtaining terminal size is prone to error in CI systems, e.g. in + // GitHub Action setup or similar, so only fail if CI is not set + if !isCI() { + return nil, fmt.Errorf("failed to get size: %w", err) + } + + // For CI systems, assume a reasonable default even if the terminal + // size cannot be obtained through ioctl + size = &pty.Winsize{Rows: 25, Cols: 80} + } + + // Overwrite rows if fixed value is configured + if c.rows != 0 { + size.Rows = c.rows + } + + // Overwrite columns if fixed value is configured + if c.cols != 0 { + size.Cols = c.cols + } + + // With fixed rows/cols, terminal resizing support is not useful + c.resize = false + + return pty.StartWithSize(cmd, size) +} + +func copy(dst io.Writer, src io.Reader) error { + _, err := io.Copy(dst, src) + if err != nil { + switch terr := err.(type) { //nolint:gocritic + case *os.PathError: + // Workaround for issue https://github.com/creack/pty/issues/100 + // where on Linux systems it can happen that the pseudo terminal + // process finishes while termshot is trying to read. Assuming + // that the content is already read, this error is treated the + // same as if it would be an EOF. + if terr.Op == "read" && terr.Path == "/dev/ptmx" { + return nil + } + } + } + + return err +} + +func isTerminal(f *os.File) bool { + return isatty.IsTerminal(f.Fd()) || + isatty.IsCygwinTerminal(f.Fd()) +} + +func isCI() bool { + ci, ok := os.LookupEnv("CI") + return ok && ci == "true" +} diff --git a/internal/ptexec/exec_test.go b/internal/ptexec/exec_test.go new file mode 100644 index 0000000..1c385c6 --- /dev/null +++ b/internal/ptexec/exec_test.go @@ -0,0 +1,56 @@ +// Copyright © 2025 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package ptexec_test + +import ( + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + . "github.com/homeport/termshot/internal/ptexec" +) + +var _ = Describe("Pseudo Terminal Execute Suite", func() { + Context("running commands in pseudo terminal", func() { + It("should run a command just fine", func() { + out, err := New().Stdout(GinkgoWriter). + Command("echo", "hello"). + Run() + + Expect(err).ToNot(HaveOccurred()) + Expect(trimmed(out)).To(Equal("hello")) + }) + + It("should run a script just fine", func() { + out, err := New().Stdout(GinkgoWriter). + Command("echo hello"). + Run() + + Expect(err).ToNot(HaveOccurred()) + Expect(trimmed(out)).To(Equal("hello")) + }) + + It("should run with fixed terminal size", func() { + out, err := New().Stdout(GinkgoWriter).Cols(40).Rows(12).Command("stty", "size").Run() + Expect(err).ToNot(HaveOccurred()) + Expect(trimmed(out)).To(Equal("12 40")) + }) + }) +}) diff --git a/internal/ptexec/ptexec_suite_test.go b/internal/ptexec/ptexec_suite_test.go new file mode 100644 index 0000000..aaaee30 --- /dev/null +++ b/internal/ptexec/ptexec_suite_test.go @@ -0,0 +1,38 @@ +// Copyright © 2025 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package ptexec_test + +import ( + "strings" + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +func TestPtexec(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Pseudo Terminal Exec Suite") +} + +func trimmed(in []byte) string { + return strings.TrimSpace(string(in)) +} diff --git a/test/data/expected-ansi.png b/test/data/expected-ansi.png new file mode 100644 index 0000000000000000000000000000000000000000..0e511ef1102cf7a0e6441f79c244396e501ba12c GIT binary patch literal 55994 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 literal 0 HcmV?d00001 diff --git a/test/data/expected-clip-canvas.png b/test/data/expected-clip-canvas.png new file mode 100644 index 0000000000000000000000000000000000000000..9975649d168b02c3cfc3d9a768c249051bc957ce GIT binary patch literal 12164 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 literal 0 HcmV?d00001 diff --git a/test/data/expected-foobar.png b/test/data/expected-foobar.png new file mode 100644 index 0000000000000000000000000000000000000000..8d16fdeebf6f3f59f47603beb13330eebf8bc40c GIT binary patch literal 13449 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 literal 0 HcmV?d00001 diff --git a/test/data/expected-margin.png b/test/data/expected-margin.png new file mode 100644 index 0000000000000000000000000000000000000000..4f15d8c5e4b64f94c7a7fa463e72e04d4e8d0831 GIT binary patch literal 12653 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 AMgRZ+ literal 0 HcmV?d00001 diff --git a/test/data/expected-no-decoration.png b/test/data/expected-no-decoration.png new file mode 100644 index 0000000000000000000000000000000000000000..a05da1baf54e087adf5d451223a0cbf61974fdac GIT binary patch literal 10550 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 literal 0 HcmV?d00001 diff --git a/test/data/expected-no-shadow.png b/test/data/expected-no-shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..9ea70b43e1f23a8b212f55cc9681d0a6d0c0c95f GIT binary patch literal 8555 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 literal 0 HcmV?d00001 diff --git a/test/data/expected-wrapping.png b/test/data/expected-wrapping.png new file mode 100644 index 0000000000000000000000000000000000000000..465a7ff4bd71e97a9b2fa897374ce713caa3d01b GIT binary patch literal 14113 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 literal 0 HcmV?d00001