From 7ebb8ec751dba741d5b8fc0f51d9307541f5996a Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Thu, 12 May 2022 16:48:09 -0600 Subject: [PATCH 01/41] Add Bloom Filters --- assets/compat/bitcoin.conf.template | 9 +++++++-- assets/compat/config_spec.yaml | 15 ++++++++++++--- migrations/lt_22_0_0.sh | 4 ++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/assets/compat/bitcoin.conf.template b/assets/compat/bitcoin.conf.template index 9d2eca9..03504c0 100644 --- a/assets/compat/bitcoin.conf.template +++ b/assets/compat/bitcoin.conf.template @@ -109,10 +109,15 @@ zmqpubrawtx=tcp://0.0.0.0:28333 txindex=1 }} +## BIP37 +{{#IF advanced.filters.peerbloomfilters +peerbloomfilters=1 +}} + ## BIP157 -{{#IF advanced.blockfilters.blockfilterindex +{{#IF advanced.filters.blockfilterindex blockfilterindex=basic }} -{{#IF advanced.blockfilters.peerblockfilters +{{#IF advanced.filters.peerblockfilters peerblockfilters=1 }} diff --git a/assets/compat/config_spec.yaml b/assets/compat/config_spec.yaml index bd06665..42bf9b4 100644 --- a/assets/compat/config_spec.yaml +++ b/assets/compat/config_spec.yaml @@ -275,12 +275,21 @@ advanced: integral: true units: MiB default: disabled - blockfilters: + filters: type: object nullable: false - name: "Block Filters" - description: "Settings for storing and serving compact block filters" + name: "Filters" + description: "Settings for storing and serving compact block filters or bloom filters" spec: + peerbloomfilters: + type: boolean + name: "Serve Bloom Filters to Peers (BIP37)" + description: >- + Peers have the option of setting filters on each connection they make after the version handshake has completed. + Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers + connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions + in the chain are in fact valid. + default: false blockfilterindex: type: boolean name: "Compute Compact Block Filters (BIP158)" diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh index 5cad123..ddb8d8e 100644 --- a/migrations/lt_22_0_0.sh +++ b/migrations/lt_22_0_0.sh @@ -5,12 +5,12 @@ set -ea if [ $1 = "from" ]; then yq -i '.advanced.peers.addnode |= map(select(.hostname != ~ or . == "*"))' /root/.bitcoin/start9/config.yaml yq -i '.advanced.peers.addnode.[] |= {"hostname":., "port":~}' /root/.bitcoin/start9/config.yaml - yq -i '(.advanced.blockfilters.blockfilterindex, .advanced.blockfilters.peerblockfilters) = false' /root/.bitcoin/start9/config.yaml + yq -i '(.advanced.filters.blockfilterindex, .advanced.filters.peerblockfilters) = false' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml - yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml + yq -i 'del(.advanced.filters)' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 else From 45f3e72a3f9431e2bd69c38ad3fbc28b8fd9175c Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Thu, 12 May 2022 20:08:34 -0600 Subject: [PATCH 02/41] Version bump --- Makefile | 2 +- manifest.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index aca0ec3..64c815a 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ VERSION_CORE := "22.0" -VERSION_S9 := "22.0.1" +VERSION_S9 := "22.0.2" MANAGER_SRC := $(shell find ./manager -name '*.rs') manager/Cargo.toml manager/Cargo.lock .DELETE_ON_ERROR: diff --git a/manifest.yaml b/manifest.yaml index bc1d993..7bfdf25 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -1,8 +1,8 @@ id: bitcoind title: "Bitcoin Core" -version: 22.0.1 +version: 22.0.2 release-notes: | - * Fix migration bug in 22.0.0 + * Add support for Bloom Filters, as required for Bisq integration license: mit wrapper-repo: https://github.com/Start9Labs/bitcoind-wrapper upstream-repo: https://github.com/bitcoin/bitcoin From 43cbb8df62e6ff316e236a68dbce3229b916f193 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Tue, 17 May 2022 20:03:13 -0600 Subject: [PATCH 03/41] Bisq Integration / fix git fuckery --- docs/integrations/bisq/assets/bisq0.png | Bin 0 -> 131028 bytes docs/integrations/bisq/assets/bisq1.png | Bin 0 -> 153991 bytes docs/integrations/bisq/assets/bisq2.png | Bin 0 -> 167437 bytes docs/integrations/bisq/assets/bisq3.png | Bin 0 -> 178628 bytes docs/integrations/bisq/assets/bisq4.png | Bin 0 -> 198878 bytes docs/integrations/bisq/assets/bisq5.png | Bin 0 -> 134450 bytes docs/integrations/bisq/assets/bisq6.png | Bin 0 -> 5164 bytes docs/integrations/bisq/guide.md | 34 ++++++++++++++++++++++++ docs/wallets.md | 11 +++++++- 9 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 docs/integrations/bisq/assets/bisq0.png create mode 100644 docs/integrations/bisq/assets/bisq1.png create mode 100644 docs/integrations/bisq/assets/bisq2.png create mode 100644 docs/integrations/bisq/assets/bisq3.png create mode 100644 docs/integrations/bisq/assets/bisq4.png create mode 100644 docs/integrations/bisq/assets/bisq5.png create mode 100644 docs/integrations/bisq/assets/bisq6.png create mode 100644 docs/integrations/bisq/guide.md diff --git a/docs/integrations/bisq/assets/bisq0.png b/docs/integrations/bisq/assets/bisq0.png new file mode 100644 index 0000000000000000000000000000000000000000..d556f84be0105cf76ee585ef91cb7e327a53ea41 GIT binary patch literal 131028 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�E9-R(fB7T58kj`&R3^;bwHX!*F)M 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⩔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�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 literal 0 HcmV?d00001 diff --git a/docs/integrations/bisq/assets/bisq2.png b/docs/integrations/bisq/assets/bisq2.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd97e583c6ec34ec75276aae1a10e4c9460076f GIT binary patch literal 167437 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 z z7i35rXRL%0z(vHk0)+?{A(THEQVd-KCwgqMW#c|5ur>nNAm}?hQ)rB=03$)e>s?-c z8qJOB8-5tXM}^N$+uGR`K)3Z1bSetDj^{Pt6tCIaA4TCeHl#NaL&14|7)uh`?b`q; zcx7Zb5_LQRHZm2P0gs{6Z(xw&Awi+P6%kIyQjK%5R0x0p>xQNWCFLCYzwtH~BeHqz z?(;5?afuqv(IAuN6HpJjEFylI5PI*wbXpnJC?^*e86Dr+kf*$O8{^aU7JJ*q$^Myl}4W4Nh`G-NOuDYo?eabY*bEV3gGu;GK@x0Bb=l;uQXgs{S7j}ENna(o7 z)O@IN;@99LstwtjV}=uIVjXM-(|MA+KDpV2xCNn-IVMT)d(bY# zblW<`ni@njG&~dzF`q=o^ZfPkvQVKrkW_7GmwxCgBxFYxW_fMerD=X07PT$n(brB3U+3A!6(<6q7%pQ+k}sdNe#SQkKW<00Z>G#SrIoA@Z%Dft-i!;tB8? zF*po|?9594b2EQW1q_*atwRiYE?184y%h#~5ex;=j0s|VFdyr|UtLn4Kh&Od3$7UE zO;p$cZ!cF_lRiG+J<5oxFXD$w2tE}?peWL*K{*}@f2>(^nS8xp=jP1NHdL9mtL__s zov;6AE9~yO;Ge@;*_utEiPLmTd>%&l0EeQv!}Q&<}BL`Je^yx05pOwloBQzK$JktG$$@)-1U8+&}W zC7j9ph&j3o5MX0-Y*RG=GQ?gxH-FQm42SqnO--%6sOk2oA-Sk!#e{1$3Vo{(sTYC|C*VpXqjv#`d&EdJ47-SNYz#K0EuJ>(T@uMyM zd@^7ZLQUUOZG%rN>J#|0s)l7SnOI0@g8s+0&&5h+W0cYMd}`&_nyDlAzW_J{ZoLKI z9PJ|&Is)!3VV8M{bjg|*S#j=X$-CB`89Bt6mM`)W`S9z1;qkk#INj4rRc;^M{I$BC zP=7x3^SA490zT6*pwEp1`Uqr#kaWVD$Ayiqepw;@#(};9^0`Hy=|>VrN0j$e#xBT0 zx(PyC$t0V%q~Gj|?cF8$tK9MAoko|IGF)f_gv1w2>uaRfOcuwVb6aRSYc0>nk!q^u z9x-U_AOBi2P6f+635@C5Z;L^+ZtZW&`B|G^J!S$}fnUMn-FA^b7 z@Kn%bd#gNJ{D{;8!(fqPGyOlPVNqdjIyk zt-_q1FZwUT?bKa(J>7@5a!+<8>ix@`YutFG`x30D9(>T5G1n#tvnS$&CT!JRRBKO&J1jEerGjlZ?pe|?7;hb} z`I^QmoY?S?dE*rU^Po-0MrZNuiluG;_njdrWK=_h!wRBR)dXr12HphWpaVVoAmW7 zFH?RPj$b@;H&D>+bicyc5+B&0bS$5m(Xw9J?99bn`^+qGoG5TH#{hzm#5Oy$zH{@c z9{~=Zzj~EQSeVe%F+oiD$9B2i3XOjlxhaziCnC#>il}I|y52{)QA0z+cBsQq5i28! z=Wq`o+vAY*G2$DKcL_3Qt_Rl*u$NGEV>aUvC8c8F%*p853>%*Erw2JmP?S>>>>uo| zcb`A!va_>$i!r?jsZyysU+HRgelim@%3Pb} zHHVj%J)nGg;QAEr(7||3ci+~1r^(Ao-RNxn<%{9^M(0qB(%5!oDauGuxpxuY5)F&i`g)^WXF5qKsod}0eD)tsYV7Z254i7FQ20QKV6k!8bO6mHNG1X% zMfuQ)^+WPRtlZq3>+Ye^uKgR>RXd`rg#+gvn*F-@{k7y`>fWwJEfbsbDb?yW1v$a( ziC0$fEKC8lOF9f3ApHq_?cA@JTZH9|G%s#rF7@|GUhVP7Fp>~6V^-T5k5w!5(NCo8 z*JnA7-bI6R>hWmfdsYa(2+Rz2%cEFuQ<2Dn`gHAvsQ0%0m-u94vai_8un;I3in8eF zXvpa{nzUDmn--psb)MQl`UbUnCWTTedMq!&HAdH18I0Z6&{BZ5RDfq8tsk4NPwc>v zjf1`Hai1Woa`8xNYvs8Ee{q>t|K>8$47@zIo9?N>m%T;l4E+#I;=b|1wcWL{>;idr z^w}90Qy6%7=wX`xJANBA;`i^0Gcg$U`FAeBcLp{#pRutGBuJyz!5#imJGqGfDM7z6 zY}vw>#YH+mcuZB)IMEape|^izz0<*loBMf@PTK z4D&cQY@ZGKjI3ysxSE8<7;Kibl_O}dXYy`J6YOy#Vq&5QtMYRD$L)DISsSWTIY~^k zz2z3yB<&FaOs=yuT{M zWG#Had*`LLfoWA_>xK|`IYloHN4)^*fCH@%JqH6f zx2Ox&I%(O3%f`g$x33P+%K+nuh5VZSs=N3X0{MxHtksgTD3$QACH=1NWFI~dsQIwAokRW;t zfE9F58#bcTnEmR`zfXalo*s%7J{+Y0-B{D>-)O8O>}U`HliDqxk4Vu2uXWjIXmSQ3|Vq z1hRz+u48nRK(|3y03Wmw$3S1asE!|MZeCfka&j8cg=G#uLF>d^C=DAewf^>E4O(Vz z4C)R7IPn4=@FU^pBEYb+qQfp8YP4ryzD@-q_0^AFl#?vUIwsk`=liFEK;)rr{#(WH zCuBt|&;%4=m#M?-(7|$7vwoL@hm-BgWDsP3`){X9yf$`uJKpLW7OtrytaEVV&q z9l{9;lJwr&f??RBI~K=qO0)h!{<3Pkpu(_Y4go3?(HkhNzhS}_XtQkyAFXLL`JX~a zNmQ-(|AGHBH?_a~N4|%`PW58k<0DEeYvKxSDRE{p@`1 z_!MmYY=EWd{5~=+kGA8Y_0(VbY;WDp&j`!-@`R8CWqK$S{+y7tvpx6s^{n<6AF1{? zA4#Icm2nMMMtC3b;Oy<01ioN9bmGt@*|k%n?Y?LT|0NI~0(w9O0gd8_m)ZIAK%-|N zvfc`JBb&VIAB3~g(WT8i6I?$YuOBr%AJh}R_nDS|_S9-*MuNcMm6X)IxlddT7sU(B zcp`rRSPtLby$o>1R^yl?QJCBf4LNZlU&ASkj<%r6h7VGJ)u7zP%|X#ktJEuPsy9L` zo!5Gi9v&Gz?0apU&v)iEEQiIS=S@G|-u`0k7IoiUDvXDxno^>_Gcz1#&`7xcfZ@SI zhP4|RRGcMphgVj<*p#$Zd}y^?d$T>Yk5a`i11Gy{W#6+3xyzT=E5$Gp;4BOwFQr8l zR&zEI_G(j8K4MoPoMU(Kj(z*KfQg?&%oMmIIPDOv0LK3LLc%c!uqP%a#!3aF zAX`t#y5~AmQN1o51s4@{(f+7 ze!dIiJ3k>@J?>h4tY&`5K)cHL^-Ct?g?Onm34vHWN5GN1s5OW2Ne&^qpDyepg0H`s zV**q(6*0JL2&&87OEb-*@L6lr3KlJdYp!ZE=X)lI*EBa%LwU9tEe^bvy9gIQhRv#_ zZ%)$+EP_$iTbV{sK%fBpS&-Ze8@J1l23Wi8BEtz4D=KbzubTg9dRF?A`bs?$yoDB5 zJq$H8c*{2mS%r0tj08eW40?NuPKqHR{WW%Q)ss_}zEfa_RjxuvxY@vtyj1KjgbT zi=Sx>qT8xDdDU(?TcU);u0_@5Kq6+cZQINv?@y4D^(GlF;lzMzav$l%hY!qX+Sm?U zVL&{55RUDis6I%Z-@e@~Fbdgs*cYzYxIe+A0d=@;{yVD~$2cLw6hBoZUdmI}2@pH^T&v(1!(rOFF zGJc8$f%DL=7sD`?=1~4eGFF$tkrk5p`c_OFF`a5fo z3-l3F!cnBHCE+94jzQTXu7Yd6{`b-<9qKD3ZBV1Ud-bE=>-8yOVfFP@^bKP(GsU3n~RH96~7{h+gi(r4_jb5rY|Cq@jEL`sKkZCAE!)RXdkQRIF;3^n;Ub))nur ztR*!zN)_z)rlw=x0LiD0u@e;umc5N&9Lt|h3jp!)L8JHQ*Ux(zF|U=gRAHy)a%r$d@K>x5gtype=<51l8Y>HA zYO=n*z8CBdr+9eG_vmE0&hHzNdKfXY=v%ASFBvDz4ciUwYef{$Z*dU)ns%05ncJ0_ zo!y0~(dZrn$?t+9p$kF$%ZUT?!|NleXxFbpxap3-H?4L<$PfI3ozCm{2@(b=?tu2~ zk7R9w;h-}V`BC5Df3U9AV>6Q%NRU3jFuV>aA>BP%xigN;3+qzH;p1#hvhZ zc~@aGT5;1kXEVAOzL{=0j>8$@`cz#d`F|)nMK(SCo^wjISENUFx`vG?4N~(Ko_;G1 zw4~;&Vv1Xy*R9LiDIwADK1wZQusuyGrrB=-?d1oD&X` zR*#dXI2=ts1VI1)D?U|zK34rt7@HOm<*m;}G*R6D{Pnh^7J&_2{KskZP~ z0$jmY>yoy$Ia{QR1*$73C>%TP07&}Sn$lOe2*4l+2U4WKDhn-xF)kJ zP=MqK5)G;ihKdLsxrd+s+)IEji?clHN%s!wJTfDaXmB)kg8ci|e;p@C$lKwO?8Toj zDkARF_rFh~{=!~dawWWoKC0v3< zPN4>RC{R#~Mit~klN1O@B}OAgouoCX>bBSxP*`YB3hj-z>f`9?HL9tc79y7y>4H6E z1P}OR-^GMqd@+$2||BP4A_`$}(QM)6<$aTsL~wnc34J>G^SvCHf_M))RD{5v-#>?$ zsl?YFhqho0vwS*U-s3KQ9p!!-v(1+!e8D(u8nf@tG1#T=s=T0bC%5 zL_HTXv;XQ+pBWZ0KaNf!ypkmZ@+dTLjbIrMTU&EOCKjF0f?VasObq=XVN$UedQ`zs zV#EZlJET}Y-VlXpRZLNCGZag%M=4brxUnAwq-max9XN}5vfDyXkauEo3v?Y+I9M3j z*gTQbL1{|vqL&>b5yvkQkUREMblXw!Vb=3Ubcw-HCJruh<>5A@w-u>j#_VDSjxPqp z<4uRxD~hkyJRDTBt2b2@4eCz$1a-W83E0BBP=yKg-Zos-_I=HEa8bX$YJ%@#d{=1k zi^;wa2wad2sGjxbvG1Y5{)bT8Agb#L&-U}vgiPV%t1_N z19eNoz`^17@S!Q5PZu=hB{0lg92C(O)Cn~k_gG~`winY|OytU$taQzpX|lkWY;WVy zH8JA!qq$&mm=|4DGydT^mVex@2+?!J`TPW0VvN6`dVVH|SS$HU@3d-XFx-S0hZu@R zv=^VN6m)XUtjnLghLyz|{TeTt2!18mwP?3+a&hC@PKxlmK}L=rgr=;BA}+WLKR(j% zvfl#7fj?tzZf?7jl-`pc4h_v$VX8X(`bP)!+R9E&Qpl|n z95Oq=j&va=-{#@IsP2hEcN0bF)WXiwY0Bo7>ieSv>hmr3rI5aw(Zs)ofs`q~LglXZ zVDH%d$6~7tSgM<0G~N8Z(H{i?Fgc-2=d^*wT;%R6hKV|MV!#7aVE?z5>+aGzkr4SU z>?(2P+xBD1t28!wQm5vKAr{0~&zTXa_^N~KbkI2xI|S(r_fn517>dK$huOhf-S)(s zd3_YQIZ!|y3p&U~i>LH{+gMHEvBX+FNy$uo%Ht<}y}eq(^^Jo}G3l*^DOHR!Qae~J z2A@FJv=I;*+&0P)Zrua?EKIq^2;CxGxOnko9*0`sISOWm5#NrIZ0O%4!4ebdVJlJgIJHBfNX}^?nN7-2|C)25FWe6tzxD0*A%JkShMYZ;V@8 z8N-o=v~9oXIC5hTr`CVQNvdR4`-dyKnQQHCciv)_SA-cb=Wn=wVD$WSw9=|%@<>t<5u|7a^I>iovLh9IA@`M24ay{r=2Q# zbzhuQ>CO8@#*rBRAnxvwm?*T_6emtTVQER*S^nx+%qL7j{F z`G(KpN8-bOR~FI^=?s{m$k&ly62Nf}w+4-4#0QJ|&Cop@1xZ~Yj#}y-EK!lJ6C2TK z#JqSx!jmfi_BW8wl=19o;RV>ZckM}9E(*%Jl7W!J9|HF{Z95A~J<5}RIMlvM(GHo( zZf*6Ku)i3U^L$Yaa@^vesB7;N5C2nBb%%nch%oYA-RQqR*rK*E=3o4lQ$}-)UYcm~ zn!n%n?|*;%R{*V@+`ny^W&gHi8vfhz*lqW}xww3MVgJs;rEva>%KOsO@?1_mwLbeD z_iqC9uivNW3uOM4n%na)67QJkzf*JVr2aqiq79!TX%_?$w6z4`vvYQQV&Vv#47dq( zbZWN%{^kRCfvF;gk}ctHL!BHJWfE{X(rGfHrn~a|{X6V|-IW!2q9o+e5h5p)gneV=4EDvG8?mi> z%pYb4KJ?3F)=9hHB>qvOvarP%e+TrKFZl1Wk=ONuNQex?i#wW_w!BG;eb6H7`9D3zTnAsURYdt}HWnl1TUr`f_bw$SP7gP;Lh80pHdZlBUA-38=4U2=ZV#W(}b1b7iTbkO}RzxTqn&#d-EBmYcd)#5;Ygx;$C%a z`l%})EIFGct#R!d13E-MgsYdjt*2ur#P1N~#iS%qk=Rfg5R&BO1qTF?ccLQ%46671 zQF5)h_>Cdm1Ln-W;NPN?lFE1XJ^qde3+$RMG;;-)2{Q;0vXGM_TiYY)41KoMgQw0L zOM*(uMp!vHX>*P5!4$JJn{TpRPR^(S)WxlWf@pKUS`@j+j}QV-fCKl)^uaG&gQrh( z?sVLIinCiXMCQ<97E-f_P(*mmSTPa`5Wz;2^rARt2a?=VE=1LvH&y7X+SO~Qki$9? zBs65!OMb0>;&)P2wWv%?tq|SV$&nv%r&x)C5LM*8*RQG3@WXFu0L$4~&j0>A;w}ZI zB3+5N+A)xXIQ#LC2)YpSFcQ)gmZyFY4+sKrh`I-B2h{5)QytFFjollsGr$-PqNYN6 zIxU*o%_b&1Pbx0$(S6H+OY7Z5p9&_Kvc~^>c0#P2LN>r1;n_0*)4|W#H9Q>fI?{O) zW(^_mWM4~bE76;9$}I?@sP@LaqcyI{#Nh`?&MmAeUWpq@X>gpFIJZHy2{(Q{lCRdo@?Y%cE0f)J=&=PU@bRCD1F{m;^Jz)ZH)8f`_;_K9-9Eq zUbi_aRiLC!0H0Hh!$?i2c4ASeQ0jRIj0gk#b!o0P4-av|gk|EY%()?{_N8>NPf_@O-k** z@waF@x;gwir^)H^5CZb4OIh9wLo%8CL;U90GEo{d4l68w*oa2d3#=O)9esd9Ui_N3 z$&fm*6Ez5!enN6~?;f?W^HolP(>IBPH!5|9&uR!6L(?;89;s_Rq7*+Y655;oK|eXc zP~E^775~p+tB<&Tgg6OPg_Qjzv(I;VfEd|z!1CoNJJVqHM1I+!{Q2VJGE*}RP0ib? z5$;4H&sh8Fiq2e%G`+QsirG=sI-O@+Iuh1P)g7*UPKT^`?XY1Ra-3)oG9MHhJGqyQ z7W)6Yjh0Fw0s-R~&xNe%4QdL@%mgEpnb}3y(+I6g_ZP;O{-BOKgO%?dO|0!)9IfXS z6Qd_=llSg%E3C}%6Ry;uZ2LaZrN#EuyT+-X!5e$IEhePvInH3vYIkpM!H*wj=T66S z%gf7y_dJZZh+IL3Btr@?#@P7X*Qi601u)yGFu4_ow z`kp(Q7Wya?F`?)UI|;}`LnHVaPJ$5v5Tea(TZhM5SeKk{3Jo}${L=Z*$B*HSp`Gl_ zHA=Q(KWOe%9m7+CKF1ee?bOh`nCnET;E_F;>2}q1?tHDHO9_|i-tz@s=He`V5lUwr z{1%SV%XvW>xRIt(KY1%~h28RVKi6T3B7$S@!$fMMZfI!vUa=F9DNt%Yi5quS-4F~I zv@p%_Gr}e>O|LxI_tsN0k-`+4xv>sH#?aZdnwMySuhu1ZTHwJnb*GnJICA2Ik7_v3 z(NB?b9$z9qYxdTgc-%p5k@@mPR1EJZ{H$hi_6fshF#+@==BeyR6~PfMmV2O5U`8Nh zBSGFMDG88Xv+3^^q^o%^2hdOo3)$(WD-QAU!7aFk)InvrjlTEd!k}_8G>nM`e5lKiSCF8qPzf!fpli7r4 zdl*j#YmQElf9c6`-r{-y^&J`Q?$o5Ifm#}Ny0;hv6VdRcq6#UV^q6;Cc!~ErcA&C( z@9J|SllaoiceY&>D<6%2YXO2b_c4_wzIQyo$i0z5ne(Zs_#f}XK{ z4e3&aGZT)B&pA#u;OTGDZkr&%6nN#VQiMb@qUKBqIRNqUARs2%H?&0S#qwn}ZdzZ1 z`3%E2edy)qNEjqd3dHl$E`oXYtXLBYs4fn28cXGt;dW>3~4J z*Gmf%Uc?;YPgM#w#bX^oKQU`c5nc!{E6i@Zb!K)}-xgQx&rzTy3H+D{eS$dkAleWB zZOX{RWX2SM$7(u15d_hw$)8^y@MbQK$P@34AfF%*0LPcEpA9cMJ@#+`bhYOX^mcWZ z<}+-qW4=S(PEP`gy$^DbTj=FTiZIviFf-@LfY@Tqn}tW8(c*hAsAfdJTgm_Z|$Hy$qfVU?^95)Y2HiU&E8%9yyG1PRA4G?9N*w>m-e&p>-%<)J6;RDx?jU0HxDibOIbF{20VJM2JoUUo^7KX1fdTH(27?G`71s?tzC_(McG!^XdsHpVaz`MhWh zAywWkBSXz9YN&YZ*dM^6ft3W{zjG>Z2jPLA6E;I@Mc5^fOhDM}_?0&kSeE3CAvR4- zQNlsl;0Pny2{pA6#Fm0lcXHcbB&CE_te*O(hKfewh4eAzo3~kqtU0s?) zq6Movg_rd#B@^?d*wAV-<}u^a5MGi#Rta_bTc^oO5mnr-*Vrl}RT)OMqzP_amsX-; z)Q*A(FtWkR7032gRvE{p73t!K%|thfd^TH*iK69M*^3!+$I~*)dg64$akTqVVwlY+ z#61M);vMuJE`GRA?={kPh@OgDh~LJV)U~5l+s>&KPv@q~BGU8eh#CTq6XVd`X#u27 zXZ~?6cY6-Jm7umZfT#=Pl={op(cCkk)~_pMUd$igAoC;A&h1mMZfQ}=5mg0SEvc=e z`T2jK&X`Rdt$copu#zeH-~0o>*6s3gT9lru4Wb9@vdw?D@(Q<>IirGt9Meiye0?_o z(t6V*`dVNzHDfo}C$L|^57g660MNroY1(I?%pmZ}^scMY=S zmKI;Ys+dRyV2Kn{?E}6fy6JZCQzzEJ`NvN`B-i9bzaJ{2p`|?nmDXE1knLE}xQ+2R zsc}Lc!NuvmG%na7a0f?DO(Ls5(&S-|y#%Zd?p|(RKfgcsg+m7-cO?z9c(vj6$kSKd zMTLbqP&bki`aUV#YFJYE*|MMlXr?78BI{dHz? z^3IvppD}dS+n^7OCA6&k32luMI8>$vSm;ntwYA+fA5ThJT69KcmZiH0@1+8-@x5$0 zUfBgik^Gn zmKZIe*|e!(9lfk4LOxD$3$m;`h~;Pkc9IB+0WZG$sUI*SNH+e zHHLyny$=$nwrh*}qrSe%ok$p8fe3Xw(JJJxNK+|Ft#$`Kin%0<6zS0uE?ly z&lD#K62+}fM{)bXctcV|H;+*lw1_8X@to4N(fIM3&dQJ>OUcKG^GH9hyrh7YhJm?S z%{?{OSEjWwEt(owev|d)R9c0lw~WL;5Ifw2VRQ^fNJsAMR+4(8a{7Y^0~7+EFl^)& z`VvmOaOm6=$QYH4LU!Y#wDf4FW%JhxE2*PNvLW$XfK@dpr`E^hKO-NM3SkcE7$Gcb2Q6SJngH^KgX&!^$jmX>d?U2^Mb zAZO}x=zOs~_eA_xDr9RPQp#2jUy^<_!bP z=7mtjdCjUiJ3E^qECSNk5KteY|p@6Jn48N-QCuCDODjJ~lzf z10dz}v$=hq3Afsybl88XkZ1|wweLF6h6d)^_4r!45l*=hZWrc5)`rUZ`ub^NS1jO? zK8BD#@1jjQ>R-7&j|i*|3r1u{_O+NId$#cu%~ zcGci=9}Aa=7*afOpcFhax3(4qFiZGEga8Mji=alX%#QL~X;#haA*~>7&v}L6Ch3Sh z6`69DBd!++XZhto;c;yw{LWRu(~p`siS;sFon-egL~J`w zKwR?c)emZ5e!!`)C_$iN(1Zxd>VK=MV&#&)u4p&mq%{pO=CKne)^$kO15gLd^0BH) zjXZ>t`kAEd76Q^BDaKU)jC5Jpw63}~v7V@oNS;AK^pGogPpxc(Jx;7Ts65j zY^JwnLy38sJ~3>@*0yAg;)I(I-X1|YcXkGLHC~Qlk@vtRBV%l1d6WVVxbwr9w{B|q zsPhJ7Y;fC{VcLLi&_z00+GC)?kh?xCrU-`YK0qgkm+5r#-Pb|5mZ{3&IpBFzy zl#!3@C%R91c^xQRo~18FwYziHqUH@_q}z;MdDLpkn7h(nD~pVk)!!6rs^GqK6QCvp zU3DD_TYoPskjsn=3=m@^EPTL)MwAx_s=*RN=f?%U!;k1N5TD2#DU~Ad&kCcAZ+H-t z`+iu6#pED)04g@jF5bgoubi2{>4(~5Q&6Gmsq9Ta2zWOu*3vYc)zl;ur80HGZmhek z1pme}76czW?IP+B1Uij<;SVB_ASWFAc9ee8q@Kz@i|u;9-Rlbau!w_xh15KI7<=!1 z&=-MY@{WC9Lga&;hk`5>)bq%m>yr8mYCa@iT-orZ zF(=whPo)PP6+3z(rWGSd7yt(#d50NM1nUU-?9NkdC0#)ZxG-**qUHbwuytZ_Zv5u; zftrnwmMWoALfi(?8{oTOboO}kbVx+hB(5zeEBEbBY_qr;MV+xfp8Qf^Q21|dzfpz{ zBizS3?v>%3K8+T8JHQIqIz<)K@ZE?ZPq@ixDHJEDoIe72_cHK&G(e~;X4_3}_x~_a zK74r1($W%C^P=akg$Z+zxZ%lAilR>R=U$csu15D_U_1!5o;PS%e3$LAE;2&>oC0T_ApSuzQ;#mKS`sZu-#CoP`15Cwn_CHfHWFsz3{h6z$Bu$UJCy zXD^gxt*$H*>0{l!O>MOpJA3i{m4+9G*PYYW-jpvL><0{@2k_t!I#hbuy=*`<9<|tf zc|gs;@G}VVS`e{qxzr}^^Kl82UxLfHKK{LS3r$mh^zTJ<4gq*nJgqITRf-`unRygR z?ick*tCgFbdQ?7$50ucE5*WnElN$-U0XE8x9p`%P^7kpYEgS$az3F`;ZL+o>*jiVl z0!iBUCYi33atR-l_!6M3LUw#57uT8iDj9%mq|1mDnwfRP$mqr=iJ1I2@X&5g~IW(Z5EdtJ`8^){;gu}JP@h{a}7SqyBwPSn>S@TQ8B*eBj%e!*>Q87 zu(m4|jvKs6Gx%~7(mkfC?Ep9*iK!;U0Jx9Wkj94In*~3Ao-BFqh76@EQ075IgvI3C zm+o$whWCB+fCU*qm=bDyy9p}d9eXaxzFYpQOvL_e0_X$#9Hc)33IzcV9Y1IXS)j{ZA7K z3i0t_ga}eOG3f+|Jw)=s`4>GZe)en-piK;zhXk+Y<-1!6w-R!4)&iQ7h=M$ufA3z> zwr%0jB^a0b5~=A;ws_KzXq%x_pgwdcBSK=AUP*FF?G0KYBd79t3?XX>dpx)+zJHaA$vPq1cp0>QszF5~OCM)pC53Zr-SG z7gcD#k>uIkJ-LB4LC4YYm@$Sk5$O_G&v&{?ifrVzn(Yf8xWJg0ltc@s>cND2HT-gq zzOMgs(qf|p3k%D;J}ve!i>_SHz&D9AA!j+n2^4-kEt}_Pp26V6JFcCNWHN3yeN|AN zND#2vS({(;ti7s=9z}!_e#-d+?C1BgA%w}oFmKQ5ibh(=?f^P-Ztu_q+ue{=m zRE|_~>uPKFesyN}&Ds*b2h;v#W}6opxqN_q@P)+JXZk(|!gm`P(f@tl|MTyM&>i?h zM;AmG(bdjf(f*%5`#-##)(_q%?tJnD>ein0qZtoAyCPpsP7YG?Q;lXQ#Hyi^x{~I= zapa&wc4ObQbgSo5Dd|n0wC4M-NTpn9&-%i+DBqQ2aFvtcYy_FP%qVVBN;9g7Gv=Aq zYLox#ILpCjS+$d=P8&^`T&^5FvB!vOw)vtVxczdy%U^E@SUb!g^4uR7Vyn zJzNmK%^b>0C}F~IQc8eOyaS*j24eBek5EZ@qMnhlcMju_cg_6!wIV^H(ahL&{5aOp zM@xzNOSNFkS{H^o_*p1i-LR$C@>w?fg^;6a5ta)z~|a^^ne*oN6{ zmurh8e_r9Vh{?xb>GME*U|wT{#f;?Bm!i2S^Vj?7ZZffQ&wl#X8^Y~VV<(_g8OWm2 zmm#X7x<_PDhQl$f{bZ$~ja6@?aFXDKD;b>$uYYb6qi3x8sAW zxpDv$;b)BM5x1z@gA;}O4mJJO^hG39fFK#0o@S8;0i+D}1j0nk+%5Vda8S~dpw=QJ z<3x*xdb$7?8c=SW__(YXXKXO_vS zqDv$lE8Bo*ATYv&FejvRhrZyVv%v}s9DJw0Qd3cBE!O6`4WSXRt&*F40W)RofWTJj zcni2=4yO%vv#$(S$%Sost#Ort+J{bUvzxc!;vf%ex}8p{Li=$t{i33x=QU+upJE{R zJQJv>2knLiw`;%pKCN4M`ML0nEwcsBASWR&8n!Vn-ct5trvP-F`Kv23?nv&3*V`|U zx2})L!eek)v)MA*q|6r|KD9Nt%A?$6>BePV z%tkhhKN)rI>*4s7%enbVF~Kc5Dc0tBAwz>&VO`O>t;vH-Y;12N+k}>r|EySWQBUCp z*N;bDKq!wMlF1Lgp8A+>qhHdNr?#Go>SXcpB*RlVg{GHPhZa9dD+T&rer#oG_Tk*- zUDIoR??pR*14M0FD${?5o)KvR=v}Eu;4;>Mcz*EUfhTTZe~e1SrN(y9oEZfXQL_>m zhRFJZUiuDbB(!*h(-)1zdCa}p%O3EhqM`_$Gx0ZxaWXjD37Ht`Xc#IC2y#qLjte1T zc;N&YLwvMw;t*{Ser|zRBPc8)S+(ntj`1z1R>6Z1qt5=~9O})$ngYrqUSPrJ&t#mF z9Sb-apa;9ciGhI-rPY2VswFVsNUy?dfNf9?>m;5%eE61XuBrgjtJC3YQIX+gbs*>I z7)rWt5Zhhv|4xPOoGHKvWm7CE&L3JAG_UyjI* ziER?c{P)ZipgcKK-%mmKSO~KQF+2jb-%+1dbQso5GB3>6rlSLV=up#tJvz!D@O|Y* z2;(9qdE{Mnbu$UQ(YMWjUv4f>*B|dX-?|w+18F<^AaI=8`WN+si9OeWxu@-0v!Oor z)vB%?y{9S)plltPc95hy?f*pN6yb!f@EDY3Z5FMQCpfj?{nF1j;|bnFlY{}fz>)yW zc-hO&{k(&!oE`9?6|Gj*v!1mG5IAEfbnWLpgZNvAqQf z#qogwwoa_;t&{qW6Al3eIr<(UzH!7x78mB{KYG0d6^IlGGQLIu$11o;rcTArWOV0D zH|)5P8#qNr7PkjF9BnJ_IPz@h$yHTVcN8wU`bbr3wW>U?kiM(uAwn84ULgRlo5rou z`81hfFx$@UOHXg#0L&m&Y%6D3fpM+%E-fk)tN38Xr2&a=1nYe;)#`&9X)eqGa?#2A!7uU z7O(F{ST`p9x#ig5tilc;#(RL>mL~=*>Q{d0c{0sr1ko?x-#6SG&LG(v)}uj z1h5j;e_cz#CzW-NTZq24wg3r25DsJG^_em*@1SHSoLSJ>5o3g5oL^nt_-?GtW%MPu zS0^VYqRfJlgBSu#q%eXshFt;_EXflnI3G?XEbgP=s!$l-#z6_&1r=zuPq=7Jt5|2Z@lSI>^(Q4!NqAWt1dO}7{RTjXMMk}$2rw6uXR)PiH#Qh5>6 zk=05ieT?jhSW6)$w=nQssk;Ev8*jl!pikar?@TZ2l1LV7cJx-BoDF(w^xgw9n$~t z{W~Z7el9K@(yl-ebGwstaIS2yTl<(jo0N?yeHr^RoHI%0(B526LQzd4Q%+K;qIbvyyPu?`samJ|;_i_uo` zH4=~6q@*M72UJ5&pi{mke&Kh~7u@yC*e3^id}7WeJOEVS8rYE?PQ(qvpV5WFl>iUD zOAL(iT(^-3jsg4yRQ?2{f?oyvWrX&gkzeUg80j&2NiN;8aV-f{KTD+nT&cvsvpGlT zDu&GVA{hZR^m{#BA3*j;V6J|vcKo>aP@3mC+ZdUIQca@&-D(BE;Mft`mHKxNwXbL|J9xrN7p;$_oxvng|H(p8exOPPFw-!L3xND1i(XNG=bDZ+$ymN#F>l@4nVP>+fOARwawR7*VhU#x zZl&WmG>P0@LQ>*LF~q`v{%?)?w7k%rPvEvTK(=`Pq3Y`&8%M8hvB&Nra)?&7o%_PK zkfo)hr8fJNR0i9FZYbR-g}+)Pt(Otwjgk!Mus#qg%Z?W^L8{2wc4z&U5?CAU95Slz zqqUBh%rLM0+RJEOS$xzgDefyvSwAGLXB`&xnEbNk$dgje73TLJMLc}S*K`?U!_|$A z1Ebs*HbP+~qW|G-_!D@ikP1&l;DngH{t*K(=;fv!3>n=~xu`;}(pogMjrEAXC=rnu zpy!#jqJ37S-a@0+t`PP#u8JgLv$AqI25#1aYH0&6y;N7XL%W^F@2Gzh>nd&FtEoGhWO=A`t*jwH9LF zKf=;Zz}rM3J`#2D^SE&&+{47iXc$3}G%2!)h6YMGbv?cN&>n39C&Y&kJTF{yF_`m$ z3IYf8J12iu5@wtI;n?cHN*JxM)h$6g;3+~X;BA~*0;43x4vH?)%)-6c35@L%@n3?2 zU*2>KB0k@vdv2iEB4Uk*WJX8`6=$AlGG(EMn5*(wxdRek$E76roQyu9(1cV5$yN30 zsm5}E#5O>I`Ob0(+y&uC#z&6KoJ@VLo&oD9CfsuGrB<4E6l`w8$r52 z&j3QmYEoC8bOOU+jT~FO0V%>MjNw^3p&EJDJzpCtR4lI}LNUGHg+k+4b4#SIM+nqe z##ZIhh@HVPIgW;(W|8RVz&DW+xVx@Cr_l@@;C0BIF}E+LrKc|ejfn79-H2se5)w$j zgU_SLR!>z_Z^0V68r0p1)A?CLr%0T>?+>P#`7b+q2`|R-yM1!@h*#E2h>zem>%wg` zkR*bqz$Hj&NLV)bwBm9N(w>5YKDGQHMF`IY0#*pFhd72&yw{rAV`#-o1?*VE17gFA zz365c3F8-Hb=)u=*>SIRi)85n9$v$%_F-_NFdi17jNjR;X%+bQJu%~<^Oc-pf^orV z6Jw3?vfH6=2ZXRwih% z(HCeN=uS>gdskmMcX0d)zUbV!*qL|CCu>U?HOYznQgX7g=fbW+NnB80&k8NT5knEc z<*kn63xlaLTFPk-tTOpAeOtOtVAH2nT~%(b(lB-V!r~;Tlw=q$A5)X@yyJAZ3Z-*k zCYb#_f#!%%CsCqpYA%#djgNm~Qj@)lzwmWLcil zscB_#IBP&3w_G^!J=pemg%jjQ#PThFE~BHRXa0t(igP|&GvMix$nS8iDYZZMo|B79 z)+(!exVR(o6p6G$FiQDPb-8-kr?rtaUSZ#(O`M&jG2O)%r4=!09rPxV#QQ4`XlHa( zUteEhq@;Zh-;V7@g36N8l=zuv2g4=zqmGB1>V6_WIV2&bDa-G9d$s+2+Z}b9JxwJq z(*>7{I!AnSnE16*&Sht3iAfo}(oD(Ba*HiaYSR6(rOP)@BSicMus0Kr<+KE|;ghww z5_Ts~8_n$eNR~9Pzu_OBC@KB9)*-Ph{rd4%BaK68)9OuXd&Ic5>4a9Ap`yckwrtJP za`?}CrV~B#8-J2Y(H`+h+L)|OgF_)SH1tJmZ1*Lddp;+&mh9n+HefBe^1J!0r(7id zW=JW4!U81XE=w_d@j>n|4Ks)0a=oucA zvX}nvKj+J;kW6Ff|Haqcw32%M>XdG6$u`>cSJKk8e)M0*w8QJaax^hI0HR0!1qJ0) zRez!*M9+mDCMze!blPRAS{YMYb-L_pZ-i&~K6&!QV<_!+flB<|y8D^)fkggSN^~VJ zWJZn|>oE$9tQyveBUqaoq3wZCB6PgR2trmA*(I=SS{S~*9ObqZ^2Bu{c;*1xy;Y@?N&Lpx7YPRA~@|dKuj|=^GR-5d9!; zr|Y0}szbO#k(PtbM5@O!4Q{zR)mM^gC;uBkT^38M_5QLrlF9T#CP*=^(Q7fiJf-5S zR5ujG%quSAokepnNM0ML5ej=WIymTu94cOU`L>-sZg>co)4q;`c><=mfryc>VD(6( zIn;k%ZYUTK`lQ=cBs;io&^K}5_ne=<5adH9$s)(@&L8-gu`IBTR6L^hf3f%8@l^N! z|F~;(^)96=6{T<`WGh+8D0^>?t?W(q2rYyp$I4E&V`LngQ%P3#ien_(F$#wq4&TR1 zUDx~id~Ux#ez))6U$?HVob#H`@fi2V{qcA_dpyd?!;OPNuHK&?9R3WfZ_w3dK%)aC zk7U9lF;XCNAdEG{E`Unji;4m3T4P+r>) z@k~}h0i6uEI^^=&j8ng-&ZbK;!z#$Rh5g3|!g#oTRt=JBr zYdS6lKt?YGLU^R0fMSUutrqWq==O^?R)PZh$-S2Sb{sqeB)fEfZwm+Bi+an^f3H=| z_B=0Xjvo85lAX7elSOwMLjoN?dN=}&<5A<@wcv@39aCE+P4D8Tz`hQiNK zWSI*oa}Q7b@a=7v?-u~*LMj#^ZZwpXG6Mt|eE7o@h>HmhlN5jxooN!zZlhrE+=W6! zz_|MZ!qid`ZKV(?2Fk*JkPL2MG$I-BNa4;+h*}?|ECtgALYl`Q@!>E93@=iq2&r@q z;51Cy-W#yB0RK8ouq3N?!U?Ycw}3KGkw7Q#h3b%0kc~31$WfVQg#R=&2FwO1WG`6_ zNsw<|-g@*naBHDY&bvIn?AviFDukp9m|LUF|L9If>juQI`a$|Xyu@7F!}1;RVoQ#{ z`+ol%iOKmkn})I1zI7G+G$a)mlI9`Z|234ur??4-2*9a8Zaj+Q=l_ln4}p@Y^i5UD z9t=Zd!GYTkIp{p^;c?Rg_xFHL{~HBTNgeQMjHd$-TOlJ?1ME`JDs-`ySKa5;M`1rx zK)wKc`Xu!RG&7-a`SwMI0%=Py3A{+K>CREOz;d_%C9^eP}@l%?04`k(~iRsD-sPVgZ90=q}O#@Cs5C z7fQ)2l*-Njt@{u$1faUflTm>s$M1yWHv8n?le%zKexf6P2*?=Rp$R67bmf&o0%H2W z$an!1b=1(+{euFWr6yRaNE4NdoSc-9)S?GvPLYrYgwyNDoA`Hkp&%XFi%#*#@#BRR zZ{mPl24U982?)A*=njIwx>R?m*Fn&nw6TC}<;P7j*C7`hU?}W%L0z4ZPW@7XGV3G` z;o(nCru$0B;j;lc0JAJIp|k_x z>%_#w0@r)uY2d~bLVjTO7q>i1{oc{?a$3`SC2(Tf2(Gdc1ts&;QKp9YW3Q>B1}av;4J`+rE#%^blgJbMWP@a; zzu%IACf8TmLNvM?8yP6wRkyz1!+pc4TZOh>hf1MxcS*@Npde7;mOpf+8-h4JafUZg z9|ER885;x{Rs=yP#Y98OZ?D36dXpx0tyI+1+WA%d7q!wfnWDOB8@?X$pO<3n{rK@I z9Ua{UXg@ok!n`7#3VkfTRo$h3X@>6ndE&BjVC~YhX<<9*Ylwt{idUjy)<(aU+8Lwu zQg~RiaAc4#9s;{r9Sp={Y@5p^wIr8Uh*Apb+0ESCa&a_zxqT#8HVDdCU2di3K}eeIe(J7e*_k;z zH9!4_y@Mv9_6KVLetYpxH~uyzI!m!wb4;@O~eQDBIn`Q!gIs`te*FMtnT zT(uO`9B&Sxw;CW+dbD#_&Yw#A{`gF@E2(gTRLDYas#43HBl#`We(oPZcz-01$ zu9QO$1}qlKEn^vAwJ0@m2Pujzy1Rzm(ko98^1Vh&9f2sx5_5lKBuMkqf?KgGl*W z&%%JOj~J16fdJ`8j5+A+n(f)7Sk)Yl#^XXZ5Ga7BMQ6gTdhIGf87w@zvC?uQ(#NT? zwm>jN!mD<@WM>ybwb^i9xXju!zw{t7lIofhpb$$Q-f|>nv;`6S# zczs7ph}#b$BaqXV2UVoSzP|Y_yg~vnUf*`Z@mGO+bAfTp#(v9Kq-R0EMh0W+m1EoF z0Ar5<9bZV?-FU>fdlT&ro*trs4YZ+q-HV3p4(GN>m-)W5z4E;o)4isV!T$bCd1f?i zl5zF=J}^rP4>Ne*biOxr9t-v$c?Y*&%e(+Az`n@9-6=Gz3Hk_GrZQ_rLc%#%+6&-P z4vGUP_Tc92p1TX~2I!a$tJn@JT1U!|Mjx$*ily9@4Gkt}{u?(qVPG8x>`m6`>_vJZ z!GtrZ0|wx9A--to*)ysX;k)lhT(OF03a9dNQZ->oiIaLFIjBSD-O_fF(XAH4a}ek? z)=271^Fv;sPJPsq7@N`W^Uvgc-qrG8a!q#-QcTWREHMguxt9P`&2>jCl@YBm7 z^-;l%pxPPvnsW$vr3GFM>nX0)MvAP_i2Y!)Pa47i4YhdGMc9F5dUi^IH5$>f(=NiW z_p)UaS|pduQq!C~#&<=cf);a&AM~PNU3G}D|YMffiqMgg~IKQeWPx? zS;#XIH#c<$tSGyF8(2`zD(8&qZqruu$jN?x==GuJb@J4>j5Od z1DfaLr>9?ZPVCi$x!r&UHH0a~{VM1PKLE0aH{e^i2w?Rlz#}O(-TgvK3den?ByXqf zS3@qq1{|peE02Xx9==^Ym)ZyAkT7_sT9u59jKL=@k{<3LEXGy?D*rfqcwl5C9}$Cx z@P(gzV({6qth+~>98soDbs&D)=AOG7^XE$(5Aj&Y>#3(`TYuP`5$NF1A4s~_7B^1+ zbIx8%KZBgtYb5c()h*5hWuC;a{<(EqPfy(h4ml6YGJOF-K|A=-c!)`MUH-xzVmusx zGwrb{FAzD_sP6Ay&wBZ?66=g&O7ntEpX3b9PF;+_d-sd>3OU3rbMqQj2GbSw`)(s@ z^(JHRu-~XJZT~IVi`RDM;!vai+w>T`miFX#^=g&Y%mxv@SFt&=_+RxBqqFlS?441? z?by-upU?f~dU~RC=3QB)-_)^#?upFI>gJqU?EW4W(%cIht|5Qx__;!`qknfHU1#?9 zboeNEinenN$+6VW=2S*Du2CIH+>rGW91ga{}3%L${t7l~xDh3NtEzLQB z>8CWizfRkjd%x^cnySi-|E4j{G;nZ4k(xU9&6B=7348m#t=+vkN1@?S>!0s*KMQP* z_c4Ltnwew}Ujp>nx9<`r7>9Vq;cO^Hsv1GnX$=Z6Lm9F6D8R~A#Ob^QXi=>%W z%g78TE?s=Ua`vtWc4E16XO}t&0@y!(Uh^LurkHfnK#XUIPx{wnQ(p(_D9T_kK5y)kLTiP*!!eqxUl2sgnMWygVx^a@!ZL4 zT^RVUeZT$}OR?;CLdLJ)d!5+jtsTqhf~gtT>H>@Q>S?clIj{ciZgrQP^Aq1?p{`fi z7uRt5x%F*r6v~?1HR+;#S_>Oz;B@6|KX@23TRZk=2NE?_o;$wk1zikaAcxA8hf?ke`qXDNdsPRt3)2B8T7SfY0 zdQ>4&ps8JJ$8=)F()x{BCS6(<+<63+5&@AaGvYz%@;pFvNtp2yk0-?mdE2@1K4=b~3wKJVPM&p003P@4(V!qnE;MmB_ z(A-!77K*N+VG_DEGqd`AFDTDT{$zq_WdulEm3$1Q5Ax1A!!Dxo+_>K_dlKRdoq(o= z=jZ3oJj1CwFDF5YLVQ^+_S9>6BLM{;?ny47aHQB*JxyB^;Cq1tbk5aK|lgQ6C8dwwcm)p6DTh4r_E2 z|JJ1tpy@)vE~!Cr%63NwhZx&LI!4CgwWn+CqFQ!m{MfTd$9{~m9*+(S(=~Cel1fMQ zF^Mjgi)E@IUr>eGc4MRR^lpD~t@d5Ed?tOy`@3aFomY~PoJrm799w@Vt{Im#ewgu| zI&a*``;P&r5YO>6H`+=IV<5l43XBYt#x+h#$g6c zKb@##OunLY=gP`+zx@{g zz`l){nI!V;U&fUR0zAY81Qf!Bc;iXP4M zUV0hV5xpO(c25$Z>_HL7rp1rTIf_LOB(Kt7+}O!_^EKQku&$spMi}eGIhhQNh=_mztP78<)=Pf?9{_ADQVGwn4Bgh)B^IAO9Giv&WMKh4L;0LUGW>s#pm{P`smK)B;L z0iFw#IlP@R2VjQ)hymEJ3T{WrA9Sf{(PkwtAii#aRdXr;-=wcK`ZBUF z&IPAK&oL0I?>8?{E~5%0YHDg|n#B3}nHA_57~=SajtVAq7z{c2`PDMpT3BRG`#^fX zGB||V!WRaiCEhD0~SNU+@O=_pL^a@r$Zxdw4ZB>SB^#D8%Bhd<>H*B2;np? zUkg3GHuFC+bz%mE5S%vEN@1?q=1dk=^*6L5P3oICsj zUldvaZkMs|LY6OxhmC>a03GDJB200EZ_j2Wj=YQvZT8bzD3ri2D44AlNa`c4?(aGK zgWIBGZk_?VniyAE*CgTzD*}`biZ7ubz;N2a!Yx!F5rw#dkca|>Bz;>G#mlspnx2*Q zjgA(8IJN=SPR&{yr)6UH!4%=|DMKyB0)%f4uQr~v@KZH&5gEdc4D1}L_ULvc_x4DoRwur$!umr+#2Q>a(+Ze)C9q{b$(7yNJ; zdlNw+AzD$v%G4lxlg{QXDAc|PV=+?gma}Z55!rkxt?P1HS58HRAS^j`wiwjP{CqCV z2=qfOuy82x1p;)Iw`dVC9JtF6=Ne(+H!kz;&!zcmv>0>6i>?T|qt)XXN@Z-BSVU)%sdCdZ%unK#`hnzD4% z=O(A|6zMJf_Ss-av~S@15wLqe1A^N}uh0uT z9yhU_rLs1wG8z15!wHhE$*{zBs~W$ENPbTbB0Ov%w&O!ML%JspW+BamNqyCnYO;2# zz-?M{Sc*L&nB`^|ay+4e+N8L$py&DetDgB+(%#%ZM5vBdaZDh6yxSN;1p~CV5459G z-8We=(7JFUp_|g?z_L~AP-fe5M7OfVDze8a=H=wbp|wp- zc^j`3^mG6M4N!`vpP%1&uCOi7_JzpiGm*^$6BES%X6R>pQ_P$F6da7mD~OdUCY~P_ z5)rZUTQ1Zu`=Cf&JLUwUcI264MDtW)N=huVeYr)tFKlRw#B3-!!K45>Y6vC?(lRY0 zggXU6!-g)itzNj(yQyP2;VAbfZ)q)uXg97q` z*M|Xy+9$)sm?xg6W}b<-v7ueZbLEH3bE)ayT(&*V65T43A;1hMiGBGS!00#1(#Xm{ zF?)#!pLdkJ^H6L@1C$i#2x6;RK(9zqL&G>-Yqb4jcvooX5o|>T&q%}9Aa`iLHQrud zQgYS9%L^PxJIEnK1P~FHi8cs;UO)w7>qrKMhO`l+=N2mG^|&_8n$N5OAl_lH&kcYR zB0}-wn}VFbXtn@m#}94q=gYRE&NPj@>3nyVGU5VyU;^7<8z zVl7dIq3_?TNF>tq*3QiOwmT&57&ccM71e3nU8iB)gx7&j+n$vqn$Ja#2es(~jN_&8 zZWXP>(*qfi1=D5%#E)v2T6Iwd6nF-2OKCpD!+lcynl>@n64^O91Kr&(Vfs~+m0PYH zgHZzKSusjJb7}qc&fY|YV^XrJwSM2xpN^HaqE4v%rPHYFfy+}C(z9=3dI^b3l#DM7 zPhIU>j6TT`n14gzD1bP9$Dn04m#+^Qff*og6Pljoj6-0WAQUhq1YH*}pc?0aLYKFc z$-m|57VthO1(N;h;!6T>69zlqtR;35ig0_r5FsHz?0b;pNeTa?Rd#}C)tRUMAXjCg znX-ic323ow9S>=gG3OfmW8j4;BPJuG(LhQmQAt=?RaMu>y2O(Ul?OXdu63^lVH>nR za|}?a(IgacKdnXQv1auJ?w_gskXcPj_Uu!k$sZ~rt2Sc|{TTH#axeUXb{iRWJjDLiT&*^1^FL9!RG??0lKK7@#oYxMwk`Ga}HY`o4qXk^zAvH zwA3UHo{|ieqH*I*<*`9z^IV@3pTc_(5TC!%xd;N2$oHM^X>=5 z1L^~0izkn6yiz3;410U>B<$CC{&@K+D6CAW+Q_B=AP=mK(zea*dn5IJl~C>N9Oo>E z)kPI&-{|G?g5FVgJ9vwca@%OQ^a7AtZDLK?VDrRY0>KMft0Mb5*suqIxz~e5AfZX0 z4@t;Mc=}w^c6E9s7egc_L5`y3-U?bt)D=khDCFDH{pkavvK> zC^?tVm)MG!yU-TfGEK?Q(6Fg*BV}c$_>%yu0yq%}RGnFE?-k%*qd2naZiESP2~08E zLSZ^=N*A=Y@X%~ZM(dnk{dm|Z1>(>~Vkm`is3g)WjH=p3VdW zKK4zD+NTaR;`P9Z>BRl3w*-?0pjbL>#LcHoW`mx6{Oi<>P0zS3#2aq@^_MLV(($JA zVc)M^U|xfcwY)q^IdDx(j61T~92?oUpbb)3#(q)vRqx*OSyDq*mJFa%QS$E<-~93D z7U#+9(42I@=i|qZ(1G68!9f|i9Od=s|HOurv<9BYccoqoa;}kHp_Q|slGE9bC5M?} zHS;`#v zgIHhu{~d{>xv+2+rlc}(r_#>B0X&kx9@{fN1CtBTYX-$dqXl+g19{omur&mbUI@#| z4jH*ch_5Gfo#vW?y6C;8TuGp~p?z=(vzBe*fWIHQmY5FeaoKB}FR$`vbv3!2IT^*3Fz)McLb9pys0CX0=kz{$6;KnM`pB5S$1# z%N2OUQE4>TFVw4FcP*akyIa^fwI|}WTHKM7eb&TgFCbht!_L-LgNugq`m2u%?rj93 z!I4Z?1f~EUj&I}n@s}XleMA}PforPxzG><%-~;y1wH<(CSK$jIwO+-12~Q#9QH-GQ ztrnV2m4=TVJvt=ESu^GYRRj#-cZd~*XNxT_FAo6Wr5tQi`{hR0$du&deyAFq8egEA z(}$RsJk`_GAR=J>BKPv#m;uYXu&ZpiAUHURA8?_q(SYiF9dOr`-0uf zL)vwJ`Y=vg7wkT92>}A=acmc?dVqBcG*;GUbp04$)7LEKV<29o`3?IsEZLu!0SQ~X z+ru<3#zqRh8xFF6<>hU^P@)!`IYJH_tNJZIo`GoaBqb*?MVHyS47G9w;8sd_I=7wg5ttLGVQuXh?KJt zRxuA`8(5nFH?X~Uy0Jrs!n8@GogGd9saD;`11Y!4YCkCVX~P0`#K-joP^LVy$I?{c zI(NwffS6vstlAPEeW4b*h#yZ?l!f^L9}+g`8D&|K6xAQF56XWp+txtKX@rFUWQ7Y< zA&%QHfqB~bw@r=xi37gS`#M&h8N~Xsz^se#v}Y~lGpJ{gaww9!Y1tF35MBO54gyC9 zraWuo-Hmlm$(8KsDOOvriT<#F?wjrIRqMA^IE)*(q@jFG;+TmVNMZftYmpl_ z5P#atB-q1=@TeWwlHT@gpRUbXac=E{SjW)#^ELLaY99?f)a*xWM zgD&c0=VI8egxX)&Rvz0f4#v@-pZ^>gm&7Yij|#U(+(;qSZ+fQiZ;w%^b6!@~!cB}9 z-OX{UmiifNxW7&lDi04pa9s#~Mn&G}7kN&RzXcEAygIM`KcWgg5f^peTsIqC=-<&T z==LaivFC257|+MTsUAfu%0QMf&)939GZ)eQ`2fPd0d79`ydZP`>-Gktcp3uTqvdTZ zIkHH~R@G9!bt?7+r$h9DcFgHGU;WjeXC-UY#UAR^c$BSR_74{#8Ec1bx>BZJsFqdE zo}g_gQh1Z~5-Kiq70$W8F4H@y{{9O8qI>?(j3&;OW5$KcOYh)npSg5Bn0nJX7KtS< z0>tPBAO?|dZYK}leSUb={4B&H)Fd``h?!kEYzhhoXFSjNB0U}EZcwSBx=0`Or0%IN z66oNO_egj;elm0(KKeox(m?;8`7#w1I!}@K8~g{Sxx}&EIC-wciufRpoqSiAi}46@ z6N((~GW~jcD_PvR(D{8wo9=kJ^JnfnWJcNx)!(aD2j?_27+N>A4UY$h}{#o{IElqh1CNarCU@Wp+N(gqIsEK1#C1@Z&K zoidoHt%%Xed$?1P(?^=PbcrN?CD*xsAmuIF!F<0N&b%Ga!@h9o)G6Qn4fnT?(!Ti; zrP83eE}8BMr->8dWWTv?XUvghp8*BV!-t;*@R#Y235geRw`PhDj}~n3z5ma_L&c%q zE=|fwrax3@nG<6e8|u%rt{d;8ISXIjFB`gVYxgq!mZ_~x_lmcXm$K?&@9=OPd7P1o zlXKxzM~Aie!2nUbE^q)U*U-nO@Xee*gO{*7sL8#qXH-9yF|&eSok@LJhEyfCg2Smy zx^bVLim;!UpdZ|F@CvF1PUBj>U; zaOwFCAV}+7?>T)zI&5K~W3?0<|K|E< z{Db=@U%hGkXWOkjcBZHKWRRsxLD9)9h29-5faN>wSXZ2<;K^C#Ey`f*+R73xUJK5s zn$rCl$R+XUXakLTU`(|0)GEgtdnOcBeK`s&0ei#G+GZ7rBD4&q&mf9pe7ETgRQ{|r z*%=u!xXV=u7(TZbGAhD{Em+1T`eU}XZ!ksGG2S{bCGW3CUQ{TKY?|)yIr;VJ5Jt?T zc=;AM=+BagCNz7?p0xv@5roji5Q86QvJ~X!Z<$-y53Dufv9F!$=go6#-}DxRyf7UT zG*2Z@C7wI2%bMlax%QG%fNeoq5CIZzQGi(w7U*A605BDBjIzROLIJhHvyrA}kw6Fd zp(e**%+3or^#j$T7zlX_;O2$PGL2xf@XK*`&g#~lv0pXwz|#u_2Fz^OrtbkeL0eeh8 z4WKN9c7Q~OkSK+NAO_&9<0nqEPrBHENr=t_IsqIG$S^^#@rrvZOFVePNa!X(SvL4i zZfz}IaTFn{fNj#oSzB0$m{WYmq|((}@`2KpUte!*QjE&eRs@G72F!dpxe!pJK*-4f zY8wJQC{ob{r+0R$ril7zqWb~+geQPz<}j5A>Wrotu%!*;r^7~=1AQEDuc(RDAu!`C z&jusf7(8@!HjAbnS39wk?N1Q)0$9+Yi}wN*AmjFcecCxW>9R)m0KJE@!YjRoGS=~I zFtQYYDv=8=1{hu<0lQU>X(L2L{qZ;)2g&(oBrl0;#${g4y7eg|vL-2B^8cI2Vr0Vk zgUAB=tfq5zs6|bCTk|CZW*|rya)Pl!oUpXi4+bM3?7$5Ie-PsPh0FBx^mO#}1As8A zr95f(WKJ_42CEhvEKLB}bp~Nwfho(XQ1c~>lV4mMIHcKth5?+93@w63va|*$4udhz z**fcqgwXb6@NRIUrH|o(02Ei;JY)0HCh2;4EDIuPuH%`@hDuob`5a? zGOIJcu*4g^g0zi_+kU6RCU~9&&6E`&+IVtm`itMw>s8tRnmi&15Y4wRQ#o% z(qTn8sG-UTBJuM(zR#`;Rkn7-hm0cw)_ex>ig`kF`#kkVUg3s(uPU{brX8E6d(Kd6o_4A<}u zvO>>9Qdmwv_wigr=E*Rfgh!_r^;Sp2Q0ZQE3;*3>9=)5)aufnH^z8+9h z5Q)25A~9`%l@YNBRAC6vWZLj^G+rt9-|+-*4C3DSQWkdLGXpR&2uyY4RUkBr04;z@ z0~&cosO?>zKKue0$=asAUXJmuQpBYM<;Aa)jWy8R>r8|!0>=RhA2_Ax8LAT}XdPE2 zk2Z~vB-9Rm^&Bo~HaPeJDsYjs1 zjdXtrk|hoMuegiE!ilN_wu#xj3mdPNJ!fLB)j&$fi0VZ@k>MuOaN(m^%RE;ltXIj@ zQd`ANojN`CY$z<<`|HheQWwd0gzM(Zc9Ie|PDDfi731KBxsN9ppEElS*I_@47jM*Y zDJ&9hWX|5kD95XyIb7{H`dv>e3J&|5aNLb+OUTbtzdplU)#*;HSsIC>xvSk5r<7OQ zeb+OMb|n5lH_{}QYzqY^Vc#E^FT%xVOn3i0xX-~~`8WR;+v57CWzY5n{+Zm{94O=n zS_Twz;(kKAV)t?wBA3vKkhb=b~q4tw8L5ax#Rdn{uCM<4NPHFk+LYyL*A&U_jmTRiPgw zRfMr{XzQ*>3PMvf;#t9#4ZO2=C+6#%F)q#__&Hopj+i)-v%amnG+h4Lr147sa8Eka z1LDs6XcQY`sGLQv7@auhsfaaPaqGWw3~|Ur8B$2NnDDc~7t^{>U#kr}HWkx;Qej$9 zeU+L&7B`>}Yuj~;CVc=*WeiJ8f`bT-Iqca-!2B;wcnV;s#HEZ3&_w#0V*!CTAq)y= zgpQ*`{O`a1ay=#Z-JKn`tH-2N8~0|swGQHcF^VbG-kn}eoj5&HuAp{z{Z{gf%f$(2 zI8#ileq=Lo=(K1y#vaSc`XN?%@T;s;YL=)UjY-Dk!-uiJQUx8wuJfU>WN^Z~efyXg z{lpO^?APr$yr7aJ#;hwlhzNKx%&$GuX#>rKY7X|w7o!2313c~Ilsh@vwcPif3G(;b z6Bl_{sBfL?<@=ipaO7OD6wp9#e|`;qAd3R{yD9Yai7L#1c>==V0g-u3fn6nvq}eRTOXPBLnc~(3_h$E9+B(6+p>gzd!|uvI#)G`XJo~DOpa>t@~Ie7L~Dn z^Qvfa%jRz0X1o!w`*gq~9aA0%q1)u(^@sJ0otXw>eqckGo15D?I}br@xLqVWZo-_F zbd7)L-JGElKDo2PK(E*~5gyBK&pfP8$0^VA`cT6)*R%`>1|vai$sFn`2;y5ok+;Meru@{uI!NXfJ=2wxB0N6HVWl{lYre&d! zVjf)J4Z5L!WQ3{Fh2sL1y|=gga6#C?BLDKO3fM9QA~~#=2Sx^28?ONAA5=V#trMvP zY^y`N0W4@p^*IjleEbKyv%w?yk(gF1L|{Wlk1+h`)HgerJ`l@bNZYx(=386{>cnPc zVJ$?Bjg67DSz;z*lF~$~0+u6801RgIbT`-^fMx+eU@3foj{bZfU{`1S()Tc#yq)fW zG5HwvT7*>r6bZV!D97uRcX0#RfsiS1I`N)Id9-cf;`}^NxwQBafGPRXti)TtB*u@7 zstGJ<=oF)^-Q*bz%vved+`6}d)wJ0k9Ne{5E2&a62B{qlAh(uIYw+l5iGhiEQ&F0x zqkgA9uY!278gR&YzKe48XHyQ43>fI>09ERHRRJZaOB^v-8#|Je1ccNR17WZp2x8GJ zqw+sWek-r2n2j|oI03Ml$L{y5gjKKpo>W02A0MOvi9ecW7|{3TBdu zdmDuN$Qt=PwVp{66<=BGurnX00x-t=ByxZZlLlcGi1Y|q^tazaAUxg=wVDc@bvfc( zi}w{bc?X8p!$7O<6zbvQ-MV-k_RV(iM3s`NFyo9~qqU3Ctz3#uF`Qd|1#v@q>4co* z3NDX{F3SFaGyV)Tc6~v1{@mw-qlN^7M(o(h4c+g2!A4@bb`rnfsT8ZvmOARHw0XzB z{=zd<+WLe06P_u}uDFonjcmTAydyaIu>tY(idej4byrXNHwjsJQHJ1I*muTCRpz{#|&?1%QGXy<2g1(ng}-dXQ(%{UtdhnC!Hj0QuFib&KC zRC_FmEOdUMLkV|;0lM6J#~mflMjfiR6F0)6&?qGpmgZ}_w6$#kd+7Z6Xl97Cangn6 z1BtstPkY!w7uFTRbmRS!l3n(>0%FAMLm(okLm$H*n7h-*D%kGYZG3EL8KuO6QQTU? ze&`YRAZ1ffiK6COzlaP(&)N_!f-vx8z!Edc*5`j_HfNwJ>gf^OIQh`u!C&xdx-?(j z`{_&(5nZ+mR5o>x~>?%+Zg0|r>aE)R*;)a}OjP_fnF}!{4!-0@RHSLcos1GMj>^|w2+(MNQ988>c zXh$T#;8;x39MZ|NcW*cWz%4aEeHBJQ4b67j$Jjl|@>%%O`|H-Y~Xh8Hl$8va3mxcn+5RM88 zVV3*l2^M@&TfbF6uoY&ZW!cr%!d-hf`A(|Ruu1FRa~aO9#N=w@?d@co>Y&@I#XGa~ z`=eX1&f8qh@+GUspy%mL?=_QSm!lQ7>&6es4OglWO}KfZTR%pi*-pyM z%o)_E=D9G^ia1TqZo4MSkcyMNXLlrf&n?5)bM!mqWL#LO+||RBd>tKgs?^M({=FKH zSrDovNaSpmZu0t1oN1T~C#D%+pj<6>UF>w+cQuO*Geyl9WuT|ozE-D5PMBlsK7<)d zXwG!0)$WLU;YR1~T<;o$(T&fcA)AD1TE^k6*4yeE>@622W(LF##u1;aDur~%H8o8m zW?*k$$wlIh2uU&k6f3f7@0>;Aj_4dSOw*>~-_lRdL7zGbK=|q6Hp1c}sI7b?n%ZXz zA&EkxYR%qJe*GpBgSZhVS~V^P)WpN6Bb2b^Kwro+M9P66*9PEAz}T?FvFU7Zx;6*6 znJm_-5O%o};Uuip7Md~Q#+|9hh@$f=+2gcq;GJz3(IRVLYV0(qwhWg^LJ7)kmNhY| zT{MnKGc{YB)vHS*H|QdC-ErJ?IF9-`&SBgqk2C-Iy{$%8CBEJB{q1zp60E%8V$dfB zViImM;wRb{2s6737#SSuRsVVsdNrfh|AkHzghF-4-O9bkV#R+hvPk@;kaC;Zry#&R z3Qf2}q7u8|aREVoh!p21T44a2MAlpN^N5n9T$jIvPu)=BlTJRA!WiZAh29$qr41$v;<+nVm| zUp+hq`LRl4sXGqO^8>|yn2JVERPj&b2~E%L*h~dS&|RQ|UbwkSQ}9?L28LK@PXeyB zit)B#f4?=T9t72Gjb(vg@UP?{zeK*K_oQ} z9B-TL;Tr>~fdU>WML%RJm^TKH0S5$xSXFCauih;*to2+mGR~Hjn;m3mw<;4@*jJ4G zpEJXY4Ro3~9ggW27y)dnHBW)C3Z(;V-QD{Qrd}KU*zj220L7-XkStQoh#L>e2|vAO z%<(}nRb_^aSjSn}k=Z-6^|||b%}{{`1fj60vvuqES*!pwbKqQ<&;%R!4uIek6^mV|8f5OXJTfsrTvSR<@MbosJCv4&~jL>{dxmHqGU zztnVSwZ15A#18cKGQoOwfn+~h+87WQTDngAI(@WmmfZCcZOh>XM6zc4WB_Mm z<7Bseh10-;M~59Ny})d>vXV{j#z-`$jn8=+6$bpK>}*f!I^p!c@dbNFIcaEIgsg60GvPhF@->z$ zbp&h6mt*^_g%Z<0RY>wOgx7Nw>A3Rhd}cAM4r|gVK=`Acyn4%R`Psa)Z3d+3I6N(O zaVIOTk*u2t;4um{^orQ#3b|jBkYESd(&aj8B^7y=W;mnRf*?JWb4~aL!6AjL9oiaM zJRT2DUWv@rA*NRK_5f~oRak^^0Ss}dE?1*=$j;Np@ycAcjGM4(O2rKKl?vXuJ~5NE zSTsAVu3-8}OfGyNq17UW4ZTrlRXYZ2sAK(y$@N)MqfdHzmtVhy_GpkD-2r6tYsh`A`S5i{|GIlNem|Be#T!xc>K_LleBiPNd8PU`VuC-vhX1t_99m~|5}qgz ziTpRsm_op%VtNgT@~qTHEX#%sn*WP$+&%&(A$90`*N}_0N9?6Pm}z8bDo~^Ux!@Z< z*xZU)=&+_&?T|fg)b`eGxWDXD1_FzIUW!$o-LJivpbRwtxTJoB*gh*mI{beT6N=N4 z{{#7ndIIp?&mSc5=cl;}pY$h3xeKp}AG0WH{}Z|T{dJv`4%}60!F`$^2hE+hWHx;w z%t0+D{^Dum5_6ojf##pchCi;DEb&w$=h|wc;E!}@yOx!Sv*!OgIb&$1ZO2801A8o; zVqe0~i{XNo|3u&}aZIV#4z74VPE*_a_`p1GWWt7 z6!Lz%_tE3WzX>fI>wR};68vnbwtFhggW&djvp zmWrdczLR}16M?rLB1gWyYP7s%ulCpL=@%1MHZZ@}mL8mNKcb0QLA&9j{(d{zN2&)4qhZXq4$saI)#$eYc;GtnGKj+vE}QG%mJ&N>_6CuU)VH z@_p+lrGS;7>HR0jwE#D@GT3d*IMQ&sC8B9#{(Dv1rKokfgXpG`mJjnQIZ#>W!?~}E zTL}_+eh=I|hzn8(X0t#}_?`JFOUt9YH}Y67464b=>YYQ#EPrKf-d5ii;Cr?BwReK! zops>Q*EJ{kgL{qhE4QCm>gpJnQ&K`D>z$$^e2Y3cHcJdEKG(WgBb}QdPGc|?^Pv zT2A4h8!Zc5>VCK)EFHq!tb24+)m7fN1mFrAE*V;VV4 zh2eR-i3x{wn8wL|hvmn9cQ#Wv6-9}>V@%U4T-pnD8D{iGT@8Q3Q{<+vzeOZ;ki7NJ ztv){3u%A_UCT}psgt%}#T&-JOieYqx??sgIhaorDpj<@J7^YQU*a~djMTl;h!c~=UGg4eUs(+^*F zWalhGMWU|v-T^;SMr#)V;ha$4P^g@K1RNbBd>_HAgZI;V1Sy0aDA&%#?=fK;lqj zvxbpT0cTN_BrubnH&2B!RvHwNQYNgG7H$cHl$fZ$JKs!}U{!#z+ z9VOrbXy&rvx-Y(f%W{4Z0b6Lvv$m*akpqc)0ICdi8t;R{jj*A6m3Uhh+*u1ChDu>% z_b~Wkackz0GW`@?jH)5m(dc_WWGcHw@{!iI#@0B$S^rQoVnMpjDc;v795nNN!({J9~ zZ-DsYB2+ujK(f?6d~jdJ4%tCE4>&StX2{0|EN)>4w}%CLnz-E+XaZ3^B>zK1M8qBH zN`ldy2W)nPZK}QR!wH+=5izs z6xYFnzWKwdP4uP@c^eL3X|g`Tvvv@Y51k)N7=e@BZXCt<)L z0}>)Slh(xh7LvRkK*X4`IPL%iQWpq&;>0|)g$IWj)KyhG(XOy0kZLz+JELYIN2tbez7L0b}fZtAaZ1pR2u*b$z>e5=;vukogXmxr1F(NJOIzn3@tzPqFV^LS-C4W7yt*ZJAaj3Rq|66$`q5ZFu=Pn&N;&6LC&AGz(kH4Rd5Pj=k z1|Wszzbn%GMF8g6-v?5(i2S>dP3iwAWK-~ed0Ls#JVj?L5I*z^brm2=j{>mh*9SM> ztsR2(0|{_;_V!4Qkz~4huORJEUO_=j*#7CXlXH!q#Jx^9y(CKDpop+kT?#0-pH2SK}kbFidAh74=mKn zM<6bwx)ro8J}8khuSCz z^A(U;*zN8^#$N2ayv{P`LAj9{C3dBN---c&;OvLT$Cc|q6bX34@K~)DXn=-oZS#=K zREXM~3y$g$=9+UC@tBGbLTZGme)>>YIbJjU2?!sMyB_~lBy{CY=?mxsdyxDJgTp?h zA}|YewS8CpCThRXK`mk1<_V~0astY=lny(9@I-jn?!%VxEI%14@Y1(4hF^0su`Iy$ zAB1FW<~(4eAW~ru(sBW>c98L5b>tBSZO9C-p$0X*x_JY)+shZZb)jHyIFz4-blz{~ zAWeY?uk`5y1dxjA))bMXFH(1icxFzjFUNQ>tRZkOnU=pldixTpFy=zt4*f1Og8_Dm7?!Ln=>sd2U9=RC04& zVi5B<+n7&1C#N~})AjzSa2n#Jpwi0!g2aSUX4szQ}|BsT=Iqla0R zv%_#zReFL++^LUaW>3Y3qWce)9rD-to?w%c)ya^|1&v4m-eOi*^&P5(pejqp<)VPK z=(K_nSyqqUyt!}Q8<1K~Kym~iEe!UbiO)Epcjt75?{BT&`mJX@e?9BhYJFPgQ{MZ%U&B3I_jO(^oDPEf2|*`ZiUgFj*k>zF{($&o)xZRqdi1d$IO!bzw~23U3UNujQKCZ( zl7P@x2##&d5b=egS!y2p;M7yl#6SzTa;etgB17*vF*zA+s9&fP9%$+wGGw3E{3NIr z()p(Jw?D2z(kK;UqZh|RigA6K5{Yksk!%Hrm&SaDp{l6lTw^r0^VaTwL8Z*kL<;ot z*ZG?Vl{o76tPctfE(>s?q5xae?{xek#Uy1C)mbsfScHW!qq!A?Hl6x~d_MXt2;_jk z_Y`wO37@bGxftr?Ow*@#IOOO@rSF`wM;{7$5CpgSW9f z6Ye1zoG@YRF(iPVvRY;Ab;@staU&1&czfE~QZR*l-+IH!d7+8%@!*1K`oCW`#`UaF z3;gAarMY4BBSr;rwdJXtJD1{AJm0=AyoMT!AT%f>xlabXb z(5Kc)K<@{rQ|iRZp#RE+xX57qTzNf#QYypx_AQUBesKX-6RgJPH8}IAGbTW5a;f93 z(MRe2gl@bo(Zz_~k?wMs1)?K9Il=PRTV7Rc#8ICmx{=Z~Pl3gS$r>MOJ*F~m^wD`N z^suA8;(S622is$5A}URrH$s!zxRaGt4WU=NQ)ddgKoB?-f-rPR;W%_5G?Zl~Rka61 z)xiy%E*Ox>XdS`O!>FR=#Zke{Ym;wFx7(OnS?OmmpP{0ZC3f)OQ)rnbrKMS&SdVEK z_pmKF-81IXd;H+kp^qfcq<{@)P>ARVSV|N1Yj|7f&){5N*w=kRar$cXiS^JB(-x5dB@%V1x3)%*3r zKx^)MgMao>clDi$2QTvT$#TE#RQWULiEX~Q@y{d>|4g@A=u*o0?YB?}+{og5f=lqK zPnqAg0E1`$1U1REVf6k~Ms9w2b<)mFQI~!_{F%oNi<-afHHnn)|MLC+?~jp4|KFU1 z|9`Ed)4Q$y(1D19TYRTB5%Ta-YMvaD)BJyqH}2C-?f?Zso&~b|+m;cNC85`n(AnS# zsYdg3ED;E~PBv;xLT_jHrB@e^VK@!qNe7G`n{aJchWjEg1Mqom^wR!>j)>E(yLLy) z?Y0bKZ^SDOb3e=?4!dikLiAIz#Jx{Y-=7OM#(m6N|HE|g@}fmq7}OSRZZ6HGEo-YM zO&ovgA9BendWv=C)#vqQpc22>mI7 ztvo+H8dBXyL5xdaG74dxQjXTvD8G^6mk8X1tI|A+P>>iJ9Q3d5qjC}5U4Q1g{H^+I zJ>S1SLqFWs)N8~dKswnTBD)YlIN&4m>++MV)2k&A3?U%iwb`#}IEaf-W+C3a2QzQ_H#*=Z(V;u^=~7xF;W<)MQ@NY+ zmY3!UT?ouAG)nF4`xW*|lYI(T*4n@}VKy{H|co5YDkI35QtC&=hcd`EUf;*iD=9YoV8 zg==fwQ(y&wO(LSAP56Sn(7+^=lzztigHcQ5TLyginW%+c-bvZz30Xo&hV#uH;&XnA z5gwjO_a!=MiHF)l=MLhtM9P4#hM0!Xt%NQfC%8wDI?*P?4^EWJ=iD5?2E6B*v_i+c&G%_g>=eHv()z-1>>QK`JX>2UnupqV=YSG{4szaa(^x)C*wZ(P3~Ix=i`mkXdZ zNf?PbLZ5?xEfwFf;!T>0rVhA&reS|i91Uaui_n_7cMnaWBYnfgvFw&wQYwJOtTMjdSNBs;a9eOX!uqlmP}rXoY#WPwLmOQ_BK@pMDnoER2 z3$YZ~ZzQoqN}Yg~58NVZhx~UkwUp|j33)?mY&qK%p{1o0Z}u4N3*E}IhI&VSHg4DucW(r3DRUFD%XY*G z`@kzZOGX-V4!3m2G{dihL(0`OE;w)r2AfbtIOn-INg%@bXHNVOy97Wi_^us2t%T0$ zPd(GxTI{O25Mu!B9-tjUA>-914;3OEh7#J3E5*}Sb~qtBJZAFlVI2g~&Jf8Wt_2|! z3GGofGKFs&m5WHsfL{iQ6&EJqkU;QfbQp&ym}{i7SfB7l(2)%0;!ut}l+e+kw@3(M z!N?IwT&q>_IpWY@K1EeCI&BHlR>A2T58-z9#V;rKf8+i8n_2IL?F6MZ20g&a!26

XQQ$(Zj8800bGmy2aD@q+J8dYu(&~7Ah{6D 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 z zKPD$(0Y@KGxb=;UVta7%5J0E)W&tD!F?!)$T8o+xFeJ92k15wtu}s!0T#fbnjZ}BZ zSd4kE!RwXBPs)0nlH}^8U04vHA-!-Ky-)ZsL|UlG?E_*f96Ep#`@Q4J=wqCy+jsAl ze99WO9(c#v<&6E`E@rwbQ9b2urb+E?5s{5B#1igv&y75&t=TvdUmBBm_wC!KQs{aB zSl0X42_wY8kYzeQ-pkKp_QJML03caUs7d6jomM|?A<-vtKVX#WoD8c<6-Ckp@XO1o zbHtn7b72b-Z=tGc+wv{dmngI3rwyU)MCD`Uqpi%BK`@4ED?vm03KB>nbTQNps`0kNwqslBv?S- zwwQa?SL?&#`W^dL=2&%>;hCgf@w>?11X+6CMdUkAX<3o-j8jnsB+@O?E?(X>m@;=1 zdtgua=F7D#WJZDKMDWZ&kG;Z4zF?-AHN1azixR+4#DCxXo8@I5q zQg){(H+Bm3O>FSpJzEmQYE@=Af;?9Y+OR9mKe08Gx3$^g{ie6_ETCCc(>AVRz%Iv6 zo_y2ZPIF{7lqFM4DYnc&xLxB+wVR95B>`Do6v%^ujQ8;uIi(Hy9Hkikpcp8$n%R!X zBsj*l?Tzi$I1{9BskyqE4t}#_VU})>ah2*9du`PO$|}iS_s-v9oKqrLs{ix+w3rbm4Z-rRbum1%Or0jJn!q}Az>Mp_4OS>N{sE_MNSK*n~6 zg_Tddgv&-Qre@!vP)kP=(apULPZ_Nk@{WXTb9UuGZ4{9?zm3fNkX0q^n5HMQg_-&8 z`}ZpGjpplFrB=!=<-Yxz{|cb?wc;hI`>6JJ!|s^^iL_?A-kcSn;FK_<6t%>S!{=qz zP*n2xnAcvj`s4WNmPWes17S52T=u=Hi4ccu(X1)JG%#T0`_)*ExM_+Z(#gvOad*b8TV7ykq_0?%x}ftBF!S;^7~oo%))}B6_wiGQJ@p zyu{}Ml-kxYXi3%!mcFm47f_{qp_Mq-7<&C$9L$HKAtJuhb)Y_Q@$jr0IG?&PpepHt z!+llP${;XtheA_M_6;#7NNEb3N^IjxI5~bfneRc`PI0#?-KiD3&K31~D2}sd#?RZ> z+TPGhW17ml+%ENFxM`D8nAq<)M8L1sSbTcE`u5?ySzU=BK!CWjNF}k z$lcBD)apgLDe023bAdnR<50|bg}VS$W?L|S<$l#A`9A$4u5IP@MG0-&sQ{XG?7biX z9>5KoyakXfJ`WGmA+#mj$$L|=T>C+4v^~F|5Sc#DMpLn&iMmgJOMO_CF9OfD!YfQs zo=dXNEm~fGZCJuRv^7xp^xu0}^)u6}c=t{YP#qTMncHkFPZz-AqpGUgfbVQ(cBMIR z>ErQJZ+li7;8N8^pP+Mgbv-}PFZ_DV{oxM@8<6in^NNOqB*qJZ?~mby;FEqMtz5-= z1o#MEoFG{s5~qcQ0SJHGc}AGXP@ukd43(P?<_937#^bR#d9ba(h2CkjqtuIiBg5fu z^Yx0BSnu7t^-$asE&Q<+GmAE+sC(}Ab)(`bLkxrWSv;aoT$ zxZ&$LIfJa?5I>36&JsXBhYub>q!Bc$3q-GsfL|#P_U(d80zBWd^z+V@oF^qDAfWJEh?|S+fv_iK zP_4~X_3npkg(;n9Z55>le07W7rJauWMD0^F)Ai1bT1Ceg_H}q}Qsw!jrj1qwbvuy~ zf*r&tHHIAY=4u@z>;M-{|GI4QWF4h@no)%IB8rtqjvrt78%^J!e4?F_6tWa$YU`-CPRRCL^0=m3 zkdc|0ZZ{xuDso|m-0Sbwmq_|HE1 zoYkavEKRR)4}jo@(oP!{gN05UJ$miy_Cn2OsOt!uKfRMR9s9}usd7~Cp<7hRl)Le& zJRE4;w82n0g#NZb@;>7}zd{y^tF(^9lcse_S^0WlVPWMIq(fdJd_Qkx7j&jBxs}5a*b0{JKxuo?R=yXCu*&l|+05(p~TzPqQ8Zp}Lf+c{x^Z+Uj>N$6< z`r28{j=;KXW-N+!xHjy-PJtkWT$)l-v1rutC9a51&;Le{49dM4>M3nHBszyAtGaF6xpBkQ;CdEdKzRjt-H?G>AucOf!#hGO%ci*I=^_C)#n-x+Q?Ha3(r zf)YLXxz#eQh~C@6vvNb9$Z`3a3j%86zq=I-MufVstE?_bQ(L-I!6x$}22+zC>@!aM z(jG<`gXYLF3yb8+xxIV$#_JVIkzTg8?gTA>r)zen3dJU{Rb2s?J8DE6v+ZvXU_Npf zW;$6oVBF(gP`nYBE0tkXDRhC?6tXMQxS11hu9N6s+AM=s`7%*i}u8m5Cp**>0wQm>w= z>NwSteGa1Id#rWZ4DV#^@NRGtT*uGP-(28A*Wo&>6kxTk-y~I*?;sl`?CqqakeO)p zKaV`4iuk>Jzb;CK*pznK~5 z%z-4X+CZKx?F|QW%B?2(9~5yZk(Yv)r_-NX31lHVr$i|Jj* zd0m+LDw$#U8iCMP{lRMI}axms3nWyt$7BGQq zhK3X!4Wwx&f6V(J`;&w8(H^sU6Ob+CuCHD}pfu6W{FTE;E}QTkIIs$3aHQ;lStQ`SAO&OF>F=f9OnZSZAf7}Tb}Wwa=1=}0>8e7IK-a75 zZPHu3cm7Ogwp3;{-fhipGkx$07QNlb+%iQnQA7uCmBGdvGLW*${sDt5H_X#jhiftx`4%8WT=GxE$ zWC=PIkWoSv^H17jFO^a{82*&cxTqlRK#=V0geCHSlq#;TEiHqM( zTEncbM%Cp*vKBoFX2xqB{o$+`i1T}RKx=H%_nL#5ry`?iuF^4yyexmZRm$nxHTanD z8&L7(Lb9{{$mLhgvwhh!;0_UA3nVClbU-2nDNHUK`0|Q^+i@HBa7Bf?=ZmzowC;)Q z4=6fWFU+iSo2WSmBF#lGK<<2z)Uizg5$Lw0UH^riG6Hm?hY|CE?iqN=;5r;dtVw!wu|}Jxi!w%`HvQ4Y+xsr6_$n}iE>M*=`*?5X zCbIgg&K}fH{cU-kb>QF;1v~&%Yd35-f!X%>e>fk?E~i;MjH{xmMsNn}ok%$uHx$c1AeVPRqMeQsFB8iGqCK1T_-#xp0ln$!a>wT2DT_obw%C;jwVFl0$Aiub5RI%Xh2 zzebEzbBjE=Ca&yQasqY^kh0)&-Nf3*v4uiSO&U^+yPAk3;8`r|=(lgMUa~M7-lsZl z1$cVm=pzXb<_`G*X zA|oT&gzS(NC0Ug{vd8c7?mVyiIu zZL!<(+W_^bh91lCuJE9@-Vglz-q(ck9I+YEY}!l%ta7sM*jaWC?ph{xlc4ZQ9J*G` z?afDZSz4adgllD+>NmxDN-Zg+Y9Nr1!D_`}OwHYzIB?rc|19u_dZ{N;r(UQ>p$_+x z25dw~NJSk&mgLv6Omu537+6>yf|b-?n2HVz4BP@L7nP!#T`S73P4v8)-i_i$yOQR$Ap3dJP4jbf)PH2eOgn#eUhW6* z#rfH;3PQ%Nl`4yF1CmG&u*gB}=Xk$VOsS$J0}<@8wqnU06dc?;IOv5!j3QW6zg;n| z={c%W$j!G_6$dOZ~`H|*oNFs{&gLjNb-jvcD;4(cyob8+Wc$7MBy*R+F9 z!QoT!;_TB&bROWEPvaW65V3E94>~BHHh6GXf0B*7|Fg?Elv;$;;30>#}4Z?hbsyGM;`PN8aRHfy4Qs?A9xi z8Iys_VY~}0kmcioMGsXvSfAIUwD`@P&D+;Em@*(BpbF)J-qP$I&1}=qbY*tuJIS+| z-LqkS8$V>POwaA?{~nr%V{MnP1+PY`mOpyC#~uSc(Lq)W>?YVBo@vmaGj+J#6@4^Ze=(JIM_jaHoaTkzJGo^olrA%g`(yDr*zf!~O%m+`q@C zMNUPvsTXw@FnaBmd#DdNHes^B=EGUPYp^kz`jm^G4tE{Xs6d`g{HG%+f{7QtCV`;W zm=BX=1VfLCvHv1(NoOZxPEL;J*GD{64Gr5+eBk@-bT&!@!GOhv3SQ5updT6LJjS21 zwnFKm%Xub2we-uEJ*fAt7rPFPV6-S31xPo~GJ;wh9Q66|W7nIi3)WxR6O!7wi=kPQ zLK}6&c1%>S6A6(%cpCbPGmK?NGj4E%j;T)8e(8ym>WK@^*9Z%$xrGW`US9sNW7Q+b z`tRQtiH$QjjJv+O$ayn#-)gjS$>w~&v8}!nB`a&H&7bD*NoT>!1EcX%?*t!xXXpJAa4zvQtkN-y9j&c& zo7_wLAADYhG64<`X=d8LNU4|J??0Q$m~{R6?SNXvyU4oXNmb4Mwo1NN?-$)wSFCS5 zK6!^6_SuKH4QWl5n$7s1-dOVez0-$@KVyZ4E?m9mLiO8#JW=!4J+BRQtyg}m?aL5A z7t2*sEabqd z#b`cyqsc9iI}8G?w?N`e-gwvZPA4{C`-Od(Ee;xE;Md`vidVGC!Nt23ZK8(Wm|sxsjln53 zt0@lLw8UL|k!fX$D7XS7Ryi|P2;GXtiH+s5OuK&Jvf!q_wM2jagY-|Y z#o|BJ5E}nojqne-!T-+o@rLi07uL!@6%z^|N0m>K)A#=0F^>FizRc@7Woc6ZrsE!G&TmY+ng50#Yaq!5$;CREM$!^0CV^y#0iIP1u@F^yvHGge-OzGeHY12xI) z1Cm@fMiZ0XH?JyGDfzMg_ETj)FWjGj0rn^}RT32Gl3G1ozXA~ioW2$0%=O%G^6+an z%IE&21?UPR6z(-qnavG{9@u2>#z%T~&Pb^4ucKB&;sxwVGY-y=%IhBux72304CLe* z)}4A?tfx?bpSryAs-&eQGlTqA-)6bxt%l98-7buiO+msBo+A3=B*c zVlvo_jEunLM_kcOYcH>?e4!#bJ*8JF%5!n7MkM)UbI?1*F|Et0Mx4nzS8udGPz*0D z6vL-JAKPb@&~(mmhk0q{i@Mx>?{5FRH`g;Bkd-B%cL{U`%BjAsl`jn;rzDpcR!zx#0i+v#f2}kIAh-u zdmL&HO6FOb<>h6f#|V7<_|gyU6bK0$faLGM&6a4q0u+om(xE7Z^nm59%gV{?brBD6 zX1%K9QAY2B{``H9>sqSa)9>+xv>C(u!vEVF~eYx#gcjkq1BfDnnvi5*W`R`Uf4@Jkd!vIKovV#$ z2R^r257s@Vvb3}WUbG!4Vr5f=z`I4cst@Y+Qt+KAHU)qKo`dxw9u6KK?>1;ul=<7w zg+rrqWPRSMtc&&JOSMFygUV5U@$qsWe`W!Gtbi2Y?CanYgO$|0585M7yn#$(zaKRS z3bT%Mvf{NO$u0c#V5j9Qc;ywMXqk;_8q3SqgZYsLX_{X5mtq6Gw|va+p}NQZSlE4^ zl3Pe5S6A1%r@{=!uGhWCVRfRnRP3Gu>{h5bUfY4PKvuNh$U7(%K#sk?w~>OVnju9+$(l=ey--YD`~8;e6!4T@ zWaTy)p0{e&@#(npsFpe`-pYmj{5hq4)M5&XHL($~{i&HR<6jS>`<%cT{ry|%X_6aS z>Ftm-`$D;~oj#qy_ZNa3hWr|id)2XqY zg2WGiuIbgD)2SK;FicL&%#<`INIb_{ruS4Dy@*%dO1$#szhC(ZdhCN&(d&ahJ?z$P zbr-zscgR4)&g{hY4tq~QLP^DOW)VB>D%zQw0AdI}8J{rZT_>SXhl7J6) z9lsekF;{YT{kLy>*XR#p-=6`+hWp72%fom2Tza`JZocbBPjvqDiit(3n7?@KM05nqk_NADFYH(# z++j1Kfi|{$bw%<=`}mcP&Q3kNb7Cq|`ZIU;{V=FV&kbWS++Dvp7LFerc_nB9t>!Go zuIwiMJ6+d3RZlHviJs=_)xA(NOqOnTN0lCc?xh!mp&ed$Q?i;|@CwVx+gqTWduu_pLdoBnn6XK^69-7Jk*86lkE;7(T$4t*mOq2w&u|CI5as1XGrTWY6s%|XTYeFm_ zjND7F9%h_T2ABn`yV?K|vx4`KWDgy2_D92r?rak%z%d%$pY604y{QMSC_~2Z3|hSy z)npIW66m~3j0N-?qr^zo<5w>vTaPc_Xn7%MZB4@M5OHFfhd6==8$q7Vh(+A* z)XkgeBX=IvP>VSh>2Ug2)R;@E4rD1ui^mQmA(=c@4;ym_AGN-{+H2ANi+R@9W}x{A zYTlZ`n_KF=d>PQdRj=ud%{;gqhM@JDLzZboGp!)~KxqfeMOgE4Zr=?L_ zk{b>l;;14>ceJes%7NY<%;O{Ku1n$SODZoV%wH>SB7yBI!)m7Z&FFiJH?Js@ee_pQ zmR|WLN~Vym7l${QUhqX_zC*+2gDLq%Sqxs^O3Au7%EcjZzm;9owZk`6@{d zz^m^6t*ghZg|y z6Mz<;JFYvytv5i(L(_Q^M?1l;0)*N~a$5WerfH5JYHzZB@paK_g^QSOL<_veW8O4- z_Ik_BO240PUDwFK((eFYRNkU2yn)nY*B^ZwKUNa>(2<+pNCyraAh*3gSf~NZVZ!wQ zE?aYgi7@-}j?Q^;rWEqArr3&G2fGF(uysQsB0O-NY#qJ>4H`Zt-Kq;*4Cp%v%$JZ8 zXv2w1P)7y?D2NEiBVl|?G=#mYmOqy+r+(>CgIckRGg|M14uuKdw~{b!>=c;jqIrEL zJUCy#N{V(pi}+!ajS@yTu_*`-11e8o5<;kq7!RI(vH?Xa^qS;Wj}#sA%qa#vQI(Xp z=LW?Nuk#+df6s*Xf(0<~MAZR#C<;Wq2hOr%Mk8eWhjDfh#Ftj8#*}Eql!v;wDV)Tp zv(~pGRx$fV!1(G8B}dYhElHL+DRgz0t%o>6?+;8p)D$y#sBRzlQiNQmJ$5YdTkcMc zG#z)M>NAQmA)4|StWpTSBuM>VKcE8+jEv+>VP$0W1gKu^Rcrpo4By7yDjxDnnZZnW z$OLi^%gwJ3DI7V{)KM(4#d)b{J;DKmzuFOX%F#=5DQjG<7i;;!^t5COi!*Lc%(@ni?7a&LzlEpf&H^rZ@&qmT)g6tBp-yLtu4$#G?H6>}OUHi# zIS3PQ58-_BxTXmCuCo50d$IetS`;=}if*yad_Ghf(4giVKFp7@u?ffJj>@H}Tei0M zqoete@!9m^EHg?8_>oIvZ}HcLd?Lypx0#OMggai%Cu3rDIk=qxbr2qo7s}BOhoUVv z%2kyqYbXWWd{tm~{pm?8T|Roskjb zj=VM;#c+(lcR}gaZQF)Xz(+xPZo&&!me>=Z>$0#Bb~!n$I|4{UF|dvV(99ixpYfN) zjU!*4F8Sxd zL@#SOiZ3*@#_eO*pll$K!1)`z_oi7W``inO3E;QVk?_;RqpEggJOVSDNLQEVl|B0~$%oo~lbDO3r}}4R zm@v!}rq+>U+GThp`lHJG1YTcy<7Jpv4+lupaVx2;-3p%7N5X|eLpB>3G59fuJ93Om ztVKQ&Rn9wEsV!cE&=f6PURC`a`X>A~;!RCQJg3@lkI6Ki=Prtg5k4^eQ2T358VaJI z0m)xZDcRBBIUqfNE|t*R61tr9+*~=_`C~neqbdlEeH<@HGQ4(etN*U#n|bC0I`Y9G zB#XKtVmO%WyL09D-4xp`6Sc6#sP5jqt68+nL5R11G#Pm6ByzN^E&og$kQsXw>apzX zaH`0kKesTUS9QgI*?DK4-8Ca411z=q<>@sbm7~xDfeVuL_HkJDin-^!Cz-g!9v`#r zm#1V5a*Qj$aZdDk6B9Rs@AOZdF@b&OM@wSB#2hNTI+w9agvd71aCPs66(EsV!>@H5~i`)2@%m8|jpemK4i5F->YorY| zJNR~^R)h+f2Rf&li!(i%`8KH&F&1%?R-O@IVVfM6mX&LrHX?B)GBR>ax7{1H+0~w+ z6{0;wkVHBn4fLF0FvAu-J1??Ugt6CWb=U%JyKOuzNQ4lYH{hCX%=cEEOe8wwl(<={yV1n}9IuLcx~PzU@pT_&y8 zA2_CPJ@bPf-`4C+3G7KdulQf4u}ijUq-tC+VU|hW8}>3bDfW{ppUh}RsD|#18w~2% zTYWn89|$fLDIX}7n7aPtaov^cM-P_HO^Zg!4R*i5C>pW3s9V>^eosuesU}Ms8z=R0 zG+(-OiHP%1`r_@qClTrzLfZ8ESF0y-R?5oDV^mM{>8>p@9MUcFyPO-VwDP20TZ|;b zQINN>6)Zp>8ium@$(?>hdWH@K6*WKMFnBNBCllh~vEkF}D{|>(xZNf5ZTL$&FKvXD z;KSutt%_}hD%u%2qz@v820y#!*-9xs%VmG?EKz^xk!A$#EpxSog~JZF4}UVf2>wQC zEHP5NGHVZAZ6p5|i;7=5DQNl4SSxCHT5aOXl!9)Ff9PbroDiq+3gEIfYMX|`-k2Fw zG8CP!{qxkJHQtS2?yOnyrsaE2mne);iR{26PXgnx8?$v)RQi!7kK zxIrLiU4<|>z0A05LX?ZX8kWnfc? zw=Vsjv0&l41n-r1b=!xqp=1MWAMNMkqe82HuUBf|FfwO-KYUOE9lRBw&^H)^pqC?& zBA;FPhFRfYoX|42dd;o(4*f~|*W=?#XU-gTaFRcg+((RFLRB^mJ@G+=q|l;$2Qau1 zx}nGu2CLV*cVkMhs{2Fi!FD^1eDVbc=b;G9irE{L9x7GOUbSG`kv>vDcT$;ba$26Z zj!AW>93iKV9zT9S$X_u#NLoW9?3;^X_LUfy(>{^!a<5~dc0navowJ`_N3}_0Q-3sd zz{zKj?39#}$@cV%*^XJ_c1GIxULf$0;NzYZm|2fd4KKOv4?LAB{$R;nkKRdST^GFq zG`laZrZ#BF)Nx_l)pp;JBU?f3C6v9de4WGc>e6ZBGyHSnS2&BhZ=P}}I6p-(Ze2@s zEW0IK*5O8!RQb4BGqeBl8++e+Rve(3HhDhqzwZ?iYBSSehk(bi_QQt~KrRWw2QGOG z?)Uf{&pv&I{r5=cPQcekw&$nTO3si(4er4L}mID z&Y@f_2IdO7*K3-^drid78D3`Zx&~!3gyZfs`^DGo6$`K&T~5;0pL?V_cP~e~#UZj| zV9%pFzdlK#BRa3C>5X5v@90#}xBQ+nP#qWwSbp7o>U`gDM}~XvwV(KfQmCs`pm>1R zBY{vB?h>og-Ugj1<(@@0RDPF!bzLPCWoX^u2+;X;RlP%L9cWon5(Cl(JglF*TVdK1fN>9%rnRtfxrn^Ec22GdJG2O5MDWqm^*Ax zdAoetQ%qF!+jtKpLURC(Y(9LWEgZcO5ohLurO(FCPklMZEL8CAhsH(%B?ZF4L2`3< zUw_hO#Mq`+<=1f;Y3b+ow_HCZonH?g=RH8X^XQW1mxP10y=Tz1seBSzw|>39MeIFy zxfs+Dpb!h1WVC+R`G!t6Cn$Y1EmT4CL6X^{g!T-GQT2|5g`o(j2n2q}EAu<>OXC!x z)Kk5~Pk-?xpZ6YyjM=LXKiOZ-^!Is|=r(T;g5(fCm(NN^bt#n_M zGlbaMEF&_r#_B)0r8v{_q^Wm3BB$Q+!w-kXuBk`jtns1j&k$Vv9E~=~4ev@SSv?kb zn%4xvB+3BmU><}U%54u%&lufeVMKSpy3&%E8#DI4Ea5wmTlHvE{tK&OK%!Crvqz;L z#tw-lFa4TAW(PbwG;j3u`;<=@2wwj2DS0O%#FU&53B1_+e!O?!efUnDGo}USt!aK;8z^%?(A{?mb}0ixC>nn~c#NnAjD;V0~z?VTD}ng_9SsXQ-3`Pr7FoGpeS@ z1+Wl+IJo|+^CKwNHH(}o)}r#ADa9NLd|*vyuHfP1EP<-532O1W$P+tB1QJ7>ld`_7&F=g(&0F%d#zR##DS)XbXcSJ6{H1;%Lz z;+#p0x<~s2k&*V4u=An%CX!z4>@Sp|2&W2=;mrG{3H1$;=@!nf8+OGKvh~V%h2W35 z<2MjaA&V(V$+nE7<|;1kUniM_%)Em+d^b5^a0b+U>$I{R$k5CrH1jCDYSsJMJdSK5 zh%3{G@|5Jm(%O`L<04>qv#!}jrErYoAVfo@eS8`Xgh;44UICqpS7IUuiYU|D=L?+{ z$fcwzzpt&P(N#XAl7y@YdiYvGK!zKpwUvDpQOlYIb2fUGY_sqwIGM zDROn@h%Xv@d=poEc0=Es1A>#o-DsF_)mF8oNEw8k$aWl5m9PU5 zBB@Jnilm`Rjqowfa;33&oF7 zCsek)n5%c2h{#B>e=zF)DI#^>BPLfx|5g%!;&Ip(sZdwQ$;pj$FX)m=kbM9>2Pach zNQeiHxvNzVbpgwmo_?Zlu=xGrH}5ZrN)_S3E=Q6lWveqDsOS0MEY~aZnAC(=s;t~U zI!NtkA?miKh4sl++aGl=Y{?Mf5@<9$c~NBq!w5^OgNyegS}8UYP8MeK&&$k&G=m6_ zA*sDMbA&f&U}&fhm}^Jw_{AG9W6O37@5eioUV0f+1#M-0Y?W3+_k-*xuRiHnq;h-i zm)m9lg+8h>_oq*p5kF{QoThr~d0Rt34f`EdF2T(=e2Hy!8c2Wt+NU3`wB&NHj!w_a zcpxUDsc~TdeV-ecds$hpZ@v~#JNjWCy%|sAd4+{az{3$@jt|c^t8s@CyXkvhAD>U6 z3MZ_0yblvqlU0&c*Z&e_>z+Jq_LmIlkbkv05=d3TUG5)-d>zq><$so~|u%(tpGrWc5PfIqH5 zEo1sa+famH{A>%o`P}(vU-qq`7hjHU`F#u+5Q^>umuIHc3wtY@Zxbe@@bHT-SrB%K zQ;?8b2*)elB3Ra+sCweON$e10A~7vL z(f2%r3h7OkcYSBgV^%(%m?ilW_954b^5!SgsF($IbPv|F#_}J!cI}#0WYMl{t^Fe7 z!|ie35>m~IZKcIGm{ zqHqUX+O2%3W$q|;FcWSCc_kjP5011|)lX!^x%3CJ4B5WSRAhy1_vK0Ci(m=Y56jt{ zH){=>D&QeliMUV$k{(F=iJ65lo&by-jV7pQa&ASEpbM&sohL>Km z4@{oh4LfOUV(7<}7{NZ1QZ)B-u##EIVCRim_K>Ju z#M1vCpB9U_6K7{s>f_os1I|xAI>$$fM!m?B%|9e9{*b5{)6@IVv~!NfiVERExy!B; zCOT!=y8HOe?T;Vl=z2JH1KqTJOfNbrIU@S~goX>t{hZT(v;YI;EC$)QM)k2t0(hMX zA1t@4jkCaiW++@5vT_u7RrZ4Y9~la7xBq8CV@{Rle}o9^%RF)DA7PR8R&4(n7HRg7 z;vZp=x3vEe7WuSK>OaFGJ0pX$X)bVw^3_WIt!Vh`AIjTT{}Dy`zxwIB8U7JPIrz^n zD)fKwMLW&eR1sX8pc=Z^{pHJ-gFlNQo<@nCrSPu+T|-yP;xD?h9Yy=<*5Cg1iKhPP zQuqzVIwGdz&K*JK!QS3&Xeyo#{Tv(HhD5$QZwVkW>B1{|2vp33v}07BBS$3Ze0lrJ zdDUL_WOZ&dz08DOjC0n`0mhXy!?`JQ*?6%Ia#i@1wzGJd0lYgZd6ErmG z{&{(Cr;Lvo>Pne6S63&iiyRfcPoeJTGN*8%O z+l)Rahu6lFEqm?n*A^i1>>MQ3TsOLW4pUEzylI3FMF>#jWs7TvhkW_3$0~-tgh@&Y z>0Q0kg#8ugUEQ-KI!GYR!g>&qeBaHj0R%>+$JU*E+k_LX`YLyUxeE$bd){I~D4mID zG+Zy9$_ z8c|9)3xt0o?9hi#j$O{Rs6d~plwe?9Tx);U>e}e(f!Pdw=f@havfnCqLV!&8rAdU0 zcw!*@&0)0gU;r}Iqk%2pVrGHoy6yWS8@HuuyGqdY_OxR^Z)-ta?+umxrQNwYh3_V& zn#HpjQWBll{z}UFQJrfyDLin+gG2WE^-YlM`+xlCPx5j3J=1pCav!E=Ubn|=M!#K? zG|>Jd=ksn!3CXvtqIr+-p$$Y?1vKorIybBt(*!{}(ly6Jx{8|S=8unTW?u_7qFam* z__>pyta108K3Wtxqr`Odz!sj1t8P%NCtgA{>*#)IUYANDt*5_B6Ycvm%kOf zu*XB=8#PE+JgT%5q7O7T;^@G!6z#kn&`Sw8S-fsMVfB5(>npxNXM&SrAHDMm3tx5; zi;PrseZViFtGg|M=6ZXNv}I=|9TL~VzBOJHWTHYErw@Et--4A75<(s_5(xG6;7(2g zD}`THBD4-89X9t>dX|*OaYldpb{-N$E?B!g?Wc>Rpax{0-r$DDLkcgR%GDO{1Iy8? z82^VaUcKVr`4q656LZ2YhDtXlIEn0uQ%#<(^Ao*9-3vDPs$IWV!jke|n_=cS`8Jk~ z2rn#OOQ`HbM_LML2K2((w?{u$OyqTFx+0}hHsJYgfge{8#oV4mDYamlt>xk2R{`ma8`hb%{369iS-bIo917(;T7uYxJX?$JgzNbf z1So%~Z9x*iW0bgD7d9o|WWzKCY$H)@#PuY&?Y#X8Hn2v=+V8+=l!e<9G}}57_B-JT z#zg36DL8&!VADXpx2L=ZJiuLKo|5)*a&CdkHc%ANg7+ zr?H2Fot+J=jG*bK!%hct>p%9LZa9&I1eB<#Ln3Eyt-RKZ*0a!2Gu}qax!5`Y$Q#-n z-y>H`+&C5=Mg6rHDi)94Sfa(}I`d?PiwK&<;@fHwjv5rc9pmhi)z&*M+u!Dq!G$4$X6fRSnGSmaSGTH(U^aAwte0?VbbzqA5=ilu9R37k5@!B9O`R3H@ysm(BHx$ejGJEM1D zP0D`VDX6D)ASO8d`R?5-A5$+2m-oPcbW~NX<-jy&SYV*rMV$o>7x+AgSQNBDB+?7` zn(>gYqU}I>L=OnJGr-n-XQOe+)Z?!C#JV_i6==lhtGC1*&$YRbgJYe|vA3H}TN8UU#Ik{EVRoJY9 z1TcZ5GP6Y&@gML~oVJ727aib1o}$Q!AR&uxZ)Ad$;3=(PO#1fi+ueXE0;bQ;XZ%`w zFuT~g<_a3=(KnfygkpwC+_I-g%%Z2rAMq+r>$}h^i@a1%zK5s1OFX#c`j5$dL%VOo zO`)U10x69*UTO>q?^u&3!?qQRl((jzNZoo)M5Um$J>t6B4og`zZq*}Nysph5+0@xt z0d&K)DWht#e)C%SYEUolxoN0=pwSuw(B^#kgs_lCiO&hrR^5z-zeIN*mL}VFr_#mY1I& zs+`3e2T8| z!VKslz!Jusw?iyHr7{E3u-+%DxoXY~+r|1w|6t;7OO%o8*>Po>%nb(yA}~Y-kA-rv zu@#l^i9X3(l0qWZK~SoMi|_k%V4GXWcb{|2*N4_HGWj#%9mY;G%(lHTqRuk!qDR_K z=i$x4VPV@6n&+M66%(3A`q=9$at~-jxYm}!KT*vQOzCR_uCA=VI$FQ`?IiuEFZ)1_ z;SwBNi1m+Ea5;jmcoJT(xb*bx;FPb=UHqHP;7@aP$uQGmRks26aTm}g_zp7K->#r1 z?@>G&T)d*RNSSfsBW}N5Oy|(dv)+g!ZUSOU!kUk&?@cd@#53NXwf(bP3kwcT%afdS z5l8l*E}$1O>$pl=1aPEW;W^*@zMc49|hG@l!M<48q}-pXOXkf_1@r9 zq{py*yEo{MUE-Jza93;8H0v3}X4cj|CbuQ=;eo$AKpm|2-un@Z=sUjXoQtXm&@$J3C+8J(=dag+Z7k#BB2KuC zU|Rf+TI~Hm?Zpkb0Y2{@YGp^!P;$Kd;PE;}-&qS8r+I_Z5(Be2J-CX1_PTf#^XnGf zQw%MjRxYx&(?s zgwUsIH9o)e=EZT_u@splO33F{gmHyEgx{wZL%(FNC2OQ||7zpo_67P6K|dw`7U3^z zXv3HaJF@zFUg-VZ*eJ&W)?A0OMIFwQ?KD=h)+wO&)}I!I^2^TAv9<<50L&PZLHKe> zBzPeZ@On4Zwt5f~IIWPB@J26`+a9bI6^2oe+`#iNmU#^Fo2BAl#B<~Ny#UHq1^NXz z6_Y>h)58_?@iEdz?0@20qPVkz1PmTAjvKlI zA^C<5);V(+*s-?Kv(}3(5`1A(-TB6TL2gMk*~e@^?- z*UK<)KVXs5cYgBeNn=aAwhPTx5<-Vd#*3qoa&njC*4?d*@d2#B$>q+S+lB~WOc${^ zJ%m#D0wM3kg8*v z%F!ODHyeUElp)kX#iz!)WZSwjS!F`>8Hi+c2llnRIGm=!9cs5Ux(ejV*k-ltQ*O_p zyC_270VLvPqg}Wigoie>ZeYWB7XeX>!GYkc0*Oihm`|R5qL{Gb?p-pJ=}7O4>z#&z zo{~v@#^nWAw?2ZTcp~@;B2k36$q>IO^LwpAv8ILwebM4Co(-D=q)J00rO3J27Sp477oCOB$TYI37WKh#!sH=7TSoZkcySI)IHNCsN z70QDhXBxGODYi7)uS*!Z<2iWhw}V)eA;sdEvbJgFA5@rxGhSJqxYC zd*g?iFZp?{n@4Bbj*Dkmtn4G2#vt~db)F-e+Gw~Q00w<2Z(k_LVj3T%q3JSQP04e>xOiR8Ip6Cl!Jls%C z;WZ)FlG*u?psOB5Fo&xTVlR29ATH^+Z^e;TLmgM#q2CD5+>`kl2!ocV_(1{5*glQ7xBz?DR zgCoNkep>dmK^c#~T81ckfWG(iqzqO-j=f^oK|xL)l?43JNv!&DF((fWKrl=^HBPa*9N&Ozoc=yB2M4J&Z>}}fvlPYqh8FdiYG$DsCZ`{`}+FEJbRL3a$@M3%t7^H)m!)3FN6%UGzH84Vp43j zV>nM%i0E&k>A^9~M^3PSM0Ng1DYp?afDJ4Y#OwI zUX2761zd$J(6!)fXf{>nyA=Zc0(V}ux>8I=B91!ZE;+!#aT@e6@J3{a9mI8B8+lQ| zdM*wr$Zs)|7Ej6SiG<4J=cH`&njnEY?`rM|SLm~}TBYZRsxB}8GC-*ZTI&9*R}?5& zkD&91Fi*iNoc$1?KYwiGFup=O<4MjcW+@D0a7S^X|M7XL>|7vGNWZmWix3=E+AZer z>G}c{;|>pq&oHgxGH&0Lirztae`bW>903LdsE2SxI5~-muiQS08O+xzat*aVLjq6W zNjPzPM@H76Q9_!>Mnp|zzZH+KF;_Hpw6(QGbR<2fTQBox&z?bj;`#jfbJd@9&qOxE zV?uP}Zm}Dmf$-Lcli2H~W6poQtBhMRi7l790bc6j95_xzN|EaK{$WuMS0drT9UoUGbEIqq7#<@s_~l8OC@Ug^D!m_d?z*+rG*f<62k z0az7!=+So_?LRFo*Mt1Rm1~~=dOsJx&V8jj3tzzEEDSmnozu~hdtNR0K8lF4yJ&s(kbABJdnl!-$Spqq%^6KB!tqDp z@7YEA=EnY)pac_nV5qk|2`fJAyFRfD)s=jE}3dm zf%>rwI0}>qdl{)orfp7}@OQjWs?Ux}5S^fxGcCn>H=*=$^#Vv}w zKMtu_%TKhlv`}n1lYEK<`@WH|nJC%V3?^&&*JR)#LNVk6#k7u%GnouSHAG&-q(nFi zN{QIlp@u8I!#ZZJ4s&Ck@L2&QpvK8onPn2a-tB7P)1?BeogdBYACp!I;ad6qfRLB# zsi~DqXTvapI504yqj-(9iPEm?M~8Q|ntvr#Mut@&F&=CE<|20}_x~hIo6B=XsYj?d zGlX|_ix8IHQe8>Ies)M*c9|Plq)gZFqif9G!Ta-;#CZg(jQBS>@W+5JaKKE zZQ0r7(im0P@y00a{O2q0ZkIxzYS?O}ufLB_oTF#$&Qr^>wCc{s6ScVLH; za8pa!3=_9agM4am#M5?{9i0Of^8m_$9tpj(B5?Zh-^n(~VG=xp* z4j`+fEB~FLCT;;8=ie7ji^IDIy8lWrp(^d3k})axlHx*}a8-v9G_n z#|ow!Viq0_xJ_=V#piBd5+IZ&dLaSbLi!Go{Ui5H)+Uyx8_C?RItKpQj6=x>1R0_x zs)*=nAk9_~x&GO5h@QBd>0F(H(!Qa8vunjy%d69E5QrP+Z7I(+wm}o_1#;Z*^Q(d~$iIy=*XC-=A5rS*V zasBOoS8=f%&pK9~bnN=jT_}8Y^=mG~KVOcm3;Qx8t_ZZ7IH4BjTqy{ipevUjwS`fZ z|3^(ZQzsQ(gg>LF<(Yp%m3;GvexEFcV}J=j|8?5V%q+4=EbG%-HIS{phlL?f-wg52 zAhF3X&xK(bwjYvT)mGIdp2Ti;>>+U;9tr?oLQbnwwfy@}p8Wj7H%uQi`gueeA-Sw) z;&G(V>40!lfwOa(BL0DRg%u7ehsC zHS3yBu-ntf;!)-?oYO5hKPZP5PO+@3(_OqoHA_UmnJ-N5O8nXv+53lM6r?wdD_K9awUTH?B>2m zA_+qc+3zy&K_Z~?0bC+`G53g#t&h@bc6^PBm{is;o}Xu;qA~%&#$!S`mwBz{vbqs5 zrYK|pwIt>bihu9hd7zwNa-pF^`WIu7mHG(CCiwb9|1_(_$Ol5aj73W1a3fQTNCh$z z^I<&oFD*c^-f2#Yp4Fj?>ejz_Ao@jwJ+%1m;SC}YV{Ae6c@SWx#_xd_>^TxRqY*;2 zj-;JW&#pC&tBXby`TSfcqChE}0IHh6#@BKZzPO^!*@JhwJw9`(%!vLZo&qwy(IQ># ze!G1cwE6sK?uwTHM5{+^%$jmTd|a(K?`w+29L`vz@2bKI1w2Z_KAW)~$Da20`Oaqa9u(eN2l;Drm2|5<*>W3w=QzIR$0Bn)$h8_HqLCn2hUMwA z5Cw2B>V*A~_A4LFo4YX>kw3Sou4jow+$sKyJz3eDUs(6h=W^_Dq&`^#Fxf3auknlK zDHKX0nnnv#bU}SP9gpr2euqFHLTujEKQvTcUw>A^NvS*yh(6%OSiqaa_r*~?_J!w( z6Yq(0f%}N9^2SgCkf~nQ2ZIKnvoy5oGjSvU7DO41y(!xz4{0^jV}!|q%9T~rPG#at zr26Xn20AtC&t}9pVQ8?PKBbV8tAd^!BelKIF_1`DLLLCEm|W(k;scM_Y6d0T5`WRI zoN?kgyaAymMNfZN9lT9NCt`%<%zh%#^kmvfd}giG0hO7vZ(w8C&-r70!OASDe2C}? z{!khf40IWXNgqI5Ad#GyxToJ!q&wNH#LsrzP5=sg={`Ch&iSD?@ZQEnKO#o*!m~m8 z0nIlo*jpPKxbfI7^{jhm)pw96odj=afEgl7R9<_47^c$j0N+qP3}^`ErlIA(a7J& z!NCksnbDy$7S2z*s(@<}&82Zy4j-sJ4~35OlF9lzmQ;4#L?m)Dq0U}$DtIaKJPs-W|%w=l3s*>B{e&p%k{kK84om$F@4 zp*5vs59D!c_Th#KSw)~-l9CYLqexj#!WO=Z=}-i}4~C7P1c@L3KnM1sbJ{!2 zI<}L86GC$PJs^<{ks0*|Y~k<3Os~5@nZvpEoLDk=s8UGb{1s+WLai_8cDVg(|90Pt zPW#D77<*61#(eT2I|d4=4^SG%G&R*Y=Ofe8Qj;EKDXHW7uyM{Fq&O4Npvtrw@IYdJr$q?qfz z;N=Q<^~zUoJ5NY)_R#H1OLO`-mv7#=!0h}&;}u**yQ&Yb)dDuwvQ7#0u3TIy9>^`hqjJGYKDL zX9ovG24u^t5%`5a%Q0?xf}A4!3){9GUL5$AcguDE@#DM5J*zy;W}bO&>OguIa|@V*yU<_~sqt7Wp7eZA z)^ol)^|yt?Ew*YmXhoHyDIIWQKsW6VqcyXO>LHFO?NDyIFCz(w3}OMrxbb9rF{I{x zvFkCCOykHbF>{Y_uEU8dqo>D4MEJw8k2Dq)i0GjpQilkDJouoq{^U}9{|L2;F|AzES5NUd#L|3>VbzBq z=z8&1;~H(p;M1I6jiS%WP7lfq-IIzrg<(E^I=iU|xkm}U5e>^KgV(kdqe-Pd1u=Q> z#hx;l_Yiu!XTv6&Bcfp!UQ;X(m0^&4o>aea(>wm z89;(lKR3RY1e*Q0)%SRr->Pl5q2O>wLm9HD{cp2Iz4$s=-hVAW0W81fz8}qV2~u-K zgb(C$gItFXX6Zn^Ug!0||BjiU_@iccXTX7mEoz%}M?^;lps+#w-zHKCT+VRy3o-dB z`il%aRKiV40lf$?7e?_LJ*(`*odcrnUf+gW{eMwx?WWnpfQ4CH->)dGy|Wo(gM6w+ z-DdJs>z)WPW26F7ygk8AZ57Y{@Z}2?kXPC(Nlv?~AB*r-H=l^!x27#oG3XXQnExP3 zR)5GZwM`*vgUy1BAu(BLc-VJgx>#0Hl8ivM!0Wm}4zn`;^en|;jF$x>i8H=+B4rM@ zPieZoOyh)v7mJuq1%{zts|p^T>rsv&hBT}$T|>ToC7=|*#RxPIAsTepl>8Nf#W7~2 z;4Y@1l)pqN&x>KcEbxte?>BohiBZ&x$uvz{HA8sOQomC<)? zsaONkBWUjZjtUMon4KnoEeO_7n%`xs2N|k|>gjr|;p@U`Hrnz3?sWA z9YIJeJIy}`L}^B-JNt6|hm%F^rU>32cDxj>o30#Is_4Xo1V*u(PA%)t{wix=sj1(L z>H+MCT`3{V61Pp7;*9CYH=D4w-+eiE)titEq49_iFxg>ko!JY63V>8C(YH`6@TvXF z*CFI!pM{(I;F(Xjhcg?g%H8VG0NC6dx4abkug7@AmlRwu1Mwr5e*T zvwH=H*o>SqofhT@eG^nepowk9mib9nfgQ`AIYUdOtf*Lq0uuAB`QgaOW;=VLuM$@j zp_$FFGT;nRq-%(l2!Oez#>cYytpM7yH`kpX;4bVR7?4V^mPI~30;(vU&m5P0DgM63 z{E%4ks4g%?q63GM;XSpGSayx|Lmy9SmgT6Xw^x2?b6q!o`lZkjQmX}FLWc>upN#b4 z%wv7c{yG@funRLRd(y7GH0VJ;nw`8Z!6T{KiPA3Mj+^kaCXJX>fn+XEYm^P znth-Iv+O1RbVGZ9og9Ia7ubPkwCh(k#!Vy?O|rl}32|+wiI!qw3!8{Y*GS(%jAJDV z-ud}?RXr?1f)6a1xoA&?@6M94uo8@~@#c0tLTMyKr$G3U>X?kkvo=%#u!!N(= zz6~+f6bVL+D+hvVyWj3P?D{(JH}5l%ESrX^kdM0q`35gOh?3TyevzZYk$bn1%lw+|n=O2!kB**R>x#1SX=VrYl%K41zt=}au^y!t6uR2^Fyiga0J#f_`#lUy+K?wY>$T{NC;FnrA`^;AU z+@Td0`x{kT|8SiJgBQKuM=|Q%B=Ln<$w|2KU66T_3SQ08aXlm`EW7(xs&ERO~ct8=j~q} z{wGhWNARR{LVRSzcm4ODl7HGS#QyKtFaA408JXgrq?&AYX&XTU{?{LedlL-*-_0HW z{ipwL>=*ydXY#s?PZ|RYT>%1z*&g`_Rl9)Y7&T5`Kz8AaiA~0a3Ddw2l*SO-xRc;B z5G7W7C_2x<+R922w;d*jv5V|cnzFrh%UvIuc<(|bJ8a8JO4kdy$3kf zfBQauTM=cH?3GlqSICx4lsz)a-Ya{j$Ous=LI}C7>`f7p?9AIt_THQSb@zOq=Tp!3 ze;mKx|2Y2l;W$1%al7B|*ZVcD>paivynq1t7xh_37S#G%iI=vq&fFZ=&m6V>4*X|x za&m^ah=|;w_sx*VU0~n9ay|!K8>!lqM#GhWv&)yTzVlGg)}NhLN)4#3?umeR4#e3x&VSm@6<1HMYQ3RFSnSIuP z=`*73OP0%VDT2Mfw6hqyxJY@dW4-I*N`kI1v08PyTK@nWvG^4_1b*kp68`BSN4QQvc ze>nkxquXQ7`nN%ln@<49nK4`f`8))LAI;l`dHP=;hi+4r<*H}bc=&u@1XDzG<2`U> zm{?f}2BHLAoC7DWS+CEMQ~d)wbm!9)e=%CX)DVhB>b9Of%B!=srFnTn#&o<;RfH}B zhW^lHs@W|0_~pcv|0-EgL*JI^*Jr`?xP(4g-|G*s!Zc{>_lGq*q0hlnQ?w9!8Ka6EevejXf-Oxm#|^SXzCPSB|iT$?6+~% zjwbXR^YFB4Gvh%re*6AiB1Np0gsO@J3^uIMK4CDq2ib^VK7&m`AW*DuL=jU^JW#FB zsZulXEcABD-izzFBp-2uZOBNeh1eJs1%^(ksi|nT6ojf6yCB}r(N0Y10*k5Whusi= zqU8+$j?!0n?{Xjxfe01{@gcg!m#`aNlsY{AUuFKc;PGoI{O?*CGqqK} z&hy%8W;t*CT))u{rB7%k?uwk>bMP&|LV!&`H*h?OoYG?Ubbafkzx?t=R*!R&T1xtS z)~A{|2%>?V#s2iUE7TRLV?Zu;w1e_PNI-?mnC z3^?0VU@twk`?R4kO&Ev;(EUEBIAYNJp`arJz=hyz^90^Au`=rY8}I|tiK0_v^Bl-K zKLL|D`voK$vI414FNbbg2R02M?4P!m8+R z+Q<$xOA7(-?F=p1}GWy4$bmg|}s?ONCo8CPE zU1}sjMhMt-I248fea4T*wxHGmVi`<{?(rc-3L5lYYgsW%( z;q#{A+!187r9*<1m7alC7!AvHgW&P=3_@vR$dfY27@LL-oP1+#Pj9!#v(fgNyn>|d8{SsR{Ie%s2h-mh_Ky~=abJp1^PV!AG` z|7W+@m>9;Y`rEUbPRYj0L$B_6v+G_<-OMyiHdD9`g+|b_4_JnA1nDRr1W+x+&`C(x zV=@Sd2s_AwcyS7KYO&fe#gx5xxL%LUsXADhU#W~rN`B;SA?a4BQJ0V+jid2G`p#Bj z_}p$Pb13%Jvy(hjQ6D66YU-|0TsVt)=CcnLoiwS4gtX3s_|c@Hp*Kl~OEw2@>yUo_ zTPob5y_$Wzz22V}_dV7;xC~Mbe8jf*eURnIvE%(81E3DNr+GV=7d1t@>VbO(7k6^otF1?~O57iX8Z-CsFKn3Iyd2*))thp1 z&hT(}AV25HkejIa?uPlmPxHe>JEOL_WaI7QXG7~+kBAC|#M8IL_ghV%bdfsQYhgg| zr2b^PV11IvA5X~XD^IjM_U7j1+}vCjW^`X9rBH2!J_j2c+k(A-_Zbtu69K(`*$utR z3K#6F=FLTR22F-}vlJPl@yN)@N$`GP35sGG^!dp3Bb9S*gdZ0tcg})xjQLQqIXx=w z^g%}ddPwQ_eBtN$7T>>dA;)ENmyL>Ny}VG{`LirdPdKWVid?N&MW^_}q+U0jd0tlF zD`xlOu54$x5xdIQK1UI{mLPJ&568Z(R~;IK$JPm#R|z<4h?SI_5TD@0dQgty78DGD zGEt)4F>iXmt#o=5fTPvbdo68kzZ{OA`uWT&88x>HjAK4)gklat_JX@UKUcYL-3m># zuR05Mz2bY{EyU8>yLeIjyu9I^J~PE=#?o=-jRgYHGtWooF@eE;Do{JG{QC9lE)^Pu zn6>2Hqsu4LMk`;~%SSM)MWz;%N!K$K~p8<-;ly zj-;c-L5w)JweR&6B!6)oFnE@7dPFX`m|I+8WSCphYu(=7E;#j^*AYE=GBU3IZWB}P zARhQxrDlrO0T6C46QJ|kBhhziszyIX3ec<6m9>Acd;Tpi zv)yfJ@G;Pnw7aA3;`y~Z1tq&T(Y3kS`s*C$h=@!)Jai71YBoDi8q|r))oF!=7%4}; zuCJk|(z?fOl>6>VF-yO?g9wHMGigIce4WUNx3_oKz`!#dHm&tNvHjM&51gDxQckwA z*2PaZFZwK~pCanVqZ|eG-RPFbe93AIqxi3$sHYs@-ceSbe3^2DD{``Tv0^f~z7d$5 zrcLXNj@S;O+DEFZo0nv##*7OmkU3%@{wK2zw>A4*m+kmgw1)kb_X>W<$?oSar?+ub zld`k35AVR%L$0;hR^LZKK_Ov~)LAkb(Q&_4Wc$Fz%y+x5B`5w_cLk5IVJ&>Xo%HpZ zxG@idQFpJ|_645un5dR14)1}_wYy{C;>W$>=t|wSs)1TUaw8vZI-j-6hzv8*jeQZd z>{oGq4K;sLlP>z*6!e^zT0=*92G$^+NS-8 z-F~O0(e}_CY?l`$}va924+x9=oEB{KWO{ z-|rqC4il)EJpWNI&tpC#9%&V)e*5Nlbg6Z(^*7_w-13hf16o@Zj*iFuX$t(07g_SL zbrwCo=$Q}D$`0_Fn^E+2K36?W5FO}68P0pDaMEeqSRS@`Ywm_6>@FLb6dT!-CgaZ* z;)j$Va61-;PJCT`eL=>BA*MW`8Z1G=t4DEVci|1WTC6bDA0mEZFP}eO)_44jLqSj9 zJIc?)gPGME>b=U&E?NjC5&2@Qu$}OTtbOvg_9w^38F6fk7#@!j-BCZhi7Gx5d$lSJy`# zd6N)6TaWkOC$9ig09FpoqAEKL%|7<>1pdRJPP&$c222nkaEbU}i;9Zk1t|)gMX%Ot z*W3KLKfdA5cLT5eaGL`5uJzH(@J(YQ#k$i%Zj{c#YCP9)bF?NJrVa1u;r(|ohq|zj#_rhtH$Fb#doY8 z{m%l7$k`G47!wqPBh8p$^j`asQBiCW;@GA;LSH-uZ~S=0A54129X?Gv|J1HOxHL06 z+g7$XnlcXCZ18U0_2FUf{RqQwZ7;Hq(aW&XY*xjeYpAdG?NerOl7+*G?H2+^0SWr- zo^%{^f~Rlnr0PHO!|14~Psh+tJfH{b7yZfFGnjImN+$f~DtylxAG_Bdj>6P}CdDh& zs~>pa6hI#l9$-=ZupG7C9py(lezH@(K4>DIw?O&4dv9D`m%1IgAlDx`{}{l1(QbY@ zENv(EQB(EU_TjL#fvc-4m}ZV!zT`B#VLh5DJ1D-GjSK^`ZAx%Lz5!ba{!#n*(fMTm z6HlMx#c>HXGU3bXcoL^ojdNab!O7fgjZ2;%DQiz|RyXsY>UO+3rk&@TpRgDl=J_^P z_6;hRI^n)^7QcF7U0IaVFXPtb$6xh1o`Lkx#oaxFvvCGiUUqj&7gn8XgXwnKAcS4==Yq^cJCm zo*M{_4cx?vHM zQ{o2KX0t#YiNLrI0l+2rK|S%OGUT+=uacditC#f8vgNMqv?pwT;{4@8i8yk!$j2X6@^>6`6Lvb+l7n-$XsOb_UKy z@z1MA9n|Xr{+s2Oq6$h&mA%idh23L*3Mx0#;#=s`+M|*Bggn{f=d2+7&wA%60Pg{D zapuzL)Abq#Zwhg9#S5OpndkdmY`|tff*}BO0HpNCb1nB;Wt&IC6n#x!-Q}aoS$JFU z<-=(4&`5CS{ZBRZ$cKFS$oLlQ2!f*i`E@zU?O%z4!(QKx&lBOX)A!{>MI zj~{6L4lYpjwRGzqm|8ab;Td^atQSI`PVyr%QE24R(gaycID%Ju7?T&5;m%$ay*PUj zy@jMctBcyL+ZC-?KoV)*QJ+5z0Not@ITgu z9GKYG*B7E8X*M!+Nb=$SiF@56PUuyEtEov6AJ$7hqM;~!g;-(_2%V`k#5c>ExdlZAr(rY!N}8%N#r$0X3kJ-KMv zeRSJlSa>0zXDQ#kZZj!(wNYgBN0svSNB=D|81=2L-SsZ1@n>z*4Sm}F6!ZsOntKi8 zC-W68SG48~+$jt?U&pGpZ$7xi+J_!$F5D)$~PdQ=+S$MAE7a1e_Xm@>LUo1djc>7I}w7hf${$xZn&) zTT)s&iOk7wn2tZCLkEd$>`jhaa}*FFXS#Yq6co2oW>9^mpM6uORe0Q!((h=BKK}d% zP$N!lw2g;S+gFgZnqGh+^NA<)NAK+E+^VtGJ!+PUSqqMMq4*isf7e~$mE9q%ib$LM z%9+6eCRv#DeaGK865Ag-Iuc`HVL=~3&LuZt4)7;Icfj6j6hD$0@tjT4jHQoiQDq|| ziKsgYx)drs=^})*rml4s7&fOajpolcA7AyEHGJQDL*IM3bnmNN{tfSVv#X)fBQ7GM z5T|*pdXGQZ-@gU@bPEnQ3<^s~?+=WrWT_MAiLQU?T<>r<4E7L-1QDF2Yk14lr6)WR z)0^MsM!HcgbDO1F<%=*I$?yULYzmH95gFUFw1l|!pdR%(M7f*T+vhJhm8YrEQ$~zi zAIPhch8Ry5$k)2zKJSD$4t;WL_fTv1(G(;{EZOiI=4j^lAl}v1o)2Vrb^Og8RQMG$ z2~nSn3mK>)ZWFV8$jNE!>A8S-myvic!-gb^%fv<0#7)_FN5mst>tJ`TTeZ<9w_RknHyrm(w#<_G z71XvZf5)bxbHmtcpglPsK>3xWgF_40V}sd0$vHRh?kHaS8P1ujG~VAIOyo0xwKp;= zX2j1614n?)1wJ6d=I4977nXKFtqXH*Pl2*#(BOR$}1aIcTJ$g z6`}YTke>4RzLwS9DM)nK>3mCk`r|vbpTTr6<7-n(K2 zc86c(!~!807;))UUOcmYUSK4k(|2WaZ^`161oq0iL&6wZi}UlJuZykk4j;4|7T^|m zw%c&=sClig_GueMTu<@APdOZ!bsY1Y1z1y5GZt`lxUa*t8G(9A1OpzX->y5SKDl7O z4NUSJtKx`ZTgYn&Uim?zi10(edp7qz;fg)bi??p>1;u{X$Vgy${V}b_(fW0lO)46i zz|L7Y2M4PWAsRw-XbA^#Pum=HYw<)+fV6Oqo;X~Cp@PcFv!5RjOIYC_DhrH;fC?>a zHnw{|)tzI(x9)aIL;I$349t485k12~&OQ?R9Y4-tX$}wihzY zDed#&sF=V6<4!C@W|jqmLQKE8#5~Rb9L)DfaloVRuGl`ST{gWc>H1;)srTM~r@wv0 z`G9#hG*2^3QM@RTZu1avX(NO)ttP%Bh#y?P7tF#?Smp+34in2GPw;RF10M+u7Kqr|ls$w6sld7OgKD)r-7?Tq6XXHD0;0XmrL8 zlJbVxoW{KJlb1U~7w;a?Kzu;oA+mW#-?{awJd>i5hR?>!Qv?FAnZ1p8hemX53QX*R za>BbJ>lJR2Rwc_hM#oh4mD6Njj8)m#+4Jr@oGd%|3qx2guxR-GByn8iNgHQ9jnUz- zc66)h+FW{6gLUc8yC=V*){|CW^&1glWA1&^UXd^`pp})AE1jQ(ASGVknHw@sh$9Wz zJ7Fp9)~+6-(ZITmSYgOR*vJTs3n}dDkKJfQJU-+S!XtnE_U)G>_Y?T{t9!>{A{$?c z*0y@D<4bYSWI*506KD0kjNP4iOyL0^I6 ze8%c0_>hOM2jIZ2u6#5y%KwOr z>7~Nnu^*h;QXVK2N4AF{`eUkQTOf8{&8vuF3a#>_EVU7&;W)f%r>=f6tcfu=*szW` z+k8Z`s4Qx0BRex{rS1?_adNP@j_bc>4+?_#V{46qQ4EUYaxc$?ZS4$1foknmv*yi~ zoEBRnNn*!7P3_6gxbzJWts6A1>#-L*In3NW-MY)g$M+O!CExd2p)Ik^HEj`$~R zZ6PgFW>fPk)u&kWr+Y2ytEVRpFU%-8Yh4fk6n&U4vo1qhr>Jg!&&P_$55johvBw4Q zir!oIvC82bhOHH)GQGHNZrh#VLsPD5@q(GU?M0(gD#*Ss<6%mxevu-I9oye}Oyolx zE&s*Qn~$mq9k&pPAK}4`*|T?AuS`eeH?{8+TsysF{u>fNS`ig{hm`KW$yi-nY&1IE zcC9#EIfX>n;b@Y%cH_AIba#Ajutf}CMs>ou67AeI;=SrS?3Ql9B|GK6yoo3-LRN|k zY^2j4Q$Sjevp0b&9#G)Byod;ZoJW;F`q!rC(MEjzm%Dx&FB3{fLm%uU6%O&|{SY@d zEA;QDrlf4@^gkg$hxd%p@}HL7OiWEljShO^5j5i-(l@{7TRi{9l~WCghbC#$M-_8d zLvK+5aq$9bBBaZ5`LLF;04p+rmLeN{PF=%(B02TZ35P5kPd6?~&KEhe?R8n9r^+=_ z`^Uh*l{a@76Wg_F+l>p~)rkc(HFX6qUc|$G(P|1`EcWg~NyIXR3uf%FT+h`UFFUm4 zmHVk4F2VNPfJ0tGmvZnUi*@Bn8_&YR0&%Fc^$8(*(nX-=lVLHR3g&nrC|QNpvuV;w=6rk3Yj>8q)?xJdefvsEm@r(1K2GDAJL1s;KVw&JY^{iYpX=bCG0 z^hMez9i>&T%mkkA$++WgsQC3D&ZCQvMGNpHe@|Yt`&F5uEAlm$E;j$scVn#55Zc$G zoMn1>6`LLYy1P=$yktt-;YpdjrK0gk9X;RP3YV?^Q08^sW#9iHtvh9oQ1{ppX-8eRj!{o<7VvatmvKsnJFlB&&R6g zdDQHz;tYO|4~~u~bIRN4GvQ0_5L#r@cj=bdTXA145UOu48;~8JQf=Gyvn@4Xji?@| z+bIRuiMndPhq~T;)+hDeV3+&to3nYk$$cgDhIHmr)~w@BvWHq#TzP%_wQqd3IPeBK zERAe}`65u{NtOQ`M+#XX;$jhfyeQJ{ON(N%@H{ z04Y>u4K79HY%k=+)34sLWYy5TNh@XEdBPHLs@REzywSFF^7flunX&-2yyuvnjqF&(zYJL~nX`6QL?n~D zySe=|p+B@7s@65iRzXSpVjV??sP^T!{zonT*zs*a0GL5M{!>o;pu07H_{OY-xVKO5 z=|_9B@jQS^KfSywR+-9a&vNTQ z<3ggM5x9`iR7|5?>+ZWls-3jNLPKs|_*m}?;qzpmlVkvn90eDs8Ic#T{uYU7JUaJxUA<~M_kTH!-fWTh+Y+?zZOIVrqe^}D#lI~<&p;AX zV_0BSDS!{#ah-Mt>C@T1fSumnlP%3M|E>C2NfcrDC*8_^fADe1R#Uqg)QMA;GtAi3==qT;quQYW{WvuA!?el|$zSqlkSEb$EIZbnF z=4(Xg3aqGfaz}NH>cZj5u|y+q=3rGD{beiWsd7nis{?( zK+op?yi{;+5=aj(yZsmtm{?mQCL|(aEU7>^7>s6a+Spm;Dbz}MoV zKI9e?3%-51Aa=^Rs;j&3e3LQ2<+l&@ffg%qc=Di7;szPF826d*rog(f<&Sz-UEFtn z&UKSijM|s*l}i!_xCljL&nw^szMH;+hbbgntyoN@`M}HkLJU)CdMy?bKP2Yq(2x}$ zA78^N0pcDYvm~Lx-CbQF2NGB#_C!EreJmlB^1hFIE$bS?eKQx^#itB-_rhfE+)?>7 zy9u~2iR+jUKp7`(%^;R&s0=~7r1}ZVqI*^?O}f1vWL#rnEO6- z$`Q(dv^N|b(KI*9br1Ihr<yM*+8hIBqwi@k1v%B=WW@DGePRjKSbd$7{w)8SmcpPD%@2kY$N|+GPB=cODzT zck|{IQax#rI_&sf98FDP!e>l8~qkc{Cj|0cz&=EpGC;E$UZC{g0!=Hv@g7=3$tO8Sf4|{w&*1|; z5xS_dyVqV~+`~83yPEUxgg=os$XJ!Y5e9Y72LuOKGm{d?XT<0oYhA>~P*UQCcZQG=kY?bilBP0;*^lz&B2mxh*j zU^a1iZQ)TZP)FkQkp6P6?C~FBi`4RP`1vg+Ulto9K&2`&(r)eW=qous7_?S-Zf)B= zYn+teNRcYM&Bayx7Tw$w=1Ez9WY}u_E2gu)wa3IVB$fJvVaA5L@_d1BhHmJvk!`u` zHcahMtTNzTBHI4?l?%wq5qkkQTlx=3XtndlOQj?MhtYsTK=1x=$*0$ilhP3DB9V~f zFq4JLXU6Dsm|wm>tsEQOZvL?JTgI*c=10`hFn@VlL{O6_(*-BeSmUN+9Laz_>!zay zk(gG~CO(yC7XxJ^1TQpyU*e-7oUP(>OQapLC5x7)Xf;v#n2^2Me>t(85vB)o4PN!= z!`EW5cN)BH=QSmXA^FA(Z^DF>3I-os#IP`tEQx1|BijO;M*@F-lmQSlB>(VnoE5Z|&O2al}jUQAsL2 zVujt{gJCmT(xXc82rMIf>9nm3QF|&oW`g! z2H4x5I_BPi$bH+RyJrMbMwK{R=GK+Jtg}@VZgWwXGC?=kKVB}kk~k2bBA10-d(Y9* zVI!VDr+F;ib??yq?-P~ee;ugh8Sc`0c|6jpPn#M%uKnlygKxT9)0pug!Gq_79)YVDh9 zV|}`Y6`jWX-)FG~R+b{0102(J7yo|a4;SQ@4V4Hz;=itq761Qy_$rikbQu?Zn*1oG zs$t6WM$f`1HZ$|uFXvldj0-R7u^F2~C z13K3Eu%@3?c5q(ku-(?w3`xV2BrdTFx}AzN(MwE0A}_UJB7pZXF0}MmieZ|kBZ%d- zSuNE%@NgYh>^V@^=j>EGtWUVf&u{GMNf|2r(^Na?pGP)VqR}g1s;+*es;cT^O-(M2 zL~w90%$f361uavLnG`}~(={`8y=vvN)H5G{jhL~~nu(-EMR(3#ZsWNS$^`0`BaFFu;S= zyPmzrM$1sn4V}wUUmBeMX9A`5YPDlV!=V850s8mY*SdRp&J_$)PfNTCmUSBC&&Y%DS~^eiHSG8TwjGYn>gppS=+u$FF|Q^zffE2Q|4Wm3(I4-DWYDmTx~ zG3)8+^@EqPuP_ASA1f#@@8PF`p7K0EEP4q*?F`!TfZwoAA9vC>2#&P1$tBap$6V$`spKc60dDMLnl3+Kf^n`}m(}5Muer znk?j%87ryG4FbQs^9>3yPakmMMYTl0075=#*%q_2yK4gSgQO(XgF+p+y$JAPEGyG0 zDKD2&B^69kp%LQKNwuYfCiIR%Nic16N-=Nvh|xo*$lqs{U~_XbApfqLeM&?KQPENP zjGosiM)dk441R;u$45>%kJ(2g-+a0?lHfQ%@atb zqN3{R@5hIHG*p^POzh#_tp_8!FwqSRBnOw#Tc~t8_xs*?2z85>4HOKL$oUiD`AnHT zhJ~%;Mu;DXX4#-sX+83IKxp)!`2(T(G!EuT5k2!<#!VKua7K!yr>JE~j`$`J`+>Z} z%KwkxzgA7hI<|Ymne5G-Gw7xDSmNE!+#Ilgy8KeX?l7hAm>Cb^ z)0oY+%Tab_ktP|P|JDMmUR#=*`?R#g2G1f28ibaM!0iCoE+zGho0k`D%Ji*Ho){acXrn0sOGg-#?o^NhND#Ho$Xyb@*lg(4ORm9wg!6m-l>J^}2l1w+9uy zwV|)>6Sx4^6vz%?23h$F@bfdqDqczA@V}ltc4Cuc?`yK^=Z}b%|G}51N(lqL zIJny*2}(2L*$&!FyF34m2c@OA6xDj&rB}vJFTgSfyTc@-E6 zfeLV>5?1CvPmVdQtjNj8N)WRAi3afns$TC(N~~@Q2@7LLB+`~8Fexks-a#Vca8{(d z1Dl&=pEh2GbOwx)VE2p!Il?GUR^~O>S!N|juRgu~kd3n-MRf>TtHF#!WDMy|I_h{^ z{4xh3e`rV-x`Taz!H0dsz#xh2^(AZ!zj}}YV{}`RroEOjGUB{;{W>eheFDVhCc&^E z-Wg#MLb;N9^=v+U4s!gUz!eY0YcD}z*kp_mbejZvIN>0GL=Q_Tpm}CEexHpDwuYyT z85v?%qC?8sE%g`s(>DAdYH@R?K)%Jan$Nth5x+735NJ#1aw6Gfj4UuPCJ1dj>K9 zsCStz3M;@~FP#TMNNmY2^IOkuUw+!i*-3TnpUvCr<_9YVHC0kz1x>uXsM46z3JST)yAEJK!S~I^K2q4)k^(++b@0lz$~Swrb0p>L%>WiWO-0J zJUonkXz_+Z_ngMnUSu9s0L~5fxwAVl(UnlEQBqPuafXo~h%qxO3w%NOL2~fuQZJ3D zkXG5quY3b6z`64d3|@JGuue)OIRLdRE0iS55ici1i**m*LywK@j*5ykFJ5>PBTRQ! ztmx?}35>Ok@h~+ia@naHv5F=jV4F>Hr-P{in>uX&uHr^#n-{ig)0pL%E?C;z%L>w< z51zOssI(j zXwiV;HT6uTAT3rJ!Yed{jnmF)u!OH%xq?tU&PQ77eiV#vvue|}j~nu!qEGn*+abu* zyu7LaQ3%e?zA@U_esJ)DZ&*Nrhdyau#XYulaA^GbGcC>! zh|9J81+C@r5S{OP29cbzwSKn-6`2$Q$5*8oqnTMPTu<#@v9+PSJ_zaQ`pt`Ax$3ZG z;?!z=3vDt^ky9?zu%gY%%?WR01H;84ze{Y3Eu%J_=oti8h-pB&CJY%GlW1!mFwnBO|rdGy*yCFEtxX!bdMd6OH8Y zRo28?x$*rUo=Y=gRFCH49LT7mO-L@|HDsb<{~5zM7xiMw=xh!A)GkK1RWX8~+miRw z94$ZaJ-P$=I>@OWKTc{XyI)vQaj$Qw)|BV*$%)_I@ri4jJWE(0gj9p2HVDWf_k9c# zTQ3pH!MPh;+&T8dSoQPB2o1KR1VFK{68fiY;>0MbM*$3-H3!+ zOD~0Uzj1Ai>*xBH;KheO`uj?D7uHLJ9#|F+0f2KM)Ku3mFOMDX*_FjO{Pt;Q&1L_p zorvyTW&XrGon%PKL4|o}*rQ~#ljH_{OqbyFyPb;AjpM#~vwd3kcR}Cpr!%K1gLmc$ zwI9!lOVt)HDfZW*=fM0!fWqDWZAY(`)gh?;+Lc5D@s~<*W)RYh9%v*QlFBfL6-_<} zWDdL37H38omNs|BBuZO&o|0lP6c#ia`uZMI0o7#0379m)bb0T{84WZ>Qw&aHjpM2fX zt#5+ev)q5|ONjTq*$Fe{7wAU{eY5NnQX8Kj0-~d@tl?5wpGL}SY62v1zSq`lNbX8( z;ETi?cR7#EpNM-MzUf=^C{@2o_zWvldZPm8GKR+S%D0Ffo9ne3&lgm0aOU*kKWoIu z>V51}hfpP*T=$4pvADCFr!l65I&e9A8#7CGoFYlirfqZI2TEHkl^3+y`Tsd-(zJ^b za2e;fUIFjZfq8|2hEOVo$;Hj>b_^3dXOP)&3kZ~F9}V`GsxQ`oVW~uf%^yhH);Bfg zUzZj7;b?4#qJrcZ`Sf-;B0$Jt zv@PdSb9_msHcA71^69X}<@NoQuZCEwsJ@y?@MkX3;a;og&rE|I!-=>0pHG4Bx}Dr0 zr{%vC@_qKvJ&)Mc zvHoxV$Vv&mbQl?lR*vi9e#iyW9NX8jG4B&zxz+$mrK24A(9TOYUrhARVd>U_1M$|! z&2#6@y*gQ3MG>ZS8nrD=x>R;`byZCJEY!H-VK1ET1w@qZ2X*{a1+Bs5NcMpidv}Pm zdR^$sRaDoxX>(Zgk+{)iwZn+YHso;MOaZ@BJ^ zkNkLkM<^mqO`0c`ul;}ev;1r1KWJG~h3Mz$usyhy7^E2oe}8hjKQ+6M64I<#MPoPn zGZ0@*t*2#F;sgLC7drpu2JBNiWrTyvgm{=-!U9h;Sa7m>;VV>!Eo^3n45BLx1OyNw zbew=9665{2GEwjh|5Bk2>7*kbf*26y!a@>=8sAKxdzDs{-|<*Nl!`hsqtz64GXw}= z(@Qfh1vUl3<+f&@1#sMUaqcPpr8Jo@0MsokQo|p>x}`j>?z@?GSZ9>OUm6p%{yW;(|Yr~`BE0CQej{Z2%CwyIX)8KW5k|~je{n~h#EUQ z06q$UcQi;3N!H!FoS7DxkQ}0~pKRu`o-`UsXKRDQ0~mcB5DDDBk2}Ia&VctiF;O%l zunEBQ2v3OXj2m6UOz8;bVD3k`{!UwaF7}Dvg%!;b4>Dk$osZBUvE;?1b<&eMu`1-91 zd0I3VOecu@VIa4*NI}f*<$b^{=tBHb{i0*#2nFR0+C%`Y+s$ziC8cGPbA!z22#}6b zLlX^izU3eXp~yXrFwjHm9rTy+GyQauPJ0ORr^0|v2b;jQ==tQ8XAcWQKBDYO>8So3 z&n*_UUWxY%cx$)|m-X1tA0@_vjYb>$p*rW2_AC~HISexjg(ai41ji)tgKWKP-_HW|I>lRCYVPFREerzXD7vX?7tbOBBENJKMfWF~VqCE)}_ z;^*{*+3rkBn8L$QSLbEQ0lgw-lcwZ1$aF{m1r|%8CzA|d4$E9lZZ+*1>wgR&?S)Wm zY)P&=tJ^;wx|yFre5`r|g`3}x zv{IieMgxEFY#aONB zLYGIAI9iuqH-CqUqx`;7F%R_x1W5B?Ek}b^04obPmr5VPXiExsFPW2XZ-3wZi#9V7 ze0Bi)pY~4b#5d2opoy)F3<{pMw#?!Snwml5^stS7X=o6+(8^@XKV_z=p3MaN141H( z3Ao5l)};-Tjtpes#>UPxJNT|poA}QQ88^4NFQ%LG-A4>iBw_?ZeB0;MO_N)RGW>}+ z8katI*zaLs=v-xGjOGHoq)B~&I0gxtuvU;QN z&(h(b`eRsF@Bs>mnG9b(Lmfz&Wjk6>Q%do~N=x}-HAHj0!&Fvgf028^xRCisOq`0E z3J!$JBvFmpvyEy#3anDVXW~>(Z0FVZ7|dca#50tjg_=cpvr5n4)klmAl$L8K)0GGV7dUM=;~uQ<_(Y0G&S(QisQI z!t9ix30_9x4{}U25Nk_&-xsE$QcP*@?2J8#_;Vf^Zs%$ZiF9*!TVfMFy9g`;pV8sV zKYt;_u=K5pcAu4;Y~&|;OF_T?BF(#V$p05A-=pPLre_Awd3ezJoqwJpggGx|R7qhU z{dEa?&ma6uk~1Ki9@g_NZQ#Ne-i2C~ZI)Px=^QlY7%DW^<41vVuwjz5fg&3qCNj7k#ZPUoX$i7!N zuMP|gL=<8e@NVl4=S9A>j&#U)+jp3Iyb6A3i`lm6%cif!rky_nB73M${M6O=5i-}v zmjyW7r!7;rhWh@v)ZrHivIOWVL*Pi?G2;iQF<4q#Q>m+~m$GF(XKVYYgT48bdScrv zS|tlmG3&VgsdZRl(&^po19mNu%U@?V0kRC0zVPJ9lY5$)O1-0_K~T8?8aMzK#<}X@ zdly%n!kU_MP|PCFgw7W=<4cV*R#SX;Zo#u#-ptIDwS~rmPo7BO1>H8Y(ryj~8b2wi zX>ia()9zmTdTY^h$hoi(d+iR%kJ;J;PmeayWJd;x3_4^1EwGVhWr6JIXkXOT^sWCF zE`u5i@=QR!+L}9l{UQa(-`ZOuD?2h0Eqt6a)&8SDgQb+UnBDr? z6>8h+`sj?@-N}JeLF;*a)`FE2vz^BmOREwA<(upgS6@jF8nD%1DJ)K+;tRpn<5yd!^N z5G1EUNf01G-nr&60-;qi;5j^R)B>Pw&3{4O8rd;t4!40=u(ds>tQ-NHfEn*aG|STX z>{%)j`H&8PEdYuD;^+XxJG};QoHHFH=sv8IP2vm@KM}Y)V_SwP!)p(l|I+K^DRWIWL9=5XU_| z&yNpTJ2w_rSLFbklamuhV7z?!5~lUs%1R&<5^ilh=Wo2oMVEg5{CT+AAm*?TX+{eA z6t1HYOMT!H;1i)X>vvs5^9z+M0fT3GWv(~paU>;teGyl#a7L8^OpE>GbCHB8i>ARl zyDPpXKd#9xL*Eu(*5f}G!_&Hbl7OS1MRoR&01IOP)f-XKY z5T4JUKiAS1>I-Q%e=@Kr0~~@_%0M8UteIv^yE(UbeLzQt9VjVn-G1o-!e(C%Ul91y zk%b39*>R(nmbVX-BT`UOvLEI`!plxFGN^;Ezu5j`dw&5gjEm2Of|r*U&@x;qYHG*5 zH7-~c-Q(lhWDokNjR5ZjVv2%F2%ePE@sf*>tGEC)In=l?km5tVq2ZUG#&}{zN&HhT z>8>AS?rXm^j5A{n3%or!ZKfR`Ukr@K@OTW9q$(*WMIqbxv^wCwx*!WUMvb_^LGvmR z!-Y_){-GtEh&rP`65Yu7gwBwq#l=2zJmAv+lX~Av38{|`8>YFrIR*kqe+VhhpWl|x z>LtdOOr*Vp9|UR@j8BgBKpEtXz*aXlMkgN=ayvByFn%B-5+K;ggmd}YHARdDTmEnl z5!LlUeU5m0Jx$F*|5GKsVZi>`&`Ai#-asPV1Uad4cOAf_?@KI3D z!AKKn>7S)$1;zPajJaQ~$38_OnaK#4Ny7j|nL8aHOL|tWnY52}I+kNlWZIg@COnqZ zG=%l|DfXRIwj?skcf^^bnCuxPyjbja?hBnWcz5(bkz7&lb!vtLWmT8Uu*7vcEOwmW z7iySKWBS(X9ExmPi}IGo#_1z9+InjB*sc>E`z2o|+T)n5*?pT%JzXQVi-}+(d(^Xx zAZ>x=#+BIaSe-?`eT#?Z0xDkl-1RW69AygiZq0A1R1qORe;QYeHWJIUug7-K0&DQr zfF@w;;2I5K&X{nCUVGpwwIuP2c#Fpai=tz3ttK5iCyM_B2Ye~c$sx85tDk_hg+73j zE^+Uwt8o#=Iph7gy2s_;O7)&cMKxOTF_Pjp#a>j_|Bxi`l1X9BLxh=)t)Z)n7$2X; z(#}pT);ndv!pbV8s(KkX-`DH-UxyA3 z4$xSTx{>GVCv6VAhkrK6r zM4-q#J{(sS?XWIwj!CgLH?(15#Mnc1#*jW{R^epUqBin7#Rf|KBlv-0V`6xS&_PUb z!#>w-IqG~?F}8`xSgy%enV$l*y=On~H4UUOGtv;Y_=!3Hn#(OV zeH9nSa*eTfK2c*gQa#mSY3E4if*Sjb?P|e4Lnpm?V>a}wqu_Jk?Envkj*+R*QV>`H zIKKRTF4qjfMX74dfKs4g@U=i0k9yv@#CD{P`_IxK(x_6@Cj6|S zdX)|exr5uyW$f(ojCJ48iK}aBURv7mIod8*ZNBLaRcFqZce60py5-QPE_daxL9sHl$f~ZYx~F;bSpF`I_><3w@FpIE zLT0ek$pC|?wS6Bhs)$1ASF-7!i_F>>@B$Y+i#(Q7dg!;I zm2D`juB|!L0)PDM7&-&2VpS$jidWW`j2cMwe)37jnQgU*1-LSH9OIO#&bCZq~dU=FW zQcnsMj$!L#Ga3tU6g&rQ0#;V$-7kGB%Jmwvh55(K!2y0ea>gho1vU1m!9sKNFG64h z!hi}jr5L6rlhGBDSFy3+$XOa9%>=ZR6fw4jmR4GE@x`erF*d^*3P7L_ck5qn>>-gX zFy|n$Ygr)2#>mLXfDwXrbs=^@v3g8J_#y&&Rqm53u|UqRoY;YhfM(~{fLU8uu$CF(V#pR?{9Yt3kIXT=oPKQsF7P-%u!$3*k)H*RX zW(YQdf;%hnUbJbx(=qU4mzwZKsLt=*xhOKP zsFe?~FgE6Yjx^6=>_3V-sFC;5^2wgYvdoG6EwI=T6c*drd4&{8 zw}*6ie}d?wb02QE&siosCJYPy$5ME>=x^E_Ep(w&I6RA+QK$zcH=Q3o#1cuRhlrc; zNn7!cEEc*8Tu^Y6MQ}Z5Vc`vzV&SdhnHIp3V-trRlBc| z{_9`+?=K3sN&QuTlg`nS|2+oq|Mw;qxC%1reXBIl7erFI^Z3r;GE1peT?CZ4(d5%x zh0NP2E|>p;E;z`?3@(&gwDVoRK_|DY6D@-s(ijN(booogdiEO!wFKjwoOz~2Iw;gr zC!AS-2FTN%CR#~bT52|JGCK(3;vSjuy?Fn&mMoa@)-%@aZFlyMTDrPn=3Q-!a!)H) z56XQXxakoR5n1@sz3EmXJV$J5)|Bqr&}b4`@-bpJro6N>Uq>V8+0gyFvGJ}Aqjo{f zYqzvLtor<*SSJ|%qgf>-6(5np#&qs*TYGeI2Um#pv@Sc7;hTcj5qDFyp6u>w{jLyg zY?i(`QJA<6gn$<|7V6nm`&%xZ*Fu|3QT?1awzl& zZE|fH@tLF~qwG0(IKvqqk*v9uNnRId>_jw@GAF`9oCeFPf014BcQb-gNZxCVW9 z*bfxT=_x694@NX#V zdeLnb_G~U#pEJW5)`*)#R>9p{l8SE~NJ{ydxpuHpuAy z%y$xzKSllg`F3VS1zs@Y%iLm`RXTeB!dP2aKXsPeCXougEmd& z1D}!#0+C)t%^)~9_%=eICf;WM_}3^&e1TVh>}$}2^O5C@xgmIoN!p}B6gu}2Yirz5 zFYDZP_!QW_I-c?-UP<2&n6@c5**3jOMxS+Eh!n2p~y(- z1b`L=^u<53@h8R5NxR6auWS~nwzRPFQbkeG?Xbk>^e=uH9Sq9KV&-t70IPDq(&H0( zZtLrxg*TOCwgJZl9MpTApC}Y=$f*N&JiT!}SS3+ndFLBVHauT=mwJ=}@sog+RS7&d z;D$FXZ)KF^g~d6R$IXs=;^j3IzwqhqI%&TD$#xAbI~)7UL7PjF zn~D!g=FC6xW1;ZFn;~BbY>CB79=ssG1`yKZWZH=E=@_hd3en!d!BdhXWJ`oNSVbRy zeEiPhDsmH^{o_#P_Y32yu%H3;>aJFjBr#i$0KkEt=UVllI6*S?Ok&pob} zd-G8dHZ8j56l|Qu4Iw}~p2xXld9#>{orNen05k5zhcazFVF$XiOq&?wGmT%qm@J8) z)5#-3&FwD`;*ur}*2A6$j7F!}lbT5l=#gLL$Wx2CPOkoSr!#1u@11{ozvOht9qf(h zBMNe#AQM!v*zuI}iO}t7-qNH++MKUzfy1JY>M=%AECe*sY?+6O_xZE1;&R)fVxpT& zc>=XW4YOr3TVh)}$+SeV0s+@WQ4z|(833G>im8R2ru$uZys2E*lRs}L?@#Zc+qAek zilbu5tX63E9$)nHtK;C}2sU!OyIlPX*_$9>=5PJ2Zab=T@8lG)c8jwTf|tr}tn6S7t>ad%?ty9o?;b4jyBi zcQPT}1&a^av)NR24dAIWV22z-QWVrY9mp8jPcU#7hdGT@hsz6jHaMpM^AM(Y#4qLo zp5XSj>#Nd%uzc6;aK-OXRKvpO0^z`_yV@AIYjtsMKm=Xb9ikjyo`d1PO!E6GKW z2i;=a)zK>%4UU~5gT0yh{nLL^1(1B#FcZ-46E6p~`k3I1g8*5UR55_QINY8!SzJGb zf|eq#dTq#GoqZ0<=Z}4fw+?EbZycElVT?K(Uj>D>b^UejcZCbHGP#M|gnUR!^|Pkf zb#zplw#=Wu((CgC$mvo{_+i29qVdo3$)B>tQ3o@A=ezLd^JnS+5(@+@NCZJvnO&3? zbxTX08s0eWpT7>9vr&xrUlzC7MF~;5Y)m(36bokm&VXojII3zP3Hoo`zNu8@q1RdF zGk;ywTiFz{u|HoAm3;m?rwZ%2U-Cw*b$O>1BazJs*F0CMXTQ>8mynR~Wzn@NpRYiv zjM6bO1OJ`YaZ3t(0k8`Mab4Xu*tMyHH|~!MY#ADt&$08n*m3N<;E06L(#y+0!Lz~{OnrO+8{4lU7r=9_9I&+hL4$?+w|)ue@=g>KlC}c+O72{L z-Og6de@zbWwA6iA~OHar-!GJp&kzmW@BRpAg@k42{Ga~ zrF6_@{y~g_Yhq&BiwSQ%f;k6hpK@@7a&-IMWd5&f9nd9yhKh<)@twQxNzDIT9Z7jA9QeQtfC3NbijuLf zQ{t1gnA9?RO~9XIq}cK-^bBaJ2p^?rq@9x_*q$df8=uTS?&)oBaz-Kyr^=~WihJFt`iqkGMZ9q57-k*p<)L#w4*`d zkT6gC-90@SFE8PtLgV!Je&E=Ld{D3?j^7q!AJ|Qdj|YM_DR(00+zrf8ss|evY5Dr+eX>jy%AO z3E}he1(X?8-OXus_gqR#E_bb_esV4$NzFax!N)=*G3*XD!krz=&4;Q)b)Uh^$Q91K z_i#4=dxYcF)W(L7z5P>s#9g>~gN44QIkgKydzM@JSmlv>No;F0nZnugh!MYtMK0_1 zD-w6m7y!5l6?l~a!wXuilpYEqmc|~dWp8tGpr0URDSf(rLfw!a(1lJ}id2i#&#ALgtC4`{+uIbk=256n?_u%N@AsyCxUBKK zrdx)4estio8~v_@T2f}JqP+u8oU;qx`;)k%m3I|0aOYY<_{YY^)_HxnAxD}s|OGEPczCXBK3;gEBdf|Qnq24s-aMQ!xW4932s=;I%< zBbd7NMnQ3+?0#wwRoE7+tgOxppejyu{``4@xo3%qv!!m!WU(Ta+>}~{Mydb&$j`}X zT++;=h$8^62*81z=cEGUJq}xv`WqrdMMTb+c$*9k3}xi!6T)P_vt>>T9r%!QgMAgY z#L+>|W?VXkB04&{$S-F}rDhjQf`Ap!YL9+~_u66jMN(3d6Lb$+{U@v4I59t4FFFrb zdGFZd8&vU`I%Vlw<$B)V%hs#G{&0FdKmt+7gYt*Bo)GuW$|GKW@iLIQ&^GcqE$Y7V z!KFuB)USV{2pjnyeaE`YY1x5W2AY+C&6MH8X*};)li%I3@Q%@#%3JLjY~S{w%{L z*j<{>J~~&l1$g!5=0%4O74^sV0AjV3KgoEEXyFn2ZY6tS!YDUV@ff5a#^ehCp8VX%tv-6FJr$yZ8C^_B`0`0UI>~Q8qBAvro64e-39D^(zest&y3c;U zJkK-;QR3iS%48pqi^Ty8!(>Mc1-;jIQv^S>u{o2$F;hP75CS9Zz~{HJ!UJN+Q2Sj) zXXnk~0U{{w5G};r^(o@Q;j`ZyLmWCc6Ey7Y?NNbSlY8R%Iz?FE>-KT4+%X(L{uiBL zoCTFw>Or?w7&3+(#~-;&?TPCQ4F4_BxGuV90QHYSof{`~XknInGXfnz zi;M*j$}kVX(+6l%Y%h80W6J?3+YrlN;AsV2c&I5izIZe|VU|Ukd3sXGKjUh&Of-rd zKKV)M>v-gj_y{A11$b0XzaNJIK49mbLM1wmW>9$y;7ROD)^7jo1Wq&x#bsDcaleEb zM(?mugCg+-$4l?@onfUnnOvV?);0)gY?OpzxHWj z;ct|p?npbXInnUZOa@aaJ%cfFTS0#VKBxI6b+pXj^7HnW!?V~7`?s1#jy} z@dOc@9D!p+& ze{(7+F&siS`PFytsKoq;F?(**x-?(Hd;3= zcH0W7a0?qSA~3`QTN5Ow0v8i1mX#&wzy&QbRbN{>-08Ra;^1*Onzj*9^_rSO_bZE@ zOY7|&Ic9y4SK-j&h}jF6jg7iBW97>B<|wLfcl3Tt#It7?e5be4m20L3mps1(;qihJ zG|cen7|!}PnE8OoC>Y}?IpaMQx_)xuaKbHXtKFeO z^wJR6AiYUA`^jQ*50V3wRM}MOhCTxafvp(+SwJ3}>5PAwHHp#xv>0M1Q_s`Dbv z###`zb6W%GAim9e*P`#(5Z&-=j;Cn#o^y};^3@7Psxy*#y^K6O#Cxn>j&m!p-Rj^p z%F`;0vF8Dou*CK1vlU60l7#CO>SSXn0*w|o3 ze`F(a06{wV;3O6IcvD3N4~2CDCU@p|*zNZ?;zns}MpwO7Z%jBH@9Z}-oZzEIT!(ZC zR#V#DSmJV5VYCC0&<9P4hL#6>tnrx_!uxcRN9z%5gVwe-fU7p%Ir^Qg0nK43PJ|L# zHRF39e59=3IQ?r$yP+vaHyvB|nYkb02g0nHAYmY_e(@z%D-@7iVMR|%x@z{`EWoIC3x+E>$v_*YdpDUN|F% z{^IYgp<*B7UasMibIW^{ZPdUV>NY*$lm|zUz@}SIO~JFsGa6o@;#&3>Kq4R7FSg(hycoA1=|mKC zq`U)xM##CK90D)i7XF6)(*;xI=TOK_VGswP;9Lg9o}KdXUI55(vF!4F>G3`6-w)XP znypvfR|bQZt;hGlU>YAHr=5U)(@xe!W5nnZ)|Ef`Djgl-JuculNjq-!WqEVDlN(gH zAqiJVGLhHJ){|gg?$N;3NGWQ_%)|yRp0uI*=uV3xMU}HKSz5GOz3eo;ARZ3KLT$N+;|hOr`}5S%$sFKDi8!erE4UOP6P-gy->3Z>?kX*4uk7RYO2^o2RpCeIbemu}jcI%3{)Q=fnbgeutAK#c|IHAHLrn?QD zZgIb@uKn&1VlxwyTSdefQqG6gZw(C%0d)`VoV)Gl$P>7D;3`QHD;7B#^6Qsxi#Ep< zIZjgQL72Za-rIgzUO=?7v*QUuibYmE^mdb_1SB}{rDZoK9?XDZGP_|lHBmUy^qe}z z>=oJ9_#f$OXlrNtsdinx`ZlLP2JB@)#h3s<#l}U~ru!wVY;k?B+^UWP-mXq)D~caX9Euk9`Mw(%;{9Vd-WeP3MCTH1&ZbI1 zzNGy`-P+((|M4aW@qPoP`xZRzda8!0I{l)_C*0NeXjZuqWLWioG^ss*$x1W@+&tuf zd_jy}d4(T%KE0E@K{K&rw89Trrm26%1Y_0K1xTPwzyiT7pc+ciaEUH&sWpXELqjTh z`k3*o>)gxBOT{#WFSdQk(+O_W`T2SNcomL9Q5t$)!W^#E5CrrpD=2)MTB{}BadUfX zTuX&u1`ajH?r2Pd;J>q_3+`V=7NwZo%hw+wLl1cE`ldXLG((QTc?k zZwm{1IMx*ARjnes=jP2ORjuij7oGELpcp5AnlrB!wB4#$Oogb5-cNZRDUxs`p*huA zoYL!NId%dM7;y8VJ%1SLoqnKBt|W2nil|j9Qa8wCO2ZlwqbD9JFnj_7aW9LD$z;G= zlkp{tuIkzQp1DRvc)ym045cRixvZf4LORG5>x8kz5uAT=;T4QlqBfS&Zt67n-xP2d zA@MPKmz1ffs8ehqx6+aX8s#IU*5ok)H-I#F298LOAO@lYc*L_p>Ij}&Gb5d{2}Tdk zpg>!nyIb_ccYAmH)-y|R2_LUq0bIgvNc13MJ{I-dx;>T^<|FTUGpFl@&y+FTj67_4 z0%>(t#qdzms=HNbs8$yuquFU8tEr{&O~-{FG13P2jwmhCtUEapr*_=eSAINRp1lcX z<~vp?K~PMx`Q<#rZ31 zwn5Sh?y$!&#W`DHD|JnOO=zViO<7w;7Vp{_zblc}*I@cC(e$WqHx?%1lQBG3xF7B8=c+}^gd{C3l~T?TG;MdtX7)Y~3OWT-x-jMdu^lOSKnIr|&ED=s z&BhdVT}!Im!93O;Tfs(Rvxaw#wFDWYnI>)%vdq?E-i_bs96sG@P&D1pb z@3lQ1kA~1CR_Z4TP{ihnOV4!u(OUDy7ZR8?p!Zq12J}7Tju3-dJj@=qO*6|Of;y$Js$^|F`(GZCQcDL-ns-tpk%vQDN0V!rdyWt-7kwS0cBM^qjxrIVwzTsI9 zK3y4u&$6*n(lZ0s39+)kfwGHO;^$qNO^YQSaJ@xBiE;fhH_n|)wNQSKcn@lNZgmNg zPfjJCdxOCl7(Xtn^Xc{M7A{&~Bqk!doi~_KQ6ab}@4Dbk_oCbn+&PTKYXoP71`2dz zS?s{@7%A-v`qU6<&8TDdgQEHS6Cie42^KZyXEhELy1wstZ+-?reP!6-py*jc?l3`V z>`IyzFdbHD596`>U&6&h@fdtbFq_WLKi?O7SgWM_Y!l>UXLg}Lo>~XFC_poAQtJOa zMvjh(NpDV20fBLD#HFONp>$wZVk6q|gPlM#n5%r|@A){VU;Yg)rfyI(I5d<|_wMSf zF`EiaqRp(PV%BkiR-1(1Ji_W^H-e0HX6f!AJyL5SUPa)IA_*+_P%0P=cIsCYoQ~uy zfO#At*L_|wdbG_-$*j`Qq)mF4>pB87y3TMMe|@)YI4cOsn7>apkjK4vH06aC_;Zh_ z&WORoPGoA~_fd*TiF6sxnP0fymUM;kANz@%dDX%BhYKR>Z?B{ASkgrmZpdCtSTnE@ znPt0Z0I&Ojxe4&qdfi^PJS~uA$;ruc(Kl3(Bd#l< z-2(huwSP%tCwIXRNTTccROnOnEXW^T)Xv$>tAeB&I7!L9H?7>iwzpae%--nt*Up9J z`~3GrR6Nj|aj=3aBidZe(`|h~q_#Jw-GYzx*z!Xa{qIx29KB)KQzV zc*L?}rKI!kP|-fWsn$hzrK=Zfi@zd~tMvg9qVSD}7LQb(bX9Mi!(T=;a&LodIVu#9Ri!O#xzTT-Y)N8dzcN&ohWoNv+E-O7&A87P)||e%D9S zLSFtXZCF?iLl+HDaC!OoV!zy7mpJj|GOniu3`D+y1Jyq|3tAtcKP_~Xs&7)9sbi1* zC-AT={nK7Pv15jrpicG#J&NLY2TBhsq_k=S|i5} ztGwTVe%|KcLp8UulHp}Vy=+KOsi{>J__D?dv);bvUBi8T`Hl07F3+ygsf4BHJwSaq zzB@4*7qZwYKD^6@v^Lb)BBa?aAw=WJi%Po_ZUS2_IUUL9%7pocF4xwd+tKq3PQ2=) zy~-=$;?r*SS(<1;;|CH<2kS@qR!<&`zL;kP!Gy*TJac8vi4rSfkimia4m!}MD#l@~ z@(L&_To9t&&7UOAxy;Rt(QCEp0?r97BsZdqC1w%DAkgZ>@?>s&YZb=ux6-&WwviON z-em*F40*!;^EzdonF$5G#Hgvocd4FL=${uAU2}DHO?fY(9I9TlK8Q4kaFOE^*bjub z*f84!ffxhI#>9vNSnud40qRpvMP`0JZN~H6F&R`KG-}%I}OH&LYPyio>MG$fsLJWk|Q^ zjz*!jy|E)Bi{-`H;?KQ?5p$&K`@dI)tF!bUe4*aU-2HnMkVT0GasEA%%&~yO_Fq2< z4_!Rr{crjaYhc9RSLnEL>PsZeRbO$QM~`qXb=t^wMoL_uI4>C~#k;g=qAGnFn3izc zRhAx_PAoKoKEa9(46?&{2x8H&`R`;8n|nUsD4&ANczv%e6&nRpEYLJ;Zf+)cs>^i& zwtyr_*02{%v<%SKnWzXeDl4g=lRtUQab-U;@*W}4HZuufYeF2C5$elgDF-JfBr39Y z$pCnc+O+~x43Q4m+JZvW>_}P_REuO-$RwdQ1#psV20RBJ!L%RFskP}#`^V%2ZBl5U zBp{(_`~qwz&=~^po4aZ_^k}^E{9^%ZaBgSJn7Q^mh8Xek?OQ4!j6&QZa6W^jVrUrB z-L3REgJc-@{P_ebsvoi&o)?!~_2LtFZp-?J0!c?&`ZTbg;q*2wn{PC0zY`D;&{Sq! zN;9&x`ekt^kn2w7AQSBwQxg+LYke-3r*}QOE%EP35d3cEioCM1wb9tCC@*9ETF}3! zqNWA}d!tV!7*$;j9gu#$HowC}M%4U(uhF!^+{B4@ZA!TvP*@@Pd%(6PrXEeq>wN$m zLeQ6yuuNU#{jmeY3TP!k|DAb_6hvD^tDcBMg=mmY%kxAYcH!Z;3g#eUheqNvcNAT!Z-O`ELU@)OtK}v`voj3 zIfB;T{7=YM@kvmpHy4^?a0aQxbuwy;|6+8?RTwl%3|~tby?N8`Vxn#Vu$I(=B}3$_FSqsCr?T2YnZ&MPC= z3_Om{?e~N?5To1TR9X|X?ZX^>X=?)Z#z)H0Q~Po&0n3U=@c<3IN{8_s&-n$3<~eO& zoNtU{X@#1tGkr~`%QGlP3p?xr1DhY`tbXA(+d60qrd={#^B*-c<*>WcA*Dh zjmLVcXDm;gAgH51fa!yD%s$@T;wW$`%_u0K2Sdevf;R5!^}W4S=Na#kFy12hID*HY zq(J#Rf(4>l2Kmax6X*0LjA*^9Ro|*UcLO1P4~LQeVnXGrR`PlMa)U?dV#g(w0cY*S zY_Wlbv0HnXWaGEq@XZ$i$>(+i=MC0a6a7iZ$>TgX(E)1j_zeLf(kb(1P5XL~9O?(6 z=j@wP$`aA-5jiOX=iQpyDohu;7kHQ2*QPEd3#5iQv7~%STR;86V7v=DY+(GDld`AG z{kaUy@4PFV3@RpJevY*-evYWStxUKdS#5svpzrXiVk;p9^Va6flbw*1#CP+L(2jR_ zsXjJh<849@wzXU^&4;L?vjb>xVa6wiqoG@BEy>nZ_tIZgO&%!?g4~79r#*2dCcVH= p3yE%{yR1?tA=DCGV}f<7C)gzk@JAt9+EA@Q5;=1t-|C+cWj;;-LA&RE)S7PqL)UJu2;_uly9@(nxW zwHx7{!QK)+0Z4?mW(X|U+dClSI`YQs1`<%*NprQ6d9b(V4LCAD*&dGYmT>g;Qr6K? zw)TurK5_iS3FYI4#yTgBbx$f^v{tr0YoGbCen3J(S;F${Y5SWQQ-id!V-rqv9z7je z!5Oly?m``8}0HtPF{dQ!>3-B|nSd$B2%LzJzqZf!X30*Z=ck)!DMX3$q|}5ow7{`r?Nt z0qxH@Bq#w7-T&>MK5tWbQ6=YP0F&p@-_9@8R}Lv;;nVV}o4WrUCU7Dx@2dvBuIOVf zMbb9QA`xfeuKLda5{|D*{OXtIHEu00q11ftTKxMYW^N$o{4M^%2JcJTfB)z9@Tt7A zg0z}iy+fxD{d4p7y%+Y$!2yT2pZ#}U!>1W#!CdYCjwqQ@@bF*Q1Ftwy7D^n~-UtMu zXP9W4Y<`y_zr}#~8nnW|4=hfuO`s+Jb0*h<4%AHc1UA)O0gd5Iy(Ef+vn*TD0%-!d zGLC%Qxx8RYDo9UPtmloV^FKKfaT)9a2f5WD0=>Vd?Oweo8R*QnU7V?%_0>Z2Ny;qrb)e5> zid|8|TNlFO?ff~g*;m~-2skmfa>)7q(`@0C z&%)OP^bPnx<37uCch z$-fa2l0#Zkl;45ooV>*wOI?_-#W<^3YS%9$ z4q-$n;n1vbrI=|eyT$~LGYo*J${o$~MtwU7xCFNJSeXY*n$UUe$Crg%I#mY!V}m6{ zOoq^q5W9>HRp1q1N7vJbjeln_jWSK35&HPLGyvwq?(S0Btfl5mtdBJX|4X7Q>((X>wesIzd5qe z5<(;JM*wIy%%UR(OHKe-C9Vw1tgw&IfcWP@cmsM=nPGMUdLh)35;s8hl(F+knl;ypxsYB!;HmFV4}sJGK=a%f*m&iRB@ zrgP9HEhi2|F!$H9+fDdiV%)#vgM=El7QTNKFU}upn{i;LZI~;jb zV=rI?m6$^M$~3)46~wa?ODfi_v1G@E7DW)&U}#BADCTa_q!=VT6bhFoA=qivtMfJp z7Zpi!B>euBbP^Af;bn&ArHUNumqwr5VrGUfG;5?Y7a zD2*@PmD0NtvzNcwS|qyPnmAnJy>WFMRctwjX)oTQyX%D<8h=!dl&fl+_5I^>)wSzY zrV`U-e)?M0PuX(2koz3Od(Q7A1M}qEZ=QyBqX3JF^raRX_8T0Sv|uH=+yN5RjkBwV zP+T``(!w$ubjWg5CTm*aSk4%Z4<=8{EOyAcxoGsLD*8;P8o+FgAcDW-(CiY&(~t;)5V!>if7f&4>Bx=R*4(eIw*hY=+#NoiJjIcPDfN>Rb_g}9Kq*rGNY@ui` z|D_$+xo!1V!zJMp%p6O+`p<~VW1udoSi;o0?_YbgU5LTVtFBU@-ArYThgNS(>{I$5 ziGA?DqByX#)_tvK!=j*=&JPc-Uo{aVZtu)dSrde-KO`C&|3|(X{*P!s|5H4ybsQev z{NH)^{om%DjbfUF*RSEU_O3+9=LITyn!2zsVJ9X?2HOoU^YelD^S0E9mlqa>8#mO? zf70NW0t7n3LW~f9*s@d1R~onGzdf3)Au^!9Nw}&LKm1ZfTsd+ocVuUFhy!3Mk z8+a<>DTa4opOO6%&npFSj@`_#z(F8~r9p$6;qZY(Y||j7uw)TrRJi@lsx;X1{mx{W2J2T*)Ut+TPv&ZM6i`Naex9@5{R7??5i=Ck9r%Qq8wm#ejp&Y|%CD~IA z%UK0!-Sv%#!+MG1Mt)iaDfYFeR{4PYeB)Et=|k%dOGpU%b{PijwAdk5RDqU!*%Q{! zb&HeooPSIFc&_S3wSctoX+>@gwB+}L9hncFmL)A5KWz3LfaD(!e)IU4{n_#3*_XG& zlb^CP7LWO$o|a{e7s>EP?ypJ?t_%2)@(wZU^%K++S1+t6F;6G*Ah#~6wI%9WL%=n8 z9X&=?YCZ++pV&pq_KE!C@2Xi9=8twywnHd6NekvsEK_`eqr}y0`B?HaoV2rIy6JCPher3C^!@AgZkn%SVnkRKC$(1DDoH}HMGlBevxB5`eH+-Ao_NGa!^)TDfS|i+UAgsD1kB!an^?-~x5;yyeQef?8meg~U;x^iAE9Qy2& zu%$Q5A(e=tB2?f|16`|4ocz+%oTr+{m6Nbdq-2U;h=8MjzIN-x$Q1fl;yk}0{ z486lVJE+*_8KG7%X>LO#iv?I9W+}SE{QgrGZa?Fu{lyWW`rvatrm4b(BE@i8L~;w8 zL3>MCtSwO~*4<{g}=MhYpoveizHHs`Yb2Pg9qyiC6<&up9J{))~h)>ADje zK4{&aYHxIaXihk}+iPs=3!V(%_2HysrXxPq__kTO5p04f){`wSdu>UdEy3a)I=W$X zJ8miZ8s1%S~^$V7Wc5~&44P;AE zWGA3o>vl?R(K-0$qX>lpDNW(LdgTQ%+yl1Q+d2+l2PpQV*E{{BvbhWX5*+FGJ#Q5i zAHs4;mGyr#B(a4P2!vWP>|?fE{0ckdzfjHFP7vQaV0v2Wh2;4ee&1% zBfu(}ecLGYfDOaEs#N()%0y-3id+B8N3RpVMeEng?68U(Ds7~tcu*IQ*L!f~xAHeF zPTVj)MuID}G1A0vWvT+_+58ig6jQHyAH8b&i33UNIhDS(EmOHxBz~l~%|5S|D%cob>l_ z9}39GJXX-=WZjPIh5`wnz~I69gNNJr=J4Hd1+!NxOdfPzT)d8a{XAFQzS#z1FyMGz zUpSwZ(Y?b$tPfu`+$~8@ProV)Kb;~|d+Y`qoO~?ENT-)Q;z=WD+;J{YX?846iWckL znv!IQf!>X0FT`iMKUD`sVy9=%y0ex+7G+w4H&cld>OD!AW^GZA~Po>AWXDP5@Kce!ez$% z)mP{?=4V7;YzzqG1ry2TA2)~gX;}Oi`J({*319f24;v)BnOE+Hb_ZtcHR)O5zonD^ zk~fj5oETjKj>ykO3o8`YEQ|r?gK({hdl`$l2)*aIIEpUz_2aKK{%%QgVYcO{!5k7Z z$DY{HAbV!KC?8R%iYSx`?y2)w^@Eh>rCUmOG%I)ubIbs>M;GG=#1VZha*Th^_bJ63 zlx$VWfj-+=4RzE_W@VE?CJLLsF_hRipiM_Qy5`CFAztABES<4GtQq=jvQQI6eG81$ zMEJnX{CTB8rePj8i(AfYAr0nlp@7L}DU=B47K`O7;8`vUfG#;4P@^#5QjVaUQxdT|4UB%CO z)zwj{Z=Pi%i&EH4%f|i2O98g1rxVl;^|Qq;r|4#{@Rt`nM{3lSNZP^^Q3jxdVQ$OY z>b}XnKybbi1nflay~>V=5KS8J+MvOK9%*`5R^=cDJ5lMD?`IfBb0=4#toNmp^`^|> zp&<9xu>Ix`(P@0b&399AfAG+^;NQ;0ehhsMck><3I6oe|e;cnqd=UaUIPo%9H4!2@ zN3gLpP=l+(6ZiOxoB>$y{fvooJu3H$LL7xlxiTt%%Hpi?nW3b82gEBsrB2w}pMXqq zGl(x&INtw5{x4n-_K%0V?tPX&+cMUoo@yOOMrQ%L_7(P&@|=&ds2!r2Y<6-Y(a$Ne zWY@WtD_!{K8`E{J*CI!rO>dwj=Ki+7Y7f9aM-53hsU+zH(xT%<}ekB0gyq zgxO5rh1Dr?s8#niJ%iD&&w)=r#FQ+Yk4zscNzWHwNlrnQ3=U#Z_Wk45(u&7 z3bjwI^fc7X}qOuvB6Ow%iaO zZBVy`8Y+s+X+|9deQ>fp+5J>Z*j@J^U*<> z*?k~n_73t*gDL#<{$mfzGxs6`r+9HswA1uuJg&L-KVzl1@nN(1k1%JoCmuAC2se(e=QGJ+6vwZZNdOwQx;sGfdUChf#> zx-+Oml;S$kOwGpY3$beAwTL;ivaXC=dNDlxl-5w!KsYn_5tvHMRD=y~o|=DsXa*z7 zzyPxtbH*l;mX^=$;l?i~^3vcCvB{f8_*z%oU0%_jf&EsAG%9yB%`ShFJf%b%z8qQ2Wp|D%CM3w&!}A7?A^c-Vc5+Igv{kkU;YzY5eD3ql>+{zya;dBI_BU@c(jL?} z79B$XAO@CrhuRBw{TUy6(zzc^zk(^g!!Rbupi&!wb!Je-1k$#mGo3Puek6cjjyCjL z%UDuLQ?CP~qp=q_!?oI4BNnEJsDSLU+4bZX!qCsc&@YcI=mu5vOB^I=o)crBKWTmB zc{1{Ql7bM7Ng4%2y2P7_O@>dmTzAk&SfoyKQh)Xrou><`=>SpU(x$6)04i$3_YFli zpMjqkyaGx*-y;~`!DAnC_t9A}zzX-!ccrdB?~;Yt;MMtFF`CTo#OO4{H{LLIGqPm_ zvufOLb%w%6=N>V=>XaCjzcUP3cP;3+Kz(?Ew`C1oZei+cQbGMB zp&mM(`LfF(_CkIdKeA!L^J*s{%__|iYA{f;x0=)h#o9y7D-aq50WNxp3V?H*Cg;%P z`aP$zs6*m?+ED!nVLlf@zs{mvx~h0?Ik*)0ZE-rAD18LIw{OXNsbfX|7-1p~^|3cv zK-foj@XgLd)Lu1tQhxm@VX=U9>$;+gW3xQdhrKXuhSlC7@MQIC!xVi6Bw-%si26E9 zivoJKANd;7Z6a!sSteRmhht5g05$KoTu~hFn1$5lA)6MnyJ592K<9-F)Ygj1Mx7yP zfnTI#@xz72r}USl&w4~7KQI|ZUy*jZ9hc2_Y7{`6lL`f(L@3nFzrl+(bFWhVc(ZcO zLd-yR18}+OEE@Cvu?42F#lQzBD>nI-R<72)H_(|gb&@+PKBz3lynce@PZ>qVBG(Ib zbsp;K4-nmaS~io`)#?DF7J zr?Vm7Z$4C}U~ZbGhICHKsTNR*(k2?e-MRMsWpI01uGUuHV3XMNimLX!?z7?r&dn{V z>w@~3Tqs+r|5)5lm?%6bxS|F%e^LE?i@r>&Z*Y!J+etG!hky=P_Fhp|3(;swaXt7z zjS7CYjE}kalY_3 zS;>1E53XBvhX^BzSBfnTY`V3lu9-Wq;{KTPvJ>;j*n!34=mXC7=OC#Mr&S0gL?Lb= zqG5cxaF5UwOq<=%1CeFTZrodGGSk%iVn2wzq;4j1YV1E@wL5Bs9p@3>);jA)TDF>< zgUjh0<08WHhf@(u_kvV)IIpZ2nXMk@f+NI{yW2M^g50&y%e^bRxzF9`Xt(x7DN=rm z&Na;b5X}BDrDsHNbL;~-v?@WoY-WNE>Tp82~kZhj06k%I!<0IzspsqdmS`028A=0DbGx86mitV2?fV(#>eMQ6EWBH8m^YK!!)yR`xNk#q85p!?Q|--I8}4x<){x_rg)o zhNVSy6mP&5*)+-*ba2r?&L3WY56$j=C2kY!Zw0BdQjfvYGn8>{DnE!(F@m=O#RI5M z8XtRv!84al!L2p3t8O7|8ZWk24zI{uFBs{4kNmn64HO-@a_sxV)_KV$?VPUL7|W~X z*>pS>lYqcuIs-on%$>IZgghNi-bLqaiZBT|?ktwAt(30NVMTqFJw)=1M@F@{503^< zwRuIIG}B+v+jlRKq8L@M{NPR%NNAuXT$vNalaCO?GGI?jpDe|6N)qNW)H3NX=0q>c zJ8C7ky|v_;e-H{cyZ+?j0nf>Mjk)@jxb*6@fo%tJre+`28h9nEV}V`e$IERyg`;N+{rF>TrRrgoBv4qQ|Tp|!BaBgNnAHDaFI4m1relpi;8~7 zZQ+-!o%uyOL1luLxn4t$ei`Z)LUm#7fIEpUjF2PGU6maLpiDgBRUUce13exJ7=Lsz4`>5(I@|4|%!g|gmQ)!Wf&-!8iRE`Uk=o_D=*{r=xo-&9J#(_-1uGFod>s z@IA+Fk(*Ey{r1E}T|1c~iDHO=@4ehs@Z;fCo4 z&N1s}^Zu#<#vi55&{@7r2o`xiE5Y=)CwtE25kTR= zbn|QUdf!3)w91M}0;}W=xEMkS^dPG{ng=>L`=0Fkl?#AfL0ZnJtECez(Zbor1?tw{ zi2MDMlTqH+a&iZ*RaEcKGErTrc}(9*BQz?zhpgOEa_P}$gP5$!g)B{AO35E0u1WhW z#bZ`1p90;NBPrH#cve;d`>6xyUJG}Drhjx6W_ORH&mQuQ`RBJFY02qz=3o4m?A7+sLxO7-Qx|YJ%zW)9SwWEn{w>ZG@ zbHE@f;>O!tp~vz+PJA;(kQzdB7c;YKNw1O)XCvL3{g9FR*T-5y2R{}yQ#~Dq=sXhT zBG_jo(E#69r$Pb6Z+up}a{3|t6}Ls<1xk66ItwWr$Q}EnPyZr!?*m1;$ZFk}!v-_W z(W8hn(-8BZqO%&%9{04~n=_S%9gI`%zI?MV-ap%VIcSQkrU^SH`?%ZtNLE>Dlz;9R z^`pEy?`iM*ps1reHW-j%OB)!JLNIK2dy_vrg1$7#ylMTO1kib}T_61(<~>r9J!>@a z7s(;ig#~BZTL;)ZyJ}}#4olyGr6dLS;)Tbh)DdZxY1j2%s@c{EmaTD* zg4=N+IW@(LMVaBrPpi|f4YflnLrGf9ve{9&gSm4hjtm_-C;cn-sTkd2s!^6tV#tvJi$t2PiPwbDCKz(H25qn@t2$2AbQB>I zIZ^f(g5wB}3^z)NnlY?LB^cN+c6lf@2!qAW1-yc$vr_}N4cm3Rs$_%((N>@@$(s*a zBX58Yv|wi>J7%AkvIG1hVT&&T)U4X~Z0wEwEz@s*Tr1jgV=&4f4u-Tb&^)*)9!7q( za2`202MmXi$w}=@Yh;F%h{Hri#qEo1!dNa>cx=IAyBoq%mEV1? zJ-#75rfqV7&(Xv9T637ASs!lkw38^xzyTC6Z>NdVvYWhXA$2l+;Cf=s#d@hT+0wgH zoe*@aAGbHF6DY-WoLGcUwO*oqjvO=%izqfLWFOPU-0|s5bp_*RA-vEj$lp75D#UXt z`F(V=wlEn8i$|5-@{hot>WD@-JCfXK^VuQ7;)kO?4@(hc!kx%520ay7YZK%KM!dvo zJM}MDI@!3kXiY2Wqql02TR{089?W6F=@L>F_%!!&Bq@6cWI&j5>j@dui_D&yAG=fQ zY(TPM4(q?>1DS)>GcnfNoVQm`T-AyrAz?!VR*1EKWR%`FtTGuviY*G3Q`s*iDC4Sm9l)k$Vdg_|@SWy`+Iw_^2 z6rm_(Gv?Y+<~Ee$FK`Yop^1YUw_C4f3ywVhD0`}z%bPoyGdJsoYH;L_W{CXd$@^=I z6QvValc^-NAF=D=Wp=@CAKzoKc6NVa>L6)|U^eGqjFr_XDa*zKfCQ3(-Uk6Z>f!DU zT}ypHt)>KRO|HJ9bAIUQ8I)Z=eZ{$V{A9VzT|^oLABuf@GhOybbk_>66dtxW{CR0d zU25QrKYQ$sdBFJzK42$xV&ARU$IOD_bZJ_cb9zAfv=LeOHco7qvHZ83d%K@QRp)%1 zu_^5^)Dn1-5J=iZQ{uXPk*@GT!^;U z$n;#g99-=2%_zlG;#hmidC^w^&P9T)viBYn5UJ>d&QzSXFbbS)N8R`= zXa!wIL8M20S1`XX|1L>gWtvBswpy-fo~)3+lA^9@u<=3=%>Xfb`GK1&ow72=)_7p6 zuN|jHoK3RGHFYpp;M=a_iWSa;ASKxK*PDfGx5Tu_D$dgUs|0#ya2elttM7tHOSf!T6)gKL+yG;0`z>c0u8m{?IIDzNX6~M z{!xL=Za0`u?djAGp9=BY%2_5^dFCVE5{40WyVHu9y=e7~4|JZY>3wkNEwz$$>K}sK z-pz%%QXz(u_bfczyjWi3xA3&Ds34D};}l5})@3j$z99R2-5v&P>rMTQ&nP#KA{k`d z`N(}z55OZ3wJYzu$swxfy~6{A)E-pCD|_$h{IVd%;yw>W@zm_2(+mn5xUXJg&NSJf za8zh?JS;1nBIgQjHLVoBm0mq14m|FFQiE3szD1CBuLk4;J(ASl94gjT5S$y7*GgJn z+PfK`;c=k=T&Nq5pVZJhPM*|s;nZBw+LVJvSux@stjB(-D3<|OBIE^s25!CMZ$?ER z2jVIEWN(3YG8#Pigg+L)zfABKAYcA$eCAGUVD+xEEyMk`Ed0GtvZviqK!+J=N?wT< z6!ie97P~;rYCGw0I3ZLRX|o*G?5Cwfmp>Q3v3<_4pOHt!h2j(DTK9)*5(8S;0d5xG z$`Ar<09zOa|c{LiJaqn`UJ;c`{esFt=!XSA)K2*8`+rlW_@>>2} z%W*HaH@wbQMr$eX@DQWa z-djGu%oF(L3DawJziuC4a|m0g(2QibB_2%V-f1;Vz>~K}J|yp>?ZPn`*%G+~mil)+_~c3xN2n zJ=L1#;_NW7)Qm`2XK!kQ-u|x^*4?(KX?F!dP^S(Di#F2i%|ZVh8pioM#bfRPAC~QDCf|^IlWJ`kK1It zN@dr?V`|KmQjChKS}~fzhDamxqNh9O!&c)w4co3hNRoLIwX|I^fltXh&IbjRWLrISboSp2>xw7rF&MuEjqr8f%r%uzJgYre2_WoI%(zD+V9l;|7{DeZ<}?H3oY#mQd&+Ny|c%e7)J8 z+T-o7Bt~aL7^o{WISyD9%hlgU1FZDNCEwO}FH&*k)r8ZwS=423>Mr(X@c4yLBkWmxWtJsTrn`0#Mgsfv;Xg&lY) z&`@58iH-JP8(LoKMdj($%z=#`Dc~P3l9OGbxi^dkQ8%rS?(ZIRUzpBTPOYNYerc<+ zkc~aZHEhcZd|O^b3BEe~U2&Y+x4_dX$;tLn^IAOZzSWn(o}*(!A04==mNds!)1%-E zOK9Ga41P*awJ2#T~bPU*W*M!r@13 zkIL+xHViG4!1I3xkF1ndsmuf!v+kY}&4!YL(=SF2>atQioXPT^6547Pu=fq?ygDN) zTlIprU41)_!2O_I8=4EEg}l&@a6PiTyWhkZH4O9CP?y8k*N6yOw4XEb8Qd zIFZ2#samyU3Sm{AHav7&Uu@V$Z0!#la9dx7O0`SN>l!8%ct&I|_Evb_%Jv=zt1;K> z&ocz zwFB9}+os=)>H4ogj%!ljF;V3>)hQyY8|asO2n$by%#@M8og-dwiimK@t`O(`xN2vu zhDUE(1v^SNhj$|YB{F0lde{(|fT~yvQEEMan)g7^{q%2j?VmcupeB{5=CnF&?~5tn z!8N+=|5&BqWhm}j-{Ok5*j4YoJY3UiroNW^aR}jf_-Mta;-qo0mv!G2_pr{(t@njs zSdW@GNubSeN~o(@c@0K?p4cdHyU9iFY`~K>x=_5IqK;C*DA|`-)(7Rd`cybu)&jSC zE$AfSu#b`DBA#e1BaT`mbFh1yxaEY0<7W8$2XPjXgv2gcLvcP8dW{*+-Va&5C2sAm zp;V2Zm#d${{8e`N)eQe{d3br@_3OnJV=APE1^xBHz%y|&3B#H!&O&-yyqaJ4Ypmg| zOP`;urn(i+dGGnVcNM8+3!wV^>WS^ocKhD{CJwGH)vvZKz_`cfKY;p=vd?83LH?UP z{{KER@P7u5|E0skQ~iHPL(HqSc?#+Gz1bcy## z=L@@%TX3iJ9wVeqJE7J1btzjt%a$`+I%ma90Z>J>mijXG_FouYd2e&t3v8)&7z%}M z{mp9KBg|0D5l)5-oPa{7^CDrVz0@`YBdDMjQ$Ii7uUe{XfKZrky- zl+&NE^%_4c{{b`3^fk`Z+8Cxkpagq3n(apmQwzMHCOvYYJwojZoE8QrKL6;Y`>>qn zq6}jvK(C|S;_$|0S3YRFh;@f^+UzB0;*kQWgLdlo!l8e)6-h_6tXzkJS8V ztOWT?n`%E`l_~^JIX@Z^pL#S^gI8mTKU@39Ms*c(&C7C6p#Q>dFLabtK-Blq)cTSg zogMT9BqKgF5`G}wgV5HAPn9{(xN%lohu(Km4n=mO?x9fV|-1Mi(4dlP({j)RPR=UEspXJ{MI&htp-J!{8d3({7 z6Vo~lgZ*_^$8u%*33Zc2K=V_TYoWUz>BmE*QpSB4g5&Q(J6hvB zs!s)fj}D!4{RFW=9rh~lqf)~9K0l^)+h&{_Ke*WaoM)r1BDCGA0!w}in!Tz#(ScH| zwAY*1F!$V%`Abkp_%TBoG!-vAKJ z_Uesi+UH0^oes@MM>byv09*C2S#tKgOel?%^6wF}s>L-mOS@xg0 zTJp-gGmRC)UYE~8dSjTSt)qr@;#7vn)BIP1k{LRyX`4Trp{j}GvprE3&Xc}+(Q35M zWIFY0_#bG08_R!m zAXi4tid`AHc-p!k(t%WhJ+9^ul`^B_#1|fodezH0o$&w-ykAywu`K(GHLIynUo$2V zNLNf@ECmK`{;k5;hIHHXv+6b(+F?z}7s<4eDY31qMl*Dl*42D#8YEsR1CQNCVM+oC zk}g2o25|4z-x>6))MEOI7YuNQ|D##*PAUHj{a{DTadG0vtJvfx=w-;}YWPa2Nq6a& zmi1pLsAc~u8S`nT*Si|!k{M*f_1({sqh*8MM3+khZXOF>s;7PnzWBZA0${1H4*Zh( zNw{xtKI+u>rqAE*Leh`IBVO(S@&n7Q3%LaU3WX@8m!xfzH7Vs$L|(~bD{kmMsRmeb zE~t`xcQre8t=$eO3;81#sttDDG8!cdAFbbIHR3*Xru(l3#N8CcI6y;{!M;=n@KAfW z@OsQrLq$s&s9H#JrOK_(Q3{ z!1=a(tycvT4D~>x(JP55GjdL80jWH}Ts`8hh3N8@SQ~})yyG2N4+o!vM}{5;L;&TAlQWemppr=9u4P0BrrCNhGv#h0VjQ%`bcXe9#8ypWpxiRz8-1m^G~zw@ zQz%<2t`g3TE$+}~E4a*>d|-g@lt1{!L4pD@!l>TUCYrwnZYY@Eb#~?|{fjq!PTx8_ zxv}klK0LeOhdyJ!?@OO3!{4|5(lHXbzU-sFUK5)LKeN~Vz9Gpzh(}!(&9k%r#|ki{ zuLvp^ki;LetG3gx_J1un`2VNg4eD9DtHL2S-$#5H`9~>BRGyKI02hb~4q?le_J^y| zY*U=M`+h+o5%55HJ}EI*-Eybp^D*T_)A{muqVp+T3#7`I|5_Ep5}Q?Q4_ksQ3m|gm z`f~vB&naG@}YM3$>AyU4~N#T`G#wK^ShdGGDn}dm1X%)zdbefkK&am*?0Qe z{#WOF*yh{+vC|rGr2@@{!+W(!Z@(IsXID#XYlojZ#kj*Dkw~qZN1o3}2)} zp=u7d{#)j8xfQ2WsIG>^%?3de6LG#LmWf?@tidAnf8f7ubu~Ew3YGTEJ!E}^v+rm5 z&(Eh}Pm}mKG8n2iahDv>Fv?AOBR&B8)!yD4aeoRwd}FG{&-!N}-OnezWR<{$M#d;z zob4GZ>9_e;e~IBw{{_sjDzo-loOeoMQi%Jl0o^IWvhlYJ8ROZIP(bD0f8Gh#9uj;7 zIm+wysy&qyw{66aGbI#g>X3C^tRP{7jZ^vGVXm%Nz8G|U1Pyq<7?r!jMOugmoFLZ*~AwM z3_!DT*SJ$!_|#0fZoFosai%)9yu7XUMydkS&6xl|o_Kj(KOJs7y^R_L^!PozApW0a z5Sx^>D)Zyx*ETC+wYH{TIFi=EG;hu_^MEFct6?BuaZMDP=Njs!y)lUr{J^6?%E2Y2 ztplHK#t*R5{84_Ka>h*Rgs_U>?~-5TpDyy(S3J`zR)dH~teHyC4EZv2?*==?YwS{q z-n$m0dIBncD(jbTATsJZpn#s>r& zov9>UdktVD$6sxsTshP@a~u2Zn6r0|j0U0#(b3ix7Z4B-txQQ_)nemlUM#V}qxYK=hSLIeSQpQ^W6G05tG#Q}EBt z_}+o||C!>h1>7k1nDmq6$8+w{`k!aYj>6T>mOX8Yrs?ik;Ni>#gObmPg_or!CTo=P zN-uVWPfy15883~9XWQsCpaeL^kG#zPp*sU24es&hf3mS`5~>P`nQhms4)}@VcCdft z>;N`%X1mj9(;t>rr*om(`3+yfp}wbc@aM|GAdlkf3;`2mF~Rf(mCheuS&E>YK*>%p zIux;0tr(p6v;K9BEt%I@$|oEYoF#nLnApxfxXTW&9P=S{Gm8g`?$iJANVEa^`3J6 zbR2Cwo6Rjg22D-5`;QwcG3+`upjRj(ZRLh%yIBG2*RLeybcviH=V-Qf?Mx9Fk%$dx$?lPlE+cx;EamXGxt^CZ5^ zY~O1RE~w4Uv1V?t!DyeC+FmS0r4af;(EBwXMscS4-kJj5Kz9FY^M#bz$-)l|mHBiW z(hOIf)R07lzS?-tVLQBowlIf|CGx+7hfHobo37v98WTb&su7nun=8_@%5HyMdi5pd zq4*erP%Mt)yhRbyzTUL}JYRKl7r1pUIA9{E1)ELE?5uX{VV= zdfwjkI#RPyvU|--<+lcGQ9&(Ut)q`#mUVKrr8gJKoYx$9!uoD*;o?a0mpZ4pYoQTa zjF(Y>QH%6t08!%pu#MM?4#kll9RIhpkLi`KOp%Nbr-zIw#SmQ_BHNcPwo5*nI(ciwV}aRUl1z~MYEi?iancLzc<4dSeZ|K$sTub7rGPsQ(V z<{ax{zkXG&&=t2aGH4ls#byt!AfWNU-xfRNr4AsL^WZ5dNZNL)k2nu2ezwWxUo%5u zVAZ=(!ydR_F8k$7H&O{}RikTYRmp_Sq*d&yDwbkI$xdtl?Y!3nNiD=`*`t&ds0SS^_$5w= z-pir++1Ko3Cp1noI6SZgpr)VnkBGVLM-UT^x#6sblYFg1+-@;NOj6dL0w}b2w*)b6 z=~YSdIYW&XG{Z9SSrOf3MQJbqvtf-J5;yCBuZ9vjw<1?6BR!WP8S<8&25VarW{dyy+ zXAxfD=Ro)No0``v@qsIfD;&J6x?{zx>ta)2{4Zly;R)MRP;xly&Ryol0QnXzN9zJs zx8Y|xUT0G_r_Li^-kyK^BIQ%P;xswtjXoNV0$;V5BqyBqh5rk_1l1q^*uriyt-Nd6 zw}3`5v?*}02k4g6a=+z`wJa_i@TL)b#YIfvMGgC;RIH$>L={TQ92fVGl9iZwk~zD5 zVnY?82C!dhq-XG?&ZcK8ywIy$9ITV)Y2CTC5muBN+u0In8&LN5zY473KMd@zR-q_$ z%qcxAH4afkyMSMN!n0Usx=O|8mA@MIWBcxBamsULR575vEW+l75*4;MZb)mw~bq@r8$p4bFY-tX$eGip5l zhBR%M*Kz|@95dxVre#9QBGtJD|^lY%P zME9jV4mWdt(k7OGhyh?4LfV_(K@@!kKaSjMNAw^TzZKd;EyXr%laP-sH$GM(KH7%B zmrI#{LpZ!tG~H=1T#2YDRolu{wRv=!Rg<=n-Oyh^m37 zjRw6Fdib)2m@fj{$-1UPsf@eA_td>`Be{3=rNoJNk_FraHK>QrZTAJ@*hh)7SSjLJBeo<=CxforUiU%Eq~Y2u2xntrJW zabdAk_`V*YNvr5}EL*!629G57DE>{R_yTdwXug|C02FF2@NuJ>NIJT?OrCxINTx9u zpzHuH@SCj&^Q0?H(jW+TSgYYG0`t?9u&6`Qh^a)^D`mZV=sj-GZb*7vUzf{>R(I)O zl_gZK=j3SUez_@fi3`TPKVf51V)TV0oBCFywsDq&gJ>${340UTI>$>frF+9d%atkH z#&6UtuZOE9*30%=UIb?ge@}+UagyENPyJSg{3}UaOK5Pa#l}9;Gs~uSkfJ*s_)aU@ zR=`a2?CrHoD~kr@!3I0~fsg1XM!&87MT9t_yk*asp@D(#jrSzYYp2Ek?{OH;JWh%6 zd9n%PmovS-FoT8#W92V5zxs;HOrb$*^+#stm3|!L_oNIA0YtxxdIIWHb7n zq20f?MRNiH$5Ly;;-GPbr@a(7;S+{Qd8H~@ekNMI383uhx^mcbnIdLe?CuOpXJbhO z|D)HXi`PbKGr22PJB)m~LyK!lekUbNeLtOxKVB}Eg>$}-UezUk;1|vpcj%;^sfBzv zs%b+J8}oEw&4nX&P^fdnS2pXACA51hgEum0S~!yaf7p8Ou%?!-eON^WM7mO>L_kI9 z&Co%R;t>H6DUm9@B(%^8ASwbbf5kqJJk`Mwv&Qp%h_g-JF z{YUoB-kF&_Gi%*z&ArxW*pJ5_l=9mctrPE$6r<4E9WnpWZVOW-bA+`u9h53DD<@=A zao9=rH1P1t?XlbmLIx|28bkC6hMwcKUr>NLWcRF|`FqZ#-qhqQS-~=Q1QMClpSnA4X>8O zZtAMkj195!;f$HNMA)r|f1M7xB3y94&r$7jtXcKl z$uTI@>&OZhs3LchAI5Sjw~5&xa5j&q3bCFEq~n3qzRIK;%Ka2m>nl`wO`l(FvxPfz z!8KjMhaOg(=(IzLOGU}-m{k717k*Da?VmuI>whO$IU=BNk(}0Cr$G+d#i|}c{;bzT z@t;>0zRv`6;`@fIV9)Au@A$P$)k2mVgRROs(X~{CdG*a%Ka)?(R!@81KCrPI)6adg z^szDoD?Zb~xtNDhKhEO9MSd?&8g2^NRDv@gmQm6e#+sU7Pu=h%YQuAabjrFfJXYcv zHSo)-d5;6~qt_p&2RsDcU&ad~ujQqH^BAsO$RYzINqiL(r}CxH095Il8?~WlPo$YP4Xb+p_U5%>H=6Ag#EkW zXZjrQU*zTG|IYUCcYXrZlOw`?mUQR@Ozm%b?ou>j@&0+y@8*}Q4<@xMqxSi+#T#I? zQ%3p?Ah9*6z+Zl-LPTon4%Ah>*{{2b1#z*?1yOf72M%D zL{f#EN=ljJ=*~lv)`^6tvZHly?n`qv%}<-oLT3~ z_`9)QaTB0*mv;xAT-0ZN!)ZD$oH1G*=#fe+S$lA-A}*dO0W!q8Xsr0GZ!Gc0o~rOR z7BYKht`=HMcz$-uA~lX^U%&eKI8z>^DEY95a+9$wpsNYHRQIAWNZfPGF7O$dhFh{` z6u|PIPE+_i6`RF;sdPzy^fde)EoM(=3(0MDL)8uS`rGl;UGbk*+Io`SP(~%a7puEz zrWcXtKoRzjytegivNn{mX=MMdiB8O{m^(DHuKY>0Tkq6ni-$$oYQ1epYq5#)=D~$1 zE*&&9cJk$TSy*Vqq)$b|ugz)N^f1LNXd(3H+y2dqUHB)8^`93%ZwsfX3mgGz_X##f zl{?`jM}VSAPq43~*O117AQ)LC<-PBK?4sY2JjY;8&EFD5zckcaOD#lo#VY-$Em?mj zzBH5m$6}ZXeID0xi;*KAH6Ksdov6_4@ z*WB7IDMXr#*vxWYZSqRET7N27IlNL|_E%nV<3$;X3Q|?CeOdJ!|1j#R{OgMcXt~b% zq2z<(3wono??F>o&#$wHwfHlRcblrXj;|R?HMlg!W@K?veCyi3rXf&sfb$ zAH%FH=R)tj>!VK~C&S5HOVgy|o?E8(QyRtgCC$Hhws(845qju_*R#S-&|&REE!flcO1J^zJQeYW_z38%xAfut`wp*9UQ?wMaa0f^sU z%&EYMl;7CJ$u3&!)@+kTE6Pqo?BeswSMiFN<5sn3q#N4FwQ=0;)4+ELYbH%}vR{o@ zI~*hqAW%HE5My@XxRL7n*{=!}5Sb%GkW{~DcLxmFL;1vNa_4FJ&8Wa^ z8~JjDFka^|z#5wA-?bS^pn|AsicirK0=#)GUUl}F4*3A6vV188frELF`xLX4*AV55 z=n=|{wb_%04;cW0?>YY0yIYvyBUB%T224`0Px}sj zqJzGwEN2nmO=gv3IP+!f~Az!0j&l5~%SlV#NoKi|c_&2@z`W7^Q zS0(kzo@2ZcSwtsP?~J z_78kUv%Y`x1{%WapT@)gY7mlAiH{u@6fo#gKs1xiK{*+Rys2Py{59mXTpj(&M*RoP z`yn1mDo>KE8b~{Y zcaYih)^hS8-4J#ADmy1P&`t#)RZ|g1OG%FZ*gkhKTY& zEgUfp0N(xV^4=Arpw?@rgh9lZ>*ipuH0l#y-v0)BaoZxBnQv14&m!&sw}})lcQ@5BS+IMOOk_~Y8OJDCVfmn zaGT;EzwOoLtu>@>Nc+qslsO8-hnFA8GRST45L8lMY4Wb%uW?P<8h&6nZin>Di zXm!^#iB*H;{C^J8UwgCD>km_uw;ILt7H-I3>C~d-Z!QF{ado7>kX&%afF1>&PfxWS zxnRfin~o=KKWju)g~VzjD*{i)AJK29FX450t$M!1Hud`eBXG2hN$;feF8A z$A*nn)RF+faC_CIt+%NXlL1Ts$-bI0yHsitDOpU-@)NgxI zRh3nYMEX~?ToeVvqBrZhm^QTeefXPIx^6~RVR-8ahpC=J)5@;*w2#z)rrj;_@}-v# z4xzMelDF}+IfG>&+b-->^3TEAX%(AOqU5s%wd;h2*4wf+L!Ej|1z184H}mT|kAH6XRuRa)W4W)n}E}*VieYFH*~;FkO77GN8e|BTJzz z|G49?gil(r*2)d|k)ZC3hJv0GW`&z))udm{`J`9bIH0R@y)CdYSC)i0XanQoii>pE zpCDYznhZG(uj=WpS4ghV%jV#Pr3m}nHkJ#W5O$MF(raoYBn;zsA}ISC^IvIB_j23w zA|W>&E)#1RlTLV&j}!BdZmST(gE-mNLVw5;TH;h4E%@vO!XD%l8 zmNww0fZq3eC-<1AZlbRf8RyepID>ed!X#55jVbnZMdCx(fM8Xg{HgC@L?D!(88UF# z6?4Ry`O#AAyhl&+@m9#uU-h(->KS)Wv~(9<(BI9>jtiJi>oJjdbWzAFsP^Er-gC|3mq81QZ5A)wi{UC?$G5(AZ5Cu*OpT3v;jhZ{q(XL6Jv*=dLl21GRxz-u z#eC)MYP>RokSG!-LWT6tNnyX5uT+6?b&sjpHD3JHEPufn*6@g~Y% zmWzRG6r#5h$QJ9foWpyfVzs5Wsau@>ywh6Jawlf36i21#T=+*bEMk~o;Uf$IL7)8A z;Dp3zaXxfIrPzlEv!%T>NtbgVWe}s6wJX)+<+;gH>_&njU@a><*RAjQuB!#?y#V1Z zXjZF92G!52%8-a$cVvx@{M1j;TCCaq^6)jGYC?EKI(V}LtJ*M|sO%nm5v;CHTF>G; zLVO|fQoE1=Z1B(ydF6#54k6jxet+Mb3CPa`p=_m)&$u1T3iR)jT{5=Vqjr7i%PyAo*a+G$by z*OW5=fnnZkNwlRC5+t;+hIH=c#l6ci4~KmPyQWLBW5Z9^KZtwa9Jx zaA(w!J(`Nx%!WSG$8AoKoGIE7Gm( zKpq&+JhRAzWTJgn&@Qx_v=4?LLA++>woa8FhR70LA^OV3jg$wJV)9&Ov+%A(g43}2 zG#OffI!B8cLkt;O6>=r+nS6}4dsn>Jtn67M8%10A@X^=ryK?U1epR_W0vvGj8rvn+ z;$2(GAi#?qL)H(?Rkq4gfGBoe0#n3O*Z%hR}wrXOns1}x;^Z-i|u9rfx?Rm<5ehXh@84ebBFAVUY#LoyB zSTDbxq}IQkuH1xKmY3hqY}wK;oZ(Ig52|`fA48g5ZvUmUNk;npBO^3ekV_Ie90h3< z*XH5l?vdoP3xsx0sk%v0&+4H39;}k^xb^HA6{GpM?M>SVq?pejWUTYfw$zv$UU`Ic zMQq-Rvw;)akG{JtE%D50L%7&eSVt4#zsFvxP2Th(L`bM2LN&^t`` z5rqDO3Zs={a5)sAeNc+}4FES;8f@1k!vkl$yY8>u@36{i893hkFBjm_?UVJI>Be4m zuG~91PU;{tEQne^^@}IHSSzHab+c~`fh9kfJ{2CvKapSY1^2@bU2BShn-=erRx*FR z!?X!iv4H}I(>T%sq63V2^*M(|Qg=esr>%tq)}xgNvk>8};dV&wMb9aB zv^lso8#NrHnin4T`};AuHw%~iy;Y*Wuhn#?aT*8%xC`n6TW*?~BAnH}H%ywNj=8IU z`}s~bJ!wf;zLZ*8bkdSJ_L^Vvs$c_wuEv4Hy0WXq3RZ%!jyoj$ftLPr$6#}hj=wDxq#>r#XJNd z9^pqL%^W0YgUl1Y7#A2LFL%9HnPJnWij8LMCCbSrJYOS)*xMh)o`2Fb%JKqbNw9M>tn%ZsEH&eKmIFcsCqn#G>ILzxuX1x_2 zEb`C$AhV0qoutcIeh1t$J!g9Bz}_0s7R9Dpu=ep+hXQR>Ed!I7|F)iUHH+eIvRHqm zILZ3BBw4k!1i=P=9F^vI(BV`rcFj9`^L-Y?nv73N2EcG)1aZ*l)u{N@%)cwN zLA<`L*0;jKkAeI#8wwaW+d^&O<}k0FtEDQ-Q8ersskd_a_{;<$Jd}LE*Z^@&rZTsk zd3Fmw<0+7peK{#&miC>*lHP{r{@ag5V&GR(%oDcQgXT7&%Ff%N5*B{(v@B%{ySn9mZowO^~pO7|>BSV5Nk zmoHosF1g(q#0Kn9?5D@Gc%sUg%|qfE5qPC3}(2WVL$+VaKBI z#qrg>Ut8wju$)&aldM!VhOy1QG;sHvJJ|UkzX%|Zt&-CHmrdK_>xiDweY|NvQ_8TB zK2!CtVH%m#sL-sfRbRAhGp54TxaUx+foc}rB2 z-$0ksmzV2b9(7QSM`*%F6Z&2aM4!_jDVg+KvvRM;%k60ajVsNByDH2VaswXj zsERdvE%fgXkhN&{_J(g+Oy2z5<=CWqMH6IB8tSO!(3-IAtHi6k$g4gydW|?i;yd}; zY~rPhVy%Sf#qZ^nB=@JHV<484cv`N{UHfI{bP+dghU}g(&9px0hX;Ml(FR!rsk95V zSHh!A4a0gQqes|T5lyi^9KZX*EXaENuZKA-CXcyn%hY3+_0t--Uc<`TK$#9Joc3nQ zw}NzUG9Vfl?LeV^6Nv0Gls0R6Xh&r6yno@?v{yo?CwqSIfn8wM?BU=iQ(|?gyYl2b zQrJU`Z7o?rThs-5TLP581!sk5f zyQeJHYwWKqUAm3n;jk@n&-}O(5=dA%`WlY}hr5Pu5Klb^=l)oo8Z6h^g)JpwPpx25 zq-(~8kN1w_4K0NGsor0?Ffp?8C?!(tb0%5U=E})DW>qv%+=tJ}DYaM}_9L7_FujoX zi?b=A^3-KiZ6D@Q>9{T*2%gku1VcUYi||(4gyG8|y5VLuf(>#`8hbux1S!An5RnP# zc2vtInYdYCjVpv=+fm=u^WtTlH-K3GC4Yy_w^V_X9CShWRm)jwwBSm1Rh`sZ#)@zR z{fr2XHoa*z{+S7;eCgqV>VzKY7{ew%&xjG!s_OD`1{MeGEfU0*9L{AD&J>wkPX4;= zx_9<&N^I`8v9>zn+Tgvj>am$utKJ3Q$cf+8wQ%?$vU)|U7>pCa@bda(!==~;b;2Hx z*Sa+o&5pN6S@;}=a#O@N>UQODJqHJm2+B+ub+7yRy=mR<3Pgl=d5Y%76DJlT8Zt`c zI?Cu}kMdl~3=yIXOR#LTV+{{SQk2L7w1xU*B}Z)o`KqtqA9Q{-Mtl&3?|o&HAZ|YX z3gNQaN8YPmrI%5M`{conp^ar;&l)MB7-VSSE}{8>oty?QQIElqOW#%j@iXjup{#!K zj)&JlzKVdGauzPTb5;kO%G*=~Z1%HCV)jJI`mDExO;PYw_i<>Jbq~FXpC+i<{K^=lnT4cjAd49~ zC!fkXn+38l-Hs>zOs2jM8uFj@THzaBlJ2P6fR!IhS2?e}1wAMRo>{OyP7lX6V$fy? zyZmmWhT^Grgkc_T8I;-n$skAFX@?0%XQk@J@wMFvYi6(((UN(NV)|hAaGM%uHk*1rIK!++adu*$mwW3q)brrn~nTAE~}57%)GcN%<80*H>O~90zdul|;(xQ>I5P+}H z7_i(yedA_#)cPuGv$V=7;&8%`AM+0!JFoF8vFF0^ELketkIlwD@#Dj4HbJuR<^bxr zU~2~%mDZEgCllU_I#XBQE2NfEjv0chyP@-|py|6hF|!l-Aqj(^InI4U6RFp*OD5~o2v z?^J>h#vMaesasjSqPs`n2J1yy_$3IcpJFX=F#_k)aGv!o%~UmvpbY!M=CTRm_A#6e z#0thfhO5Lze5oQBfqal}HE)cBZq+RTVm)*CnS+zt{Tb?4`75`qVdEI}SClc=zA`7} zc-Tg>6?G7{LQ7g{LH*VdA)tA&y+{fKTFg*_lx(bJk*8pcP)P&)?j&^`vhu(2|GU-yT>kHu zZQlpcSN>1+{ytq?f5&p?zc>BQW1V9H0#E*bYW}+LzUJrux$mE%4ExB+GU)|(j#?n- z00&XJ&a?G4KDoT1$DTAB+n$IH3{$-RKR3VJZehU)(rI4kdDF%t$thUqdg%lKsrIu9 z@BXxa-1uoDu3N@4+LDaTCkw)hW_2fXOmdwOW{ycm78%L=dx0Zi4`V#aMQ{EemN+G9Lu5+(`8w8>VIR@&$S~dUj zP~BGP#$y9%!#|C*judKLWlbP(s4G1r2KSBRQyDQ$x<~V7ioZ}PUj~(J`f7iZiy)qJ z7T$NJCF;OZA|c1kB9v(LqrXlD{gJB;Jl1Bt(AL6>qP(=T_p4LQ@>4 zho~lTGpFu2l-+zW1RaV9zL zcdvg`vtd28R0x;AJe$={6Z>WoHvCt-sb69BoOptXG~^0RLK!AgQa#prGre0?6v+1_ z-q)y1cXR=fQ}B%^Gr{gGQT#yOQrD_leRto;D#uay&rl7deKZCxG)C3EfIgcXPTK}} zm+TYWxATo`2QZ}o*2XZJwDJX1TBaS()2vPLo$bV`xcd4cFqmSY0v0`)S(ROSJ_QuA z;hIj|LaCW0H!W3Ws;l)jsj^Q?>fpDh4gxZ< z6NKieRUdkU-K@~LIT1;lDCUZCFHqHWBKN0LQ)HZK(h_7la8{0@aPevxCydQ*?W@=W z`;3AXzJ$m7_!NK33z_Or$GEBmKc%!WnAOxa~daw+FhlZVDftsBFP$4h^Ykpqr>&f1(jQktCrvlC;y zhYzn@IQC~u(*$k;DPRgr?TrpF_8FoTo zLkSN!1f?rx1vhoiJ-UTT)YaZ_PQ;ydbzfiK<_E9uk1pkxfS#`GL7kuH<k>fTJ+@4g1wVf z&OU;oC{=Ym;;dH=bhAm&u(kexXF<+v0E3I4Hcz!`huw!YI*(WcgLEo%?-56z(Pog^ zw2Gm?J%h0;utG{}U{0#ul~3^B!ElxVzoJ9M-$v8P!g~3q>rthLL6U-o zK-AcGHL>2^O$O1Cb8!`6hl~cQZek~Oi<>~ zK9*Ts8SiSEWQ}Sf!o{>q^Y&HOw;kk(lBD5(uXB6697@Vo=+#F+im7Bm-}O@`lZnMo zsVM2ZFRIgxIzKGgul+Ms7v=N4&yNXU-UmHfGczb0PjQsE@aiBtgz<>BK2tsX_=fZn z7)w|m{8ok#Bkovk(Q&S1LH)}hz-ojnvmbIP^M||3Zs$RNP;b(dn{@*x-7pxt7$~IQ z6Db}3lOb`zaCxMbl@l}QVRn4d43*lBL;?g_PS@gJnpq&hXziw63}RP`XpaB5jt%1MXf|LCVhAzg1yp;BhL%H4Jg!-+I33bqvl%b?fLV!7 zJ$&VKXq;+)xmb(kMFlcp*0suo=A&`7R8L+UD7=|ZY36iv7>L+coX&t7+xi_13TL1n z<23Uagv2;rY`_Ierd7%p)tIiEwD>st3i!-JBHcl^k*?VGVXZKZce7;(G+B*71ZjczTRs2jIe8kc+T>Z)o-Up7?kNq}L~=HlU~44FG#Uz) zs%|;vYBmtIIqP4OUl}vf68c!@L-B9XU&|Hp7gZ#j5j2JA6lV|A263A+ny7g3BTVf5 zCqBZZPrL!7poFXW2P?kjKOJ`%4~SeG_MFTI`E&ELz2HI-iMb@EzI+w($T=ZH^O^HC zoXRcnGlG{AWTSZ$FRnNTJ@2@k@<+>edg`v(n3tSeqJP}_ksFnnK1>+cO?a@)LOP!7 zE;wZz0D$@mrRCXY_&anfOvb~a}w(iOFXxsf+{X`M?JUi(mLe{%{oYI6!V2jm2-kG1^Rcy-Y%+HM?^3&dB1se#uQY8 zpKzkH1$o)^y?*yTAm4lYU@l!;>Z3I%dKOWS7QN)!S`|rS(8j3D&xuCBJwM&Aba_3J zP@~!wE%q?3n-7Jlv$WZ|-F=o*!JH*nE4mxo9Ku3lU8AjHmKC}P1EPVRXgAx1vp3K% zx#+r@43;$QC-eGQk^Q&6TOq-?ZqLshG$)AK7;PL4$3>k@Nfrx*uk+9DopA_%E!pnr z(~^hUYZ9So1k8`|Ov`M_KmkqyjcgcO+UVTri$Q|D)K@rV6wbOeF&ax;e!v1}Ris+S zy|U>IwBxuCj_^AkkjDBn_yR|gLdx!6nO_1ODFR6T2{CFvRPgN4vl7kkgwWq1&pX;S z{}L{@9Q0PMgB;2HyrtQ|NY*nxI0^DMs@bJ)O=%0H{|A|MdPYLMi}lA=2VJunn{}*j zfSn=$+~Q*X2EH>vN^ipZayMZ923(UzO)!<6-*c?woTHh1M09TPd$NGFTuzTjwe(ik z!6HgBwa1dqKcX)nnOvr9ka_n-Jx?j*!NBUW4`~VC53o1Bw`^87a`9@j2ldUF50aCr zzgdumI*{wBXL)}V?=er%r@41Ik5~*hWrwjXPuX4!OOo#mfg+4T6{5;`Y;I?u;j-$4rPZgjpCV|Uo*^ebo-H;b<>Jm7t* z*zUj^Dg&Z4fsS+xvJH%x5bt9kczWy2D}9A~T1(;O_#Dnj)mYEw zOD`jB!&s}(Er52TDA*$*^h@==djl4SiG~~z%a`JR>51LQY^X?Z585BfRS)l6sD(IT ztEa1K{1^FN_4D9O>6OH0#>2R1d#2v>H9elzRe?h|=bBsW!TqSi7fYd8w9shXsnUMY zn3)yi%X=vlChV(SIc4#S0`e4rRMvfuFgDaMmck;xTlU=g%7WuJP9-h%17PHw6nP}+ z$(FIT=|N;`Hd-^L`HTQDw0qgDhXZc7w38y%d);sZ6O=e%FjbNkWc(pYo?n6as$naQ z*=nxxNgw%@GC>~LZUkO2YrZUvkn^sde|K{h?x~n@)ixsX zFEGm-Aq#Fl>o5I!>;-#|l{>j%z@TsdX`pdtF~t1L;=&bLF{ZTQMaN!{r8lir*GIa* zzUYT4^ZU^uB1=ur@MAAI!gf6}OtIit6)tSHaKL3TgGQzkJx| z70m6o>k*dRE7I?ziu?z|n^->dEDRuF?>gO*U9f6_&fxEehhvN6mX{GyM+$A;wVdSX8Ef`t578T z;NG?4psah20%Co45Zd#8eSIvpo&D=x{DJdu`Lz2D&mQd@sjI2o#vF1na?F89u|bX7 z!~4tjGF8`e14^Jd4IcMmzu>IaKQ`kP;Tl1fzqAd|W4ip4qI>00h0`{uAXiPHf7H(@ z+cghhcaCt;$!YBM1_Xukj9U zRZx`-UK=YWUCYgLa^fqGLLD}XZ+kY!#s__djq((tp^_ssjs25^dzHMKHt_&7*vdJ! z85*YMlQL8_vwlVK^Ggp`<<`6IBb{F*YR_;yH;Lco9TlcREFDm z?U_h6<4Tn}-}PMeFh*DnalU$dV+VR2`!NwRP<&6}-nNIZ2cRZI!q~+6@};a>=dGhd z#zQVk2MrX5RCK;3pTjYrC%2WEtww$kfkqG<`t| zqmeO&>@%;L%Z&Gsyky($ACqU4z&NezqmDY>V!y$VCvve$<<6p<4=9}9&gOnKXi%eJ)#LzTB` zLla|v%8G2>wn4!z5Q<62hL~yOe7LRy>YF`{##%)>Aq$-GY;KqSS$lM*ed`-_>~6g| zBH2|Mp45<>-%K!^H-BM9RS0iB&lL1?L`Y!ZLYdf1B{L8(7`7^CS7W#qFQOh+cD!i0 zR|W2vC>1*@swJ`r4C_=1Oh{w4W}gi=)cG#mN<(G>dag>M(y+z#{)<3s2`zp zcX`lb_`&Raeps>63M!D84X|lS2TArLu=dw@ubZo^083s$ubSrb}OMCkOyU4u7Lzdq)OU9Q#-3XnlpkJpwi6a^d~ zmaV#Y%9bGC9wYD!46yeyIe~#Z6p4ojv*yB_XcM4%hL)|_P4y8!so1cmwV?6BgxwXr zSsfLDrNH-u;iRe`oC!a)lnT36zn<=d&T&a`;yN?J_-+RZ1<-%^XCY$IQ)5k+^Z*%T zJzSz5TC#L&*FfD8tBu;(19Ao+Dg=5tm*L$p0h&Fy9-`#|kH#8~vWGnE*+I5B9(OC& z1$zgeSnr0tCqG!TPSjbcwx1_|ZWp^H6R=?kt7X0Y7Jej2dF1Cge0KlnF-1BZv^G|< zOfs(yj6Xgr;B#X`37!%3J>VY7q&&M#S~#ocX%-j#O7LpHz$qPi`pt&A$JTVgdMKF0 zvyE34wBl;;eR)=%Hx_gzR_~0m{jDXCT(stW%fH(B>Z8g7`&aI^1yp@8X&JFPXmRxzEE8pOnwlczu$&x<}ttX=&b6CtdRxmW@=ykUE3#U|G3FQyc@sLz1a;wz8*$#`qWC}Yq%pSoIS5voc^I^DW05QsLQT|S0anztZWD*E* zKc~cj61U`gcm3)=ZpGJaXOYBhTwGw%`FDojIz!Vbt8%2Kz~#%?7~iwVG7K?%GQexQ z$7uvax@!Z2D=F!Ydv0vY1&>@QCq8dIH;a|q&$|VkRV6AO&IYuZK!zNnY*yypS#BXE ztLvl9-kW5pVBj(i9))!nC&FyoCT*wGsFT{S{lh3cUhOn_xY~(Fn9a_QbPM;{FMTX3 zNezmI)zrAw@xElW&7WHrBGrcpRei|;)yqvwUo;)YrJo7O+ojStb6i%q?iGABC>GOa zr^$XsA~iOByhG-6f-4=qJ>RYzI;&|#ucp|K5xV4kefD(!9ZdfO_&$?AUa36nm$DiE zb&=-+LR%k}|2ltBSeD_{eI_4Xu>^2Tho4obA1%iC!lqb;!*dbO0W~+}=w>0-%V*s{ z^+^6%Xhs%O7*^=9EKKnEr+7sxju(=tB(^z~sY8h_Yu}}Dz4|x621|*i@5!M|D6?~B z64jF}HZ1QbkmHg;+HkW@<5~uf95ahavRkoUs-YuIj@CzstXpQ8V+*J%$(0zHU9DDF zHe?|5CU#&yUX*?gRXx{|U|OJ>akSE0Jn+P$?_k=kG%ZNrjUjMXi@6PMS}~W&1ZEe0 z{ps5QCBsW)dj0h{M0#Qsv5Fw5jibN5HG|YnJ`ub8M})t|z*#YN9Eu$C^_|3S#>>=B zV*j$X$G07N1=rFYHY6?e;tO3_=vn3?jcRV_IMwOGT1@a+@tMYH=q4C4$=;jBg9MfY z^0o(wO5&>aglU};8kRC-2=F0xnII- z+*=lc9a01CUFE5VC3absQ|nrsE?;|CT<}w5UPC5$EqQNNiw@qEHBmx5wybDVe|ga9@p*NZOWp|XIAL;Ru%rNZiQc%5<9J#Q%_0%d0_0mvC% zQpiE!uTd6mt_-0P{ExgtL%jR(R`f47pbge76`<0I-@-S>YPjZ^GpI}b7cJWw;p3ea zdh%sYmu0ZNyDO4gU(utT=RTvPKdSo+GIf&DFC6+0!xwCmu%sbB?w+*3W^u3);D=F< zG~&5hUgXeK;j49Hi^-3tnRx3mZHT9AHF3#;{?Js;c?Sz@rNEZRpOuW)r!;1>@_H>< zG?`-?K~g2$O|L^XKOeS0^ zhpZNC`>}4A-euPW%^+Kk#BOzL%_5Q?53f2%d|3+lbXE$(%h|6hkrgCVSL~@|tENuy zfT^bTz_)AO0Sl9Y^wyqlO{z;c0U1gCU!l#JC_v9e5A~m^kl|L0+?ATXYcmRzT_ejy zT)KMv@tzv+NSwqW@LqY^rB3(e3h&v3#~0*$A2K~*5o~}uOW(99-d(P863oU8bx0@S z$wAjWG5(8PJrC=cbDwX%ddx3XZ)wTNSOf!4G_(!(-FCM8()=rPm zYCduj}2(8LET2-oq{NONBNZ69~3qRe$44Pd@nArLj5Q*h_GA*1cias{IjO-6x z`{6r<^8RoReP%fcZie&dY7IR+-McDR?kR(f&*edssr~;f+#H#b0#?H~ITbY4jD|^C zUlFb^E_@Y<|NZRfcvDwd=lFmcpd~|mFaIjgin9DPJ@>_RQ}52J&dCj5S#yKCpT`Ae zA@7(%G8=A0YhTShjm>{*>C173Ku9-p1Aa|#^kbEhknoIM%0~Y`*4{I$iM4GP29=^H zpeU$RMMVKYigbb^%Cdo|G-*ml2oQQG2}Km7iAXO|QBhi?B_NQ{LkUDcYJdO%A~irD zA*8VLyzlcY*LUpi{jvA4{|z&f` zv6C$7kothH>4}V1vA6)YcK*F?k`uF7Z^t@_UD%Mabmd8s-(Bpted2H}_u2kqI(Bx+ zT^u0_&{glJZ$bJM%gIc>?!yS#Zo72NL)u9EUIsLIiON4Js24x3arjf_!?_IF*v+kn}=LVh`%2gu~m9OMgN@JE-UJoh5I? z=Hc9{I)6~*;2$K0RFEf-0j7=KGg7Sm+nt8?h!I_-NX|5QuVbi98C@j-S?#b!Ne;l= zzi?>=@?VK|E?Lmtc1O2I+vNFG{tle{5Hhw1UgUrL0J)Bx9d2-A-Ji73)eL$9c|7md zvupi*M_-;?&nvL<;>DZpz)l;cgV`%L`VoUnK0Q$@ z2n2M(={0#P1vf{>ZtCawh_m!;>i{lZzpS7%hh z@w#VyRs+IrLaYPc62k?*}6=h9vRA{kwwn( zaG+_l^*#L-!eco4o6XY05e^4|39>CrBA8X0qkv+fZtN#mBdrrT0yRQ?7x6h7vWd<&=PWH$# z3?-zJzDmHlXhq$O{I5$pUeaH`1M$ybA)gMzz|sl>X!AWwJV`2i_$92}ZHXor6v{U- zD3vlkZw~r>Y7wAXKG{uHh%jTz{rzlA(Fuy(4|aj4YtWYdDBQunB^`I1GBR!Ny;2_% z4PSp(NHTUo?@bv;oSA}RXL6F1_Ks`%3z3+~4STDj5AeHFs!*kJy;j(ZMAL(*gX-x? zTkb!>vG3PU>D5cnKG7Zp?s=ie0~YX>;9q15DY#Or*{*>dB5b4BPfuYoxMHw=W^$E* z4M3mXLl20}L;vpg7N54?3@^sc@38gXKTy)Sjhd$G_mnnwri_8ULU77hCG#*ufNb;Z zaW(uMJ;)aP#h{Tl9YE{ob$3;sI@!2a-0%O%}g*_V5uHW(7MQv*ufC^bgx z6-!Iehgc&QT7x#t=u$N}wFtU`hTi6kTU#W9`1t#(B8n%%%U5Df!p zfX~8JPgI-NoIsryosETCxJX}qxVKnnLY^s!gslnC+FmlWu8^LBSZ3bIaOg1Xg$n9s zoL;_(2Cgdm>d|8c==%NzFalfk)n^>Zn-(I{QYj?gM%jj2v88`nt~r+p>7G@BqUr|brqFiKVf6o8)?b(_5$WYvx? zFU`8=P{PcENe|6i2mOQb?Z!<=!qf0zF#%QBqj)o8!UtBU?%OLAXZjdAzVMmNW5)#R zxszEXvz)?`mZHlBErS)SW^^R<{u@FR`^@m|)V9H=drXRkY% zUmm&iWUTUZ+fKn9-=~S?DdUy$74T2TS%BXdjrFrTVQ|n?9eYS$mLV}lMJO|#e@;y*QBCyf94Yb`XV}fR zdLau>zFE#>bm~Li$(;v3Y)ebEsaQAD8z4x5rEp2JQcIYK?M`IMEYHdzhwcib@^S>E z9TkOoNOw&J(`n!!>8vl8c0%g`eA3w$?r}Le5P!71{C+A0mM)Vkm&r*FR@$!k)wvs< z`+Koy;0YC+IUZseF4RG@UFgYz&yqU}+Z(2zu1lb#Q`)`|b|xC@8$ z({xCta`Kd7@<>u(N*?2SH`8a3Bc7Y21E8jz%uoQqc(X!`4!8 zCtVW!REnoNa56FW-JROG0G}Ec``9-;{d(5Z*VIm{m-sbl@cRxPj{!k6_%=`ebkzNj zXN)k`wz`M~&m;QiZsMRHctmWouBqx~WD+4~%=~sMWzSsojRUfW9yH=C&ib2cDBV!V9f6g!PAt?aF~Rx{$}NYXcSW-OjH z5c+OD;lzEJ(d8a{Y=pa0P;4?xGGE3LFC3NId02D&CYyn*i1pCSgxe^=eH8OGhi9VqR2;@ zQNO)h?_Y6#IOkF(Xv>yolx&}h2+fi;stf3lWP zH)&fvcQ8KTqMlid%#n@2xty@on4BEvNJt-X!Wh+Y@czA3h)L zfaI_-vC1neX(MIg6JV0dn(5Gi@|A-wBXm)>U`RzwULRbp|&_mr(?iY ztSfnW@Y!1~{KkQItSFvs8%R4Sd+^&h0Gc{;!rR=dC)(K{H3yEXU0;j}$FHaWl?2*J>P z;mp%QEa_HX^+Khp0l3a~AI=KY*J(g8Z;;WY1f0k;JD7!?S^o&NpMa%CM2iI?sdg&? zI;(+{%C^ZEpz)m7V0A_w4bi-|@lJhRXYfF(-}zj4M{bDJ%sQY1TD^;%Z!8t6hO7e& z$1iGB6B>K-48;Av_d=Uv>f`t)UMsK&w4MK8=m(=d9D37mx+UHrU;!vM2#)2AzOe7* zDVWHL;n5dwDRkm#tfO4enZ*Wy6Ge|~+MA+{E`*-(@{M$Pm=mMMUPza>PA8!YbIA0R zXagbj-{<%zdcT;JHmj|=O_b*iQgqbK_Lb;7a1}acZ&Iabw1BW}l|SHpw={CLDaH?! zJI`eK{ z;nzx7rhus69Pz>C7(gXn-(E;4 zQ@?Q|K$^NSqh6b!w+ugayw+PEHtg?7XG6qXY{GlRMVdCW+{V#^DwOY7|CA7&s)Drm ziD2A_g~Un5!?}DQu5exruqe+F20od#%vxToW2S*CwagNE`Yyan(jFl#OJ^tKxRJi? z?AA~<8&+#L3_IV(At(ZD55#|5w+DUinT5PJK^1VCan2IVbRlX*;E3e@4JVQL241#VTna z$l0PkLN8K0kPEtZQfQdzRqCl+xvp=U36b%3j=a%X`Xl`e}A&m26AIXAkt|1$a__9@aXOv}Ar+Ast8MiU$5IMY`kIl&Z2U^Y=#Sm! zR}0(;(z;I2R(-wfxtqduYrV=Q2;lOSAW(f3`6_xfMJ@J7NM$UwZ@cNmX^-kc-RDuL z%@U^W_~tI2jU*dtRw6S~0~9zK@i*APE2iz3992s` z!CyB^FZ$^StpeL^o!hU+6x}#ABcQLT9gE;|=%RxP8f2yvUt3IjN1EYh*)G;A0e;D9 zc%N!vz44;4&cs-(hpC8dpTf2f+1Op7Iv06^nhV=v6plW1WgPSfTczc*n80 zJnC?gm=mH|){66fhhVKpiQXLO=ApytJBaNPQ!C#d4}?huZ05viL@<_`$j2=jYJ2f? zra{op5NGLx*b|F+!MqwO)r9*ZK;nUrYBSrb(cH4=&a1(*s0mj6eoExq_RIzWen;<# z`=nXf;1EIY>~lWz(qyJ*{aTLJFQMd(5aU~-cf!TY?4xEsJ`%0aI95_6lSlxk^CC|X z5}>`VYwqcht+VIZ<}F?bZlRTlKE=3&;GK=OD8~NGdS%Z>g+V#_{!IK_-`5ocAEVo3 zOlj<8$XZTVPG{Q*pL8Lln1r#x#&V&P&}`4!T**S;VSJ$j{{tY41g!&td|V!(_EJZ? z*sfS$&=kuDn9Ba5W_DARg=-HhR&o2r)87?#k=;+)nW# zVf8I-mv!S($4rNZGzXh9Rrkz6-=_)vLfH2Q*BK8}h=;28sSV%YNWPD)wIbKzu=zFG zM)yB<5U*-Ky=i!QF}v&}M?W;~L*rqf4UntZVQC=i?lh0F9N>9)$~9 z!t2Gn%Jm}sQhzad`mBAss0mR#C6_`~6a-9nx{SFUug#jAqGYWEY&JKhe?Itu)o5;W z%WPl09zMdXQ-bej$;b=IfQow~Z{IZ+$Qc46+w5%cN-aNXA05oFHWEKl;B-cCwbl4c z$XH#OpYAQRUlhNH9>Nqbpq|+^cq4b0mG#qneogMwD3550#kAymTV5&KFmdlNw2@6a zfLnShT1ZpHPY^KU;&1caJrnnZ9Pw35R==;!+#WPS?Ap1x0+`nJEAT=dqP3Ys;x7sm zDm_G~UUhiY>$pO>ZJ*r3Jk=J^rvC1dQpZz=nUh4rB3k^4fH5SUrH0RT@=WBL>Kl2x zGCyfdKh0H&Jedl1TbH7<;@MN3kG=;_@Qjh0dRC9u@e-O^XmhdSSaeiT)v{ns z!|gWmjZl49vkPBvJG{-$UgV=W9@{c;(P#FnZ`)WReUl~Pq=cbgAbff>-%1V5V5h>j z=NC}-VKaCC!v(+;`LZOQ18ShO^VqP2nBGv#c6nPXXE{)^L6|Pwh{dcwJo9#c0(9Y1 zNy!AOJ5BN4`n3w+@2#XO9Y>SGUp%kJA>XyX zXC2LY$ENW$wn}eyf=vqRzA?Ao;|@PeDQ@H(Ogk1x44hmhJn=!0zVEU7`7 zme=mBbHQS}CZIVXtH!cU-%%NkNKes66-(zbuaYF&TgIWaYbUM7ko~XZY4clt+M~1y z!N%_-!;=8G<=`AdH;2C>eXt&9X%;>M^u?|fIKzY#p>-54^}2kLVrW) zjoIL1xxjwLyfb93EVfqd7;jZ$Mg2f*@9vZn+K~_ku-nE5T~1a2xgj!@O*@>Vig7eFvrju@x;p8bCi=_l6dc1{Ic6hwL!gxZY1Jf$aw+2 zriNqhSAXV|=8LTcIc`Mnzxsj;?M97S{4|nwM0>cT7#={XOvhk? zdKDNS2$o0K=~_Lj6W!krNMApd$MZBDh8PeWZmlj-M zZq5g-d=oJ7YAuHEzOPy}{_-OqTiMh~?Nd2ps^y0!hEnE)TEs^7Be3&Z>Ce;dKMFsi zhUeS6qCyJuJ4H^)|LtST4w<`!zFS+lpAnBf96E-3M9?6Zy*_wym&^1`c%W5*Vwf}$ zMPLpXTGypaP!*_2p^otfO$$bMs=y;3kpd_!u+EO*abOp&1NG9)%P04FW?)YOk-Os^ z!9OqYZ_?g6`2b3pWXWGcM#~ZNoi{$!LELQ4i>^0fJ=9a>GoGDmYgEYFztK)iis_QO zezRO<^Z9bRsrOR|PP3^^1fvS;ul?k1uwb1f>kXsL3a$b3bc}lH6m{)$+YHb7zho+- zgZQB_R{z8>226Ud`&j}0BR*`$R)w=_$fQ3oo;-Xw$#$g7i6Uw4z!=lALsp?z? z;3S_O&wD}&{v7tBJiyBG;w~uD-XFX0G_%J=uG4?&UL|2XNBX7=WW**c`x5WKy$(&4 zW}N0i(*UB_$#d&io&3jzvqVtzqr_gS)xY3$*mzlzZ`mJ>u+<$ z4c#a1Uv6-Te2ysC&3-*$40VB~NUguVkKJ&`x}yd4$n+RPJ4R$>_kS|jJ@kolb6FEl<*A`)iIhgt9ox! zGeX%)>5MU#INhDIx+&OM!7YAZiIJ>5>M={@%OrpFUYODX-)&=i)*%mT!t2 z*e7_}y6tO_fFDaiMVL0X+8{%z+QD#p7P!^hW;FVPw8wZu#*{{`3gnDI>iQZ&+kzdH z7?HxUAKEiqo8QwH zm11^8W(-$5xp9~wYTC3j-=7DtNWMDr;ZPqyxH6wK#&HfM2F>Y(_=$1`mOfPsQsJK$ z^8Ks5P$-j8`Iv;nV*x6mrDv~RZ$S$ zS9dq{8J<`rzc4ATJ4RXn*95h>H9komoZh8VSYbR`uwqF^y|MDNi={zN4E6mcoX{Pl zl-;4P_ssLkfLdhCv!}DCFtMvkLTMb^xGC-&xqK<&*sJgv-l@eLCv!!lK|=h1?)?jY z_NUwgH}T9G1(Z;m*#RtU~!Y?ztB3x3Jd5xqKbLy z8gxnf#p~8*kC}sUm>br`M*w;DH*kYs>#&WjuN;l}GWZ8JkO)~AD1JoD($%CSow1&F z6$fQkd^hl43wN|ykahS5&9WB$sfxjb&*{>c7d0Ml_ppN7nxl0!6Hqvu1!o13@@H7z zrF)21LI;X?^FRIAE84hhcux25UIDpBa+m+!Tbj)#zQ?zYXs48^|2yPoS=aJ!cNGpl z?J2LBqR8fNMQ|WbT9>P+#a`k*!Og&j5tn+hVmRj1ia+L?ODk1^8lDAm>$nKcG4G|j z@>CPldxPq1sn_~YgD`PI^ueHWXPVyMyC^1I@ucSVdE44mlF}$BTYdm7>h#>8WISc> z`U`iB+0gP21s7ZYVs@e4v}ft@|1dRzb$M8byi{Cz97rUo(5L+@XenM<%T{Aoi!dH- z)N**r?qBvl-!LrB?{=Up$rE#Wl|HT&I^&xg+%7r8%Pmpgdelr!#!N#hEoy>YpzM5N zJiId@fp1jW*aO-Dm-mHD)1EB^`GCt1K$OUFm#v$p@CBN9F%M_yE=Z;vxzNg-?j>sW zr*mf{-?YaTB-pL^c_h38V`M3+*7qbp$HS8-Smt$3m!86=&J8X;VV%xQ6>CeWt$S@L z4iXH{hnwR-p~%{kkT1txJN+0vbCM8fJ=rsHD)XqJgwI4%pyC>;sC*?e+w@7sUEyyX z4MPfBLL8^lfQE+)8I``w!ISO0wh7^5EQyuQOrQ4j6;okt<;;`1kVniAv4+QSMy<|% z*}>uKjWBNB(`;RG&a=1m$4;eC$Vi~u#|bLYC~RQ7=Qs>UZ+ByjHX0vjJes^IeT0_| zp4y0Uv(owv+&nqnUF7OH*UWBJ(2@BG#Jf_kCD)%cVH#x(*#%S|?&lRfpP@9{^F~uP zh5Lxl!O#76%=yDO;t!bkE$rVvNm5V-XH;wE`zFHN6*$KzrY7KUDV(L zW0o5w6t65Xkh6y%((N4Apc$Vg4x)hVdmA%nIp`+CrFeHDXAk`ObiJpPa*u4A@17Tn z?&kZhqtS&JnHxMEUX!@~s;AuxKV0q7C>hl~dzF-*f^VbJ`mG0O!>8uEG4u}A%gPiN z`+W6sk`ulO7C~slL2t@{Ew1g|lWri5+2A;m@uY&Vg=@4S$fmn>^6bIAuyc*@*?tvn zOqbuDbUNeI2CWMBN6XxzJ2MF+(}xUt}{TF+N0}<4Qg5L zaD+DWDo`w*)MvT#)ksZjanpjiG(~#%jYe>r_cvw3ON(Tf2kcLAgb71N^T>C0e?qet zgm^+*J~K!n{&BWKc|q9u)ro`sp5gy#&_hAZ(um(`zyO^JbiuAhMsJ{LEqnJQm@BCrB>s z`!t4Ll1wEW2}F#{q?2!iYcd0}Av)0OAy?;!|9tl7^^fAIOdFI^lG=Vv#Z?MB{NP%^`u2KrBK z{@#Yh`22aSmcpk>nW^Zz&{&7k9m3<+MeA^Kba%ndgreUx!7M|b94jdJ z#vz9EYiBV@ehUq~ilf8JBjaZs(B?3`lM|1Mx<%bHC0_X1d5^v4EP;|RiYY3?0L>?h zM$cntdY0*=DthC-b;*K@$sG4cio4&sdzc&H)@g?m!&66$134N*zr9m*LO*5wcD3d} z+=eU1tzC)u`~(anxm_B*G`tP_E&gX{uZu^L7k2C+8sE~9jCp(olw2^@eNK{J=OWnKu<%--1+A`ub6NH#_0`UN?JP*(A0bXSuO7(p+ zxadss?|Chro9}W?^+W0gV=-WS&*fvdwFNQC^IWu2k0ZzZJY3`0*W{&_s_!LwDp%&` z8&c&+uhbjVup_(5XGW9SN|#P=5;y1c{GX)otEPX?Y>&$G@#Y)dcece{_)66qrOn>J zZpR1S432pLNef-brCxd6Tj8*xJJ}|N_YFmRH<$5Xo|f73xkQ|yvI5z%RpPAjNiS-d z^wcA>jllVCeO3(LnKrR^Rr0dh1@S)87_+#&euW!u+{@SfM>3D*p_VB@cSCQ?*O53jfl*x9e$o*~g==iK;cHn(uS3xd?++IwSYd*1>dh?g!@fnU;{lH{OgBCvp9cWjtW8QLB$k75D!kj81mxw0=Y&i>;;VwZ(jS-!(uEnU5Q!7_pMs;0VLo>ufHfR_`ij$ERF=(1 zzgS9}`+wH%1J`$uA3#SQ?MUToN?akm1;-3})VO5tcWbt7Tb#>NqS$jhWN$mRjrEao z9Cm?(8M|x#QL#Li{!7xnB8Fxt05@kDvi6WR8<*=iY!F+~XS!43B;`S)uy(dJ`h(ji zf$B=lWGa!^K*6lX%0je?kmW_b20@r-`;Yrfbxz25S+rL0L~1C+NZy~X$s0GgcswW@#PxE$gARIswe>a68>;Yq ztc=9^^czb@Uu&)3{?jo@GUt9p{k*xK@WFLt>*MdH{1f?-`R{IC7k!~EV;Lz_~qu~IBb!fQ8~S_qHvjn{SO$WtL3FH z$i?2j)hK$gh-+ioz&^D8pwJuZ$FnD-nGz%njm!EMZl6r10@(^H(nZz2VD6TCp?*AI zlG5fcEzLnOH=dCwU{n9<&GSfw5jmu_6hHm+fNQR~LP6~m*stQV6Ys~p-Vv0gv~KTW zg)v=dDXWa zBf?{m7-y}%cDZ`Ur>(MO%1X({$`JWKUob<|R|7)v}=O z0vQJT(7$Rk3COHbdh?^{oN?ax#qK>Ll=9{}y((?8rziL3lsfq|=U;N=-=g+v&~>_Y zUO>kp{Zibv>*0m24N5@w$9D-9#=u^{ugxUeC&c!mw)`2b2c((@w8GxQSRYV9c9B23 zYqiA?MEvyp3Nu0e-p_ZPu*A)_Ja&>V6Rw<=^9?Fr1mZi1KXp>NjZD1}^Kl(G=Za;@@wQupLl zj_%vn{W#u0vC_{@;rd&ahn2A5U>+d{l@36m?LCs=1xON+oaaUx0EYu zvAwl7end>Q^{oha-7tX<4Ke&FHKVlf=#a_=ttbj_hRf&M?04m1wvFk1?%Pk2B|(PI zEYY56Vtss|BvuxqPmlPOj2|i4{72}3mh7u9)wrLjARVev6|!_1O6JvUCD8ms`|fkB zH2gD_DIgNX!=WkJv%#IAdGJswUwnf}RkqK?MRIUK*=#ztqanOk8>ovMSqlbqa5U{o z`X;$`u+DZ}sP?Q>#Lt zjcFPjvr(82X_6E={nr7&%jo478eT2$VA-(tbD}wBQ12TwBI1sciHY64Tdd?4e^FyS zUgN5S4@OC|oX;6qM5s7;3W!?dehH+BQ$3)(35OQmd9M+Q)Mtt*3y4j&xR}J1Th!vg z#T3FkiRosGjRgEg<;Weo*dw}DPx^5|=Fe8{XDdDV?oRU5fwtO{jT_E=b%t?Wwt@o2 zI}Ni!*+p|AbJ)|;!5o|?3gd-`jD&4(?h6p5HXZfBOL(Q3vb)7qZgEBh<6eCee}1y| zxhcgaJsAku)QJOyw667G)1r~B`#^C&wK9(9P4s(2axDvV=4xilk;bUr(j?rvNN&Pt zfxF1N6Vc23d8WFqBXkRdc&+lUJtY5J{+%l&ORM>#_WpsD@&H`{n^1KY<5|7b2~2++p~XS7pJ^ z&Tvd!vjY#iq00(Dx?QL->{p8b;#iz=(MIte4jbG0c|$6HH$A2SX2 zjF>pJ0(Ii@3G!Gy6$M;7Flser7jrvKV7^~T=`h8tu<`q_ z56c*Da_-?RX`MT8sMx~QA}PS>_L%fNu~bG}{)6 z^JzBox)!D?bh56YbAN7KK8|#;vg!@TC~4MI3`_s&HbdDN4mPs*s&goK?#{0+?i!s+ zWr6#7CN+gB!2_w+x>^KCF$C@2r2@s|Z2Hlta7o(Jc|m;Pq+5`Vwn_@|K&4Cf3l^;Vk(w2zeoUD3E1TJ`s;=M;w!2V|5@p`OtwUrX9n1;!zQS(Ir{Vpg)FeR-Po z#P!g3CfjK}4^5|@7WSWwN9o^6!-c^G{xRX38e&fcB?03}?gBLYHdgoMvL;D z$j7xwAtt=4}>v0+UYS)4}WanMg_n_VaH2IqlVk+ZWh3IJD?d zYlH~%2b|_}T~a)+s&q>VnV!!6HLw^M#fi)cX%rQ?EXEsOX^!-K>MV$kvhP%hxyUK! z(ivxH-T3-!f^~YR9nZJ!Z+fgOAwC_!mbxjGPRAM{3z*S$Ie}Y)>SL9)4@QH)y#Em3E&dV&tX>9?egc=lCaM`(769_ z0g5Ffg^`~1-r~}rJiei^9DZ~1mJ@mlAW}NDz2Q})2c8e=#emxm8cCEcZG!U)wIulr zz4?@F?p1AHo~v6EN!*!TF5K!6kSZ5dDYWa&6D22>U%5ZXHnCjGHD}ujin?upuYT}! zS#=^@%zymjT^}&@=tg!=Z{W8em#H8B$f>lbYzBKsG>)P?;jW^lKU*WRZ*=OieDgIg zw26=tcl6Z?CC#ml8yu6HI(WiClHh-8nJ>9p(R)Q@Svv=t?aB!Yw87xh@LprMs&Tx! z9?V{1VG|T~MJz@{fMb8r-Fqe+x~)th7Cj1s{>HqLUbSvK8xJHlq>sda0iT-Zc`;q! zlpU;vl4!0|Zgg($m)`Gb$Z@arTw$ly(4lL)BeONjuGu2q@LF-7>Q3_8#uJv67OAEL zO43F2$bvzXkABWo*}?`6l5mgylTahC^=$6{XF zVhHAuJ>2oJXAYc@$k(}_(H#X`$mJ09Noq#-2#|tyz=iEPMGi4beOKf4J~xR5%AM?? zO@Uy#PInu=WDG#hwxWLP5%_4YEa6=btc(~n*d+J(sQ?@#aO=}u`?=blAw126q#BIr zoFYKYXxM|BAJhe|+VhGHJ#pAnCw@9tu1btj70ODN;p-Pcz2yP1>j@^fh!bx0DVFO` zX=jjk0ZQ-S6}T(OM&)pa1ApkWC4vdTs&013-&!N=jPJrGf0470^5q&#LFJWK=Z`*VMBEsJApcm4CVLJ(tueI(m~2 zml?||=(oXgR$QyN7Oif(5eJ#`DSOho_o5qP-Wrr?~|Dc=v+U$M#{C?Yx%_F zqN@kCPRhuR;kd8xsW{yHC4lsbnMid)dEXT^FU~hnyfWw4EG-jS6K=xbYTD-bA-qqd z8ru9Q4q&DyGkvzcr`2t!d%32)BOPx!Tx*m zmziThD@7~B-m zR1i>U;6G8el8&cZ=;%%R>ocwS-z3yjI39td$%Pc6UQ~}-CYQHL`#bz`Avn<7yw8eV z&`Y3!KhRUZrh##H9y@t|0KMv4l}{EEchW2{8@3q86b!M zF;?XeX$LYHdwIfGP)lyn#V#X<3=gT#GhSek>+F~L@0a%JWl<7SOP=Fsj*8uf*&fyz z^)EWD(4A*21MAtMyG=d|g~g-335C2x2T=uJ&=yFqhq+c(J3Ep&z290lI%p$zl|8wW zQD|LtG73i&l(tWunKiViJmWgYIhFOjTp>PaV~k^a{vc)@Gor?wvPm&z>ys~(M8D;u zap-;PH);Df+m#{;&Auw+E>W_|#P`omm+H+0OkzjJ>h2Tv5*-N;uD(ZCwmV zF|Viw@QBx?#p_WY|AOwzf2ZaDg~-bih6rHvMdTnn&AivIKM?MYPm7NBem;QE`hDGi z7U9yM6=y5Q4r?FZ@Y~G8>Va91HzVm_N6eHb`c~d{N{uX{CZU4@3e$D_Ve(M9g!&>; z=}J!U1%9`)AC)RM9E;lo;*KrXY>oLgX5D%g=uH{5^vu=UtIQwzG9PU-b-d;#lo~Nc z`cd=ZR&~3^&)q(!PZE@6opjbR8pC|7WdQ=6ye0n959Kj=H)?2rJxm!koI92zR_H;r z9YmXJZHL?aq`*Svp!4G)tH2X-%lxs}@X1qTJ6W9gXeFf+4c;Vi?%e zPpnfpl+n*Lwm}f{Eu79y%_+Nt87=E{YaxKPmfh@cq(UbGvd0$`j^dUoJ>JuE8Ca|0h z6NKs8vR!^NUbZze6QXy;e-D?bM1H{fTpk|^dfgoq*Bu_EQkL=AgBiSvzxTDAu3+x4 zUcGd8sG+j5vEestI4A{hA8sR&u;y>eCsi6hJ2MNFfbYviWbbNUP01lJtVf@St3utk z>Tfs2mv?8EPq}>-@M<{Pf$Z^s?~k z0FyXtuQVNWVzpuA=9U$Ll^E2aL5r;-GaSu86`gXm22mdqN?!|(wF5oPenOI2^I)T9 zg_p$Tn>zMJ-3S}+=#O0Rc~6+}8P(+bjXz7WK1VD^%&?9FlSxM0m-=Eu2Hy@{@+7S| z)(x$>fbZrSSKPtW9(oyiyNbAOoM{Lj|ehbEr&Xk z3QBxO|0On2#X=52YUILa2~%#L-Bs-ipH%Js+SLQZR+zK<1xzo@avTiuo%|bLI&zmE zT_xlMhbnqfyd>JhFG(8bWZt?ljQ0dXBWVe!>TyP3PIy@tkqGvJqjXDk24U0Qu0CLd|a4;bBdx^0heslaQ@Un8T@)`gM8hmH5oRDV)wiMc?|zCT_c4n<;t;c>r+24c16EcV zjK{wpu)T6}8XQt9>|tS&Q)nYH^{^v2H{9W~iE)8qh!6Y8$h|Az3sa9^@BxyIUZ~zg zjB(;OH|ZkW6-4s7W4_Dz(&$P;eX%9 z#f5PrKW^rBtenQ%`LE;2USVdggxo>pj%xGb>T!wbLbWIqSJ~w?u|9$Q3Zu zx9#7T!I%O`QaZhUxOlB4ZP<7*e_#ErulKyS4ii4I{AM9-d(uLZx;vji#QjA6yL*tw z&}q8ad-I*ao8xs9lB+8{c$IuEz-!fN=M>Q-HP{6L ziC92FQzE@Y2uY~H0z?cU(h^80N`wFbB7_hi1ipCRjG_T@;9czsl6z^YL|9%_%b_(T1L(asFKB`B$w*VNsV!FeICJ8`7>DNzNfd zOl!8~e)Bv>oNxw)k7Osx>ktTmU=MoL3~#Ne863{wmGa4+El`CP|IxoUOZ?Hk#OEs= zeZ>dGg{($9GFdz)_;h$@d^4AS6n3;$>r~STgF>YxYJ7!mT83o8QU5jF ztVCRfGeuDI!dxyB)=7RW2kB*dcHsm^9&6_^kz9j?R$C~8>7+C+Nzi!s!zPw(m( zW#Vn6Tdmp^I3mrPUkEzfv635Vw|ek-WV z8a%nj5AXSX%<9-gcCzKilkUu>V*$Q0uR8s-uznvGV#1q`IAk|@^dEzs7d2)8Jbzzn zQswtlA7Prb{Lr=^>SRYn)kn0gunZX|QvtT1?)-U`L48W3X&ay%7mB}825oRSF(|1x zSY2sO89>>G4*9X$SAC$0LftNj+-zK!{(g_`@vz2Rm#LD0sES@Z2eqRwZR zb}VKbr0XnB5*4MuHQzRds<|EilkbILL;fcJc`tA}MOeI+2q+$|Xvee-4>XsZ48t$~ zzzFxPnQl}mv=#ZwNERfX6}{1(D50A0P6#&~n_LMOhq+g(;5Adxy?;Kv*p)Mpm)RJ1)1bF*vhyJ zr=d&i$|7bbujl1qbS{wZ^}FZNLr(^aJ=RHNG8yOId}sP=m&)yer`&yf{A?$r>qJVa zJGxGcO(uex}yz;VX6b3QoVLOwGUqthzfYml<~od%Q9~ z%ax9M=<*$~D7wKitaxyNdj8>l1(GbSatf!wChE(P_z(3s*nsfMjs3-(TKZ@eNjsCw z_s4^e2wX?jSKN}^7t$iXG&PwuQzM2AWwkhL&f1ck1a2y$I%{Wo+)`;8dFw4G8Y!0$ zpn`X%h0HG>k*EVG76(dC)|zXK#SD9SdHDu+ox6ee>mzrN;8keCcS%mm(6YPO+d}2s z_b}Tpa&j$3L8$R|I_C)eK{LzaG=sz8StRfLFEM)Z+Wa>Gdr}Z3Aa#z`vvX4yg)Q4K zlOKQhh5FY_%r?e?ScU^gB@3thQo{Qkj^c!T+%b(;rTMC>cBe)o7B{raE80e1itG8p zGCTd*iS)HPRQ~E)w1t&OcRKt^B6$Yww#LgOk52=U1tpo~Tdrn|ke!sORzts;Ln`;q zVRCzIRn)cD>s=4q9O`Oc>0H; zKtDEkh!H7q>$CbFB27t)v3Ghv`3}GFg3^1hiW0D2hAvj_&fV|UoD^$TFdUqXhR=_w(`19PSjIA?r(wK^#3}y(M>twY3*XdMrXIYu+0#ls z&8aJR+t}4$Mm}z(5&%}TArsJwC3SvoAJ?FES7ANNqGr(C)sM(am(9!WrQu_diLNBka zC-fRuR|__Lm+oVF%c*uT_|S#ReY8g_0)DVRx#8_{szFe7py>@C35ne1NM8{_XaWSI z-ZxY=c1g9j8YvPD%GWXZ{)n-jBg8#b>XzD$&X+8G4qeYthxu%QdsbX~7{Z)`p2VCV z=%2gtrKk8}#^&6eCmjF0ZnNy(PuA|*o;6v$_+B3Rolh>%XRWLYGG3O?R*8sBm{18pd#JXTjE2s6=5a)!>y7!6 zlObgOVZqWun*+(K=~a-h-GNuAHSthSvhCEj4pOV(J}a|R)qx4;Yj%*d_r;ne+!e^- zYZA$FS<&Yu36~t+`v=MlYe%|JyksWhHKSu3A*ti5S1+$Vc)^xnCo!-F00Ss3Bd^%} z!U4`~B;UxKSy%C!2c4l$Nf0e89Mo=|53HInF0KJ#DV)j+HF7OiUiGbj+8QJtUZ60A zVMioAF}{0~c&8a2Oz)f31f%E3V5^!pU~xLo{v+l&2)iID|w z4_h@gFLKmB4;Gi7RhlbCQ9ag9I}R+cZRXh1CSWi%unfr$W-@wsD&hLFBo}xH$8xySh8)Gq+HY-=0 zj^J1=Vp%^$vOx`JJZh$dIe&<1T4~%*&bQi>ZS|mgV%AOU&$XoS`Gq%afnXD-b?&)` zP9JuM<1U@TTMonk8na*LaJK|^w?oC_lxWApDO;Z4aT7eimeJ|p2_UU~cZT^^Nh=D$ z9^<=wulD6S9+1kpH z7g+0!A*JGVz@Iu{g0?o-_aO1{OETwTn`gY52I(ehIs$a zF<)bRH(wfTI2gH^zg_5mOHQfA0K69Gc@k}?*FtuXdF>AQ)Y?2)o$c|-^vaj**hk|! zTh4)4bt86HwzrhcdseMuNCmmFvK8DfSJmR6+aV11gm;?|uwH zcnx=hEC0nTi}|U&ICbnH zU{`uI6l(+t;hyu@U20Cdq^mPB*_K^YX#d%~zvMhcXV<*0N@)G27s^7nD#2YuuO3LR z=sI)kx8FyovaThw;@ll6x@hnd1p263WWDmDQ7Kf8lxDtC7=DH6#J+IZdDjQt`Temx z{2O5Kw(FDqk*(wf{3n_j)tS(gw*O5)K6hNt;(;SRF2{L%)uXZW$4VYNUBhK0>X)1q z=eVlQ9E+<ZLyOe~lNjg9o7;(DBu=0&3{I2r$9BL5sK6>lG9RV@}M0PWS%t zC;$D&%J^u@HFS0i_?-jPJR2t^U!_;z8fNOd1f|n^XN7QU<>|2CbWozz3{QVX<(!m zX92!I`b-#jWa zig$tJn@ZQ7yJRBN#kvr6nxIT+WU6wJ$IoK$l?WT_pnvaMHbAUcv0CP zPI&XGoS_iRuu6N+`<3l2k@oIhsW|zu$P)TyjNDCZ!>tcRB zh!jQ&G-RcRlY8Cj1FkF;GQYE_`M7e}kEUUmLL$oV2z}i4qI?|L-3|Y}e;wF$Vs!Kf z$$QW)+%W#o_uAlUv%ji?5+t*R-CvykqkQf}5=ajiu0Oo+<9>)ywKRx_yV;O()3ZGc zPr5?fLFzw=5o=`Q}d1!cpbnBQ3z0TUF`mJKqv^wk5m z7Wcl8aKd_3OItedc=1PR#9-{W)X71oVn12+r?XG5^9F-gnuesgze%Zr;;8HMIE)pi z2hVFf;pORB0X5;>Q58268dsjVT2O$&)gx5-N)3ApktVAlG?VcJzV1S*&$>18QKbSB z22n!7xz|KfQGCbM`PGIit53x2e1P({YTaW9-bIP@!jHE@Q#e};QLbR}hYa{lKPST_ z95-_}qEh-e#YSPt{FVN_zsNw#Pw(3u1sZu(OvlwbRBAS7VkKy?;=_@#U%mh?c%87A zn{WGj&sN(O)alud|K7j*0Re7Tv9fHsvNq&_dIeu?9K?5P>A$`QcqaRuEzLI3f=Y~B|fiLeP~-coJJd1JNFIrA!8|j zSAjX8M(!_#j|}^DNzPn&d|>vt=(mQ6nKX)KWlGXG<0;)0y0|pm5QAt}YhGNd>FU*( zzD^wk-^N8=^ge8Q;#AoUCriixa3#HM_l%ueFd#MIya4KPQ|W` zvu%)64wnbn{I}BXhvyI*eeU}h2N+eU2OK#b;P>#rtC*}8-gk?%L<(>V=)9b{^PB8l z!E+Y3m1Z-j7e$KLjhe;n8C$$lSA(3^B@*v=kdwyzdM^X^jM&uIf&7$ZYZ7+bxlPwZ zx*Oc>dF;+C#Z){)-jCT{!?*M7CI~cH-(6kTVhg>DdGBpT^R3Txf!0tQp!uaQZM24` zD=74VDWE*b|be00)(0_pDWn6rhane zmD{%7gZ+94G+*R46e_3p&6eC}m0*sqbvCtOc6c?+AYjl&b=fY`vFxI8Q8dc`P>yt* zX^U$gN9d{2lu;Qjb_+|Alkm=rf;&cVibG5{E}wDDbDvI$^2}KwAFjT>2(BM4^mJ#B z%IF?vyhu)rQQG^^p^)!7JuVUOEONLZIyzyN0>YUFZR_)#iU9XhY75RMh z@2nhmyfPk~sFmP?5Lh{!=nWd?cQg%z;doy@&&nxfyS5wOm9x$^oOPG_QAQgqYc zZfAnAr#)23qG;|oKOs7?WPfX~<;`}{by$@WaILrg!b==sm9N+QDr&9Lx3d#>uZQG; zz;)|0!cdnLC%I1Rcq3|cfPeI!Q0T4EsJyC0!ir(U>sW~?1BU`F{ai-F*tj4;32*AT zd(L1~zb{72@E>|Gc8=hFU;+U&Za9=mvk!jW#e}3UQ0X5oOgSKA@=79fp4;b^JYm}j zV&0D=#)Qlsm%>?CPc2KTd9a}c&^l?A#T>G)#C3o6Z7(Sc`DPcZ*M=!qwdhY&ixMR!hjIFPgrR+cXT&sg2Ill z<~vT{u7~(}=eLKNZ?wQNUybNncALeyeJ0#UlF1r4_VMJk-f6?dh4>H{2D#)4-RlO? zzk2p64-u|clhiio76jPCx?Zwm%97cfYvH*);fyk4ydYfO8GaH)aD`#(EuDj02h$*0 zN)%NFYxWDi@Jl7MjGo4q$sD%^SobIy&4G1KYybBI_~GHYmVV!W;t;PBf@)ud4W^YH zv+N>0D#u)E!IUGvs223m$HbBJbn>QWn9CC&1Z*#My;93B|KaL#LH@<$l`PkOiwS&* zm)R;h11}FbOp~aXW2I=WzEcSfQmA2Rds42WRLw}$ie@sLS#y!0`IuqMBi)6HKH4@V zg5x9r>mC1ckgxn;GCRU62q3^l9z|sOR_R;Cwzop#lMYNN^x?@u(%Q~PMmY>Yt!GXR z?+jR+9BF80-cD1yV{cz-rANZ+YNb8b*6IxX9WBT)XxrY{v(yLenk}81TMQ}et^F@V z#E=S35e3kFYNDggbnvyxxm0-RGJ=eJ0=;a!|`7fJSnVTg%{Bp%&|Il$S436#Jv!=HJqJ((x8o{vc zmTMnH*lsF1K?a%mUiy-!?XwjE59YKnXP9B0098{|Ow`2T-XmYE6MFKC)*B$}+5M#R zP>*C*n^hN4hmP=fvmox;FQw8y2=*&i(;0i^U;xzlLt_H6GaVSE-hlI|J#SHNBmxnG zLM~s$`i4k!ea^MdRhYM7ij%I1#3g8+h7SWctNlp@Z9~rFE!9UY{q9i|U72laH?EbW zf-dFPo&t{SeF>G3)#;1Nr;;WXSaqMKWl8iXBFDUkxY#hWQ#Hoeofd31xN!ES@eJ-jCQ3ND@N(`QuLoi-Q^=h;w4(kGGoP`nN!u%KZmu8g`xzT?s&7!3X>R#pR5DU5^Y+5JJm#=I& zrF>;Wpg%w4ziLiQ($$mQ^V+;P8i8el7z+}dc{K5@9<*^>r{i~uS>k6`IfIfvci~OX ztVfG&!&sQYi!9++)(|oV)z4lZX&7sv)1<{JF!MiEuC%qOTejEg8e3hTT3K$Axg~x5 zc6$-9SHabtniOO+zcd-Amq;H>2RJHgTF(z@Z0hUL@g~B`xoa_&xxpPa`OynJtd0d&i>Da#x4;l@vlRbF91&%+JejvO!EmTT(d8=3 zbDd{X%W6&l5oow$vF5^om~A5_f>9PTu{K27PizH5MxEJ%Lq0P~@mTVBY%&1H--IMw zqRj~MJ>stgOD%cF(Rvb!(g@!Z0aPU9u??>xGRA(x%p||xUx4~KnjHTcslQSC$Gs5N z{FnA0mje!b)%)?|wxx!@n%=WSirIrE8=eHy7B;csmF!umo1@nSnmm85#ozxc zz8KmG2e~KIU7!Fh$1d8VO##n4QiZ_YX;(WgV;wDU&ek%E$4xG zs+jTl96k2%hb)7ca^&A+ZPW6K;aGX7@OnOQG`IG5w~(eZZL3@W_3E9<1eFb91@t zW9(s*dw^^K;k#FMqM)Xq{9^;T2&%Oi1d}Uw$j)*#E31@&0D2cSx^>8~A&S%RG%aL2 zFF_&Edr+Xsm1s3c3`wK*WH(!Qzg>E3D}USEk3ZlfR7xHjZaCJ~kXy<_)7l_JA{!M? zj{K3D=D*NI%T{H}YpIbffO6bs>%PyWg^hg0U#sNne4o`PO#5-=9)*WuGb%ljhOf+` zc()oN0DC_6f2;I4mzU4kM-dwYD9R1KA(lLc;$r$)D%_6T>1e#?V;O?*q`&f5Qs64~ zTop5mk6yB(DaPTm2mg9dlAMi;U5yF7>@(h~J1MFgZ$i%I7`+K8J^$tyBalg2dA9T0 zYK&86=cCIzKFN<~{m4lB_!84~MC3&s{YL;7bs4Wf=Nx zi6|FGs8XI+Mlu>|kCqG>pMKuF?#yJN+#1b&3VKGOI~dJ=nTX?N7FGVP3ZQix_R5GM zb)kIl04MyK=I8ckr=@hGK)-U`Np?HmXrh$oI-3mj0<)XJS1N#j;(nSNa5&tf0=F?J zJV-e~YmQ2+jm)L?&=y8&?3v!>o`eiZdaGf35X%oU;_B*_M=J$nU?UIzkGscLfSrwH z1NO)Gc;PMmM!f|4oO#nAM49?mpRVS~hzg^x-sY<<%&+^3&CYi7!qftpcxMvPm_>}#HUbG6ug;z=65eGQGC4XYR1K&z`bRVy6(Lq}9#mlYxy*3(HN2j>f(y`5<4 zGi|6k0a1GN{?SeK&y<<8F26|q=>fwl+beA{LOMs0ag8>w+sR*e?n9X5-9V55jmeQ9 z4P?dZ-R)p@P%%6Gb#+4618n~XpWG4(O2(G_!p~V9^2iJ-ush~HW9IUWr-grL{2pi9 zWXs=-bOTy9B0AI1_s*FX?ThtN@)pMyJ+8}Z1yrRqLhQtX?u_yluhE1iANnKI8EJA= zCDRq60X59)zjkj%6pie5vO3m8s zoJEQE8ggp5I8_CL-LXUEX*gq2_0u%0Ap*({& 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ⅈ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
P7kVw|;IpO(nG67Ivn7%V+Q2ofMA;mlt^Ic`y~# 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

dfKmyXqGcbo)(XBE3sE+V*CrZB!!pUA<^Lu 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�H~9*$<>zryNJ=UsPD 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 z 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 ZV5y9hPfV>f*|x^%bbZ5#w{=%L{sR3D8&d!P literal 0 HcmV?d00001 diff --git a/docs/integrations/bisq/assets/bisq5.png b/docs/integrations/bisq/assets/bisq5.png new file mode 100644 index 0000000000000000000000000000000000000000..d0fdd55a8ac26c16487403c57fd2f70c77b6ae50 GIT binary patch literal 134450 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


*< zCfi2*${UaTt!4B^jX^cQ=dP@Ts&bPh$Vzg?CkO78*yz7ix2Fed=j3V=!h$WM9722jlgVuxv-OK->qIue_IV@BwjC}j&4^uAfjQS{fa?`EdKmK1 zz;wiCWuA=s{h;(Z?{8Ukof3-U_wO4~-!|F?Jbz9iY|c(|2}K8nhEfBKY_h|9f!bX2 zPT!d5z_%0zESCYG4f8t_kp9`@ur%dwcg0t7W9s%=C0Tp7Z}P3IyaQ zlFJCEhFN&1z?CjF?@1FR9=I*n%g8X15iK4Z8juwLV;_0sJVI$64!3X=w5#tNmm!|9 zxcG_*u_ZG#@Yap8m|7HG8i#id*t>q4O?g^7Dfv~F`{>bad5a4|h)Z0FuLq=02cj$4 zyElE|tCe_vsrM4)uo_85;2SYnwA<0+D7YmcD!G2g7$a2vNwA}%)Ei*9`xrQIYv573}*1UyK^%y@!-Hj-@!xgU=VGTTC?O?C;L8+z2jW? zCUi73dt^K}?ioY{dym}F0ALu)+z`|R#yBRM{Mi-<`1$E+g~tz<2vQGt%GF88y~Wo2c4YVR^}aBe?#n}TAAoK&QVfU48%=XMHcQ#9e#8oz_8^|tI` zD;#_Epf(qGRWV6Ig0>BX$=cymzp}ta5z5Pkez=VA6C}<{WM;2oobs!5##QTodVx0F z)bVHCCzaHJGZ<-a21}$EZ9$@*_q_Tvz)v;+@}w-tT`d*(?q+q^N<1rC=n_kqZPqh0 z@5BqvudBP3OI1=HQ;Yrxh_VxwsAl0K@1wI#;n!`V-}_;Q=@XO{yaUU=$iV%#zb`*3 zrFKkCMzY+bxAH1sbbuS~1?H6e&zC%PpcR5_Sp3>7z}wsN=~HFQ^!7eJlOO<%UQNdd zNQ$b>8nPX->h(%vQpg9Q!ehV#=uQ~EkI2u+Ap?~D+R^*K)VA4 zqCCrm=~v3RbJ}SS38U+BkGzfpV`7d)JV9U82l@UAc8h7fXApgWT4`b(&zU%xz<_{N z{*oL1vSX!C$S?zy9M?DXo5v`a*`i-=0{#kx3V{L;=kQ9zN>_IeI56G;ckPmoA35?i zKjY2r7nOzn-rmG3tLcv9i$g;J=+S6Jl&`dwzBKK|>hV-DYD(UUQ4MZ*!40CT zu8umJCJGD%gmKmA_wA3CYVA7%`E64MR%A}G1omg5*zNjqY|0_1xowjbSWb9us~jg* zzCg@4#qsCQn$>G#oWWnBO5~H+vFU)yR0`M!aLYj{wy?0E2On2TzgvDV2-=0iy}iUp z7p}O=DIjR=eNf629*0*z3Y<7r8$~(L5mr2hz{1}Z$^QmccorUGrd*jxfy;bTCNu%KVe1RD~o;4dzF;e!D>Kq=2=n^g*Y_IfF zh=!R2qv(PF$qz(S-sPiSTFrs`Sg`2U($bco?z>;4^%0csjZ91%au#N;KYce5@tzS5 zc(+!ptUK49I}b|&zTjhJ4Jpd4E^wbNqF0A!T}7(Zx5V)ihF?Bddq78mlC@2@V&-eV z*jvSL6k0fc-xOGFKcKY&wU!sk7I4aMVjVaE? zZMt?UnOKp)r26m-VXtENn3Uz-1vl8NI zur8*+-Wz-<;URc_V%^nfXwCsWM~`I4hsML_0%-NtfPrz;fml=;HT=Hc)FmvVv6bN5 zxw>~bh0vS9fdba(+G_9ml=z$Bab;Qz(@>D-l#Z{;&|Y3uL?r1Bw`;kIZ14J3>oQMj z%9yrnrMn6ThWuz2Ntq?)uzm=cHls@@s%>k^XE^3oPsIct?N1}ftpW6=8afenyh7IJtIRgSf>Be-cAcs z@Fdr8+pB?9s?nfqyM%`FgVMocn+iw}$;Z7*IIv6z5xh-JO=)2-9u-gpGt_c%o&zod zMHn#}2Hd&iLyd7G_&x;SZ_P}}&xJcNVLM&Vk`r+-HS$xtx@@fXb$CRX_=Qua?pWYrH(doPMLwQsBA7;u!dFa8Q~&DH-k5SX zv!pffZ_UD)o12Gq>2c2Z^Qky><$8=V&fdPgABuJ$TqA>N^?!^}Snr2YRq|m}WTfWQ zh|Z^N$^=SH0DN1>p$mRMExfg&60C={azW29{M+6d|B$KZZ?! z|4w7@53Uw8rzpJ2%)p*v>Fm7Nf z)=xFb{*fPC=$#CEjf9fo3IX1zkhqK{IqzJi#sA32h8rTx|A7rDsIyAZ<2nmyhI0ozWG z*ZD%{S~@T{I)g)Gzr(_PZlQ-0CqAD;wdTBkNm1s-t-iL{+u&nsgU6N|<>HuzFYK!r8Q5US} zK*l^~KX)r?5;39=nhfujzYKwo&u86t6||Bs1_RL{L1qwh=|^QD=Qet8o<|f3U@tE}$h zTRQLfyPbuibz|T~8~;BlTP?mCZwJe{0Nk5fj~KFXE@)$cz}(>JT=AV6Ee1&flZt7z zRPz(>gxrOher~r=f&hZd6R68UuA+bc^tKpEz2lbIw}iI->mS~ypZ{+tM1g{q0Nzu2 z?L_|afB)>p{2JfRC*#1NpuUH-pUm{xlF@+G^^q0!-#>`s76fBIdg%Jz;z$*OTmSp# zQ_ufET>p2}sQ=?*XGL?eA)8~|+RmKwj9-z~y=%8_>)ALhZzfgdzkgcas2$(5W4rS5 zi@}G__!d`O%CkT7^ZoItuCd8U@78lTq;~JVV9Ed>)wi^~?~dPB{gjb$ztC|gUt!gd zFT(nfHM!ZwQaPRM)zA zrU9QjR+g486)UdzdzR=O{@5TcBD%0ZmH$BJ^5so@h0g<9+8P>YS2>x_c6PEo&%2%a z_2%Ec{}|()N@u$}UY)|PVp|Iz?(6YN&T_PnU7PhWphyjf-#U zxGimFp>h5GwMPoy4t#JtUN$g*3{Ob6ZeeWiZZrB;!_4bA;@ZwBDh7;XAox;QkLgXV zzTX!5E-f`)%vN?DF6c1QGA;>cLAsown}Sv>XYz~V7rWD{!6%qhLT45^;A#8I;EQ1!^jmtAiZHzp?^+_XiW z;d0c%J;_Mf_qKmKVJ@5BZW7x~!AHQy;9}{=Lz!=N6D4^ zw{B^MVlGUncfIiT9M6tC{Px+RqWl#%FnI!xpNfL-X@5}m_rabG9_QBiU(pfp9CyEC z8I+9~0Y1{py2fp%t{L;`*T*`Cb+UDLUtib9BLyH7E5zP@VdPTmWm(zvpg*BneDqpa zK!Ey)K`o3DPhsVDr-D=7<<#xByPwXFqbPlw!&X={Ux)5yFN|+sXv4aL`rju2{^hc{ zNs|zp)YdKC2u0aMuT_ct;^DygRT6|Sy?Lcej@yNXFY;dfs_SL1U&QcM!Sl|UwsRPA4I7&R+0{=cq$iG;aHHk%F^?m=w znqT4B;PF`(JVPtKFiOa~I>tr2M1SGQxOKWWU@Wa0t}!@9OVz z!z&`$oK=uxjdji`)7j@JT<5aJW56uCbjb(+Hm(G+aWRCalD~Av@SpGdYaH$aJTY-- zCNImX-AAjV=I*wVqLyj9$-Mu;VpinJzy!5rlr3B7UqyV5c-3UMZ2?(|ZXhosJ3YJN z;A{NxX&B`J4f1~B?;PgvN8nL00(``A1+Q++DdEe8#Tn6szWjUq? z#U9UI!u00m&FD8wTim4ryRey@o_yc9d-tAQoI@q(-^axwK59IWj5O7`@}Ix<=+hcNx?jiENc`tte#hx@wEP!+^ST%7Dbmtn)=0fR&h($ZAlAK1piC`9j?UYbbN7F4 zw`z~Rb3x@<2V_tE?bjE%{>P{368qbKxGCd#IVW44{t?W<*ROJl4OffD>ey_`)$h(A>|&Z>SKj={Kq?6@gbvW-zJR8#Gu(kw6(Juk@#1(ZQHypQ zB1g*Bt;FlEY;E^8`MlgaRy?goF%ItNm_SY)Enr!&VR2W*pJpVqua7SmMQtpY8C4Y9 zT^DQuTj+b(bhr<3MAmal)ZJ0qy5axS_9oC&zu(*N2_YdfnMv|RNTLuWlnh1Yc}g;q zdCZV8L?L8OGCO3RLYz1WiDMp;#KAGo!@KqSKmV`(@4MFfJnvesWi?pm9G}nU-uJ%u zzOHNUEfP7}O`eXrVV1f-LQa=_c6a-dSu_j2WJxDJk&x&Yq34mqCa5x#iO$uJOv99t z&pQWRBT=pl3`$o-4DvT(h0FQqr&B#DH*d$6#;FN(sB7ld?CyrW|NX6gCUv!ThWTN_ z;=LLDFP)u}UuitrnHa+-+9H!5u>g<#-(MLaVRuw%E?v78hV#MgmJ{?(7*p6)?tTx0 zaZn)s9C;ZuIhwb*xBUcqq{xb=1hW&v{8SEtz!NsMwrqU)dAyu4#QpvK2z4#BsOQhW zpFbe~(k1x)$K~WsXz4(;u|f5D+Uep{A{2+VnzpU12!mcjLdr-WVfoAD@q8baNO=yl z;0SF@ESCv%9L`lIX*VyOS+B%)sdUun3jjT*K?7ssOM?;`_ojbiu`LG&zJ*_Y|K{PR zy9`s8dse-w6Fjd85b?#Jr=0|4&i%WmGat<9aDKB9y@^?`F(2yTdc%(nmCtghe!~-Y zSKGkg7E+r4p`@&A^5_xFvS^`@qr_sd1H+2!%;X$YVK*=?0}HMrbsqUQhb^8*MmF13 zo{PIX*}eE~$z76xkuiWD{n_Gjm5&!~(z`2#l{y{>1~#@^Qbr#)HkN<>0P;G-sTvO< zM2erN^lo{@hk)$a>v>DujkcC!U%fGRtAY1^A6 z4I@%$H&1Z$BP@efv8ds+*p(~KWI6paGKdi;klLi-nZ`CYYhShPzH53^B;oJx?-PgI zdck$7-JB{v-}+)Sejy5NRc`7mLISgRm3v>@%~s{1(QWH4s<+#z?JbRn=qmPA*MR=W z*>YB`bCrMIbgva_Sos>NKGgOSC*cNSv8wz)aR zm2GddFZZ!$+~&FARIQf#+!Psln%-h^b(^s$H8~|k4ypYS3Z+ZR%OiRBOB9h^3z!lY|PJ-hPQIsjZ}p>d$QS8GTpf1FDfY+ zG(G+Bs2hJKj|tonf(&b`!Ftu*-gHXCpGe^|zCgn1YW*n!`D*>P4c9BPyb5ZgbDy(7 z|5BjI2j4rp`xJ5+b`SMo?M^BxqEQvkuFrZX_fkZotc@V^W=|7Lzt1Dek6T`AT5vt; zz{|wM^g2~4+TZ`+mf1BO#Zu8^e25m!%(7l5C!_lE`x+{T7nGy%7f{x&u7qA*UhW%% zY{qVGXISsCLEMJ+7|5%)+pSG5g*U-H022|O`ThJraBy%*b#)jlA@o+BT=!(^?`f}6 z-^GqSS1xm$0X+>#JgjT@w@iD@ju{p zkPHVYncRfKn_J>3Z9jfc(a6Cn1@Vx8jS(Q;_C7W*(^=cxMb_8jBL)Ts<*N1J8OaMI z1oqC#3MU3-s=xG(r1ByU!7t@Evn@39^va$z?!LQKMX6qHa zXVfbdu7}0MP$J&z*}AGrvbKO+fI~qTwl+^3qy2@mVL_L!G7#K1D2%(qWrcfQr`0@3 zVTyD|3l9%Vlp`bLZ@;+1WoL(r3 z*WJT1iEBrrWHW0<9|vslG zn!SEJcFe`yJ?{0p#}us_r$sN)o#u_(=?e|Po+1qV4FwxK;pIPN`BLJgd6~(x8pord zsZeE|rpA?m;$ky*cLuE@$=(km9UU;6%>f3*!`3Y~Zy){TRBd&tTXPPjLbSApsWD_h zYd!(n1jC|-N>8DVX<@Zon*M%M&W10|))yPUAkEh5S-zkbny^`1b4XR@btVG3jCPHJc* zar0kKl?rO%IO_VCm)8uN2oyw*4UX=gF|v7Tw&h8e!Lz(PTeQ86O{RX)oA>kn`U2yw z`Q3&jA-4vGhUOFu7JhvM&!VY?F)kYvl9CE`xcb~(a%|1Lc3D?nzxn%jb6dI5=4MG| z@<+oS0|oVE=~!{$ME(&wv2U{?VD%;pF72CHxEJ$nuCn1=h2CWUH+m|voe*8fN*Z776YYC-cm*_ajv75SBU0aCE(0Nq-*nYCU?rjetL&G z^TYazAuxJX&|dq<1@`q_d7szs%35JnJbXY-fLAhTbAcD@a8*b`;(;Q6M=5D^PVt71 zIRha)13dqa89PKTRB|Muuq9sCL?hd>hZ)G->r-puT8@19x#Z4ftMY!TeK=t~JsAVo z-{jdJxB5KK3Qpm)E;D=kBfghiU8B&}?W&lT!NOat_^%myq05(jX6jDW)=FHsJ2dU2 z14m{PcKyfTBftA@Di{}jetuJMh2USqGvS8t5L97Y&67ev1Q09tBFoE9-lPx`77i#c zF9%n`#}+9MXCJbvN}E2AotS}{Ij9Kh{xe3aFN!Zb0Oz~ek-Ot!VNtVaxVf=m71k6M zcFM-a#?-}SeZVC_&?xVGC!C8}(G83Um`QXQKo8q4{2M$Xp|YGFHnkmgDwZ7euVdehyOP8YDB@Mm0 zEb>dYy;+~hP{N*b;t9ut<`j{U%3Lqob@d`56pxODJ6xoyG%;N>m!zc+1I~hviETHR zh&q9=5oMy0%iZOFEE=^S74mCl=8}X2zJ>0}3X3VfN~x@4>B(Z8 z499ry4*5#pOqa6Q#mi!Trx7Kkr2$P2Rhzg_5mNkVr|O4^@(TWjmal^5-_=`8d!;O0 zBTMcKwh`S7P?Evx+^rfU8Pw!^#MB2GBiQD~mBZ;gyj%(a=xO~ z8DNHe*<4oadQ?U_k=NR*oEZaAQ%%79=bA~(Ui*6+U*Mb_Va8f?3@VxHFp5Dp;mV3j`(M-{%$!_yJHBI!#*9kZ5MUSA)%u&_`@ z9vC%Ib*u+qy~DyI;icU@vS_x}|B)4?d>$JUK%{q#Ztg9HB<>F_x76H~ovR^NrMX9c z{+Rcqq+EYfgmo)FsIMOl4nt+tbZ}cG^>;ozcBIS7Iwy<@R@W6##e}PYJFAa+cI@GY zhN?6Pk@DP~E@(kGguBT?VDVbX;!f-*Tis)uI5hO@iy~~d$U=jH3|`J1S-ifunDB4; z_y78!->m_PXa9QB`g`+j{Yi)g!+*EA15Hl}mJObD~gI=TMSOx6M z%+jU1eO~$LSjiQs($m#aR$jNAI;;dyIs4{SsOZA5!t)_68qlr`B^ zW~uY0=CKx|BH-uxQkYVG_N$@#Qba96FVGKT&=2+E&kzRi(2;aIlT~{c+3x@KYwExC z%KkJ-dY7p#&|)rnOO>{2)Q6aqz=VNtWt&;FQk0z-PhUWcFfb57@N@NAf&C{AVm!`C z4(&owV!V>-a({2BGqs~9ASQAae`f4JfyFu^p7vQm7niohMRIQ`X>UVmQieM@5AJYn zAP`c;Z20*2VE?UZlr`_zA_iwx&C(B55=|+CO%MoX@(VJ79K@NSrWsGQy~$K^s9SEG z6EeO*b>7CNs0AXIE-aBTd*a>xAt@003rRAA|Lnd(W{uPU=eV|c=Hr5^nVUU5pqDY9 zDdt5bp3c?JI9($>6Zvu00ft79FflnY5KcIWBg<-^Txbv?P`!b?f5ZEFaK>k$H!AdP zs0$?xNb;8MNvCRLSs9taDbxAxtO31~2!a!OddZs_-x7`+p`o^C zYN)gL8w5fj*7#DgDlaVuS{QDIpa1KvUXkbWsEO(_5+N$q=H?&FBFeXfgot0ZlNMu6 zEBBUss6*()Ujp+HvmbrRrBI?<0MADyggTb%X0OOro$pU4oq+;T_j)P*i-I48NR^b7 zGPL<+RC$RB@Ln6euedDCd_6u?BvFZ&RMN=8(vl(A;``T&#r!uhF7Ru+XBKa9CpYzP zaKrIlQCXR%pxE+pulZtVX6WqdOs{NH+*WeBS0Sry9VUPar1mGw@X=WaROV2#Ark zz!N2`ZSkL;K5tn=nA5An$3_wo(`o)f>AZ3I(1ddpI|(Ph#br9W8IEwO0!_u@oa323 zWqr_^2<1`mEG5mQ8q_lR2_BfULCEkZk%q?P>?#5Q|3S|N6k&O2PIrH>Dz)=^bQ&?? zy3Ub+Zk|~`fgr^%8D4O)%~tydY+`<40pdL~vnMS6{_N^<{+nNG|GA<8wh6i7P41We zMOX@g6L6qflvNi=<+Oy^2r9d=bp{Ru zI|ewTcoNd?fuoZnz`OaGo4Rz6|HCbX4*aBd8TUW8OfAdM5ZsCVUNIig$_ZO#{?SHE zrv(SG40^>*i%nEa6oJTAqs&%ACjBher6eYR(>exSUL11Vp5C8DCd8c$_Sd$dt<=)G zpZkgf-4~R?P7J02!2x{ds#Dc^N%YBLQWow-tG&8g=q=e0?3AnTCKadB+&l9OJ)2j* zd!K^f{m|;d{OI7EIt9T5*R}Gt3}aJo647Kb+H5t&B-Zl^RPVUEZpE6b^Tq}1HNql) z!c0LhJ~c({AZ~!_xH?Y`Mg+cqH}39gI(b+t=Ea>wkRD9!Rj&%Qqo}iQpS?ZTCqi~Q zViiv9-91T*>qrxjvj&@(U4Gsb1Z(S@w)G$$z#jg4#ox*%S3J~X+c2Y-53 zQ0~gFiAB1fZpC9(c~tnN$?6UQdO<-x37MpI($#Y9g7-YMTn|o}KhX*Owp_G;T}@Z} z=O~c$@~SNvwn23aERfIRav;Z-N2*)Z^7aUk!d8Rq4|EvklF?13kLwGqq|yS>(}al6 zrKE5v@Q~p7%{r5S-_d6JB!AqSI;+K^rnW7Mc~{-*{y02XDZ^;`Y^Sr+PG^NkWpB4l ztZy5~D&OIz?sj2GddJDg5(s%CfBT*6*w52X!0%EJlQ!dUx24hm`~lWIz(!buI^ey4 zlXLAZq?!uNnwn94ch^Xp5oN) z32@potLG920`sgwgURAyvflX;qjX0Vd-y zBTcqbf5vy`l+X`@^ArRb3CLqX7f?g=vZ_Hm;V&MZZ8e=NXgSe6-Cw}{GEw2qUzWf7 zoSj%G@e5#?PX(v}JzN+6YiDrI`R|@jz-VyB;)1x2zp+O8DA?LPM{@j!oSv#C|F3~h zbt*UKc?CfJ%B44(KYu1x;(l-sOGro5tQX*8~;Rdg+rP zRl7+M)%PUHgB|VEyFqaC>8M@EppBhpeaqz2P77?_LPDnI{;2X`*6NDL>PEIPD7pm_ zumvs0*!{WOREyI_8>K`?ax1L(Q!5!>R-@aJthk4lUA|acmQ}ShD!~V|>6r}ctaHty zhXw-l<~s7capD>_Fy$sx{&xCf-35TcQT_dzXe_+rC^Zx7{<|pvn=nPhP3$2Gg)%AAxg;hQ5@?5W9cxer zFv0lb%s&u=8b!1wPoRAB@l zU_}soGQGqT9)LuuLa?;H9yvsEFMXYP9-Q-4<^V2*JKQe;qPO;7w!FRpMg@~>v7~QwjY#8pk z_wPQ>EOXK_`o@hG=BHC!Fxj4;=MQhiJDO)#SZFJ`^zqqH?JoiS*MMDrf)bXJva*QT z+0}Av0U;oi><9(fo9dpr1~bcRqk{ouY6-Hd?vfCzlwXw4>w|RvNzOv@ot(`{*V^Q< z2W6#zGP=7HqtWQ2j*zmd&A%;a5P*XI2k_1<{BEsrkd8Co-tyWq*9k7df~mcJ%@Bea zKG=UXH8rKJtGl?f=MP(GVSxpPqTPypThkYFJF(LO9s_&>vda;U2T*`szfrDw$%ha6 zOl57C)aM#ptMxxmuat|r7=+|WHSRykRS)j7x~>_G>LsciepX%W0dR`3=Z+*H;m)Q1 zg~fAYsR}xOMZ>y-75)14%W>Vxg?Yi%t9RXkc_S5Y-!^miyg_ zywVCMvOlUYn32I@V`pb-$>a3M&eM8EJhAf8717ZsMX^iFzt(qNC}~p16n41nZXY`! zoHacgI6)GSSrKq2{^6%7M;a2jt0^j>nNI<1LEI2ek%#(2zect{Q0;fkLP*RxV(uVr zps^K|ZdME2FBO!Op5KZ;|2{9+-~Yt?{Cq{>xdimB_=g3B8q`4$2_!02Ox9mxj(Ycy ztmTM=uzKj`>T0C`xC*IUE_XM1tVLl5eqW(7Qw$d+8)VOOA4Qc+>2i!iaauATDm(lqOxtwJnF88M<9s>a`_ z5D6!eB1BkFcGAaB@ULoJ)G?Lz#hfWBEx65d45aL=Mnq4C=Bl7nZ)v;j;n`|^a@b=) zRP;T0ao@^i)TE{e_>v|Z4z;)_;4LK>pO7%z4@DpMbH5jtT35{F8w?r?g#r&3nyIbG z^WocL4@8xV_2Oqrd^m2%sKr4PnsJ}FOKLYT*ri-zJT%V=;B?f|l2DPp$GgYXadE>g z!^$wC9+Z>&MSXKtSNvAC z@m$^9mZ8ILmc9U7qKWOr{4}4dVh`7e;L%pv>gq zq>Jd&JY|&>3=B*~MTJCC<;THD<(#Q+wxmQ;KbF_}Vqe@?b)4T=Jx1RD=3kej%+2Ga zk!$Mjr{jzf@|FUQhKok-rc_$7o}=@}sbywGb{0#QQPtX7F97oI)12JhO&sd@qUlmK zTJ+AAtx+udu}*Z(nMns?kZATCksxS*&Aa0`IpN#VgRyVuPwyP7ptRR!hdwhx8ZJbUJGmHBJM zI8oGIRb17uoN`b9(663~N7zPfRR+>PILO}|XOFP{31m+d;e@5}b)>y)F?y?ZS{ zQ24MAld`9bNw2veAV0X_V%-k<7H}T$4NxCM9PkfFvnpniFOg5>i?F{-!`iprVLXb=A(;%Yk$FooOMj! zAL#m`GzBBAj}AECCerhC!Jsscj-8MhHHlyo_7oLN>^RZFyWYo$g&EsQ&ugNi&lM{# zF)w*uci{_3j>G*=Yx0)+X(Ay}%fQOo_VFVE4Ee|dCni3ApGTr2YU1XWv(fG6>&ptP z5agk-hk!FCZFy?KaP;^Rl}sTp6tf@8W9fCNf5>wBbj0hF6p;S;XYwd(bvnT^siuVVA22*hyC6wP^3DAZ+WbIa58Aj$+*9t=O_h!W32Ke+@bGX;fB!}b z!-Wzg5~zwkGmJrlcW%50HNgoer?NtPjN|LNp-MwaP7Vtrx$-&R3Ik_7!22W!V;2`% zxI_0=KGtBK@XzML<*v1TRtF5h{tZ%MghYXG>kx!NB-QP5L<#Qe4~}wLHl+7=&o5we>vEq_?@Kjy`Z^^>tct5u=TmJuU>$PUF=0s~AkH+9k|@Prrab_*avG&3`!-rdbHqQpFh&nUvO*s^(j z^JH4DQMf!?yQnXk)pW zrk%3x^HkIo>3HSL;_PPBayCc!>KT*mP}#ifpdMpzhwSH6zDOA#F z!a&#pki6yPnfgfw78YK#EB9!-D)4V6zb3O1YXCW8r>(ucnb)o}uKexT)N$P1MP3q% zI2JgAc)T?yU-oSgwm#}ut^lv_obYX*c8Lr9E>ehb{5y#}GxEQMsUtp*8bWRakSB)% zm26CL(qGAagDooYd`~%O~AYWo^W--tv7Qo%nWgk*PB4ll41n@>nb*-jyLKL4C`r@cD z*Ca)rXHU!ht{GdZ8(n;gnUdpg=wH&$RTp=S{?|U>Un##IbAB_G+UAug8^kNdU|cwb zMHsAJhl;cd!}%zGB;9!)sr(VU&XJ-r`KuF)cnW~4w!SXNYe2(5fRevZQdb(JmJ81z z0NHcuOXqly34=kaTRb46Oss6A!2pu!jlJx`-r}s*!b<=3i0l9(9SrTXxP6tzpNHfq zjBCZfW4a_NPI!}ogT!<}n~T|>J@mfDNdRjBFonDD^FuuK-~S@z>RNG0O6pX8UvOC1 zKLtf&!FjyO!-90DZ7Y@6-RlO%?`5gyagTR^1LHDp96ytgf95DQ(UZ&77uV#bVhsRn z;Dqs$C-~dmkS~GV`f=r&~g~h;83)EgS zGhMtPft16;Hz62e)Q{9bcmlZzGM+uM3e9zOq(IsiKXa^xf6U*Xln<|a&4CBJ}x z*Qa+)wXSqf#cR<`I#+{Aaq;`(wuL@geu1y&D2QcZx#s5=* zmd{pG77$MsYnK^7cK|PA1tWqP+Zu5D?6Zk&ld6V z+X~*uq7(qqL4>znCpY$O)JN_nI@_+B1C%esU{&2*td`3>+@L`bRI$Ji?8xt^y}z@K zB}Fu6G>UN&<9*xxhm@3{q_(!Vp;H25nWT#?yPJ(SedjR#?s-5k-y|mmzq1|~2o+Ou zW(;2T{+o)s?tsyf9Ri?u-VQKfQRVqKzK0C*>y3b4!A~Q}WZISp;c8QDL(XDd-Cc@NfRE@z)nUt)X!O0maDF)DN_EbnB;IYFboepyU4-BS;45xFG>l=) ziUDfJlQb}pqo8oKsQfX5{OH}=${HC=0Qj_i{VMu3E!qE_^?jOb*U=_k1?2~j1zwWa zMIdfqM1aeH7_C3LZ`ZFudZn5dXs-azAWcuvwB|EGshS@;Q6z|uD8|G ztsV9Mcmo04%h#*I|C%W$rzZz;nB{^%?H_T$)?(wi*sm&p#sKpvnoow9aH=lp{l)U? z_$tWOf0X?hp)HzxlOru;`m5JPH`mH&TQSAsuW=T8!%O-2KL@<(yoRJRy$-J6`SBw= zlb-(n11^nlE`QZyE`0faXtdKP2~Kdo+y=hB`yr=V>{~|4vjxoKrOJ6^7lU2 z%mKjKEz?alSe-V3mo^A^N`nw+i8Ifq_$oox<}Rs5K6Cbgs zPwwR_5hkFgy%?xe-BQa3mvsE3557(ZIQBOk4~*(RT~U(Vxk8pUINWk3;qIn5Yi5xF zKi#s|GDE|(!$jaDaqLPM-QMvf>^W66x>y0q4W$L#5d-sk^5ui@0O`T8HvG7|U4iFn z=!0obN+)$rB$Hp@_3`-=`ib&`T1huG;o;e%Sb?z^$;`lT!zhiZTEA!#BrWU^YaLWYer7x^eNXbnAWF(>V`9|%Z=7d%;$;Vkc2W*=ZEC+e;0J^M>fyhE-XYW zwug{b07agIKFPrt*)Pn$pA=kdXUp*=q<@XGgahsF>hr`IOO(d)7vyb?s*^}dQ%y^p zJI;-WcUz%8zs!3`Yn0IWqsRL|+rQDdcDa3mePgTPdQCLhdtP5#uhWO~-3={>B}=Jj z%yj7%n+oQv+;LuOt=W`;5ODNAiluHySv)@lHtuZ$C5Vu?*jn=$(wfbfJ}AZ|5W+uRLXhP2%g@QYicz`F3PIXEQd`@%yOQu zK}k_E!+)_+u-umhrszwLuW|hV0C3=B0Y4kGA-5r@c3D+f9-3e-h3mPSYq?6tU%=_vq^3cO^XT$gO5Lm@3eHILRP4uB`n$Pp zeb7I5PXaj&L(&Jv$3u!XEppnaFK`Anv5&1~NrzX~ZFfSVzNj$e7SV3rjFR5C^jhiN z<%mg*Vo%zm-r)`o!@85y;7`?F=_{ztp>_jw2^CXgsrh>NUr z79R?FolW&#QK(y?Ew zT)cvtuB&FNe}QTo?9u`tOM2~=bWml(dZGK$LqTkfFF=V{aUdey`|=H+-RFUL7rqBx zn!gnh5?bofq9bvCm~r3jN3APS1J(iYUS;KQY9EKv_s2{%!FUK7aQUG6 zk7~sz?}xZ}HI81jEx54!)vXTSXuCtJrlDcf`;SgMGtW{ae6#UzA1dI0T1J+Zek&QN z9otsXZ*V@9pP&CaHL=M|daq?GZG8J{?%a`A&Rkp?eB!3EJF;C+H{EI9#x%Yq&wo+i z$F!i|wW9_D03_6sq2)O#zkL1rgROD9(+q%Tu}A(>ZUK+ z`;X&LfailcSZ=DNpnR^tgOLcB{0n}sxZ^W zWikCL5t}!KKu+1BI~P^cv|_@0C7%jI7`kaE^e*?&^q&~kjso`?3Z@bqEdM{mN z%m;pZ)UKG%Plz&K@G==oKF)HUXn_#VKe*9$(&6gdFUCI`)PFMAAV)|R&?XK-qvvAzMl8ulQdA?-4tQGuDS8n<;YX?%#L(* zrPg|E_$58+DqNwyF$I66O0a$MTh0h!JV>t8SHQ|@g+xUO^ZUZtJUgwIa0mO1w?Vay4Z+m?x`LXscj+P; zTYD!qi90yJsaEwCA7QPdb|~oPGWWw;-7jl*WO&$m7_+dr`CbKO36jfhX?Rm-l{19IoBFIMa@k+7|&7YHX`b><6^Ff^wZLqp=N9 z?`b|GfAs995UDi|P)C`~+&Qdhru|PbT-PqLvVj(gPqZ6WlgsW&ZF7N329ikUsLd}p z5g4a~hQTXjT7os@lMCnhDG2)mGagNLU1iB@sN^Ts1fD<~+K(30AM z5ISmbP-kz+EP7IJe1{G(@gQx725L!wx3ES+orL7xN&*IK+SC*;FB8}kmWchFR8JDW z1A0G4{;r<(I>)QbTU#h8SN^uNefmSZXqYAo>9v4CU1*vwrgo`M`fxRPe^Z9#(5|ha zuR7}zSWk(4a-?5vS}|~N)_#6JV{RkTXRQXa0I&r%w)kMKcw!XiD+aqOQePkh7UI?2 z^Dt<3lI?Jr4cX8@4s|(QGd&m#5e)NTVzcJsoOV6A@9Ss4y;lPA_k`

{5G^XYdig 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 literal 0 HcmV?d00001 diff --git a/docs/integrations/bisq/assets/bisq6.png b/docs/integrations/bisq/assets/bisq6.png new file mode 100644 index 0000000000000000000000000000000000000000..279171144882c7a7d6bb366e11d0b8a661ba81cb GIT binary patch literal 5164 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 Vh3@fFO`wwpQdibiDt}?|?!Tl#SoZ(` literal 0 HcmV?d00001 diff --git a/docs/integrations/bisq/guide.md b/docs/integrations/bisq/guide.md new file mode 100644 index 0000000..676ac93 --- /dev/null +++ b/docs/integrations/bisq/guide.md @@ -0,0 +1,34 @@ +# Bisq Setup Guide + +1. Open Bisq and select "Settings" from the menu at the top + + ![Bisq Settings](./assets/bisq0.png "Click Settings from top menu") + +1. Click "Network Info" from the secondary menu that appears below the main top menu + + ![Bisq Settings](./assets/bisq1.png "Click Network Info") + +1. Select "Use Custom Bitcoin Core Nodes." Enter your Bitcoin Core **PEER** Tor address (found in your Embassy's Bitcoin service page, under "Interfaces"). Be certain to remove the "http://" prefix; Bisq will complain if you do not. + + ![Bitcoin Core Node](./assets/bisq2.png "Enter Your Node's Peer Onion Address") + +1. Click away from the textbox and Bisq will require you to shutdown in order to make the change. Go ahead and do this, then restart Bisq. + + ![Shutdown Warning](./assets/bisq3.png "Shut Down Your Bisq Application") + +1. When you restart Bisq, you will see your node, but will need to select "Use Custom Bitcoin Core Nodes" a second time, this will show the following warning about ensuring you trust the Bitcoin node: + + ![Node Warning](./assets/bisq4.png "Your Node is Trustworthy") + + Fortunately, you already run a soverign Bitcoin node on your Embassy, so you can proceed confidently. Click "OK" + +1. At this point you should see that Bisq is syncing with your Bitcoin node in the very bottom left of the application window. If you do not see this, make sure you have selected "Use Custom Bitcoin Core Node" and restart Bisq again. + + ![Bitcoin Syncing](./assets/bisq5.png "Bitcoin Syncing") + + +1. Syncing is normally fairly quick, but can take up to 30minutes. Once synced, you will see the following at the bottom left. + + ![Bitcoin Synced](./assets/bisq6.png "Bitcoin Synced") + + That's it! You're synced and ready to use Bisq with your own Bitcoin node on Embassy!! \ No newline at end of file diff --git a/docs/wallets.md b/docs/wallets.md index dcb28a2..64cb6bf 100644 --- a/docs/wallets.md +++ b/docs/wallets.md @@ -1,4 +1,13 @@ -# Tested Bitcoin Wallets +# Tested Bitcoin Integrations + +## Bisq + +### Available For +- Linux +- Mac +- Windows + +Follow the [guide](./integrations/bisq/guide.md) ## Blockstream Green From a016335338135a23eb9c998b10a6bd7a4df3ea7e Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Wed, 18 May 2022 07:29:18 -0600 Subject: [PATCH 04/41] Trezor --- docs/wallets.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/wallets.md b/docs/wallets.md index 64cb6bf..f1a80d2 100644 --- a/docs/wallets.md +++ b/docs/wallets.md @@ -20,7 +20,7 @@ Follow the [guide](./integrations/bisq/guide.md) Can connect using an Electrum Server. -See [electrs integrations](https://github.com/Start9Labs/electrs-wrapper/tree/master/docs/integrations/bluewallet) +See [electrs integrations](https://github.com/Start9Labs/electrs-wrapper/tree/master/docs/integrations/bluewallet/guide.md) ## Fully Noded @@ -58,7 +58,7 @@ Follow the [guide](/docs/integrations/sparrow/guide.md) ## Specter -### Available for +### Available For - Linux - MacOS - Windows @@ -70,6 +70,10 @@ Follow the [guide](/docs/integrations/specter) for your OS **NOTE:** Built for use with Trezor hardware devices -**Not possible at this time - Requires Electrum server and support** +### Available For +- Linux +- Mac +- Windows -Track here: https://github.com/trezor/trezor-suite/issues/2737 +### Instructions +Requires Electrs, find the guide [here](https://github.com/Start9Labs/electrs-wrapper/tree/master/docs/integrations/trezor/guide.md) \ No newline at end of file From ac1c98d9c3406db71c660d1fd1dfa3c184048b79 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Thu, 19 May 2022 08:34:39 -0600 Subject: [PATCH 05/41] key issues remain --- Dockerfile | 80 ++++++++++++++++++++++++++-------- Makefile | 4 +- assets/compat/config_spec.yaml | 2 +- manifest.yaml | 6 ++- migrations/lt_22_0_0.sh | 2 +- 5 files changed, 71 insertions(+), 23 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3e335f5..81a73a1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,27 +25,73 @@ RUN apk --no-cache add sqlite-dev RUN apk --no-cache add zeromq-dev RUN set -ex \ && for key in \ - 90C8019E36C2E964 \ - E2FFD5B1D88CA97D \ - 17565732E08E5E41 \ - D7CC770B81FD22A8 \ - E13FC145CD3F4304 \ - ED357015286A333D \ - 3152347D07DA627C \ - 2EEB9F5CC09526C1 \ - 03DB6322267C373B \ - 410108112E7EA81F \ - 796C4109063D4EAF \ - 1E4AED62986CD25D \ - 0A41BDC3F4FAFF1C \ - 099BAD163C70FBFA \ +9D3CC86A72F8494342EA5FD10A41BDC3F4FAFF1C \ +617C90010B3BD370B0AC7D424BB42E31C79111B8 \ +E944AE667CF960B1004BC32FCA662BE18B877A60 \ +152812300785C96444D3334D17565732E08E5E41 \ +590B7292695AFFA5B672CBB2E13FC145CD3F4304 \ +0AD83877C1F0CD1EE9BD660AD7CC770B81FD22A8 \ +912FD3228387123DC97E0E57D5566241A0295FA9 \ +04017A2A6D9A0CCDC81D8EC296AB007F1A7ED999 \ +C519EBCF3B926298946783EFF6430754120EC2F4 \ +18AE2F798E0D239755DA4FD24B79F986CBDF8736 \ +101598DC823C1B5F9A6624ABA5E0907A0380E6C3 \ +F20F56EF6A067F70E8A5C99FFF95FAA971697405 \ +C060A6635913D98A3587D7DB1C2491FFEB0EF770 \ +BF6273FAEF7CC0BA1F562E50989F6B3048A116B5 \ +6D3170C1DC2C6FD0AEEBCA6743811D1A26623924 \ +948444FCE03B05BA5AB0591EC37B1C1D44C786EE \ +1C6621605EC50319C463D56C7F81D87985D61612 \ +9A1689B60D1B3CCE9262307A2F40A9BF167FBA47 \ +D35176BE9264832E4ACA8986BF0792FBE95DC863 \ +6F993B250557E7B016ADE5713BDCDA2D87A881D9 \ +01CDF4627A3B88AAE4A571C87588242FBE38D3A8 \ +D1DBF2C4B96F2DEBF4C16654410108112E7EA81F \ +2688F5A9A4BE0F295E921E8A25F27A38A47AD566 \ +D3F22A3A4C366C2DCB66D3722DA9C5A7FA81EA35 \ +7480909378D544EA6B6DCEB7535B12980BB8A4D3 \ +D3CC177286005BB8FF673294C5242A1AB3936517 \ +82921A4B88FD454B7EB8CE3C796C4109063D4EAF \ +32EE5C4C3FA15CCADB46ABE529D4BCB6416F53EC \ +4B4E840451149DD7FB0D633477DFAB5C3108B9A8 \ +C42AFF7C61B3E44A1454CD3557AF762DB3353322 \ +70A1D47DD44F59DF8B22244333E472FE870C7E5D \ +30DE693AE0DE9E37B3E7EB6BBFF0F67810C1EED1 \ +E463A93F5F3117EEDE6C7316BD02942421F4889F \ +B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B \ +07DF3E57A548CCFB7530709189BBB8663E2E65CE \ +CA03882CB1FC067B5D3ACFE4D300116E1C875A3D \ +E777299FC265DD04793070EB944D35F9AC3DB76A \ +AD5764F4ADCE1B99BDFD179E12335A271D4D62EC \ +9692B91BBF0E8D34DFD33B1882C5C009628ECF0C \ +C57E4B42223FDE851D4F69DD28DF2724F241D8EE \ +F4FC70F07310028424EFC20A8E4256593F177720 \ +D62A803E27E7F43486035ADBBCD04D8E9CCCAC2A \ +37EC7D7B0A217CDB4B4E007E7FAB114267E4FA04 \ +D762373D24904A3E42F33B08B9A408E71DAAC974 \ +133EAC179436F14A5CF1B794860FEB804E669320 \ +6A8F9C266528E25AEB1D7731C2371D91CB716EA7 \ +A8FC55F3B04BA3146F3492E79303B33A305224CB \ +ED9BDF7AD6A55E232E84524257FF9BDBCC301009 \ +867345026B6763E8B07EE73AB6737117397F5C4F \ +9EDAFF80E080659604F4A76B2EBB056FD847F8A7 \ +6DEEF79B050C4072509B743F8C275BC595448867 \ +AEC1884398647C47413C1C3FB1179EB7347DC10D \ +74E2DEF5D77260B98BC19438099BAD163C70FBFA \ +79D00BAC68B56D422F945A8F8E3A8F3247DBCBBF \ +71A3B16735405025D447E8F274810B012346C9A6 \ +287AE4CA1187C68C08B49CB2D11BD4F33F1DB499 \ +F9A8737BF4FF5C89C903DF31DD78544CF91B1514 \ +C388F6961FB972A95678E327F62711DBDCA8AE56 \ +4DAF18FE948E7A965B30F9457E296D555E7F63A7 \ +28E72909F1717FE9607754F8A7BEB2621678D37D \ ; do \ gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" || \ gpg --batch --keyserver pgp.mit.edu --recv-keys "$key" || \ - gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ - gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \ + # gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ + # gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \ gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ - gpg --batch --keyserver keys.openpgp.org --recv-keys "$key" ; \ + gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" ; \ done ARG BITCOIN_VERSION diff --git a/Makefile b/Makefile index 64c815a..34f8000 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -VERSION_CORE := "22.0" -VERSION_S9 := "22.0.2" +VERSION_CORE := "23.0" +VERSION_S9 := "23.0" MANAGER_SRC := $(shell find ./manager -name '*.rs') manager/Cargo.toml manager/Cargo.lock .DELETE_ON_ERROR: diff --git a/assets/compat/config_spec.yaml b/assets/compat/config_spec.yaml index 42bf9b4..4226a1c 100644 --- a/assets/compat/config_spec.yaml +++ b/assets/compat/config_spec.yaml @@ -288,7 +288,7 @@ advanced: Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions - in the chain are in fact valid. + in the chain are in fact valid. It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration. default: false blockfilterindex: type: boolean diff --git a/manifest.yaml b/manifest.yaml index 7bfdf25..55abaee 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -1,8 +1,10 @@ id: bitcoind title: "Bitcoin Core" -version: 22.0.2 +version: 23.0 release-notes: | - * Add support for Bloom Filters, as required for Bisq integration + * Latest release from Core - see full release notes at https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-23.0.md + * Embassy change - Add support for Bloom Filters, as required for Bisq integration + * It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration license: mit wrapper-repo: https://github.com/Start9Labs/bitcoind-wrapper upstream-repo: https://github.com/bitcoin/bitcoin diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh index ddb8d8e..8570759 100644 --- a/migrations/lt_22_0_0.sh +++ b/migrations/lt_22_0_0.sh @@ -5,7 +5,7 @@ set -ea if [ $1 = "from" ]; then yq -i '.advanced.peers.addnode |= map(select(.hostname != ~ or . == "*"))' /root/.bitcoin/start9/config.yaml yq -i '.advanced.peers.addnode.[] |= {"hostname":., "port":~}' /root/.bitcoin/start9/config.yaml - yq -i '(.advanced.filters.blockfilterindex, .advanced.filters.peerblockfilters) = false' /root/.bitcoin/start9/config.yaml + yq -i '(.advanced.filters.blockfilterindex, .advanced.filters.peerblockfilters, .advanced.filters.peerbloomfilters) = false' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 elif [ $1 = "to" ]; then From 99c83e646b7920be54ba3b836d5bd6148dfdeb5c Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Fri, 20 May 2022 18:15:49 -0600 Subject: [PATCH 06/41] Still broke --- Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 81a73a1..9c9c700 100644 --- a/Dockerfile +++ b/Dockerfile @@ -82,14 +82,14 @@ AEC1884398647C47413C1C3FB1179EB7347DC10D \ 71A3B16735405025D447E8F274810B012346C9A6 \ 287AE4CA1187C68C08B49CB2D11BD4F33F1DB499 \ F9A8737BF4FF5C89C903DF31DD78544CF91B1514 \ -C388F6961FB972A95678E327F62711DBDCA8AE56 \ +# C388F6961FB972A95678E327F62711DBDCA8AE56 \ 4DAF18FE948E7A965B30F9457E296D555E7F63A7 \ 28E72909F1717FE9607754F8A7BEB2621678D37D \ ; do \ gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" || \ gpg --batch --keyserver pgp.mit.edu --recv-keys "$key" || \ - # gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ - # gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \ + gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ + gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \ gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" ; \ done @@ -103,6 +103,7 @@ ENV BITCOIN_PREFIX=/opt/bitcoin-${BITCOIN_VERSION} RUN wget https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/SHA256SUMS RUN wget https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/SHA256SUMS.asc RUN wget https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/bitcoin-${BITCOIN_VERSION}.tar.gz +RUN sed '145,151d' SHA256SUMS.asc > temp && mv temp SHA256SUMS.asc RUN gpg --verify SHA256SUMS.asc RUN grep " bitcoin-${BITCOIN_VERSION}.tar.gz\$" SHA256SUMS | sha256sum -c - RUN tar -xzf *.tar.gz From 6793eb741af5b01e82a5906f04a618a0cd82f909 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Wed, 25 May 2022 14:41:21 -0600 Subject: [PATCH 07/41] key issue remains --- Dockerfile | 12 ++++++------ assets/compat/config_spec.yaml | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9c9c700..04b3c97 100644 --- a/Dockerfile +++ b/Dockerfile @@ -86,12 +86,12 @@ F9A8737BF4FF5C89C903DF31DD78544CF91B1514 \ 4DAF18FE948E7A965B30F9457E296D555E7F63A7 \ 28E72909F1717FE9607754F8A7BEB2621678D37D \ ; do \ - gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" || \ - gpg --batch --keyserver pgp.mit.edu --recv-keys "$key" || \ - gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ - gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \ - gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ - gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" ; \ + gpg --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys "$key" || \ + gpg --batch --keyserver hkps://pgp.mit.edu --recv-keys "$key" || \ + # gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ + gpg --batch --keyserver hkps://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ + # gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --batch --keyserver keys.openpgp.org --recv-keys "$key" ; \ done ARG BITCOIN_VERSION diff --git a/assets/compat/config_spec.yaml b/assets/compat/config_spec.yaml index 4226a1c..d616135 100644 --- a/assets/compat/config_spec.yaml +++ b/assets/compat/config_spec.yaml @@ -95,8 +95,8 @@ rpc: description: Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones. type: number nullable: false - default: 16 - range: "[8,32]" + default: 64 + range: "[8,256]" integral: true units: requests zmq-enabled: From ee56fcd011aeeb6e36f6919193e6559b6ca6da7d Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Thu, 26 May 2022 13:41:20 -0600 Subject: [PATCH 08/41] Fix build for v23, increase RPC resources --- Dockerfile | 10 +++++++--- SHA256SUMS.asc.patch | 16 ++++++++++++++++ assets/compat/config_spec.yaml | 28 ++++++++++++++-------------- manifest.yaml | 2 +- migrations/lt_22_0_0.sh | 5 +++-- 5 files changed, 41 insertions(+), 20 deletions(-) create mode 100644 SHA256SUMS.asc.patch diff --git a/Dockerfile b/Dockerfile index 04b3c97..b195687 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,8 @@ FROM arm64v8/alpine:3.12 as bitcoin-core COPY --from=berkeleydb /opt /opt +COPY ./SHA256SUMS.asc.patch SHA256SUMS.asc.patch + RUN sed -i 's/http\:\/\/dl-cdn.alpinelinux.org/https\:\/\/alpine.global.ssl.fastly.net/g' /etc/apk/repositories RUN apk --no-cache add autoconf RUN apk --no-cache add automake @@ -88,12 +90,14 @@ F9A8737BF4FF5C89C903DF31DD78544CF91B1514 \ ; do \ gpg --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys "$key" || \ gpg --batch --keyserver hkps://pgp.mit.edu --recv-keys "$key" || \ - # gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ + gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ gpg --batch --keyserver hkps://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ - # gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ gpg --batch --keyserver keys.openpgp.org --recv-keys "$key" ; \ done +# RUN gpg --refresh-keys + ARG BITCOIN_VERSION ARG N_PROC RUN test -n "$BITCOIN_VERSION" @@ -103,7 +107,7 @@ ENV BITCOIN_PREFIX=/opt/bitcoin-${BITCOIN_VERSION} RUN wget https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/SHA256SUMS RUN wget https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/SHA256SUMS.asc RUN wget https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/bitcoin-${BITCOIN_VERSION}.tar.gz -RUN sed '145,151d' SHA256SUMS.asc > temp && mv temp SHA256SUMS.asc +RUN patch -u SHA256SUMS.asc -i SHA256SUMS.asc.patch RUN gpg --verify SHA256SUMS.asc RUN grep " bitcoin-${BITCOIN_VERSION}.tar.gz\$" SHA256SUMS | sha256sum -c - RUN tar -xzf *.tar.gz diff --git a/SHA256SUMS.asc.patch b/SHA256SUMS.asc.patch new file mode 100644 index 0000000..baa3946 --- /dev/null +++ b/SHA256SUMS.asc.patch @@ -0,0 +1,16 @@ +--- SHA256SUMS.asc 2022-05-26 11:59:08.634101012 -0600 ++++ SHA256SUMS.asc.temp 2022-05-26 11:59:39.067651333 -0600 +@@ -155,13 +155,6 @@ + -----END PGP SIGNATURE----- + -----BEGIN PGP SIGNATURE----- + +-iI4EABMIADYWIQTDiPaWH7lyqVZ44yf2JxHb3KiuVgUCYmPznBgca3ZhY2lyYWxA +-cHJvdG9ubWFpbC5jb20ACgkQ9icR29yorlZmbgEA1sImuqQigR4WOu6lju3Sy+UW +-N9q0hOyEAFniiOK9ZccBAMYKXcq9JpO2W2P8BUgnEYbNK7XEe53l97tGcZqRImjd +-=LoEA +------END PGP SIGNATURE----- +------BEGIN PGP SIGNATURE----- +- + iQEzBAABCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAmJi1UEACgkQHkrtYphs + 0l10/gf+KpVGbw+7oYWsFF8b8DZrNJfnVTwlREncD+Nsw62a3+egzGwB1WVeCOjj + i4lld60YrgLG2EDbYTP0kifaVIqxXPWVzftcLfV2P2rg+hli7+L3LVLlpMsi1lMD diff --git a/assets/compat/config_spec.yaml b/assets/compat/config_spec.yaml index d616135..42533f6 100644 --- a/assets/compat/config_spec.yaml +++ b/assets/compat/config_spec.yaml @@ -86,7 +86,7 @@ rpc: description: Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node. type: number nullable: false - default: 1 + default: 4 range: "[1,4]" integral: true units: ~ @@ -95,7 +95,7 @@ rpc: description: Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones. type: number nullable: false - default: 64 + default: 128 range: "[8,256]" integral: true units: requests @@ -275,21 +275,12 @@ advanced: integral: true units: MiB default: disabled - filters: + blockfilters: type: object nullable: false - name: "Filters" - description: "Settings for storing and serving compact block filters or bloom filters" + name: "Block Filters" + description: "Settings for storing and serving compact block filters" spec: - peerbloomfilters: - type: boolean - name: "Serve Bloom Filters to Peers (BIP37)" - description: >- - Peers have the option of setting filters on each connection they make after the version handshake has completed. - Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers - connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions - in the chain are in fact valid. It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration. - default: false blockfilterindex: type: boolean name: "Compute Compact Block Filters (BIP158)" @@ -305,3 +296,12 @@ advanced: connect an SPV client to your node to make it efficient to scan transactions without having to download all block data. default: false + peerbloomfilters: + type: boolean + name: "Serve Bloom Filters to Peers (BIP37)" + description: >- + Peers have the option of setting filters on each connection they make after the version handshake has completed. + Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers + connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions + in the chain are in fact valid. It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration. + default: false \ No newline at end of file diff --git a/manifest.yaml b/manifest.yaml index 55abaee..78bb99e 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -1,6 +1,6 @@ id: bitcoind title: "Bitcoin Core" -version: 23.0 +version: 23.0.0 release-notes: | * Latest release from Core - see full release notes at https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-23.0.md * Embassy change - Add support for Bloom Filters, as required for Bisq integration diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh index 8570759..ec315e0 100644 --- a/migrations/lt_22_0_0.sh +++ b/migrations/lt_22_0_0.sh @@ -5,15 +5,16 @@ set -ea if [ $1 = "from" ]; then yq -i '.advanced.peers.addnode |= map(select(.hostname != ~ or . == "*"))' /root/.bitcoin/start9/config.yaml yq -i '.advanced.peers.addnode.[] |= {"hostname":., "port":~}' /root/.bitcoin/start9/config.yaml - yq -i '(.advanced.filters.blockfilterindex, .advanced.filters.peerblockfilters, .advanced.filters.peerbloomfilters) = false' /root/.bitcoin/start9/config.yaml + yq -i '(.advanced.blockfilters.blockfilterindex, .advanced.blockfilters.peerblockfilters) = false' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml - yq -i 'del(.advanced.filters)' /root/.bitcoin/start9/config.yaml + yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 else echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 exit 1 fi +`` \ No newline at end of file From d8741b63bd088c2eb6b221329da37c5316610da5 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Fri, 27 May 2022 11:20:41 -0600 Subject: [PATCH 09/41] remove unncessary commented code --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b195687..972876d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -96,8 +96,6 @@ F9A8737BF4FF5C89C903DF31DD78544CF91B1514 \ gpg --batch --keyserver keys.openpgp.org --recv-keys "$key" ; \ done -# RUN gpg --refresh-keys - ARG BITCOIN_VERSION ARG N_PROC RUN test -n "$BITCOIN_VERSION" From 88cd4639b2cab7ada00c82639f097732a3d9b568 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Fri, 27 May 2022 11:21:08 -0600 Subject: [PATCH 10/41] add patch to version number --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 34f8000..e761013 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ VERSION_CORE := "23.0" -VERSION_S9 := "23.0" +VERSION_S9 := "23.0.0" MANAGER_SRC := $(shell find ./manager -name '*.rs') manager/Cargo.toml manager/Cargo.lock .DELETE_ON_ERROR: From 693631c660ebb353b9e73be09f1fa2e3ead6f86b Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Fri, 27 May 2022 11:21:42 -0600 Subject: [PATCH 11/41] adds bloom filters to config options --- assets/compat/bitcoin.conf.template | 6 +++--- assets/compat/config_spec.yaml | 24 +++++++++++++++--------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/assets/compat/bitcoin.conf.template b/assets/compat/bitcoin.conf.template index 03504c0..ac0119e 100644 --- a/assets/compat/bitcoin.conf.template +++ b/assets/compat/bitcoin.conf.template @@ -110,14 +110,14 @@ txindex=1 }} ## BIP37 -{{#IF advanced.filters.peerbloomfilters +{{#IF advanced.bloomfilters.peerbloomfilters peerbloomfilters=1 }} ## BIP157 -{{#IF advanced.filters.blockfilterindex +{{#IF advanced.blockfilters.blockfilterindex blockfilterindex=basic }} -{{#IF advanced.filters.peerblockfilters +{{#IF advanced.blockfilters.peerblockfilters peerblockfilters=1 }} diff --git a/assets/compat/config_spec.yaml b/assets/compat/config_spec.yaml index 42533f6..ed964e1 100644 --- a/assets/compat/config_spec.yaml +++ b/assets/compat/config_spec.yaml @@ -296,12 +296,18 @@ advanced: connect an SPV client to your node to make it efficient to scan transactions without having to download all block data. default: false - peerbloomfilters: - type: boolean - name: "Serve Bloom Filters to Peers (BIP37)" - description: >- - Peers have the option of setting filters on each connection they make after the version handshake has completed. - Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers - connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions - in the chain are in fact valid. It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration. - default: false \ No newline at end of file + bloomfilters: + type: object + nullable: false + name: "Bloom Filters (BIP37)" + description: "Setting for serving Bloom Filters" + spec: + peerbloomfilters: + type: boolean + name: "Serve Bloom Filters to Peers" + description: >- + Peers have the option of setting filters on each connection they make after the version handshake has completed. + Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers + connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions + in the chain are in fact valid. It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration. + default: false \ No newline at end of file From 94725ddab3dec985c903d07592efd32907f29dec Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Fri, 27 May 2022 11:22:06 -0600 Subject: [PATCH 12/41] allow for possibility that soft forks won't be returned in getblockchaininfo --- manager/src/main.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/manager/src/main.rs b/manager/src/main.rs index 9e1d1d3..6ada32c 100644 --- a/manager/src/main.rs +++ b/manager/src/main.rs @@ -25,6 +25,7 @@ pub struct ChainInfo { size_on_disk: u64, #[serde(default)] pruneheight: usize, + #[serde(default)] softforks: LinearMap, } From 3bb4ac4c3d5d6d67f578f0daf195eaa2660e1c52 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Thu, 2 Jun 2022 17:00:58 -0600 Subject: [PATCH 13/41] update migration for lt_22 --- migrations/lt_22_0_0.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh index ec315e0..3668172 100644 --- a/migrations/lt_22_0_0.sh +++ b/migrations/lt_22_0_0.sh @@ -5,7 +5,7 @@ set -ea if [ $1 = "from" ]; then yq -i '.advanced.peers.addnode |= map(select(.hostname != ~ or . == "*"))' /root/.bitcoin/start9/config.yaml yq -i '.advanced.peers.addnode.[] |= {"hostname":., "port":~}' /root/.bitcoin/start9/config.yaml - yq -i '(.advanced.blockfilters.blockfilterindex, .advanced.blockfilters.peerblockfilters) = false' /root/.bitcoin/start9/config.yaml + yq -i '(.advanced.blockfilters.blockfilterindex, .advanced.blockfilters.peerblockfilters, .advanced.bloomfilters.peerbloomfilters) = false' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 elif [ $1 = "to" ]; then From 55d489f07060c991887a9f67655b845c8003a34e Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Tue, 7 Jun 2022 11:20:44 -0600 Subject: [PATCH 14/41] Migrations --- assets/compat/config_spec.yaml | 2 +- manifest.yaml | 20 ++++++++++++++++++++ migrations/eq_22_0_0.sh | 12 ++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/assets/compat/config_spec.yaml b/assets/compat/config_spec.yaml index ed964e1..2815da1 100644 --- a/assets/compat/config_spec.yaml +++ b/assets/compat/config_spec.yaml @@ -87,7 +87,7 @@ rpc: type: number nullable: false default: 4 - range: "[1,4]" + range: "[1,64]" integral: true units: ~ workqueue: diff --git a/manifest.yaml b/manifest.yaml index 78bb99e..5b7507f 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -200,6 +200,16 @@ migrations: mounts: main: /root/.bitcoin inject: false + "=22.0.1": + type: docker + image: main + system: false + entrypoint: /usr/local/bin/migrations/eq_22_0_0.sh + args: ["from"] + io-format: json + mounts: + main: /root/.bitcoin + inject: false to: "<22.0.0": type: docker @@ -221,3 +231,13 @@ migrations: mounts: main: /root/.bitcoin inject: false + "=22.0.1": + type: docker + image: main + system: false + entrypoint: /usr/local/bin/migrations/eq_22_0_0.sh + args: ["to"] + io-format: json + mounts: + main: /root/.bitcoin + inject: false diff --git a/migrations/eq_22_0_0.sh b/migrations/eq_22_0_0.sh index 9c44e80..2107f8d 100644 --- a/migrations/eq_22_0_0.sh +++ b/migrations/eq_22_0_0.sh @@ -4,12 +4,24 @@ set -ea if [ $1 = "from" ]; then yq -i '.advanced.peers.addnode |= map(select(.hostname != ~))' /root/.bitcoin/start9/config.yaml + yq -i '.advanced.bloomfilters.peerbloomfilters = false' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 elif [ $1 = "to" ]; then + yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml + yq -i '.rpc.advanced.threads |= 4' /root/.bitcoin/start9/config.yaml + yq -i '.rpc.advanced.workqueue |= 32' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 else echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 exit 1 fi + + + +# if threads > 4 +# set to 4 + +# if workqueue > 32 +# set to 32 \ No newline at end of file From 1239d1b528d3b65b74134877bf55323e63259876 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Fri, 10 Jun 2022 09:35:15 -0600 Subject: [PATCH 15/41] Ready for beta testing --- manifest.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/manifest.yaml b/manifest.yaml index 5b7507f..e729e60 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -3,8 +3,9 @@ title: "Bitcoin Core" version: 23.0.0 release-notes: | * Latest release from Core - see full release notes at https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-23.0.md - * Embassy change - Add support for Bloom Filters, as required for Bisq integration - * It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration + * Embassy changes + * Add support for Bloom Filters, as required for Bisq integration + * It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration license: mit wrapper-repo: https://github.com/Start9Labs/bitcoind-wrapper upstream-repo: https://github.com/bitcoin/bitcoin From 2b23af11c72897a7ecce0ce21090421a0a5c03d3 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Mon, 13 Jun 2022 09:35:38 -0600 Subject: [PATCH 16/41] Fix migration filenames, organization --- manifest.yaml | 8 ++++---- migrations/eq_22_0_0.sh | 8 -------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/manifest.yaml b/manifest.yaml index e729e60..0e7b69f 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -201,11 +201,11 @@ migrations: mounts: main: /root/.bitcoin inject: false - "=22.0.1": + "<23.0.0": type: docker image: main system: false - entrypoint: /usr/local/bin/migrations/eq_22_0_0.sh + entrypoint: /usr/local/bin/migrations/lt_23_0_0.sh args: ["from"] io-format: json mounts: @@ -232,11 +232,11 @@ migrations: mounts: main: /root/.bitcoin inject: false - "=22.0.1": + "<23.0.0": type: docker image: main system: false - entrypoint: /usr/local/bin/migrations/eq_22_0_0.sh + entrypoint: /usr/local/bin/migrations/lt_23_0_0.sh args: ["to"] io-format: json mounts: diff --git a/migrations/eq_22_0_0.sh b/migrations/eq_22_0_0.sh index 2107f8d..4d5d116 100644 --- a/migrations/eq_22_0_0.sh +++ b/migrations/eq_22_0_0.sh @@ -17,11 +17,3 @@ else echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 exit 1 fi - - - -# if threads > 4 -# set to 4 - -# if workqueue > 32 -# set to 32 \ No newline at end of file From ad9b250daeac55799fb0c5413203e5d04307902f Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Mon, 13 Jun 2022 10:46:51 -0600 Subject: [PATCH 17/41] Fix migration filenames, organization --- migrations/lt_23_0_0.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 migrations/lt_23_0_0.sh diff --git a/migrations/lt_23_0_0.sh b/migrations/lt_23_0_0.sh new file mode 100644 index 0000000..3668172 --- /dev/null +++ b/migrations/lt_23_0_0.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -ea + +if [ $1 = "from" ]; then + yq -i '.advanced.peers.addnode |= map(select(.hostname != ~ or . == "*"))' /root/.bitcoin/start9/config.yaml + yq -i '.advanced.peers.addnode.[] |= {"hostname":., "port":~}' /root/.bitcoin/start9/config.yaml + yq -i '(.advanced.blockfilters.blockfilterindex, .advanced.blockfilters.peerblockfilters, .advanced.bloomfilters.peerbloomfilters) = false' /root/.bitcoin/start9/config.yaml + echo '{"configured": true }' + exit 0 +elif [ $1 = "to" ]; then + yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml + yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml + echo '{"configured": true }' + exit 0 +else + echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 + exit 1 +fi +`` \ No newline at end of file From 60cd243072e719a1055bbf1cc05a6bd537ded72f Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Mon, 13 Jun 2022 15:20:06 -0600 Subject: [PATCH 18/41] Add warning when using Bloom Filters, minor migrations bugfixes --- assets/compat/config_spec.yaml | 3 ++- manifest.yaml | 4 ++-- migrations/lt_22_0_0.sh | 2 ++ migrations/lt_23_0_0.sh | 2 ++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/assets/compat/config_spec.yaml b/assets/compat/config_spec.yaml index 2815da1..b2fe391 100644 --- a/assets/compat/config_spec.yaml +++ b/assets/compat/config_spec.yaml @@ -309,5 +309,6 @@ advanced: Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions - in the chain are in fact valid. It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration. + in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration. + warning: "This is ONLY for use with Bisq integration, please use Block Filters for all other applications." default: false \ No newline at end of file diff --git a/manifest.yaml b/manifest.yaml index 0e7b69f..ecc2a80 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -4,8 +4,8 @@ version: 23.0.0 release-notes: | * Latest release from Core - see full release notes at https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-23.0.md * Embassy changes - * Add support for Bloom Filters, as required for Bisq integration - * It is HIGHLY RECOMMENDED TO NOT USE THIS for anything except Bisq integration + * Add support for Bloom Filters (BIP37), as required for Bisq integration + * It is highly recommended AGAINST using Bloom Filters for anything except Bisq integration. license: mit wrapper-repo: https://github.com/Start9Labs/bitcoind-wrapper upstream-repo: https://github.com/bitcoin/bitcoin diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh index 3668172..9268b48 100644 --- a/migrations/lt_22_0_0.sh +++ b/migrations/lt_22_0_0.sh @@ -11,6 +11,8 @@ if [ $1 = "from" ]; then elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml + yq -i '.rpc.advanced.threads |= 4' /root/.bitcoin/start9/config.yaml + yq -i '.rpc.advanced.workqueue |= 32' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 else diff --git a/migrations/lt_23_0_0.sh b/migrations/lt_23_0_0.sh index 3668172..9268b48 100644 --- a/migrations/lt_23_0_0.sh +++ b/migrations/lt_23_0_0.sh @@ -11,6 +11,8 @@ if [ $1 = "from" ]; then elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml + yq -i '.rpc.advanced.threads |= 4' /root/.bitcoin/start9/config.yaml + yq -i '.rpc.advanced.workqueue |= 32' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' exit 0 else From e66ba37fa3eb6a8aaed9590b771558b3f9799638 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Mon, 13 Jun 2022 16:32:07 -0600 Subject: [PATCH 19/41] More migrations bugfixes --- migrations/lt_23_0_0.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/lt_23_0_0.sh b/migrations/lt_23_0_0.sh index 9268b48..d55c3c7 100644 --- a/migrations/lt_23_0_0.sh +++ b/migrations/lt_23_0_0.sh @@ -10,7 +10,7 @@ if [ $1 = "from" ]; then exit 0 elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml - yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml + yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml yq -i '.rpc.advanced.threads |= 4' /root/.bitcoin/start9/config.yaml yq -i '.rpc.advanced.workqueue |= 32' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' From 59c81c58dcce92810071b066bf56a6de50490d67 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Mon, 13 Jun 2022 17:30:17 -0600 Subject: [PATCH 20/41] More more migrations bugfixes --- manifest.yaml | 8 ++++---- migrations/{lt_23_0_0.sh => gt_22_0_0_lt_23_0_0.sh} | 0 migrations/lt_22_0_0.sh | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) rename migrations/{lt_23_0_0.sh => gt_22_0_0_lt_23_0_0.sh} (100%) diff --git a/manifest.yaml b/manifest.yaml index ecc2a80..1088fab 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -201,11 +201,11 @@ migrations: mounts: main: /root/.bitcoin inject: false - "<23.0.0": + ">22.0.0 <23.0.0": type: docker image: main system: false - entrypoint: /usr/local/bin/migrations/lt_23_0_0.sh + entrypoint: /usr/local/bin/migrations/gt_22_0_0_lt_23_0_0.sh args: ["from"] io-format: json mounts: @@ -232,11 +232,11 @@ migrations: mounts: main: /root/.bitcoin inject: false - "<23.0.0": + ">22.0.0 <23.0.0": type: docker image: main system: false - entrypoint: /usr/local/bin/migrations/lt_23_0_0.sh + entrypoint: /usr/local/bin/migrations/gt_22_0_0_lt_23_0_0.sh args: ["to"] io-format: json mounts: diff --git a/migrations/lt_23_0_0.sh b/migrations/gt_22_0_0_lt_23_0_0.sh similarity index 100% rename from migrations/lt_23_0_0.sh rename to migrations/gt_22_0_0_lt_23_0_0.sh diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh index 9268b48..85a9e8f 100644 --- a/migrations/lt_22_0_0.sh +++ b/migrations/lt_22_0_0.sh @@ -11,6 +11,7 @@ if [ $1 = "from" ]; then elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml + yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml yq -i '.rpc.advanced.threads |= 4' /root/.bitcoin/start9/config.yaml yq -i '.rpc.advanced.workqueue |= 32' /root/.bitcoin/start9/config.yaml echo '{"configured": true }' From 5a22f8aa58584b57abb0d61e98c861c62b65735c Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Tue, 14 Jun 2022 11:56:29 -0600 Subject: [PATCH 21/41] More more more migrations bugfixes --- migrations/eq_22_0_0.sh | 4 +--- migrations/gt_22_0_0_lt_23_0_0.sh | 4 +--- migrations/lt_22_0_0.sh | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/migrations/eq_22_0_0.sh b/migrations/eq_22_0_0.sh index 4d5d116..7e63920 100644 --- a/migrations/eq_22_0_0.sh +++ b/migrations/eq_22_0_0.sh @@ -9,9 +9,7 @@ if [ $1 = "from" ]; then exit 0 elif [ $1 = "to" ]; then yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml - yq -i '.rpc.advanced.threads |= 4' /root/.bitcoin/start9/config.yaml - yq -i '.rpc.advanced.workqueue |= 32' /root/.bitcoin/start9/config.yaml - echo '{"configured": true }' + echo '{"configured": false }' exit 0 else echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 diff --git a/migrations/gt_22_0_0_lt_23_0_0.sh b/migrations/gt_22_0_0_lt_23_0_0.sh index d55c3c7..bfa749d 100644 --- a/migrations/gt_22_0_0_lt_23_0_0.sh +++ b/migrations/gt_22_0_0_lt_23_0_0.sh @@ -11,9 +11,7 @@ if [ $1 = "from" ]; then elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml - yq -i '.rpc.advanced.threads |= 4' /root/.bitcoin/start9/config.yaml - yq -i '.rpc.advanced.workqueue |= 32' /root/.bitcoin/start9/config.yaml - echo '{"configured": true }' + echo '{"configured": false }' exit 0 else echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh index 85a9e8f..a415c29 100644 --- a/migrations/lt_22_0_0.sh +++ b/migrations/lt_22_0_0.sh @@ -12,9 +12,7 @@ elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml - yq -i '.rpc.advanced.threads |= 4' /root/.bitcoin/start9/config.yaml - yq -i '.rpc.advanced.workqueue |= 32' /root/.bitcoin/start9/config.yaml - echo '{"configured": true }' + echo '{"configured": false }' exit 0 else echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 From 58fc97a5b2b861e862854f6e79309074d4c00447 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Jun 2022 13:50:37 -0600 Subject: [PATCH 22/41] wip: Get and set of the config --- Makefile | 1 + manager/.gitignore | 1 + manifest.yaml | 24 +- scripts/deps.ts | 13 + scripts/embassy.js | 4849 ++++++++++++++++++++++++++++++ scripts/embassy.ts | 5 + scripts/models/lazy.ts | 25 + scripts/models/setConfig.ts | 53 + scripts/services/dependencies.ts | 161 + scripts/services/getAlias.ts | 23 + scripts/services/getConfig.ts | 373 +++ scripts/services/properties.ts | 149 + scripts/services/setConfig.ts | 21 + scripts/test.ts | 40 + 14 files changed, 5716 insertions(+), 22 deletions(-) create mode 100644 scripts/deps.ts create mode 100644 scripts/embassy.js create mode 100644 scripts/embassy.ts create mode 100644 scripts/models/lazy.ts create mode 100644 scripts/models/setConfig.ts create mode 100644 scripts/services/dependencies.ts create mode 100644 scripts/services/getAlias.ts create mode 100644 scripts/services/getConfig.ts create mode 100644 scripts/services/properties.ts create mode 100644 scripts/services/setConfig.ts create mode 100644 scripts/test.ts diff --git a/Makefile b/Makefile index e761013..8032d6a 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,7 @@ install: bitcoind.s9pk image.tar: Dockerfile docker_entrypoint.sh manager/target/aarch64-unknown-linux-musl/release/bitcoind-manager manifest.yaml check-rpc.sh check-synced.sh migrations/* actions/* DOCKER_CLI_EXPERIMENTAL=enabled docker buildx build --tag start9/bitcoind/main:$(VERSION_S9) --build-arg BITCOIN_VERSION=$(VERSION_CORE) --build-arg N_PROC=$(shell expr $(shell nproc) - 1) --platform=linux/arm64 -o type=docker,dest=image.tar . + deno bundle scripts/embassy.ts scripts/embassy.js manager/target/aarch64-unknown-linux-musl/release/bitcoind-manager: $(MANAGER_SRC) docker run --rm -it -v ~/.cargo/registry:/root/.cargo/registry -v "$(shell pwd)"/manager:/home/rust/src start9/rust-musl-cross:aarch64-musl cargo build --release diff --git a/manager/.gitignore b/manager/.gitignore index 53eaa21..4cd3977 100644 --- a/manager/.gitignore +++ b/manager/.gitignore @@ -1,2 +1,3 @@ /target **/*.rs.bk +scripts/embassy.ts \ No newline at end of file diff --git a/manifest.yaml b/manifest.yaml index 1088fab..b53e81c 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -55,29 +55,9 @@ health-checks: inject: true config: get: - type: docker - image: compat - system: true - entrypoint: compat - args: - - config - - get - - /root/.bitcoin - - "/mnt/assets/config_spec.yaml" - mounts: - compat: /mnt/assets - main: /root/.bitcoin - io-format: yaml + type: script set: - type: docker - image: compat - system: true - entrypoint: /mnt/assets/config-set.sh - args: [] - mounts: - compat: /mnt/assets - main: "/root/.bitcoin" - io-format: yaml + type: script properties: type: docker image: compat diff --git a/scripts/deps.ts b/scripts/deps.ts new file mode 100644 index 0000000..7ecbb3b --- /dev/null +++ b/scripts/deps.ts @@ -0,0 +1,13 @@ +import matches from "https://deno.land/x/ts_matches@5.1.5/mod.ts"; +export * as YAML from "https://deno.land/std@0.140.0/encoding/yaml.ts"; +export type { + ExpectedExports, + Config, + Effects, PackagePropertiesV2, + Properties, + KnownError, + SetResult, + ConfigRes, +} from "https://start9.com/procedure/types.0.3.1.d.ts"; + +export { matches }; diff --git a/scripts/embassy.js b/scripts/embassy.js new file mode 100644 index 0000000..dbc6e16 --- /dev/null +++ b/scripts/embassy.js @@ -0,0 +1,4849 @@ +// deno-fmt-ignore-file +// deno-lint-ignore-file +// This code was bundled using `deno bundle` and it's not recommended to edit it manually + +function saferStringify(x) { + try { + return JSON.stringify(x); + } catch (e) { + return "" + x; + } +} +class AnyParser { + constructor(description = { + name: "Any", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + return onParse.parsed(a); + } + description; +} +class ArrayParser { + constructor(description = { + name: "Array", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + if (Array.isArray(a)) return onParse.parsed(a); + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + description; +} +class BoolParser { + constructor(description = { + name: "Boolean", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + if (a === true || a === false) return onParse.parsed(a); + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + description; +} +const isObject = (x)=>typeof x === "object" && x != null +; +const isFunctionTest = (x)=>typeof x === "function" +; +const isNumber = (x)=>typeof x === "number" +; +const isString = (x)=>typeof x === "string" +; +const booleanOnParse = { + parsed (_) { + return true; + }, + invalid (_) { + return false; + } +}; +class FunctionParser { + constructor(description = { + name: "Function", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + if (isFunctionTest(a)) return onParse.parsed(a); + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + description; +} +class NilParser { + constructor(description = { + name: "Null", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + if (a === null || a === undefined) return onParse.parsed(a); + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + description; +} +class ObjectParser { + constructor(description = { + name: "Object", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + if (isObject(a)) return onParse.parsed(a); + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + description; +} +class StringParser { + constructor(description = { + name: "String", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + if (isString(a)) return onParse.parsed(a); + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + description; +} +class UnknownParser { + constructor(description = { + name: "Unknown", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + return onParse.parsed(a); + } + description; +} +class ConcatParsers { + constructor(parent, otherParser, description = { + name: "Concat", + children: [ + parent, + otherParser + ], + extras: [] + }){ + this.parent = parent; + this.otherParser = otherParser; + this.description = description; + } + static of(parent, otherParser) { + if (parent.unwrappedParser().description.name === "Any") { + return otherParser; + } + if (otherParser.unwrappedParser().description.name === "Any") { + return parent; + } + return new ConcatParsers(parent, otherParser); + } + parse(a, onParse) { + const parent = this.parent.enumParsed(a); + if ("error" in parent) { + return onParse.invalid(parent.error); + } + const other = this.otherParser.enumParsed(parent.value); + if ("error" in other) { + return onParse.invalid(other.error); + } + return onParse.parsed(other.value); + } + parent; + otherParser; + description; +} +class DefaultParser { + constructor(parent, defaultValue, description = { + name: "Default", + children: [ + parent + ], + extras: [ + defaultValue + ] + }){ + this.parent = parent; + this.defaultValue = defaultValue; + this.description = description; + } + parse(a, onParse) { + const parser = this; + const defaultValue = this.defaultValue; + if (a == null) { + return onParse.parsed(defaultValue); + } + const parentCheck = this.parent.enumParsed(a); + if ("error" in parentCheck) { + parentCheck.error.parser = parser; + return onParse.invalid(parentCheck.error); + } + return onParse.parsed(parentCheck.value); + } + parent; + defaultValue; + description; +} +class GuardParser { + constructor(checkIsA, typeName, description = { + name: "Guard", + children: [], + extras: [ + typeName + ] + }){ + this.checkIsA = checkIsA; + this.typeName = typeName; + this.description = description; + } + parse(a, onParse) { + if (this.checkIsA(a)) { + return onParse.parsed(a); + } + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + checkIsA; + typeName; + description; +} +class MappedAParser { + constructor(parent, map1, mappingName = map1.name, description = { + name: "Mapped", + children: [ + parent + ], + extras: [ + mappingName + ] + }){ + this.parent = parent; + this.map = map1; + this.mappingName = mappingName; + this.description = description; + } + parse(a, onParse) { + const map2 = this.map; + const result = this.parent.enumParsed(a); + if ("error" in result) { + return onParse.invalid(result.error); + } + return onParse.parsed(map2(result.value)); + } + parent; + map; + mappingName; + description; +} +class MaybeParser { + constructor(parent, description = { + name: "Maybe", + children: [ + parent + ], + extras: [] + }){ + this.parent = parent; + this.description = description; + } + parse(a, onParse) { + if (a == null) { + return onParse.parsed(null); + } + const parser = this; + const parentState = this.parent.enumParsed(a); + if ("error" in parentState) { + const { error } = parentState; + error.parser = parser; + return onParse.invalid(error); + } + return onParse.parsed(parentState.value); + } + parent; + description; +} +class OrParsers { + constructor(parent, otherParser, description = { + name: "Or", + children: [ + parent, + otherParser + ], + extras: [] + }){ + this.parent = parent; + this.otherParser = otherParser; + this.description = description; + } + parse(a, onParse) { + const parser = this; + const parent = this.parent.enumParsed(a); + if ("value" in parent) { + return onParse.parsed(parent.value); + } + const other = this.otherParser.enumParsed(a); + if ("error" in other) { + const { error } = other; + error.parser = parser; + return onParse.invalid(error); + } + return onParse.parsed(other.value); + } + parent; + otherParser; + description; +} +class NumberParser { + constructor(description = { + name: "Number", + children: [], + extras: [] + }){ + this.description = description; + } + parse(a, onParse) { + if (isNumber(a)) return onParse.parsed(a); + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + description; +} +function unwrapParser(a) { + if (a instanceof Parser) return unwrapParser(a.parser); + return a; +} +const enumParsed = { + parsed (value) { + return { + value + }; + }, + invalid (error) { + return { + error + }; + } +}; +class Parser { + _TYPE; + constructor(parser, description = { + name: "Wrapper", + children: [ + parser + ], + extras: [] + }){ + this.parser = parser; + this.description = description; + this._TYPE = null; + this.test = (value)=>{ + return this.parse(value, booleanOnParse); + }; + } + parse(a, onParse) { + return this.parser.parse(a, onParse); + } + static isA(checkIsA, name) { + return new Parser(new GuardParser(checkIsA, name)); + } + static validatorErrorAsString = (error)=>{ + const { parser , value , keys } = error; + const keysString = !keys.length ? "" : keys.map((x)=>`[${x}]` + ).reverse().join(""); + return `${keysString}${Parser.parserAsString(parser)}(${saferStringify(value)})`; + }; + static parserAsString(parserComingIn) { + const parser = unwrapParser(parserComingIn); + const { description: { name , extras , children } , } = parser; + if (parser instanceof ShapeParser) { + return `${name}<{${parser.description.children.map((subParser, i1)=>`${String(parser.description.extras[i1]) || "?"}:${Parser.parserAsString(subParser)}` + ).join(",")}}>`; + } + if (parser instanceof OrParsers) { + const parent = unwrapParser(parser.parent); + const parentString = Parser.parserAsString(parent); + if (parent instanceof OrParsers) return parentString; + return `${name}<${parentString},...>`; + } + if (parser instanceof GuardParser) { + return String(extras[0] || name); + } + if (parser instanceof StringParser || parser instanceof ObjectParser || parser instanceof NumberParser || parser instanceof BoolParser || parser instanceof AnyParser) { + return name.toLowerCase(); + } + if (parser instanceof FunctionParser) { + return name; + } + if (parser instanceof NilParser) { + return "null"; + } + if (parser instanceof ArrayParser) { + return "Array"; + } + const specifiers = [ + ...extras.map(saferStringify), + ...children.map(Parser.parserAsString), + ]; + const specifiersString = `<${specifiers.join(",")}>`; + !children.length ? "" : `<>`; + return `${name}${specifiersString}`; + } + unsafeCast(value) { + const state = this.enumParsed(value); + if ("value" in state) return state.value; + const { error } = state; + throw new TypeError(`Failed type: ${Parser.validatorErrorAsString(error)} given input ${saferStringify(value)}`); + } + castPromise(value) { + const state = this.enumParsed(value); + if ("value" in state) return Promise.resolve(state.value); + const { error } = state; + return Promise.reject(new TypeError(`Failed type: ${Parser.validatorErrorAsString(error)} given input ${saferStringify(value)}`)); + } + map(fn, mappingName) { + return new Parser(new MappedAParser(this, fn, mappingName)); + } + concat(otherParser) { + return new Parser(ConcatParsers.of(this, new Parser(otherParser))); + } + orParser(otherParser) { + return new Parser(new OrParsers(this, new Parser(otherParser))); + } + test; + optional(name) { + return new Parser(new MaybeParser(this)); + } + defaultTo(defaultValue) { + return new Parser(new DefaultParser(new Parser(new MaybeParser(this)), defaultValue)); + } + validate(isValid, otherName) { + return new Parser(ConcatParsers.of(this, new Parser(new GuardParser(isValid, otherName)))); + } + refine(refinementTest, otherName = refinementTest.name) { + return new Parser(ConcatParsers.of(this, new Parser(new GuardParser(refinementTest, otherName)))); + } + name(nameString) { + return parserName(nameString, this); + } + enumParsed(value) { + return this.parse(value, enumParsed); + } + unwrappedParser() { + let answer = this; + while(true){ + const next = answer.parser; + if (next instanceof Parser) { + answer = next; + } else { + return next; + } + } + } + parser; + description; +} +function guard(test, testName) { + return Parser.isA(test, testName || test.name); +} +const any = new Parser(new AnyParser()); +class ArrayOfParser { + constructor(parser, description = { + name: "ArrayOf", + children: [ + parser + ], + extras: [] + }){ + this.parser = parser; + this.description = description; + } + parse(a, onParse) { + if (!Array.isArray(a)) { + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + const values = [ + ...a + ]; + for(let index = 0; index < values.length; index++){ + const result = this.parser.enumParsed(values[index]); + if ("error" in result) { + result.error.keys.push("" + index); + return onParse.invalid(result.error); + } else { + values[index] = result.value; + } + } + return onParse.parsed(values); + } + parser; + description; +} +function arrayOf(validator) { + return new Parser(new ArrayOfParser(validator)); +} +const unknown = new Parser(new UnknownParser()); +const number = new Parser(new NumberParser()); +const isNill = new Parser(new NilParser()); +const natural = number.refine((x)=>x >= 0 && x === Math.floor(x) +); +const isFunction = new Parser(new FunctionParser()); +const __boolean = new Parser(new BoolParser()); +class DeferredParser { + parser; + static create() { + return new DeferredParser(); + } + constructor(description = { + name: "Deferred", + children: [], + extras: [] + }){ + this.description = description; + } + setParser(parser) { + this.parser = new Parser(parser); + return this; + } + parse(a, onParse) { + if (!this.parser) { + return onParse.invalid({ + value: "Not Set Up", + keys: [], + parser: this + }); + } + return this.parser.parse(a, onParse); + } + description; +} +function deferred() { + const deferred1 = DeferredParser.create(); + function setParser(parser) { + deferred1.setParser(parser); + } + return [ + new Parser(deferred1), + setParser + ]; +} +const object = new Parser(new ObjectParser()); +class DictionaryParser { + constructor(parsers, description = { + name: "Dictionary", + children: parsers.reduce((acc, [k, v])=>{ + acc.push(k, v); + return acc; + }, []), + extras: [] + }){ + this.parsers = parsers; + this.description = description; + } + parse(a, onParse) { + const { parsers } = this; + const parser = this; + const answer = { + ...a + }; + outer: for(const key in a){ + let parseError = []; + for (const [keyParser, valueParser] of parsers){ + const enumState = keyParser.enumParsed(key); + if ("error" in enumState) { + const { error } = enumState; + error.parser = parser; + error.keys.push("" + key); + parseError.push(error); + continue; + } + const newKey = enumState.value; + const valueState = valueParser.enumParsed(a[key]); + if ("error" in valueState) { + const { error } = valueState; + error.keys.push("" + newKey); + parseError.unshift(error); + continue; + } + delete answer[key]; + answer[newKey] = valueState.value; + break outer; + } + const error = parseError[0]; + if (!!error) { + return onParse.invalid(error); + } + } + return onParse.parsed(answer); + } + parsers; + description; +} +const dictionary = (...parsers)=>{ + return object.concat(new DictionaryParser([ + ...parsers + ])); +}; +function every(...parsers) { + const filteredParsers = parsers.filter((x)=>x !== any + ); + if (filteredParsers.length <= 0) { + return any; + } + const first = filteredParsers.splice(0, 1)[0]; + return filteredParsers.reduce((left, right)=>{ + return left.concat(right); + }, first); +} +const isArray = new Parser(new ArrayParser()); +const string = new Parser(new StringParser()); +const instanceOf = (classCreator)=>guard((x)=>x instanceof classCreator + , `is${classCreator.name}`) +; +class LiteralsParser { + constructor(values, description = { + name: "Literal", + children: [], + extras: values + }){ + this.values = values; + this.description = description; + } + parse(a, onParse) { + if (this.values.indexOf(a) >= 0) { + return onParse.parsed(a); + } + return onParse.invalid({ + value: a, + keys: [], + parser: this + }); + } + values; + description; +} +function literal(isEqualToValue) { + return new Parser(new LiteralsParser([ + isEqualToValue + ])); +} +function literals(firstValue, ...restValues) { + return new Parser(new LiteralsParser([ + firstValue, + ...restValues + ])); +} +class ShapeParser { + constructor(parserMap, isPartial1, parserKeys = Object.keys(parserMap), description = { + name: isPartial1 ? "Partial" : "Shape", + children: parserKeys.map((key)=>parserMap[key] + ), + extras: parserKeys + }){ + this.parserMap = parserMap; + this.isPartial = isPartial1; + this.parserKeys = parserKeys; + this.description = description; + } + parse(a, onParse) { + const parser = this; + if (!object.test(a)) { + return onParse.invalid({ + value: a, + keys: [], + parser + }); + } + const { parserMap , isPartial: isPartial2 } = this; + const value = { + ...a + }; + if (Array.isArray(a)) { + value.length = a.length; + } + for(const key in parserMap){ + if (key in value) { + const parser = parserMap[key]; + const state = parser.enumParsed(a[key]); + if ("error" in state) { + const { error } = state; + error.keys.push(saferStringify(key)); + return onParse.invalid(error); + } + const smallValue = state.value; + value[key] = smallValue; + } else if (!isPartial2) { + return onParse.invalid({ + value: "missingProperty", + parser, + keys: [ + saferStringify(key) + ] + }); + } + } + return onParse.parsed(value); + } + parserMap; + isPartial; + parserKeys; + description; +} +const isPartial = (testShape)=>{ + return new Parser(new ShapeParser(testShape, true)); +}; +const partial = isPartial; +class RecursiveParser { + parser; + static create(fn) { + const parser = new RecursiveParser(fn); + parser.parser = fn(new Parser(parser)); + return parser; + } + constructor(recursive1, description = { + name: "Recursive", + children: [], + extras: [ + recursive1 + ] + }){ + this.recursive = recursive1; + this.description = description; + } + parse(a, onParse) { + if (!this.parser) { + return onParse.invalid({ + value: "Recursive Invalid State", + keys: [], + parser: this + }); + } + return this.parser.parse(a, onParse); + } + recursive; + description; +} +function recursive(fn) { + fn(any); + const created = RecursiveParser.create(fn); + return new Parser(created); +} +const regex = (tester)=>string.refine(function(x) { + return tester.test(x); + }, tester.toString()) +; +const isShape = (testShape)=>{ + return new Parser(new ShapeParser(testShape, false)); +}; +function shape(testShape, optionals, optionalAndDefaults) { + if (optionals) { + const defaults = optionalAndDefaults || {}; + console.log("test"); + const entries = Object.entries(testShape); + const optionalSet = new Set(Array.from(optionals)); + return every(partial(Object.fromEntries(entries.filter(([key, _])=>optionalSet.has(key) + ).map(([key, parser])=>[ + key, + parser + ] + ))), isShape(Object.fromEntries(entries.filter(([key, _])=>!optionalSet.has(key) + )))).map((ret)=>{ + for (const key of optionalSet){ + const keyAny = key; + if (!(keyAny in ret) && keyAny in defaults) { + ret[keyAny] = defaults[keyAny]; + } + } + return ret; + }); + } + return isShape(testShape); +} +function some(...parsers) { + if (parsers.length <= 0) { + return any; + } + const first = parsers.splice(0, 1)[0]; + return parsers.reduce((left, right)=>left.orParser(right) + , first); +} +class TupleParser { + constructor(parsers, lengthMatcher = literal(parsers.length), description = { + name: "Tuple", + children: parsers, + extras: [] + }){ + this.parsers = parsers; + this.lengthMatcher = lengthMatcher; + this.description = description; + } + parse(input, onParse) { + const tupleError = isArray.enumParsed(input); + if ("error" in tupleError) return onParse.invalid(tupleError.error); + const values = input; + const stateCheck = this.lengthMatcher.enumParsed(values.length); + if ("error" in stateCheck) { + stateCheck.error.keys.push(saferStringify("length")); + return onParse.invalid(stateCheck.error); + } + const answer = new Array(this.parsers.length); + for(const key in this.parsers){ + const parser = this.parsers[key]; + const value = values[key]; + const result = parser.enumParsed(value); + if ("error" in result) { + const { error } = result; + error.keys.push(saferStringify(key)); + return onParse.invalid(error); + } + answer[key] = result.value; + } + return onParse.parsed(answer); + } + parsers; + lengthMatcher; + description; +} +function tuple(...parsers) { + return new Parser(new TupleParser(parsers)); +} +class NamedParser { + constructor(parent, name, description = { + name: "Named", + children: [ + parent + ], + extras: [ + name + ] + }){ + this.parent = parent; + this.name = name; + this.description = description; + } + parse(a, onParse) { + const parser = this; + const parent = this.parent.enumParsed(a); + if ("error" in parent) { + const { error } = parent; + error.parser = parser; + return onParse.invalid(error); + } + return onParse.parsed(parent.value); + } + parent; + name; + description; +} +function parserName(name, parent) { + return new Parser(new NamedParser(parent, name)); +} +class Matched { + constructor(value){ + this.value = value; + } + when(..._args) { + return this; + } + defaultTo(_defaultValue) { + return this.value; + } + defaultToLazy(_getValue) { + return this.value; + } + unwrap() { + return this.value; + } + value; +} +class MatchMore { + constructor(a){ + this.a = a; + } + when(...args) { + const [outcome, ...matchers] = args.reverse(); + const me = this; + const parser = matches.some(...matchers.map((matcher)=>matcher instanceof Parser ? matcher : literal(matcher) + )); + const result = parser.enumParsed(this.a); + if ("error" in result) { + return me; + } + const { value } = result; + if (outcome instanceof Function) { + return new Matched(outcome(value)); + } + return new Matched(outcome); + } + defaultTo(value) { + return value; + } + defaultToLazy(getValue) { + return getValue(); + } + unwrap() { + throw new Error("Expecting that value is matched"); + } + a; +} +const matches = Object.assign(function matchesFn(value) { + return new MatchMore(value); +}, { + array: isArray, + arrayOf, + some, + tuple, + regex, + number, + natural, + isFunction, + object, + string, + shape, + partial, + literal, + every, + guard, + unknown, + any, + boolean: __boolean, + dictionary, + literals, + nill: isNill, + instanceOf, + Parse: Parser, + parserName, + recursive, + deferred +}); +class YAMLError extends Error { + constructor(message = "(unknown reason)", mark = ""){ + super(`${message} ${mark}`); + this.mark = mark; + this.name = this.constructor.name; + } + toString(_compact) { + return `${this.name}: ${this.message} ${this.mark}`; + } + mark; +} +function isBoolean(value) { + return typeof value === "boolean" || value instanceof Boolean; +} +function isObject1(value) { + return value !== null && typeof value === "object"; +} +function repeat(str1, count) { + let result = ""; + for(let cycle = 0; cycle < count; cycle++){ + result += str1; + } + return result; +} +function isNegativeZero(i2) { + return i2 === 0 && Number.NEGATIVE_INFINITY === 1 / i2; +} +class Mark { + constructor(name, buffer, position, line, column){ + this.name = name; + this.buffer = buffer; + this.position = position; + this.line = line; + this.column = column; + } + getSnippet(indent = 4, maxLength = 75) { + if (!this.buffer) return null; + let head = ""; + let start = this.position; + while(start > 0 && "\x00\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(start - 1)) === -1){ + start -= 1; + if (this.position - start > maxLength / 2 - 1) { + head = " ... "; + start += 5; + break; + } + } + let tail = ""; + let end = this.position; + while(end < this.buffer.length && "\x00\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(end)) === -1){ + end += 1; + if (end - this.position > maxLength / 2 - 1) { + tail = " ... "; + end -= 5; + break; + } + } + const snippet = this.buffer.slice(start, end); + return `${repeat(" ", indent)}${head}${snippet}${tail}\n${repeat(" ", indent + this.position - start + head.length)}^`; + } + toString(compact) { + let snippet, where = ""; + if (this.name) { + where += `in "${this.name}" `; + } + where += `at line ${this.line + 1}, column ${this.column + 1}`; + if (!compact) { + snippet = this.getSnippet(); + if (snippet) { + where += `:\n${snippet}`; + } + } + return where; + } + name; + buffer; + position; + line; + column; +} +function compileList(schema, name, result) { + const exclude = []; + for (const includedSchema of schema.include){ + result = compileList(includedSchema, name, result); + } + for (const currentType of schema[name]){ + for(let previousIndex = 0; previousIndex < result.length; previousIndex++){ + const previousType = result[previousIndex]; + if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { + exclude.push(previousIndex); + } + } + result.push(currentType); + } + return result.filter((_type, index)=>!exclude.includes(index) + ); +} +function compileMap(...typesList) { + const result = { + fallback: {}, + mapping: {}, + scalar: {}, + sequence: {} + }; + for (const types of typesList){ + for (const type of types){ + if (type.kind !== null) { + result[type.kind][type.tag] = result["fallback"][type.tag] = type; + } + } + } + return result; +} +class Schema { + static SCHEMA_DEFAULT; + implicit; + explicit; + include; + compiledImplicit; + compiledExplicit; + compiledTypeMap; + constructor(definition){ + this.explicit = definition.explicit || []; + this.implicit = definition.implicit || []; + this.include = definition.include || []; + for (const type of this.implicit){ + if (type.loadKind && type.loadKind !== "scalar") { + throw new YAMLError("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported."); + } + } + this.compiledImplicit = compileList(this, "implicit", []); + this.compiledExplicit = compileList(this, "explicit", []); + this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); + } + extend(definition) { + return new Schema({ + implicit: [ + ...new Set([ + ...this.implicit, + ...definition?.implicit ?? [] + ]), + ], + explicit: [ + ...new Set([ + ...this.explicit, + ...definition?.explicit ?? [] + ]), + ], + include: [ + ...new Set([ + ...this.include, + ...definition?.include ?? [] + ]) + ] + }); + } + static create() {} +} +const DEFAULT_RESOLVE = ()=>true +; +const DEFAULT_CONSTRUCT = (data)=>data +; +function checkTagFormat(tag) { + return tag; +} +class Type { + tag; + kind = null; + instanceOf; + predicate; + represent; + defaultStyle; + styleAliases; + loadKind; + constructor(tag, options){ + this.tag = checkTagFormat(tag); + if (options) { + this.kind = options.kind; + this.resolve = options.resolve || DEFAULT_RESOLVE; + this.construct = options.construct || DEFAULT_CONSTRUCT; + this.instanceOf = options.instanceOf; + this.predicate = options.predicate; + this.represent = options.represent; + this.defaultStyle = options.defaultStyle; + this.styleAliases = options.styleAliases; + } + } + resolve = ()=>true + ; + construct = (data)=>data + ; +} +class DenoStdInternalError extends Error { + constructor(message){ + super(message); + this.name = "DenoStdInternalError"; + } +} +function assert(expr, msg = "") { + if (!expr) { + throw new DenoStdInternalError(msg); + } +} +function copy(src, dst, off = 0) { + off = Math.max(0, Math.min(off, dst.byteLength)); + const dstBytesAvailable = dst.byteLength - off; + if (src.byteLength > dstBytesAvailable) { + src = src.subarray(0, dstBytesAvailable); + } + dst.set(src, off); + return src.byteLength; +} +const MIN_READ = 32 * 1024; +const MAX_SIZE = 2 ** 32 - 2; +class Buffer { + #buf; + #off = 0; + constructor(ab){ + this.#buf = ab === undefined ? new Uint8Array(0) : new Uint8Array(ab); + } + bytes(options = { + copy: true + }) { + if (options.copy === false) return this.#buf.subarray(this.#off); + return this.#buf.slice(this.#off); + } + empty() { + return this.#buf.byteLength <= this.#off; + } + get length() { + return this.#buf.byteLength - this.#off; + } + get capacity() { + return this.#buf.buffer.byteLength; + } + truncate(n) { + if (n === 0) { + this.reset(); + return; + } + if (n < 0 || n > this.length) { + throw Error("bytes.Buffer: truncation out of range"); + } + this.#reslice(this.#off + n); + } + reset() { + this.#reslice(0); + this.#off = 0; + } + #tryGrowByReslice(n) { + const l = this.#buf.byteLength; + if (n <= this.capacity - l) { + this.#reslice(l + n); + return l; + } + return -1; + } + #reslice(len) { + assert(len <= this.#buf.buffer.byteLength); + this.#buf = new Uint8Array(this.#buf.buffer, 0, len); + } + readSync(p) { + if (this.empty()) { + this.reset(); + if (p.byteLength === 0) { + return 0; + } + return null; + } + const nread = copy(this.#buf.subarray(this.#off), p); + this.#off += nread; + return nread; + } + read(p) { + const rr = this.readSync(p); + return Promise.resolve(rr); + } + writeSync(p) { + const m = this.#grow(p.byteLength); + return copy(p, this.#buf, m); + } + write(p) { + const n1 = this.writeSync(p); + return Promise.resolve(n1); + } + #grow(n2) { + const m = this.length; + if (m === 0 && this.#off !== 0) { + this.reset(); + } + const i = this.#tryGrowByReslice(n2); + if (i >= 0) { + return i; + } + const c = this.capacity; + if (n2 <= Math.floor(c / 2) - m) { + copy(this.#buf.subarray(this.#off), this.#buf); + } else if (c + n2 > MAX_SIZE) { + throw new Error("The buffer cannot be grown beyond the maximum size."); + } else { + const buf = new Uint8Array(Math.min(2 * c + n2, MAX_SIZE)); + copy(this.#buf.subarray(this.#off), buf); + this.#buf = buf; + } + this.#off = 0; + this.#reslice(Math.min(m + n2, MAX_SIZE)); + return m; + } + grow(n3) { + if (n3 < 0) { + throw Error("Buffer.grow: negative count"); + } + const m = this.#grow(n3); + this.#reslice(m); + } + async readFrom(r) { + let n4 = 0; + const tmp = new Uint8Array(MIN_READ); + while(true){ + const shouldGrow = this.capacity - this.length < MIN_READ; + const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length); + const nread = await r.read(buf); + if (nread === null) { + return n4; + } + if (shouldGrow) this.writeSync(buf.subarray(0, nread)); + else this.#reslice(this.length + nread); + n4 += nread; + } + } + readFromSync(r) { + let n5 = 0; + const tmp = new Uint8Array(MIN_READ); + while(true){ + const shouldGrow = this.capacity - this.length < MIN_READ; + const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length); + const nread = r.readSync(buf); + if (nread === null) { + return n5; + } + if (shouldGrow) this.writeSync(buf.subarray(0, nread)); + else this.#reslice(this.length + nread); + n5 += nread; + } + } +} +const MIN_BUF_SIZE = 16; +const CR = "\r".charCodeAt(0); +const LF = "\n".charCodeAt(0); +class BufferFullError extends Error { + name; + constructor(partial1){ + super("Buffer full"); + this.partial = partial1; + this.name = "BufferFullError"; + } + partial; +} +class PartialReadError extends Error { + name = "PartialReadError"; + partial; + constructor(){ + super("Encountered UnexpectedEof, data only partially read"); + } +} +class BufReader { + #buf; + #rd; + #r = 0; + #w = 0; + #eof = false; + static create(r, size = 4096) { + return r instanceof BufReader ? r : new BufReader(r, size); + } + constructor(rd, size = 4096){ + if (size < 16) { + size = MIN_BUF_SIZE; + } + this.#reset(new Uint8Array(size), rd); + } + size() { + return this.#buf.byteLength; + } + buffered() { + return this.#w - this.#r; + } + #fill = async ()=>{ + if (this.#r > 0) { + this.#buf.copyWithin(0, this.#r, this.#w); + this.#w -= this.#r; + this.#r = 0; + } + if (this.#w >= this.#buf.byteLength) { + throw Error("bufio: tried to fill full buffer"); + } + for(let i3 = 100; i3 > 0; i3--){ + const rr = await this.#rd.read(this.#buf.subarray(this.#w)); + if (rr === null) { + this.#eof = true; + return; + } + assert(rr >= 0, "negative read"); + this.#w += rr; + if (rr > 0) { + return; + } + } + throw new Error(`No progress after ${100} read() calls`); + }; + reset(r) { + this.#reset(this.#buf, r); + } + #reset = (buf, rd)=>{ + this.#buf = buf; + this.#rd = rd; + this.#eof = false; + }; + async read(p) { + let rr = p.byteLength; + if (p.byteLength === 0) return rr; + if (this.#r === this.#w) { + if (p.byteLength >= this.#buf.byteLength) { + const rr = await this.#rd.read(p); + const nread = rr ?? 0; + assert(nread >= 0, "negative read"); + return rr; + } + this.#r = 0; + this.#w = 0; + rr = await this.#rd.read(this.#buf); + if (rr === 0 || rr === null) return rr; + assert(rr >= 0, "negative read"); + this.#w += rr; + } + const copied = copy(this.#buf.subarray(this.#r, this.#w), p, 0); + this.#r += copied; + return copied; + } + async readFull(p) { + let bytesRead = 0; + while(bytesRead < p.length){ + try { + const rr = await this.read(p.subarray(bytesRead)); + if (rr === null) { + if (bytesRead === 0) { + return null; + } else { + throw new PartialReadError(); + } + } + bytesRead += rr; + } catch (err) { + if (err instanceof PartialReadError) { + err.partial = p.subarray(0, bytesRead); + } else if (err instanceof Error) { + const e = new PartialReadError(); + e.partial = p.subarray(0, bytesRead); + e.stack = err.stack; + e.message = err.message; + e.cause = err.cause; + throw err; + } + throw err; + } + } + return p; + } + async readByte() { + while(this.#r === this.#w){ + if (this.#eof) return null; + await this.#fill(); + } + const c = this.#buf[this.#r]; + this.#r++; + return c; + } + async readString(delim) { + if (delim.length !== 1) { + throw new Error("Delimiter should be a single character"); + } + const buffer = await this.readSlice(delim.charCodeAt(0)); + if (buffer === null) return null; + return new TextDecoder().decode(buffer); + } + async readLine() { + let line = null; + try { + line = await this.readSlice(LF); + } catch (err) { + if (err instanceof Deno.errors.BadResource) { + throw err; + } + let partial2; + if (err instanceof PartialReadError) { + partial2 = err.partial; + assert(partial2 instanceof Uint8Array, "bufio: caught error from `readSlice()` without `partial` property"); + } + if (!(err instanceof BufferFullError)) { + throw err; + } + partial2 = err.partial; + if (!this.#eof && partial2 && partial2.byteLength > 0 && partial2[partial2.byteLength - 1] === CR) { + assert(this.#r > 0, "bufio: tried to rewind past start of buffer"); + this.#r--; + partial2 = partial2.subarray(0, partial2.byteLength - 1); + } + if (partial2) { + return { + line: partial2, + more: !this.#eof + }; + } + } + if (line === null) { + return null; + } + if (line.byteLength === 0) { + return { + line, + more: false + }; + } + if (line[line.byteLength - 1] == LF) { + let drop = 1; + if (line.byteLength > 1 && line[line.byteLength - 2] === CR) { + drop = 2; + } + line = line.subarray(0, line.byteLength - drop); + } + return { + line, + more: false + }; + } + async readSlice(delim) { + let s = 0; + let slice; + while(true){ + let i4 = this.#buf.subarray(this.#r + s, this.#w).indexOf(delim); + if (i4 >= 0) { + i4 += s; + slice = this.#buf.subarray(this.#r, this.#r + i4 + 1); + this.#r += i4 + 1; + break; + } + if (this.#eof) { + if (this.#r === this.#w) { + return null; + } + slice = this.#buf.subarray(this.#r, this.#w); + this.#r = this.#w; + break; + } + if (this.buffered() >= this.#buf.byteLength) { + this.#r = this.#w; + const oldbuf = this.#buf; + const newbuf = this.#buf.slice(0); + this.#buf = newbuf; + throw new BufferFullError(oldbuf); + } + s = this.#w - this.#r; + try { + await this.#fill(); + } catch (err) { + if (err instanceof PartialReadError) { + err.partial = slice; + } else if (err instanceof Error) { + const e = new PartialReadError(); + e.partial = slice; + e.stack = err.stack; + e.message = err.message; + e.cause = err.cause; + throw err; + } + throw err; + } + } + return slice; + } + async peek(n6) { + if (n6 < 0) { + throw Error("negative count"); + } + let avail = this.#w - this.#r; + while(avail < n6 && avail < this.#buf.byteLength && !this.#eof){ + try { + await this.#fill(); + } catch (err) { + if (err instanceof PartialReadError) { + err.partial = this.#buf.subarray(this.#r, this.#w); + } else if (err instanceof Error) { + const e = new PartialReadError(); + e.partial = this.#buf.subarray(this.#r, this.#w); + e.stack = err.stack; + e.message = err.message; + e.cause = err.cause; + throw err; + } + throw err; + } + avail = this.#w - this.#r; + } + if (avail === 0 && this.#eof) { + return null; + } else if (avail < n6 && this.#eof) { + return this.#buf.subarray(this.#r, this.#r + avail); + } else if (avail < n6) { + throw new BufferFullError(this.#buf.subarray(this.#r, this.#w)); + } + return this.#buf.subarray(this.#r, this.#r + n6); + } +} +class AbstractBufBase { + buf; + usedBufferBytes = 0; + err = null; + constructor(buf){ + this.buf = buf; + } + size() { + return this.buf.byteLength; + } + available() { + return this.buf.byteLength - this.usedBufferBytes; + } + buffered() { + return this.usedBufferBytes; + } +} +class BufWriter extends AbstractBufBase { + #writer; + static create(writer, size = 4096) { + return writer instanceof BufWriter ? writer : new BufWriter(writer, size); + } + constructor(writer, size = 4096){ + super(new Uint8Array(size <= 0 ? 4096 : size)); + this.#writer = writer; + } + reset(w) { + this.err = null; + this.usedBufferBytes = 0; + this.#writer = w; + } + async flush() { + if (this.err !== null) throw this.err; + if (this.usedBufferBytes === 0) return; + try { + const p = this.buf.subarray(0, this.usedBufferBytes); + let nwritten = 0; + while(nwritten < p.length){ + nwritten += await this.#writer.write(p.subarray(nwritten)); + } + } catch (e) { + if (e instanceof Error) { + this.err = e; + } + throw e; + } + this.buf = new Uint8Array(this.buf.length); + this.usedBufferBytes = 0; + } + async write(data) { + if (this.err !== null) throw this.err; + if (data.length === 0) return 0; + let totalBytesWritten = 0; + let numBytesWritten = 0; + while(data.byteLength > this.available()){ + if (this.buffered() === 0) { + try { + numBytesWritten = await this.#writer.write(data); + } catch (e) { + if (e instanceof Error) { + this.err = e; + } + throw e; + } + } else { + numBytesWritten = copy(data, this.buf, this.usedBufferBytes); + this.usedBufferBytes += numBytesWritten; + await this.flush(); + } + totalBytesWritten += numBytesWritten; + data = data.subarray(numBytesWritten); + } + numBytesWritten = copy(data, this.buf, this.usedBufferBytes); + this.usedBufferBytes += numBytesWritten; + totalBytesWritten += numBytesWritten; + return totalBytesWritten; + } +} +class BufWriterSync extends AbstractBufBase { + #writer; + static create(writer, size = 4096) { + return writer instanceof BufWriterSync ? writer : new BufWriterSync(writer, size); + } + constructor(writer, size = 4096){ + super(new Uint8Array(size <= 0 ? 4096 : size)); + this.#writer = writer; + } + reset(w) { + this.err = null; + this.usedBufferBytes = 0; + this.#writer = w; + } + flush() { + if (this.err !== null) throw this.err; + if (this.usedBufferBytes === 0) return; + try { + const p = this.buf.subarray(0, this.usedBufferBytes); + let nwritten = 0; + while(nwritten < p.length){ + nwritten += this.#writer.writeSync(p.subarray(nwritten)); + } + } catch (e) { + if (e instanceof Error) { + this.err = e; + } + throw e; + } + this.buf = new Uint8Array(this.buf.length); + this.usedBufferBytes = 0; + } + writeSync(data) { + if (this.err !== null) throw this.err; + if (data.length === 0) return 0; + let totalBytesWritten = 0; + let numBytesWritten = 0; + while(data.byteLength > this.available()){ + if (this.buffered() === 0) { + try { + numBytesWritten = this.#writer.writeSync(data); + } catch (e) { + if (e instanceof Error) { + this.err = e; + } + throw e; + } + } else { + numBytesWritten = copy(data, this.buf, this.usedBufferBytes); + this.usedBufferBytes += numBytesWritten; + this.flush(); + } + totalBytesWritten += numBytesWritten; + data = data.subarray(numBytesWritten); + } + numBytesWritten = copy(data, this.buf, this.usedBufferBytes); + this.usedBufferBytes += numBytesWritten; + totalBytesWritten += numBytesWritten; + return totalBytesWritten; + } +} +const BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r"; +function resolveYamlBinary(data) { + if (data === null) return false; + let code; + let bitlen = 0; + const max = data.length; + const map3 = BASE64_MAP; + for(let idx = 0; idx < max; idx++){ + code = map3.indexOf(data.charAt(idx)); + if (code > 64) continue; + if (code < 0) return false; + bitlen += 6; + } + return bitlen % 8 === 0; +} +function constructYamlBinary(data) { + const input = data.replace(/[\r\n=]/g, ""); + const max = input.length; + const map4 = BASE64_MAP; + const result = []; + let bits = 0; + for(let idx = 0; idx < max; idx++){ + if (idx % 4 === 0 && idx) { + result.push(bits >> 16 & 0xff); + result.push(bits >> 8 & 0xff); + result.push(bits & 0xff); + } + bits = bits << 6 | map4.indexOf(input.charAt(idx)); + } + const tailbits = max % 4 * 6; + if (tailbits === 0) { + result.push(bits >> 16 & 0xff); + result.push(bits >> 8 & 0xff); + result.push(bits & 0xff); + } else if (tailbits === 18) { + result.push(bits >> 10 & 0xff); + result.push(bits >> 2 & 0xff); + } else if (tailbits === 12) { + result.push(bits >> 4 & 0xff); + } + return new Buffer(new Uint8Array(result)); +} +function representYamlBinary(object1) { + const max = object1.length; + const map5 = BASE64_MAP; + let result = ""; + let bits = 0; + for(let idx = 0; idx < max; idx++){ + if (idx % 3 === 0 && idx) { + result += map5[bits >> 18 & 0x3f]; + result += map5[bits >> 12 & 0x3f]; + result += map5[bits >> 6 & 0x3f]; + result += map5[bits & 0x3f]; + } + bits = (bits << 8) + object1[idx]; + } + const tail = max % 3; + if (tail === 0) { + result += map5[bits >> 18 & 0x3f]; + result += map5[bits >> 12 & 0x3f]; + result += map5[bits >> 6 & 0x3f]; + result += map5[bits & 0x3f]; + } else if (tail === 2) { + result += map5[bits >> 10 & 0x3f]; + result += map5[bits >> 4 & 0x3f]; + result += map5[bits << 2 & 0x3f]; + result += map5[64]; + } else if (tail === 1) { + result += map5[bits >> 2 & 0x3f]; + result += map5[bits << 4 & 0x3f]; + result += map5[64]; + result += map5[64]; + } + return result; +} +function isBinary(obj) { + const buf = new Buffer(); + try { + if (0 > buf.readFromSync(obj)) return true; + return false; + } catch { + return false; + } finally{ + buf.reset(); + } +} +const binary = new Type("tag:yaml.org,2002:binary", { + construct: constructYamlBinary, + kind: "scalar", + predicate: isBinary, + represent: representYamlBinary, + resolve: resolveYamlBinary +}); +function resolveYamlBoolean(data) { + const max = data.length; + return max === 4 && (data === "true" || data === "True" || data === "TRUE") || max === 5 && (data === "false" || data === "False" || data === "FALSE"); +} +function constructYamlBoolean(data) { + return data === "true" || data === "True" || data === "TRUE"; +} +const bool = new Type("tag:yaml.org,2002:bool", { + construct: constructYamlBoolean, + defaultStyle: "lowercase", + kind: "scalar", + predicate: isBoolean, + represent: { + lowercase (object2) { + return object2 ? "true" : "false"; + }, + uppercase (object3) { + return object3 ? "TRUE" : "FALSE"; + }, + camelcase (object4) { + return object4 ? "True" : "False"; + } + }, + resolve: resolveYamlBoolean +}); +const YAML_FLOAT_PATTERN = new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?" + "|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?" + "|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*" + "|[-+]?\\.(?:inf|Inf|INF)" + "|\\.(?:nan|NaN|NAN))$"); +function resolveYamlFloat(data) { + if (!YAML_FLOAT_PATTERN.test(data) || data[data.length - 1] === "_") { + return false; + } + return true; +} +function constructYamlFloat(data) { + let value = data.replace(/_/g, "").toLowerCase(); + const sign = value[0] === "-" ? -1 : 1; + const digits = []; + if ("+-".indexOf(value[0]) >= 0) { + value = value.slice(1); + } + if (value === ".inf") { + return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + } + if (value === ".nan") { + return NaN; + } + if (value.indexOf(":") >= 0) { + value.split(":").forEach((v)=>{ + digits.unshift(parseFloat(v)); + }); + let valueNb = 0.0; + let base = 1; + digits.forEach((d)=>{ + valueNb += d * base; + base *= 60; + }); + return sign * valueNb; + } + return sign * parseFloat(value); +} +const SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; +function representYamlFloat(object5, style) { + if (isNaN(object5)) { + switch(style){ + case "lowercase": + return ".nan"; + case "uppercase": + return ".NAN"; + case "camelcase": + return ".NaN"; + } + } else if (Number.POSITIVE_INFINITY === object5) { + switch(style){ + case "lowercase": + return ".inf"; + case "uppercase": + return ".INF"; + case "camelcase": + return ".Inf"; + } + } else if (Number.NEGATIVE_INFINITY === object5) { + switch(style){ + case "lowercase": + return "-.inf"; + case "uppercase": + return "-.INF"; + case "camelcase": + return "-.Inf"; + } + } else if (isNegativeZero(object5)) { + return "-0.0"; + } + const res = object5.toString(10); + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res; +} +function isFloat(object6) { + return Object.prototype.toString.call(object6) === "[object Number]" && (object6 % 1 !== 0 || isNegativeZero(object6)); +} +const __float = new Type("tag:yaml.org,2002:float", { + construct: constructYamlFloat, + defaultStyle: "lowercase", + kind: "scalar", + predicate: isFloat, + represent: representYamlFloat, + resolve: resolveYamlFloat +}); +function reconstructFunction(code) { + const func1 = new Function(`return ${code}`)(); + if (!(func1 instanceof Function)) { + throw new TypeError(`Expected function but got ${typeof func1}: ${code}`); + } + return func1; +} +new Type("tag:yaml.org,2002:js/function", { + kind: "scalar", + resolve (data) { + if (data === null) { + return false; + } + try { + reconstructFunction(`${data}`); + return true; + } catch (_err) { + return false; + } + }, + construct (data) { + return reconstructFunction(data); + }, + predicate (object7) { + return object7 instanceof Function; + }, + represent (object8) { + return object8.toString(); + } +}); +function isHexCode(c) { + return 0x30 <= c && c <= 0x39 || 0x41 <= c && c <= 0x46 || 0x61 <= c && c <= 0x66; +} +function isOctCode(c) { + return 0x30 <= c && c <= 0x37; +} +function isDecCode(c) { + return 0x30 <= c && c <= 0x39; +} +function resolveYamlInteger(data) { + const max = data.length; + let index = 0; + let hasDigits = false; + if (!max) return false; + let ch = data[index]; + if (ch === "-" || ch === "+") { + ch = data[++index]; + } + if (ch === "0") { + if (index + 1 === max) return true; + ch = data[++index]; + if (ch === "b") { + index++; + for(; index < max; index++){ + ch = data[index]; + if (ch === "_") continue; + if (ch !== "0" && ch !== "1") return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + if (ch === "x") { + index++; + for(; index < max; index++){ + ch = data[index]; + if (ch === "_") continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + for(; index < max; index++){ + ch = data[index]; + if (ch === "_") continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== "_"; + } + if (ch === "_") return false; + for(; index < max; index++){ + ch = data[index]; + if (ch === "_") continue; + if (ch === ":") break; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + if (!hasDigits || ch === "_") return false; + if (ch !== ":") return true; + return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} +function constructYamlInteger(data) { + let value = data; + const digits = []; + if (value.indexOf("_") !== -1) { + value = value.replace(/_/g, ""); + } + let sign = 1; + let ch = value[0]; + if (ch === "-" || ch === "+") { + if (ch === "-") sign = -1; + value = value.slice(1); + ch = value[0]; + } + if (value === "0") return 0; + if (ch === "0") { + if (value[1] === "b") return sign * parseInt(value.slice(2), 2); + if (value[1] === "x") return sign * parseInt(value, 16); + return sign * parseInt(value, 8); + } + if (value.indexOf(":") !== -1) { + value.split(":").forEach((v)=>{ + digits.unshift(parseInt(v, 10)); + }); + let valueInt = 0; + let base = 1; + digits.forEach((d)=>{ + valueInt += d * base; + base *= 60; + }); + return sign * valueInt; + } + return sign * parseInt(value, 10); +} +function isInteger(object9) { + return Object.prototype.toString.call(object9) === "[object Number]" && object9 % 1 === 0 && !isNegativeZero(object9); +} +const __int = new Type("tag:yaml.org,2002:int", { + construct: constructYamlInteger, + defaultStyle: "decimal", + kind: "scalar", + predicate: isInteger, + represent: { + binary (obj) { + return obj >= 0 ? `0b${obj.toString(2)}` : `-0b${obj.toString(2).slice(1)}`; + }, + octal (obj) { + return obj >= 0 ? `0${obj.toString(8)}` : `-0${obj.toString(8).slice(1)}`; + }, + decimal (obj) { + return obj.toString(10); + }, + hexadecimal (obj) { + return obj >= 0 ? `0x${obj.toString(16).toUpperCase()}` : `-0x${obj.toString(16).toUpperCase().slice(1)}`; + } + }, + resolve: resolveYamlInteger, + styleAliases: { + binary: [ + 2, + "bin" + ], + decimal: [ + 10, + "dec" + ], + hexadecimal: [ + 16, + "hex" + ], + octal: [ + 8, + "oct" + ] + } +}); +const map = new Type("tag:yaml.org,2002:map", { + construct (data) { + return data !== null ? data : {}; + }, + kind: "mapping" +}); +function resolveYamlMerge(data) { + return data === "<<" || data === null; +} +const merge = new Type("tag:yaml.org,2002:merge", { + kind: "scalar", + resolve: resolveYamlMerge +}); +function resolveYamlNull(data) { + const max = data.length; + return max === 1 && data === "~" || max === 4 && (data === "null" || data === "Null" || data === "NULL"); +} +function constructYamlNull() { + return null; +} +function isNull(object10) { + return object10 === null; +} +const nil = new Type("tag:yaml.org,2002:null", { + construct: constructYamlNull, + defaultStyle: "lowercase", + kind: "scalar", + predicate: isNull, + represent: { + canonical () { + return "~"; + }, + lowercase () { + return "null"; + }, + uppercase () { + return "NULL"; + }, + camelcase () { + return "Null"; + } + }, + resolve: resolveYamlNull +}); +const { hasOwn } = Object; +const _toString = Object.prototype.toString; +function resolveYamlOmap(data) { + const objectKeys = []; + let pairKey = ""; + let pairHasKey = false; + for (const pair of data){ + pairHasKey = false; + if (_toString.call(pair) !== "[object Object]") return false; + for(pairKey in pair){ + if (hasOwn(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + if (!pairHasKey) return false; + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + return true; +} +function constructYamlOmap(data) { + return data !== null ? data : []; +} +const omap = new Type("tag:yaml.org,2002:omap", { + construct: constructYamlOmap, + kind: "sequence", + resolve: resolveYamlOmap +}); +const _toString1 = Object.prototype.toString; +function resolveYamlPairs(data) { + const result = Array.from({ + length: data.length + }); + for(let index = 0; index < data.length; index++){ + const pair = data[index]; + if (_toString1.call(pair) !== "[object Object]") return false; + const keys = Object.keys(pair); + if (keys.length !== 1) return false; + result[index] = [ + keys[0], + pair[keys[0]] + ]; + } + return true; +} +function constructYamlPairs(data) { + if (data === null) return []; + const result = Array.from({ + length: data.length + }); + for(let index = 0; index < data.length; index += 1){ + const pair = data[index]; + const keys = Object.keys(pair); + result[index] = [ + keys[0], + pair[keys[0]] + ]; + } + return result; +} +const pairs = new Type("tag:yaml.org,2002:pairs", { + construct: constructYamlPairs, + kind: "sequence", + resolve: resolveYamlPairs +}); +const REGEXP = /^\/(?[\s\S]+)\/(?[gismuy]*)$/; +const regexp = new Type("tag:yaml.org,2002:js/regexp", { + kind: "scalar", + resolve (data) { + if (data === null || !data.length) { + return false; + } + const regexp1 = `${data}`; + if (regexp1.charAt(0) === "/") { + if (!REGEXP.test(data)) { + return false; + } + const modifiers = [ + ...regexp1.match(REGEXP)?.groups?.modifiers ?? "" + ]; + if (new Set(modifiers).size < modifiers.length) { + return false; + } + } + return true; + }, + construct (data) { + const { regexp: regexp2 = `${data}` , modifiers ="" } = `${data}`.match(REGEXP)?.groups ?? {}; + return new RegExp(regexp2, modifiers); + }, + predicate (object11) { + return object11 instanceof RegExp; + }, + represent (object12) { + return object12.toString(); + } +}); +const seq = new Type("tag:yaml.org,2002:seq", { + construct (data) { + return data !== null ? data : []; + }, + kind: "sequence" +}); +const { hasOwn: hasOwn1 } = Object; +function resolveYamlSet(data) { + if (data === null) return true; + for(const key in data){ + if (hasOwn1(data, key)) { + if (data[key] !== null) return false; + } + } + return true; +} +function constructYamlSet(data) { + return data !== null ? data : {}; +} +const set = new Type("tag:yaml.org,2002:set", { + construct: constructYamlSet, + kind: "mapping", + resolve: resolveYamlSet +}); +const str = new Type("tag:yaml.org,2002:str", { + construct (data) { + return data !== null ? data : ""; + }, + kind: "scalar" +}); +const YAML_DATE_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])" + "-([0-9][0-9])" + "-([0-9][0-9])$"); +const YAML_TIMESTAMP_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])" + "-([0-9][0-9]?)" + "-([0-9][0-9]?)" + "(?:[Tt]|[ \\t]+)" + "([0-9][0-9]?)" + ":([0-9][0-9])" + ":([0-9][0-9])" + "(?:\\.([0-9]*))?" + "(?:[ \\t]*(Z|([-+])([0-9][0-9]?)" + "(?::([0-9][0-9]))?))?$"); +function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; +} +function constructYamlTimestamp(data) { + let match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + if (match === null) throw new Error("Date resolve error"); + const year = +match[1]; + const month = +match[2] - 1; + const day = +match[3]; + if (!match[4]) { + return new Date(Date.UTC(year, month, day)); + } + const hour = +match[4]; + const minute = +match[5]; + const second = +match[6]; + let fraction = 0; + if (match[7]) { + let partFraction = match[7].slice(0, 3); + while(partFraction.length < 3){ + partFraction += "0"; + } + fraction = +partFraction; + } + let delta = null; + if (match[9]) { + const tzHour = +match[10]; + const tzMinute = +(match[11] || 0); + delta = (tzHour * 60 + tzMinute) * 60000; + if (match[9] === "-") delta = -delta; + } + const date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + if (delta) date.setTime(date.getTime() - delta); + return date; +} +function representYamlTimestamp(date) { + return date.toISOString(); +} +const timestamp = new Type("tag:yaml.org,2002:timestamp", { + construct: constructYamlTimestamp, + instanceOf: Date, + kind: "scalar", + represent: representYamlTimestamp, + resolve: resolveYamlTimestamp +}); +const undefinedType = new Type("tag:yaml.org,2002:js/undefined", { + kind: "scalar", + resolve () { + return true; + }, + construct () { + return undefined; + }, + predicate (object13) { + return typeof object13 === "undefined"; + }, + represent () { + return ""; + } +}); +const failsafe = new Schema({ + explicit: [ + str, + seq, + map + ] +}); +const json = new Schema({ + implicit: [ + nil, + bool, + __int, + __float + ], + include: [ + failsafe + ] +}); +const core = new Schema({ + include: [ + json + ] +}); +const def = new Schema({ + explicit: [ + binary, + omap, + pairs, + set + ], + implicit: [ + timestamp, + merge + ], + include: [ + core + ] +}); +const extended = new Schema({ + explicit: [ + regexp, + undefinedType + ], + include: [ + def + ] +}); +class State { + constructor(schema = def){ + this.schema = schema; + } + schema; +} +class LoaderState extends State { + documents; + length; + lineIndent; + lineStart; + position; + line; + filename; + onWarning; + legacy; + json; + listener; + implicitTypes; + typeMap; + version; + checkLineBreaks; + tagMap; + anchorMap; + tag; + anchor; + kind; + result; + constructor(input, { filename , schema , onWarning , legacy =false , json: json1 = false , listener =null }){ + super(schema); + this.input = input; + this.documents = []; + this.lineIndent = 0; + this.lineStart = 0; + this.position = 0; + this.line = 0; + this.result = ""; + this.filename = filename; + this.onWarning = onWarning; + this.legacy = legacy; + this.json = json1; + this.listener = listener; + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + this.length = input.length; + } + input; +} +const { hasOwn: hasOwn2 } = Object; +const CONTEXT_BLOCK_IN = 3; +const CONTEXT_BLOCK_OUT = 4; +const CHOMPING_STRIP = 2; +const CHOMPING_KEEP = 3; +const PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +const PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +const PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +const PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +const PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; +function _class(obj) { + return Object.prototype.toString.call(obj); +} +function isEOL(c) { + return c === 0x0a || c === 0x0d; +} +function isWhiteSpace(c) { + return c === 0x09 || c === 0x20; +} +function isWsOrEol(c) { + return c === 0x09 || c === 0x20 || c === 0x0a || c === 0x0d; +} +function isFlowIndicator(c) { + return c === 0x2c || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d; +} +function fromHexCode(c) { + if (0x30 <= c && c <= 0x39) { + return c - 0x30; + } + const lc = c | 0x20; + if (0x61 <= lc && lc <= 0x66) { + return lc - 0x61 + 10; + } + return -1; +} +function escapedHexLen(c) { + if (c === 0x78) { + return 2; + } + if (c === 0x75) { + return 4; + } + if (c === 0x55) { + return 8; + } + return 0; +} +function fromDecimalCode(c) { + if (0x30 <= c && c <= 0x39) { + return c - 0x30; + } + return -1; +} +function simpleEscapeSequence(c) { + return c === 0x30 ? "\x00" : c === 0x61 ? "\x07" : c === 0x62 ? "\x08" : c === 0x74 ? "\x09" : c === 0x09 ? "\x09" : c === 0x6e ? "\x0A" : c === 0x76 ? "\x0B" : c === 0x66 ? "\x0C" : c === 0x72 ? "\x0D" : c === 0x65 ? "\x1B" : c === 0x20 ? " " : c === 0x22 ? "\x22" : c === 0x2f ? "/" : c === 0x5c ? "\x5C" : c === 0x4e ? "\x85" : c === 0x5f ? "\xA0" : c === 0x4c ? "\u2028" : c === 0x50 ? "\u2029" : ""; +} +function charFromCodepoint(c) { + if (c <= 0xffff) { + return String.fromCharCode(c); + } + return String.fromCharCode((c - 0x010000 >> 10) + 0xd800, (c - 0x010000 & 0x03ff) + 0xdc00); +} +const simpleEscapeCheck = Array.from({ + length: 256 +}); +const simpleEscapeMap = Array.from({ + length: 256 +}); +for(let i = 0; i < 256; i++){ + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} +function generateError(state, message) { + return new YAMLError(message, new Mark(state.filename, state.input, state.position, state.line, state.position - state.lineStart)); +} +function throwError(state, message) { + throw generateError(state, message); +} +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } +} +const directiveHandlers = { + YAML (state, _name, ...args) { + if (state.version !== null) { + return throwError(state, "duplication of %YAML directive"); + } + if (args.length !== 1) { + return throwError(state, "YAML directive accepts exactly one argument"); + } + const match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + if (match === null) { + return throwError(state, "ill-formed argument of the YAML directive"); + } + const major = parseInt(match[1], 10); + const minor = parseInt(match[2], 10); + if (major !== 1) { + return throwError(state, "unacceptable YAML version of the document"); + } + state.version = args[0]; + state.checkLineBreaks = minor < 2; + if (minor !== 1 && minor !== 2) { + return throwWarning(state, "unsupported YAML version of the document"); + } + }, + TAG (state, _name, ...args) { + if (args.length !== 2) { + return throwError(state, "TAG directive accepts exactly two arguments"); + } + const handle = args[0]; + const prefix = args[1]; + if (!PATTERN_TAG_HANDLE.test(handle)) { + return throwError(state, "ill-formed tag handle (first argument) of the TAG directive"); + } + if (state.tagMap && hasOwn2(state.tagMap, handle)) { + return throwError(state, `there is a previously declared suffix for "${handle}" tag handle`); + } + if (!PATTERN_TAG_URI.test(prefix)) { + return throwError(state, "ill-formed tag prefix (second argument) of the TAG directive"); + } + if (typeof state.tagMap === "undefined") { + state.tagMap = {}; + } + state.tagMap[handle] = prefix; + } +}; +function captureSegment(state, start, end, checkJson) { + let result; + if (start < end) { + result = state.input.slice(start, end); + if (checkJson) { + for(let position = 0, length = result.length; position < length; position++){ + const character = result.charCodeAt(position); + if (!(character === 0x09 || 0x20 <= character && character <= 0x10ffff)) { + return throwError(state, "expected valid JSON character"); + } + } + } else if (PATTERN_NON_PRINTABLE.test(result)) { + return throwError(state, "the stream contains non-printable characters"); + } + state.result += result; + } +} +function mergeMappings(state, destination, source, overridableKeys) { + if (!isObject1(source)) { + return throwError(state, "cannot merge mappings; the provided source object is unacceptable"); + } + const keys = Object.keys(source); + for(let i1 = 0, len1 = keys.length; i1 < len1; i1++){ + const key = keys[i1]; + if (!hasOwn2(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} +function storeMappingPair(state, result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + for(let index = 0, quantity = keyNode.length; index < quantity; index++){ + if (Array.isArray(keyNode[index])) { + return throwError(state, "nested arrays are not supported inside keys"); + } + if (typeof keyNode === "object" && _class(keyNode[index]) === "[object Object]") { + keyNode[index] = "[object Object]"; + } + } + } + if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") { + keyNode = "[object Object]"; + } + keyNode = String(keyNode); + if (result === null) { + result = {}; + } + if (keyTag === "tag:yaml.org,2002:merge") { + if (Array.isArray(valueNode)) { + for(let index = 0, quantity = valueNode.length; index < quantity; index++){ + mergeMappings(state, result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, result, valueNode, overridableKeys); + } + } else { + if (!state.json && !hasOwn2(overridableKeys, keyNode) && hasOwn2(result, keyNode)) { + state.line = startLine || state.line; + state.position = startPos || state.position; + return throwError(state, "duplicated mapping key"); + } + result[keyNode] = valueNode; + delete overridableKeys[keyNode]; + } + return result; +} +function readLineBreak(state) { + const ch = state.input.charCodeAt(state.position); + if (ch === 0x0a) { + state.position++; + } else if (ch === 0x0d) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0a) { + state.position++; + } + } else { + return throwError(state, "a line break is expected"); + } + state.line += 1; + state.lineStart = state.position; +} +function skipSeparationSpace(state, allowComments, checkIndent) { + let lineBreaks = 0, ch = state.input.charCodeAt(state.position); + while(ch !== 0){ + while(isWhiteSpace(ch)){ + ch = state.input.charCodeAt(++state.position); + } + if (allowComments && ch === 0x23) { + do { + ch = state.input.charCodeAt(++state.position); + }while (ch !== 0x0a && ch !== 0x0d && ch !== 0) + } + if (isEOL(ch)) { + readLineBreak(state); + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + while(ch === 0x20){ + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, "deficient indentation"); + } + return lineBreaks; +} +function testDocumentSeparator(state) { + let _position = state.position; + let ch = state.input.charCodeAt(_position); + if ((ch === 0x2d || ch === 0x2e) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) { + _position += 3; + ch = state.input.charCodeAt(_position); + if (ch === 0 || isWsOrEol(ch)) { + return true; + } + } + return false; +} +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += " "; + } else if (count > 1) { + state.result += repeat("\n", count - 1); + } +} +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + const kind = state.kind; + const result = state.result; + let ch = state.input.charCodeAt(state.position); + if (isWsOrEol(ch) || isFlowIndicator(ch) || ch === 0x23 || ch === 0x26 || ch === 0x2a || ch === 0x21 || ch === 0x7c || ch === 0x3e || ch === 0x27 || ch === 0x22 || ch === 0x25 || ch === 0x40 || ch === 0x60) { + return false; + } + let following; + if (ch === 0x3f || ch === 0x2d) { + following = state.input.charCodeAt(state.position + 1); + if (isWsOrEol(following) || withinFlowCollection && isFlowIndicator(following)) { + return false; + } + } + state.kind = "scalar"; + state.result = ""; + let captureEnd, captureStart = captureEnd = state.position; + let hasPendingContent = false; + let line = 0; + while(ch !== 0){ + if (ch === 0x3a) { + following = state.input.charCodeAt(state.position + 1); + if (isWsOrEol(following) || withinFlowCollection && isFlowIndicator(following)) { + break; + } + } else if (ch === 0x23) { + const preceding = state.input.charCodeAt(state.position - 1); + if (isWsOrEol(preceding)) { + break; + } + } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && isFlowIndicator(ch)) { + break; + } else if (isEOL(ch)) { + line = state.line; + const lineStart = state.lineStart; + const lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = line; + state.lineStart = lineStart; + state.lineIndent = lineIndent; + break; + } + } + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + if (!isWhiteSpace(ch)) { + captureEnd = state.position + 1; + } + ch = state.input.charCodeAt(++state.position); + } + captureSegment(state, captureStart, captureEnd, false); + if (state.result) { + return true; + } + state.kind = kind; + state.result = result; + return false; +} +function readSingleQuotedScalar(state, nodeIndent) { + let ch, captureStart, captureEnd; + ch = state.input.charCodeAt(state.position); + if (ch !== 0x27) { + return false; + } + state.kind = "scalar"; + state.result = ""; + state.position++; + captureStart = captureEnd = state.position; + while((ch = state.input.charCodeAt(state.position)) !== 0){ + if (ch === 0x27) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + if (ch === 0x27) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + } else if (isEOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + return throwError(state, "unexpected end of the document within a single quoted scalar"); + } else { + state.position++; + captureEnd = state.position; + } + } + return throwError(state, "unexpected end of the stream within a single quoted scalar"); +} +function readDoubleQuotedScalar(state, nodeIndent) { + let ch = state.input.charCodeAt(state.position); + if (ch !== 0x22) { + return false; + } + state.kind = "scalar"; + state.result = ""; + state.position++; + let captureEnd, captureStart = captureEnd = state.position; + let tmp; + while((ch = state.input.charCodeAt(state.position)) !== 0){ + if (ch === 0x22) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + } + if (ch === 0x5c) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + if (isEOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + } else if ((tmp = escapedHexLen(ch)) > 0) { + let hexLength = tmp; + let hexResult = 0; + for(; hexLength > 0; hexLength--){ + ch = state.input.charCodeAt(++state.position); + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + } else { + return throwError(state, "expected hexadecimal character"); + } + } + state.result += charFromCodepoint(hexResult); + state.position++; + } else { + return throwError(state, "unknown escape sequence"); + } + captureStart = captureEnd = state.position; + } else if (isEOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + return throwError(state, "unexpected end of the document within a double quoted scalar"); + } else { + state.position++; + captureEnd = state.position; + } + } + return throwError(state, "unexpected end of the stream within a double quoted scalar"); +} +function readFlowCollection(state, nodeIndent) { + let ch = state.input.charCodeAt(state.position); + let terminator; + let isMapping = true; + let result = {}; + if (ch === 0x5b) { + terminator = 0x5d; + isMapping = false; + result = []; + } else if (ch === 0x7b) { + terminator = 0x7d; + } else { + return false; + } + if (state.anchor !== null && typeof state.anchor != "undefined" && typeof state.anchorMap != "undefined") { + state.anchorMap[state.anchor] = result; + } + ch = state.input.charCodeAt(++state.position); + const tag = state.tag, anchor = state.anchor; + let readNext = true; + let valueNode, keyNode, keyTag = keyNode = valueNode = null, isExplicitPair, isPair = isExplicitPair = false; + let following = 0, line = 0; + const overridableKeys = {}; + while(ch !== 0){ + skipSeparationSpace(state, true, nodeIndent); + ch = state.input.charCodeAt(state.position); + if (ch === terminator) { + state.position++; + state.tag = tag; + state.anchor = anchor; + state.kind = isMapping ? "mapping" : "sequence"; + state.result = result; + return true; + } + if (!readNext) { + return throwError(state, "missed comma between flow collection entries"); + } + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + if (ch === 0x3f) { + following = state.input.charCodeAt(state.position + 1); + if (isWsOrEol(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + line = state.line; + composeNode(state, nodeIndent, 1, false, true); + keyTag = state.tag || null; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + ch = state.input.charCodeAt(state.position); + if ((isExplicitPair || state.line === line) && ch === 0x3a) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, 1, false, true); + valueNode = state.result; + } + if (isMapping) { + storeMappingPair(state, result, overridableKeys, keyTag, keyNode, valueNode); + } else if (isPair) { + result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); + } else { + result.push(keyNode); + } + skipSeparationSpace(state, true, nodeIndent); + ch = state.input.charCodeAt(state.position); + if (ch === 0x2c) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + return throwError(state, "unexpected end of the stream within a flow collection"); +} +function readBlockScalar(state, nodeIndent) { + let chomping = 1, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false; + let ch = state.input.charCodeAt(state.position); + let folding = false; + if (ch === 0x7c) { + folding = false; + } else if (ch === 0x3e) { + folding = true; + } else { + return false; + } + state.kind = "scalar"; + state.result = ""; + let tmp = 0; + while(ch !== 0){ + ch = state.input.charCodeAt(++state.position); + if (ch === 0x2b || ch === 0x2d) { + if (1 === chomping) { + chomping = ch === 0x2b ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + return throwError(state, "repeat of a chomping mode identifier"); + } + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + return throwError(state, "bad explicit indentation width of a block scalar; it cannot be less than one"); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + return throwError(state, "repeat of an indentation width identifier"); + } + } else { + break; + } + } + if (isWhiteSpace(ch)) { + do { + ch = state.input.charCodeAt(++state.position); + }while (isWhiteSpace(ch)) + if (ch === 0x23) { + do { + ch = state.input.charCodeAt(++state.position); + }while (!isEOL(ch) && ch !== 0) + } + } + while(ch !== 0){ + readLineBreak(state); + state.lineIndent = 0; + ch = state.input.charCodeAt(state.position); + while((!detectedIndent || state.lineIndent < textIndent) && ch === 0x20){ + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + if (isEOL(ch)) { + emptyLines++; + continue; + } + if (state.lineIndent < textIndent) { + if (chomping === 3) { + state.result += repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === 1) { + if (didReadContent) { + state.result += "\n"; + } + } + break; + } + if (folding) { + if (isWhiteSpace(ch)) { + atMoreIndented = true; + state.result += repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += repeat("\n", emptyLines + 1); + } else if (emptyLines === 0) { + if (didReadContent) { + state.result += " "; + } + } else { + state.result += repeat("\n", emptyLines); + } + } else { + state.result += repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); + } + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + const captureStart = state.position; + while(!isEOL(ch) && ch !== 0){ + ch = state.input.charCodeAt(++state.position); + } + captureSegment(state, captureStart, state.position, false); + } + return true; +} +function readBlockSequence(state, nodeIndent) { + let line, following, detected = false, ch; + const tag = state.tag, anchor = state.anchor, result = []; + if (state.anchor !== null && typeof state.anchor !== "undefined" && typeof state.anchorMap !== "undefined") { + state.anchorMap[state.anchor] = result; + } + ch = state.input.charCodeAt(state.position); + while(ch !== 0){ + if (ch !== 0x2d) { + break; + } + following = state.input.charCodeAt(state.position + 1); + if (!isWsOrEol(following)) { + break; + } + detected = true; + state.position++; + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + line = state.line; + composeNode(state, nodeIndent, 3, false, true); + result.push(state.result); + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + if ((state.line === line || state.lineIndent > nodeIndent) && ch !== 0) { + return throwError(state, "bad indentation of a sequence entry"); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + if (detected) { + state.tag = tag; + state.anchor = anchor; + state.kind = "sequence"; + state.result = result; + return true; + } + return false; +} +function readBlockMapping(state, nodeIndent, flowIndent) { + const tag = state.tag, anchor = state.anchor, result = {}, overridableKeys = {}; + let following, allowCompact = false, line, pos, keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch; + if (state.anchor !== null && typeof state.anchor !== "undefined" && typeof state.anchorMap !== "undefined") { + state.anchorMap[state.anchor] = result; + } + ch = state.input.charCodeAt(state.position); + while(ch !== 0){ + following = state.input.charCodeAt(state.position + 1); + line = state.line; + pos = state.position; + if ((ch === 0x3f || ch === 0x3a) && isWsOrEol(following)) { + if (ch === 0x3f) { + if (atExplicitKey) { + storeMappingPair(state, result, overridableKeys, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + detected = true; + atExplicitKey = true; + allowCompact = true; + } else if (atExplicitKey) { + atExplicitKey = false; + allowCompact = true; + } else { + return throwError(state, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"); + } + state.position += 1; + ch = following; + } else if (composeNode(state, flowIndent, 2, false, true)) { + if (state.line === line) { + ch = state.input.charCodeAt(state.position); + while(isWhiteSpace(ch)){ + ch = state.input.charCodeAt(++state.position); + } + if (ch === 0x3a) { + ch = state.input.charCodeAt(++state.position); + if (!isWsOrEol(ch)) { + return throwError(state, "a whitespace character is expected after the key-value separator within a block mapping"); + } + if (atExplicitKey) { + storeMappingPair(state, result, overridableKeys, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + } else if (detected) { + return throwError(state, "can not read an implicit mapping pair; a colon is missed"); + } else { + state.tag = tag; + state.anchor = anchor; + return true; + } + } else if (detected) { + return throwError(state, "can not read a block mapping entry; a multiline key may not be an implicit key"); + } else { + state.tag = tag; + state.anchor = anchor; + return true; + } + } else { + break; + } + if (state.line === line || state.lineIndent > nodeIndent) { + if (composeNode(state, nodeIndent, 4, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + if (!atExplicitKey) { + storeMappingPair(state, result, overridableKeys, keyTag, keyNode, valueNode, line, pos); + keyTag = keyNode = valueNode = null; + } + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + if (state.lineIndent > nodeIndent && ch !== 0) { + return throwError(state, "bad indentation of a mapping entry"); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + if (atExplicitKey) { + storeMappingPair(state, result, overridableKeys, keyTag, keyNode, null); + } + if (detected) { + state.tag = tag; + state.anchor = anchor; + state.kind = "mapping"; + state.result = result; + } + return detected; +} +function readTagProperty(state) { + let position, isVerbatim = false, isNamed = false, tagHandle = "", tagName, ch; + ch = state.input.charCodeAt(state.position); + if (ch !== 0x21) return false; + if (state.tag !== null) { + return throwError(state, "duplication of a tag property"); + } + ch = state.input.charCodeAt(++state.position); + if (ch === 0x3c) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + } else if (ch === 0x21) { + isNamed = true; + tagHandle = "!!"; + ch = state.input.charCodeAt(++state.position); + } else { + tagHandle = "!"; + } + position = state.position; + if (isVerbatim) { + do { + ch = state.input.charCodeAt(++state.position); + }while (ch !== 0 && ch !== 0x3e) + if (state.position < state.length) { + tagName = state.input.slice(position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + return throwError(state, "unexpected end of the stream within a verbatim tag"); + } + } else { + while(ch !== 0 && !isWsOrEol(ch)){ + if (ch === 0x21) { + if (!isNamed) { + tagHandle = state.input.slice(position - 1, state.position + 1); + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + return throwError(state, "named tag handle cannot contain such characters"); + } + isNamed = true; + position = state.position + 1; + } else { + return throwError(state, "tag suffix cannot contain exclamation marks"); + } + } + ch = state.input.charCodeAt(++state.position); + } + tagName = state.input.slice(position, state.position); + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + return throwError(state, "tag suffix cannot contain flow indicator characters"); + } + } + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + return throwError(state, `tag name cannot contain such characters: ${tagName}`); + } + if (isVerbatim) { + state.tag = tagName; + } else if (typeof state.tagMap !== "undefined" && hasOwn2(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + } else if (tagHandle === "!") { + state.tag = `!${tagName}`; + } else if (tagHandle === "!!") { + state.tag = `tag:yaml.org,2002:${tagName}`; + } else { + return throwError(state, `undeclared tag handle "${tagHandle}"`); + } + return true; +} +function readAnchorProperty(state) { + let ch = state.input.charCodeAt(state.position); + if (ch !== 0x26) return false; + if (state.anchor !== null) { + return throwError(state, "duplication of an anchor property"); + } + ch = state.input.charCodeAt(++state.position); + const position = state.position; + while(ch !== 0 && !isWsOrEol(ch) && !isFlowIndicator(ch)){ + ch = state.input.charCodeAt(++state.position); + } + if (state.position === position) { + return throwError(state, "name of an anchor node must contain at least one character"); + } + state.anchor = state.input.slice(position, state.position); + return true; +} +function readAlias(state) { + let ch = state.input.charCodeAt(state.position); + if (ch !== 0x2a) return false; + ch = state.input.charCodeAt(++state.position); + const _position = state.position; + while(ch !== 0 && !isWsOrEol(ch) && !isFlowIndicator(ch)){ + ch = state.input.charCodeAt(++state.position); + } + if (state.position === _position) { + return throwError(state, "name of an alias node must contain at least one character"); + } + const alias = state.input.slice(_position, state.position); + if (typeof state.anchorMap !== "undefined" && !hasOwn2(state.anchorMap, alias)) { + return throwError(state, `unidentified alias "${alias}"`); + } + if (typeof state.anchorMap !== "undefined") { + state.result = state.anchorMap[alias]; + } + skipSeparationSpace(state, true, -1); + return true; +} +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + let allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, type, flowIndent, blockIndent; + if (state.listener && state.listener !== null) { + state.listener("open", state); + } + state.tag = null; + state.anchor = null; + state.kind = null; + state.result = null; + const allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext; + if (allowToSeek) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + if (indentStatus === 1) { + while(readTagProperty(state) || readAnchorProperty(state)){ + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + if (indentStatus === 1 || 4 === nodeContext) { + const cond = 1 === nodeContext || 2 === nodeContext; + flowIndent = cond ? parentIndent : parentIndent + 1; + blockIndent = state.position - state.lineStart; + if (indentStatus === 1) { + if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + } else if (readAlias(state)) { + hasContent = true; + if (state.tag !== null || state.anchor !== null) { + return throwError(state, "alias node should not have Any properties"); + } + } else if (readPlainScalar(state, flowIndent, 1 === nodeContext)) { + hasContent = true; + if (state.tag === null) { + state.tag = "?"; + } + } + if (state.anchor !== null && typeof state.anchorMap !== "undefined") { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + if (state.tag !== null && state.tag !== "!") { + if (state.tag === "?") { + for(let typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex++){ + type = state.implicitTypes[typeIndex]; + if (type.resolve(state.result)) { + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null && typeof state.anchorMap !== "undefined") { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (hasOwn2(state.typeMap[state.kind || "fallback"], state.tag)) { + type = state.typeMap[state.kind || "fallback"][state.tag]; + if (state.result !== null && type.kind !== state.kind) { + return throwError(state, `unacceptable node kind for !<${state.tag}> tag; it should be "${type.kind}", not "${state.kind}"`); + } + if (!type.resolve(state.result)) { + return throwError(state, `cannot resolve a node with !<${state.tag}> explicit tag`); + } else { + state.result = type.construct(state.result); + if (state.anchor !== null && typeof state.anchorMap !== "undefined") { + state.anchorMap[state.anchor] = state.result; + } + } + } else { + return throwError(state, `unknown tag !<${state.tag}>`); + } + } + if (state.listener && state.listener !== null) { + state.listener("close", state); + } + return state.tag !== null || state.anchor !== null || hasContent; +} +function readDocument(state) { + const documentStart = state.position; + let position, directiveName, directiveArgs, hasDirectives = false, ch; + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = {}; + state.anchorMap = {}; + while((ch = state.input.charCodeAt(state.position)) !== 0){ + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + if (state.lineIndent > 0 || ch !== 0x25) { + break; + } + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + position = state.position; + while(ch !== 0 && !isWsOrEol(ch)){ + ch = state.input.charCodeAt(++state.position); + } + directiveName = state.input.slice(position, state.position); + directiveArgs = []; + if (directiveName.length < 1) { + return throwError(state, "directive name must not be less than one character in length"); + } + while(ch !== 0){ + while(isWhiteSpace(ch)){ + ch = state.input.charCodeAt(++state.position); + } + if (ch === 0x23) { + do { + ch = state.input.charCodeAt(++state.position); + }while (ch !== 0 && !isEOL(ch)) + break; + } + if (isEOL(ch)) break; + position = state.position; + while(ch !== 0 && !isWsOrEol(ch)){ + ch = state.input.charCodeAt(++state.position); + } + directiveArgs.push(state.input.slice(position, state.position)); + } + if (ch !== 0) readLineBreak(state); + if (hasOwn2(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, ...directiveArgs); + } else { + throwWarning(state, `unknown document directive "${directiveName}"`); + } + } + skipSeparationSpace(state, true, -1); + if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2d && state.input.charCodeAt(state.position + 1) === 0x2d && state.input.charCodeAt(state.position + 2) === 0x2d) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } else if (hasDirectives) { + return throwError(state, "directives end mark is expected"); + } + composeNode(state, state.lineIndent - 1, 4, false, true); + skipSeparationSpace(state, true, -1); + if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, "non-ASCII line breaks are interpreted as content"); + } + state.documents.push(state.result); + if (state.position === state.lineStart && testDocumentSeparator(state)) { + if (state.input.charCodeAt(state.position) === 0x2e) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + if (state.position < state.length - 1) { + return throwError(state, "end of the stream or a document separator is expected"); + } else { + return; + } +} +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + if (input.length !== 0) { + if (input.charCodeAt(input.length - 1) !== 0x0a && input.charCodeAt(input.length - 1) !== 0x0d) { + input += "\n"; + } + if (input.charCodeAt(0) === 0xfeff) { + input = input.slice(1); + } + } + const state = new LoaderState(input, options); + state.input += "\0"; + while(state.input.charCodeAt(state.position) === 0x20){ + state.lineIndent += 1; + state.position += 1; + } + while(state.position < state.length - 1){ + readDocument(state); + } + return state.documents; +} +function isCbFunction(fn) { + return typeof fn === "function"; +} +function loadAll(input, iteratorOrOption, options) { + if (!isCbFunction(iteratorOrOption)) { + return loadDocuments(input, iteratorOrOption); + } + const documents = loadDocuments(input, options); + const iterator = iteratorOrOption; + for(let index = 0, length = documents.length; index < length; index++){ + iterator(documents[index]); + } + return void 0; +} +function load(input, options) { + const documents = loadDocuments(input, options); + if (documents.length === 0) { + return; + } + if (documents.length === 1) { + return documents[0]; + } + throw new YAMLError("expected a single document in the stream, but found more"); +} +function parse(content, options) { + return load(content, options); +} +function parseAll(content, iterator, options) { + return loadAll(content, iterator, options); +} +const { hasOwn: hasOwn3 } = Object; +function compileStyleMap(schema, map6) { + if (typeof map6 === "undefined" || map6 === null) return {}; + let type; + const result = {}; + const keys = Object.keys(map6); + let tag, style; + for(let index = 0, length = keys.length; index < length; index += 1){ + tag = keys[index]; + style = String(map6[tag]); + if (tag.slice(0, 2) === "!!") { + tag = `tag:yaml.org,2002:${tag.slice(2)}`; + } + type = schema.compiledTypeMap.fallback[tag]; + if (type && typeof type.styleAliases !== "undefined" && hasOwn3(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + result[tag] = style; + } + return result; +} +class DumperState extends State { + indent; + noArrayIndent; + skipInvalid; + flowLevel; + sortKeys; + lineWidth; + noRefs; + noCompatMode; + condenseFlow; + implicitTypes; + explicitTypes; + tag = null; + result = ""; + duplicates = []; + usedDuplicates = []; + styleMap; + dump; + constructor({ schema , indent =2 , noArrayIndent =false , skipInvalid =false , flowLevel =-1 , styles =null , sortKeys =false , lineWidth =80 , noRefs =false , noCompatMode =false , condenseFlow =false }){ + super(schema); + this.indent = Math.max(1, indent); + this.noArrayIndent = noArrayIndent; + this.skipInvalid = skipInvalid; + this.flowLevel = flowLevel; + this.styleMap = compileStyleMap(this.schema, styles); + this.sortKeys = sortKeys; + this.lineWidth = lineWidth; + this.noRefs = noRefs; + this.noCompatMode = noCompatMode; + this.condenseFlow = condenseFlow; + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + } +} +const _toString2 = Object.prototype.toString; +const { hasOwn: hasOwn4 } = Object; +const ESCAPE_SEQUENCES = {}; +ESCAPE_SEQUENCES[0x00] = "\\0"; +ESCAPE_SEQUENCES[0x07] = "\\a"; +ESCAPE_SEQUENCES[0x08] = "\\b"; +ESCAPE_SEQUENCES[0x09] = "\\t"; +ESCAPE_SEQUENCES[0x0a] = "\\n"; +ESCAPE_SEQUENCES[0x0b] = "\\v"; +ESCAPE_SEQUENCES[0x0c] = "\\f"; +ESCAPE_SEQUENCES[0x0d] = "\\r"; +ESCAPE_SEQUENCES[0x1b] = "\\e"; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5c] = "\\\\"; +ESCAPE_SEQUENCES[0x85] = "\\N"; +ESCAPE_SEQUENCES[0xa0] = "\\_"; +ESCAPE_SEQUENCES[0x2028] = "\\L"; +ESCAPE_SEQUENCES[0x2029] = "\\P"; +const DEPRECATED_BOOLEANS_SYNTAX = [ + "y", + "Y", + "yes", + "Yes", + "YES", + "on", + "On", + "ON", + "n", + "N", + "no", + "No", + "NO", + "off", + "Off", + "OFF", +]; +function encodeHex(character) { + const string6 = character.toString(16).toUpperCase(); + let handle; + let length; + if (character <= 0xff) { + handle = "x"; + length = 2; + } else if (character <= 0xffff) { + handle = "u"; + length = 4; + } else if (character <= 0xffffffff) { + handle = "U"; + length = 8; + } else { + throw new YAMLError("code point within a string may not be greater than 0xFFFFFFFF"); + } + return `\\${handle}${repeat("0", length - string6.length)}${string6}`; +} +function indentString(string7, spaces) { + const ind = repeat(" ", spaces), length = string7.length; + let position = 0, next = -1, result = "", line; + while(position < length){ + next = string7.indexOf("\n", position); + if (next === -1) { + line = string7.slice(position); + position = length; + } else { + line = string7.slice(position, next + 1); + position = next + 1; + } + if (line.length && line !== "\n") result += ind; + result += line; + } + return result; +} +function generateNextLine(state, level) { + return `\n${repeat(" ", state.indent * level)}`; +} +function testImplicitResolving(state, str2) { + let type; + for(let index = 0, length = state.implicitTypes.length; index < length; index += 1){ + type = state.implicitTypes[index]; + if (type.resolve(str2)) { + return true; + } + } + return false; +} +function isWhitespace(c) { + return c === 0x20 || c === 0x09; +} +function isPrintable(c) { + return 0x00020 <= c && c <= 0x00007e || 0x000a1 <= c && c <= 0x00d7ff && c !== 0x2028 && c !== 0x2029 || 0x0e000 <= c && c <= 0x00fffd && c !== 0xfeff || 0x10000 <= c && c <= 0x10ffff; +} +function isPlainSafe(c) { + return isPrintable(c) && c !== 0xfeff && c !== 0x2c && c !== 0x5b && c !== 0x5d && c !== 0x7b && c !== 0x7d && c !== 0x3a && c !== 0x23; +} +function isPlainSafeFirst(c) { + return isPrintable(c) && c !== 0xfeff && !isWhitespace(c) && c !== 0x2d && c !== 0x3f && c !== 0x3a && c !== 0x2c && c !== 0x5b && c !== 0x5d && c !== 0x7b && c !== 0x7d && c !== 0x23 && c !== 0x26 && c !== 0x2a && c !== 0x21 && c !== 0x7c && c !== 0x3e && c !== 0x27 && c !== 0x22 && c !== 0x25 && c !== 0x40 && c !== 0x60; +} +function needIndentIndicator(string8) { + const leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string8); +} +const STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5; +function chooseScalarStyle(string9, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { + const shouldTrackWidth = lineWidth !== -1; + let hasLineBreak = false, hasFoldableLine = false, previousLineBreak = -1, plain = isPlainSafeFirst(string9.charCodeAt(0)) && !isWhitespace(string9.charCodeAt(string9.length - 1)); + let __char, i5; + if (singleLineOnly) { + for(i5 = 0; i5 < string9.length; i5++){ + __char = string9.charCodeAt(i5); + if (!isPrintable(__char)) { + return 5; + } + plain = plain && isPlainSafe(__char); + } + } else { + for(i5 = 0; i5 < string9.length; i5++){ + __char = string9.charCodeAt(i5); + if (__char === 0x0a) { + hasLineBreak = true; + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || i5 - previousLineBreak - 1 > lineWidth && string9[previousLineBreak + 1] !== " "; + previousLineBreak = i5; + } + } else if (!isPrintable(__char)) { + return 5; + } + plain = plain && isPlainSafe(__char); + } + hasFoldableLine = hasFoldableLine || shouldTrackWidth && i5 - previousLineBreak - 1 > lineWidth && string9[previousLineBreak + 1] !== " "; + } + if (!hasLineBreak && !hasFoldableLine) { + return plain && !testAmbiguousType(string9) ? 1 : 2; + } + if (indentPerLevel > 9 && needIndentIndicator(string9)) { + return 5; + } + return hasFoldableLine ? 4 : 3; +} +function foldLine(line, width) { + if (line === "" || line[0] === " ") return line; + const breakRe = / [^ ]/g; + let match; + let start = 0, end, curr = 0, next = 0; + let result = ""; + while(match = breakRe.exec(line)){ + next = match.index; + if (next - start > width) { + end = curr > start ? curr : next; + result += `\n${line.slice(start, end)}`; + start = end + 1; + } + curr = next; + } + result += "\n"; + if (line.length - start > width && curr > start) { + result += `${line.slice(start, curr)}\n${line.slice(curr + 1)}`; + } else { + result += line.slice(start); + } + return result.slice(1); +} +function dropEndingNewline(string10) { + return string10[string10.length - 1] === "\n" ? string10.slice(0, -1) : string10; +} +function foldString(string11, width) { + const lineRe = /(\n+)([^\n]*)/g; + let result = (()=>{ + let nextLF = string11.indexOf("\n"); + nextLF = nextLF !== -1 ? nextLF : string11.length; + lineRe.lastIndex = nextLF; + return foldLine(string11.slice(0, nextLF), width); + })(); + let prevMoreIndented = string11[0] === "\n" || string11[0] === " "; + let moreIndented; + let match; + while(match = lineRe.exec(string11)){ + const prefix = match[1], line = match[2]; + moreIndented = line[0] === " "; + result += prefix + (!prevMoreIndented && !moreIndented && line !== "" ? "\n" : "") + foldLine(line, width); + prevMoreIndented = moreIndented; + } + return result; +} +function escapeString(string12) { + let result = ""; + let __char, nextChar; + let escapeSeq; + for(let i6 = 0; i6 < string12.length; i6++){ + __char = string12.charCodeAt(i6); + if (__char >= 0xd800 && __char <= 0xdbff) { + nextChar = string12.charCodeAt(i6 + 1); + if (nextChar >= 0xdc00 && nextChar <= 0xdfff) { + result += encodeHex((__char - 0xd800) * 0x400 + nextChar - 0xdc00 + 0x10000); + i6++; + continue; + } + } + escapeSeq = ESCAPE_SEQUENCES[__char]; + result += !escapeSeq && isPrintable(__char) ? string12[i6] : escapeSeq || encodeHex(__char); + } + return result; +} +function blockHeader(string13, indentPerLevel) { + const indentIndicator = needIndentIndicator(string13) ? String(indentPerLevel) : ""; + const clip = string13[string13.length - 1] === "\n"; + const keep = clip && (string13[string13.length - 2] === "\n" || string13 === "\n"); + const chomp = keep ? "+" : clip ? "" : "-"; + return `${indentIndicator}${chomp}\n`; +} +function writeScalar(state, string14, level, iskey) { + state.dump = (()=>{ + if (string14.length === 0) { + return "''"; + } + if (!state.noCompatMode && DEPRECATED_BOOLEANS_SYNTAX.indexOf(string14) !== -1) { + return `'${string14}'`; + } + const indent = state.indent * Math.max(1, level); + const lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + const singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel; + function testAmbiguity(str3) { + return testImplicitResolving(state, str3); + } + switch(chooseScalarStyle(string14, singleLineOnly, state.indent, lineWidth, testAmbiguity)){ + case STYLE_PLAIN: + return string14; + case STYLE_SINGLE: + return `'${string14.replace(/'/g, "''")}'`; + case STYLE_LITERAL: + return `|${blockHeader(string14, state.indent)}${dropEndingNewline(indentString(string14, indent))}`; + case STYLE_FOLDED: + return `>${blockHeader(string14, state.indent)}${dropEndingNewline(indentString(foldString(string14, lineWidth), indent))}`; + case STYLE_DOUBLE: + return `"${escapeString(string14)}"`; + default: + throw new YAMLError("impossible error: invalid scalar style"); + } + })(); +} +function writeFlowSequence(state, level, object14) { + let _result = ""; + const _tag = state.tag; + for(let index = 0, length = object14.length; index < length; index += 1){ + if (writeNode(state, level, object14[index], false, false)) { + if (index !== 0) _result += `,${!state.condenseFlow ? " " : ""}`; + _result += state.dump; + } + } + state.tag = _tag; + state.dump = `[${_result}]`; +} +function writeBlockSequence(state, level, object15, compact = false) { + let _result = ""; + const _tag = state.tag; + for(let index = 0, length = object15.length; index < length; index += 1){ + if (writeNode(state, level + 1, object15[index], true, true)) { + if (!compact || index !== 0) { + _result += generateNextLine(state, level); + } + if (state.dump && 0x0a === state.dump.charCodeAt(0)) { + _result += "-"; + } else { + _result += "- "; + } + _result += state.dump; + } + } + state.tag = _tag; + state.dump = _result || "[]"; +} +function writeFlowMapping(state, level, object16) { + let _result = ""; + const _tag = state.tag, objectKeyList = Object.keys(object16); + let pairBuffer, objectKey, objectValue; + for(let index = 0, length = objectKeyList.length; index < length; index += 1){ + pairBuffer = state.condenseFlow ? '"' : ""; + if (index !== 0) pairBuffer += ", "; + objectKey = objectKeyList[index]; + objectValue = object16[objectKey]; + if (!writeNode(state, level, objectKey, false, false)) { + continue; + } + if (state.dump.length > 1024) pairBuffer += "? "; + pairBuffer += `${state.dump}${state.condenseFlow ? '"' : ""}:${state.condenseFlow ? "" : " "}`; + if (!writeNode(state, level, objectValue, false, false)) { + continue; + } + pairBuffer += state.dump; + _result += pairBuffer; + } + state.tag = _tag; + state.dump = `{${_result}}`; +} +function writeBlockMapping(state, level, object17, compact = false) { + const _tag = state.tag, objectKeyList = Object.keys(object17); + let _result = ""; + if (state.sortKeys === true) { + objectKeyList.sort(); + } else if (typeof state.sortKeys === "function") { + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + throw new YAMLError("sortKeys must be a boolean or a function"); + } + let pairBuffer = "", objectKey, objectValue, explicitPair; + for(let index = 0, length = objectKeyList.length; index < length; index += 1){ + pairBuffer = ""; + if (!compact || index !== 0) { + pairBuffer += generateNextLine(state, level); + } + objectKey = objectKeyList[index]; + objectValue = object17[objectKey]; + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; + } + explicitPair = state.tag !== null && state.tag !== "?" || state.dump && state.dump.length > 1024; + if (explicitPair) { + if (state.dump && 0x0a === state.dump.charCodeAt(0)) { + pairBuffer += "?"; + } else { + pairBuffer += "? "; + } + } + pairBuffer += state.dump; + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; + } + if (state.dump && 0x0a === state.dump.charCodeAt(0)) { + pairBuffer += ":"; + } else { + pairBuffer += ": "; + } + pairBuffer += state.dump; + _result += pairBuffer; + } + state.tag = _tag; + state.dump = _result || "{}"; +} +function detectType(state, object18, explicit = false) { + const typeList = explicit ? state.explicitTypes : state.implicitTypes; + let type; + let style; + let _result; + for(let index = 0, length = typeList.length; index < length; index += 1){ + type = typeList[index]; + if ((type.instanceOf || type.predicate) && (!type.instanceOf || typeof object18 === "object" && object18 instanceof type.instanceOf) && (!type.predicate || type.predicate(object18))) { + state.tag = explicit ? type.tag : "?"; + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + if (_toString2.call(type.represent) === "[object Function]") { + _result = type.represent(object18, style); + } else if (hasOwn4(type.represent, style)) { + _result = type.represent[style](object18, style); + } else { + throw new YAMLError(`!<${type.tag}> tag resolver accepts not "${style}" style`); + } + state.dump = _result; + } + return true; + } + } + return false; +} +function writeNode(state, level, object19, block, compact, iskey = false) { + state.tag = null; + state.dump = object19; + if (!detectType(state, object19, false)) { + detectType(state, object19, true); + } + const type = _toString2.call(state.dump); + if (block) { + block = state.flowLevel < 0 || state.flowLevel > level; + } + const objectOrArray = type === "[object Object]" || type === "[object Array]"; + let duplicateIndex = -1; + let duplicate = false; + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object19); + duplicate = duplicateIndex !== -1; + } + if (state.tag !== null && state.tag !== "?" || duplicate || state.indent !== 2 && level > 0) { + compact = false; + } + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = `*ref_${duplicateIndex}`; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === "[object Object]") { + if (block && Object.keys(state.dump).length !== 0) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = `&ref_${duplicateIndex}${state.dump}`; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = `&ref_${duplicateIndex} ${state.dump}`; + } + } + } else if (type === "[object Array]") { + const arrayLevel = state.noArrayIndent && level > 0 ? level - 1 : level; + if (block && state.dump.length !== 0) { + writeBlockSequence(state, arrayLevel, state.dump, compact); + if (duplicate) { + state.dump = `&ref_${duplicateIndex}${state.dump}`; + } + } else { + writeFlowSequence(state, arrayLevel, state.dump); + if (duplicate) { + state.dump = `&ref_${duplicateIndex} ${state.dump}`; + } + } + } else if (type === "[object String]") { + if (state.tag !== "?") { + writeScalar(state, state.dump, level, iskey); + } + } else { + if (state.skipInvalid) return false; + throw new YAMLError(`unacceptable kind of an object to dump ${type}`); + } + if (state.tag !== null && state.tag !== "?") { + state.dump = `!<${state.tag}> ${state.dump}`; + } + } + return true; +} +function inspectNode(object20, objects, duplicatesIndexes) { + if (object20 !== null && typeof object20 === "object") { + const index = objects.indexOf(object20); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object20); + if (Array.isArray(object20)) { + for(let idx = 0, length = object20.length; idx < length; idx += 1){ + inspectNode(object20[idx], objects, duplicatesIndexes); + } + } else { + const objectKeyList = Object.keys(object20); + for(let idx = 0, length = objectKeyList.length; idx < length; idx += 1){ + inspectNode(object20[objectKeyList[idx]], objects, duplicatesIndexes); + } + } + } + } +} +function getDuplicateReferences(object21, state) { + const objects = [], duplicatesIndexes = []; + inspectNode(object21, objects, duplicatesIndexes); + const length = duplicatesIndexes.length; + for(let index = 0; index < length; index += 1){ + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = Array.from({ + length + }); +} +function dump(input, options) { + options = options || {}; + const state = new DumperState(options); + if (!state.noRefs) getDuplicateReferences(input, state); + if (writeNode(state, 0, input, true, true)) return `${state.dump}\n`; + return ""; +} +function stringify(obj, options) { + return dump(obj, options); +} +const mod = { + parse: parse, + parseAll: parseAll, + stringify: stringify, + Type: Type, + CORE_SCHEMA: core, + DEFAULT_SCHEMA: def, + EXTENDED_SCHEMA: extended, + FAILSAFE_SCHEMA: failsafe, + JSON_SCHEMA: json +}; +const { literal: literal1 , shape: shape1 , number: number1 , string: string1 , some: some1 , boolean: __boolean1 } = matches; +const setConfigMatcher = shape1({ + "peer-tor-address": string1, + "rpc-tor-address": string1, + alias: string1.optional(), + color: string1, + bitcoind: some1(shape1({ + type: literal1("internal"), + user: string1.optional(), + password: string1.optional() + }), shape1({ + type: literal1("internal-proxy"), + user: string1.optional(), + password: string1.optional() + })), + rpc: shape1({ + enabled: __boolean1, + user: string1, + password: string1 + }), + advanced: shape1({ + "tor-only": __boolean1, + "fee-base": number1, + "fee-rate": number1, + "min-capacity": number1, + "ignore-fee-limits": __boolean1, + "funding-confirms": number1, + "cltv-delta": number1, + "wumbo-channels": __boolean1, + experimental: shape1({ + "dual-fund": __boolean1, + "onion-messages": __boolean1, + offers: __boolean1, + "shutdown-wrong-funding": __boolean1 + }), + plugins: shape1({ + http: __boolean1, + rebalance: __boolean1, + summary: __boolean1, + rest: __boolean1 + }) + }) +}, [ + "alias" +]); +async function getAlias(effects, config) { + if (!!config.alias) { + return config.alias; + } + try { + return await effects.readFile({ + volumeId: "main", + path: "default_alias.txt" + }); + } catch (e) { + const alias = `start9-${(Math.random().toString(36) + "00000000000000011").slice(2, 9 + 2)}`; + await effects.writeFile({ + volumeId: "main", + path: "default_alias.txt", + toWrite: alias + }); + return alias; + } +} +const { string: string2 , boolean: __boolean2 , shape: shape2 } = matches; +const matchConfig = shape2({ + advanced: shape2({ + experimental: shape2({ + "onion-messages": __boolean2, + offers: __boolean2 + }) + }) +}); +const configRules = [ + { + currentError (config) { + if (!matchConfig.test(config)) { + return "Config is not the correct shape"; + } + const hasOffers = config.advanced.experimental.offers; + const hasOnionMessagesAndOffers = config.advanced.experimental["onion-messages"] && hasOffers; + const doesntHaveOffers = !hasOffers; + if (hasOnionMessagesAndOffers || doesntHaveOffers) return; + return `You must enable 'Onion Messages' if you wish to enable 'Offers'`; + } + }, +]; +function checkConfigRules(config) { + for (const checker of configRules){ + const error = checker.currentError(config); + if (error) { + return { + error: error + }; + } + } +} +async function createWaitForService(effects, config) { + const { bitcoin_rpc_host , bitcoin_rpc_pass , bitcoin_rpc_port , bitcoin_rpc_user } = userInformation(config); + await effects.writeFile({ + path: "start9/waitForStart.sh", + toWrite: ` +#!/bin/sh +echo "Starting Wait for Bitcoin Start" +while true; do + bitcoin-cli -rpcconnect=${bitcoin_rpc_host} -rpcport=${bitcoin_rpc_port} -rpcuser=${bitcoin_rpc_user} -rpcpassword=${bitcoin_rpc_pass} getblockchaininfo > /dev/null + if [ $? -eq 0 ] + then + break + else + echo "Waiting for Bitcoin to start..." + sleep 1 + fi +done + `, + volumeId: "main" + }); +} +function userInformation(config) { + switch(config.bitcoind.type){ + case "internal": + return { + bitcoin_rpc_user: config.bitcoind.user, + bitcoin_rpc_pass: config.bitcoind.password, + bitcoin_rpc_host: "bitcoind.embassy", + bitcoin_rpc_port: 8332 + }; + case "internal-proxy": + return { + bitcoin_rpc_user: config.bitcoind.user, + bitcoin_rpc_pass: config.bitcoind.password, + bitcoin_rpc_host: "btc-rpc-proxy.embassy", + bitcoin_rpc_port: 8332 + }; + } +} +function configMaker(alias, config) { + const { bitcoin_rpc_host , bitcoin_rpc_pass , bitcoin_rpc_port , bitcoin_rpc_user } = userInformation(config); + const rpcBind = config.rpc.enabled ? "0.0.0.0:8080" : "127.0.0.1:8080"; + const enableWumbo = config.advanced["wumbo-channels"] ? "large-channels" : ""; + const enableExperimentalDualFund = config.advanced.experimental["dual-fund"] ? "experimental-dual-fund" : ""; + const enableExperimentalOnionMessages = config.advanced.experimental["onion-messages"] ? "experimental-onion-messages" : ""; + const enableExperimentalOffers = config.advanced.experimental.offers ? "experimental-offers" : ""; + const enableExperimentalShutdownWrongFunding = config.advanced.experimental["shutdown-wrong-funding"] ? "experimental-shutdown-wrong-funding" : ""; + const enableHttpPlugin = config.advanced.plugins.http ? "plugin=/usr/local/libexec/c-lightning/plugins/c-lightning-http-plugin" : ""; + const enableRebalancePlugin = config.advanced.plugins.rebalance ? "plugin=/usr/local/libexec/c-lightning/plugins/rebalance/rebalance.py" : ""; + const enableSummaryPlugin = config.advanced.plugins.summary ? "plugin=/usr/local/libexec/c-lightning/plugins/summary/summary.py" : ""; + const enableRestPlugin = config.advanced.plugins.rest ? "plugin=/usr/local/libexec/c-lightning/plugins/c-lightning-REST/plugin.js\nrest-port=3001\nrest-protocol=https\n" : ""; + return ` +network=bitcoin +bitcoin-rpcuser=${bitcoin_rpc_user} +bitcoin-rpcpassword=${bitcoin_rpc_pass} +bitcoin-rpcconnect=${bitcoin_rpc_host} +bitcoin-rpcport=${bitcoin_rpc_port} + +http-user=${config.rpc.user} +http-pass=${config.rpc.password} +http-bind=${rpcBind} +bind-addr=0.0.0.0:9735 +announce-addr=${config["peer-tor-address"]}:9735 +proxy={proxy} +always-use-proxy=${config.advanced["tor-only"]} + +alias=${alias} +rgb=${config.color} + +fee-base=${config.advanced["fee-base"]} +fee-per-satoshi=${config.advanced["fee-rate"]} +min-capacity-sat=${config.advanced["min-capacity"]} +ignore-fee-limits=${config.advanced["ignore-fee-limits"]} +funding-confirms=${config.advanced["funding-confirms"]} +cltv-delta=${config.advanced["cltv-delta"]} +${enableWumbo} +${enableExperimentalDualFund} +${enableExperimentalOnionMessages} +${enableExperimentalOffers} +${enableExperimentalShutdownWrongFunding} + +${enableHttpPlugin} +${enableRebalancePlugin} +${enableSummaryPlugin} +${enableRestPlugin}`; +} +const setConfig = async (effects, input)=>{ + const config = setConfigMatcher.unsafeCast(input); + await checkConfigRules(config); + const alias = await getAlias(effects, config); + await effects.createDir({ + path: "start9", + volumeId: "main" + }); + await effects.writeFile({ + path: "start9/config.yaml", + toWrite: mod.stringify(input), + volumeId: "main" + }); + await effects.writeFile({ + path: "config.main", + toWrite: configMaker(alias, config), + volumeId: "main" + }); + await createWaitForService(effects, config); + const result = { + signal: "SIGTERM", + "depends-on": {} + }; + return { + result + }; +}; +const { shape: shape3 , arrayOf: arrayOf1 , string: string3 , boolean: __boolean3 } = matches; +const matchProxyConfig = shape3({ + users: arrayOf1(shape3({ + name: string3, + "allowed-calls": arrayOf1(string3), + password: string3, + "fetch-blocks": __boolean3 + }, [ + "fetch-blocks" + ])) +}); +function times(fn, amount) { + const answer = new Array(amount); + for(let i7 = 0; i7 < amount; i7++){ + answer[i7] = fn(i7); + } + return answer; +} +function randomItemString(input) { + return input[Math.floor(Math.random() * input.length)]; +} +const serviceName = "c-lightning"; +const fullChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; +const checks = [ + { + currentError (config) { + if (!matchProxyConfig.test(config)) { + return "Config is not the correct shape"; + } + if (config.users.some((x)=>x.name === serviceName + )) { + return; + } + return `Must have an RPC user named "${serviceName}"`; + }, + fix (config) { + config.users.push({ + name: serviceName, + "allowed-calls": [], + password: times(()=>randomItemString(fullChars) + , 22).join("") + }); + } + }, + ...[ + "echo", + "gettxout", + "getblockchaininfo", + "sendrawtransaction", + "getblockhash", + "getblock", + "getblockcount", + "estimatesmartfee", + "getnetworkinfo", + ].map((operator)=>({ + currentError (config) { + if (!matchProxyConfig.test(config)) { + return "Config is not the correct shape"; + } + if (config.users.find((x)=>x.name === serviceName + )?.["allowed-calls"]?.some((x)=>x === operator + ) ?? false) { + return; + } + return `RPC user "c-lightning" must have "${operator}" enabled`; + }, + fix (config) { + if (!matchProxyConfig.test(config)) { + throw new Error("Config is not the correct shape"); + } + const found = config.users.find((x)=>x.name === serviceName + ); + if (!found) { + throw new Error("Users for c-lightning should exist"); + } + found["allowed-calls"] = [ + ...found["allowed-calls"] ?? [], + operator + ]; + } + }) + ), + { + currentError (config) { + if (!matchProxyConfig.test(config)) { + return "Config is not the correct shape"; + } + if (config.users.find((x)=>x.name === serviceName + )?.["fetch-blocks"] ?? false) { + return; + } + return `RPC user "c-lightning" must have "Fetch Blocks" enabled`; + }, + fix (config) { + if (!matchProxyConfig.test(config)) { + throw new Error("Config is not the correct shape"); + } + const found = config.users.find((x)=>x.name === serviceName + ); + if (!found) { + throw new Error("Users for c-lightning should exist"); + } + found["fetch-blocks"] = true; + } + }, +]; +const matchBitcoindConfig = shape3({ + advanced: shape3({ + pruning: shape3({ + mode: string3 + }) + }) +}); +const dependencies = { + "btc-rpc-proxy": { + async check (effects, configInput) { + effects.info("check btc-rpc-proxy"); + for (const checker of checks){ + const error = checker.currentError(configInput); + if (error) { + effects.error(`throwing error: ${error}`); + return { + error + }; + } + } + return { + result: null + }; + }, + async autoConfigure (effects, configInput) { + effects.info("autoconfigure btc-rpc-proxy"); + for (const checker of checks){ + const error = checker.currentError(configInput); + if (error) { + checker.fix(configInput); + } + } + return { + result: configInput + }; + } + }, + bitcoind: { + async check (effects, configInput) { + effects.info("check bitcoind"); + const config = matchBitcoindConfig.unsafeCast(configInput); + if (config.advanced.pruning.mode !== "disabled") { + return { + error: 'Pruning must be disabled to use Bitcoin Core directly. To use with a pruned node, set Bitcoin Core to "Internal (Bitcoin Proxy)" instead.' + }; + } + return { + result: null + }; + }, + async autoConfigure (effects, configInput) { + effects.info("autoconfigure bitcoind"); + const config = matchBitcoindConfig.unsafeCast(configInput); + config.advanced.pruning.mode = "disabled"; + return { + result: config + }; + } + } +}; +const NOT_COMPUTED = Symbol("not_computed"); +function once(val) { + let computed = NOT_COMPUTED; + return ()=>{ + if (computed === NOT_COMPUTED) { + computed = val(); + } + return computed; + }; +} +function lazy_primative(val) { + return { + val, + map (next) { + return lazy(()=>next(val()) + ); + } + }; +} +const lazy = (x)=>lazy_primative(once(x)) +; +const { shape: shape4 , string: string4 , boolean: __boolean4 } = matches; +const nodeInfoMatcher = shape4({ + id: string4, + alias: string4 +}, [ + 'alias' +]); +shape4({ + rpc: shape4({ + enabled: __boolean4, + user: string4, + password: string4 + }), + advanced: shape4({ + plugins: shape4({ + rest: __boolean4 + }) + }) +}); +const properties = async (effects)=>{ + const nodeInfo = nodeInfoMatcher.unsafeCast(await effects.readJsonFile({ + volumeId: "main", + path: "start9/lightningGetInfo" + })); + const peerTorAddress = await effects.readFile({ + volumeId: "main", + path: "start9/peerTorAddress" + }).then((x)=>x.trim() + ); + const config = setConfigMatcher.unsafeCast(mod.parse(await effects.readFile({ + path: "start9/config.yaml", + volumeId: "main" + }))); + const macaroonBase64 = lazy(()=>effects.readFile({ + path: "start9/access.macaroon.base64", + volumeId: "main" + }) + ); + const hexMacaroon = lazy(()=>effects.readFile({ + path: "start9/access.macaroon.hex", + volumeId: "main" + }) + ); + const rpcProperties = !config.rpc.enabled ? {} : { + "Quick Connect URL": { + type: "string", + value: `clightning-rpc://${config.rpc.user}:${config.rpc.password}@${peerTorAddress}:8080`, + description: "A convenient way to connect a wallet to a remote node", + copyable: true, + qr: true, + masked: true + }, + "RPC Username": { + type: "string", + value: config.rpc.user, + description: "Username for RPC connections", + copyable: true, + qr: false, + masked: true + }, + "RPC Password": { + type: "string", + value: config.rpc.password, + description: "Password for RPC connections", + copyable: true, + qr: false, + masked: true + } + }; + const restProperties = !config.advanced.plugins.rest ? {} : { + "Rest API Port": { + type: "string", + value: "3001", + description: "The port your c-lightning-REST API is listening on", + copyable: true, + qr: false, + masked: false + }, + "Rest API Macaroon": { + type: "string", + value: await macaroonBase64.val(), + description: "The macaroon that grants access to your node's REST API plugin", + copyable: true, + qr: false, + masked: true + }, + "Rest API Macaroon (Hex)": { + type: "string", + value: await hexMacaroon.val(), + description: "The macaroon that grants access to your node's REST API plugin, in hexadecimal format", + copyable: true, + qr: false, + masked: true + } + }; + const alias = await getAlias(effects, config); + const result = { + version: 2, + data: { + "Node Id": { + type: "string", + value: nodeInfo.id, + description: "The node identifier that can be used for connecting to other nodes", + copyable: true, + qr: false, + masked: false + }, + "Node Uri": { + type: "string", + value: `${nodeInfo.id}@${peerTorAddress}`, + description: "Enables connecting to another remote node", + copyable: true, + qr: true, + masked: true + }, + "Node Alias": { + type: "string", + value: alias, + description: "The friendly identifier for your node", + copyable: true, + qr: false, + masked: false + }, + ...rpcProperties, + ...restProperties + } + }; + return { + result + }; +}; +const { any: any1 , string: string5 , dictionary: dictionary1 } = matches; +const matchConfig1 = dictionary1([ + string5, + any1 +]); +const getConfig = async (effects)=>{ + const config = await effects.readFile({ + path: "start9/config.yaml", + volumeId: "main" + }).then((x)=>mod.parse(x) + ).then((x)=>matchConfig1.unsafeCast(x) + ).catch((e)=>{ + effects.warn(`Got error ${e} while trying to read the config`); + return undefined; + }); + return { + result: { + config, + spec: { + "peer-tor-address": { + "name": "Peer Tor Address", + "description": "The Tor address of the peer interface", + "type": "pointer", + "subtype": "package", + "package-id": "c-lightning", + "target": "tor-address", + "interface": "peer" + }, + "rpc-tor-address": { + "name": "RPC Tor Address", + "description": "The Tor address of the RPC interface", + "type": "pointer", + "subtype": "package", + "package-id": "c-lightning", + "target": "tor-address", + "interface": "rpc" + }, + "alias": { + "type": "string", + "name": "Alias", + "description": "Recognizable name for the Lightning Network", + "nullable": true, + "pattern": ".{1,32}", + "pattern-description": "Must be at least 1 character and no more than 32 characters" + }, + "color": { + "type": "string", + "name": "Color", + "description": "Color value for the Lightning Network", + "nullable": false, + "pattern": "[0-9a-fA-F]{6}", + "pattern-description": "Must be a valid 6 digit hexadecimal RGB value. The first two digits are red, middle two are green and final two are\nblue\n", + "default": { + "charset": "a-f,0-9", + "len": 6 + } + }, + "bitcoind": { + "type": "union", + "name": "Bitcoin Core", + "description": "The Bitcoin Core node to connect to:\n - Internal (Bitcoin Core): The Bitcoin Core service installed to your Embassy\n - Internal (Bitcoin Proxy): The Bitcoin RPC Proxy service installed to your Embassy\n", + "tag": { + "id": "type", + "name": "Type", + "variant-names": { + "internal": "Internal (Bitcoin Core)", + "internal-proxy": "Internal (Bitcoin Proxy)" + }, + "description": "The Bitcoin Core node to connect to:\n - Internal (Bitcoin Core): The Bitcoin Core service installed to your Embassy\n - Internal (Bitcoin Proxy): The Bitcoin RPC Proxy service installed to your Embassy\n" + }, + "default": "internal-proxy", + "variants": { + "internal": { + "user": { + "type": "pointer", + "name": "RPC Username", + "description": "The username for Bitcoin Core's RPC interface", + "subtype": "package", + "package-id": "bitcoind", + "target": "config", + "multi": false, + "selector": "$.rpc.username" + }, + "password": { + "type": "pointer", + "name": "RPC Password", + "description": "The password for Bitcoin Core's RPC interface", + "subtype": "package", + "package-id": "bitcoind", + "target": "config", + "multi": false, + "selector": "$.rpc.password" + } + }, + "internal-proxy": { + "user": { + "type": "pointer", + "name": "RPC Username", + "description": "The username for the RPC user allocated to Core Lightning", + "subtype": "package", + "package-id": "btc-rpc-proxy", + "target": "config", + "selector": "$.users[?(@.name == \"c-lightning\")].name", + "multi": false + }, + "password": { + "type": "pointer", + "name": "RPC Password", + "description": "The password for the RPC user allocated to Core Lightning", + "subtype": "package", + "package-id": "btc-rpc-proxy", + "target": "config", + "selector": "$.users[?(@.name == \"c-lightning\")].password", + "multi": false + } + } + } + }, + "rpc": { + "type": "object", + "name": "RPC Options", + "description": "Options for the HTTP RPC interface", + "spec": { + "enabled": { + "type": "boolean", + "name": "Enable", + "description": "Whether to enable the RPC webserver", + "default": true + }, + "user": { + "type": "string", + "name": "RPC Username", + "description": "The username for the RPC user on your Core Lightning node", + "nullable": false, + "default": "lightning", + "copyable": true + }, + "password": { + "type": "string", + "name": "RPC Password", + "description": "The password for the RPC user on your Core Lightning node", + "nullable": false, + "default": { + "charset": "a-z,A-Z,0-9", + "len": 22 + }, + "copyable": true, + "masked": true + } + } + }, + "advanced": { + "type": "object", + "name": "Advanced", + "description": "Advanced Options", + "spec": { + "tor-only": { + "type": "boolean", + "name": "Only Use Tor", + "description": "Use Tor for outgoing connections", + "default": false + }, + "fee-base": { + "type": "number", + "name": "Routing Base Fee", + "description": "The base fee in millisatoshis you will charge for forwarding payments on your channels.\n", + "nullable": false, + "range": "[0,*)", + "integral": true, + "default": 1000, + "units": "millisatoshis" + }, + "fee-rate": { + "type": "number", + "name": "Routing Fee Rate", + "description": "The fee rate used when forwarding payments on your channels. The total fee charged is\nthe Base Fee + (amount * Fee Rate / 1,000,000), where the amount is the forwarded amount.\nMeasured in sats per million.\n", + "nullable": false, + "range": "[1,1000000)", + "integral": true, + "default": 1, + "units": "sats per million" + }, + "min-capacity": { + "type": "number", + "name": "Minimum Channel Capacity", + "description": "This value defines the minimal effective channel capacity in satoshis to accept for channel opening requests.\nThis will reject any opening of a channel which can't pass an HTLC of at least this value. Usually this prevents\na peer opening a tiny channel, but it can also prevent a channel you open with a reasonable amount and the peer\nis requesting such a large reserve that the capacity of the channel falls below this.\n", + "nullable": false, + "range": "[1,16777215]", + "integral": true, + "default": 10000, + "units": "satoshis" + }, + "ignore-fee-limits": { + "type": "boolean", + "name": "Ignore Fee Limits", + "description": "Allow nodes which establish channels to you to set any fee they want. This may result in a channel which cannot\nbe closed, should fees increase, but make channels far more reliable since Core Lightning will never close it due\nto unreasonable fees.\n", + "default": false + }, + "funding-confirms": { + "type": "number", + "name": "Required Funding Confirmations", + "description": "Confirmations required for the funding transaction when the other side opens a channel before the channel is\nusable.\n", + "nullable": false, + "range": "[1,6]", + "integral": true, + "default": 3, + "units": "blocks" + }, + "cltv-delta": { + "type": "number", + "name": "Time Lock Delta", + "description": "The number of blocks between the incoming payments and outgoing payments: this needs to be enough to make sure\nthat if it has to, Core Lightning can close the outgoing payment before the incoming, or redeem the incoming once\nthe outgoing is redeemed.\n", + "nullable": false, + "range": "[6,144]", + "integral": true, + "default": 40, + "units": "blocks" + }, + "wumbo-channels": { + "type": "boolean", + "name": "Enable Wumbo Channels", + "description": "Removes capacity limits for channel creation. Version 1.0 of the specification limited channel sizes to 16777215\nsatoshis. With this option (which your node will advertise to peers), your node will accept larger incoming\nchannels and if the peer supports it, will open larger channels.\n\nWarning: This is #Reckless and you should not enable it unless you deeply understand the risks associated with\nthe Lightning Network.\n", + "default": false + }, + "experimental": { + "type": "object", + "name": "Experimental Features", + "description": "Experimental features that have not been standardized across Lightning Network implementations", + "change-warning": "These are experimental features. Enable them at your own risk. It is possible that software bugs can lead to\nunknown problems. We recommend not using them with large amounts of money. Unless you understand how these\nfeatures work, you should not enable them.\n", + "spec": { + "dual-fund": { + "type": "boolean", + "name": "Dual Funding", + "description": "Enables the option to dual fund channels with other compatible lightning implementations using the v2\nchannel opening protocol\n", + "default": false + }, + "onion-messages": { + "type": "boolean", + "name": "Onion Messages", + "description": "Enable the sending, receiving, and relay of onion messages\n", + "default": false + }, + "offers": { + "type": "boolean", + "name": "Offers", + "description": "Enable the sending and receiving of offers (this requires Onion Messages to be enabled as well)\n", + "default": false + }, + "shutdown-wrong-funding": { + "type": "boolean", + "name": "Shutdown Wrong Funding", + "description": "Allow channel shutdown with alternate txids\n", + "default": false + } + } + }, + "plugins": { + "type": "object", + "name": "Plugins", + "description": "Plugins are subprocesses that provide extra functionality and run alongside the lightningd process inside \nthe main Core Lightning container in order to communicate directly with it.\nTheir source is maintained separately from that of Core Lightning itself.\n", + "spec": { + "http": { + "type": "boolean", + "name": "Enable C-Lightning-HTTP-Plugin", + "description": "This plugin is a direct proxy for the unix domain socket from the HTTP interface. \nIt is required for Spark Wallet to connect to Core Lightning.\n\nSource: https://github.com/Start9Labs/c-lightning-http-plugin\n", + "default": true + }, + "rebalance": { + "type": "boolean", + "name": "Enable Rebalance Plugin", + "description": "Enables the `rebalance` rpc command, which moves liquidity between your channels using circular payments.\nSee `help rebalance` on the CLI or in the Spark console for usage instructions.\n\nSource: https://github.com/lightningd/plugins/tree/master/rebalance\n", + "default": false + }, + "summary": { + "type": "boolean", + "name": "Enable Summary Plugin", + "description": "Enables the `summary` rpc command, which outputs a text summary of your node, including fiat amounts.\nCan be called via command line or the Spark console. \n\nSource: https://github.com/lightningd/plugins/tree/master/summary\n", + "default": false + }, + "rest": { + "type": "boolean", + "name": "Enable C-Lightning-REST Plugin", + "description": "This plugin exposes an LND-like REST API. It is required for Ride The Lighting to connect to Core Lightning.\n\nSource: https://github.com/Ride-The-Lightning/c-lightning-REST\n", + "default": true + } + } + } + } + } + } + } + }; +}; +export { setConfig as setConfig }; +export { dependencies as dependencies }; +export { properties as properties }; +export { getConfig as getConfig }; diff --git a/scripts/embassy.ts b/scripts/embassy.ts new file mode 100644 index 0000000..5a4c935 --- /dev/null +++ b/scripts/embassy.ts @@ -0,0 +1,5 @@ +// @ts-check +export { setConfig } from "./services/setConfig.ts"; +export { dependencies } from "./services/dependencies.ts"; +export { properties } from "./services/properties.ts"; +export { getConfig } from "./services/getConfig.ts"; diff --git a/scripts/models/lazy.ts b/scripts/models/lazy.ts new file mode 100644 index 0000000..5b2d3dd --- /dev/null +++ b/scripts/models/lazy.ts @@ -0,0 +1,25 @@ +const NOT_COMPUTED = Symbol("not_computed"); +type Once = () => T; +function once(val: () => T) { + let computed: unknown = NOT_COMPUTED; + return (() => { + if (computed === NOT_COMPUTED) { + computed = val(); + } + return computed; + }) as Once; +} +function lazy_primative(val: () => T): Lazy { + return { + val, + map(next) { + return lazy(() => next(val())); + }, + }; +} + +export type Lazy = { + val(): T; + map(fn: (t: T) => U): Lazy; +}; +export const lazy = (x: () => T) => lazy_primative(once(x)); diff --git a/scripts/models/setConfig.ts b/scripts/models/setConfig.ts new file mode 100644 index 0000000..a86637a --- /dev/null +++ b/scripts/models/setConfig.ts @@ -0,0 +1,53 @@ +import { matches } from "../deps.ts"; + +const { literal, shape, number, string, some, boolean } = matches; +export const setConfigMatcher = shape( + { + "peer-tor-address": string, + "rpc-tor-address": string, + alias: string.optional(), + color: string, + bitcoind: some( + shape({ + type: literal("internal"), + user: string.optional(), + password: string.optional(), + }), + shape({ + type: literal("internal-proxy"), + user: string.optional(), + password: string.optional(), + }) + ), + rpc: shape({ + enabled: boolean, + user: string, + password: string, + }), + advanced: shape({ + "tor-only": boolean, + "fee-base": number, + "fee-rate": number, + "min-capacity": number, + "ignore-fee-limits": boolean, + "funding-confirms": number, + "cltv-delta": number, + "wumbo-channels": boolean, + experimental: shape({ + "dual-fund": boolean, + "onion-messages": boolean, + offers: boolean, + "shutdown-wrong-funding": boolean, + }), + plugins: shape({ + http: boolean, + rebalance: boolean, + summary: boolean, + rest: boolean, + clboss: boolean, + }), + }), + }, + ["alias"] +); +export type SetConfig = typeof setConfigMatcher._TYPE; diff --git a/scripts/services/dependencies.ts b/scripts/services/dependencies.ts new file mode 100644 index 0000000..11c5b86 --- /dev/null +++ b/scripts/services/dependencies.ts @@ -0,0 +1,161 @@ +import { ExpectedExports, Config, matches } from "../deps.ts"; + +const { shape, arrayOf, string, boolean } = matches; + +const matchProxyConfig = shape({ + users: arrayOf( + shape( + { + name: string, + "allowed-calls": arrayOf(string), + password: string, + "fetch-blocks": boolean, + }, + ["fetch-blocks"] + ) + ), +}); + +function times(fn: (i: number) => T, amount: number): T[] { + const answer = new Array(amount); + for (let i = 0; i < amount; i++) { + answer[i] = fn(i); + } + return answer; +} + +function randomItemString(input: string) { + return input[Math.floor(Math.random() * input.length)]; +} + +const serviceName = "c-lightning"; +const fullChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; +type Check = { + currentError(config: Config): string | void; + fix(config: Config): void; +}; + +const checks: Array = [ + { + currentError(config) { + if (!matchProxyConfig.test(config)) { + return "Config is not the correct shape"; + } + if (config.users.some((x) => x.name === serviceName)) { + return; + } + return `Must have an RPC user named "${serviceName}"`; + }, + fix(config) { + config.users.push({ + name: serviceName, + "allowed-calls": [], + password: times(() => randomItemString(fullChars), 22).join(""), + }); + }, + }, + ...[ + "echo", + "gettxout", + "getblockchaininfo", + "sendrawtransaction", + "getblockhash", + "getblock", + "getblockcount", + "estimatesmartfee", + "getnetworkinfo", + ].map( + (operator): Check => ({ + currentError(config) { + if (!matchProxyConfig.test(config)) { + return "Config is not the correct shape"; + } + if (config.users.find((x) => x.name === serviceName)?.["allowed-calls"]?.some((x) => x === operator) ?? false) { + return; + } + return `RPC user "c-lightning" must have "${operator}" enabled`; + }, + fix(config) { + if (!matchProxyConfig.test(config)) { + throw new Error("Config is not the correct shape"); + } + const found = config.users.find((x) => x.name === serviceName); + if (!found) { + throw new Error("Users for c-lightning should exist"); + } + found["allowed-calls"] = [...(found["allowed-calls"] ?? []), operator]; + }, + }) + ), + { + currentError(config) { + if (!matchProxyConfig.test(config)) { + return "Config is not the correct shape"; + } + if (config.users.find((x) => x.name === serviceName)?.["fetch-blocks"] ?? false) { + return; + } + return `RPC user "c-lightning" must have "Fetch Blocks" enabled`; + }, + fix(config) { + if (!matchProxyConfig.test(config)) { + throw new Error("Config is not the correct shape"); + } + const found = config.users.find((x) => x.name === serviceName); + if (!found) { + throw new Error("Users for c-lightning should exist"); + } + found["fetch-blocks"] = true; + }, + }, +]; + +const matchBitcoindConfig = shape({ + advanced: shape({ + pruning: shape({ + mode: string, + }), + }), +}); + +export const dependencies: ExpectedExports.dependencies = { + "btc-rpc-proxy": { + async check(effects, configInput) { + effects.info("check btc-rpc-proxy"); + for (const checker of checks) { + const error = checker.currentError(configInput); + if (error) { + effects.error(`throwing error: ${error}`); + return { error }; + } + } + return { result: null }; + }, + async autoConfigure(effects, configInput) { + effects.info("autoconfigure btc-rpc-proxy"); + for (const checker of checks) { + const error = checker.currentError(configInput); + if (error) { + checker.fix(configInput); + } + } + return { result: configInput }; + }, + }, + bitcoind: { + async check(effects, configInput) { + effects.info("check bitcoind"); + const config = matchBitcoindConfig.unsafeCast(configInput); + if (config.advanced.pruning.mode !== "disabled") { + return { error: 'Pruning must be disabled to use Bitcoin Core directly. To use with a pruned node, set Bitcoin Core to "Internal (Bitcoin Proxy)" instead.' }; + } + return { result: null }; + }, + async autoConfigure(effects, configInput) { + effects.info("autoconfigure bitcoind"); + const config = matchBitcoindConfig.unsafeCast(configInput); + config.advanced.pruning.mode = "disabled"; + return { result: config }; + }, + }, +}; diff --git a/scripts/services/getAlias.ts b/scripts/services/getAlias.ts new file mode 100644 index 0000000..e8cae57 --- /dev/null +++ b/scripts/services/getAlias.ts @@ -0,0 +1,23 @@ +import { Effects, ExpectedExports } from "../deps.ts"; +import { SetConfig } from "../models/setConfig.ts"; + +export type Alias = string & { _type: "alias" }; +export async function getAlias(effects: Effects, config: SetConfig): Promise { + if (!!config.alias) { + return config.alias as Alias; + } + try { + return (await effects.readFile({ + volumeId: "main", + path: "default_alias.txt", + })) as Alias; + } catch (e) { + const alias = `start9-${(Math.random().toString(36) + "00000000000000011").slice(2, 9 + 2)}`; + await effects.writeFile({ + volumeId: "main", + path: "default_alias.txt", + toWrite: alias, + }); + return alias as Alias; + } +} \ No newline at end of file diff --git a/scripts/services/getConfig.ts b/scripts/services/getConfig.ts new file mode 100644 index 0000000..5c19613 --- /dev/null +++ b/scripts/services/getConfig.ts @@ -0,0 +1,373 @@ +import { matches, YAML, ExpectedExports, ConfigRes } from "../deps.ts"; + +const { any, string, dictionary } = matches; + +const matchConfig = dictionary([string, any]); + +export const getConfig: ExpectedExports.getConfig = async (effects) => { + const config = await effects + .readFile({ + path: "start9/config.yaml", + volumeId: "main", + }) + .then((x) => YAML.parse(x)) + .then((x) => matchConfig.unsafeCast(x)) + .catch((e) => { + effects.warn(`Got error ${e} while trying to read the config`); + return undefined; + }); + const spec: ConfigRes['spec'] = { + "peer-tor-address": { + "name": "Peer Tor Address", + "description": "The Tor address of the peer interface", + "type": "pointer", + "subtype": "package", + "package-id": "bitcoind", + "target": "tor-address", + "interface": "peer" + }, + "rpc-tor-address": { + "name": "RPC Tor Address", + "description": "The Tor address of the RPC interface", + "type": "pointer", + "subtype": "package", + "package-id": "bitcoind", + "target": "tor-address", + "interface": "rpc" + }, + "rpc": { + "type": "object", + "nullable": false, + "name": "RPC Settings", + "description": "RPC configuration options.", + "spec": { + "enable": { + "type": "boolean", + "name": "Enable", + "description": "Allow remote RPC requests.", + "default": true + }, + "username": { + "type": "string", + "nullable": false, + "name": "Username", + "description": "The username for connecting to Bitcoin over RPC.", + "default": "bitcoin", + "masked": true, + "pattern": "^[a-zA-Z0-9_]+$", + "pattern-description": "Must be alphanumeric (can contain underscore)." + }, + "password": { + "type": "string", + "nullable": false, + "name": "RPC Password", + "description": "The password for connecting to Bitcoin over RPC.", + "default": { + "charset": "a-z,2-7", + "len": 20 + }, + "pattern": "^[^\\n\"]*$", + "pattern-description": "Must not contain newline or quote characters.", + "copyable": true, + "masked": true + }, + "advanced": { + "type": "object", + "nullable": false, + "name": "Advanced", + "description": "Advanced RPC Settings", + "spec": { + "auth": { + "name": "Authorization", + "description": "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", + "type": "list", + "subtype": "string", + "default": [], + "spec": { + "pattern": "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", + "pattern-description": "Each item must be of the form \":$\"." + }, + "range": "[0,*)" + }, + "serialversion": { + "name": "Serialization Version", + "description": "Return raw transaction or block hex with Segwit or non-SegWit serialization.", + "type": "enum", + "values": [ + "non-segwit", + "segwit" + ], + "default": "segwit" + }, + "servertimeout": { + "name": "Rpc Server Timeout", + "description": "Number of seconds after which an uncompleted RPC call will time out.", + "type": "number", + "nullable": false, + "range": "[5,300]", + "integral": true, + "units": "seconds", + "default": 30 + }, + "threads": { + "name": "Threads", + "description": "Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node.", + "type": "number", + "nullable": false, + "default": 4, + "range": "[1,64]", + "integral": true, + "units": undefined + }, + "workqueue": { + "name": "Work Queue", + "description": "Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones.", + "type": "number", + "nullable": false, + "default": 128, + "range": "[8,256]", + "integral": true, + "units": "requests" + } + } + } + } + }, + "zmq-enabled": { + "type": "boolean", + "name": "ZeroMQ Enabled", + "description": "Enable the ZeroMQ interface", + "default": true + }, + "txindex": { + "type": "boolean", + "name": "Transaction Index", + "description": "Enable the Transaction Index (txindex)", + "default": false + }, + "wallet": { + "type": "object", + "name": "Wallet", + "description": "Wallet Settings", + "spec": { + "enable": { + "name": "Enable Wallet", + "description": "Load the wallet and enable wallet RPC calls.", + "type": "boolean", + "default": true + }, + "avoidpartialspends": { + "name": "Avoid Partial Spends", + "description": "Group outputs by address, selecting all or none, instead of selecting on a per-output basis. This improves privacy at the expense of higher transaction fees.", + "type": "boolean", + "default": true + }, + "discardfee": { + "name": "Discard Change Tolerance", + "description": "The fee rate (in BTC/kB) that indicates your tolerance for discarding change by adding it to the fee.", + "type": "number", + "nullable": false, + "default": 0.0001, + "range": "[0,.01]", + "integral": false, + "units": "BTC/kB" + } + } + }, + "advanced": { + "type": "object", + "nullable": false, + "name": "Advanced", + "description": "Advanced Settings", + "spec": { + "mempool": { + "type": "object", + "name": "Mempool", + "description": "Mempool Settings", + "spec": { + "persistmempool": { + "type": "boolean", + "name": "Persist Mempool", + "description": "Save the mempool on shutdown and load on restart.", + "default": true + }, + "maxmempool": { + "type": "number", + "nullable": false, + "name": "Max Mempool Size", + "description": "Keep the transaction memory pool below megabytes.", + "range": "[1,*)", + "integral": true, + "units": "MiB", + "default": 300 + }, + "mempoolexpiry": { + "type": "number", + "nullable": false, + "name": "Mempool Expiration", + "description": "Do not keep transactions in the mempool longer than hours.", + "range": "[1,*)", + "integral": true, + "units": "Hr", + "default": 336 + } + } + }, + "peers": { + "type": "object", + "nullable": false, + "name": "Peers", + "description": "Peer Connection Settings", + "spec": { + "listen": { + "type": "boolean", + "name": "Make Public", + "description": "Allow other nodes to find your server on the network.", + "default": true + }, + "onlyconnect": { + "type": "boolean", + "name": "Disable Peer Discovery", + "description": "Only connect to specified peers.", + "default": false + }, + "onlyonion": { + "type": "boolean", + "name": "Disable Clearnet", + "description": "Only connect to peers over Tor.", + "default": false + }, + "addnode": { + "name": "Add Nodes", + "description": "Add addresses of nodes to connect to.", + "type": "list", + "subtype": "object", + "range": "[0,*)", + "default": [], + "spec": { + "type": "object", + "nullable": false, + "name": "Peer", + "description": "Peer to connect to", + "spec": { + "hostname": { + "type": "string", + "nullable": false, + "name": "Hostname", + "description": "Domain or IP address of bitcoin peer", + "pattern": "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", + "pattern-description": "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port." + }, + "port": { + "type": "number", + "nullable": true, + "name": "Port", + "description": "Port that peer is listening on for inbound p2p connections", + "range": "[0,65535]", + "integral": true + } + } + } + } + } + }, + "dbcache": { + "type": "number", + "nullable": true, + "name": "Database Cache", + "description": "How much RAM to allocate for caching the TXO set. Higher values improve syncing performance, but increase your chance of using up all your system's memory or corrupting your database in the event of an ungraceful shutdown. Set this high but comfortably below your system's total RAM during IBD, then turn down to 450 (or leave blank) once the sync completes.", + "warning": "WARNING: Increasing this value results in a higher chance of ungraceful shutdowns, which can leave your node unusable if it happens during the initial block download. Use this setting with caution. Be sure to set this back to the default (450 or leave blank) once your node is synced.", + "range": "(0,1024]", + "integral": true, + "units": "MiB" + }, + "pruning": { + "type": "union", + "name": "Pruning Settings", + "description": "Blockchain Pruning Options\nReduce the blockchain size on disk\n", + "warning": "If you set pruning to Manual and your disk is smaller than the total size of the blockchain, you MUST have something running that prunes these blocks or you may overfill your disk!\nDisabling pruning will convert your node into a full archival node. This requires a resync of the entire blockchain, a process that may take several days. Make sure you have enough free disk space or you may fill up your disk.\n", + "tag": { + "id": "mode", + "name": "Pruning Mode", + "description": "- Disabled: Disable pruning\n- Automatic: Limit blockchain size on disk to a certain number of megabytes\n- Manual: Prune blockchain with the \"pruneblockchain\" RPC\n", + "variant-names": { + "disabled": "Disabled", + "automatic": "Automatic", + "manual": "Manual" + } + }, + "variants": { + "disabled": {}, + "automatic": { + "size": { + "type": "number", + "nullable": false, + "name": "Max Chain Size", + "description": "Limit of blockchain size on disk.", + "warning": "Increasing this value will require re-syncing your node.", + "default": 550, + "range": "[550,1000000)", + "integral": true, + "units": "MiB" + } + }, + "manual": { + "size": { + "type": "number", + "nullable": false, + "name": "Failsafe Chain Size", + "description": "Prune blockchain if size expands beyond this.", + "default": 65536, + "range": "[550,1000000)", + "integral": true, + "units": "MiB" + } + } + }, + "default": "disabled" + }, + "blockfilters": { + "type": "object", + "name": "Block Filters", + "description": "Settings for storing and serving compact block filters", + "spec": { + "blockfilterindex": { + "type": "boolean", + "name": "Compute Compact Block Filters (BIP158)", + "description": "Generate Compact Block Filters during initial sync (IBD) to enable 'getblockfilter' RPC. This is useful if dependent services need block filters to efficiently scan for addresses/transactions etc.", + "default": false + }, + "peerblockfilters": { + "type": "boolean", + "name": "Serve Compact Block Filters to Peers (BIP157)", + "description": "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data.", + "default": false + } + } + }, + "bloomfilters": { + "type": "object", + "name": "Bloom Filters (BIP37)", + "description": "Setting for serving Bloom Filters", + "spec": { + "peerbloomfilters": { + "type": "boolean", + "name": "Serve Bloom Filters to Peers", + "description": "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", + "warning": "This is ONLY for use with Bisq integration, please use Block Filters for all other applications.", + "default": false + } + } + } + } + } + } as any + return { + result: { + config, + spec + } + } +} + + diff --git a/scripts/services/properties.ts b/scripts/services/properties.ts new file mode 100644 index 0000000..a97159c --- /dev/null +++ b/scripts/services/properties.ts @@ -0,0 +1,149 @@ +import { matches, Effects, YAML, ExpectedExports, PackagePropertiesV2, Properties } from "../deps.ts"; +import { lazy } from "../models/lazy.ts"; +import { setConfigMatcher } from "../models/setConfig.ts"; +import { getAlias } from "./getAlias.ts"; +const { shape, string, boolean } = matches; + +const nodeInfoMatcher = shape({ + id: string, + alias: string, +}, ['alias']); + +const propertiesConfigMatcher = shape({ + rpc: shape({ + enabled: boolean, + user: string, + password: string, + }), + advanced: shape({ + plugins: shape({ + rest: boolean, + }), + }), +}); + +export const properties: ExpectedExports.properties = async (effects: Effects) => { + const nodeInfo = nodeInfoMatcher.unsafeCast( + await effects.readJsonFile({ + volumeId: "main", + path: "start9/lightningGetInfo", + }) + ); + const peerTorAddress = await effects + .readFile({ + volumeId: "main", + path: "start9/peerTorAddress", + }) + .then((x) => x.trim()); + const config = setConfigMatcher.unsafeCast( + YAML.parse( + await effects.readFile({ + path: "start9/config.yaml", + volumeId: "main", + }) + ) + ); + const macaroonBase64 = lazy(() => + effects.readFile({ + path: "start9/access.macaroon.base64", + volumeId: "main", + }) + ); + const hexMacaroon = lazy(() => + effects.readFile({ + path: "start9/access.macaroon.hex", + volumeId: "main", + }) + ); + + const rpcProperties: PackagePropertiesV2 = !config.rpc.enabled + ? {} + : { + "Quick Connect URL": { + type: "string", + value: `clightning-rpc://${config.rpc.user}:${config.rpc.password}@${peerTorAddress}:8080`, + description: "A convenient way to connect a wallet to a remote node", + copyable: true, + qr: true, + masked: true, + }, + "RPC Username": { + type: "string", + value: config.rpc.user, + description: "Username for RPC connections", + copyable: true, + qr: false, + masked: true, + }, + "RPC Password": { + type: "string", + value: config.rpc.password, + description: "Password for RPC connections", + copyable: true, + qr: false, + masked: true, + }, + }; + + const restProperties: PackagePropertiesV2 = !config.advanced.plugins.rest + ? {} + : { + "Rest API Port": { + type: "string", + value: "3001", + description: "The port your c-lightning-REST API is listening on", + copyable: true, + qr: false, + masked: false, + }, + "Rest API Macaroon": { + type: "string", + value: await macaroonBase64.val(), + description: "The macaroon that grants access to your node's REST API plugin", + copyable: true, + qr: false, + masked: true, + }, + "Rest API Macaroon (Hex)": { + type: "string", + value: await hexMacaroon.val(), + description: "The macaroon that grants access to your node's REST API plugin, in hexadecimal format", + copyable: true, + qr: false, + masked: true, + }, + }; + const alias = await getAlias(effects, config) + const result: Properties = { + version: 2 as 2, + data: { + "Node Id": { + type: "string", + value: nodeInfo.id, + description: "The node identifier that can be used for connecting to other nodes", + copyable: true, + qr: false, + masked: false, + }, + "Node Uri": { + type: "string", + value: `${nodeInfo.id}@${peerTorAddress}`, + description: "Enables connecting to another remote node", + copyable: true, + qr: true, + masked: true, + }, + "Node Alias": { + type: "string", + value: alias, + description: "The friendly identifier for your node", + copyable: true, + qr: false, + masked: false, + }, + ...rpcProperties, + ...restProperties, + }, + }; + return { result } +} diff --git a/scripts/services/setConfig.ts b/scripts/services/setConfig.ts new file mode 100644 index 0000000..483999a --- /dev/null +++ b/scripts/services/setConfig.ts @@ -0,0 +1,21 @@ +import { ExpectedExports, Effects, Config, YAML, SetResult } from "../deps.ts"; + + + +export const setConfig: ExpectedExports.setConfig = async (effects: Effects, input: Config) => { + await effects.createDir({ + path: "start9", + volumeId: "main", + }); + await effects.writeFile({ + path: "start9/config.yaml", + toWrite: YAML.stringify(input), + volumeId: "main", + }); + + const result: SetResult = { + signal: "SIGTERM", + "depends-on": {}, + } + return { result }; +} diff --git a/scripts/test.ts b/scripts/test.ts new file mode 100644 index 0000000..9e88209 --- /dev/null +++ b/scripts/test.ts @@ -0,0 +1,40 @@ +import { setConfigMatcher } from "./models/setConfig.ts"; + +let badInput = { + "alias": null, + "color": "c9cd11", + "bitcoind": { "type": "internal-proxy", "user": null, "password": null }, + "rpc": { + "enabled": true, + "user": "lightning", + "password": "m5TFL0oFIiEySbgx8ioWqx", + }, + "advanced": { + "tor-only": false, + "fee-base": 1000, + "fee-rate": 1, + "min-capacity": 10000, + "ignore-fee-limits": false, + "funding-confirms": 3, + "cltv-delta": 40, + "wumbo-channels": false, + "experimental": { + "dual-fund": false, + "onion-messages": false, + "offers": false, + "shutdown-wrong-funding": false, + }, + "plugins": { + "http": true, + "rebalance": false, + "summary": false, + "rest": true, + }, + }, + "peer-tor-address": + "nvsmwoxem2eyxnr3adh7fepm2n53w6pq6dygjxlzxwcvxhd2oodgchid.onion", + "rpc-tor-address": + "owo7vbaveribz7setag36ezwy3xxg2asfdy3gjqddpttofhv7l7usyqd.onion", +}; + +setConfigMatcher.unsafeCast(badInput); From 565489fe69d25b1e120df67d6fc53afe40bae747 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Jun 2022 14:39:06 -0600 Subject: [PATCH 23/41] wip: properties --- manifest.yaml | 11 +- scripts/services/getConfig.ts | 15 +- scripts/services/properties.ts | 153 +++------------ scripts/test.ts | 82 ++++---- scripts/types.d.ts | 340 +++++++++++++++++++++++++++++++++ 5 files changed, 418 insertions(+), 183 deletions(-) create mode 100644 scripts/types.d.ts diff --git a/manifest.yaml b/manifest.yaml index b53e81c..9039318 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -59,16 +59,7 @@ config: set: type: script properties: - type: docker - image: compat - system: true - entrypoint: compat - args: - - properties - - /root/.bitcoin - mounts: - main: /root/.bitcoin - io-format: yaml + type: script volumes: main: type: data diff --git a/scripts/services/getConfig.ts b/scripts/services/getConfig.ts index 5c19613..67eb79b 100644 --- a/scripts/services/getConfig.ts +++ b/scripts/services/getConfig.ts @@ -1,4 +1,5 @@ -import { matches, YAML, ExpectedExports, ConfigRes } from "../deps.ts"; +import { matches, YAML, ExpectedExports, ConfigRes, ValueSpecAny } from "../deps.ts"; +import * as T from '../types.d.ts'; const { any, string, dictionary } = matches; @@ -37,7 +38,6 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { }, "rpc": { "type": "object", - "nullable": false, "name": "RPC Settings", "description": "RPC configuration options.", "spec": { @@ -73,7 +73,6 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { }, "advanced": { "type": "object", - "nullable": false, "name": "Advanced", "description": "Advanced RPC Settings", "spec": { @@ -88,7 +87,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "pattern-description": "Each item must be of the form \":$\"." }, "range": "[0,*)" - }, + } as any, "serialversion": { "name": "Serialization Version", "description": "Return raw transaction or block hex with Segwit or non-SegWit serialization.", @@ -97,6 +96,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "non-segwit", "segwit" ], + "value-names": {}, "default": "segwit" }, "servertimeout": { @@ -176,7 +176,6 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { }, "advanced": { "type": "object", - "nullable": false, "name": "Advanced", "description": "Advanced Settings", "spec": { @@ -215,7 +214,6 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { }, "peers": { "type": "object", - "nullable": false, "name": "Peers", "description": "Peer Connection Settings", "spec": { @@ -268,7 +266,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { } } } - } + } as any } }, "dbcache": { @@ -361,7 +359,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { } } } - } as any + } return { result: { config, @@ -370,4 +368,3 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { } } - diff --git a/scripts/services/properties.ts b/scripts/services/properties.ts index a97159c..6f8377a 100644 --- a/scripts/services/properties.ts +++ b/scripts/services/properties.ts @@ -1,41 +1,20 @@ import { matches, Effects, YAML, ExpectedExports, PackagePropertiesV2, Properties } from "../deps.ts"; import { lazy } from "../models/lazy.ts"; -import { setConfigMatcher } from "../models/setConfig.ts"; import { getAlias } from "./getAlias.ts"; -const { shape, string, boolean } = matches; +const { shape, string, boolean, dictionary, any } = matches; -const nodeInfoMatcher = shape({ - id: string, - alias: string, -}, ['alias']); -const propertiesConfigMatcher = shape({ - rpc: shape({ - enabled: boolean, - user: string, - password: string, - }), - advanced: shape({ - plugins: shape({ - rest: boolean, - }), - }), -}); +const matchConfig = dictionary([string, any]); export const properties: ExpectedExports.properties = async (effects: Effects) => { - const nodeInfo = nodeInfoMatcher.unsafeCast( - await effects.readJsonFile({ + return YAML.parse( + await effects.readFile({ + path: "start9/stats.yaml", volumeId: "main", - path: "start9/lightningGetInfo", }) - ); - const peerTorAddress = await effects - .readFile({ - volumeId: "main", - path: "start9/peerTorAddress", - }) - .then((x) => x.trim()); - const config = setConfigMatcher.unsafeCast( + ) as any + + const config = matchConfig.unsafeCast( YAML.parse( await effects.readFile({ path: "start9/config.yaml", @@ -43,107 +22,27 @@ export const properties: ExpectedExports.properties = async (effects: Effects) = }) ) ); - const macaroonBase64 = lazy(() => - effects.readFile({ - path: "start9/access.macaroon.base64", - volumeId: "main", - }) - ); - const hexMacaroon = lazy(() => - effects.readFile({ - path: "start9/access.macaroon.hex", - volumeId: "main", - }) - ); - - const rpcProperties: PackagePropertiesV2 = !config.rpc.enabled - ? {} - : { - "Quick Connect URL": { - type: "string", - value: `clightning-rpc://${config.rpc.user}:${config.rpc.password}@${peerTorAddress}:8080`, - description: "A convenient way to connect a wallet to a remote node", - copyable: true, - qr: true, - masked: true, - }, - "RPC Username": { - type: "string", - value: config.rpc.user, - description: "Username for RPC connections", - copyable: true, - qr: false, - masked: true, - }, - "RPC Password": { - type: "string", - value: config.rpc.password, - description: "Password for RPC connections", - copyable: true, - qr: false, - masked: true, - }, - }; - const restProperties: PackagePropertiesV2 = !config.advanced.plugins.rest - ? {} - : { - "Rest API Port": { - type: "string", - value: "3001", - description: "The port your c-lightning-REST API is listening on", - copyable: true, - qr: false, - masked: false, - }, - "Rest API Macaroon": { - type: "string", - value: await macaroonBase64.val(), - description: "The macaroon that grants access to your node's REST API plugin", - copyable: true, - qr: false, - masked: true, - }, - "Rest API Macaroon (Hex)": { - type: "string", - value: await hexMacaroon.val(), - description: "The macaroon that grants access to your node's REST API plugin, in hexadecimal format", - copyable: true, - qr: false, - masked: true, - }, - }; - const alias = await getAlias(effects, config) + /// TODO Fill this file during startup with the environment variables + const environmentVariables = matchConfig.unsafeCast( + YAML.parse( + await effects.readFile({ + path: "start9/environment.yaml", + volumeId: "main", + }) + ) + ); + const rpcAddress = environmentVariables['RPC_TOR_ADDRESS'] + const data: { [key: string]: any } = {}; + if (string.test(config?.rpc?.username) && string.test(config?.rpc?.password)) { + data['Tor Quick Connect'] = { + "value_type": "string", + value: `btcstandup://${config.rpc.username}:${config.rpc.password}@${rpcAddress}:8332` + } + } const result: Properties = { version: 2 as 2, - data: { - "Node Id": { - type: "string", - value: nodeInfo.id, - description: "The node identifier that can be used for connecting to other nodes", - copyable: true, - qr: false, - masked: false, - }, - "Node Uri": { - type: "string", - value: `${nodeInfo.id}@${peerTorAddress}`, - description: "Enables connecting to another remote node", - copyable: true, - qr: true, - masked: true, - }, - "Node Alias": { - type: "string", - value: alias, - description: "The friendly identifier for your node", - copyable: true, - qr: false, - masked: false, - }, - ...rpcProperties, - ...restProperties, - }, + data }; return { result } } diff --git a/scripts/test.ts b/scripts/test.ts index 9e88209..63610c8 100644 --- a/scripts/test.ts +++ b/scripts/test.ts @@ -1,40 +1,48 @@ -import { setConfigMatcher } from "./models/setConfig.ts"; +import { ValueSpecAny } from "./types.d.ts"; -let badInput = { - "alias": null, - "color": "c9cd11", - "bitcoind": { "type": "internal-proxy", "user": null, "password": null }, - "rpc": { - "enabled": true, - "user": "lightning", - "password": "m5TFL0oFIiEySbgx8ioWqx", - }, - "advanced": { - "tor-only": false, - "fee-base": 1000, - "fee-rate": 1, - "min-capacity": 10000, - "ignore-fee-limits": false, - "funding-confirms": 3, - "cltv-delta": 40, - "wumbo-channels": false, - "experimental": { - "dual-fund": false, - "onion-messages": false, - "offers": false, - "shutdown-wrong-funding": false, - }, - "plugins": { - "http": true, - "rebalance": false, - "summary": false, - "rest": true, - }, + +const auth: ValueSpecAny = { + "name": "Authorization", + "description": "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", + "type": "list", + "subtype": "string", + "default": [], + "spec": { + "pattern": "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", + "pattern-description": "Each item must be of the form \":$\"." }, - "peer-tor-address": - "nvsmwoxem2eyxnr3adh7fepm2n53w6pq6dygjxlzxwcvxhd2oodgchid.onion", - "rpc-tor-address": - "owo7vbaveribz7setag36ezwy3xxg2asfdy3gjqddpttofhv7l7usyqd.onion", -}; + "range": "[0,*)" +} -setConfigMatcher.unsafeCast(badInput); +const addNode: ValueSpecAny = { + "name": "Add Nodes", + "description": "Add addresses of nodes to connect to.", + "type": "list", + "subtype": "object", + "range": "[0,*)", + "default": [], + "spec": { + "type": "object", + "nullable": false, + "name": "Peer", + "description": "Peer to connect to", + "spec": { + "hostname": { + "type": "string", + "nullable": false, + "name": "Hostname", + "description": "Domain or IP address of bitcoin peer", + "pattern": "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", + "pattern-description": "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port." + }, + "port": { + "type": "number", + "nullable": true, + "name": "Port", + "description": "Port that peer is listening on for inbound p2p connections", + "range": "[0,65535]", + "integral": true + } + } + } +} \ No newline at end of file diff --git a/scripts/types.d.ts b/scripts/types.d.ts new file mode 100644 index 0000000..4903629 --- /dev/null +++ b/scripts/types.d.ts @@ -0,0 +1,340 @@ +export namespace ExpectedExports { + /** Set configuration is called after we have modified and saved the configuration in the embassy ui. Use this to make a file for the docker to read from for configuration. */ + export type setConfig = ( + effects: Effects, + input: Config, + ) => Promise>; + /** Get configuration returns a shape that describes the format that the embassy ui will generate, and later send to the set config */ + export type getConfig = (effects: Effects) => Promise>; + /** These are how we make sure the our dependency configurations are valid and if not how to fix them. */ + export type dependencies = Dependencies; + /** Properties are used to get values from the docker, like a username + password, what ports we are hosting from */ + export type properties = ( + effects: Effects, + ) => Promise>; +} + +/** Used to reach out from the pure js runtime */ +export type Effects = { + /** Usable when not sandboxed */ + writeFile( + input: { path: string; volumeId: string; toWrite: string }, + ): Promise; + readFile(input: { volumeId: string; path: string }): Promise; + /** Create a directory. Usable when not sandboxed */ + createDir(input: { volumeId: string; path: string }): Promise; + /** Remove a directory. Usable when not sandboxed */ + removeDir(input: { volumeId: string; path: string }): Promise; + removeFile(input: { volumeId: string; path: string }): Promise; + + /** Write a json file into an object. Usable when not sandboxed */ + writeJsonFile( + input: { volumeId: string; path: string; toWrite: object }, + ): Promise; + + /** Read a json file into an object */ + readJsonFile(input: { volumeId: string; path: string }): Promise; + + /** Log at the trace level */ + trace(whatToPrint: string): void; + /** Log at the warn level */ + warn(whatToPrint: string): void; + /** Log at the error level */ + error(whatToPrint: string): void; + /** Log at the debug level */ + debug(whatToPrint: string): void; + /** Log at the info level */ + info(whatToPrint: string): void; + + /** Sandbox mode lets us read but not write */ + is_sandboxed(): boolean; +}; + +export type ActionResult = { + version: "0"; + message: string; + value?: string; + copyable: boolean; + qr: boolean; +}; + +export type ConfigRes = { + /** This should be the previous config, that way during set config we start with the previous */ + config?: Config; + /** Shape that is describing the form in the ui */ + spec: ConfigSpec; +}; +export type Config = { + [propertyName: string]: any; +}; + +export type ConfigSpec = { + /** Given a config value, define what it should render with the following spec */ + [configValue: string]: ValueSpecAny; +}; +export type WithDefault = T & { + default?: Default; +}; + +export type WithDescription = T & { + description?: String; + name: string; + warning?: string; +}; + +export type ListSpec = { + spec: T; + range: string; +}; + +export type Tag = V & { + type: T; +}; + +export type Subtype = V & { + subtype: T; +}; + +export type Target = V & { + target: T; +}; + +export type UniqueBy = + | { + any: UniqueBy[]; + } + | string + | null; + +export type WithNullable = T & { + nullable: boolean; +}; +export type DefaultString = + | String + | { + /** The chars available for the randome generation */ + charset?: string; + /** Length that we generate to */ + len: number; + }; + +export type ValueSpecString = + & ( + | {} + | { + pattern: string; + "pattern-description": string; + } + ) + & { + copyable?: boolean; + masked?: boolean; + placeholder?: string; + }; +export type ValueSpecNumber = { + /** Something like [3,6] or [0, *) */ + range?: string; + integral?: boolean; + /** Used a description of the units */ + units?: string; + placeholder?: number; +}; +export type ValueSpecBoolean = {}; +export type ValueSpecAny = + | Tag<"boolean", WithDescription>> + | Tag< + "string", + WithDescription, DefaultString>> + > + | Tag< + "number", + WithDescription, number>> + > + | Tag< + "enum", + WithDescription< + WithDefault< + { + values: string[]; + "value-names"?: { + [key: string]: string; + }; + }, + string + > + > + > + | Tag<"list", ValueSpecList> + | Tag<"object", WithDescription>> + | Tag<"union", WithDescription>> + | Tag< + "pointer", + WithDescription< + | Subtype< + "package", + | Target< + "tor-key", + { + "package-id": string; + interface: string; + } + > + | Target< + "tor-address", + { + "package-id": string; + interface: string; + } + > + | Target< + "lan-address", + { + "package-id": string; + interface: string; + } + > + | Target< + "config", + { + "package-id": string; + selector: string; + multi: boolean; + } + > + > + | Subtype<"system", {}> + > + >; +export type ValueSpecUnion = { + /** What tag for the specification, for tag unions */ + tag: { + id: string; + name: string; + description?: string; + "variant-names": { + [key: string]: string; + }; + }; + /** The possible enum values */ + variants: { + [key: string]: ConfigSpec; + }; + "display-as"?: string; + "unique-by"?: UniqueBy; +}; +export type ValueSpecObject = { + spec: ConfigSpec; + "display-as"?: string; + "unique-by"?: UniqueBy; +}; +export type ValueSpecList = + | Subtype< + "boolean", + WithDescription, boolean>> + > + | Subtype< + "string", + WithDescription, string>> + > + | Subtype< + "number", + WithDescription, number>> + > + | Subtype< + "enum", + WithDescription< + WithDefault< + { + values: string[]; + "value-names"?: { + [key: string]: string; + }; + }, + string + > + > + > + | Subtype< + "object", + WithDescription> + >; + + +export type SetResult = { + /** These are the unix process signals */ + signal: + | "SIGTERM" + | "SIGHUP" + | "SIGINT" + | "SIGQUIT" + | "SIGILL" + | "SIGTRAP" + | "SIGABRT" + | "SIGBUS" + | "SIGFPE" + | "SIGKILL" + | "SIGUSR1" + | "SIGSEGV" + | "SIGUSR2" + | "SIGPIPE" + | "SIGALRM" + | "SIGSTKFLT" + | "SIGCHLD" + | "SIGCONT" + | "SIGSTOP" + | "SIGTSTP" + | "SIGTTIN" + | "SIGTTOU" + | "SIGURG" + | "SIGXCPU" + | "SIGXFSZ" + | "SIGVTALRM" + | "SIGPROF" + | "SIGWINCH" + | "SIGIO" + | "SIGPWR" + | "SIGSYS" + | "SIGEMT" + | "SIGINFO"; + "depends-on": { + [packageId: string]: string[]; + }; +}; + +export type KnownError = { error: String }; +export type ResultType = KnownError | { result: T }; + +export type PackagePropertiesV2 = { + [name: string]: PackagePropertyObject | PackagePropertyString; +}; +export type PackagePropertyString = { + type: "string"; + description?: string; + value: string; + /** Let's the ui make this copyable button */ + copyable?: boolean; + /** Let the ui create a qr for this field */ + qr?: boolean; + /** Hiding the value unless toggled off for field */ + masked?: boolean; +}; +export type PackagePropertyObject = { + value: PackagePropertiesV2; + type: "object"; + description: string; +}; + +export type Properties = { + version: 2; + data: PackagePropertiesV2; +}; + +export type Dependencies = { + /** Id is the id of the package, should be the same as the manifest */ + [id: string]: { + /** Checks are called to make sure that our dependency is in the correct shape. If a known error is returned we know that the dependency needs modification */ + check(effects: Effects, input: Config): Promise>; + /** This is called after we know that the dependency package needs a new configuration, this would be a transform for defaults */ + autoConfigure(effects: Effects, input: Config): Promise>; + }; +}; From ae5318dc26b033c351e0dd47ab3da13535ebf5e4 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Jun 2022 14:40:02 -0600 Subject: [PATCH 24/41] wip: Make the result --- scripts/services/properties.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/services/properties.ts b/scripts/services/properties.ts index 6f8377a..262ea72 100644 --- a/scripts/services/properties.ts +++ b/scripts/services/properties.ts @@ -7,12 +7,14 @@ const { shape, string, boolean, dictionary, any } = matches; const matchConfig = dictionary([string, any]); export const properties: ExpectedExports.properties = async (effects: Effects) => { - return YAML.parse( - await effects.readFile({ - path: "start9/stats.yaml", - volumeId: "main", - }) - ) as any + return { + result: YAML.parse( + await effects.readFile({ + path: "start9/stats.yaml", + volumeId: "main", + }) + ) as any + } const config = matchConfig.unsafeCast( YAML.parse( From b5f33a0b6968a669bdf0aed1a8a4755b82ed4c52 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Jun 2022 15:12:31 -0600 Subject: [PATCH 25/41] feat: properties + get + set in the js --- scripts/embassy.js | 1008 ++++++++++++------------------ scripts/embassy.ts | 1 - scripts/models/lazy.ts | 25 - scripts/models/setConfig.ts | 53 -- scripts/services/dependencies.ts | 161 ----- scripts/services/getAlias.ts | 23 - scripts/services/getConfig.ts | 8 +- scripts/services/properties.ts | 40 +- scripts/test.ts | 48 -- scripts/types.d.ts | 340 ---------- 10 files changed, 390 insertions(+), 1317 deletions(-) delete mode 100644 scripts/models/lazy.ts delete mode 100644 scripts/models/setConfig.ts delete mode 100644 scripts/services/dependencies.ts delete mode 100644 scripts/services/getAlias.ts delete mode 100644 scripts/test.ts delete mode 100644 scripts/types.d.ts diff --git a/scripts/embassy.js b/scripts/embassy.js index dbc6e16..3cbe10a 100644 --- a/scripts/embassy.js +++ b/scripts/embassy.js @@ -3576,7 +3576,7 @@ const DEPRECATED_BOOLEANS_SYNTAX = [ "OFF", ]; function encodeHex(character) { - const string6 = character.toString(16).toUpperCase(); + const string4 = character.toString(16).toUpperCase(); let handle; let length; if (character <= 0xff) { @@ -3591,18 +3591,18 @@ function encodeHex(character) { } else { throw new YAMLError("code point within a string may not be greater than 0xFFFFFFFF"); } - return `\\${handle}${repeat("0", length - string6.length)}${string6}`; + return `\\${handle}${repeat("0", length - string4.length)}${string4}`; } -function indentString(string7, spaces) { - const ind = repeat(" ", spaces), length = string7.length; +function indentString(string5, spaces) { + const ind = repeat(" ", spaces), length = string5.length; let position = 0, next = -1, result = "", line; while(position < length){ - next = string7.indexOf("\n", position); + next = string5.indexOf("\n", position); if (next === -1) { - line = string7.slice(position); + line = string5.slice(position); position = length; } else { - line = string7.slice(position, next + 1); + line = string5.slice(position, next + 1); position = next + 1; } if (line.length && line !== "\n") result += ind; @@ -3635,30 +3635,30 @@ function isPlainSafe(c) { function isPlainSafeFirst(c) { return isPrintable(c) && c !== 0xfeff && !isWhitespace(c) && c !== 0x2d && c !== 0x3f && c !== 0x3a && c !== 0x2c && c !== 0x5b && c !== 0x5d && c !== 0x7b && c !== 0x7d && c !== 0x23 && c !== 0x26 && c !== 0x2a && c !== 0x21 && c !== 0x7c && c !== 0x3e && c !== 0x27 && c !== 0x22 && c !== 0x25 && c !== 0x40 && c !== 0x60; } -function needIndentIndicator(string8) { +function needIndentIndicator(string6) { const leadingSpaceRe = /^\n* /; - return leadingSpaceRe.test(string8); + return leadingSpaceRe.test(string6); } const STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5; -function chooseScalarStyle(string9, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { +function chooseScalarStyle(string7, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { const shouldTrackWidth = lineWidth !== -1; - let hasLineBreak = false, hasFoldableLine = false, previousLineBreak = -1, plain = isPlainSafeFirst(string9.charCodeAt(0)) && !isWhitespace(string9.charCodeAt(string9.length - 1)); + let hasLineBreak = false, hasFoldableLine = false, previousLineBreak = -1, plain = isPlainSafeFirst(string7.charCodeAt(0)) && !isWhitespace(string7.charCodeAt(string7.length - 1)); let __char, i5; if (singleLineOnly) { - for(i5 = 0; i5 < string9.length; i5++){ - __char = string9.charCodeAt(i5); + for(i5 = 0; i5 < string7.length; i5++){ + __char = string7.charCodeAt(i5); if (!isPrintable(__char)) { return 5; } plain = plain && isPlainSafe(__char); } } else { - for(i5 = 0; i5 < string9.length; i5++){ - __char = string9.charCodeAt(i5); + for(i5 = 0; i5 < string7.length; i5++){ + __char = string7.charCodeAt(i5); if (__char === 0x0a) { hasLineBreak = true; if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || i5 - previousLineBreak - 1 > lineWidth && string9[previousLineBreak + 1] !== " "; + hasFoldableLine = hasFoldableLine || i5 - previousLineBreak - 1 > lineWidth && string7[previousLineBreak + 1] !== " "; previousLineBreak = i5; } } else if (!isPrintable(__char)) { @@ -3666,12 +3666,12 @@ function chooseScalarStyle(string9, singleLineOnly, indentPerLevel, lineWidth, t } plain = plain && isPlainSafe(__char); } - hasFoldableLine = hasFoldableLine || shouldTrackWidth && i5 - previousLineBreak - 1 > lineWidth && string9[previousLineBreak + 1] !== " "; + hasFoldableLine = hasFoldableLine || shouldTrackWidth && i5 - previousLineBreak - 1 > lineWidth && string7[previousLineBreak + 1] !== " "; } if (!hasLineBreak && !hasFoldableLine) { - return plain && !testAmbiguousType(string9) ? 1 : 2; + return plain && !testAmbiguousType(string7) ? 1 : 2; } - if (indentPerLevel > 9 && needIndentIndicator(string9)) { + if (indentPerLevel > 9 && needIndentIndicator(string7)) { return 5; } return hasFoldableLine ? 4 : 3; @@ -3699,21 +3699,21 @@ function foldLine(line, width) { } return result.slice(1); } -function dropEndingNewline(string10) { - return string10[string10.length - 1] === "\n" ? string10.slice(0, -1) : string10; +function dropEndingNewline(string8) { + return string8[string8.length - 1] === "\n" ? string8.slice(0, -1) : string8; } -function foldString(string11, width) { +function foldString(string9, width) { const lineRe = /(\n+)([^\n]*)/g; let result = (()=>{ - let nextLF = string11.indexOf("\n"); - nextLF = nextLF !== -1 ? nextLF : string11.length; + let nextLF = string9.indexOf("\n"); + nextLF = nextLF !== -1 ? nextLF : string9.length; lineRe.lastIndex = nextLF; - return foldLine(string11.slice(0, nextLF), width); + return foldLine(string9.slice(0, nextLF), width); })(); - let prevMoreIndented = string11[0] === "\n" || string11[0] === " "; + let prevMoreIndented = string9[0] === "\n" || string9[0] === " "; let moreIndented; let match; - while(match = lineRe.exec(string11)){ + while(match = lineRe.exec(string9)){ const prefix = match[1], line = match[2]; moreIndented = line[0] === " "; result += prefix + (!prevMoreIndented && !moreIndented && line !== "" ? "\n" : "") + foldLine(line, width); @@ -3721,14 +3721,14 @@ function foldString(string11, width) { } return result; } -function escapeString(string12) { +function escapeString(string10) { let result = ""; let __char, nextChar; let escapeSeq; - for(let i6 = 0; i6 < string12.length; i6++){ - __char = string12.charCodeAt(i6); + for(let i6 = 0; i6 < string10.length; i6++){ + __char = string10.charCodeAt(i6); if (__char >= 0xd800 && __char <= 0xdbff) { - nextChar = string12.charCodeAt(i6 + 1); + nextChar = string10.charCodeAt(i6 + 1); if (nextChar >= 0xdc00 && nextChar <= 0xdfff) { result += encodeHex((__char - 0xd800) * 0x400 + nextChar - 0xdc00 + 0x10000); i6++; @@ -3736,24 +3736,24 @@ function escapeString(string12) { } } escapeSeq = ESCAPE_SEQUENCES[__char]; - result += !escapeSeq && isPrintable(__char) ? string12[i6] : escapeSeq || encodeHex(__char); + result += !escapeSeq && isPrintable(__char) ? string10[i6] : escapeSeq || encodeHex(__char); } return result; } -function blockHeader(string13, indentPerLevel) { - const indentIndicator = needIndentIndicator(string13) ? String(indentPerLevel) : ""; - const clip = string13[string13.length - 1] === "\n"; - const keep = clip && (string13[string13.length - 2] === "\n" || string13 === "\n"); +function blockHeader(string11, indentPerLevel) { + const indentIndicator = needIndentIndicator(string11) ? String(indentPerLevel) : ""; + const clip = string11[string11.length - 1] === "\n"; + const keep = clip && (string11[string11.length - 2] === "\n" || string11 === "\n"); const chomp = keep ? "+" : clip ? "" : "-"; return `${indentIndicator}${chomp}\n`; } -function writeScalar(state, string14, level, iskey) { +function writeScalar(state, string12, level, iskey) { state.dump = (()=>{ - if (string14.length === 0) { + if (string12.length === 0) { return "''"; } - if (!state.noCompatMode && DEPRECATED_BOOLEANS_SYNTAX.indexOf(string14) !== -1) { - return `'${string14}'`; + if (!state.noCompatMode && DEPRECATED_BOOLEANS_SYNTAX.indexOf(string12) !== -1) { + return `'${string12}'`; } const indent = state.indent * Math.max(1, level); const lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); @@ -3761,17 +3761,17 @@ function writeScalar(state, string14, level, iskey) { function testAmbiguity(str3) { return testImplicitResolving(state, str3); } - switch(chooseScalarStyle(string14, singleLineOnly, state.indent, lineWidth, testAmbiguity)){ + switch(chooseScalarStyle(string12, singleLineOnly, state.indent, lineWidth, testAmbiguity)){ case STYLE_PLAIN: - return string14; + return string12; case STYLE_SINGLE: - return `'${string14.replace(/'/g, "''")}'`; + return `'${string12.replace(/'/g, "''")}'`; case STYLE_LITERAL: - return `|${blockHeader(string14, state.indent)}${dropEndingNewline(indentString(string14, indent))}`; + return `|${blockHeader(string12, state.indent)}${dropEndingNewline(indentString(string12, indent))}`; case STYLE_FOLDED: - return `>${blockHeader(string14, state.indent)}${dropEndingNewline(indentString(foldString(string14, lineWidth), indent))}`; + return `>${blockHeader(string12, state.indent)}${dropEndingNewline(indentString(foldString(string12, lineWidth), indent))}`; case STYLE_DOUBLE: - return `"${escapeString(string14)}"`; + return `"${escapeString(string12)}"`; default: throw new YAMLError("impossible error: invalid scalar style"); } @@ -4022,193 +4022,7 @@ const mod = { FAILSAFE_SCHEMA: failsafe, JSON_SCHEMA: json }; -const { literal: literal1 , shape: shape1 , number: number1 , string: string1 , some: some1 , boolean: __boolean1 } = matches; -const setConfigMatcher = shape1({ - "peer-tor-address": string1, - "rpc-tor-address": string1, - alias: string1.optional(), - color: string1, - bitcoind: some1(shape1({ - type: literal1("internal"), - user: string1.optional(), - password: string1.optional() - }), shape1({ - type: literal1("internal-proxy"), - user: string1.optional(), - password: string1.optional() - })), - rpc: shape1({ - enabled: __boolean1, - user: string1, - password: string1 - }), - advanced: shape1({ - "tor-only": __boolean1, - "fee-base": number1, - "fee-rate": number1, - "min-capacity": number1, - "ignore-fee-limits": __boolean1, - "funding-confirms": number1, - "cltv-delta": number1, - "wumbo-channels": __boolean1, - experimental: shape1({ - "dual-fund": __boolean1, - "onion-messages": __boolean1, - offers: __boolean1, - "shutdown-wrong-funding": __boolean1 - }), - plugins: shape1({ - http: __boolean1, - rebalance: __boolean1, - summary: __boolean1, - rest: __boolean1 - }) - }) -}, [ - "alias" -]); -async function getAlias(effects, config) { - if (!!config.alias) { - return config.alias; - } - try { - return await effects.readFile({ - volumeId: "main", - path: "default_alias.txt" - }); - } catch (e) { - const alias = `start9-${(Math.random().toString(36) + "00000000000000011").slice(2, 9 + 2)}`; - await effects.writeFile({ - volumeId: "main", - path: "default_alias.txt", - toWrite: alias - }); - return alias; - } -} -const { string: string2 , boolean: __boolean2 , shape: shape2 } = matches; -const matchConfig = shape2({ - advanced: shape2({ - experimental: shape2({ - "onion-messages": __boolean2, - offers: __boolean2 - }) - }) -}); -const configRules = [ - { - currentError (config) { - if (!matchConfig.test(config)) { - return "Config is not the correct shape"; - } - const hasOffers = config.advanced.experimental.offers; - const hasOnionMessagesAndOffers = config.advanced.experimental["onion-messages"] && hasOffers; - const doesntHaveOffers = !hasOffers; - if (hasOnionMessagesAndOffers || doesntHaveOffers) return; - return `You must enable 'Onion Messages' if you wish to enable 'Offers'`; - } - }, -]; -function checkConfigRules(config) { - for (const checker of configRules){ - const error = checker.currentError(config); - if (error) { - return { - error: error - }; - } - } -} -async function createWaitForService(effects, config) { - const { bitcoin_rpc_host , bitcoin_rpc_pass , bitcoin_rpc_port , bitcoin_rpc_user } = userInformation(config); - await effects.writeFile({ - path: "start9/waitForStart.sh", - toWrite: ` -#!/bin/sh -echo "Starting Wait for Bitcoin Start" -while true; do - bitcoin-cli -rpcconnect=${bitcoin_rpc_host} -rpcport=${bitcoin_rpc_port} -rpcuser=${bitcoin_rpc_user} -rpcpassword=${bitcoin_rpc_pass} getblockchaininfo > /dev/null - if [ $? -eq 0 ] - then - break - else - echo "Waiting for Bitcoin to start..." - sleep 1 - fi -done - `, - volumeId: "main" - }); -} -function userInformation(config) { - switch(config.bitcoind.type){ - case "internal": - return { - bitcoin_rpc_user: config.bitcoind.user, - bitcoin_rpc_pass: config.bitcoind.password, - bitcoin_rpc_host: "bitcoind.embassy", - bitcoin_rpc_port: 8332 - }; - case "internal-proxy": - return { - bitcoin_rpc_user: config.bitcoind.user, - bitcoin_rpc_pass: config.bitcoind.password, - bitcoin_rpc_host: "btc-rpc-proxy.embassy", - bitcoin_rpc_port: 8332 - }; - } -} -function configMaker(alias, config) { - const { bitcoin_rpc_host , bitcoin_rpc_pass , bitcoin_rpc_port , bitcoin_rpc_user } = userInformation(config); - const rpcBind = config.rpc.enabled ? "0.0.0.0:8080" : "127.0.0.1:8080"; - const enableWumbo = config.advanced["wumbo-channels"] ? "large-channels" : ""; - const enableExperimentalDualFund = config.advanced.experimental["dual-fund"] ? "experimental-dual-fund" : ""; - const enableExperimentalOnionMessages = config.advanced.experimental["onion-messages"] ? "experimental-onion-messages" : ""; - const enableExperimentalOffers = config.advanced.experimental.offers ? "experimental-offers" : ""; - const enableExperimentalShutdownWrongFunding = config.advanced.experimental["shutdown-wrong-funding"] ? "experimental-shutdown-wrong-funding" : ""; - const enableHttpPlugin = config.advanced.plugins.http ? "plugin=/usr/local/libexec/c-lightning/plugins/c-lightning-http-plugin" : ""; - const enableRebalancePlugin = config.advanced.plugins.rebalance ? "plugin=/usr/local/libexec/c-lightning/plugins/rebalance/rebalance.py" : ""; - const enableSummaryPlugin = config.advanced.plugins.summary ? "plugin=/usr/local/libexec/c-lightning/plugins/summary/summary.py" : ""; - const enableRestPlugin = config.advanced.plugins.rest ? "plugin=/usr/local/libexec/c-lightning/plugins/c-lightning-REST/plugin.js\nrest-port=3001\nrest-protocol=https\n" : ""; - return ` -network=bitcoin -bitcoin-rpcuser=${bitcoin_rpc_user} -bitcoin-rpcpassword=${bitcoin_rpc_pass} -bitcoin-rpcconnect=${bitcoin_rpc_host} -bitcoin-rpcport=${bitcoin_rpc_port} - -http-user=${config.rpc.user} -http-pass=${config.rpc.password} -http-bind=${rpcBind} -bind-addr=0.0.0.0:9735 -announce-addr=${config["peer-tor-address"]}:9735 -proxy={proxy} -always-use-proxy=${config.advanced["tor-only"]} - -alias=${alias} -rgb=${config.color} - -fee-base=${config.advanced["fee-base"]} -fee-per-satoshi=${config.advanced["fee-rate"]} -min-capacity-sat=${config.advanced["min-capacity"]} -ignore-fee-limits=${config.advanced["ignore-fee-limits"]} -funding-confirms=${config.advanced["funding-confirms"]} -cltv-delta=${config.advanced["cltv-delta"]} -${enableWumbo} -${enableExperimentalDualFund} -${enableExperimentalOnionMessages} -${enableExperimentalOffers} -${enableExperimentalShutdownWrongFunding} - -${enableHttpPlugin} -${enableRebalancePlugin} -${enableSummaryPlugin} -${enableRestPlugin}`; -} const setConfig = async (effects, input)=>{ - const config = setConfigMatcher.unsafeCast(input); - await checkConfigRules(config); - const alias = await getAlias(effects, config); await effects.createDir({ path: "start9", volumeId: "main" @@ -4218,12 +4032,6 @@ const setConfig = async (effects, input)=>{ toWrite: mod.stringify(input), volumeId: "main" }); - await effects.writeFile({ - path: "config.main", - toWrite: configMaker(alias, config), - volumeId: "main" - }); - await createWaitForService(effects, config); const result = { signal: "SIGTERM", "depends-on": {} @@ -4232,13 +4040,13 @@ const setConfig = async (effects, input)=>{ result }; }; -const { shape: shape3 , arrayOf: arrayOf1 , string: string3 , boolean: __boolean3 } = matches; -const matchProxyConfig = shape3({ - users: arrayOf1(shape3({ - name: string3, - "allowed-calls": arrayOf1(string3), - password: string3, - "fetch-blocks": __boolean3 +const { shape: shape1 , arrayOf: arrayOf1 , string: string1 , boolean: __boolean1 } = matches; +const matchProxyConfig = shape1({ + users: arrayOf1(shape1({ + name: string1, + "allowed-calls": arrayOf1(string1), + password: string1, + "fetch-blocks": __boolean1 }, [ "fetch-blocks" ])) @@ -4338,10 +4146,10 @@ const checks = [ } }, ]; -const matchBitcoindConfig = shape3({ - advanced: shape3({ - pruning: shape3({ - mode: string3 +const matchBitcoindConfig = shape1({ + advanced: shape1({ + pruning: shape1({ + mode: string1 }) }) }); @@ -4398,162 +4206,46 @@ const dependencies = { } } }; -const NOT_COMPUTED = Symbol("not_computed"); -function once(val) { - let computed = NOT_COMPUTED; - return ()=>{ - if (computed === NOT_COMPUTED) { - computed = val(); - } - return computed; - }; -} -function lazy_primative(val) { - return { - val, - map (next) { - return lazy(()=>next(val()) - ); - } - }; -} -const lazy = (x)=>lazy_primative(once(x)) -; -const { shape: shape4 , string: string4 , boolean: __boolean4 } = matches; -const nodeInfoMatcher = shape4({ - id: string4, - alias: string4 -}, [ - 'alias' +const { shape: shape2 , string: string2 , boolean: __boolean2 , dictionary: dictionary1 , any: any1 } = matches; +const matchConfig = dictionary1([ + string2, + any1 ]); -shape4({ - rpc: shape4({ - enabled: __boolean4, - user: string4, - password: string4 - }), - advanced: shape4({ - plugins: shape4({ - rest: __boolean4 - }) - }) -}); const properties = async (effects)=>{ - const nodeInfo = nodeInfoMatcher.unsafeCast(await effects.readJsonFile({ - volumeId: "main", - path: "start9/lightningGetInfo" - })); - const peerTorAddress = await effects.readFile({ - volumeId: "main", - path: "start9/peerTorAddress" - }).then((x)=>x.trim() - ); - const config = setConfigMatcher.unsafeCast(mod.parse(await effects.readFile({ + return { + result: mod.parse(await effects.readFile({ + path: "start9/stats.yaml", + volumeId: "main" + })) + }; + const config = matchConfig.unsafeCast(mod.parse(await effects.readFile({ path: "start9/config.yaml", volumeId: "main" }))); - const macaroonBase64 = lazy(()=>effects.readFile({ - path: "start9/access.macaroon.base64", - volumeId: "main" - }) - ); - const hexMacaroon = lazy(()=>effects.readFile({ - path: "start9/access.macaroon.hex", - volumeId: "main" - }) - ); - const rpcProperties = !config.rpc.enabled ? {} : { - "Quick Connect URL": { - type: "string", - value: `clightning-rpc://${config.rpc.user}:${config.rpc.password}@${peerTorAddress}:8080`, - description: "A convenient way to connect a wallet to a remote node", - copyable: true, - qr: true, - masked: true - }, - "RPC Username": { - type: "string", - value: config.rpc.user, - description: "Username for RPC connections", - copyable: true, - qr: false, - masked: true - }, - "RPC Password": { - type: "string", - value: config.rpc.password, - description: "Password for RPC connections", - copyable: true, - qr: false, - masked: true - } - }; - const restProperties = !config.advanced.plugins.rest ? {} : { - "Rest API Port": { - type: "string", - value: "3001", - description: "The port your c-lightning-REST API is listening on", - copyable: true, - qr: false, - masked: false - }, - "Rest API Macaroon": { - type: "string", - value: await macaroonBase64.val(), - description: "The macaroon that grants access to your node's REST API plugin", - copyable: true, - qr: false, - masked: true - }, - "Rest API Macaroon (Hex)": { - type: "string", - value: await hexMacaroon.val(), - description: "The macaroon that grants access to your node's REST API plugin, in hexadecimal format", - copyable: true, - qr: false, - masked: true - } - }; - const alias = await getAlias(effects, config); + const environmentVariables = matchConfig.unsafeCast(mod.parse(await effects.readFile({ + path: "start9/environment.yaml", + volumeId: "main" + }))); + const rpcAddress = environmentVariables['RPC_TOR_ADDRESS']; + const data = {}; + if (string2.test(config?.rpc?.username) && string2.test(config?.rpc?.password)) { + data['Tor Quick Connect'] = { + "value_type": "string", + value: `btcstandup://${config.rpc.username}:${config.rpc.password}@${rpcAddress}:8332` + }; + } const result = { version: 2, - data: { - "Node Id": { - type: "string", - value: nodeInfo.id, - description: "The node identifier that can be used for connecting to other nodes", - copyable: true, - qr: false, - masked: false - }, - "Node Uri": { - type: "string", - value: `${nodeInfo.id}@${peerTorAddress}`, - description: "Enables connecting to another remote node", - copyable: true, - qr: true, - masked: true - }, - "Node Alias": { - type: "string", - value: alias, - description: "The friendly identifier for your node", - copyable: true, - qr: false, - masked: false - }, - ...rpcProperties, - ...restProperties - } + data }; return { result }; }; -const { any: any1 , string: string5 , dictionary: dictionary1 } = matches; -const matchConfig1 = dictionary1([ - string5, - any1 +const { any: any2 , string: string3 , dictionary: dictionary2 } = matches; +const matchConfig1 = dictionary2([ + string3, + any2 ]); const getConfig = async (effects)=>{ const config = await effects.readFile({ @@ -4565,283 +4257,355 @@ const getConfig = async (effects)=>{ effects.warn(`Got error ${e} while trying to read the config`); return undefined; }); - return { - result: { - config, - spec: { - "peer-tor-address": { - "name": "Peer Tor Address", - "description": "The Tor address of the peer interface", - "type": "pointer", - "subtype": "package", - "package-id": "c-lightning", - "target": "tor-address", - "interface": "peer" - }, - "rpc-tor-address": { - "name": "RPC Tor Address", - "description": "The Tor address of the RPC interface", - "type": "pointer", - "subtype": "package", - "package-id": "c-lightning", - "target": "tor-address", - "interface": "rpc" + const spec = { + "peer-tor-address": { + "name": "Peer Tor Address", + "description": "The Tor address of the peer interface", + "type": "pointer", + "subtype": "package", + "package-id": "bitcoind", + "target": "tor-address", + "interface": "peer" + }, + "rpc-tor-address": { + "name": "RPC Tor Address", + "description": "The Tor address of the RPC interface", + "type": "pointer", + "subtype": "package", + "package-id": "bitcoind", + "target": "tor-address", + "interface": "rpc" + }, + "rpc": { + "type": "object", + "name": "RPC Settings", + "description": "RPC configuration options.", + "spec": { + "enable": { + "type": "boolean", + "name": "Enable", + "description": "Allow remote RPC requests.", + "default": true }, - "alias": { + "username": { "type": "string", - "name": "Alias", - "description": "Recognizable name for the Lightning Network", - "nullable": true, - "pattern": ".{1,32}", - "pattern-description": "Must be at least 1 character and no more than 32 characters" + "nullable": false, + "name": "Username", + "description": "The username for connecting to Bitcoin over RPC.", + "default": "bitcoin", + "masked": true, + "pattern": "^[a-zA-Z0-9_]+$", + "pattern-description": "Must be alphanumeric (can contain underscore)." }, - "color": { + "password": { "type": "string", - "name": "Color", - "description": "Color value for the Lightning Network", "nullable": false, - "pattern": "[0-9a-fA-F]{6}", - "pattern-description": "Must be a valid 6 digit hexadecimal RGB value. The first two digits are red, middle two are green and final two are\nblue\n", + "name": "RPC Password", + "description": "The password for connecting to Bitcoin over RPC.", "default": { - "charset": "a-f,0-9", - "len": 6 - } - }, - "bitcoind": { - "type": "union", - "name": "Bitcoin Core", - "description": "The Bitcoin Core node to connect to:\n - Internal (Bitcoin Core): The Bitcoin Core service installed to your Embassy\n - Internal (Bitcoin Proxy): The Bitcoin RPC Proxy service installed to your Embassy\n", - "tag": { - "id": "type", - "name": "Type", - "variant-names": { - "internal": "Internal (Bitcoin Core)", - "internal-proxy": "Internal (Bitcoin Proxy)" - }, - "description": "The Bitcoin Core node to connect to:\n - Internal (Bitcoin Core): The Bitcoin Core service installed to your Embassy\n - Internal (Bitcoin Proxy): The Bitcoin RPC Proxy service installed to your Embassy\n" + "charset": "a-z,2-7", + "len": 20 }, - "default": "internal-proxy", - "variants": { - "internal": { - "user": { - "type": "pointer", - "name": "RPC Username", - "description": "The username for Bitcoin Core's RPC interface", - "subtype": "package", - "package-id": "bitcoind", - "target": "config", - "multi": false, - "selector": "$.rpc.username" - }, - "password": { - "type": "pointer", - "name": "RPC Password", - "description": "The password for Bitcoin Core's RPC interface", - "subtype": "package", - "package-id": "bitcoind", - "target": "config", - "multi": false, - "selector": "$.rpc.password" - } - }, - "internal-proxy": { - "user": { - "type": "pointer", - "name": "RPC Username", - "description": "The username for the RPC user allocated to Core Lightning", - "subtype": "package", - "package-id": "btc-rpc-proxy", - "target": "config", - "selector": "$.users[?(@.name == \"c-lightning\")].name", - "multi": false - }, - "password": { - "type": "pointer", - "name": "RPC Password", - "description": "The password for the RPC user allocated to Core Lightning", - "subtype": "package", - "package-id": "btc-rpc-proxy", - "target": "config", - "selector": "$.users[?(@.name == \"c-lightning\")].password", - "multi": false - } - } - } - }, - "rpc": { - "type": "object", - "name": "RPC Options", - "description": "Options for the HTTP RPC interface", - "spec": { - "enabled": { - "type": "boolean", - "name": "Enable", - "description": "Whether to enable the RPC webserver", - "default": true - }, - "user": { - "type": "string", - "name": "RPC Username", - "description": "The username for the RPC user on your Core Lightning node", - "nullable": false, - "default": "lightning", - "copyable": true - }, - "password": { - "type": "string", - "name": "RPC Password", - "description": "The password for the RPC user on your Core Lightning node", - "nullable": false, - "default": { - "charset": "a-z,A-Z,0-9", - "len": 22 - }, - "copyable": true, - "masked": true - } - } + "pattern": "^[^\\n\"]*$", + "pattern-description": "Must not contain newline or quote characters.", + "copyable": true, + "masked": true }, "advanced": { "type": "object", "name": "Advanced", - "description": "Advanced Options", + "description": "Advanced RPC Settings", "spec": { - "tor-only": { - "type": "boolean", - "name": "Only Use Tor", - "description": "Use Tor for outgoing connections", - "default": false + "auth": { + "name": "Authorization", + "description": "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", + "type": "list", + "subtype": "string", + "default": [], + "spec": { + "pattern": "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", + "pattern-description": "Each item must be of the form \":$\"." + }, + "range": "[0,*)" }, - "fee-base": { + "serialversion": { + "name": "Serialization Version", + "description": "Return raw transaction or block hex with Segwit or non-SegWit serialization.", + "type": "enum", + "values": [ + "non-segwit", + "segwit" + ], + "value-names": {}, + "default": "segwit" + }, + "servertimeout": { + "name": "Rpc Server Timeout", + "description": "Number of seconds after which an uncompleted RPC call will time out.", "type": "number", - "name": "Routing Base Fee", - "description": "The base fee in millisatoshis you will charge for forwarding payments on your channels.\n", "nullable": false, - "range": "[0,*)", + "range": "[5,300]", "integral": true, - "default": 1000, - "units": "millisatoshis" + "units": "seconds", + "default": 30 }, - "fee-rate": { + "threads": { + "name": "Threads", + "description": "Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node.", "type": "number", - "name": "Routing Fee Rate", - "description": "The fee rate used when forwarding payments on your channels. The total fee charged is\nthe Base Fee + (amount * Fee Rate / 1,000,000), where the amount is the forwarded amount.\nMeasured in sats per million.\n", "nullable": false, - "range": "[1,1000000)", + "default": 4, + "range": "[1,64]", "integral": true, - "default": 1, - "units": "sats per million" + "units": undefined }, - "min-capacity": { + "workqueue": { + "name": "Work Queue", + "description": "Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones.", "type": "number", - "name": "Minimum Channel Capacity", - "description": "This value defines the minimal effective channel capacity in satoshis to accept for channel opening requests.\nThis will reject any opening of a channel which can't pass an HTLC of at least this value. Usually this prevents\na peer opening a tiny channel, but it can also prevent a channel you open with a reasonable amount and the peer\nis requesting such a large reserve that the capacity of the channel falls below this.\n", "nullable": false, - "range": "[1,16777215]", + "default": 128, + "range": "[8,256]", "integral": true, - "default": 10000, - "units": "satoshis" - }, - "ignore-fee-limits": { + "units": "requests" + } + } + } + } + }, + "zmq-enabled": { + "type": "boolean", + "name": "ZeroMQ Enabled", + "description": "Enable the ZeroMQ interface", + "default": true + }, + "txindex": { + "type": "boolean", + "name": "Transaction Index", + "description": "Enable the Transaction Index (txindex)", + "default": false + }, + "wallet": { + "type": "object", + "name": "Wallet", + "description": "Wallet Settings", + "spec": { + "enable": { + "name": "Enable Wallet", + "description": "Load the wallet and enable wallet RPC calls.", + "type": "boolean", + "default": true + }, + "avoidpartialspends": { + "name": "Avoid Partial Spends", + "description": "Group outputs by address, selecting all or none, instead of selecting on a per-output basis. This improves privacy at the expense of higher transaction fees.", + "type": "boolean", + "default": true + }, + "discardfee": { + "name": "Discard Change Tolerance", + "description": "The fee rate (in BTC/kB) that indicates your tolerance for discarding change by adding it to the fee.", + "type": "number", + "nullable": false, + "default": 0.0001, + "range": "[0,.01]", + "integral": false, + "units": "BTC/kB" + } + } + }, + "advanced": { + "type": "object", + "name": "Advanced", + "description": "Advanced Settings", + "spec": { + "mempool": { + "type": "object", + "name": "Mempool", + "description": "Mempool Settings", + "spec": { + "persistmempool": { "type": "boolean", - "name": "Ignore Fee Limits", - "description": "Allow nodes which establish channels to you to set any fee they want. This may result in a channel which cannot\nbe closed, should fees increase, but make channels far more reliable since Core Lightning will never close it due\nto unreasonable fees.\n", - "default": false + "name": "Persist Mempool", + "description": "Save the mempool on shutdown and load on restart.", + "default": true }, - "funding-confirms": { + "maxmempool": { "type": "number", - "name": "Required Funding Confirmations", - "description": "Confirmations required for the funding transaction when the other side opens a channel before the channel is\nusable.\n", "nullable": false, - "range": "[1,6]", + "name": "Max Mempool Size", + "description": "Keep the transaction memory pool below megabytes.", + "range": "[1,*)", "integral": true, - "default": 3, - "units": "blocks" + "units": "MiB", + "default": 300 }, - "cltv-delta": { + "mempoolexpiry": { "type": "number", - "name": "Time Lock Delta", - "description": "The number of blocks between the incoming payments and outgoing payments: this needs to be enough to make sure\nthat if it has to, Core Lightning can close the outgoing payment before the incoming, or redeem the incoming once\nthe outgoing is redeemed.\n", "nullable": false, - "range": "[6,144]", + "name": "Mempool Expiration", + "description": "Do not keep transactions in the mempool longer than hours.", + "range": "[1,*)", "integral": true, - "default": 40, - "units": "blocks" + "units": "Hr", + "default": 336 + } + } + }, + "peers": { + "type": "object", + "name": "Peers", + "description": "Peer Connection Settings", + "spec": { + "listen": { + "type": "boolean", + "name": "Make Public", + "description": "Allow other nodes to find your server on the network.", + "default": true + }, + "onlyconnect": { + "type": "boolean", + "name": "Disable Peer Discovery", + "description": "Only connect to specified peers.", + "default": false }, - "wumbo-channels": { + "onlyonion": { "type": "boolean", - "name": "Enable Wumbo Channels", - "description": "Removes capacity limits for channel creation. Version 1.0 of the specification limited channel sizes to 16777215\nsatoshis. With this option (which your node will advertise to peers), your node will accept larger incoming\nchannels and if the peer supports it, will open larger channels.\n\nWarning: This is #Reckless and you should not enable it unless you deeply understand the risks associated with\nthe Lightning Network.\n", + "name": "Disable Clearnet", + "description": "Only connect to peers over Tor.", "default": false }, - "experimental": { - "type": "object", - "name": "Experimental Features", - "description": "Experimental features that have not been standardized across Lightning Network implementations", - "change-warning": "These are experimental features. Enable them at your own risk. It is possible that software bugs can lead to\nunknown problems. We recommend not using them with large amounts of money. Unless you understand how these\nfeatures work, you should not enable them.\n", + "addnode": { + "name": "Add Nodes", + "description": "Add addresses of nodes to connect to.", + "type": "list", + "subtype": "object", + "range": "[0,*)", + "default": [], "spec": { - "dual-fund": { - "type": "boolean", - "name": "Dual Funding", - "description": "Enables the option to dual fund channels with other compatible lightning implementations using the v2\nchannel opening protocol\n", - "default": false - }, - "onion-messages": { - "type": "boolean", - "name": "Onion Messages", - "description": "Enable the sending, receiving, and relay of onion messages\n", - "default": false - }, - "offers": { - "type": "boolean", - "name": "Offers", - "description": "Enable the sending and receiving of offers (this requires Onion Messages to be enabled as well)\n", - "default": false - }, - "shutdown-wrong-funding": { - "type": "boolean", - "name": "Shutdown Wrong Funding", - "description": "Allow channel shutdown with alternate txids\n", - "default": false + "type": "object", + "nullable": false, + "name": "Peer", + "description": "Peer to connect to", + "spec": { + "hostname": { + "type": "string", + "nullable": false, + "name": "Hostname", + "description": "Domain or IP address of bitcoin peer", + "pattern": "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", + "pattern-description": "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port." + }, + "port": { + "type": "number", + "nullable": true, + "name": "Port", + "description": "Port that peer is listening on for inbound p2p connections", + "range": "[0,65535]", + "integral": true + } } } + } + } + }, + "dbcache": { + "type": "number", + "nullable": true, + "name": "Database Cache", + "description": "How much RAM to allocate for caching the TXO set. Higher values improve syncing performance, but increase your chance of using up all your system's memory or corrupting your database in the event of an ungraceful shutdown. Set this high but comfortably below your system's total RAM during IBD, then turn down to 450 (or leave blank) once the sync completes.", + "warning": "WARNING: Increasing this value results in a higher chance of ungraceful shutdowns, which can leave your node unusable if it happens during the initial block download. Use this setting with caution. Be sure to set this back to the default (450 or leave blank) once your node is synced.", + "range": "(0,1024]", + "integral": true, + "units": "MiB" + }, + "pruning": { + "type": "union", + "name": "Pruning Settings", + "description": "Blockchain Pruning Options\nReduce the blockchain size on disk\n", + "warning": "If you set pruning to Manual and your disk is smaller than the total size of the blockchain, you MUST have something running that prunes these blocks or you may overfill your disk!\nDisabling pruning will convert your node into a full archival node. This requires a resync of the entire blockchain, a process that may take several days. Make sure you have enough free disk space or you may fill up your disk.\n", + "tag": { + "id": "mode", + "name": "Pruning Mode", + "description": "- Disabled: Disable pruning\n- Automatic: Limit blockchain size on disk to a certain number of megabytes\n- Manual: Prune blockchain with the \"pruneblockchain\" RPC\n", + "variant-names": { + "disabled": "Disabled", + "automatic": "Automatic", + "manual": "Manual" + } + }, + "variants": { + "disabled": {}, + "automatic": { + "size": { + "type": "number", + "nullable": false, + "name": "Max Chain Size", + "description": "Limit of blockchain size on disk.", + "warning": "Increasing this value will require re-syncing your node.", + "default": 550, + "range": "[550,1000000)", + "integral": true, + "units": "MiB" + } }, - "plugins": { - "type": "object", - "name": "Plugins", - "description": "Plugins are subprocesses that provide extra functionality and run alongside the lightningd process inside \nthe main Core Lightning container in order to communicate directly with it.\nTheir source is maintained separately from that of Core Lightning itself.\n", - "spec": { - "http": { - "type": "boolean", - "name": "Enable C-Lightning-HTTP-Plugin", - "description": "This plugin is a direct proxy for the unix domain socket from the HTTP interface. \nIt is required for Spark Wallet to connect to Core Lightning.\n\nSource: https://github.com/Start9Labs/c-lightning-http-plugin\n", - "default": true - }, - "rebalance": { - "type": "boolean", - "name": "Enable Rebalance Plugin", - "description": "Enables the `rebalance` rpc command, which moves liquidity between your channels using circular payments.\nSee `help rebalance` on the CLI or in the Spark console for usage instructions.\n\nSource: https://github.com/lightningd/plugins/tree/master/rebalance\n", - "default": false - }, - "summary": { - "type": "boolean", - "name": "Enable Summary Plugin", - "description": "Enables the `summary` rpc command, which outputs a text summary of your node, including fiat amounts.\nCan be called via command line or the Spark console. \n\nSource: https://github.com/lightningd/plugins/tree/master/summary\n", - "default": false - }, - "rest": { - "type": "boolean", - "name": "Enable C-Lightning-REST Plugin", - "description": "This plugin exposes an LND-like REST API. It is required for Ride The Lighting to connect to Core Lightning.\n\nSource: https://github.com/Ride-The-Lightning/c-lightning-REST\n", - "default": true - } + "manual": { + "size": { + "type": "number", + "nullable": false, + "name": "Failsafe Chain Size", + "description": "Prune blockchain if size expands beyond this.", + "default": 65536, + "range": "[550,1000000)", + "integral": true, + "units": "MiB" } } + }, + "default": "disabled" + }, + "blockfilters": { + "type": "object", + "name": "Block Filters", + "description": "Settings for storing and serving compact block filters", + "spec": { + "blockfilterindex": { + "type": "boolean", + "name": "Compute Compact Block Filters (BIP158)", + "description": "Generate Compact Block Filters during initial sync (IBD) to enable 'getblockfilter' RPC. This is useful if dependent services need block filters to efficiently scan for addresses/transactions etc.", + "default": false + }, + "peerblockfilters": { + "type": "boolean", + "name": "Serve Compact Block Filters to Peers (BIP157)", + "description": "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data.", + "default": false + } + } + }, + "bloomfilters": { + "type": "object", + "name": "Bloom Filters (BIP37)", + "description": "Setting for serving Bloom Filters", + "spec": { + "peerbloomfilters": { + "type": "boolean", + "name": "Serve Bloom Filters to Peers", + "description": "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", + "warning": "This is ONLY for use with Bisq integration, please use Block Filters for all other applications.", + "default": false + } } } } } }; + return { + result: { + config, + spec + } + }; }; export { setConfig as setConfig }; export { dependencies as dependencies }; diff --git a/scripts/embassy.ts b/scripts/embassy.ts index 5a4c935..2106562 100644 --- a/scripts/embassy.ts +++ b/scripts/embassy.ts @@ -1,5 +1,4 @@ // @ts-check export { setConfig } from "./services/setConfig.ts"; -export { dependencies } from "./services/dependencies.ts"; export { properties } from "./services/properties.ts"; export { getConfig } from "./services/getConfig.ts"; diff --git a/scripts/models/lazy.ts b/scripts/models/lazy.ts deleted file mode 100644 index 5b2d3dd..0000000 --- a/scripts/models/lazy.ts +++ /dev/null @@ -1,25 +0,0 @@ -const NOT_COMPUTED = Symbol("not_computed"); -type Once = () => T; -function once(val: () => T) { - let computed: unknown = NOT_COMPUTED; - return (() => { - if (computed === NOT_COMPUTED) { - computed = val(); - } - return computed; - }) as Once; -} -function lazy_primative(val: () => T): Lazy { - return { - val, - map(next) { - return lazy(() => next(val())); - }, - }; -} - -export type Lazy = { - val(): T; - map(fn: (t: T) => U): Lazy; -}; -export const lazy = (x: () => T) => lazy_primative(once(x)); diff --git a/scripts/models/setConfig.ts b/scripts/models/setConfig.ts deleted file mode 100644 index a86637a..0000000 --- a/scripts/models/setConfig.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { matches } from "../deps.ts"; - -const { literal, shape, number, string, some, boolean } = matches; -export const setConfigMatcher = shape( - { - "peer-tor-address": string, - "rpc-tor-address": string, - alias: string.optional(), - color: string, - bitcoind: some( - shape({ - type: literal("internal"), - user: string.optional(), - password: string.optional(), - }), - shape({ - type: literal("internal-proxy"), - user: string.optional(), - password: string.optional(), - }) - ), - rpc: shape({ - enabled: boolean, - user: string, - password: string, - }), - advanced: shape({ - "tor-only": boolean, - "fee-base": number, - "fee-rate": number, - "min-capacity": number, - "ignore-fee-limits": boolean, - "funding-confirms": number, - "cltv-delta": number, - "wumbo-channels": boolean, - experimental: shape({ - "dual-fund": boolean, - "onion-messages": boolean, - offers: boolean, - "shutdown-wrong-funding": boolean, - }), - plugins: shape({ - http: boolean, - rebalance: boolean, - summary: boolean, - rest: boolean, - clboss: boolean, - }), - }), - }, - ["alias"] -); -export type SetConfig = typeof setConfigMatcher._TYPE; diff --git a/scripts/services/dependencies.ts b/scripts/services/dependencies.ts deleted file mode 100644 index 11c5b86..0000000 --- a/scripts/services/dependencies.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { ExpectedExports, Config, matches } from "../deps.ts"; - -const { shape, arrayOf, string, boolean } = matches; - -const matchProxyConfig = shape({ - users: arrayOf( - shape( - { - name: string, - "allowed-calls": arrayOf(string), - password: string, - "fetch-blocks": boolean, - }, - ["fetch-blocks"] - ) - ), -}); - -function times(fn: (i: number) => T, amount: number): T[] { - const answer = new Array(amount); - for (let i = 0; i < amount; i++) { - answer[i] = fn(i); - } - return answer; -} - -function randomItemString(input: string) { - return input[Math.floor(Math.random() * input.length)]; -} - -const serviceName = "c-lightning"; -const fullChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; -type Check = { - currentError(config: Config): string | void; - fix(config: Config): void; -}; - -const checks: Array = [ - { - currentError(config) { - if (!matchProxyConfig.test(config)) { - return "Config is not the correct shape"; - } - if (config.users.some((x) => x.name === serviceName)) { - return; - } - return `Must have an RPC user named "${serviceName}"`; - }, - fix(config) { - config.users.push({ - name: serviceName, - "allowed-calls": [], - password: times(() => randomItemString(fullChars), 22).join(""), - }); - }, - }, - ...[ - "echo", - "gettxout", - "getblockchaininfo", - "sendrawtransaction", - "getblockhash", - "getblock", - "getblockcount", - "estimatesmartfee", - "getnetworkinfo", - ].map( - (operator): Check => ({ - currentError(config) { - if (!matchProxyConfig.test(config)) { - return "Config is not the correct shape"; - } - if (config.users.find((x) => x.name === serviceName)?.["allowed-calls"]?.some((x) => x === operator) ?? false) { - return; - } - return `RPC user "c-lightning" must have "${operator}" enabled`; - }, - fix(config) { - if (!matchProxyConfig.test(config)) { - throw new Error("Config is not the correct shape"); - } - const found = config.users.find((x) => x.name === serviceName); - if (!found) { - throw new Error("Users for c-lightning should exist"); - } - found["allowed-calls"] = [...(found["allowed-calls"] ?? []), operator]; - }, - }) - ), - { - currentError(config) { - if (!matchProxyConfig.test(config)) { - return "Config is not the correct shape"; - } - if (config.users.find((x) => x.name === serviceName)?.["fetch-blocks"] ?? false) { - return; - } - return `RPC user "c-lightning" must have "Fetch Blocks" enabled`; - }, - fix(config) { - if (!matchProxyConfig.test(config)) { - throw new Error("Config is not the correct shape"); - } - const found = config.users.find((x) => x.name === serviceName); - if (!found) { - throw new Error("Users for c-lightning should exist"); - } - found["fetch-blocks"] = true; - }, - }, -]; - -const matchBitcoindConfig = shape({ - advanced: shape({ - pruning: shape({ - mode: string, - }), - }), -}); - -export const dependencies: ExpectedExports.dependencies = { - "btc-rpc-proxy": { - async check(effects, configInput) { - effects.info("check btc-rpc-proxy"); - for (const checker of checks) { - const error = checker.currentError(configInput); - if (error) { - effects.error(`throwing error: ${error}`); - return { error }; - } - } - return { result: null }; - }, - async autoConfigure(effects, configInput) { - effects.info("autoconfigure btc-rpc-proxy"); - for (const checker of checks) { - const error = checker.currentError(configInput); - if (error) { - checker.fix(configInput); - } - } - return { result: configInput }; - }, - }, - bitcoind: { - async check(effects, configInput) { - effects.info("check bitcoind"); - const config = matchBitcoindConfig.unsafeCast(configInput); - if (config.advanced.pruning.mode !== "disabled") { - return { error: 'Pruning must be disabled to use Bitcoin Core directly. To use with a pruned node, set Bitcoin Core to "Internal (Bitcoin Proxy)" instead.' }; - } - return { result: null }; - }, - async autoConfigure(effects, configInput) { - effects.info("autoconfigure bitcoind"); - const config = matchBitcoindConfig.unsafeCast(configInput); - config.advanced.pruning.mode = "disabled"; - return { result: config }; - }, - }, -}; diff --git a/scripts/services/getAlias.ts b/scripts/services/getAlias.ts deleted file mode 100644 index e8cae57..0000000 --- a/scripts/services/getAlias.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Effects, ExpectedExports } from "../deps.ts"; -import { SetConfig } from "../models/setConfig.ts"; - -export type Alias = string & { _type: "alias" }; -export async function getAlias(effects: Effects, config: SetConfig): Promise { - if (!!config.alias) { - return config.alias as Alias; - } - try { - return (await effects.readFile({ - volumeId: "main", - path: "default_alias.txt", - })) as Alias; - } catch (e) { - const alias = `start9-${(Math.random().toString(36) + "00000000000000011").slice(2, 9 + 2)}`; - await effects.writeFile({ - volumeId: "main", - path: "default_alias.txt", - toWrite: alias, - }); - return alias as Alias; - } -} \ No newline at end of file diff --git a/scripts/services/getConfig.ts b/scripts/services/getConfig.ts index 67eb79b..f46de9b 100644 --- a/scripts/services/getConfig.ts +++ b/scripts/services/getConfig.ts @@ -1,5 +1,4 @@ -import { matches, YAML, ExpectedExports, ConfigRes, ValueSpecAny } from "../deps.ts"; -import * as T from '../types.d.ts'; +import { matches, YAML, ExpectedExports, ConfigRes } from "../deps.ts"; const { any, string, dictionary } = matches; @@ -87,7 +86,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "pattern-description": "Each item must be of the form \":$\"." }, "range": "[0,*)" - } as any, + }, "serialversion": { "name": "Serialization Version", "description": "Return raw transaction or block hex with Segwit or non-SegWit serialization.", @@ -244,7 +243,6 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "default": [], "spec": { "type": "object", - "nullable": false, "name": "Peer", "description": "Peer to connect to", "spec": { @@ -266,7 +264,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { } } } - } as any + }, } }, "dbcache": { diff --git a/scripts/services/properties.ts b/scripts/services/properties.ts index 262ea72..914d8b3 100644 --- a/scripts/services/properties.ts +++ b/scripts/services/properties.ts @@ -1,10 +1,4 @@ -import { matches, Effects, YAML, ExpectedExports, PackagePropertiesV2, Properties } from "../deps.ts"; -import { lazy } from "../models/lazy.ts"; -import { getAlias } from "./getAlias.ts"; -const { shape, string, boolean, dictionary, any } = matches; - - -const matchConfig = dictionary([string, any]); +import { Effects, YAML, ExpectedExports } from "../deps.ts"; export const properties: ExpectedExports.properties = async (effects: Effects) => { return { @@ -15,36 +9,4 @@ export const properties: ExpectedExports.properties = async (effects: Effects) = }) ) as any } - - const config = matchConfig.unsafeCast( - YAML.parse( - await effects.readFile({ - path: "start9/config.yaml", - volumeId: "main", - }) - ) - ); - - /// TODO Fill this file during startup with the environment variables - const environmentVariables = matchConfig.unsafeCast( - YAML.parse( - await effects.readFile({ - path: "start9/environment.yaml", - volumeId: "main", - }) - ) - ); - const rpcAddress = environmentVariables['RPC_TOR_ADDRESS'] - const data: { [key: string]: any } = {}; - if (string.test(config?.rpc?.username) && string.test(config?.rpc?.password)) { - data['Tor Quick Connect'] = { - "value_type": "string", - value: `btcstandup://${config.rpc.username}:${config.rpc.password}@${rpcAddress}:8332` - } - } - const result: Properties = { - version: 2 as 2, - data - }; - return { result } } diff --git a/scripts/test.ts b/scripts/test.ts deleted file mode 100644 index 63610c8..0000000 --- a/scripts/test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ValueSpecAny } from "./types.d.ts"; - - -const auth: ValueSpecAny = { - "name": "Authorization", - "description": "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", - "type": "list", - "subtype": "string", - "default": [], - "spec": { - "pattern": "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", - "pattern-description": "Each item must be of the form \":$\"." - }, - "range": "[0,*)" -} - -const addNode: ValueSpecAny = { - "name": "Add Nodes", - "description": "Add addresses of nodes to connect to.", - "type": "list", - "subtype": "object", - "range": "[0,*)", - "default": [], - "spec": { - "type": "object", - "nullable": false, - "name": "Peer", - "description": "Peer to connect to", - "spec": { - "hostname": { - "type": "string", - "nullable": false, - "name": "Hostname", - "description": "Domain or IP address of bitcoin peer", - "pattern": "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", - "pattern-description": "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port." - }, - "port": { - "type": "number", - "nullable": true, - "name": "Port", - "description": "Port that peer is listening on for inbound p2p connections", - "range": "[0,65535]", - "integral": true - } - } - } -} \ No newline at end of file diff --git a/scripts/types.d.ts b/scripts/types.d.ts deleted file mode 100644 index 4903629..0000000 --- a/scripts/types.d.ts +++ /dev/null @@ -1,340 +0,0 @@ -export namespace ExpectedExports { - /** Set configuration is called after we have modified and saved the configuration in the embassy ui. Use this to make a file for the docker to read from for configuration. */ - export type setConfig = ( - effects: Effects, - input: Config, - ) => Promise>; - /** Get configuration returns a shape that describes the format that the embassy ui will generate, and later send to the set config */ - export type getConfig = (effects: Effects) => Promise>; - /** These are how we make sure the our dependency configurations are valid and if not how to fix them. */ - export type dependencies = Dependencies; - /** Properties are used to get values from the docker, like a username + password, what ports we are hosting from */ - export type properties = ( - effects: Effects, - ) => Promise>; -} - -/** Used to reach out from the pure js runtime */ -export type Effects = { - /** Usable when not sandboxed */ - writeFile( - input: { path: string; volumeId: string; toWrite: string }, - ): Promise; - readFile(input: { volumeId: string; path: string }): Promise; - /** Create a directory. Usable when not sandboxed */ - createDir(input: { volumeId: string; path: string }): Promise; - /** Remove a directory. Usable when not sandboxed */ - removeDir(input: { volumeId: string; path: string }): Promise; - removeFile(input: { volumeId: string; path: string }): Promise; - - /** Write a json file into an object. Usable when not sandboxed */ - writeJsonFile( - input: { volumeId: string; path: string; toWrite: object }, - ): Promise; - - /** Read a json file into an object */ - readJsonFile(input: { volumeId: string; path: string }): Promise; - - /** Log at the trace level */ - trace(whatToPrint: string): void; - /** Log at the warn level */ - warn(whatToPrint: string): void; - /** Log at the error level */ - error(whatToPrint: string): void; - /** Log at the debug level */ - debug(whatToPrint: string): void; - /** Log at the info level */ - info(whatToPrint: string): void; - - /** Sandbox mode lets us read but not write */ - is_sandboxed(): boolean; -}; - -export type ActionResult = { - version: "0"; - message: string; - value?: string; - copyable: boolean; - qr: boolean; -}; - -export type ConfigRes = { - /** This should be the previous config, that way during set config we start with the previous */ - config?: Config; - /** Shape that is describing the form in the ui */ - spec: ConfigSpec; -}; -export type Config = { - [propertyName: string]: any; -}; - -export type ConfigSpec = { - /** Given a config value, define what it should render with the following spec */ - [configValue: string]: ValueSpecAny; -}; -export type WithDefault = T & { - default?: Default; -}; - -export type WithDescription = T & { - description?: String; - name: string; - warning?: string; -}; - -export type ListSpec = { - spec: T; - range: string; -}; - -export type Tag = V & { - type: T; -}; - -export type Subtype = V & { - subtype: T; -}; - -export type Target = V & { - target: T; -}; - -export type UniqueBy = - | { - any: UniqueBy[]; - } - | string - | null; - -export type WithNullable = T & { - nullable: boolean; -}; -export type DefaultString = - | String - | { - /** The chars available for the randome generation */ - charset?: string; - /** Length that we generate to */ - len: number; - }; - -export type ValueSpecString = - & ( - | {} - | { - pattern: string; - "pattern-description": string; - } - ) - & { - copyable?: boolean; - masked?: boolean; - placeholder?: string; - }; -export type ValueSpecNumber = { - /** Something like [3,6] or [0, *) */ - range?: string; - integral?: boolean; - /** Used a description of the units */ - units?: string; - placeholder?: number; -}; -export type ValueSpecBoolean = {}; -export type ValueSpecAny = - | Tag<"boolean", WithDescription>> - | Tag< - "string", - WithDescription, DefaultString>> - > - | Tag< - "number", - WithDescription, number>> - > - | Tag< - "enum", - WithDescription< - WithDefault< - { - values: string[]; - "value-names"?: { - [key: string]: string; - }; - }, - string - > - > - > - | Tag<"list", ValueSpecList> - | Tag<"object", WithDescription>> - | Tag<"union", WithDescription>> - | Tag< - "pointer", - WithDescription< - | Subtype< - "package", - | Target< - "tor-key", - { - "package-id": string; - interface: string; - } - > - | Target< - "tor-address", - { - "package-id": string; - interface: string; - } - > - | Target< - "lan-address", - { - "package-id": string; - interface: string; - } - > - | Target< - "config", - { - "package-id": string; - selector: string; - multi: boolean; - } - > - > - | Subtype<"system", {}> - > - >; -export type ValueSpecUnion = { - /** What tag for the specification, for tag unions */ - tag: { - id: string; - name: string; - description?: string; - "variant-names": { - [key: string]: string; - }; - }; - /** The possible enum values */ - variants: { - [key: string]: ConfigSpec; - }; - "display-as"?: string; - "unique-by"?: UniqueBy; -}; -export type ValueSpecObject = { - spec: ConfigSpec; - "display-as"?: string; - "unique-by"?: UniqueBy; -}; -export type ValueSpecList = - | Subtype< - "boolean", - WithDescription, boolean>> - > - | Subtype< - "string", - WithDescription, string>> - > - | Subtype< - "number", - WithDescription, number>> - > - | Subtype< - "enum", - WithDescription< - WithDefault< - { - values: string[]; - "value-names"?: { - [key: string]: string; - }; - }, - string - > - > - > - | Subtype< - "object", - WithDescription> - >; - - -export type SetResult = { - /** These are the unix process signals */ - signal: - | "SIGTERM" - | "SIGHUP" - | "SIGINT" - | "SIGQUIT" - | "SIGILL" - | "SIGTRAP" - | "SIGABRT" - | "SIGBUS" - | "SIGFPE" - | "SIGKILL" - | "SIGUSR1" - | "SIGSEGV" - | "SIGUSR2" - | "SIGPIPE" - | "SIGALRM" - | "SIGSTKFLT" - | "SIGCHLD" - | "SIGCONT" - | "SIGSTOP" - | "SIGTSTP" - | "SIGTTIN" - | "SIGTTOU" - | "SIGURG" - | "SIGXCPU" - | "SIGXFSZ" - | "SIGVTALRM" - | "SIGPROF" - | "SIGWINCH" - | "SIGIO" - | "SIGPWR" - | "SIGSYS" - | "SIGEMT" - | "SIGINFO"; - "depends-on": { - [packageId: string]: string[]; - }; -}; - -export type KnownError = { error: String }; -export type ResultType = KnownError | { result: T }; - -export type PackagePropertiesV2 = { - [name: string]: PackagePropertyObject | PackagePropertyString; -}; -export type PackagePropertyString = { - type: "string"; - description?: string; - value: string; - /** Let's the ui make this copyable button */ - copyable?: boolean; - /** Let the ui create a qr for this field */ - qr?: boolean; - /** Hiding the value unless toggled off for field */ - masked?: boolean; -}; -export type PackagePropertyObject = { - value: PackagePropertiesV2; - type: "object"; - description: string; -}; - -export type Properties = { - version: 2; - data: PackagePropertiesV2; -}; - -export type Dependencies = { - /** Id is the id of the package, should be the same as the manifest */ - [id: string]: { - /** Checks are called to make sure that our dependency is in the correct shape. If a known error is returned we know that the dependency needs modification */ - check(effects: Effects, input: Config): Promise>; - /** This is called after we know that the dependency package needs a new configuration, this would be a transform for defaults */ - autoConfigure(effects: Effects, input: Config): Promise>; - }; -}; From afb395e35813ddd300d9ff89b231d11e83c01113 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Jun 2022 15:52:03 -0600 Subject: [PATCH 26/41] chore: Rest of the last of set config compat --- .gitignore | 3 +- scripts/deps.ts | 9 +- scripts/services/getConfig.ts | 212 +++++++++++++++++++-------------- scripts/services/properties.ts | 14 ++- scripts/services/setConfig.ts | 81 ++++++++++++- 5 files changed, 211 insertions(+), 108 deletions(-) diff --git a/.gitignore b/.gitignore index 91a1346..3b25710 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ manager/target/ **/*.rs.bk bitcoind.s9pk image.tar -.vscode/ \ No newline at end of file +.vscode/ +scripts/embassy.js \ No newline at end of file diff --git a/scripts/deps.ts b/scripts/deps.ts index 7ecbb3b..d64639e 100644 --- a/scripts/deps.ts +++ b/scripts/deps.ts @@ -1,13 +1,14 @@ import matches from "https://deno.land/x/ts_matches@5.1.5/mod.ts"; export * as YAML from "https://deno.land/std@0.140.0/encoding/yaml.ts"; export type { - ExpectedExports, Config, - Effects, PackagePropertiesV2, - Properties, + ConfigRes, + Effects, + ExpectedExports, KnownError, + PackagePropertiesV2, + Properties, SetResult, - ConfigRes, } from "https://start9.com/procedure/types.0.3.1.d.ts"; export { matches }; diff --git a/scripts/services/getConfig.ts b/scripts/services/getConfig.ts index f46de9b..34de4d5 100644 --- a/scripts/services/getConfig.ts +++ b/scripts/services/getConfig.ts @@ -1,4 +1,4 @@ -import { matches, YAML, ExpectedExports, ConfigRes } from "../deps.ts"; +import { ConfigRes, ExpectedExports, matches, YAML } from "../deps.ts"; const { any, string, dictionary } = matches; @@ -16,7 +16,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { effects.warn(`Got error ${e} while trying to read the config`); return undefined; }); - const spec: ConfigRes['spec'] = { + const spec: ConfigRes["spec"] = { "peer-tor-address": { "name": "Peer Tor Address", "description": "The Tor address of the peer interface", @@ -24,7 +24,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "subtype": "package", "package-id": "bitcoind", "target": "tor-address", - "interface": "peer" + "interface": "peer", }, "rpc-tor-address": { "name": "RPC Tor Address", @@ -33,7 +33,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "subtype": "package", "package-id": "bitcoind", "target": "tor-address", - "interface": "rpc" + "interface": "rpc", }, "rpc": { "type": "object", @@ -44,7 +44,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "type": "boolean", "name": "Enable", "description": "Allow remote RPC requests.", - "default": true + "default": true, }, "username": { "type": "string", @@ -54,7 +54,8 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "default": "bitcoin", "masked": true, "pattern": "^[a-zA-Z0-9_]+$", - "pattern-description": "Must be alphanumeric (can contain underscore)." + "pattern-description": + "Must be alphanumeric (can contain underscore).", }, "password": { "type": "string", @@ -63,12 +64,13 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "description": "The password for connecting to Bitcoin over RPC.", "default": { "charset": "a-z,2-7", - "len": 20 + "len": 20, }, - "pattern": "^[^\\n\"]*$", - "pattern-description": "Must not contain newline or quote characters.", + "pattern": '^[^\\n"]*$', + "pattern-description": + "Must not contain newline or quote characters.", "copyable": true, - "masked": true + "masked": true, }, "advanced": { "type": "object", @@ -77,72 +79,79 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "spec": { "auth": { "name": "Authorization", - "description": "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", + "description": + "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", "type": "list", "subtype": "string", "default": [], "spec": { - "pattern": "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", - "pattern-description": "Each item must be of the form \":$\"." + "pattern": + "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", + "pattern-description": + 'Each item must be of the form ":$".', }, - "range": "[0,*)" + "range": "[0,*)", }, "serialversion": { "name": "Serialization Version", - "description": "Return raw transaction or block hex with Segwit or non-SegWit serialization.", + "description": + "Return raw transaction or block hex with Segwit or non-SegWit serialization.", "type": "enum", "values": [ "non-segwit", - "segwit" + "segwit", ], "value-names": {}, - "default": "segwit" + "default": "segwit", }, "servertimeout": { "name": "Rpc Server Timeout", - "description": "Number of seconds after which an uncompleted RPC call will time out.", + "description": + "Number of seconds after which an uncompleted RPC call will time out.", "type": "number", "nullable": false, "range": "[5,300]", "integral": true, "units": "seconds", - "default": 30 + "default": 30, }, "threads": { "name": "Threads", - "description": "Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node.", + "description": + "Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node.", "type": "number", "nullable": false, "default": 4, "range": "[1,64]", "integral": true, - "units": undefined + "units": undefined, }, "workqueue": { "name": "Work Queue", - "description": "Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones.", + "description": + "Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones.", "type": "number", "nullable": false, "default": 128, "range": "[8,256]", "integral": true, - "units": "requests" - } - } - } - } + "units": "requests", + }, + }, + }, + }, }, "zmq-enabled": { "type": "boolean", "name": "ZeroMQ Enabled", "description": "Enable the ZeroMQ interface", - "default": true + "default": true, }, "txindex": { "type": "boolean", "name": "Transaction Index", "description": "Enable the Transaction Index (txindex)", - "default": false + "default": false, }, "wallet": { "type": "object", @@ -153,25 +162,27 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "name": "Enable Wallet", "description": "Load the wallet and enable wallet RPC calls.", "type": "boolean", - "default": true + "default": true, }, "avoidpartialspends": { "name": "Avoid Partial Spends", - "description": "Group outputs by address, selecting all or none, instead of selecting on a per-output basis. This improves privacy at the expense of higher transaction fees.", + "description": + "Group outputs by address, selecting all or none, instead of selecting on a per-output basis. This improves privacy at the expense of higher transaction fees.", "type": "boolean", - "default": true + "default": true, }, "discardfee": { "name": "Discard Change Tolerance", - "description": "The fee rate (in BTC/kB) that indicates your tolerance for discarding change by adding it to the fee.", + "description": + "The fee rate (in BTC/kB) that indicates your tolerance for discarding change by adding it to the fee.", "type": "number", "nullable": false, "default": 0.0001, "range": "[0,.01]", "integral": false, - "units": "BTC/kB" - } - } + "units": "BTC/kB", + }, + }, }, "advanced": { "type": "object", @@ -186,30 +197,33 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "persistmempool": { "type": "boolean", "name": "Persist Mempool", - "description": "Save the mempool on shutdown and load on restart.", - "default": true + "description": + "Save the mempool on shutdown and load on restart.", + "default": true, }, "maxmempool": { "type": "number", "nullable": false, "name": "Max Mempool Size", - "description": "Keep the transaction memory pool below megabytes.", + "description": + "Keep the transaction memory pool below megabytes.", "range": "[1,*)", "integral": true, "units": "MiB", - "default": 300 + "default": 300, }, "mempoolexpiry": { "type": "number", "nullable": false, "name": "Mempool Expiration", - "description": "Do not keep transactions in the mempool longer than hours.", + "description": + "Do not keep transactions in the mempool longer than hours.", "range": "[1,*)", "integral": true, "units": "Hr", - "default": 336 - } - } + "default": 336, + }, + }, }, "peers": { "type": "object", @@ -219,20 +233,21 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "listen": { "type": "boolean", "name": "Make Public", - "description": "Allow other nodes to find your server on the network.", - "default": true + "description": + "Allow other nodes to find your server on the network.", + "default": true, }, "onlyconnect": { "type": "boolean", "name": "Disable Peer Discovery", "description": "Only connect to specified peers.", - "default": false + "default": false, }, "onlyonion": { "type": "boolean", "name": "Disable Clearnet", "description": "Only connect to peers over Tor.", - "default": false + "default": false, }, "addnode": { "name": "Add Nodes", @@ -251,46 +266,54 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "nullable": false, "name": "Hostname", "description": "Domain or IP address of bitcoin peer", - "pattern": "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", - "pattern-description": "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port." + "pattern": + "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", + "pattern-description": + "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port.", }, "port": { "type": "number", "nullable": true, "name": "Port", - "description": "Port that peer is listening on for inbound p2p connections", + "description": + "Port that peer is listening on for inbound p2p connections", "range": "[0,65535]", - "integral": true - } - } - } + "integral": true, + }, + }, + }, }, - } + }, }, "dbcache": { "type": "number", "nullable": true, "name": "Database Cache", - "description": "How much RAM to allocate for caching the TXO set. Higher values improve syncing performance, but increase your chance of using up all your system's memory or corrupting your database in the event of an ungraceful shutdown. Set this high but comfortably below your system's total RAM during IBD, then turn down to 450 (or leave blank) once the sync completes.", - "warning": "WARNING: Increasing this value results in a higher chance of ungraceful shutdowns, which can leave your node unusable if it happens during the initial block download. Use this setting with caution. Be sure to set this back to the default (450 or leave blank) once your node is synced.", + "description": + "How much RAM to allocate for caching the TXO set. Higher values improve syncing performance, but increase your chance of using up all your system's memory or corrupting your database in the event of an ungraceful shutdown. Set this high but comfortably below your system's total RAM during IBD, then turn down to 450 (or leave blank) once the sync completes.", + "warning": + "WARNING: Increasing this value results in a higher chance of ungraceful shutdowns, which can leave your node unusable if it happens during the initial block download. Use this setting with caution. Be sure to set this back to the default (450 or leave blank) once your node is synced.", "range": "(0,1024]", "integral": true, - "units": "MiB" + "units": "MiB", }, "pruning": { "type": "union", "name": "Pruning Settings", - "description": "Blockchain Pruning Options\nReduce the blockchain size on disk\n", - "warning": "If you set pruning to Manual and your disk is smaller than the total size of the blockchain, you MUST have something running that prunes these blocks or you may overfill your disk!\nDisabling pruning will convert your node into a full archival node. This requires a resync of the entire blockchain, a process that may take several days. Make sure you have enough free disk space or you may fill up your disk.\n", + "description": + "Blockchain Pruning Options\nReduce the blockchain size on disk\n", + "warning": + "If you set pruning to Manual and your disk is smaller than the total size of the blockchain, you MUST have something running that prunes these blocks or you may overfill your disk!\nDisabling pruning will convert your node into a full archival node. This requires a resync of the entire blockchain, a process that may take several days. Make sure you have enough free disk space or you may fill up your disk.\n", "tag": { "id": "mode", "name": "Pruning Mode", - "description": "- Disabled: Disable pruning\n- Automatic: Limit blockchain size on disk to a certain number of megabytes\n- Manual: Prune blockchain with the \"pruneblockchain\" RPC\n", + "description": + '- Disabled: Disable pruning\n- Automatic: Limit blockchain size on disk to a certain number of megabytes\n- Manual: Prune blockchain with the "pruneblockchain" RPC\n', "variant-names": { "disabled": "Disabled", "automatic": "Automatic", - "manual": "Manual" - } + "manual": "Manual", + }, }, "variants": { "disabled": {}, @@ -300,12 +323,13 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "nullable": false, "name": "Max Chain Size", "description": "Limit of blockchain size on disk.", - "warning": "Increasing this value will require re-syncing your node.", + "warning": + "Increasing this value will require re-syncing your node.", "default": 550, "range": "[550,1000000)", "integral": true, - "units": "MiB" - } + "units": "MiB", + }, }, "manual": { "size": { @@ -316,30 +340,33 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "default": 65536, "range": "[550,1000000)", "integral": true, - "units": "MiB" - } - } + "units": "MiB", + }, + }, }, - "default": "disabled" + "default": "disabled", }, "blockfilters": { "type": "object", "name": "Block Filters", - "description": "Settings for storing and serving compact block filters", + "description": + "Settings for storing and serving compact block filters", "spec": { "blockfilterindex": { "type": "boolean", "name": "Compute Compact Block Filters (BIP158)", - "description": "Generate Compact Block Filters during initial sync (IBD) to enable 'getblockfilter' RPC. This is useful if dependent services need block filters to efficiently scan for addresses/transactions etc.", - "default": false + "description": + "Generate Compact Block Filters during initial sync (IBD) to enable 'getblockfilter' RPC. This is useful if dependent services need block filters to efficiently scan for addresses/transactions etc.", + "default": false, }, "peerblockfilters": { "type": "boolean", "name": "Serve Compact Block Filters to Peers (BIP157)", - "description": "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data.", - "default": false - } - } + "description": + "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data.", + "default": false, + }, + }, }, "bloomfilters": { "type": "object", @@ -349,20 +376,21 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "peerbloomfilters": { "type": "boolean", "name": "Serve Bloom Filters to Peers", - "description": "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", - "warning": "This is ONLY for use with Bisq integration, please use Block Filters for all other applications.", - "default": false - } - } - } - } - } - } + "description": + "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", + "warning": + "This is ONLY for use with Bisq integration, please use Block Filters for all other applications.", + "default": false, + }, + }, + }, + }, + }, + }; return { result: { config, - spec - } - } -} - + spec, + }, + }; +}; diff --git a/scripts/services/properties.ts b/scripts/services/properties.ts index 914d8b3..1e52afd 100644 --- a/scripts/services/properties.ts +++ b/scripts/services/properties.ts @@ -1,12 +1,14 @@ -import { Effects, YAML, ExpectedExports } from "../deps.ts"; +import { Effects, ExpectedExports, YAML } from "../deps.ts"; -export const properties: ExpectedExports.properties = async (effects: Effects) => { +export const properties: ExpectedExports.properties = async ( + effects: Effects, +) => { return { result: YAML.parse( await effects.readFile({ path: "start9/stats.yaml", volumeId: "main", - }) - ) as any - } -} + }), + ) as any, + }; +}; diff --git a/scripts/services/setConfig.ts b/scripts/services/setConfig.ts index 483999a..38dbaa9 100644 --- a/scripts/services/setConfig.ts +++ b/scripts/services/setConfig.ts @@ -1,21 +1,92 @@ -import { ExpectedExports, Effects, Config, YAML, SetResult } from "../deps.ts"; +import { + Config, + Effects, + ExpectedExports, + matches, + SetResult, + YAML, +} from "../deps.ts"; +const { number } = matches; +export const setConfig: ExpectedExports.setConfig = async ( + effects: Effects, + newConfig: Config, +) => { + if (!(newConfig?.rpc?.enable || !(newConfig.advanced?.mode === "manual"))) { + return { + error: "RPC must be enabled for manual.", + }; + } + if ( + !(!newConfig.txindex || (newConfig.advanced?.pruning?.mode === "disabled")) + ) { + return { + error: "Txindex not allowed on pruned nodes.", + }; + } + if ( + !(!newConfig.advanced.blockfilters.peerblockfilters || + (newConfig.advanced.blockfilters.blockfilterindex)) + ) { + return { + error: + "'Compute Compact Block Filters' must be enabled if 'Serve Comopact Block Filters to Peers' is enabled.", + }; + } + + // config-set.sh + const oldConfig = await effects.readFile({ + path: "start9/config.yaml", + volumeId: "main", + }).catch(() => ""); + if (oldConfig) { + await effects.writeFile({ + path: "start9/config-old.yaml", + toWrite: oldConfig, + volumeId: "main", + }); + const oldConfigParsed = YAML.parse(oldConfig) as any; + const oldPruningTl = oldConfigParsed?.advanced?.pruning?.mode; + let oldPruningSize = 0; + if (oldPruningTl !== "disabled") { + oldPruningSize = number.unsafeCast( + oldConfigParsed?.advanced?.pruning?.size, + ); + } + const newPruningTl = newConfig.advanced.pruning.mode; + let newPruningSize = 0; + if (newPruningTl !== "disabled") { + newPruningSize = number.unsafeCast(newConfig?.advanced?.pruning?.size); + } + if (oldPruningTl == "disabled") effects.debug("No reindex required"); + else if ( + oldPruningTl === newPruningTl && oldPruningSize >= newPruningSize + ) { + effects.debug("No reindex required"); + } else { + effects.debug("Reindex required"); + await effects.writeFile({ + path: "start9/requires.reindex", + toWrite: "", + volumeId: "main", + }); + } + } -export const setConfig: ExpectedExports.setConfig = async (effects: Effects, input: Config) => { await effects.createDir({ path: "start9", volumeId: "main", }); await effects.writeFile({ path: "start9/config.yaml", - toWrite: YAML.stringify(input), + toWrite: YAML.stringify(newConfig), volumeId: "main", }); const result: SetResult = { signal: "SIGTERM", "depends-on": {}, - } + }; return { result }; -} +}; From 6b2589274e215971c3256ed40ea992c4e9044288 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Jun 2022 15:54:32 -0600 Subject: [PATCH 27/41] chore: reindex if no previous config --- scripts/services/setConfig.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/services/setConfig.ts b/scripts/services/setConfig.ts index 38dbaa9..762a517 100644 --- a/scripts/services/setConfig.ts +++ b/scripts/services/setConfig.ts @@ -72,6 +72,14 @@ export const setConfig: ExpectedExports.setConfig = async ( volumeId: "main", }); } + } else { + + effects.debug("Reindex required"); + await effects.writeFile({ + path: "start9/requires.reindex", + toWrite: "", + volumeId: "main", + }); } await effects.createDir({ From 27c7dd4d9fab4a206286d7f5834e4523093c88df Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Jun 2022 16:08:18 -0600 Subject: [PATCH 28/41] chore: better make --- Makefile | 6 ++++-- scripts/services/setConfig.ts | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8032d6a..54e3f2f 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ clean: rm bitcoind.s9pk rm image.tar -bitcoind.s9pk: manifest.yaml assets/compat/* image.tar instructions.md +bitcoind.s9pk: manifest.yaml assets/compat/* image.tar instructions.md scripts/embassy.js embassy-sdk pack verify: bitcoind.s9pk @@ -21,7 +21,9 @@ install: bitcoind.s9pk image.tar: Dockerfile docker_entrypoint.sh manager/target/aarch64-unknown-linux-musl/release/bitcoind-manager manifest.yaml check-rpc.sh check-synced.sh migrations/* actions/* DOCKER_CLI_EXPERIMENTAL=enabled docker buildx build --tag start9/bitcoind/main:$(VERSION_S9) --build-arg BITCOIN_VERSION=$(VERSION_CORE) --build-arg N_PROC=$(shell expr $(shell nproc) - 1) --platform=linux/arm64 -o type=docker,dest=image.tar . - deno bundle scripts/embassy.ts scripts/embassy.js manager/target/aarch64-unknown-linux-musl/release/bitcoind-manager: $(MANAGER_SRC) docker run --rm -it -v ~/.cargo/registry:/root/.cargo/registry -v "$(shell pwd)"/manager:/home/rust/src start9/rust-musl-cross:aarch64-musl cargo build --release + +scripts/embassy.js: scripts/**/*.ts + deno bundle scripts/embassy.ts scripts/embassy.js \ No newline at end of file diff --git a/scripts/services/setConfig.ts b/scripts/services/setConfig.ts index 762a517..2d28315 100644 --- a/scripts/services/setConfig.ts +++ b/scripts/services/setConfig.ts @@ -24,6 +24,7 @@ export const setConfig: ExpectedExports.setConfig = async ( error: "Txindex not allowed on pruned nodes.", }; } + // true, false only fail case if ( !(!newConfig.advanced.blockfilters.peerblockfilters || (newConfig.advanced.blockfilters.blockfilterindex)) From 222019f1c3739313a1470d1121aeb4080e0e4e68 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Jun 2022 16:18:43 -0600 Subject: [PATCH 29/41] chore: fix makefile --- Makefile | 2 +- scripts/embassy.js | 4613 -------------------------------------------- 2 files changed, 1 insertion(+), 4614 deletions(-) delete mode 100644 scripts/embassy.js diff --git a/Makefile b/Makefile index 54e3f2f..41adc4b 100644 --- a/Makefile +++ b/Makefile @@ -26,4 +26,4 @@ manager/target/aarch64-unknown-linux-musl/release/bitcoind-manager: $(MANAGER_SR docker run --rm -it -v ~/.cargo/registry:/root/.cargo/registry -v "$(shell pwd)"/manager:/home/rust/src start9/rust-musl-cross:aarch64-musl cargo build --release scripts/embassy.js: scripts/**/*.ts - deno bundle scripts/embassy.ts scripts/embassy.js \ No newline at end of file + deno bundle scripts/embassy.ts scripts/embassy.js \ No newline at end of file diff --git a/scripts/embassy.js b/scripts/embassy.js deleted file mode 100644 index 3cbe10a..0000000 --- a/scripts/embassy.js +++ /dev/null @@ -1,4613 +0,0 @@ -// deno-fmt-ignore-file -// deno-lint-ignore-file -// This code was bundled using `deno bundle` and it's not recommended to edit it manually - -function saferStringify(x) { - try { - return JSON.stringify(x); - } catch (e) { - return "" + x; - } -} -class AnyParser { - constructor(description = { - name: "Any", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - return onParse.parsed(a); - } - description; -} -class ArrayParser { - constructor(description = { - name: "Array", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - if (Array.isArray(a)) return onParse.parsed(a); - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - description; -} -class BoolParser { - constructor(description = { - name: "Boolean", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - if (a === true || a === false) return onParse.parsed(a); - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - description; -} -const isObject = (x)=>typeof x === "object" && x != null -; -const isFunctionTest = (x)=>typeof x === "function" -; -const isNumber = (x)=>typeof x === "number" -; -const isString = (x)=>typeof x === "string" -; -const booleanOnParse = { - parsed (_) { - return true; - }, - invalid (_) { - return false; - } -}; -class FunctionParser { - constructor(description = { - name: "Function", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - if (isFunctionTest(a)) return onParse.parsed(a); - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - description; -} -class NilParser { - constructor(description = { - name: "Null", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - if (a === null || a === undefined) return onParse.parsed(a); - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - description; -} -class ObjectParser { - constructor(description = { - name: "Object", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - if (isObject(a)) return onParse.parsed(a); - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - description; -} -class StringParser { - constructor(description = { - name: "String", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - if (isString(a)) return onParse.parsed(a); - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - description; -} -class UnknownParser { - constructor(description = { - name: "Unknown", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - return onParse.parsed(a); - } - description; -} -class ConcatParsers { - constructor(parent, otherParser, description = { - name: "Concat", - children: [ - parent, - otherParser - ], - extras: [] - }){ - this.parent = parent; - this.otherParser = otherParser; - this.description = description; - } - static of(parent, otherParser) { - if (parent.unwrappedParser().description.name === "Any") { - return otherParser; - } - if (otherParser.unwrappedParser().description.name === "Any") { - return parent; - } - return new ConcatParsers(parent, otherParser); - } - parse(a, onParse) { - const parent = this.parent.enumParsed(a); - if ("error" in parent) { - return onParse.invalid(parent.error); - } - const other = this.otherParser.enumParsed(parent.value); - if ("error" in other) { - return onParse.invalid(other.error); - } - return onParse.parsed(other.value); - } - parent; - otherParser; - description; -} -class DefaultParser { - constructor(parent, defaultValue, description = { - name: "Default", - children: [ - parent - ], - extras: [ - defaultValue - ] - }){ - this.parent = parent; - this.defaultValue = defaultValue; - this.description = description; - } - parse(a, onParse) { - const parser = this; - const defaultValue = this.defaultValue; - if (a == null) { - return onParse.parsed(defaultValue); - } - const parentCheck = this.parent.enumParsed(a); - if ("error" in parentCheck) { - parentCheck.error.parser = parser; - return onParse.invalid(parentCheck.error); - } - return onParse.parsed(parentCheck.value); - } - parent; - defaultValue; - description; -} -class GuardParser { - constructor(checkIsA, typeName, description = { - name: "Guard", - children: [], - extras: [ - typeName - ] - }){ - this.checkIsA = checkIsA; - this.typeName = typeName; - this.description = description; - } - parse(a, onParse) { - if (this.checkIsA(a)) { - return onParse.parsed(a); - } - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - checkIsA; - typeName; - description; -} -class MappedAParser { - constructor(parent, map1, mappingName = map1.name, description = { - name: "Mapped", - children: [ - parent - ], - extras: [ - mappingName - ] - }){ - this.parent = parent; - this.map = map1; - this.mappingName = mappingName; - this.description = description; - } - parse(a, onParse) { - const map2 = this.map; - const result = this.parent.enumParsed(a); - if ("error" in result) { - return onParse.invalid(result.error); - } - return onParse.parsed(map2(result.value)); - } - parent; - map; - mappingName; - description; -} -class MaybeParser { - constructor(parent, description = { - name: "Maybe", - children: [ - parent - ], - extras: [] - }){ - this.parent = parent; - this.description = description; - } - parse(a, onParse) { - if (a == null) { - return onParse.parsed(null); - } - const parser = this; - const parentState = this.parent.enumParsed(a); - if ("error" in parentState) { - const { error } = parentState; - error.parser = parser; - return onParse.invalid(error); - } - return onParse.parsed(parentState.value); - } - parent; - description; -} -class OrParsers { - constructor(parent, otherParser, description = { - name: "Or", - children: [ - parent, - otherParser - ], - extras: [] - }){ - this.parent = parent; - this.otherParser = otherParser; - this.description = description; - } - parse(a, onParse) { - const parser = this; - const parent = this.parent.enumParsed(a); - if ("value" in parent) { - return onParse.parsed(parent.value); - } - const other = this.otherParser.enumParsed(a); - if ("error" in other) { - const { error } = other; - error.parser = parser; - return onParse.invalid(error); - } - return onParse.parsed(other.value); - } - parent; - otherParser; - description; -} -class NumberParser { - constructor(description = { - name: "Number", - children: [], - extras: [] - }){ - this.description = description; - } - parse(a, onParse) { - if (isNumber(a)) return onParse.parsed(a); - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - description; -} -function unwrapParser(a) { - if (a instanceof Parser) return unwrapParser(a.parser); - return a; -} -const enumParsed = { - parsed (value) { - return { - value - }; - }, - invalid (error) { - return { - error - }; - } -}; -class Parser { - _TYPE; - constructor(parser, description = { - name: "Wrapper", - children: [ - parser - ], - extras: [] - }){ - this.parser = parser; - this.description = description; - this._TYPE = null; - this.test = (value)=>{ - return this.parse(value, booleanOnParse); - }; - } - parse(a, onParse) { - return this.parser.parse(a, onParse); - } - static isA(checkIsA, name) { - return new Parser(new GuardParser(checkIsA, name)); - } - static validatorErrorAsString = (error)=>{ - const { parser , value , keys } = error; - const keysString = !keys.length ? "" : keys.map((x)=>`[${x}]` - ).reverse().join(""); - return `${keysString}${Parser.parserAsString(parser)}(${saferStringify(value)})`; - }; - static parserAsString(parserComingIn) { - const parser = unwrapParser(parserComingIn); - const { description: { name , extras , children } , } = parser; - if (parser instanceof ShapeParser) { - return `${name}<{${parser.description.children.map((subParser, i1)=>`${String(parser.description.extras[i1]) || "?"}:${Parser.parserAsString(subParser)}` - ).join(",")}}>`; - } - if (parser instanceof OrParsers) { - const parent = unwrapParser(parser.parent); - const parentString = Parser.parserAsString(parent); - if (parent instanceof OrParsers) return parentString; - return `${name}<${parentString},...>`; - } - if (parser instanceof GuardParser) { - return String(extras[0] || name); - } - if (parser instanceof StringParser || parser instanceof ObjectParser || parser instanceof NumberParser || parser instanceof BoolParser || parser instanceof AnyParser) { - return name.toLowerCase(); - } - if (parser instanceof FunctionParser) { - return name; - } - if (parser instanceof NilParser) { - return "null"; - } - if (parser instanceof ArrayParser) { - return "Array"; - } - const specifiers = [ - ...extras.map(saferStringify), - ...children.map(Parser.parserAsString), - ]; - const specifiersString = `<${specifiers.join(",")}>`; - !children.length ? "" : `<>`; - return `${name}${specifiersString}`; - } - unsafeCast(value) { - const state = this.enumParsed(value); - if ("value" in state) return state.value; - const { error } = state; - throw new TypeError(`Failed type: ${Parser.validatorErrorAsString(error)} given input ${saferStringify(value)}`); - } - castPromise(value) { - const state = this.enumParsed(value); - if ("value" in state) return Promise.resolve(state.value); - const { error } = state; - return Promise.reject(new TypeError(`Failed type: ${Parser.validatorErrorAsString(error)} given input ${saferStringify(value)}`)); - } - map(fn, mappingName) { - return new Parser(new MappedAParser(this, fn, mappingName)); - } - concat(otherParser) { - return new Parser(ConcatParsers.of(this, new Parser(otherParser))); - } - orParser(otherParser) { - return new Parser(new OrParsers(this, new Parser(otherParser))); - } - test; - optional(name) { - return new Parser(new MaybeParser(this)); - } - defaultTo(defaultValue) { - return new Parser(new DefaultParser(new Parser(new MaybeParser(this)), defaultValue)); - } - validate(isValid, otherName) { - return new Parser(ConcatParsers.of(this, new Parser(new GuardParser(isValid, otherName)))); - } - refine(refinementTest, otherName = refinementTest.name) { - return new Parser(ConcatParsers.of(this, new Parser(new GuardParser(refinementTest, otherName)))); - } - name(nameString) { - return parserName(nameString, this); - } - enumParsed(value) { - return this.parse(value, enumParsed); - } - unwrappedParser() { - let answer = this; - while(true){ - const next = answer.parser; - if (next instanceof Parser) { - answer = next; - } else { - return next; - } - } - } - parser; - description; -} -function guard(test, testName) { - return Parser.isA(test, testName || test.name); -} -const any = new Parser(new AnyParser()); -class ArrayOfParser { - constructor(parser, description = { - name: "ArrayOf", - children: [ - parser - ], - extras: [] - }){ - this.parser = parser; - this.description = description; - } - parse(a, onParse) { - if (!Array.isArray(a)) { - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - const values = [ - ...a - ]; - for(let index = 0; index < values.length; index++){ - const result = this.parser.enumParsed(values[index]); - if ("error" in result) { - result.error.keys.push("" + index); - return onParse.invalid(result.error); - } else { - values[index] = result.value; - } - } - return onParse.parsed(values); - } - parser; - description; -} -function arrayOf(validator) { - return new Parser(new ArrayOfParser(validator)); -} -const unknown = new Parser(new UnknownParser()); -const number = new Parser(new NumberParser()); -const isNill = new Parser(new NilParser()); -const natural = number.refine((x)=>x >= 0 && x === Math.floor(x) -); -const isFunction = new Parser(new FunctionParser()); -const __boolean = new Parser(new BoolParser()); -class DeferredParser { - parser; - static create() { - return new DeferredParser(); - } - constructor(description = { - name: "Deferred", - children: [], - extras: [] - }){ - this.description = description; - } - setParser(parser) { - this.parser = new Parser(parser); - return this; - } - parse(a, onParse) { - if (!this.parser) { - return onParse.invalid({ - value: "Not Set Up", - keys: [], - parser: this - }); - } - return this.parser.parse(a, onParse); - } - description; -} -function deferred() { - const deferred1 = DeferredParser.create(); - function setParser(parser) { - deferred1.setParser(parser); - } - return [ - new Parser(deferred1), - setParser - ]; -} -const object = new Parser(new ObjectParser()); -class DictionaryParser { - constructor(parsers, description = { - name: "Dictionary", - children: parsers.reduce((acc, [k, v])=>{ - acc.push(k, v); - return acc; - }, []), - extras: [] - }){ - this.parsers = parsers; - this.description = description; - } - parse(a, onParse) { - const { parsers } = this; - const parser = this; - const answer = { - ...a - }; - outer: for(const key in a){ - let parseError = []; - for (const [keyParser, valueParser] of parsers){ - const enumState = keyParser.enumParsed(key); - if ("error" in enumState) { - const { error } = enumState; - error.parser = parser; - error.keys.push("" + key); - parseError.push(error); - continue; - } - const newKey = enumState.value; - const valueState = valueParser.enumParsed(a[key]); - if ("error" in valueState) { - const { error } = valueState; - error.keys.push("" + newKey); - parseError.unshift(error); - continue; - } - delete answer[key]; - answer[newKey] = valueState.value; - break outer; - } - const error = parseError[0]; - if (!!error) { - return onParse.invalid(error); - } - } - return onParse.parsed(answer); - } - parsers; - description; -} -const dictionary = (...parsers)=>{ - return object.concat(new DictionaryParser([ - ...parsers - ])); -}; -function every(...parsers) { - const filteredParsers = parsers.filter((x)=>x !== any - ); - if (filteredParsers.length <= 0) { - return any; - } - const first = filteredParsers.splice(0, 1)[0]; - return filteredParsers.reduce((left, right)=>{ - return left.concat(right); - }, first); -} -const isArray = new Parser(new ArrayParser()); -const string = new Parser(new StringParser()); -const instanceOf = (classCreator)=>guard((x)=>x instanceof classCreator - , `is${classCreator.name}`) -; -class LiteralsParser { - constructor(values, description = { - name: "Literal", - children: [], - extras: values - }){ - this.values = values; - this.description = description; - } - parse(a, onParse) { - if (this.values.indexOf(a) >= 0) { - return onParse.parsed(a); - } - return onParse.invalid({ - value: a, - keys: [], - parser: this - }); - } - values; - description; -} -function literal(isEqualToValue) { - return new Parser(new LiteralsParser([ - isEqualToValue - ])); -} -function literals(firstValue, ...restValues) { - return new Parser(new LiteralsParser([ - firstValue, - ...restValues - ])); -} -class ShapeParser { - constructor(parserMap, isPartial1, parserKeys = Object.keys(parserMap), description = { - name: isPartial1 ? "Partial" : "Shape", - children: parserKeys.map((key)=>parserMap[key] - ), - extras: parserKeys - }){ - this.parserMap = parserMap; - this.isPartial = isPartial1; - this.parserKeys = parserKeys; - this.description = description; - } - parse(a, onParse) { - const parser = this; - if (!object.test(a)) { - return onParse.invalid({ - value: a, - keys: [], - parser - }); - } - const { parserMap , isPartial: isPartial2 } = this; - const value = { - ...a - }; - if (Array.isArray(a)) { - value.length = a.length; - } - for(const key in parserMap){ - if (key in value) { - const parser = parserMap[key]; - const state = parser.enumParsed(a[key]); - if ("error" in state) { - const { error } = state; - error.keys.push(saferStringify(key)); - return onParse.invalid(error); - } - const smallValue = state.value; - value[key] = smallValue; - } else if (!isPartial2) { - return onParse.invalid({ - value: "missingProperty", - parser, - keys: [ - saferStringify(key) - ] - }); - } - } - return onParse.parsed(value); - } - parserMap; - isPartial; - parserKeys; - description; -} -const isPartial = (testShape)=>{ - return new Parser(new ShapeParser(testShape, true)); -}; -const partial = isPartial; -class RecursiveParser { - parser; - static create(fn) { - const parser = new RecursiveParser(fn); - parser.parser = fn(new Parser(parser)); - return parser; - } - constructor(recursive1, description = { - name: "Recursive", - children: [], - extras: [ - recursive1 - ] - }){ - this.recursive = recursive1; - this.description = description; - } - parse(a, onParse) { - if (!this.parser) { - return onParse.invalid({ - value: "Recursive Invalid State", - keys: [], - parser: this - }); - } - return this.parser.parse(a, onParse); - } - recursive; - description; -} -function recursive(fn) { - fn(any); - const created = RecursiveParser.create(fn); - return new Parser(created); -} -const regex = (tester)=>string.refine(function(x) { - return tester.test(x); - }, tester.toString()) -; -const isShape = (testShape)=>{ - return new Parser(new ShapeParser(testShape, false)); -}; -function shape(testShape, optionals, optionalAndDefaults) { - if (optionals) { - const defaults = optionalAndDefaults || {}; - console.log("test"); - const entries = Object.entries(testShape); - const optionalSet = new Set(Array.from(optionals)); - return every(partial(Object.fromEntries(entries.filter(([key, _])=>optionalSet.has(key) - ).map(([key, parser])=>[ - key, - parser - ] - ))), isShape(Object.fromEntries(entries.filter(([key, _])=>!optionalSet.has(key) - )))).map((ret)=>{ - for (const key of optionalSet){ - const keyAny = key; - if (!(keyAny in ret) && keyAny in defaults) { - ret[keyAny] = defaults[keyAny]; - } - } - return ret; - }); - } - return isShape(testShape); -} -function some(...parsers) { - if (parsers.length <= 0) { - return any; - } - const first = parsers.splice(0, 1)[0]; - return parsers.reduce((left, right)=>left.orParser(right) - , first); -} -class TupleParser { - constructor(parsers, lengthMatcher = literal(parsers.length), description = { - name: "Tuple", - children: parsers, - extras: [] - }){ - this.parsers = parsers; - this.lengthMatcher = lengthMatcher; - this.description = description; - } - parse(input, onParse) { - const tupleError = isArray.enumParsed(input); - if ("error" in tupleError) return onParse.invalid(tupleError.error); - const values = input; - const stateCheck = this.lengthMatcher.enumParsed(values.length); - if ("error" in stateCheck) { - stateCheck.error.keys.push(saferStringify("length")); - return onParse.invalid(stateCheck.error); - } - const answer = new Array(this.parsers.length); - for(const key in this.parsers){ - const parser = this.parsers[key]; - const value = values[key]; - const result = parser.enumParsed(value); - if ("error" in result) { - const { error } = result; - error.keys.push(saferStringify(key)); - return onParse.invalid(error); - } - answer[key] = result.value; - } - return onParse.parsed(answer); - } - parsers; - lengthMatcher; - description; -} -function tuple(...parsers) { - return new Parser(new TupleParser(parsers)); -} -class NamedParser { - constructor(parent, name, description = { - name: "Named", - children: [ - parent - ], - extras: [ - name - ] - }){ - this.parent = parent; - this.name = name; - this.description = description; - } - parse(a, onParse) { - const parser = this; - const parent = this.parent.enumParsed(a); - if ("error" in parent) { - const { error } = parent; - error.parser = parser; - return onParse.invalid(error); - } - return onParse.parsed(parent.value); - } - parent; - name; - description; -} -function parserName(name, parent) { - return new Parser(new NamedParser(parent, name)); -} -class Matched { - constructor(value){ - this.value = value; - } - when(..._args) { - return this; - } - defaultTo(_defaultValue) { - return this.value; - } - defaultToLazy(_getValue) { - return this.value; - } - unwrap() { - return this.value; - } - value; -} -class MatchMore { - constructor(a){ - this.a = a; - } - when(...args) { - const [outcome, ...matchers] = args.reverse(); - const me = this; - const parser = matches.some(...matchers.map((matcher)=>matcher instanceof Parser ? matcher : literal(matcher) - )); - const result = parser.enumParsed(this.a); - if ("error" in result) { - return me; - } - const { value } = result; - if (outcome instanceof Function) { - return new Matched(outcome(value)); - } - return new Matched(outcome); - } - defaultTo(value) { - return value; - } - defaultToLazy(getValue) { - return getValue(); - } - unwrap() { - throw new Error("Expecting that value is matched"); - } - a; -} -const matches = Object.assign(function matchesFn(value) { - return new MatchMore(value); -}, { - array: isArray, - arrayOf, - some, - tuple, - regex, - number, - natural, - isFunction, - object, - string, - shape, - partial, - literal, - every, - guard, - unknown, - any, - boolean: __boolean, - dictionary, - literals, - nill: isNill, - instanceOf, - Parse: Parser, - parserName, - recursive, - deferred -}); -class YAMLError extends Error { - constructor(message = "(unknown reason)", mark = ""){ - super(`${message} ${mark}`); - this.mark = mark; - this.name = this.constructor.name; - } - toString(_compact) { - return `${this.name}: ${this.message} ${this.mark}`; - } - mark; -} -function isBoolean(value) { - return typeof value === "boolean" || value instanceof Boolean; -} -function isObject1(value) { - return value !== null && typeof value === "object"; -} -function repeat(str1, count) { - let result = ""; - for(let cycle = 0; cycle < count; cycle++){ - result += str1; - } - return result; -} -function isNegativeZero(i2) { - return i2 === 0 && Number.NEGATIVE_INFINITY === 1 / i2; -} -class Mark { - constructor(name, buffer, position, line, column){ - this.name = name; - this.buffer = buffer; - this.position = position; - this.line = line; - this.column = column; - } - getSnippet(indent = 4, maxLength = 75) { - if (!this.buffer) return null; - let head = ""; - let start = this.position; - while(start > 0 && "\x00\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(start - 1)) === -1){ - start -= 1; - if (this.position - start > maxLength / 2 - 1) { - head = " ... "; - start += 5; - break; - } - } - let tail = ""; - let end = this.position; - while(end < this.buffer.length && "\x00\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(end)) === -1){ - end += 1; - if (end - this.position > maxLength / 2 - 1) { - tail = " ... "; - end -= 5; - break; - } - } - const snippet = this.buffer.slice(start, end); - return `${repeat(" ", indent)}${head}${snippet}${tail}\n${repeat(" ", indent + this.position - start + head.length)}^`; - } - toString(compact) { - let snippet, where = ""; - if (this.name) { - where += `in "${this.name}" `; - } - where += `at line ${this.line + 1}, column ${this.column + 1}`; - if (!compact) { - snippet = this.getSnippet(); - if (snippet) { - where += `:\n${snippet}`; - } - } - return where; - } - name; - buffer; - position; - line; - column; -} -function compileList(schema, name, result) { - const exclude = []; - for (const includedSchema of schema.include){ - result = compileList(includedSchema, name, result); - } - for (const currentType of schema[name]){ - for(let previousIndex = 0; previousIndex < result.length; previousIndex++){ - const previousType = result[previousIndex]; - if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { - exclude.push(previousIndex); - } - } - result.push(currentType); - } - return result.filter((_type, index)=>!exclude.includes(index) - ); -} -function compileMap(...typesList) { - const result = { - fallback: {}, - mapping: {}, - scalar: {}, - sequence: {} - }; - for (const types of typesList){ - for (const type of types){ - if (type.kind !== null) { - result[type.kind][type.tag] = result["fallback"][type.tag] = type; - } - } - } - return result; -} -class Schema { - static SCHEMA_DEFAULT; - implicit; - explicit; - include; - compiledImplicit; - compiledExplicit; - compiledTypeMap; - constructor(definition){ - this.explicit = definition.explicit || []; - this.implicit = definition.implicit || []; - this.include = definition.include || []; - for (const type of this.implicit){ - if (type.loadKind && type.loadKind !== "scalar") { - throw new YAMLError("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported."); - } - } - this.compiledImplicit = compileList(this, "implicit", []); - this.compiledExplicit = compileList(this, "explicit", []); - this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); - } - extend(definition) { - return new Schema({ - implicit: [ - ...new Set([ - ...this.implicit, - ...definition?.implicit ?? [] - ]), - ], - explicit: [ - ...new Set([ - ...this.explicit, - ...definition?.explicit ?? [] - ]), - ], - include: [ - ...new Set([ - ...this.include, - ...definition?.include ?? [] - ]) - ] - }); - } - static create() {} -} -const DEFAULT_RESOLVE = ()=>true -; -const DEFAULT_CONSTRUCT = (data)=>data -; -function checkTagFormat(tag) { - return tag; -} -class Type { - tag; - kind = null; - instanceOf; - predicate; - represent; - defaultStyle; - styleAliases; - loadKind; - constructor(tag, options){ - this.tag = checkTagFormat(tag); - if (options) { - this.kind = options.kind; - this.resolve = options.resolve || DEFAULT_RESOLVE; - this.construct = options.construct || DEFAULT_CONSTRUCT; - this.instanceOf = options.instanceOf; - this.predicate = options.predicate; - this.represent = options.represent; - this.defaultStyle = options.defaultStyle; - this.styleAliases = options.styleAliases; - } - } - resolve = ()=>true - ; - construct = (data)=>data - ; -} -class DenoStdInternalError extends Error { - constructor(message){ - super(message); - this.name = "DenoStdInternalError"; - } -} -function assert(expr, msg = "") { - if (!expr) { - throw new DenoStdInternalError(msg); - } -} -function copy(src, dst, off = 0) { - off = Math.max(0, Math.min(off, dst.byteLength)); - const dstBytesAvailable = dst.byteLength - off; - if (src.byteLength > dstBytesAvailable) { - src = src.subarray(0, dstBytesAvailable); - } - dst.set(src, off); - return src.byteLength; -} -const MIN_READ = 32 * 1024; -const MAX_SIZE = 2 ** 32 - 2; -class Buffer { - #buf; - #off = 0; - constructor(ab){ - this.#buf = ab === undefined ? new Uint8Array(0) : new Uint8Array(ab); - } - bytes(options = { - copy: true - }) { - if (options.copy === false) return this.#buf.subarray(this.#off); - return this.#buf.slice(this.#off); - } - empty() { - return this.#buf.byteLength <= this.#off; - } - get length() { - return this.#buf.byteLength - this.#off; - } - get capacity() { - return this.#buf.buffer.byteLength; - } - truncate(n) { - if (n === 0) { - this.reset(); - return; - } - if (n < 0 || n > this.length) { - throw Error("bytes.Buffer: truncation out of range"); - } - this.#reslice(this.#off + n); - } - reset() { - this.#reslice(0); - this.#off = 0; - } - #tryGrowByReslice(n) { - const l = this.#buf.byteLength; - if (n <= this.capacity - l) { - this.#reslice(l + n); - return l; - } - return -1; - } - #reslice(len) { - assert(len <= this.#buf.buffer.byteLength); - this.#buf = new Uint8Array(this.#buf.buffer, 0, len); - } - readSync(p) { - if (this.empty()) { - this.reset(); - if (p.byteLength === 0) { - return 0; - } - return null; - } - const nread = copy(this.#buf.subarray(this.#off), p); - this.#off += nread; - return nread; - } - read(p) { - const rr = this.readSync(p); - return Promise.resolve(rr); - } - writeSync(p) { - const m = this.#grow(p.byteLength); - return copy(p, this.#buf, m); - } - write(p) { - const n1 = this.writeSync(p); - return Promise.resolve(n1); - } - #grow(n2) { - const m = this.length; - if (m === 0 && this.#off !== 0) { - this.reset(); - } - const i = this.#tryGrowByReslice(n2); - if (i >= 0) { - return i; - } - const c = this.capacity; - if (n2 <= Math.floor(c / 2) - m) { - copy(this.#buf.subarray(this.#off), this.#buf); - } else if (c + n2 > MAX_SIZE) { - throw new Error("The buffer cannot be grown beyond the maximum size."); - } else { - const buf = new Uint8Array(Math.min(2 * c + n2, MAX_SIZE)); - copy(this.#buf.subarray(this.#off), buf); - this.#buf = buf; - } - this.#off = 0; - this.#reslice(Math.min(m + n2, MAX_SIZE)); - return m; - } - grow(n3) { - if (n3 < 0) { - throw Error("Buffer.grow: negative count"); - } - const m = this.#grow(n3); - this.#reslice(m); - } - async readFrom(r) { - let n4 = 0; - const tmp = new Uint8Array(MIN_READ); - while(true){ - const shouldGrow = this.capacity - this.length < MIN_READ; - const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length); - const nread = await r.read(buf); - if (nread === null) { - return n4; - } - if (shouldGrow) this.writeSync(buf.subarray(0, nread)); - else this.#reslice(this.length + nread); - n4 += nread; - } - } - readFromSync(r) { - let n5 = 0; - const tmp = new Uint8Array(MIN_READ); - while(true){ - const shouldGrow = this.capacity - this.length < MIN_READ; - const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length); - const nread = r.readSync(buf); - if (nread === null) { - return n5; - } - if (shouldGrow) this.writeSync(buf.subarray(0, nread)); - else this.#reslice(this.length + nread); - n5 += nread; - } - } -} -const MIN_BUF_SIZE = 16; -const CR = "\r".charCodeAt(0); -const LF = "\n".charCodeAt(0); -class BufferFullError extends Error { - name; - constructor(partial1){ - super("Buffer full"); - this.partial = partial1; - this.name = "BufferFullError"; - } - partial; -} -class PartialReadError extends Error { - name = "PartialReadError"; - partial; - constructor(){ - super("Encountered UnexpectedEof, data only partially read"); - } -} -class BufReader { - #buf; - #rd; - #r = 0; - #w = 0; - #eof = false; - static create(r, size = 4096) { - return r instanceof BufReader ? r : new BufReader(r, size); - } - constructor(rd, size = 4096){ - if (size < 16) { - size = MIN_BUF_SIZE; - } - this.#reset(new Uint8Array(size), rd); - } - size() { - return this.#buf.byteLength; - } - buffered() { - return this.#w - this.#r; - } - #fill = async ()=>{ - if (this.#r > 0) { - this.#buf.copyWithin(0, this.#r, this.#w); - this.#w -= this.#r; - this.#r = 0; - } - if (this.#w >= this.#buf.byteLength) { - throw Error("bufio: tried to fill full buffer"); - } - for(let i3 = 100; i3 > 0; i3--){ - const rr = await this.#rd.read(this.#buf.subarray(this.#w)); - if (rr === null) { - this.#eof = true; - return; - } - assert(rr >= 0, "negative read"); - this.#w += rr; - if (rr > 0) { - return; - } - } - throw new Error(`No progress after ${100} read() calls`); - }; - reset(r) { - this.#reset(this.#buf, r); - } - #reset = (buf, rd)=>{ - this.#buf = buf; - this.#rd = rd; - this.#eof = false; - }; - async read(p) { - let rr = p.byteLength; - if (p.byteLength === 0) return rr; - if (this.#r === this.#w) { - if (p.byteLength >= this.#buf.byteLength) { - const rr = await this.#rd.read(p); - const nread = rr ?? 0; - assert(nread >= 0, "negative read"); - return rr; - } - this.#r = 0; - this.#w = 0; - rr = await this.#rd.read(this.#buf); - if (rr === 0 || rr === null) return rr; - assert(rr >= 0, "negative read"); - this.#w += rr; - } - const copied = copy(this.#buf.subarray(this.#r, this.#w), p, 0); - this.#r += copied; - return copied; - } - async readFull(p) { - let bytesRead = 0; - while(bytesRead < p.length){ - try { - const rr = await this.read(p.subarray(bytesRead)); - if (rr === null) { - if (bytesRead === 0) { - return null; - } else { - throw new PartialReadError(); - } - } - bytesRead += rr; - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = p.subarray(0, bytesRead); - } else if (err instanceof Error) { - const e = new PartialReadError(); - e.partial = p.subarray(0, bytesRead); - e.stack = err.stack; - e.message = err.message; - e.cause = err.cause; - throw err; - } - throw err; - } - } - return p; - } - async readByte() { - while(this.#r === this.#w){ - if (this.#eof) return null; - await this.#fill(); - } - const c = this.#buf[this.#r]; - this.#r++; - return c; - } - async readString(delim) { - if (delim.length !== 1) { - throw new Error("Delimiter should be a single character"); - } - const buffer = await this.readSlice(delim.charCodeAt(0)); - if (buffer === null) return null; - return new TextDecoder().decode(buffer); - } - async readLine() { - let line = null; - try { - line = await this.readSlice(LF); - } catch (err) { - if (err instanceof Deno.errors.BadResource) { - throw err; - } - let partial2; - if (err instanceof PartialReadError) { - partial2 = err.partial; - assert(partial2 instanceof Uint8Array, "bufio: caught error from `readSlice()` without `partial` property"); - } - if (!(err instanceof BufferFullError)) { - throw err; - } - partial2 = err.partial; - if (!this.#eof && partial2 && partial2.byteLength > 0 && partial2[partial2.byteLength - 1] === CR) { - assert(this.#r > 0, "bufio: tried to rewind past start of buffer"); - this.#r--; - partial2 = partial2.subarray(0, partial2.byteLength - 1); - } - if (partial2) { - return { - line: partial2, - more: !this.#eof - }; - } - } - if (line === null) { - return null; - } - if (line.byteLength === 0) { - return { - line, - more: false - }; - } - if (line[line.byteLength - 1] == LF) { - let drop = 1; - if (line.byteLength > 1 && line[line.byteLength - 2] === CR) { - drop = 2; - } - line = line.subarray(0, line.byteLength - drop); - } - return { - line, - more: false - }; - } - async readSlice(delim) { - let s = 0; - let slice; - while(true){ - let i4 = this.#buf.subarray(this.#r + s, this.#w).indexOf(delim); - if (i4 >= 0) { - i4 += s; - slice = this.#buf.subarray(this.#r, this.#r + i4 + 1); - this.#r += i4 + 1; - break; - } - if (this.#eof) { - if (this.#r === this.#w) { - return null; - } - slice = this.#buf.subarray(this.#r, this.#w); - this.#r = this.#w; - break; - } - if (this.buffered() >= this.#buf.byteLength) { - this.#r = this.#w; - const oldbuf = this.#buf; - const newbuf = this.#buf.slice(0); - this.#buf = newbuf; - throw new BufferFullError(oldbuf); - } - s = this.#w - this.#r; - try { - await this.#fill(); - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = slice; - } else if (err instanceof Error) { - const e = new PartialReadError(); - e.partial = slice; - e.stack = err.stack; - e.message = err.message; - e.cause = err.cause; - throw err; - } - throw err; - } - } - return slice; - } - async peek(n6) { - if (n6 < 0) { - throw Error("negative count"); - } - let avail = this.#w - this.#r; - while(avail < n6 && avail < this.#buf.byteLength && !this.#eof){ - try { - await this.#fill(); - } catch (err) { - if (err instanceof PartialReadError) { - err.partial = this.#buf.subarray(this.#r, this.#w); - } else if (err instanceof Error) { - const e = new PartialReadError(); - e.partial = this.#buf.subarray(this.#r, this.#w); - e.stack = err.stack; - e.message = err.message; - e.cause = err.cause; - throw err; - } - throw err; - } - avail = this.#w - this.#r; - } - if (avail === 0 && this.#eof) { - return null; - } else if (avail < n6 && this.#eof) { - return this.#buf.subarray(this.#r, this.#r + avail); - } else if (avail < n6) { - throw new BufferFullError(this.#buf.subarray(this.#r, this.#w)); - } - return this.#buf.subarray(this.#r, this.#r + n6); - } -} -class AbstractBufBase { - buf; - usedBufferBytes = 0; - err = null; - constructor(buf){ - this.buf = buf; - } - size() { - return this.buf.byteLength; - } - available() { - return this.buf.byteLength - this.usedBufferBytes; - } - buffered() { - return this.usedBufferBytes; - } -} -class BufWriter extends AbstractBufBase { - #writer; - static create(writer, size = 4096) { - return writer instanceof BufWriter ? writer : new BufWriter(writer, size); - } - constructor(writer, size = 4096){ - super(new Uint8Array(size <= 0 ? 4096 : size)); - this.#writer = writer; - } - reset(w) { - this.err = null; - this.usedBufferBytes = 0; - this.#writer = w; - } - async flush() { - if (this.err !== null) throw this.err; - if (this.usedBufferBytes === 0) return; - try { - const p = this.buf.subarray(0, this.usedBufferBytes); - let nwritten = 0; - while(nwritten < p.length){ - nwritten += await this.#writer.write(p.subarray(nwritten)); - } - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - this.buf = new Uint8Array(this.buf.length); - this.usedBufferBytes = 0; - } - async write(data) { - if (this.err !== null) throw this.err; - if (data.length === 0) return 0; - let totalBytesWritten = 0; - let numBytesWritten = 0; - while(data.byteLength > this.available()){ - if (this.buffered() === 0) { - try { - numBytesWritten = await this.#writer.write(data); - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - } else { - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - await this.flush(); - } - totalBytesWritten += numBytesWritten; - data = data.subarray(numBytesWritten); - } - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - totalBytesWritten += numBytesWritten; - return totalBytesWritten; - } -} -class BufWriterSync extends AbstractBufBase { - #writer; - static create(writer, size = 4096) { - return writer instanceof BufWriterSync ? writer : new BufWriterSync(writer, size); - } - constructor(writer, size = 4096){ - super(new Uint8Array(size <= 0 ? 4096 : size)); - this.#writer = writer; - } - reset(w) { - this.err = null; - this.usedBufferBytes = 0; - this.#writer = w; - } - flush() { - if (this.err !== null) throw this.err; - if (this.usedBufferBytes === 0) return; - try { - const p = this.buf.subarray(0, this.usedBufferBytes); - let nwritten = 0; - while(nwritten < p.length){ - nwritten += this.#writer.writeSync(p.subarray(nwritten)); - } - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - this.buf = new Uint8Array(this.buf.length); - this.usedBufferBytes = 0; - } - writeSync(data) { - if (this.err !== null) throw this.err; - if (data.length === 0) return 0; - let totalBytesWritten = 0; - let numBytesWritten = 0; - while(data.byteLength > this.available()){ - if (this.buffered() === 0) { - try { - numBytesWritten = this.#writer.writeSync(data); - } catch (e) { - if (e instanceof Error) { - this.err = e; - } - throw e; - } - } else { - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - this.flush(); - } - totalBytesWritten += numBytesWritten; - data = data.subarray(numBytesWritten); - } - numBytesWritten = copy(data, this.buf, this.usedBufferBytes); - this.usedBufferBytes += numBytesWritten; - totalBytesWritten += numBytesWritten; - return totalBytesWritten; - } -} -const BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r"; -function resolveYamlBinary(data) { - if (data === null) return false; - let code; - let bitlen = 0; - const max = data.length; - const map3 = BASE64_MAP; - for(let idx = 0; idx < max; idx++){ - code = map3.indexOf(data.charAt(idx)); - if (code > 64) continue; - if (code < 0) return false; - bitlen += 6; - } - return bitlen % 8 === 0; -} -function constructYamlBinary(data) { - const input = data.replace(/[\r\n=]/g, ""); - const max = input.length; - const map4 = BASE64_MAP; - const result = []; - let bits = 0; - for(let idx = 0; idx < max; idx++){ - if (idx % 4 === 0 && idx) { - result.push(bits >> 16 & 0xff); - result.push(bits >> 8 & 0xff); - result.push(bits & 0xff); - } - bits = bits << 6 | map4.indexOf(input.charAt(idx)); - } - const tailbits = max % 4 * 6; - if (tailbits === 0) { - result.push(bits >> 16 & 0xff); - result.push(bits >> 8 & 0xff); - result.push(bits & 0xff); - } else if (tailbits === 18) { - result.push(bits >> 10 & 0xff); - result.push(bits >> 2 & 0xff); - } else if (tailbits === 12) { - result.push(bits >> 4 & 0xff); - } - return new Buffer(new Uint8Array(result)); -} -function representYamlBinary(object1) { - const max = object1.length; - const map5 = BASE64_MAP; - let result = ""; - let bits = 0; - for(let idx = 0; idx < max; idx++){ - if (idx % 3 === 0 && idx) { - result += map5[bits >> 18 & 0x3f]; - result += map5[bits >> 12 & 0x3f]; - result += map5[bits >> 6 & 0x3f]; - result += map5[bits & 0x3f]; - } - bits = (bits << 8) + object1[idx]; - } - const tail = max % 3; - if (tail === 0) { - result += map5[bits >> 18 & 0x3f]; - result += map5[bits >> 12 & 0x3f]; - result += map5[bits >> 6 & 0x3f]; - result += map5[bits & 0x3f]; - } else if (tail === 2) { - result += map5[bits >> 10 & 0x3f]; - result += map5[bits >> 4 & 0x3f]; - result += map5[bits << 2 & 0x3f]; - result += map5[64]; - } else if (tail === 1) { - result += map5[bits >> 2 & 0x3f]; - result += map5[bits << 4 & 0x3f]; - result += map5[64]; - result += map5[64]; - } - return result; -} -function isBinary(obj) { - const buf = new Buffer(); - try { - if (0 > buf.readFromSync(obj)) return true; - return false; - } catch { - return false; - } finally{ - buf.reset(); - } -} -const binary = new Type("tag:yaml.org,2002:binary", { - construct: constructYamlBinary, - kind: "scalar", - predicate: isBinary, - represent: representYamlBinary, - resolve: resolveYamlBinary -}); -function resolveYamlBoolean(data) { - const max = data.length; - return max === 4 && (data === "true" || data === "True" || data === "TRUE") || max === 5 && (data === "false" || data === "False" || data === "FALSE"); -} -function constructYamlBoolean(data) { - return data === "true" || data === "True" || data === "TRUE"; -} -const bool = new Type("tag:yaml.org,2002:bool", { - construct: constructYamlBoolean, - defaultStyle: "lowercase", - kind: "scalar", - predicate: isBoolean, - represent: { - lowercase (object2) { - return object2 ? "true" : "false"; - }, - uppercase (object3) { - return object3 ? "TRUE" : "FALSE"; - }, - camelcase (object4) { - return object4 ? "True" : "False"; - } - }, - resolve: resolveYamlBoolean -}); -const YAML_FLOAT_PATTERN = new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?" + "|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?" + "|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*" + "|[-+]?\\.(?:inf|Inf|INF)" + "|\\.(?:nan|NaN|NAN))$"); -function resolveYamlFloat(data) { - if (!YAML_FLOAT_PATTERN.test(data) || data[data.length - 1] === "_") { - return false; - } - return true; -} -function constructYamlFloat(data) { - let value = data.replace(/_/g, "").toLowerCase(); - const sign = value[0] === "-" ? -1 : 1; - const digits = []; - if ("+-".indexOf(value[0]) >= 0) { - value = value.slice(1); - } - if (value === ".inf") { - return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; - } - if (value === ".nan") { - return NaN; - } - if (value.indexOf(":") >= 0) { - value.split(":").forEach((v)=>{ - digits.unshift(parseFloat(v)); - }); - let valueNb = 0.0; - let base = 1; - digits.forEach((d)=>{ - valueNb += d * base; - base *= 60; - }); - return sign * valueNb; - } - return sign * parseFloat(value); -} -const SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; -function representYamlFloat(object5, style) { - if (isNaN(object5)) { - switch(style){ - case "lowercase": - return ".nan"; - case "uppercase": - return ".NAN"; - case "camelcase": - return ".NaN"; - } - } else if (Number.POSITIVE_INFINITY === object5) { - switch(style){ - case "lowercase": - return ".inf"; - case "uppercase": - return ".INF"; - case "camelcase": - return ".Inf"; - } - } else if (Number.NEGATIVE_INFINITY === object5) { - switch(style){ - case "lowercase": - return "-.inf"; - case "uppercase": - return "-.INF"; - case "camelcase": - return "-.Inf"; - } - } else if (isNegativeZero(object5)) { - return "-0.0"; - } - const res = object5.toString(10); - return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res; -} -function isFloat(object6) { - return Object.prototype.toString.call(object6) === "[object Number]" && (object6 % 1 !== 0 || isNegativeZero(object6)); -} -const __float = new Type("tag:yaml.org,2002:float", { - construct: constructYamlFloat, - defaultStyle: "lowercase", - kind: "scalar", - predicate: isFloat, - represent: representYamlFloat, - resolve: resolveYamlFloat -}); -function reconstructFunction(code) { - const func1 = new Function(`return ${code}`)(); - if (!(func1 instanceof Function)) { - throw new TypeError(`Expected function but got ${typeof func1}: ${code}`); - } - return func1; -} -new Type("tag:yaml.org,2002:js/function", { - kind: "scalar", - resolve (data) { - if (data === null) { - return false; - } - try { - reconstructFunction(`${data}`); - return true; - } catch (_err) { - return false; - } - }, - construct (data) { - return reconstructFunction(data); - }, - predicate (object7) { - return object7 instanceof Function; - }, - represent (object8) { - return object8.toString(); - } -}); -function isHexCode(c) { - return 0x30 <= c && c <= 0x39 || 0x41 <= c && c <= 0x46 || 0x61 <= c && c <= 0x66; -} -function isOctCode(c) { - return 0x30 <= c && c <= 0x37; -} -function isDecCode(c) { - return 0x30 <= c && c <= 0x39; -} -function resolveYamlInteger(data) { - const max = data.length; - let index = 0; - let hasDigits = false; - if (!max) return false; - let ch = data[index]; - if (ch === "-" || ch === "+") { - ch = data[++index]; - } - if (ch === "0") { - if (index + 1 === max) return true; - ch = data[++index]; - if (ch === "b") { - index++; - for(; index < max; index++){ - ch = data[index]; - if (ch === "_") continue; - if (ch !== "0" && ch !== "1") return false; - hasDigits = true; - } - return hasDigits && ch !== "_"; - } - if (ch === "x") { - index++; - for(; index < max; index++){ - ch = data[index]; - if (ch === "_") continue; - if (!isHexCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits && ch !== "_"; - } - for(; index < max; index++){ - ch = data[index]; - if (ch === "_") continue; - if (!isOctCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits && ch !== "_"; - } - if (ch === "_") return false; - for(; index < max; index++){ - ch = data[index]; - if (ch === "_") continue; - if (ch === ":") break; - if (!isDecCode(data.charCodeAt(index))) { - return false; - } - hasDigits = true; - } - if (!hasDigits || ch === "_") return false; - if (ch !== ":") return true; - return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); -} -function constructYamlInteger(data) { - let value = data; - const digits = []; - if (value.indexOf("_") !== -1) { - value = value.replace(/_/g, ""); - } - let sign = 1; - let ch = value[0]; - if (ch === "-" || ch === "+") { - if (ch === "-") sign = -1; - value = value.slice(1); - ch = value[0]; - } - if (value === "0") return 0; - if (ch === "0") { - if (value[1] === "b") return sign * parseInt(value.slice(2), 2); - if (value[1] === "x") return sign * parseInt(value, 16); - return sign * parseInt(value, 8); - } - if (value.indexOf(":") !== -1) { - value.split(":").forEach((v)=>{ - digits.unshift(parseInt(v, 10)); - }); - let valueInt = 0; - let base = 1; - digits.forEach((d)=>{ - valueInt += d * base; - base *= 60; - }); - return sign * valueInt; - } - return sign * parseInt(value, 10); -} -function isInteger(object9) { - return Object.prototype.toString.call(object9) === "[object Number]" && object9 % 1 === 0 && !isNegativeZero(object9); -} -const __int = new Type("tag:yaml.org,2002:int", { - construct: constructYamlInteger, - defaultStyle: "decimal", - kind: "scalar", - predicate: isInteger, - represent: { - binary (obj) { - return obj >= 0 ? `0b${obj.toString(2)}` : `-0b${obj.toString(2).slice(1)}`; - }, - octal (obj) { - return obj >= 0 ? `0${obj.toString(8)}` : `-0${obj.toString(8).slice(1)}`; - }, - decimal (obj) { - return obj.toString(10); - }, - hexadecimal (obj) { - return obj >= 0 ? `0x${obj.toString(16).toUpperCase()}` : `-0x${obj.toString(16).toUpperCase().slice(1)}`; - } - }, - resolve: resolveYamlInteger, - styleAliases: { - binary: [ - 2, - "bin" - ], - decimal: [ - 10, - "dec" - ], - hexadecimal: [ - 16, - "hex" - ], - octal: [ - 8, - "oct" - ] - } -}); -const map = new Type("tag:yaml.org,2002:map", { - construct (data) { - return data !== null ? data : {}; - }, - kind: "mapping" -}); -function resolveYamlMerge(data) { - return data === "<<" || data === null; -} -const merge = new Type("tag:yaml.org,2002:merge", { - kind: "scalar", - resolve: resolveYamlMerge -}); -function resolveYamlNull(data) { - const max = data.length; - return max === 1 && data === "~" || max === 4 && (data === "null" || data === "Null" || data === "NULL"); -} -function constructYamlNull() { - return null; -} -function isNull(object10) { - return object10 === null; -} -const nil = new Type("tag:yaml.org,2002:null", { - construct: constructYamlNull, - defaultStyle: "lowercase", - kind: "scalar", - predicate: isNull, - represent: { - canonical () { - return "~"; - }, - lowercase () { - return "null"; - }, - uppercase () { - return "NULL"; - }, - camelcase () { - return "Null"; - } - }, - resolve: resolveYamlNull -}); -const { hasOwn } = Object; -const _toString = Object.prototype.toString; -function resolveYamlOmap(data) { - const objectKeys = []; - let pairKey = ""; - let pairHasKey = false; - for (const pair of data){ - pairHasKey = false; - if (_toString.call(pair) !== "[object Object]") return false; - for(pairKey in pair){ - if (hasOwn(pair, pairKey)) { - if (!pairHasKey) pairHasKey = true; - else return false; - } - } - if (!pairHasKey) return false; - if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); - else return false; - } - return true; -} -function constructYamlOmap(data) { - return data !== null ? data : []; -} -const omap = new Type("tag:yaml.org,2002:omap", { - construct: constructYamlOmap, - kind: "sequence", - resolve: resolveYamlOmap -}); -const _toString1 = Object.prototype.toString; -function resolveYamlPairs(data) { - const result = Array.from({ - length: data.length - }); - for(let index = 0; index < data.length; index++){ - const pair = data[index]; - if (_toString1.call(pair) !== "[object Object]") return false; - const keys = Object.keys(pair); - if (keys.length !== 1) return false; - result[index] = [ - keys[0], - pair[keys[0]] - ]; - } - return true; -} -function constructYamlPairs(data) { - if (data === null) return []; - const result = Array.from({ - length: data.length - }); - for(let index = 0; index < data.length; index += 1){ - const pair = data[index]; - const keys = Object.keys(pair); - result[index] = [ - keys[0], - pair[keys[0]] - ]; - } - return result; -} -const pairs = new Type("tag:yaml.org,2002:pairs", { - construct: constructYamlPairs, - kind: "sequence", - resolve: resolveYamlPairs -}); -const REGEXP = /^\/(?[\s\S]+)\/(?[gismuy]*)$/; -const regexp = new Type("tag:yaml.org,2002:js/regexp", { - kind: "scalar", - resolve (data) { - if (data === null || !data.length) { - return false; - } - const regexp1 = `${data}`; - if (regexp1.charAt(0) === "/") { - if (!REGEXP.test(data)) { - return false; - } - const modifiers = [ - ...regexp1.match(REGEXP)?.groups?.modifiers ?? "" - ]; - if (new Set(modifiers).size < modifiers.length) { - return false; - } - } - return true; - }, - construct (data) { - const { regexp: regexp2 = `${data}` , modifiers ="" } = `${data}`.match(REGEXP)?.groups ?? {}; - return new RegExp(regexp2, modifiers); - }, - predicate (object11) { - return object11 instanceof RegExp; - }, - represent (object12) { - return object12.toString(); - } -}); -const seq = new Type("tag:yaml.org,2002:seq", { - construct (data) { - return data !== null ? data : []; - }, - kind: "sequence" -}); -const { hasOwn: hasOwn1 } = Object; -function resolveYamlSet(data) { - if (data === null) return true; - for(const key in data){ - if (hasOwn1(data, key)) { - if (data[key] !== null) return false; - } - } - return true; -} -function constructYamlSet(data) { - return data !== null ? data : {}; -} -const set = new Type("tag:yaml.org,2002:set", { - construct: constructYamlSet, - kind: "mapping", - resolve: resolveYamlSet -}); -const str = new Type("tag:yaml.org,2002:str", { - construct (data) { - return data !== null ? data : ""; - }, - kind: "scalar" -}); -const YAML_DATE_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])" + "-([0-9][0-9])" + "-([0-9][0-9])$"); -const YAML_TIMESTAMP_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])" + "-([0-9][0-9]?)" + "-([0-9][0-9]?)" + "(?:[Tt]|[ \\t]+)" + "([0-9][0-9]?)" + ":([0-9][0-9])" + ":([0-9][0-9])" + "(?:\\.([0-9]*))?" + "(?:[ \\t]*(Z|([-+])([0-9][0-9]?)" + "(?::([0-9][0-9]))?))?$"); -function resolveYamlTimestamp(data) { - if (data === null) return false; - if (YAML_DATE_REGEXP.exec(data) !== null) return true; - if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; - return false; -} -function constructYamlTimestamp(data) { - let match = YAML_DATE_REGEXP.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); - if (match === null) throw new Error("Date resolve error"); - const year = +match[1]; - const month = +match[2] - 1; - const day = +match[3]; - if (!match[4]) { - return new Date(Date.UTC(year, month, day)); - } - const hour = +match[4]; - const minute = +match[5]; - const second = +match[6]; - let fraction = 0; - if (match[7]) { - let partFraction = match[7].slice(0, 3); - while(partFraction.length < 3){ - partFraction += "0"; - } - fraction = +partFraction; - } - let delta = null; - if (match[9]) { - const tzHour = +match[10]; - const tzMinute = +(match[11] || 0); - delta = (tzHour * 60 + tzMinute) * 60000; - if (match[9] === "-") delta = -delta; - } - const date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); - if (delta) date.setTime(date.getTime() - delta); - return date; -} -function representYamlTimestamp(date) { - return date.toISOString(); -} -const timestamp = new Type("tag:yaml.org,2002:timestamp", { - construct: constructYamlTimestamp, - instanceOf: Date, - kind: "scalar", - represent: representYamlTimestamp, - resolve: resolveYamlTimestamp -}); -const undefinedType = new Type("tag:yaml.org,2002:js/undefined", { - kind: "scalar", - resolve () { - return true; - }, - construct () { - return undefined; - }, - predicate (object13) { - return typeof object13 === "undefined"; - }, - represent () { - return ""; - } -}); -const failsafe = new Schema({ - explicit: [ - str, - seq, - map - ] -}); -const json = new Schema({ - implicit: [ - nil, - bool, - __int, - __float - ], - include: [ - failsafe - ] -}); -const core = new Schema({ - include: [ - json - ] -}); -const def = new Schema({ - explicit: [ - binary, - omap, - pairs, - set - ], - implicit: [ - timestamp, - merge - ], - include: [ - core - ] -}); -const extended = new Schema({ - explicit: [ - regexp, - undefinedType - ], - include: [ - def - ] -}); -class State { - constructor(schema = def){ - this.schema = schema; - } - schema; -} -class LoaderState extends State { - documents; - length; - lineIndent; - lineStart; - position; - line; - filename; - onWarning; - legacy; - json; - listener; - implicitTypes; - typeMap; - version; - checkLineBreaks; - tagMap; - anchorMap; - tag; - anchor; - kind; - result; - constructor(input, { filename , schema , onWarning , legacy =false , json: json1 = false , listener =null }){ - super(schema); - this.input = input; - this.documents = []; - this.lineIndent = 0; - this.lineStart = 0; - this.position = 0; - this.line = 0; - this.result = ""; - this.filename = filename; - this.onWarning = onWarning; - this.legacy = legacy; - this.json = json1; - this.listener = listener; - this.implicitTypes = this.schema.compiledImplicit; - this.typeMap = this.schema.compiledTypeMap; - this.length = input.length; - } - input; -} -const { hasOwn: hasOwn2 } = Object; -const CONTEXT_BLOCK_IN = 3; -const CONTEXT_BLOCK_OUT = 4; -const CHOMPING_STRIP = 2; -const CHOMPING_KEEP = 3; -const PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -const PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; -const PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; -const PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; -const PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; -function _class(obj) { - return Object.prototype.toString.call(obj); -} -function isEOL(c) { - return c === 0x0a || c === 0x0d; -} -function isWhiteSpace(c) { - return c === 0x09 || c === 0x20; -} -function isWsOrEol(c) { - return c === 0x09 || c === 0x20 || c === 0x0a || c === 0x0d; -} -function isFlowIndicator(c) { - return c === 0x2c || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d; -} -function fromHexCode(c) { - if (0x30 <= c && c <= 0x39) { - return c - 0x30; - } - const lc = c | 0x20; - if (0x61 <= lc && lc <= 0x66) { - return lc - 0x61 + 10; - } - return -1; -} -function escapedHexLen(c) { - if (c === 0x78) { - return 2; - } - if (c === 0x75) { - return 4; - } - if (c === 0x55) { - return 8; - } - return 0; -} -function fromDecimalCode(c) { - if (0x30 <= c && c <= 0x39) { - return c - 0x30; - } - return -1; -} -function simpleEscapeSequence(c) { - return c === 0x30 ? "\x00" : c === 0x61 ? "\x07" : c === 0x62 ? "\x08" : c === 0x74 ? "\x09" : c === 0x09 ? "\x09" : c === 0x6e ? "\x0A" : c === 0x76 ? "\x0B" : c === 0x66 ? "\x0C" : c === 0x72 ? "\x0D" : c === 0x65 ? "\x1B" : c === 0x20 ? " " : c === 0x22 ? "\x22" : c === 0x2f ? "/" : c === 0x5c ? "\x5C" : c === 0x4e ? "\x85" : c === 0x5f ? "\xA0" : c === 0x4c ? "\u2028" : c === 0x50 ? "\u2029" : ""; -} -function charFromCodepoint(c) { - if (c <= 0xffff) { - return String.fromCharCode(c); - } - return String.fromCharCode((c - 0x010000 >> 10) + 0xd800, (c - 0x010000 & 0x03ff) + 0xdc00); -} -const simpleEscapeCheck = Array.from({ - length: 256 -}); -const simpleEscapeMap = Array.from({ - length: 256 -}); -for(let i = 0; i < 256; i++){ - simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; - simpleEscapeMap[i] = simpleEscapeSequence(i); -} -function generateError(state, message) { - return new YAMLError(message, new Mark(state.filename, state.input, state.position, state.line, state.position - state.lineStart)); -} -function throwError(state, message) { - throw generateError(state, message); -} -function throwWarning(state, message) { - if (state.onWarning) { - state.onWarning.call(null, generateError(state, message)); - } -} -const directiveHandlers = { - YAML (state, _name, ...args) { - if (state.version !== null) { - return throwError(state, "duplication of %YAML directive"); - } - if (args.length !== 1) { - return throwError(state, "YAML directive accepts exactly one argument"); - } - const match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); - if (match === null) { - return throwError(state, "ill-formed argument of the YAML directive"); - } - const major = parseInt(match[1], 10); - const minor = parseInt(match[2], 10); - if (major !== 1) { - return throwError(state, "unacceptable YAML version of the document"); - } - state.version = args[0]; - state.checkLineBreaks = minor < 2; - if (minor !== 1 && minor !== 2) { - return throwWarning(state, "unsupported YAML version of the document"); - } - }, - TAG (state, _name, ...args) { - if (args.length !== 2) { - return throwError(state, "TAG directive accepts exactly two arguments"); - } - const handle = args[0]; - const prefix = args[1]; - if (!PATTERN_TAG_HANDLE.test(handle)) { - return throwError(state, "ill-formed tag handle (first argument) of the TAG directive"); - } - if (state.tagMap && hasOwn2(state.tagMap, handle)) { - return throwError(state, `there is a previously declared suffix for "${handle}" tag handle`); - } - if (!PATTERN_TAG_URI.test(prefix)) { - return throwError(state, "ill-formed tag prefix (second argument) of the TAG directive"); - } - if (typeof state.tagMap === "undefined") { - state.tagMap = {}; - } - state.tagMap[handle] = prefix; - } -}; -function captureSegment(state, start, end, checkJson) { - let result; - if (start < end) { - result = state.input.slice(start, end); - if (checkJson) { - for(let position = 0, length = result.length; position < length; position++){ - const character = result.charCodeAt(position); - if (!(character === 0x09 || 0x20 <= character && character <= 0x10ffff)) { - return throwError(state, "expected valid JSON character"); - } - } - } else if (PATTERN_NON_PRINTABLE.test(result)) { - return throwError(state, "the stream contains non-printable characters"); - } - state.result += result; - } -} -function mergeMappings(state, destination, source, overridableKeys) { - if (!isObject1(source)) { - return throwError(state, "cannot merge mappings; the provided source object is unacceptable"); - } - const keys = Object.keys(source); - for(let i1 = 0, len1 = keys.length; i1 < len1; i1++){ - const key = keys[i1]; - if (!hasOwn2(destination, key)) { - destination[key] = source[key]; - overridableKeys[key] = true; - } - } -} -function storeMappingPair(state, result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { - if (Array.isArray(keyNode)) { - keyNode = Array.prototype.slice.call(keyNode); - for(let index = 0, quantity = keyNode.length; index < quantity; index++){ - if (Array.isArray(keyNode[index])) { - return throwError(state, "nested arrays are not supported inside keys"); - } - if (typeof keyNode === "object" && _class(keyNode[index]) === "[object Object]") { - keyNode[index] = "[object Object]"; - } - } - } - if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") { - keyNode = "[object Object]"; - } - keyNode = String(keyNode); - if (result === null) { - result = {}; - } - if (keyTag === "tag:yaml.org,2002:merge") { - if (Array.isArray(valueNode)) { - for(let index = 0, quantity = valueNode.length; index < quantity; index++){ - mergeMappings(state, result, valueNode[index], overridableKeys); - } - } else { - mergeMappings(state, result, valueNode, overridableKeys); - } - } else { - if (!state.json && !hasOwn2(overridableKeys, keyNode) && hasOwn2(result, keyNode)) { - state.line = startLine || state.line; - state.position = startPos || state.position; - return throwError(state, "duplicated mapping key"); - } - result[keyNode] = valueNode; - delete overridableKeys[keyNode]; - } - return result; -} -function readLineBreak(state) { - const ch = state.input.charCodeAt(state.position); - if (ch === 0x0a) { - state.position++; - } else if (ch === 0x0d) { - state.position++; - if (state.input.charCodeAt(state.position) === 0x0a) { - state.position++; - } - } else { - return throwError(state, "a line break is expected"); - } - state.line += 1; - state.lineStart = state.position; -} -function skipSeparationSpace(state, allowComments, checkIndent) { - let lineBreaks = 0, ch = state.input.charCodeAt(state.position); - while(ch !== 0){ - while(isWhiteSpace(ch)){ - ch = state.input.charCodeAt(++state.position); - } - if (allowComments && ch === 0x23) { - do { - ch = state.input.charCodeAt(++state.position); - }while (ch !== 0x0a && ch !== 0x0d && ch !== 0) - } - if (isEOL(ch)) { - readLineBreak(state); - ch = state.input.charCodeAt(state.position); - lineBreaks++; - state.lineIndent = 0; - while(ch === 0x20){ - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - } else { - break; - } - } - if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning(state, "deficient indentation"); - } - return lineBreaks; -} -function testDocumentSeparator(state) { - let _position = state.position; - let ch = state.input.charCodeAt(_position); - if ((ch === 0x2d || ch === 0x2e) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) { - _position += 3; - ch = state.input.charCodeAt(_position); - if (ch === 0 || isWsOrEol(ch)) { - return true; - } - } - return false; -} -function writeFoldedLines(state, count) { - if (count === 1) { - state.result += " "; - } else if (count > 1) { - state.result += repeat("\n", count - 1); - } -} -function readPlainScalar(state, nodeIndent, withinFlowCollection) { - const kind = state.kind; - const result = state.result; - let ch = state.input.charCodeAt(state.position); - if (isWsOrEol(ch) || isFlowIndicator(ch) || ch === 0x23 || ch === 0x26 || ch === 0x2a || ch === 0x21 || ch === 0x7c || ch === 0x3e || ch === 0x27 || ch === 0x22 || ch === 0x25 || ch === 0x40 || ch === 0x60) { - return false; - } - let following; - if (ch === 0x3f || ch === 0x2d) { - following = state.input.charCodeAt(state.position + 1); - if (isWsOrEol(following) || withinFlowCollection && isFlowIndicator(following)) { - return false; - } - } - state.kind = "scalar"; - state.result = ""; - let captureEnd, captureStart = captureEnd = state.position; - let hasPendingContent = false; - let line = 0; - while(ch !== 0){ - if (ch === 0x3a) { - following = state.input.charCodeAt(state.position + 1); - if (isWsOrEol(following) || withinFlowCollection && isFlowIndicator(following)) { - break; - } - } else if (ch === 0x23) { - const preceding = state.input.charCodeAt(state.position - 1); - if (isWsOrEol(preceding)) { - break; - } - } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && isFlowIndicator(ch)) { - break; - } else if (isEOL(ch)) { - line = state.line; - const lineStart = state.lineStart; - const lineIndent = state.lineIndent; - skipSeparationSpace(state, false, -1); - if (state.lineIndent >= nodeIndent) { - hasPendingContent = true; - ch = state.input.charCodeAt(state.position); - continue; - } else { - state.position = captureEnd; - state.line = line; - state.lineStart = lineStart; - state.lineIndent = lineIndent; - break; - } - } - if (hasPendingContent) { - captureSegment(state, captureStart, captureEnd, false); - writeFoldedLines(state, state.line - line); - captureStart = captureEnd = state.position; - hasPendingContent = false; - } - if (!isWhiteSpace(ch)) { - captureEnd = state.position + 1; - } - ch = state.input.charCodeAt(++state.position); - } - captureSegment(state, captureStart, captureEnd, false); - if (state.result) { - return true; - } - state.kind = kind; - state.result = result; - return false; -} -function readSingleQuotedScalar(state, nodeIndent) { - let ch, captureStart, captureEnd; - ch = state.input.charCodeAt(state.position); - if (ch !== 0x27) { - return false; - } - state.kind = "scalar"; - state.result = ""; - state.position++; - captureStart = captureEnd = state.position; - while((ch = state.input.charCodeAt(state.position)) !== 0){ - if (ch === 0x27) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - if (ch === 0x27) { - captureStart = state.position; - state.position++; - captureEnd = state.position; - } else { - return true; - } - } else if (isEOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - return throwError(state, "unexpected end of the document within a single quoted scalar"); - } else { - state.position++; - captureEnd = state.position; - } - } - return throwError(state, "unexpected end of the stream within a single quoted scalar"); -} -function readDoubleQuotedScalar(state, nodeIndent) { - let ch = state.input.charCodeAt(state.position); - if (ch !== 0x22) { - return false; - } - state.kind = "scalar"; - state.result = ""; - state.position++; - let captureEnd, captureStart = captureEnd = state.position; - let tmp; - while((ch = state.input.charCodeAt(state.position)) !== 0){ - if (ch === 0x22) { - captureSegment(state, captureStart, state.position, true); - state.position++; - return true; - } - if (ch === 0x5c) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - if (isEOL(ch)) { - skipSeparationSpace(state, false, nodeIndent); - } else if (ch < 256 && simpleEscapeCheck[ch]) { - state.result += simpleEscapeMap[ch]; - state.position++; - } else if ((tmp = escapedHexLen(ch)) > 0) { - let hexLength = tmp; - let hexResult = 0; - for(; hexLength > 0; hexLength--){ - ch = state.input.charCodeAt(++state.position); - if ((tmp = fromHexCode(ch)) >= 0) { - hexResult = (hexResult << 4) + tmp; - } else { - return throwError(state, "expected hexadecimal character"); - } - } - state.result += charFromCodepoint(hexResult); - state.position++; - } else { - return throwError(state, "unknown escape sequence"); - } - captureStart = captureEnd = state.position; - } else if (isEOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - return throwError(state, "unexpected end of the document within a double quoted scalar"); - } else { - state.position++; - captureEnd = state.position; - } - } - return throwError(state, "unexpected end of the stream within a double quoted scalar"); -} -function readFlowCollection(state, nodeIndent) { - let ch = state.input.charCodeAt(state.position); - let terminator; - let isMapping = true; - let result = {}; - if (ch === 0x5b) { - terminator = 0x5d; - isMapping = false; - result = []; - } else if (ch === 0x7b) { - terminator = 0x7d; - } else { - return false; - } - if (state.anchor !== null && typeof state.anchor != "undefined" && typeof state.anchorMap != "undefined") { - state.anchorMap[state.anchor] = result; - } - ch = state.input.charCodeAt(++state.position); - const tag = state.tag, anchor = state.anchor; - let readNext = true; - let valueNode, keyNode, keyTag = keyNode = valueNode = null, isExplicitPair, isPair = isExplicitPair = false; - let following = 0, line = 0; - const overridableKeys = {}; - while(ch !== 0){ - skipSeparationSpace(state, true, nodeIndent); - ch = state.input.charCodeAt(state.position); - if (ch === terminator) { - state.position++; - state.tag = tag; - state.anchor = anchor; - state.kind = isMapping ? "mapping" : "sequence"; - state.result = result; - return true; - } - if (!readNext) { - return throwError(state, "missed comma between flow collection entries"); - } - keyTag = keyNode = valueNode = null; - isPair = isExplicitPair = false; - if (ch === 0x3f) { - following = state.input.charCodeAt(state.position + 1); - if (isWsOrEol(following)) { - isPair = isExplicitPair = true; - state.position++; - skipSeparationSpace(state, true, nodeIndent); - } - } - line = state.line; - composeNode(state, nodeIndent, 1, false, true); - keyTag = state.tag || null; - keyNode = state.result; - skipSeparationSpace(state, true, nodeIndent); - ch = state.input.charCodeAt(state.position); - if ((isExplicitPair || state.line === line) && ch === 0x3a) { - isPair = true; - ch = state.input.charCodeAt(++state.position); - skipSeparationSpace(state, true, nodeIndent); - composeNode(state, nodeIndent, 1, false, true); - valueNode = state.result; - } - if (isMapping) { - storeMappingPair(state, result, overridableKeys, keyTag, keyNode, valueNode); - } else if (isPair) { - result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); - } else { - result.push(keyNode); - } - skipSeparationSpace(state, true, nodeIndent); - ch = state.input.charCodeAt(state.position); - if (ch === 0x2c) { - readNext = true; - ch = state.input.charCodeAt(++state.position); - } else { - readNext = false; - } - } - return throwError(state, "unexpected end of the stream within a flow collection"); -} -function readBlockScalar(state, nodeIndent) { - let chomping = 1, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false; - let ch = state.input.charCodeAt(state.position); - let folding = false; - if (ch === 0x7c) { - folding = false; - } else if (ch === 0x3e) { - folding = true; - } else { - return false; - } - state.kind = "scalar"; - state.result = ""; - let tmp = 0; - while(ch !== 0){ - ch = state.input.charCodeAt(++state.position); - if (ch === 0x2b || ch === 0x2d) { - if (1 === chomping) { - chomping = ch === 0x2b ? CHOMPING_KEEP : CHOMPING_STRIP; - } else { - return throwError(state, "repeat of a chomping mode identifier"); - } - } else if ((tmp = fromDecimalCode(ch)) >= 0) { - if (tmp === 0) { - return throwError(state, "bad explicit indentation width of a block scalar; it cannot be less than one"); - } else if (!detectedIndent) { - textIndent = nodeIndent + tmp - 1; - detectedIndent = true; - } else { - return throwError(state, "repeat of an indentation width identifier"); - } - } else { - break; - } - } - if (isWhiteSpace(ch)) { - do { - ch = state.input.charCodeAt(++state.position); - }while (isWhiteSpace(ch)) - if (ch === 0x23) { - do { - ch = state.input.charCodeAt(++state.position); - }while (!isEOL(ch) && ch !== 0) - } - } - while(ch !== 0){ - readLineBreak(state); - state.lineIndent = 0; - ch = state.input.charCodeAt(state.position); - while((!detectedIndent || state.lineIndent < textIndent) && ch === 0x20){ - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - if (!detectedIndent && state.lineIndent > textIndent) { - textIndent = state.lineIndent; - } - if (isEOL(ch)) { - emptyLines++; - continue; - } - if (state.lineIndent < textIndent) { - if (chomping === 3) { - state.result += repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === 1) { - if (didReadContent) { - state.result += "\n"; - } - } - break; - } - if (folding) { - if (isWhiteSpace(ch)) { - atMoreIndented = true; - state.result += repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); - } else if (atMoreIndented) { - atMoreIndented = false; - state.result += repeat("\n", emptyLines + 1); - } else if (emptyLines === 0) { - if (didReadContent) { - state.result += " "; - } - } else { - state.result += repeat("\n", emptyLines); - } - } else { - state.result += repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); - } - didReadContent = true; - detectedIndent = true; - emptyLines = 0; - const captureStart = state.position; - while(!isEOL(ch) && ch !== 0){ - ch = state.input.charCodeAt(++state.position); - } - captureSegment(state, captureStart, state.position, false); - } - return true; -} -function readBlockSequence(state, nodeIndent) { - let line, following, detected = false, ch; - const tag = state.tag, anchor = state.anchor, result = []; - if (state.anchor !== null && typeof state.anchor !== "undefined" && typeof state.anchorMap !== "undefined") { - state.anchorMap[state.anchor] = result; - } - ch = state.input.charCodeAt(state.position); - while(ch !== 0){ - if (ch !== 0x2d) { - break; - } - following = state.input.charCodeAt(state.position + 1); - if (!isWsOrEol(following)) { - break; - } - detected = true; - state.position++; - if (skipSeparationSpace(state, true, -1)) { - if (state.lineIndent <= nodeIndent) { - result.push(null); - ch = state.input.charCodeAt(state.position); - continue; - } - } - line = state.line; - composeNode(state, nodeIndent, 3, false, true); - result.push(state.result); - skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); - if ((state.line === line || state.lineIndent > nodeIndent) && ch !== 0) { - return throwError(state, "bad indentation of a sequence entry"); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - if (detected) { - state.tag = tag; - state.anchor = anchor; - state.kind = "sequence"; - state.result = result; - return true; - } - return false; -} -function readBlockMapping(state, nodeIndent, flowIndent) { - const tag = state.tag, anchor = state.anchor, result = {}, overridableKeys = {}; - let following, allowCompact = false, line, pos, keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch; - if (state.anchor !== null && typeof state.anchor !== "undefined" && typeof state.anchorMap !== "undefined") { - state.anchorMap[state.anchor] = result; - } - ch = state.input.charCodeAt(state.position); - while(ch !== 0){ - following = state.input.charCodeAt(state.position + 1); - line = state.line; - pos = state.position; - if ((ch === 0x3f || ch === 0x3a) && isWsOrEol(following)) { - if (ch === 0x3f) { - if (atExplicitKey) { - storeMappingPair(state, result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; - } - detected = true; - atExplicitKey = true; - allowCompact = true; - } else if (atExplicitKey) { - atExplicitKey = false; - allowCompact = true; - } else { - return throwError(state, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"); - } - state.position += 1; - ch = following; - } else if (composeNode(state, flowIndent, 2, false, true)) { - if (state.line === line) { - ch = state.input.charCodeAt(state.position); - while(isWhiteSpace(ch)){ - ch = state.input.charCodeAt(++state.position); - } - if (ch === 0x3a) { - ch = state.input.charCodeAt(++state.position); - if (!isWsOrEol(ch)) { - return throwError(state, "a whitespace character is expected after the key-value separator within a block mapping"); - } - if (atExplicitKey) { - storeMappingPair(state, result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; - } - detected = true; - atExplicitKey = false; - allowCompact = false; - keyTag = state.tag; - keyNode = state.result; - } else if (detected) { - return throwError(state, "can not read an implicit mapping pair; a colon is missed"); - } else { - state.tag = tag; - state.anchor = anchor; - return true; - } - } else if (detected) { - return throwError(state, "can not read a block mapping entry; a multiline key may not be an implicit key"); - } else { - state.tag = tag; - state.anchor = anchor; - return true; - } - } else { - break; - } - if (state.line === line || state.lineIndent > nodeIndent) { - if (composeNode(state, nodeIndent, 4, true, allowCompact)) { - if (atExplicitKey) { - keyNode = state.result; - } else { - valueNode = state.result; - } - } - if (!atExplicitKey) { - storeMappingPair(state, result, overridableKeys, keyTag, keyNode, valueNode, line, pos); - keyTag = keyNode = valueNode = null; - } - skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); - } - if (state.lineIndent > nodeIndent && ch !== 0) { - return throwError(state, "bad indentation of a mapping entry"); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - if (atExplicitKey) { - storeMappingPair(state, result, overridableKeys, keyTag, keyNode, null); - } - if (detected) { - state.tag = tag; - state.anchor = anchor; - state.kind = "mapping"; - state.result = result; - } - return detected; -} -function readTagProperty(state) { - let position, isVerbatim = false, isNamed = false, tagHandle = "", tagName, ch; - ch = state.input.charCodeAt(state.position); - if (ch !== 0x21) return false; - if (state.tag !== null) { - return throwError(state, "duplication of a tag property"); - } - ch = state.input.charCodeAt(++state.position); - if (ch === 0x3c) { - isVerbatim = true; - ch = state.input.charCodeAt(++state.position); - } else if (ch === 0x21) { - isNamed = true; - tagHandle = "!!"; - ch = state.input.charCodeAt(++state.position); - } else { - tagHandle = "!"; - } - position = state.position; - if (isVerbatim) { - do { - ch = state.input.charCodeAt(++state.position); - }while (ch !== 0 && ch !== 0x3e) - if (state.position < state.length) { - tagName = state.input.slice(position, state.position); - ch = state.input.charCodeAt(++state.position); - } else { - return throwError(state, "unexpected end of the stream within a verbatim tag"); - } - } else { - while(ch !== 0 && !isWsOrEol(ch)){ - if (ch === 0x21) { - if (!isNamed) { - tagHandle = state.input.slice(position - 1, state.position + 1); - if (!PATTERN_TAG_HANDLE.test(tagHandle)) { - return throwError(state, "named tag handle cannot contain such characters"); - } - isNamed = true; - position = state.position + 1; - } else { - return throwError(state, "tag suffix cannot contain exclamation marks"); - } - } - ch = state.input.charCodeAt(++state.position); - } - tagName = state.input.slice(position, state.position); - if (PATTERN_FLOW_INDICATORS.test(tagName)) { - return throwError(state, "tag suffix cannot contain flow indicator characters"); - } - } - if (tagName && !PATTERN_TAG_URI.test(tagName)) { - return throwError(state, `tag name cannot contain such characters: ${tagName}`); - } - if (isVerbatim) { - state.tag = tagName; - } else if (typeof state.tagMap !== "undefined" && hasOwn2(state.tagMap, tagHandle)) { - state.tag = state.tagMap[tagHandle] + tagName; - } else if (tagHandle === "!") { - state.tag = `!${tagName}`; - } else if (tagHandle === "!!") { - state.tag = `tag:yaml.org,2002:${tagName}`; - } else { - return throwError(state, `undeclared tag handle "${tagHandle}"`); - } - return true; -} -function readAnchorProperty(state) { - let ch = state.input.charCodeAt(state.position); - if (ch !== 0x26) return false; - if (state.anchor !== null) { - return throwError(state, "duplication of an anchor property"); - } - ch = state.input.charCodeAt(++state.position); - const position = state.position; - while(ch !== 0 && !isWsOrEol(ch) && !isFlowIndicator(ch)){ - ch = state.input.charCodeAt(++state.position); - } - if (state.position === position) { - return throwError(state, "name of an anchor node must contain at least one character"); - } - state.anchor = state.input.slice(position, state.position); - return true; -} -function readAlias(state) { - let ch = state.input.charCodeAt(state.position); - if (ch !== 0x2a) return false; - ch = state.input.charCodeAt(++state.position); - const _position = state.position; - while(ch !== 0 && !isWsOrEol(ch) && !isFlowIndicator(ch)){ - ch = state.input.charCodeAt(++state.position); - } - if (state.position === _position) { - return throwError(state, "name of an alias node must contain at least one character"); - } - const alias = state.input.slice(_position, state.position); - if (typeof state.anchorMap !== "undefined" && !hasOwn2(state.anchorMap, alias)) { - return throwError(state, `unidentified alias "${alias}"`); - } - if (typeof state.anchorMap !== "undefined") { - state.result = state.anchorMap[alias]; - } - skipSeparationSpace(state, true, -1); - return true; -} -function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { - let allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, type, flowIndent, blockIndent; - if (state.listener && state.listener !== null) { - state.listener("open", state); - } - state.tag = null; - state.anchor = null; - state.kind = null; - state.result = null; - const allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext; - if (allowToSeek) { - if (skipSeparationSpace(state, true, -1)) { - atNewLine = true; - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } - } - if (indentStatus === 1) { - while(readTagProperty(state) || readAnchorProperty(state)){ - if (skipSeparationSpace(state, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } else { - allowBlockCollections = false; - } - } - } - if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; - } - if (indentStatus === 1 || 4 === nodeContext) { - const cond = 1 === nodeContext || 2 === nodeContext; - flowIndent = cond ? parentIndent : parentIndent + 1; - blockIndent = state.position - state.lineStart; - if (indentStatus === 1) { - if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) { - hasContent = true; - } else { - if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) { - hasContent = true; - } else if (readAlias(state)) { - hasContent = true; - if (state.tag !== null || state.anchor !== null) { - return throwError(state, "alias node should not have Any properties"); - } - } else if (readPlainScalar(state, flowIndent, 1 === nodeContext)) { - hasContent = true; - if (state.tag === null) { - state.tag = "?"; - } - } - if (state.anchor !== null && typeof state.anchorMap !== "undefined") { - state.anchorMap[state.anchor] = state.result; - } - } - } else if (indentStatus === 0) { - hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); - } - } - if (state.tag !== null && state.tag !== "!") { - if (state.tag === "?") { - for(let typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex++){ - type = state.implicitTypes[typeIndex]; - if (type.resolve(state.result)) { - state.result = type.construct(state.result); - state.tag = type.tag; - if (state.anchor !== null && typeof state.anchorMap !== "undefined") { - state.anchorMap[state.anchor] = state.result; - } - break; - } - } - } else if (hasOwn2(state.typeMap[state.kind || "fallback"], state.tag)) { - type = state.typeMap[state.kind || "fallback"][state.tag]; - if (state.result !== null && type.kind !== state.kind) { - return throwError(state, `unacceptable node kind for !<${state.tag}> tag; it should be "${type.kind}", not "${state.kind}"`); - } - if (!type.resolve(state.result)) { - return throwError(state, `cannot resolve a node with !<${state.tag}> explicit tag`); - } else { - state.result = type.construct(state.result); - if (state.anchor !== null && typeof state.anchorMap !== "undefined") { - state.anchorMap[state.anchor] = state.result; - } - } - } else { - return throwError(state, `unknown tag !<${state.tag}>`); - } - } - if (state.listener && state.listener !== null) { - state.listener("close", state); - } - return state.tag !== null || state.anchor !== null || hasContent; -} -function readDocument(state) { - const documentStart = state.position; - let position, directiveName, directiveArgs, hasDirectives = false, ch; - state.version = null; - state.checkLineBreaks = state.legacy; - state.tagMap = {}; - state.anchorMap = {}; - while((ch = state.input.charCodeAt(state.position)) !== 0){ - skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); - if (state.lineIndent > 0 || ch !== 0x25) { - break; - } - hasDirectives = true; - ch = state.input.charCodeAt(++state.position); - position = state.position; - while(ch !== 0 && !isWsOrEol(ch)){ - ch = state.input.charCodeAt(++state.position); - } - directiveName = state.input.slice(position, state.position); - directiveArgs = []; - if (directiveName.length < 1) { - return throwError(state, "directive name must not be less than one character in length"); - } - while(ch !== 0){ - while(isWhiteSpace(ch)){ - ch = state.input.charCodeAt(++state.position); - } - if (ch === 0x23) { - do { - ch = state.input.charCodeAt(++state.position); - }while (ch !== 0 && !isEOL(ch)) - break; - } - if (isEOL(ch)) break; - position = state.position; - while(ch !== 0 && !isWsOrEol(ch)){ - ch = state.input.charCodeAt(++state.position); - } - directiveArgs.push(state.input.slice(position, state.position)); - } - if (ch !== 0) readLineBreak(state); - if (hasOwn2(directiveHandlers, directiveName)) { - directiveHandlers[directiveName](state, directiveName, ...directiveArgs); - } else { - throwWarning(state, `unknown document directive "${directiveName}"`); - } - } - skipSeparationSpace(state, true, -1); - if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 0x2d && state.input.charCodeAt(state.position + 1) === 0x2d && state.input.charCodeAt(state.position + 2) === 0x2d) { - state.position += 3; - skipSeparationSpace(state, true, -1); - } else if (hasDirectives) { - return throwError(state, "directives end mark is expected"); - } - composeNode(state, state.lineIndent - 1, 4, false, true); - skipSeparationSpace(state, true, -1); - if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { - throwWarning(state, "non-ASCII line breaks are interpreted as content"); - } - state.documents.push(state.result); - if (state.position === state.lineStart && testDocumentSeparator(state)) { - if (state.input.charCodeAt(state.position) === 0x2e) { - state.position += 3; - skipSeparationSpace(state, true, -1); - } - return; - } - if (state.position < state.length - 1) { - return throwError(state, "end of the stream or a document separator is expected"); - } else { - return; - } -} -function loadDocuments(input, options) { - input = String(input); - options = options || {}; - if (input.length !== 0) { - if (input.charCodeAt(input.length - 1) !== 0x0a && input.charCodeAt(input.length - 1) !== 0x0d) { - input += "\n"; - } - if (input.charCodeAt(0) === 0xfeff) { - input = input.slice(1); - } - } - const state = new LoaderState(input, options); - state.input += "\0"; - while(state.input.charCodeAt(state.position) === 0x20){ - state.lineIndent += 1; - state.position += 1; - } - while(state.position < state.length - 1){ - readDocument(state); - } - return state.documents; -} -function isCbFunction(fn) { - return typeof fn === "function"; -} -function loadAll(input, iteratorOrOption, options) { - if (!isCbFunction(iteratorOrOption)) { - return loadDocuments(input, iteratorOrOption); - } - const documents = loadDocuments(input, options); - const iterator = iteratorOrOption; - for(let index = 0, length = documents.length; index < length; index++){ - iterator(documents[index]); - } - return void 0; -} -function load(input, options) { - const documents = loadDocuments(input, options); - if (documents.length === 0) { - return; - } - if (documents.length === 1) { - return documents[0]; - } - throw new YAMLError("expected a single document in the stream, but found more"); -} -function parse(content, options) { - return load(content, options); -} -function parseAll(content, iterator, options) { - return loadAll(content, iterator, options); -} -const { hasOwn: hasOwn3 } = Object; -function compileStyleMap(schema, map6) { - if (typeof map6 === "undefined" || map6 === null) return {}; - let type; - const result = {}; - const keys = Object.keys(map6); - let tag, style; - for(let index = 0, length = keys.length; index < length; index += 1){ - tag = keys[index]; - style = String(map6[tag]); - if (tag.slice(0, 2) === "!!") { - tag = `tag:yaml.org,2002:${tag.slice(2)}`; - } - type = schema.compiledTypeMap.fallback[tag]; - if (type && typeof type.styleAliases !== "undefined" && hasOwn3(type.styleAliases, style)) { - style = type.styleAliases[style]; - } - result[tag] = style; - } - return result; -} -class DumperState extends State { - indent; - noArrayIndent; - skipInvalid; - flowLevel; - sortKeys; - lineWidth; - noRefs; - noCompatMode; - condenseFlow; - implicitTypes; - explicitTypes; - tag = null; - result = ""; - duplicates = []; - usedDuplicates = []; - styleMap; - dump; - constructor({ schema , indent =2 , noArrayIndent =false , skipInvalid =false , flowLevel =-1 , styles =null , sortKeys =false , lineWidth =80 , noRefs =false , noCompatMode =false , condenseFlow =false }){ - super(schema); - this.indent = Math.max(1, indent); - this.noArrayIndent = noArrayIndent; - this.skipInvalid = skipInvalid; - this.flowLevel = flowLevel; - this.styleMap = compileStyleMap(this.schema, styles); - this.sortKeys = sortKeys; - this.lineWidth = lineWidth; - this.noRefs = noRefs; - this.noCompatMode = noCompatMode; - this.condenseFlow = condenseFlow; - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; - } -} -const _toString2 = Object.prototype.toString; -const { hasOwn: hasOwn4 } = Object; -const ESCAPE_SEQUENCES = {}; -ESCAPE_SEQUENCES[0x00] = "\\0"; -ESCAPE_SEQUENCES[0x07] = "\\a"; -ESCAPE_SEQUENCES[0x08] = "\\b"; -ESCAPE_SEQUENCES[0x09] = "\\t"; -ESCAPE_SEQUENCES[0x0a] = "\\n"; -ESCAPE_SEQUENCES[0x0b] = "\\v"; -ESCAPE_SEQUENCES[0x0c] = "\\f"; -ESCAPE_SEQUENCES[0x0d] = "\\r"; -ESCAPE_SEQUENCES[0x1b] = "\\e"; -ESCAPE_SEQUENCES[0x22] = '\\"'; -ESCAPE_SEQUENCES[0x5c] = "\\\\"; -ESCAPE_SEQUENCES[0x85] = "\\N"; -ESCAPE_SEQUENCES[0xa0] = "\\_"; -ESCAPE_SEQUENCES[0x2028] = "\\L"; -ESCAPE_SEQUENCES[0x2029] = "\\P"; -const DEPRECATED_BOOLEANS_SYNTAX = [ - "y", - "Y", - "yes", - "Yes", - "YES", - "on", - "On", - "ON", - "n", - "N", - "no", - "No", - "NO", - "off", - "Off", - "OFF", -]; -function encodeHex(character) { - const string4 = character.toString(16).toUpperCase(); - let handle; - let length; - if (character <= 0xff) { - handle = "x"; - length = 2; - } else if (character <= 0xffff) { - handle = "u"; - length = 4; - } else if (character <= 0xffffffff) { - handle = "U"; - length = 8; - } else { - throw new YAMLError("code point within a string may not be greater than 0xFFFFFFFF"); - } - return `\\${handle}${repeat("0", length - string4.length)}${string4}`; -} -function indentString(string5, spaces) { - const ind = repeat(" ", spaces), length = string5.length; - let position = 0, next = -1, result = "", line; - while(position < length){ - next = string5.indexOf("\n", position); - if (next === -1) { - line = string5.slice(position); - position = length; - } else { - line = string5.slice(position, next + 1); - position = next + 1; - } - if (line.length && line !== "\n") result += ind; - result += line; - } - return result; -} -function generateNextLine(state, level) { - return `\n${repeat(" ", state.indent * level)}`; -} -function testImplicitResolving(state, str2) { - let type; - for(let index = 0, length = state.implicitTypes.length; index < length; index += 1){ - type = state.implicitTypes[index]; - if (type.resolve(str2)) { - return true; - } - } - return false; -} -function isWhitespace(c) { - return c === 0x20 || c === 0x09; -} -function isPrintable(c) { - return 0x00020 <= c && c <= 0x00007e || 0x000a1 <= c && c <= 0x00d7ff && c !== 0x2028 && c !== 0x2029 || 0x0e000 <= c && c <= 0x00fffd && c !== 0xfeff || 0x10000 <= c && c <= 0x10ffff; -} -function isPlainSafe(c) { - return isPrintable(c) && c !== 0xfeff && c !== 0x2c && c !== 0x5b && c !== 0x5d && c !== 0x7b && c !== 0x7d && c !== 0x3a && c !== 0x23; -} -function isPlainSafeFirst(c) { - return isPrintable(c) && c !== 0xfeff && !isWhitespace(c) && c !== 0x2d && c !== 0x3f && c !== 0x3a && c !== 0x2c && c !== 0x5b && c !== 0x5d && c !== 0x7b && c !== 0x7d && c !== 0x23 && c !== 0x26 && c !== 0x2a && c !== 0x21 && c !== 0x7c && c !== 0x3e && c !== 0x27 && c !== 0x22 && c !== 0x25 && c !== 0x40 && c !== 0x60; -} -function needIndentIndicator(string6) { - const leadingSpaceRe = /^\n* /; - return leadingSpaceRe.test(string6); -} -const STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5; -function chooseScalarStyle(string7, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { - const shouldTrackWidth = lineWidth !== -1; - let hasLineBreak = false, hasFoldableLine = false, previousLineBreak = -1, plain = isPlainSafeFirst(string7.charCodeAt(0)) && !isWhitespace(string7.charCodeAt(string7.length - 1)); - let __char, i5; - if (singleLineOnly) { - for(i5 = 0; i5 < string7.length; i5++){ - __char = string7.charCodeAt(i5); - if (!isPrintable(__char)) { - return 5; - } - plain = plain && isPlainSafe(__char); - } - } else { - for(i5 = 0; i5 < string7.length; i5++){ - __char = string7.charCodeAt(i5); - if (__char === 0x0a) { - hasLineBreak = true; - if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || i5 - previousLineBreak - 1 > lineWidth && string7[previousLineBreak + 1] !== " "; - previousLineBreak = i5; - } - } else if (!isPrintable(__char)) { - return 5; - } - plain = plain && isPlainSafe(__char); - } - hasFoldableLine = hasFoldableLine || shouldTrackWidth && i5 - previousLineBreak - 1 > lineWidth && string7[previousLineBreak + 1] !== " "; - } - if (!hasLineBreak && !hasFoldableLine) { - return plain && !testAmbiguousType(string7) ? 1 : 2; - } - if (indentPerLevel > 9 && needIndentIndicator(string7)) { - return 5; - } - return hasFoldableLine ? 4 : 3; -} -function foldLine(line, width) { - if (line === "" || line[0] === " ") return line; - const breakRe = / [^ ]/g; - let match; - let start = 0, end, curr = 0, next = 0; - let result = ""; - while(match = breakRe.exec(line)){ - next = match.index; - if (next - start > width) { - end = curr > start ? curr : next; - result += `\n${line.slice(start, end)}`; - start = end + 1; - } - curr = next; - } - result += "\n"; - if (line.length - start > width && curr > start) { - result += `${line.slice(start, curr)}\n${line.slice(curr + 1)}`; - } else { - result += line.slice(start); - } - return result.slice(1); -} -function dropEndingNewline(string8) { - return string8[string8.length - 1] === "\n" ? string8.slice(0, -1) : string8; -} -function foldString(string9, width) { - const lineRe = /(\n+)([^\n]*)/g; - let result = (()=>{ - let nextLF = string9.indexOf("\n"); - nextLF = nextLF !== -1 ? nextLF : string9.length; - lineRe.lastIndex = nextLF; - return foldLine(string9.slice(0, nextLF), width); - })(); - let prevMoreIndented = string9[0] === "\n" || string9[0] === " "; - let moreIndented; - let match; - while(match = lineRe.exec(string9)){ - const prefix = match[1], line = match[2]; - moreIndented = line[0] === " "; - result += prefix + (!prevMoreIndented && !moreIndented && line !== "" ? "\n" : "") + foldLine(line, width); - prevMoreIndented = moreIndented; - } - return result; -} -function escapeString(string10) { - let result = ""; - let __char, nextChar; - let escapeSeq; - for(let i6 = 0; i6 < string10.length; i6++){ - __char = string10.charCodeAt(i6); - if (__char >= 0xd800 && __char <= 0xdbff) { - nextChar = string10.charCodeAt(i6 + 1); - if (nextChar >= 0xdc00 && nextChar <= 0xdfff) { - result += encodeHex((__char - 0xd800) * 0x400 + nextChar - 0xdc00 + 0x10000); - i6++; - continue; - } - } - escapeSeq = ESCAPE_SEQUENCES[__char]; - result += !escapeSeq && isPrintable(__char) ? string10[i6] : escapeSeq || encodeHex(__char); - } - return result; -} -function blockHeader(string11, indentPerLevel) { - const indentIndicator = needIndentIndicator(string11) ? String(indentPerLevel) : ""; - const clip = string11[string11.length - 1] === "\n"; - const keep = clip && (string11[string11.length - 2] === "\n" || string11 === "\n"); - const chomp = keep ? "+" : clip ? "" : "-"; - return `${indentIndicator}${chomp}\n`; -} -function writeScalar(state, string12, level, iskey) { - state.dump = (()=>{ - if (string12.length === 0) { - return "''"; - } - if (!state.noCompatMode && DEPRECATED_BOOLEANS_SYNTAX.indexOf(string12) !== -1) { - return `'${string12}'`; - } - const indent = state.indent * Math.max(1, level); - const lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); - const singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel; - function testAmbiguity(str3) { - return testImplicitResolving(state, str3); - } - switch(chooseScalarStyle(string12, singleLineOnly, state.indent, lineWidth, testAmbiguity)){ - case STYLE_PLAIN: - return string12; - case STYLE_SINGLE: - return `'${string12.replace(/'/g, "''")}'`; - case STYLE_LITERAL: - return `|${blockHeader(string12, state.indent)}${dropEndingNewline(indentString(string12, indent))}`; - case STYLE_FOLDED: - return `>${blockHeader(string12, state.indent)}${dropEndingNewline(indentString(foldString(string12, lineWidth), indent))}`; - case STYLE_DOUBLE: - return `"${escapeString(string12)}"`; - default: - throw new YAMLError("impossible error: invalid scalar style"); - } - })(); -} -function writeFlowSequence(state, level, object14) { - let _result = ""; - const _tag = state.tag; - for(let index = 0, length = object14.length; index < length; index += 1){ - if (writeNode(state, level, object14[index], false, false)) { - if (index !== 0) _result += `,${!state.condenseFlow ? " " : ""}`; - _result += state.dump; - } - } - state.tag = _tag; - state.dump = `[${_result}]`; -} -function writeBlockSequence(state, level, object15, compact = false) { - let _result = ""; - const _tag = state.tag; - for(let index = 0, length = object15.length; index < length; index += 1){ - if (writeNode(state, level + 1, object15[index], true, true)) { - if (!compact || index !== 0) { - _result += generateNextLine(state, level); - } - if (state.dump && 0x0a === state.dump.charCodeAt(0)) { - _result += "-"; - } else { - _result += "- "; - } - _result += state.dump; - } - } - state.tag = _tag; - state.dump = _result || "[]"; -} -function writeFlowMapping(state, level, object16) { - let _result = ""; - const _tag = state.tag, objectKeyList = Object.keys(object16); - let pairBuffer, objectKey, objectValue; - for(let index = 0, length = objectKeyList.length; index < length; index += 1){ - pairBuffer = state.condenseFlow ? '"' : ""; - if (index !== 0) pairBuffer += ", "; - objectKey = objectKeyList[index]; - objectValue = object16[objectKey]; - if (!writeNode(state, level, objectKey, false, false)) { - continue; - } - if (state.dump.length > 1024) pairBuffer += "? "; - pairBuffer += `${state.dump}${state.condenseFlow ? '"' : ""}:${state.condenseFlow ? "" : " "}`; - if (!writeNode(state, level, objectValue, false, false)) { - continue; - } - pairBuffer += state.dump; - _result += pairBuffer; - } - state.tag = _tag; - state.dump = `{${_result}}`; -} -function writeBlockMapping(state, level, object17, compact = false) { - const _tag = state.tag, objectKeyList = Object.keys(object17); - let _result = ""; - if (state.sortKeys === true) { - objectKeyList.sort(); - } else if (typeof state.sortKeys === "function") { - objectKeyList.sort(state.sortKeys); - } else if (state.sortKeys) { - throw new YAMLError("sortKeys must be a boolean or a function"); - } - let pairBuffer = "", objectKey, objectValue, explicitPair; - for(let index = 0, length = objectKeyList.length; index < length; index += 1){ - pairBuffer = ""; - if (!compact || index !== 0) { - pairBuffer += generateNextLine(state, level); - } - objectKey = objectKeyList[index]; - objectValue = object17[objectKey]; - if (!writeNode(state, level + 1, objectKey, true, true, true)) { - continue; - } - explicitPair = state.tag !== null && state.tag !== "?" || state.dump && state.dump.length > 1024; - if (explicitPair) { - if (state.dump && 0x0a === state.dump.charCodeAt(0)) { - pairBuffer += "?"; - } else { - pairBuffer += "? "; - } - } - pairBuffer += state.dump; - if (explicitPair) { - pairBuffer += generateNextLine(state, level); - } - if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { - continue; - } - if (state.dump && 0x0a === state.dump.charCodeAt(0)) { - pairBuffer += ":"; - } else { - pairBuffer += ": "; - } - pairBuffer += state.dump; - _result += pairBuffer; - } - state.tag = _tag; - state.dump = _result || "{}"; -} -function detectType(state, object18, explicit = false) { - const typeList = explicit ? state.explicitTypes : state.implicitTypes; - let type; - let style; - let _result; - for(let index = 0, length = typeList.length; index < length; index += 1){ - type = typeList[index]; - if ((type.instanceOf || type.predicate) && (!type.instanceOf || typeof object18 === "object" && object18 instanceof type.instanceOf) && (!type.predicate || type.predicate(object18))) { - state.tag = explicit ? type.tag : "?"; - if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; - if (_toString2.call(type.represent) === "[object Function]") { - _result = type.represent(object18, style); - } else if (hasOwn4(type.represent, style)) { - _result = type.represent[style](object18, style); - } else { - throw new YAMLError(`!<${type.tag}> tag resolver accepts not "${style}" style`); - } - state.dump = _result; - } - return true; - } - } - return false; -} -function writeNode(state, level, object19, block, compact, iskey = false) { - state.tag = null; - state.dump = object19; - if (!detectType(state, object19, false)) { - detectType(state, object19, true); - } - const type = _toString2.call(state.dump); - if (block) { - block = state.flowLevel < 0 || state.flowLevel > level; - } - const objectOrArray = type === "[object Object]" || type === "[object Array]"; - let duplicateIndex = -1; - let duplicate = false; - if (objectOrArray) { - duplicateIndex = state.duplicates.indexOf(object19); - duplicate = duplicateIndex !== -1; - } - if (state.tag !== null && state.tag !== "?" || duplicate || state.indent !== 2 && level > 0) { - compact = false; - } - if (duplicate && state.usedDuplicates[duplicateIndex]) { - state.dump = `*ref_${duplicateIndex}`; - } else { - if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { - state.usedDuplicates[duplicateIndex] = true; - } - if (type === "[object Object]") { - if (block && Object.keys(state.dump).length !== 0) { - writeBlockMapping(state, level, state.dump, compact); - if (duplicate) { - state.dump = `&ref_${duplicateIndex}${state.dump}`; - } - } else { - writeFlowMapping(state, level, state.dump); - if (duplicate) { - state.dump = `&ref_${duplicateIndex} ${state.dump}`; - } - } - } else if (type === "[object Array]") { - const arrayLevel = state.noArrayIndent && level > 0 ? level - 1 : level; - if (block && state.dump.length !== 0) { - writeBlockSequence(state, arrayLevel, state.dump, compact); - if (duplicate) { - state.dump = `&ref_${duplicateIndex}${state.dump}`; - } - } else { - writeFlowSequence(state, arrayLevel, state.dump); - if (duplicate) { - state.dump = `&ref_${duplicateIndex} ${state.dump}`; - } - } - } else if (type === "[object String]") { - if (state.tag !== "?") { - writeScalar(state, state.dump, level, iskey); - } - } else { - if (state.skipInvalid) return false; - throw new YAMLError(`unacceptable kind of an object to dump ${type}`); - } - if (state.tag !== null && state.tag !== "?") { - state.dump = `!<${state.tag}> ${state.dump}`; - } - } - return true; -} -function inspectNode(object20, objects, duplicatesIndexes) { - if (object20 !== null && typeof object20 === "object") { - const index = objects.indexOf(object20); - if (index !== -1) { - if (duplicatesIndexes.indexOf(index) === -1) { - duplicatesIndexes.push(index); - } - } else { - objects.push(object20); - if (Array.isArray(object20)) { - for(let idx = 0, length = object20.length; idx < length; idx += 1){ - inspectNode(object20[idx], objects, duplicatesIndexes); - } - } else { - const objectKeyList = Object.keys(object20); - for(let idx = 0, length = objectKeyList.length; idx < length; idx += 1){ - inspectNode(object20[objectKeyList[idx]], objects, duplicatesIndexes); - } - } - } - } -} -function getDuplicateReferences(object21, state) { - const objects = [], duplicatesIndexes = []; - inspectNode(object21, objects, duplicatesIndexes); - const length = duplicatesIndexes.length; - for(let index = 0; index < length; index += 1){ - state.duplicates.push(objects[duplicatesIndexes[index]]); - } - state.usedDuplicates = Array.from({ - length - }); -} -function dump(input, options) { - options = options || {}; - const state = new DumperState(options); - if (!state.noRefs) getDuplicateReferences(input, state); - if (writeNode(state, 0, input, true, true)) return `${state.dump}\n`; - return ""; -} -function stringify(obj, options) { - return dump(obj, options); -} -const mod = { - parse: parse, - parseAll: parseAll, - stringify: stringify, - Type: Type, - CORE_SCHEMA: core, - DEFAULT_SCHEMA: def, - EXTENDED_SCHEMA: extended, - FAILSAFE_SCHEMA: failsafe, - JSON_SCHEMA: json -}; -const setConfig = async (effects, input)=>{ - await effects.createDir({ - path: "start9", - volumeId: "main" - }); - await effects.writeFile({ - path: "start9/config.yaml", - toWrite: mod.stringify(input), - volumeId: "main" - }); - const result = { - signal: "SIGTERM", - "depends-on": {} - }; - return { - result - }; -}; -const { shape: shape1 , arrayOf: arrayOf1 , string: string1 , boolean: __boolean1 } = matches; -const matchProxyConfig = shape1({ - users: arrayOf1(shape1({ - name: string1, - "allowed-calls": arrayOf1(string1), - password: string1, - "fetch-blocks": __boolean1 - }, [ - "fetch-blocks" - ])) -}); -function times(fn, amount) { - const answer = new Array(amount); - for(let i7 = 0; i7 < amount; i7++){ - answer[i7] = fn(i7); - } - return answer; -} -function randomItemString(input) { - return input[Math.floor(Math.random() * input.length)]; -} -const serviceName = "c-lightning"; -const fullChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; -const checks = [ - { - currentError (config) { - if (!matchProxyConfig.test(config)) { - return "Config is not the correct shape"; - } - if (config.users.some((x)=>x.name === serviceName - )) { - return; - } - return `Must have an RPC user named "${serviceName}"`; - }, - fix (config) { - config.users.push({ - name: serviceName, - "allowed-calls": [], - password: times(()=>randomItemString(fullChars) - , 22).join("") - }); - } - }, - ...[ - "echo", - "gettxout", - "getblockchaininfo", - "sendrawtransaction", - "getblockhash", - "getblock", - "getblockcount", - "estimatesmartfee", - "getnetworkinfo", - ].map((operator)=>({ - currentError (config) { - if (!matchProxyConfig.test(config)) { - return "Config is not the correct shape"; - } - if (config.users.find((x)=>x.name === serviceName - )?.["allowed-calls"]?.some((x)=>x === operator - ) ?? false) { - return; - } - return `RPC user "c-lightning" must have "${operator}" enabled`; - }, - fix (config) { - if (!matchProxyConfig.test(config)) { - throw new Error("Config is not the correct shape"); - } - const found = config.users.find((x)=>x.name === serviceName - ); - if (!found) { - throw new Error("Users for c-lightning should exist"); - } - found["allowed-calls"] = [ - ...found["allowed-calls"] ?? [], - operator - ]; - } - }) - ), - { - currentError (config) { - if (!matchProxyConfig.test(config)) { - return "Config is not the correct shape"; - } - if (config.users.find((x)=>x.name === serviceName - )?.["fetch-blocks"] ?? false) { - return; - } - return `RPC user "c-lightning" must have "Fetch Blocks" enabled`; - }, - fix (config) { - if (!matchProxyConfig.test(config)) { - throw new Error("Config is not the correct shape"); - } - const found = config.users.find((x)=>x.name === serviceName - ); - if (!found) { - throw new Error("Users for c-lightning should exist"); - } - found["fetch-blocks"] = true; - } - }, -]; -const matchBitcoindConfig = shape1({ - advanced: shape1({ - pruning: shape1({ - mode: string1 - }) - }) -}); -const dependencies = { - "btc-rpc-proxy": { - async check (effects, configInput) { - effects.info("check btc-rpc-proxy"); - for (const checker of checks){ - const error = checker.currentError(configInput); - if (error) { - effects.error(`throwing error: ${error}`); - return { - error - }; - } - } - return { - result: null - }; - }, - async autoConfigure (effects, configInput) { - effects.info("autoconfigure btc-rpc-proxy"); - for (const checker of checks){ - const error = checker.currentError(configInput); - if (error) { - checker.fix(configInput); - } - } - return { - result: configInput - }; - } - }, - bitcoind: { - async check (effects, configInput) { - effects.info("check bitcoind"); - const config = matchBitcoindConfig.unsafeCast(configInput); - if (config.advanced.pruning.mode !== "disabled") { - return { - error: 'Pruning must be disabled to use Bitcoin Core directly. To use with a pruned node, set Bitcoin Core to "Internal (Bitcoin Proxy)" instead.' - }; - } - return { - result: null - }; - }, - async autoConfigure (effects, configInput) { - effects.info("autoconfigure bitcoind"); - const config = matchBitcoindConfig.unsafeCast(configInput); - config.advanced.pruning.mode = "disabled"; - return { - result: config - }; - } - } -}; -const { shape: shape2 , string: string2 , boolean: __boolean2 , dictionary: dictionary1 , any: any1 } = matches; -const matchConfig = dictionary1([ - string2, - any1 -]); -const properties = async (effects)=>{ - return { - result: mod.parse(await effects.readFile({ - path: "start9/stats.yaml", - volumeId: "main" - })) - }; - const config = matchConfig.unsafeCast(mod.parse(await effects.readFile({ - path: "start9/config.yaml", - volumeId: "main" - }))); - const environmentVariables = matchConfig.unsafeCast(mod.parse(await effects.readFile({ - path: "start9/environment.yaml", - volumeId: "main" - }))); - const rpcAddress = environmentVariables['RPC_TOR_ADDRESS']; - const data = {}; - if (string2.test(config?.rpc?.username) && string2.test(config?.rpc?.password)) { - data['Tor Quick Connect'] = { - "value_type": "string", - value: `btcstandup://${config.rpc.username}:${config.rpc.password}@${rpcAddress}:8332` - }; - } - const result = { - version: 2, - data - }; - return { - result - }; -}; -const { any: any2 , string: string3 , dictionary: dictionary2 } = matches; -const matchConfig1 = dictionary2([ - string3, - any2 -]); -const getConfig = async (effects)=>{ - const config = await effects.readFile({ - path: "start9/config.yaml", - volumeId: "main" - }).then((x)=>mod.parse(x) - ).then((x)=>matchConfig1.unsafeCast(x) - ).catch((e)=>{ - effects.warn(`Got error ${e} while trying to read the config`); - return undefined; - }); - const spec = { - "peer-tor-address": { - "name": "Peer Tor Address", - "description": "The Tor address of the peer interface", - "type": "pointer", - "subtype": "package", - "package-id": "bitcoind", - "target": "tor-address", - "interface": "peer" - }, - "rpc-tor-address": { - "name": "RPC Tor Address", - "description": "The Tor address of the RPC interface", - "type": "pointer", - "subtype": "package", - "package-id": "bitcoind", - "target": "tor-address", - "interface": "rpc" - }, - "rpc": { - "type": "object", - "name": "RPC Settings", - "description": "RPC configuration options.", - "spec": { - "enable": { - "type": "boolean", - "name": "Enable", - "description": "Allow remote RPC requests.", - "default": true - }, - "username": { - "type": "string", - "nullable": false, - "name": "Username", - "description": "The username for connecting to Bitcoin over RPC.", - "default": "bitcoin", - "masked": true, - "pattern": "^[a-zA-Z0-9_]+$", - "pattern-description": "Must be alphanumeric (can contain underscore)." - }, - "password": { - "type": "string", - "nullable": false, - "name": "RPC Password", - "description": "The password for connecting to Bitcoin over RPC.", - "default": { - "charset": "a-z,2-7", - "len": 20 - }, - "pattern": "^[^\\n\"]*$", - "pattern-description": "Must not contain newline or quote characters.", - "copyable": true, - "masked": true - }, - "advanced": { - "type": "object", - "name": "Advanced", - "description": "Advanced RPC Settings", - "spec": { - "auth": { - "name": "Authorization", - "description": "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", - "type": "list", - "subtype": "string", - "default": [], - "spec": { - "pattern": "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", - "pattern-description": "Each item must be of the form \":$\"." - }, - "range": "[0,*)" - }, - "serialversion": { - "name": "Serialization Version", - "description": "Return raw transaction or block hex with Segwit or non-SegWit serialization.", - "type": "enum", - "values": [ - "non-segwit", - "segwit" - ], - "value-names": {}, - "default": "segwit" - }, - "servertimeout": { - "name": "Rpc Server Timeout", - "description": "Number of seconds after which an uncompleted RPC call will time out.", - "type": "number", - "nullable": false, - "range": "[5,300]", - "integral": true, - "units": "seconds", - "default": 30 - }, - "threads": { - "name": "Threads", - "description": "Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node.", - "type": "number", - "nullable": false, - "default": 4, - "range": "[1,64]", - "integral": true, - "units": undefined - }, - "workqueue": { - "name": "Work Queue", - "description": "Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones.", - "type": "number", - "nullable": false, - "default": 128, - "range": "[8,256]", - "integral": true, - "units": "requests" - } - } - } - } - }, - "zmq-enabled": { - "type": "boolean", - "name": "ZeroMQ Enabled", - "description": "Enable the ZeroMQ interface", - "default": true - }, - "txindex": { - "type": "boolean", - "name": "Transaction Index", - "description": "Enable the Transaction Index (txindex)", - "default": false - }, - "wallet": { - "type": "object", - "name": "Wallet", - "description": "Wallet Settings", - "spec": { - "enable": { - "name": "Enable Wallet", - "description": "Load the wallet and enable wallet RPC calls.", - "type": "boolean", - "default": true - }, - "avoidpartialspends": { - "name": "Avoid Partial Spends", - "description": "Group outputs by address, selecting all or none, instead of selecting on a per-output basis. This improves privacy at the expense of higher transaction fees.", - "type": "boolean", - "default": true - }, - "discardfee": { - "name": "Discard Change Tolerance", - "description": "The fee rate (in BTC/kB) that indicates your tolerance for discarding change by adding it to the fee.", - "type": "number", - "nullable": false, - "default": 0.0001, - "range": "[0,.01]", - "integral": false, - "units": "BTC/kB" - } - } - }, - "advanced": { - "type": "object", - "name": "Advanced", - "description": "Advanced Settings", - "spec": { - "mempool": { - "type": "object", - "name": "Mempool", - "description": "Mempool Settings", - "spec": { - "persistmempool": { - "type": "boolean", - "name": "Persist Mempool", - "description": "Save the mempool on shutdown and load on restart.", - "default": true - }, - "maxmempool": { - "type": "number", - "nullable": false, - "name": "Max Mempool Size", - "description": "Keep the transaction memory pool below megabytes.", - "range": "[1,*)", - "integral": true, - "units": "MiB", - "default": 300 - }, - "mempoolexpiry": { - "type": "number", - "nullable": false, - "name": "Mempool Expiration", - "description": "Do not keep transactions in the mempool longer than hours.", - "range": "[1,*)", - "integral": true, - "units": "Hr", - "default": 336 - } - } - }, - "peers": { - "type": "object", - "name": "Peers", - "description": "Peer Connection Settings", - "spec": { - "listen": { - "type": "boolean", - "name": "Make Public", - "description": "Allow other nodes to find your server on the network.", - "default": true - }, - "onlyconnect": { - "type": "boolean", - "name": "Disable Peer Discovery", - "description": "Only connect to specified peers.", - "default": false - }, - "onlyonion": { - "type": "boolean", - "name": "Disable Clearnet", - "description": "Only connect to peers over Tor.", - "default": false - }, - "addnode": { - "name": "Add Nodes", - "description": "Add addresses of nodes to connect to.", - "type": "list", - "subtype": "object", - "range": "[0,*)", - "default": [], - "spec": { - "type": "object", - "nullable": false, - "name": "Peer", - "description": "Peer to connect to", - "spec": { - "hostname": { - "type": "string", - "nullable": false, - "name": "Hostname", - "description": "Domain or IP address of bitcoin peer", - "pattern": "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", - "pattern-description": "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port." - }, - "port": { - "type": "number", - "nullable": true, - "name": "Port", - "description": "Port that peer is listening on for inbound p2p connections", - "range": "[0,65535]", - "integral": true - } - } - } - } - } - }, - "dbcache": { - "type": "number", - "nullable": true, - "name": "Database Cache", - "description": "How much RAM to allocate for caching the TXO set. Higher values improve syncing performance, but increase your chance of using up all your system's memory or corrupting your database in the event of an ungraceful shutdown. Set this high but comfortably below your system's total RAM during IBD, then turn down to 450 (or leave blank) once the sync completes.", - "warning": "WARNING: Increasing this value results in a higher chance of ungraceful shutdowns, which can leave your node unusable if it happens during the initial block download. Use this setting with caution. Be sure to set this back to the default (450 or leave blank) once your node is synced.", - "range": "(0,1024]", - "integral": true, - "units": "MiB" - }, - "pruning": { - "type": "union", - "name": "Pruning Settings", - "description": "Blockchain Pruning Options\nReduce the blockchain size on disk\n", - "warning": "If you set pruning to Manual and your disk is smaller than the total size of the blockchain, you MUST have something running that prunes these blocks or you may overfill your disk!\nDisabling pruning will convert your node into a full archival node. This requires a resync of the entire blockchain, a process that may take several days. Make sure you have enough free disk space or you may fill up your disk.\n", - "tag": { - "id": "mode", - "name": "Pruning Mode", - "description": "- Disabled: Disable pruning\n- Automatic: Limit blockchain size on disk to a certain number of megabytes\n- Manual: Prune blockchain with the \"pruneblockchain\" RPC\n", - "variant-names": { - "disabled": "Disabled", - "automatic": "Automatic", - "manual": "Manual" - } - }, - "variants": { - "disabled": {}, - "automatic": { - "size": { - "type": "number", - "nullable": false, - "name": "Max Chain Size", - "description": "Limit of blockchain size on disk.", - "warning": "Increasing this value will require re-syncing your node.", - "default": 550, - "range": "[550,1000000)", - "integral": true, - "units": "MiB" - } - }, - "manual": { - "size": { - "type": "number", - "nullable": false, - "name": "Failsafe Chain Size", - "description": "Prune blockchain if size expands beyond this.", - "default": 65536, - "range": "[550,1000000)", - "integral": true, - "units": "MiB" - } - } - }, - "default": "disabled" - }, - "blockfilters": { - "type": "object", - "name": "Block Filters", - "description": "Settings for storing and serving compact block filters", - "spec": { - "blockfilterindex": { - "type": "boolean", - "name": "Compute Compact Block Filters (BIP158)", - "description": "Generate Compact Block Filters during initial sync (IBD) to enable 'getblockfilter' RPC. This is useful if dependent services need block filters to efficiently scan for addresses/transactions etc.", - "default": false - }, - "peerblockfilters": { - "type": "boolean", - "name": "Serve Compact Block Filters to Peers (BIP157)", - "description": "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data.", - "default": false - } - } - }, - "bloomfilters": { - "type": "object", - "name": "Bloom Filters (BIP37)", - "description": "Setting for serving Bloom Filters", - "spec": { - "peerbloomfilters": { - "type": "boolean", - "name": "Serve Bloom Filters to Peers", - "description": "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", - "warning": "This is ONLY for use with Bisq integration, please use Block Filters for all other applications.", - "default": false - } - } - } - } - } - }; - return { - result: { - config, - spec - } - }; -}; -export { setConfig as setConfig }; -export { dependencies as dependencies }; -export { properties as properties }; -export { getConfig as getConfig }; From fb046908df69376ac5bf09ec07f5a7defc126db5 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Tue, 14 Jun 2022 16:24:13 -0600 Subject: [PATCH 30/41] Typo fix --- scripts/services/setConfig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/services/setConfig.ts b/scripts/services/setConfig.ts index 2d28315..8f5d8e2 100644 --- a/scripts/services/setConfig.ts +++ b/scripts/services/setConfig.ts @@ -31,7 +31,7 @@ export const setConfig: ExpectedExports.setConfig = async ( ) { return { error: - "'Compute Compact Block Filters' must be enabled if 'Serve Comopact Block Filters to Peers' is enabled.", + "'Compute Compact Block Filters' must be enabled if 'Serve Compact Block Filters to Peers' is enabled.", }; } From 76eb735fe9ca08e5110daf0cef227230b3b1879f Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Tue, 14 Jun 2022 16:37:42 -0600 Subject: [PATCH 31/41] Cleanup and copy edit --- assets/compat/config-set.sh | 36 ---- assets/compat/config_rules.yaml | 7 - assets/compat/config_spec.yaml | 314 -------------------------------- scripts/services/getConfig.ts | 2 +- 4 files changed, 1 insertion(+), 358 deletions(-) delete mode 100755 assets/compat/config-set.sh delete mode 100644 assets/compat/config_rules.yaml delete mode 100644 assets/compat/config_spec.yaml diff --git a/assets/compat/config-set.sh b/assets/compat/config-set.sh deleted file mode 100755 index c8dc9f1..0000000 --- a/assets/compat/config-set.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# The general approach here is to diff the old and new configs and if there is a "relevant" change to pruning, defined -# as an extension of retained data, we should start with the reindex process -DATA_DIR=/root/.bitcoin - -# gather old info -cp $DATA_DIR/start9/config.yaml $DATA_DIR/start9/config-old.yaml -OLD_PRUNING_TL=$(cat $DATA_DIR/start9/config-old.yaml | grep -A2 "pruning" | tail -n 2 | head -n 1 | cut -d ':' -f 2 | tr -d ' ') -if [ "$OLD_PRUNING_TL" != "disabled" ] -then - OLD_PRUNING_SIZE=$(cat $DATA_DIR/start9/config-old.yaml | grep -A2 pruning | tail -n 1 | cut -d ':' -f 2 | tr -d ' ') -fi - -# set new config -COMPAT_RES=$(compat config set bitcoind /root/.bitcoin /mnt/assets/config_rules.yaml) - -# gather new info -NEW_PRUNING_TL=$(cat $DATA_DIR/start9/config.yaml | grep -A2 "pruning" | tail -n 2 | head -n 1 | cut -d ':' -f 2 | tr -d ' ') -if [ "$NEW_PRUNING_TL" != "disabled" ] -then - NEW_PRUNING_SIZE=$(cat $DATA_DIR/start9/config.yaml | grep -A2 pruning | tail -n 1 | cut -d ':' -f 2 | tr -d ' ') -fi - -# if the old prune config was disabled, no action required -if [ "$OLD_PRUNING_TL" = "disabled" ] -then - >&2 echo No reindex required -# if they are the same, and the new prune cache size is reduced, no action required -elif [ "$OLD_PRUNING_TL" = "$NEW_PRUNING_TL" ] && [ "$OLD_PRUNING_SIZE" -ge "$NEW_PRUNING_SIZE" ] -then - >&2 echo No reindex required -else - >&2 echo Reindex required - touch $DATA_DIR/requires.reindex -fi -echo "$COMPAT_RES" \ No newline at end of file diff --git a/assets/compat/config_rules.yaml b/assets/compat/config_rules.yaml deleted file mode 100644 index 52d486b..0000000 --- a/assets/compat/config_rules.yaml +++ /dev/null @@ -1,7 +0,0 @@ ---- -- rule: 'rpc.enable? OR !(''advanced.pruning.mode = "manual")' - description: "RPC must be enabled for manual pruning." -- rule: '!(txindex?) OR ''advanced.pruning.mode = "disabled"' - description: "Txindex not allowed on pruned nodes." -- rule: "!(advanced.blockfilters.peerblockfilters?) OR advanced.blockfilters.blockfilterindex?" - description: "'Compute Compact Block Filters' must be enabled if 'Serve Comopact Block Filters to Peers' is enabled." diff --git a/assets/compat/config_spec.yaml b/assets/compat/config_spec.yaml deleted file mode 100644 index b2fe391..0000000 --- a/assets/compat/config_spec.yaml +++ /dev/null @@ -1,314 +0,0 @@ -peer-tor-address: - name: Peer Tor Address - description: The Tor address of the peer interface - type: pointer - subtype: package - package-id: bitcoind - target: tor-address - interface: peer -rpc-tor-address: - name: RPC Tor Address - description: The Tor address of the RPC interface - type: pointer - subtype: package - package-id: bitcoind - target: tor-address - interface: rpc -rpc: - type: object - nullable: false - name: "RPC Settings" - description: "RPC configuration options." - spec: - enable: - type: boolean - name: "Enable" - description: "Allow remote RPC requests." - default: true - username: - type: string - nullable: false - name: "Username" - description: "The username for connecting to Bitcoin over RPC." - default: "bitcoin" - masked: true - pattern: "^[a-zA-Z0-9_]+$" - pattern-description: "Must be alphanumeric (can contain underscore)." - password: - type: string - nullable: false - name: "RPC Password" - description: "The password for connecting to Bitcoin over RPC." - default: - charset: "a-z,2-7" - len: 20 - pattern: '^[^\n"]*$' - pattern-description: "Must not contain newline or quote characters." - copyable: true - masked: true - advanced: - type: object - nullable: false - name: "Advanced" - description: "Advanced RPC Settings" - spec: - auth: - name: Authorization - description: >- - Username and hashed password for JSON-RPC connections. - RPC clients connect using the usual http basic authentication. - type: list - subtype: string - default: [] - spec: - pattern: "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$" - pattern-description: 'Each item must be of the form ":$".' - range: "[0,*)" - serialversion: - name: Serialization Version - description: Return raw transaction or block hex with Segwit or non-SegWit serialization. - type: enum - values: - - non-segwit - - segwit - default: segwit - servertimeout: - name: Rpc Server Timeout - description: Number of seconds after which an uncompleted RPC call will time out. - type: number - nullable: false - range: "[5,300]" - integral: true - units: seconds - default: 30 - threads: - name: Threads - description: Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node. - type: number - nullable: false - default: 4 - range: "[1,64]" - integral: true - units: ~ - workqueue: - name: Work Queue - description: Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones. - type: number - nullable: false - default: 128 - range: "[8,256]" - integral: true - units: requests -zmq-enabled: - type: boolean - name: ZeroMQ Enabled - description: Enable the ZeroMQ interface - default: true -txindex: - type: boolean - name: Transaction Index - description: Enable the Transaction Index (txindex) - default: false -wallet: - type: object - nullable: false - name: "Wallet" - description: "Wallet Settings" - spec: - enable: - name: Enable Wallet - description: Load the wallet and enable wallet RPC calls. - type: boolean - default: true - avoidpartialspends: - name: Avoid Partial Spends - description: >- - Group outputs by address, selecting all or none, instead of selecting on a - per-output basis. This improves privacy at the expense of higher transaction - fees. - type: boolean - default: true - discardfee: - name: Discard Change Tolerance - description: >- - The fee rate (in BTC/kB) that indicates your tolerance - for discarding change by adding it to the fee. - type: number - nullable: false - default: 0.0001 - range: "[0,.01]" - integral: false - units: BTC/kB -advanced: - type: object - nullable: false - name: "Advanced" - description: "Advanced Settings" - spec: - mempool: - type: object - nullable: false - name: "Mempool" - description: "Mempool Settings" - spec: - persistmempool: - type: boolean - name: "Persist Mempool" - description: "Save the mempool on shutdown and load on restart." - default: true - maxmempool: - type: number - nullable: false - name: "Max Mempool Size" - description: "Keep the transaction memory pool below megabytes." - range: "[1,*)" - integral: true - units: MiB - default: 300 - mempoolexpiry: - type: number - nullable: false - name: "Mempool Expiration" - description: "Do not keep transactions in the mempool longer than hours." - range: "[1,*)" - integral: true - units: Hr - default: 336 - peers: - type: object - nullable: false - name: "Peers" - description: "Peer Connection Settings" - spec: - listen: - type: boolean - name: "Make Public" - description: "Allow other nodes to find your server on the network." - default: true - onlyconnect: - type: boolean - name: Disable Peer Discovery - description: Only connect to specified peers. - default: false - onlyonion: - type: boolean - name: Disable Clearnet - description: Only connect to peers over Tor. - default: false - addnode: - name: Add Nodes - description: Add addresses of nodes to connect to. - type: list - subtype: object - range: "[0,*)" - default: [] - spec: - type: object - nullable: false - name: "Peer" - description: "Peer to connect to" - spec: - hostname: - type: string - nullable: false - name: "Hostname" - description: "Domain or IP address of bitcoin peer" - pattern: "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))" - pattern-description: Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port. - port: - type: number - nullable: true - name: "Port" - description: "Port that peer is listening on for inbound p2p connections" - range: "[0,65535]" - integral: true - dbcache: - type: number - nullable: true - name: "Database Cache" - description: "How much RAM to allocate for caching the TXO set. Higher values improve syncing performance, but increase your chance of using up all your system's memory or corrupting your database in the event of an ungraceful shutdown. Set this high but comfortably below your system's total RAM during IBD, then turn down to 450 (or leave blank) once the sync completes." - warning: "WARNING: Increasing this value results in a higher chance of ungraceful shutdowns, which can leave your node unusable if it happens during the initial block download. Use this setting with caution. Be sure to set this back to the default (450 or leave blank) once your node is synced." - range: "(0,1024]" - integral: true - units: MiB - pruning: - type: union - name: "Pruning Settings" - description: | - Blockchain Pruning Options - Reduce the blockchain size on disk - warning: | - If you set pruning to Manual and your disk is smaller than the total size of the blockchain, you MUST have something running that prunes these blocks or you may overfill your disk! - Disabling pruning will convert your node into a full archival node. This requires a resync of the entire blockchain, a process that may take several days. Make sure you have enough free disk space or you may fill up your disk. - tag: - id: mode - name: Pruning Mode - description: | - - Disabled: Disable pruning - - Automatic: Limit blockchain size on disk to a certain number of megabytes - - Manual: Prune blockchain with the "pruneblockchain" RPC - variant-names: - disabled: Disabled - automatic: Automatic - manual: Manual - variants: - disabled: {} - automatic: - size: - type: number - nullable: false - name: "Max Chain Size" - description: "Limit of blockchain size on disk." - warning: "Increasing this value will require re-syncing your node." - default: 550 - range: "[550,1000000)" - integral: true - units: MiB - manual: - size: - type: number - nullable: false - name: "Failsafe Chain Size" - description: "Prune blockchain if size expands beyond this." - default: 65536 - range: "[550,1000000)" - integral: true - units: MiB - default: disabled - blockfilters: - type: object - nullable: false - name: "Block Filters" - description: "Settings for storing and serving compact block filters" - spec: - blockfilterindex: - type: boolean - name: "Compute Compact Block Filters (BIP158)" - description: >- - Generate Compact Block Filters during initial sync (IBD) to enable 'getblockfilter' RPC. This is useful if - dependent services need block filters to efficiently scan for addresses/transactions etc. - default: false - peerblockfilters: - type: boolean - name: "Serve Compact Block Filters to Peers (BIP157)" - description: >- - Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to - connect an SPV client to your node to make it efficient to scan transactions without having to download all - block data. - default: false - bloomfilters: - type: object - nullable: false - name: "Bloom Filters (BIP37)" - description: "Setting for serving Bloom Filters" - spec: - peerbloomfilters: - type: boolean - name: "Serve Bloom Filters to Peers" - description: >- - Peers have the option of setting filters on each connection they make after the version handshake has completed. - Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers - connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions - in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration. - warning: "This is ONLY for use with Bisq integration, please use Block Filters for all other applications." - default: false \ No newline at end of file diff --git a/scripts/services/getConfig.ts b/scripts/services/getConfig.ts index 34de4d5..e917ac5 100644 --- a/scripts/services/getConfig.ts +++ b/scripts/services/getConfig.ts @@ -363,7 +363,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "type": "boolean", "name": "Serve Compact Block Filters to Peers (BIP157)", "description": - "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data.", + "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data. 'Compute Compact Block Filters (BIP158)' is required.", "default": false, }, }, From 395dfd1d2211e8e8ba9f81d220a541c238e60e01 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Wed, 15 Jun 2022 11:36:07 -0600 Subject: [PATCH 32/41] Add ZMQ config options for eclair compatibility --- assets/compat/bitcoin.conf.template | 3 +++ manifest.yaml | 20 -------------------- migrations/lt_22_0_0.sh | 21 --------------------- 3 files changed, 3 insertions(+), 41 deletions(-) delete mode 100644 migrations/lt_22_0_0.sh diff --git a/assets/compat/bitcoin.conf.template b/assets/compat/bitcoin.conf.template index ac0119e..1fffdde 100644 --- a/assets/compat/bitcoin.conf.template +++ b/assets/compat/bitcoin.conf.template @@ -101,7 +101,10 @@ discardfee={{wallet.discardfee}} ## ZERO MQ {{#IF zmq-enabled zmqpubrawblock=tcp://0.0.0.0:28332 +zmqpubhashblock=tcp://0.0.0.0:28332 zmqpubrawtx=tcp://0.0.0.0:28333 +zmqpubhashtx=tcp://0.0.0.0:28333 +zmqpubsequence=tcp://0.0.0.0:28333 }} ## TXINDEX diff --git a/manifest.yaml b/manifest.yaml index 9039318..8e45d07 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -162,16 +162,6 @@ migrations: mounts: main: /root/.bitcoin inject: false - "=22.0.0": - type: docker - image: main - system: false - entrypoint: /usr/local/bin/migrations/eq_22_0_0.sh - args: ["from"] - io-format: json - mounts: - main: /root/.bitcoin - inject: false ">22.0.0 <23.0.0": type: docker image: main @@ -193,16 +183,6 @@ migrations: mounts: main: /root/.bitcoin inject: false - "=22.0.0": - type: docker - image: main - system: false - entrypoint: /usr/local/bin/migrations/eq_22_0_0.sh - args: ["to"] - io-format: json - mounts: - main: /root/.bitcoin - inject: false ">22.0.0 <23.0.0": type: docker image: main diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh deleted file mode 100644 index a415c29..0000000 --- a/migrations/lt_22_0_0.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -set -ea - -if [ $1 = "from" ]; then - yq -i '.advanced.peers.addnode |= map(select(.hostname != ~ or . == "*"))' /root/.bitcoin/start9/config.yaml - yq -i '.advanced.peers.addnode.[] |= {"hostname":., "port":~}' /root/.bitcoin/start9/config.yaml - yq -i '(.advanced.blockfilters.blockfilterindex, .advanced.blockfilters.peerblockfilters, .advanced.bloomfilters.peerbloomfilters) = false' /root/.bitcoin/start9/config.yaml - echo '{"configured": true }' - exit 0 -elif [ $1 = "to" ]; then - yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml - yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml - yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml - echo '{"configured": false }' - exit 0 -else - echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 - exit 1 -fi -`` \ No newline at end of file From 6e2c564982c4b970ba501025a5d66fa195cc0d0b Mon Sep 17 00:00:00 2001 From: J M <2364004+Blu-J@users.noreply.github.com> Date: Wed, 15 Jun 2022 14:41:02 -0600 Subject: [PATCH 33/41] Update getConfig.ts --- scripts/services/getConfig.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/services/getConfig.ts b/scripts/services/getConfig.ts index e917ac5..6c2715b 100644 --- a/scripts/services/getConfig.ts +++ b/scripts/services/getConfig.ts @@ -377,7 +377,7 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "type": "boolean", "name": "Serve Bloom Filters to Peers", "description": - "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Pament Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", + "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Payment Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", "warning": "This is ONLY for use with Bisq integration, please use Block Filters for all other applications.", "default": false, From a96047e58f08a9ed86468fb4c324c6f75ddbfc44 Mon Sep 17 00:00:00 2001 From: J M Date: Wed, 15 Jun 2022 17:29:15 -0600 Subject: [PATCH 34/41] chore: update types again --- scripts/services/getConfig.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/services/getConfig.ts b/scripts/services/getConfig.ts index 6c2715b..859cd24 100644 --- a/scripts/services/getConfig.ts +++ b/scripts/services/getConfig.ts @@ -257,9 +257,6 @@ export const getConfig: ExpectedExports.getConfig = async (effects) => { "range": "[0,*)", "default": [], "spec": { - "type": "object", - "name": "Peer", - "description": "Peer to connect to", "spec": { "hostname": { "type": "string", From dd32b8eb6060a70fe23c9ec7c6ca2a9912d047ad Mon Sep 17 00:00:00 2001 From: J M Date: Mon, 27 Jun 2022 11:11:57 -0600 Subject: [PATCH 35/41] chore: Fix bad migration --- migrations/gt_22_0_0_lt_23_0_0.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/migrations/gt_22_0_0_lt_23_0_0.sh b/migrations/gt_22_0_0_lt_23_0_0.sh index a25a25a..bfa749d 100644 --- a/migrations/gt_22_0_0_lt_23_0_0.sh +++ b/migrations/gt_22_0_0_lt_23_0_0.sh @@ -10,10 +10,6 @@ if [ $1 = "from" ]; then exit 0 elif [ $1 = "to" ]; then yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml -<<<<<<<< HEAD:migrations/gt_22_0_0_lt_23_0_0.sh -======== - yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml ->>>>>>>> origin/master:migrations/lt_22_0_0.sh yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml echo '{"configured": false }' exit 0 From a094688fc54a7e10cde9d647cea9340d4a504773 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Tue, 28 Jun 2022 17:29:55 -0600 Subject: [PATCH 36/41] Added min eos version --- manifest.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/manifest.yaml b/manifest.yaml index 3fa687b..66a0940 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -1,6 +1,7 @@ id: bitcoind title: "Bitcoin Core" version: 23.0.0 +eos-version: 0.3.1 release-notes: | * Latest release from Core - see full release notes at https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-23.0.md * Embassy changes From 036d6256a583a1c4757c47464b9a9d33ae573399 Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Wed, 29 Jun 2022 10:53:19 -0600 Subject: [PATCH 37/41] fix setConfig on fresh install --- scripts/services/setConfig.ts | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/scripts/services/setConfig.ts b/scripts/services/setConfig.ts index f3a48c7..2d70b8a 100644 --- a/scripts/services/setConfig.ts +++ b/scripts/services/setConfig.ts @@ -35,12 +35,17 @@ export const setConfig: ExpectedExports.setConfig = async ( }; } + await effects.createDir({ + path: "start9", + volumeId: "main", + }); + // config-set.sh const oldConfig = await effects.readFile({ path: "start9/config.yaml", volumeId: "main", - }).catch(() => ""); + }).catch(() => null); if (oldConfig) { await effects.writeFile({ path: "start9/config-old.yaml", @@ -75,18 +80,9 @@ export const setConfig: ExpectedExports.setConfig = async ( }); } } else { - effects.debug("Reindex required"); - await effects.writeFile({ - path: "start9/requires.reindex", - toWrite: "", - volumeId: "main", - }); + effects.debug("No reindex required"); } - - await effects.createDir({ - path: "start9", - volumeId: "main", - }); + await effects.writeFile({ path: "start9/config.yaml", toWrite: YAML.stringify(newConfig), From 16d4ac13aa86d8490dc05507205b490937b41a44 Mon Sep 17 00:00:00 2001 From: J M <2364004+Blu-J@users.noreply.github.com> Date: Wed, 29 Jun 2022 12:54:58 -0600 Subject: [PATCH 38/41] fix: missing properties (#75) * fix: missing properties * chore: Convert to compat * chore: Update the sdk * Update dependencies.ts --- scripts/dependencies.ts | 1 + scripts/deps.ts | 14 - scripts/services/getConfig.ts | 699 ++++++++++++++++----------------- scripts/services/properties.ts | 16 +- scripts/services/setConfig.ts | 21 +- 5 files changed, 351 insertions(+), 400 deletions(-) create mode 100644 scripts/dependencies.ts delete mode 100644 scripts/deps.ts diff --git a/scripts/dependencies.ts b/scripts/dependencies.ts new file mode 100644 index 0000000..a180103 --- /dev/null +++ b/scripts/dependencies.ts @@ -0,0 +1 @@ +export * from "https://deno.land/x/embassyd_sdk@v0.3.1.0.3/mod.ts"; diff --git a/scripts/deps.ts b/scripts/deps.ts deleted file mode 100644 index d64639e..0000000 --- a/scripts/deps.ts +++ /dev/null @@ -1,14 +0,0 @@ -import matches from "https://deno.land/x/ts_matches@5.1.5/mod.ts"; -export * as YAML from "https://deno.land/std@0.140.0/encoding/yaml.ts"; -export type { - Config, - ConfigRes, - Effects, - ExpectedExports, - KnownError, - PackagePropertiesV2, - Properties, - SetResult, -} from "https://start9.com/procedure/types.0.3.1.d.ts"; - -export { matches }; diff --git a/scripts/services/getConfig.ts b/scripts/services/getConfig.ts index 859cd24..b440274 100644 --- a/scripts/services/getConfig.ts +++ b/scripts/services/getConfig.ts @@ -1,393 +1,370 @@ -import { ConfigRes, ExpectedExports, matches, YAML } from "../deps.ts"; +import { compat, types as T } from "../dependencies.ts"; -const { any, string, dictionary } = matches; - -const matchConfig = dictionary([string, any]); - -export const getConfig: ExpectedExports.getConfig = async (effects) => { - const config = await effects - .readFile({ - path: "start9/config.yaml", - volumeId: "main", - }) - .then((x) => YAML.parse(x)) - .then((x) => matchConfig.unsafeCast(x)) - .catch((e) => { - effects.warn(`Got error ${e} while trying to read the config`); - return undefined; - }); - const spec: ConfigRes["spec"] = { - "peer-tor-address": { - "name": "Peer Tor Address", - "description": "The Tor address of the peer interface", - "type": "pointer", - "subtype": "package", - "package-id": "bitcoind", - "target": "tor-address", - "interface": "peer", - }, - "rpc-tor-address": { - "name": "RPC Tor Address", - "description": "The Tor address of the RPC interface", - "type": "pointer", - "subtype": "package", - "package-id": "bitcoind", - "target": "tor-address", - "interface": "rpc", - }, - "rpc": { - "type": "object", - "name": "RPC Settings", - "description": "RPC configuration options.", - "spec": { - "enable": { - "type": "boolean", - "name": "Enable", - "description": "Allow remote RPC requests.", - "default": true, +export const getConfig: T.ExpectedExports.getConfig = compat.getConfig({ + "peer-tor-address": { + "name": "Peer Tor Address", + "description": "The Tor address of the peer interface", + "type": "pointer", + "subtype": "package", + "package-id": "bitcoind", + "target": "tor-address", + "interface": "peer", + }, + "rpc-tor-address": { + "name": "RPC Tor Address", + "description": "The Tor address of the RPC interface", + "type": "pointer", + "subtype": "package", + "package-id": "bitcoind", + "target": "tor-address", + "interface": "rpc", + }, + "rpc": { + "type": "object", + "name": "RPC Settings", + "description": "RPC configuration options.", + "spec": { + "enable": { + "type": "boolean", + "name": "Enable", + "description": "Allow remote RPC requests.", + "default": true, + }, + "username": { + "type": "string", + "nullable": false, + "name": "Username", + "description": "The username for connecting to Bitcoin over RPC.", + "default": "bitcoin", + "masked": true, + "pattern": "^[a-zA-Z0-9_]+$", + "pattern-description": + "Must be alphanumeric (can contain underscore).", + }, + "password": { + "type": "string", + "nullable": false, + "name": "RPC Password", + "description": "The password for connecting to Bitcoin over RPC.", + "default": { + "charset": "a-z,2-7", + "len": 20, }, - "username": { - "type": "string", - "nullable": false, - "name": "Username", - "description": "The username for connecting to Bitcoin over RPC.", - "default": "bitcoin", - "masked": true, - "pattern": "^[a-zA-Z0-9_]+$", - "pattern-description": - "Must be alphanumeric (can contain underscore).", + "pattern": '^[^\\n"]*$', + "pattern-description": + "Must not contain newline or quote characters.", + "copyable": true, + "masked": true, + }, + "advanced": { + "type": "object", + "name": "Advanced", + "description": "Advanced RPC Settings", + "spec": { + "auth": { + "name": "Authorization", + "description": + "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", + "type": "list", + "subtype": "string", + "default": [], + "spec": { + "pattern": + "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", + "pattern-description": + 'Each item must be of the form ":$".', + }, + "range": "[0,*)", + }, + "serialversion": { + "name": "Serialization Version", + "description": + "Return raw transaction or block hex with Segwit or non-SegWit serialization.", + "type": "enum", + "values": [ + "non-segwit", + "segwit", + ], + "value-names": {}, + "default": "segwit", + }, + "servertimeout": { + "name": "Rpc Server Timeout", + "description": + "Number of seconds after which an uncompleted RPC call will time out.", + "type": "number", + "nullable": false, + "range": "[5,300]", + "integral": true, + "units": "seconds", + "default": 30, + }, + "threads": { + "name": "Threads", + "description": + "Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node.", + "type": "number", + "nullable": false, + "default": 4, + "range": "[1,64]", + "integral": true, + "units": undefined, + }, + "workqueue": { + "name": "Work Queue", + "description": + "Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones.", + "type": "number", + "nullable": false, + "default": 128, + "range": "[8,256]", + "integral": true, + "units": "requests", + }, }, - "password": { - "type": "string", - "nullable": false, - "name": "RPC Password", - "description": "The password for connecting to Bitcoin over RPC.", - "default": { - "charset": "a-z,2-7", - "len": 20, + }, + }, + }, + "zmq-enabled": { + "type": "boolean", + "name": "ZeroMQ Enabled", + "description": "Enable the ZeroMQ interface", + "default": true, + }, + "txindex": { + "type": "boolean", + "name": "Transaction Index", + "description": "Enable the Transaction Index (txindex)", + "default": false, + }, + "wallet": { + "type": "object", + "name": "Wallet", + "description": "Wallet Settings", + "spec": { + "enable": { + "name": "Enable Wallet", + "description": "Load the wallet and enable wallet RPC calls.", + "type": "boolean", + "default": true, + }, + "avoidpartialspends": { + "name": "Avoid Partial Spends", + "description": + "Group outputs by address, selecting all or none, instead of selecting on a per-output basis. This improves privacy at the expense of higher transaction fees.", + "type": "boolean", + "default": true, + }, + "discardfee": { + "name": "Discard Change Tolerance", + "description": + "The fee rate (in BTC/kB) that indicates your tolerance for discarding change by adding it to the fee.", + "type": "number", + "nullable": false, + "default": 0.0001, + "range": "[0,.01]", + "integral": false, + "units": "BTC/kB", + }, + }, + }, + "advanced": { + "type": "object", + "name": "Advanced", + "description": "Advanced Settings", + "spec": { + "mempool": { + "type": "object", + "name": "Mempool", + "description": "Mempool Settings", + "spec": { + "persistmempool": { + "type": "boolean", + "name": "Persist Mempool", + "description": + "Save the mempool on shutdown and load on restart.", + "default": true, + }, + "maxmempool": { + "type": "number", + "nullable": false, + "name": "Max Mempool Size", + "description": + "Keep the transaction memory pool below megabytes.", + "range": "[1,*)", + "integral": true, + "units": "MiB", + "default": 300, + }, + "mempoolexpiry": { + "type": "number", + "nullable": false, + "name": "Mempool Expiration", + "description": + "Do not keep transactions in the mempool longer than hours.", + "range": "[1,*)", + "integral": true, + "units": "Hr", + "default": 336, }, - "pattern": '^[^\\n"]*$', - "pattern-description": - "Must not contain newline or quote characters.", - "copyable": true, - "masked": true, }, - "advanced": { - "type": "object", - "name": "Advanced", - "description": "Advanced RPC Settings", - "spec": { - "auth": { - "name": "Authorization", - "description": - "Username and hashed password for JSON-RPC connections. RPC clients connect using the usual http basic authentication.", - "type": "list", - "subtype": "string", - "default": [], + }, + "peers": { + "type": "object", + "name": "Peers", + "description": "Peer Connection Settings", + "spec": { + "listen": { + "type": "boolean", + "name": "Make Public", + "description": + "Allow other nodes to find your server on the network.", + "default": true, + }, + "onlyconnect": { + "type": "boolean", + "name": "Disable Peer Discovery", + "description": "Only connect to specified peers.", + "default": false, + }, + "onlyonion": { + "type": "boolean", + "name": "Disable Clearnet", + "description": "Only connect to peers over Tor.", + "default": false, + }, + "addnode": { + "name": "Add Nodes", + "description": "Add addresses of nodes to connect to.", + "type": "list", + "subtype": "object", + "range": "[0,*)", + "default": [], + "spec": { "spec": { - "pattern": - "^[a-zA-Z0-9_-]+:([0-9a-fA-F]{2})+\\$([0-9a-fA-F]{2})+$", - "pattern-description": - 'Each item must be of the form ":$".', + "hostname": { + "type": "string", + "nullable": false, + "name": "Hostname", + "description": "Domain or IP address of bitcoin peer", + "pattern": + "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", + "pattern-description": + "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port.", + }, + "port": { + "type": "number", + "nullable": true, + "name": "Port", + "description": + "Port that peer is listening on for inbound p2p connections", + "range": "[0,65535]", + "integral": true, + }, }, - "range": "[0,*)", - }, - "serialversion": { - "name": "Serialization Version", - "description": - "Return raw transaction or block hex with Segwit or non-SegWit serialization.", - "type": "enum", - "values": [ - "non-segwit", - "segwit", - ], - "value-names": {}, - "default": "segwit", - }, - "servertimeout": { - "name": "Rpc Server Timeout", - "description": - "Number of seconds after which an uncompleted RPC call will time out.", - "type": "number", - "nullable": false, - "range": "[5,300]", - "integral": true, - "units": "seconds", - "default": 30, - }, - "threads": { - "name": "Threads", - "description": - "Set the number of threads for handling RPC calls. Only needed if you plan to abuse your node.", - "type": "number", - "nullable": false, - "default": 4, - "range": "[1,64]", - "integral": true, - "units": undefined, - }, - "workqueue": { - "name": "Work Queue", - "description": - "Set the depth of the work queue to service RPC calls. Determines how long the backlog of RPC requests can get before it just rejects new ones.", - "type": "number", - "nullable": false, - "default": 128, - "range": "[8,256]", - "integral": true, - "units": "requests", }, }, }, }, - }, - "zmq-enabled": { - "type": "boolean", - "name": "ZeroMQ Enabled", - "description": "Enable the ZeroMQ interface", - "default": true, - }, - "txindex": { - "type": "boolean", - "name": "Transaction Index", - "description": "Enable the Transaction Index (txindex)", - "default": false, - }, - "wallet": { - "type": "object", - "name": "Wallet", - "description": "Wallet Settings", - "spec": { - "enable": { - "name": "Enable Wallet", - "description": "Load the wallet and enable wallet RPC calls.", - "type": "boolean", - "default": true, - }, - "avoidpartialspends": { - "name": "Avoid Partial Spends", - "description": - "Group outputs by address, selecting all or none, instead of selecting on a per-output basis. This improves privacy at the expense of higher transaction fees.", - "type": "boolean", - "default": true, - }, - "discardfee": { - "name": "Discard Change Tolerance", + "dbcache": { + "type": "number", + "nullable": true, + "name": "Database Cache", + "description": + "How much RAM to allocate for caching the TXO set. Higher values improve syncing performance, but increase your chance of using up all your system's memory or corrupting your database in the event of an ungraceful shutdown. Set this high but comfortably below your system's total RAM during IBD, then turn down to 450 (or leave blank) once the sync completes.", + "warning": + "WARNING: Increasing this value results in a higher chance of ungraceful shutdowns, which can leave your node unusable if it happens during the initial block download. Use this setting with caution. Be sure to set this back to the default (450 or leave blank) once your node is synced.", + "range": "(0,1024]", + "integral": true, + "units": "MiB", + }, + "pruning": { + "type": "union", + "name": "Pruning Settings", + "description": + "Blockchain Pruning Options\nReduce the blockchain size on disk\n", + "warning": + "If you set pruning to Manual and your disk is smaller than the total size of the blockchain, you MUST have something running that prunes these blocks or you may overfill your disk!\nDisabling pruning will convert your node into a full archival node. This requires a resync of the entire blockchain, a process that may take several days. Make sure you have enough free disk space or you may fill up your disk.\n", + "tag": { + "id": "mode", + "name": "Pruning Mode", "description": - "The fee rate (in BTC/kB) that indicates your tolerance for discarding change by adding it to the fee.", - "type": "number", - "nullable": false, - "default": 0.0001, - "range": "[0,.01]", - "integral": false, - "units": "BTC/kB", + '- Disabled: Disable pruning\n- Automatic: Limit blockchain size on disk to a certain number of megabytes\n- Manual: Prune blockchain with the "pruneblockchain" RPC\n', + "variant-names": { + "disabled": "Disabled", + "automatic": "Automatic", + "manual": "Manual", + }, }, - }, - }, - "advanced": { - "type": "object", - "name": "Advanced", - "description": "Advanced Settings", - "spec": { - "mempool": { - "type": "object", - "name": "Mempool", - "description": "Mempool Settings", - "spec": { - "persistmempool": { - "type": "boolean", - "name": "Persist Mempool", - "description": - "Save the mempool on shutdown and load on restart.", - "default": true, - }, - "maxmempool": { + "variants": { + "disabled": {}, + "automatic": { + "size": { "type": "number", "nullable": false, - "name": "Max Mempool Size", - "description": - "Keep the transaction memory pool below megabytes.", - "range": "[1,*)", + "name": "Max Chain Size", + "description": "Limit of blockchain size on disk.", + "warning": + "Increasing this value will require re-syncing your node.", + "default": 550, + "range": "[550,1000000)", "integral": true, "units": "MiB", - "default": 300, }, - "mempoolexpiry": { + }, + "manual": { + "size": { "type": "number", "nullable": false, - "name": "Mempool Expiration", - "description": - "Do not keep transactions in the mempool longer than hours.", - "range": "[1,*)", + "name": "Failsafe Chain Size", + "description": "Prune blockchain if size expands beyond this.", + "default": 65536, + "range": "[550,1000000)", "integral": true, - "units": "Hr", - "default": 336, - }, - }, - }, - "peers": { - "type": "object", - "name": "Peers", - "description": "Peer Connection Settings", - "spec": { - "listen": { - "type": "boolean", - "name": "Make Public", - "description": - "Allow other nodes to find your server on the network.", - "default": true, - }, - "onlyconnect": { - "type": "boolean", - "name": "Disable Peer Discovery", - "description": "Only connect to specified peers.", - "default": false, - }, - "onlyonion": { - "type": "boolean", - "name": "Disable Clearnet", - "description": "Only connect to peers over Tor.", - "default": false, - }, - "addnode": { - "name": "Add Nodes", - "description": "Add addresses of nodes to connect to.", - "type": "list", - "subtype": "object", - "range": "[0,*)", - "default": [], - "spec": { - "spec": { - "hostname": { - "type": "string", - "nullable": false, - "name": "Hostname", - "description": "Domain or IP address of bitcoin peer", - "pattern": - "(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))", - "pattern-description": - "Must be either a domain name, or an IPv4 or IPv6 address. Do not include protocol scheme (eg 'http://') or port.", - }, - "port": { - "type": "number", - "nullable": true, - "name": "Port", - "description": - "Port that peer is listening on for inbound p2p connections", - "range": "[0,65535]", - "integral": true, - }, - }, - }, + "units": "MiB", }, }, }, - "dbcache": { - "type": "number", - "nullable": true, - "name": "Database Cache", - "description": - "How much RAM to allocate for caching the TXO set. Higher values improve syncing performance, but increase your chance of using up all your system's memory or corrupting your database in the event of an ungraceful shutdown. Set this high but comfortably below your system's total RAM during IBD, then turn down to 450 (or leave blank) once the sync completes.", - "warning": - "WARNING: Increasing this value results in a higher chance of ungraceful shutdowns, which can leave your node unusable if it happens during the initial block download. Use this setting with caution. Be sure to set this back to the default (450 or leave blank) once your node is synced.", - "range": "(0,1024]", - "integral": true, - "units": "MiB", - }, - "pruning": { - "type": "union", - "name": "Pruning Settings", - "description": - "Blockchain Pruning Options\nReduce the blockchain size on disk\n", - "warning": - "If you set pruning to Manual and your disk is smaller than the total size of the blockchain, you MUST have something running that prunes these blocks or you may overfill your disk!\nDisabling pruning will convert your node into a full archival node. This requires a resync of the entire blockchain, a process that may take several days. Make sure you have enough free disk space or you may fill up your disk.\n", - "tag": { - "id": "mode", - "name": "Pruning Mode", + "default": "disabled", + }, + "blockfilters": { + "type": "object", + "name": "Block Filters", + "description": + "Settings for storing and serving compact block filters", + "spec": { + "blockfilterindex": { + "type": "boolean", + "name": "Compute Compact Block Filters (BIP158)", "description": - '- Disabled: Disable pruning\n- Automatic: Limit blockchain size on disk to a certain number of megabytes\n- Manual: Prune blockchain with the "pruneblockchain" RPC\n', - "variant-names": { - "disabled": "Disabled", - "automatic": "Automatic", - "manual": "Manual", - }, + "Generate Compact Block Filters during initial sync (IBD) to enable 'getblockfilter' RPC. This is useful if dependent services need block filters to efficiently scan for addresses/transactions etc.", + "default": false, }, - "variants": { - "disabled": {}, - "automatic": { - "size": { - "type": "number", - "nullable": false, - "name": "Max Chain Size", - "description": "Limit of blockchain size on disk.", - "warning": - "Increasing this value will require re-syncing your node.", - "default": 550, - "range": "[550,1000000)", - "integral": true, - "units": "MiB", - }, - }, - "manual": { - "size": { - "type": "number", - "nullable": false, - "name": "Failsafe Chain Size", - "description": "Prune blockchain if size expands beyond this.", - "default": 65536, - "range": "[550,1000000)", - "integral": true, - "units": "MiB", - }, - }, - }, - "default": "disabled", - }, - "blockfilters": { - "type": "object", - "name": "Block Filters", - "description": - "Settings for storing and serving compact block filters", - "spec": { - "blockfilterindex": { - "type": "boolean", - "name": "Compute Compact Block Filters (BIP158)", - "description": - "Generate Compact Block Filters during initial sync (IBD) to enable 'getblockfilter' RPC. This is useful if dependent services need block filters to efficiently scan for addresses/transactions etc.", - "default": false, - }, - "peerblockfilters": { - "type": "boolean", - "name": "Serve Compact Block Filters to Peers (BIP157)", - "description": - "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data. 'Compute Compact Block Filters (BIP158)' is required.", - "default": false, - }, + "peerblockfilters": { + "type": "boolean", + "name": "Serve Compact Block Filters to Peers (BIP157)", + "description": + "Serve Compact Block Filters as a peer service to other nodes on the network. This is useful if you wish to connect an SPV client to your node to make it efficient to scan transactions without having to download all block data. 'Compute Compact Block Filters (BIP158)' is required.", + "default": false, }, }, - "bloomfilters": { - "type": "object", - "name": "Bloom Filters (BIP37)", - "description": "Setting for serving Bloom Filters", - "spec": { - "peerbloomfilters": { - "type": "boolean", - "name": "Serve Bloom Filters to Peers", - "description": - "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Payment Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", - "warning": - "This is ONLY for use with Bisq integration, please use Block Filters for all other applications.", - "default": false, - }, + }, + "bloomfilters": { + "type": "object", + "name": "Bloom Filters (BIP37)", + "description": "Setting for serving Bloom Filters", + "spec": { + "peerbloomfilters": { + "type": "boolean", + "name": "Serve Bloom Filters to Peers", + "description": + "Peers have the option of setting filters on each connection they make after the version handshake has completed. Bloom filters are for clients implementing SPV (Simplified Payment Verification) that want to check that block headers connect together correctly, without needing to verify the full blockchain. The client must trust that the transactions in the chain are in fact valid. It is highly recommended AGAINST using for anything except Bisq integration.", + "warning": + "This is ONLY for use with Bisq integration, please use Block Filters for all other applications.", + "default": false, }, }, }, }, - }; - return { - result: { - config, - spec, - }, - }; -}; + }, +}) \ No newline at end of file diff --git a/scripts/services/properties.ts b/scripts/services/properties.ts index 1e52afd..9774199 100644 --- a/scripts/services/properties.ts +++ b/scripts/services/properties.ts @@ -1,14 +1,2 @@ -import { Effects, ExpectedExports, YAML } from "../deps.ts"; - -export const properties: ExpectedExports.properties = async ( - effects: Effects, -) => { - return { - result: YAML.parse( - await effects.readFile({ - path: "start9/stats.yaml", - volumeId: "main", - }), - ) as any, - }; -}; +import { compat } from "../dependencies.ts"; +export const properties = compat.properties \ No newline at end of file diff --git a/scripts/services/setConfig.ts b/scripts/services/setConfig.ts index 2d70b8a..71efb7d 100644 --- a/scripts/services/setConfig.ts +++ b/scripts/services/setConfig.ts @@ -1,16 +1,15 @@ import { - Config, - Effects, - ExpectedExports, matches, - SetResult, - YAML, -} from "../deps.ts"; -const { number } = matches; + compat, + types, + YAML +} from "../dependencies.ts"; +const { number, shape, boolean } = matches; -export const setConfig: ExpectedExports.setConfig = async ( - effects: Effects, - newConfig: Config, +export const setConfig: types.ExpectedExports.setConfig = async ( + effects: types.Effects, + // deno-lint-ignore no-explicit-any + newConfig: any, ) => { if (!(newConfig?.rpc?.enable || !(newConfig.advanced?.mode === "manual"))) { return { @@ -89,7 +88,7 @@ export const setConfig: ExpectedExports.setConfig = async ( volumeId: "main", }); - const result: SetResult = { + const result: types.SetResult = { signal: "SIGTERM", "depends-on": {}, }; From a7f886b7e30c861b899377dad5547d07aaddfa98 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Wed, 29 Jun 2022 14:16:46 -0600 Subject: [PATCH 39/41] Fixed v21 migration --- migrations/eq_22_0_0.sh | 17 ----------------- migrations/lt_22_0_0.sh | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 17 deletions(-) delete mode 100644 migrations/eq_22_0_0.sh create mode 100644 migrations/lt_22_0_0.sh diff --git a/migrations/eq_22_0_0.sh b/migrations/eq_22_0_0.sh deleted file mode 100644 index 7e63920..0000000 --- a/migrations/eq_22_0_0.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -set -ea - -if [ $1 = "from" ]; then - yq -i '.advanced.peers.addnode |= map(select(.hostname != ~))' /root/.bitcoin/start9/config.yaml - yq -i '.advanced.bloomfilters.peerbloomfilters = false' /root/.bitcoin/start9/config.yaml - echo '{"configured": true }' - exit 0 -elif [ $1 = "to" ]; then - yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml - echo '{"configured": false }' - exit 0 -else - echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 - exit 1 -fi diff --git a/migrations/lt_22_0_0.sh b/migrations/lt_22_0_0.sh new file mode 100644 index 0000000..a415c29 --- /dev/null +++ b/migrations/lt_22_0_0.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +set -ea + +if [ $1 = "from" ]; then + yq -i '.advanced.peers.addnode |= map(select(.hostname != ~ or . == "*"))' /root/.bitcoin/start9/config.yaml + yq -i '.advanced.peers.addnode.[] |= {"hostname":., "port":~}' /root/.bitcoin/start9/config.yaml + yq -i '(.advanced.blockfilters.blockfilterindex, .advanced.blockfilters.peerblockfilters, .advanced.bloomfilters.peerbloomfilters) = false' /root/.bitcoin/start9/config.yaml + echo '{"configured": true }' + exit 0 +elif [ $1 = "to" ]; then + yq -i '.advanced.peers.addnode |= map_values(.hostname)' /root/.bitcoin/start9/config.yaml + yq -i 'del(.advanced.blockfilters)' /root/.bitcoin/start9/config.yaml + yq -i 'del(.advanced.bloomfilters)' /root/.bitcoin/start9/config.yaml + echo '{"configured": false }' + exit 0 +else + echo "FATAL: Invalid argument: {from, to}. Migration failed." >&2 + exit 1 +fi +`` \ No newline at end of file From 4a2ae9012453447e56a5d6d6fdc801840620be04 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Wed, 29 Jun 2022 14:36:53 -0600 Subject: [PATCH 40/41] Update release notes --- manifest.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/manifest.yaml b/manifest.yaml index 66a0940..7386db2 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -6,7 +6,11 @@ release-notes: | * Latest release from Core - see full release notes at https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-23.0.md * Embassy changes * Add support for Bloom Filters (BIP37), as required for Bisq integration - * It is highly recommended AGAINST using Bloom Filters for anything except Bisq integration. + * Increased options for RPC resources (Config -> RPC Settings -> Advanced) + * Implement additional ZMQ interfaces, for use with future Layer 2 integrations + * `zmqpubhashblock` + * `zmqpubhashtx` + * `zmqpubsequence` license: mit wrapper-repo: https://github.com/Start9Labs/bitcoind-wrapper upstream-repo: https://github.com/bitcoin/bitcoin From 628ec49b78ed066dfa817129f696a8cee7ed0c80 Mon Sep 17 00:00:00 2001 From: kn0wmad Date: Wed, 29 Jun 2022 14:47:21 -0600 Subject: [PATCH 41/41] Update instructions --- docs/instructions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/instructions.md b/docs/instructions.md index 7d221a2..9e56668 100644 --- a/docs/instructions.md +++ b/docs/instructions.md @@ -12,12 +12,12 @@ Depending on your Internet bandwidth, how many other services are running, and w ### Using a Wallet -Enter your QuickConnect QR code **OR** your raw RPC credentials (both located in `Properties`) into any wallet that supports connecting to a remote node over Tor. For a full list of compatible wallets, see https://github.com/start9labs/bitcoind-wrapper/blob/master/docs/wallets.md. +Enter your QuickConnect QR code **OR** your raw RPC credentials (both located in `Properties`) into any wallet that supports connecting to a remote node over Tor. For a full list of compatible wallets, as well as guides for setup, please see https://github.com/start9labs/bitcoind-wrapper/blob/master/docs/wallets.md. ## Pruning -Beginning in EOS v0.3.0, Bitcoin is now set to be an "archival" node by default. This means that it will download and verify the entire blockchain, and will not "prune." Be aware that this takes approximately 400GB as of early 2022. +Beginning in EOS v0.3.0, Bitcoin is now set to be an "archival" node by default. This means that it will download and verify the entire blockchain, and will not "prune." Be aware that this takes approximately 400GB as of early 2022. If you enable the `txindex,` this will require an additional ~40GB. -Pruning is a process by which your node discards old blocks and transactions after it verifies them. Pruned nodes and archival nodes are both "full nodes" in that they are fully validating - they validate every block and transaction. Archival nodes store the entire blockchain and are useful to people interested in doing general or historical analysis, or being a provider of blockchain data to others (eg. a blockexplorer). They are also required for the best experience with many popular wallets. +Pruning is a process by which your node discards old blocks and transactions after it verifies them. Pruned nodes and archival nodes are both "full nodes" in that they are fully validating - they validate every block and transaction. Archival nodes store the entire blockchain and are useful to people interested in doing general or historical analysis, or being a provider of blockchain data to others (eg. a blockexplorer). They are also required for the best experience with many popular wallets and other Bitcoin tools. **If you choose to prune**, the target on your Embassy is configurable and set by default to the minimum of 550MB (0.55 GB!), meaning the resulting blockchain will occupy a negligible amount of storage space. The maximum amount of blockchain data you can retain depends on the storage capacity your device. The config menu will not permit you to select a target that exceeds a certain percentage of your device's available capacity. For most use cases, we recommend sticking with a very low pruning setting.