From f7d018a7bf6949d3e47ff2e399252ec34dcf7181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Lachowski?= Date: Tue, 15 Sep 2026 06:23:26 +0200 Subject: [PATCH] RDBTC-221 Migrate technical guides Migrating RDBTC-177 --- guides/assets/genai-attachments1.webp | Bin 0 -> 27896 bytes guides/assets/genai-attachments2.webp | Bin 0 -> 11838 bytes guides/assets/genai-attachments3.webp | Bin 0 -> 16506 bytes guides/assets/genai-attachments4.webp | Bin 0 -> 16720 bytes guides/assets/genai-attachments5.webp | Bin 0 -> 18226 bytes guides/assets/genai-attachments6.webp | Bin 0 -> 15394 bytes ...vendb-genai-potential-with-attachments.mdx | 507 +++++++++++++++++- 7 files changed, 503 insertions(+), 4 deletions(-) create mode 100644 guides/assets/genai-attachments1.webp create mode 100644 guides/assets/genai-attachments2.webp create mode 100644 guides/assets/genai-attachments3.webp create mode 100644 guides/assets/genai-attachments4.webp create mode 100644 guides/assets/genai-attachments5.webp create mode 100644 guides/assets/genai-attachments6.webp diff --git a/guides/assets/genai-attachments1.webp b/guides/assets/genai-attachments1.webp new file mode 100644 index 0000000000000000000000000000000000000000..1341c427fa5e45796d7d93e19cbfc9e924d9c94b GIT binary patch literal 27896 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 literal 0 HcmV?d00001 diff --git a/guides/assets/genai-attachments2.webp b/guides/assets/genai-attachments2.webp new file mode 100644 index 0000000000000000000000000000000000000000..4c1c952a1453774dcdec2547a2357ae1a32a006f GIT binary patch literal 11838 zcmZX(Q*b2=ur0h}+qNd2*micDiEZ0!DjkMpBZK2>{TL5LNo6#7+9+zxs9okOTIE1o8nOm?)huS5jO=UYMkXTaONBX8*)M zH&)at((@Hon{<1f^00H?)B8?y@8IZk-SSZBO!4CXz4O>53QBu|1ZmB>OwwGFR5^Uc zZ`Qejb^`W%00EwlK_CkdXp`^5;KKm)y}L6SFaQEQ7lV#Ix^7Fp*+3E12Kg``kP-^$ z%l?b}`)=LhH4hp@@)mJVl15yqh44^!2s(Pl`i#C3x)SQ~s`}n|pNSSi`VM@C`pkPL z`3Shtmkelq?z=EJ57_Vy@$dtn{|F7uwdltDqe z11~er-@O6zJu?9p&l=wY&oeVUXCxPX!2tyz|BH6AUu|IrzU_`$3r%6p(5@=$`&Rbz zSfhAzayC&V9nu=477~oL)TviwxAqt4F);j<|_ubC|6js^?R#1Nywz`Wh~gjBrvj^zrj(vsI6 z9ni0e`K=Hk8A5^A$AJ{Un3SG_iOJ^6Tax^;7Tp5xR49|+`?}pPtCX};*T$MUEYGT` zPYQwkGXFpCL_8)k~Dgy}Alt>Z#S#u6o3U9~#?|cRpnkSCw<-se&= z428pvQ=}+9Vm=o?F-GRnKm6t5o6gG*^Ofx8DSD;d+>qi)YuM!Q!$MGUxvTV}J6)TK zpP=V=NQG{18X9kFt3J<7W>oNq5{8q`FuKK}auQNaF;t3aU1 zuFA;{3Z2xwddNg2kKsZq_!--~C73kIU%Mh=V+;yS53p$R@^oM7E* zW#OPX^;PXUqE*A7Hjg!*Elv&ccq~1&%+08xbE#=dovu{EIwdv7BlySe`=_ZS7jLa0e$_)iV_-N1pIK8HIGQPv5*pA&dzG3q;|@ zCM9HT&+FjkPO8uU$Z|Hz^%|mAyLtv;V}lj{iQV-p45Zm0WabfEP%ENLX3W4=i8q0LVVHlf7Z>KpM%4) zwgzjda8Tpd@AEl5ZTcz+chVT7opRpf7hc^+0YBsFuQoTHm39U@;yLPae5BX;AWSz{ zo#yGC$(hC;j-)RrlcMcaBVs+G^)CdKFKoFmt0TOG^lMXHNhUv?H?|t97JX&pfvLpv z&1E!j(G$8qx`b&-lso}O!y*EI@3V%FEaF0=-0V^GRLHa0D`Mu_px2|xza~twj++E~ z)?4^9>yzH_sn1w~#_e`2R!I?m9fcXwY{AEj@l5StmwL2(?}13PY7PdBCRKpQ{57z+ zL&MhJlvymc0!>ES>9`g+#wdCI37~thR#k8lO^pP;FDL;<;Kxl|?I3~5OmEMOOB%i> z+7X8g6+tVuixi=Hm{PU2I0rMKXrfj7?!-`U6x?ZwgaT{5L6qN#T6T(F#_u!?zj}Dk zp>PY5^R*FUwGWn4M{}zC`$}Zeg2pRE70ZBVDw)?NKjp>X_-opf1k2NTtB>7|T}K)e z7{L4uS-)%IpkMKh*_b6g+1~Cyi(8`X%TbY$JYMqx{%^dsWL5mXu1WcSt@1zD{C{vb z5b!-u+3Nnzt&Gn(9RhMU1`~)Ygx)dx~DXv6X) z=^CGrQAX(pVUV>ejm;p#OW|PlmpmmdA}VoW2g+T%$~Sm#T(hkuE{+j9HnQ)T?Q-tv z%V*M>Hr2o6c3$Q^K;_>WP2zXm_>n@h>Apo!8^-{Dsfz7eUI?41;ZT@!j7CTXE0nXr z*uB@W4wJ(tBm$frq$_6$O8LlZnaC`u2wUn8zB(`YUDUW189@l|9uDE*5W(Hd)VPNR&4j7o3B?h(o`3o-^$h zG1c2+64G}bssU`c#STUHJ}qkxj?pI?W{Md$ck0n%ODf;FzP95eJVi*&$_h?(B}Z0d z(1+8-v(s5-KO0wn?PKUI>AtWijlaXJUaYRGSK%>92B;&*{TRgZR{C_`t()~xgEqP- z7JSm&H}@&A#xU(8Tb%+rl_+qUI86A>I^?IaR8kcVw&Xj~N@Mphdlrm1gHdzqp`Eq*`4qaa^z} zk&MJwvz4&5#;TvuP^o8(uKC`&X#b0w)xa7bGF7DpL!@n*QRTqkk@CyYD>3-Mxc~jv z4NPlfRNQIw&-H!aaj5&#HADZ)jtdHi(yU7l8xCP??zUc>kVyrvDd1$7JRZ@>V=Vg) zjzTHTrE1b_?fUj7za}jkn*swtQ0BF=l;w1fA%3yZ?I=B1NCeEUtQUxR4AJ8~On2F7 zbTV4a4(~p{5uL|OA#GW`^Z{dR4P(}v%C2(b1uA%AsQKrQ^mKsi`op+g8EK(E^A zKD{~)*MF1^cZfbSUlMUh=(4MuPrr10poMVQIVa8rlO!35jx1LTT9#O(?6j-|XVGyY z|2fzern=_5f(%nTGWsW-!vD&=4IKz`YwuhDK}L=KQ0x~k(QA%cXYm#+4O1D1-ayguKywgE!6f~P6LSrc3ZfGp-q;>l<5oA3{O`cas4Pws<7`aEw64d{E z%=PZ2uy#UW^4Nk4-p17Ab|pVC62mhUCecx$;gXRDnm-qZSim~~N*$X+^03!OyeyrCJ@F&Y%A4P!Lwd;eqSTs= zvp!KD_e1y8N=_qh{EqU-*oxb+8{!6f9-p?=G+91%!CWmVZ&#{Z7s})bB|yqDGdjUO z2{>7jW(i4wLyIcfpn?i>b)&HBIo`fNE0?W8JLsv7NI?8*=P$j06itS1I zq+iHtxCzRgNPLc7vLitl*QKHq2YP;U27V;Php8w+p;@|WK7nHNUpDvOBVaFv-oEFH zj@Gib>xM7Q#O&5wjT|6{Dmj!XR>dk~kbnZ}h#f@(bct9TVK!CFO5&79gZKhF@q8GZ ztjYzcYcT8)*moAd7$pG@JuAr0x#pb?OaGo?#p-_U?sE#L8IKT49D*Ya&UkVkv%2WI z7!iZaoROdyczF4tcz2Uj@qOYK?<&kPp_RX1%jth1l7Z@ao~qGK$QEGpmW&^kqUQQR zZykge!2E_^IamuKI=k3_yuuqRp~+)*$(fs|CFkpUngvr8nDZRugjC4ln^ts!;q5of zt#e1m!{}2BaXD}OX|0JUbSC5*$3(9IPHn_JI4VfJgZmyWSP?YYA9)sM%w7VNjrs0) z9!ARrD>2|9C;8v`>qYK9BTsOR{)euOu{g|g>p8JLad~yjTK_WGIW-hfMAH>EHZz9C ztkvll1#?ajR@x4SJ?D8#32F0PD0v9jtxk@7=Ub=ok|_3vjFcNQ=KGCI_6D~E-?I&TF8HXb$-@}f74<@~C z*ySfpAhI2oPBHmN3}4Iig@;UiED3X=% zQNa*3u{Ofj1O2ABtv{U^}7tJC=d_PxZz(e04_i{9lT(sz(5)% z5CDHr7YPwA%q7VqmKQ(W-;jX%y8a1m;I||@QmfIaXS17Yt6MB<3jjzqB7h7_??YYJ zh!YqxzqyZzBAF{0;;>!d=+oa_mlDJ4k?`?mooK5gK=0u?2J4KSG8$0u)HMzgGa3mS zzpdh~BlTLsNjIosEL4)_q=eUgmcpMwVs=GGhVf!F2`Bx@V|PUe@_e2P70rQLCvD|h z%sE&1!d>onPCADdc7iJ$3C_>YpJhvx=?yTOf_m#%7-7DJMzz;jJN+vq#|pjC>2 zIA9cyh{M5CS8E>ZD?LZhD#8&JqAn3a3mocz3WMjv{Y}%}*tH6TKD)l<9UiflEfK~A zH5$&S53rfRT_mjV=d&(&!rj2;be;)lW-uZqT~frae2-d9XHEvrD!5B^CTXJ&%FvYHB1jKVuFXVdCE%h>!WW>IU_ zo{SZzq&cV#FZX2v#Y8AcN}Jxlk2A11HaoGLa4W!zAizXFg^PSDB$>tX`2OnMFz(Yc zT>YI_b^KI20yYcQkn#H;uU|)9#BX)P#vOG2dX=X)%1|SMK8%=BR*t(^JYrr*#;$A; z)2@8}IC2m>u==?<9P#G>rViw1FlsiTM)FHe{(63GFJjxWdT$Cq2b+`m6eL%7T5M%Lb|0 z(74-iqmL3~r*^WMOl<#RAUS=Uk3p$!k{GR~qF%4z9U}+xEwIlOwlF$9yoL<-2g1Qj zWk2O_-6!jl&35n5+d=xW4TbTi!-N~m#-;l6)sbbfw!L6wHp^+SNYebZ^0zc0D`o*+ zv-2brm5Y8w*J2^Yu-imD!X%5K(4MEA0KmEggFC6?1o^ z5NlxI#F{JQ63o2IMQnf_QEb+>dk&O_2I(SE52&Z}Kh5BmRL(d)ffd$eKW%pB;pUT{7$KlyTd>^ib@8Y2o@UA7&_ zAy4+DDiaZQL)xw@b9MW`xGyPn?enjWVxdM?v%oSnbG6hg`iazqbTBhxnjkOTkC;jG zF#ajbW**L%Efjn73(~=`8|UBAnDfFk!}+g)2O7Vm0a2Of%<U&(?c@UUzVj^cu-UCjKe5>}H3Z?(;7 zy)We8X;dkpK>1?pHdL#kvQ&d`T2g7C!#w8X7q1b+c=3Hp*DXg+l^Bn&oy_DYri6(2 z{2_apMZni$)4=9>rNz%S(vRn)uO!s@=46@$s3cO?!Exriti;U8jn?_-8Eh3M`vBZO zn??0PfJ4&fU_x-A_co#9(?kQ~`6CsqH&2c9A#k?heefGp*u@TSfgZ+@gdvWF7P;^e z&i>aX=z|!@o!?ct&hfG~5=cW(>arB;h$=yxRVr%c&c(TwSq@@tsjV;=6e9wEtrBbW zNu9&1?~o#olhK$roe4bnEzX)sCafR6Mhgxh2nece;UlM(Iqr2Va0XB9iW<_k8ADJQ zcz1(D4LN=fOsB^oH!Pc~76=yX$U=FCN70;Nx2%dNBeh*Biw2=(-KxHn9pwHlm}%Xl z^%^G7JJ}E3i+0C(U~Cul$42pv=C1F%+Niis zD7oSIWw^!H`lK|A2{(&yYH;gv0U1r!^ra%}@nj&n05mXXA(P+cZRBI-F*xy(_=r&y|YYdg;|E3So0KA-zRWq?g^8%txTXI zoZw&cU2*pT?k4VHjIZyi3A&oj%beUD=J_69ss)}n1sTk%Tcl?c^Hc7`? z&UbwnsWQ?nBw>f=RteqZVnSHSgc&D}b*WzGxnT5|FGsYDLZwl*u$vl6Mt*wl zJzURC*8FjQ*}rEhaIl0bzMmj#W21sY`vYw+OC7VMj+2*oq7>i$zyqQ5%!P zj+2LV4G# z6d}D;mv|_Tx@RIPjsz_iI6c|Ecia z-s*GH4uxJV{9QlZ&+WMTzqrD(EYMD}ed65!*ih#^j4kCnpmHL1O^iiY94VQlhxiGR&z z5IV{OL#*>+#0NV2=B9{3^V}{pFP!9E3}i!s5)}*OyQrwwkAj{esDAnZ=8?qMQ(toM zQ!E^?PTSiB7r*$|JUF$=1a`rXZ*IxXNE@on`ZJIztxW|+Cbh^5*DD^E*UhY^Pt{(% zw*3LC7=tH_nd9DW2>BjYL93zkM6 zx`Hkims-G8cwaV-O+w^hq~EM%q1598R+e(8(U^jadOiu%u#i)k9^G-qh0fJBB=nIG zGnv)E1gr3_~siK~ngB^kyX zlJie^;QmoQNHK7K;Vq8^(x@09SH%^F%bYJ!#w;d9y~m69of(ch`yeOc~4 zzzsGb|B~>MdY#ciWOF45ZJOrbHW+EOf1G_R^+tORW*WrP+2NiWqdP>KWh5Und*IfT zB|%AmXA+H^glWnBSR0*!t~fB(C0DG$304upy!M_1AY6NnG^%RvE%C?ZmWIbDIFZ0W zq$X{k`iA}O4ITH&u)Rxks7g|+DeI?NuuwV^r|Fo#O=r$YcnEhwWk|CG84?J4h@hZT zBrxE-37XV_d!3hX#4}?*9+0`;oH`Co1aQ$vXhkf(i;<>m!S)uXY7|OYIshKUC7SQW z^9z`Fm^_%k$r(>4u2?i~JLH|qI}SWWqZYTkbPqC?_8Dxnw>8JVyI27ywzSkuLqJgi z7-Ic|HcsmM%0RO;7E;1jqT%H3rQlfcPBBYd+k#S*Ub9n?^_{wzs)J;jf=_Tz}sCk;pp|*X^dpHF6`Mg$&N#=`jB9@*YijXHeKq&n093Suw$-Wju~Bi22lDsD##O>4s%8t@7Q8R}HYAtIKn2PfYT~D}_%} zO{exEewVy%h3s)T;o_%q57RR-I6L+t7`ihrL(h$|h8<;kh)k(#HOAXVkU1r zK19P)yWJq0!X&TB<840$?^jb9@%#bi5 z+#s_mZ%+(l$;Pr~d`%zMxymVz;koYHd%4v6NZ@NKPLV|Iw+19PHuEhfDSwVGOYO=i zwoHB>|GlH9qLZ5W+l6q(L^>)K#g>S)*NTo#N=Z-Z2{>z$8J6>5>9a$rx;Fn8<;kji z8!MHQHB3)L9xRC<;;oL|1LA#L;4J#_SFk|^8-IYEAGZnkb>Y19Fr+Te4_)RMdYD*R zn0f&|s*(}NwlS6``5saxpdbQesxRGuMx~|$3>OkoD^+%rMBQ3Hzt1qO1`(3 zHL&~0Lei6K=-fc;&hviBOMH>%$W_eKHj7pB3_P>-HDyy%gdOMM**!kmEUF>doB$pl z`y|#rCeBxN$EHN1#&daKsRos}?+V#7f3o{<_wQ~@?~OFHvjVPDOC*PGs!M*75I=(K zo+G|$#%fQ~$ltQ0WU8q))$I>no;f*^XIvui(@!Vkzi~k=$mGKsWNasZ|a9!b&Wjz3sdGCtJtZ(8T20+xx<_n9^1u2NQgV z195bAl_B>F_AFyk?Gh z_n9H_+DHReA1_}tNFcruja4mq{=l^v41=POcMeV71z6_z0uB<1cb~vCY4j+gMggf; zXb>_lWD9s&B53?F38E;N*oX{6bA&Op&E{l6$bTYM3WA4HsWx*6Xgi}iW=-_{%7eSv z(3rpT?jCKg$65h)7{9Os&NxNHN1-R`7?dg~p$2C(y5tG&IxmRsJG?CZO#%c1=(t0j zk$;)`KGzrvmENX3;&S4L$2`B!+Rl;$7Y=NJNd;0?3kFfrB0jio0;=w&g~`p+wtydA zd9(#mP{VFDFB4qmUh%&@a^U@!S4NU`diP>FfF!zp9f#FRD8QjhCC*5o4u(ZCs5iBSA;Owt%NbP>N9^b}W($CtP zmn_PE=s-g?kQv{E8aEknZ4hr`Ha`+ZzZ>G+6@*q{d=WtzCuw*+Ml$(lz9`dw9CC4( zgiftedUeMGPN#C}!TxcdCfmNg{hO-Id4DCQv~%}W zeT3&4?6M2rC9wS2DtIzLZLQs^Q zL`#O}h)mYA#RH6yVI@OR(8Ucu;zPwwv_GB-{UrD)Naa4FKEsQK1-*(kgsC!l<^~Jz zA6eqChJ{KneMGpn=26#mL|A7oOgpJh1Sg+#F$SIIm+p{sf3bK19^EXL56^xyhPJ0n z6M;sUWD|W}0PyKDZt2U%8NlML!;tyC>?VTfk8510^`%V3@3(>B@A%;l{Z6uKcd25;2AI z%CZ!*?v@u$&UbMxVodGZZf2EIdB?*sGR6`bj7Ja-0V}w_F>R#u5~>e4E6UVg5iAeE z{H;?$@-D6{g~o!zag*B5MSI2XJEG*Y>b&=kRSrECn24DstM!O1qnRmJbBkF0&$A2x z)Pk1p1a*{iNAuqo_eWn}c&T(sGq(0$={DqhjKKquwc+);KX~4K{IYxkYLGZC`v_LD z4xPY+ZAip>*MZoyn)Cx+ACeD#m3GU(3Ii1pVM&Ax42sHnGVDoDw=@^8XX023cA5zM zCLDBDj+Nhn)>AUmAd9q0+F_7i{Tw}1_-(r5+-&;DSbu6R-SK9POKbn~zrgk)&|P!D zPb`}LNZs)90e^gLem7gDpi@Sj*ry>_l#r3EJ=DzhEOYa|gD5Tuk$jYYlM>W9QHg#) z-o8xX=5S&DHogbNnAam_-lF8ZMv(|E0n{URwG~a+^VrWlb<8`qa2{B}-hz}gG*%nK zaxZtf+%yu_pl(k-Yxrj}7_Mw#CdkVMo&Yx32SAI%3LfW`lw>nV; z{+iNjeqCGRFUknI=Bk_`Jf?^7yU*1EU+#`#@gWD)2KfWJAvl1+Z47xbuT@|^3`Yfe z2uE-#$4eob-zbF70LtlaS_UtQ>8;3xF^lleZ-lhVw!Mm0n~y=7Q(F3~Te9O#qruuC z`AxwIxcf`P{PzAl*^U5QS1u73%3RPtT&}6l_^xiubKt>S+FVjj*M|=++ z*i=XwLjeVct7A4iMNQ$(lbtX&X?6e&TlkpuQv!kThinkO2_N!&q5x0DpdYcd z{Bcd&vv$?a8Cr34kQ3c%cFj7dyDkP!F_c8p8LR^>sjN~~uH2#XZMv%dTk5k~$D&SW$TxEXL<5Tg(xWFZP4ABhk101{r?Dawdep}}1OC*p* zFUE^vzVIs)8Lq`O+^598!QKr7NyQP5zCGFWYp~}Fe=koqMqx>IFfK*!9HSs5TUj_g zqr0n7xso8lMYPc_blykih<(s~*L4If+4XuJz9!sKOd-53zOL}V1uH-ay=c=0cm|$^ zuMOu8CiO>n3&#ho@}ec_@s5y6ws|RsD?_=wT;I^I`rd_|_}mCSn3!=@Gb~$c7b9OK z`#l)iik(4c>EivV8HnT`(j>Uh(^5}D$>hgOu6M1*CD~NZ<(0gu&>&Um@<2rj$}pUX zBg*esnQg|G^vju&crO9Hyug`zotw8jdSNzupT$hwD%Q&~m2YyKtqId+{!?YUW~9vy zKDg>-gSOYy#OX8HTD-+2fI}V}a~C5zpD7Auj*Dv=fV==Z3~8TDY{lbLd4paVhCDOe zCavJS<7jP4@cW*$j^?qxU_Z`^+c`*DFIws9Q8Vu^(?6GM(yPO;Ebm|^fYpS(=C%Dr z&+XB$9yX+$E_<)*H)^HQV2C|kKZwkx|BSp``35O_=sk%|=Ur@&Ca)~+JZeL?(qTWK zC=a0JFTg3{{<&UmGdaf%biYCbO8RG3ZDZ2>mt>+Y)@jM0=eor7R++M(A0-$MOsYOMiTfXZt+N+l z37e6Xnk;hUEGyYSPxdkoN-Enxi$Y{X??<@pa^1mHQ4AljH7SfO%6abF6ZS6K5MRcj z66vuIWD+=;#kn0E9Xt+Nf{@n&?l$aK7UA8aH^;r$rC+G1>xk2<8MGtCnO(J<(>dn5 z;eFB)6R;NHwormTgC{K{Xb8YY^zAQn7tXb6*m$lJ3%mgp8)Y{8=D=r>bonoq;ofbs zTzuCqAHH7RP)W{&m#hGlPB&$gAF92i9*19p597-!PdnEKd`RQBP+3Bx@!L}0^;)Eg zzl+wAa1k6SH+Fb$DP9skM!ydI?*&cdDEx;6NgZL7<+tuEWPZQHhOSC?&d*|yCtTibKLnb~{i?(UC`AIV6abDr}= zMn)=1h>AK2003$tKjl^BIS5SuF4u7ZXGecK4a{b2xMS4*UN8 z3hQ%ws_+fm@eSfcSEU|yGmty2YeCJuq?c#sGoxI6?Y}`dn)*kDveAoCc z`nf##-Rh-$J%3(2V|H}l*4yZsBlMXbbKKCjP%wiBBQ89Sl=@N9;abOp*!EmE2S<^B;sZ!^{Ar*#zE zX3bf5#VS?F!C^K8!G>2_;UWeB`;b-%g$P@GjM}0QadQ)XE*xGIY8b)%Mc+AuoJc{9)QMn zvjmwE=}l}ENHax<#W%R7HsEV$IJzGV_{O>j|LFii`9B}wC13tB^EeELOhumuZzIv< zj9Tp`CR)f(Tmbz7Eqk|RluFc>hzcUrd$Qn27>!iEd20voTY$@PoCqv9rj>UuI zq}ZkwX=OGkqBCDoEX7Gb8F%%+p&^h|Vn0FWelWX()nqIX<3tMLLSI_(K7k35Wl`=C zl}B^`*w?4AD|N70DL-kUq(zu5aX9>FEehe{KFJr4@k~5F4_;lU4IoOicAPf9?wTy#M&~>LKz`X$^Q| zht5Ao?rzWR1*e7EA4xtyxqX80Fs{Aho9U5>pRa=6{ zudKj_#Kp`R%1RGhP5KKuPEG)OHIL-~j1h`oBiEuWpTyel+}$HJ z8IfWJvK)GY1ilAFKrw2KTgiR*wlBCejlTZQsB zHrf5dMP%ggtgLcE`2zCafh$?US-@~0cxO5kGX9_u>N^*8W{7;b|9c3tV#8h7sNLsB=uI!1ma z#E^>9X)x_2ERodZQxmPB?Wy_Yzth0KIWCBz)Q>iK($B8{e}Vb`1fF~oNxfwa#L_vQ zz>5S8Qf;~NPw}^|#1Ut?h$Y2$6=h{y#1MP2 z8@d}DwMn5QUX#V-P0_^kQWRJz1$>T%lALTOgbau4|MGwFh*h5wkT(!Dn1GLYHq4wby~Uchl)b%#9>#>G|s za4m==en<;Rpr7NmGE%K<*a!vM$L8>gqjku>gV;T1ni;UF?4Wm>^|4Qo7VJV<*?Gu^ zz4ds`daahmVFXkpVvkEDqEXY9ZB<>6Y`BJ7pTVshR|Icl)d}5qYbl>FQydq~s1izy z>wg~lrH^0pAA%_h?`x_XPBPI2!4X5Mk#YG>&*kKg`s$I5{E_v%fo1B5sv`Hmh`&3u z=D#DJX^@a-7(At#l<9cI$f(g8Rmr`Yxt+34U{J~o$f@__-b0 zIDC{tD@{IT&wMhkZN8O1U+;Tgpz%6ZH%X?E$l+v%q#nie0dypgBAt{jkjaqgpYMKm zl2OZP$yXm#Y6$wCG0*c7)57a0_AJ;+;l|^?=b2%P#&(xt-^0rle&&ya$Pm^XIxQBY z)4E_l+}x=go7XOCE|1s^P-zhn*us|&&4agQktB# zPCp>ol`aE;foAQQ<%&gHHnqmucOu)=t^gyTZs!~+2b6n`283%9evqvJ&DPbPZS=Qx zOJxmgSF;}MXMeb)ULdmk#7lI|4mK&6_r4~dqUQ$P%*X8W{_PD&HFDR~l zNMy$NXEYog`#A}n$_bmO@m%L(bf}NQR;2>~DCX;tg8eMjF6gs13Ablu`8$-jsQ9La zYu0;gfzMg{^4DwfY&3(eLfcNM;EaqiM3mImjc4jf^k;85KXFSmRPPVU&kMh9t zGb8N#>@UuCUfi;|RM!4ri`rRxu5)C_)@nx)_uf&~Dg(gds_Q}ejQs&180W;rVnE$L z{8u9#1%`@tlqwW^+14OR?Sq7Zn2${4$R!iV?g~up=FL}e@$Em>Zh2 zG;LXWpnN|(aU1EJj~q!7UnyqbVKG2a6Bnxgqo`=Kf%c`~7?M0YE=Q?$OfWW`71(31 zBx%K22HWJ6z0wT|>6gNvd4@XIfFW0!-KW%7i8T*UGm4WtbCr&qBwMO@jF7U|P`66- z!65~^%i14zC5$~n8Ly$v-t~JTiKBugOx|#3E8V%EZ*hyG+)hs>bsXb@f!i>80#vI% z7sweN#}M{?R1@$X2DkV>Qc7co`EYhF+2#j&_onx+CZxf`-O$?5RyCrV?{0|@_Ee>I z&8b@4Q4zt>E&u=q-D(0py3A^j6BO3p7hE!Y=~qVl&= zT0|JInh|j6r7T>X(`Lv!$DoSYuyLuBbL}LyPoAD28CkrCXFBidB2D!Qn4UF*P9mqx zN9PzcB*9(KABq=V(e)jb%4Hji5++XtV_HY=t2_A8T>t9Py-6*V=pa9ejn5;21Zk=EF1zyVN9NtD>v?k+KJzDd`=?tf5CPOLlRbaS{6PixF&(0*E&eM;JkN{4c-WXT;}YG!qm!12KSB_9MYm+#=-r5pyfH9S1>15CjPiEq5 z;B%_Nr?#IsP#<4rv&xMyho{+@k@AdrRXctcW6i@zcd9oC=I48UNjtT?o)M|5@(0S9 z!+MSkN=aq(rQ;K=xdH$HFglF^se0HHf#LY6MBVGiUM^v(xkA zIWoip{KU{-oAAWH@Py$cNw`)voCN*(ReWSE_JomnDnRpaajjDgecHB96;n|jdb}iN+uQU7~hv62jzE9jCVEG zr(~x~8J7upK&P+V=X5jU2%G~A+Dw9pVfv8++IIEJiU+dg)yrrMPD88v4$TJc_m@xr z6i0M6Y&{)aCrXam?o3v1x$>1vPG6j~k8akZCM_Q<5e+u*rtW*_dqtrrROsjEc!Am^ zWW3YS9aDt+6NmY1LD{$uua=ekp`sO6sw2JiK2arNVhOAn5edvPy@kxMH{T}pmOPV4 zMawTtme4wWi!U;q-@I;bI3GdGKVnMax7{?zx+?)fJmp4ZiynK?1FXfs<3#1LN|$Yz z5w6JbmZu zk!)_gxI*C0wWF?cw9j|JI+>HKdy)D+M&B8cU?&*F5F4$8>q2OTE)2}q1z~&ieVS|7 z9yss`e_Z||$Fj$DO30SqmlLonCAB>O9h>OusH(Zp>aoQ$CBswLai7XWfn_(F20J=D z&$B>)%7B{>VU(Uli0Mq!rbOoB;*2oJxX~}?)%g_NqeQ!M4(9sY>_E*F9Fos7$-q|u zYNlvAYG!HYXuM!}LSIC}1(Ka;zv$@v9uvrwBEX`V{2|i9dj^oX&Wk4_rvb4yy}m%u zdAXJ(Z~jo@E#!otn#L!KH06+65aw^*Ql=tu_}xCM%YuVdO*suajuM2binpR;mHsQ~ z{Sjc><>UJ`S{kx6w-A<`b}4xQF;ilvV$pP@RrS&3fFVe@V5>hGI!S&>v4U3DZ;*9n zdnC<`bN;#cxVVOvsjwl|mlYN?_o0?J4%pcP!23l+XP=up048>)Y5`O#q)+$gX(TGw zZ_pp$&oy@k5`B@QfBTYav$qHQ|LAmsoxy(5nj#E3`2E>9epPJ6-)pD;M$#~@$(7Dt zx|~ICA4cp)A456!4WI1&#V979+t|=I`kmyup`~0S^;q!ae}H$TPI16rrn8g1T=mUK z-I#SO9u^w&&}8Kaxt@>wc)n>Sf4`mskg!J0*UK6Vx25~0YDvlTNATiacSTXK z*D!|ZV#x~z)tgbE>Ubph6m0qGbGueh&YHsI>je6HhxP_Rnc{3_^fp#jabjNF-9B=7h;j z1$L+KmF7+Lj5$;7D}T6XJ9jkV;ReGx3@1Kg%s;gQse?eQ zZkl6*BSz2;`1|ENhSbOhTYFnJy{(syFD3EP&TVklre9#4t7rjYUS3vw zl;DWk-E3g~vF$J7$%$6tUY>NVCd%sxA+ibkSK;sj2$0rOPfS4gA>tah@na(FD9hw7 z3p#Ad%{pir->_~~!iVSL=jHkQVb|L3^wd(JcNTXkNF7qN?`7A~#cE1+Q2f2Z;8|?1 z+s(39TBFWa*K?&J95Fs+8Cb<$K%~TU%lt62U7g9}S%bb~q)f)U01)Qs9vF`~hg^ai zZ$g|93URxsX^dD>Iaw6*`7-aH6^rAxo2$z|ed-l0GEURg7&&-soj*O@l#K{_H=~{h zFw_iqr|5+vdGBx#HpcNDA+#jcUDZS_K-OC40Q%_DejNVk@wR%huME~q;!8%(=QReur3Fn!(g z{ndT7A;w|zp&q~(RR)cVUciXPf?LO+Q|@C&;_zM8J=Jn_RBcK@tx5zp>4K1SNT%!8 zf;~L02fEf^v|9@TI#2e)Q|{M(M9kHk!NHPfU`*22E(T#B0d$=^5-kF7M}|JG$Lq^tn~cdb+U!H_@4Ur%pQU?Zeg zKJGZNV3@J|;><3gMx%gq1TDWtBhcJ3jH3^FQh;*93yDX%qHJrBk}YV}C(0{Vh*1p0 zZ)>h-ohm&9S}lN3|7ZM|>YMdfrDl|7B40?@ljB@5Qgpa?foK=ihe4-vaK;;gJ}jzF$ScMcCW)qaz|Z{0jVDdAnTY zVV}AvCJ(0@G{#09K^$g*ANl2Q&m$a6D;|I0KE=|XySr250)N|fxAaBJ9=MjK?hxtE z@(*5G8SxKjJS#IH!Wso{=0+1lf;Q!88Q+&(Kk-=Tlx1kaLMroOuNQ97-0e zA--kbtwJ)dCCDxyaqpt&+08ksiS>jiAJEb*N(@A`WA$TRV*jluyYVX%Jgiu^-H!;< zzIZoTIHz+kurs+BMfGbu;RKXy9%3_6(^r5jyG_!wCvyW)mJebAew8?ef~tw}6kyO6 zTKgRu+4px!C|7#dUgT$1S7JSTR4^^iPn}B}!_NKb6=N!_-k*)77WkA^YDB~Q^m>5} zkOZk>G*z`4t{=;+d~aJBSqZBoN?wC^{)A>rba&64ytNroQ!?E>=&7b~ZR7 zYgh+ea%ZC0=lg>hvVJ?wU5!D0&ZOo5oC0!+W&h0t^9stb&J4E2tVg@R2_vdfybOzr z@$(GL+q}0~BV3f0peJ4GGMZpwwVE1QCa&FJ(w z8qR@7y#O*VPQx`lT95L~o=6KRjAEf zs&dO75GJbi!zmdfEFxqxc(^?i2Pa|EWpJkhc;a6PnM41Vl7NOth2laKkxG}Teoa7i zIy@zZfgOZA$M~P!)e4p~g}6h?HamzU^-FppemVQ0JwgN=@zf_#DxY(^Yq%h|Wg?ETFTD3f7d{#`!zj zS(>T?5hEz!2wc;ZXxL!mx#2kR%*(_MA!Fuj+wY`GiqD(^ojJs{k3!#^OVz7KeKs!D!e!S-8rISIddt&_3g&w93b;yXV`@IorCNNr0xR(EXK!3S?}Y3xoUE6S z$BMt|`Z$D?X_{uLugC`0*DeoD;XQi+4rUxBA1t~=TmlK9E#3zz%^$;+zrQL@1<79N zO~4yi`sS(*3m5DPp zY6I$-DbOno8JAOo$^4M8(nZ+lYcvu;wF`rUY;u<8YSr^h!_avObPQybc$4yiVU7{= zf6v|%b%YymI}Xl;oo%1&^&g-LBfVJBan1CcaXpz#HYOx8?X-p(T)Uo;;EUX^A3`yH zuOVmmQ~*A8_ymF;$_~+GRztM^cA+()?X9?@jHsiz`v|gY$=}HL^gFkyHu!Q+`Q^%p z0JVN=FKB&C2pyr};~w;#z3HR(+OmeAc*Fz!0gUA9!(!sh?j~NxNxTdl50jMoAh}RX z$PbT>gGQUaYS}dU$ksG5EyRi5*UHQR;R&ioiygFA51a9TQ!=;d=ZR(N70V%z*M+c) z<*VaXJY(L=(I|Bz-a^i4{!xv-q24D@11_@|rSz>E6n+!<8xH;t68-=HINUZH7r7ALg0QHnJ}5Xyx_mo{B}!b;?nV+5wgp&C>gZXnV=G)xIM6VvhsOY5?(cZ z)vf=;?zY!^)|Wm{tNhmdL2slkl~qX!6JkF)KE?YaFO!FC-~B63P9iQH%_aHW^0MsP^dT?+roZ(S!z=D|_VhFQns>#r&Q3)&sxY zu$*W1>2!qSeh`$`t15HoDU;6pV^d-glD4j{ujPi9Y|}pxkdIGf-II^%-?|8<*X#Us z9Uj>uJd&nR6d9wanpjtZ)!tS3-m8m+S%j_zLb%u*w{>g~EnTe8)vA#NV`>UjRNgoD`dBU8JBCy#rc43=BSCAuZwde# zA5m8nWcaVFJM|6wmJW~uj=fUSzYdO_#C?2Elatbs!B>isyn|=)8L3K4cdv`BejVOW zwgG?`TCN9r%J-kY6nc)t#IGl4kF;oGuqn5Uj^cO&eyW?O_Pipau3xy634nD(;g1^I z;5?g00#sn2p7pHZ#%l`A-k1>5obpzk8UPEz-v;y9i)pt!?9AFE%Jg+OTPvuJ(5LB_ zrLBKD1^jvpdoK5G3rVN$2b$(2-?)?aBKuVn56#aqpd&yNu3Rtt=z=axeYrRv$>M}m zte%LzyTF0H{L0`&+7^GtpJ;jylYMSho#Kf1Xz~rIXH`0*wiaP1VBBd>yMwT&9diLV z@0MJ}TaYCjugoT(2H<;XnzMz)yy3lE?R(d1`DG_1xcr&6BtF@gh3CY1nX-GbbC7US zU$Og-H}0Ue0QxHTXgJe#8nI|^c?V3g`TR34AU)3{QUoS!&12o+!d@s2_nDSQr5ox^KPoYLE=#v3o(BQzd{z1<8MqV>gEht~fg18c` zS211bXC2@HIshZ{&;BA>lMx1@d{}hIF}%J3G<_h+_{WScM`vPi+>VRn(_9${cI&Y; z=#T~<1_@Ym5{l~$U|8z!TeB(X`G~Dd>RCN81QG7SS?Mpb3sjy2UAt}y1v<}IpxF6t zQgs`8929UD5n;G5BqPV!)U)=@PIB&+!2{mT!3B_jT@>5o9d7ii$~aQEUgpI&iijjbCe+Y;X)?VA+{N zvn^m%uWRF;3p>-+pqDAFv*a)?Pqd>E`7@HM`GdGZJjT!9G9xT^Dga|UU>0n0 z#KioRB|HdcgX2@j{&xex8|xn@4urgV0~;Gfw0KUTJy6^|^9)~2M>Rhq(bMk%6Vmx9 zmar*t;>eb>Dulov-RxQ~y5K10VuI9z=*QyGDZr%~ZKk!VMs`{g8v#RWU&@ulp_m8U z1A_sRwKq38xcdP;)6mSS#ScxnJJTCHXOfA&M8SLqn4!$rqEmyT=Y?|Mvq+&#TzR?P zgtBl{!W1Tpm>3{_N@kSTtcQ&5&l5Cj8*xB18pz0zTr?ftHG^F5S=LsKJ7Jb50DB_; zIW(vr3V4B=**1k%7-62-+%AZh9Fa>MZQT@fjmU_@#8Q4v;r53sac$C$;B7#}W>~!U z8xWP~r}VZzJSe?as=f_WI#aiYTL&UPToa+|F_c5gXGRnu;^a#^*`7#)>Z;I{-V|c* z#mOQWpDK^*sHA}ya7DG=)a3Wy-?npF6*gc;+R5d*07Vzlj^Yjqs{1MHX78 zP&*NuiqwJM#&sv9eObf5RO#-u#Ac@5&%+yZw`qe1-0hSUW?lavT0{`u*+%#ib`JU2 zJ*7H3bd?+b?3hW`CiQ9f;u&tZ?{|t852p@sN&;u7u32XT+r^ddWji0t;5lJceWFNS z@1ML2C6seD_fT0l{j_se&nXP?7kPW-GiAmhWso9Tjbr|ak(OD@d%-Ju5B1M@T@|c{S5ln_%_W-w-9a8ZMwdT*Emx~7e>HrU1-$)Y9Mk&+FJy%Y`GXy! z{8x$@Zw*+#O*I2=-zX95ld9{ zdPC2zzl{C*UMl~cv+6Oq2Qp>bPprJKIMrX zX1oLHeQmTj$N#Sbh>!ia_*0tX|6cT;1!Kk?_L#t0002aVqwGh*Ht@aXfT$7mkt|`+ z`+-#L3++SX(P}9JD8t>XI|lp1=;|5`}Xq!_G-PDAcG zPJMs2l=%EncmEhJvF2r8MiZ*(y?foJh^LeTCYNDVd(=RXN%&}M+z`4>sS1I*d3xl> z+mGb$*TOW3`)ygYlOu&?7IE$z(CX~g?s>#uI)j4X-jIDRAGVH>>i%fFPuCM#zl=jeWPeAQMcP_1ziLqHGV zhHk0eqZf_DE7ivtF9y_&6plg7u|dlgv8cWcZLGA^ayxcO+GO>~k#}?vL4!Z#atA&{ zz@?SQ4Wn2OxM5vn3y9-)X2u{L*&r^DSc%b3-erdn6wkG!zCGK8xH32_K<0R;-z*E7 z>kZ;{{icMuu@;i2(bZ~llb8ZArkcnc>H_L5reXpi>Gx$gJ+}=jQi^mr5m>M^q-`cX zsja1V60mtlmjp6AGH#1|GhLfVv2^XqA>XNsr#AekT8mw@-D&{ub2i?C;9n|_tkgyr ziS!S8-CH?MtuEFNGLg-G#5Yihz9^&>COyG{moOQNkPROd9C-pi>skS!7RtMnBNGsy z0q1TNbz_sfjo{|-JC_Y*G2)#AikCoB!W*TheLx~Rx`YH%&U?ymqhe9S{j~co7&_Cj zI+Jn`HgUSkNu99!9Df^T4zn_0Ce7f${ZL|dFt!C=KXLIi*Sc4a?Gcn#J=AQX?d7H( zx9M!3w=7_MVQ)5N)%oW7;uXq+=iO6p;5{N)(@^{$>0HKi)=;0ME8ntRjt~$cc1oEgCc@4acrS$U?snK&J?~?g1 zvd*VBrk%6aJDH+cd)p{tRqQVY)R#ENGz5uvN7z!HVS_+BELP`Ec+Im=OsVj~9qdw% zGji>H8=^_b6Rr4-n7mFgFGJ8m0ssS3H&4*YOqjw>0=`A~H=t@4I8@EQe-5JgvVD(2 z>sCLiQMrk(7{}d_GI2XD3M+uQjPxt>mMN8@J}AjUAYvMrm^7sx+$_I2Y))V%MDEpu z_$jYjF+3+6hWBXGkaqpjTqcEHqvveB?Pp&=N% zvfO)elq>6OrFyMdT|{JQi5&KI1~4^P76*yY4V7P+(SaoStX9+Mua^l=E_KOX=|O6W zDRRaBTD(_jH?Efyzw8bp;xh-iAXN#3SpM3dWwUXLVC29fE+@3q!oqRC0Xkm~o>45xHZn^Xc5p}x~# zJ^)x{@WqUxU>04ANgu`2>9;Nqy#(~71J7X*e^M_U0*$;dbVkN4zcMb~sYkJKwvz0yXDx;=W%k=>iI zOP{%YL;-)l?D74=D2AOd%g!%Kv1wny9mzJ@Yz-h~M(MQ^t&~Fq5*QL^ot{?nS#j-v zCY18%PQIDB%>|`R-~M_&-zXy+H28#|MAkU7JmSJL3UGa=p&VRSAzu?T=5Qn2{}b=w z0ZV#pBsxoBsox>~QZ^_`ER6sj6G(S47aSWHK-~*1xp9uldMj-)b`w|7nDy%*TrOA1 zZ!UOTqi6E&h%VJ3P{;HVJbAa&Pd?` zpj>gl2ni@I;Y#3!{C!!oSx(NAkMFVLb}1n&id;vNIejkvzA z`6H5N=xS4y!XHyT*Zg8t;LfA5->VNM2%_=D-N1hliZHvEtkt}CNmtaU16cG}k)te@ zwJ)H8x72amRIFu1x@aQUU0eu~eMbtYUWTl;syI!cds{8_q{XMIa{Y6t7W41ucEYc2 z`dmSCU)70Bvm(F~+btuCa-wBwG%-QS0E8IOG0v>EMz~~(M;L4J^&~!Hw{$wBB6ezw%#Kv%2tX68wsAg=MZ%2L4X|e7W4(GJA;Jy@Bdt%j7u&q(RD~bw- zx+K5l^ziD&Y6~9wfi4`ZWW;zS zg0%v=6F7Caw6;~Ac*`6O+A}U^2KjjDM~!=6Ak5?qh13Tz&MVsd2r6B|NqubUP{hmv z81$Ec?jO|5Ga|Z!vK`QMQhgPyDhuC|ErttuW}6fjwp#3O1lmj~$_Z=56RoLX>8qWx z2Rxy9-wLmdAaR1)n zj8^cmctE5{S@*Nzqh!KxEjtxUoMWG2FcVYpC)mXq3tc7y>UX`$?=r%WAnF?>TDiqF zxS^O`KY855M!4HJ%Y(Du#lLv`S^R+z;-(0+Nj8YvI&FElV@;V>Q20V@_G8CCi@(+( zJ2vgus#-&cb7TgLa1bY29jHm+pK5YU`vx0niu}i%SHDS&pW$kU)$W*jY=Ck0Jwkxs ze{lhSNn~~Q`6?($)>BYrkP-^Quw|&ZGj^m1P zGV#B6fW>2<6Q5r4UUH|1@MMBWf5ff>?u%*txQ^1jet;8vj()+!Lw&|6;S+Xvw|Hz0 zlN{}{EZ~98xZTZtXm7{)rQbT1DzQ&Mq$8jzSGl5wJna<{CI^{OK6WAB1WHndXo5dV z+wZKq%9^bYFo+XUqSH znWftD-D|QQDK^^CBPiD!)(3vLWg-RUZJV+Qhc&A_DD-|(bbnZMUP`tLjLqm-hVJ^M zbTR#S)X%At4{MJ)4W!-jpqV@`eYdn+{&I-NzUuNGp|YP+yQwe8%$)_AgI$vRDnVqx z0lY-}s*f^0#WzQVwEQ_@48hKz|&VcR;vsK$C*Dn$Z(4vAsjKan=$B7<0oMQ}{ zq`*-`mlAgsz+&AYfChd3KCkK2Am}M`ikW4CiEjv4yr7=MA}=Q#0!YppU~Wo{n++)hW)l4tl+NmZ~t0XR#jAHNe4ri*DdujmYxE%GUp_JVJ0 zKI_9YC8fKUg@s&!(Vx%$!z7ONkG?yBIkn2Pk z6J1qfX92OGRHzSH@{3!|q$K^o#`$K|1fgve{Z{S-2GAXMW>RHK*I?89-lBLj7XEfv ztwg?>y;!e_-_u1Pb>Y@)cl61nbwHg3BG_H{ss86EA7$W%Lah)yGI zo#iXRY)T;(?lU|E7)HU|UDYOi2PyQ~N>KeZZ;EYJ9Nn2H31ruhiOwjfR+$R~FmUN+ zaD#i4jY2T6TEVZ;mwTHY=JPGmpOHjrAvnd`pRg5Q&O-?UECbaL<7iGZHS%oK<4pMg zAazbq744CkLjnhhbGY)6r-+$UW0(7qsKGP|_>5)xS^j|Tvjs|%xsUYeX^20$?0f4E z%`^J;Qwj8*ePgT#d|y0ACn}i~wrZ;b4zSDN+rteU@i^PJk?$MrsoW_ujp_{otc2L; z$_gwJ1_X}pS&bGL6L%cl^CI1Sg7X0HA`82i4s0YQ2_OhO6ZCiMKBo+-#MIpi2CK;~ zk`a|h#)2b)@gh;)ew$bZ1wapbrDCxs#~eRu%hM%V3qBr=`+kG#OY~dZK9sG5E}uZD zyCDv;W$@~6cZb5CeC!`~PkQU2G^4s5%?YubV)Eb7buq1y*F42bm|fZb)rbS`pj-{z zDyOs4sBN@5Kx}w9WR&9yJQ20=HbmFM4W&Gh*FK%9js7`t5I@9o4wHk`d>gLe?TGpR z_3}x4MD&lLQ2#1G>9}WhWwaE)A!T1NhLgYYYL}5CTF7UKy}RBSIak)K-mG(ZfPz(s z;yrA- zpCkUn2+6zxwxK$E-G$1xhw5O!>zgR@k-^H>J&J9gZu%tKrbbJwFRe}g*}`t2n0d%w z^czHA1PnZYoSGK1@kLHTJznRI9}yW5h);Tc5rX^CamB;OAF&9f`{JcQ?&rQEV)^N0 z+>BSJ{=5PDvt`Fy@txihD_PHF!73wPoltcfU`VaY%7KG9;2pCBj+VWJ+pnCCj>O2g z{-m>l+m`<1{U~*_f+eN|?a0jueuTdQiL&?e%^W%P-hvCrx_=b8Y3Z^S2=0W#nWB;b z6aGm6H$Tz$L{YFDzYMo{r2tWOL^^aj`SvLG)y zFe=?ZQ0rcnG}IU}vwrC`3iDRydRX;Ar$-o<2)7Zlgy36ejD(pMHXd=hkvDJq*}c*8 zWRPWOE1n?Ajt-0rp)Y>9%{C*aq}gjQ_pR1S6Tu+O*q-RQqN(D77%O&D=~Qj+l_S1J zww%#2K z=D{_l5moB`^#W8oOr?b;saY(2+gMO$Uh%?w>p6kjjHSR_P z2_%3hgD>CrCG~7nevYTlrE!_^rtTJ4iloW|`r&xaoDxLj>CDw1ki#u0BH%tf6aivg z^x^YG2K08n?-o~ZM!McSVUf@s0+~)w2AZP(x;PnIX{O{MxEcdn_*m4AaFhE zVO>7^T;x!!rfi{t8)NBVNo(Qe_Lg{;No3aB9SOWIH+E9@82rQ#R*KL3fKZkLSJ0BK z9hqY|)MDI`55!wd_a^i_m3c6{M_D!tT34ao`0$u<0-V^vW=5yHg9`Q5G26mYl?mM+WX*xB z!hN*n)P`VH5@FG&*K|6Gu3ih~wfJG)OL*)B-)Bo{!D+z3NWhuea{kOI+@v#QkVjHL z^5qR+S-!^zNn;`qdgMsmhagmau%fQV6CN{Fp`{=0+}{qw{&VA+{7*to%HblXF|_Yj_(~nanw){P8o@8vJg~tmj=WWld!Vjr zCeI5_GlzR2!%z=H;aA1=4g8b>;9tWgjipG}F8TQ1y14CYpS)Uj^V7m}YGi`NDMVv4 z^L~QX8zR5a=Yw|X>dJhN1t8Gqp)AX*Mm0=& z(d#$L1T%0+?hiuO)HZIV&DGdEZ}v!)_!vFou`h~Zc)T*eBx3b%5#l1Q-kKC+IA6QC zO{ZF>nTs}zj-WyX%pI0rNNs|$hxf~t^r5Pazx5ouG^^V8dzjS$R ztBc?wh?X>ug`g)W)z1}bO1-}J|6_pbo7OW$m{~ACM`~;9NuuU(6w7|4;@?CDuvPHB5orG$ jPw%j%7Dt0m+SkoT6r>g+S^tG@-`~*mZu>j=Kjr@dldl3M literal 0 HcmV?d00001 diff --git a/guides/assets/genai-attachments4.webp b/guides/assets/genai-attachments4.webp new file mode 100644 index 0000000000000000000000000000000000000000..1f8e90d1e3c094cdfdf24b9fb1b15b1fc4076158 GIT binary patch literal 16720 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%0A}R|J7}%ys!9Kzk1tbx5*vL($G_ zt;J7=Lwd4VUdtn(Tt-}DL8Mw$6T|TROGb!}Tt%y}1`^PsHvY$vv;mjAXL@tF(H{Gu z`-@whW&IV$TuWHBEs=}KI8iAi7%-T`^=(}q($yp6!xJy@J#dKKN&9|{mhu7!iKE-U>4 zK^@v$hUvZHWecBN3J`j^@I($ThjygSutn_v8N#)Yd;{{*xbA5S2yJ4DLa&kb=ra|ng%lT^tyENh3 zTret^J~5KM>#*t-1Q7r<)`=Jne!;cxjyMkYN;p^3ZzZh|b6;xznh@DS4Vo{`M+4Ww za;=xIfI|+^o-295vUe6G_iTJ>gOt>pamyZ7bJRBw6Rj&QT+5(`lWxQ|kV}q~i1dqo z>gvs%!HJ@&i+*+D%4X{q(wk&p3Kp0Qz<4}E%TC4brM6oq5uDqtOL-=V*(PUC zC!zc;ca^qZbEwKcd4ZoDc_abS8`JG;r-KfX&$B`#4xR!@d-d|OLPj(y)lh{nQW?2! zCK7^P6eC{&R+F+k%_NRfC;fK`?USos&6|6T;};JZLPJc9G2PZ8%|f|~;3mtG`p2UR zRNN_M{X56X4QYZi!(7(92i=RKw&*R{=3-!YW;#d%1mb7?i|Ba)w8VN8xZD*QTA(RY@)%dGhl^#uU$8$ zXN3{2>O8&e*{mF9gKkb@ZFIYQuA0q;XcaG)>|>fg;qV%CcrH?)_uAQS7@u7pMR9}R zN;!V5yH4v(h!G)QDi+Q*@ziw|sJ1)W6a<9cPNRVAs&m)7XI>35H0+{$Dy!8u5h>8j zPTmS^YRT3Q;t@(}+;tbdGK9Lq6oy@qH_JSWDPZspr$lwIzI#wgLi>))^B!J8H6(+Q zh(ebBI?KI?qiUpE>Glnxy1l-zJTyN(5_Vk_^cBc_2ayYa!&ciXM2yqaW*j* zZlE@x_t>G{`&nU0gII?6k3y)}Kd= z&*(AHxWqD2HTAA$1(2^&KCyQ)@q@zfAU~0gkaPoQ3iKF_wB%5*JNI_%ct=Ubp{Ii3 zy+K37L5HhDo|1QGM;sW;nG_S5Kp)qNaiWayJj)e{lI=gJw;U;fX065`2?wnmmk_QK_Y7jc}P3$$fe4<;5hL z6AC>h;Q>12bta)q6+6oNOR_z-_kmSl+^Ga2%9X-BB?FOHkB}Bo{2K2_%ja-_|oJU_qk|4Hs zww^53h`T!o$~_#0N`4GrSEG#{4LEfH!1=@0AK&t9(~x$UuR7mWj|5$ zB~IvQFJ>)UNKaAZq{#^*x~+>VJp$;aSUQzgnH&s9-;pDCtmp?VsRdTpvX&?o0D$_q z0mMl{G%3U51!eeUtaeRsi9BJ@!&zK86kG^1m-HcwJ^)~OZ94Ud&5}3N`PX4Y8?Mo* zkA-C&!C|6txZnb^>d_v}Uou4Qipk&Zui%db%miAc>!ENz)$V#>wYADQOTB+9Q8kwE zF7Ui;QrjXK(;oL7h}M$XsU_NGK>ZbJjt$$IX_LnoTmX!A_DhHGPpJFr`#}n-FU~v6 z?0Gpax-o&mhgn!r29Jm(Md>QB6~}AQW}(lG6*!}*91tNeQNjTIqRT1K(g-7%Okj;(`se3G z#GEs;lNzNAZNerq#MJE%*bH0Rryak8T zkoVOe-6>C1*a^PpVuezA=T6?DHHFB0_P4dj(}f$%5uO0h-*pHti+;S3_eP)>6HZ?F zV0uUd0+YI`u0MHc8dxM$`Rcazpj0W`n)$<8vpd;n;ap~R{@|fZyJO38^g`IIH*|$_Ptj+v_%nmTRB0`O zS*XY=#qroUj{QC#SJBa5!162lI1dwQ{Q$Z5GEle*oIAzdb}ze^zzn*+t((*BJ^(Nt zf`&rwr#mF`V5jkZHGEYRnk*hxXTmC)_tVjVyA|wvzeEa@Mp^WpY(wCnNt1a2@*oiW zEOge?ts$Ezkz1F6%Wd{LW=6t^*e4J2LS`*%Qg2J zU}N{&3Q*H_h2K@fig)v5&MG)5dV@r{9v8Objk>2vhz&#eMziDg`*w`Zx0j4}?!}kB zcK_LxEiPN=bIyutPjD3yvXZRzZKnd#&@EI|U8izG7^IB}mN3nrF?52Z+FDVx?u(32 zCw6t77yKQ+bSg9gQfF=0-~OS~2F**2K1mUJ)}oeGO0Ca-8TCFBLEC)f{y?vE+qDaV zm*Wq@0ltFYl!3`Ou$XgObiU}J1&5P|hTB`xQ}liHwx3PFrG<6-nY^c3N%R~9hC!10 zE;AUsEiIk3og(jR&RdR-ICx6A=>2&I|5I9=<_a9{MI`2&b>&?m>Q;jd; zgU9V%d6<{?WGFgXMUCB%Lf$K25)SkGixE73%o7 z{MdVuctN)ykYr<;%p+T(?`9~We%yxd667*APArpg2+T43oq8#)%3zR^KG!Omo_B<{ zxT2;TLGn|8=L;65?h272SJlpqFDR_jbf!Zz&7^GTiMO`$qZj=_Hy_BNwtFwo-baLJ z4^bUfCDSR8y&vLVY!iNCX<0*O_nj9i$v3I7%omzf+iTKYu{u-&r%b{8XF~ULnH6;H z4MY-~t7=}}@PYLBA?R66+d}mFN1PU{*oaftdd?#x!`kR;+1==5=^0EkMl2sLY>PWv zNs4PP+9-N)ZP-d1ZQ89vbehcitES_#Bq~R2jmMk)9da)8>q}bP3w=x<9>c|p^(QT8 zKaXQc5Ug4k*dd%TE1HIvj0Diq(!L{&me3c(q9>-o-~a}r2_j^%_S9*s9CyJS2}9do zW>1=`URnr!&4Q2$aQ-{sa*=Z}DrxcrK#=rnID?;0QJ_m)tYLJo&lU{5Pv*v!Ybq1A zjNbl_W_2>oM=Kuvp6ANPftcX>HtsSnxw1mkFF#V$us+E5XUs>;Op~&y>R6LHsVh~O{eGU zAE@*>CJ;!$PA!!05pkbiW9;Xi*AU+CaQdg+Aqz7}Jv-YMb#DzZQ}CPx@^!oV2&(6G zni;*Jd24@M3gV|O!qw}h(?D9^ha=()C3#m77bE0pX#}$nf=GF(wg9V@l%qeQ#f;b$ zF`jQp0N-6y4Eh{~TuzTdpA16=4w*A&?rVR4z0gP^mnR>yaG%D^P34-a(||j^=Nm5A zN&e{|V%hqMDRvk$cI)o~5_jJ;(y_8KdFIv&1PY`Ej}zhI;9i^SQzoZ$IF%)j@Z9hz z%~m}O9B07{JVmHXGN!3AA+bLTuoFKs6Xr{q^o{60vc`(%#z6+R*KL^^FYUqqv7!_L z3Q$6B^!3VShFO?}PhN#5D%&{THp{oOMGELU%6O#xE|7I%WGmb0?G2ndyBNS2t9bw+ z+pWoz!Kblr8yel}B3V=gjxK=F&^Ap?;iP%%6t-ev~A!qJ5IXr-eyO zJN^K4(i3dL_kbkF{tKX~SCks0oC#)z!;znkgWh;F4RcbsqZfp_wnRXFO6u@SGlwoqmjUx_i-?@>z3fGt4urMwki0{}gfJw!i=pWiM zWScm-*fO8*Cjgt)Nj!KY9Hbnrt%PVWgKV4-Elk1SF3ZnB&-`hNbwvD7!6kB+qb2)% zSbwlwL|?VS#W3|cwL1JmlXj<>f)IKnDI0+MfOG<^Y{ZOvIIeep8F?X)cJ*g-Y9 zC=x7)kOj-&WBxm9^*2kK!ox#=ue>61TsPtf*BZhX_!J^Mmr5V*Y3<%({0`yene$Hw zo|SP^qa&TZn}k`W_kjEg7`zLHM8{OPVBO_EeB%~t3Jw!%uf@q?MOkNUA~W|D~506Eg3l+JNG(_1F+~de<`ot{YHX2tMYbc%yL(R#b5wU zP$uT$2gSS)VCCh)t;zN*XdzihEdkeP+U=>{RpI`$7Ju`pe0*ff(dI@KGNZ`B6W0c~ z*pB6r1F?>_Lr8F9<`ve)iv?}-VmyPWPn^nWwhe2dm5xxs6nP0N1P=+dVgQqkD>Ers z!0D_;fM|Ckf6x=u27LN-Nj&Nj_V!*21N@_K;Xy`Egh{+*3!H^ zBLZg#_#zSG7#{DDMd22hhQ!Zy7gV_fuchro8fw% zfDmvq&@i2|{CLb2$^ZE~?@!>Y@xvZ6;p!cpJ~ugYvRlN#ARr;3uQsswwYpN?n(uNNXqnT%zr&{RGKb$5@6xb93Jaw!#1a$yZhLb zBceId9>Ne97p)m;+c<1HXQ*}DPSqG{4##mNK43OR$K_&OCKZGb0mY0gA&_yYzw|ac zEx@34_zdztmVaO--H#}VVX+=(TcB7TeKANo*prTHTgo0k$-*dO(I(RD39l%ed_^kkmn>@FdT5PRYX$ z1{alk4%ONqL=D13&C5D?;!PN_3sn;^Y1^Z{KiX{9Q|~-B@fUFBN~hDwAMe?(sM8W@ zaMFq$$7G6;R}4cR#p@|MJZvC-M*NhBU;faGSR&xDgT%={sDg?ZXN##{PMc>ltvT<_ zl!s5~1BV`fw2fYPBlEuO{RDviySJAkY5eFpbkksltX5m9>Z+qs=Z>r+^(bgW)i_ z_yYAQxw{M9HXt!%Jot!%x@eqn%*h^K@@uQyaU#cH7Y5@UTnw!%+3mxaaC6_hJ^<8) zbK)!9D1rPP8bJ{TF>hR=1Y~{%vb>s7QGudf+%I(3s(y&KNqyBi=Mo4oL(PCU55HMr9)b?|G74G!jZN5g|PA5%oN>JuGO&-A<6p zUhxIQ@EOrYNSvG91lsA2Mi=AL2$BdS2h%zm`c{8Kqt1BG%04c=OZKz8n=GU*9ObU; zw;j*67p9P3)p$>XK@!Rf6w=UYM#?HV^-bS3yi?#R1KwdQbr z9R(;Psj=O0)LeM%T_#-ShBVQyehEHgev}n7tDRx1!*PJQY)0S|7*wPRC4XWD7%{sv2AccQAp6zX8X{oS-BLhcmAS?79dSKU)n=x}F zn#CpOj%&62IuexjsTeJ+1X-l>;LiYri-IJy6vLyp1QwFobBSh&)3^i}9kADc2>f5! z^|%aX9<#%S==I+!&(#V}Hdkb(X}yLMqWh^vHS*=14p;~u#sa{YMst-+YJvTx+~jgF z#!psT5c7yQnMDs*$g*Lbqr13~_Y{eji$|r$4M6l%os|e@ydx(K9_iv@g$R8iQA>ZO z87!tf6iviE;PnhV&TmPnb$bMkBAKYpONvq>^@x~Wx?!}s_YWgQSfcSmas*nHWJd;!99uWD^TNEqqAwyn3=oZ~XFe?z|JjJr-t?{MqRv{=C9 z&DY;Bn|bfK6bA8^;PD=6>z36NlUDXVtW6Cad^mB#$NpefDPUm7MzPmuvAl8YZ(3(j9Io*Y8>oWoqM8GJoP&%$k{pQ=4`ZP&GdHg8#59K>CAp1|zKFg0 z!t&{GS?Py)ROg7}o!+T67LiW=9C47|!b7%rSSiQF%x@QBOrxp>jOGjiVYY#sC%B~L z<#GO%)?}RnC5H44cf!1YnzBNUhm$02w41DoK?Mw4H7h_G#Ti?_9{Xb{9V6*uWl)Jf zYx>+FbA+;w1wK$*vSr+JcR%n2NN7%TYUOSmCraOv;Z3p5|FPs(z%To z@ne|cs&-(%vb(fn2cwHIeMfmsmEcW!bsn+R*%@pj45@fzikXx3`jNpT5!V5CMZ*U z-c2v8=$AbSuwl}M3%*z$71}6)R+{CET!)$TJPP2-=5)hVfnC^pUf7d}ey(thE z2fY~Pt)b$B&?NPy{yp{aBn;xdOIFYGu~dXVWOSORFkf_xI#mXWZlzT)DQlBJgpl;(Q( zEEA0WNN&{Ene376RzTSaYSC;gT3zZ=TdKtIQL_ZPqMs1XY~GBCz_49b!+Y?!xE(r4 z^E#M1GIE%G68D60A@#gu-o`^tGFw0tp~juT`g+hpcUzvPv!jgYA zZ}3@1c(VEUkou&qZF5(UMDCnc3CxC!MW1N3tuu!PT(XBmJ4EGM6`Z{g0L zbQ=1-fDmWIfI_IHr=ogrCYH4~1sbuYvV!6o3BfCei*bz+;t4jC z`Ji%bC_t(- zgPd>Fuk9o@>a9J)jiSh2cKgCB1HyZZ*Pp_)DaU^&v1fvY9`0422SP-1pe(^M)?p&>d>94h7)hVpWsY8+@Zq0 zH{NDGP?O_!YFP-u3a9qzVy!~lIfQ5eR;n`+CW=_km-84K$4VgjSZrpwiO6Ae|2qa# zx>e9&M|E0pv2?l*h3eQtb@~5xEPLSil~7*=0|==;6&*SPfj`Y@Xy_tscaf_tMb4>D z5SV%&bkx}D5o%FywfbE;#@``)awPj+CNYYME& zA5Y{Rr7ag3h7j)RxURZ{nH@%!_Oq=M3F5{$$H`ZMD7wl9wUB#*tEUiqhp0j*wNgLt zOhDs&ZFT5MP)UMsfC`}e7WMh z9LBd`??R0ZqJGejCRm_A8mn_{&I^d+jbTO!aUUcXTJv_rMyPYhS7Gh2qvY!#H=FymzB zQ~UTt(?vJ8X6bSz<^?97tCTAcuH(7*?o0dlqk~jV2U62Zp7+;f$KQ{&H-JQ0>RxuL zsM$S(BH0{quuu0m`G=_TE~wE#-fVqgBAFD=eixG}9w#!Gar6(o(aqH)*Edx7S7CvB zmJg-8lZD=s{;k#K_{T}dQ`+2k0X6PH-{c3R-^M85B(5Ogj2AIbjR z2^MZaMG0H#sQkwgokKxi?(lyO_Jaa|t75r>>s(_tq%y?O>KUu-13^zCu*r=^Vv4e3 z`N*yji`h3M=R*DzcAx;O_X!hvE|uuSlDc*CVNXC!;0PW0}zJlxMKi|@(y4vyLL4=G{d zI!}Gf$O`@Soe8-07gyo89P{}IjL!3bbxcJXE8|T8n{^NX0M;2Xg=qP+{S}7akSH&g z=T`x>Y&!Q!o>0&PG5m_r@OuO1pX58`*%^sXi=LnB>QhIo6%y@^WN#Xdv#l~&q4V<$ zf>h}PS`{yuYz%=&EvW+!#s}&YP<=5X-|;U4oRJ%i|%VOLTrN=(^-ria*HY}xwdB^ase zx6;%)Q9n>PAh(zkVn&NR{OH|ew;7)=rV6eDmkHZg;eC3m?61piTSF1!e}GTu!+) zW{0-TvnoV*bP0tB^@!Qy;0nd;Zzd&>crM!AMLB3jz_q5M>=%wphPF)OL^A9jOhCjc zUOF3k9~(Wbf?dMZ)RmPVoQZQJp@HnWh$k410^Wa#@#vz4=;PJ_>K(%TVd<%2K32_$ zLH5#3&>_9-Q;kWhqfcz-asAT66W3AU`LXt6cwMYHZM`hdGl8Su!y?3sz}X(yse#I^mo!*w z*r;!Uz*<=GJ)mZ@qi8oBoY#Mz0 z91--H=Z$4GPEh>9iAVH;%gW|*T+UJm^O&B^-jR+PvC{~Ea5r6l3>hvYF@4E5S!>fL zMI{vJHH+~~Cxf0w>{@!J9y;t{-JV3Ph9-&F4e8w{PWS#SptZOWOwnvU*2aZvX+tKK z$O~FR_QYVBFZ5Sj%TTM@m`%29!l;^Kd!%a2 zb7@ckpD&B)#))jXh`zzwXy~{!2QtY$TTRYO9N+gtbU&~pf zAHUasD`I{p-|jQ_u7~q!hh9AGU-0JMhzb2jZk&Z{s=1ym`itP^(2+*E;AvFdvfoU* zq0K-!rQUwG-}HjC@4%C)%h8Dd^rX@EfV>kM8u_ zt)rqtjVn#oaaB6;O<1fWb=>TFmxI3EK z+K6=MiS`_vrmZ=A%3_C)^5>8~Z94lnXW2Gv=EM8&+^Py$FaQ9`uCP1Xv&JaZGwrOR zy=#(w2R>+aUBL;piX;k&l7sMyv8!LayWrqz-NCw;6$R-{fN&610UMq0B9ZPpu{iYVGT>=k8l9^?&~r5PVUKdM4% zecO#^Fb~}3H4>=Rf**VJDc)t%3~yS`)XYnysITL^yS6WeqBn|pltKUi1XZLN%dG%B zHoixt!0fQ%i^oahn6JBfZla^~U<~Nv0NM=jW2Q=)l~mC*e6ydEC8M#fvjbB=-Gd~v zOU9ZNziG_QizzlB#0iJ4q57Qn*1_%39krx;J|}>BoR#H&GC)tW2I(b5rKuMiTIwrN zeV=>uj;9u|p}U)O@)FOX<*bWyQ-{!_7$0{3;lPbr9qq&>x3Aj>w+|J&GqNUwKN zAVk3Zqyg4j%^^?VJXnVv?4xFi3ut zZLg0e33o3I_cIo9qYQDMukDQMS?HaEB)k$Jyuz-N0ak_aF>$8AbX6KNm%dleANs{X zm@ewgubac+=tv9hSvRGIHL7W&jMcfD@U4hbI((=9Sy%QMU85NLa~-yi9)L0t zHU}zJAF#yCxP6$Ou7@ql?D}4)zCisntdf8&-_XIFbt)|}{8K1yy(eUC)`}HfgFM#) z><49;iLyUq+KK<$u8j{&xtDdS8Dkuvwm(#(=Pr0<@Xj{{u z()C{h_1)bJt*}B{Dct2TSb@sq)5O|Pa1j22CIX2Sq;$BFg@U-7Wa9; znA+Uc>9=l(Dt6c$l!B988(A)AI9B`@J>ml6;&Vu>2xdv+&os>`kSpy0ZCQKrNNMt$ zZf>F>7nZo{G zV>s@aZ)UvDO#p!C8lO+Wz-?B9?^!9h*#P5};Bi@IPGn4gmGvZ5to6GS{YvAEPnL|v z8V>=05Ymee1kl$SZ=orY#bdEOL58MC9RBM)(5V z#kE7*Y4XOpo7v~IB2-YmEx zo$|=PpPue&4*O1g_viJ@=^m4jUEoYrjgF;=XB`m8f!dPsGh+B4b&s6(7vg)7j@%uC zC<~D*gW`9&ktq3v;NGg}SC?5!i%st=geYL(BWqDS)>}}^<`bGb(QF}xsQ%AicU**$ z;s*>Tp250)A`-SjJbG=FKO&bn6HE+w2hS^vwhT07#+l2{fv_SC_QLa}9sa0-by2?v zpJ)#i?BK#jmJ4xE)PUy0fiB6l+zC{Vpmm{S!ZmYVgtdlb*4i$A_Z6#p>*^Hs&!e7N zWLQ_sne)UTm)QsQyUkWpQ{t6&(lN0(R-0Wqv+u(bM|$>N!++fw5a3pC6=PgYLV*_% z_)DccO9B9>eHeYA%%&PQ#ZZ;L{!ez&CSAL8`QB&x-L!3uM4d2A^IVM=?--#9Yn zU^f#y@u5hFZH%3U--+JXgBQiOn?Z>eVX5 zeyd5kCgpGY^<({wK{R{q${GP9x{2DMDh=XQHl(UK#5JP3k5$Wc$UY4iA+da$Z^yL( z<|z*kpaFRqf5FVBNTL?VKA`wv`@8Nw1Hz`4o#I~EPzjrHdbFImYrV8Xl4mX97!T_ zX3%h&2md)rr|@od^sirUfNB8WNjeZ``J}mMe~x_X=6M%vHCG#cO5O3s46<#ZgHE9a z6h)@1`#+d4tVCPK4;#jdEQB7bZbJ7LB*`UzG^&&Hj+-D1#~)=PNA8+{;V+=AV7-j`62b#K*Sk z5eh3H=-&<=Aw0a!1njv5Bt{RU(pRxSXy6*&bb|YbOrY%JLQj@p)_>gJn>D=jSHI>) za3W%g4JxvU7r1E(#l<^~y*?!@urj#JNw38q{Z#>QQ1;H>o&Sp1yu=0!!kmUn62kmW z*$ly45<~-eRvY!>VAFYtgw;wNXqy8sD$Got-sahv@--*Oc2SaY*8ds(-Xdngp&%*L zM`-pfk}va;kDLmSF_d{)i+(n|6PRfa zj5lDJ2Cx+CV9v!9Xb>@LoF8R03b;_W*vQP z9ZP&n{)85(8aHn?pr0s@M$O?|?^uc1Gs{{};H%@jItMCkmAT!RZJiS@cDtymzeuaS z-nb`y(g?w6{R@X&`onibs{)6J@EU1Fgu3iDZG-Y@t@;wz^oBXuc7_rNakkX|HE;VP zy%`5#B6OGmKEc7Ygb-8|?JIO9)kL9OvfDK4^jls~iVk-nvhya?pn0rheV@H}453I5 zsNW?~opJn6Q|&x{QAI5ZSo?dq?OlX!K+d8`ct=@j}XC3 zCP|W`q@xf{ogys-FUNV(TQ887q;u=$8QlIg?(KCo~jyE7#%$3@u|v> zNe!Vo_!Wh)=>=|eUy0WcZ1wtCv>gBtavro_*bBG?NJ&c4?FCH_gNa%F?2qwJ=dRQ0vGb9_aYu5-3rAsNY=XxvKu_YD=k>C3Rz{G{p5)Xo3;V3V)k7Bxs4h*BV^#MHz-! zb)6+eE;2KwZA!a=N0OeJ0V)*+DP0PnEAkMhBoSs>&y7Lo?pDfHqD}(66R^`d_PdCd z3Cs^|o}ZsCQhMGj!h(N(o(k50LLKSO;B9)Urjh3gKFFBM?19qBQseI!Yl&1rJ3TvL z$H!v{)Fe)#1u7RiK4OMmG_)6eY-`jn5h%XG)pU>%sgiK+TxheZ>CItf4Jukq_K+zW z_j{QICrxh*SX#$-eDJ@y@LDhw+4yt9-x}np)GtW|ub+%&QewFYniQtkQc4bur?Bfm zf=2>aH0qB^T0~a8^gD%ms%H$9e})rVQU9!@5siMS{A?L9T~^lG+ZN60P*#QCg6@Ml zo{~Q8u_MK-!~fEM!;*wT2X$4oZ5T)oMQfygbq$xt(Si*Ra1&XyTdy{3ApNmEQ?WFO ztJJX^%n&j<9x@40G4%0y1zEpMT!PxgVCHMOw+Vq~2b?IicAUtbh-umdy0igCcMIb0 zyN3zd;|rzn15KN~&4drR0pi}Iz}WK$o1Sf!s2q+wZ!z1{kyxa)MhS%HPq8 z3nNCY=ptl_HnQUouEHs1(4|+zk&sBW!=9~Z0AF|hEaF{jfwX}MD+_-}qoTd!;P$Ne zT9)7BRmNT5aqJSzgLo;ARS3VR$y!6E_2ycka-D~35EQy8zikgK#LJcwu1?M=-k8Zk z91Chzoy^I{b5IX3bUI%_&@yx?=~IDCSdh`eMlMyjf_*~nT#CQIxU_|(-ktiIZ$oP0 z$ruv_aRX++CTTiEFpXE`s&q%>F-RpSZ20)*ua{33Bt27h^ToNH88K;t%}g%AO7V|i zBBsPJ01NaZr-ckcWPWjxi9Z z21(d27SfN)>(vy@oba!%g#?v#c$SV44%?qP!(^}IJuad7?N&~dD6)Npb>~8YINrf+ zN}$kzS{{8LMYOu42E;rn0fq_WR5x+68Kupa+OlWbO~U^Mk?wa^ZoBV{+#?Lq;Fi9< zPlLr-ZBW{5^rBX4j`>m=B2ZGsiHkRa;-S{?^cx$%TV#_Ka64_y!ie=9rL;<_YpNm+ z{n~`Eg|pW#3d9WJ+&_HHIPkW=!H`;j z(Gxyr2BpW$F}JG#RY`Zm+?F$eP#udynpL0ZLfilG4W@Ffo{c}5_G=urm?;|? zw>>s})S0`T!g$rHd!tS*qWBdHdz6iz$ns-2QW-P>OvP+J;PGuN;WO7DzLK1R$qNtr zgpbC;VBufMGDM5ye5Mt1m;|^;RL?cUD?Gk{T_T`bBXO}8pr~jr{6?XX-@^D&PYO~Q zFod~0)HgzZetEXm(pTq^RMNX6l5VG>F0h?yO7aT`&-1ZI18HF9Qgc7PKdJ`19*i72BaCDitg!ExgXzHpZ25r7i6&)ri_sJv_?|=t@f4o^R zA%5CqC?Dv;0A18m&;fgltWEG*%901!W(};0y49Py^KbwF0005o(t9L2{vv>vY>YZF PNE*~2KmY&$00000K!7}Z6)@~06C_BNB&;^{$Go;{%<>nU7D|NT zW+InuI9`ll_m&1&?DH)Y-qkK5$3`E%eY}o4)8$wUD;fE&L=(nGM#HZI!C+FD5;I9+ zq{?buj7hXc6yqzYHOygdsiPcWA`5pKnFg;3<9&P`Mh78wIs?H6sQ-FTYXIktJ;1SN z3kWo348bk%Mu;j5wT zfpF#DvngsnwW+HW3rtv;Km3&+j}(P);--D{ZYXD^^dV>>%@V=SBjnjDDr!t1I=p$#SSEb^@; zHd!6Awf1aJF(;!v5v^QzNjSH#!5f}~vpRH<@8td|s*L{7P5<*D3N5M{1vb@PJ*s}! zk>?@PWK=Mj64N5(3Gq**k$<24sR936sBOT3Z|60)&&CaPW(uJ=UHQhtJ#zn#Ek0ud z!MXrnqUxNsuK z)(_?T`O{J@L8(O!N==OB6jA+KHQ$O}+|?rQeCJWe7}Btt&_(mER{Si!ww4Qh^j$<7 z;EqP!+CC9(Q5u0aGjXLPUFgesr-{UT4pb!?oWJ>0er=&`RDfXwR~@}we7~|y|534bcE{A3C&}TH zv#~7^7(z+?g;*HArd1G+P2C-Cc4#*Swn-w66-S56bHvieOfmK|kg7zR{7dAM{HM{~ zX(%Npz*Tn*YXRi{CgYJ8^4q^FJIR2DlB!q(6H3yCsPqR7=OAv1-v z{^J_g+&5`TbN?H}Zof>84bWWHb)m?@ysu-)V8%?IPaR?2MbQ~x!>f1T`e>^CugvOds ztWDFJi3l_S_C3C94=r)XRdIM(&IS3bdnBC8L=1#zSzXwk6Ax;@YNfiF_O`@9|2ycmd)Ayxospj9%}FY`CSWW zVoMoPl5F1|rDPk*;%;rONXV7+;X38P*_^=J3y+kg_CyfeRSjkNdT2T#Re~PmA8`dI zO+!*O&2(_SZrz3Ksfb16w9+Z+lg`%b&-6uO_%S~dIyD4V3RJw1xb==+WDva}owiu; zKxz#TB4RiYtf1Qlq88ieuB&e3B33K}D+R?T?RIvt9_gt>)I1s)P;{Xj;HD3iT5B)ODx93bZ4vjLb<;?Vk!at zV|fKynG>Zbxz&5t#Ak61-|Z^I&K5G|)1OMAQ+Rn4^9l%tewd|F{n2QHy7ScqGVi!dFt5pwr4bmXcBIFL%aBEx|n;hc`0}Hg+6oeKk`r14pNj8p#2h~*^>;S65&dA zl#=R!yFlaSZWyysgSZp3&lc+*`uZz7cqy8+H&dtx6B~-CG3n07lvdL&l5HTLlBTDS zBYt-zhxWtKv^iW+W0AM|oS}U!XGxSo!aD`&vMT%^$twSmuwYoM0Uz?VCPj^IRRbyd zl=*exI;xbuNkj{cX2fiJIw|(~kI)={L=-c&&R{paNCw>9Ujm-iG~MR!fo=I#p9Mr_ zu$JK>PeO~oa3hFICoHH2OMFVuC$3-Qj6#V$+W?F?-j*}1(ug7WZ@lI8n4AlHdD};o zDONw^c_El}4M$zGn4>BKV+a|y@v)kgi~HxAw_?~4ZX#eK>_bKF9cHjQEh-yXB`S-R z-ShCb{7t%LQIx&G=H@fW4;VAhbUsyk;MyvjVn>%~Nk3;}HIcPK&*&-?wU=Y5cyceE zv)#D&F!l+h4&Z$!JIB`Xw3KxH0%r*NroambuxgcCUYSu(BiASrkbIKlNeOWk9Nxy9 z0X2E@)tm~2(_x7IVf5eGqOc^ElwA-`$TXdS7BpgNP(!G*KgRjMVES)K|1Vbh@XPe) zSI5uWq+oulO8Aizvq-@TnT29)-i`Bp}R}yqG(cXi2N^){?lQ1Nj>u!pLrL| zq5lVo|I?}dLBU;d;ipG3lDmByRRkdWl(NAj4e|fi=>NMxgV>9JY>NFy*#CznO#r}m z*l3qN3L@K*k)T*uqLzt=j+do?i}INVo2WE^zrBB z5L#o^t#9v{^;llR!xg=c9cokqls~Bl)OR|F_>T#PiQFMyZ4p1!QRDVnqry)ZyLE*f z@Vbgv^IyLoqm$!vmEphP0KBpLd#NYfabxfcNmL)v`tH2V0n!MAoH z-OtJreI7r@a4zw!&hFh?8qEW2Jw}Z%rRL=gc}igz3l{)$i8AR+dARwXmG*u7ANex! z$%`q6tDS!DLze1uU&l3|a5Z3mkl;$Xnu|)Mvnjg@?KqSw0wG$KN{kRiR+1%NkK?&+ zy#Dg%k|D7wGuuK$SgZ2?`r{vy*qlTgzY#x8p1Vs^hwt==+3#_kWlMs+v`eF;W-c#u zS6RN+*%t7YY&+5ZxMzC@FPG5}e=SC>=`Z@zcpYDEW6oN-@2Vzxo_qe$Pgjg{PR8aB z>Dw>PZE1uAHG_B8P^J=Pk;7q&-1No_52@hAsif5{olyi;T4QQ!H@fOw$lDVv2@)+< z?6|SUammM*{MVoKgYbfY<(Z7tl#UurBtt*z9|^c@bJ9SRwz)Ou3xQ8Yu%^jyZ5Cim zuo0Ka4Ik533E}P!upX zrzFna?d+f;iX|!ZT`HSLqPF>l6hn2O#N2D9d9Rel7vu94;i}1TQh@yKa`=P9LU4lwP zgBWl$#-tn||IEe3lJhbk#Mgbhv~l~py%?C4uptn)WT@p%IlPZJN>DlcWAI)+} z^|pv4^*E#%no0^TgjvgP(;QlWXZ>nIhuO?g;~7GIOb2;zwII zkutk%3-hf;E2u>f^6-!^D?`+2co#_1rB{m?Tgahgb=EgzU-xDlUcTFvi8RPhRDOVG9An|?E=u3VM->S0)aJp+`oR3`nN{jNYh5z<3 zG%S-}QBkuygBYAoGdH0zPhD0`eYnsIfp_+skP(%qK6F4IJkf0XG8kc@TH>;rs)VMb z_=0Hyfc9Q2GjWbvFNt@!3*o&d^YcGdIQ4$b8gp8i>ECzAF#^eO_Vrg-gL)(KMe*pA z7@Js=A9z4G3kys62;5CXeMFaozv!>z^?hlKcIN5B2%W9qaK6SO>6j~=ITF`%q3t=I z<{A|hus%vVm)8hHc4VGZs(uRE6>HQ=@Wk5092K?omNYLhKEY*=uVvAuAEp<^p})Sq zLbd;eGbWCxit32G6QoUrPug?&kq!X!4s0?(dS%VQC}-r0)q|M1<)8MbS@ zv#-tpN8mrtXGBeV8eCGWF$fY?!GlKW2L7?W$&`Wndm+nQ|5^r;OXJH;>T98~W*Q;G zxIdqfltF#fni14-(0&JNC7OWu1vf1BisyMDLru ztPl#z#TI0E5ADQ`&vx9}h*^v^q? zgxdqIBo1l))%ahw!(@4ZRH76^I0incj-hV`TfWO+pJ4|hjVGK4A%v@D`mazXdd#;% zw|}q57lXB?9n??w;G*(*YG^R4l?`Gdwu$=mo|L$j4*GhwodW!<4A|wC^6gvcq6#cp z^n1c0>&+W)&Sj_-h;l{#B+LU3rWtn$d@AyZUHK--snXBzjl+kzr}(7*e4zDo#Nm~5 zh2_t^%m2!Aq!R?-?Zg8vDI$MRwVGZtht4?(3b~DEZ7J{a@GY^>IK>bIPG44$ zUK!fh|IQMnvw@Jg9*BZ#LG4lQGa+REyGu*p65Wbq>N8xj)RkhMas6rofwSQ@M{Ts1 z)VP=rR(1Y^n%stDFgVsS3_x(AUnR^$WNTk~7c2i^;EI}8?KHiO-Q`X`(b?4~;PD3L z@?tv~6jo*)B#rsw? z%eX?y_lc+O&2QFCxFt2*^f{^pC`H>B9d#dU!n(RStz&v>_8y?(5!=FBDjxx9+^ZAm zFYWLNvDK~22J*YP1*7l5UjBYkc6HRNv2>=SpPqX^lD(3ZlTs(-!dRg##bT8y|9oLD zQm?hejN@b6L;9Fsi;24hI;EP;m?cjiK9MDH4X77nuA~xdpfH5$eJLo z8)7#U)_nS1blpg|^7Y2$vpWcrL)TG>(Y+`3$NUCaWTFD^6Re+4Q1Zx2n|!hZsOqW= ziJXyDPMfa5P+H_zEI@q>ZWpd>4<<|JO-xBzv=XkOJ+_pYpGDfj0v?8Nr|;YlI_M(* z7Dy^hn;T!1%*aqAfBC z`J-=pJLC%iBE{@(z4r;%I)a=U)c-&mZ@RgE{(!KXH%Y&lO8K?RJFvXi8vu$3__uzT zOR##T_?RNopDhm$4}p3GlsHk7j`A2Tw*dfNq?_F8%qa=g!-fxieZ$OanF8TdkQk@+W-Vx!mUmN$#PL4J-eFTkeK}S&a%& z*W&8ItWgFH{+nTUkQIShsq+>*7~WG zJY}1>L{X61P+t;$wuBmH`Qi$jqp7tNh?0A42?DujxaJZryEuI0TxDUQ3E)cKXicDA z4gQgVZ&!arggEq|NWSc<0;KJpoEwNR@}7wu0Dvj-QHmy#0CCYi@cnjLr5QC377FE0 zjD}lQ62)`hbJ``vey6UtcL8x90Bt<1>RtO%7_HEyZEBv^zZ?G+n5X4P=gOC*Q(e*EcC^X2Tv zYjkud@QXhe2lW5BEdlacPyd=SGjn(A&Fn4711aF2!7aksULaJ}#&x2STjxrdoW_py zx4Zpbu759-t5c;Obv#NGg-gH@a)Vz%f6RQ1|#)%>lTji zx>|zU-}x-tA(*caaGl5`2F-4x{uwWWr{90y3wQLRH}_@}+emH5;VeO)`F$i{wu@oG zT74baJs&mo-vy$QVAv~)n-p3t(Rtc}RA`L1BeGW<=2K>-VvH*mHtTb548d@m@n-Te z=U16JMs_{$unft3z27V_1Ovhc8eLbB{a0i#NB@X>@xGY}g}yTPzBnweRSgeL{xFIT z)^-5%!NC2lZhZF+|G}8-S?az}BJ znvvssP4of_c~Ve7LCp`o5MSE=wZH}0<{-KonGgmrTDmH6T;E2WECEN_~8I zRP0VATd=SoMyY5K0mmP>0FF2jPW66$rTG* z2HYUJ0WY0hUf^*noZgWgd7v<>+%I#_k(;m~Jsku$KUxS<)e%u+5b64OE%RnXc7b7; z>I|<81GiK$hBwuXI4kfCVz*05rirB{#4s=9OrMDzXFcL!Hq8t6@z+H|L+Na=>>1IA z44ZXk2hctuxxQD?EAUSWOI^gqvU}4;3Ir`B^g`z2F?< ztY5o?(EcMxKs0r_eYgz`ekr1Ac$5fh#0xeq_xcX0jj`aNMqS=Yt9n zJ{?$$#*B0_E++{43iMg2u_<|9=IP3%g7kYYZl<=(+gKjd)jw?y5u^eD0Fl>!)COVf z%D5kQg`*8)N(5mHMveIqNMDURj|>2NedGNO|HdnqPc94H3bCk!N1H)mB8)|vovmo9 z#HN(l;sH)@6$j<6GyIs>DK~wW5NlMs-#)h@+uHOdzspDTJsCn7MX~{GT3f}Tcclo> zH&M-v^H#!CqKhQS-6%$Hg?r?w1S;$-=d`hfO5GJoLcxmnktEZa2rA$O;iI2eO6eH@SJ9W)S8}I1ue7b-wgDv6C9jW7~yzI;H z$<+$4L|QmwI zWuldVfuUy0XR_@pWWtF;p^f44;cc%N@z0Jzpu>!xlMVb%)vMGW;vx4Ymt(Dr6mYI9 zEaq7|7zqN26ncKnMTH%By>ecHGYR2E#r6ON`3a)zem7H1LR$>Ng>>&->Q-g-9T*Yoy$ibjsj~#3d0t?(nol9c9 z&phyJm!Ck;4aW$`lIrEotCL&{(9ZQ$AFAS~!lWy~gx&!!7uW-B+smpc!^rkI5Tr?U zL~0~&iC zY|lgi6r?FeKj3{2aJntyvZ0^1a>DML*u%~WiGDgOL+HnO#CYd7w=l`tv14)Dq_5IO zY5B!cAIc6LGsYW8v&RneAI!G9q}M^*7wBgvpm?Evr@ z+_BU^AuPdR%Zswy(8f9b*|e0zImRFpue~3olLaoYqWKYPHFL z0Ylkfv@ud6t`lKZp&=FHsN3Z@6Nnit%+&tjFj@^KCDKd~|(Vog14nABm^ z{Z%}iDZiGu`aLsedL8CwkKJk@5?Mr@6CpIoB^zNRLc=3gu0bx#Y0TU#x*08otTvB| zf5C4Y{hpv6nF$D9#pZmmG3_2?_aII%`X!2A^d7&;}P_9Tb~d zfu;9~7b92}VgU8k!joR0j_XAy7YuF?C$G+3>(FzxV+UGN52x)++$e|dJMi(6K)m__ng?9KWZBFrKhM0kgUO>%SeaZx-_sR)8bA-vu2=#%DvY>CQ zF%H9Y6S-!prW5;!2tY(0rh^y7E;E|XBa;xaUvdeMU!SjZHVpi-%eA)c3O?DQseXf6 z-#k;1?^Mr>{IHedY1f^h7jbwKW7Vqg>PuHY_Qf#7O=!>gRYMJtsK535u~oaM%@5<3 zbkc1&MSl^PPH)bG>1TroSM@$QuXYUR?s+{FXfcR-)3KbaNm;*qVtRH)@Pc|DrJY@7 zsd%n#Z2lT|T|oX1I%=1kzZAhDHv3RdRV$4I2#QV_EJGG-#+SDHLSjb3-wE%zN; zpYos7crh$-pjZ@9&btE81eERqBbv@szKuyitmE#L_RHx+2-eDpSIIwpRR0X`+#R5W z%wnNGtZ7oenaPQf6wvxihr_M4(AHA?HHngOu_w9S!@M1chpRrh$fWTs$%A;WHG}Qs zqI(X$zN*>vGk4N~<>H%i3{<|uF-P3s%%`Iu_v0rWFIKhp z1brX&09*c%cGA+|>5Zw=fM;H?K&$41e?1*NdO}F?L0G@D=Kq6S!n$8PK?uuQqdeMCE3x3x}_qmP>T$(H%~Ur;aki*X@M_ zEZ_qL^JATl(AoD1ddu>~ix;AF3Eu}?4^e|T;P-ER4_zK8P9w3Yox&Y^pS$Xo9|Z3B zm66l-0qQiL>N{L`c-sfG3IKp{f&e(Fz(}xuOk^MW06A8A+AF~z%1F3E@NxE`~>Z>5iEW8OjR2vS}Hk%**dI+9}~VKa|@3J54AT9a5SA*8Y1NuE*M2yC&=wg~;%= z{wZAwb33^KV%wFYF*KTD= z6~|w89Os1IB`}{%M1Q{(+~yCoQY#C+9I~clmvp5l-G&=z26(xMJOF^;yw(#ZuWsA- zt|vY;Vt{r0>>d6(+JSHJ9q|3s z588n;iqQfvKURtZE-akr)^K8fPrnV?N!9t=L?O(6dV2sJqxi6NS2@_~xt7Usawx zT?30W_l{_`>DY+43>UL{FMk_OsjkOoxykbU6<5&iYV%NSPqs~ckjgpQ=PcDP5MeoL zgnlN(!Y;vOc0ndEJ-|i_!Uq8G4KFsv{(rA-K#p>{n1GA7fi1c4}{6_i0W@AP?NJPO)bsVnp>rEilynaIk6nG(>SM5iwmeFS40)u z&JrjrFPUXr`h|2l6-p4g2zyGxI}%VG~L6x)Q`h z;j6d4vB8f^)eK^J9bLokw9}C|HyDVNI)b_0vq=TVnseQ~=+AcCE zgNR~oOQs!u80s|7ro13|OlAa(g3UD2SLh*hhzgEke}pQ;KPDP&alXPSiKEjDdBt%v zYK0lqv%J=Q^?7?2fTZW>AuyrIf+Ua4hW#(#G<|!00E~}F0rnQY zB}`8_#t46_Xv-jl-`UJDZ&D_-H1o5k5}t);dfJ&TY zv~+vyx_s@=Rg~~%+HCZ$+P}@$fB<2KITdHei$4&c_}gJIWhzlr)}&8iojF}>YlFQA z7I>3VoO{mx#>4kDRw|p%dDfM{O#%Qp8W=KWy2eBB>V<(Cguzf5@ z{rI=&jdhbDmnK5%){YvM&dfGD4qmXj!k>SP5&r=4xpOLni5ULm7^S+NMvU!$=|QOt2rqB6LguXrAs%LI zQ%ckP0bkg9!U3;36X$$j67tIy#MwU zxtOiKLX9pjME(D18xj5Kg+Kk(_yX@lwagwKC z2V|nIE4Db(`M*n&P7njyWiQmkV(Y zOYRLj!Ieddj>ZbES=NuJJ>`YKz0O4zK$MrT|>rxEtMMNh% zxh6Ennp-N9NYw$Q>V(Pb-0j!XajFguki!UW>q~U3XNFEz{xVs6!a2LIxnE8~SIbk{ z5W(0>*9WFiS3?!+VuYp34|l-#+UqHUwCiTMXS7v;o&%n;PSP0Z2s!|ks~vN1R68xo zAb{Lk^Izv`Y6XYfi^0XW4XMx4yh7jLu}ALPszqy$lo)+C80}Z^H9LZh)ttGZr+GcMm6HdLir^A`&j}Vp z5I*o5-K(J3f`fQ^t0DEmDrIaol$lj;t{d0>8mcG5r>W#)-a=&Taua8P8_Edd z9xHm94LYchR(|LNFFH%mnbvvQmWCN+m)8e#En?&X=1OKw{Tq_2-@05KBIou91Jn;5 zj$Lb?uv+8@#-I0SVt#g*DwpxbModxASe4BAXOp|Qm+v~A6G-cNo<7i+>a2k&2A?Wk zilT}LmXj>*?oC@G5LZtuI1pYrG>;nkK{5gMQ`WzCv3GAlOY@9rC0!w#TXjnW+Yg+J ze~K-gPEG-8;YPfPK4J*Nj*oDN`@C%=QhTcliHfpYj$GY?ri8mOo52QM%8P6Meg~vN zD>I;}^P1SMo04)h>1puMT!xhll(OSitr&1Cnl zo(pZ#M{nJaYI(R2DP`{kcgulvzSEL4EYf=t;TJnG4f@!I8zku1yZ~3GW2e1XTGI9S zFE>9W+N-k@lVRTxdvfpclg^nno=JL+{^DH#qG%+{zBatiGPe;mF*ZR3MHOVMO||{) zLTpO*xN+PTU09Gef#I8m`fX+|UxPFUmWY9PNoty&4V&3m!Wy`96XQ=240ZsBmcS+M zC4;)Kf-i`rgz5yp7K>)Q*)>QU(n(BFFcJ#&7Bm^4cmCS=Ym+KUub=7sj-hk(d9`Yj z(#)kmN%hBE5fS?*lI#UN(H~;y@(NkgeW1yYTSEx-|)>N$oGV3E0=~v`6 zAO2HywI>o6!aHeSXe(Rtzgi5?o}4e_z2+edV1F9xOEABZme#qAL}aXs-OKA%$9Egc zqXs%1thbUKAF#Dnu5b+$YpZKJ^l6GMW}DOC@5|A0DA^YnAV=)tR3>FA>Rk$ss{3Sx zoM6}EQl<5&N0_D79LaN){o1m=#tN?M2>LN6i==I<6ptv z2n=rjlyWNjjH>zT<--;vAqd?fyggp>deYiVSsUGVpL`|h>xTN^@5?{po#os@*Ujt3 zGsgD=7Mda#WY@h-q|?Clw=v{OVwggRgtj4vam#q|%BsL=7Z8JzBiqx!%6G!N*hWnL zO`J_Qz#jvFGv_>B*sEF|Uha>x)YLX~ni8&Ign96$uKJo@Eo!M5#|!mNIj|6u;m4Ye z%@!;Hb?_z{LVq!mPD#kZ1!2pi)_BIsx?*WT-I_-WOIPvW%&XQ7eu7aD2{{Q8T)FU0 zKn*Sr%x`LPqdc~F57lItt!Phh--G2 zKJN&^bOphTXMYn0tH7eVc*R!nNb?pk`?t3k#?Bdp^JvN6TtO;EjFHX`uMUW2C!M~j0%H7rNF21{swu`aP~5IF-`N(5)~|kz*Hh6=jUr)sOH~U_3Y~HceVMy; z@O!7x#GShdYo%#MExk<3#BY`VH%G_MXKn>eM;$pfWIdcgCN_PxfR^9e_Xty6tlp%- z9^TV*ZV?7tC+K2&QVt2Dq?&wQ*$XqV+*8#^8{f7Ra+)AEw|gy0VVASgs|qB@;XFy>t;SR>Q`=gJfvq=huOnbu36Ox}N?4?Z|bQ7+ghUf7MUc zNA`w|h+ByQcQS9tauP{@1o?yf7LPKwKHn{Gn(Pi~Uhsk5{DO$WDrdG2Il|RBjM-29 zr~*3_n0cvJp(~fc&XIqosyEC=7L)2k;K{alOvVx|nLnG{(w$5#gy;{qVrNduUp{Czc=r<2r8K8e>o^^E0IZQoASsSL6p>m}7cLR#IGV zGpRh8=ci8RhR-n1XTMI8hL_}m|-N9JTRX(vg#}g$7$U+|-aBW@UX4^Mh2GQ*Hz| zkaC~vt}z@fuSv5t8v{t9!0@HEiX3Z%fSNH4fvy>Xk@XV1%Q5G8_;= zCQ{=jZZ%U<|H;H9ZpaWi&ofHIXxmfUP<(3%mq*Gf{9a=%OAchM;}uzbTUd>so2cue zErLcVCXz02?dqr?-j?7nqUZkcM#B>TGLZ=7R75Q;)7%m^soZ7v%NoMHm)*)Q4VaGLP1j)&6 zFBNYML;!5g4713`lGc0^H?P3IL5BYsN=ud9vBpyO@H`2$RVEr$L(Zbr{70AODh4B3pT~=A*ot;rIbXuHx-NAK40$WK9|cdHP=&eKe&Y7zx6xcS*r;GYD|BY z4N2ZOCnhl}`2@vKGZ}Ix;wAj?Py5)37B`Eq+E+VAi_)qSIaK zd>;Tza2#(G{Y)_vEn8i_%74u1TtC>e`kMDi3{)9hNtznR&zu+NG^2w0%rfxeWX(V; z7vEP6#^I3VN7WUE{v_#F+-;|S8oC*8D=Fe$jcqhtl!-`c^*|hJ&>gx#!{_wz2|^Jx z0G+gAh%hP%E4Rm00R!^fh5Y(pcDe;a{M94wB|&0Hp+nw+QR>yD!$({uXTtDrZ>|3+ zmK@yKnb|rUpumm8c^G_zo3!JMRNSg}2lS(39<)d*yx{He;$lM5X zIMY8YVhS?(2&8AB(6oOk|DC`{rA)pVL0hi$%bH%R^)iYz4QTV@=L!#$mm42#JYynK z%nJ;SYGX~;CDOucL2#9C?qC$`+%|p~XPI@%y!bNzoJr^LM?e@lhdYOA*ECJmS0N^U z@?yWB6mN3b=ukDs4<@}OT7Dn$^#|ImA3RYZn7IDh_Wv$xg}l;XAweTR{Tw5|)%aGi x&t%Q+>RH3rJRXJkkml1#$Vb;dDVX^N(X6@PN+we~H~2S7!)wwW@Lx9k{{VA_(f9xW literal 0 HcmV?d00001 diff --git a/guides/unlock-ravendb-genai-potential-with-attachments.mdx b/guides/unlock-ravendb-genai-potential-with-attachments.mdx index 7bc3be717a..67a4c2a96e 100644 --- a/guides/unlock-ravendb-genai-potential-with-attachments.mdx +++ b/guides/unlock-ravendb-genai-potential-with-attachments.mdx @@ -1,10 +1,509 @@ --- title: "Unlock RavenDB GenAI Potential with Attachments" -tags: [demo, csharp, ai, document-extensions, attachments, use-case] -description: "Read about Unlock RavenDB GenAI Potential with Attachments on the RavenDB.net news section" -external_url: "https://ravendb.net/articles/unlock-ravendb-genai-potential-with-attachments" +author: "Paweł Lachowski" +tags: [ai, document-extensions, attachments, csharp] +icon: "genai" +description: "Feed PDFs, images, and logs straight into RavenDB's GenAI feature. Three worked examples: image vector search without an image model, attachment-aware support triage, and PDF resume screening." published_at: 2025-10-08 -image: "https://ravendb.net/wp-content/uploads/2025/10/unlock-genai-potential-article-image.svg" +see_also: + - title: "Gen AI Integration Overview" + link: "ai-integration/gen-ai-integration/overview" + source: "docs" + path: "AI Integration > Gen AI" + - title: "Generating Embeddings Overview" + link: "ai-integration/generating-embeddings/overview" + source: "docs" + path: "AI Integration > Generating Embeddings" + - title: "Vector Search Overview" + link: "ai-integration/vector-search/overview" + source: "docs" + path: "AI Integration > Vector Search" + - title: "AI Image Search with RavenDB" + link: "/guides/ai-image-search-with-ravendb" + source: "guides" + path: "Guides > AI" + - title: "Beyond Text: Adding File Attachments to RavenDB AI Agents" + link: "/guides/ai-agents-attachments" + source: "guides" + path: "Guides > AI" proficiency_level: "Expert" --- +import Admonition from '@theme/Admonition'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import CodeBlock from '@theme/CodeBlock'; +import LanguageSwitcher from "@site/src/components/LanguageSwitcher"; +import LanguageContent from "@site/src/components/LanguageContent"; +import Image from "@theme/IdealImage"; + +## Highlights + +* RavenDB GenAI now works with attachments like PDFs, images, and logs for richer AI context. +* Build AI-powered workflows like image search, support triage, and resume screening directly in your database. +* Eliminate external pipelines by bringing AI processing closer to your data inside RavenDB. + +RavenDB 7.1 introduced a major feature: [GenAI](./survive-the-ai-tidal-wave-with-ravendb-genai). It is a highly customizable feature that brings AI directly into RavenDB, eliminating the need for complicated scripts or external orchestration. GenAI could enrich your documents with AI-generated data, based on the prompt & document context. You could automate labeling, generate summaries, enrich documents with metadata, build intelligent workflows, and more… + +All without writing scripts and code that keep things synchronized. It was a big step in keeping AI closer to the data it operates on. + +Some real-world use cases were still limited, though. GenAI could only see the document content, not its extensions. If context had been placed in an attachment, like a PDF or a JPG photo, the LLM couldn’t access it. + +This changes now. With the latest release, RavenDB GenAI can work directly with attachments. PDFs, images, logs, and more, can be passed straight into the model, so the AI has the same context your users operate on. If you keep your files outside the database, [remote attachments](./using-remote-attachments-to-cut-storage-costs) work here too. + +Here is what you can hand to the model, and the method you use for each: + +| Method | File types | Example use | +| --- | --- | --- | +| `ctx.withPdf` | `.pdf` | Resume screening | +| `ctx.withJpeg` | `.jpg`, `.jpeg` | Image summarization | +| `ctx.withPng` | `.png` | Error screenshots | +| `ctx.withWebp` | `.webp` | Product photos | +| `ctx.withGif` | `.gif` | Animated captures | +| `ctx.withText` | `.txt`, `.log`, `.json`, `.xml` | Log and trace triage | + +Each of these takes an attachment loaded with `loadAttachment(name)`, and you can call several of them on the same context, so one task can reason over a screenshot, a log, and a PDF together. + +Let’s look at three examples of how we can leverage this feature. + +## Image vector search without an image model! + +Image vector search, in short called image search, is a way of finding images based on their actual content rather than just manually assigned labels. What it does is it first transforms images into their vector embeddings. This allows users to search either by typing a description or by providing a similar image. + +In [a previous article](./ai-image-search-with-ravendb), we demonstrated how to set up image vector search using a script and an external image model. Now, thanks to methods like `withJpeg` or `withPng`, we can do that in RavenDB without the need for a model that supports images. You can generate an image summary, vectorize summaries within the text model, and enable semantic search over it. + +### Generating the image summary + +In our RavenDB database, we have a collection called images with such documents: + +```json +{ + "Name": "Gravel Bike", + "FileName": "bike.jpg", + "ImageSummary": null, + "@metadata": { + "@collection": "Images", + "@flags": "HasAttachments" + } +} +``` + +We want bike.jpg to be searchable not just as a bike, but also by its appearance and meaning. For that, we want to create GenAI to generate a description of this image for us. We do that with the following code: + +```csharp +var genAiTaskConfig = new GenAiConfiguration() +{ + Collection = "Images", + Name = "GenAiTask", + ConnectionStringName = GenAiConnectionStringName, + Prompt = "Describe the attached image in one short, factual sentence. Do not invent details.", + SampleObject = JsonConvert.SerializeObject(new { ImageSummary = "A concise factual description" }), + UpdateScript = "this.ImageSummary = $output.ImageSummary;", + GenAiTransformation = new GenAiTransformation() + { + Script = """ + const file = this.FileName; + const ctx = ai.genContext({ Name: this.Name }); + const att = loadAttachment(file); + + if (file.endsWith('.png')) ctx.withPng(att); + if (file.endsWith('.jpg') || file.endsWith('.jpeg')) ctx.withJpeg(att); + if (file.endsWith('.webp')) ctx.withWebp(att); + if (file.endsWith('.gif')) ctx.withGif(att); + """ + } +}; + +store.Maintenance.Send(new AddGenAiOperation(genAiTaskConfig)); +``` + +This code snippet creates a new GenAI task that summarizes document context (product name and image). Then it puts the summary inside `ImageSummary` field. It supports multiple types of file extensions as well. + +### Vectorizing the summaries + +This gives us descriptions in the document. Let’s now vectorize the summaries using the [Embeddings Generation Task](https://docs.ravendb.net/ai-integration/generating-embeddings/overview). We use this script to get the embeddings quickly: + +```csharp +private static void InitializeEmbeddingsGenerationTask(IDocumentStore store) +{ + // 1. Register AI connection string (to OpenAI in this example) + var embeddingsGenerationConnectionString = new AiConnectionString + { + Name = "openai-embeddings", + ModelType = AiModelType.TextEmbeddings, + OpenAiSettings = new OpenAiSettings( + apiKey: "YOUR_API_KEY", + endpoint: "https://api.openai.com/v1", + model: "text-embedding-3-small") // use 3-large for even better results + }; + + store.Maintenance.Send( + new PutConnectionStringOperation(embeddingsGenerationConnectionString)); + + // 2. Add an embeddings generation task + var embeddingsGenerationConfig = new EmbeddingsGenerationConfiguration() + { + Collection = "Images", + Name = "EmbeddingsGenerationTask", + Identifier = "emb-gen", + ConnectionStringName = "openai-embeddings", + EmbeddingsPathConfigurations = new List() + { + new EmbeddingPathConfiguration() + { + Path = "ImageSummary", + ChunkingOptions = new ChunkingOptions() + { + ChunkingMethod = ChunkingMethod.PlainTextSplit, + MaxTokensPerChunk = 2048 + } + } + }, + ChunkingOptionsForQuerying = new ChunkingOptions() + { + ChunkingMethod = ChunkingMethod.PlainTextSplit, + MaxTokensPerChunk = 2048 + } + }; + + store.Maintenance.Send(new AddEmbeddingsGenerationOperation(embeddingsGenerationConfig)); +} +``` + +This script sets up embedding generation in RavenDB for all `ImageSummary` fields from every document in the Images collection. The vectors don’t land on the source documents. RavenDB keeps them in a dedicated [embeddings collection](/7.2/ai-integration/generating-embeddings/embedding-collections) named `@embeddings/Images`, and the `emb-gen` identifier is what ties them back to our index in the next step. + +### Indexing and querying + +Let’s add [vector search index definition](https://docs.ravendb.net/ai-integration/vector-search/vector-search-using-static-index) that uses our task, which we’ll query to get semantically relevant results: + +```csharp +// The entity behind the Images collection shown above +public class Image +{ + public string Id { get; set; } + public string Name { get; set; } + public string FileName { get; set; } + public string ImageSummary { get; set; } +} + +public class ImageWithEmbeddings_ByImageSummary : + AbstractIndexCreationTask +{ + public class IndexEntry + { + // Holds the embeddings produced by the 'emb-gen' task + public object VectorFromText { get; set; } + } + + public ImageWithEmbeddings_ByImageSummary() + { + Map = images => from image in images + select new IndexEntry + { + // Pass the document field to index, + // and the identifier of the task that generated its embeddings + VectorFromText = LoadVector("ImageSummary", "emb-gen") + }; + + // Vector search requires the Corax search engine + SearchEngineType = Raven.Client.Documents.Indexes.SearchEngineType.Corax; + } +} +``` + +Deploy it once with `new ImageWithEmbeddings_ByImageSummary().Execute(store);` or let `IndexCreation.CreateIndexes` pick it up on startup. + +And finally, let’s write a query: + +```csharp +using (var session = store.OpenSession()) +{ + var results = session + .Query() + .VectorSearch( + fieldFactory => fieldFactory.WithField(x => x.VectorFromText), + valueFactory => valueFactory.ByText("Bicycle"), + minimumSimilarity: 0.70f) + // Project back to the source documents rather than index entries + .OfType() + .ToList(); +} +``` + +This code performs a vector search using our freshly generated embeddings and returns the matching document. + +Vector search query result returning the matching bike document + +And doesn’t show any of the other two files: +Query results excluding the non-matching image documents + +This way, you can achieve **AI image search without an external image model** for generating embeddings, saving you a lot of time and resources that you’d need to spend on incorporating a new AI model into your system. + +You can extend it by adding logic to filter the results further before returning them to the user, or adjust it for the scale of your system. + +If you’d like to see how to use an external model and add image-to-image search, check out our dedicated guide on [AI image search with RavenDB](./ai-image-search-with-ravendb). + +## Support triage that understands attachments! + +Handling customer support at a large scale often means digging through long email threads, screenshots, and logs just to understand what went wrong. A single support ticket may contain multiple messages and attached files, like error logs or images. Manually going through all this takes time, *especially when a company receives hundreds of tickets daily*. + +With RavenDB and GenAI, we can automate the first step of triage: summarizing the issue, estimating severity, and assigning the ticket to the correct team. This doesn’t replace support employees; it will help them prioritize tasks more efficiently. + +### The ticket document + +Let’s say your Tickets documents capture conversations (maybe not that exaggerated with details from the customer side… 😉) like the one below: + +```json +{ + "Title": "Timeouts during checkout", + "Emails": [ + { + "From": "customer@example.com", + "To": "support@company.com", + "Date": "2025-09-19T08:42:00Z", + "Subject": "Checkout timing out", + "Body": "Hello, I am noticing that the checkout process does not complete and the loading spinner continues indefinitely. This prevents transactions from going through.", + "Attachments": [ + "checkout-error.png", + "browser-log.txt" + ] + }, + { + "From": "support@company.com", + "To": "customer@example.com", + "Date": "2025-09-19T09:10:00Z", + "Subject": "Re: Checkout timing out", + "Body": "Thank you for reporting this. Could you please confirm which browser and version you are using, as well as any relevant network conditions?", + "Attachments": [] + }, + { + "From": "customer@example.com", + "To": "support@company.com", + "Date": "2025-09-19T09:25:00Z", + "Subject": "Re: Checkout timing out", + "Body": "I am using Chrome 128 on Windows 11. I have observed that the issue occurs when connected via Wi-Fi, but not on mobile data.", + "Attachments": [ + "network-trace.json" + ] + } + ], + "Summary": null, + "Severity": null, + "OwningTeam": null, + "@metadata": { + "@collection": "Tickets", + "@flags": "HasAttachments", + "collection": "Tickets" + } +} +``` + +We automatically fill in three fields: + +* Summary: 1–2 sentences describing the main failure +* Severity: Low, Medium, or High +* OwningTeam: [Network, Database, Backend, Frontend, DevOps] + +### The triage task + +To process it all, we use this GenAI task: + +```csharp +var genAiTaskConfig = new GenAiConfiguration() +{ + Collection = "Tickets", + Name = "GenAiTask", + ConnectionStringName = GenAiConnectionStringName, + Prompt = "You are triaging a support ticket. Read the conversation and every attached file (logs, traces, and screenshots) and return: Summary (<= 2 sentences), Severity one of [Low, Medium, High], and OwningTeam from [Network, Database, Backend, Frontend, DevOps].", + SampleObject = JsonConvert.SerializeObject(new + { + Summary = "Short summary of the main failure", + Severity = "Medium", + OwningTeam = "Backend" + }), + UpdateScript = """ + this.Summary = $output.Summary; + this.Severity = $output.Severity; + this.OwningTeam = $output.OwningTeam; + """, + GenAiTransformation = new GenAiTransformation() + { + Script = """ + let SingleStringEmailsInfo = ""; + + for (let email of this.Emails) { + let emailInfo = `From: ${email.From} + To: ${email.To} + Date: ${email.Date} + Subject: ${email.Subject} + Body: + ${email.Body}`; + + SingleStringEmailsInfo += emailInfo; + } + + const ctx = ai.genContext({ + Title: this.Title, + SingleStringEmailsInfo: SingleStringEmailsInfo + }); + + for (let email of this.Emails) { + for (let attachmentName of email.Attachments) { + let attachment = loadAttachment(attachmentName); + + if (!attachment) { + continue; + } + + if (attachmentName.endsWith('.txt') || attachmentName.endsWith('.log') || + attachmentName.endsWith('.json') || attachmentName.endsWith('.xml')) { + ctx.withText(attachment); + } + if (attachmentName.endsWith('.png')) ctx.withPng(attachment); + if (attachmentName.endsWith('.jpg') || attachmentName.endsWith('.jpeg')) ctx.withJpeg(attachment); + if (attachmentName.endsWith('.webp')) ctx.withWebp(attachment); + if (attachmentName.endsWith('.gif')) ctx.withGif(attachment); + } + } + """ + } +}; + + +store.Maintenance.Send(new AddGenAiOperation(genAiTaskConfig)); +``` + +### Running it + +Script automatically fills our task: + +GenAI task filling in the ticket's Summary, Severity, and OwningTeam fields + +An interesting and important part of this GenAI task, being precise, the source collection script is: + +`SingleStringEmailsInfo += emailInfo;` + +It takes our email content and puts it into a single string. This makes GenAI treat all our emails as one and not three separate messages. We do it that way in order to summarise whole tickets and not just separate emails in one go. + +Before the task, our document had three null fields: +Ticket document with null Summary, Severity, and OwningTeam fields before the task runs + +After task they are filled: +Ticket document with Summary, Severity, and OwningTeam fields populated after the task runs + +```json +"Summary": "The checkout process is experiencing timeouts, specifically during payment requests, which leads to a 504 Gateway Timeout error.", +"Severity": "High", +"OwningTeam": "Backend", +``` + +All that is left is attaching this to your own frontend. This way, whoever opens the ticket later doesn’t need to scan the whole conversation - they get the essential information up front. + +## Resume pre-viewer with PDF attachments + +When handling incoming applications in large companies, a common problem is dealing with irrelevant resumes. Simply documents that have nothing to do with the role. Manually opening every PDF just to discard them wastes valuable time, especially if you can have hundreds or thousands of such files. With GenAI, we can automate the first step: checking whether a resume is on-topic for the advertised position, giving context to recruiters. + +Of course, we are not using AI to make decisions; we are simply filtering completely irrelevant profiles. Ultimately, **you** are writing your scripts, and you can modify them to suit your needs ⚙️ + +Just as with images, where we can attach files and let RavenDB process them, the same approach applies to PDFs. In this case, the resume is stored as an attachment. Then it’s used to generate a simple decision: + +“Does this resume appear to be from a candidate for our role, or is it completely irrelevant?” + +### The candidate document + +Our database contains a collection called ProgramManagerCandidates with documents like this: + +```json +{ + "Name": "Jane Doe", + "ResumeFile": "resume.pdf", + "FitVerdict": null, + "@metadata": { + "@collection": "ProgramManagerCandidates", + "@flags": "HasAttachments" + } +} +``` + +### The screening task + +We now configure a transformation that takes each document, loads the resume, and runs it through an AI prompt. Let’s make one just for the Program Manager role: + +```csharp +var genAiTaskConfig = new GenAiConfiguration() +{ + Collection = "ProgramManagerCandidates", + Name = "GenAiResumeScreening", + ConnectionStringName = GenAiConnectionString, + Prompt = """ + You are screening a resume PDF for a Program Manager role in a large IT corporation migrating between cloud and on-prem data centers. + Decide if the candidate fits. Base decisions ONLY on the provided resume. + """, + SampleObject = JsonConvert.SerializeObject(new + { + FitVerdict = false, + }), + UpdateScript = "this.FitVerdict = $output.FitVerdict;", + GenAiTransformation = new GenAiTransformation() + { + Script = """ + const fileName = this.ResumeFile; + if (!fileName) return; + + const ctx = ai.genContext({ + CandidateName: this.Name, + }); + + const att = loadAttachment(fileName); + ctx.withPdf(att); + """ + } +}; + +store.Maintenance.Send(new AddGenAiOperation(genAiTaskConfig)); +``` + +The script first checks whether the candidate has an attached file. It then creates context with the candidate’s name, while the target role stays in the prompt. The attached resume is loaded into the context with `ctx.withPdf`. The AI runs the given prompt and returns field: `FitVerdict` (true/false) - whether this resume is relevant or not. + +ProgramManagerCandidates document with the FitVerdict field set by the GenAI screening task + +## Summary + +GenAI is a highly customizable feature, giving us nearly unlimited options; your imagination is the limit. If you are interested in more AI features, we suggest looking at the latest feature: AI Agents, covered in [A Practical Look at AI Agents with RavenDB](./practical-look-at-ai-agents-with-ravendb). Agents take attachments too, and [Beyond Text: Adding File Attachments to RavenDB AI Agents](./ai-agents-attachments) shows how. + +Interested in checking what you can do with this feature yourself? [Download RavenDB](https://ravendb.net/download) and [grab your free developer license](https://ravendb.net/dev). If you want to share any of your awesome ideas that use this feature, or you have questions about it, join our [Discord Developers Community](https://discord.gg/ravendb). + +## Frequently Asked Questions + +**Which file types can RavenDB GenAI read from attachments?** + +Images through `withPng`, `withJpeg`, `withWebp`, and `withGif`, PDFs through `withPdf`, and plain text formats such as `.txt`, `.log`, `.json`, and `.xml` through `withText`. You pick the method per attachment inside the source collection script, so a single task can mix screenshots, logs, and documents in one context. + +**How do I pass an image attachment to a GenAI task?** + +Load the attachment by name with `loadAttachment(fileName)`, then attach it to the generation context with the method matching its format: + +```javascript +const att = loadAttachment(this.FileName); +const ctx = ai.genContext({ Name: this.Name }); +ctx.withJpeg(att); +``` + +The bytes travel to the model alongside the JSON you passed to `ai.genContext`, so the prompt sees both the document fields and the file. + +**Does GenAI work with remote attachments?** + +Yes. If your files live outside the database as [remote attachments](./using-remote-attachments-to-cut-storage-costs), `loadAttachment` resolves them the same way, so the task script does not change. + +**Can I do image vector search in RavenDB without an image embedding model?** + +Yes. Have GenAI write a short factual description of each image into a document field, point an [Embeddings Generation Task](https://docs.ravendb.net/ai-integration/generating-embeddings/overview) at that field, and index it with `LoadVector`. Searches then run against the text embeddings, so a text model is all you need. + +**Can one GenAI task handle several attachments on the same document?** + +Yes. Call the appropriate `with*` method once per file before the task runs. The support triage example above loops over every email in the ticket and attaches each of its files, which is what lets the model reason across a log, a trace, and a screenshot together. + +**Where do the generated embeddings get stored?** + +Not on the source documents. RavenDB writes them to a dedicated [embeddings collection](/7.2/ai-integration/generating-embeddings/embedding-collections), `@embeddings/`, and the task identifier you pass to `LoadVector` is what links them back to your index.