From 5dc93bc40e5c975002db01640ea57a56b93bbbd1 Mon Sep 17 00:00:00 2001 From: Steve Nyemba Date: Thu, 11 Dec 2025 10:15:41 -0600 Subject: [PATCH] bug fixes ... --- qcms-manifest.json | 6 +-- www/html/_assets/images/banner.jpg | Bin 0 -> 51716 bytes www/html/_assets/images/ferretdb.jpeg | Bin 0 -> 3883 bytes www/html/_assets/images/ferretdb.png | Bin 0 -> 4232 bytes www/html/_assets/js/studio.js | 37 ++++++++++++++--- www/html/_plugins/agent.py | 2 +- www/html/_plugins/register.py | 1 + www/html/_plugins/transport.py | 3 +- www/html/features.html | 14 +++---- www/html/index.html | 56 +++++++++++++------------- www/html/wizard.html | 2 +- 11 files changed, 74 insertions(+), 47 deletions(-) create mode 100644 www/html/_assets/images/banner.jpg create mode 100644 www/html/_assets/images/ferretdb.jpeg create mode 100644 www/html/_assets/images/ferretdb.png diff --git a/qcms-manifest.json b/qcms-manifest.json index 59f7e26..4d6fdbb 100644 --- a/qcms-manifest.json +++ b/qcms-manifest.json @@ -7,7 +7,7 @@ "host": "0.0.0.0" }, "context": "", - "logo": "www/html/_assets/images/logo.png", + "logo": "_assets/images/logo.png", "source": { "id": "disk", "key": "/home/steve/dev/data/qcms/data-transport.key", @@ -35,9 +35,9 @@ "on": { "load": { "studio-menu": [ - "www/html/menu.html" + "menu.html" ], - "studio-intro":["www/html/about.html"] + "studio-intro":["about.html"] } }, diff --git a/www/html/_assets/images/banner.jpg b/www/html/_assets/images/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47cffbb3885d0a26efca5325f7223d04f2601efc GIT binary patch literal 51716 zcmeFa2Ut```!{?jN)eT&v7jO*MM;Mmaqkc^IB+P zK^Pem3$+Kn2V5u+&IEo1xXcsdqh)7<@N#fv1HcGotIuF@1=*+qB%%O~03{J9Od$eW zh(KneP=#1RA({xNV`|^>0*XRO&~H#PY6J<2X%0tVV_L$iL2@kME)MuzKzdvYr)@#J z?K|O4E#U}VOl&hwPe32r68gf zPRVSa(ym=f*Yu2znLWDo>e-`PR#tZ3g8tb#gZgA;<>3bmLLf01Ot1dLVgjnD0F6OK zKw^@Tl2Y2GbZOtd3#xZkZ`6P7Ue`fsiO}j8P}v+PHZ3MDE#`GS)C=(0CeqR|fZ1jj z6B`%brfouEQgS;$uq8DjskqqqxHfI#;{o+ZkPpSDwMp-dB(=>DsuObDnW)h-7bW%~ zf4QrZ==i<9XpLt~QgY|_x^(TG&0Dr^+y2##-Fxcy z?%V(UfrBR+Po6q`=IpuiO_#4+y>|V^&0Dwc|N7wJqsLF4K6@UiSEQb;?l0?=2I>_X zA0HQ=5UE#8YyezwY4L4(Bip8vgb8YQMheT_sLe8=H%|aTK`5#>U zN9A1=o|v{%5PQ73eg80|iqwGoakt4$edl&&{!80)LRF?Sg`L*#?8j-fZ7r!=4sSgP zZS|n62s6I_D$>)_r}q~Rjr(D;>}*NOp6Owz-ky8acXrf-O-F0y<+uA`$Cal$Cf_Fa zezE>pH_^J)XW!p`saw2v>y9;_xU+t!yS<|N{Fal8x9{He{cjT&t$8+REx)o`uT8@U zbssk!mR0Yw(muEm{O##4oDS8K_iZ>id1mGf*fHeKL$j~yL|uf;uyBFDw$0*28Kds4 z>hVH!U;qo+N6(8@4T!lAlWC~vJel)gEW4ylrtsZs<{c2zg-=9E&YEsnwQ^Xy;Tk#~ zA6t=kyW7~%uHGZ!i)LOpJ^u4O7luyi`@xFk!@KR-wC#oTd+`&-AZslxzM^efI2oFE zOM3oFe;dX9+x=UtK2-}3@lySRw_x0>Q({U|pP^U{)A$=MiN`P1KBXxZSHQY6kKVgH z>(JZ+;ennLtGCb~*@JZTwT6m}vkx&dRh5VK4fXYPtvxbOsg`F=p4K&a+nnAvp7Pg1 zI!ou=Q%}|-drmyD_LltX?~Y$BdJQH0HfNDL`9jJ4A!JzPo*#x~_V3vB(y=~kiY6l` zPdM*(J3fm$>3y_nW3j2rvB^tk5HXpeA3nMM`OG`4nI*||)Ben=C4)~w+xKQxJ&pu6 zivvB*?t0$1G6og1FSKmwz@#I@Wpxj0W5>8q=A<7E++q&a&T8CH3$?#c^ZEFKQx7w@ zBsX-EbEn{*>{mgvEDM`5zm^{pIUhR@PW|ohGePXnACVNQouluTLx{1D)*ilc{JViy zA9bIQ&dynt|23rjaddZ;uU)6*ua=CM`0$Ha_<4!67l-Rst{t{HHFi9cGjsCrmrqK{ zg(U~nQ*vTNCpygD{H6y;-b=eXY+B;gZZ$I}&>-q(p&4y|nbK>m)|$E!Ic$8^%e8wg zb>#;Jj>@Sj+&_pjZRtwerOD8$CCnkAw5*X$d#&n^cMKUgt#_sg$JjRQP?Y706!;Uy zwG!IH%->aj^<>D!-z2*b=x0N_FZWIxsDkpALSv_$Y~=+T(0+z4X^RToEKDAjOk7e8 z4ND$CTy_}BtjgS6nF&pyH$GfPzs-_vN*UR0FW$g7Q=+;Yu$xNK>0UhIyK z_cy(U%4@g3h7_+Ml9={@-={n-^FR*0!+zrTJxsCw*N|*sX?1NPB%IZFdfC}x{*994 z!<)tNOI%%w8h4CX`~6Sc_v21fbeoo?OZNBYwaGdbdz^JR^2;r|P&RGzZD>GTEHgg6 z@We@Lys6>f_CcOdZG!#Tqyx+Lf3@`Nx3g^@l|sXYS0_Hf%zy91)K71fw0l}Tq#J*S zD_oAb4e|GV^-2UUxIf+4wbQXv?Rm#8P}h7qPuzIEB7N7(JIwEgpt5>ehL5jPCP?o* zT>ad?VD6%7dN2IF$s7B(ZCd32Vdnl9}h$ipMP`yNJ_@Ka|zmiU63s6 zJ9f^Y6}JbrJ0!K~`I|Z{o^Qq0JJRXtj8}IrkA5%x+R$&?v#!I}B0kZ-IJmTN)Zw(7 zijnQ(`l0fE5f&eumeBv0=u^da=ZA`*RpldsO;$n$98}2 zeu@3?H6*MoJ(fL?v_ESWcVpwyne}I~vTvAwc~nc;d?>C@=-279v!*;5yk+Is!!r=Q zzUF^@ccgj9nGvggtuLJUuUp~@2m%&x@6w}R);?SYl$Uh!SeJ~+kSL}L=3>o_2P=dn z?a#jd*~i`dnSvNv%O%`7@aI{lmoBd8(ns2*Yp<#A_h!^CTdGe%gaxsW7FQq;Z+k&v zGOK6#%UiD+PcI&jGI5OXRmV=A>hISf4t6|UF|d0`z9?nDeay@;T?c-&Y2}M4haO@= zqQ?t<8<-bUbgmF5NI6~p63PVX@#CP^&@bJfioWf7`#(a7FLb;kPORqX z`#7H@@b@iC&Mboxw&X)lSy^NR7HRLWNtY{6zBZ% z^>;bhW?gZP9Lq&;T@<~^%nW<<;xJF54O_KDUCxlf*+s#^pxtHH`_$P%yUpP(3>N1^ z!3#k+k_^wuj*|GS#W@PFJfJu|`fN-ArT~!-mMP_^9Dw1`845*IdJ6)G73Z|D8VCdm z0_Xy##|TFfi9|R81xKOs0Y$zy+*W2`Vz@Zl?67o$gBa6W|)RA^Hn(eM=37{}gJB2X{{2p}Q?Y9V!cBu=NTIOolZv^kFp6jG=5ssAG& zu2W|=g#Jv5h~AT+ib8U^g;b~3AE`czTATwIDA1X8g=!R$h{S6(`Ffl|osR*re2qqr z%GaR?I5Y~4)8N#E*77We*Qa)9^{wU2puAp3Kq-owm^6^w`xvUCnm2Q4hDc^v0a*h*%3r0v2eD0wDHi zRA5v4BDBRh9J9k8Y)O@v?Rv3K9qD^WJQ9OLq0lHK9*YLOxrIWe_jtj*BT&%?2RYf` z&V>SxQ|H&}J;gbsh^fjJ0P|ooYdmUCC>x0_0F527J)pTICcjlnnann4V(s9ZmnM8XKIHXaFvAVnRSL}tTbFcOJI%Iy;*y-yO- zJaBvjl0=5XSQH`6MinB7LaCL=5KDt}Ku87!DO?(zCbUW^G!W6qu?VfLlqocmm2#QW zNG1?SWFv{%4A^`hl2XnKYiV?$lop7lXzWD4O4yS5M^B)UM>vW&L5%|u$8NhLReLWXEuszSEJjgdr>RN0zuYQCwCA;UzNXpteA zszH;nT42W2Oreo0v10jRGFinSnpI-5M6ci>RB~jPMYH*pC}K#Ef1-Vi>nJZzEy&6U^U|U6U{;=ONB~_Qd}A| ziiFL5*{Y^7=^8qPMWBljdRmxn=LAZbYzjdvqw?r{vC~s((Gpll5k)U?;<+d~Qe@R} z1!9cRXg3C|YzEm*vjM5OI3jtJLj+RlWR!C(1cF406^Lv)pfoOxf{xTHkSd3oVRNfd zK_4(?79CTD(xFXQFvb!L3M^cU5z|dhJ!1&ni`yqC|)&hcbyFGpIf%9oLwiprQNx%Rgix@4NPpgn&4Kjwzu0oky zYP-)127q$aUsgW~_^u52QkzPxu$S7^c5F!JaKXe*oY>}a>z!`3+v8!Q{2m;f=ma_j z)P%$mfz}4bnu?T|-AI=b!HWViwQRi~OA5*~M5PZ-AQ{{S0*x!v&fP|+jl&wEfFH!-6N#HWL#q6fZ)DF5#>SNOQQVUrIw+ke}piJz=BRzH@ zL8F&N0hMg3g&U%=(JUFAjS!eAY^B@d4jQy>socoITFhvJ+lA9e`D{-qEhrNOWdfxE zZx_I2Oq^Gy_}%@ZfbXya7(>7%bg55{*UQydi<%;4$q7b_SS&FGZDflGF1291L5$Ha zg|SEk8z0H0xm^l30g2Rl1TMcL3W(Oqd{)gq5sg+;k=9x)f;rie`3uuTD@HOr7_Gk7g{0gdg^$q;^_ zNT^VY#X>aQ2}fE?Os-TcGMZ#gms=~fiL9kkIugcI`Rr0AT`E(d*y9F`!_%r7rD zyGd3*3u9GA(@QR`>35f&>A;Ry)2LAnG5VAT>Co*u-BY)qsH#uW=CBECoKGD{^k z2AT{bD~&w7L1gx@H0pp)DGbuU^H;IS76r5`sdlWBEQJf%Bpr!o@|oRKqy=2u{q^Z4<+n#mZ~U9r7PqP04;Q*ONjxBjTG`qd_k65&Qjn-B({esKscO8E01X{ zN0<@*X5)YlVSRWV7K^ZmG(IfDET)H92&vZ=){^a3CcTs{2s-RwhG&zja5}9ViC2mg zJg-8|&|7h2gq|YQhH(ytm@VY6EKv?M2$e$0<(q)L5g|kB5Zz9Yp@V9AKxPxUX(qwnZEj)$AOQ+LeA%Vst#kkGC7p_~b_W0PQC?H;I0QWX2 zQCNzdND=rn7Q9;n5_TaJQ@Uo#-#+go>G=aOhlC8N#TcNSe?OZmBE1Jx0S2qNFRf4QMk%O zEV)lj(jZ7~g9+y_&}9e@l1$=JqJVlZP>MaE4+s9kKCGm|)J(f0Omy0?PFp!vioh}O z=JIlnqFII_Ki(cL$D`P2B3&7#h8PaBSZ0uNxMTv^Z6J{xr6Q8jYQtjPOspO5z*5~l zmnHyH;N^H98Uu3~Jc` zi-z+>3b@n+Cx#qSc!28mG-qVsvvJ^hDQ~A9UM>M+uz}eYfy9&hgt(v~92TLaJh!G)O5<6yBE4Nj zEe#R*M4!jWCQ67tHI0hXvTR}sgT;eKs~k3?u_QIY?hhMqHk=m@Mp-73B%&gXAz#2m zcj44htiu$LYI$ZKg>3b6ofwj-oIr9)!vufCvSV;T&`m8K1>742vOc!@lt%5L;JS$KV^gT=A2tQ5AK)vVZN zA06%F8p9&_-%sP-3i;oMq8$EvlK(C@3ixJH;G-kRPB}>s4$6R;L9hfNFnRs`RO;P{ zUexT#?Mk+*6i21Y18TFsd433ZP;mrg3Q47+TgW)AneHLN*dA#)M=V5$^}H~K9dZ!C zEKc_3)_-8zQ|hu=NGL2H73DC*;(M6DwyHf62G1y$hU`AR043w`ObWWxC|883S~)lD zf`NfgV`iD;K2iWp7q|jWA=2WJyUMi!COhOc(=7xgD+*ZZ1nc_{$wOqYU09{s$K)F% z8ceC)B!mfk3IoZlG#brLoYM8TQwXiz&h{BNz=TEtwQ`C_7NRr3B-{h$H6b0=CLxB5 zI-J?5M39(TjN7Oan!PRxKFj+_(CsL-Al>!A;Q_*BrP-c}m^g=Y~V`hF3#S%!F0X~^cbP1hg zr$mZCfp)Z#OPkFX)vK1_m2N*(#sjO9pv+|v>flbgRtDz8K@Hvl=E!nl5D(S?<%5n2$1`k^hA}Vbx3x>sa!J4g&hlpa+L7&vQElgX$B+;SxNUhYv!fI?p z42xtnsIXL_1FkgE;Cii0C_}n&XlCFa2J zN~X@OK`?zL8K1{5FXfoSSe8&_64H2bn}LQ1l!}mYkJ)2DVB9{AQD;`ez{J3(!0OBb zJ6JiO!L%<5_|9M^hdIm32{^QO=%aS0a1hoau`D)+sO;rZ0aBn$M##fYN?c_ zA=q6=3dSk&N?f`qAO#`i1k6ev8(~o3OX+O57%U_t96HC$29r7$%|#0tNdyK-UT!oH z%jr@-LZxEi-53i-3TAsmA-~)rp_3$LD;V;lfEI!ej>Nch0gWFEr@}xlqT57BnTyRu z>e+TXkrxJPtEW&AJncK}r^c9lk$EN3uX7uyuyVTGTq=e|0ns!O0&lb;!NOV&x4`WR zd^uh#Q(|3`kVH*1Agw?;Bu|iMFzft8wbW^+Q*>&zPbs$vP%eckWU%YX13;(rz&=L- zWg3=K#gGyyKtWJApHqcpiTFmVlY~QhkZgOo&=Lp=?G%F92p+8Zq;M)+W41Z@Se?+r zlEF1}s@%p$!N3ZhPHkC$!@ybs7*b&F)L}+BN-V+{F>Vx_2?ijrMt11fcsarBL1OGS zzMt*lX@lijIWu5(v9)Td0pkoy!8j`A_~?FF^UT5LH1n_=jn!i*$7$?75fRu%0ZAyN zP^C<#R_ZS$(ZMqcro$6(QiNfqRR}B%n38*JN{kJzHz}-Eikksul{l-pc}fhok@;+z z+9d^9V{=I~1fZ7kH>&|R zO4R&h35l_xFi0NVt(KJntAk)F`~hOQ85ks;8c$=QBHcF->9!W4*?|PA<>QOUR zr>J=$k0j_s(J5MaDTa(`Uh5$(N(AV$QoIMoAhX$#fy1L>V4M;(o=TUJutpsULtyGz zTCq?lrjR8DoWyJbb#xm^6r)iJM-ikR8yZKVI26tHP!=S+ygayFE0fzWHl<8UvJ!+8 zJshkf;Rd?g&%zslDG4foXf;6?+riWX!SqzlccXNH5T7ka1l=A($Y(aOvC630Xv_>8 z7wOc~a0sqdh>lD?0#-av5eT^LcAEmPP+3LJFd01LE*B!mrSOmhfm6~&1PjZI#FFiJ z5-=fFD|m4Dx*l zsmvu~G95xBiJ+Dd2{K_g1P4i2zlaI<+p&CH^V2y#oFarVjcAxk%EEHYPO?hOCI?gENC}txW6Y^8E53j;Mxvf--{;%)|NicP3VDT~HH1(;1D zr7PIwV5vzXk`;mGmkXd4k+zbSdZc_G-6><@$vA^hC)yWO9p`s$M7)9l|B>`Ea*g$R|O;|*-PTe z)F`F_8{xqz)#!+zUBNuy-3LN{n1!|4!+%TidjQuT^zM(*s0{z+sm$NbwcchJ;3#2n z@!Qvt0kh6$0`EbwxEwfmg$a*rVrYJw3IEfZPLKdzJu}T-pVJd+dEY74yWhU~jBYY0 zRBI#eb&GSn>TU;tQ zyo^R;^%^t|uh(ml*w*r1r@wKl)hkBA~73Gg=e|8brEv)A&?xA~9i zgf2k*+dBQtMuq>Ab<$!m8jS%7wi*}=xO@!3fX^r3@W^}u7OT}G&_uKvuWgm}AL_&a zJ2ImC^|SM$@9h87CMZlk0-KLOM%n~y;Kv|AG_uj+je0h#Ttq#8r;W{Vmc!`L>&%gz zAuVnAyLa=^eJq8#cXm&Jtpv@92D42sP)9lgT>YZ%S~pVKHI0)njB7>(-_Jo zGvJ`_Xs!9>dM(hSP=ehL`ET#=ZVnQOAs~r(ECF3$ae@64&9!{D*EP%Zjh=%oJO9^61~g)* zrLt;Gq(f_ce^bqX*=NcxS9{D(zxQ2|*8M^GCUZ3T4>HB$@dU7^2aEmp!uf+e1Pb?i z1#4Ei)_qHVrEwAQy3`)8KC-*2IHz@cRb(rP*9Z1R6?*gry+;pPxTS^uQO@YDq<1>J z&HUCJ|9@7T|5s^rRHA>@?RWIJS+S{lVD$7ly2ok%3+)6n(T!(#EFO(i>oxg!y+)g_ z(_*y14yn=kSTq);S7R`G4FT+R`m_CsZWzO8ae5R%r_VQNHQ0PT0z=3rAc$aG*6R%z zq6UFN5jCxao&Wp0&YJHI`q|&?I*W`hVB?w3?6c`xw2fr*z12Ig=d#cSrZ8Z;T|W3K zN$t1!at8l}fp4Bcy_Ih>2>c!BsMz1xHwx|%O#+)yBf&R&TL)+Vx|u z5rdo!KAp}^xCym^V!;ROL?~OW^}0v`0jK5r?Z5CIpN@Qs4nd9i5v;!;_;*R|b>J%) z@ZonhAS%(iJU$RE17Tdi=Zb_YK{yjU0Mdc*8W0}j0Stoh*+{ykIs8*3Y>b8@rvX5j z9*Kwo>J~W$Alvv(So2O;Yx39u4F=Hk)!7{YKUUEk)C?EI^km7|zAfNm<<-0}83qUCiC}oDUpad0iLUu?U zEe}Q70MG#UR<>RP8Wl~7Ng+c}n;&1le$Wq`l`so}Ud?#@`o*HxuU{<&XAN9{pgPCf z^3GZaB0K`=Gv224T?j!P$3f86`nPGCc@VU1A~>($99VCvqxXp%OAu=S=Q8}d0)pBr zAt>V*1SJn`mK(^6o&K#&B;igOr(s;VI<*9fqO{Y||ihdaEH+rOo0kze$DgZQ|J z1HbWY!T0oSBOlbaNr)bL&^9qS5gc3qPCZCYi8%1vzI{qcTEu0(anbV);@f}|5)wNm zCwI*3(4oVdy#F}xdN(-VAoh!RC@uzk+TVJR>qhEW@C7Y+Sw8S143*4xaI zXYbdnPjyxADoo0QI?TUv>Vvm=e-6b>OoB=(p{CT90j~mjw$J*-vh7W%js4olM*Q~W z@{dX_*PxE%;_?5E`P5v9K&^~VT9DI>lb4^ZC`nIJxzL+{Xy+3PAU-s`1TOyg2jVFXkR03=4INoRRDXSK&Y04>?l(B5WSW!b- zc4*ag`KF$eoA}9#W7H2l7oda=S%u6l?YQyNy0AYzkXA^&l@tHT=aD(UpWLJelWM+E zJnF1#2j#db^Emxzcg*Oe74f{(fqCqy%Wh{I`5m?~Hh#sg*_hp}&&|^%apT%SpjBLx z5Qz(NV=~6o{Rt8z1kE=D-LG5_W|!Q`Nmwway7Oh-w9gA6f~zULO|EalLz%9$;lMX^ z%8fOb5|;G5T=7>JZ_?EK*l~j4zur}Jp3&ELuqL$3IVjh66J!%yqm`u3@zwLju_{8h zn&chE{%h*NH^u%Kh#OY|LDXko3{1*6J@2e)^5OU+HDM!mZT*2B2_Pq?&ef!3&BXK^ zb8iyD_3ZSBud$f?!PQ_A@i(qR8ffdd1N@wc>1UtQcj&Phg`oq&wT`~b9?=r6v>cI+ z&8G#am8gaJ?o(SB>w9jj_#3d8-F@r8Z1UOg95-QP){c3-L+U=s5$2A3-drM~L+Suj z?pRNKIw6$w;7sB9TYYZ#i_A2E7By2Ow|iH0;($ybsHZ6SFlYX?C!Lp!zuIu?Mt9k- zMjl9xxDHv_A`QRf*oNF>ewDHK!zE{@OG`j{R(6XS$?Oa!YRyh20bID6vO#RbDN%aT zL$9jzJu@PBYpt(yk2gK5Y4;}L%;NEB1X+#p!M4JAU$`G`h?ECim!SH6AD791IRq*M zaG9L&8g_ieICdz42aEv}vtUCM zI!Xq9)~q?!oB^slFf=>6=EAp&FJtD;C>nQRM^cLf0a-#~W*6~k<(#flCr+rr9$7wd zMb8rzP_wAI9%|Q&)**9V1qdY{1oOja8$-}w%|YhUGq;v?>XuX!CY5&vs@&>2WDP{6 za}UK4&8%Mo-DI>AuTY?LM1*lfby<`uxdDtn@pbPq8N1}#Pgz*j!+Zf}^UN!`drxp8 z`rP80;)qj=$4?T*?zwjE^Kkkd{Q8pSoVK3bbuBariL>6tgUa}ACrBQ59A!;fx_Mbq zWB3B|UBL8Nv0>UFVdYtM0k#DIf{rL6i-)LdN(WD$E1-mq*y1)(o$6T{$}DPk^i1^& z;!eXxL*}aTx#_LMz^AU+r7A)RV+e!{3-KnayF?_HNpV+~A+sZ(*Mprh}Y^-aT(`i<5o0UywLXjjxOK4F|Pe;(38;cmOpZySnq@ zvPqyb{Ly7Yh18iDH`eSMd+4hd!+s%u%Bm@}e*lK8w}b@h5e;8mX5{Qo0!FI|RRX2# z8#_ShPT%By%TgNPv7uJyaKbi+HE7dPIZ znf-9?l0x6o?x#PaO)SZFMOaI$h_KaGOF}^Loag&6v7_7SsYJfo!cCnk5*1g4R zScs=gxcOw>0Jo_~_v5x%@8}Alq_(c+;N;2Nw&Y(=^as{BcH^cJ2uy?k&ghn|8#h6t zuK;l{_Jd!@^~{<>EBI*H+)d;6POJodVs}X-IqG8j8AM69^7Z{mq&1ToBRt4TcBV!r zEU_Eg&Z=#uYKjQ7rLqYXmDY(FH~XF6epq)f;|MRWw@8&}Fnx;bx6%7i_=_n28Z zx(Z<9KI!~flz&3ACJfAP#*A1O;2zA{v#9>zvd6Q1O??iq=Lyx#LXKn+Tx%KxH5==f zjtNVt zAgI2jDFbfJ%{LxKqr*3GaOQ$Rk*t}@xRQt;+b<95Ip9w9NvJLLbZsOBik&em;uZCM zaFbRX8Y!*X-S=oQ3=EiWYD}Om{eEuGF?IC|(cbXsg?#*mxQQi^GAl>dM!b@xC!mDc zHJ>#^B2kw)<`VEz4m|MT8EbZQ=v7#A`-1P+^lK+nZ>(uk`Vyold}#NkYXyay`+tf3 zdC;z?{41-_M0Mo}g%OkaSwUe;?5t?(Hp7BPAKBYMFzz7ti`q$bp#h}3`Q!Ng;2-oG z*P@Csd&ZSE>`l5eX!6mdg{bAM!E>F$>$$tZLl6iuB?eH;lf%;^?qjCNL_FssFX{tRPwx z8klWL=ui<6!|zCPx-zWJ2NhQ z#Ni_ob_{pl%Ddlqa%c-id~zKWd+&FE(MU{sLeea#_F4JJ@efbeX*h=Q+c(VYQ`;i} zjPjF|tj}@XB{Ds~@~f|O-_9OxLGToDKWb@RcyYA?$Wr+cZ}N&BJ~|1Gz)WZv;@<+b(U;A1wMIL1>OoNX z4oXNx)R_-q;f6Hia!s41rx~Q(ebX23A$_S!Oe>oGz|{W!-SwqM`xVc*3B|_Ofi+WW z`4*p`A;hQ=oXsuK#2HXkA7V+-z7dCtCygv$&b*l;n3GEAFe@Lfj2lOqR1{u08GOrS zz3}0TBH!cAWl&-Uz$7Fq!ZR0cBA`POnN_Ea$Nzuub@V~Gin?< zq(K=_<^uSeLVpg#^Rd}st9tk1#j{7J=V3QPpFo{E&;1-$R9|&#P{p6=TT>*Q8LdGG zR&;grSAOt7A(h~|ROq{f(j6H)V0>;ER`!PEPl1@YuA$nusnp$7le!&dXM+^#!K%b+ z?x9HV?_3N^o&8SUq&es`2=t%$skzJEa`g_u-vz1fPURBgmR9^7;a{f5Cyn`&a{eXZ z+r*N}KX;P1xqlS`<8SLS-DlHML-2W>5pR|7@0FE85hX#Rzd%+2}ZQ^6WImh5h z4KQQieNkF`dTK^?Z)6UlM37n52Zbh)DYf8li&Be3w%7qj7!xdf6S=j<1Jsi)(Kd@7R{KeMC-O$+@Xl zVpU(;Rcp}q*B!k)w8ON9Q9Wke&tEvzHQ|ex;)+0;AD1-r!F$WU5f5T_-t}BQ>qKEu zP28n`2}*rz>b^O3(xhz@a#Lc5&A&6UbMF)U{Tr8^{7O(gFRg%aQ#R0Ys_m=3PkR>f zGpkr4hm1-R<~xE9T|?k;wGP zN1kr&(-U*M+x9iyFs&xva`uPlNOaRPTYt-`?>48u0&CuS)517f#cLJ-bqWtJ`Wp5Grq*Hpaf{k;2rchP-kkNqdB zZqz=USu9TYp`pIVwdbSM>&C6?9NRe;;&eL7tXVZ_v;XIej8pHkDJZPtvu|jVU?=;1 zc3yV2y5HPmk9=QbVlL$Oth+}yx{oEL4k_tda_OEkBZF}1$J|`^qn;fMhO(#q>-NXo z7+YYd>mQo7;IbFC;P#5buNu}FiwT#WOH7Zx@vLPp1wt)2@erV$&;Rht%f^fz&ok3b z)PC|KAp@FvWi+DWwvD?~jjR5(zo>}gGorKD1NW?AIyN7@YCgE&t3%Phm!Gyd{RwtJ z9L!yhy4bhP%vC2RHkB_>CJqcPnQi&0GhA?gL4z;8BIa0n%(V8G1L!W7e(di>PT$ry zZ)>Bq6pMc0x)+><-1{?is(&iZ5I^5=ZmYerGU|=bZJ_PgJIOKx+?Ty<&KAQ|9^nJ# zX4IS_%jT1H6MFOxlSiM(>@fC9kA&^}FWg>tA$V)Ou5TUTdd#jW0rto}dFAdRzYP4JwHHNn%l zP34pO$-6hDO!#{2{rksPE(zXj9NO^F@twQ}JAZlqNaSbFt)KE5zJL4+-fj23ZP@L-C*C^$HKFF$rMSWIhWa>k{r%l{ylL4Pz1~ax znlHKtQ&Vpcm8(vGXtUuOCYAwFCu*>#a8&QyBaDt z%1$qN4Gr4c_#Wp2r0=cAzgD@up*3YlC9Ukr&2wYgi1_m9UeOE7l@;8_W$ctSq&Dqj^@ac=X!B9mR z@u#u?pGl|$ zuBNc61#I6BAN4?Gn5GS1QC36_oc)e`tjAnR(~EJ%|Jt|6ZI_%s?sLA!Qao)~+Ntcy zm8UliiJe%*9~Qq-?j6?cA^q47!b>AwL-k*7U8aE_t16qb_3FZVMGMov8`69Bm^E1= zKF*5rEF{deNHq)Af4#QIPTWNQDxvPdYskE6@a(ZSId07U#vwnAn4WO(+0zu)mfLf_ z8B?=<#?eEQm)3ke@cO3%!k6VYukj>*{Nrjq?qA?(T62TK53JuPy?rep{Q=wKC&l1# z`>IEsM%`Vo?icwg*iVnbUwP*c(X+GH{279={`d!Q-Rf^uFRz!47RV)|JKE3?$&F|=quOa4- z@Ov{a2S2(qx5|V*{mYmS_x3a*O1$kf2?;+vh;Qh6#5m$c#?F)F+pjC|*^SE2i{ZkJ z^7rarL#IYfUGdwOJ3ngbQ-ANfGiQoj#`!skpLz|gkNpLce|yvJP*45EbrG4*ezLhjO+7s4bgA&e zp0mGS8-MOYVmNeQUGg#RBwXLKGgp(-j*MLM7mzs#Ik6p;(C%@Zq|u1n_`1rB*s?dl zxJ!2!qdFj-=T3bkKl*CCc5@%SvW- zdDe4O+YKN0YTNh)ZbJ3ehaaLpFmzmm+LPC1{q)fpFR~8r({~(N>zd|0bLB?o*a6=^ z-udFm)Kl&g#LkKTIvWt~8ae1Y^6_uDb&sXL9lb11M4!PA?-02if4Y4dR5q$BIj6(f zNOx*>^Qraky7PSsPS@x3U-spXdnaA(@ZQvQ%RAO+yOvzI_sMTorLJE3^OkNlQ%q~& z=?d4xZ*y~Vk0al@tnx(uv1d=Vu($pQJzn%|PTGw3dv;#_a82E)5Ngjr?xeaW*=5KB zJ&umPi8hZN+!(1y(TEebyElcN_&=T9G#WE~;`ivdiYCjiKZz3#Bd4qioJ;X!W*^Xw zhNWJ2WSE}x2-G|0uiSWT_N>DfZU6H>#>JxO2=eBqD|r*mHi99d-C=QGJ^$X!=yf)?rU$3NN z1O^cp$MJ2BGEdy~ONGCFj;D_N@!Elg^<&IE7KN;|K3#z(G6?gx@l;e`~b!{>lPJgr`Z;Cr_edSH` z9=XvnYu-oO_Y6wMKT704Nfsyene%pPC6u;L(Vv14)PD6`&OP2Mu+zY*=?#6l`WmkK z)|Ih&Wd~1nGIiXWi>ApouO6S#aLPg~OR3rxS~pEJy5gra-);M*rX2~1H;OsC$YXBY zI+wO0ch!N_9?OF2zX%Lmbzog2Yw_YWzRvk`w%AvE7rb9rK{y@XYmrGUOgE@A&TPc*W$jQGEt(zIuv?<#ENcB#{6(k@9Drf!t8yJ#M#Je%P_K z(K3G4{_c5g^)n`pUTzqtaJ_|QiuzZrl~ z>9$cY8@FsIwu{Y=7NBcV7L7HZ+Z%wx_ zapL%`$#W+ko_f-do7;c-TEh>-Sygd2t_93h=Lj3Gj2*ar>x6Z}RpDjj{q_`8D! zP`hYkD1mP1SG|<^xOhUwCoD9Ves|EWg!Pi!ix|RRPL5i8l#;r5!TOAs&ifm(yRUds z^~nfbSXPl-JhtfJvm(#k{Z$_|rd19H-v2hlDbI;-_qub9?bh!QSanZVQ%=BQBV@3K}Wd9%T1#6C#-(0cr zZ29W;s~)cTYCf=Gsn=#;t|c8zO&M{>#4a1YdEeKfBk^&`pLz~gHFi&~ z1MRLVCZ%+mHt6=uEd|#wUsc3B=iQGvdPpa4zbvOcZA<;PD{h|MG>>SonKvI^ZbzHv zck?t{JN)UfCnsmz&fi!tyK?2qAuMP5chx1xhjTVxyKNaOJM^AdTypTob9%-3>bX6J zVy@k`Pg=UR3>r26P-@D^7-(OkAh1DQzcr}zKTUC2} zZ=+-bG$dG8*^4ym{ko4w7C&A1FGdaQ%9Bm|54?I}noqs|8ftg~RDeUV%p8O|u0-G-y{IXJT=u0%GY0+HuH$`NwVsxBb=x74b@jN- z(h^_b;2^x<)u<7NKC|;GzsKoqCG$@%O{Jn-9qwYVNihxUBOu0!GUI zBzEz=?W&Kj+kMju+dH=JUpcJbYv>aai^cwS=K7prpA-~i*J@WZU33i@_59fF+5?pF zy5*U>QIeG#g@t*Yx_oh@yg$CaxbfVO@ejLvKKi-p?xhd)GXy2im8VM2UHW_~D(--= zYXb=`-R?Gvj$InwZ|?^`XZv50p6>@UiSV$Gb%y#>Z@_FS6264b=H}H{%q=uJ@5BjX1iCn zpS<+SN_ofh*U&zVM?UIm{JrAOXVpK*TI&K6p-wCJtRMGi_fKN+we8#?@5gcKu5Ymp zOA}0;b@j;Ml(Y@jD z$F}|1s%PqHU6zdHRepSB?=QV*{_WT~8|KXTEVQfrJ@BMovS5($m>ys~EPHtN`v`rW6YVXi5rXK2JeEj_vYx!}%HuRsACA_hJ|2j0Y zCg$9h&Zt|)p~Lcrvl?8}M_s>u88qM4E0+7y?{9lCDHGhX+tNe#`zKFJ{Nk|0=AYL6 zd{gJm^6KgSod?}xRjMoBwreL{=e9J>$s?%?s5F?vcS@fGz%;plG3UX3osrd+*Gw!+yI@s#6;k)@Q|?M=v!; z=^mkva`iQ_lh2aR+#fq?j`%@s{OF0SkekKE)0FS@{;&5`6{N|-2dcCSKg^YsB~g}0 zojMd(*OU`%G9v|92rZS42{geT%lLz13m$n1!=jQmZEjY@dSv*xr(Sfp-t@ZnlHE#d z^wW<>H;vWN*AfLSF~fuU0`+}G>8<)|TYJTio+Rjsdl#onFYA4nXJ5{DJ^7ER9DgQi zTklLSt3BS!zj2}gf4qnEx-RhSvPeTBkG1mWbQTr#8b1Md&w}SP4XUrlQT05(PC!I> zqD$>v6w#{pZk|oZ{qeul{g=}JT``XQyUYI|uj$2_llD@AXxYTBG&t?q%iCj}fOnvJ zq^4%gdXx$1$D@(%LbigOtPqV_Yli;yp4P705xU)e5+z&X(WBAd-{Y<$>&xnG;Y-gI z9<|BJn1KbVw<-qG(9=EciW*Lq@D;mn+poO-O?tqp#F&K3Dv+;K(=SmlM5|4q=wtN+ zi$wpXe)714+cO$Xj#C#4!6k|BMmG7N5%!htDUCS{s=0|N&o1eNw+L;I?TM>0zu}9} z=^uXWvFhIC^->6sp(Y7+yL`=53rh*o2$>W*B?qCV zqOx&yyJ8y`-OCbv3qO99%rV*4di+mC{;eLNw_|l$iA96Hz8;3B%1eSZ%(1-|)wkJ> zNRTq4W;@!Z(wdO-k1BLjdlmHtvKss2for)$5YZkcn|n{O2h(!^okJaQcbCgXnwzSs zfRk7<**txU-Hl4oE7p^(LiTtm!uQ?^IB4#=GajImjVpXCg{fsmYz`@We0@fiA+7+R zYWre$aNGB!vMHm!zw2|@`Xf0~LUp1*Q=9hN+C2IY5&uGt%kUG>-G4Ji*T)^CrH`(q zb;BPgm6*M&;SmAg|J!)}b;*!C{Beg^msUQ1kZ++?T22z5un1d4)?y<|K022xHkU&t zmtAB@reW5%)ne=~a5^1jZ!tCWwOL?%^0v)ryOGVvsM#wf`|7R<#&ThkZ?TIrOmk@- z3u}+LNd#rH@iHep726eWO=?iERp)$*Dwj95dow3Y0QmBCr+qx8Eqr@>w5?NY4`!UZ zze=ZQ9EPg!H4jbqF-eq2OnwNy_>7r!!Z-1@vo4NZ-@g`|BByqg1xN4*0lWDZTJ ze-&zQ4~P=_3H06Q5-8!VrG^e(M?;g?WF>txE?se=z3kFc5;1YAL3_-9!Ib3euyXH0 zgeRk!F=hzNy%)`c!}&UWU8fgunc&7gE17`!xELezwYAI$`Cf z5ubibP0aodFErAOa{2K}gReEYj0fl2w-y1mQ@hgNDg<#0`LsHneQmjQ7PK%KVSUd8twE*+c6R95v#)JMU$S7gXg_I`L=>r9lF+jNQs zaZUCQwSK|Vn}we`eVs!@Zfy`)~&7acN{mG1u17HjrgI513%m}8m~IreeRb&(9Z;VK}!D`y5ysa zu%jDf6GqAt_NQOUi%fojADR!kd1*ZmQR#*(8Yr(koG%<#Fo^68g-{aHPJ~G66zLV~ zbHtyva-xq*wj`ihM@5uIrwJLn!cU&{~esTN+3)7LIOSjnvrLM+|Hd5z%hGI7w4Xw|=OarT|o zs}`2VQXwSd-kI%Q^?BkD_1`+5hYY>$j-Cpj(-0Bpd_p9cR2S)$9BMPGx&WJm#>($^ z=`9W;F%Mh)rw5d+J_R|eQrDy2Z{fJ&ypz6XonQRwXljNa!|kc{_j`W6no~`K`y=MLPZyFS5h+S0&{-RZY_vb*G+Nt@ICYi}RM(@JR1oTfnpE^}r^dO|b@v zH#fVuq!eH+MB+1qS-U?h2&{IJk4vbq3CeI@0dH75iZ(n|;!R`j-3Xn;>sXPa7bzJK z@<>};bR&2{XK=2T+wB>?`NN|7j+wvYJE(B!#4fEK+SIthbW57ixXD(w^NO>?iH>S~%PhYH_?{{%j53=Yp5fVp8|!55@5#=i9@V2!p_!JmMmZ{y9GR}ek-Hp)z* zJ{Z?tU?030*szofe@9GCs(Hx30*jo4rzMAX_#ZqUct~(OazD#V$gqmJb~6-QqHlf7 z#{ckB7A3CqwcF3tkK%`)Bj>bUvDa$oh>rylJkmQj)vP|%-3;2Zix@R0*Ouv-<0tlH zEY}{li1|nmYgX7_qilSf8)N+NX4je8sZbE*vU)R`nF2(_JW5Cr2_Q#P{c}>Dh=q*}}sLyg!hZlrW;l#ueG4kdy z$xVVM2v-A0R9w_q^Zx<@eVs3 zP>$GZE9R%J?5}@#Ll*A%6Ch%4$()4Jh758%4o@6?O}PNUPzfdxfzUA@$N{GI;WuHS zF)^iVIuHRfJ+UW@MJi7U^M8cd_*(VR3%-wD>J#!K0mzg&2*SxEJc)#N$l&3_J@*1> z<%hw*GXZUiEPG;2v-u~{6(}IV6&iY><9O-1#_;|tOl$4wifp3}i6^F~HONMwrRHtKE@KA<~e3sBKytUV- z8d5+BWVX&G22u$pdoVn)Vt8lW&6w<}t6iPJ8QuY-;3qTtwkbz=Ys?j-)RrEPKVxZ_ z*cPNjWKQ4O25Hmpma}vKlF4M5hdsCuoE=OpScZg9p=#di(kBk}@{Yk;v89pM3q|z7 zQ2XaE0uqffzr2X9H=7cMF{-^tlM_MHgA+DjN1^p9&JFx9Bt_@r6H<`ZI;y!Cr^ECQ zM>6-w(17ycY9YedGP1g{#{`UNA68f%Lze8XP4J87v{&l6fJKqmn_6s+O}azxs-l4-+~HD#_1067``Y3aGl63+Xmy9Lb|?RocMS{}BrIwv{1&~HWFj<+ z`X8voFe%Vnfefl*P-VV^hCmL!$Qojpl5kgQHQ|9-# z()PPxhOh+Az|E%nCQDHFn})cIVYj|u_uv=7Zu*vzR~oh3p#P_f zTwmAbovk;35+)m16R3CYq1<^8l4Jq1%X#0~s>(+V_O9nB=r1Ik#3c z!}-w=aI#w=m}r$E8Q0Jo+UA8=Se5z%r1leIQ)?<&$kn)#Z}V20S#Vy8_35Fix?3f~2k_a&S-L1(x~5 zSf_`AWlv+`=$29r8m+asRn&ns;_xRrDPciSB+?SB0%y0VY==lFOZ!7~dhLuWx`myVk`Sn$qfXN_J*4ds<3*=bsLrAyOgI{(0rp51-%3x>;ajGLde^;Sk zQp=AoqT9t~6oipEc|np7petA2OKv-zIqU_N0p$hq?S(`i2m7tmM`$N9U>=fZGVho2 zk4A0jn8bV-_<51LkFbVPSvh>}L+k23;XPFfN{O4oM&AxY3sZI*ZDP*N{t=}JM!PsBTcgwi0S4Wj z1u8b$N4DO8gcSwlG%ZFLW_vnElpiMRd$tkw)7(vMUI*JBI1$~Bs>D+E zL8t=mFQDd=>mb>QmUSdZ$M#x2uhfxbH9{0Y?2g_%tHf8?$*~inRA|Z&lKC`Ft!a%v zFr^340XhXzpjx|mU}rXhO>8k*ZPVmr#Bz!PKLZ{oZ#9_s5utX7nR5XQ_Myv}CupeY zn#|f=oGg(Sw&H_orhn9I_kcIRGk<1J*Up2zULt<_rOM+$X4F__n))YQ*jVO?LB%mM z4=s_6lbSbrXpaNA2#nIWyk52Wfxh%0N}XPHA{&LQ2?ci9^Jj5d`>yAWW0`N?KMdQu z%~5t8tyj0>$9=SK=1r!sF=~2z1Vb1kQ9-flw?;PoOCwKn&^08te&G$N#Q=Rd@)M=b zx0$(aNz|wgfx7PnNsw(Zx={#BWt-lRSt7vO1vJJ%Vfz!1`)~Q&P zZ%L%@{`x5NDQTNMj8Cxx=Y6cdqHK@Y19#}tAGGA;h#05rSq;ryf`xYZ#x(k`NSJZY z!7VND`To}(R0NtBiff6NI)U^lZG2OEe+i$M8TS|+K050^@ey;sxEi+)nX09JO0CPCck~vjCD!{Id@)W|CPrfOw=wrk=Fj_R3Zw`ht*rt2>dtk&+QBCDtLK z@@-_+UHmsA4##ZzE$e_kZh#gN;Prb#|64a$`fPg}rqh?=<7Y04(iJq3=kvdNV|KpC zCHNGw=(qE<{ZxESslx7YCy=_P1(2ZCx zKXIlTF*?!~At7a9>4VVV4aR#|$bAKx`C*cK0R!a06kJ7ja-PE|Yu~kK&S40HIbKx2>UTL;ITe1m9wF)b%d{V+a?3C`F1nBoh<+QzUEWRPr*b#K!jQXNWY@dAX6CbXc5Q< zVWM?y4AKFxV})?SI*|?A2jCHI#(xWlYz{Kv$XR_gEGVCRCOOgwWQqPS7or z$eD#msofEO^>xvH21mJ$qK2oHsl&|Uqy+6j=<20t`DBwfEz@P%LdST}^weB^z$|@; z%!S(kC`gL2v{Ac2N`{vH+vKMcttx0c}s_-|Rjk5ga0P z%pz2NGs4ixL8|%T*ydP_jVS9&pJ1C&t40Ib_v)g13gE@;8cgQ_jo6}KXAVUxq$!*X z-2!TVjka1@BDe>@m2hp+rgO6Z%>7_H)JFr&1n|#FWa<>b`EV6RW2!(d<6`3uRv;S$ zp`t2CDdLAqc*q5Y7V)D7Ri<1eOJ5RyP-ncF=R1&2=$_hoH%pInSBKQyPM}T68oP&Z zfkzx3>wy;yP`FuG){ZWO*!P(#X&88@H!j~;Ma`+G$@L#lZC-OtHr@v3>w5o5;*Wf4 zPLGxYb=*)RDqiXvc%IGLRh#esSP#T3l%*hR_YrbbvD0`EywW~j*7 z>1*}k3*7EuAj7o|;JHx@EOy8Dztn2$O)2(hhNc|TFu{~QD%VS(CjS>seUArG)Bhi6 zvJwQ@!xpQAXUaozrTevO_<3u{0PsKA@rRZuGss@*wIh+H^GFyPDHbMjzQwzT?mg7L ze~i@Jg7!`50;B0Cs->ZW_OkH?Rs}*S!88_G)_Q|4NPZ(IEs=;_D%hTl;+i5%+=7VJ z%+62EV6t6Wb$yl>7ZRCS>W90B6R6A@{Rsd)i{P>qaOVg35Yg^-;|4ZkpnHYPOUL*rsB9anZ|>dZzWMhAx}(>^-rV+XUu%sYHq91S~cL9tM% z!HteDuL)maAoODVtO6wbzq|{z=~2F5;nkG6{iE#qhkn)X)gxz{wQt0^|5rpb?p_Gc zB|MfofmLSzPf@U+Utwef6GiotB3>Gzj?!3>5Jh}G-Ye0NJ`7x#zzJd0%e-QC3V&z^ zW>*|iha?_AN*r)&Q+kI$1GKT4d!U0t8LwoB0((Z|Cp=)oKbUR_Zea`KAlJ~7X(oMj zjTVKx9PooRo#0c))1iVE> z@EGkd@+XM_Cpj6=8WG0OTDHKzW013_`tdk1=sifMgfV@c2KtbpxG-uo zQyEffP_*gZo$-dFd{c(dnCilOTy*(mtGE7{S;NOX*P``9u%GuafpFC#njwm&(x#^C zUtP`w(ar!dcHmeleMclLj4SxF7C2IyGzh{})3~qKOUm>^#%`u9%}&LQb(f75LVAHd zEW%YdL+}>nP-*(G@1e}oeShI?5jnzT5TRP!7@ImSVIK^w|6~!>0rFY~($7E+({OPx z4hg2FZpCM8e`3<7`yp2lOl6A@2uB?@J#OJ4H#C{e6WV|{qC7{$_Vg^sVR8h$+ctwN zK+tb`uEpDx`Kj*MshdKc6v;;0B~e24&qk` z129R?%H?>p{o#A>iw0CIpib0yr=$w**qCcfi9Nt5ctA9~nnq>6w2x^<(-a-LK6-dp z%o`I5%N8VCzs=`F@sOiRiZ}#+O9kLHEBi1PBuL>K^4_p5v z2^hFgz2qs``P@J`H;z~&IAy^IfB_hU=osjAjo6Z@#&%v0EsO5-dpu#>;?a0?W_dg1 zoxhr_dm^M+DI2zF*3Tc=dk0QGrb0D=y@*`WQ2JI`FYg(v)tmM(jZthlBwxC?h+(qF zfP7CnDAQI80^abPt1nv%8istfqDD7+g03T5i45Y$<8wg$2x4R_R_@e(?}Y(j0{~u9 z3KAkeojJpTCe+SEAam=3$EaO90k%Nl`BSb$e7$b71&}sc<;6mb9nDFTZT53%6I^(Q z%P07SBWZ$}opqFX8Am3W6E_%CM7FP;{oM`0Yoxg_~L8F5ey5?zb64SOlb1yYy6VYWG*w7O!E`KZ4blb+mz6`**;47 zNE72xMW`u_A2Xj2r=KdY=4Fb&5LB!nWxB)qT)7xhdaqBQSpH;nUGFlC3 zF#|LKB**tZl09V^eHsiZbe0dHNn=W;$T3s& zpjHwua~$W^nP8O+%XWM`bPWb%+G19p$Mt>q9H|?cw3!LRB}F^a_yIKRK88@`>_m(& zUkh&`sM2a76p6-@f%nE#=EU~P;-TLD-tea^4eA0c)&MrXps#*%U#{zJ5}hdW#`Rgk zM$dHT{XTeG;s9KF0kv@ZG7|S zY)gp-#syUV1gHxGxo!evf#~5S2}3Dy5#81GN{3M06Qr8AN#2ex&cX#r#H^kF#r3(SXbwY5&pRv>;JI-Yk~i7TL3)tzpD@9PjLwH zPy9b(f9x0qw*dgw@qd*2w*)ZqlJ()=_%^p#b5em0+JKShVXh6#<~iM@mC}v+nO1 zKm>3AfgTS+naq|6rXU26m%5?Wbs`{0;2(ejK!Oo~KgwQZ2mpl=|95=`(~(2XlSmLe z7Jx*fwqhdD|Dn*|S+UCS=#TJd6}Uf&1A-9Vf`LW;y%~R(zU*8uumb}V!jP9d2qCH> zY?QhG0YH~BkYpI72lh*XP)Ugp2W2n{AgHP@1LBhS4WOti1?qe@e&yd7U?nU7nu&W! z!GB{Re!GJ2Jbv}!@vCV$-((o^WyULzh7qfx`%gc9HHAw0oq2UdjjYS=009k3=zokd z00hrQkY4gpC4gY4>mPt}PQpu~trp6R{DX@cG17t{6pcW!epBhHGzf}^3aC zTmc9|js@hQ%)F!^NK^y>#LB3Qr~tX50DA-q{|i7F%i4Y;Q9AqrBnbA~$il|Rl>W=! zcmN(80!ISB!5?;AxvS|V7X$4x!W4Ol{Q?LO3PE0>M98ZKxx&FH55x|?>W(Tzh{YA} zwfKXC|7r8FG*8yj_j zfU)GR+WAiw3j4!w)X61;LEWFyX;?O24WD`rMABTYSx7iqWDTz%KtI$u2PYgaiAcA{R+7x zP*4knT(&0&eo6eY^jCaIqo7R;fFKc<*d;(=sA2l_u~@t(4d>l+j^` z-&3LJ*^ewQ^-+c(uXwMfLjExRN^KF$HrStcRS*{;u_^dU@+uVu01H>tWpw3rY^lgh1m4F5YjRDeE)&W2)6nF{7fT7p`#2*Va{a#{!g3=YL zd<_hRU3D3ZP#FlM{{5DxgnF#_Q}zl&O-$3aH{dX7IV38t5(F6n%H+Me#rzWdSNThB zECLt-l!!qvVh|kS$Ib-$RqL+|{}3aUAd*N}v(Yy5wI16aq|L`2YflO+z&NV*b6SP#XSOJ^*CmSR${o zXCOg4SMvYTvnY4=AZO`k3o=sk-2i$ztI0J ziui9O{w4ta-^oLe!2b@S|99g5C;k7U7C^0RWI%1)y4*1Jmt9sMB0?C0DIY?MS32|0 z-CKkgyB6ug=c|sXH!KF=gYVo(r6Gj!v2Qz^oVPd40yE9fIdwn5U*_oWrer(SmRFmH zeVV*qxFICjr+nPSQdK@UX9XcdWs%LDB~4Xmz9|ZiDn*@AdB>G?H-#w&GEI+OB-X?^ zP3~E#zCB)q!iYC&SmG4Ee)Y2;K)*5B?1E3TdJ+8N)_QXRCE zBgzwNz`Id(9WTq$>Bz1CpC3@~R9p0vn}4g)uTp05W=GxBbLZ)B zipd6WnkI`UqbHMM=u}I+MYg}+cZBl^u{BP2KY2l+WUFG`RZ=3d`Tf3m4siqv6z2ac zutRR8$AEoqGrn6`SuMN4YC$p@%VoQyr*CUCs$5S$IkwF&a31yNQ=A*K=2)mzc5IsbU~no;6=drI$%2 z3T*4o4v!m&OOL&d%6k|3Y2jsQOkEcV>jsl^LQQF2Flf7mwN>Nwo4GT zN6-{zPpHLp@wmz(+s&p#K|5E z^)h4Jfv*d@{iWH4^6G*^*6xnTN3}goqlV;#s0$w=C4_y196HP#4a7+*%g1)-8lwIF zNq>PWCowzW3xnI~Q6VH>?hbrC$TKi7d8-{0-29?z_nm$MFdGZ?VQNEy-M$9j zNd3+;$3om#Cb;iIGgS#97206JW>yXa26g;>kvLb5d(ZUuGvP978Wk3q(Ckf-KP7_54h|yWny^P~w!~8TWiy2f!89^ca4a4il89ca# zXkT;~D1AfM9NU}L?q%X(;IeHjDpTkX-RBd|wz8O8jd)TD%Bv6yNrAuT+Marrh^+ZE zS55n9O~?&Hyd%<~kXXTvE^&<0w%()+1D{DiwK;*t9GJ$+i#^oRzK*LOXv6SXwyz=t zP9jn}@PLN!!dmo|6OX`;eMkzvV+;LN0V@Z?MjyWtZ%fA0$)y7{2FwJ$C{;#lQ) zsYJhoy4r@70b8}%tf0I+eXG6 zW7`>@Jhln-?2b`+pq@Y*LzbwIF|uE{(-g2JeH%t7AG+EiD2>&w{01`i1t;Z9Zn)gV zv_j%MzBP#d@!h1kWSk`;u4}^H#WZ-`1ClD?iS{XrIiow+;qc%x`BKvv*S%#KcoNOc zW2B6Gz4`$Z zqEGRZW?B~avJ^}C#aW^*7!MpAt)0&*j=T*GN9!O8Uo3L-zn~g=w%%sa`r!O|V-ACe z<%m2ifAC?itvmMZI|0X^}gb zvUD&Lj?b;eoM9*Sc{TW^WyFq0IwwtWh@KrOp;R;<)R7Wah+OoEAYnpR9-0D44#&IQ znzVFzXo(bzWlD{fT;n6NO5C!g4*6+qI?qM~)B@4i)lJ%F172W~e9WuGZIpcFtD&JT zQI0KgM}2Lh+`=|(u!C0ip=UgozgYS!_*CtOC>_6OMcq0^Tv(^>OSf<_8%0%C+YpM! zPNHSh{#+|IBN2%j^n0ZIZx%m>YtXmD?($8JXLAD5$BY`Gp*4Blm@N>019M!rApi$G z;6O5XrCSW)Pu>44@UaYI&SEEpXv;spDf&MK)8=B;eVxDoePjaNKEFr zBRHT=j?T%bBd(YoRrS~dy6Z7n6J*(q0cY!Mbs%^oajKJnjyK2k6su1QbnlqE@i@?i zP9=1!LemS%5BMQe9ub9dvCAF=0+oqRN$x$Y3%P%Pmz2qges??6338{z^W;&BcgR>6Pz2oCb5AddKw?>sgvcSWMJTU#8$-6M1Q><5*YWehN|IyV^QJY1E?aIO7nmw zSGsty30m-3e%=UqZ1=Ss?c2DA8q8p1Ad>?X`P)^^RlBVsfKld#+!;;hk|t|_R;kgZ zcpCj+o6sWN-5}M72%|9SmDlgEt@%3QlJ#)qeFT2?d z?U&Qqululb;(s2n3Nh8%j=B5w%RBBx?WTr;aFdRPuMo*ncZ!3#kladtLje_tfx_2E zulKyZ%CY17eWGV6V<_`Gr=yKz;-99K9NU`5ira~Lm>62PW99ygswrUo#2q7=zYXVg z2~<&f=wosc@s|r%!IjK;eVMm+nhxDD{B8BW#ed9tPbc}39nlLaF%rga?l~&ibxCm9 z+@pIy%|%_8vwPc7a6?zCIl*P)Ct!R?rOa$*8beHKn?HyYDy6dtW<%a=bvt? z5q`Y5A$ARER929oht>j}V$q|bk7YYHul6SjtjF)WCDlp7KBA``apFgEKEoVIa*1O? z&<@h|reOXA=miGlL6D zpNOOd9+%@QE))(`;e0?QbzAj}UVJFU38&9mosJdGVkWGAr0B~m4cevUSe61rTvsrq zFBGe~F{nvO4P3cP6;TKMBlF$z-3M+ko^ffbMW{7aRK9XuvsPh9(K~@{khe_ zM5H23@4ilS`|Xo#=5VrI?0A35>RfTQpon5m^jpzP*O>+rVCb=~gNHR0H}f6~Brx}r z-x!D#gu-}THL%{=**iFlR6H~^_*x4w3NN(G)qC1dm>)Y;4a~1fIe-_n6kNc7WvwWdED$ayz`R-mQ#3qX9p{)-*Lpa6(WBE!Z$|= z&pI;jC1-OOBIIT=o3(gFmm1jG!4N)Mx-uho9*ljAz2$>K0W7!s`Z*L5hEWej(gK{n zTVmOa@oBq)v`;_BrmE`<;20e^=abxx^Lg1#A)!zp@#W!pt|=Ksi#pSb@$MQep(u>m zny9z^J74C10)c7dg%iFnGS&?jRl}_&NJIOYQk}aWOg2@19$KIj<0TzHRo2If^Ltzoyl1m*Ai7Z#5sk9g1JWYgqH#&r~n{qVmal z$7tKS<^_$>hYh-dN{hg9R{aH?0$nDK3G8q-#()!@Sj(x@$1>?^xS_IeQwQ-hy7zW5 zYhJc?*Ew!LW4Wm4TCCwaGpp00-{wEk?i`$Fk|O(tlI`t&?D~`hZi*8+ycJmsU&ddrAoWi3d-&pz0v2;E7C!+;C-;B zwc#BNGIH_sNahA18Hhye_e|URw>bOcxmbXovfz_O^`lfeC;WG1sN+aXbHlJB{XF?e zt_^n^aubqQX$^%Dtg4Xc44{c?gG64Idw$iC$HmC;1Y{I?m01IuO9l1E8ddDW$QeR& zalIkMRs)U!SkK2W`C4M$Qb<^r9UY||kD#a+#p1JkR)zYp7JpUrFj!OJ&<|lCXLzKO{rd_qYjbb?N zOgMh2p51eVdgxS^29HM_$3o?*p>9Cn{Wp>!6S6NnQ?|3f9Ka^p51k;eAe%hXU5%|Z zi;YjtBBGzR2Z;Qs#n}T?9mEqT1Z;Y<_#*WwX(@|hVpn;l)1}&WqQ*c{I@|6mEEF+`J|h*a~gNfvi1D$SmHke#i?t9qdM z)|(NoCQPI&T$Yd4@?`@id6$`+rW)%~h7#l;p{p3L{z3mNZGL^9(gnrMblDHQAVFMzL|K zpL##$__`bwZU(Tq(z+V0Znqu`&iZU*G@VY|bU7-2y7A5Ud}6Ngw4%l7$iy>P>$x9f z_dIc%kgjcb(krp#h@lgQA=?)^54*41lvxa|d3k_(m^=|K^M3KMRei$*evqZic{8qi z?~SW*btP5V?bkixIkGNm*m~G0aZMyo8mUD% z5VnX$duRB1MFO>+Tf|(?+-f`PQyW^N%!{$25=pC?9o5;F?}lj?9YcI1iaIdFk_rb@ z+w0haG8LL$E5vk!2T-_oWDea(%5@(TFAUn@+06tfxO}-^ynR+F=t>u0{l<}ox0;G| zCvz#Imr!XP5v!lk`{h{GrO{OZO+PE2OSVZ+_@3XB5BAaukt8c$PV<93v7{nL6kwUm zy>m836izL(G#qN{#>(8{pU_qg$-A+PO%`hhY9vBXQmJJ#KL5*_yv1Gg#SRe@-%qr|)hIa@@M>Bf~5e zb(ts5Q_Gj=f+081=9*qNZy-dfU?#Iqo;o#1dU+Jk^N`w;EM_fnCaAfTvoaXaQWw>~ zv0!;3(3>Gx*pbO*6t(3=&S6?~HziW-B@oM7Ke@81+jE-Q4B%KTB5$0eJz1)JGH+I4h8yTkfHN}rW8{!SM+DVO&77LH!$9qu`3u5)V2 z!|!1XPRg#M>qd*RL)p|?`NkW1mY$@r#FTy&i(6uxDoLyz1bmqu8SJDrSd~#-|5M$5 zw?&bmKPU%B&??f1-~5`Sxp&FrjC^_Hd(KxI3bO+ zP_0ePfgSh5{Z(0f?|@ldimvB`n$NZ%?TltL@ob1nDB9^%b6PboRT*BS1>SI0(>{)` z?n~_%{2s#>EO7SR*I9lt0mK5YtI8~$_Oo2t4$9O=yCzq6X@|7xEiR5;c^A4(*XUa8 zXus*IP(+=-@o;62TtF zRpVl-Hh;$pu?WP{#iig&tXmiY#WV5VV|f{k;Eh;`2Fv0fL}0}f9;>W9Mm$W&`w8Ud z2EJbqJJop&vFE`?n>jDHhe+~>q_uOQFT@t{=V>_a<2=-j~lPd8gOzsOLw%nUxf z_f($K+o-?b<7=ErI*|73<0p6RmW|Art%_)U#Z}onWi^!D*ddcR<&0ro)V9=5ZY|O# z*+m`aeAkxir5tG_*Sz_ISyF=;f=)x$l&Y;Ij8l$hO`5r8yyB$;j<<8NHX^xuGN6(+ zbtgHi-V&L>6wa_W#0!CCt2v0Cm#)DLuRGVZM42|X*{PsUD6-p zo4b*t0jaN-N&@r+`>-H@T(oFj?@Y=QXmJ_cvwB`k&yq#|wQ>9#$5}p7q}$~~X8U*x z2bT-;Qv5>7Z7xw&6RCrW49|(d7RwqbprvyvqEs6j!gxa={Zm7UR_xMeKh#>9HqvaF zClJL17shf+;$7a97A%f@45t1ck%{<1>}GR??6Ja}TiB;EtwR;H|Az8!Ukulj5y<6ANT6Q<)u&4%~^^q{Q z95v|_!W+ZHOVI8yxC_dMED|J-Ee>QL4ZB-7zsx1EwlDur2m+2Z z#*m}ww({kS@Y}UQFJlNRyLp&Rxh-eUn4-B?g{~Ceymfzl&HqcRHuIS=wjlM==RrYGz&HC zIzx!f@a;q>0Ujg-3#m_&ZV$eQ0Q@3!jD9e-hE!y8u7&**(m?k)9(9BfF8$B~x6#H^ zyPK`h>o`5FSyK|9$@yWpHLu2f)Ra4|!Z$PJ1D} zr_)c3l&GtWt=G2Lz9gEIOHLN0_bAy->MF4(K_|kA zqtg>30T>s?d^Gx<;2Sx6)`)@+_j+U8 zyX3Jt>2JhOk@)pcTc#Bo9SEIVPU>EK$Q~o++i!wbb_kuWp-yQ=+448r{xl>@PC=Eu@Iysn zh<{dz+i@GO;+8#m(dEF>wQ-7h#)9C&N`#VlD%5o+_VsICT9 zlEbqo3!r{5^30{My*DmG%~kf?=98Qd8_z2=&oRuwmz&O;toHbn?jtz~LN}I}S3bTg zYoy4-)YFYo;*NWl)oJVY_%+oaLqW00yO!OzF6Rg$J76k;fzSi}*^WAg%Y4B_G4Gwh zL)34+1)9-z6Rg*!t7mqoo9wsmPUq3FrjpZNXsZ~RJu-brn8PpNqamvCIt$7vA1r4V z858OCXrJR?hqUKS2tvij{8XO(Fi21k0%}xAIJnb!QZ{e-XpP2e!&q;z8f3x8oJ*X{ zCaUGlJ6|Yun2wS3vRe#o?JA3}!(F=LtF>S_>`4cMc`ZatZ?Gd|dZajYHCKq>7K@$V z&6uSGTD};r7#Ty~7gZEYtRMXFd75GJ-yq~$&+}NJU&Vy-v2jDHTIO87OC9_df#IE( z#RuoCJy<=POF7z?bVzB^n;+S5A}Q(EQAJB7OS+~T73oJ6DMy(*cRuesjUYo<@?O?f z)GLYj(2c?=nb68W+uNoPJWz`PpbCK)k`26VXU$f8U0A;zA!40$Q#s^jOZrmz$ z5g2&}YBFxm6kw(hiWe4po72jsMqz(mEP>wq?jZMda(_dswyITX^sMsB^}^5i+QS5V zCIa97i=Y}qk}&5&!M%YXdJ0TMrIay1J&3!HSu$Ry+~a5_wPlYu$%YwZr z&?^-S#v&BFa1hlCk&EfoI=rtH_%3Di_^92xZQR;myx6K*tc-pdvfv#zCp$mwA>bxJ zs**_QP1mwt$yI?2ZV9itk*D~;JykMXzS5d+xB_2~84sH_8ubB}W8_c<59^7iIUZ#A zQHci4DJfq3g7qkiUzCpH{s2oMj}UiJy%5!&MtjrQ$3SPI`+(^gEaiElukj(<-7Y}> z7>~-!MoEEAuBsI)Pnoai{{?{ze)HI&cE@a!8vbFxvaKm({0G2k&+?fa{=$-7I$xCo z5YY48;{O0%_%3c?s?@E!RMK#ct4H=n>GmtGDG`RrNC2w9U0Oob*O9|cz10~V&R3e< z@~Z~HMR?MT3@l9{!bTkj$aSm7$;INhlnEtbkVHuvB}Ddqt5*%EK#d#Nj?_QKw7rCM zAy<`0yZsiAS^xkbEEI_#W|oMAv!SQGDCRE#?rJ$@dRYyF)~qxb%S|2m?x>mGqlX13 zzy_;A0VP~aKekH41#63DDGHYo&0O5KJt)Xcg<|S@??TK3jfeOqm273R6om_lhN9Ok z&qj>DiDspYFjcUY%utCVBZu$`#g%DmHb-;I8gu^uiSq@dHCmOoYMN}0t4H=-BKA>W z9yD;xs_W~gPQip6BU+g*+6;BxoUOEUcIi`kNHo#auNrAt5_D8_N zRQXrW;PEKHjT&dM8L9pmrHY1(){H9C0YVs8n!x=yoIX3Jl$2tL04EK_t$i91MQgt1K1mXs7~WF&>7DDvOBI;VjPwcM^s!UZtJfjZLi!MF(o1+cdk= zK`J^Rt5D{$Jq^#5X$A+Y$FZpP;PO3cIwFZVQ|(HXl4Ym>0>O$Ka_r_>BIiiz=b?gx zX=UA{;sRaQK;pKb`c(%GnBYA>gFk=-UxLx6sjVRZc@yR}H0`!^`~jh5T3Ah#`1Tre z{{WB(f)Kbh^%eCM^%eCM^%eCM^%eCM^%eCM^%eCL$Q;2h{v28n25<$A66U_5zM_{- z$B7uC{%{%4N(OFR@t~9`Z6P%5{7*VGlC1jhc=j4%LSdvCv$-Fs#)&UQy&J7dMJA@E zr}3Janp$ZM8AMI!7W4va<_G9;qfAH)9g3C(k4^^~x538G7lkBeOQ0B!9>|D6doQmy z%eAYR1%%~z3JxG3-F03of8|_3I}R;hDfh3G``5~S>*YT6@}GM7PrU^z%DV}z{{ZTT z2nULsinne#yKcU%4MtnMPm9H%Q9!~FaU4GdHXELOjmkrN$T18nYFdIO6NTf)){B$9 zPJZ>9nCw8~UDR?g@hbE7FnEq0lmLc-pmm^VsYq0nB}r0LDWgm(tbXc=qUE$(OS8a8`qv z4s<jwML4o2$K#YD5Tcr_Xc46`;)#No@wa=tL12HNS21`HF5ZE*Us_l@cRd zAk_6L5_MhEhT^Rl6oH#MuSz0R?rL-FTt(5-lc!2m)lx@B4_binqaD=Z)Z@16bI>`G73j9gSM}U-G^e{I7-o z04OGmO))rs=ENdRCM{nH{{SoDKjj&UZ8JCS{*=ZUB$p3Z14G{A+D7APFUez;m z9h?q`8dCgf=KeK#V(R%Ad?{kn$Rpg-b)`@`P&+9*DLT+pF0{mJ;1%vF@=ew968KOP z<5w5)D}m7g*)ew%+PqH>dJup#Jp<6IxW|W;vE$gGn|26EwlMG$SmRn87n4l?d(AiO0qagx2%h@=F^rrRgW<`qJ;@MMdbFQ%o+^xMn<$G^>@AK zM3Iwow}B7<@vH1!>F|trQ#-vw%6w@(zGsykF8F%Ut=}J7A8(OOXY3*6>sQ#l)8Sa~ zt^_~>!?i$_gLbqe^mo0hXbb2*{b(jJvFbJHQn?H^42U z+ItRnmC@%`8{qd*IuCN980pw@N}o+gSajE?bz=q+Q=)oQAIkv*Hz$l{)u`83ZtPU$ z0l9azLt?%NJMmWpCkB5_!2!jJmc@J$cjBiA4con_np3%P-HN};1eg4QL6v_b69~V|CE08qjt8&lZ3tBKncmvJj`Zs9e z3`bAM8v%Bb<)uc!)Baakj(>y%C3R`%gOw9hFbqobKmx!)*x-ao*He~9g*k!~lo2mK z=LIXa8Fo&Th(OITzwA&D&`wuhQi2Sv(<yVM@&1Q)uW=veJcvu3{*_{AuMnlb7~d(!^KtE%-fe_>BhLb zi?POtC>u*jvD&}yg+$q zf5u>oM-_06`r#e*FobU2finpsA{a~DYvSItu{1(4Bi4g}U@!%b>;Ys&h2Bj{1w3J@ z!@}g$H6+n-h-FjGypD3 z%A&`3*WOp&QrYhsTPpMX0ZB5By4MLXAL=I@3QK{{UJ|s~0&rI#lf)#6igV_tAFX8QdiifKF}J&quU) z1maC^rv`^_f=vS?b7>v?l9AQjUr5)|G%l{{8*enEWDac({{R4r-%c$L02~PIoB(rf zmO8ZkxDr9lXq~6J6z2Uq=qA;RyxhHi@myW6EqgJ#FVFi{tmFiGH8hI&SE5#PYY0cr z6+XbrFM-6U;Yq6T5_r%YUN0x>1B=Dxso+7X@i2JP=O!6^jxA?4u!MZ`QAjU@daVr^ zzyNeV@v5pKbfGx4b${SZsmO!5sbo#7d>1?@l(4}w-j6ESwgEl@D9mF;f&^#Y&0xgy z9&|OAa*mSjQwC?5@}`7m9@Z(&Cq=nziaZ2SDPxi+y*^b8sI_l`$Av|yz=OE|0NbGC zrE=X02L;fe3?JN}OJL0nlET4`>f!!5QawRRZ0r93y|ozn9cvwdW=jV8yR$+dmm81% z^LVTs);qDCC6g(zaDVR-0h{5usYF;CotFOX(DnZS-)ec9`4`@fg9d;3p8wh8 C;h^dO literal 0 HcmV?d00001 diff --git a/www/html/_assets/images/ferretdb.jpeg b/www/html/_assets/images/ferretdb.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2bc592361ae8d041520d5950be7708a9e7fd0130 GIT binary patch literal 3883 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 Y(koY`OYN2aT7C)xT@#&JEobEa0O05hB>(^b literal 0 HcmV?d00001 diff --git a/www/html/_assets/js/studio.js b/www/html/_assets/js/studio.js index ee7d79b..faed3e8 100644 --- a/www/html/_assets/js/studio.js +++ b/www/html/_assets/js/studio.js @@ -11,7 +11,7 @@ studio.defaults = { 'postgresql':'SELECT *\nFROM INFORMATION_SCHEMA.COLUMNS LIMIT 10', 'iceberg':'SHOW TABLES', 'mysql':'SELECT * \nFROM INFORMATION_SCHEMA.COLUMNS LIMIT 10', - 'mariadb':'SHOW TABLES' + 'mariadb':'SHOW TABLES','files':'{"query":"index > -1"}' } studio.init = function (_context){ studio._context = _context @@ -241,6 +241,10 @@ studio.frame = function (_args){ http.setData (JSON.stringify(_data)) http.post(uri,function(x){ + var _id = `.${_args.label} .control .apply` + + $(_id).empty() + $(_id).append($('')) if(x.status == 200 && x.readyState == 4){ _r = JSON.parse(x.responseText) // sessionStorage._data = x.responseText @@ -417,6 +421,7 @@ studio.frame = function (_args){ }); } + this.render = function (){ var _args = this._args @@ -435,17 +440,37 @@ studio.frame = function (_args){ read = this.read _compute = this.compute _xbutton = $('
').on('click',function (){ - var _id = '.code.'+_args.label.trim() - _query = $(_id).val() + // var _id = '.code.'+_args.label.trim() + // _query = $(_id).val() - if (_query.length != ''){ - var _data = read(_args,_query,_compute) + // if (_query.length != ''){ + // var _data = read(_args,_query,_compute) + // } + + var _child = $(`.${_args.label} .control .apply`).children()[0] + if ($(_child).attr('class').match(/play/)){ + $(`.${_args.label} .control .apply`).empty() + $(`.${_args.label} .control .apply`).append($('')) + + // + // + var _id = '.code.'+_args.label.trim() + _query = $(_id).val() + + if (_query.length != ''){ + var _data = read(_args,_query,_compute) + + + } + + }else{ + } }) - _pythonCode = $('
') + _pythonCode = $('
') _pythonCode.on('click',()=>{ diff --git a/www/html/_plugins/agent.py b/www/html/_plugins/agent.py index 61c8f7e..836f501 100644 --- a/www/html/_plugins/agent.py +++ b/www/html/_plugins/agent.py @@ -17,7 +17,7 @@ import pandas as pd from langchain_openai import AzureOpenAI, AzureChatOpenAI from langchain_ollama import OllamaEmbeddings, OllamaLLM from langchain_core.messages import HumanMessage, AIMessage -from langchain.chains import LLMChain +from langchain_classic.chains import LLMChain from langchain_core.prompts import PromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser diff --git a/www/html/_plugins/register.py b/www/html/_plugins/register.py index 541887c..ed4d83b 100644 --- a/www/html/_plugins/register.py +++ b/www/html/_plugins/register.py @@ -31,6 +31,7 @@ def get (**_args) : _table = 'NA' if not _name else _data[_key][_name] _plugins = [] if 'plugins' not in _data[_key]else _data[_key]['plugins'] _icon = f'{_context}/api/disk/read?uri=www/html/_assets/images/{_provider}.png' + _icon = f'_assets/images/{_provider}.png' _labels.append({"label":_key,"provider":_provider,'table':_table,'icon':_icon,'AI': (_provider in _CATALOGS and _HAS_LLM)}) else: continue diff --git a/www/html/_plugins/transport.py b/www/html/_plugins/transport.py index 7c68664..3b3feb5 100644 --- a/www/html/_plugins/transport.py +++ b/www/html/_plugins/transport.py @@ -47,7 +47,8 @@ def apply (**_args): _query = _request.json['query'] _qreader = transport.get.reader(label=_label) try: - if not _query.startswith("{") : + if _query.strip()[0] not in ['{','[']: + _query = _query.replace('%%','%').replace('%','%%') _data = _qreader.apply(_query) #.astype(str).to_dict(orient='split') else: _data = _qreader.read( **json.loads(_query)) diff --git a/www/html/features.html b/www/html/features.html index b8e7e73..b834046 100644 --- a/www/html/features.html +++ b/www/html/features.html @@ -1,11 +1,11 @@ - - - - - - - + + + + + + +