From 3fbab26ecb46010b7688647a0a3b3f7c6ca812a5 Mon Sep 17 00:00:00 2001 From: Ib Green Date: Sat, 4 Jan 2025 14:47:01 -0500 Subject: [PATCH] makeOBBFromRegion docs --- .../api-reference/ellipsoid-tangent-plane.md | 13 +++++++++++++ docs/modules/geospatial/api-reference/image.png | Bin 0 -> 33002 bytes .../api-reference/make-obb-from-region.md | 0 docs/table-of-contents.json | 1 + docs/whats-new.md | 9 ++++++++- modules/geospatial/src/make-obb-from-region.ts | 4 ++-- 6 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 docs/modules/geospatial/api-reference/ellipsoid-tangent-plane.md create mode 100644 docs/modules/geospatial/api-reference/image.png create mode 100644 docs/modules/geospatial/api-reference/make-obb-from-region.md diff --git a/docs/modules/geospatial/api-reference/ellipsoid-tangent-plane.md b/docs/modules/geospatial/api-reference/ellipsoid-tangent-plane.md new file mode 100644 index 00000000..c5021255 --- /dev/null +++ b/docs/modules/geospatial/api-reference/ellipsoid-tangent-plane.md @@ -0,0 +1,13 @@ +# EllipsoidTangentPlane + +TBA + +Function to convert a geospatial region to an oriented bounding box using ellipsoid math. Computes an `OrientedBoundingBox` that bounds a region on the surface of the WGS84 ellipsoid. There are no guarantees about the orientation of the bounding box. + + Parameters: + + - `region: number[]` - The cartographic region (west, south, east, north, minimum height, maximum height) on the surface of the ellipsoid. + + Returns: + + - `OrientedBoundingBox` - The modified result parameter or a new OrientedBoundingBox instance if none was provided. diff --git a/docs/modules/geospatial/api-reference/image.png b/docs/modules/geospatial/api-reference/image.png new file mode 100644 index 0000000000000000000000000000000000000000..40584ce0bd5165143c937443c2a00bef0b7e05f3 GIT binary patch literal 33002 zcmV)RK(oJzP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR923ZMf31ONa40RR91_5c6?09o#{NB{sp07*naRCodGy$PIT*InOx?p|wm z&%S81ua>-FTb6B%G&Z)eF~%W05<`G&1n~PL0sL6)B!m|}5C{+mdEgg#A&(E?^9XCO zjlp(o$+m3CwqyxQvi5B>`}A5>x9)!5_kV9!b*YesbW0)05|;1+=MQcOuQY{5G~sSExQVK#Wv@P z&YqG}w59`GyM-pdGlj<{+cZiN@Nl-_pRPAS#V~HrS$a<2hNcWn)3e`#sf9@z#A%qS zICDVRnl@|enx-0IT8{>En7m9%(3Ms+_1z_VZ@I9$Sg1Pio2j(i+2mW@pTc8|77U`e z5x^h(W)RN1o*$=8C_71$mS?r~x2sIY(018+BT8K$l`2SIZp&`%zu(ja9*(YxhR%Zv ze!LhYyr`?hz5@ZCphX?37IzozgXLniVCz$;^flDDC#LY&pv8hPYy_d}`!zpY@_gu2 zQ(BM+D){wdm87fi$S&n%zg8xk;Bd(Z5(PH+7o`d&krO*Ky#duL_>2ND8^UAlec2w2 zrEF>kO7@o2mriY`nz!V+>S}BfWHwbFYrXPkYJ|YeSf6CY#q{@qgycyRa z?jTki0S~A=`zMWw%AFtP)DNZRn;=2{-xw14{UiRiiWjCt(b*f6p({&c6Dbayz>ek| zqf#gqY^&fDMRc2PqqV>k9&7Cs#c>lZ;Q1*nQntx;If8CoW#rZdadc^)Pbca zj90~d23<4b38$K|t*beQL0X5%;2KaE_yI}KC1?C3W%#B9;K9zkpPXt&U_&fXDI^GF zAWQB{d1T^%K{=rgd9lJ%M>24i@IB1LAgjouc${Ue4t`!P&@?Z#X`z^937SVtQT9lkRZ1~;uun^76Y*6 zN9kFgOWIWxbI#TwI8Jf{<2RQ;7ndMPE?vW&6&g{0!y~9+*lY9lFzfX z5JT-&cnAf84U`R78Fe_`@k>BAG7_h1IZTcZt9AV58bVbYH=^x?*BQ;BftI3X;5iE(>^|b2l0*Q4~V0 zKE#^whj~ASNTB(Fk|f=Vf1Z3*xrGHVI7%*pe+aS z6U!lJX?ak?3!X{-@ci)f05cKwWn z6==gjxAnx@U+5D^Af$o4ML*89nzhRvdpY^?ih`lT%@CiE=%~*bakYTZRc^);)Nt*f zy9ACX2W%WD8ek&~R$Z3)Q+(TE5Eq)l{;+hl-6I`kbnV9Q+j?+0gXEHhM-Gg@Zz2mZ za^tOoIM6Gg3CvJ9G?09tcSH`bak3ddR||9hKo@~vr!uvhXYIX^Ds(sIh6se5M&W4c zLn3rnOQh@>TR&Jdcn@#lL4ZUhkpsCz4f{dcUl;D-X6jkC1YJmCosV%TH|d^f0@nmK zQnqk|=mi67HKv9B@>b6Pl14o+FH6P!5`+i9Xf_+3--I}z7&nqJyJ8tAvBWPi9^<}1 zSi<6jrwnQ8cq4kDPS|-b1wt@;3dYT|793_c@eHLZ3Z&SRE^p8LDMN3R3%nah0ASz> z7Er#k7%d51=_K)W%UCUkLcrDG63UXX)Gc4ZF-n$JG4)2~?ld(WO@?pd5QYOt_@ySa z1SdN`nf=QXB$t%#kpsi`n@|<30IJ48aRT=qPUTbvV?Y80K=jBSTtziM-He{EMg6)m z##|`u+A8jVvDpR`2Ae_=$7iyLAeR}JHl%Dw5NiQe<15R|?$A!U5gHI=N(t06htP(F zXRcD8o;ON8@HyH= zyHL6uobHznJcMI-bu3Qk-1A;swe^CozvM=>Kq5g1070C{ecre!Kn%k(E<9LA4>q6( zbP`cE@MiSUM-RF5A3{JV3&$EE*nn%bNwfdXfoFIjN>Rzu`2j2nc_a}g}TI^a_XqMcvN>xYdERLLn;z{$vFyp9^| zoZU+S9zj5uRK4cQNQvykP`kfiKw9TKiI{@G@Sq`AfC?A_<0Z}qG!5V(<9avgK~;x} z;$}wr+KeU+HsW+SNHBlpE{;u5LOx=5*J~5S2xVVcG7p!{Czk_QP-lUBCj9f7ip3xT zccH?xgS3>=W*rIK8d03obfZ|Bxr9B5I~yKIQ@-ae)Eh501Q-mrSeZ~2piu}43SbAV z8c7LSpUI+Fk$E5&_(ng);TGgspmnGuqF4V7>zv7GOANS(aPSSvXH@PY$#ot+Zj#eT00mX=ok&R zexeb=3UcWj*$LGaNI({7-bg9fY9L(t9^s0sjG@o0geTC}1wLyVpt`bRisot}{cr3w zTYFN>N(xnnF&O#eoF`NWUlNtN^QKMh15h}?Rxk#Y6Uu&lRg@XV0~9SdYFimW)4+H| zMKPKoNurX8&eMo$QF2w;qPa$?b^e(MWrbpe*sW0>*+KX0RCu6ioLO0UdL_)o2F5wY ze%hU2Bm^oXsOziJ!H_#Ts2irpOI$|gdA=U@#L@yGgm194zi9HvNJP=_ z6b=fclw4tGUBCE$`5Zn8d5Iwa0K?pt!x{=M)*E`7 z5gmI!K0lX+qiAbjmG;0^u-OIHX)3i#Jxl2Z0-(m0o8!w%ke`3jF%2B(sM3j=4D1(?k zELTK-K=h1*43ke}_c6L-=WRjEp@w+v&Nq{-Lz8u9quwhH)vl)OON0 z_`Y{+ap|e008*rr=u)~BrhyTb>3cAWW`s3UY*Q;?S~e6aI5FovBRbS@uw-Du0wJ)A zUbCslS zhLn>vW@kAxtc)DvZ_=P?(x@#WW!X+~`~tSu6FY``xXt?M<=SIQ#M=rRKw+T2>1JXI zIRqPzFNH-@-8^T{dkMoKQ})DO+1=Vab?dB+M1f2_HZroJD3MYbSu+U)^AxV`6v?Xh zO|ADrE$v~ub#C*2p;$g`mo2t93<=Z(#wa0V+3R~gw(~XAftmmhZagUNPBUj9o%c+3 zACtLVDDQMtWCw5$1gb`(UiX_Q;yE^uovy8zxpu(_x)6Yk04Ent@#BqnNkRZ+;%mPP}MKFjKE3qll8dMeDMy1--Lb*CzG-nG0XAy2MG{OA`T@~H3q;Poe3z9m01>9Kr9M{=!3JUi;FFx zMn;azjO9V(F>dRpPafhy2460&l2Xw6stwBs`)`>w$xuMs!FrKQjRs^v(1P`!-I~J2KQiMt;m-bYGY)DHnS+Li{^urnCW@0nsZ!i&UXkr6T)_g|#!4Le z$N?1=u2go6?SU=Se|{b6iFz;jc^H~M=U{`1sID8YY;1gm0< z%1mPYH(rD@U;{ad=ng}r6_sGIuFREk0DzEY&F3($mSvmFCJCB>Q!eBK2MjQivP5Ok zQc2^>c|y);2avHjo5U8IfKMSTE{UU3dG_MeU{fEk?cgEG#>yhbL3$Ky;NHNGfpfQ0 zC}PM*)_4_jMm0r{2&S81;9!`%e#S(d?Qa~gfgKEAVa_Cm7SZt}o_AiE>;3st9Tz9O z3t^*5p>@m|O7{gDZK^U5uN*V*L#JrxZ^dqa8!t@~@PiOV#MjwoOl(Nb0BHoi@`kD< zO3MJza>6wqTpZ38Q}>&09EO$I9ixhDFX0MotgI|*88%+1hxDuXbm`RYCI<|hqRSs! z3^1y8U+g-9z1%uy^V@kAKw#Z^t`@;JMx=5ou&1CCB2Mt{ql-Z z*cBLJZk=-ovg&Efv1_)42dE?(q+yyn1tHsrdw`9Fr3Dgk(6xB<;1Bzl$vSAfqlXz; zAye$C>vR_AI#?vr!WunLG9npKg9L!|IYrhfNu(4k#Yk}n3g#_y4v;_?gW>QBDx4Fn{;}$F=_r&ey3YmLQazwzuioS2S{XNziye!WQ*yYMiZT-z zX%K|?rjEl0yI)7;JBqu2yE5JxTIdB0wOF3nwapE_T~fydY^APOfsIFxopkh+4nEV2 z$Vfm((vwKuaEVS7K;kIn56}B_`TE%41&r>@7DT(C1nx$Z`rG-nAVJ zyBMU*5bXM-tsTf~#Ker-Ai*TnUl>8@=VVF=>*nMUE~~e|K$uDlLUIc?SjL?FnmrDS zC{Vv)8d`t(=k<(XNIv2)2;ABt`qFuQ*A@%E_}qiM=zn|cB$9p6VjYZx*+_IMeJOqn zqT(2~vBI=ANW2|a(mFTvFVus@_DE*nd9lv4kluN-L!a!sV91n13F0UUA6ngzr&dA< z)Wx<&Ra>XG`j;2Lqi{`Nr}g}>P!?9uv(Y%%36_HtyBzta+jU}mDbJPM6;~%DFvAs> z2twO?k=FM>N22Dr0lNJO@DIx}!Z41a$gMAyD!U{V@yOc=rH(80gi@bU>T0EaNU6gk zKRfP?7a1N5a!;N-gVwm4cqtO0w=D8>D&z((tSl)Yv^B_hcN)Zi=>N`1HtiGPnVYjXCEwH?RhDIKRF$-|^R1FHF z6<{w&p@bE7UWFC`mhbv$!ItpM3_GYs?B(v%&YREIem*r<7$EjsPfTrgmJ_A*K445& zV{OA_B?zhR&gNI#sZ&b*IisFZ|A$gPqSTKn`(=z^Uf|=)A=pDlA2t~E7qyu)1U361kT7j43JDA|Q34%)nNt}F zP6*T?-!YlzF!Cm-g7Jfjff3MUVGE_XE)Xylz*L*NT zMgG};SE(P~Och6cW+-WnTEJ%SYc$>Y<>kGlwQ+GkNyO@`nowm14|29h3S%NeTOMw-X$*y zb0={E4P-d|MQ!p7GL?kAICw2R*N1}zDx~K~js-LPdX%0pjAxwUL&d@~y73j;E~n{r zadcx8yeu((z_RZkcr=rma)A;~@*7J1F71;+<=bGe9o2dTK7fqd9PT(d!QG1kk0_2# zE-db1<*xz#yY_Y2RaO*`@N7C2p<*n_YOSCPyGOO5NZv_c*oasr44Da!y9<)cGxvf@ zba(Jn?4){OCUB65J+6fnj+sS zcCvqAdR|=|l-Q%AO7U^Sc&b#s+q4%n?Gu(mt*(!weNlXqN`5qKUej1PQg`7kSOrNK zQJvkZx272aj9*jgV;M8~9i`sX4UD|b0O?Mp?mlno$3=h#L&(Ybc>)9n4t_md1wqi! z@Q`IcSr||6=qc%f9_CWuh}d8(XYmbI1MCc(LA_>{L=;5r$PqpO(w9J*)&@Lq>=aAA zok+?B>_S-m4puFq{c)c&tI^SIK)Atx)GB$?f1lEgle+nZJbcZB#k;cc>%DJ+Fh(5PUufSu_W;EHL6<(b{5bmKoN_3KK#OQ}Cq>Sfu7 z53ABEmAdDWfd{6lGmG;{9G5y&4#-IUWvM=qk~>)n`&f!Fq2lx%c`P2*k{9T_KpIcW zXm5i`aA{`?Q%MW7hj!!>bXIq{S)N@h2%bdbGWf`Whr*3I1~ch^jCfJuTG)J*W*jQ8 zSdadkxLGCRBTubiD=QTtOo(-}TV2zh){UnO6Xw7Uc%Z=RqG*2--x0@vAqR#aq36}D z@07kabnMs1ZS7p4c)xBun8bgr8}C%=;f;Wi*ZMA{KD62TZ}?pAz_Z~4TfAXuWzqG5 z-DE<}3Zld4W88N9!_x;#5ydf6F?wFaRXTpBZ2iV(p^q#Apyv~y4>56~OvfS=bwt1r zOQJ*61faDC3<@DkhTKKSnKXt>dy@4S;;M<3A(>I@fi&ZM5M%y^D19R&(c3Gr6JsJ5 zO6=MwffPruWRhI9$hGT+o`W0=4DF8@#+ME2%N@)CdFgut?`OUG>o7#FxVB|7L#yZU z&cnQ@rw#Knri}*j<=tj6V=}KwqN~F26^8YfgJ__$g!cZ?O#L`X5Ka5k?SPU12{#utt!WZ-j^iWLbg$u&B_@7%Sl(tX;%lMwkY^RN$L0z5z&f z?gr_gLj#R$(C_^Y26*hb%xUQ)QQ8NqsD$P2DvL3zdxP12Z6UzY4NIkAC?9|U5)xC8 z1yp<{ae89eFDCK9y|@k5+h9ZaXqAuX&lu*5nhp}+59dh9gIOtwuaD!mL;?1t+oOsr1`1b;Fk2ngKR+d~ZDq4CHi*W{VQ)@J5c2@ualcaG=vnov{ zVkN|fGqugu6!sPtRobG%dxDL%xuT!|2n5|};NzK8BN6QJyKXU{50; zLur@d4$QL2TdQTFlaRBE$@JKTbAyMdD26&U@9v&0*nQ~AYXVz1t?N(gX3iYGlre{E zTg>5mf?no8CFvk6C0M`)eoKC`SSwck^IY+_s(iNd<5dvSc{3bi|DZ`{k}{029ZV69 z^-WRm3A^yl#)@f?u&j4z=qxSYKbqNm`_FIv%!PmlVQ014(sCnQX@(_TmL$S$1j{H9 zO=KA4&R`xn=6Pm|W6>u$9~6UxO*X1*TF=I7$85b7CR+l7A{#?8AA(emkvGe9Is_hB z3gAw?3MNCiA%n^8%*{+bPaNd11?;mqRW@YN5}55;f#UTuBz%)>bo(8>A{3=vHB%_~ zVZ#mVS;;pAb3j0PMmHZaO?LjqvT13|O5gzn`h9`-ue=7#fr-1kWgz+UMbsb~F63&b zb^EtV_WxB$$b1QkAIQfz??n z?5I+I4=Lk3s2}GY9x%;DeX-V*7*ezj=Iu$O4Hoe*!E2stPRNx zPcMh)Bv?Xr(1!fZ%tTR(B^pX*II>S1%sSqFxB!s>Fo#^iVT4A@dU{0$kW$6MokrU* z?*(QcItIgbs?a*fNY6OJBizr%FNM@Y5w#*WIjAS5X*_RR#|zF^%cV!kWhA9}UE*W` z!~RTj_`Svo691lV&0)i)=8ME~GUz_*!zKIwE$EMTQxv|-Uo9uQ)9{DgK@Y8-qyBsj zpHMBxEXX&T`a_0!#xVBBL}V?MtGkB0bM-9hx~DE?p=+>peX#6Ofd45(b+DZa5^ zg*QKGJO8#Kz!>7ZF4uc0hNx~5fRoE!$U9nNx9BBbOv|yfbB@2@<&P=Uj;wYY7hNf%*K*~_ubbg(O%krrHQCT zzCxUgVgZvfCbn$=jP`p#$d6W&tK#^spna}$2YnpbAz#`~GmO9s-(2$l#C4GtNmghaZzKA&wRk9p7-QPV{Of1FicFfP{ZE2wn)%gfhpGS(8jALE40= zK5K{?{j6?$(XbvX>woKr=5QbgXXE&wAASG)@||{ihvyONmqszue38`%^~JZyaD@2_ zg2RPU$n33#Winc=TbB(k>dzY19~8~Mv4?Vu{sKVAPgUIixs)Cl(5>`4AI<;*1EJ2$ zRJo(!{<~ef+r{{PqflIrf!vj;AE)pOwV#>9&Uu7K9ETBsnHkCF10V-hVhb{Rl`aUjmKM&n9k2udJI|l6AYhF0<5x_Ev7(i?+jzq4@LxhEZh_NO-b@-4h>-4m#H6LnY8*b zb{nnR0$mrqWl$ zEz$~3k{$>nEK9GBqkrl*uUKw|jj(7a)^I8rvH&^0pi^ScWiaU_Q68_S8Yxdh-^E-G z4-p|&@T$QmB%GZs(>!GEkz?YvOTt(#4VSXCGYE5r`ANtA&qWm>5>KMpnGpKHYV;j` zx_>}%(13tGgC8GxlkfkvVZSTJ<0l&;c^LZSDasG~fA3Q2m;29d?aX`C+()x0sIFaZW(!5Zlr|Thoa?w{)_oAROYM z<6{XSL#^T)pVsuVIN(aolSSvrQlW;Sf{`MOW}^iC;UAq`IP8Zvxjq3`2MYR4RSE2y zPm>jLz#)ZZks~Kv@yF3{Xzh7q3grU=F?b+88FDA{$%$hm+ZBF-(yXM7L%bDKbodQ& zoy4@jQ9#z8LfN*QwS>Ds!uXnLe8DolY#aBRiWIHGy&Rh)JZx@%XU_fPVp`7nzPl8W zNYPdaKaG>OHdcOR|6XLmb{?a^Ypes0S7f%`$*Ldc1s(yWxIh-#LxsR~!Q$C@BcKm5 zW1EA{p_EG;V%M9siLDBUd6&DJ@!}ul90L$AQj^GMkC?1uyIcU?$HVkXsc}*>?=KXd zF^v1?ENILoe|8uh2%>GDgRY^71M!%Miudf^ z`!AN3zRe`?Xw}q4lz+B%;b6<#`;j=vG*Ld zAIW!i3N}vLW~N5l$7c$s98seqO)DnJl`scCeA{yKfEV7<^baXkIW!Mv>3thU`n0W` zbVb5kXQO?XrV*4&b5(N&H+c|eE+FxmV=RWRvhp&Jz|M=<1_J?36^nl+;$08wDsyF$ zm6T^o#`7%BtLx7h`qQRHyy2HDZ61*+lbY7=k98`#^-D;Jzf_Lj6b@8En1jwN`RZ=x z6=`y>*JU}MDr z$G>Hwf|RyDim*A}7{?zDnl~~VE{gOxVX@p7+l!_X#L;qhz!PRn{j}Dlpts)wWsB65 zc>~!&vSM6;;O&AzVi8aPi$c>tR(FstykOUi#3SWf>#rPv0p)6fgky$tUsXM+TQAsJ zu2oN5g;;(6=KtU`DgM)0_alq_MW8ZS1&djw?+yKbT_~nL0V!+j0u6*n-hnGly*yJt z>RHBy{$e+AX2S4r-5QpDV&*ncm2L6}czCg3V_5DpcJ2f@ZKUwz=QQemH%mEs$k{x>hyZg%}D_7g_1 zmgaz(wAa=T6?77C(XCJ;pN!=V8y(b-K8LIO>JQ90AIq$e5=N+syOJyBxVmbrYkwIe zL207GptMnb4zcXA{&W`0%}^sR$kYSb$^NyU-{CujpRR`A>^FAT;F1=h_nEVj-+D-> zRWPH6Z!CxR7mDvn5nx;B$-IOTW-@5WLhM&}Z%=qE)N8CdkcZ#y#9l*c`uS@PAWAU= z|Kc+zP$wiY?VydxtFkP5!2lKbA^2qeVX4FS4*;@JUs(@WWSh#L=8x4htP>fz4=V8T zJ(sBB_srIQuclvRG*_CcTEs2GFo7=KSZZKtxT)&hYdi1iOT~|uuvqGthTm#I)Q|tr z+TZ%$HIZ(MWx2lp;*yJ5a|lIkvH0`;c#e&|Ve}uLB7>_U$Zr@npmhc^46V2?u~QRV z%)~u1|KjWi8`!c~1_bV*zc>ZMNWEr0VeS6i{iG5mJ21(!v01?=&^;vb#WCOQHa=%s z0H&ubG<2-IJtsLt{UEetu+6yt?v2h&Ot^ad%p$XPGSB!%@7#XZb8Ot=`grKz2rp}R zkCqGHP?OjPzonX=vrOzg-*#?=j)GBm_!kH)N7BjUrM&l0Bw!=>A_~Wiy}cc}{XTo! z)Tr>^%IbBo`fiV$arGtF5xqPm#VBZbtskA(w{Ni-%-J~nyG9(}tD9DDm`SdF+%qBh zYBKORwp2S_$CtAsDdLQ6{+nwL-ClG5@rikuDNvb>lLxD%K+{h+=HsOTveuq3Miu$N z6Z1Jm@u7K)Ob>zKwjn%#2omdw$uw+F`Iqb=cHVzmiQX1i`>cwt*B9$dtR?9vY$UAv z|KI5|pEvEJOSKBq?mJcj!pIwizS$RM0t4Ab@W5L6^|N?;`}p5Z=*$PJ#b3Q@{}C@d z?y>c_86s39jX z$UVPUtNA-ps)AAc-l08ASal8k-q|uiAMZK0a&s0a{{EYfeCOGvTN~bp?F=@^fq=@v z%pUxq&1bdJh)+&$Yqfy!h-v-TV)##*1iWxgv&EPvN=VUuwdY%9hjmMc(l1tJ9t-g@ zU}RvJ3Ebn$nffu+KJepzj^!&=^Uc4QiV!Q_ikCjQw*t^}v`BDM1 zRqus$kGUNm9~wyM_*U8Sy6?G^FY1q(<}V2<_(*~&$%2P*5DkRYLU5@PRY2}{(874c z4B_11iw2TIrQI%fZ3lQfa(Z!R8mrpPDDc3ByLQ~#yV46VSUp=DgMokz0tZRNcCBtX zi(MwjR;km!Beei_-tg0@hb^=jAWh*-hk=lM5$#;?Ac6e|Q=)qiyqF`zb8DSNADxi* zWAoett>f5oFH`HR;*QwAzUe9sbZ4xp zzd6V3GUjZdi!&dXWEQ2FqFuBkO&~Lt!wAMgl2NA4uQHG(3(c(w`KTX+X+1Eg?6J;m z9v&xFNIbHhp>wQyT&$aKbv@LNfn4G$FBm9y4XY|`LBt_G!T9S_)-kM+Mm_I*p;&oz zM$EW|<`JGqHVI~T!87oOWbunSNgH4v7_TC5fro@yB3-jbjwQQtQ7zAeC`w&Pg` zt-@qI6!foFB+X{ecE^f4Q10rvt$oN$*IJmKa^vNfcKoQ({-}$#gO2{I6(GTCodlcU z5X|tP$S>hBqLpl7PY|;RUPLVc9>ltNZdWMD(QMhyE!KaN@PKd3yIo-2Vm&V6<1mnc zMk=@m>IYu)5$gsfFk3OFFMMH>tvce1E|c5Ldu-!A3jn}6P&CNu&xhweK@OR_j9Nm< zpUm3JK^*#CE@c=MGaeU`1Irgn<+uEHbgS^HHo-EZd9XK}avUJK6}&5aBIkB5kh0 zgGXQ>f8F`y`1_lL$H{tEJ;s0UHhKc};}+NZ`XC_+c$Um(#g~#Oj*!rwv+-J*d%+>}NWOcF3eudXI7pr8JrAg#N>U(Qpaz``u zV=ES<&A{XMN@IrxS+!cY_wQ{D|1s9$>D#W%)Q_v z-Vd@wlcA6#`>ajFS_^C>k|!YpgN2u*EHh2`DEo6K*LtzHtm*NlTOc!GHUD@iFM!^s ztydj|^h6$54JwL7_Pt=ue)YPR`f=x`UOgW7sI$^(W>eeLyC(Ax*ytRsCsU|WaF5JL z)hinDt{YqlzM`cF$URgv$-chJF<8rr<#VsBSl3jo>-jfhU01bkoU!(unZjdIebQBq zFp&FOZObxRWM&9_{i&zTzxsIP$39TG?q=uL{*ycaTGH5+$sw}QYqw|itNd`>-|@J| z*#_%KPJG}Vug)@ZjQ7MyccXs5A5b$;LV6x}nd|-49&+9)Q>A7S8xjC#2p4a`lxeg~ z^T;RL7pFeKp5~j>VWgZ7R+@kOjP}xT{eg#^kAA%Hz*o|Jd(*vp!q>g7{_DS{ee+v* z6@7w}aIw)W*{fJW{rHGdAKFwk#)HQ>7dc{6@7W0t;RL*Yru6oOu9*W=ob!KpVAl!T z+8y|;O=7U3rler9WT46r!cV5G%Ykuh8m>F>&OWBpi%Q*VJa}*U)t>c=-*qcPxtso-4Q+dk+(;A8-&R($(J zYK0TJ=$lPLUp*JtUb;|1$=Q2^}|4CmIGTEoYxSgI7dk}oy2_C(Ol_Q>?Po)-8? zrG8tfYqC`}zdJqni|%KNX|dQ?ZjzH>HLnjQEXV*N$VV#{_$84$;aFJ|BkBi0xmT%g z>?wGJ!!dM^c^Cb2B6K)Hy+*ht8?YI+JH?z49vglOTw<|hr0TqjHX`cezS%O11~??S zERZEs^Bb)3#e!^G0^(~a$aDO zF^suIr!*te4_G46AX8{IKDFPnnl!q7Jl&Z<3tW}W{KGT5N~`uSm9gq#p)y)4Ujde$ zj=;v~25TuszvTkJW2s51w+Vdiq>7*})Q3qiPMMH59b(ED+N>p$;UER%^A z4iqycs$p?&uUeG9SwB5hJht2i8x>$YY#M(hQCOW~t)x`!co4e@85G+m-k9Z0Y#)xk zGX_O10FTiNzOZ+$s>u1DExh^-%Z47V2qTYywU%1MMozm zc<0-VbnTFSLjAa>^YUo>YcE*;en?_lDIWc`g^1TikN(S}onZp)Prq=w+P%6JJ`GZk z91VlVO_Sxo>&s+SN}Y1I%_=KjdvVnE9IZOjy9T#_7HZ{(E1j&H%vWUk$%EVTXINp& z3)keUZ`zdlF=}_#{JsT92G{)JoCO==g_y+439{-e2JWUMEd*F#e;%dKXxs_*U+vD!WBNgFSL(G+ZmO6 z5X7>L(IMY@o~lQ&NR?QSv5mYw3O{d&(?cS42W|TCQQLFS)6;Wfw1D-5oqm3`wR3kI z5-$edPS0H20T0;vCgiJ8yVH->fH=lS?EG7?j)09IODz57D0rygh&^!-@6e7LvRc$7 zw4ED&xV?~HZ+{GHqIAuYpYXe~;)Sw&U57!dL%5=1N5_}1MukT`V14Y%bOQ_Go7c2A z`~KGo#TDBonq>g9y0oxCXA|Fl%{K0H`5z=9E{n(=8jUTlVT(ayPjUTe5XXZ7z= z>e0^Q5%x!d2dHEOy?o)3NpA4%+nY_4i?0?~(|iE?xFjX3!z0kp#k$3O+>V|ySOAqp zEm;z|W>`(lKsj%FuVEyebz^GO;+Xt!BzR=88>{hNo$tF$_R&2Sz4#?JdZ`iL=6Zka z6c&THothqDH+SA^)1_!HI6;K>n5;L%qL%e2U5M2gF9sVyLLkK|caP&Wr2zHg&0{i< zk>KHmP)O^A7rY5B`U^n<(_C1y{7jIt1mTx$`P_@UgP{biRoAf65s)!cUvdvrOsA3s??u!9&fZi8ax8Y_j|rI1s z^6!pi_esZDh|^k_ECQHj#B%1x>e2B=+&F&GYkJvLVAuVQy}U-lBsiv12rpUiSGA5# zMo9s>)d!LU&_aat9;2z{h)2LPTEqKob{8J8qtf5=!HfY zOkL&|y#Mu3+xL~V9N|#usb+*W0;|s{HjTTq^IZM-;>h(J2_9Y~_T*I_HgeIIY?!%^IO@kp@Ibhl@{YWf86#f7f(He%g98s^f5A9dG7gnY)=aBT zQ|tCn;srU>18x78*5oVRDPl0$mBd2`_vlj1xr%%>y7yxwcw8Eq2b7)7W!h4w5xskR zAkmq)&t(N#Qv)Qh5wiQ3?nsTfrPog%9@GMd?&)G6`7Ic)WK8dNoO21=?z~bXsvjHo zC?I4SEic;X8`xlZI_P`jZ|?h4pv6CeKr5zxo29Oa<9k_Zo&qz35blm}Wwch~?t6NA z;{3M2f&06-NB%N5WXc9bGH!-x!IV^U$JN6!m(=pkH|c^r%=V?iBM5S?2x zbz<5PrS=zvQG8Pre5EzfId2V}fUD_tky>E(3471Okp0?57b9GWN-yD?EY=|(3wy`IT>W@@ga+EUQ-Q~22n?DI zEhW>u^*sfH?7Bq(#%fEvB95+0;?J0C6V|lT8@J>L-7&polP$38G25zjbpe>jZM!{= zb6$X^g8Fgy2(RiYap3(#1z(1816nwEz@dT4!48K#+pTeQpJ}a~^!x5uyEfgs5G~N7 ze(=ghBp%zaBPy|7kGD+<9)^~-N6mKWm;4UuI62tS!jYy1GSByhKI(_G1G;{i>eGml zi%k>SBVF!us)Gj|ZIgh({;H8s^q&5+eP=f29xQTbWq0*TaD8Q6N+JGcgFQI-g7ji@OV+44Rm?M`h zE++zjX_O7k8aVGMYv5e{_?%$|Ug*`m_~I`Lv>i$ILe{D9f_;j_d>tEp4;Tpcm5y_( zyQm-JhTD*VYzz<0AUTJ~7nc({#NRiBZM2#?RWFO9&l$2ZDyyVg(?y|L4Rf*n9(hUC zye%1b%o& z!@buQZxqW1o98;z^zGj+muL-rlg^C;nui%%p9!Vv7 z`%(?h;G?@|iZez1^7F& zJYVH&jC3YVpDq>6*i_N>Z;VU4h9{1?zwm?B=??XSo(+gT8MR8-)_=hU-cvpym$D#z^eDa=o{=Sw0Dkf1dlFFe_)G|y%fo$C1nh}W&56l`f*A?=q&$0_zgx3ctW0&2;>l`4+wJ6 z5z9l#lEr4rrpC(Upd${#z>AVN)&(hweBi8JC-T{9P$SRkcSXU6oi2HI`?kfUTeGl| z-1jSIqjJLXcdQP1`-`(V({2=FjWnNrdoW(SqBZO`Sk<~K`o zsPt@3u*4)n zyWKA2&it$VFZ{+CB&+Sm5%uFhYZe9?W?^{up?;76PC&80nwqKS!{9L#Se+k< zu-!AIz4Pi$+!wxKYBRRZL_hw)G;ot=CN5D_h}6M!8wL^o$aujv>>C+fZjY(jQrZ9j zKmbWZK~%$g>s^x#hTS|pKiL*|>Fw_4K76{34GK5X^txui;`HqoIm5A$-*Z%{KW*RL zw=)tvWC^{FVYRQ29d-f}R?)~(C^+KMK_N+_C}63^Y}qHWe2ZJd3*D7weaZD*KMJ#H z%R|2M4N-UxHp1z4VO!w%+ubky!dbMAp4Yyj-h8yQI(d+hZbPy?y6)VMk>G)Cw{xYo zo(k=(Lz)cbdtXt^Q*&5vHCd+|HKVcQ@~^(s01_UlS(s0bb;~kXQ3Wptwp|JS9JDcW z@Wm_Dv)2u}Ha&NKTHwUn-TQyxY%Ce5d$(I$e{FS0kr6gfAMR4>t4clFTg>Y5sPL#_ zz1sO3-+(ZRD7Dv-NOeqAs3Um##G%o^=O_L?ar|X*BG_=z%V93UNopQ~*1!h1JqjI_ z-hFi7#p%h(x4`q?TZ3;5#0D?B+4Wv3Sj|iw#}~1oaD~}1S3d?;bR>A-CD@gjGzS*3 zgHFO~k*sj}WnMpFym^bA=9ldy2q zJx6y?Gwjr=rgr-HzdQHPk1vFS_(uL!P9o~Z>gwA#J-V&Btc!QHm6{tK zo45h%$zO@_ri9&7*P1&#V+pLoF;u}6e>npK@)A;$=lYm#OEX1TX%;skDIv*@#BZ!4 zTsh+F&_kluK~dlqsznR;Vde>GQ`wzQCx3NY`)ImzURofnrZ4=){Nt~$x3WtQeG3fa z;c9UWWG6Q1vTW4XAY-dKPBTD_&kitfShmP{0G3f4Kc!*e~ zE5s@$0Ak6_u>lf*2R;s5eony#Brp#!!$uMqcnC1y(_tMfw3#{yOa=ymJZ74V7$A&N zWjlJ0`uQIc_2ar>GHia|^mnr@05B? zb*xt?bzLSweXCLxrT$E*|Cw=&YnA$YN_~$~`&gKJNU0;i1Cayk4%sr#c)g;B_#GW(>4pFNo)o4 zyy?$$=O3v@Up|G$dFl7$rpWunx_{Jn7Y3NvLB*$cRY3*ImlcxqjmwRHcyghfBuH6i zn!f3}Lte@Gyi$Lm)cs0TvpB0i%6>t`hEdktR50Z0Oyr4F?Jnp>UE84<6G<|%&oN}; zI1$LY3OuY;C=(HIU`cFY1$?{wKX^ms$O3gkgf3bDba9_kB=kz4WxMKi52!!+PW7I@ z9Q^q7?B-ekrs4h8O7zx1mB`1V2=VDJ=f54=U5S(TonE}L>CZ$7e1m&X&6yhY*}2M3 z7j4|>%(8`b{Jc_!GrrMZ$gndb!2`mvZQD#^CeSVKH2wk2GxpDzl5hmqIM_fsihxEC zA~K+4Xt$^*lM>|%`*8Gi(J@}z`#L+k4!l4(UMG%?}i4z#Gj&Q}L>;`cZax-w^yUD=N ztTj0^=c_k;K{>v<`>1-)N49s1Z138|H$;t}Sc=~s8gqGwkBr6S<2l{LPrFKWGD{~_ zHBAE*Uz{!9H&Y69%}&xgm+IehdT}O-%M4!GHtTGtTx`%BqrwCAgObWB!G1;bYa7QK z6n{}K(~Nwc6NW{Npma0V5reb{8OaZe)uKv_FbRu}>6CHnZBS7jG?2tddJ#k*Nz0t1 zKnwK)@r?N%@b1?>pzwZ7;juwe4!N9G((rpd??W|JPEBns29$UnRzh0}FeS>9i>C3! zO!2-->FI)vE#(S7eE0mytLn|!C~k{b?KjMJ1YfmJjq%94&0!rdjhJ+;QDQl*VGN#A zE%?i;-gFqqXWnvAK6GclG$|*++neFP@zk|>!oiHoXWs-iSnBBsH$HBdU!5&to)WvvW5pL*7^87rLBgFjtmbpP$493k7ZO0mdahHR@>#0usEU*OO6xiWIOV` zAZZ9FEXO2r1Sf`gHrCb1+h39c38P4kuJ(Cg<1DVmhaSCK{mPF|)sJ@DjI`6ZCOq|_ zg~~fT`1u+vvPb7N{kc^AL8qd1Um0&)1zaAjEGJaeNnGBT#l`ZX(uDe1Awv=-4B|L#hZi z=o1+tx+>hB4RY5#a{h~NRPXpi*A3Hyfi2)3j=uJR#rdPnnVIw!8@YG&t`~LVe$)D> z<$TG2-qHhJfJSj$)88A$xzUz8H^c^IRqU-Q9uzVLJWSh)Jo2I>yDeteiNZASv$xer zGT1LCs;ud|3QXz3i<(! znrFZ+z&Q76|EnLI4`vh5vvu9Itz)|JDa-kNyRbyyPpa+;{GXX$DX;kDRwO9lqe!tZ z@XWC>pxB;M)h+Ag6gUPv?1IyD8$?xLAl>U|jdjJop1NMNLrn$Z4=2b<&zcp0V4#&< z&<>gR(E2*{6kuTv&LqsP+lb?7Z7+XBwDajUumw=Qn{W3{yw&~sYg}(e)Qlz5I9{|L zo-5;~z~@~_)9(oV?+Uybu`Wi>*CSS!&BtJFCTN4jvV#%9q12w@RuvDvVhnhgmW@G^ z%pI6(m??2g+gSb^*i4%{nOXBj9XZ;s;3?KP!?n$sjD6>#(OT9OxiH!Wu-L?G)s_RY z2Rk!dednJl{?#iAPBPu{7D!4-vOf;r-;CcD)~||Iy!foAKUyfwcab82sRFv3>G9%1N`QLTYBqyIpvN44-EeNCyP-9QN^*~ zAs5nqCBYj+m7^~VZjAwFA${)VDPa@cTi=Q9%Y%+qxkooP995!mVrZ<@+i(lE)9 zIDUON|Nb+{zF1vVK5H0%XjT4f&cShNrRvr7=D&RD+?8H%C{1pjvk8ZTqVW8k^^zCr zVGSuh>uGw5Tp27|S6C;dg1oJ3V+<>IB)sanHqOBq@PIrm$0?K~8=7OA6F$tP^Ni#^YTq z|69;;C5+PJdFLIOVFt!pzYOlt5zdYQ4@$G0A|c>*hzTenifO)M;2hyyTe>A{9SN$X zjreeOHgvskC--1M;FtD>M{i|=d+@lhujioo8;-p~mJ9r;rfx=xg@c-5;+aWk zXlK2c`5ZY6XlB*{-mS$4O$B)7Wufv>Tjo%8Scv+lCFJ*w2M^>c=mSG(v+h@A)f^nAyt{KriDwvRpwbQD!JUva5e5uKPL|bby!Un9Ee4Ye9{s9$2lwEK{|)uyPZT1S zM2cP>8>ooBF+BYt_w-@)=ez7bvS({bE2;FG1OKO%<`0C?5lh3Q4zrLZG_=t53@@yh zW}L=Yu2vYh!mzHZy3&ZP$~gzxBB@-jD4C9jJvRX=JUXJYjV{`^wNR^ezl{eE(v^Y` z9wv)sDIpRT%4-*O-gjuAeEi^@AY{Z1rZM`>!^#wNw7Ez3P1?z>;^7`(1Nka>F=`E4?h_@h^v_n9+^(&p0SpZU$Vg+3ZZDNY)0lkrruY~tKtyQaf*0*&yg za`qB2P6+w zSV(@uc<|sE^2-wPYC9Hcl&vQ%DRIQtZRs`|E*Fr5C&*B~!N&cBj3CnjW0~*NBNc7% zbk}8IxeAYd5slY$Y}Y=gu6{w}t4k6dFp6|GUAZ$n@$T@GFEc)RgZZRh#LxPAvPF80 zJEP!GYaL^nM252@Wl{|x(l}uqrtb+nbh{vl3%F#MdK|i16x+6enJ32vsg;2w?d5 znIbQth?$_(Purt5ml$;gUs*{TJVbQK7vHqOJv-&HXcV()dVL(-5uAK?`1LFFj~=u> zRkoLvT~sMPivKgL1BpEYrR;3rKuslIcZoUr1)`lrHqF01pOuN7JUi524YsbwDur*5 z>6kgs;Dk%Ub1Z{VcyVMw9H7y3}MUGD0cPC+4Gk#uzQf z;rbg4!(v(8APL=s3?%|-nKwHUiT9SAbs~>;oxIK5YWX}|GTmUE9O&bwRU_#gYtw?{sxsOG|M`^&p`Kmu(}q;q+u$Zrc5 z9XDmoX<`OV)NYyLERoPxR=@^qLvE80>5T1wjS-_Xh$WebzdWzy*zn*ntckKYh!x1`O3`ng%{kL|*rTQiIT zbThe9f6l8TJ{|55pEj&AEJ94-YdoXtiF~*TT%Y*$y}Qa)CAq+{R<(h|j2aQJOk=S| z0O^L~p%i}A+~(#5c2%r>uqk+0PT;##mX87M7e4lCly-tMGX|jn&X`zHm;fttU$LJs zC)O}ReYV7Gjdm++xI>4*d615!5Ixc)gid>P9Q{CP<~LQ;Q&6sceD=<54Ue>xD)i`U zv5_v+#Thc-9et-NwmCt`isE|)zP=X@IboU>ejQTdlr0^X=a9QD@@edY zRF6t#^e-8D;MB@CndwnqXfW9WeUbT13|FR^$y#zFlG^~la7Dyu(}3O6xZw8M&q|{s^vSm#>r|ExT zm;T5qoYD1C6yMhLe(v0v*O=-$rb=|^(3|@VTFI?7@j8`es<47#gEYBC90N%hTu z#VrU2p)9ML0qaB@m{Uf}^cDTdN9p{pw^g5 z{^>vdhsKXR5a>^3^FOijW8V+eZO>{eGunf9sMmaLK-0*n_UV2wW+n8uT|WE^5{hYx zsp!Ti1p_z04WgtRhlP-M*1!(zIlEXbNSz05K;nz0g`UlCopi%#`rg2MkLw;>s+WRL zR)j0C*w_$VVNikXb2N!GW=u;m3>mNvutA>UAr)DDj(VaB0u0(bj)4S8C{2>cM9h88 z#-o)mMYw9WR{M1WclMRHlz5@P%uT|>Fl{~wG9i-enu_&YZ8YZB|NirHhSr3P140%2 z$cQ!4i%{A27{)H$#@JR{YA{UZz~C1Q5UvkzfnqawWPfsmKrjq}l*>ra(cy27!XNzE z;tww`=ii~N5J0afU)@&Ik0f)S`mg@YE6x5-WOO781O>v5Bnw2h4@)BvEP)n%o5(^8 z|4{TyFSRh%`V9|kQ(3;K=TXEbQ1Kbl1{Hs6n3T<;3qS5P-V}vbB#A|Y5QBG`7zK+d zd(sZ$Z{Pwwfq#%WOU%(kXbvU&YaFd;+QWv4lqHvi zaI^bV!lip|)ZgF8&UX)gLEU5V5K=%`WQ5SM4X@5t-$WBpEz}{F1?3IQV8J4nXQrbl z#HUlb@dtL{6Q;eW>F6MDiNarP)?OJ$N0OE~URsG%Mj_vh8qgj=#;OUeLvbdk-6T9H-Li|o zgZdC@d|lQ0dK?g-KjK?2%xySk6H>RKOnW{-Vp7#gvAVlbnq^qCutb4`A~cHGJwpPu zr*{EQE?Wqtb6))A8BTIhjj;{cqa{pVlf(ey^QJBE$iKeTLC9VIp+GWA0EW2?gMg&Q z%E7}hPYJ+M%4yxd$u>c$Wib*Tb=Kl@QpY@F7!MdCK7GNo(7CZVeS7G?FYtf_>%8^6 zg^z=kk%T+Tz>OJlGqs@*zK-Fa5eG&@eRvDNXtz?&OV>Yyd*fxVRwM~K2};_tKGuJV ztA`kCCcSMQ9uODpfq#%DMZ^LjPb`P6*;Z@-;lT~#ma-R zb{p#>1PJ9>)I|0Ia3RBdpA?i`9PdZKOK4M~T*v;%O!Y79!b=7gHW8mbkcm%6$TqtQ z+`%RDIK#h;2wTBwHfx{31vbK1K$*mkh*B};Mh5{`1}`c@n8^tjvuH1*2NubYb>&1& zy7^ni{(yGnXiwWIAtgXYh*$@T#!?U;Z;TQQ)h^@w?qEG2sfu{R5Kd{JAp0ufFw(-@-iL5Ky8$uIItXla zwBUy=Q;4?G1myB~(lq~aSK(7maS30irVyWg!gpb1SGL8c4PQWeWF$CB3k)ob77-CN zO)YV`3Ijn2*>z}cT>LY*ps~O@X0mW}rq04WT5UG)&1)xLd0^MXB`ZqbJUrxKi{#B2 z13}i(wQH*OQs9kfqF(#5^Rq{v1xj~yqiE^nf=mR)uZ2{DkCtCXdWJUyTz3V9f4!G<90dgJ3W)%W?Hs5IjbrEBl&*kg*# zY284>{O(*5!r9E8_3{MF*BgH zp$joYjBo1)U>HkS#jZSCL>@uwfOU*0jNtCLb~nk_C% z-o=xp4(Qt9YV@Szye7;nFqs)jij2}XG`&CCyQ?^ZIjE0hk&4>fWbMPU8uZ=EbqoLt zn*NuT^XInnJbHARz9x!3P+PgZ);PRa1MRp7oX|;12#%|w;99Bc@4?2fRtZNHTk437 zK#_c-#1P05zM)V8>y+_0s+@2S&aD5|-m7>#U}9*7h@JG^q8~4eZ0xyt@2m&~=V99t zJgAR_1H`llanI|vuV5T58^`L~LP=*l43t*GSsbN>G&ETujUZ~24(7=llJanMO#-rj z8ZMj!Wu0*=vt{Lm-N7v`gCj9#vJ?(;d=i4}-{|{)Jv;M#^(7&$OlzkYyzFlXgI_Yt zhc*4xSf@JrPuLfU%rc?BvrnN;C=3Z6+RGdW`m#mRCmTj_uOWJNF-hK2Yy4cJevPIM z8CjCwx<^f*ROA`?I-G1{!9xssW=a}WErrT$$Ib(3J8RXy&j7*lD9yT;gkll|C^pGh zvoJQXI1sW<;QA0xd4Fk~5w(pJwX-Fj<&b34C*0L}Q3LPqJjtB$t9P-i&3W0j3J)p; z17U^ZymrvQk&=0~84t`ge_p;|c%ihoIFw?Ix&PQK_gH2j1qsLiMCBtB;QGTQ`MSxj+MP%w(SE$36E(!;jR%)9HO@Vn~ux6~Vl{a_|R zYk~&xjtF}30J7vX{>?zvJyb=EQ<;{$TIdLW&=yqDrb=-b5F$`Qp2&o&bjkF`3iyLZcZV;#J9 z0`S07fF-ESK!|cbTsBEIF~0n{ZZmA^B5e%;H(3QO(Pj$vEV>dDia5a-hljwi3T0Gw zkr2p>$`1F7vW_1hORCE}!%ngg)t<;k27Xk2N5OFNt9PmRM|9)3Zd}o!5MzGPgXs3A z2cf@rVVRp*pDoLRtug3=F%%NJjLx&lqgGe~FHs*W7XPeTJ()r6m7f3pbMtpK+$*C9 z;*)9n^mU@Sv1V2136aDVxljN43g^+YMXk{NBJQgw)|iYCa$jwXD}H zZap@jKp(;@=y@m)=OD{%Sq4r3Vn}oOhr>=`18l%;_?7!Rc*S)|jQja>ru9BnLvL*> zmi0x8?7rGZtJT|^&3}N0GKvW(f;BOL4zeJ4!zkH{y75&LJ=^)bVG$lryvVn^jrTMf zSHGVf~2O~XCp%eQJJfzu- za9ES6qdc%S12QE0cF{^AU?AEW|1$o7-4?%>L$-lzv=J=ijYIn|5U?=3G;4P&wHjvi zFRe`@@D^sCV%f`w3CwB=%>xf%#<%X9J5O3i{>I6`qlbYo%i_AK*$BljH}JzQ z@JWCGQkTPoB}@((kI`*d}^g?^ELDeyW}*P8fsggn4S4p zwfcf?5QcJn690XIWJ4cDF$)~%7A#$kgwW@27r~6mW%S4y;VwDGCCb%E%!K+g-t$En znpU4`*L>g(g%gp9n}Y8}NTW>9g`A0tFk9v!G7I8{N7uq+Ei#+1TpjA?PBe{vyDcp< zv!^1iiX>r(VfjUA%0WP-lH@@Imb{3`QrtxidG5tVbc&U?MykGI((J+W;0o+)tI5EF z5<3|PhfEZ{dDeb-!QUopcRn`fwV*NC6btB}^<;c(=BO91SQ~(}; zK`fP7B4Z&t{y`+!T&R4uG&gfTC(~~ay`L*q9yWGC?jGx%h8}aTua2T>6koabz{#w` zo7K|uj{WJ`>ZePklbD({^~xmvZol!iFu1xcl|f9c6+Juqsds-3n4%I<3zTw3VA&m+ zWkaLr4~*iKIT4ePnraITNwh67I2frd#3#5A6f8u}7$R{VnYh{c_EycfLEx)9h?HQA z)|05jY*Al+a{$P_2vkw*H3O35GXTx*oe{w-vy)@0dZ{t$^azHFm+hNvz5IOroftfX zfsj%=UQ2z281u3@>uZan&ht87pV%rFguu1WHB%;T80aE|jftIJ6lH#~N(x=loh)jT zrj2FSUm-oO2*=X3k`mj0Hm&Wp^3K=gV^7yAw)cycEFALR?I-V&QH$>5E zo6UW3@;jC4mn{39N|}g{y-D&dwc0!9PruU94web6ZPjmce^UjW5$}ZS#wn8G)#F>_ z-$olK%C!sO0~y_?x&+%Y1b7W5K&J2$X`d`!P`-bJdeTs$jqrzYCKc>O7Ti+8oGA*n zOj|L&AbRmDP(wm1tmaYo;^bI^H5=ChH&tkV*%dP-l*x_0a;w)T1`jGC45YDY!piHl zzi2Y`;On^4+n=@73UBFo%!ioNJZRm}h*8QlPCSFK5ll>Z(TsxhB}b4Q!y&Rq#v}NV zdA#(xiHSH1D?;4IWQ6PiJ&^AB12y*t40GAgmz4ILWj=2^50r|ZD6(v7`l4g+H?$uK zny-t(n^1yRpy-gmuPtIjNE~&5@rUsq^s??1bBQu3ON<%ms>&;{?o*0n?+v#Gny5NM!aP(6^7t4~DoBFIr-E_z`f zKJLcz8zrS}6A=x50aypsn+b?Kt~rDndSHw>eKqc@w`EEX2Sz{$n%#vqqPe?Txu+XhA(gqEDxa@xua zM3ESFq3}%Fh5#_{(BJt$C^u&|nT3-}Vi3?IGg=iFx*?N(WV|P^=s;MxQ>0upI36d2t68S_hDO4TDdD8UL8=!RM;AAgbZbCj)RMYi3Os(W$Z$vvnIZEf2{*mh^l7&ou4nh01Yw?W7|gh@)6c^|u~bh>m9U5Y;gf)J}^ z>XamWNX})GK!kd7LdFElm^aedN}JfH!m$K&SiA?Cqe|G0ph5v^C-gFpL~XIb{eVZLE)uwKXSe5$ z%FBk|{Qqz7zP=+lt~&rv#$aZU78{tBOHw2)+X_e4(Sv;a=D*z!KDOm>bYx1hNJ`>z zxfx+{g1=jh!45L82s;S9AUNphuCA)SzqNqn++>iy1vIk_e59#deR`Va~G#Srly`cx1!7zWkeeONwmlI(1=xoHIQ1vr?_e zg){i+KAWR2m&%>dcowpz1iEp`nqg2`QT`Pw1n|<;S)G)lG_^eVjo zX|COkE_+U;Q4I!i_<=IE*~{d8Sx=n|K`P@TNFcST4dl}A2DhO`hy1gbU=DxGLEl7c zoxbHeUdI6j`}_-L{I5m(G59v1=+ z{ZB?-f$n>U&X8rb_=|0@_I`7TgPuG}7v$T#94O>dw3Ic9d9ic|2uab)W2HROtcivq zvT#h1sDx;qNKc!LV~n{z_%HOA7-|q4ns8b2033z7N$>Xl-|Zd&d9iX2xycJ;stg-( zDY_4R$&aEq$!ri7hcKk>S2OlDJ@t1OouCUs(i?*0P*>D&NrO$QRMB{K24le`G)|U# zW0}wtka8Be=Wr~BO2gjWX0n)i_K_bocR9w~>0VqEJi>HW76+>8#;(H({rO@U&;5F1 zc;ZyBT`ipNAKs4j>oKuvv~_>JsPb`m#FHFvg{E9`UwP99K9p=PGJ=V=zElr^-Vsz9 zbn2whmGWCQ>yF#wn?Os@&QWA@;B(vile6wOqDX~hQxeK0I4$7k5xShGgd{00EK!Dtz6%9mUc<04#MmdTBrPSR zK5;ZtC*ORXJ{irk;+&+8J?D@3^WkFsa*VmteYhxict*9h&|DAy>-6({rr$lRtGkxx z3^~pbwCC0f`I88uR18~|j`~?F3-X&AkGi6U(!w7}P6ta_Av`C74?E#reqa4zmG-?=kFV&v97> z(IEH?^C2F_KmL=DqeRP#lZ-&7h(@zI>~zp_xAWNtY%tghh~Q(a4wEa*7|aMv)|2V$ zr$3vI*SW%T5Sc!EBX{(&I$>~*5)2^K=r*ruYBMO&Z< ze5C$I284Av4zh$5!EHV>t0qg(;UGy;3Wp34E{lMKfw)nuZg@7{tl5Z?L}UOQl)l;~ z{dnN6gH%R#3c61k0{SLG`Gf8(h(=Z|)X^d=2m15|@VnZW{9$Z{F3Hks-a%bG&DNN`)sTEOu!lwZ-DoOk<*rBJ8cnYDA zu=%X_hb&C(acLNNP`M&k@@AODV2nhshBtGCB;+`Dj|cE9=TQqd$Jm8zNj1?#NK8Iv zdiLZN7YBP0NqC4Th%Mkb1SCj>*l?I6q=f^q6ax}n3mBNdVbGd9>dpVdc2AqqLip*$ z+vYfaH#d9vR$oX$aVzmU9OEsu~F(EO1oEtBjyUW;vNn25&oXusZ&T924n!CRb_JKun3<@ zMc@G;EXalJT)sEXHwV0sxpr*qlIY(;k?7JNgrgdLp6xdu{(;>-x{%pWGxHQ{0on~# zafk{O^BEn}t>6X{BKKaYSG{3tqoWbj91OFyltv ztjWpQYFS`NyE&Naj~cj&$C$lj>6*sA4Pj2TCyd$t*?TKcf0BNk`!yE}58XY?$m=U3 zzBjK#?@VOg?#wLW0g{a^-r~HX0HtwZ)K`x*3<*J3i446n+%JB{c@;C)yIb>8bA{n0 zQ@O4p6bYl$fH)HsCnCt4g_m1Ug8`*<0XT(zACEXOHbVK1sv>5h&a7;7TRB@T|9-8% z-X7Fi-6gKO;h?kDXB;Q*c{&~iiXKUV6?zz0KJoG4LhT|7Se@|s7Y+~osMeQSn=fN= zPGo@^eDd32uM^3)TqNnQS^1@VVn{RL823m!qGp^U>tW~{6P*cC6!Y6EvgG6w3PLC+ z#>XyJN7I3CU1rhMf=ZK-jhaXt?{RMg44NfLQFMdj4)jgdCogeO0;L2gy+)eU0H}bj z%l*P4BhoT#@LhcKs=L_|h%&mjICr;E=5U2KwvCXxNTj`? zPy=PK{@NOCnAzhF{mP~e%lzB>%g0@Qf!|*SJS;Ht^`%ZT+#ow6kCiwrz+qIMOveQd z^lh6yn#8s00-^;%&jxYq_0t_O38IqRSnZ8MWtXK$^2YI*@BFTvfDS|sVB?4&qD5~PJ?PckZc20O&gNPm%(q^mEfBXbA#v*9$ zuhu?YQTQaRUSZct35M@bGj>h~E%G`mjJ+9U1sY-n^&BEhvZd{koh+GA3ltXwV8$W~&lj-WA;>M=L1} z&If{GX{I6-%L9S-%fM zhxd;?D%1RJQ(cIh`XjS|4THH*lYGX zSP9OX5JK@yU?A0RNml{}&N;v!@NnEv(=#VVw2CC-zW8_cL(p+^t%Xf_mPhNxQj`uo zrfs;u`bcDly=Uebp+-+Tp@9A9&cfflQ+0fLmM$9}o-N!RLMmH*y!e$>C0^g{alj0i z79=fI#=bQ3b8|JeEjk;ipAk8NMLZnxLfy#koBdJ4F$n>^M zNuV+3$E@%t7%+ALkZN9)BW0!J(VlpM`{KzmH1{ln*=r|e|9GhaKYwlx8%pOJ>@Zh-{YzYSmhe}G>i;_txNH${; zbO1^P&$>bf2Vr142<7b4A~@eZJ7dZB_KZ*a2A;4@#>vb+nMn%t_k`K7>_2Lhgw?>t zR-yDyAK#xTY#80Ufrkf^mFtb=#o^1v%21~9pU>B%mXQ82P94+`^9p; zUQ{#DoJHu0-AN2x#?3B6Z;;l`B3G z>+no!if#We3R(6#k%7d}9@a`W6?>_q_g3-OAK#OZcD4?l|K0Bl9)?10U0u4f)P5?M z+>D?9;I34Q=mr6YkUrIIG|iKs`nxg@{HIgjY<~n5(iChkw(jT~1Te78sFfneLIjW(?%xM(Oj#iuj%9z1%N9nni3F&M5|Y z*x=7{o*4bf-8-!22fX>Sw0i~bwLb8m6GC>@iHx5}4#!mvGY%1}G9#7S62M|2k)xC; z5=`SxgIDfcu%TI2=7R0!qOMP5%acJ?gRq^3yg}fB|k7DoK^z**?k>5)2*V5M|3*bniNWWnKEKB6kq%J*a4=YqGv0$>MuWB{rAVmR*{^w*}K60Se!WlWKf856;5LL$UM@J02@qI zSVR`diwdEF6HpY1lVWM{WY{>NS?Pphu=H2wEA?@{`^sJixo$DHROP~otak|H1yM?s z9GG=d+?Oma=OrGJ6<@00n1pBX`|3H#^C2xf>x`BcmzU?2U!C1!Cg5RuK3Hu0V!ZVq z-@iIl64~s|>zR8-5DAz0C}+(;On2=skcup-T-a?!VjxXLY6lGXVad%hez6oOT!kv8 za?awa_5^Toz!w(gp1s&ysTMcaJBo6HYp*+K=Ze+Ed7Hz+OIGR%)5!8^oBgo_55s|+ z&lbySahMymI36so+^wJgPUL5v_+1Um3Osb`;qro6{LS~TQuOPtUf$S0IL_7M%7k{o z|Lj)*fWfG?T;uexJfqr7wFt4whGuQsMvW?*CFee6xK?+tC9T)43^o9f{;uppvDoVc zCu{45vf4x2uN5#Z9>eVUUg%5tJi{&owD#c~x1R;x)62UcWJXcTDI)KI#On6 z5ZkxS!E$5Ki@p+XVz%I6%09cZV1fD1Coi|n99Lo%FS3*70S{>na@OnhUT!&GSfGMS z=^nNs4>po_cqdd;(JyL{aH8wsUOX$xE%Zw%U3+xe7&J)Zp7kdILUHoB@6~wBAZ;q?yj{QDuks_-?Izw9}?QJL?e>W zUHm5+oW58ib}0xyy2_{ukMv7+xZSxx1p(zSq+cye;S|NExr3jvlj1JgHbrOFn6ViXyuwcg^+0|w#leqvU&p!VVJ`fhv1 z=rTd*_wPj6H(x_PMTB>EP))Uu zm8u=Ea#3}KK$R7j07}?csTBTiWAJEY$)+5;pK&$*N_GBbyQ^#6{=a?q!tdGc=H>Mc z91!2C-0o_TTiqtWyPl1-W62*_^^tOL6iffMu`5}E)79`}A6h}_3M#e%g&<%_d5vyiuVxbQt)r+IHAV$Z8sHVsucxgv1K`M5Wduy z#Fai+YJ7HQQ8nO$o_{sYT@83-bNT1B=5L>_wNqWQt1-J5)=MNS%mh66q1DVj?Q`Iv zX)iT3c~hBp>EnJDRvYvXUjfXtvJPovGeIJ}^;~{HLgr%0rRum+5s7a%hktHuV*?n4 zz`({&-&_57xqjM?&D!-dt$Xa5tVhd@2le@X{qFhmR`;fB>j;peBa$fgOwx(|bT{vz zOUX`|zpuU&dvrJx+-9oHU@X0Xf;|aKB3lY%t#C>T+Eq+?F#f}OpI<+F9qyA>QY)AL z@#6;y_MWIKvwhK3;vU&d614vKV&iwu*Ke|C9U*dQ2*mm#ZI*J{gaB$oYqNt7gw!-w zmbp%v+E1t;K?bAQ(==@O7E;)FYvX0JzFbp@QE_BjpG_ih<8G1aEb^bP@~U5xnR##$lI*a^H!~pR(Yt?6OE| zSNvhV@_Z2CAp%}fByN1UG*|i6M|W4IJcEa|e1*;*Iy*By2Cw0tKl|Xnp1gd#sSwnR zclJWMhk<0{j?9VE95?_MA-d;fKkz#e z=`+Yq&x%!sxW!aO*&s>@-bL^BLeqb@))%7=8Xo+`-9>!k`Z0~2DZLKx$OiMe)BEoqUcb2RMlF#V z*u|qp`F&;K-s*_D(H;97jG3w^7_bpF9JXS^^+-%lktz5Fk;y@z;vnZ1%#}+|I-_ql zV`C@Z*ah?N?=OF_c&XbcztwQhbkp^LM>Y*)t=~R-eT`LiN!stt7nP$0lGDCC*LskAB#&$3Vj{gdsbqzD&Hjk=_sSq>_ zL|A*&7mZ^&A5hE)HKVaF*)t<7{v zkqdf{*Oq%s&)2JV?=S1EKfT(#(xxrChTz;!8l?vkw^PnjAS65XOIlOo#}j13@>d9G zpE@0WlgOp&4dIKmDvPtCa*(Mu`{TcMw-)R54;Je;6ByY<-3WMOL+uQPU%lA)`pSZY zCN2>6y}Bfdh+_wlBS8^^h98Mg>{LW1UXGm`LO&5O((XAEyFyQLZY>}7n3c>_uhqqd zD4mr}-HrWygW!?9W7!PfylP6*y^4xEX$mBk=Zg2{infH`sSS4+`SS6#H@a+7kv5f& z8j3Pw>ED!cItk0wHpdw82P%fL^|&*>1;+Gb-Z*&dfCL-)!;6h82@wHy-ASU))=| z-;maHYDda6C0)zUHyR$(AbHm6KC?036)|ujyar>e- z?r#;;LjQQFakqXG-4}2Dc5dNu%+yJ3|6wy&%F`C#;xQLr&ey>qQpPJ0i?7hWWMWK& zU=g=?M5Nc+Mn`!zECWM_g$L%ObGy}KrIA~UmJGb8LuXm+ck5%7Vvs;pFlT)ng zWnu;oVTJ;L<+(Xtjpg|YT|(8oTSjr*+dIYgx9~W{WF2uS-a-t685M2X{o(7bTy9mM zqVUt%F_Y=rFtAjeYg9_~?Pc*%g~D>xUIw@P;fU9A)~{~ian>0;;{FL{`Yl!d(`Exl zT)h7)c)$?qm15jKwjlrj06g<_aSTb~-hS%vKgnGmjJJQ-@j-K6?SZRv8>6q)l-|Fa zdtSeW4QS58;F{kJtF3`v*s<&VyKT?K?U?`b=l$opEBe7g3}_C6r>mdKI;Vst06qbl ADgXcg literal 0 HcmV?d00001 diff --git a/docs/modules/geospatial/api-reference/make-obb-from-region.md b/docs/modules/geospatial/api-reference/make-obb-from-region.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/table-of-contents.json b/docs/table-of-contents.json index bf038978..ad244ded 100644 --- a/docs/table-of-contents.json +++ b/docs/table-of-contents.json @@ -113,6 +113,7 @@ "items": [ "modules/geospatial/README", "modules/geospatial/api-reference/ellipsoid", + "modules/geospatial/api-reference/ellipsoid-tangent-plane", "modules/geospatial/api-reference/helpers" ] }, diff --git a/docs/whats-new.md b/docs/whats-new.md index 8731eff1..09b4f124 100644 --- a/docs/whats-new.md +++ b/docs/whats-new.md @@ -55,7 +55,14 @@ Goal: Stronger type guarantees for math classes via the new sized array types. Release Date: TBD, maybe Q1, 2024. -Goal: Minor functionality additions, as required. +Goals: + +- Functionality additions to improve 3D Tiles support in loaders.gl. + +**`@math.gl/geopspatial`** + +- `makeOBBFromRegion()` - New function that creates a cartesian oriented bounding box from a geospatial region. +- `EllipsoidTangentPlane` - New helper class for doing math on the ellipsoid surface. ## v4.1 diff --git a/modules/geospatial/src/make-obb-from-region.ts b/modules/geospatial/src/make-obb-from-region.ts index ec52a800..fcc7f304 100644 --- a/modules/geospatial/src/make-obb-from-region.ts +++ b/modules/geospatial/src/make-obb-from-region.ts @@ -49,9 +49,9 @@ const VECTOR3_UNIT_Z = new Vector3(0, 0, 1); * Computes an OrientedBoundingBox that bounds a region on the surface of the WGS84 ellipsoid. * There are no guarantees about the orientation of the bounding box. * - * @param {number[]} region The cartographic region ([west, south, east, north, minimum height, maximum height]) + * @param region The cartographic region ([west, south, east, north, minimum height, maximum height]) * on the surface of the ellipsoid. - * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided. + * @returns The modified result parameter or a new OrientedBoundingBox instance if none was provided. */ // eslint-disable-next-line max-statements export function makeOBBfromRegion(region: number[]): OrientedBoundingBox {