From 277348f74097aa6c4a8e02111ac9d7d880c55684 Mon Sep 17 00:00:00 2001 From: puria Date: Mon, 13 May 2024 17:36:30 +0700 Subject: [PATCH] feat: tests, docs, slexfe encoder --- .editorconfig | 12 ++ .gitattributes | 1 + .github/dependabot.yml | 13 ++ .github/workflows/ci.yml | 16 +++ Makefile | 21 ++- README.md | 15 -- bun.lockb | Bin 80621 -> 80969 bytes bunfig.toml | 2 + docs/readme.md | 6 + docs/simple_slangroom.slang | 1 + docs/slangroom-exec.gif | Bin 0 -> 142966 bytes docs/slangroom-exec.tape | 17 +++ docs/slexfe | 1 + index.ts | 61 -------- license | 202 +++++++++++++++++++++++++++ package.json | 3 +- readme.md | 65 +++++++++ src/index.ts | 5 + src/lib.ts | 101 ++++++++++++++ src/slexfe | 95 +++++++++++++ test/{test.bats => e2e.bats} | 14 ++ test/fixtures/broken_conf.conf | 6 + test/fixtures/broken_slangroom.slang | 1 + test/fixtures/simple_slangroom.slang | 2 +- test/test_helper/common-setup.bash | 40 +----- test/unit.test.ts | 14 ++ 26 files changed, 594 insertions(+), 120 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml delete mode 100644 README.md create mode 100644 bunfig.toml create mode 100644 docs/readme.md create mode 120000 docs/simple_slangroom.slang create mode 100644 docs/slangroom-exec.gif create mode 100644 docs/slangroom-exec.tape create mode 120000 docs/slexfe delete mode 100644 index.ts create mode 100644 license create mode 100644 readme.md create mode 100644 src/index.ts create mode 100644 src/lib.ts create mode 100755 src/slexfe rename test/{test.bats => e2e.bats} (71%) create mode 100644 test/fixtures/broken_conf.conf create mode 100644 test/fixtures/broken_slangroom.slang create mode 100644 test/unit.test.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1c6314a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..0ca3baa --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" + allow: + - dependency-name: "@slangroom/*" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c81f099 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,16 @@ +name: ๐Ÿงช & ๐Ÿ“ฃ +on: + - push + - pull_request +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v1 + with: + bun-version: latest + - run: bun i + - run: make tests diff --git a/Makefile b/Makefile index 65bed85..1211d38 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,30 @@ .PHONY: help +SOURCES = $(shell find src -type f -name '*.ts') +LIBS = node_modules + DEPS = bun K := $(foreach exec,$(DEPS),\ $(if $(shell which $(exec)),some string,$(error "๐Ÿฅถ `$(exec)` not found in PATH please install it"))) -help: ## ๐Ÿ›Ÿ Show this help message - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m ๐Ÿ‘‰๐Ÿป %-7s\033[0m %s\n", $$1, $$2}' +help: ## ๐Ÿ›Ÿ Show this help message + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m ๐Ÿ‘‰ %-14s\033[0m %s\n", $$1, $$2}' -slangroom-exec: index.ts ## ๐Ÿ› ๏ธ Build slangroom-exec - bun build ./index.ts --compile --outfile slangroom-exec +slangroom-exec: $(SOURCES) $(LIBS) ## ๐Ÿ› ๏ธ Build slangroom-exec + bun build ./src/index.ts --compile --outfile slangroom-exec clean: ## ๐Ÿงน Clean the build @rm -f slangroom-exec @echo "๐Ÿงน Cleaned the build" tests: slangroom-exec ## ๐Ÿงช Run tests - ./test/bats/bin/bats test/test.bats + ./test/bats/bin/bats -j 15 test/*.bats + bun test --coverage + +$(LIBS): package.json + bun i + +video: + PATH=docs:$$PATH + cd docs && vhs slangroom-exec.tape diff --git a/README.md b/README.md deleted file mode 100644 index 1e82858..0000000 --- a/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# slangroom-exec - -To install dependencies: - -```bash -bun install -``` - -To run: - -```bash -bun run index.ts -``` - -This project was created using `bun init` in bun v1.1.7. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/bun.lockb b/bun.lockb index 680d5bbf52bc75dbf08bdc1a587fb0c7a29ed0c5..cb054a7fbaf65d4adf60b972a11b24ae80264608 100755 GIT binary patch delta 13285 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 Ou7eOwc77pR-}~RD6krhm delta 13258 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 diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 0000000..e5133e9 --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,2 @@ +[test] +coverageThreshold = 0.9 diff --git a/docs/readme.md b/docs/readme.md new file mode 100644 index 0000000..5a3d1bd --- /dev/null +++ b/docs/readme.md @@ -0,0 +1,6 @@ +Generate the video with https://github.com/charmbracelet/vhs +by running + +```bash +vhs slangroom-exec.tape +``` diff --git a/docs/simple_slangroom.slang b/docs/simple_slangroom.slang new file mode 120000 index 0000000..8f10708 --- /dev/null +++ b/docs/simple_slangroom.slang @@ -0,0 +1 @@ +../test/fixtures/simple_slangroom.slang \ No newline at end of file diff --git a/docs/slangroom-exec.gif b/docs/slangroom-exec.gif new file mode 100644 index 0000000000000000000000000000000000000000..967367193adf83bb11b6831dc8b3cd538a7211df GIT binary patch literal 142966 zcmeFYRal#Cw>26(SV)2ePjGkF5G=Ts0)-ZrQd+!}8m<9?YauwLNN@_2;;t2}KyfQ= zfkKfAoA;A{z3W~7xAwOV_R(GkxpMHFJl8#*dCxhlK(9Xg0HJyeLEmY1H6i=K|3o}Pn&)`Nkbjgf(gkwJ`+kr4)i zF~QiFn3$NExS5%mS(r3fn1xtaSXh~D+1S|FS!LPT;Oy+|9PB6#4h}e*2^QCnqNtLY|wOn}>&omzS51N1cyXj*pLzpPyfV*Gz!dUO+%VkpG6DfPoOduaJr=|*w{qBz(l{?#KgqZD9hB;)XdDx+}zy4G{eFy z@tSGfHM5v&*RENb7g$~kwY0Rnel6(w_3KtvR@Ro4*4EZG*Hdh+m)qFb+_1{NapQ)q zRjaK{q3w+)c6N3*ZR&2`ym{-^Eqi-=2L}g7M@MI8XBQV2S65dzH#c{8cMlH_PfyP~ zckXz3dELEx_ujpG-rnB6zP^5be*XUc0RaJlfr0n$-+%DnL2z*J!-o$aJ$m%`@#7~? zo`i&igocKOg@uKOhet$2L`FtNM@PrR#KgwN#>K_O$H!wZn8d`yq@*M)7Mq-$oRX4~ znwpxPo}Q7Bk(rs9m6es9ot=}Dlb4tG?Af#Y{QQD~0vrxkSXfwGTwGF8Qd(MCR#sMC zUS3gAQCV5};>C-qs;cVh>YAFG+S*z?9$#Ny-_X#|*x1SVo134XUszaJTwGjQT0&e>8fjUWYp9!ONs5XS z5dZ)H#5pku@zuZZ)erDTnMD6@k^FCw{QtQ~fR_LsAS)V=>kbFf3fd0g3wxu%TzYxv zx}yGgnAGjXp}OM1B)CQ#t8RVCa4NrfrR{Ki>1d|7(@36fL)mz)yx-p9a6|cI0WzF| zO|P+Hx)_}*XgAXM{B5~OvEDPirpos(tQu}FjWoTOt+nrsW7BW0ns0D_TWL4iT>YWN zdwt}YeoM_#d(gMNrO}q!kFP_BDA^5K@vFTtv_dz>TI<#av0VE31~2P3N3*0nm&aZ< zY)|4e;@J(`8h77Tn7_C=-q!SK7Vk8gZ`j`a`9rJUr{(eXmaiYX!YMh7I$96chf;-Z zO?15cwmns>UtsjA?c~#3gXhPISM8@?S9;?wIgC3y&cE%veQ|5D^VN^jgZ0q@&r_3DgR0cF@yU`D3G^eC5%dTXC)l0&A%E!XX(Bg33IJjjbaVlS&fEA z@vp^jXSlD$@|RVt#R)g>ti_8D@ULT}XWZ8luGR0-I?TmL8kwR<6%CGi(EQH#6;{1h%rAGd#Ak-OHYD<=koB-OBYI5ZKQ1 zpYhm!7PR$zJO9!5-R*)9Qo$Wu1jFr}!WiDlog$3v-cB)ATX45T!1vo^X_jl;bJ4WG zxbo7Rs0*6%{0v3DiXvCN%I8&Wv9~KTYc3b|sysR=UQ{)1>6KMKU#t97E3J9}AO`34 zy{PCUe6b(j1NFR9_G=~8SS^RQeZNVNR9uS+NN0j1qLjZeO)T$ENF_bKkJ1GazPg>r zhl?;5QRm}N!NBLXZa4x$4}7#~;Z{>2t+XCsQt7=4Cu*6sEH3i)+9z)ZSm(!-rYMS9 zdt*CUqbs_=j%Nfw)*J7=wEhyzQDPtD$YfjOW73H{4QUTl-6wk&^5n8!%)X!M$bc)?r(F6TODZEb* zhXfF0VHMaO4*7(WfPdi=mF>CH3?D-KFlMhrr^broAvqCZ6p|-k+D_igje{Q- zKvLr#D)T%aGB)codlV@pvM*fz+gvhs;^wFMeo0>0?@R|s5*)#svo10@a-+40*)o5V)`j!6F_gZ`)1A*##hg;zP($8$^+2(Q0lHwg(zdvX+jzLM349g z_{EU~u&xkND$iKxO90*7=>$K24VI5x1FWjpUi~H~#tsu5GL4WZ3ru%>$k^lvt~r^! z6$dWQ(h^38k}1wWEQ={hxPM5YGqN|V3hQUM<%SUkf!I{sJ~#J6*ofKPp;SWYQb7@m zc(>N0bo`@IK1lu2d|kGU#-%bvoN zNtf%6-?sUdGdETy+cG?UH~3rb3RSuMpzefk&bPcBgL1{$;fcVuZ_f@e<;vT-lfet$ z^3TS~RZoX6C!bt=D*#YeAj$Nm!kCY7K*I_YO)GSHyf$fi|o(%N%)Erg-w)B%#uxT%~bY!;k;-of&y2_qRf3Ao5J3hv+%8_w& zZb0#S9X6rLnNNRy#O8Z_)_9ex-01v7@b?BBb+x;W{=%D_?~N6P)wi#YF3hxjZ^9>3 z-*MCbuyDEXy}5O~`tJSF56c(dTe_%gyrcCO*O*URhYV|cGe;M<6i;7HCDizr>o4uu zoVLx4*95kVE`13;ZC|0T4I0#6KFT@m*fFdPo*iBO-gf%xAffirw*JS9h11Tn@!BV+ zqaS}?oW2Ht@F8RdD}*d(T|gsz7~|LqsnS_DI1wMgXRu0fxF~r zVss4Fpt)y#{6=+g*T>cv+RysM6YDT;2J6fp&IaTs>Jsmdt+W3)8$^QYvC#$_oGj-< zXrua+%&`q#rSoBv#QL;ygH6F3=Ob1V^%*T=o1zcTN9{okS%U^!lDX$&?nVtcvtwJb z?dO-{-iZx)+XmZ;AI>L&CK~cj$F@~}oKJ>;8gXQXJ1CZmsTiZiBF6C@ZKaE8Y+_>x zpW&|Fjf*!~6OCnZeOIL)^HYhXe=Hp&wsdS8ehvQcWBF{NrSo+B>ysZpJ_2Z3 zyU2_V!dQN;0F7IF7$***lzy&)lUn=uj1J>&{9J=gwhqWm940>exelj!IizEBl#=^% zgFnak<;eAkqm1^So8n0?$J~s*<$UvMnYyBoJJ%ual7ZvXY! zJE?tf+vv3I!>=zvlkLl=6Q`X&etiw0=~y8%KI>umeGp^ZvBo%gHlXzT5S!Go!DoCv za-9eMr*XZO_&Om0;A(;g5(5Z`iT`7ccLQhw`~b{X5B@&KU~y$nujUwoxmv=IKhH5{ z!b3jxWsz{mkzYmKA9IXI;QpD!Mo+T9)g1HE$E7<%lqscTxWP>~SI$o`V)xrBP-{1( zEVsGAT}yw>xw-=Q4mTB{8Se{A6}m3*bTdcs+1W5Vp3&k3MV~<9>Kr+T^BkJUa(^zy zWwPwr!-GAwmiq)2A!c&o{T=R}Yy8A7V2!S=z?TPE-nZnhW0rRgBgU51vXFvHC|RD0su(T!T~9m;tM8YY~NZd%nttQvNzkY9llxysT=5BNjJyG0|5w0|gMuc__71 zFUb0D+$4d_wd6}kDTQG#5l+PM4U?c7$x_h?HZ1`w%I8nc*51kntW~;jm5;@1E;w9s z?iJoBX&8UJ*+>|n$wOzBptxn_G%ml?5t`{s;{%a=55_s)H z>d56j1@)+FI(feZiFnv|_p_F7_!QpE$4Di>d6c=QCtg;ELr)UgVood+1IkO_GWR9dv`BJ1fCY&OrFT-ya9HL9=-Okvg}{Jf$o@!orVTyA%x z7(@Ty_qqYd)_pzYhGtbgmF&{~hY8iD)(aE<1F%y>vyrbLgnPRcmdrSo=R~d~87<3f=cdBuKRlRrcH zWkxJ7u{tV?bBBbw)m?9;H48eN#{6K{uo5kpEDdT#NaU)4LK;$9`lv;uMlP!3?2a zGn5TPZbVA&1sy#Qci$yQR7g`6?B?D^H#8t!HP>nOFI!Vb$bEu{cHH(#!i)LOVN&lk zA~5Tdt2Do+;+5Nggqo^d;cs=hNsd}|z)+rKdf{I7vWG(<8w6AYs(mCT52NUBHibVY zxKgjqkk2YYNvV-!d1$H_P(KOmx5NX6>l!1fubg}5Z{ zCU?USar}HZ#L*au7`-X zv~nc7XRn3$;wB(q8%AGmuf;2iPNu*S&^NXAi#(Z1gEl(Q)y4GlFJO(H$J(xtrJy5) zZ4YC;)w!wbvxsZhi-6YB<{}dv6!ugarrAj8BGj;+mfY=>_<9~b=FJMU*qZ6<755T; z9s$kIxZI4kcctSimU`yQ;QzQ{1Fo)Emp@;z_K{C6p@Oy*;6cx6Fb@80tj72prIk8i2=oJ2F z6q~z09Ax!XPa@#L-`V0hQ@j~>kjy8`8sw`ul7~Lk+I)>wUQR7y&zjmt&Com64V$wu zBqF~_gwycI7%d)R1pR(i>!al`-R4qd}vXLwaF zTGw`k>pkir;J1H#I-Yscy$`a15;)oE!95^D0dL-)XPR{geQzqifaIW)q>)eSNFIRI zo|C2A36DgtMStVX;|i6z9r)3R5nMPd)U>!Z0@NvL zDv6c_RcvIy_gc*LB%h=)+;Fdyam_d?-7U*;>XBW~^=IZ!&2yc3zOCumIWs18MHSs~ zf%_gi8UzIYfpGX0!t8%TIOOkQz)H>EnrLe^P9uzrQSayM!5?g#-m=kMe7z@umCW%N zE#a(_0#wgo-8FSV+wq&{M8Fz03_^va+BUNM){Np+cz$>sKX71k}+0l&S9^<$A3x}seCW1Z0FyU{aw1Sp)J>aro{N2`|r|)6SGJR zor9XU+SZP_U@E57-@cA1mco=&0KYr5%Q@Qo+`94h2O}P z{JJ@>r?vgk(;v&j-?pvGsQpVhp4#^>r|pX=n?{0v+~<9A*Cr4HH;bQA0|ACbI{}; zkmthiNGkUcFjn((B}kNEc%~`yfV75EO&z9$nkn23BLbsSvjbwIX(`1zgiv>Q7zL`& zUW-Os-XW3^m9`qi_5|jr$(0eb25PFR2t{%^*N-cFK&KiiOf@ad%`5DYQNZM8NI9y^6=VvJQIifd~k|v#yM)3`XHc58O z-3g?SAM|eTMcssrr)G;F-*nBZz+NMKud2lz=^??c?3U7rpRT;o7TD?t*Ml|U!zoHHR*0w(wz$F(mHB-*q=IhKG(n*@ zYqg)H9`8p5X5T$Dl*LL)S9nQf5s`2>Y(!LqSjMjgx_zZr>z;Vu&}Dld^~ zL^7vys3>|*EAu3^`MWVjmgS@m1YOH9;#;r`A(lS5BPruusC^tJ za)8$Yv6>MG(-E;{9RT@f2&lM~HHrAn03Tv>l3DZY327A6#kN*sX*Ud6BHX9R1SM!Z z=DH9F{yvqq!|-U_fvlNY(j2a2_cL8l37f)Iw! z{L3q0qX4LwiMR!-6@YmF9sy3^NSOf#(RY6mW~Yad{$xE0MI8{aWbJckf({dcSU)j} zQ*4+dmAR?{*=F6NyrbJO#Se%n z3xNYNW2PVv|DJrLOR0th7!zc$PXBBwf;UB-=0>A4Y(WIv!hL=N%v z4v3n>4I=naB+fXEr!)fHeBTQ((RrL4uT2OvXATm)O9%qL!29jKwas?k)(B!%ukp?P zWV^%OjDZx^1k}B-`?5e-@719b#1R&Cl+Os*O(%QEv37F;#7(S@B;vXW0gdNakNB6Ty|^)071^@u`waV9FqRPmNj)?oV+^h6S$wxxRAy{ zd4m??^GV|fp6G=o=%yHWar1odI?!)}*m~JlvGdR+Ch{ENB>F9zZ7oh_dwiT*wk~g% zHQ9S*KA2aaLN(E6{or}vU`?b5Hj-8Cv3GGj039lLL_ifA(ZzZQz-o4^V7$jNd66(} zRUBu?X70o_y z2Bz;SVteIHsHqnc;eVGKs01sf!krt&W;w7g;tw=5lWCmznE?^7Xtj>^!{{s}XTOSQ z`3rJ@$v)2{$5+b&Ef?|!w#7WGS-pzOp>lwsF4nWGK6EIK>LHHPiRjir3ELeHfH#t^ z9j_J7O?V=)(8YLG5v(~C5>Tz=OlNl)JU1x%*a4Bod>Um9xaA57sH8p9y!ps+0t^>WRXdV z7LqC3exw?a*SQpzE{s84@q#A6ytbq|r5SRK1`|S}(0UjhD_qEQ5JQ4Ezzs#)JFv-L z2ZnW#Pl$ugkb%ho!EW1NNfW9w6Dlm0EIWjnOUM7A?0s4U$pC<6(1bh!8FIEl$+ZbC zhtn*=DIx*nFAqR-A*A-{K`Ar#=?oAad+JMX8YnkpfBVS+-_v8arxVzxKW3kT4xbXp zhfE+rWLClDnZY#EAvCa1S|H7Dak2-_RI3Nn3tiN!-qhs>M9tGQs|Td_rbsPh2tAQe z1z;NSSsRry&rvtOO>xQvJoPOfDoq&VX$Hd*p1P)(%L`ArYyw*8qIT+~N#)9&J_@F&h=i|ZBQYBgE!TuF3~wS zqyWt610w|9Qh8GJ)l^$2ayDVCcJ@mgyAHELDKHw^74@Q zxtJtaZ0Zh}$0Rm0D>ip7FdrCKgpM;9@~Hr7zNi4z0ORZB`JgL=?pX5YV9HuBg&&?U zbDCyniu|HA>4!Y!F~BbsKnXe~%v~Y(BqAw>liOJU&jHkG_T;r-%7QLKx=<1voU+-Q z(g_(4IwZn`P}Bn`zwnVL3_%pc$)4dU>Zd54iIWyfLHI(*UYJm}tWZQnl9gWKQ!?;G z_qr$|4+8w)lrN6J>f#i|07rl~fzbguBAZ-nh57IiQKdzYhYHqF8)K{{Y>i!>$l z#OLqN=kI$EnLl7<1QX*zD0}Ux+E&u$oJ4I?>6i9sCovJHjZZT8U=Qxd~vRN#Ku|YRH^9{(EyND@g z#tQVqQ?!xR4I0`xa<+jH>VW|$a!xex!DDh$vlzo^Tax6$y#+p&%8Omw`IIlnyMf`m z?XCmEl22cU`Pa*3joRY5vd$?_T``SM2TE+iuAloZ(N6qM&JB-Rc3WM_tY>A!l79%L~pb>)yc#y$J9l3V+i^ZuujJ5-D6jwYfJ z%{!|_XvRPV1RI0u?6nhs3V|4)Z*gxjw|#AFL3~jf>wWT&G)_HLu-1%_pxA zFEq(QDITwH7D*)IawQQeyX07KlF4U?lDRIDeO;1cm-X3t^!)Ia5?ozN56wkwdG*=k&D#_= z>`a$XiZHy%6t!x-y}aUK&JA|%c_Ej6x1THl%qU&?#pQ###p-)+R7=^XzEvKm`-$v( zm3V0{%g`GQ>P$h7X{wIl2@Df2Xl!CaIVcW$8JI*iU5OP|cDJj)IX7LDl)_+Pkk_8c zOV3n=9fah>h|DWS$b=a&j-HR-Pg>wdr9GPWXqB-Ke&)4av{db&8}T#uUq!@R8|r< zKt}&^?)d*!x`}h{D`kltkI}%e3s7jHgl21lKjHEWhD~r$jFKf4@d~MBdSS9thxf$HUt${^ z)bo{#ul6`hij z*&oj+b@$QSbg?>?LM!o()te1un!xoG{|C@5^>m>dZyIAwT{Uy)9}spa)br4p_u~*6 zT0H!dm}BgN5!&b}ez$K{6hFK8ZQ6Vm2A(@bZI_xvebZAQC*-AOfTy*2q+`o-US4p2DLsI3^7=AMrRs<_k5S^XR}aOsn~UkJjaeISW(A=o%HGE}ct^L= z!AyUp6$8m$Eb=B(;2Yn@(-NnL^f^PR&L$N;?W~(9r9bM53nR=f98>6aFG3?S@n)k} z)U^*QTF}Lbk?g~SMbHnA^{cbA2bqK97azT)7PD`Jy-|DJQAbRF)2gnIrM*Kc6R9R1 z7AK6y62{VTz&s!t`^rv~f<;-5qcY!r5~pQKocB%V+!5WlTCB0zDKp|t2WQFot?fc+ zLO&mkUG3E9x%2&bCis`opZ=u`|BdE#_JuwvRa?@KPQfgUH+Wdm?sl*GlwPz5$?ZM2 zuXb&=GWWLLWs85r<0!TA!4{tLQcks7CGfZ@{x=Eo=B*TNpbw2++fS?uFD5I;OXN=; zeQF+#PZy5_ksv%RD~L@#g&>$JR{O}>bS53?(Yv;?+U6XtRq>Yaq+4IwsNpYSsqtT-nC1yoblwX?Mr|r-1>TaR_S+|&?{>gp zZk`z=pU8=jFa{>@I2UPAyy4Ks5BdDi`2Mj~K@`Py{RXMwEv>wCTRfsEENA~( zH(?AlztwV=l9>2lp3#e;H+pF_C-MyNJqc*D>YoHHp%mbYZ^yvsBOPjgN+IFN_VQ&a4=fQrXEW+wOvI?JOQ{d5+>b0uB$^|ux@JzH8gl{_&iHVe&tmPvzoi2W_eoJ?xRvIGu7_6n6br-0+ z&5q(C++uMLP1!V){T#cjaoeKR{hp3z!4*-Rlc&*)lS>8mHxkVHF91-^LK~gpEmtJH2YFq@0BpGr#W{}c;zrK{^2kb z_a(5B{KH`&SC3-VHRI9AU>C9s3mhJ*aGLP$4~_A@C2MqV3#)f3VA%ZlQn0Lz@AGxJ zySrQJxm-uLRNX8s;kpfdpft+yV;=g}V>>Z*2MR<(rhbW#OOArh`6g zZHl*}1nziL!L#>YU1ucCSskDrTMY=ZIIxi?z2otr3i##AXB$%r8_H)>suQO-eU~~O zKTLKL?Bj{tzo}VN)_L64wYl(3La1&dcioy};HyZj@(+in`=H12+!&@BaWSlHLBNT` z{VCNsU_BAkDFhNn&!`!0q2)IeMy9Tgk))uBM)VoWH%4&AiGD>Fs>}V_cQK3py%BDK zT5U!4De_d$6{>zXAT*R+P?j1dfBw#VJ&ufrA%f9o%z*@wQj%H}$II52q)>n7>RQd- zAxu&enCB;eOh#O-8#+NDe=0Tczrcq7?>W$aF@`djYqz#@vRD%vd20xL3=W&lPH+ z6ie*~E1rFhYp%>`n0PrA&*4t4lr`R9F~z*sYGX{7I|n9{2ri%q`*h#xB+jXWr^-Dt ziBX;PtK|A}+)tTkg_AyACZJ%!>O0@(e4&}}Vpyjm_Q<)1;Z@Mt`npVnLi61`nLG7u zhd18(N&TE9v|H)ptM5t~rd;09&?50!O4S$mh&i2teob=H{WWSL_H*IRD58^7oH$fv;oy=Qg*u95@ny){d1M6 z{RNeOquKmdro?{~QRU)}iIChf$l_swe)Ezlbu%oq+LhuLdr zy@t+zw9w=x(~le{KK@RVkr18p=7AZc@)jy60~M1Zj1_pT&nO;k-sqIk6I?6L$|({m z@Ja*riu@u}zwng}^YN4`a}rqF2kYBshQ3Enrrn#%JlJ9MF4iy~(y1g(c{O3 zh|YE9?|T=@85EY*=@{j5br;=pkm9$j)GZ66TH+1kQT=T0n)RMc?;C?&@tSjvGhfe4 zEN9kQnyN#T$73+vy+TPo+bZ3v3CN3Okub@aC3Bb7`52y0KLxIO)}-7phwyOwfEGMj z;Zq0Kd-X5G5R}*{cfz`^4NLitmUm?@RYEnOS|G^aE%lYXb#;@l+AD zs!km@Em}Olzf{}$W+RW59qM>f(?QijU23xAYMJ`>!k_QC8-D@tzh_bZ)d0_6Qtw>h z7Pe`yxu+LHRkr<3Q2AMjR&GRjdV31tQYbHgQXJ@3o(~oO+jg5jI#;^C=_8XsLyVsX}-D@Xden$|i zC2iS`o&<%FXX|4K0h7&^l&Vlc_$bsQ9V*jF=WUU3;Q;CbSpix0qY zV|KMa6HmpWRo!u{pAq<=N;Y77lWqBE?4#eCiu#VmFmV^Zl(J|i4B;Ak^B$7otv+y zyO>pNyqTfSm2lk3l2wuagIkjS!7Wd=)o-bHP{q$07a7EpO&ZpRYMEBtnB9@Mvv+*! zwO2iNBmvafusYD?I&T#p$VSXSxdf)KtR6|tL~A6tuVVy>zUFn!7u+PCSH#Zr{X$-7v+Rv`L?srv1w;OrQG6ZZR zrJ}tSn*Cl^85mj}?`UTPcLsde=-10aMTcRutY-GCLvb?%8j>cxod3XCU<1UoQr*FnF40(L#nTd4$3G751}Z>8Ug1IxF4R$^Sv?K2khe&SQ4OI-DDk zEN2?@vQDT60vOzT8CA_ge;Mj`N7{WhXhf@D^a2?a?mi{Fq?H@gs&E>`?V7$As)tJZ zEH?(wl2NBpeLlfN))A15vIK3AY-PRmNUySdhA~CCQoQe_63q8^q)<60m!U)7SExwQ zmP?REXwe7yBivB)hhtYM8K9#S?Vpw3^uM0+|4aL18-b_Sa4Xos)WWLxSNjTV+lw|e zGJIV$$mz9*Rth~_4RbH$uUOiUTQ^2F5-PKISfFq#kGQ&xh#0WS3( zTwPeNu1JtDnds(1+Dx_ELYvE|mb0#OgkH;xts;bdO=yyAie9>D+_5y@aJfa+m@nsPtE)}MUKTk^okU$hdE(wK!n26)rwu(#CtR_gRbT3UU3 zLV!yR7@@+fwRpuToFhhgBOv0P-kaicj1+iGG&BMqlZTv%jZ9O@Gb87(flJl32#k_!}$a* zor*k#Wz%y^H4N>Zr?$WFvf(t5akMQEK*xDCsbIrtp6mr|FKgrMQxoOp?ET`!zQ9|v zpIkPcvZ)89aq0_Y>>rQ{MONUlr3$&jVW{mssJ>!Sb_tW7M2)6Xg4ogyR7c#fu~_S> z+g;_sK>xYh{mUD?{x3-V&)eXCPo)|EzoF9g{|1#d^IIp~I#5&=3=&}_YHswhB%a>? z@;UNZ5nUsLVxd>wSCx&n2ONq2q|&7|opkNU&4pJRPL__ta)S-3n2$G9&yRY4&#_&2 zqhV6E4jtm5QX6(|w}LPC!xP|2a0yaap_NalH2Ru!v~UoZu8+U?z#E488KI%iU$k?S zNXP8|cJe0g;~isFG!I=OrDm16Sv<#H1GU(cbMd%TY93ZkMXou>#8Ev6GRSHPM(8RE z)w{n@|Cz-#${R-$)vvpGmu0JSJUcX7Ai-@7SXk9Qh^Shr|K6^QrAqy*oQ7hHGJb zGhSYm--{zy2etwPE4&1j%6aaKr@B4I$-K5RmF-iHw|<$;n9! zN3m|bqvdmfS3GjR45sJ*CmSZ6{K)z~j^sAb&tOU3bIv(ny`{{}E`dl){+yfAvW#*0 zSoitLOP)cVuOsu|puEB^N^N+*EcrSQ2p?Rj=Upx=9#Q1Gkgu@rDhf*?|8!ly6--Q5 z<1nyu#QNlX)AbEfMy2>Fb169YpD6IZtd9SE@LwV_$^Zud8S#U^MPvx7tkz0apj=9N z27s0c1p)&I|^uOs>Pl=%6vBSfQOu{Tb`)w`D(MpNgyq{YbJ zW1#ds%ZZXv=WlnJ&bWO`Kb*x5YR|Eoj^f#eyO3#u`&V~%DY>EJS! z@(BVW$%BN~Csg)`rL-OC^WIKUz@|}2{5$|aS(bB-wTq6KeXp_F@2r4nVln3)LzTV# zlmWRzw*ks3=fZ-R$kAQn_iYrMrIAUsw1f$Hf znU=b?v)?eKE%dpuV0X?WuWsX@6syS`TjE#k5t&TUIcJ_EJC)U7EF0A5?~+07HNV;X z@v8gDT+i`~)$kx(p;CKYv0{?<7R!|=vw!S2&I&4B8CE$9N~Mzj-DN)H-*c=n6b54B znnX~Q`WnAF-D>};D`s0XBD~>Fkxc#Kz&uH2yy7iLu{3`nN#d(_L#5hK)&iEgWkYIG zW;}0wQr44u_=Q68vDBp8=i~6WE&$e3v~9cUgJ_d|w8-~4=gjKVCcsbZxXJ^0x(zHf z{R8Ke_puL?J!Z2UK2p{WUD6tW`Ch%?$-GJUz*wbW&bynY;lPRN^{vQj-O@idQhGFe z1{#Jb7)=T>s^#*>Q3`vH91AGR&YVC+wBGeJLj0IG|G98yhBNiA{>MP zL7yHIe0)N5_xsP|*?X72CT%<;CBBrHwXS+Q#VmGiCVLx>kS_%3utTK?g!s8w-6UdH z*0fr^)WfMLv%5H!9jMP;M0{B*NYz|@6vlRo8MW<)hz%rYZqgZ%luSiSP)Ub!xEHhY zHK0`Ud=%L45Yh;rYsg=Q)DidEiHEc7ujmhPc0_H!8BT^GpQs{Zo{A?SHg}>0@seWiR4r$xUYcybZAiZVpTu?R~Sdgmg(eVgweGX@ctuDk^GT5We~v>LYHU7A4&nS=vZfYjgNF>REn=ncMhXU zp1llv7k5O3PrIzp;j^Dkx-C5t5y5Y)e`^FR2q$981x)d^ot8eb;v`;)(Na_-Aa=iu zDE2_K>$p%a3}qh~u zgsVA}Nj=IL3 z_lvt0*F*@IXepzDy4g5>banCCu2L31pg%i{)bKu_dKgiJ;0hU(@s*&4`#UnXh?C_z zDLZ|fIYS_aw3KZNS(T4_E3qUY&P;^Fj#KN?M(?#1;B_0kP9@{_ChGqd^=&8d0@!OR z%pKZAp&ePL5fR8-x;H>Zt8DdYBf`It^-gil^?q^d<2AQ&?D}OCu3WhkL(Jm`{RzNC&rHOtf-} z1f_#jG0O?8C0~C&iRV?TCK=JslwQ)4)5 zx_k2QU?D_UnS9TzyzRY<(T{}>s#{&8U5LKI#9CiCXuy3?sd+Wd;E@Gha6?`6-D+ZB zqXtE#`bU8ZA5cJ6ILlybUzWZZp~)jB_T7-EOHNIZz~0REeJTmmx_+ok^Xm_#Fr#D$ z+J`!zYMu4XT*LxXQA}{F6FFra&y=`{m}L<8{UBxu!ai@%`)Hb<02(SZwf2m+6_Rot z4_Y;$$~Cz*a^jRfXuGvag72dKt^*px0SAdy`7$AIbRN${KVG>1@c-fH%)_C2-#>n4 z-xpi9!Ps|(EJK4CBUETA6;h3@q+&!hBxYlVER!TkHI_wH%tkMr@KpoZ0YA zilz7!%&k&Ht_4b)lfVmb;=U?Z{=FiRdZlLs9Mf$ky}fD=TmO`v5w zg!5Bkk`%F$7#7b%{JsL&%7f{w0lEE8P&wZ)2n$yc-6)9d@<6&49}W`mln>_KtIXx0{GG#VhI*hlsHK=kwOwE2(BEyOeWFE1m{TM zB%Q)lF@y0Vx=a#C53`%&IMmDO3h|#d|nbOinF=bD< zW!E~uhsg1-fO)MhwvwJQL@ghWDW5=YFi}9VD5x49szd>6;+B7*R?NgyeCJlo)>O>v zW&aFS{F|)+jHO^dDKu6J&ygZ)rCoNA?JU$$IZ8~2jj4zhbogO%W;q{r7(kPr?U#{P zQxYJVJk)UjEzkxn&IBKpqL_^N!+imkkV^IbT6xA6exUi>64b+fJx3Y$)vo1+a_CV_ z%nv5=m;w?LZWvlzH50wxu-Mp1 z`$CI*y^y~}2V9`Wy`bQ~KGqd&sUb0-6Ks5L=Yratn(EAqSuHhJANPli@DDd`_CuVB z)pypyOXvp!bPjv*t6$mZQR&EBc|l+T^rjX^7U~#kpoiIT(tb!cq&96u-7S=%!m;k% zTI@GU?g=USh8A~9zE@g=Qqv==KycX{2Yr=}pHX8^anJ)fx|`Uzd9igh1+`s!z@CBp z#Ks!$*5z-}qXL*uEVS|d8d@#9fPxwZ2p|44FjPPa=*Z)oTKmD{(}2wMGq{h9y;!`! z55VXhHYTazkJacs`ncb+!!?YCbF~XR4e%G?`pd`h@4fV_rKneqdRt_;hn$^3I!Bc` zIu;7lA0B2A%I}VB!@S6s?$ngg-H1)V%(8IXi6!y{_-!#$ZsLM%_sK+{o~6!h>L`nj@+8r`rNb=%Se6!%Nj_=c zeq#MET{an62w*>Jutzj4$x;E<0~}49KfiSZ1w;d9&$H|vzi)|nM>J$Z*qk%Fi0~2P z8Us2slZ@n&VXmIKPHcFg6m^?U=+U%fH3*GvK~iOi9I3>x9URX&!_~lMp6RBe36TeF z+==iUGIEy!w&pn}Tn>+%J*D#zQPp-WqCgH0V%eGyp{Y_t0egO~f{e_Z|MR{LSat!I z30}s7bIHgYHr!9)v1s^0km*I{heBy+n*klR@i&~IJ`Xt$1)Pzpr^HM;(ozB0!j>b4 zb@f=_HHx#jL_~~MMC3!RJwJ0Z&dQkwyJd3OOhvRL!@jm4Qsod51X!j;L`lIhY(%aU z{@;EZA0GULKirm#vuzPZ{=T?k(WRoRI`JPav7Ij;8SXs355}cjJ@J8b>d4hI*9eYR zO$_$58*e?4vn(Y_iijeX_-WyVWb}|6e+iIpl9R0!m(!h*oME$sIWltObU9layTy*mYHk?z zgfFscLVevASrUFfWSWN`h65&KSSwKd;}Euzbq3HPX4p6`(fIhJHKn`tIG}flh<`&Q z{Gk&jS@<_EV-dlyU(cg9#JW!w<{v$e)k=+3P9S5)BU^CSlqZR0fWc*`$e4heIxOP74 zxz6dX+h_mWenY&2=fj3s_;+%`F_g{;E&dS?`vJh8lcHZL@b}n@oU*~YDA;iseu{#> zqJWVaLEEL6VK)9P9siV#PRP60I(0k0>z=|1*`vV0j^c*_%m#YNx4ip5yYBz}b05cm z&XNh+WmwlN{8cvW)ZBoMvjX*ojsL_tY_xxI7VFLj&YjLYT|HUZT?&4ZgCEmkheajB z+xjPX{b?@!p#b__CH{>RcZuGOT>&nUVVfH9FUc6|k3_2rn1d{pmV$59UISPlh8(R? z;3rtPL*&hNEq1uSYMs5f6U2Vo?m_djc(Ut*&)g?l*5kLncydqYY1aCuyYCYEmgyQw z2kw*>-1|d}9e;9sGvW>l|DH|wrNJA2#E?>;u74kR1Uz)zf&B$kVm;!FHVwY38=Tsv zyE3A0O~eYq=znbD?Z#H@$q{0U=eA|-c;f(cQ_Qp5+X`y_4)BUGPc`XyOUOm(LoGSb zcs)LpWgb4q#-7O|Oi5)0viYH6-b(Qu3e+<-{uMBsNP~B3aPJiOHvl$Eb|*%Ip3cF) zk>f7$BA=AKcz$&7#S7vV4rYjge^FN~zPtYN`U4%WP@^xiabEyzYcFg?I_8@k zw=`oV zDVxwohP|=$d^6u>L%}F{_$hU>MHAsA1=CEyzGZpm;DGn{rl;|rzP!}^b??(ZycV4C zd5sag-QsQf;uI~O-V7OQTs4A3Aj0} zPSEE!qtCUj!-CYwZ{<@5D8}|4V3+B!PLvLib1?6ugco$oRXX9J zhPZ`@pH^VoS#PH~xb1RskR0=wjXOWT|7l}kdw6dxS--Cw|9x$FN+eZ#?ypRBCcJ52D&3&dU+ZGq>$O*m5$Cp$G3&6!J{E1h_zjnS6Zw9 z@~1~<>CFiyfdM3Zk;Y(o%>kipVEw8mT8%~S*X&M!7`!5Ir?t<&R%B7_)#dcEHP}n{ z7F3j&K#%I#ztg~+o=lpxgijvzIBB}7x8)EP8*IR?CS!FoUM(acx)pb>B=-y+r?Rg* z!!E`LrEkFccULdp&j2jK+YdaM(1?Rx-Ecg4Ewj&)TjI09p%-5#6IwexP7)_um1lhm zKTS`CVpYNrc@w>+=Kw7waL#@WZ>%l8P!;y^>YY7R62Giyr|Oc;cVG*WwJcEhD*WMY zbW~5DUZHxi=U$nO`AAiI?PsAQPi}68p{l(Z$gI53<@<|-s;#aW|7gEvp3FWO8&@6K zYlo`8QW7eIS|sH^-)HLf4?QLQk-Mk+(4H9MGRcqN$;IXg_rMCvToJUI__3LJS-ohVH=vB~w0p@)= z@O%#enL6J1NoKa^kB)(5F;oM#-XFc=c)%CP@^fQOEm!5;?2{2z6 ziRX$RsEcHG(EL>obR$|1tcnWKh%DlxVNT+dp@gP}peMzf#Aa!oVMYLFcH*epGWmpg zEDJ)1#f_gn;S9_S*_qOa=uyN<`<~TnH#m;UK&~)q@4~5%1bl8i)>qr)pX+x8ztYI`1gfZG6yhN?I%*eOuvk z_9Dhzrt+AbTLk2`i}jz>(ff}^+MVYg3`{wOJ;rvATN`%Gnc7(7Jl(;K8Vxth@~j^`ycO=oIIve%-&~e+()h=LokgSI zS69(NX;8y$>fhC+a5&)C&*zX1sO&#gmT^a*8A|GCY>;@2ZF@%!0#Te6p!2IdZ4zVgCx`JVR=kK0)lCSqGyvvRZP z>|58u7N^ZwRh`#g?D?iV@-D&h*m?8C(vw~y%H1vc2?x*EoV*OPf+Es|M^I%e&#gD> zTdUB0;$IHp8I%T_p9K_{Y6c+y#K!+XivIx$SbDY+i?j^!J?Vk)1Qm+kwx|$m*g-3r znMNTs#l+&&5F4lc#mK=!_N}4CSs|}8=sICR^n@dkRS=86^J!ftaC?~u(ES+>4;I*9 z#9M;Ro=~9%HcMch*hce{bYx`9U9QNxdO zl#!}6`ztm^Kuvy6hI~0J5c*1j7j&p$oofs_Vn>XQ}vBO-S%c17Y>|h^JUv9o9*g8DX;F7A)?R;iM zte3~}oM)SZ=8V-vCTR1zt_L&)XqEHNbcX4(J0_*Y5ssn#wlhXyc1>(3Nu-HC!V2@Y z@>}A`8sKC&h<)pR=tXLT#(=+s+|Mubn4C24RHT{Q7`-CYkd0%AK+E%ss{zm7Q~}-VwbO-9FEXq}LTy%k#m}b1>8;9cvB5 z+^5OL|?iR0UABA?WChw9MsyeE<8@ten&`7qANu6Z3=Q78{oA(dBwIZ*K5w0 zo4gS}s#94!8eRBI0Xg6{&v~yh-6n=06WUb6B?ZwhW}eKGlQ;IK?M$vzgVl z=LiA$prnhvug&lfz+)x>HOz5J``WcCs0mmO(AEeJ7~Kk-oNG@+UxOGuXdMV`=3%q* zaF({(-oPpkos5}A;`-KbSQoi;_eCXXoGkX&e#Q~4dyfkCZ4Twf>-4_35NH#>#)Bn+}9jCkFC%zVLA<93OAB8M7 z{DllXD3$MgA6TjgS^;v`4rbbqzcyX%RJiC|d&%-gFQ$(oA;C~a#ir7J<@U=5CCipv zD3R8id>kr#@o~C%yG4leg%Op*gbtQWay3VUNy>Ak&RZ-$YvFyw8zAf8GY5h{@BAS$ zm*wpcu||#FP4~68+vQFFDtcQ8dmVKSI5Z?MBaf%Ua>NWJ& z!*V}XVG3QmXR_!V#E{x5vFL#B8G2baA5g*zuujH!jrQG$nN}wA4K#p*tc9O0Z|C za1*5{n^V-KJaNZbY4)L=U3oa+7Y!-sp?1L2c-R+9K`9ckUmenFsBpIf#j3I}PgPhP zUbL4An|m(tl^1PyxQ42MWRY*|3I@+-qs9-^-qXX6$uB&~xiNd-hRu0cu7U#De=FCh z@Uz~@5+W=;@iJNgo2$#bDJZ@1^Fsw!)kl*d(iJX;a=h!VhQ^vIe%7jX8yT*%DT*JF zcmraN!?m(zXkHB*?~hzUL8K`z{~crik}F14{PoS^w{!`HiYS=9%)MBYtHMXss#3BR z#y5+<|5g+m-4;6BZmdI|m=Rl+Vy!fV?{jLhdkc$^;(S2(Lj&8x3l`184xS^KpH;=c zlKlf+c^#siC>VFL=X^=HUS&r~_&$$1iKobNy9{2|h&=CgN3Rl=7rxB5NwVWVSfie$ zpMG^jmol>J>XZKvalBhEdEi8q*#6o;{C@*wHPGzTA~a2cnuYF`_trKm^=Bhy$9je8 zLsW&~oTnDP18FOxBMKByZakRPy5!+)q>RJQmWwTj;=K}Y5f8kbj-b^@(Q3e|5w*d^ zc_X&Ho_vCBLo4C(qie+RLjgFg8=!#f=E9e^A{R>Fy8u{TEe}IJe^JpTRCm?yE0yO2 zU#I>jLUaTRE#N}R;4L?H#+n`??SqFgQ9N^=n10jwTf zutlp7)?DAK3M*mp_e#Y(Uh6{^H}JLvmT+&E^2=EoFK#@1xKKt{zN*mAvd_auy=RNL8W{&8PR4aQFlye~vm^v}@A;(<8uCQfMt$?*HaW zoJPD+i`YiA2PB1D8QcrWC&*%49H7Z}C^x=dBUsZ9Erx845wGCHntsG3v`V}H#4bu< z_0CvB7IZNU>BK_p(t`24@Sk+{NT^ClBzq07jutL#n>e%z-9lZ6M# zfC`!oh(j}<5s?Dsq*HA%EVrYOtO4*fQYr<}kQ!@BDa>~eJAr@ZP;_$O;uBs!?yRNh@yl+d!yYudcUs`G5>Rmq7v~{*c zr)ETl2xUxqEJ}qK*Njj&MO>|Dt|Xiv#bxxFy$~ApaR9-UONCsm*y-bn$*nI|ow*qV z7Lz%#E*$^%(o*Dg(`5>A((DilMc)=N{E`Y7u#f2-xSq`tN*2gyDKs5(r0XZZm z91+>^oWSDy)HngsqP;+o8Rr?z2(gDJ@^O4boQW<^Mf_xq5L4maTb7PIUf=p={i{m{ zUq@~zS^sjPuN(93(Q&8%@gx8*WqS{9xT+b>o`oKQjpUQXPW7QuN`yWj*q0@cl1tD`Eg}iGA&&(gE4!~!$CMvLteG8}D@F7U(Drhk zWQyQi8FXy%jRpCma|Fq#@#TmTHP4qgqT?{Uvv4_iz6K^0x%NkX8;m?;ZMEzH6JWvj zQj2=`4ttYDnV$u;@c7pCf_OP%eJYyjhVUzo6Dfq5RD@e_0xNue3Vho9`gQf4eSF+q zL5kSRfluHF(o~4$LpP3dV7XdxmaHgUF3y(}89{keHf)WwaH|Tjb@t6lhZ`6Qq+nKD z02D4+2ij1B*fU#{k_r#1EIN(8f7tbgiU&;{n$PBo_r{2~55ePVEM(UQg6W98*=0DYp8leeBO*#--i-LGRgs+ppnnENOY+pI= zTQryFfY{7}XUN5w>;PwvuDnTj;%wn?aamL|V$V=f@}%c(c6~8Yn5hx(;uIySi*h?) zze$B$%9bR>eBcyqSH$~X7Ug#!HUUK&$??uhQuAUai%ud}&8F<$FJ3>J5~Wf(mu>iU z4R9tR@+IOe4nlNKQ#puyB)olY-oHJi`Wg(Jayrz5b zqUxwq6%@0Y9w=3ycao)niVFo#Cy2nZL&hI$@Xp2i;o<<{k=PjX1M$i z<828bhylcvcH$(tsByX}j)KUOe_cwI>5)arF^E0$m2IkDTjap~>RLjKa1(NC0T zn0njo6$%O2;DFd86=zJs81!vL5%8QzL_u@m0}|garUxR}w z>?+z_gV?4P`AUn9?|Qx5LA+P~^>XRA*tT!$p5o(fe5GB<;&6_=^$vf!y?E6SJXe9p z=FZo%K~@(8(Ng$Mxpd2?%!h&>!}qDHWiExvI%?dO3Fhko%l zNaUPJk^F^aq&zES!=^|o#QkhL>+Y#?l^cn?oZ z&FD3}C7yqYOUdycCKx*gg{k$3O)-KkEQZKvRuD8R+Q{`f$St|TEp1EJ*`(Pr$2)aX z+WQHX2bR@=$clj-_Af#9#r2)#?cDk7Yf!=Ul*Na<(Vu#scdcGO zI0pLa2T^V7b+hj zmY4))ccp$AgO*{L=JDZbSr1=l)yi@1mx;boY*4)F^n=l5Rp_<1X*HQig^jiZe2S6& z+sMPt*3+$5zobL}dX^9J(6ZCY26Oj6d6HFW%6&|Jf3FkkOz=6Ajk?`$qnyMiSY>f% zTk7A4Pi_D43;K*DTstQWGet+VetSDy8+kXhOR>r-yv;v|Y#!^G5PMyekRC$oki9vE zTo^VoQae7`BR2bxJUleM=^o<4%fF6sPGe|#WJ8Lv>CTM}XUYs`^3K0|^CZR0qN2=) zq8ZP@py&2^dcKFtO3KxitN z4>RGC1t_Nua#WYcELo(plxkV{$2ehap>bM=rI`5q3R7%ZLbWQkJl><({f>9jkt{pwGJ`n^Jt=9oyo!g3xX4IHZ zA2_`$mYG>C{5=CMOtXmLhal}v(?uAXpu5!n_#gXos;&K_7p_iS#k6&;oi5EN@Oahh zHMrRNGi0a9*hjCMt1y9FQPP0keWRse;{w}j)WCh_hMlYum+<(R64y@i(OR1()n_;CxVxBXz%xqs8p*vE_FsaE08NA1h-wT$gNNk#Lh~LkzZEgJ_8-t ziel%>ip2ju{<$s>wLd!)e8*vH6Cms4hl#|lxl@#RHgqYtf9!m(?x1Z)>F9df3ncJu zmm0E1nDbnlW`%(9A^5A(HaQ`1rq%}6P*do-GC}-t#R=l2dB3DD@{+iYMBVI#s=H%P zEFRS2ceW(058+4=E4s!OoS%gnUfm@1>$TFWmM(Va&=f|i1iES`B;pGXy>6&Mf0N1> z;3$x5)jj$NsO3;j%4*v;(}x0FBeD25UbP;3tBrwdZm!Xjw=UC%I{c32sp@9DzIU@dOlEAqT)*1 z|KC>xD}cpkkHJ7qi?JDrzCD@e55RX61~$}p9#PTt?@8hQ%{z5WX9VW;5{cnhciEf< zM21S~{nTEa@+^+hU>Q|Hp8Skk!D=);T?a@0e(itZXIT8jA(&6kXMA?_Ge*ZfDJwfXk(#4^E zpZ@mp6pf{o^=z-#zr|o?wM}=C|XrIl`6Z-Q7;}MEnfN9MkM!jc5T#3t7uk zl3r-wo^?6|+h1>wgRV=AIisapyOidyRQk@PN{|=zwegU{P&dF^QMThzBiX<)qM5ZX zy{7T#1U+;ap%T0{l}U1dg;AICAO63iNndm#?z~`4w({bozf&gp-p|T*%`|>U?GFcW zBzdK;4W5TP#t2PyZlWI@xVP7>;Ba?EEJbTaBKH_g5wWX7ZN#&Z(2zua#p>uQ#OLH& zE;cKW%jvI4r(zg$lO7c*H3FR)YEfYI=i@0o>7;8zQ0r)&@}2B4GK_Ps^ zBr_!dvkqq9a$4_`31!U;ySTx9FB^@jWUxgqS71V+LbImHjRDgu%2ptQb+5^9d8ML& zD2F@xCDdMr8y@)Zfex~NUl_GI6B8K|tbeM;J~*F@a+%rg-d&fm_tP0dN{C2W=O8jS z`i$Ng-&lV_g7EgqL}#iSjhNfQDA)$UY6a8u2)WmiHCUb@8eQAO7JG+SN|qp#%zkOM z7O-hWo_E%ulVrVK>iQB7_46Ib*lr^g2c_BoHCi0Fqw>(mxV<41b&VZ%2I)~8*Tpo6 z_C#8~9L2HzFbMO00Jd%&;I+!QCl}4H z5^|^EScv=7VCl-UD~V@{+!T--h8Z(L{nU|t7duRK%%zQHqvm|y_YC-B6=3|CT{uaV zA=4wQaqypzfaiSlzj=Yz*HpyKpUPL8-Zz?TpWTN^o38|r{y;;>_Gvww@}2avT zrd?k_i7JTR!ZqE_FF{y)uUpvr4&r@hz6wcyoM5e7gll>XSy0rdyWSaO|Nb*})?dFt zN9R0xZ$L3Y1~MHdAF@?5Fx9Ph%udTEVNI;E+~gkeBIGTao5yRSXe|Ebz-gCRK7I{! zImDfPg)ea2QF)}!%n_l`ol92h7!s4rL)}&N2`j)3*haHPHHCU|&>JUBFncE#GM17t zc?!XrAX)z+PySag)@uveD)lRlCuKue$VZEC;qZSuQJvysXmx6s_e3n83{{#BxTvN! zgU;%9k5m%f{-@=Cu0Ys7v)qx_hcipgtyiF*)r7r-o}2soDTVZR zwzo8=+g=8C;(>MILwZ&(3u)!KjxZgKpeB!$-c2KrzheY*YKTNnI5E0t!5(J;MBbth7kerBSmzs!ZahXUv-(*+`ArN(ImU+-|Y`+(3{a&Jv- zFnl7|FCILPAoXT5Z#4mq;}DM!sNn#_7g=Rh!}R9x8Kr>hl=73U>c`Put#L%#GsuT< zhH=9~OPwyjP-#!;YJty1;e7ttoUFO%z+TqNuQHw!xlTg- zO?vI+N-F!l!=EIlcwvA{fLN)7y`gzRW$g}ORmSM|)c4&splPZ7xAAg++15(ILXPV#Yw)*inB zrNv~u%Z$=B4-i2QFifDq^U~&Vy6vML4=U3ugy}a4aivE(b}1nfJXeX*2H+XcnLbSz zJX9DM0f{LOb{>JyXu}Q{mF^@NL)t@YvJ%)NMG;G#7t9@BY1O@urCb$idxO`#PzCYi zr8sJWgCt6Zi0|74@u(5l4uFUx>&*@DhDm{EYO+_Wa;{#7GQcDOywplNfPNynXQRVt zysHN|C&d1K?m8&!TufAG^hBGA%(9>`LPP{8xR^~_s&1)qCBBb@2R{v z<|_lJiXn`vJnl81G@T7&PK!Gz;F@TGU%X{nDaca}@ty?}zV-O2g;pWG3pGMB4jpO3 zq|t-(!3vvFB~2pCyKV0?6SGakvll6;4nj9AE6okEzy`^fFOJrLR(n6HIBK@|ZcL{6 zDIKbC$3KSeAHk%0fRU;&oniVJ&CO45N`DSh(!bf8OB#E_bPfrp1SpHf6#3sbGpZEM z7lpq15H~H+XNtV>s`9`n-BkiPp?}f`3Ie7So?4|JZA)I1kba_P(Rj}VgI@bC;U;rc zx=G>Y&?n_?Cn|Ier0CN{e@T8rTYPMoA>lpl^Y17%!L1c^#-KNS4M3a$(~=<+t<+Tn z3F3h>P3#-~rAkZi*J0McIBQLu{aG~0WfHQGZoVTC!gXWQj`gBCf&-g+pcnapbmmSF z-Qgm{D>>Ml=6rFCQN$;;ra2b;vVRtT{7w@NhzaIDKa7)u18g8BYBZh>5ru}>tC?;p zo*~b{x962__MFmzzV)K+n@o1MPqWa`g^|B9*ssH(^d-dI1X>2S0-zvTm$C?~@SIXg zmsGF(f%NN)Xc8QJz`T@xn$grvtAf~S zd1U5L1vF?2AKQ|spVoFdtzyl# zTOx*66Vq9LySYm;@hrnm(eu(4VrbQ<9)C4IQ`l;RK11COC}E%|xaCV~16a{;^?iHw zGlV`kD4BWo-^Z*Ipnwjc0S~3CeZS~e3)i#Icu46ZQn+cEc3!RID&<1$_+r)vMvU{J zmbv)LJ@_lSsUAZn1|*?hcte;=w=i@vy$<3>1vzyIon7`DheLcrqIkV#o>dJIgT^kVotP;x=em-J$&9V;h#(0Ifc^@r1+S~rVir8dx+>21X8#2=?o9# zNkzD8>Vvb7t=_sfG3}?qOvaN_jblKBiN#$C*QP0kNa3Ruj@X?5FKg?2u+Ar(5w%|s zsIbwTqu4Kj1gV0FF;Ih4W?Sf;wqw2MREYYtkVfoYrBy6!6}}^dpfo^s+T1w?$L;bB z{GGycex>P*DmVYs;HVsMked0(4C*-ov5SV#CcC>-3fGH57cWB~55V)>6Jmn>DMD0O zrsoVqyT-EHJmmAQqdx4IdWZue#-1Y-fV=&gr;c>$)Qu4^^0 z5iY&gZNvqc=z}LoA_pGWT-2R-MBtywL@nsuwEO#f*2-~Ba6q<_!~q#;7~U6|L7cDk zYtABHe+-}r*S2;4-K1Q1>cVcreYPy-A{oTDlNl7c92VX~!74o@^8u{P{Sdq$3t=## z44P$HIz*v(0`DdvHD2i*^Vp4^{nPIAPjj(tGSjbFd0D~qtAca@lXr}ue3MiLx7)Ls z=@&7-eNa-U%&Vcjuf7R`qym$tl~(ft$7H5ASLo*=T+UqVz+oO(s`Q~VJ*2{wKgP9b zHLHBXjIx;la)?jf9Mhc!>3u)hoA!;|HZS~TimyR@Y7RE__4u|zs*;#~QiyZc&iJ74 zkRus(h9cK0$f9_m7gy+Mq`W)f@~8R>J1dMh6YS^p&MO(>Ukb4&k#uK*{i~GT+nBaK zA9XDyS!a|!Hp2OJG%W%kwEm#bltF5UN9%4U_3iA1oqcIMVUst#x53@NM#ZBv3)d}SQi;NjaNoyi{x4gUlsu-#b*1;fkKGo(<>B29 zNZ~>oi0dEF#XO#UIONjWMVIWEd(-9a;mU;})r?Yx6Be?Nq&&Q&yQrM+*%5rPSK!%| zx|1{)>>0D?(wX1+O+5>tqiB%QG1Zt@2lk*a-B~^Ox*pH)Eg=^L3+a%DM|*WeJ?<2y z=cK^l&v3qm;c5f%>;f}CfSn!A@*{#5M)xqn8E%^3j=nULDZ%{B9O4y@G$lz6b+myv zPVk&n0#pUVtrYxhf466Ek8Tav(}n5U+Py@>a3L`l5|u6yU}D!&WO9#Zj8-V+dnRA# z=nMAjSXB5GywC{ZL;n(5(38Y{kvP z0}R^!pkJqM{%Q;QedXrwn?ZkW-TZSu=3$nq0F#DXaqOo3HPf3GUqwV;+m{tbFrdrE5ZemEVDR){SrG z#G}pwo0lIC;={j5&=x_BVf*v_3q!eN)@FL4j=1(kluT1M+w$&c9V{ zgYvhm&MoQgGut_^|CZ@CZ^hVx_|n*jAc6Mrp^XI~^GR`3`p-Voyz`xXDQlgys*;uI zjuWIDS?15`$ixK>7xpACL71j%Yd0J0f%(@T+%fWQ;&7H`2^@E@Uov4pvO3&3aU^S3 z?OVR*%Z}F>WEfzyXQ0^5EcZsco$1aS3CZMnu?qZHR?9oPV>@V$;qX+ABf@0!)f{m( zoe>Gi+O zhY7L;=J&};0+%lGy;#4>Eka|GI7tUTV38e%dM%{9#a0mw=Hrw5>AQxM7Vu2TV(9un z?I3pH9|h`IM;MhyY%sXYAv;et(6{km#xiW)(oy+RWQ zsG@RGr<}2ct@j=1$4s9fB*j>6vWS5Na1!Vh*ntH;sYpcBV0nT|eL}ldO!Z=%L5nm= z06Frnm7s0)ll#*&YViZnP`o@H3_J-tI4=QO}_BI z!nQ>=y)cE`od&RV-*ogHjV6}lkYAVSaY4>n5JvFG%A$qb2oF{-6g2DEI?WCt8}<|4 zc7HbiRQlF;BKH0sv`zMeyq9AKh?0kr3d}M=<_fwr#BF7z>&|z}5`Kj*T_B>|1oqLZ zPvM-9y|A_pgc~|h#Ff522`COZ&K>JSJ)yK(Lw++$o@>i8ROw{=?=X)N|NTh|R*~lo zoc#se(fp7DL62xs@7Iw<;rTH_a)W%F)DcH43LOWpA&P9ARurdAG4;-YL)jq8P>;D! zdoz?iDd&s$Re=7_FDi_JC1DQmuXG&*FH16sAH^T)n5uPTAXj0U>g!EMh**HbF3oSU zHhFyZocDK2!pSj=-mmsvKZ)gV>@Nt)E*9)FOY_s&w;n?Y1!>+NylU~1- zW*2*2mw_FN0^RKAq$@63n?IAMdo{P?^O_Rdetq1E$AC+7r2jJs>wol*++tpqVDgiE zi+`dWS5PA)`*A}Z>IX3^xS(@~-)v=2dGN$+A?Yn0;s1WLV!3*0kN#y!(Y4WizD3i< zj=y;1+4{2bAvSgymyeTSQ;bW2j=oD@4z}05xlGzk7V)3a2c(BCP0)>hDf%hux`~9@ zVEAd8Xo*uodE(F^Ysj56;yDl@_3RJx<;IbDA5T^I5^U~exgldubynWJ;b{IzJ3*J! z6Eg7=W^ZDO4i92WgS}>h;=XNN^i~G}5JztTDy_SGQ_ba&yy84g(x54PR~o9E}O{oB}d-TaVUyk9vm(o@J&iG*vajd4_cf z<;zn?UW7i1ftsW+=X1 z52eUE;^_OW3So2K(Vb^Aj(&iQdS*^pODS1NXC0BSz`V@;LcJ#SZ2vqaVDu|f`g+d9 z2fEUAE6n*LNXL!8=XB`Uh%40nniO)1YuzSwry{nrJ*!xibJpzr5Y2zT0- z?C^0Avd=e=NFCbw#{Kxu?!W%Pd#1F#?HhOlJ+w?u-I?@XCt%4j+UZ71dL^kNpO^;fnF7FAs z3p#pte8Vye&8We2(=Wxm4Vb%iFb~5${gX#Q7E&sYx&Km^O|_u)pMyw=qk1l*dWn4F zV9=H)_kNE|TfvJ+yiq+bkl|3h=@faXHtH`r5vm0UUo?9EEX|;!SS9cGi2J=BO#eT2 zMrb|pAD{^w3mfk?p@9hY1iHSnp|rFR?6|JG9E*k$#EIW57i z0y051e^hVa0@7pGn=1Ggaq90>!jDaA^H#Bs9(w4#h^V26Ac`~*P?3Zn9YRq+ilHb)R1lsjS_xJBA|dV_?-0N{G6KqpmT&6D?gFsDbrtGQ9W z#Ts-tg`xAkaa_K^qbuEar=#Hn#-JKEEgXm;s{YiLACq z_n_HZtkEGcNC_(7ye!MU1Qlg$fP&$nHf{;z5^h7Voc9)NG(BjH9UfVd4;o5^Uq>Gm4((r!&D4(-{L?o(Cn?0u{E3)9a-yc z=w$tbbH@gE5CyJ7MWLyX*$o3h6~hN(!y=PUIvid|sTiq-8Re(bkm^mjEhCdKWApkZ zoqFSaVM$~AFq1>|CMV)K0zIuf>NBci4ybvW2CJBz4Ks_ZH@moHMkB|I3&SSXV^g=V z87k&i!p!sP%?r28i&ZRcgjrP9Tio8Vs8zANA7d zxnt;nXaJ}U^a#zy=gD>%O^@4l#jCna(F4&qXC@qg55xSK%+^AtPjGfCR&~F2`A&K`YtUz8mU z`3hj;qr$Rr^e_s5nGASVe-upHM13X%p|BwgSa1MZC7q6kO!sITC)wZyZ2%ivnzIN%t>wZCw(@rM>BB^`u|v+Oi}Zt2`pv$_CP9 zyq^@9*WDb-S3S1e)n8Zsi@fo*$xjXyW2M+EsT<~#Z^p~*N-YXc*7#$q-0Duw@=Qos z-NAJx9b6f`WpUnia4hwxkF;wT*nsMosH zO|{fcRpTb3Rj`dqyHtj3%3g6xCv02;Av ze$VX(=T5wO6zj++*V?o`-~^X+J<<#ijH6xqsjUBK(%hYxl?QaY3O1#BO+ ze%f4`xOHsg(ZeshYx4uwZ681S_GNE#<@Lzp$NT#LMhQv`=zt#u&n#9!V+mASqQoLh zC8$Jp7e8tomv062GGF)-mBu+MF_$26)o(75raMMc^l6~6yDRkkovw|>hB}|7v$Hgx zj$xFfF>xO7r*ZC!RW4*&sl8jsvNNUWU^%(?zq#V(TlwayNBFxpIk?L-sRW;^{)>5j zH)&+zryAbT1Y~+7-xh>D^M6}t&=S*MbYbUtIW)qiyIY@l;ABOy2T1BEIbO}euO!K^ zyP`DSkmsF4mVhGWYUw^Dngq;2b6 zqHftY3$+APkw1UFb*nv)HciugIcnARA(e*U86w#97p z!0G$1lFmCcEe;a{TNG~(e6aZNC_fVtKN;}x;cgXL-ttfB+WbYQ_)m0-e|RKrfGz+6 zz)O3$!T{0#=;6-v*?VLD1XuST{-wV@_;;-03OIt}!PejmI6b~gdi0S5bBL_MQWqrb zg}Rei<-I&Ag6AKn@fvusAIc~*N#NHn+458J8c2~g>fzI@^BKyL6n_=gjPkX)qJK{|- zGy4CS2L5*VeK(`pSuN_Edh=Jf|fhD!9ifx4C4f z;I5yk${WnWN`bl)x$3O>Gnp6n;WuoopV0N?9@P6~9{PQ!mD2oV?R+E5!jZdd@^*3# zoO`Ah%_i-;%C&)MHp`le*}miSO7vYpaBgBLQp|oGqRvWXK#3nsl^uB2_d<2`$vwrD z$-(ELM@>T;p4H=RwkO~zUL!}-*qS$P^7w!ZycXi2RMFl3!za@Cn!`5sD)+y(dG}vC zy6z`?=!|hh4@5K^VPHt?O@e~%-Z=*MAsF$Q_O->bX{OWw*^E8Z?ZDVoGF=RIEeL4b z#m!{TtTAW?f(eE>;UVy zJw%k@x}W#5Msy0UmJ&=+Yi(earPi!r)msRIQ6^%L`-uKU&3(|IPAit)RyniDYgp^v zR|Px4Pgrk8rIoggRLlFy)Xbexkb48fv3bK%tOAB@Yly zWuKFUZMC090K0MlWg#Onq0FU$>O~&fqabOwlA)H-YWpF*@D#OC$Viv6`9n$`JrrT{ zL;OEBk%JY&7qOCJEE9 zz?PK;%MHxNc)(qqz2z03$NLSaAl0wzEEwkOQAfD?!&So}?P4o8q_ibQkXbAR!`8t! zwO5zLN+jNcsP3qsp1jOEwFQ*jE(o=f>k4wT<_8_w#~DkMi~^;vfattOG`qvH;5yIH z!f9IhU$4P+XT#>9O7ABpAgw@I=os{N(}aymhw(g2tJse`1{<2DPg7_?qihs$ltEvE z*6O+;h1%<-BXR}^k-Hj`ezAk9+hv_#1JQ_kwmO4LnW)q6lI zE=l);j$?rCx`$F3#9Af4NZwA8s3e@K>nI*-9d#>UcEw9wd+oN=2}J+w zhp1icFJPaDZtbHRR~yl94Q!((>-d?(aKy-IdUlXtC$E-MroUe&zqq}bsA*8rg;gJP z{<}f5HBxFIvlm*pV%TV_gR_Gb#I=iY;oom+hnWImQ12tUNik>PUQHP5@LVRH8VX`W zvkX{h$D|&(r-Chu zN4k7wp%Y14fR#H%i96os%>nT1)GVsiOZE{ucwEPgXDULQ(8QJ&QYJk5A-Gp(E+#!X zY#a$P$Ktt=8GLT-GCQ>?30yY>zD~#MZDm0DF&%vJ>{ynI6B$MqI=Q_oM2#c3ZV>=u zFhC7KrGYlkDq+aif;~W6@ZE<+K)M)O+L&aj+zN8pM3`wJN#e|z^uuL_!lk%)xfHU^ z%PT8MJfi?64McK8#T-NDsmq*@29kpd$WV68*-4xK}au@k3pg`Yv6Y6iq7tn?nq zOsb0K?s*08GN9x;bHz&YtFSKSyHeAz1_QW>+or(x(RlR>V@Zw$h6s5?mwE>{COF!M z1w6pOt`dZY_;CPMw~8?_2I-mr0C=Rrlm~!LcvuyD{d0w>_;ugJi7A#`XBr zKoy4kHZuhkA?D!ynt65|+^K7z4(9|b488Ygm!wO3lHa8FfrvnK7ev}1-+KcExT{1}vAX1~12Jx~z23Q$mVP2g+ z?CIy8Ni%8(gdU#0%GihYnB(DW?)3S98DE=OvYBFMXbxE zO4p3IdCj}EzqhA{ad{($baC=bUW`Er;-dHa?uMKwRs@joyg2qg*j2@JOLiiUwQ{b| zHXS&@PH^8n;}%7aBttszea?~oP$!L)o2HiqB$2`))YS8< zojk0~b4Ons(%_^A^eEj7R*%8YUs#+owNmdk~02iM7T5$T2il%tk=-`wS9^PJ1klQ5JX=bT* zxW9%mBf~{3f4yR=TGP&Q!Gpdtq0!8N5>6&bxk>;Xe7e_kn{IusSxbC>@J?iF=;I0| zO$IO6B@rZmxl`SkM1ig$eOf;)bz_w9@DtU$OYaZHw$r838=zi5E}ParQ*AqYSH2$2 z$NZ(S_vlU?T;zR#Yv9X=U&D2KE`9)L#Lt!t8L1-f zAmD8=pyc?Vbk0ca4tg7mJxBY+SGx$RdNj;F`mH)bjvT$(82p~`QnA7%kmsdQ6*@}{ ze2d};Kr?t#IA?-bOlv@+X#U5W*d`{LxE$p8E}H|6u@nT*L_qh}p!&T5`c4;͂z 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 - Buffer.from(r, "base64").toString().trim(); -const decode = (r: string) => Buffer.from(r, "base64").toString(); -const decode_and_json = (r: string) => JSON.parse(decode(r)); -type Names = "conf" | "data" | "keys" | "extra"; - -const decode_param = (source: string, name: Names, fn: Function) => { - if (source && source !== "") { - try { - opts[name] = fn(source); - } catch (e) { - console.error(`${name} is malformed`); - process.exit(2); - } - } -}; - -const [c, sl, d, k, e, cx] = the_input.split("\n"); -const opts: ZenParams = { data: {}, keys: {} }; -const contract = decode(sl); -decode_param(c, "conf", decode_and_trim); -decode_param(d, "data", decode_and_json); -decode_param(k, "keys", decode_and_json); -decode_param(e, "extra", decode_and_json); -const { result } = await s.execute(contract, opts); -await Bun.write(Bun.stdout, JSON.stringify(result)); diff --git a/license b/license new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/license @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/package.json b/package.json index f76423a..a5a2bc8 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@slangroom/shell": "^1.30.0", "@slangroom/timestamp": "^1.30.0", "@slangroom/wallet": "^1.30.0", - "@slangroom/zencode": "^1.30.0" + "@slangroom/zencode": "^1.30.0", + "type-fest": "^4.18.2" } } \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e52dc85 --- /dev/null +++ b/readme.md @@ -0,0 +1,65 @@ +# slangroom-exec + +The missing slangroom executor. We are working the .wasm transpile of the +slangroom, but in the meantime this repo could be used similar to the `zencode-exec` +to embed [https://dyne.org/slangroom](slangroom) into other languages. + +`slangroom-exec` is a simple utility that reads from STDIN the following content + +1. conf +1. slangroom-contract +1. data +1. keys +1. extra +1. context + +separated each per new-line and encoded in `base64` and outputs the slangroom execution to stoud. + +### Demo + +![Slangroom-exec Demo](./docs/slangroom-exec.gif) + +## SLangroom-EXec Format Encoder + +This script is used to encode the format of the slangroom-exec command into a string that can be used in the slangroom-exec command. + +The script accepts the six parameters that are used in the slangroom-exec command and encodes them into a string. The encoded string is then printed to stdout. + +### Usage + +For each of the parameters, the script also has option flags: + +-c or --conf for conf +-s or --slangroom-contract for slangroom-contract +-d or --data for data +-k or --keys for keys +-e or --extra for extra +-x or --context for context +-F or --filename lookup files based on a prefix +-h or --help to print the help message + +#### The named convention `-F` option flag + +When you have a suite of files if you follow the formal slangroom name convention as such: + +conf: `${prefix}.conf` +slangroom-contract: `${prefix}.slang` +data: `${prefix}.data.json` +keys: `${prefix}.keys.json` +extra: `${prefix}.extra.json` +context: `${prefix}.context` + +you can just run + +#### STDIN + +if you just pass something in `/dev/stdin` is interpreted as the contract. +This also overwrites the `--slangroom-contract` option flag if passed as a duplicate. + +## Examples + +To encode a slangroom-contract and data, you can run: + +To encode parameters from a file, you can run: + +Where myParameters.txt is a file containing your parameters. diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..14f531e --- /dev/null +++ b/src/index.ts @@ -0,0 +1,5 @@ +import { slangroom_exec } from "./lib"; + +const the_input = await Bun.stdin.text(); +const the_output = await slangroom_exec(the_input); +await Bun.write(Bun.stdout, the_output); diff --git a/src/lib.ts b/src/lib.ts new file mode 100644 index 0000000..491bbbd --- /dev/null +++ b/src/lib.ts @@ -0,0 +1,101 @@ +import { Slangroom } from "@slangroom/core"; +import { ethereum } from "@slangroom/ethereum"; +import { fs } from "@slangroom/fs"; +import { git } from "@slangroom/git"; +import { helpers } from "@slangroom/helpers"; +import { http } from "@slangroom/http"; +import { JSONSchema } from "@slangroom/json-schema"; +import { oauth } from "@slangroom/oauth"; +import { pocketbase } from "@slangroom/pocketbase"; +import { qrcode } from "@slangroom/qrcode"; +import { redis } from "@slangroom/redis"; +import { shell } from "@slangroom/shell"; +import { timestamp } from "@slangroom/timestamp"; +import { wallet } from "@slangroom/wallet"; +import { zencode } from "@slangroom/zencode"; + +import type { ZenParams } from "@slangroom/shared"; +import type { StringKeyOf } from "type-fest"; +type ZenParamKey = StringKeyOf; + +export const decode = (r: string) => Buffer.from(r, "base64").toString(); +export const decode_and_trim = (r: string) => decode(r).trim(); +export const decode_and_json = (r: string) => { + try { + return JSON.parse(decode(r)); + } catch (e) { + console.error("JSON is malformed"); + process.exit(3); + } +}; + +export const slangroom_exec = async (input: string) => { + const s = new Slangroom([ + ethereum, + fs, + git, + helpers, + http, + JSONSchema, + oauth, + pocketbase, + qrcode, + redis, + shell, + timestamp, + wallet, + zencode, + ]); + + const [c, sl, d, k, e, cx] = input.split("\n"); + + if (sl.trim().length === 0) { + console.error("Slangroom contract is empty"); + process.exit(1); + } + + const opts: ZenParams = { data: {}, keys: {} }; + const contract = decode(sl); + + const decode_slangroom_param = ( + source: string, + key: ZenParamKey, + fn: Function + ) => { + if (source && source !== "") { + try { + opts[key] = fn(source); + } catch (e) { + console.error(`${key.toUpperCase()} is malformed`); + process.exit(2); + } + } + }; + + decode_slangroom_param(c, "conf", decode_and_trim); + decode_slangroom_param(d, "data", decode_and_json); + decode_slangroom_param(k, "keys", decode_and_json); + decode_slangroom_param(e, "extra", decode_and_json); + const { result } = await s.execute(contract, opts); + return JSON.stringify(result); +}; + +export const encode = ( + conf?: string, + contract?: string, + data?: string, + keys?: string, + extra?: string, + ctx?: string +) => { + const b64 = (source: string) => Buffer.from(source).toString("base64"); + + return [ + b64(conf ?? ""), + b64(contract ?? ""), + b64(data ?? ""), + b64(keys ?? ""), + b64(extra ?? ""), + b64(ctx ?? ""), + ].join("\n"); +}; diff --git a/src/slexfe b/src/slexfe new file mode 100755 index 0000000..d2d994f --- /dev/null +++ b/src/slexfe @@ -0,0 +1,95 @@ +#!/bin/env bash +# SLangroom-EXec Format Encoder +# This script is used to encode the format of the slangroom-exec command +# into a string that can be used in the slangroom-exec command + +print_help() { + echo -e "\033[1mUsage:\033[0m" + echo -e " $0 [options]\n" + echo -e "\033[1mOptions:\033[0m" + echo -e " -c, --conf conf filename to read" + echo -e " -s, --slangroom-contract slangroom-contract filename to read" + echo -e " -d, --data data filename to read" + echo -e " -k, --keys keys filename to read" + echo -e " -e, --extra extra filename to read" + echo -e " -x, --context context filename to read" + echo -e " -F, --filename lookup files based on a prefix" + echo -e " -h, --help Print this help message" + echo -e "\nEncode the parameters into a base64 string." + exit 1 +} + +# Function to encode to base64 +encode_base64() { + cat "$1" 2>/dev/null | base64 -w 0 +} + +encode_json_base64() { + jq -c . "$1" 2>/dev/null | base64 -w 0 +} + +# check that jq and getopt are installed + +if ! command -v jq &> /dev/null; then + echo "jq is not installed. Please install jq to use this script." + exit 1 +fi + +if ! command -v getopt &> /dev/null; then + echo "getopt is not installed. Please install getopt to use this script." + exit 1 +fi + +# Default values for options +conf="" +slangroom_contract="" +data="" +keys="" +extra="" +context="" + +OPTIONS=$(getopt -o c:s:d:k:e:x:F:h --long conf:,slangroom-contract:,data:,keys:,extra:,context:,filename:,help -n 'parse-options' -- "$@") +if [ $? -ne 0 ]; then + echo "Failed to parse options." >&2 + exit 1 +fi +eval set -- "$OPTIONS" + +while true; do + case "$1" in + -c|--conf) + conf=$(encode_base64 "$2"); shift 2 ;; + -s|--slangroom-contract) + slangroom_contract=$(encode_base64 "$2"); shift 2 ;; + -d|--data) + data=$(encode_json_base64 "$2"); shift 2 ;; + -k|--keys) + keys=$(encode_json_base64 "$2"); shift 2 ;; + -e|--extra) + extra=$(encode_json_base64 "$2"); shift 2 ;; + -x|--context) + context=$(encode_base64 "$2"); shift 2 ;; + -F|--filename) + conf=$(encode_base64 "${2}.conf") + slangroom_contract=$(encode_base64 "${2}.slang") + data=$(encode_json_base64 "${2}.data.json") + keys=$(encode_json_base64 "${2}.keys.json") + extra=$(encode_json_base64 "${2}.extra.json") + context=$(encode_base64 "${2}.context") + shift 2 ;; + -h|--help) + print_help ;; + --) + shift; break ;; + *) + echo "Internal error!"; exit 1 ;; + esac +done + +# if slangroom-contract is empty, read it from stdin +if [ -z "$slangroom_contract" ]; then + slangroom_contract=$(encode_base64 -) +fi + +# Print the encoded string +echo -e "${conf}\n${slangroom_contract}\n${data}\n${keys}\n${extra}\n${context}" \ No newline at end of file diff --git a/test/test.bats b/test/e2e.bats similarity index 71% rename from test/test.bats rename to test/e2e.bats index 259601d..8a1bef2 100644 --- a/test/test.bats +++ b/test/e2e.bats @@ -34,4 +34,18 @@ setup() { run_slangroom_exec assert_output --partial "Do you know who greets you? ๐Ÿฅ’" assert_success +} + +@test "should fail on empty slangroom" { + load_fixture "broken_conf" + run_slangroom_exec + assert_output "Slangroom contract is empty" + assert_failure 1 +} + +@test "should fail on broken slangroom" { + load_fixture "broken_slangroom" + run_slangroom_exec + assert_output --partial "Invalid Zencode prefix 1: 'Gibberish'" + assert_failure 1 } \ No newline at end of file diff --git a/test/fixtures/broken_conf.conf b/test/fixtures/broken_conf.conf new file mode 100644 index 0000000..d68664b --- /dev/null +++ b/test/fixtures/broken_conf.conf @@ -0,0 +1,6 @@ +aosijoaij + + + + + diff --git a/test/fixtures/broken_slangroom.slang b/test/fixtures/broken_slangroom.slang new file mode 100644 index 0000000..c803eb1 --- /dev/null +++ b/test/fixtures/broken_slangroom.slang @@ -0,0 +1 @@ +Gibberish \ No newline at end of file diff --git a/test/fixtures/simple_slangroom.slang b/test/fixtures/simple_slangroom.slang index e9656f2..5f84eed 100644 --- a/test/fixtures/simple_slangroom.slang +++ b/test/fixtures/simple_slangroom.slang @@ -1,4 +1,4 @@ Rule unknown ignore Given I fetch the local timestamp in seconds and output into 'timestamp' Given I have a 'number' named 'timestamp' -Then print the 'timestamp' +Then print the 'timestamp' \ No newline at end of file diff --git a/test/test_helper/common-setup.bash b/test/test_helper/common-setup.bash index 85acca2..aef6f5c 100644 --- a/test/test_helper/common-setup.bash +++ b/test/test_helper/common-setup.bash @@ -14,46 +14,12 @@ _common_setup() { } load_fixture() { - name=$1 - - conf_file="test/fixtures/${name}.conf" - zencode_file="test/fixtures/${name}.slang" - keys_file="test/fixtures/${name}.keys.json" - data_file="test/fixtures/${name}.data.json" - extra_file="test/fixtures/${name}.extra.json" - context_file="test/fixtures/${name}.context.json" - - conf="" - zencode="" - keys="" - data="" - extra="" - context="" - - if [ -f "$conf_file" ]; then - conf=$(cat "$conf_file") - fi - if [ -f "$zencode_file" ]; then - zencode=$(base64 -w 0 "$zencode_file") - fi - if [ -f "$keys_file" ]; then - keys=$(jq -c . "$keys_file" | base64 -w 0) - fi - if [ -f "$data_file" ]; then - data=$(jq -c . "$data_file" | base64 -w 0) - fi - if [ -f "$extra_file" ]; then - extra=$(jq -c . "$extra_file" | base64 -w 0) - fi - if [ -f "$context_file" ]; then - context=$(jq -c . "$context_file" | base64 -w 0) - fi - - printf -v slang_input '%s\n%s\n%s\n%s\n%s\n%s' "$conf" "$zencode" "$keys" "$data" "$extra" "$context" + encoded=$(src/slexfe -F test/fixtures/$1) + printf -v slang_input '%s' "$encoded" } run_slangroom_exec() { bats_require_minimum_version 1.5.0 - run -0 bats_pipe echo "$slang_input" \| ./slangroom-exec + run bats_pipe echo "$slang_input" \| ./slangroom-exec } \ No newline at end of file diff --git a/test/unit.test.ts b/test/unit.test.ts new file mode 100644 index 0000000..d792c1b --- /dev/null +++ b/test/unit.test.ts @@ -0,0 +1,14 @@ +import { expect, test } from "bun:test"; +import { encode } from "../src/lib"; + +test("the encode() utility should work ok", () => { + const conf = ""; + const slang = `Rule unknown ignore +Given I fetch the local timestamp in seconds and output into 'timestamp' +Given I have a 'number' named 'timestamp' +Then print the 'timestamp'`; + const have = encode(conf, slang, "", "", ""); + const want = + "\nUnVsZSB1bmtub3duIGlnbm9yZQpHaXZlbiBJIGZldGNoIHRoZSBsb2NhbCB0aW1lc3RhbXAgaW4gc2Vjb25kcyBhbmQgb3V0cHV0IGludG8gJ3RpbWVzdGFtcCcKR2l2ZW4gSSBoYXZlIGEgJ251bWJlcicgbmFtZWQgJ3RpbWVzdGFtcCcKVGhlbiBwcmludCB0aGUgJ3RpbWVzdGFtcCc=\n\n\n\n"; + expect(have).toBe(want); +});