From e6a68601c743795e7250e70aeb23955de46500f1 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 25 Oct 2024 21:28:23 -0400 Subject: [PATCH 01/83] update crim and terradue icons + add terradue to readme --- README.md | 4 ++++ docs/static/crim.png | Bin 4244 -> 14587 bytes docs/static/terradue.png | Bin 0 -> 24015 bytes 3 files changed, 4 insertions(+) mode change 100755 => 100644 docs/static/crim.png create mode 100644 docs/static/terradue.png diff --git a/README.md b/README.md index c279b58..62feab4 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,10 @@ Wherobots Wherobots + + Terradue + Terradue + NRCan diff --git a/docs/static/crim.png b/docs/static/crim.png old mode 100755 new mode 100644 index 5286f08df17afd25c16d61919bf70b5e90741ea3..f03b68e91448db79675a02dce0458d61ddc4c053 GIT binary patch literal 14587 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 R`cE4%R1`Gi%VZyf{2yEp{>T6T literal 4244 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 bAH#O_1ri&dto}Lq0l@TijJ2z^oFo4alk5dB diff --git a/docs/static/terradue.png b/docs/static/terradue.png new file mode 100644 index 0000000000000000000000000000000000000000..e90bc0b5ce3d0645048fd760fceb101a7759714f GIT binary patch literal 24015 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
II@Lnx@&QEy)=L%P>+Uz@W^P}*che9M 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 literal 0 HcmV?d00001 From 3bc04a0080013872076c6f523f02f8556f82aa9d Mon Sep 17 00:00:00 2001 From: Francis Charette-Migneault Date: Tue, 29 Oct 2024 15:32:26 -0400 Subject: [PATCH 02/83] Update README.md with wording about band name references --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 62feab4..dce0f89 100644 --- a/README.md +++ b/README.md @@ -297,10 +297,9 @@ and [Common Band Names][stac-band-names]. > Therefore, `eo:bands` should either be specified *only* under the Asset containing the `mlm:model` role > (see [Model Asset](#model-asset)), or define them *both* under the Asset and Item properties. If the second > approach is selected, it is recommended that the `eo:bands` under the Asset contains only the `name` or the -> `common_name` property, such that all other details about the bands are defined at the Item level. -> An example of such representation is provided in +> `common_name` property, such that all other details about the bands are defined and cross-referenced by name +> with the Item-level band definitions. An example of such representation is provided in > [examples/item_eo_bands_summarized.json](examples/item_eo_bands_summarized.json). ->

> For an example where `eo:bands` are entirely defined in the Asset on their own, please refer to > [examples/item_eo_bands.json](examples/item_eo_bands.json) instead. >

From 42f0a9050b1dbfc8700652f97c79dd3451faebfd Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 30 Oct 2024 10:00:01 -0400 Subject: [PATCH 03/83] [wip] add check for matching norm-type/statistics mlm:input properties --- json-schema/schema.json | 41 ++++++++++++++++++++++++++++++++++++++++- tests/test_schema.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/json-schema/schema.json b/json-schema/schema.json index ff21357..4fa86e7 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -490,6 +490,13 @@ "mlm:input": { "type": "array", "items": { + "allOf": [ + {"$ref": "#/$defs/ModelInput"}, + {"$ref": "#/$defs/ModelInputNormTypeStatistics"} + ] + } + }, + "ModelInput": { "title": "Model Input Object", "type": "object", "required": [ @@ -531,7 +538,39 @@ "$ref": "#/$defs/ProcessingExpression" } } - } + }, + "ModelInputNormTypeStatistics": { + "description": "Validates the corresponding statistics required for the specified normalization type.", + "oneOf": [ + {"type": "object", "properties": {"norm_type": {"type": "null"}}}, + { + "if": { + "type": "object", + "required": ["norm_type"], + "properties": { + "norm_type": { + "const": "min-max" + } + } + }, + "then": { + "type": "object", + "required": ["statistics"], + "properties": { + "statistics": { + "allOf": [ + { + "$ref": "#/$defs/InputStatistics" + }, + { + "items": {"required": ["minimum", "maximum"]} + } + ] + } + } + } + } + ] }, "mlm:output": { "type": "array", diff --git a/tests/test_schema.py b/tests/test_schema.py index 4755978..6c3ddc0 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -85,6 +85,34 @@ def test_mlm_no_input_allowed_but_explicit_empty_array_required( pystac.validation.validate(mlm_item, validator=mlm_validator) +@pytest.mark.parametrize( + "mlm_example", + ["item_basic.json"], + indirect=True, +) +@pytest.mark.parametrize( + ["test_norm_type", "test_statistics"], + [ + ("min-max", [{"mean": 1, "stddev": 2}]) + ], +) +def test_mlm_invalid_input_norm_type_statistics_combination( + mlm_validator: STACValidator, + mlm_example: Dict[str, JSON], + test_norm_type: str, + test_statistics: List[Dict[str, Any]], +) -> None: + mlm_data = copy.deepcopy(mlm_example) + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid + + with pytest.raises(pystac.errors.STACValidationError): + mlm_data["properties"]["mlm:input"][0]["norm_type"] = test_norm_type + mlm_data["properties"]["mlm:input"][0]["statistics"] = test_statistics + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) + + @pytest.mark.parametrize( "mlm_example", ["item_basic.json"], From c5f243e7f0e47f74061771630d0f2498d809c74d Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Wed, 30 Oct 2024 13:19:47 -0400 Subject: [PATCH 04/83] break out part of description to Resources section, add open paper link and presentation pdf --- README.md | 4 ++++ docs/static/sigspatial_2024_mlm.pdf | Bin 0 -> 1315778 bytes 2 files changed, 4 insertions(+) create mode 100644 docs/static/sigspatial_2024_mlm.pdf diff --git a/README.md b/README.md index dce0f89..ad10344 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,8 @@ For more details about the [`stac-model`](./stac_model) Python package, which pr using both [`Pydantic`](https://docs.pydantic.dev/latest/) and [`PySTAC`](https://pystac.readthedocs.io/en/stable/) connectors, please refer to the [STAC Model](./README_STAC_MODEL.md) document. +## Resources + - Examples: - [Item examples](https://huggingface.co/wherobots/mlm-stac) for scene-classification, object detection, and semantic segmentation: Shows real world use of the @@ -99,6 +101,8 @@ connectors, please refer to the [STAC Model](./README_STAC_MODEL.md) document. - [Collection example](examples/collection.json): Shows the basic usage of the extension in a STAC Collection - [JSON Schema](https://stac-extensions.github.io/mlm/) - [Changelog](./CHANGELOG.md) +- [Open access paper](https://dl.acm.org/doi/10.1145/3681769.3698586) describing version 1.3.0 of the extension +- [SigSpatial 2024 GeoSearch Workshop presentation](/docs/static/sigspatial_2024_mlm.pdf) ## Item Properties and Collection Fields diff --git a/docs/static/sigspatial_2024_mlm.pdf b/docs/static/sigspatial_2024_mlm.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9e76478f3bdb34ae956f99e2808ff86645158f83 GIT binary patch literal 1315778 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∾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
2NB6atCku$VNY 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

_xaRwWLBK0F9d{CBfLA z;6m8aNU8Z4#7J2yzAm!4%A?gk+&i^k+u-r@!e`ER+01Hsa6tFgkyER&wJ94Re0`(> z5ezbi&)Pc>R-LXaJw6PV`A9Kd-p;Y^-)pr zTRC&%tjs%CCd-z)auDG8vT=4vIgIG!+|kuHllC1Q#BCl>(tW_h6;Dc!@Cs)r&s7z{ z{24S5(GL};ED1mRK^|#P-l3vVifaH+0QlMeKl?-_0Qq$kH&O0n%*2`&CP%c)zZ?1f z{i?gOt2e)|&bwZj)y+-nB{F1OMOS-v_uAsj^SD^z9?>W4;+ykvquh;4&ThUvwbwAi zQQgyKPiz~n(ro;Bi{$ecor2*+NyaZX;DoXt=VM7vwJH78XMAGp#ti{Suzd!Gt6rne z(;7CccR62CZ$)zW`m$50pmP-+zu*`v#Nn;FOg&!p{9K<+J2sUYPabUgen>+8S+n`W zq8H~)TryU5#UCzL2MC}(?;=XAEl%bDf&njWRQPc-XvdU<7zr=FtVj`g|KA>nuUJhz zgW$i)Pi@O&66`iemX7>PRe=)G`Gr4#D0~@;~}D%1F1CUZr<$JTk!l=tBR+ zeJWN5lKvotfrjKkgCwcuIakmIBW(%2g}&U**m=TGH}$T4VUo1{{w}ooVbS=OF+11X z@Gl8jFsI90+Hy)Qa}QcMHw&qMNEBDb=KL4s&)F0@(a%KS_D& z5I|Vz6KLMqojbXtBP2Ph2>L1^vz%R&nq;P|yeo-hNPB~_+e(>jquU9mOq=t4Z4`ra zvN4u_;}@TQD|zrHE6%nGLYu!=FkC4&p}V+P|j0MVE86kArg6api)F?0j9X3JB`K5 zzx;E~HMxlm6!04|z|^?*0u>DD!8@d0s2azk!L)e_F4&Hw2X;!3l(s=>`?@Ptc|1i1K9t^krGH#*k z0q>yiK;>#4fED56zxSn-Hd+wbvBS_yMg_@ts_U*Lps3=$I{xzv}p3XJGX%(et! z13M>Ol1P~a!t7`pRkYcUOs-*M5qU1m05WG3NH}pJP;^2@K4z^O@r8EJ8&T*s<1f41Z zl^Ha6U+UBjp3XnOhVCHhgjDsO68hBi5A>-7nxB&Bp$=2N@9N32#7A^3pE>N5uriWP z9kYn0mp?e>UcAuUj(_>$OEq5pQlDoR_Dr@@-;+&^0_I1w7gDnXb^;-zgB?=-=R!#u zv8F%;5~78ybj+VFqTl@&)1;+njHFg!JHg;R%Bv#K5amZL(ffthpH*SYI+VD}r7Uyw zyP~w6(MaOb(^s!wS6BN@&kC%go(fByx^o>>#Zsqao%gm!m@aetE%uW}ZvBztBfFc= zrl5ayOh0FSj8c}(kC^>ZhIui{E(EtyfABJ}$6m1B|511RINc@4bHozOSDr_fyj=3C z+1BwLxhyIL_-S7t|Kg{G;77NwJn-|KXA8%A-CN4OkXn4&_E90zBW3Qdv$SkS41L)3 z;O^h;CSPxSo4i5BRcdL6Lre<7xmE3i5LB(5aA$|8jB)%k(5nea2Ce{f4~lo665nEc z)nrA`qNloHr@D-tG)OPMjiR_L{?0ssLLGlT<-%AFj2=#Ph1VY5TXks1jDar+E4vXE zee|&!$~;+&1au|J*Y~E21J=Mc`y=JCsnW(qXseU@7x>m4T|<|4O>FEjc4lg3PhRbn z;>V8E;*38wsSBoGU(XEg5IK_tkkkS0xWBd}I{B%->Ou|V>0AI-G!PB2LjlQcic-la zibZ+YPEh9!U3k)tl@h|$eR^g>lR?qiqlSye4A?RBGGk({3;=>d zm`rp1C+UO#8Yop>JyL7hO|JA}wTXZCfXD_gaVFDNd-cbxLx{+$nM{Bw#?elG)Ul}H zj*#~ixQ!&>gKGP$so(&vWxUF-(kPPrQAykWY|eUlDC%E1=eu*k8GodmFb_2J)req% zBl|L!S`>p>i>F`@puOg`ds=MmHROKCnHDd!VivrlcG4dCkC#8cOZP{b7f5K&s4Tem z*E?=?G)>SjW&!CJk_w7LkC%)GCe!9nby_XUqJxa8h?jau1@b43Uy_ocTE|e}bWgDt z2aw-w2a;Bj_%`FRZ1YonfZ!G7!eZ(zL=+lpBJA-PU~E;4{p(~qOJ}={q>Yh_c0-<= zjDl={-$?>v_m+O>JQ4idAsfK{b^Z~lNr>t#Lp_T4;&W)_ZLb*Y?lgG8P)3#;zA1`0 zM*1o|R+HM7QjA`wi$a~~!X6oLe|Z#fhxB6kBSTdjk5(S51@me^Ab=S%ocVZ};Ad$d zy@O#RK8aS|f>I9m03IIgoRpJn!rcJkqPWac&}e||_a=zDOE11c+(&Ny+3P6wAe<~1 z5lg#<%M*zrzPKzmh-AAYP!)$1z)EmF43nWte5_e2soB_-+zOSi{fy?w)D|*CIbF$o zh+GweW6@;lj+zk))fy5l~* z+1zUv_HaTwL1606d5exU?+#p+>49j&Pza31IG}T7A4gz3k3+C&cSFQJPhq<2h-cs$ z2xp}7RQ`ysWWfk>|8$kz&#~!0_nQArmv$+NTkGzPjAAl2+df?EFG2BcE_@XKr;Z3k zcXa}PKi-ngQp=Efv}it94zqcw`FsF9!giS5x3I=ksVz(W52+&rzt|c3VjG#SGO^jl znPPv4pk{BfQ@WA8v{94oLgB3%?swNB*#A{t*LSuF>Qj7BlL1Ak!gqca(LuaS zOy}NXI!84NZ90MQ?vl%5lfd?~vgnEN!-1SHig?qIaS$T9ip^k*%HKs0j#bhpb|NCv z9S6uY>Sqwt?T^hYeM0y^Si!Jhvt- zB#Zbfd<0k$B0?hOw#P~ z=TFS1>^fV+DspQcO&@>w%E@efOQ*3_PoDIe^<=zCi@zq`M;t^!Tve1xq5 zl$lVPY;Q!9xK$gH>#axwv#D!wjZlPN@g^1a>CbqSUZW!U303zEEth7HJz75}j^nE} zYyIM)n7hyKg!RdqM;dq^vfrD4+%f}D>D~3e|O)2Om(<*%vh2RHzYLEnKO*~UDdSqL~7Xbeke3qM) zvW#^yRV!s2&p(Do!(5{hl6O!-dwDLqesj}dYx}{mwM|O%_Oqw+XRVDYVi)8IyR1q0 zLov*ad`7M}%b3Jn&PoZ7UE=m*{p8%|u9N2lHEMNt=%vD+yvbSk(Wy^c22h9Q!Ffpi zJ6rJ&g>}Y0!kxlVJcqjGU4aFy_j70E{HQak%RJ&8)9DNk8{dzHvf{{%Mp4 z2GKYZY~P;C;5buQI!iAEB{}UBn$?Xch3cRWJTEVHo^DDxxv=Y#8h=h}?Qi>A zW#l^5`pI8WG$=o+z6f#g42obps@YauFzSj&pUA8quxEodFyFaM0pH+8J3wP~YTs{S zYK!c5l+pto(S2KaKSkEPn7&|A%k{)L`?l;M&a|jez5aR9O8JvMOYp@fnF?)rG4^b| zunQS6>n>@Qym5H{lIHzS6c6h;sPb@B$nC(gg=`dF&vw#8C9o0|!e%^vob6^l{M(ge1#Z-P=-PImbxjU@3D7DcrGE>Y|?74-K4 zbc_+F=>fHQcn!I=OdUJmNO&#P-Wi$nA}7oyFo;}#mMj=DS*(U{A++d7)ptB@+@7te z6qF;hc}p)>z>b@?dMKp068I~nqpsv-FWvU_>Zao836`9_`IpVLMmAGh_~7axV#bP-bx#d43);8hV#D0)=`VY zF-wsyR>g!oJIBsn@^#AV$$JBg%IU=mu{l=(lD8aK%eJ<16MPm5-H@mDxky8AZR}8_ zpShZ}b5azq;D~Lj<`bT>1UdOz^R>3 z`yk%*NLYxP|ULBT* z1w%Qk3DPV7%~7?Af%j9qM%+U9BuO=KMD zg=`KGFQY3$_@~jv^mf7qqq@s{3KvwE6UEpYgj=3+`Qvrn@Ui;80L1Bn_f#-m%)!YL zzX{TT{szF*3?K0Uv@(_oPRt>mV%^?egYk$Qd8+OfYLPWID?A9PKZpn>8Rf)gAg(0- z5a$u#UjUy(O=T1@(@`qCm^@#w=9>aQLoo1=nDf_^_?*P1a`RBNS@;Nar?GX+);2RN zzBZ44~E1QhF?o*pBytZHu9YCtP zt9`FU1AYJ5j!*Dyy8G%?+w-QG-`ba>+w=C-${u5Vt_@s_={^vsQo9${1wR_Ibm}m( zzGtsJIX8IFnkBOybk&PaSYHQktFlc6 zzR^pNwKWA=`iUpqy~;}J6Ra|8o$XnBOD+9b7=N47$-w;9gaL^%#qG_)M6$?pT2Dly-s&Q?yR?U4&7sgaA;ktz%`N zH7>a*Yj8Uu&Ck*`It64MESHasA&R$19uv*mTedT4V8vjY)Hbs*C39CliyQA|?_?Nv zpWH;5BAX;iNs=l0yn*b@c|6b3T8>kR&U@}`6TO<*8keKgrY~I%Pyj(;w1lk;<&1J8 z^M0h4S&?k!Q^$j4EY~I>q684puW2z*@2)$hp~6YfY_Y{PDn4ZZQ?Y)6z57ObkzeYB zfSG&DEsh;?rnS9nVa+T_9#f^45)C^P2m^*-Ag4*Bj<7*KtYe%*<(njIo)AwvLxsv z6$tKR*U87CKkNK|3@fi9@K^L!FG&HT>4^JmKr_xlI4X`ZjJpcINeHb^Hvj^EJ1m^( z>CP_BCzP6GLRB8?Oj=BX$_lj~Dl4?=`y>i`Bk30oqRe<~AtmpaG*5bj9VVl0e^_%NMo@A*f%y%~VKukt!B>^#+ zl!oXnsOf$lR(jb02KX0`kuVRDXEyT=0cJD8t{Ix(3jIKh)+Di-q||8QIxUgsZV=5apKIfow^;XHZIO#=bR{e1RWFqWL)DQo?>)Zq=vSy@fw%R& z274zqlvH@=-gh>?m+v!eSoZ6u7oKi7Z}=i`XXu1M#5Lnp+FJkqJX6YgSWH%!xK~Xo z4AQCHykg5D??t<6n=v}b8TD_D3?1e$$>O$}pQW|bEg2n@aPC#crMm6Mwa(0aocFZr zibE=Em&X_+4)+_G?JRLseTtCLO3!4*E(J=-bzry4@lg`Ik~JF@i0Bmf4&zn0g$lq| zFaN;Co~0H;(wK9T?xNZbo8pqrcnt8XnQ)6pn|cY1;(syreXaG}+)ijTfGEa2pusLO z5%(Xw^YnIfVA8Y|<>>y1cZp}mhpgB!Wc=JA9xJ=LT^O49Q=z78W9z0_LnH9W<(Ycx zLfuk2=sFGDH?O(f_jKt9bJAMP9FP<8Y@L4Q&OuxSGDuv<64>5GMGAD6iXE$(qevl` zWX4_2^DHL?9><2*_Dl8DrJCLeeEP@i(|hK=PPa`mdUH|gVOPCR#?@uB=Q0|>`#9|8 z9Ed9AQ3XT1d6#95ZwoW78~C)D0CKE1!S;uuQ|ntQ@J$~veII9$qH7;tmyLR+Rj~~8 zI@OmKI}4W8fiL~@YQ_c`h4cI?PHW%SG1sB*I~y@&$px(^EA~Cv5w>0uHobo|L_hTPk$JC=ytLh*k){4LUYhNf zTx!DCOPT~BZ6i;yPQqS%Qoa@GeBNgyO#WA466KZ3zjgjakigG%>~^NsNZK?}mJqXM z_J(;nuULX|U+w^ly@^lqF@w>a0;3zRB5;>83)QRI_CtEzntZhWy{EWW!5UYdLKPjE z9whI?P%lQVhloOVWeR(OS3kO(v6G=DK8REveT%$ulvK^$l_3Lk$$zPry3*24$rmS} zmB(GFTpfvRZ%fsbz45EL_%sz4_xBp_5KPjUIzxjp`-S}I$e(NGiHtzd9w}o80F43O zWXw(QHqIpiY&pa)s~8I``-feZ!AdCcsWT*qbk;{a-b_N#!gq! z7eOTDKTq9{R>W+!8P5>*hS*EA0V623ky`A8&0Y%;z!eu!&h%Ecz3i3Vo(=h+f1pq@ zvVbb?uTR@sSe=e<%94M6r{_vFh0tmBI0DHm_0#h^LCE217yF!1@OkH{v>HqO3sBg{ z9Xy0%bI1*2NRT|0vIkEcX{Y{JzTc%&UGslt=hL7S{rH5g(J*}VkV)fj?@3%aJ=BFC z#2P79<2A9a68A^y?f)svcw4M-hU=7&W7StY4{blyXII}=^@@^(rHPM>C$k$XS;?ZR zd0me`)1TSaZFUrKO7uNCZ&4(~`_EV}27`19P)OO5Ae<3%1u2~r)ki1jJyN#7tDS)P z4_*Z!whR*Mk~sphbThgG^~7dZ0CqrQTZl*<>Z6@y1KU@R$?2GC1flHW z)oM)BAOr%_^9#tVL7r_1lcZB>l2_Vh`Tt z)af~^M!2{P2p;!zL)HHGv!9Y3358O-L9v`Za0h3!6B619zxzxrKaphUGbQG&+pn)T zBsJZfNnKl^^+vp%{>;zve|}kj^(K$sba$6u#07=t(oVf?_t7+X&A!Nj_16* z)S2Lu;eu(;Xrz3RDXXCFIW_nFR^hF@bH`?EJh}MHph*^6wq01lL+0Jd+i=wW(AuDqp1(}(b^n%xxX!eB$JZ6sc}hIeyrZS0RQiA# zRNH6DMYp%Qc?}KAL#K^u`PJTTz^PvJOI=cmWzfhjQZE?(s6@s@3oJ}U2U+U!o-gJx z%5B6Zsg9@fkF}{pM;P`r3Jw}eEVI(now0+gu+@YpY*SW)Of`YuM}D@D74|8@#yrXv z#mz=>pHfMkzbsR}|6=5)c$RwaKm7p3N`(M`k^dTj4cCeliI%w|n#8`YW)ZHp-Bt0K}k4pkUIC(B;EB^9x@1J+T@EH(3^_vrG59VvR_cX`-?+1xIE zWUJ1cH-OkxN-t7Eic0JTJ4e1t za{bM+$*(8&&e>+J+sW}JguY(oE1f80 z<$_AFWp<{JuItG+Md1bsDU8xBo6)1JAAD5COwIM#uor?KuY`${^EY+B(jD1tLS=__ zR0|6!xhR9UqL_2QiF?D4d zQt@41Dp~)77h&~4r`EKG{1akz=FH*PMO12q?^}~PTld}fRL#%xQB(@NCaP|l2ccqQ z-+y^|EjoOI$}tLOrCqS@edgFh{CFDe-C}z5B$GmE3(dUW1!I+0R8Uf&x*&k`;IX*< zq(X%4)_JMbb*s;jd96!2nat_<+j-hbw{8A!5C7}6f1<|H5ob<*asSQj$lj8Qnjx+d z`H|G|g7({{a9ytLB5u?+2w{9?uB>j1@rbROON#bNxd}4rriR(Q8p|;#`wVt(%Vfv8 z^}~b^mAz28<{ox;XhYg4R%{vb1XE%w-?t}OKZv%n1`T>wBqSM=d)V$mVu$2VnBTd)yUnhaKJuqUpCP8X zZDF*-+*R;3)|RhyON}^+Q;7|-d_)kJ6WS%5L%vFY6Rqqy5G@xj0m>-Aac{MUjxW&% zO|KT%Xp{!f`B|hoHF;eYS|7MxG}P!VMv;_8;--(p1HLL~ku?Fqw+sq@rF-KBfD3*W zp#5>wn4b35+x_QUaWDR%yC=@NAfgz%<`ClZxS#L#3{i2(BZKy!7ed|Yz!e4y)mG^M zEmwruGP`KzJ&2#4RS>`qA1}kG^m$P7D!>5qU=Ams(pqVH5aUcrO%8zP{BSpIfD&dI z#gG`S5F4Orm5iB`5=1wVlB!T(yomxo=Er*h9_7yisgR}<^K`j{PN3deuYB6qR+oZ>Hoy&Q@g`Y-lKluTv@N{6WV&|2Q8X{ zQAq;QmPyI?nE>(~tzDLFAF;jCkMFcp?5&l_bJaJ8a!y0Pn261Q6rMpV5}BtTVj&>l zwg_@u+Q)vSUjMnN*I(oLYdn9+z%Lp2B?G@?;Fk>il7U|`@Jj}M$-ple_$34Xx-wuy zJB;tbjCvQ^xrhjq#PP2l;fQi5q?ZftN7iC&sZr2z=T6)_FJkSM!Fgm@l(bY!Z-A6e zg8!`J5MX8ja@9r3SGo-XlqS5z%>tcA;{6b0G9V9gz^$~+R0zpt4W!Mu0)mCYJP`-T zRbhx}IGRQS?B6O-AO|#H=$csbS2_gX6^~{tFbmQ;GI|j3GqlE(0rbJ&*;LKc-Kzi( z@Z~EVF@1~PHAM^91j)F01V!IBUJ240iaYc%03^?6V@TN#sXAX_1{We&<`V3C&LbD#~B_vE*$cle|Vc& zEEqwN>Y>#I04I2$uI<>ZaKY)Gj-rF(q2{bnZW^8K-0Z6OiyrNm zM{Meh{-IVfjhoywc33E4su#cuwm;92gW+?lcsW~>I;D)QcD%luzQA5yzj&VELEm{u z5GGGVy0Yjp*oGo-oke(#s?jgH4?4i_P|?o=`BZrGWyhpRS9a&A4``8z(&h)#8HYn( zlicE+E!dGa3g2-x*K9$dI9I%UA7D6}*T%@ngZQt7C? zYsZTF?oWCWF3qJ)u)1d7VYK(6ZnMYu0A`+TLfLqkzTP$l&)AhSgESm^-6hgrYq!tq@yS%KpKOCKY8_BU92ZXZdzAC|(2ZSd zQVq5UHn|g-r_lB-cdw!v)c5%5M$Q$Uv9-FBv2eNC(3pHy0g`}?Sk{_fH9uQ|b&e-S`e0fW zj78^pjuFoUyS6Fg`EQ*YV5%b+dLpW_OUHED$Rzsta_uckm{J8Ds|;T@B-Yt=9WoDy z!N*UgfL0R%pcRI8_c`I*M6EahO-^K{ZiGtk7Wx1GzGyuWf2>+B#P7@YKRwj&pEXD7 z@3c-d>EILq8f62Zkv<`S9buzCkHfq`+|gZZ4hC(#eo!4-EeyWbUf7ld)Ph=R^!h5> ze7$eaGUBJ%-Xey6r@LUi?Ap{cSPl()lloGtSOLI+K>vg99zgHsQ6OJLLi2?Q@a{%v zuF!^MSJclwGJ8(VPQN)%7hZSdg`aCvcLy#9 zM+rKNqCOhmnj_e`)8Ee#^5>`fvts?9pCjZQqVbrOGQ6T7klK_t(Y_uLC!k$uY>}7`-`m^@d|@S1F{z4{==v$VskaQ656aqxfc7l;Cf=_g->5pyJ5x zR9&&-$T!`s3v~CcSC~~#CeO}s`tJSH5-w2R$g&hdIG=yVv9m@uS(-_}#WzsN$MY-QZcGhg?I6&<+l~Q`!CIxd z`3Pz=__E)JaKy4y3c=#u9BGpaY-X!75Bg8PBye!7h~jFX+?UHr2VPgSsp~^XtRnI4 z2&+t+?4=TZnnk+B^Dbk(uGI`8Ebp3kqw z_z8Oop-<>wY1aph;l0UCp_S6-R`w*l|LAHT&vSS@P1%JeWu6{;U5|LAZcd~!j<>Bu zJw-mOz=ET*aHhnk)>l7J*tg22_1Y`V=?{?xmNi41ew=WR0&wqy4nv^Unt3 zQO$x{8_`F7cgfEUl$*9{!O?gk!Z=&1q z?uWDcTH^1z(m=zB5o6VD? zv$7&pa`NPhRxlKg*I=ys+gu(lzT+O<{bMYfLKqm>06a(%z0YuW=6>2BfoIQ)S0^M| z&aUgu|0dO-69BdV&+gPLmBrB)rd=ECH6Ai*u=8esajt}7*weYLd+qh==rA~$(u6qZ z#~gc3C?CyOy<(UuCjVGn&b(OJ3*cRIJb9^%kGiMzfd_PnB8$3Q3|gv0D*4}ubw1gb z8t(B}w>2=KVA}5uEcZcmA=FaWFJyW7qZG%2&_XA#0HE2t^Zb3P;M%nMp_St{2*Q2@ zmE(v{;ZGMFCZT1PZg9$NZ+UiYxSaQhk_TH=bFcy*J|#>{GFJ31%RBArhRIKcIkikv z4vV&-z!;OqAdA)rBI^)E->qVsfuoK=$7r0wGyc(~`1Jse6$C|W=nx1J)Iqx=H=szi z9Ek5e0w>tnA4lX_ZKAJh!-13YiMov1ki=0K?YH6_I98lC2>`?Q7q+4p>MP?~=>M~~ zzC`4SQKDiksb8RLYOvQ`xL}`4-lMTzQ?QQ8i;E8Nl;mEVaKIrh`TOsXgz2hJuWym~ zsxnT<)T?Lw;V6)z2{6#Pj2=W=?_Z-y!or(2*ko!HXchQd2V!18fQCeVlzg(y#VqWHZcO)M#55FSJ`wScxg zg$Q#wOUgw?*y=v^3=mYU8oD&sD>5!dG*dYLl@3j|r|i(ezwvQgt^t8!A7WS-5da5j zdK$eTZ2EG2fn&uKSA*uNM0k)~Xl=$I3{*T`khjz;W)Ol}IKo`*I8+-oO7l)PGc~=N zrPC-_x~A|vp(MHj$Lk}M_Ayx7xK#KeW0S0X2>Q3WNaE8SUa2YJ`H~%vI~mzkxC+_T=hP3@AHMAD;KVZ$XSwW2lT$uMONL_ zzLqq)7;LR-h(7G2Pqa<-;3TT;HnnOm+-qtcCGQ4JG{;>E2^)6c*qAI%>ai_S>Ux>> zDYvKpZQWklBd@&2HA0wfL0xh28w{}0hgD>Y2Ivz% zfq>9Y-UpkGy!@=K#4*jY?R%y5?|5$3O%_JfPGumz$N|MziDCaSy#PBcLEJCvfT(`5 zMg^-}()ZYE&4Tp?MQp9`D_yVt>Vz*N*~k~DQR-;~Am*`f+KjVPX?( z7GWBAbSs8|fzX_5&W{y$P*$|>_<@&pL!#`7ppADTgIBkV($$2d%oFk2k-;TqDSbn% za?Wpwb4p~3u$x7}yPa(oo(G_Cu5!a01R0JlSOt#7#}Ml8V{DmL*=Seb>8_31wB83j zQ{yCyau8V{TBydW-ny||^w{9YE;)a=d}xI?(@d^{KjRYuzS~9NBQz8kcy=NyNpNhy z_s-kJFB|=dVBtMDtt{_2V>-dnq5Hfu=sq01R{`05N z_1Z1UHBN}JB$zy0pG)Y(iH=QArK-G7NWpaeZ}GFpAi@I0>Pd=A9u;aAx{JGAAV8kq z=DfZ;4^h_Sab`yl-F_`PW^&*NB2XougeBQJ8x5~p#!T1~ndDWK>|e-<~l@8>RfxyX>n2rAHM1V0qI z=BxMq`tZl?I?9gRJ{Ul{$i@_wGi+y7Tr%wm<rp5b-a5>5SugRl-s`HL48jxXA(r_$!b&#|?TQ07(I36ZK9 z;%~cBNqxgZRo8ti4z)`;9>JC#jtm$%t%ukj*2t(&QQ@NR6j>!-#TK?p?Y5ocGUCqg ze~m>gW@#}{1Xcc48#=wgP63b})E@ydBu%C7T-Dv$FN;e^eRT=_;;p-z*? z0q*rn@HRWw0nQC|+;4<#ZAr~DXC+!t4i1Xz+cB*sOnHl81mK^Rc@d%=6Kr9<7QueKUvs<^;e^km1lzo@;a!44AQQZ=y?9`U$IycG zNK%K-G1kKUsJxj7x`lxRCw5dh68+Y;M+91FWHWboXY$)ZIx}O{omW0f3vp2-46mim z=;_YenxXUF4*Tp@5=m5^4?9!upc0>iNmnrWHiZAKN0HvIbQW5hJnQykMl|(M)M(TK zA}56s=2bxTZ>EK)O;jVct7x(jTNThiC?`=#3Lex<&<8ev77ZnIx4a@rU&#KRlOjZ!e0(&}2EW z;+PEFot*+Bm1P9nGdA*s$mhl}FI9qN{PX%wyKyg&oik%vMDzKz86m#V1WlTH3BBB? zT2BO7v!v)R4UfoRgSPj#5Ys)j)fqGRur>2(pDrPzywZzE!7TsR-==TLkCEt1+piTA zJ&Rvo%lS1zx=t5<$yLRnq{ey2N>*67DWYr^|h=gRI=NE53IZ{x3pyyB#Yo7KTD zpfVPO^FA0s6z?a`&z#)w3IJSb1KSd-A_h(8RkOyAV?`>UsUlR3v>$tvm^>;*RFiX0 zpS?1X8G_Zv$?)pse)l@Sn{j7uiLWE`k5Bm~+Nu}7G&5;Lw z2OZ~Lv$DGQ8(4wcF;C`(a2AMthZfi2te>ZDzcDk;+DX6X)N68RAY?vfP2#Z0T4D4h zf3dVWSk$^g$U7*{w9u$MlTFO!7dt2SXGc=bvR8o(f}2Db9a>w@~5Wx#$5G_&A*0pnWhcBnulA=#Dx+VjL*b;3(EG3}`peuR! z0bL+{k-(`-otvot^R+;68vXCem9J+SB!k9=6n>+E&GN?6XW{GhY*fzt$*37b9-I9)A|6CLRk~%rvxB~6$Fqx-XQ!`N9DR7cb1^A*ZBQs~O*i2d=&In#S_Iw+}Kq$(KTiZKj3VOxex}&9VEuTZ;rg{@wkAe{Mr1 zy8li0`zaPc!t!bL=oOjSAp#qeBrX!oMPWK}9y)fJ9|_^ha;G=^T|qcamb;5JEdVHC&o+qgm%5jtxew1I zUX##hYd}tFQZf3H6LhKA!RpxuQrX{17^QA)myDu}(J;+M^b=x_o zck|pPv%XF3&Zjldc%%mfOS{O0cc8ojyx4`y4g6q+4Fo zIhA3N!#s#TSwiDl_KV8Ma_hUg=f0~|Gb@ziM<55MBZ$tGr03xZ>PA;vAMfj zbjrQ|wl=Z~Mg%C&aKI9E&mv^UGkypbax*D1UJ`0>9$#(30*F}!eO0G$d5n|@d2bp> zAg(3I5(lxh)Hl%a@VOzv(pS3VecjdTixY@Xez*iVxn^QU`opN$Lg9X3@T<)aMcGW(OvzU{dWs9YQbumli7|l^?cWUB_s5?TRahfT8o~mxxmOB8W~u|KH6d$H4G|(yEJhQb&(l`& z*<3>N(prXA45SbnM?u|7$jsg>{AYFVtI16~v!>E`3mPnD020P`Z-M`Q?_nd$Z+-j9 z*pAp*efmPF4ML;^@2h0PFBP=(UiJV5)HVU-OxSdWufQA4KK{o$Kj){iS-2 z_CafN#=plKV#3?GmU&LF?NG$|a2?5Q`g%76kI)?nki{bQndwh8Hv0waY6%o(o=^}Z zM#%{chpOuga!xgz>Dx2>(m0@|{W(b}D+{Yeq>kk;!-AqU+wTk|Sy!g#6f{Vda#433 z*+z<6_fTWazg#3*Th*;+UC=r2sSnhUn$MSS-U_T2zJnqSe7WX|g>!?Kce^{`Y(EbB zmzEvn+1Qq@)UQhtnuo@^Ek*7RJ;c&g~DOw~#Au7FRmh;i>V8aNH zx|zZ&e9$0F$(n{5i@8cpM<(~V4Tq$*fc_?I*BF6E90{ zzen9CIWalu$t|;0I)uE}UT8LLMTY&m%GqJ*;;)Jm98)VjLigFn%oBAK6twd2GNJ3JyU^mclSVkG9#t^7@}79 zno8hHfUNTJ+sbyVq0axV12T#mhEwHm^a0j-(BI< z3u{8G#=BFzmb{Nv()v2c%+;A*E>V+BY1d+5R(v5urD1L~H}L^O>P({X8Qa1dt|LDA z&_U>%sdlJE1-ru~o@)s;>^2;|5+d0V~)xU65mm<;% z!(U?@F$8jcEdrUNaI-+*cX`?2t3nn*)II@q=r5|k_UgH=O#JCm#S2h3j_pA#htID8 zYq7i(C$TIt+|(T6W9Rp9RB){#1RH4(kRI}p1WGApq<7a8~ns^^5N*~+8r%lg_ zWS#GAQ4^XjWi`B!+Egf&q2LHQxj2>p+*=q3+_tfS=>c1+g-%iTfU**C7lN2hl0{+` zKuxoWc-$}kQo(5RYsAQFd+4-z0jND)`U3~IXUy{}-K8Tq+I9#{7#jwlD8GN;C@Fw- zDEJ@x3TU3lS32oo|5^46ey28TXk68+w8s|^6b2|o-x2VAA4rTTU{`@POoWSRH!2>h> zX8S+IBG)W8e=37n`-Rn+ZnrUy*MNTWb*w*a*{ttJ``kNf2991|CM%2;}jF1fU z6ZRFG4)Zfz-+ikdNN3mEZL^>6AZKtR+m_v_yJeec+v;fSh)?vROC(OP`3QX^Ma15g zb-JOaIaek|BqMO7ImF_|!3wW8(1qV%n_YyLc&+MEy&Q|IT3oL;qdpMODPCq}>(-)>zEn`00=xM&FnkBsX?0BXYjCdr^ zX{K)QZBQN2ez-x5!NW;jwq>(`)u-XrLz(AST?zDWARUpW`s}bLLNWzH_q@fC54FR} z;bOElnz)9sseeV+S;qYK>!sy7yR2)gp~FYR*H2x5rTEwoUot+D?2#Netshx=km(UU z<9t0Lw3Ny?>M^%+H9{^&E}~d2OkF~}j(?rMJ1zQVEcG2$<>iZ8`lZkO%&iiT1TCI_ zN0;LJ-}Ik$FV5qFhFI5dys>h#1+e$N!Hp}l#(D|dJ?BEL4JAi3zL^))kl)1R0{rT6 zkUVysUo*g0c0Qa4c^4w^I9a+$aMq)SB2n`gIxUci7^=k)2UH>R>myP}^9dhl)mHbZ zd>HeDj5$yfdVx;Yrs*~;`0XH`vr94OB; z(ob&MN)7!H#3mroT6wRo;XdT%X>1(ae@Z-M<7E(?-<{CF!nMHpf{|?71RLICapIGM z(4OI2B|%Rqm5_`5h%%A>If;tHataVUAvOtQXw&loZZVQ8S&e5kwZ@EGSH2*zU5PK( zI)uE1ZMMOW`L$sAXamGRXZzic^V`{tPPSb+E%TJ>z8{C*2iGRHo1iNE*gK^>9cjVz zvh);94@F`&{W9iJ*2##`QNt-`{+w)gx7kKbRjDBmF2$;}Uka4Suu8X0trtuvO|1Ss z??ieto0pxsE=Hix$E*g4-UeVd|`rv7lxriSl*v|#{iRmUGAIEi-zC2(8S{1A`apZS3EirAY?uH$z*+F8oZW!#$>O4D$1PT*j$! zKEeuw#7uNjD;qV%tU(Fh4eXORx)XE`5SlQ+ZKH6p%GIv#Mv-QmQB(%zp*Adshrrc3 z{|Z7*WJmvV^qP~BTZf+dJ_F-A>O>8j+6AS(Jx0dY`%aWbm7F6ihwxu}qoh60xcw~< z_%DL*2E0w%)^_u`zZ>f7DU+4Ngx0jMCXt!(Y(Yc3mL;lp<+!Qb!3q7PG^th|}9dobO+)GxNBL-hw5 zH==b-2I^N$u1>1*yER-m5TUwgovY5jQj&W?RV1Qu(dl|zQrzTAGa5I`;e9#%c*jF8 zVNru1wuh;H-f|5&{tTUMi2Cz2R&&ZucYx@wR>}Q6lm~E(I&>aq3c_yr(lul+Y4*^g zYa@J7&)5bqH*7ycKdi$^Ohbra;7WvgxvX^SF#Ggv^4eVmU{SeZh_5z$`&T-15Am{VLC*TBKntd5+L5YHUveC(b7b6U2fQ-Y1CCVvzKReJuY(-Uf7De5--u@wI+c$V*W>SNb7QK?$uu%WTx(>f(h6?W(3 zFhot>>7$cBlv+I!CmXU~w(}yZleTe=rPQuM`S70p{!6y@{2Mwod-jDk^M`Qgc|~|| zj35s9$@cXo6}dmG{a83*e9fZK`YWADIk~2Pc_wC=jg#12$$RR>hk`T>$=@b!z$5rc zN5__B6xKh(aswO8*}UH3!pFKBEue03=$E1sjT;3z{R2(>8~d|8`NM-HvS(H0HI$S% zW_hhZDE9+c{(FP=?{fa1Hq3%HMP1QJp77qHs3_DcwAg~gJLBb$F-NXyl_@>why)%- z-4i25V^jj}H7wY#3yt{nl};T^O@=GL(gGXCjAC9rpL!WoQy-{nt z!V!;vR29b+AM25u-Iag6#iwTmLp_c(bI5`WLWn?Js)REd9{M{iu&#F;GL&iaJq-F@`i;ly>!Q^AZdnCiWrvyHRz5eld-gjF&BMM+cUNdtM_ zMg0&qBJ*PNq(~D*WBFC};o%5Ltm(M{+(ayL(~?G(LDV8wks=9ktfBIHn%1LpTAr*i zDlxFk*&+{nWdq%( zO3!ZiZ^AAq@wWMX@jmYc^v0W%Lb!(62gSekvS#9lFZyxYy}k@9RVF%;TllG4UIgKY!}d7<6|S zmLCi`m7ycKuUXXoEV>Sj{I8O`D-S<-lEz$uoxo`obRHxuQoqnoSjH_EB1% zs`7ezyItvR)V|tA@y!VH0W{yr_LAqw>Bl=m6q=}41wu2S`SusPQc?$JqwQSN2KvoR z-j_f3+?~z)Qm)fTFe@oDLB<$6qQtJd_pgbp4n$4?B`5|>eS`){Wfk~o*iTnXWKejn zf#|PvT)bNy+?#nfR~Y}4c2@tn@VI`+ez>L;BJt!eg}%c3-@fttBkX53MT7pj*gQZl z9p9M@(!H`COf86$fjQ20IrDgI}1 z^XmvA+)RQ-cm<%RLsT#5h_6R8x!0aXk653p7tHj_P}$Uu?#e(&$lvQ5n+lGY6!@s2 za9zLLqw<7$mM2#;*O9r|BfItUyCuElwX`A|^NT{%xxIO7TEZTAA&IP|Q-nLq1wHl_ z_^kMo$3C94J!!sin+6hD4_H+`%J+WE{&IfBx!oYU=V4U?IwG;OImrf_Xknjr-NewW zGN-p+xmA_h#e$DPA1P9$S(DS*{1|)OLuafUD^lE+B`vAu)8KjKE1mH^a_0Ih+efJ; z*cZr=5}<{c+yf4e){FLHU+;OpgQpf(1Ht}QyFuU4U9-OS@v2HeihEK2W}_*axlV&6 z;Er*0I0bySX&wOn{msqv{^hU#iBwUdQ;H$zfqHv0D7wD~38U60CLf!JugsJKr%s@K zE2GuA7T65QPZ`4F+NJ=u9@ZSS2Kf<0$xBb%w@I`7JcdJwMUMlo)Q#uCx8l=JM@A+5 zYDLp1ip$#T3d@9spu|3kxLD)V3gdE>?`LExGALeOnU0>0O>L7*fZ+$ftZVK2?0?Fy z>Yj5gJ_XZyAAiL`@=2e|1IP}+7?8pp~GcEla+MZgnyim=w7M}g%%;!fnIJ=EReq@YJs zC?F?Ak7!W?Ni~pT0>BczF~!mnYM11nG35n?H=vRZ{ND zKLCi6G7Tq=^=lEY^`dnrQVuem#{%il-~T_F(Ee$Azbz;CXSm?MCxB3=r@zU#yeIV#6rbKG#+MX?bUk{PDcWLo1VU@&u&+0Wzy)J5ZJT5pPwZQQ*xKVdbg z@p2$xy$j@n^4}frOSZWSXI8lWcD7-jZ4eT)0KeV^3H6b-9&KhZn>kp<5bLKZ9(f>4 zzXohYz*l-o)csRGBVH{0Tb z%kIo;>t3*b>R`g7tWX?ePh@&G+o3l+Njj|SpC+}VgXCXU#Oz`DN!IM?i>ADzS5%g- zcsdiarHYj}R&pXE?aah_wXdqH{>I^WD_JdH0rcsL2Cz(~oy$~pDndP>I~>~)O&spJMm z?RB}k^%%*HgTQ?jX_qV8a-zTe!+27k`>2lFctr=^gNzr#^Nk;V+14FM=YGP$FUYn$ z1O7?21Ix2~?o~$Lcxh6@F?wQjqS$B>sye$8)aUwH-mm*cDM>8J3X5ELfe}4g^udw; zKtdgNSjfAxY~waYo8~jkyQyhD=T5trLMzWG%k@cJU;2xj6%TAQx|Y4r1o1V>XzD0_BXI>63OiVQT^tm-=W zvayLLH|WN?9tA(EO>X!<8yEa{u_Qm4^KCz|s{Ss`YN{6U6DqG%>}O1N$4#6+D1?>$ zrpRF&`RNu7S{ieO8jl-)XY-YAQ4v5tbV>%XDF7ts#WyJq`2!^Q7y2z}YM3n)F(Qb6 zlU*9^mhpB6@?wqXDMT4GVrD;F<^ymrb+%2dlB6VYX zp`(j@=>^fQ8iW0~>@@e>e)4nV!%r(L7pn(XKI=d4_2{}jZWfYs8&aQwiTOg3Z)T<@ zm#`7~7?w3-Iq%u&sd%N!c;EtP87<^}J+_nS)SZP7MP7N{_!w&OSYL3u;us)ts=O5$ z#UKY+qsz@iKW1+WeT2j2K3y$3>vdo@#ec2Yi?A}Ua+aVoaMz37cK%;r7PG}ce}G^^d)t?Y@EK^C=Pkg2MObFn+Vs8SrtXL35>+Q_m+fw}vTsI{0 zy>k7SnJ6NQa~G`cW**JY54~0Jfb;yA_I+d`9ovl^o`$i;O1h?6x}wRRvZ#1bb{MEM zS6=!wxU19kTBR0`($O-;jm(u4#w;cVGQFAHt%(yH9qSV(*vCl_QHsklgu)NsC&l=r z!l(xk|4Fg-7*jujQ(Nlaud7q+rI;pEH7_ zc7nsQ0HOPSHCke^xD8$_b2oC|q{O_!3Ti{7GhkL1->^kGucVhRgs`_q#*J| zbGJL#G8b;v{n)Pr&U_Az~o@s+~(RoP=MIA%} zh?A2P9R4RMIDgC0_&JsEUra9K`RL*cDtHCEEIOsUZJ&sp&^Ndp`|PGNBmEZxEs9_> z1EM*0h_*xCThE#KTFRl~Y1H8l+uzNqsrBZLtBK6vh}v?)g%L!O;<@=Xt z?3NFqQ=gXrvL_A&Zg_Kxx4O9>Nm}~hl^-4=Z+bHjFk$(?<7E?z-+Uoj){ve@B_$@m z-n~!B{nQp4RG>d*ECah=7a1|@@cHz9M_;hI()s^KIXA$TR{=>ZU=k8Xi=rsQ9fA(s~T`j=5Zn1l_jUW8Fw zejt8`pqy;sJFy!jF`t`MEHN>5LABZeA&f5~@i5yw(gjw7{%||yWXbPDo_GI2 z&_8^S`d~tb2%5MCagc@(_hM}AxrzFE*~_Pc?@LszT?UzT{bf{W{*0W)XsOoqX9Xm^ zszifo9q~_Myhu8Vh)Tv+B#qOb^-q~(t`$91smQV`_hKCLlHA^=LHp}^8FD=roVg}>wEVsWe`VcXx zAL`_gRs15%Z-$;aX69$E(yKdZoY>MZ=cG5`Eiv7DHz=aIwKjcvI74L5L$+(SjDK%J zD+tc>&9=Rl3YQBiS+*%07447oN;HTB=yA=e4l@_w7)rS$LAwaFqc)%(P)=ewKz2SF40{<7WaptHQg{q? zPmutPv1+UG)IgRYD7@-bDf~=pfvj9vUn0AIrE3eC8}lMnjG>T{EGi>z`L-!@F{Ygz zamuwfibDsoq58hau=yxhltKFweG%V+9zA_ z!HR!B-z|Q|J?G^fiafx)t;oA_UWo{k*$CQ6yY zHFIL~54wg;PVn8r>Rmc2&d9}xwi#(W;Bq&tpI$A$XG!w!j;;PMkT3ZmFuD!6AIYhR z<=(C5jZOc{^Iqham<|6AZ608C%)RIM!8r?m>r)^rmnZwTS;yU|IKBydG zM27vOIXspY*z89z`)1C}87UMeHfI>Jpx9yAxy?-SbS!l`PV!F(S@YO;X<8BLDx0sb zlN{4nJxaA#O99bxWb|LYZt(9~5Bc@G{ypnl|DAc|;CP4i&C?mPfAJvu^%$R&DF0&C z8@H{SeJNASQ`ccos3J%dlMkhBMTk&g(W$H^Rc9z%5+Ue_OTVv^VN=$;t|@{SjzZDzi{PTlTKpD71rYTnF4h5MHkl0Uu@Pjde3w=`lh;b9ndOfNb& ztYKBY5yv_Lu@)WLLN0iwBy8zHS3gJ>OLc>B#MLjGx8;@y3Pj3Rx;Uz5Q7+%ki~0|0 zj}H5rYWin#Kj!QXksEbDwYz6;&=6+WuH8qPY+R+Mn<3l}^JjI9T$MrJDYLYRUk>2^ z5j(goG~-(MUK4P8X_lTyvflB@^C?Cd z;=_7=?I^-5zr$!i(Jf#h*^q87EOAygENbc*aoppzoM!DzegZpu z7=+2Kt#K$NCr<3~;-FDi)ovLXZmr4lR1uqY)0|k{#>l$xAk!>XiS-$jGjd(X+^VCe zuVYpCMuzST;*tUKG53p;PVbx9Lv}iZG1ZLd!gQ=>!wh0t!9!jJW!`_?rt<%i&(6W# zy|)}CYcSY!H$)w{mXd!JawKCf~)u2f5)<7Y@+qRmfELyqrC4B8ih ze&IhiLxM?NwK(i0p*UA-&I7`F5OAsJ!aj+Ip6){xW@CkqA$M)1JU3 zNJ`2o$>2ogN`LL`IOTBa^)&+T!vxG(tho&NeXE~9$|bP?sFxRRtDDuT)^FcRI$wL3 zE$-cRc5$+}X}5J|f6IpX>{;eB%v&dNa?E17uD4t~9W0o|RPAnBf&`^IT`VqJnA_jBU{+9I{>w9Yyk3ZH3ZIqT z8^Bb4Opsywjfq_+8QdSlPi?Haz#}XlWF;hGO-(9!NcoTU_Ju zxOsnn!eNhdh4<|GL_a;?m}$=s!D{YmD+{%gtUiw7BVQVJZw}4V#T&hPN+0)!Q6HO<%FU^Z#S-t%Ks|ws_G&0>MMD;2I>j6Wk#< zfdIh?K?c_#gF7K;a3{FCySro{xcgv(JItGW=blsV)w@;q)~$MfysAS{(7pS&wAbq0 zd-v+zVSg~CDgA8C<$Pt#j?qcTAi2IJ$z!xJ11QLXfUeYWLC8zKwK5Tvdt@8#4!hyd zI@}mhL!K}Dxv>K$5m>Ks)~m)_Gvp7nleFtF&Ms_$z$EGxax}zji>P#dfGa36Qs!UHsLG#Ngti#o2&kL99VQBHGsq9cC6w zy1b>33w5NJfgSoNzXORZA&H9G|ZDMBK zZ!7NhOJ!wA$P1og3(ES0aRx-}F_>^z8ac}NBeB5WMHIh=`je0X9aP-pQsv!U6y(#k zSyHpIIebEtJdN=}dx%p(dx8`HMmT}0hl9|uBT%G(ZPcLmAb2 zZ|(KHO%z2-{uS(xjAO@Pk}auk$*h88?DH1XR5F$DyH!jMUp7qUlG7Zj`$vg%UgwT{ zb0Gk;M>m&5uZnlXzR6Ralg@bCmvSwui(q_UuYUGJfiRcsw-ha_OHcM1TL%m$4U^$h zMzs5OOA$t$> zT+;eo_JnC(A7-c`)w3lx#dI5SpQM?ZuP`DMw8j3-!aQwBC*fFSvQ-_`-loF zF|E{R>4ywSnj}JQM(i#gMTX}u&XsS$Uz|@l$Om~i<7xtVwmxjt?;ad-hsltDC`09R z8{4zfQ`OBsN6>TojKwwC>pR@5m>{e^Xd>iVqtzJaQQLdE=eaIvjewHkmyAc~@p@fe zPB&4O>kI@fnU9WTFsvEp&Al7#HKbI$#Qj;& zsO|ezl7zSuKMz)YAbN`|^z%nn^^{hK~ z){cWQpRo?K0J@LV`*G`JAQz;qqw<9a`!|}r)MYpX4nweU$a6)DZosEHXk5RXA9Ad} zS%Rv2tJ~wX2ZXBtN1&DEnTU{XZ{U^3_qM`pG1^$qAISXgjAmHQmY{zETG={nNz=ia zM(Ia&9v||&iDytk1IG6|CQ7~1qu&z0pB_zG|IVe(ezt*ro~48XeDeRkY-1@PH7C@} z72c+@cHJ`_PWEfbK2>-Ma&dR*^4~HzJV%0#Jc?;FltS(4+?Z822|~nB6AK z%4#JVGi!?duL==#T|Z(9b`tsM4+hjtZ|1Or3wr2oa5KugzQ2;K`W#)G>KgFyOQU|< zAW9`wMzIK*iweX5Pw{ZyE=ct;-Wu9|s-nv+c0D8YX5CoT@p^|RUSj%1ZS=!57cCNa z>O$783lEr9>R?fEcG@98QA`$~GCqgO;mt1Uisa(vPuK9wSk#)VnheR4BT0?VVb5`= zIabK2Zb@~IpVy4H>^!;nMxZ> z<8pFYd7X7A(_&q#%Q6QtMPOekmMeln$FGtIfv?D4%Bbd*=a<^Ce=YAoqvNP1c?7#& zKhQ48k;5wCpP|kdPK#2qx%vGo>m+L1t?is)ZRu}7%fPB+M z&W`89hyu+&?>1e(`k2Kp9;dudbjO1JgbsN5ix&JvI;pR3fy}0)xKD&Fd96Qz;rs0C zBZwTe{Gdg?X{_wAo3!rb`HomKcKK^dy#){CUQoeHiMm8%Ig22=uqjmpJ^b*xv_?Pv zxA&bjqi!jr{p$|cdD7ygS)q`(mX0ba4C>?P(j-2#fN_{QIX|>gUlL zDP1M^^mOWBk@tXZlK{*@C#|gt+7moeYxqsn*~4j1Ou@IpTWYKVs=Tz!2w%sPz`Rk% zG?!cMWuL{Rq^p8sMd!WI$C$*_<{zoxH*Exgy(Fy^sr{{CtmIn^(YkRzWmC%vwnFNX zPn$3+KKjjzcT{~9LRc3K8b{=5x`@s`s2gV&z4BBcWkMHwUVo&=ax z?*Ks0-_uw?$MmLOFK6wTA%m4pW19x`6w7y~@2-UwL@2Pb3LT|%$-I11tB+4$9zdBq z0uTwxH&GH$b$dj%X_g_;VJtsbub&wjQup#8+A%RziT`l9<8xbS$e5SFtZ8UL$2@v8 z!yQe#Mm~5YhA{2!PH}qS$VkO(l=q2qS^St^+D)=TK>W)h9wgIV;${Q`=$PC@%*~3h zIc|yz(|Z3BdrSSnhYLv%B+zy8kv|WoG_SrJ1Nb|w38E_H=ichGY3eSElqX8ondCU@ z>nurD?OeL&u^Y;h;5)S@@aMbFFRW|PWzoblX3O0Ow*rxvS#Ju6wxPVn=P%xV$#%N9 zS-;F|B|c~4#ujV2eo$NadD~Bzq@HS^*Zh+R{H15Bfxy-8c90Z5>lZ67DYEO!DPuzR z)r-@!d|Q=HIDpyrS(lXRnNx=Buw0b`a6py)I~ouKWlx9=(R!=YOw5qiZ~mOwq>U1W zdXjowAB?9YMo=ON0E1xU1k2+^5nYI_b5er`(?`xC$Ay7z@VC2W+ea8WR4;H=$ zZAJ4lE>RF;vJxI%?TzoTwD|gz&rwFuav^Ct`QVde?!W#jhdPe~bP%5w5v9!Q7aC@9 ztU>tVX(@qy9?EEN#uLzsH}2^y$df5=%DmTtr6ekE4F-PoO9o+YMu!OCKMBJDnGlb_ zEBYTi*Zn+yf;I!{j-&8{y5Nx3;R}_Imu4lixr9)$2pQYWw>t!?A zw_dRWWU9eJ#{qQ$;oBNN#_)zF;?K7e_Ob7>WW2#{Y1w?GYlYhpJo}!fCv_NL1ysM6 zuP#IrgoQBG{jS5M&0hhu-rZ@#QPfiEPKEwXMD&km8dE zFEX$$5967NJce)lx$6q_@%S9M8+kP1>Gb?IeYV|(7cz=2LGmqroqz~6&z3V);Ox@; zZNDP-AP$j}QIoamJnHCuaAClg7?ipGGb|-+`6Vu(lF5PG@QOqpgdxyniip=VCd8S? zQbGeYuOG$J0K_S-_%_t=UC*{9t@c zl(8TtaQ-HA0%<-ranC2mf7MNMe}Eq>bH_~{%G1JzEut(0J~zmFM)5?F9<`rD6x{d) zq&}W>Ap_sO6EzMb2R0)Nhh#b$Vmj@VGBo3{rM>~zZl~Y8lqNCizbVqD;-O);{0^U> z&J1-&a?)P^+*V92QtEXv9V_3PB^b-kkrI1-Y966KlJ;p^v`>TLr_`bcIp=HO^3|&p z4%*{bS>^_61{#rCcRcAu*G@S`@a;j&*AQZ0bbl1s3d><%NtQ&_LkSl+NyUi|+&l{K z$dR_}?oVNDBkDpgvJvZ;{uU>{Hk-)#ju5!~;WZyzT%vE*b|#}v4s54?qmPdAz025CY(P;lKvuT}0_Iv_x+YfgMhhJd1>0rX`2G4cD_(EG4Zx zvn&eQchlI{Qq6c98rB-Ji@gsoMd*)r;1j%aEAqCNO1P2H)A#?qp5CvLr*JL-IDUM}8WkA*ocE8KtPg54f z&O204GnrJTG7YZ5FrM|tp(h8hw_jLAjDR<1%QQ2UHzvOJcPvk=o{KRA;O5L%pzVTu zP%Zb_4WrtKe%@ZpxI@O-B1c$V#CYu;oP+*k9L<^3(3+YT;=M9DFccd4s>ud)>Zh9Mu-*Ed+Q|9XwWg8 zB%lwpM$##Iekc&7(LJ!!9s&PcR^^t!gyDoF)b+-dY_M3IXY=sn?_s%ggcG5<4sSvgR`4(fDfxl^YO!GU8VRi(-gS9pNs^t44Cnl7TJJ z?8^P8CI~QxplV>0C%@b7+oo{dyA(5sn;xX`DeIHvTkj?$yYr=5M@3G?5#%b410l=p z?^|VRZjF0B8FkK~$shaYq*hsMQwLZlM@ANHxE&5(^>TEC?I;a*^|8?oxfWlRc3e(R zC0ybike_v%DyYlQhd4Kr^R9D0K}j_NdHWhGm%kq-O@3H?mpW+jX&twW$Q7^m(@Cq* zSfig>U6E#gdq*Ba(sLl*QOfNur{Ox6disbED~d~IXNO6r|5iZ;={%b*c{P*#SAuX^?lcncl`QGYq3Gj*JxECkYPt&D-pBVQZcVXM0|o#mS6mWL zwUYFH_T+=S5^)EdPY>PsY4j3>7&bI3zkWZUotn0$u9m)Md;3dZ;7Obh_rvx}%w?{| z#ET9MfzMLx3n~Xt6R>ThL^SQ^WVGLL6fxkO(HCQRhn~>GL-(QFp6|O6>B%(yv}|_0 z%N9GR!e>FU?L&J(BSM6KY*8|GB6-GJ_bIf+jIYyBC@hejwlJc(|P3)F&Rk(x=pHFK0FUCc;Tm2e5%V=4;%+Q+pKBh0iVse3VZbf|5o7&9- zjkH~lTejJyx1ZP&;yWvP=tnCNAHbwDf{d;lAgeYd+pH|)YV(as|KnS_10CYL>o*C1 zat=I7Vx7|nwNrk8U$fnKQ)=uOShIT%d@wrd49oX5=mNwv`xK$eGbILW28AnqkyRR# zZ6=E9y4^G@@z6Snm_)ZpaUFfFbHbp+H0xI01D4?YP}F$plwm*RFR1~U-wGkj-!cz< z)iyi>>Sa>1`Yj{>H8>{Hi5;h9B6r)R-T57VA*Dpg?az?6RbSh0u5ttUIPuqXYwD%% z!U9Jsip~?|Q!c&wB&6<(SwuFuhXvLMkKAm^%et861f@c}^b&D-ZsM+J7G*ZH(6M#R zS1OQ4W`&F-oYC^BC4XZu8>u>J=%&onUIsi!x|#Yn#e?EatqoqF&mw;2{6Hfs4ex!4 z;A!-0y14GlIw;6a3$cHg($d;y$bK<`ij1i2J-1xTm3F5jIX+4)*CLHTBznq{2^pDe+FN^fhC-gS%hWW6$-PCgl&0?$4X?#+IcrXeLNjQYmaQuCs_S&=#W3_9sGN%m#F zP#F#XdJ}RPSi5_rLmIyFgiz>+kbc>01R236WLWU+-FP27knu?HyI?oanMiB7^ay8C z5pWu1r-A6vi0^4Uhr>l0=IV&ZY+N+Nm2#;@w6|R8;)>q;u_#w8X8Yp9PXY6^)aY@8 zeNpB}d$V1kVN*UP|3_QilATRHjz7UUaq7&Evm4;S77nGB53SgAD}G+Ssy3{};)bRu zz@fxB%#n=AS_l@g*)C~6wO+jV(CX#~PSQ$!*L?02$P+>mMaeIo*onc70OdvW8a_eu zJC@`!Z#JLMhN8RmlI44)eonSsV3>>gL*hw-(bYVS^YH8#Tm*TG9R8t?{E v5?gi-~R9FR}8KMu=YOJ4IP>tF@`) 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 zⅇ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%0D^PP877T0-6t-% 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ⅆRG5n=%=Gg$`<@MC=jrtfs1jP7J~d5u6w^_z78(l5u!1N=&L;xgZnxqe4~nQ(I5wl#fWi z%^mMO`uM^ot(mS^kehBYP*EZzSYQ(FW%EUA88=zB)V!iZtFD~?W2&W>!K4KxgqrKL z+f{kq zxAskV5tl&vNAtl#lBKX`9!TGU=Yo9SCZhB{2Nz^4ac5J`epWPi zeVSAdEyeax_ia+Zz!5v<)YR(0gI8`tzHh3IWyNG@cBnHYw@}NG`89*vtLT)`-jVdY za4ZmW4PlC@5H(~#NcIWXTujQpd0{xuxt{AOIB6Dq-iQ!WL$LGFA!4|r7ty8?myoeT zSCmf+k56oEkal!X*8bheSdFyxx6cA7s3WUArR2N(>~bG0D|%qp_Itr=#dC(;Y<&Wx zQR^{pYZ6=wadkAGst5)#2SArK9Zt;1qy*p9K2sZr8g2>XYhh?LOJlxpyHR#t-smE2 ze$n-9DSl)r$KPYR|X@MvpUY(7nkAhPK&+ z$2a6wJL<)MLpHhNXm_lSjR#=)zcKDRZhE&<>jx|Sg?0bnw0}@lz5rWWAhRgm$r)P6 z>|D&8+#Kxeyue?a%&c5oTzts9tiV1lHeeSwFEb|>7xx`Ye+scP0@RSduzJ?JJ)(cS zhoJ))Vh!8`nMFlW`j`J`%^VzT?4Pi(n1UV59D!WR5GxjY2LnSUKnyXqwg-;4XR)%h zVtHi=dBtL70JdgP6c>FaE3T)cEGniaEB8$N1+$eA-LD+~PMZ2B#>2+P%+ANb!O9IN zVcD5^e~gEngNK=ijgOTNnVpS?nf<>$AfVSwCJ;L-W+!7nrmKt8gwf!wKdksa(D|F-6sjg^(-Z>f&&#Gt>aIaZQ2u(tpn-w#>mcg68D zG38&?#=l8JyuZtcze+>56SoVX2hSy>B|tFuKp+_4ALw=(BnCo&gGYdeLqLE>Ktx2i zkNf}`83_p)2OR_T0X_}^0X_~M9uesyaw1|X5KdAc zM#d(lW?*xB2S+Do7gx7;@4bC|{XY1IM|_NoijIkmOHE79$jr*l$t@`@E3c@ms;+5n zX>Duo==|C>G(0joHa;;qwYaprvbwhZZDaG`@aXvD^z8im#of4IfN}oz`DJ8(85brn zu6uBBuyBZXAlc8&R~gy|)T1b;N`k2nb6&&d~{uOmhiQt%S?2E*|b~ZFR#Ey{3l* zht~-sm#=;BFIEo?`!-BLbx5sRkdLW3Ee?SIndP2iVoKb5!wM<@4=c@NOU5+cg1j>@ zu90pyfG9})ThJ0v$m7pDwo+5ePwx*;x+d&hG0{T5$sHu$pdbPXCMEye)WOAZha>Cm zS%)ry#emvB&_JL{k-G4CjqqRE-?GytC{A@vft;Zz&&e;auS{=2UO=wFw!y#d7#9~O zYeFnJ;+sF$ln2bS$;-l5co;X#A%AYx(9@pY7mSYW1Kjk6d~e?0f(UOx3!k9}4$wch z9S0R8KZ|bH^*P_*eH1>XIS2BF!@mP^n5O-uUFh#G=!IdtX5X-1mU0V95pIW`Gm>BF zkpH>qK>c=PDJn$&-G4ke=!=0XhGYNau@bgPX4L5E$iMVq{?9l4Yaf)~yc-zYe&Ei+ zk@VL`_qU$qKh@j+A3jQDg&%X6_|MPb{&@zv>%MQ`o0BJZFV0rResln51Flxzg;6-; z*iMN%c%XxmX@Wf|wrM>}PfTI_kv@E7`#CBF&D62!(VJyg4T&KSDH79R{|`e7YR~#e za@Vs4#c|)p{7kLzKcXDhKT2x>)A-u$78EY`OSV*UQtL7Nj-v0>7kk%0#nQopu^oqj z$+)3eAZeCX{NGD3Kqhl3Vm55Cf37B57MW5TuMj%jSx}bWZN(sAe{)!1W}*8ee0gE! z$!S8>XgM#|&=ih9!HRF!gy85IbRMDNwQbhyoJ&ZP($w@f> z812=v{7o0Buaz%3_l2)0Rn_b*#tNmT#+7LGSV$}QVmmHd4tnQyTfg-4*A6R5T*uXU zWVEg>myGL9ssm}fWwLR|hw48SAs&$XaMgyqOMXx`;n1DcP(Qv_UGavdpV4IVF?w3n z6w(z#ecAb2TU%#T#3r);hrPFsYO`zKL_?vtON&GCqQxBw6ffEqm$o<|K+xb;v^WI{ zMG6$RV!_>A3nh4PPg*2sC+~00%$fH)-^`jne&?K7>-+v-!FrM%p6qAueeZo;*L~g3 zKByf;7(2mnGbEP#G`kqI$foqBe(%|)zqrfu9QP2vrs_YhiuP)yiTZtPWp8E`es|>f zE%)?C5G>}v{QU%oab?-W9vWuQ#*OicExF>^fR3)~3{*NckRg06tm=H}4WfsIk_4Aw@ic-&nAmQsncD$7@h$*A*$Fbl!C1}(nHk8R2#`ongVMv%=IwHXOy zN+K0a=ej4Kvg`2X7SUZ0k(*Twy^?5vvUgJ z<{+z>0rn=>IO=fYqKuz*+>%aqCH+o&a@-4i{-(fQ z_aA`JcYQip+{r+mu+FJ!8J!ImOvg(Liq7md(J#`+k9EWKPToJuS7*~0B&jdq$#Q1h zH)rZCXW%&PD-9^P6-n=%hfa5h5~*M{G?6DYzJDR4#yz+*#GtIcsd=^uud4YQ94nY9cHu_lfaqmSNFHN)JS40!V?gE>#?n-C}ECHrDz5G(W6h?y0v z>WiN;>o0Y<1}0R5zGgQMXxX5|dtvRxN7J5p%lnsPj>pAo1JKx}#JaXZ6)JF4v0o5|=;o_e5us5^$nTI=*UmqD?D_?nS4S7lk!I94Fo)hD87H znn+O3@NCc?1=@#v9WyA-Wh~BT!M!=Z$pvLB<#PAH^AF$_;DSVN<+Q(`-7B+${r~`U zxAr><6Rp|fRK0(1%!H`*Si8nL`~yG%);3jzh&`82?5pVhp)GnZkb;&5PH|eIZ8Wj} z0B9u>-K%!pm0j2V-u#v~Tl_vm>JQ)^AdZ?I3(NMF&g6;sf3%k0u-@-H!&^Y_i!nL} z;;rcqo0q4}#Q)ys;V?56WKI-lv%O9R zDlL}e$7~7yj~2)O{`-ICb^ZVEbqSIL%U|l}Yd7!E&w8^G)`L3#17OQF{{w(BUCT+W zRAtf$o0y`bC6D`G#?t?n8*cQ;6BSRN0t4mMuI~>G(QKYCAT7qpxt68PiH6$7SX+TH zKl`5;`@LdIlZe4%d%?eC2*w1TF%|_g{r8esLdN7=Fm-c1O6xj$4Ae{k&sXcWBfZRF ziOK+}|BjSAts04%IHG!Oo$Lzuile6$H~+#gE_FKM&8IE0gQs)oJ+tc0;I5C{d!JVC zqh)c>ewME;)~Ekwsy?jn2f*HnUhlt)bY6?Kz_z}kH_A^qO2oH-%E@BD#ZsOUMsfVD%~(8uh&hH)6SKx-(mhB9SDLkuOk_W<++ z?fVP2u)l$Pe=*%ZyduBh1hKo%4?dptYIFf_v+Z|6vmMOApO0h`B<6Kla z8#>ayXV&bA=qWoh|KE$_e_JH~rG8@u|3l!Y5cqpw+0UyJEo_wugP+8`gA2q25!J`p zlGN`v%ELH}2x=pF9@J));)Fg_MUwRD-^w74I=B!F=XWU%;nq#F?9IvW`2&`9iKna# z-!QXB6uKm~b}Da;GJk8L;?{|Li5?sMa5~!vx(J`;qurPti`IkC6Q(Sq%lwte@z2R9 zAvIrG678+h%!|mf9K5DYE2!w<%alkBJC2cE%F6y~S8Nr#^$OZP8lYWli0sG%!#~QC zpj0(N(M2mUN+vzM-M5yOUMw?%%Erd}JTRMNVw1FWqSqF47?E!V+6zT!CnE{ppNy=& zV^L!tOy1|f8Ce`28d=}63mf)VLOlAEOTIOKtGtn|YJs@B`=(2BgcM0OUgn^*mG~*1 zrso?R=-exFfZ|bWnD*y`Ybo_~5>4Ma8Q9u zdb9NztBYGrZT8l!X@b8ixLMymm%#WOtfR4U29gch5JlXs5z9!z6Nn1Tzr@)}57|I# z?MVnL>1vcXFBM&dbC#X!`>Va*q~7b)@e7j)el`=Eez2pN@QsCmDKEOYBE@ zZS(tCtGMT6lrTPeldaaJ9X+|oTE z-qs<8O!fsbqIA9a`m`XogI^K@~0Z zc97448VIg<`)@DB4YBF`AfFR6xGToSR97&YWQA07HOmhd#%k79qy_@w5yb><8tSht_` zZ9mOpw%=jr+vZEpTlc*2kSv-+6#YV|NHw6jWp7C}T0-(Hl|z*#ZquJ6wROwJ@A}O# zL7xS8Yl=!!E8-%XKeZGvu&F)QwgWXVADN(`e6}YP8&Egkql2}V<|`lRuU>*O-Dv3l z=8c=!|E|=ccD!Ujh+f9cg$yIDOLA?EhAR5o{+_?x#!W&bBQ4S};&S!sdd$#O9b|oR z$6(A5^BD8w12sm1>$8)dql;XsgJMNQM|F7xi~Bn}(Wxlt$_*)Wd3{r2066I)#|f13 zjyPi?KaiugJTiZi7xy08DzwU@@u8IL2={eT$nUKP{pV~Y$8v0@h^OI%h2YM#H#(zDu|zab^DO$?C6}Lp7guBcnEj2dDf^BjJOR`>R=B z_Qc(Tw2^_$piOgu=Sb}YD{E0dAKTir8N_&G6gDJ_((?1u30207U7CvyDI|ZZRZuxf zvp3DKg}q`%8LzoR(99A`+BjeL1J{tmvKx5HqkQ$*tg~|m@2zZm3=FPm$~G5U$7Vf9 z2GM&hZAFj+&a#d{-U)2{0YtV*JNOi$>Na+xL@OQfzTL=f2WM}z$7NmF`AQfK(UW$O zV*79uHa`)Ye2!#_69rl6qddJgM8j^xjZ$}B=j?AdFuY6g&<|IkGh{}#^0rH0x2zbN zAz$aP=4wvK$UB0Lzs4JT5~*x#gsM8-pYYYxya#MuoZ!&F{nZQ2A$FQ5_mce%s&-Q? z+8x#AnfiU&3sW#JD3SUX%2rZVc#T>#H^5my?#aPrhX}$us^JFs37W2iF4HbT%F0Ya z_w*gTPAgsGCY}1w(6ag0R;j%}t~^wbPnFKMq0Ih<-wu4=zI88FD}5m2*~Frc7@{XU zAC!=jpYyy}xW%-An{!XBY$35Idcp79W?wugkBGZuNp;Cq8&JS#vC7fWLJV{|Y{Kk#A++m)|9G~;_?8e-FWjKKw2111My2x-9kg9d;hZoDckgKkidDr;p0sB$uGZj zO`i9-beK_>(iB;Qn6dO$5{8=6SL&fNbu|F0LhVc5l8Yy@G>!=u z|G3_S7`qmYFH2i6P+Y~hu%D(1QSrEXr1RNE)%7Ra+q7>d(g!*>ibRTj^7uddL3VQ4 zKGnv(BJRslct7jjbLxKZu>+(eD`0Mme(zxa5z+7mfSdc_OqR{U!Ap18f5uG2z{_TE zn9$E^c@dBlt_xs55uXZJ?1r6J4faT-RhJtN`;_m0cR;*Ug1xBAU>79o{sh7> z&FkW%8FWOhk)wi4e%#_Ah5K++IzxZ=xtRo{XbC=Q{`HotY@Bv0g1Lrg?tS~klc+>1 z>IYe-F1m)2E)+lumN1L@8GrFSRS%nxDvmh;TYJ!3KrjV&h4ExD{o7x{VO<^EO$${G z?c#50VtS3IPYeh?v*b>wsOV0QRMs<82nVY`c4wLdq79VqIh4WhY7$__6GY>MtC$ze zUjR(#tG$3k7V+cLmp1)E26BE_56=JoYjI(V z{C3kVH1O>f`7@2y9fH>Eggz!3^^K3&_&pO7blFPA&0_OAJL?Kq))>jBp?PmO{mcDCPy=nIBQ?k>sfM%HI*Gq`VH4i{Un zd6}?Ht<*j5GHq^*dgz{z6pi(EGp{^{3$b$1j8yFtWE1Xn2wK0KO-ANh;g9@&w$z%( zOzO2Ok$=SBtA|Rj-tTxQC)AGU|30-HrAg>eV!KU+3g6NX@v3>6U7-<)7VVJ-l&TJn znzm+tufAm=;?0o6m7Braoiap^MWAU=NP6JoW<*tG@d2&Z7l!uj@i|96swV_#>h945 z;a&K|1a7WEzRkCiekJ}IF*KDY?`v|qLB;A`EF2<9g@CG)FTs*aS@6^)swH02TLq-- zWkey;B6kC5hk&`HS|y_@kDv!W8Lw=+yV#yOWr61?_Gz{AT*~$heB)AF8d}3Squcd9 zJ-Z|F|M3k%*V|$d&6rW`FR*YfK-GPd=4Y2>VlFOiO%W|quP?T>xy^>`t}eKhwqnfq zxZGYZ z0{~meeugQiUR5Mx_QoWhCCavE`(YDOpr-td~h3ZPiwNzXKYoEtCHa zF={^7rhu%vG)%kSuaDEwX-)2#8d+5frHgtOuiM)rEvO_7vCOYU0{AKgULq{ha>HtH_je&(ke%W=k#;_n&|3*d@pQqW~PWQPBCI4 z@Yl^DpKj0+H=35wXyi0#`%LZO7p<4H&8}wil0K%?Z*=9?-3#R#Wv%LjM-cM0p36(G zg;r6XzK92XX6$;@5+&$1ax zkI-OF=E%ZUZXXk6AmyO}t=G2}e@j@0`=kS#3Sk$Se^(dfvckZTU4sooy65_vCE2WE zYi%YI0mR_sP;a&nca(5v3p+xvHR9P-I;N|Pe?k1I_M5=mov!^rK-)3mX0)ZFd5)1t z@#JAsb7EV3sW5l4jx3;(Db|9yc}j-J^Da&2Vj_RPXn&-b(3wN}b#)WnmwU`Na@apt z_V01i=x&UUZKYBVuiRDip!FvT-AAg-^PF*Q(m|W2F;HLs6vu1r=#4|m2EMzpD=ogQ z4`1t*zB;9`n6I@mVO2h@!Ijf~dTB?fHoyaCU^sk^zot6WHz zU^$k(M~`W@@1w?@t|?&$_1+Y<&(dCFKc_F{E-OSxdGx;HQi1&en1oMUlSHjD*W8b^ zA-%(xRHjAo3WCk6zNWO-4LwhoNO1gwl|_+Kk8tQp6(_hT8G%hRe zyyP0?sVM8PF#ks9)=UTPcHBNb>wF00D_HDZKc!x=SkYmEfdn|_tl|fm1br+F$r78^ zAGi-lRwZa>o+_c1HXo&HbY_T_^N4@X;9Kry?WKr_D+H90>mb2bv2iLBqs4~@m>#(? zQWuqZOQ;lW1mDVTgx#lnb)avG#nn5g%Z*gEyqJRSRxCM$rrM}F(=+P$$+W@Y1~dsi ziH|xl-b|_o0)eRw4w~UEqQ-#}R+wNyvDmjsu#Pka$-`F$Pn{w{(M1SV{@GGR)$h-E zlY@p#YtkR#eSk4Qv90TWXxjs7VRyY~rPd8=jW;4CwHh=QpDgg5jTEwdJ z)+|`nZ3Q-;H$G7@ev|am88f+^y0J`{T~21Z{{DstB6sxc^8p8F^- zBtC=2Y)>-jn9`7`>{em=$X~j^5y8HF4J3?y=i=~azu1-r6DwG7jqUxHeAEep%8mZ4 z?X;&KpYy=dv7L4{>uOBdAUH|cy}6l_6OM_?Ct7q2WurWwS; zmE){3WcDAFf!@27l~pE6?&mZV!aHeyLV$)dXQN-V6i+Vo)lFbL5--BX{M?#`c6TQK zdi<2`JZAir?xp!{7fbMf%DGFgM;(j{TMLy;PS=J>)S03%YBkfq@krP1m6V)^<~q?* zbP#fRs^j(>y5TLp#*{B%Vs|+PUEo&N^FjaVv2YKsdPBN=)GwYjQlMt-V5gn{b2CSo;-eoMqctVnxMPc0CU0pi{Gt=wZCoNW3znwSlc_{~bzmrQw< zVS0Mn*n(;vj%13g5d8=QmKzCJQK(YQlns&I%_t^IQnTiKF#H0s9B4E^v-xoq;Smkh zD+(1u1_UqFFYIONmqu&Du_AlIl9j+p$%@T~bB5G^0Ay!R)`2>dUt7~g_UEZVGxQU` zA3fa$O^7>Vc@8o-cvvzj1ysd7)}8hQvA#}Tsj6IWQ~Lv$A@luU<3$(gs#cIeymwSm zk+%wHhk zB)o|}{Fvm}&&{%|n635D&(T+zYRGYo)Wcl97baK91gnntuIq3CO*+ll_-u#&E%=$# zRx*?JMVnQ_vPj-YZJL z=4HiFlg^g|uSR-9Wq7vRQm+ML=e$d@1D{jA(9ri_vyeSJO!=t%J$`W78tz#M2tJ!@ zv|xuga=**-aHx7y8NJfP>fgGE>0Vz$LnB$ORxOtcFG>f=ez9;c+3xrf(CpNJ(|}D^ zgm3%?@P4a_iJ4p6E@lR?5Dz-fCDX|>-!~~rC{uM3&?i7m`Fu}XYS$1ZCdR;7=pZHs zo8pO19qv_2xO}AbGnyTb}cReso8`+(R;fLgQ=?h!>jMeWr(sEg*Un-b=JusSQHJM)ezP#J78*hdE>QXJH5oNkCyGHq!v z9h^OWuf$$&*H$q`EXkGi)wR;UT58G#m&7HL^0{=2qQXl^-X8jLf!x_bN z9~N}=R31I&(c58#)6&^-&9 zd;K3jSntR&i03Bk-|zf)FZ~OS5U?dq$1XZGJuA6=zJr@TCi;mU7)@z1vV|4P^X*V4*Xa}hDy`bN7< zR525xU4|$r<$~_k&%a!KT_&h!7gaDgo-L5;Qb&7MK^PX2v>FUx3l{RtHCaeE&HQ-< z^Hb+*qk322qpxLEh&nLWxO|`Xi&=fkAjR>Q7XpG)x=B;j+Glc+z9}Cihtq&)n3MYA zaH(&(vJA`K2a(1GSM-LoB?@LChxRR?00sb)hT5iDH(6N;r-WX-gB!soqJPj118#_L z-&h$&fR&ytv#0dX@GaoBeAbw3B<;=nVs5nwk_IkxOa*w{GQQu1p$!=@UU~Ah zCQ{7nSUAEHi&SophBfvk=9(0M$4r=0l$f8&{hCTvMM9)m>C@FOkfCxds%AY~gM`e{ zq$&Zgtug&gNA5V(IES9senW8!nFSuXrmfr5)I1jMhb@Gh&1Li6f@Q>YwaDY3>sgi* zIp6ZpPb?%*^i-3Uo12?UdGD($Pu!IM)6$?GlT|jPcA-m95G4`N>S05344u(p?HHyo z`O$+=H;JJw4{erhsT)%Wi0>T~8uvbwl5CKckQ-g}nB@6GA9Vb7?Oe(wRm1c_Vg+Y; zGQNh~H|*61V`Kq@=d1dSt{QtYFADPf8Kxel-Z*#}ww%o`z>)_TDxU~-s0}@Fk9B5- z*R%fc@RN^aB<^TjIF~h4U-WkL)ZD*aa+m(v2kv;VTLd0ZV^A2JVkga0EYn38($i9r z>FK>utbUI3pde)|=hf~Sr2_aJT-I-+;d8P?+nZ8_ASWc|=i|ar3;MIJXWy6h&dZTF zFB@k9`SyL|3(5}|X{R`*vAA$JQ^B_dA(&#n7WPtF2#f@Fk5?w#Frhs znG;G1#T{bFWp>N4LG(;2wIB_uE9^U17S8wIHEQBHpPGn66YU^mEd#9?+U{Wkr(hja zUqr6~!ZMowk;=?joZ6R}DASSn7clm>^5JSUa_9SMWl>a=+#$h$F3JP{79+2j!DL6+ zK<=haOduZPqt=glAJxRgy&DY%{aslHYjm47-5JGpWnOjQg`oK@oM^~lxg*W(;g5ni zR`Z(t{PUhzd{KrZ+@3!5N!W75i^ zo)RM%!1(EBfm$M)T1i-bN!Pc$cU(VzpT^HW77xUaIGM+DR!J{0b)--rKk<1Vckhbh zkJ);UX~aY-qh5eIu*7pEF!Y=+R!Q$uWAtzBJCZaDMV zA&IU+(lgtSpKi!;)Q72~CaYE;ANyd95l5bWrgk-L^{FfoO0-Up>=kNkEN9Gkx@E(6 zh={=#H#$)b**I_J&)oxLbSHyKK|Iom-!RE=TR&kBfWty!&Wy>}6qC7Ia`GY+3eiRc z)R=bTPN8I=EiP?%pJ@hdWNT%!?L0vU|VU##7*sQjvWZ%o0WO-xOenb}FeQr+YG zgK7djiHSDkuc^)iZXcs_5B^eV;)I>j>#qH`Y}K!DB# zMW8j5=rn`BwVV3)oBrJeegB_#fi&FZinoL651^W$df&X?r|=}~+g>ist&~TA)O?qY zm8-R>{RhWBLd<&bYCC`1vfV&Cew3btLjfwqC;>iEP`tKW4`UcRwQ-=1dXKjm`m`Cm znEGvfH??eyw#~HMfqc;j;&xgnN~vbowh0QpPu|+H~SuNHvNo z9)L13%`wk*43;|jew)4;wJA2es*U=k@_PuwO>n;EygK?(4T{2G{;ZtmvaNQ7FfGOO zIBg#EtuzCV`Z+imZ?lkHTN_5a`&G}3y|GWzNQSBC00zx2>-L81yAY)>1_ii3)paL- z;8vVPuKKGoh!E8?X+FpAu~RoEGOoXZHEvg;$eNVT`9Qh*NxF0pFXjw&=Nim4 zdYCv?VZx&Qqfv>iZYtocWG%zmR473~XMWR-0OO*CLrdFmk>h?)VK^{bNYj-+*ri4B zq#Mh6i!rq3mKDj*lZ(z-LL@?xCw`3%<5zPoMro$oK6!!3*7$Bh@}lsl@F#zQT7I)E z=HR2uqMAqP-bIervbV?#5PYt(&(dCR)agkSy9yo-mffKVqr^N1ddd0V2{M4eOf!z( z+Qm!E`m9U|(lBvx@=fC76%L)gZEjZfk?&o5)cXzcfX~u0r7va0LW^3@KSH%7=LHsD zS=c3sv?}Jlxp$<$i(Q4|u13>rgE_0dAWeQF`ah~zGZ^Et(OX;F$t}~m6>_Z&@q4~D zWZKAO+Fxaxv#Ost5;eRkR4*3W9B#B`10{7cKUzw}*2bL>Hf4N@q)LdW-)f!n-~DZ4 z#2kt{mORO0=VV_{PEW7zn(Pmq<9E_C>x`6fu&H#cE*ySW=HQ#zdl3RGS-N_Ov?e-G z;8xKV%sSr;Gx~M=dghUM>&KT1cGIi@apnEiCUXE+Bl;6=T;{~$B%Q^Pi|^))AKRcVj0#(ysu7T-Lf<1BcpXAXh(EWMgPvfwEYOR^OxeqsoGLg?Bl z&i5;)iSb+};k((MeU*SJDz4zbH(;RfB0yzUEp*CUEYIBqikW3A`c``v>zLUt@%gyC zDk`MtfOfnp1N^RhKV=nLOsm9%I{Aoe_@|rS+l}u&j13kO=AnB>=%ldMsPrOZ%he^= zzVA*kQEVL5_DXn0GM%?&TSZ^|Yd2S7p6{~)#|>I?uTnKN)fUVQ--eIXK2e)5=B z1-EhZEJ_%FO7Z7=>^U{an(7<%)tc<5-MjZi7RWObUeFAm6%B75KlB$SZl?b=4iZ_j zjls>g%~AiQn#_9G$y&TQo9Umt+U;JJ->gFdflnI#7)W(5c5IQ$M`pYYd(}urGZz5= zK#oU4Lo?ZkL(}*dBE6gPy0Py2ylq3h17GovCk-6)G*sG09o~TAa*UAf3CZH4Z9gM^ z?|QVt$#TF8#?*64xCTsFwOF(0OH!hIJBcPk(8F(7ZfmnxCT7o{Z&O-;)KaJT3!kRu z96a`=(>b+Fh6xLJhimwu`yfu(i_&4sA%2fDJ+sLe8M|VLi^1&K;hsxjOQ$;H3h1p+ z`qPATz%Hi@IKG*sPYMl6-!D`g@RcfF zT6R9qQ+8!G<8oXkLe=Tzx=jLSFwTbg_RGytPR6bVe0T>*z$7}avH!0L{tye#vODrh}YhUH_3@Ey468A7nb)I86QGVJw+-B*^_1@vqhT3^T?n23(D6{-l z`RWB`m^(b!N{zBn6F!^x&7aM)SIgn2B>NT&=Ds(E^$BXOXqDW}{L5Vov8|eQgb+k7 zl_cCBv~fzM<&GU*%GciyCHyYqLRdm9`SYMMUR7dHbjyqOM?|v^BFrE`6FOZl*4`Pf zsTTSXassXGuMd9A{v%56+kz<^VT;<>crjx}q$taeTBSPpp8A0Ae)ZkvYOe6IWPHpG z+%l{}bhE(x@B(aEex+Ruju+qE_5u8?>|XyaY9mU2tDdfPzd9jO1HOy9kOAGDtkwIV zc5hmRPt7=cX>KJ!2z(59buE$9+Ju%KzoFOShw;S2VS(&##GT#@Wzfn}*nZHX^K1iY z%X(uI6jhbMVt2w=oDDB&1dUlpyedOKKZxR8U@_1JsnhMH$ED4S4)5o>Y z6>hNQ*-rL**E}@f#?AK%?i^Qis}j~D&S>8Z36tr0ife3~s7j4N?2R+*e{A+PYnM?O z$+G*J3GlVKtrM}DQFP#{z*qIL*kLSVg=O@EJ0~H=avz5f?rG*(2Ad_yK2D;p${Nuc zK72EH3_u=sam3s5+d88n;of0wvSl4#%7L!^e$+&4;C{9a18q6C7)2&q){^te0PlX2 zM`2%!8p;m5rW~9p2VLoWN1JTCK*Rp=D$5AGJ)WTsa#Kk3SuRDCCi~n8THDboW$_He3Jiz30PhIRL8d%;WjYwfdllC*kn>8FTIp=Vv}J1^c<1b;&_9`b(-Af1CNY zQ*!hN3kxRZRpqo%n~xeD33u#9&>naKQ;{b2S`W!Z5%c7MSaoZWoF6?q zBTep;+<9k0O82Ec*%YWx`>-g#9a5XbBFp+cNRV;#*v`EIGTECc7l~a{0(=x*Y-Tl- zK{xihZc61b`{d2nxf~j#b2!`&m~p11!IKJopN_Ajg2)NHmLO~=(Uqe8wIb`0K({CN zVD5~rRUYSXN_H;OJPXX0m?fw_tqUS7c6NK_BdXH}+o|>}zEz&`1Tm>uQZCsK7|hkz zq&79MesbFW5t^)+>^>pUZIyjOKbXJYNhL#7dI)w9Gr4PPtQ~tB<>SWdrY0Y5%}o|P zG(f$}N;6bK(sxYlujYcAD?CBQ_4~F|=XCV=S4|!D0P*edE>+Kg3ExfwBIsp(J2EJu z{*-X?VcF6$k?b^_x%4^x#B={Dyn((A+#g8Nz-Ax*>OTC@)QwZ<6&wL5#bQ*TLep)wtq8l`rJFwh z!UL(tA7!u@)wjOSv10Vu+(_Dn?g2$hZX5*rLyfQLf=AV zzpitd0iLge-_VFR&7P>kHTOLxi4W2*HfVvS#&*xwQ+Z2_>=A~|2x9)!cEILv0M-1RUfP7dRWU1d1y=!0p_Nv5w zqR_TqM=2^R_MYX_mzP?LIi(x&Oc1;N#uS)6ZNAxx673jLME}JSi3-M?vqe^HNYa5Y zb}>?*8)n;jmk>}5Q}U-*Iq;^8n+P;aB#H`r)k_MgNT5`%+w=~#3lSUT3%`9OmCzPL zTH^9{Jh!xhz*qx~JwSsH}BRvZl_71&pyODZ)owHn~uR5DGn z*(@ux!rQ>v^)21DJI)ymZ3m}v{sqFzZ9n8@rAUg6&@BCGkTDzzc2W5CFe|1 zwr}x3%DZ0&>%e5$S1YX(y+=!-X1!uF+DZ(8%E$&sTFLt$8izcJp&LSTMnNSB?Vp z+Yrg0=WYczmDc1bt$_dVI17IEn~#m{!BX^92n>&!=~>CW)Ux@3iC60SID@{HX5V8v zWAhQN#wed;@-Fh`p4fGS)>{b7k^<#tgjo1^9>AkgJ6mt8TsZx`HQC^Xx8I7nT%`ct zRaJ(TuI>!`XkxVAf`6W=|Ko-Z*5aZW5YL(auj`52VxWoWZRpBL{b#lqQ*l=5EmbdUIXMLD?;fbwmjK{~OZ+OU)_eP7I8wIo z+r?w@?2<`*Y8dli=pggv{(*rFfjXlYj#ahXzpUnc4nl)ds}LMt!;06bKJG>^ZzP1e?i6cW%|94DZ|c zI}5$3b~fci_g?F8&U-AL9?5uv-_dpy7ar<4dKs$(tto*pgDKrKxvU3o-h@?+-Zdh2 z2N<6*htCUu-q&O0rp?oR-qa>p;a#;NJKx45CKS63et`2NvyJPWyPn%C20tL|hASz2)@9osxbN zCTQb|ct{_TA(L%&$jmIdeey)JtMYu2;h8S7fokS&s1QM|xnEqz{dkOw8_G>Z3!9-< zX;A}WOeF){mUX>Rk*SO^l2u0^77gd3W)O@n{jn zeKN;YFU8~40rmIbu3=dsEgLvbIgdajj2AWo@l$P@W^GE>wTY!Mx56AYOr*5HW!sbq zSh?GC} zy%&)hK4}fau<92jdZpQjDqkPngqOz|Y6q{Xir&p7-laXZmrza`IwDr&j-;*^xb3XnP7k)l# zayDG#k*=|}(3q6xrYz5_82|Vel`$)4iGEcO=wU^mdA*=w#>CG#uF0ua7ww>`&Zr7k zrUx@3h=BEkQwIIhAcotqAZ8v-_$NlDmTBHRq}KS4)S9-~?f~b0qKexiw{_C6WN~p! z*_QZzGTnESTobO?TuF~!SSKm55>mZORMyPi9YYhagGZhqL%ju09lZT}t_CDu+(n8j za<#97{kt1JbF$jK3XW`tQ`S16O{U#P5xSsIokAV&haKg_864RhpN}36H^JUN-3~aa zyYU_#lsI4F;W5SaFQ>ET%b)O4qE?=q(*I)W?#53@Mi(p=twGe~YgcL6knqk3IWDRC z;nsW|&tF}{#Ghwl^ZksO#B23WPr1gYT)_)C^m-iC4&{(W_=^i-8z=~XTdem>gNpu< z(yeB)iYg8c)ls^^lzHF#mWZeMoa}7Rdw+>+P+EPnmspzeIJ?$6PCEwv0bp-f4K=KA z1J@RNwZgO;9jvwFCboL1w|hQ$Z#EBXo|=2#a(2+ndCHOxYUS|Rp4?sbK)gf z-*ZE{P@%t8yG4yE`9Yj5U|Nl&0lhiFt`Vr5*)EP~I@~-+Yi=Ep9#dIS#f&(QuZR2C zd|*lJDqDU_@ylg!%xBzpWxW2eUerlmj5U_nBI&cCJy%Dq0_SC-rUB_!Z>UZ|LF-1m zKJk^MKOyPx&M^56##ZQ@3R+**zkE>}O^yZW;o>cJHjWTn=u|SYz+E`2#9T*X0-k;! zJr{VxS7KXCp|)v;Nf-IdS6Skpzfuit{qC-|Yk-E%2s2cWDSk*>qJ2mstNoDGWT|0f zxt@$J+&o`D%#|_YFedPaX&NjDO|N}6LP%Hv128u@D%}IXMf+aUI#`#84;+iz&r7t= zZ2*Z1Y;Q@l8&*+nvN*4hbK(X$+?@;O(gdo#Bv01Wwj{VG2{l@4g(#tr38{s=D~IhX zzsI(Mjr3OgFaNp`0q%L+uL+Wiv=5mQ^WXTSbtUO2&Y#`+&X{I%Y#x)U3U?jXq!Skt zKI>wX^)-A9M@#S?=XQNaxbp58yt|=-?Pb2Cm2E?swk6Y?us0`dvGShuCp^bSr&4%e z9vY53ecP{Kvj-k3(bq#e0bF)72lcF=lEIU=nn7pT3%93 z^okCYL(hk=)S0sVekv1=QT~Tm0zc+!xGu(4Fn6k{^itz`1rOspc($oFQa-+o%3)(^ z$y~)xy0N_}ZAO8+8^4HnNB{Y<8uj%Xl1K~Y8Gp%*aX*#$ll3q|G_D@D*cy1f-fAOL zf5@@^oK9hq>QHPRdQmnC!qP1lv?cqhtA3y@J#_&+bxS9~(sB*{@aZe>*K@!*rJu61 zsr@54$aI093!14QX!!VX^a}&W$j*UudAWxQ&?|MtD)H1n_iHE~YuvJX%$XLWJc;AI z>`YN)|HAcsd69w$qO6`=fmTfhx{By4;Ea8+xbFLV?~s<;>9ua|3T90F%*^V9FhgOR zu8R8m8fNsJxJu8aIs^CDkXZ3J7yf8QTRlI(8Ex;Dy7wt6CI&4Ghz};jH<@tTNl6D+ zKKOeA25f-};dcU=ydN-KyGw3CnATeR5>e`zZ=t<2|A~Rozs@y!oWDDYzWWEq(FHA{ zj7q-6Xt)mko&|>yc6%XgjT%o-q%`g2riAQs2^t2()9)zN-YE;?mG1nXs$e?|Xy}WO z*MnqOl+^e1!r+qt$IiGmOPdX8ppG2f#}&nEOO}zIAKqH7cRlf4p1csID5|lw+ZPM| z^7w10-flx$+qiap%~2rgWQ;BzBZ=|>w%V2*QevXAU)W%}v-nmL5tv)1TCxc7){Z&h zAfdx;iVGRCv1}=p?ZPfxXnVK;3epva4TRgcL!J`}bI^2AV?+&X1mj5Vn=Xi7q(Mi) zo}O4@$FZ7hA!yl(8>EaE5b)(J!2sa>z$`w5?Zqt4cdo(W)i`s)aG-u@`2iME^W zKtUvDw1>I0fmjY>Lt}eOq!acP%;@-M$MG6JVH5rvzpY*Bem>HARRtTwWslfXue1*O zSu*|t!IvG1i9>4auD*o9t`b8y=%mAtTR{;MYqvcw-pqI7p9M*l-CMUWCMC`*zpSW? z^x7>|^Hnxx31o8@ofhecPD0Rvhu;v}g%_FgxK;A?qNX6(#^eVT-$HvC2DluUrzs8t zA0j$h16@1=@Ouu9)godumY2| zf^z?u&$F{*1Fx(sb+Z-Y)((}K-8}HA3hL_M3L-NF&a5aCHO+bgD`lvxLX$`_>Cf2c zGkvkcD>=J6=x5mL(qB$jR2J3?iIC7ktc3to?sLiig}t{7h-=%@MT0ZyGzMCNvDX@QYpa<1B3n?e5-_#q!^P*-1i=R9gY--os7#a^+0Q13J|Vr< zG5H2-k=LU6k-{0~3A~u1ADsykyfzqcJO|Hmbdf&m>~9eEb>esWeF8o|4;DxUfl$pT z0zfz}ljWY^S1nmR>NeDm{CJ@5cXI_ADAuJj(a#4Y+G>_&>&lMuma7_Tn*x2DvR3+N zEjB9XBeb4Y^PH*OLqc9n+MSL*ldsBBs|QJ=1laQFz7nPCd&ZCmYNj(f_}MFXduWNxtX_Uz z9@Jo8Kvr*MTcOKyC}a5Dp%-e^c5QZRed_$uGp7g1Yxox0ccrMj_B0p^OfD2{Q|il{ z_o-gv7r6sm2(mHml}OrZ;l-?wTkNLkMfI$nRPZwIN74@=v#*_X6OR**WnJ<21n~Fk zFVmCb>OVVB$P#Y(yUOi6eda+*#vC7JU0iTncCS4?$WsDA;Nee&z_Ld-V$ZDQ%@4lsnnDE zHNI1EOBfYEpfb}Eopv(3GM_o-bf|s8mp`>R`3+yb$@)$2aL`>e8y?cl>m@j=($34u zx<+N6k^>z}NDE~mON}3jFrO8QM4E+Dk={OmzT8E9@c~+|??h;)32r;amJT%Ztr%h6EFXw)BOW~OfyuK^sFP)W6h3m} z2)&rb!BCTavD;2LQ7g>kNAtY4%6d|0i%X8cyPqpy<10SP%vgab*fIG+aJCWvPPq#| ze)Z<^jGgB1zQ|}~k`Ss`1b*%54UN?(1 z+fJla-CfOa3X$zskmCI);#)xEzoS`I7oFSORv*F-VNX?jCFO9Opk{2thsxU1{s6uj z%0a#HY{Itm*wCGCqF=1LJuOyf%_+0H_Dq~*;FZ3`wB73_;;FomN3!E7EH`u18;nJs zp}oy--db9^KpX=_Tf*!<-5*Y|rc%dC;K^}^`7kqOCRI`7R+aP*?e?$?Ib)uoM+;!z zcgUTWsG%-Bj~B?JWL)OBe|Hp zS-E=pf(s;vZ?qaEEj_%H@wwGoj8_a<*UeLoUyZZ|DkLX?|e)(g1Rk46BzaL^#|&99emt$8JD~Ui$TmCa+FA|9uHoPt1j*D<{F%c5VLSTi;u5(oe_z zlhWW3{WI4DumreV|BgnRZX~nB>llzk4%x=i<;3BJy~9DFVFpd4KfRR^dHW=Lc?J98 z(Uv&}gQ!`9g)<}C9a3Vc9O|YrcAx%Cs;|^&GiPA1HItfv&>-8EWLxbWskIZ&wM*?J zq~04K=3}{zx~w35WnL8$w-H^R`Vuz=FtHeym?!-4tpS1U0 zy^7ZFyF`!YpBBk1aNZHOwjPDQyk#43_qpK0E&!*hjSSyHHU<&aJ4VQF<)5Sc> zw<0BcsyZXgfCGp@eLbR0*%%KmH;>lybUiSoz)NTe6}k?_Nr>>+gG^m_?>OaxFIB5@ zsa~i|v+qpJx$n)uiyF!gZS}B6*N8vhw$b$w+pSdW6kvQzL z6G_M|YoB>(@=p--D{l}6iq7Y_HFq)l^HDeN+ejGJ0sCFfGf8ya#V!x~OIN_9S7}oK z!c@)@Cforyvef;o9yb7}D8-)}ev@DBT9Tm!6_-&V>R6c1xHW&r3l`i!B z-VJrnhx(njm|;T&2ILaM7AMlOGjY)(wgE@kfvI0DEJgDfg@FtkzVQ9PFJ2%V5PvUjyrzBsL>t|yA;D!G4)9a^)=Z{T> z$P`%Qq%mkCG^NlI16V0~M9QvU1k(O&#$sKC#bD9Fo=g0jT~pmt82H zW282fB5R&baBSAixQY7c2L&0BZZc2>*9VF_FPXR)@gnY>=}0`>J6RrFUzSwKD9fv^ ztZ9I7^9*g+Mj@9_7~)EEt*sY7dnf00QaiAzP zNF-1o3VR?-RV|`Tv5_S~gEYj`afp7pmp~Xv>$@*D^>&}P@nVO6%Gbh>8(`#U*s^zH ztB&Y;dG?Q=OD-(NWKM4=u_%vUC*H^`91smEBIvsiWjTr!3oOeVyWwVmf<%KGTV!Z1 zF-fy?k=L}La+075?C!2DK5a{NrfK5-Z+>aqNGxRu2mU%YXS7K_P76(eZ&^#1H z{la?MDnL@w+P73~e&1h~-#+qGny^dVFsg|%u;<>)eA@I>jfQzC*L=+pJTAt4o^_P< z&e(Q5?Iz6&SVVLAVwi%#m?$Tq4^lkNV_B)VQ<<^GG zmTHSLY0bHo(JPZD=N0Pf&r{lEEZNycMYlImCuz$7x^*yCtdeL{jX=0mfq%~srMZO~ z{YeG(gtlIaD)Jcxf2!KnN?p@*d?r=r?SZ2vj&ECw@Ik~W1vb5waTsS2Sg#;7oG;_`Gaceqe=oD*2gDnO@)4lA_JNvyQ@tl}1!CbMw>f)`o6?QOfq)fL5^p zd7m`rOI=kbXe8dum1Cd+6aB*A%%e*fNV506VMo<5q6IRW{rtF`f0<)dhP?MOxYk=& znzq>*6jih<{Vj8)POZnEP8`N2TUIt1JUkp$pjFMAT8<={HarZ@T%hnq?jy5v1R{Dh>Wgb8Jz~a%w zR_r)`G?>T29esRti>kV#?6$FbAG#l1U;v)QTQ2!wTgEh0b~Cx^O7j|=kM0kN zdHOG^*8eke0^*?lBJok#{)_%ce#ppd^5MxiDUY77C!Bv2fn~>^v0T?u)gAt2FH18Q z<-jPm)W%&;AWh0tWG_sX5*Rw&vPSCKHg!n2b>=}{glB=uf z7kbIB2!pb$ZbK^jwG`c%Yk3$ZtrLS*YJ2unXE`o*4G3SDRG2b7V(wK{d5M{TxTqS! zxPSTO!PhQ7aQ>dwXuiH$IGx-3sszVS+Bhl0`P1`q&fdy_T-|HyudZKaSLN#KYnlQl zxx>~HbS@MtA(*dGI@insSm&=_td-zCw9#tLf}T-vYSll(H@2?%!BZ=<*}H(oW10TY zi_%TF$PT_C^RC;w{$2Z}`AoG#g=N-Ab4DyhsvJiA+ZgVn!I8!)p_(xX`rSCB<+^I9 zW%dGFipcU!ba?^G7rGSn2V@_V1vQ$gdAuFO8%u~KC=vLc9X)y>N$@Kbcw5;=J)|JndmAxI5 znDI#tPVU<{1u;h{$zV_UbGzu2p4fMD#O_+N->r-P1D%)A^lr9}&N^lcS>6DeWcJkIj;ER0+~I7W zDI%j{o;~8omC9>&}+*tD%))ihOv1#?|FpK)CL4@1y#s}y^X?x$dBA1J`O(8z_wz&3wZ^1A;D8g+w$$LkiA^r9Pkyuowmb1}= z2_PSr=LHOVHQe<|MQMBG2OFJ!VNf6`vE+MZ+u$)p1~>j8q;j{11U=FeHcBDW8YJe= zl95A_z#XxNmvggJ%G1lW@11}#+oom&tOV`1(>2bTOxLwBp6}s{b{r1(+*w8=HRdwe zeA_RF!-53~HX?6;Z;eIXF&waF`~*$MrCfYmlOBNjbRWg=lT-TDb`~qni!^u;R5rBN zP+&?Mu6F$>ld-WjiQTAQ7OdPjZSnp?WnO^6dP)?I|FLU_HLK?vq+ogLggkw>NdluA zT8`J3mXxpSAI#kuJj%v#uO%xd-RA4k+SGJs>zL`e^;L=uy;dzXxfVh9QA`6A(Xx!1 z<`7vShu4PdCCj)kye7vEnd3j1lnXRBcG1QZi@w6!yHXEbd|-bj+Y|FP&m$fKZMQZ6UrYXDLBT26& z)V&jf!lJNIG24dQmx(jgszUU(Ir)6@q$^U-SXb3F^NtjDT_~vumoysQt5eQ9d#N(s zB@`KQw^uKtdfXs>l4+uhnD=o&ugHWzxC3`mI6j+Y++?*%=I{Lk;nW&xQdp(EY^y`} z>8HqZ8zT~=b}xK|;*DKr30n>3=X|*A>HQO=9MYpn{`^FZBesxR$Ke?>^@jJ_5gV5v zVb*3hGvEC=)kJ5w`1;_S%C;13_FeaG9bWl+)q@?qzIPYLq= zoE+RT+Oj(F#Vr4_nsQ@!d4>6vZ11}vlXylD$Q)iQ%;4794|yj+ymvv35C1xA?>1$h zoIEw2ZD7b%M-cY4(kg68!cph55O$_WM5cC?fDh5Nl%1F~f@!D*UTgGdw)RGX`M9ID zTuYRdKV`?TSYuehYm-y;tnZlvg)alLq+n@5cK|1?Xk_+$LNJ3UXWjYH8;t;*Lz4&Q zb5+Q9>&F=-$Pg79DrMctitTXICO;l{Cx?dru0O7HCp`w$ep^BJD$c@SSy^FQM2}AW z75{8zO;$}N=sT!iCf)Dwf={R(hi%Kj)(&`W!?MsnSJnm25};>q(MCN=76?=9JoW=) zAJu-tvtHqyam_-XU$xf8U#h)aY4OFEW62c`y|5o7KlZ5UX14;wwe`qc5?HzSm14x%WQT%Qup(sjR$X^M@h5*Y;##T=ce=~cvIX% zJ}QYRA@@iK6a{*6QduKp_h?(ch34&)fpEgJHf4eYCtIoUEu)H!MSY*~yWq;@E<%J~ zg!Tdpxd`T{MJPXAq}SXqAMk@s25BvY88+w4 zigX7Gt>?5}B;y(M!kb;SU2W7YdzYy5)AHt> zPH+CXcR;gZtDWc9OwCGGt5zRol0=y@Xd9RgluO>X47t8nu-iO-UVCv_URBIyB%>{o zH=h2LuKyJX#No)}lz1>Wq+vSb*nxS?{@Jr(JvX%@{B&6P##lFbU->F6>}?Xws4KM8 z->SPf3M3~IvE|DZ@0s-+$?FBf(g$A^ZMN2>Du=xqsgkKKwfRBAMIpV@uJ*#HpzxY~ zlB4_#qkg(>S!7t_{isjDf-&jQF;(oCuA{>8M16d`o&+NtJ+{IsRrO>0ca>O0b1+%$ zkJch!)#WSE7beny%_q)P&NX2G&N9^154=&(%X#EO0iLdpRKwF>qD`P{en33$uPH@} zL530|k_vM>Ftdbjz$C)+6~6ABOV9_ibtgvJo%AYIe0t#H!8F?vE!ml{Z%ia+=i%a1 zVf{(AATP53%=+{@b3kb^WnlG#V*9nVw_oRs{3&+jyR@lE(c!vFV-4DZ=yr1iBUA=o zj-`k3-!V~%ypGYDTOn>5^8DU&X&iEVOQo}$tPTZGlijjdT+xo^4(x9|#C5|^8BUy3 z;3UDdeh&SRhxT91%hy}L zN=vJ#>96{6q3M+{_%?cMdH#Y=P5`rncsDzu8qnYSbmwnH7QrGNSiB|h%q&?#ZL)xW zP>M^G9e-ezDq(ot_!8cHo3x~jwSlg$7U_@E)M!dcpuen7U)9O;5Yyl?9kCB?{%2Lw zHxlpig=ZS{=x%2WQ(CiDvD3J`HnujRG^N*XIPTRJy{?f>R1R8Ph*LW@V<9Zu$s`1p zgzA{f?JbvbQf2`6S^woUV_W;gS_141?vn>Y)s@Hlm|BwRHpeaNhPZ}60`?icdB%u2 z8cXN{I~-AZj{7kfpmXY^23ZL&4=l>Fly|2pyfV|Z%dDz_qz)Ud>D+I4?KLIbnVcvy zZ^l@k_2`*Q_=@K3y;c)E)T+||@uB}Ff<)*j{Y|Y^?&ivx2{N&p95>t|#Lz({VqXW4 zQEZCu&MawCVDNF>yqq3ikH)(e<71p+SB)dFs+$+U`Ej|Eel{*VYO5j7SKp}9{Tt)Z zl@r%M*(uk0qRZ(~kaZ+qY%K(5o8j%D(AukIPT8r`65%7)tCxW*UevmHigX`u5t|of z_nDm?+%d#G*2Zy{cZr+X`#)0bC6`lUDp#J&TgEMXxfMtX@H7NqR0`Ltiei;u0=~} zNiR&LW-yyhE*nJNH(P|=T>jZPl5*;f^L~e`x07~Z-pHytZ`r9h&+-{##2DK?d;6i_ zNDZagHU@nGQG6~Ewfj=_Gxk|XESd+`&fuFjPQ;K#(zuQQqG=6zu@vaXpDNebC2)fumsR$JWIdb88A6VrUJg&jI>t)>25h7ya zNh9BYa1Y0uS;M~MuCu=$-X3Y^kk@rL$eK8LTbcjCYLi)d{J6N9!Au*gV%4Po!cB&K zrC;^d@eWjRm36~~@jy>luF)bw92V-)yrK$M^6-$?3RFUrj^eET5yE+O-2?QJJrK-sug4?JR83wC z_|51}1cF6TRG}y3buU?h)$hCwz>rp!#Zfu#1T;kB{{mk5RqBYf*8QcNrAcuPLt?;P zCkQ%bni7KOTHdYfw#Ca0bt5z?2_>{}DD}9@;Ss~12$3$9EZ zlY%D!eQ()%6VqYMH*&(QmIyiVN4MYA>%Sh>>Qv~BLAQ=ZriST2Ep!i_2JdBJUQTY4 za4+sjJZ_k7)veg&?&2}9IuCE~Cg*yB;tlD$BnzQxQ@NIh}Nhn zzB<$yzb%19j^lyLV9d2Y%FD{N)swV1Ih|fYac0qImvr!*z4oFbsWg9r23DBi<*|h; zD|*(|o^RNlPeh+Um&^0xf}kToT+#`Sn1ct(=>`Ke6Gn6;%SK2wO~g(J-;La@im)%I zK$ZE_QftD30;=3A28Q~3C?RTSPSZ2X#0#~Mcare91AmU`ql!9gmgVi~EswOr{dIRX z08v%h<$?R5icQsOhlcy`)w^tD@~ResDU8p`B#Ch%lQ3DXe?e^iBDxJp2`m9TM!>h5 z*3#OD7yAJtIAc=Pny8mCqFuzyqC2tqnt{gC^d*j8Nh=)VIw>}M^=uVTA)K@!Ebkk2 znPjfuMz-AKxWFK&*539dKKTQMMrznS&>^!ou|vZ+l96Okg|)R9Sq(&6eUe3q6*Z+u zO1Q(Lz!gP(nJH@R%yrUqWxlR1%v=+T<|${Yaf9quK*fG64<{Dk^E|@OW@S#XieO&8 z=(*nh*Fi8nUWW_ionq~6A<|qIN{>zH@?}aEcjDtVUAl1}>e2Y=Pneu;#B=j(XDfF}he=oY=z&+f}Mn_1Cfyi_s zDFjnoPI^~iSH;AS!OLAy@ZLfhB!+)bWmWUCtXEfBv7Ku8N-^Q~7IFAdTSX@%|1Z@Y5kH zAaFfgN$vM*RmorL7`>AvHVpW8Psdz+h>->9t~S1;yaul4o$+mV?5|g-{b@or#YF7t zmM8%b$lTd5z9#<(Iw$!Q)93tJhX~-iTg>B105eMS zj#FVIPz1f>CYa{eN)^)CksO^~7r)*!^Y1DFL+bybp>%FJ;e?lJp`4thzLv0`APG<@ z8Z_R5-VyB~NSyawCJwGR>nu0}84geYjY@uk3Y|I&!=+u$DYdnb3;|A zG~TRKRCs1-*ND~So#&1cWcCJw5NGB4{bMWLV-(8FW`R(mdz2dGL{f)$)nxx+2{Zmt zi8uZ$j`PPd%+`bhxdS-sIEk!p8Q{0o&8ih(`&s)*Xk^%SaGLvMO9~pbOX}!UJB5)B zGWANAnjzJTUzxFP2H!{BfAUI)Ei&W|SCcv+YWId%qEWmocqrO7=FvrG$icb@@<|=f z{RMf;^C@)yZ3(-yj)lDzM80Qi7s-VLLlpuylz;Uw!w8G>@Q0qVv=brxcnL+b2Tf2I z1KLvjJSonIA+LX&bgq zAH;P(i;+7sH$5|H*Hv@t>6RQugqVoi;^-YGcRN77qwa2dXRJqBkn6&<-PmpG>9tLA z(R%a>Us|6r_^O#L)pEhNyeV;HwL@aQU;MkF1sw>`+o|0?!dbsVyah7FmLxb{kY#clodd0g`Kreo8 zr_Fs@V<_;;$q{6|z6r*BdX)k0TX|EFZz$_w$|vHT`>>iaVZ!0Z@Izttej!vQaqW;+ zj!VJtYsJ!GUk>wGy@gb6oG!cw_Rx$0;e$mWm4l%;A#+}#F6B_XQ-=8 zpDxCoWJMW8sZBAu4_bUW2!=_*3z8-Abtvql4E0K5ro2=GUz!Zp$(^{Hk*+=Dj<)mZ zG={F;dkt4RPf4mCgH9c_%N_oBjB}J0YM3GDlzFx^p`3)3L@m9s=X!(+6VrwxQ`NBc zwa*_3A9L6ygGF=Ye#j|*uPD3uWP1j}*#uoU20899kL+W1 z-mE|N>|~unB|75iqa3V$sYp;hOGdZ`BBi`<(7Ytq7jSJhjw-165IWkk5gx1yo6N^a++NJS$f|aC8&`pYTAz+-7VLL`MjFn`}bN*y!P4O(O?miVw@XxPocW8F|)KO1X7?$I@_>K^KlJe zF^kCOzs+U-4|uKziS-oif;x9M%OmLpE5ADd5eJ|zsr_qTa`5Ers`B*S{-)mAp7v_? z8%X!t8}$z6-LQ8-M(L1%J4~+>b@7CYSm{du=Q4fdALU&B(c`fG>c+5UmwUjNuEV`6 zZd_?&2_*DA&8fd?!VeWnb7$27=O0MUw4V$^^aesctG6h-ZRKo zRHL7uPT+f=7DmjqoFzOakLH}Qj(WFq^>O8W3DfE0Pq@m%V|jD(t#(rsXPNY0H(5EgF&t@HDp2mC-u?4_cx+3rVq8oXbY=l|p5`JV>w?~5A$Y4H9uc>ljKc%+$Z2#Jh!AJSuf z#-vP3JZXnJ4#^(3`DLiX$D*3ZaAJoje{%fjZYmK#9p{#q z;R*dJrM8_x9RlZllP0;gP%KjItmE?GS;y585M=-oM*$%J&$z&*eX_-ym8N{Sn&wF_ zq#IHOxC^1cX4M)^2!hU#u-4d$0 zXVihMfmbxC5C=&)kJKoQL5j(iu;jm)J`nem%Ij39xYa_q^rS%Ql{<*|oJ%<1GCD^D8C9GTTRbURVnav-?T8#70B8_`R zAmO#|r}>I>*V!~?=D__M#ntDJ%CrgA_=#8Xef_|=!w&6ZYjPs@s2Mp{HKiCEK8LyK ztK2K04hF~-3V)$u0P*MtxWvc`Rd}nwHqt=N&9#rc^vLWxV@9ZY$ZBcYj(d?U;Pz#T5+m|}CRH#@OmbU>A}(s~t}^aZd9u@TSQ8j#DD0feSMEdu&pLpd z(j7o9puYw5ZW{m>h8o!T<+-0~NgAe@OS}mC-OKV<{f)JuSh2)<(#S8KA4{%<=A`#| z-cQiC^qt0>gM>rM0@h!T_*duBc95k34o+DB_-TKA(*J8kEIbSP+G%G1F@8)j>{5or zLiMq|x8LumQFpi9-_WS8&!B5+tq-xhsv2Y|5&TLps`pQK^q;$2?VSB&^4Tn++eELs zNAH_XcHZ{nn8Z2CW1!(7Ukyn#adZv+tp{>O))-`f<-+&cxh2RV1SbC9@D*ZX*Q7Q2 z)(O3Qn!`2`6d!P|?o~d})4UuSRvX68&f*|2tL~`Kr76VHQw3anfDTZ39=$w)>XE*;#T40w<4upT!dLkIR*F!tyLMGCORp@#! zZ$Ojet9R-SKva>Oz4FA>AGq36#%If-a3eFYfK9xXVM0nLh2O}!&kXA0?+qu><+=RL z9-Unc*kZbq^#7FAc_k7Z)_O(PT2Es9eP9&O6uB64k)L}Ej30x)*tows$v2{_JyS`j~bwxIkqvC%e5eZ-GKV zjHW~`qa^uh^B);s{z#cvK+c<5K8+@;!6T*7exO_g77GlvI4=Obk6%XNUkpq3Kb860 zkLtgmj3k~Lg&WU4^}V^ZI_Z=Ie%<@AhM!K$=bp{jo{h3BYECf{EG%*CF8Ryg&A*G2 zFD%d|fd_Is;6@xhf~~9?H7Ufo%F^LX93_CWgFUqNKJ%M>1=jd>AO3?~(Eo~A;2%Bb z|10h>HKZH}E1Q1>0?kgqyspeWsqdiUM3)cu>h2O`7i^g4)i@6GjR@0_CHkWC&y9_e z2>bSfh`-|UBnyC<)Oj%-&hI>}R>L0J?DETlg3syFs}|X85-Te4%MT$_O6N3qi^E>) zN1D)O!Eyf5s{STaHuV4=zfmumFfjsHJba+btmi9c>#IB+h@}d_NO1|_?Cr}Y6GtU3 zc~YkLYt*b(d@$H$_y>R7OckGv@Mg|wGYonmqSAIMa3=P|ErsD87h|2@ z`a9Q@WG96xvg88^)99rDcVZ#z=$@%OI~}WA+Syw!d6=QLY})e)3YoO$I{D4fTQ9al zmiD8bCO=quV*k)Q&=F&(Vz|CzZV8<~wiiNtkV)2ru#XlDF00Ms8Mez^sm%gsVh&=s zzJ*r{%t8g?hc+|oyy_ao6cNhn?lo^pOynSG1)c7CAjR)2}>JyGhSmt`AK1)&!4e>dP+k}^Tgi7JE( z)M~zbJ#R==W#6RsEfDq6e7h}l<8Dk-36lJqJbbj{qgSzruJV)kS9WVI;pVpS@eTB- zOxtVZI~F%t{uFgN-Kki)dH3%HA8x(v7c}!hOXcKE5nhw(tD$-ttseOa(TMgLLR4PYLH+medS=-T+9Ltt4;r zwW{RCP1Nwx832+SCh4v_xN;4M=-9WuqPd%OGt)+6UCdm3hn<_#frkZ+X| z6!KhdF7R4;gWVn*ORJ#?-rkmDOr$?Oh1$cOyq>X`8+W`o@xHj;$E`SeBNiVSX^bGG zCT@j~r2rWkI89*>Re1_u2RGb~e;kwH<^=QPi$v-gy;6Rk!Wyb&IPpd- zP9y}?v1`0#o_%P3vFxhv@mjRZ_?{9KNB}aS2|nOL1`>O1F$S8x`@gFEz=8&FTxAtB*Q7(L`h&C*+p< z2gQ0vBv&_ln0Ot*Tq^g!SFMQpki54_1+kE&DInSX3vFuy<9Cvq#hw>8qmqD8<99c? z72La(Q8)#F>TUQ>{~6YTE1q(z4A39u8#^vF!S&^g#y>a!p2=%~F|nsu4s9JVMqtHs z0nW!0c}|49%1j+36nYjK`q=8s`sgDq%M}(i&*y3`9SfKE*;a2df1-w<(prG+V&s5n ztU|t6+R&`u#iJY`Hr+fg{iA7Rba9&$*4EHpc`${vKN5TFW(O|AE<;_)-yI{xFL)Of z6}1sHM^b)p%Q@Rh?~yOr<5N{^^mO(_*2T}}+=`TF$w09wV9Y%j?R4CGC2exGENIvW z$lUrlciB_E+aE7=RegqEfhy(t)}o+Wf#s1YwZL0-ps` z0aPBByJe6X*Uo_%hrM{PxS@_ayF*uL)gq4HxxU^JguNF44S6 zrq#DrOKJ&i{qkJM$boi- zufBA-0F!q&S<9bo`V1wnhq8g943+XHC^uPCNA_(-!2{k{7xuo8mUYRn%iE@$U0!gi zQHKNS^W+9RdG@vu7Ih1Ai@Q_`oA}Zgu?7$lq<)`27d$_-_yEcg4~RE-e{3hGv)~@K z^%NMTw|_=Q`lJ0=UI{;X=E#J7O zD(c9Dg6v5B$IG}eWk9v*-*xM_pTyY_>^khQ9!a`ImR6gCA{Byqdh-NF?EZkrv;(Ao}Lw$Gh+M2?v z>tRwTX0??|14aE#-(MX-ymlYm41|jru8Tu@;*edZ%14}f&4!XAQ=gJa>YE*va5Lsb z@N+G<#IH=sV_^_t&l(-XgB3FJ$Mvx}tAqKa+7n7sMk>T&;~6@bamOh7;LI(bm*iV1 zVZL7FNF~v6978J+_xM8jl4Uh7C$!+Lu!nKIRieabRl@=+7|#(Jo~pyWD;P6k+67Rg zjiJ%hi<$fxHV4y|5a!T~2JR8EhEGo=PD*yFFH2Zm8^`3=8zOh$DTf#9xQ8ETvtG_{ zZciO1ADzp@ToBOkXbR7NGKaMo()Xusf86k+e~J*_2|W`vG*?JY(NjIOvWWH|iYH6k zGVPA@j`5zOGJ|&*#IAjNcX;fY#@go7(;U>`kZ-6EO|+@P7o5H19MD`Hr(fW!ZM_~% zrQdh{V!@YZ(pR)VzxNya*$8oo%l7H3AgR%}b8HG<#LOs{eo(Cz#;P)a6lqZg8QZ~a zJ}nEJx4hEZ>T)Yfk!3h79&6%S1Kr8}etPGU)%`M& zq~Qif9&Ej4_jM3sP7zz|9hR%1cnh)*pad#B{dhZqDfh=ZP3qA;pk+Emy?o&m(L%xR z&*FIk=xrgrYKvUwH)hL|m)-PFMlEggJTUBn2pTONXgwG}Hp+fJeW?N;VXQ~~b4oL{ zS5)F>SQJO>QLHX?x>0OVW3OUR9yA%y7_ol*TH5NAjiizL>ZXRZ;2Eh}*_fu*9_aO& zXBo;NF)pTbv=xAHm+~0MBbPu6_Xzft%|nj&UXBM{OOgbirbP=5*G}=@o5^l$Tf%(b zgOwEiG%yr9K0Ux$>bKz>a{{gw*$RfS3qG4;V}Q5U6c{N4-uCylzL=*!@pq34F~``} z{FH9uHmc~g0eJ`zZ|6=sundtN&nqX4564|f96XwuIv>A!m14vBbU4NT z2@Fo6@X^f7728?%q`F zOO`pT2Ct9JJy7$bf={|mQ7Swg%4LJOdCj z!R~AAOuI5Mw-L-0QgPW4%pl-{I)2o#S+ftYFfrZ%n$P@zv$F^pw44E`p|}{gQ8q`c z!+k*3=oG3zKo;>eu=#{5jNB{P*MkI~wh79%_)v^OwCX2<_x-Lc-q-IK`#zzPrl`iG zeYpxR5W5TD>#wYtdXnV?RPwhH1%+=f(*1pRG8@kai1H9>-Ok9K?pRAx=Vb4;QpBot zgX+D92K~-aPV-Uaj*g`1l&_n1ef1HPd(<)=IEZo(Jwdc8ZdG#sgM#f960yTBp$&Jh zvg}osE%%2<4lid~v2&5~U6+sN&ga6;gsGt`-?hwY<;lM#C<>U=&(NZzXKu!ima+D> zKbn-F)j^u|tuCZE?blC^7p&^Yz_(zaL5lv7!!iF(qkAgPVfV3_Sv>O`RIh@Lf8o zNCH~9OZOnC9KMne%PpHD2MGD%k1%KR1RxcUs25Hfa-2WfX&r*Mhj&dk!**)TPv$FV z_P9L9jHp+Uhp&E+j72w4U{-5d!WNZ3u>8A=g^q5WFhG=*QbTVU#!G+#R>H=vCS;WBB7a#4*58j`s^Tv-JsTGlbByMH`t2 zgJA96%URUhQv@@&w}dF(zxRmkWp?9IU)8%L5UV9a#ApMutZ?2}c&<*xLA5TWmt3y& zlCGitjeg1V@y@TRY;~xB>}qi6>6O zTs`?laWx`Dn~rl*e7}l(UckekHo2pzxbXqGZ&Mzf!*_WeV%tt&1;y{9O}#unrriNEwXk@H|sQ4YZpYk^*y}ST-LP-#}c^rauz(G&22;!Y1CkcZw$! z8X37U@p6+2Lt&q4cqu^`nkv5Y)dod0sFKujZ<*4QqfL zV|P}qB}f9=ZgaIp^Hw6**8vYxH0;a0MiZCs4_wQwfpIBh`)e;B3I2O1BS{0rUp!3S z)qL^7{0$BLHFc=0$U56lqPIw?zb(~Ag&u%}poN_-c(HWFX?QmsP>t-M#G_#H5JosbaK=K5y^ zyU_Rh2xVt3y{GZQcy~|?(D$WxxoFrl>$9ftD%QpcJ?9K+zw-Mi`f`@<2_8p6aMF#) zY>7gY?Y&5a)nHFQ*K|@Tgs4$^CiVj6f~X?6{8}*28p_|JbB{mz+vAxb+;mWR3q9J~ zbb=)hRD6IQ(i~C;8^_%DCJC^B$COzX4!9KCV7WL@s(=QQIhUGv9rhC5eO=@3EA%A* ztms9A?+eDyYgoo4x;72fHts1UR5`;0!^2&)8Sjfj&;naRD8v;}pptWECd{4#{q3{} zrnh2(K6%4tc`J}^S)7z2>F>|8*O}B?40Ya!mBWO;n4qjB9_!hxJPvN&ca~<~m16XK zm}|Q{R0K#pDONm2kOcEDw3F@*JO{=mK$@Vrt-V4ZHlNS2f05y;rSS!0=cn|IEg`0e zvoZmgeha2$V@>LiE{Ti&$QL8tT_yacO9Bne*{Kn$8d*Xu`oB<{H`)my6^N{xC=!~> z2X6CoRPdY|2oSkFG-(9ZNzKZaNP54-uT01i?c)D$m-K(a-`@deiGBxh{8gXg4+3B? zvVIq_?1(*s9I8clW3Qh3=M?@g_TDlou6EBCEP@3m1os3D?k>S01PCN}0UGPhMwYsO*?XlaRHXnHQ-fP#R|DOd9wtJj8 zFrHiOj7YkPRpy=6{{b9mAW9!_{{U_|wuauOmU=FibMeFm-*Z%|msC{I!%oBeWjY@BZpvaB$Sum|TGSsdEB^>$7 z{jUU%C{%ovT!R1lPO^V(J?UmHos-eS&dXagDU zxPos|0_;#i!k&k*guk|-9}W!NJ7KROdLWm*SL;T3Cia>A0a&U0wT*>LpNDs^WL{hj&Y(kQh)hK+W*vQd8*Fj|NEbeGv?IhE=`O651_5| zZy}o%e*k~|{I#boZy%PCA+VUudNYIHQ6HpYmOIP!pS1qYV51sVsVAHJRLVZlvaI7R zE&q?6+y7Kis^v$Rw%vyz@=y4{v|@+)wH<^@6`9c@{e(r1mn?bme*To^BoH@i)xRbUjuCi18%jA8VMR$Dr!BeAim zNu$7fp*i3Pt!o|a{Qy(Y^M-fE$@**F(#g@=!p@}jM9^|6X-Kui#@X2hW@|_8@zwx7 zS~v8r;^$8nE%cCt{!hVAJ~U1TsJPcG(@1N{dBz{liYtbU!^YT`sq}vgzhue`*L>|Q zIm)csDU+($&`0#y3PGHm3YdH-@B5d>Bh&&LgLWLXyf-HLuu$a0Dq_gRO{1CXUdA2d9YPkpN+5m5yNlOlKv^X&} zH=iD8aOOdDQFt408aC&1vZ+@Eol6f-H;HQ_-wvMn7-B~zoJ3deIxVi&=Ip>% z<2vE%sL;a;AJ%y26W0~mMauXVEncY1(;l2owL7pZ$;SGWz67JAAq3n}yP6v}7`j&G1^+}=jQW-YWMFF4NGLIh% z)As^FNlaZT=4=3GoQuNuu;}5NNC2ePg2CI@$zqJ_Q0Q_IBQUFkH z!_sBB6*3XLla{uTVNUZqy~n`|z}+0sh{b=_O{hi5d}^Qeg0JlWE~NfAtw`<(Ad*WY z`(ihjP+8@9r|}>(FyM}_v3cfVWafB_Lfh_Il&9X=SZ6HZ^VC?hG9jTa2HJ!-h0#cq zY%`C?1kpfq|Hd%oIB;W4ig@g2+X^9*x)>|nCJFxZ} zbQ%)s8=jisJIH_D9ACMcwF-aMvJwl*M&9Z1Wm*Y`G_00P9n1P5tJ`l}5!MX`yUc zG)#PC<8FeJNTeU3YQBp9R`az&HABrdS3JBAshRM~sJ}qCwSp9P@~}E>AVt4%WlSMV zwsDGULqCf5dBRV(Rbq$!*bDU847e!6Y1dFo9`6cK#N8B|?@ABcV7;Zpbr?jUIZ-pv zwxMmxdpb98W7@HW^yCKVFJPWehvQ$p4)Ul>rE`@H@G@0J8mH-$Iq>oo=V#;#cj?XkdtCpv;#}`|`Po-PUweG+)wUNM zH$Qi(=26cnwtSB_;k@Oy=BG(4H2MAB$=C{u;xpm6#pXjl+vAgV&g1yn=36=dkp&dj7Aidn@(+*96;$N$sU?i+ZPNqYe zlA(`fwq{dV=nR0f1+8%k!+xpVtP4U~_!Y zu#E4gR~cR&l87pM_xtqKS6NS9S^bjya{6><^1+7@n%9sBgtOO(svx{jb~!jw)D%${ zma{b{&+QzFqW6GGu62+0b1D?r8DX@sw^k2Sh`g)Kfi|hPS5F9kII-M{=5)wtyT;wB znB-<#r<5{NNZfEv)^;;bVC6w@;2tk{j-^!aI`t5101KCBT{nFUl3sE#uz>F{$K^?E zlUPlaP>dGQed%DsYG4g?93EY7q|)JJ>Okz~2O#v_U%!2UIkP$gR6yPtBK6MSEee^) zkKHV888+wYyQ>QllPccfkfvNmeuI@5+rYR@=M3f??hGM)g?;5}+s43=fQ-kij7d+o zcyRgvvD=7aA{)lGwHe(@&ecFs&GzoDl<}tKsFJi(&G|QKV)Xs3ak3*uUA=S8HBv0z z^kHS~ToiBCxaK&zan+bP1S;f4`@~LO@wqKvPCi6Kd8I5WOhDlDuMiD1PqU+bk^?Ac zs3rE5azNv6gZdHEkMvD=cdAV&QlPk}Pvc?4ywUkBzsL72wX2EMfSh&d^ZiM|Az3TN zcFF#ij3j8%*wx&=n&ssO`oY9^*jPP6B9Z^~-2Vp>sJrH=`oyPE(rOVjyymm7V?QOQ}Xz#B%j25*$3dsXbw*Jh^(x^r} z6Qf?$I!&Tc4!DOEi=lyE=;LbpiISWzD3zh=-|a~MtDzf+4BnLVNEo$o`A*KngWs_s_UHnLh-uA2gdWNybmK}d0S62C(9(#eR{8!4C!9zW1)le zEwPt4u5_ilOYE4EJbbJ8F2X$9H$)jgS7AnEpOG9Oi;N>^uJkP5mk99Y-)~QyB~R)N zi9usSIEoGUBZfKF>5R0@fmcSH=#Yy9(T|OJRNXF zg}h+7C9C=GtO1ojMJ6#VD`PG8a^Z}0c}uXCI#%0W`Q^lrH+4i=$L6*&iOGEOU|Nil z8*yp#ir%6a22Xy2I{GV42cTS>+TVSyb(KCzqr%UMJbl`l3joC9Fng;ze}*~}t(fI- zLpvRz62M(HU^o09I#-#n)H8rrGr;E{eo=a+QG`P6dPMiCM~=M`ElQr@$}&f z_oqU=OoPse+kon%j7k1U*Z6|Y!`}9i4#!HL-OYg;TB8sRzXLnw)(-Oh$!R97wC^K! zlP=h_=Y7KCb;OlS96}{(TkB+fcN9Q?**3cm^_q0Lg{-;adVAL{Xji zxYF~g=rOH;Crhn;&_?573A0G88 zHwi>Q!*vCGxc5WiX#KRtj$<$IlBOXxktpZ{0wYHTL(-)+zuE_%k<4&7aUAh@pw8{q zd$eot*#wVV_$_Eda*?lL)H8OyP6j*ZchwisX%bZq4H3k};Lxw9WO!k*R z)rXnYT}RCk0_O_2YsyTqTb7^V(6;d{w+TVZWmRd`krtCqaZBMcEC=95uytWz(V^G$ zi`?P$QjqTlOt0@e#&+0}^{D;Al3<08nIS?m3U>d2Tf$#5&I(T5Ke_+t^|)iaiThbb zAAmj>U%y#fzGAT)RJuhj6^xov3Sk7IaxogGiycmmmy+t0Q%x&EK{}C4_P^2@vy;)# zRG4kZ)CY43XFnigYVGNHPB)6H>~1oLgyV)jy?y2qjNPKVoLrq;fZ<{1sW zomq}Piy_`Ssmjw7-2}PQxZ_x-+O1^Hr%Y2)^;I)a6@}zTz>fH^#8T6YlH%@8>ufz# z;wq*>{ZxOLoPWQi)?cQUE6KPD-!h2+%x49(jD6%L>28A61v#9sfigrv46Gv-{{RMp zQTSS+GrQ{K08KlIV6tGgeyO%DJn!=C58#=>?^Vsy(#Yxy8g=!l2)~`p=%%WDi9W!$riD-kE@-4}i|89!m8LPD3i(PUcg9m%TKUCaPHc{ptsF2sZ7iK> zQq!z=J`V@4hb4+I+Xo>g-Ix6?rYw|5Dks`8s(hzl_}d_n(mmA-Plnbb<2%V}l}hX>uE?>@BttCFG8F|B$zuy8C1F#; z@oUifp&!vQ5LU8(wx(pstIN%uN^!P`iSayHKtA;4Nh~3#vEj71)092KtgEYQp0{q_ zp@pkNQpn<*>s1BdM=zJ#AV6?Q#M6w(*xvN{^kr1>S0|w`{&3>B+TD`j^$|r zPS1_zrL@s~@fn}S_-8P~6E$hZ-!VC<4U5B~Z#be~br^AnrS8Hn@q&rQA;Cm7S+2Mn ziqlHlc>**Rq{es6iCfv>&ol+RQcPI%bBDpuv&943uqnsZ{=vM&x;{paNddtnjQHIu zJ&h8+8s5IVGhHeFhh3B^pdb@fA-Y2?EG%zFdX70w_6xXYefr1;2~{T$``WsQ-=;60&=)CDE$b=b3c&y&yK(wLfy+b&5>W6U|O51lb% znYtTv>xpMrsO0+m=nFqiHl6D^J#wi$NY6*1Kn2KN*kBNSi-x>+n;J{*gwBp!+Ev|$ zj*wx#ptSPS8#)Dz)8=YOpo&&9XB-RtW2X--F9?oa7ZsMHW8U&ni64#%@1<&U)adtU zFGIWW4cC?f1g7E6@ZILNcu^wKAKFXT@xIteeO31=6LrX6c4a^#(=3{5d;=9%vc}~6 z?6qU?kR0Aw?DiHK>Q0S1SGngIF7-R6SPRUj4B>3259P)7=l0Yd4fokb%jyDVoRX?> zGzF-A8y00OebamZ+cXM-KfP6*6DE7t8AZ3FH2frIvcLBGoW7 zV@qMm(i7;dy5te3DQr+JoWmnN4*W)!OUC5FL<6J;-0{QTBP48t9wTI$N)IIBt`dA* zQWUnK@M=~pekMf}IhhnrB|Ulo0`FDmI#in*oPPytkq5jw?Jh0`ZLdmft_<28|sT;q7)6WoR_ZV}uCbjG@Gw0OF* zMLe*}^tjvk%cPXq6)YOU9XH&axtt7~-eHEO9b=nKcHu^AR&P|^boGxUBY)i*4?hrs z_M~KkF^u#o$#$9wJCxjm@qG#9w}dPsSbVv>5R-y3SvHWkw`Ma1-=_mKJh|TDm89RO z&qw#G4)5^(l9~O@2oUv#FU{|j!acs@Q9cOHZW^DaHD?3V~k#A2hVcwLDJ<;SHaf zMFr?ORxTeXFKPEk#1$`8XSclI{gO|4PF=5usoFQP6MK$6aPyO%JZ6xf*yQU}^wj4( zjd$yA%}1^+@BaYOzx1vCKI1ptQ8KD_bl{{nt~y9TMnZW*of_kK-=(O3&xFA#+zr)m zIn|!Lk#V7krOmcTqncE*u)UGVgWRhRdUe03Lp;eec?Ift(RkHmdt8vRt4puoc#cKr zjW+M*mw=LA>5YxQuOHaU43GTONmMkMiB(!^Yyx~v!}YbO#W(wImfRsESuiE36(4=b zo9yk|xoS_bg6J!eWU-QX&o@W;?R-{j7?xOot!+y}j&;RMze`Hggn<4ptO*&q;2%4% zshfvL6bT>q=Jnu%8QI`J@VBG_oP9^=$#+5lh+o2MAOYc>Bs%oT8*GjK1GgwG|n8q zr!c%P`a}Z=tSanHpCMFGF{~1>*O5BWk|0jWw800Uz4Emgg!$@lsTt=YlT%dh?=whY zuNmQmqdG)4JiRS{b=BT|RmyFOC9`Aq`sReZ=w3o0%9Qav< z55+2TdOg`FP3;$d-a9}}iGiPeIqYg$s3fY}e6j(t!0Y8xcib`~lyfIdoFdP1NLG2C zW@%0miaG}n+3(D-)ge2o@Tz6sB##@`wZwC_a<4#@H4es(u}IHzgUf1_3chJhbi?Ym zgJ|YYP*cN!GrsAbQD^&lw%ba7^Ob-a!6ej6VhrtNtJRu8D4!49?ZNa-+rUG8eUb00%W8bt0fhi|W=qEb+83jJ zTT4~i+HkTq$9w~XhTs6Wt0nS|g}s;%XYT)qL4C$S$TlKLk6nn>5Jugw;YQ5)a^ujeBp61YC( zM8qq5LBLJ0SH=vGr3%!t14h}(r)MQ7P3?3@%MQ?RR!Y+hzVLRGBI2p{=K^tAsTazQ z4M@u!`7gOEz0lp&qgDwWf~Ys0IuB&sE4-Soacm56rMpjSAE%q;TEo)SsXeQsLQf`= z7c?=8Y}7!(tb^X1#XjDKEzvYDm`wDwlXn1iSaZ}$;^VH#ntc4noO62>o>^oGWOFB; zoD82Rx}RhWfX6}8D{ITY?W}hxFl0~2fexIFh)K0A^rSqEQ+$$DABurQ;1ILmP{}HD z(vM<8O2zz8BE~Rqi*0$1rd7+AS=31VjvBK6W_qXp&*Y}z){}6C!#f*P)HvqILl_;3 zi_5AQfAx=4+`pec|M4vP|HHr0|BAa+{j>M&$G^{c>;?aqu2QI=0#reJG#};321DiH z7{NJX{t22pcg-98P4+al8yR9pSXd6WyHReaB;bR0WcHK#K;H}Kb8R&cLgb!T9mq&e zAEAV5paibjeQ?nz28jYalq&7>T9?nV96FoShgLjil3=@oZYG&$2$^DwK$~)P8><4l zpGoQh_>WIJ)PMZ+|3!zS6W=6QTOB>^fK-3*9F{eOiXf4C($Z zN8hXg)L~O+e*1gd#;rrY(g|OjHi(P^re+5r9kKu!#+LjEU!fawLF38 zu6Nj^Zib|}&Q~f~ADA?uzb-GaAt?6=!YLfO?rapM(=0&1gD9vc-vE-NG<}J5sOUzq z*A9ycvK_92XVJ}@=$wahITwZC6uOQK@-y4y4Qs2zwbJv*agK&Z#Lu=6c~fy34C)BY z7$~QKW({~LvN-N;xBH!Oj5YcW#~9Y>NbD0-1wgdukUWn_$_^?mJE*znr&sUeDM|B7 z=YuaTk%)--wJPI#`c3WJ3=PCidJ7cf$UE>RM{k)^7=Fj4D3VW<>NHIE1@STPmiEO9 z-f%nTL+#9N$*$J9&Zo7eE2%ad1J-Zrs_1*tRO)VE<*Od${$3Ra+{WPccb+>(4@hSl}Wc~(-#qeUe!ZjdJa@D>sbJ5^U zYXH0X2r&C203+Eo`m85%Hs|TUH8`jqHtIp3pxK_|%*`CXn!cg+B|?#x@x2^&_61$V zou74HDKLPwajvwjV{T~u=k%y2L;4Ywdg!~5*ry|OfRcSV$zWsLqYDDw5ijcSb$HU; zrN4>t;_?QbWR`r21~H7kCdkQ!e~InTV1o{sgE1zWXswrMOs1@tJshGY zD~Q(O{cS?6@|!Ger_4JTwNjt6YiICVQ}4jC6|Gw-kkJQV|I$@PEDv`}f`HU!D2{19 zv5HWkCJ)%zd7fv=a84?)*q-9XvC-=$m9t!(OD|>3n6fZy{N-(GZbk21DecycUVJ?? zQ1;aVWX|Tis3RE+>aS;a=3pOImz8?tLth#_imWWs2;91EontbCbJM?@uX?HD%FO09 zU09><7IL8EZc5v#MP`T`7~TL@I(l1PQQKzn)ubba)f46RW;0NJQ5>Ytmqag7^5A0! zR5@jSI%t3}zZu-I&qLgupYE`Dnm$5^(j1}3ZXuSU*AWykjc`KfB~ZVS1t0hqndd-^XsgpcR?vV=4i?RaRXcHp3sUF_e;JdUhf6&O$bc z2~oH*#CzD(|4Y{qfv(Xy*VOT;ZXx+lW!dS7xrx)IVyzN$@-Y*e_#V!F>^jmP`l3?{ z;?FIAFbQ3RKw?LC zWK5?8+5OZ^;WBx(_@+;y@X?HF8JZrQ+z;uXCX#6Fc9V$QQehY`u^BMn?VJ$h>L58d zu&b>#A?3B21snbn-$RwO%7I?~5Y}OE=cC%AA`m)!P-CkonS3WA%S&1o%IMQj5hU@Fn)Um&zWN92?YMqPFYbhXxnqbj4-w=L?w z_*d4~j2c~lb=w#g2jW!d((OyBpuDqJL0l-nWL)$iA++l$^o)q9&-^7Nf;(c<$*9o- z7U+js0`R_4vwc1h?ulv7*5`)On8<3XCevsWWjsoc8<(D{9~tvs+(VY;C-Pu+S9yf- zrrlRwvEH(}$DSOD3 z54)4AN1bi$ha3BFNemCr! z!}dC23Z|DtNN)g_VovJg8jobLSxqKV29L|bAvx{@qhYD3NM`t6=O z<9kM+ujU2|JB9^%FPh}*#25s&Y4zO^UNQmr^&dr$nd6i&0FHp{GnIz;jhFy{pN*+O@2e{codd@*&CbMq&L4VE zzr>7uyNlV=3s#k2lv_c*>c2X>{JPpaGrSDGMMr5N3aL>w+oU|?hGnmLLaKlBU7mWV^K(ZX8l9{9W*4{LqkvOY4FARS4j8xWt9fn@B=<>^hVm{$ zBTI80aoSx?t~ql!t`;C=0wv%aI3c$+B}RV8RQYTj5sR|d%~#;q^i{{Ar0zX} z?5*5LN@@3a(3IzB;X+jqHz*T?BNUTm?C;}59FRdoYAOD9?a|9A1rymp4_%~25%Wuq zs&*gE)gYhV8|@>Q2MXLv#>k7MaUMppO)*m)m1+tGq{zW{Kzf2cP&L8x>^5L3eV zd88hmq0lQ%0&AE`OX?77IYG^#d01%g@!A-XOOY_4Z6`!##`g3tkXF*!hzW)(?tXG*Z2bCRDy?rA z#3~m0GGrA*pKh8LsO)OTUFVO@@9K3Rq)iV^7Hvx)df}Oi3AWcg0vcZJB~x{MASz!c zZ-DXwtRCYR<;`5DF!Ywr`%T+i_e5Z+eL5m4ckF?I$BgTg_I=`bt^iKop{XRkfU%t{ z?xk_{t3b}z(UTxwVaia3hR$dar?o18gX1WzzrH7g@*?XGfS#t3m)z{|`bzJ00;7S^ zn(~p10<$feL)rVbDXPnYcZFp4-gr6KVV#~O$o4lv{u*l4ceVUAMJ=ni%__&&zc5eb zdZ*~lhl~+Q>($MrknOhidB$Y_6CTp0_aypf%kYc^KAe#+UodAtc`}`aIVA~14d!cwesAD?ae#+?cO01*M{7L8 z7MIk-Ci8xHnuCv2UK;!WRWSFEe_2T-F#e21@l{yzZ3rd(r;FWs8M5a*4X}ZbT{~e2}~jwD(&tY;+f$YAbws zY!Wr;5_sUBKxu2VaQ~21C}6M8zdt*{0&gCD7Ou+pERms8>oj%=trR#=48EgYXu=_1 zecjU176B?JWQyDVh=IS3r79grfQwUUw0ZiI$M4oBbRs~noBp|3OH)!ew(ZJJ!c&F~ z!25c!UO=X6QCdz1?k~H1`$V-eBrE5Hik?KyVmvEx)z_B1YkR{T?Bs`tETW+}>O-Z6 z#kx7q@d;_trom|=EaUe$*gqxPx11PlaOF_mBDR}nQUNGfupTvoUFggr<(SM?#`XF0 z^+4RO+tAC``KGo3ckC|lC*$Yl?j4JrcE$VYV5zbe{WE)*XDs=fugp1K5nO1)01OgM z{!HsgSfHQ*f@bfHl0RW7S$%sZ&F6pyl1RL!w%ZZ6q}b5M;=7&auR5Ejg^41lo131G z6p!ZzCh=JPwrKt`LKFJahbEPbLE$7$16%j|qKxd?x}8t*(!&#I=nmk8i&Fp2Oymao z@vnu)aJ5-AS*>|*l(psqXI{S%zP?_%I}oTLnJ!6%DRu0;8gtfcs^!^+tMBxiA^i6uH;W`zY|+*|V1JrgS}Y$#<{XgaPdh z^AAFME$MF+JRQKKQ=~I|p0eHOj0uC<7;Vl@Th|g=M92}1MWzLB70*(w;;oIoV9Ka1 zo#HSN92!-OZTf{2XN0VBlH;+}_XT)kOcaKzeG7R9w?VRe^2%7bG#)$cRgLptI)z_G zlnk4Z-QJYD2r7s)W?{MLi}taL3e4cmM8174V6O3AeIzrreoYRua-W!`W3u+FHvRb% z-#kvDIjOmK1(z3h;a>jhq@P6!%9#`SQ#R7u)N%h?wfTR_Yx%!Jwdv}2a+j`wj!K?j zxS?LMGj$R~<~=V^e*bBbjbG&#TBBN{(@2Tm?3WL0tU{CUKLC%w6SHdH)+H(LDxUhkoMP)VA`@Z>=Ka7^&quwdX`W=MQc4Po$+fm+Js_rr1#Jb_UFcqI2G0Tt=!2?nSi)2cllUqE?Z=j7~8Qf z_PKEgy#CC|DzH;l^{R#sWyLrAPuhOgm7IYX==I5O7s?{gmRu`tCaC5^nd;kPq`?j%@pUy5sQY@ z7p?KR?Y|+-NIGaABtJKjP!Uox%rT7EL3_!Jm;%7M9BtdH<6DYRE1T{Za0SSN+|m5x zvFD3HEQg&ahm{hW++l>~nkta?9yckJNa0mJJK9Tt3jl5ao{IL+Am4#sI=;eF)7gZ- z{+=xB-Qjd}aXX0b$-Jnz`BaLIFp{w52Hvu4oj4du8BlmDd5jxQ zhw(+~$QsS;;gP0_G)Inj6K2=9rm^^{h|o~!aSEC}67HJDvfq2c|>_xN|zn)^~UuMMZW0gu6aAsa)e!6h_dK!10`%@1u z@)UI2)doA-T-z(RC5_O%WA+-EO{h&+jc3tp{!+DNr}x>Mt;JIj0YC-~&L2RCC#>3w zG#lvs62%r#?f;tzTWb$i@aQ|l$!%uvLo~{;<)3u9H9r}K?`3~P(TAXpH3k26toi;| zR!J{1^O%7sz+|q;QBSF5&XeFp<3+1`6H}ViIp2{F6?TH($&*<{{Mf3}M7bZryRfIf z+O#<~?2J4w5L5oEdwJ!UmAR%CNwz zq_#SVWHn~OqD9nQWNbi~@y`7+RAFkT4^fU~tA?m;U0{_L%8Ber1Y_CA*q|lRSc|g* z+5%=}0;CqolZ*97gVhaIn;gEP=n|R7uJJ(&+ z3UnDUDrp3`GKWnQga~lpCfM5sQtJO?IOVdg*^Qm?!U(pBgg=LkCBV_7dPHs4Tf|p$ zTc^azoG%W!mB@tgBtb=Q(+r{dfLlx5D%9;UeYqT2zTeU|*GZQ=`b|LjB4pZee;88+ z3dYOhg%c0)ra~1rLYl?)2BaTfmb)w4wvzE)j1#;Zc0O`+iVb#|AnD#LQ6ZBaBwp)1 zT~ng1YaLKNpi;eHoc~%V1jJn=C-)0r<-{}gH;7u(dEEaf&;`@5P{B_)Joq4SllhoQQTKlIyQy<)aQy=xQ z{ahiDCj3W~_CIWx6n$m@R`bfxG3s4n=SvZK-+oV1R%!w^-sm^)Y>9v}jjFwocu@ZC zu}Qv1oda*m&8q;ft*t4a4bf_~elLHPKqrpjzGt7)Gf0H9cBo#|S8JdaFvw9bnr6+0 zrf@&I0t4*U?_{9N7uZ%Hx3WpwBik0v8I6u3B@)`qPt=LyRg++p{og~eBwP)184)5e zkcCf&nK{)7*{+nCFY(T>ULJ-drA&KQENw8(IeWzEHg%#8 zk@-9Q0-xa5-?K~>tDm34bdveOHd|H;SeoKfwD^lQ(GSn}GTFjPmX40$!tB?Nx8i9+ zZuiB0i{fv6bW;`p>}$wtDTeMHK5J}d%2ve@%)OW_+|JN{X2fdm+K}esE#~8 zg3~9Rok_LO^m8;RQLi?$_KzR4&-oSF)bZgmg|l^q2>P^=eIo@BH9SRny)Id@9JfD1 z@{OQsp%@^Ph6*NZ(#`0j?IF5I*kS2$5&WVEUu|>A_ND04kZiPU_t`w=cE+~Z5mHwQ z{^8FiE&RIZu9q?;$zspqnMhrg>uGn$USdo8R1hEDD1s>$E#|8UQ}w;UKl7EbT*v9L zrQTmd%Y1BxQJALGS>HGN#cTIr9NP%(Q!!>vfa*1^+Y7gGf3zk$3p*P;1v?PN6MmLt z_Wp9Vaz>qT8<6m~rgShx6B8DBEa^zeMp{ZB%IA~F0Q910<4}*-o;ze)jSn9O@G%hQ zN3R&0l zbv0|^qk0myg#9qD>31=NZh<}`*z76QcExdiSfT~Uuw$H#CbzS zW6=4Oi{smOeMU?S`k=7cuN48ZrzMra!dHdgR@O{@t`?>BjWfKRV96Lb!8NEJTiHvm zi}~{Usl$&=D#kRa3l^0f!?A*7lpqgn`J4!FpUXgPr%y3sq5?52ZZpHf3l&j5THAjA zq}A!{+H1>lYe~u8DHy_m?9BAi%y+Dg#Vy_Cy;5F{zjrl_E3?gX`c|r7?rVjg?viR- zuo^<8)vnLr5x-n!HsB|TjF$FnM9Mb7bYeWP7%;ug5Br9-#GqMKSt-j<16mUp?e&_D_nRM3YB>$F9chK^c$kOiq`((wu9mIt5cZ z4lEN@%Pc1~-RP#6?+*@2PKm-<=i~0$3BrKs0{r}URU^qmGW#;ydN8|Y$BL2?$LY-? z)^(eQXH=5W_X21Ix^KJMHxYRB2K5G0u&Eeg5CzDlM9apCU~s4Zh{#D_T*@X>jcp-- z#s*@{?Ile#xIrx{vY0NaMwH=-ANjcmSDncbxK%@WIi(XQW}ErGW8O(4mO!K+h7Klh ze7>M>i%*2{J}LUgYycX>gzYVLL|y@Sz^l5AA^l0-I~`Rs zwL3Q0W6`kd-^z`zKWckQ!sm^?6wfKDa;g>4==jpiE>k$CYk6{oOyDgOwo}jv{g*;; zW$Ef&qQUOn6AU)!uR-H5YMO8n{;E#_V z79(2&+j;3_hQlwL8eP{nQbkE>4ZR2|^YWo_g6iLA9~SQO9BCQsbB;?^{s6dH9Gu*b zT{x_?g_cm_8!-Z|UG5cUK)|A5)ltQ9RwysMfD^li2` zKoO9TG7o+3vAv&WtU9>q^rpglZ^-+w8z~t=1)fIT1slAKciP`i! z8I8WI+z??&`dJHeqNsfsjK;K^(rAB!`(h|#+0a*S^NLWU>sO<%SKNS>ZU zm5bdi=)Ya_KDv08Sga{tP8Zn^N;M18OiBTvN z$=-&39A8-a>SFJX0kU^VApct^M$WxVdB&u9l2uRq{rL3uN3{{QYQ5%D>~QWX9*2VI zs_qFFximvj@)4$#Wd2p`X!|N>m-@)9LSke!?6TGT>davb>u}pw%JFLS7aamfo=~+9 z)(`FUl`hG#C|_RliC5*$&qjCfPF7>jDOO}~C5W-o{7qLqkJRl7q)@Tklo?iQ-#N5B2l@#%v|g_2#tF*H+*_Rt2X1NCR@&0QZ%2I;iB4ta@S+|JAvpwNgjGsQ(9_xknU_( zZq(=PfLtg2L8mF<0*cFm5QP+{6$Rob@Q>oS3ncVn_tu<6^I)T)P+#xfyo*Pu>OtEd z0J2>cqKSO^@X_qID9R+B!sMRxc*xR);j}aWRjhc)dzXb$zQhzhke-Cd?qU7`q@XBx z2+z$KrDa1}?7J76kAkQ1{s34}#w^f1lxv#gmevhg@b=mtz?}(-((XmB^6x*-Bs{4% zxIgEV?HcYF*n!A(Mv40-nM-$C+#J&?T;wh~Npqr~^ zoxfwUfb4TY&85;O8Q&sgqxFsnfSf zt5rRIp!HFf*7YQvu2$-AJ}vZ4r4j!TBPn>&oZwKinbSWan_n^&=Ura@s=-Vpf3>I1S3MO;;%9@2!Fsb!kKAybxch>Lp1_OM%{ zh!zWGC$D&8uw*NK%CeYz)r#x7pv<*KyPz@gf!8UfqOMyZ*?bB2ju7O9FT)AFO6E}HeQE*Z5WPPD(seh zndqp3pk&3Blt^1V4WN7l!D|V6pw6h>k-2tLXq&TS>%}8%eFm@3X!PeA##wOrhhyN1 zi1g=WG~!GV6W=1b`QLu&mJ{wf8FXmo8{>zN?Kr#hPsI?^QdKsD>|1V`Y6#xK@T?5; z9EfL@6I!Nr%BHwIw)NbkB)~cNgR8M(pjsMvRntp3eu`BW?4v=Jp=CB<=4T&;wn8T0 z;Q$f&tP7~hR1XN1g369IIzanDfb+|wyl%^-%Ar?WXJCEi;KM5k-j8&jY^n59Dyyq# z43oFAqk72k;w=UF4H??^NrQb3Y`BMWnz!mEB`}#g%^C0{OtDw#d1s~jy+8Oc&TB}n zgvvX^S61cYgYi0@<1Hd1?!Wj}b~4)%=WGXek&DoyeN=J(T+E6jcz&r?{r($#w{Q2U z*9&#bNl9m$*7L5_XJ0}y6z{Td-7u8NrJc0SxBPNGuP$bU1FtMW-#*2ZFQ2$}7MeR= zShNqX37>tEDFOC>9P?WHe10|-IO5RoYarQ*9@Vhj@*3ACW+PEwt)psCC412JlaAR- zu5W5+tF0&7<#aH|%^x`MJ&{{rr>^iz@k?7J-_zQH?X;Wc$mAA>Vt&qi_q5KGyV3FX zlYNPlv=lWD&4V4df8wAgJ95~Iy~kAjf@i48of~o4vfacq3|n>47rB^DHP3Sp1X>sP zm!g=QUgy{93^<{b^*j(zzTt#Uh;Ps=?ppHTkTf*EB=ms0=QUrrg|w50D7=^ywU*j# zd+or4-X3MyF2XMh=HgrA*b=A>3E=-&bb^%`_HBz{|H1B;p?fp;sA&m6hZ=jtUi+tr zcZDw?#+HPLhcIMzu_Y~S!0G4Pk7_D{p=tXJfp=VlIr6<<8H3iQ61vmBF*h>+^d87% zqNQSoJ~r$uz?!*s)UkJOpNUHQrE}Ej;ZcCStUe}M1iOL8xD|i6fCt{=YiUDHb4;&f zaqp$r4H~W2#cTqp;mr&)lBUZ9I9<7&!KVr`iWdOTVr&Dtx#8Y6R)`Ui>BloQ1`5EvG62N z=}@mm_3%F}x84~(RL7w;hIZD5cI%5<31g)x;sjhS;f{I3*j7_#sJ*V4Y@G|_<{_xZ z_n0Rd8BJEUUS&!+R*x}0=%M3rxIId5Z*O;2q2EWFXi8fokn@(cIf?o8m%agp=m)F0 zDiD#4gq4;zWNMVYo9Y?M0nZ#Nj6X$3e$Bbz z@9|^>QUF%L7vx;vWAYs!caE3IrSj+0xql~P|AmzOzwq;asJAo9Ml-Wh4ZLF|@ZGL_ zD9$@$j|4mk)C**w4S-lL0VXFr3A_So z2HL#Mb+(+HgORr*^W;o@mY`EDwwEI;VjNt`8sVPPL!TvfFqu0hxRjf?0dXFlLYDm1$YS+mJsg*XTTvEErI=M(Do_$bo%D&vspeK zK6d&x4(I@5H37=%$!|`Qg}0(H;XQ!57oHoTt|sb^76B&Gs?onOGQP~dja1<(;YvLH z%+I;h5)G7$FOZuEm{-bM_S+f6jPw-$-A=+OJ0-Z%@L(LC~ zo+T}c@|R6=Ki5fi#NoJm%^?2X98F;Hoo7VrM>uJnHFx>;PzP@&N$^w`_noeMJIeCBMpQ)dFRU0ufzEBm2Zu6#j(<)@N{VaKZ^o4n@n z5-jkpLYyS6ym5rMrsZ?kQFseHrcB;`ifTgA+++rxQYvx9nz?_aw;8NzXmZ z(`P9g>nTi4#@1>LDvEbgY(Mm(uc3CDV#a7xmY{5%dm^dd8CYl#yyxgM-RKQmi$f)O zMc)g;bvzq%noxh5m9G4m{9t8H@KAMUf2?Y524c$hB9f!4vE_-WutaT-#h1wTCbr5% zN9ReWjtqgLB)d9QT&Z&Dr5L-}r(bYo(NQJ&H~Cc5n5qqpa-s}L6SB3;Pj~mOWnD)% z>E%!(W*rh;)(~1m85_zg)(Z_ishLuaKWZ~kw%#46tktW-brZ(S10F<0#qxPstF9;K z*a06;*0y_b4a9`_0sD*ETE*k%SRJ<~&}`8_)w{S6Z>C&A`Dz^xh|D#J2uL{!UQ8Vn zZTStkfnEh|gfrUc2Fwae%)9%OSQM6g)co4=Mw?Mf0m`YVr9U&boxu9s7k<-Lg>Tj* zhD9_rv_|XQ~E3z)=Mxe?&a_uRlC+Cz7&1e6FuF9pnBHDEuT+9K7?=*2FOHx;QNqxTIEgdG4Js{G4W3r5T`KX-i7 znD_a5@Nc(6`M2B2AQ;kwfWk#SEpX<*@1T$p$&5%-f-eU4Xu~Zl#D_hX!~mk(#sNmC z(ZNDoSCJtAD7+j`hrH8-5h9)fj`Qjzkofh%fPNortC8od0P5?j34!MWecAtb&i~Kz z*$p!dwGNE=2uH3IQ3aEZD}*dQ0DpcpLKlYM)C>(s9aN=3*kgHUcd?Ds%=PC8`ecxE z-r4Fumg&D)G+FV~KZk-6UgQB=<52>T6}xbjdu5;G`dwNLUpmsAV^2(=$X`4q__hJ0 z_xVKs31j_vLluwSCvK?(BDrZU>G12^06HskWk*@;5&!Z1|KsyF4ENr$;$V(|;&eJU z)Ws5%_j_xk$*8uUsbd}%f&Xh7`5rg_0K2H%esS|O^^Ht9#$>tD{7k0HB}vsQ^83+s z2l*)S27siB08qUYzqQge?w@ZodPUzfNP$#-*8Fs{wvb`bVFWs$f`SVw|M>1t$Ls(8 zxtbu;KJot$xQDR~7Lg=&t4v;Z81Y&%){Yy34;*aLostB8;|Ey)X+(e675^1mig%BH z2d68lD10K6I-DrVTo6AOSK`1}_3A{HH{JwF7bKNj`rCkyEj6V6I9>kPPuCQuWd8cf z>bJwxHTL8m2z6v%&oc^Bu)jXar1fH#u3I98^g6WDof5|Yyoln0jQ6oWE*Pje90jGjzyvxB<`ngJ z98M#GX>S3sHK!gR#dQ9^?}l|t6keBT$aVm;yj>jf^XNT($Zvt@Km8xROB>zc7SKLy zMji0pq^lg&hTx1yaejjf>_y1tRB_0EX_Eg^fK>QbaV>V~qC2971z!3y0p(5D^EW^K zvlVPb${cVZH`Qw)sl>1b~8Yn=ctWbdZP6JTibodF=KzkqLt-ue(WOycOavDB3uK0hoZ2mW{r=zzBpm`WO!Ke5Dt8Y|6C+>?k2fSn% zFa~if1>%#26YcCw_>@^bn^Gmd_2E@Ti_!L5C40>Sw6z)jv--&R#1(lzqn6;8t?;WR z;%MJI*epi-Mb})>454@HMbFuNe$_O;s4L)p5y+6`tC~&b7j0F6liBhw@l5K&fnshe zk%YQ9UR0VjY0DcoO3fC^rm>fa;L0yWQ~81Ri+?tQBetPb@@`yQ*%9OnDhEtqB+u}( zVp>T$=Mg$E@yY|-q+^qb<#)^RQV0qqKR6`^rqkb5^t)aE$|~HUnfKxx^U~iCsi0|a z^+YRFB=S^)nXHT{R9CEfr7MNFVSau|F8NlGZH^B(-FBY+FFv>aQQc4y*nG=Xqf^k* zGHd6qf_)DTQNg1j$Y*?vgZBFThktc3&>=lJ0Ljx(XZVtGa#TZfITC(63E5=_5cW*% z-)Wp}cmfoUTfgvrdhEf@`F04rh z5%i@cvWR({Cmo-EO$PzEMfcJv1z^D4f1K#aF_hC|4&+^8T;&zH27JggaBW!yc59U8X~)Yy%oB8-mf zu$0t(7}*8nJFk$!URJE&;3N;|K~!t1@t>IOT(s4r7TYzQ$|g5&wuuJz%e|y7JjrJd znMPPba_7y@trJ(QtCSKI$I_CQ5(uT4nMe;xtvZa2~D;{Xz6X8 zoqP3FHdfT*G_&1DU(UM~>(_xcNJ^48rmU}aII=kGw4BO2pfSn!@r2XR$~5_Dof$K$ z(wa5h#7#|ak#T+-e{E`g`q4&9D5u=i5!Q?GlZMy^`6^RTccPMVSxlU8D<2a-RobeQ zt@}YIxXiWuYlp~FKS;rj?L(6G4zvtL>Cf|DW_&)_Vv0p?gSHXzm2g@YM7}GUIOgrLacK4gyXnVmB>t4+67J#v@m&jtzUwCDR2G$`0SlCl z-|Du7)?QTLtGjyvr9%UIcCz732p;1M3(B0zDR~ccfiEO4R6gZ$eL@9kL@&O_jR~># zJ7iRB7^&LXa~@lLSUX}cFtKO-xYtnhA!=bFK9vypTH3;Oj`mOcA4??4;W6Rza)G+A zsgjJ(mb_V%P79;KQyNb5c?_8qk9yvtd)fH~l^~htzy zjA*Zc?ml~AvCQ%Y!qqh$=-E2FUR5NK6I=761$q%)dzqM>hd}c3p#AA+wXUQIUsTPR z<}G?8M)giIJnl#4U}yR%0pPgZ=NqA*!{@W4VQJUa(Y_xl-c{+KC?Mgc7t6!3pvZKx zrKj-1^&wJ9oCw(nfEuHg+9#jRgn#q^^10$s7b`-WCc7d#z(fmLikwZKL_CM7N9tsx zv24`>=`TW7JjG$_atO{GOAUjYjZQWk@yhzLN0y)t3Rd!H3cE^oqVXcWfCSagA4}L^ zn4LJ|u*D9I!|PU$wfJpzYY(1Fh3OS2eqmaX22ltxUdHIv1bHgjWLSFBjkEY_F;7|3 zF0wo^;{B)_Kl}=RLX%_2H{`3sAusg&LZ=iq?e8RR1VFJ(9`adQM*buk@Q%7R&aZ~j ziv12@VXLkcfYddU!mKM+#6^xY`J1$H1eU%q<`KR<{h|vyD4P(J4BMwx?(c|8>yUCg zmY^S7Jv`Z}9pkpDf_sW3OkXP&ywlN`&SGYi++n(omaf7s?9HPUj;44>-Ap&d2rKID zN>GzfmZf>e%@g<)yMQp;_rxH|nWdM&!Q;v7amNd+4PSDb zDb}d)Zi$)xa=e|$1jD{%L?zR8+DR!l=fKq^ydMpPQwz4vt#jgCT*kCMn~%oV)}=Yz z^DU^0uveRlU$zy+o`Ic3veX|kQDO!o#64E_)c2T@`b?9Aq4kfpNgpw}`FM7T;@jJ^ zR^Z&L%V;!hZN6I#E9ux%RGygHKhpA)axt~E0xfYIHSQAf^`Vt*yQ3X{tV$=ea8Kys z4meHf4u-s63=QqEbbBe6nTU&yS}ytcnbtlm{jKKnqnJx7g{$l&rtflRv(u8KO7 z$KfJS9n0jomv0CUFAwhAwmov*#PDz|Ms|O(c~!KZDW}X5Zt^S+TO@#@gYAo=m|t(U zA-|FPUmV51e6C2`-5QZw!70*a(yUUr3$*1M3zMT__w$hvVifZhFK8&1flec0!aa~p zKz|Pm!F7adErbgw%Z0^q-_YTUb9WQ;u1PVJ$Ga(-os&8llTL)z$o%9xETILET z;c|?jm$&x%U0K3HGu>M~N{UA$Q`&QF=BSdExV8`caHuUvo_V0O78^t95D{qrw5xbCqW8Y+Pxvq7g zO0tzvsJD-$tH4R`-ZM&!T!1GVew=5WG*@XB%2++}5!F5I$A{+=o$=Jw=($fVO_odJ_qf(W|q#oajMrd zo$O(2#ZNK46F(gSpdi1VAW*&KMDO0ii6XA!xx_-F_%AmxKBW8Z1X(Ua@P;#$^D1?d&$^>)w5h}KN>UOz9(BNwXy`Dr6b52eqoJ?G+*+tQl{AW{y$Yba^q%DZ%u!9XInl z3~}`4bU$`RiFhutJ5d1CdQY(Pd4ONe;$u)Wbe8QMepf6J0?_~d076U`)UrzlMuzg& zEDwJpI_5ry`2nnfA}d8>3+XOmWpxXH;t%>2oGtz}0`ctk@HA0|;F-vWX#iEBG%NjF z%IOCP3?PGVH{O7E*;tTKdO!^H=a>ASyH=w(3FlpW8M3Ne5u&ydwV}qief>Sogu2b? zkCaA9D**09RYjN~mqvjY04K0hmLEgHLFUR@EpzAK%WIVYgn3=@F!KT;13;10z-juL z4atX+E%ov{$Yv7=Ban^*$&k$8?#R7MI;8I`1c{ytAHj$tNxp2!1R`2G0Cd?J`yE6H zt~rLB}ygTfISEm|sWtM&TJ{B(hG}EKM%ra;!qXP2tOw0Vs-Jj2LR#J$v z=r#BRmcFWe-xmdw{_IMS@*j)C{^IH#Tm145iHQHy_rnZKC)$!Af?q%{N^a;jWj77_ zXFNhaipG5YKI(|AKw}n=W#UGMm5;}IBBx;NO_$Jo#k__4u%gahg4if_A4Qg!gE=&p z3gxG(>k^RaLtKqC_CxXXaQ<|{+#o`vju-cX@t3vLTAYFBIg$Odi7;MG+CUrb-?XiO?eCUtqUuZZ;k&)f2iWGz$VE>KlyS$&pms>g)WtoRcNQR&X`7XZaEA0FZYS15$qV8CiFoIq7_;ZR8nZJi8 zs2*0jAL)37YyiDL=M!Rml(Ou++QU#7Q)|U7$6h%$cmdfw{#JW?rV%(0963v}1?+nP@F1S#v+(%Y++96d12Ag^EN35|`w4WNPy#<=ZUKhdj7jEBfxnUE#jf zCbyd46DmB*mB#`x`K|?>v&ZZ9hh*Ty+g+c?qsezbK8kpED&g(;nU&|it zVVuvY!MAQ_KgXSN(I@ehyPblmK21+TmT?YQ z*+tn`=^j%ge$>-sgpFk<^KgHPziL{*^Pm1C7}U6#B^y zeVgv4pN`2Z6|Y-(vy3AgO5h2S&0hK*$##|wcElQQdnM&=NMkq9O7@7M%tdCivDS{4 z^&_}T%f=A|IbGSB+s>rcv@dEVdM_T>I2*Ub_{ygf@yF#G?UJYo;V1g~}g z3vqf^AHrW;50r09KU@Kt2$FMylcp-qlT_x90pGAv5PKcT4Cxa;WV!U)08S1($GAZR zu*}gOP{j+(Vc_(kw6tY_1tLP+SuR}xmR818)ed7j-4WYn`pGILGE{rI*tD(}IMeBW zb~%Bhr!dxGSV@;fh*m_h5C}Ksi1KT4q%UB}NsyU;HA{Lyn#O2JVqA(0 zC(RUQPQh;zl)P%f3DpU}l@`Pcj_fFMdvUWl8K%?bUeu|IqrlzG{&Df`n|B}NgI~XL z>S6yjJ$|gZPR9c+U+5@6s864W3nzI{wOkAIef|a$Lz z7bX1J27_6--Oj}H2(e171Fhj9DND>MW_$NDqhNsyEuUVx&7H966jyt3qPF28b6Vj; zvJgHiIexaa8q#T(n^F*>Y8A~+WAm3oSkxOuUYt_beWUt4xyN7e4Wn-znhS`e`lmE( z=y(CmA+v5dbGRJY$_aNn42w;JEvbO^N774jWsNOxX-2)7Rj|3(%O;80ZoZS@8R@$;E@EvSF)JBkFG!Pp^heOtM$Xi*ysAYesN?D|!KB-6yCoy|6=#09|2V$qi+^L^6jRjwlk6N zjW@@ZsrEz|1)M30P853CCagH9q7G@Ijzylh8%>Uz8=f!WRsvHDSXI*VBB+Mp(vW*< z-mDg7t~D!y5k-}NhY$-iiQve1#M1YKY-hjJ{L%2bs zLJ~S4ISwjvRlgxi`OY-V=EK0Qk|0hK56+^=Sa++1EUphl#ip{a)!yCw%GyT0*T5pw zcFv6^+{0JtfGNDHf9udDKul}dig&g9{C0s2u||OCRDd8}=0bPwy7L1XjhHGQ#;6ok z@0*qhK>4NSaYyc(+up3OSI!bPb5&RaVr2TyX_emPC-T+_?ec65SB#;&?qUx)*94-w zZ+(9zN_jxZ5JBEReWX&)@1S#zsU<(~n&L>yPCLORX;ttc4)PKBCS*nea!G1w)0Te3 zvT1O#@~*6<*YfuQKQg97jxc ztOKH@AOd?cl;eMKBmV!t8tJ=a|)My2N z@`9$fZzD&RPKEvbRoCGUFYR~CKyKy4F82#IQx8kq z-$D5>o6E3jg9~wI5)vx)vT%*O0pPG}fu&#KoI@_pi6MWzCYeyya*$ZpFy#hHb^?C{ zIp*H_4m#UZzB<%UmZBc6)k|qXuzv>u#HEoIz@K0GAaix7OZNH%Oo@;kBM5T*4kFbu zBVAwD%p6-8S6S=+ID_i!ywJERq}O=EW7+xqc2nM#{*8u-W=7_SIR3DR3f+fXn)N&m#+?!?o5k z3qd;^rg<%XjjQgE;QnZp&Vqm&cd-qJu~rFTf460nMVKH)RFtefhMTx>#u1(z5Fayu zDVg9?;N>zWv5*vgtl!j<*jP1wiqS6oO{hyB&H@N}j9Zeu(wWdU3-Z>q8yA ziwv;dzp-#?dZtjBK*u6Q<(>$QJs`OU>qb+n<~)UK|;h#^j>t`F~2;JaZkGiWiM zal*FF5YW1Tmh$41UsVmBzM{ukF^2V zLcbvf&(i1*bAms}<#staaCQy7&o1KJeeaQIs>G|Ma#v2*W$T$SJYnS}>;zdk>(^tF z`>Fb@fVnZ0v(VqyKbp5;dR?fG91#wz4PZt7B(uLruzaWYt#MCb6THO|Tf-2y)#^}- zdzI03?fLn>a{R$1o-(lY(0skEX`+RBz0cCO8|2y9ily>zrjC(MyjeDl8BYSg$6!U8`x+9)IR>Q~cZ^(8<4mK>P(l$amEDI6RU)*;`e1cU#T&^oUQY; zLVs&pH-upq@&(DU<31Ea7GTu~cEgJsDkzl7Z9JL_ZfDF)*<&(|qv;~^YSW$kjmf$b z9^k(kR8q9obXes-m@iwz!TzD}rA510+1?@iI|>AyNov`FAyqg_H^nF8lk*g4 zJ|*w~Eu)`tJ=e!r=Dq92R4x2NrhjWq?o|69(sd+F<(cQ|D7svm+?BTEZz@lk(W9sM zBrSyk--wu>GW8czhb?(Z)*X^&5Iq?^VTfvcf6ez6p#TPkBGY;FQ`Sa5RR<&qP^1F@ zat#1f_FyFQ>adusyM^d|y#Z!PK=Hxu+64a`Yj0h7G(pv@@U2hYM&X5_fM*3c3X`EIT%oGQyHPRQqwK`U2?o|;DS+m>j z3jKPTdi2q3F+zsNVtzAzy<(J2@`-08pMUGPlexD~X3DWd(8$#P4DQ{58Nt|w*iP@b zJIfN{DYK%P9j(Co>7mn$avo!BS^Ui-w^pH^RlOoRZ&JX2>Vc-8!+_?j*#dJDW62Z8 z7Jot){_SYz*>7318~YC0X+HoG40P1Hj29ritJy&8%6|zNR$UbGCt5OlZ{t0v71^Uh zy0G_?C!#vS=^9a!%wAc=T@;si?t5-FevU;zJ(NybzUcGru`kn_Q4bZc>(GqsqS+o# zO$_C9_aHb3ew@HA3D$lv5Dxbe1QO#_5rA5Fcz4DI#@Egn2|M9|q ztneQq{Wte8iNb`kU0Be=c(@4GjZ$?)`EWsWEHl-b=_${U8Ed)o~~CKVODfYMmiR?@CGX0 z5AE~s3WazH+l*4InRIk5Ms9pzc8K()ALh_?|ZPt56cQK#|E^^)7CWwvdrl@dKh2p4gb6u ziZ!6|fmw5&64SS9#&(V3==BfA+F1yM?>QVX= z3yF?|yU1~g2!4AX>AJUP)R59xPJIWt8KF2axpYMf6?i_W3E1gs#t2wvUH9MLM`H@1 zP~2BkvUK=)qd$9Aop3j=?swWr>fT#ve;7(XTgJa(3;$sm{vWXYsUyP?HY>@)7(4M( z^$TG&L|O{ec7^ZbjoyIRn_#Ah;B&G|SIHm2-a0VtrpO}+tm!X-k4qz-m8QmxEug5} zSoVv+b4tSna0OlYT_*i?Yw5n1d>lG07lKudcTE_e}730^S$6uLPZfd8AnBm?` zmesST7vby=H5qCu79UwL1vh0q7l|72(8!-ofvX}P%S5*9H02_LvRPjAemv&-TS(Z1 zvZjN?hWOuibpJbGT`dSPLg6FaezmPHN6ex=r^PaN{y^b#zylYQP1hZ51LBj0VSG>V zX(un9C>txzPf=ug{rEDXY|CZxw;^Zc$xBS$bPv2+LUWJ4 z+u=e@$!B5F>ni>3dNsJKsS!8pSg#dAG=j z7Ie35J2nQbj7>SmJLu^6eECJCvBXw=3G4v;Hs)`v2l4vhbRb!WHY5mK3AJKCYA*YJ zQ42|Mo<*~ZTf5<6j845u0x(W+G}_s7XAN{Mh;+2|<(brvbhQ=8V>2+BUAXBBaOt2d zXe>XVJOD%Zn;09Lr|@bxk-_A~SmBp?zh?orM78y2Ds|Js?J&&|I=;=w!eMz=ufOw+5WFFwL{{~v9;+osjOa-gh+9|SNVEo9~ zXZfY`DA?EM>6p)2>cHzIMv9Loib0h4$+r{HhrRfbnXkC^cC89?lGZx!e@kLk=@stz zgh?OKb8U?>`fmjuh~t~ZVSB^=2Z)CxUm-8IcDJ0huanBs;8W=H3I@r*f)zjt6qW3wa z$))Rh7OwEjX&Bz+A`+6R7OZM(Lxu z7SC_EFjugD~w`-y2))S=3a9u?2R z)elM+SShZ*Dqokjzp7OIMi)pgFy-v43Hw^F$SErs;kGNeDMj{HE9P&`o8syLZpTV0 zxRX1->oVNy&ckaX>UZ?|K!OyyHzXIrYlXYiz=Vx_d>%B97WCXSj^4dmAyuW=*L)sB zt>aSKhDmQ6wFAsse9KP(j-P`a6)TaXTeQqc=XhM^&C^Ex3F^}VM>>Po4ddpcS%v6r z?LzwDnb3=LY;*OSo2TYpB^J}>hPiXSGm88bUt8#RbsZv=dxs?5FdE2y{@I_e*NcxK zA?nWDAGKWzWG47Y!oa7`k~AY0lJlfu0qpC!PBDh_S55C*@N{N?=COnh&uCw%46n`honHvGb9*%r=d5;wtDaQv%6AoCs$&{3yO-W?~K+i;#-{~&nd zp@#{7SsKq|=2v2C8u$i1i zn$>cSl9P2%J8rUsWnohY*N~ma0m(a=6Ayt_?UbH^si&G8=y1Vnsjd#lMu37aBIS6} zAo4Rk;m@hKtXFuOf9u}}#Nj>2g0_}Z-p`QTlNk-V!^lewKgh00`FGIgozkDO0G?^6 zBztJ(+?3-9#|eUh8kS8h)?UYqIH-)?r{&2tU&0kLwQ_-a@$PO?W^H!wdssc1(bKMe zx_XCwPra8Z9-X%Fq?o8vB(1CjK{iFIpzb9vH|8lvebeHoli9pbIrch*U9fW*df7_Z z@I!<9+uqo)>H-hu_1u*v%A@@!WN99(3rlEd92zXI7pvb_*7y!`($@rtK2zj0e1t+` z7ydy8WL%}equUdxzd4mgo-Pm5i-^gWH?hMj3L|iGDFs#ZAE9cN%@d>db)zsj>`-#QL5O}>;GYV8 zzoqRpz$P6(H71mjM;{djT7BJ9C9&E;iPv3T-_#wPBcGqAuG3Q`{f>kj(~Y7RWSquY z>p&;$sshDo#zP1;HoWDJh=KZhNy$IgK@*#Mk#O-rEB5Q|)pt;3V>sQ@$P0O}_2*Z9ds;)DixQB= zB@eLc`IuQV^(Y@xDxV(R)A2D+w~VRJ41~rxd+$y2c6J`RU@{HU!j6??E*PFLNMSo# zCJ51JCNNz(=vORL1M2kp%BPg{-MLrk7cZ*3#i^b|%7{F1cSLKA9+0h62tmGh+5tP{&7a|uiZn^1wC-wt!i<_>QPhsBa+1qCV zF`8TFP7U*Vy|r`qDqn~8uHD5Z;?O|5T}OvkDM*Jdar0rluviQETvp#(=XL1vN}x44 zwL9gxh$7A=p{21_%%gEC4P2_doJrizXrP1cT_4bpyHYdxh}!3bN8=<(n+AlON<_Bz zg6koL6ktJpMZRw#>oRz&h{y;!Z0FSMfPC_ZWgWJ*Vw;tSnv5+2^r`|pi~T9~3ppno zuLrXl20S_DOzpATpIZIVsMD@_sCB2BICz4Bl91IX0fc z73ogQM2^xj#Ar;s+GX@2oM+T~T842eScpT~76ttHBwVC@{7HGputJsZ*x0S0WnUgj z`XO6lTjAT~ClD-G8|_9x_nyGx(2I-@Po~xF`r$Mf>*&xpfR}8V1fSC{h5M~W0)N(? zz+)kwWAS#!-T$N_n7$_B#+<4I!%jMd&CX9z( z7uG%J`!@Y99nZ20Bmcg;bWE<)8Om25n+yCoo*CfDe-fuhlE=1HjifyyJ3`A+N)*7KjaHEm;N$P4BBbPHP$c6 zaMkEI$LoyQOrlN5Rb<$89>c@>fT7>2;ZEC9xWn@2IP%x+J$G#kI z3_E-s`IyUh^K0tugQw;2J#z;JPXGAK6*Hr;&Ve;9^v`!0Qt(*vOBru>{BePhx&|02f zjWv&k=I1NzwQa?%P&W3;xO}W|udr}+sFyQCbJX76HXlU6l-?a0$g{F|eZsoY14@8y zt{vUC?y52?-()0AE@6}TvL*t2h%B{QuJ#D6Fm3RHn_2s;4SDY zY5!`lT&^h_-}hcrjjMMGb&5uor%BKjA>5%GmdCxaGkRK1TqdAuBwU)A2P(ilZsT8^ z-=ehoBw#zgbsF7e!k}OgiCx~tU>oKW8Czl`;#{l)wT^@u5N-{=H;c^G+S1tiVzBgN zcbw_b+bwDx=V*=au0YjRA^N5n{oPEM{nEvQIlaTMO{tz>n;ZgUrB z)U=l=!o5Po2gaGSpgT*^C}Zsloottbh_zaLc5c|=KY-Hl5$%u_L*N~jl^_oKnzLZWB70-1y z^EBL$Ehp!)$u!Gq8=6MFD=XeDAXmU>*rW&rYZ)v*syW&41?h^uC zCr?OJE5|uFx<)F?t9|tP$91uwYG1RgDVEUIjbBH*@l6C|8+TUWF&tg!!F=I?(1n~* z{M>8%>E9rY_C(O71hZ{J{C8}7e1Xb3+Nh-v)}BJT}e59i-8XAT!BXRF~H&qWj7 z3pp#IYWJoY*`M8!8Ucc!Ut&M}`6$}veNSyGbXss|?tJ62qQ9(4vAWEosEqaNOc)`; zvxnMYHsblZSm3HlP^I`|gTSeJ?_6Uy7w%vV>kJ(?b=9>16YjVnGLB5~3rC^o?Zrtk z1E`lytG-C(m=o(di{@CB5Sory*?XlXJ%Fisw(oKi1=9GA^G5 zEp?Qciy0>m^cwnl|kpxX`>c6%u?$9K**<*pDzTQ zG}zJE(d|F@n6)i9kUrx>#Y9tx{L#Dj@{#FI--irDrCat~?4feHh;_x~-2 z5#`s4RqVf1W&3kq6n%$f0)QGghwR{mY+lz7zdBY0`zKD!%pdxPpXRQ3sSL>0TPjGq zQgCi);l32?!L&aT-e*sn;-_lCoQH>MPM9Ppg(}xq)r|42rN_VR{>Z4bbjRB3lU*8$ zSQ>j>F*me07*c4K^y>T(okjDQlc?8IQN0z3(Jy8F)?!=_iPCM{yPSFS!md{}867~= z{Wwm-?^xZoxqT`fA^Jg#h%MMI0Av#D_f{h;j1b=f2z?LqjAu{pA$T0P-x%5BXK=lJ zJeqfBtdP9#e#gaU#uU|J!>LB8L!$QctR#}f^vszyH|j_yCZp$L-I>hF$vCZ`4dI2i z7}r<%z<`|SN7BaRdy2=XPZ_=K$ju5X+OUKw&wO zV)h+V^(6B&SCt-*9~X3op$`Ww1+U9)NQfny^V)|A%Vy!~QKu&LvF*v(j>o`jxwuAi z_kQ|f?8Al>#O{0%u~_xEqempmrCuAJ&_TF4MOiptV{Shk%zj;yFqp&j8V<_hPvt{(EBh_M;@fzQ-a&Hi^xqL2Pg)7-I`YF zt3Pf%_`-50O<=<2RihGLII2fD%M-0VmKL(d(QY3D zAqh7rp661Cz7|_1qKG98eexF~0!_&RZZt&CNe>7-bCajsKaAP(9>(6(}s zJk?y^kko!8Y=Ml-UGu^t;aX}o*+a^Tsl1OG87~Wpz5NciBW=|YLDCfan_DI11Q#0vI zv!Tr69lc22yZ-)7Eb}Z~E~SRGWz>fIYZ|79gzX#8V7FTg4R0pxulH+agx$d5Q33Tq zKR(P{EQ#b3f7I?hfDz80RT6b1t51ljdqmQ5hqSfGi0XiR`>UmPeCkR%Zgsw6Yk>=2 zO`a89Qg1Os*q+rcnnUV)+9oO0T6i*g^&%*HJPsv>J}gYInw_pA4R`7|IWq9& z_O&E=s?dv6$yJj%w5MVBcZNA5L?i#SI&G_$7VB0zPpe^J(L1xs82b|j@BNKU7N|J7 zyo~@#W>bW0cI{M9A1z*GKuL2L$;M;fYrcz-Ej~hpjG-gTGxhOS_zPGiEm1Bo1Zlk@v1`PSoT_FMwrW!F3~Gdl)DMjrz9O7_)|h5MhMQD3HrLGmI-i`SVMPX zlxJ$#+Wyn%wdZ(CE)*pDcxMW(={}7#CFTXNlD%1nuFI&)ywlx!I>y0;FB_OCYmUQB zSft%m30+o?zqYeH8MbwY3kPgbhnpT`WR1Z=GeR+>c9jk$8eVIG=QtYt~ zlr7Woi^XK1@M7+3gDK9lB#q84Q3H{;PlYM`NHEvgQ@-}FwA|Vh#}7E@aXGD~WKHfE zCaoxXvSpk*>|7Q_xxAm)4;7eoD8&$_cN!9*!`Ts>&DZP6->lJA*emoElp~iTPW*rD zy>(C=Yq;(U!QEXGG`PD22p-&BgS-2X;BEl|L4pJy90n)2yARF~2<|ZGI+L~ct~zT~ z?R)O|QpfW%pcv;J>B2;_4_{0?;*n?423&NGMCy4bxdA}`~ieose&#tKm7&Q zq|}&V_M>Aai_V+W;5%Y`<<(4jrZ|=f)S%Si7N~--L_nnvE|b%iyqN$ z7&*?G{qZ!$UuJ8wb(#L~U92GK=Ur*vB}#oB+`0{rW_#nZlyL7UnFoEbhUl?6`*DNh zBgBM*{VVJR1p+$L4-aPTE#Lc7Z{Hs4uhR0=n)|x{w3-wiSgfgTJOiUKHO?{3!y3-C z%0%toQ?yRx_tbZhcbNy}5%b)`%rwvQ+N%r>Uua*Z1Rg4nGTNF-zOjw9DF9P6@Rsq* zP79JW;eRqs*Hfh|*;8}O%SSskx)S`BQD~c|^JmLr9cWF|4CNhE&|&$B8-VNP=2z|5 z*CiP_)%$|?GJgI%SJEWD%e9Iz$CuLK$|&KFGENqy`A$6;$x)2FG*--edqT;C{7z}E zQNx|J=}5lIo?eaZO@*kNFhi0lTon!?RLgMgdNYc9L!VF6-Zwiu)4VO8!TPG1AZ*eX z=8r6TH@)0_aax0%v@=}I$6V$8Og?VPhJ39|n4Hcup@+(&=lD@6ehc$zKn0^8wIVR;eyeI_vlG{@FSBmIj}2T1ZXsH$GXFO?TTY}Qn?PS z-!N`%)u)SOq-S1}8f(TTL8u!hn)LJSeJII4Cw}Zpu!Cp`WKItt@MKt?y;YSOdYySy zeo}SAi3z>k*Jz$~;aA{S;aO)$T(k?HR>sy#PnjpAP5MfW`eZlFmYDQYg58V+>;S^B z;E!7NMq|U&;^I(Z!Pke65Vk}eIhbGMz7T-PVlhITQ4LlBRx+jRV+3yS=+<%TnixE)$t?CEbZa```L~J$MFJlPTp$S zX!x$VIeB$ZzgVHJ+$!}Q>F%s$dQ4eitTg&=2sU6S3Z{TNHt%?GH1YnYGZAQi!}p{0 zH_V}B=R)*v=iveCzmYPFTe90Y_k`DK4;Oz^1!Q)*30C}UL`ml9TGLL_p7R($Nr5Eb zab(_9)ipRCMOw>}e|Q&Lr(z`ZZl^vyU2o*CDt=1Zxhw_)5W=8(;?QTnn8kh)aVr;(Yfs{(vNaEoZxS2(|;0SmvoLDtGAh6{$5*oVk(!B#xr(bSN= zK!0Lw#E*)HIO=LBhpdX-yWLFBaWFZdQf1^t0HjBf*l0;78UTUSM-w!ae%n*$SNJW? zsa~K?YpKoGG|9MRVh~l?tn@_ zT$Nb#g70Y0w@&;rxcKn0q?5`Qb7Haii#0wfEk9k}6Wp>508~7g<)HzapvR5BU+Zsw z-lhxl6n%Nn!4Ddh-ohkEtbpkpvw@LO=Y73+hkB+)W_Zr7U#z}K`REbuoKoY8Kldv z#3)FiE)|RCbYFh4s&PU|CvxLuhqV7aXq`QZtztdK*z>@6sP9DjQQ+ z;+%#`Ql{3jw>DK|Gsf0KQIhQ|6w}F;cBLf>csABwJ!eCoPwn| z9uAd074B>jNgF1PdKnbD@$Q)8Hxhm3S>8~#5>sGEgGMX^%a|zr>V*># zkiJnASaLvo+aT{=w#v2cFgqylvDPP2l0)GqC8eI(wzy~?xHSGWWNe4Zw%=3A{9J|a zQl7soQ6>y8Mf+nSZ~Vgpc~Ci0%EHl$@GPH-q-hgS z8Ux1jPimzHZ9De9aa5Z+r=JtA-=cqoe=YBn zHjSAYm}Zg@RhDa{1nLs-^^x}8pl#PN(Dqq_7aHFG+k$P%U1cYd@dE-| zK^hFp0h!UfKYyxJ?k(yyVH82&{)rhopgt0O2!~aW9o7(~_f9JsBP5r*x zEaw|UZ7Upq?Mj|{gdW;+$F~xU2i;at8kveqv@?vEVeujB}!#$3Abaexg;-8e}lnH$_ zf4hxQe5iLTd5x3V4tFtSAsu^&Mhyf)H^!7MSbo16((GKI2N``WY>F`&*Bo#|Ge;Ik zRW>*GoI=A?V2|ITE!xxlF$ZYzGDQctoN{3Cy`&n5np z_IzA}Rl%bl?PBC+r&W^JUNB&NbC8uvgqMAesH>d{d%O1~ml zM33JNxuFWdIE9-~DmTq2VSK9Jy$7#pooA5)&(WJpPCN%(aFpC5{s3D1r}%0m;+~!< z;r)0G`s8e0ZveG{{)PjWp?!8&MVlLqQ+6+s-4S z@x_3z@=>(4xv0LlMXIs>Au%96%pi~Wf;eT%zQd#xnsLBZ9a%0>Kt7CpRQ9n)PVFoY zJz2ymJMTzcq^3VV>TYLpXYPbpupT2Y0^`lAF!)d=n&$wY+GEGHC&k)CD&505`Nf*X zbq?Lgy<0HpxYAex6m$D4hyQCg?!27Ek{SrRNUu1_@$`m+))8%IJhA)dD_Zqmm%nu0 z>1ujN?H?u4e$xdI`fPK?uvQp%OxdA=hSvj3rkDAsKtiVkuAJJI!ogE)@Cd1ut;Al-+T ztU!-iDye7_=AQ}Ft1jgA8nd)_@vK+aW zFBfW_(2v}yO=L~dSEZ~?YC^*k94693GQk(G-Ui`SJCf@}+^zC$3XlPr5_FaQbri=# zo6!@|z=}Ovwr>j6a2cTICWAogrqT`5iRi)@i2j}{t2ZO8p+b2%_Z!ue3PxVyGRw-d~bZ#ifAPSwjg{j`w#?`NI5A#R1ZI7u8-3+#CdVzJhJMDM>*b%H zw$59{ysBMTS-(jlL*Z*^1GT(&maB`Jy}=d$M?F!Hu-qkuBAD-j@cV= zmIotGPxMWC^ADk05zNPen3tu9=m$qr9X7>JhEOj#A@USq7}O&J<9^Aa*io0f&x|8i zGRMiqbP@uixv@YzE|J|+hKKLU94i>I`TmmzB77EYcKI3__tJ9(Q)D+7h5S=6#?;Sw zkNYGG6E)n!kX8o3Ze+l4egR-9oaTYu(IJpRQvha`Z%~I#g#R1i4jucj2oFs$SiZB# ziR86x0KflKgye3q-{VU=81Osx4}7+?*XN6dthqVtp#$#E%OB?i&mQZ+@73fk_h-le zvAY7^3YzX3HkktL)(s*axa`Ra>bc#?x*Zi=Qw6+1YW+OlM#isPu1%R(F-s&F&3`Ns z`OT^f_G4gVLSc}xgTSZsqFs4s;vu0+6}^{VW?*`ur#B#A>hB>j7M78^)IWMO4FupPetoj|<)jG}o=gZx;v0nT!W7@6rg;{isdUe5$ za*MaT?qQ1fxHRd@XYu^38f|FGcBk)vo7DE$>rw+hLjdQa^j14X77UEo@Dfe}PWnN@E1IysyzcD9BX# z?CI{i+XAeyPO(YWA*vVRymlT7?HoReJo+-LPH(;f z@cZSPqNyInV4%zzG;*1f<5fKe30{bZN_-(TJ_M2*$drGWyu?Z6!SiVqhtutul8V2r z(M*$_-K}k^OH-+LWYtVSYW?)Vo$xV&gw&+7ZnhOb1=T$3r)EF*DS&Hsq+;3eZBMis zD^5B7N&32BQfi3MOnt9i_>5q4)%3~pJk0Kl>epa?iP@SdupQ+Mqb%Ml`AV;c$E6&T zqfBy8kBOF1+JK==k`=(wlhTx8)(c7$G+xWxADLW7YD3Eb&;FCFrtn%4+b$a=_c@~I z0PLEZBzT-Lg8gJm(fldL8X{3r*mzzOb$lb-M4^JC9H#!wH_MZ%*pcq^amAd+b8|87 zbE+6XEfA)`CVoOmp=OPaO!NMXYEI=$H?@QMgbGX|I3kZMxNudUIc`#6?X^{#qx*6= zw=%%KzV=}?%gP>m20dqAxbLly@bGmd4yK)mCs-iA@E`+dW9?{#RPj2zrSHqndtW&C zA!ASFYCl`)rQ%o>PuV$drf@t86L9eW{2}s|8%*Iqx36pj-9M)p{7Rweco1Lco&8<` zydxlsA*2oO(*hT%@flV8s2iH)Y)=!}MQC)-+#I*V&Ox8#3LjL8-g12~5b$v`(u-oO zGOn_dJj{NX=cz;IgFHt1s_d){T)3*lEYZn zc~oT0jZC?jA3&jX9s^mBXJzm*l{>5@e%IXUKsxy?wY>i=70STot3_u+;l{^6ir!fMj29PFx6KW{F7MJ(DvtfSjQ2LGw2hfd-K8MK{%Vw(Dve}d%0 zymhp5LiLHJX4o__%Bw%UJ_PNV<3gx`d7b0Yjw8GBp!(#Uq~#;u2ZP(;=q#|F2Mj1x z>OK(QI^ZZypuW^0h&2>ba=sL6!K+xb!Sazbx$wPnpHy18I5G50dXqz@cf^9YR zLJ7^(Zo4>(783+Er!j{WZd$ z@u`ffOGmm_)PJ6C{N3&`SOjOMMs|izg;l!A(V0M{eh#<-YV@gPQ<|8gXC@QFc6=8q zg=kH#x46><5~h;bQ44eO5?uIk!I;TVSaNgeqOlHrtO(r&HS?O1l^LiNJkg&soW+<6 z*xU`e9r~&(v|R3ZvYOXe)FObI{rCCL7W0tK({p!yeey`Ax7uRDhS+@YSn06CaXV<- zjs70!pYtE3CpV6c=h*utg8q#3xz(+dTq8Y{@pCG#OEQMO2EFTUT~zI7pKoMtKL)Pm!yI4YB|qrjGshx=@ImU;zgsc#t*)zFBl7S%&(FeL*~H`)ef6>< zehvJZcPqD(&-RyU3F@Qr5QVJ8EIa55$adu#D{=^ zDmF&}*eTULgd!W6R%LwzE(shbvpO`UW!~$H7eGOrIrxqx}V! z<_SwZ^3E+4`-R5im^v3x(T<#UsI1=MjoqNe{08yK6ACs0neB+w|%0YJz|6#0$_{d@lbCFL~(# zc;SeXZ?W_B(t~}1f9^r@9|s^?w8kge#tL)X{bL6-|2&$)nNxDAb)w#X>>%l1hhle! zg?$>k{m<>o|LZ^+10$pUmuJh%P`vN|oUEPS|6e{?-UCph7iF4Qz)|ng!~DOlmx_F> zMit3E81yp;R(pie1#BCYS$*{H8n$xM#_$~uzz^hFO;h@Xv8*y~|5+#dzn8MtvHuem zL3jarjeD85pQ|k`JS44o8I2;<~3C zvW9lSCN;i%q~#-URlpko5JQ!SC9&TQ=t}2n=UCli!8=J#RXH`o0oJcSJQpfDJAXBe zH^{rXW7bQrepFcFj(^~y!l62v>=1(F|-}g8k8WmIZl*Y&Q))qw6Y&#i`J_mw31Es@rW*O3ctZwc!a#hd->5| zcv=67*>%+(ut4~r(z%DAzIQ~GB zw{#t`>uk<4eDV_>gpG;)p;==%vXnVj%IR_Gc{Q^BQISu>US-K zD%j5`x_%`3wJ`A@7Te|W!M&ouI2Bph7S4yUp+gqZY4v`tkwQgxRbiI@MAhEX-nCkO zc{`EA(4^rW;X3c^kVLkwT(C;Md2ClZrwf@CVhd$ifv?8?2VOJ6HPrs6p1nj17;T`-Q_DsZOCEY z8OrAQZL$(3z`O&98q91;m9O+q;XIQJ*-nXlMVeY7PU$}}B$UP@`}MsV#dcFTgztGu zP&T#LcAT&f3x=cxJKGDu&?74qsFVX(Bd=^U1+Bk}h6*zwQmg3AhR`~2L&KzCQYcpp z2T8DJa9*GahqO(7a{0%RD^ihNXC{mhLVaO1y~2+6pWxD%;?9ddnnA;;<+C4=6y`we zj|xR#qLtBNKgxK5RMkN30M4YdxqdKpZut>4$^2l+31;nq>W5~Ja5ng7h>LMT@wWdT z*!^LnUivC@-)zBq!eL73TVL~1K=9G3Y_VAu{@wvhUsZ+E0^eTN%XPyq8S_G`MiTFG zjU}pmew*-|kLY1ye545pO2rzZwD07N=wVMw_-XDdtnbk$;S%+!Le0fO!dyZ+(?zet{p_o0}qKGc{vn zRix!;1k)aSnxr6PJ`Y zj=$*L$!bpUspn!7YuLAb!GVu zp&#wY)pyY}1v+AhH?=&;by0W3#NA`x3)`)Vexb=k42#dhW^SNiwXK>LB;hjp8qq)V z{-Zmk#Tv)0IH7I%*2Re_fVveTv$L9y+4kG!?ARVa{k>M{4UC}~K`wr8yCx(WI;ePE zZPZWAu)u$Y4HY?67S#Z*`jr_d;@9aLS`#oz?MD1o(^>*j7X1=$TDOw(H7_e-i1~>y zKWCoJ8cmnI@jio$kVk~;qj>Of`NY zzXRJtXlh$o<-)Xqz56rY34z+|cV{aFLHWB6wT6WHNu#lSyYN}ki5_~%ys{Ca0m0^e zQN1E^-Tp|wo_K#;Gg~TuGm2sVg&I(@Yp(Q2&6=3M!*Cl>3?1QzI&(CcVUN7pnDl zzD#@N3Vt|WjLz`Eld&oRzjh+-Exa_yig`#?ykV>vc%zK3NKiSr#Z#XXiBf>lQbW7c z0edLGe-gQ{sk5j4l8s=rvD)VXTM^m$X^T0(P4k)dAUy&5kxm6%Cm{ibzkUBBBJ74S z8_5ae7GU{iQm}>zym3;`6!iQ;@;RO)f5Nf)zfVVL?T#_KR0~r4&!QHB34Fy!nt)Q;CMOnzPrELD~Z@Vg0U`8`e5C2Tv55ixBNyeK&$lF zA|*F8bp5MU^x~@n<0;SN&L-b8u%H#$kWevq0VeuetT9aQhb3N;ejE&CdvA~IenwGU z?JtCGTg^V9;Vw>F5V&2;Mfrp$XFRA`<)3dWTyq3oR`Ii~m49?qRlJapOSms`qAsy* zaFegg-y7yb(wSU9U}8cjuTn7@$fiybT|LZ>S2w12WPLBirc;j$hnRCBhMC6_G1aez zZlrItp;-0Pc^|PzE^!}jD?mpPj47a$8l~s&qDo5Sa~bEg(nNd9l63 zu&-2w|5%y0=#7ls)~P|(p!!?tqJjzu+KY@&+egDE{LWGqZQdKN6*lx%b6i+Llf@^9 zEv$lxG^7h7G?p>Z9c1v4(a4!yJ6?Ut2WmDhUblA=I@~VZPL&Yy1eYlwTF7gvIhpT^ zb8GX_kU{}w9f2xLT9G@yNc`h4(@CMME0&8j`GO?Q`BZ|+QRFV-2G!Ov(AVzQI|}Pq z5uVzuOCh=zAjKJxy&-i%sfpv=#cJoclD0G3rNFf6yt?AivM((3G~q^8b3psmS}KYm z9uYF0bYcqvQ9=o{^8I|Ha<1u+Mx=?vib3fYYtrWU=3jIk$-+HkWyeoe+m8eD?;qJjXWj;7oT*QB*IHZ#TeK|?2q1-1~^F%Y7M zKWwv;{Vb96%!oI%-c`?Pa!vE510`#fwjLmdm{6*DTtW9~f;{eF8l?dmydXw!bUpb( z>zD2fO4fVXhIs#$m3%0X+0v8AcW8)Bl>U4{(^r|>gm^T|Z_T@K*!~cNY*?n!dSMo3 z44)#st%pdY)*+5k@ITnoe+a$*cfYzQpQJI&;y2jE|CeAM!?(DQivJ<_?$OJf97a)Uzj z8ZI6eRlE|V-;`@QNYtIGtEP-z5IfJZH>IQAc~a2nodVgE&=AUOU6Ak23{GD;>{DTE z_A&GPtXreSZn00%H^1wlLrGCjv+)tND^mE+3+b)c*QZV1F*V+j=OW2m&j+(aF~JIl z&6N!DM*NLbX~snjMv-I7SKUvD**-}X?>WWZ-5Fk!s2faO4O-yF5n-gp-`{uolC$*= zNj3SN{>K3Foh8x+9YIhN#c;0?reL%+oX_Y}St!gn=;1Dqmx67N4GsWB(b~1~J+M%e zl_Y7py^l6Xw_x5?K>tj!r_Ozrx3DyRH-|oZJff^UxQGDyh2fl4p+#A&hC5sl+0j}ogrBA4_Bj+@+c>X+JOJx{C{QWyDA zH+L;bO7oib&U53bjPeP+FvLA8oWdOfQRY@sw1{sk!=e?ks8#9OIE-XYje7e6O@&kU z^%9GPU5Cd-32)w|yeY(vErQds1Vu90#4^u(J0ns@dsq_u;Ro|oJv5h6=UY_vG0cZY z&leSr2IGB2vbtuh_KO>6BZ;z36t~rg1sjkA3`P2`KA%*eVVuQl*bv*yB%s$aw^*fe z&p*z7(d>!++*dI4rsa$vNM;76v?TUBebW}D)uI4N6<{lTqk6ytKgm5;?Wm(!6N>S9-n!33?}qRx5_%Bv$R%p;y1;EM zvE%fsp-q(yeI#yjnNxT%lvujVYKTX3uZ7)>c8;cO)7Q$)O$*-4&eghj?!N?-8$ULG z{*DQvjmP|RKZ2Lr@0=;>;vqR&x}?c)DTSdPT;I(f7JZ|FWPU&sN2;%l`r9HX2X|Rv zg|ve7P}*l%huK$xvBG4A3Nu*&_}_POMu7>VFvGdLjA~&hxsEa`5mIIWU5d6>E(;d- z*>1!ye@+*}L!0E!%D5G9KS|+r-rZ8}?k+|U{#Q&4{8SL^Nh$@W-|X-3G1=_Ze_#yi zBwhoCqjos|M%ounI74|~-ali!bimpeGmb`D%ixqcSwfxcKL~xwf5Dh5bN>}A{&&yl z&#*wWF9BN-r=~#89?tAxumskb%0a91kcge6m=J+rpP>^KSN^j2`&q_m3$n*5-f8b2 z?773`b%$U6S49hb9G#q z8gfFjK5*B|wdsRfk0MHD0rRH&Z=d{s*`CLPxL`M)_x9Aoc^u5YPBgb9vvvqusB8Xb z3_bJz&ToXNe{rFQo~-_Y)7jd5By;M%4LD{M$;D(jb(0X9?{F_%Jp`A04dMgK=CF$} z^s3sjRHkB+a(G}%qT5E^bQ4ohP`M6}m=ZUhUpF7Q^Y$|;YMAikv=gDYs{>RQKo^29 zikmTjV=Bp)P{;5KKdtkt?eDE%uPZ8u zHs0^*CyoQjqxPl}AtcT9SH56=0Zl&DVNI`4mErylS{5y@U^K@f#1HXn!)4^u`4y9? z$jm6v-M}S41=ug>Gh=KxMmeoi0Gnhmt4oumsAN6KeOmn``*UsO(&vr^nz__SS3i@* zOsZ`gY`cPEt>gVF+Y2Bu$gQ}a+OuP!x$mBYh% zcaWMvK}N^q%~|wGkAT-7(W4B^lSj?Yo1e)w?(cUL$a6E~nR;{HEZS=1J9u zlFa-|%G%2ehkte5^9A4a1X=D88RTt+ys#Rb<}w|u#+1Ff;JwbO;MP`B;A}U@%S@m^ z!h(u;bvi0htoQmn@WmGJNOsnJt0boA=<0cq)@$<%;j2^iuV}oK4rjO*xU`!A#`FPa zm7$CMh&e?Q#in-2y2eP_?MvTKG?VT?T3m%8xW(^FUPXmiR*!OXk8IU2?*y5AW<2D~ z>u6{xcBg~D8RZFft462YbKeiM;hEX3RZOS;q>dmJGTj4aEJ2$f0G)MKP zGCgQ!gwu$qf11bpGU=(7&b>mtUI6XudpMfRR;_gQIDhMpXM|ZH(u|E}7LqR0OD!@R zq{2~=0m6M@g%d2h$ z113B1lleup$~(EfJSjBEJAuvWR#&j)N}yO_)!FDsfu(A<)gn#I?Sx0A50dG# z^|rU`;y>R21+iUsS}yMV-glCU=1f#wgZNTs)iBQSoA4^af=kKd^6ks@6?cRSBA09R zNqOaPGbmZGvHd8q<4yT`hhn>&ru=eXV)u1&mxN^+jsp5EtIFjDEz;`n_xhF2uE=ACjt5At6PP;5K&Jp zqLvh}q2E>SQb0~XaC5sA`+PzZk@aZ1Erm|kfyB=};86(6bR%Pmcd+K-3`EC9k!BA* z24hGohi3Re4+*k6r?-U&SlQurYW4wIzw1L;`=)faK61Ca-)TJSObme-XOhfBwu7c$ zv*_DeHHLFjKg$K9-IR`kFz9AS(9!7Ogz1+=Z6Qe*8)iS!tJ_P*Jn8Q3D!KZa-H6oW z#IBK>_Y7r_OZo4q~fHF_r%ya#PwbhDHsv;Y3+0Gyyfii?$|51Omp@?(KFXLnt{` zVS0s&d@GGfC;BxfMjw`~AJxD3TgYp*mlFLFF%Eg1xpS6iCX*=}dm%BJ@LWKcDil4G zemPo8OZlp=#AlwTIE3V!17sh-C+>V>;(B~!@9@i+y_&{FQz})Rm2sytz-v)QtMsxOejUS5oYIG5XEV-2zWY zgTjw3C#o|Ab1o8m2Wk3pHMS%Xbg3g*sv4N9+6kLnqNIubFxJe7v5$O#oycBR%?d>) z`7Onm+W>}K$Pp%0u{TOe&rLahf^MH|o#TYzC5EyNEg7R*5z}|-QgBNR5?nrU$eTi} z@?7!TL}Unp^|OlF1<&)G=J{lrZK?fTK<>?|qP@U({XVA)X3JlCsmt{6DHE)Y7Die{ z=XbGuW_U4xI&V@AFdG@3B6jFCgDNUDw1Ol=^882kyF2om*sA+wnbToRJtivTUvx|e zv`epljCj%v`N1Y5EQ!-6JD2+4)U_VaT}2NmiHEB2q0kT!&L=i@f~}IS19Xx$6RCar z;61E2@z1YfgUWp5iyb9i&+?gwh(2qnH-j3}sEyeii z_OU=9z6$O}Wc;h3ZTH%%d2{zLy?1CH~{fbD8^uu zJ3iabttaO92k;YW80NzNDZ|2E$l^;+i6UmtekL$U;h4j6Rbb6MrC0aEIgHCYld(|u zA6Pm6sZhyXVTkJ^<_N4=&hSSC_>VU}yb#-JS@{lzBKvrTC)GHtnZJ@k>`-bLTOG}!$m6Nu&Tqf%A4~x4K(nU( z)|j`mrx|kGpiv4W>)lU1R7W%XRF*@kU2|1uOqZwpXymNc%R}SlKca_8DG`2487O)zvo4MSKg7ImW5z6c>NwJ*cSmNzD}mT4CZYpQexH z`~qvne2T{^Q1i@Nklz2f`RF%`K|ZavImnPuB z1Lv}2iNC*YG^k_nkc0xe7Y#*79NW+5 z$F>^LA&CTKN8)N_hW<5_A#L=F^WWRtvT}$JS5@57D_`XQ3ofQH4y{R{`t+%l zZ|q}xJGD_h2VFbX&;3&njH%~qwP%Y30igSR8zA>7DBe7HA?sAkiYO`P9id#D$rye5 zgfl5F6Y4&Eh&A#=R&H;~*t*DP=QUxz36?@S4yddb&LCQ@uMBq|ef|X&CYy3NJE<;c zjU{`XVqg=mlpFVUNJ#9CCRa^qXU{ed*8ekvft^%1_?)T5UBD9Kx2&}G;9^4wBTbyqgT#<-H!jrd`TPs-l+juAP zX^tPe5n>nT^|r2)3{lf87T2i=+?O~WFeEO2^H*20RG<1hiVSBlB{PjL1-n5;Bxru~ zLT!86bQ65NI7%Ditdw};cXKeW8g1=vU$y=?-;eX+JXz&LpD2!FS3NZv=5Q%?XHOd& z+kVBVz9 zdr4x=o%ULXmYM$PC*DvH`OW)}-k9M$Dalg9Z*pOWu?5(sSZYebHF0>jJjj@!&JxJ~ z=<3Kjj-U`?Pqjiq6QMxSTH>(<6Nc& z7-rD+G4Cz=Qe`=5kGTlJV1VvmREb~s;i88_fNNwGySe5^NA}qfQ3!&|t{R&yQziAr z4Om0AFDp-5jBKY}67?tqe~uBRjH-9(nq_xo%#h-9A2o<~CjCH=VbLN8w~sHXXC2qy)%6WNHK3#LkuZ02m}`jV*@UUA5W^5VzA*!o*-d#*iGh9aD*qy z1edzVccIb97|X{_%Wt{Hv4kRuvYs95pDJfwmWaUc^+VeCY_%Zi#NR<6seX-(x4DKCtDy*M;|=> z(Ft-%q_w@CUIv23_M+aY08M3?MkTCKixEyTUB{Qcmt_~eK;5Z2Nl;n9;DFmzKpe1 zBF`uNpQQV-#hG{Dq<&7qz9N9-@5+*)R~rr_#9dBz6lrcu`|oh!<5L50`kJUIW(G38 z*|EKT6!^w6VNW9zu_US=7@u8Q<;T=#I9WqoUSYSGDL9g}(e`}oCYYEM3U~jh@bC^J z?``SS?Np@5IM6N4p4+cQ(Mwm7L!gP1OtO97A;Ww%Fofttr2mCl;`KEC@1Nkg7(o4s zPFCp3RSGDyJ=m}E+|N@E)Hd&8F~^Q?BI~oBLfQ|>Ii=bqaXp*%*k4?xGmxE0h$4ZCMv8`UDjNkGSFWb|jn&Mn&%&0wI>R+u) zuvO{qYHyBT>#-uqXg)3LWAGKgc!hRDJG&uMu6$uD^)l5~*O&u!MrzEgCDZsee%}i> zc6A~y_1Jn-quO{r7-Rc=tPp(AJbmC%Zood{Mn4RfA+AV^ttO^y)MDZZl(fi zZ;rO)Pw`KR4+1XuArutB>|9+1#cIx07vz^`hO=j!do$}CCr%dJ{!Vqm@@^)rENY9u zL%oa;YA8h^i+zUPg|Q*{eXViXCAs3Od>%FDO~Iv>Ba@A9+rh99AEsHpXMqhY5ih&F z2$E+zi?Eg(OL;OTej8^JmHhW6)Pc+lvx^L&Mk1&0U>vEigHK5x(1jyBVJ%X|(vJ`v zxSq-*a_52V`J#`Yh6b*CX1T@txH_Ph_IzuVq;?guwpiED18iW zcc1i(w`|v!pn+;)QC+uOvvSsn#u$(Z;zNWihxUd?5c0wkZ@vd{7v|&1*8pta@%v2| zuER$Tu6IB_`&^_=3KeBx|K9qTsqhzEq$?759t^NVqHqVDh{7QxL9W{F))x!UZ>nGn zm-B)}E6%c2s0w}ZD9@O{c~wX^FHZlGOCI8Ry`v5#;<}n=PDNt>_4__vP=`1*xmCx8HlxdmwWQ-sxjUEiYul zfLExExq3!jG4su(ZVmM;&S>EnhaQTEX+y?VvEVYxe{^8~-|EPEPIi!5sKrrB7=1>% zdQK?X3^k--g$8a>w?Kqy#4lch08x_o8*@xb&isp{7gLDl1oPScEkn7W zP)#hm-E9}D30LnNmBUO`ztB_$Z%eggm<#VJ>1{Q^fTJ52W#F|7_U1{TrvSWAJQ14$ zm3&RJ;}TGe>bu?2o#9|ofkAb}==cxhwPqZQJOXhvIPa>OD01Q-ub_!AyBm z!MRZryu3nE*^xwn0{ZI*IAG_*WPqCfZB%j8+s6Y@Xp5Gg;ubj56R zw*!D@i%~G+T83DX1-CADlRW&YdoO}4gQS5UIYRk3`FZMxxLYovo5P~M!N=~2S(Oi< z$VL+*xg^DTzEyj#<=cCoM}aCoQVREk7Q{sEo;Qsr-($fW%#Z+o@LL+Rl-Rdid7}O+?p#ZErYJWVy13T5FuV?ewy#gOupjFRI@Yp z7;&=~W_Sa!7|m^rq+zwSXpZ?z6A3hIdvzVqPtLk&SoI>?)Kng66mB}wX=@8^a3tw4FyFzz)D9CyAhWD%u^jY}N69P+NYA811BY|{p*#f{kawmZ1Q z>ZpAQuC9jyu2p3E$QcU?I1+qI47)PEt~ix9X;Gm=DAbrz5=$3LU{AKZDy;^`PCJnw zLCWvOa-!2tOQ$u)Kkw%_rXHZ&x~Xv&ILZ|FM!%s=lEi3qf08z~U8B6K6fwq^9L#;& z#HZI4)f+uI4$sP&-xPiKD~h_Lt=$zKYPh6N4(y7spgK1{dNb5pD~w5U8kV~Ecjp&t=mtsn7z9Md4lVvc^P zz;I2**O_RbYG%rnB`Q&WnWrr;9IuD^CSM}Vd|y9<)lPF?CtB8qKtT9-pC7d`At4ZP*qXew|Eqltr}q!SevMp>@OkOemn0g%QlQ#1o)#wzd=)k);+ZA=MetJtZX{Wv%2^ zxJ{OV3rlvKJnL{+q9JsC68~6vaNDf@9w_AZG{TfKto;-FomQgf6jP@uRHnk%6e`8W z&jxU?o0G`$fuEYf`zd^uzB=WZ9Xa%(98wO`;|T$-J=N2{wdm*nlwf;w?Q3@i^n)@M z@BPCYTJgSP@V0TA#UV+sC_W*qM^=O)%^1%? z%BxID|2)DR*0N4rhuRaO3Uq6WV<9A*Yx4bVzvYR^tpUONs!xmQvoH7=2a-SGC^i=X zwysyAYxT8C4om?_`}RBTB4t(cV!I7`0ZWKhx<@tnlx~y3kPcd_djvT+A+o-VgvY1p z%Sh-cqUk()G%?mJ8rr;2xdTr!&ZD7U`Z!D1V%!Km`A{r?V0(6ZerBP6A+0>w3l(1= zR^V_H$RzF-gW03UKeGybf5dG=jMid$%tJB|iIcA+TOIdlPaPc(h1-=qgKi#(sh;+6 zgktlet!XRvUTqq`)XNFqn%b#MWl9@9 zr(^8_0)7)$PJEE-t9e%X2-&~njY5r~tU_3;DbwEf=s^N$vOU!{a*vJ-n6^1e8`^j1 zK^jdLSsfJ^&^C=L!lraK7H3qnRb^!M&BRrV#OY@VP6PPp*1;XJwV|o!0l2&JM|+85 zwA!Akz&q4Q|75*lcM&xCOaGu!>qX5wvI@vTLrlw7uThWSUeKO28dylmC=bA2+mstR7zT30YOFuSotfRNsaS zaZuL(4PHH4HCIJiE#;Kib&0>t*xn%enuArZAJEI!u=w$fyd)>iF$vBan#Jt!no8En zD$$P$1#pu=ncC(VTbl44<+i8-C;Tlif1ZZnPbaXF{~Fx066FO6UK5i6O1j&(059`O zow^4fw`Kr-_#k|p(PYw1){hmCtCi*UF=`BO1a>ST;wY8m7ph|28NIxKta0#%bZE5v+y?me_M&3x@7nX3Moqe`W`ew|8?!&*7 zI{^qS&$~dnzTs}RXQIq7-l;-ACi`Q(ptBddXz%`qHVw;b<+R!*oNt*yxe01#!oY`_$K?SkymB?O!zp zN>AQ5xMZyf&8U21_GygpRr&*uqqDx}&ht26^p^~pbBeS_3o1FGV=x$<_LUBmN<2na zY`%FGLU=`ZX|`V{Jh9ovm3TD||CI9}TDc}#Mdg@W8?+HnE{`vVpU4=J=U~?Ny>fcv zz>bjoS>$0jJ5)ZM2HTbJlRjKe(;jGe2~8heH2oExS`clktopM|rGre$atC`(ZR43? zuQK=hT9TsdrLE>eX#+oy%Qhk)n1ev`FNr$*1mhdfB+EKIOn+YsVfqt*CR;5UP zoS5;#(Nkv}+NW&C1|_yC^16GUg95u_bi8Nh8O-1y&qv|?=b#15lf9(#Hr$ihdfp%0 zZe*I#5Eh-k%#d-7g|nkvzE}K)PFGi`XM)a>c8i(*lPOc(7iDtbPt&wn2VUAz=+$X+ z_$NIp&^w6qFT7!njHRSs2k}09q%yR7K(ScNaQ$PP%aN>{OO<{jXFIcJAjI<7kgV) zr$q3M%uAJr9?%MSd$Zpx6hN@C0TN}N<%Wr(wM@sg^zKinSaN>cY1-Kv5INy-;XDr) z#@*V$(32O9Dnx{{K7?9puWLfZLb<@=n~waO-kLO9=iv)vvDxpF`X2>lXcF5oCz%y^A;@O4cqtuzlS6Pc zYFwp*-m3mXu2??_3kk3%Bl7lqz5a?THug~^G1JVll3^`u*-*I}GG}XE+u0DlKcf!4 z7zs*_Xc7xEf;)6&lU>Z8tQ|tXE9~#Kl z^~~Twk}>cHjGz=F0g+FwuTm27w5&GlU&cd*pX_GWSA9=c_I>T`Wd|JjNhs&)4)6HL z#w*LX$*W+dp1G+$n5FPlj!fXD8=)_blmv>8@*CqH5|n?EyC!R<%bDHmF+Ni zf$PV(+_S1dLK3xMg#m3mKM#>|^AkWDHVj`1!#Ld0s{*xk5)3-c8Vm&&Z^3~ZrS z*=~_&lZqvNUL|aT7)g`dDfX2>`BDcN{4)!Y9|O0HXunW77}dj)xzqI_tTFbLc=rzd z+@dycTIQ@~D1JJVUjwD&M)c>hy;0co$8`QRxVi zY_P=R^9-{q#m9|rGe%D$KLL?D>*I~IHG5I?VDEId>{Ls0j{p}ttl{%~yj9+9k80)L zo0-_j;yZ+zy@E3!L98S{`c#zrg~Zhd@+(c}VDU5YNj-I%ZA8CvShO(Lo%t0)!|sIm zPj_ZMbQp{`J-ejq#HiM%_U61^$D1i?4I~VX)g;v@A)_G0VrU#&6LFk? zPu`;PkQ(V)X85>}&;`RL1d}GXG{!EX`cSp{`pl%8>=7|}7Gh&3@Bp~)awPh)iE*U& zebDinn@Yvrt;SH-zXl?TvtNT)cYcggO~8Qm0a2zbh`&GrG%_WrY;}gMB{nW{69F(1 zCzZVMtyo>w=`Rc;+ElpJKK@SwMPdwQ)XBRSiUK@FaNVz>RF64goW`@8Q*kXm{ z?Y81X$)h&2kA2b>7NF2I39kZMm`XOp1aM{14m5< zO>uXGNzW6wFg0C{7Kzn>Fk?rhH9S#ewRg_jZ#3Gw|2=bweOhFqkLOWf1zB8*h1uVX zqDK+odJv9zFp<}EUB9}@+sJm3-~Iy`|Pqso>9R#?U6Cx9`%J4iQf33>1eiI zNH%`#*cJjpXE9WnXZgMCSNsrQlj=joHL73I%};_>O?itQ<;$1vncZ*4vqEyVsezS7 zr%gVuEn^HP8@fo1s&9ApB)jivB(n>hdKh-UPn3B>O-QbpEl~{Vq|!d76l%GE>dKVi z%MxgYb;uURspLmuSUN`>97+DtPBprq3a2L1Ow3yuaBUV|k^0=7__*8Pyc+0lyANR& z7AaV=O0p(O=`hG*{~>H(3VaAn-Oapiy5Fh)vOS5fPEpPJA~<(imT_PP5tUH!Z|^0obnn|d&yqnH1qz)6W=GdEZlh6eC1l_ zZqAWG#E%p`D;vvQ_Q`9=!8Je5nyBNI*`GnF9hX^ioj5ler)yvN!oNdxR{yM^YJY5r zw~T8WGczSx#S-)8GDu~%W>x}5lL86NX{bZyG;^$}us+VVq4{jxF7AV`K#}$z<}h1A z&_BP&2~6vLM;+_zwO^xgY*H~dIQy(yxd9>r4wuka>vXjH*x7%GVz>Js^?kR}*?`yf zptFc@^n|D}@%iKBX+rVp2LB~;PmLb41Uk#j7q6vg=T$RHhu?(99G+zS?=Q@h*I`On zE-ytHNqYpe*H>U!``hH=XWrJXlM3o~h8&4%fgO`RQ1ly4 zboLM6bF#^tD#$e|jWB3~lL3Vf7%aU5t>@{){s&;=na~TZg8EjSMp-0{T-|$hm`Mp+ z(%5rlho|jKVo?#oZTx5rcoM-{`PT~~d+st-T|+00l*{L8eo-wg0@|CG`bBX!iHV;hO_he7srpD#II8Ta{!n;f!lRr9%Ik{#S)Dyg+!G!&Va>t`%;R}txIe{mct zz4}TYmgGN$WXt;&5TJ7_ltn&ysUKc{7uRVH$zB{@&U!JGT4}V5_44DG@M}IOyui+| zEBo@dAffTZ2_$eOx<3&65a5%Ec*M8!7yg=+nxkZ$E?UfxiuXxqEUP612_$p=PI~Ie z5Ja9p_&e**$qbKLC2a zrSPOd=vjhg`Rb9Ndkkh%K&>QhidVtwZk7-1?+B0r1!#BgD)oi!wh3l#V!Rv@tBfww zJ^j!2j3w@xkZi$C@87<5X+$v%W~yqs2(O_m<%y&3Q&~PUDbgz!4N(x`Am#W{_YWmAn==CL<97VpJv`JN%Pdx7?F3MTZf$9n`Iz`@}kz*~zvp2_9WH7n>s z4n=#H2@*zzX~Nl7E$U^+N`)I)N<_&q&WW=8HhRFG0x!JeID{;Tz`aYIbh%T0B!h09nu+4+Z?OHMq99tRV6+BwGCN8mOyXQ1gdVgfq)16|u0GS{8iYrH8)I zd7g*0fCSCFZGMM*00eb8wDI}9WV)UxKzL^?S@H}1{sS1uAkCjY|K1o*-D;*D0kSY6 z6DHu-prMWBRl)!OG%hBic+%`4Cjo?>smfEn(sW0%+$(FmbahSQ2ltLcIF^i`!>?s0 zO%wHf*WWZN5m@UiWR+)Fv)t^?obB*F_4mEo>QHMUS;~A~-JzLH=j#A0@W|`hvFTl^ z*^mM8^VjuK7+Le*NT^%)dIzPvBe|aBt_(gr5`F)L_62nj%#>!AajM1(4^9dUO@0U> zp*FhA#1F>8bnL*K<6-$QyXBwVlGS%7n36?1JIJi!TbhzsD^;LOQR)&49u!V8$f{UE zT=G_pca)aNcV%AG*Su#d&2k4oOVT5~y@U|aQNG~aCx3*-Ck3Niq*N50ZXt~ESbq>b zbDGrinNgDXSnkyy5y$gaw+9RlpVeNFs-h9TYxzco0bc%zdDUZv1MUyr@%&-bXsgjt zwf**Hg9x5#7`@c*MjZOPMTTDOO7!84CXf;f>1e$XCj7SSD5XelT3DSYA|kf@$TlU~ z{=JmRIMBuZL6defnHKA|q|}pfLv7(UX0)}47n%*`E}>TMWej)L6QIw@nQibYZK0Sx zcoCVoEfaExNF^JLWUVJPzr@P6f1g64PGs_Sjr6N3fpIvNOX4i>k+1)CB4T&@tJjIH zwJ^)^Y3H3RIyqh^I}I9%$c5q?ex3=j-gc8KidUGX{c&Cne+*XER;a7Lb9zY!(b&^v zIE*&o2!cr#y(*7tK!P803-!2Y`5LZth3J(l3uGzb+!^>jly-&sHrtC`*`%|#Wf=ht zM+0~JH@*1ZYG|#9K3!#?vCWlGf7(soxF{?rfqL#}Urdw)uoe&yRd49%e~YXQHBm{t zV=U=qmFN=A+%N0h6p<657f0U~Y1xmgAS`%X2E@HpR|6*6KLouKSjF+84QI=z8IUb=Wf>~98f;dx7Qi4*hPyk-;B0sW_ zk43v!e+O~%{H;Ed<_wQo!7()8R}@2_0x+?IkET#cdW7AXLu;WE^L?7IR?ABXD?){T z3sk1-^+Ly&x?}&w!t_|mMbI-?u*l=tf{cC=s>udIjQp=b9te-P#n=)&N zXWzsY<-1ZFRX5_yZ}>vF!(;H&m)_n`Q~qUJ4Bv*5q?s&4x`-6Aw4n&bh)erfG$w;a zI~0n)g4(K2)4Tp5Mx{1Y=h7^7!99%$g$QJ8X^Vp~MsfzA4E#jv27x~nJ{>QN4gp&5MqcwjSgnvXN$W64_p3fn) zs=%4L`YpQaLm(=Eba=ncEoOtHyAn>`dws%tx0oKP8KTkxY1G8}@J4+~@VQ*#28vGk z2B5KDvN?KqYcbcxP#IvVHx8mG7y?h*tE$K1k{kW_Qf$Hnegl&?-*f?$daB;m$Fvqs zZMR5+%17y@GXb*B{(87w-8;y!Dy~dGb)P7~TpN?0Po;bSWl2eI;rbHE2Q8ICjo#1Q$fbE$v0BvwN~FB? z=MiGi$sPBXxvS1CI(c=({K#*^;_5rwefVF*YGFxvYa#a9aMdPV9_0OGqobI}-c$$i zQP;*OeK&A5n$%WI|64B;Khs$s>u?7x#?8-SL%*|e@wSXS@~kLEp{{N!dwavyR>gPl zipt5PZEIllZh&e2nWb3oxC1!Lb`CR`xY}N$O<$WUi5q%IMN16Ht{)xUtT37JQxwDU z{G-67FlXtLW(49%+wu_j(fe_$PQ>wx5m?fF;m6J_W6@%`WlTBvjo7Z{Hfi!*GQG&2M~VGATMGo`S2}EKJ|}J91uTgM`~}SF1`&sf z?W#?SoeW_AC8{r-DE`jHn8L4&a0{0)^-x_g9Om5apdru^dmT(m(xnD)!I7=VU^_kL z-#`bYj|xM6zs!|tDna_0S&GYU=pP%>x9nl#ZFHgFC`}vOIgSZbq5W!MkL`q0>{lC} zA>WAZ|Gbt;I9MYOPt+{^t0cFh6b9kAEP7($Zk4$yn(E(8VIa|>O|$$|d6|$Lslh)a z+73!vgyqe?kUy)=!f+(bQOmQx$+6d*dCIC&MAYjO2_!TL;IuM2-%J(+Gu_j?f1G}nrA~zqdS23 z&Fe35L1h&3>$=iz6p&P$im|}juM^1C6fzVF#E7{fFH8j1$9uu1{n0U648PxtE%2Eo z*E44eeB41B&pUS>JG*8RuWlLE7t2}8{=gdsbR{`buW$M|-@#B(boW)1zJAsClhis%(kb+aZQ$<1_*7Sa2;N$?eX^B3mqj;UgL_enYO4DDRy$ zj^Ty^CPWEu=$s}@a%fV`K++}GCY?U0`-;8=cbwHIFxt}BCVmnW823SUDb8*X0=M(G}QZufSvwg1Q2dXWH)X;@a=db$Z-Qe36JJZ9$Z zCYI-RThVt&lEkHDP$2?5q#0q6s!X&DK{O&V+qUYPsmDnSNRKyH``3#k7ZfILJH!ZP zXPH}K-lf_mEq|l_*0sMNWzy!9G<UVM)YFy@auLZb34Bo z0VtC8DT_3gnH_Ua>+?7BjPK&!hg}!7T>79)t>a@_D5D+or;@ zBM3%8B)+~1i#0^jWXv)032CU~Zy-z4 zrg5q~@1kFo1_c6OdVB-cg-WR9xMLT(YwIh}HMuxQIU6D?NWXPD+An3K54q3*>u7$j@>2 zMaZ;A(MC~27~ZX;sw5{mrSWdE-v}>~Uo7?t5=Xs|WEu8p@TQWb6x$cJ&V7vgR=RFl zxo0B!?KKH{Acx|p(=uht%!d{l!3bZNs+X->Kk8RJFY`rzKD$Z&+ra|Qh%h(uagFQE zwe^DbN*%=E6j3gP_aVA3TbA+nK?kV3JrR50L7AOdnDqg<@lhsspxd-HRkbEs*R!C# zLDnAYy;QQqPlUwBHMynzSQG{M%hxAp5a)c#diy##kGgUWx0v3Gojp4y{APO zFzTa_%EHTVmGpt zwasGx`EzYa3wv3!!SUU~be?Y6FKTNn99e4B!4(njgo#4;?+CzCX&!A-;A=0AB5!tVYSNfnzO5G+fXdEGJ(i!aHABglkNerPTUvfh~_D|klr?|MQGT&(zQmwh@kBETmU{u@SLf4t{PZ~LLSk%SMjTcFK z$@W|mFs%8+Ui(Uvt}XXE6(jjE^WlB63^9xUE;X1;in3`+mrwyLX7>5f0pS}M(wDgF zY8|6Ay5@a^okZKc6qpuy8A6F07CJz736sfcUN@w|=~oI464ljHqEyEVDbsN#`kG4C z=aFOgs1nx?3HKRJ0th<9DK91U$rW{u=;nuN?W+x;mP++oB zc7#YoA^)rL#Br$%ASqDxNLiv-TTg!+^m?tWQTZQ0MHroi>puW5iJ@muFU#DTFJ|xz z!+4u)MMWE)BwyNY5%fjBY5>-})gI=S&2Vv+yme0KNp>zV3oEx2jA}^y9m^z7{&jg> znq{_R(p%v3pgDFF%Pkvh)Q(Js@*jZ0*q2Gi57xrfJ3nNh=m16j?g}CKRE3Y|SqiW} zKR;IqN&N$8(db&MPq;YXr>{pC?eeV~pj7?M6*o^Zg+WzDQ8R=Z@nUrcCO`P~?tto9 zWHS^F-{EfgCyYtfxNs*nn);s>0%xy2Jdb$Vl{$0HrUR8veF*R+o$y9cqL{yNR>qQ0 z7b&a@pq}zi?n-Z<^|y1A7!`lMxDcrHEWOhv2&7r<W&qU9q4T6mUuAxvKDnZKV}?P_J8&m>xqaW`eqZdGN3 ziE@b*7T4#99_jmlKPGb@H`ck1Tmrn!Z)}G&XM5V68KqcZEt|%RkCWaQ3HtMFr+0?A zHu+=1ebgFbCCXv51^OzUO;YZ00Sj)>QaB(JPdhe#Mrpx}C3>~zV4QP$ zR5u|RibF-^gO-_@IXx0Qn73xb%bSYR?dD~Nat)LOf=lai?j!`n!nCY$N!7E|Gr~|d za|%4^gCQq5c!$uGf?`kBUW4X2)}rewdxr%9O^oj!UWE=208nR`b&N?(3S zX(g_caB5Ip*?zaA+FNPblcSd|Ac+0*j$A=*;PRu7{EGDqo`y!Wx>2YbX2{@M;9v{jl@d_1<0)HiV%oJNv0|M49c%=lC1tS z_BRQACZzySQ)DZ2>Lww`Bh_Pp^L1Ma$SW)mS5NOBKz>WU&mgT!yvx&v7Ly+T&u8@KK^OggzA?k$&$aviZ3GzKNhtc54jx&9kzT-#*XWt8OO>n2R4)- zHM#{!MEK>hRqyPrC1tt|j{^~oA9{u6oTm@yaoQC$IiqV_67Shd&gdSZ*82p6>97{YuqLtmyl1n2F6gWI4JGkd0Xv=R)28rd zlf#<}p;koI%R0w8X8TvrwO3NUbw87gHi5eq5x816+HOoF`Hk_qD`wzLSeTAFs@h?m z@C%`R8*$G%(X@SlWm%Toxl&{ETtMB~zI>XdZ{kl*yElW$$X1(1mZF920bTd_`f#S+ zdp=I#y78iwVcK}-i2)wkq+(5n1q74}dw^wF;s zc*4GDNG-QiJG`EqvAn-Qn5P!siH59T{^@OS$a9B{maB3~H@h6&bJQz{Qi}gRf zh3XS4!a0f!5f(f`fly3TnQFf4O<|JMV8NUsnc&i@aN4x{-60vh*r_C(OU zvaVp&8X7H}l8RpYU7L(^bk$xJ3)|ld=vsz|+d*}D?LcJx4)2(q2J(;yFaRQfge+ez zL*)`lP4W0g3b#@yd)tkS)M}<(pD1)y=3p$(t!rOKpS}kzMe$;=jVPibouc~86egNd zHnUd$FjYx;-Qd;O$Pui?y1G*$yu;&eZ5qxCwv^d1C_e!BbJIp%Mo4RX<|F|Ii$e4; ztbFNnd$%S}k%~S)N{{)EGjL+m5z#ZtPHf8v>@+YUY%$ndlUU^8)2{OkDXv%R4m|7n zO~_X6CL{d7SAy7bhbdnz%`{bykr=V5DSs~6Q)guvrwfo`k`_v*azWe{plL8g;@9oW&iR;UMbTrDt}T zbeU|o6^@M7UQ?Gq>`H>IY12Qg;mP7sehJkuLZ@=jVeL8iuz}GAoPo+f2{7!`@z^K! zWDHx|J&Z4~IJ++UT^;hZI_j~?rvmzVK9Mcct*%P-;kCNN|8|L;A2yT8vrL}H^+G&R);dJ81_4v zR@qUGoklcMdFA-E5Cvt=z=3j8edAl!TmBxvWJB}s!J~34O1=$hg;o7yOpd? zpUfT6TYOIsSqHqTNU{;Ga%M40VgZ4-HxpdLnxtbJp(-S}#qsu)7k8wF ze5;DNKvX*WMO>2}1HjbeN}vmwzcN~2D@9tSAa0G{O#`KB&b8ADQ+1Ntob-nsm{qt9EZ7Ys5qD#bR-P#(ZjH+{`s5F>Zk9%Q*WCJNWM`%) zq6E`C6^4rQZcHc{%CoB?kf${5H+H>3GOI|WfL*s+o`O;>U7K{b@vvuqyMi%0f|91n zJsK1<9O*4>O5sa%Ps1Lv@J0-DSG!~qDMKs2iLynsr{#(pp+u$Pak8MqQcqKSu22wiY)G~e_XY-BQ}Uuu?PG*7MOF4nf#2AbOaRoKEyU-fPFMEVyUC(Fv?#yH`h4z;A7Ln5YZ^yiL2Lkk;=zq|nv_w5Kw8<;^ba65;JA(aAAl)K>dT~ln59~7nEoUenR-Ih z3oGc-GZ-qg;>S7w6_N)9QgZC?Ws4WZEdwkOXAM2dGIOkqf@hODNaFfBRSmOGhI@Z^ z5AtEBD^|C7mC@oeIjHm`@r39xyrAG1guR^ZL#qC*=HR^+XEnbF|Ku(cFI%`Et&T$^ zGk8bk>b9F0npUXcH~cJ~EXIW=kDm$lR#lbxIaWpP>7dejDV0@G83o!_U}O>270nRN z)!|#!9T)!x@SdOAWs*wnpvsMcrwtt|Yb&w%$UW8neT?Fq9Vsvje%nSCI-VG z!fKRf^McXXKHpi-%p;;CJ4Z$stZkdG{893$bw2rLVm20+Lc;}79B~8>CZ$8YzGShS zJ!>U>DwjM1^+QHDz(|}1fF{;A5*N3b*C|f!`k*ZaUHV_O;yyS z=!X=R_kPnkny1p&OSGQU1-BT_N}d?FWlM%?QW{uX7o+M~$UPnn=vuiWbs{Qb(B@;SQ9HwvSz&QDMxb}{WOxI zZtskYG+Z#gPt5-h0CQta((U5BKeaDn-cB*Xk7h6Zvn)H`d={tf-_n9@rjy2tsy;EG z_QqvJ4bda&{oZKC2>>xhO<=mjI5^m9}c`-EgYuwr_2Cr|S9Czz#S&o1f zhzn6&_B52Mzxe4-{=}XtCm&G9?QF{0v3itYGh?cL^WzDwpGg&xt|5|sP&t?va!sEZOR zlp(^UuiugE-67UCuj4h4xq!P;&cdovur6z^wAF<^e9{X28T1R$lX1qHBr$VZkq;*K zQ&MlJZcF)~4t`5=){EVm`Fb)BcfDc-&L=T-yCNbl8Ec(tO^_I)tEn|}V|REgJr22g z(>^;Ge0QjwQea4 z%1;7R7ov3_(trN+vg(n6s4Xnq0n$_DI(q1V{zt7@o|my{UWBDOJV*o z%bxqwGP#GH$Q&=WV&=a=u`~q?!O32>uvD^g4*jvmwfa2a5fTX9u4-s@>1S4H-*-nm zt)6zmF59g>R$!9%7YV6AEB4~wO#rN}cZU(ZEOf%W>9ih?rP|$|YzSIF28D^IO zS_$8XYmTX3{?baWMpG4|Lq4JzYf$O_o19sE^028uw6IWrytg($$+mblofRo7GYosw zIdVJ_gSJdh<52tYuT~|ouHv`ut@7bEg&A?m0yJfO1*TJBG*TXJl>z`Tk7RkTI>X9zlYkS}~8EwKQ?Y*j8 zr~IK%qMW~#r7cm72{5^Q96BgpP&`NG;zv<3>uIQHjsv2E{*k8Hv{2F+g`b`dX{C*U z_JXW6GEeJ|%np(YKpnZ7pnxf=HJjmeZAb71wjo`>)_c$w5?l6Ksw3^mmP`12`zvj? zhYl($4|yQiYTqYgvuZ>nmt87=SfC1VhY1x^Kz!MF!OL2tLd5S9>m09IO#L~sR-{%B zNMN$Lo{3Nhf5#j~kSSP1ua)gY;d(6nq0>V|>S;*Szr}n2nF)IfRo4ELkXc{JiW7EO#QM7~on6`W z=RrorJ&==McsHjfW4j9D=!L#698>%oSb{ozeS7^2aEkwh)_7`eLpS;{)4sFZbFje*0w@sDWq-s`MxGj7@mB_O77s9R)20f?D>Q%XL0) zOG4VRgj0;Cn!c(o-Sfj*iOr5)y4JNakZF2~H6*t1prH)0|b`j2#gUb5DXO4?P z3WIO>c7T~J0bi&9+Touu;&&C|DLPoX6KN^&H<&MJ^4 z9h4-kGM@LPGcL7mVF{aCG&G+n4ELPY4)C7F_>{D_>m3xmp8e^J8cdpKz(A0fhY^lq z6!IC7Xinf>tYWErVemv&^CG+%Et3ziI5>MK4-C0wlwz886DpHu5#2se0e>pr{(RNe z1T7WZZ|;O^K5}PcHC)Uux3tvM(^c%HNF022mP>X+e(e$j>mEn&rotR79gPxn7H3*BV$RL>9y93-%Uk)CI# zQi9e+f9MC@pzSw%DKnm3ON2Cd=Cu-gGJ}L@{qmk?{$%jnk0_-_jd&OwhH0kEf<8fm z{t?kvP2A+tZEy}te7$Z$Sk~AzM6JpFKE$YEeu8SDjF)!g9g0MatC$l+PCOhY%tq`G>zjU{oL3CR($fvM|-L)&#LHHvVx*G z9zV{}KEc=pCC8G|j^8YKbzp*tC0u>kuQUQHDFSO#h4xnXK2Y zWJ3sz?FqehfE5~srn+!1KAG`Uj!Kzfe#CH^FfQ+CPy=4G{oruMy4NtXSDP|3&q{$K zH}y)Zn3`{m1dS$TCtZWEQG~bV{UrsYgQNLkyPv%^c-%qfGipz4zc}zffHHZHNXKf< zA4}hJ;Xt(maSuqYD4Nr_W!+UFh#b@4QCRtmnajIFVV&O4?gQFZ!UZ+J6A)9FP)_pX z_nxxo_&>071)dqM5`Nz6F!ezc&<%oo`TYJIk)86D2;;49tlC_DOReS=UOP0W-o=wb zl|ZJfhe6V-)2k6RaiRaaV;$kpGZ0~T!Ny0#lDfT~7g~=0(>kIvdu%Q5GKDxPPOUO! zz>^U@0{4A6{{EahnZJZ-GMkY&=vAl-h%On*gw#psw4B zKxd@ef&$0paa~W*ffebgn-!mo!wN_g*wbC1KA$O*`4<&u<`sWwOHLrl)zwIDU zU|guWmGiWN(u&AkXFQaB{BLS$!$Z06o2z;~vlu?B17yiZY0U35dI{KzDf$-Ir5YeMS0cn^yW zns*!z>;}u@dt)WBg!CxvchoP1kY|CiFI83=f)x;FY0Oo5PTF6qNT*IZ-w`U)sFo*< z0%WE>hA;c^Sl@sKb8m0##q6r&bIASxDiVKJKZ23qcB?AiK(2;xT&gpv33c8s4;Fke;H{-;(@-E-5%~)rS?D_d=$thrV z%q9qvPrGrRzH`1_s1w7%qs7I?P+vCd--9SM+RH=qjh_3)%&NgkzpCbVWd-gl z3!~#LEZtqmutRKbvc4ZD8QORk{-I$XbSl>Kio?SPmjVEm$eEVw`E?im8P;1u8(4jd zVn(g_Z%LZio@V5YcBuNC`dwXB+=j z0B7MED7EFMCbT|hr6FSlB%epX$4~OmMGACuPuy5&efOyqJyTB%^G1gG{1ldbg-$*? zbRJjkj6}dmWB(Tldyt?u^Zxg}M6LP*J#O^Y?;n+;ovjp|#Toz*LpAqz62o~){=IY( zn=XjbSc?$Nr3-nlPH=?zQl`J5uxh^}UP)*V_L|^=7It1Jrg`LB-F?tqL5S-qOiZI* zZLN`k;+gCu0su4IkRyFb<*8e=dG4jNy_%M44`vKvIU>nkTrgTCr${6MKsZ84cu}7a z-oLXV@8RaMcsdXEr8su`TgJ*va8fohlKwn_3wx{Z`8IEk!|VMp=N8r)TKC*--M@IB zS(z8DkbLV=S}3!Z#Nx0~;5sa-=ly)CWbOq;N6>;lM?(%;G0k%k*A{-u)Zi|RJA*(c zgCccS9&~xoi9Ev@E^Foe11|oxY_)mK4Z%ZJxlkJ4I{xgrFAZpGID1n|cM!#DWK%XW zI(c|NEYLE#vBZiuJ-#*Xcoy>KM2?H(RrNdHzNM9Lft@0`g+Iwll}?TS0I(q^F)Pcb zw-lz|y5B--8=ApK^>9Y)ciIfumaK1h!??hnyko-ed8 zenJE)%_slpDr_?;Sf{Ia*rB8xB9XrnK-o1F7>U1~NC_Itmu z`|Zr``vetm(_uf_0(V=(o4e}MG2l0Q@Pb!$dF=7fs#ANQ*g*wzz2boq#CN5czJ<5uaG!qePiO+xIRol4B(YY0`V7x{qV4YIS^^ZFEDwe z4ra9gShw$ub`lv+Pn|Pgr>9BSldLYkX)2|b)Tslu@}UVCt@>}cB#~>mX6WlyEqD-g z+-=6fbYQp3cV*#>z+D<(N0~{zx;qXq52K#Z;6lG~%zOt)GFw1^Lqh@}8sgaij=5i5 z3Ilm|0HKM%sRVXz<#k5CO++>U!YPSA);Rwq;gkV)27vdMwrk;Je)K!&nOYxE=_PU} zds1}uRxWh1KK1-&F){4)orCi2#=lmwzBX~j;B_RfVt>JbnqmP9FC#-tFvBCIk4YP3!VE`@c$;gx z$9tG<3mEsC8g$3wG)DJgx52=0$yQsa&ybol)9?%l+$bm%@3|BOwgr{UmgEg_>$cga zT_W`}qZIChaL9b-UqQa-6V*APl5Uwc&sgk(;sAi+FIE1JO(OWTHTyuc*60+C$}`mC z(H^krE@k4wZJmKC=UkoMXk9~D0hh`(*Xw9JUWzx*WckR1u1@fPbz9%J8C4Zy;2`x1O6DORT*dfG*|PRFrl$;VBWBatnY?J?=olRqb30sFDi(K` z6|F?J1@m`srCLQFQOxjPlV4l;@W!X00VZwmF>Az~%Gks#U(D9lEw|@$Uf7}AlyiN4 zdC@$O5|CNM<}bgMqFJcJM2(KL&9F=`ikj3qv}Uy`TqRz3V|$IT=n|)7Cq;31zE%|X z6?sK?xI^C+XKN(VUj9{9fQnY}gGhP`dxCE{K9r8=qP*GQjDV%}ghrA8iRz|t7Ng2| z^RnvLxAf&^Ao>s685C}&)Y(Ow^S6DKCN$OS#<>+V&iO*vdOV(d@l)irQd0*d;UrlE zQO5Xe+=A7$e3^ylzG!r&nK1|N=rWFIC34R_a8H6CafNo?oI5T^6lQ5_bvhRk;e?fZ zNts{gR=T|vjX@}%LN2w`EPQ%RxIx%N9#)y0v#B{P@~FC`A<8-4+*-GvuDaLTyQd54 z+GgmF2&c*_L{t?SZfO)nNgCS~+%XPk%8 z)z@SO>Bv7;jL9bLr!5uAzbJ5Xn>!@#y3T71Y@yKV zjvvp^_=_<6w#H6}1-r(*=x{OSwBoU%{am6bqxP26l+uH7#75|*1zmz;XKLPSSF5Yg zgl}2n1)s@fG)c9IKIGeR4%s7B0iX(Kb7I=O*uo8w{Cssxi^7t$#9b5P*y@MMN(9R%)v z8l$fo6KMk_J7XD3l716?mlPd20M00dJ*?-gbw8b+ugUAksg9bSKU~t`dW(hQl*=Tg zcT?za?>#WVy?FJMRwAuz{ z3g%nSiaO$(Y1ipa=!;(WFI>i67+#QMeFu&B6$Q6alYW6^CkuytFu&lc!nd!~!2MDw z^5U(CvUkYpd9;e`C!L<<+>;}^@1QsGJSAA9E^fC1=t&25!}Z+Ms`6hp=7b_8S`)Z8 zcCTzd8%#;t=N9^{4(rLsLY`YOh>>l35e;Bok50*M@NKT*G(gg~oocFZRo$^f9LmyC z#+r~vDb;Wr%E3HSvms=cjMpa>a=7a!)}_rj_CA!DM0~Q?;9D6j1VCC2I#S^#*)v?B zHTEqBi|NLvsLJo{upQfc(=>D zE_a$eXpO1-7DejR@y=vq{7LoR*Dni#cbG)fvP{&hKc}hT;0c^hR%|BRC<=$>&&|jR z%ID2`WE<07BdYXkUBtn`J1gijM7NBc2iagr3ong6w;}mBko|@;PH3-7#m(XK1`Rua zBym@VD>8}_ic!sF#l9yRH!%j%t zzb;5O<$D;F110Um%yRXwTDqm6i0DO8^z8|%mIrr-9S%rplZ)=NnLX)Cc`I%3AwkpU zIG;*TqvGT2LSq5;!mNH@t*)0^?hSu75FO}~Nd;v$i_2*T4dyFq8l;QOqwwn*(H-0c z1`bad=kg-$N(oNS(9ZThjesrfi`;eK*Lg)KsOhRk_V&`NsuI@uGQ4CGrz)FpWV;97 zcrfNBE;%JTW=rN6?g;Fy#Z)Vmc5t^6*p&NVFJUMG?38Z{o_5;n>TJAYb`&;t1ncfe z$c+mX-`{64Rp-dIBN~s1DfzY{a`hP4o9L?-%X&S{+iF9pvtSvXZK*)Vv4tphsKOw! zP}n5B<2TEJc_Gy>!g?Z$+ALBu1XfII6KfPjKEx(F$>M*y~Q1(5{w0fM%6J|c~Q zY|c(w>d6ub%7-zhD6VD#fVKS%WAH!a2Y$=a_rLldGvyZnsc>W$D!-)(!7&BhJ^7~L zC_t({oA-H}cv>;uG1sv7L3w3pRt!uL5L@-`ImZrYJ0A}SdxMRIVTj~GrhqsV{b8wd-vm5U;Sgv;2_AQPpB zS&eH)4`wb5rZNVIrCJBxRpL2Y8DWCVGveeUtymmc;pk$z!QYfC$PxyeE0aHs7Cn3x zsYoXOgdp-{pHV^zZXEy!6$li?dBzcIv?Q3T8x8MWPwswd^j4UE&%hQaJZ~?3bsiV8 z7yWdSn;Au059R5cqvq~WE{}C=SrHXylxmY3m%9{)Qy1m{B)CO+7He(hBLz`bLB#s| znqG>o7Ga)Q)oI_3tteD0CLHPjut-ForJavVQl5UV+v4GqJxGC7VNR>)4W5YF#H}S0 z)QJ9LZzo`&vMq`Y>RiroCRJhU+pR0wWB%dGq2j3V7cL1J*;GZ$X5D=l(fC!ACf6;R zUMoI$bxi&^JyYyIFogebX!Q*JnpR7YIjDMOXrWWgZw2fpKAf73BEzKsMS9gwz*-;l zM>t zH^+&@OhH$%V*I$TP*nMyf`vUU-d{%%@}t+P;(Qw&rH4# z>sfoV=|uo&qQj#rT$+pagEYT98g3VDQ^1p-lUz+ywGw@iTx88PSjjP6UwHa4w`KJx zWQA|VJAk#Vke#U^n7S(Nh>}fThv8#e-D*aw6E&aD81gS@ng@bZDDL&YtMe!q;uOLEElMzI;zA zSZHi8)X{TN^E@`gmejAP;%5C6@%_QrdQg6f40?1=|Bw6zV;N@4JZU*B<%7eXz&ZlV zwzeF$ZNu4viM+kyN1b$%FW?ja&e?Ho%tx2Ac9bAU;=Gp8rx09j0tCT@It+R&ws+jQ zhRs~kNdz)opO3_^jhNIizS>n(>KS9Omh&MI&No-Wwu}a!)|SKTOXsyh1zzd--Vwja zHxqV7TP!!9o(u>Cn8(A8QcxUUeOgOG9Jn8qwSH}*U3|3HB)vFVgk>G zIJZel2e;ouGznhlpn$?9H}_(8HLGp=&<4o4%KEL3s2kvLQV38p6`Kb2xG}~Q-90h- z=0ZYB+m@b&qmo0~wRxnRdjiFZJY%u3F)j<<#ib)IE5|VBS!J*gr$Apn6KkQnGo)#l zje_&ija|y{hZ89Y)`cR8R(ZYI%ZpNEa>aUe zi(jtWaYl~hX}u25g6y=ywt%cQQ1@oZY~56uB0=KHpwxK9l79Hb{z$@;QrbZ#NcaNgv7QfP3hI96OQPd4tb#!R z6CcZD8_U|s23k)Z+7DU4)}9B82*aOGo>%4}nCVqCDk{R3VmUg{jM|WK-hP`Lv-aBa z6klrLqHT!>#QNLQA6z@O^=2i4tF)NMu=MtU|1}W$~vx+sR+OjDEN*>ukgT#N-%H zg(!~z@X1FJw3_OX{YDzOqq)k|&#&yXKRVMqATzmUe4ngyIc-uHa@;SuBzkvYiw!)T zU2N~LlV_;{MmU{vkc8cS_yH>daYJWe?X)OE8|iYD0o!>F>)kHZ9n5)mSggX5$w+I) z>+pD=y{Ak{o z;?{-FV-MLWs_uBH5uLq9r`oBXbZ2n0UAYA%e3ekHLDFM7L70hXdKD(qXG4jpf@N)= z@>cjL8ow>S+5(P~3X92Y-(6`{A9?fb=UrPI-4~2|XJrX57NBW|aRgW^4Z(}r}*k);g zu+Jq+q59o?c7TYz%3c;K|A;=rs|o)aXqqfw11KCxwTkXnD*x9 zrzvzr?~^#soA=eclz!vING=*6kR(D}2kWSM?_PLKiBFQW6azARNl7h4>wsQFBIT@mS`Z$GR5v9`^n&GG@> z?2gXpW`bJmVT%o73VlC;GQtegMZKkU1JHe*)Wr0~(W!dJDwP)bNxLCUiJs=w9AWnE z{+VqR-+J+@MhetdIP^XDV8vO}42}6!S6o%^VFtr#*^veRCi{UrASdB)o?X6x4^-)# z1h+Q^xA$dxR6!4@u7_nnPpdn{y7@M^>vA_WHAHWhhm!Z{PpHa`?Pj^PM3or$kQg*!L=1<8aIlDT8$HwH=>EeQeb1+ z$;0R7(xH`B3>69EF9KcDG6IMh>81GWxAdrWHRM_oQjd z8(iV3X%Nv2%&5}OBPO41O%xmOw0_Fhyf3^RTd_!GVlZq}Iw7Q3s$gy$)vLvH{U!g8 zDo4k8=MudlG<7oi>nqn@u>^5iPR`RIbCwl2Ry4=<%E7vBvh|7b*@0(SS}a(b^)>fQ z=oo~bC@{9$Bc<9pCj>g$s|a6(OvWnN?XK&(c(Y|A&OQe8-r0WI?>NmGkog79l2xb# zDbq8Y(QV_9#_L$PZKP-R9<;yYW|Fs~C;EPm>wwfaEYY&x zAg#!2Ld{~#QE#r}O^W2fADhgat>k8vh4!}gxn~A|YFM{^edk%co!d31a3e;>6^uHU zrGsm8bC%Y_^F4G<@b3KTYy>DmFv)@%S;%%?gY%RVjC{n=_3BL# z!-bA!XoI*cjU7mmRppEakELmG;vrj=z$#v|Ms+T)?Ys7K9uGV>J{Yx{VG{Vg_ zK@>}$#keA7#k=tKsv`;neAqC#!7^b~cRIg=?s9)bO>)&fXV;gcnCq*QKv=w_v~I&| zdn@Q>LNu*|bZ##-uvE&2lnqpr*wS`cm?6yTjQEap-L5r$24NoFpO_~|nCz^rEW^v7 zu$-=ys+xA6XgU25lD_9Li)SZ>DRd6k>vm>y=U?)W)`T^N7v%(TzjD0DO>Y1P#AJFM zpoN$(+~+Zh0CfpnXl83B&p17s_PfTA4cYE*O82cl5sN_|pwZ>^9eBszM`3)?P5 z#`2(vGsl`D!xsxVT(>Bl4CF$iuGw9jCxzfRENAPyPXG`Se=Bn)n$)C)gHf`b4Zw=# zJ7`QLY*XI8dK9`!1^y1wi$23HQ9oWd!vrpvq(g}pXo^kzSfjrcz5N}u>Hwp^^3;QF zM(dl|L4P@6rs`mByvc2T*_;y7 z-%`LESfNCqw?lxOwxv3*jFo;St3d(D;8WqbjgxF&C!9ZitOTI*%^_9o2@BKp3wz;Z zo*R8Lt7q&VE~d`Pl8#AF3$kGT`B@9whe%z6V8x2DHE{gB>XHlT7(tISTC1IqMfU>I zYogfvk-U5-6GGCTH$||Axm_G_IZjm@6DWER6%}o5cv>c2YSlAQ!uT&G!9AAFY3@3( zfn@OKZ4OHko=FvtsO7CSAZcQ!6>D~pi9wIa*J+6o9btBWVs6@Plh0>S?Z-J&NEFnI zT0-XDUjlMA1tzNdn z_q@*auAivVBMpvHBK4JTh`}3KCsYzkS#TIlpv_4uD}+Nd z&iO7s#UkFy+qe8UZG1u&-ugxPX*-yD%7L5J3wRbT zPs?|R0$IsoDux0N* zDY6s02f}}&=>}e6mfGm3HE&v`GML}D;$Wby@E;l6-6j{Sh=1?Q9695Kzaxhqz=-e5 z)lV&~zB0zuSJ_ZDMu>J%^E{-DJxYRg(1&y22enZ7#34j_nb-f#ao^4s7vQ)a)Ku2h zx_K4ebsHabVY*4@JHQ^sNZ%$vbsFf-UOc-aFi=2WRo~#>-s1KEOPs&$cBb|HQnq%l zPasV0DQ$=j!sf0HxbeaGgQl7*nn8oIVMnR7{JCg?@> zfXbeJdtj+l&jWv{8`?76_YmByZc&3N$H{W1ny`{_b86wZ_Be{7`*o#0s$h!M-Dgjo zNRc2PJeT!aDwPoh`z|OR3-^bn@`m~^)!^LNWi4`kVj{Z78aMdq`8uW01{kx-U{Y0C zo28qs^g*H7AzFbF+BUUSp<&vDR*TMW*j1z;LfAuans+P}xYBLYVQ~e**=ZR}k(pJu zJu(I~pBC0z8zzR;?7u#X>8)ks5@fh^$%UlvsEj-6%IrEal=ty5Sx?{adPZ`Z%EBvn zCpGb&L-ErgE1Ngv!Mau|$k!y1kEU4O8E7Vky(>}#7#dxK;3GA`O<3EA>BeH0CFt$! z7`)tPWx72t%L?ol(V3teUNY$XxY5yDp@R7M^INgxRI$m0ddv;MG!+!@?({%%N}Tu& z6d_xqpYp7iEuQPy*kUw(ba19XwR%F* zIgjyxdlx}48r(uuG)%rNZkjsH1uxC*vm~izO+;&Tb&UAC0V3VdW)o-E9;tN(z4He_ zN33@&flV~AvQZWxaPc!%oBB>CR!0vzo{+YiVl^aQc6S$3C45zz$=lnO73L$Y=mVu< zc;XQ)7}cdNCB3Cj%sJ`%zxZyu^i$UAF}W%RxO2!4DxHKjy8P9*aHFcgdQI?*HgMQ&tDU!RTJJ)mLNFho~;w1eDKM z>8dxDjPF?!Ln>}%S5Lzq8*S_EM-Q!pTYmuJ1-FdXn5yNL{mE-7bdbxsTm=7gyLG2h zuWf`|P?G_PTRzwxLff`Js@+i4SOd2#yO51cddDGm?F;?7nD-$y9=kr*M3n&{GIWVi zUco}Ep<+C0{Z?+pt;(c3l*SX1n0{|gx=0t%Bm%XLw;6jb?_=aIC*M+m>+U3EHKs8g zB~rZF$Ex%;d8kazTD!QiPG^c}S+BM6os8b5!7Ufe?~5-gqI)0Q&*e847#YCiBFw<| zjl5(E;6QosZwh<;D)jZ+<9;~nWpG0Am8(3Eawi`tSRe$d$!h>Ln#s(jbF}O#v{W3? z)ntf0s{R3x1d?<(`RdLFP^vgC4W7e*HIEq4=%oDY4v@uF0i_51Id%FU_(UJ{Wd9EO z470fksWiM0b|UKfB}p%kjPqpQUdPZsVWBgjE6~PTV_mm8qp~vOk;owSp(g)^z57%~ zJBr*&R~v@Nvv^w>SF11_?V>Pm%2H<*PS!ljJ_txGj|^+i#m}x^k}XxicEBC`8qhsq z6_01eJZCSTyC*B!hEP6cMJ9Q2+Xb-}HZL>RKg{21B!``Z z1s8k79?2?%7!bnr8Au;Io5dgU?Gk;5qJ&jkH3eH=$`>u@4CX1ls+1>6t_cDNDVG)3 zUw)OLO!0+v8B0=rWdTC1d;jU7`pdBWq{a*`|5>cLJg1K3Kc~)YH~$1ClDJH<>4=eX zp*a3PKiDm&f3;WjB6HD4B)vA_G5R2MNvH2SNFpZ~3gd&qxuC5Tai{<#;_slvw}4U; zcqsRiUhdHXQlk_wm96E4OFWuO1sYf(pe2wt+R=oh6h$T+KY5I&=5lb!s14n8fZL!j z@llV$f4;(%=q~0Hp;Hu5LDR7S1OOVL2LQpA^iP*GUDxd&2OXN=WxR$h!?7 zs?PZ3A_G53wBB$4AL9pRy~0aj{tjwh0yap7f4#0)Jl$(e8o+J++@e>%UO1Vi{M0Vv z-_Z~J${S5TH(d0mzT@6hdqMd}U;W8u{x|m37E<5ltx$tfJL+*$xy?!JsG;Y+^5(Y} zGMC_*Q6^@G29aA-BG;?Ry~U*oacaq))+v0+Cnf~gA5chYG*T{EJsOeT+(te`AIb#H>5BVPOpGvsU zMXsh5X@p_B(m6H+Sfil<5CC%FM0^X{;`AE)-KN0QMdrZq3KYwf*tGi2 zVzuZfok8=>y%TI(RlcJ)W_&#RVVyy%qQ8B@;h(!SW2#g*DXiK{?7As+XCkE~;of^9 zlA^mtn)E+^@BhAC{PS7rzv2@Cn2|u166BqB$#0JZ99vh_~1JfqM2Z6i04S5guR8LN!6@~ z?Nb4o&Qk?3^hr@cN`Kh{Wyjif6i zNxd1%08ps(Hs5wd>lSJ9cMSJ+3>2~iFM~s!7=u^Pb>`Zw0 z$P&&&4$~twfD}E%Ra5#;zp#mPc|2V1MzeRf-@l$a3Z;D3d1}K-ws?sgtdd)pbmyDS z3A*GiVD9a#mC)mSruxW`hb@T`9%9h|?8gIjEpXntQ3ot{)y!!~=cM9@Np(#2m+JBv zXFQbly_aovCG@x@B`Ly6+OP}B2__T;Qf_48=z<4AEf`!L1zMNUj-RHasa0GWR1Vr( zFDXxPNO1#bctuvjNtv3&U5LyRV>-Y6E3cH2;NL+3G=P*jSRU+c1;xp8wB#ov_!{s; zsY)3+$xU3bl6zayWznxXMha(QI!P|fL%iyq8~HH+!Ax20eWIHJz+7%(hCnyP04kK0 z%)8K5F+l9=wzVkC@`fw(-5Qf`sTOwznwIXt!>_P-X^>n#;Yb-F6F`{)w+n@PuUIlY zObdbk$5;O7m;WoqKw${a$NhrDe!AghI&Oq5Jiw^iEJ8Wvuv4h11IPIyQudjHjJ9ep z?)odX$UI@!Lujh%w_ydkN(M1zpPu1g6>t9L zz5lDgw12VdF$EXHk;miET}Bt65?-hF$%Z=tfF=S`Lw+`*$6!s#zj5rkoWAE0c9Vr$ zbp>8BfNgS_FJ*~PsZ6cJPGavODPeeg8z+O*zLM8opK}gK2MU>mxuc1=t*HN40R7~2 zh=fXZrOV!L7{VeTU8r{y;g{rM(wB79KuRbLV+BA_L};cDOEbA){_&kZ`sbg}Hq=hU zR#NY3D`bY_w|vskX9#lZ3m!|3vq= z@44sX<^>C7Pqg{PVG{s4-AWl&U3q@GWDPC-rCt^XlR*a8u#DP=NkXzQypE4Zuq*u>Lu9{PT&4 z!EaWg8x!~!h{qSWIhW@x-$9-o)Wc5ruT7w>BQVV?9O9-^AZz|3UH;oc?lJ_0(%FeG z>MBU2&GI`))_XA*S={jvA)(_y9O-)!Npc7+K3;-*UROQSM=IsT)Oza6>%{78-u37IV&+@9qk z=P3p|3WS`=eX|o5Pa+hFq5sQ(F#00fjKMh&Eu??vJfnxETngFV#`|kk98Y5C992kR zknHTlFXQ@3nm=f`#s5hs_rC@mHCC$2B=3&vswx^L-$XeqMQSyUZaVq;?kT(Lj#)bt z2axa0eeh@W^LkLdT{rb2a`SChf)XwgEIaJr29{@}a8wI*<_{r`Ea_w4md#>#oK7#I z!uqpS|2vHQ3GhNn|M6M@uH^r7-=WCZYDg$VYiX5RI8bFn7Oh+pgU)yu%J9V1nW*O1 z+4zsi_m3#!&(YO?Ae?dlh*fgHvEm0Z4L*n8l5G6iKpyyM2yUgnO!h=wT2m6A+zre1 zS-7eyCzu}c-hRfDAxm+Mu6c#;ji+aYazb>8a-OrvC=k+TJWc8mm&yt8uPBHY^u_ z6IQ~mLA~e&PAf88PQ8rACjppAsE+`;5MeCh4PF?d!Pp5a-t1P&{d%{4L#0=%y!fZt zRVnODEJ~haaVRvcRD5^!0!Z+RNFn3Gb9YYRm`Q|VURUh1J1sZkWp--n=b_zg@Vm9C z{z9CKdv0woS>}m~C8UthvPk}0IHOKaxH$(-%2$C&-KD*23vH={m!fG?1gld>Ik&fq zRg zY|`_-m4JTXe3|ny5o`90&JB(DYnUwZF<5Cb12RI#iz@>nl#o#=7;kGOtSXR> z9hoZ2IW3z>`mNuVv3HNWy;`s>K##4v?Hc4WIVGVxS1r;w4_T4p-)zabHOVRTtT1GR zE#~@18W#I96iDf*0x_Oy?vRjzNZ!R$J!xkuL>yI)-^`u{i8W8#<670GC!IXK91+_} zn3&gZb4z#BIge841+)nqHxg@O^Awdxml^SK1Xj8Dv->z(Z3;t*gdHCXIl^-cM5yg1 zCJk;?msZq2(cquiqma*|jlt`%-wq%n>UtH6BC3Qj30MTy8?Ve*ne(Aq9G4QolSky@ zJZJ39sy9ff`Dgq=2~2{tQ~M{FsVm_DBh!2Htsd80S~K5u(I2RSSJD9@xVY4@x;_$PI3aW0Ew-0lrXn{8P z2Zh0DDSUuJ z)$X7}lff*fZ|U)IOntP7=Jd-5&ih7eA_ii@mgT&6zQ9G>?^{@`eB(+MS@%$CMU?bE z+Vdvuxf!Wt=CA&=53io`+FM4GrIdWi&YL^XdZJ@_p}z(3pnZ<{DZS7UY-_N9TGxJs>z=$JHW6Q$mN3Ef4%G^kLyt$W`=$}|@lXBv(?QrynZJ}66?n*O7fxR7)uYqlo<+rNJ4u;k;3NktnL zox3Wn8{Gi|1VogTdw#a4aYt$nc$Bs~Yg~H*U#w-Z6|EHyn^%3b;$3l`lpOm!+9C3c zl>%t%1kxPer2_wo?)CB|dxpL&9HXy!bSCl>QV!)|{=mqFc_jj)?CI);9oOgu4ISQF zTYYSeQUMxtNU0LeB}>hiyGicswx)(oXn*)e68A|JrakfptWI=qMMcoK8;n;F)b~am zQg0*O)P}OhPH&M}Cos^)kC}Epx1OP)^!hd+4DRQax7_!nkj&Sf>2t&gU(r4R2QG^b z3`x7N9FpWUzqvva&Ifl=(~UGffCM+!TKL+Ks74KH`D)cA%#mi56EH^6y)l-zKvUvh zp$u}Okk+Sfe-@`TUg!YD-<~c^iDd9WA;zTFI_{Avc0B#HSteG;q3+nb&(odipcE zAN4aE!py0a1JRCRg^V=OEi&|G-LYUqyBjaczl=EMt&gQDF_leqZ1j?w-6IrgtiSej zql8P#NqFNKe5e-AB!E$u{#pPp&+(3ed0Z$()<|yOJIK_B(lEJ=dz51|SVfO&h8-)b z6J)g==ft@=*k9gNY(`6Ib|7knJnC!JTp)0;ZE6;bH!R@Nmaudv&CD7KEZrAOImRZ$6!pkxTdb zunXi76zRXnZhdnv!b7Ydo*LjTy%>%^4+(FhW}W1|$u-8S$s_Q!&mOm3hGUWHQ`$^) zdPbPa-#Y{}J$WwA_H3pa5dA7&5efLh7u2Ur&4Nr_;V%y~ zbptou!g^z7^g^G(0&R>3OJ(iDoiP^a>*N|lp;wH{!Ip-&Lfp&vBwMxbY;t?7UYWgr zY0oK3eZa56Lr0If)@*|S+bbY_=m5oyG_WVlc)4Jq0@W^E-C+tp0=L7SqH?lJQ0eF% z4e6MWcJ^x;3={<}U%!iE`i`q9uaoVwPU8o3zD5RXm6T|c59$h?+Y^++MQ9<|3$4!b zc~Fa4`P_L0>`LaBhuvsBGz{i^(=OL>ycOGQg=yPF9#z0^q~zIyap2jhZnh@(B5=xD zzrAEr!mMyP2yA3nP)di8sKYv=A&6Q;W+X?=JHbbKq*5ErPEW9GYC%H2+9))*XX4Uz zczD2x1?2K+!rE+QEhIFg3d}G^5Q5fiV=$+P$=x%h*Ol!~iWJK?*bi6yGLez6{nqat zL!)s`$&h*QwfDyj1>xM~9P+nXXg`_1?`9^Wjd>`0JuHdviH=X}{;dlNw?6*sfJ|w@ zu#5l)TeoQ7gPh!Z|Ip=!k2S3pL3B~|#iCJ~#(JIrgz=$$>%z&J%VktiYP*^U?NDxd z(6_DsGWPkuYlGp4^_}72t;wccUS}XzhkZN^pfCJW?hTjs3A^ITYmOFd2=tG-IFm3? z7=78e?i=>R0v1314M6o{qVCY(K!>_ApoUkODs(4hTs$Z#E%6i!QOlx~_0sc~O`^jNYMaPRyHIK!bel4(x?WPy<8(P`n%ngTlT-Vx74Ye+AcID#vI`EAFTH>eZS5m*Nqj~E|3)fN!;J-Y)mAhga|n- zHZncFqvuPdJe2QI|AiE1NRkJquH)}F*FXE8v{U}uO{iKaO!QFRvFXAXh^kf!7k=q^ z^-gyaIE!DdJMZ{j0e2zC_S$7~q=X|y-Ahw?5M>IQsGr)MbqRUZZ<~Ni+5TsDDSU=u zG>3902dA{a>LyR0j%FM9#{v3e9mNOjVVrE54F_}vvXt;cggEYp&=9<8_M zD+;KODt*j#m(B&Cpm`(zXp#2Mc#dcVkUbL;&3NtPdVC%mnPZ^HotSmR!W<>lY}_eB zPdWKTGu|Dj&xj9HI2J4T_Mu~bLpb%dN0tzp7 zD4ZMIem++mASCLMzYxW|N6XUeXfmwk7WI^Ry@pDluPb5vgFtdupp}Dk^7WFfVapwk z&P+26X*<$NtO51`@I%jadfDH*g_8Vaae31%{cUQ&pc#dzUMbl}ey5TgKG(Xv%>0+% z-aSg09X(E^u+$05$4D|6V=CHLPnlvZr1RYa;UxQcVWKBFX3XQti^2jRCMdstAdmvR z{PR}rJ3%1IVR^NHLHg-CAeX!me-s#3)Jgps7&-0=-r z9H$|4mnM;6^YUx9^&X7(YSGN2O>4=Rzs2c>x_tmdaWy~` zhhz8yr1102U*qa_x|%04$J9qI^h2F7r%g(#%A@4HX-?xoz4l%GVPePJI!7HkQu&Mh zy2_PfMZ0@@5*_wTws)&596J}4{UvaYAB01=xkQ)nfUxgY0xt^G@n>+sPviA@0XZl& z!cyq4Qx_a>V_vTN(L{z^mR`jv^mE3;_Z#S6=s$6@M6L)^sD2qMinX-Td=3a@eA{1o zWm>f&%JF6J`S1ZoX45YZ4{VM8+;eJgggnv>^tD<&7v5Cu5)Od#8H|IL0(;*%y|_u6 zQ~Y{szvzB>Wy12hWDwR1K(F{M(bFEfb2N!sVgOiifBr`tYyTsTC2jh#5B^hwCLB}S znX$KZ*%Oh>2c`r%b9!2Rckh&W3>Eca3YUdUJPZ#BOIx zkpbBR!gmlF!(1teKwnhRi^0+80 z+Uk}n=FeCBomtutB7>D+Yvp%dE3xdne|B2}M}a9?#`Vc(A6bA|zY}VMj6t|rH0d&W zkZbRAoiQgr($&53cU9=!67x>kl~3q-dlKtnd8+?* zJHPI9u;uO z^4qjBr#BimC6%KTJszL>DnoxZ#Nl7YIB{u^c+2%_u0J`irfQ7&gHWY&1lOGhDWMf! z-KW$UW13>Jm410ZQ2*2W_;>!ZK@w0X_?=M!y8^`U>-fL-rkntp7GG(8anJx}=qHmY z+y-P7KK`yR)E)aF;P5+LP?ZZvAN*MH{d9*S&J`N}a%Rz`#$tQp^sU$`hSl9z3a#Nu z&U<|KOy2^9lw;su^SQiV{Zn#&By>y0{uyV_-#*jN3EiB478Dsx1YbS9eiB)?;~f?b{u8%FlalPRA1ke$qF&)qxfIZS&-=0Zam zfwr{(>##7`nin1U#5*BymEFK`TURlqQ_w8ZzFU^4G>3|pkWttzej9+u{XEUzX*WQy0-+aIroip}pBT0sk(qHP^4Bz!Q%va0p6@q#YZ+>#>QrFtd_zRBi+%OOf0 zhYT0>?}!=pVKlXWToIAVRYOMqDIDZJ$C>i#)K^vaclwIuXj#M;{17O|e*bPF){fNL z#;7z_9-?P*KMBV+GReGXTPG_RlGsL2RQNX3Jr3XMI*5xmh!#h_5+57Otc7gQ6>#0D zzju?JWgcJbdD6xOX9NRX*v@XHojk%LM1l;9RQa&V;L{y|IuW1jRi%!3qWdI=0(CZ8 zY1lkTtZqoiWp0ME#2}?J5PQh}GO7LQOOlrk?rhbbbc|Od>PfnRs|G7-y_aIy=5A_$ z7SDqc+YRoG)(czVOeYmJx~G%A4C0BB%@igg5ThF|Y8?Ye|n?+(8?iPFPcWC<`n0tI^k^3vvqOH=T2XHNg(?F?Q51 zczk0whG1_YIhJ@|w*i)^pQh(uTavg;L%fwhv{w<@HEr#9D~3bT(gIzH@$vSI+FRiP z0U8Nq9mu3)?T{mtK7G7Z`Es8#WkjhwI;*-VEq@jeYJ3O%p6O~^!fD(3ALen)WhIXm zyjW<+^ckN$R%YSZ;HR=}*$5hfV}@`w;423xrtUfGd>D>b8R?zch%@4wRTpbM74Zjx zCV*b?=lDhXSJzs$)Bsh4KT1UGJ%IAu-n-+k5>65Jx!2{o>01x!!q+2p#M!^+j>kO= zJ8L!K^ZT+n7WDO-gPB{kb!0`ShW*7nKCRFuITm3LE;CQ0E;ii;Uz6qLLCq&j_k6XY z6Q^On=A-#(y30l=2|F{h%iNXq*N6MXm`2N?cec*6^ByH))%u|Lh*w+e(Zx~Pe7OGT z)g9{Nm$qqJqBDkXsv~eIB@nG8oLFBo-%zivI&8@ULGiBvz~6ZaHLH4n`Tp~?R$Se? z`N}@Q_j{&cw=%wip0Cn^ElM`+*pq^yb>W?nncE{U?{D^h$l0|(xFgfpvSbVj)nP?R+|wEXF1ME(RuZi zJW6iEuW6_E=a1%T=Bmrj?%c{Q51m~!G7Ic~nNSh$H^>j447?BL z^>ygCyCs-=tV`uOuWc63Mqer25~Eqvs^v%pFxj*-D|YElT;f`$8%)nHK;KBX1iNU6 zGY@NZw}&jrT<(m_b3vwgC0~8BdLku8{qZxohF_*7q0G5rjPc7u96?>(Ov!+>Cm5DT z_h(m7cROy63pqYkzr)iYQ0DxENG?2E-qXDPd|GBtgam@&k__<1!*yh7t9m1)=u_zc z?7PlsA5gNX5noui%OX)(HQ*IfoW!3^(F6KP~y zI#WIMiLIo<~8 zl|1hq;^e{CW-|@Mduh=ogf@(X#aGe8K9o%9bU51DQa7Kc!KeaUBz4(?7=>Vb%)G7!PJ|5hQt9J=B}rrATXbF-bC;W7T$+2n zL(x>GQ0}wyx~#H0ZskIk3jy#FBy*aw5fq( ziowQ)*86fNuM9RHVCI3C5vEY6s_zkT*T{`BJvs9lDHn(? zr)FeL8|~fPkN0$HS#hN#)=^I%AR3mjd39)@|bg*7e00Q z942oFsk(Th+w-=HgegKAw@mgXR!!*B8!!kH1bxS#-65H8T5me>mIT;tj}G=x)3l(A z>1%Zxp=lZ0dN`d0;6k6O}+u{TY#jUspcbDQ01&SAkLXbiT?(PsY zxVu}>|HY_ArIb-e(`!Zm8D}Z*nr^HY0oTBoD11mz!PyM^<_ZBx6>1 zkcLiRR;s&1s#cgV6#UJ!c6qpw62+U=U2JOXx51@kgr0kKw8SgP@Xe-}M=ioEt|+9m zRTI%xnF!7MpeJ6v4qSc(G4D-ZV8F(komMYPs(DQ)2OpfH z%8#bRI?47<-62yym76Wk>(rGz&9!k4qe_*p9rGN1zWSrVMfJ8~$lN!pB{^UDs%iN+ zF!2^8D{agEs``f!?PUF01gzC3?4-D*$KCyXuX=N#NJ@~DSPjD)k?mNIK9{*Uk+|@L z^S`@Wn&gB^Xww{pY#-@6FLx5T0)ILvBLRF$Ls~IyO1*rrB=Kw>jPgCPd#48&y6fz< z6KlHM2M>AA3{y{Xz|WOw^K<9ROY&S7%E41Dm$>Lz$*NNArI~P*LCN0Kw4?rmYTLOq zoWIgUvCd&(*-q1Pm)in3&Xt_-Nk2rU)J29exQJ&>+Z@>`->GJmSc z(EV5Y^S@l3@+bqh(~bgfd;UR^8!%k?*R>{Y6w2~7>_Y)Wr2F68(vL&374ekZ=KDN| z*qd#&6)+wm|3O-z8E)$M-$zm7C4>D{`&ZRb>It~;f$ny;W;qefjLhlVFY5hhsZw&Z z9xI8elb)a)yG_pUW4^uI3C+K=9OJ}TtQ29HHrrw>Eal88!P(jd`+pICNX$(_ip=r$ z?KlC58)WhFbE)!F{gP-b(G~DSU7+ib2Z^7=Q2DeuTYt5y^vOE~o7$?%d+o`jxyQE}}QU>u#Ekt(G05VV-n?X^sJc|zy!t~pUbp~+qwai7d!|ZE0a(g^t<7B;aebuo**n7J*jQt5beR_~7Bv@xA6&Sy zv}%`!PCe&Uq5(ZEG^0R=9odjt2<=O+$Il+tSo;9li<$D#(@lu;nUt1`o7q6QO-?+n zHzkW+fwDDT)B_68lT38aA3gSwW>!et1~`~VsPVtw`0aZNo&C7zdrsXvCnN?2z!h=D zw%^k95Dj=aP!S((tOaRn%v()xx44Wt&*bj4X{LOcHlKz9Qj}}`g(XfZ^z);R! z^9^pmUc5U}$NSG8LL#A8?}X7* z{qme=`2eh1c-Y#?we5ITBP0R`9HU!8%Qzyq!+)PFHe!HQpJxl}>S_Uchr>$pRYkGr zUx%gC*NL$v6bTcdVn=-s;|XPcuj>)DF`9n?2VB`u&0hZvt87-F<{R@0tn;a`nwe6&WIvZ2T3J}r)ChIks+4}^ z+_ouI@@Y6&g)(lTa{!^D7&5EOZpwp!64MWSqNyAvx}WmCl2VcjCu3zZ_c)uCB6LR0 zDuvCiDjCKyhtro)+Hip=oXz3@*?Yz9>N`2TYf;f(jzHRGaFPWimp@II@cgicHo+8I zy?qMAe10>R;7F*I=BnS;T%`6vXEvCUL*VWpRujZCOeF}YudP>axUFTxD;MrAL&6=@ zfcPu;8nn*T5OE~JznO}(!lTEw|k>lsQ)yliIt8lE* z^UpniDMhxXF7XPkT9Nh;Ea!p^1}m~@;;WCZpXGXTMWLs3jZo0GfFN{fkcu4k4dQGu zzMhQa#5+`_)FMKTn6q&JSwbHtTeqMXt|J$#d_T&`oF1KJW=Eun)0+C7*I>8 zbDFjKlsspY5&ko&|E}o%*K?wQ!|#{cVhF^ek#^n?YfY7;I>MvdwBh)0+4`cOt-8rV zgSW4tCS&gwhNwmTmyQ45b?u$r&3TW8aD!4H2Dy`AKEVI+g7OQ2NDI|yd~N>(0}FkK z?yq$u(G&xk=%+v%N4rwVaDFOIwKPMO)#(khpMaeKI$Fr^vPYMg`jbbdjs&6InZs$k zI^%mBoVg65h{+J?TmFO#PnGH8>kbSGQGFd{z1bqIT}DlM373k5jSUqMCsv{2nLdX0 zy7nY+n-SR!wt$kaMO51Bth>4Oa>lUXvg1!=D93S*NM~L&2j-E z=Qwub4)u>f{k{&ON>0b*?$zBT)wn9dkV@~U8btZ|I68tc<-$K7Uj4*wvW1PI*bE_2 z(>-{o%2p&TX0UaP4UWC*8lVzU8zvUT#v1S;uJx~!MlUobP_e)7u=~UqDO))m?A6)^<=Zc)D0wW6$MFx3{dfnt zVlC4*`dO^vOjJCg6A~T^e*LK_6jA+LLZst%zhexiEvK`-#c0&}^Gn=JHmZK~9^lNz zk*^|GQWEV*=v|ee{44XDEwM6^6#Z(DjdwCg{(-wnvLEk#B@M|5+gCZ$ax>0!(r&iO z--A+==IaDXsa)U*mzIvYx^UsD)06dZSq-@~sXwD@ZYZjZw^T>y6aAUuYtd)dud6HD zXYHfvpNlb*KYe$zZ5lFP;1P+vir#H!Q^kji_Sl*mjFm4$_6OVvZ=Iuq_P;JAMCbB7 z&wP@$F+aMD4bf6gx{sY!Qi_IAaU@jqx06Pw&)xu;bk3C_bJJ*GNp7SHVppIwkO z>^7x}4ODoj<=IXDD$gpzd@(npYfFfKlNv9K<4OEHenMT-pIkp{J_DiHYC+3gktFU{ zg4c>Y0~o_uC1Z^+{YChqeY1QQs>Sj{&MQq4B_w}HD&LiC5{qOdkiZ>QXuWTq-{bq; zD?4oUtS8C~Z=<|^h}GJxv3OfV#6TPWLpui1z*WBsr}(ohUdf~Cj(wzfnjght@Zr@p zsx>Xny*R)Jw|l@7?!3|PGkMJ<()G<~L%$a2ko)c)y}@GRH={f@okS_-5}X(Qlc z)q{(xWCkSE7Vs3n?_r_EVdVJT;G2@HTF!U>_1NABzCUuo!ij^>cSEtWof%Z_@Ey|> zVq36Vy_{bCqI%6pJv(FQRo!!&nXteC9^;`{SyIMz3-0m3%f$t|*w}||NmLq#5O7Uy zC5!zY$k-FWofki%>C$sZa6QMdsiF%vakg+3pP81$s{h?&$#|(Nzn&YQCX=X3onK}P z^T?E%aXevHkWIwg)p$=rk(DxOZvGez5{z>DU~*+S=eDqQndU#{666iM`(C{wp5SvC z$1}taQrcj?9mc#WS(ZQGT7JJoX~BbQYEQdxDXB=7hECD9El#YcpV|Z^aNst@BgI{R zj`8JWp0BYM;xGbXlHlxjvLRz|aT;t`B4EDlhru|$x z8fM~C_lAD&?y`&P$d2uCtZ@ly!&X$!lMKe{ovV*0sqj$2)8WSGDx8gD5*ozf9lG=N zIe2*BIF<2Ug`7O=3^UI7##dMKV9`fArI#V{(%aNTD30Xx=+TagM?#*^(ST8_Hr~dO zS9Ji7*Em2?XeW0LHZ01?h5iwXfn+In>ESVRUCgo^xbZ#4!-J)~M8@Czg3*tDc!DMq z!(@<*@TcSNWbtlXy!~|YIvXe3TYOtZ#Vn1+&$JA}6t3B^l<~75qwg223boV5=Wq4= zE5AmH$ymJMDZ{Qm9b_&aN0ulBdA2hrpVDC4P9LfavYE`fhnlwaOG(H+vN4!&F^&+h!hqW+<6! zqPgVHge-0`S`kH**yvFNOeptbX+>Q}G$wySmI&zXgSamOT{78RZ=%3+Huz2^8?&Md^{@8x@9aXM1nsRdyFo;KxlAqkeNZ^X3*;o3`;Vm0~e6ZEoA}t^iixBtBv@b zriw_AiqwfgU{4kC?N$EmSeo+>&_BMx8q+ zX{69ZA3P<4jvjW2GsSa(bhAKjJ72!ngLSY$^SBi61)@l@?sc~lLz&N$|3NDLPrRf7 z^8n5L`{uRh8icF#V&3y#*R!8Dr6A%0(H}tLHUH-6RMar|1|lt1ZS)V4i{vwT>a_Gr zf#jXsWtHRqu3^-b|K+Y|X0=7!P6}bqrJ8LGe<9;*Jez9dDf^gb1B$zBtp>1!gre#C z#~8Bf(854#8CMF&(Ol=)r_S}Vfn8kwoXuYaE%2TVR^Mw~_T=$H9fm{;6_BBdOh>B_@!; z{JDG7UtIMwpzXpT%5h_9#g3GX|9eJLqwWlY5CQs*FwP$IC zKOO8xT(Yime;iBhy)jaWf;MNL>To!Rdlgke7B~WohVYk zzg-djOHvZxsl&-W$BWYLDgEB0FU`QY8JRa2;z5O}Z~Cgyo}{5?t-Pfx@N|vo`sYsv zyC_TZR8yo&yse9v5WI`Yu*M^YJtHM z(~Qw6mW|k63rRJ7Y!z7z=1CaLzb_h*>#C9WO{cuWuA!l;;X)Y90OJQG#1a(SU*+N{N1oAZc{?YbGa996m6oKrmJ z@Jpv%eoNzbL7frCMOA?e8dzPf7cV-ll*w9km&Y zgUGsH#;c&y2yI`?gPf`H8bZ!CBjPP*3ghke$zh~^eQ(Vm+}mgqQmO`?M0+pvQS|4k zy%iK(1o9F3!N!<(c%w=8(e1y4*4^@D#8Czs_23C#T4reg;MrrQnRkhEQ_HOKuMY)6 z5x4jU%`tWDQ010P;oreqVJjAm{~&3Sy^*)t_A4ykb~f_9UBr^#nlq-j>lzcEr1QLea%}3 zwQVc#p^tlh*rH8skR_w}%37|ZMn^!uUbU9*_h;OP($>*WFV-V(X={opo-9FkdHDWJ$J{qvjyW2nOH^&_ICEmPF@ zM^eyDr?@cXeAHqO8Ju~;Yv&6<;>b|movEMK@wS||@xh$kGmwBCc+8)GVqh~VgLZl3 zv{dmaSbxyMg#O|QQS{VU5eHI%zTjh1oP2cP2a1hff&cV#ysOP{Zsy|6=|L!&gEwUq zeF0Qz_WDNCK}{3M0gE(ePKr;hSAz`kTZpO(_9-@!-T=XwSiH8i+wCbOPuCHyeJB z>B3oi3Uzg9FhTiGycyuQ>xn|8SIUHHby3$-SU}^MP>Lnk)SkIXY=aa+Sh~>!-2*mIVX+-jm1umj(- zzCsgp7i^>Tp$M1nhr}AUyglgv?ZteXm#>)X%Y-&5*AS&ht$b_kC4E++Q`0t1AcIlN zAI3yKqcFGqE#35#(Nb<{0i-VxdquYHY`=vvtfP*z_K7Jl-Wrj?LBP@krUhFkl%%IW(L1jqP=7Oo zo){8?H>&ZM7p=S4{qRb%SR>7An!>$P6GL8qVUqmCMLH1J9sfn*+k$mLbjYXw8p-^N zwF1#6^WQ}wmV+mm&zs_J5a*)!#DDX1(f=iI{0~US{|B|BzP%pO@i%w+@_i=EjeCe9 zHe8)cx=MY1qdE-K8rMLeaO)`txvJVt8C>Z4$+RmfE4A)EAY7HM+t><*axg>L!k#xd z%o=!KxAx>_O`ufa1SN$Y=&Tf?k~?DULzj;TmUW6IDvF#}qe%Y_*TyoxS~sR%xT##> z+_;OlKKTT@{J>$EHo3d#;INayKJkaO7U}V}s?v2j9*!`Xj@zDf!qDbGWwtzvL$?)h zJuFZRfm!74kBO4mxbW_ltwt5C>>xDIz@{0lgbbOqzGQ=pFM*$ z{3)p@)3?#Hn9KKPPPYRR09ecBz8902c$gm<;Y{&^z8sR=RyjU_qZ~|gwvzeP zdw~|T)vFFUuA!Of3g;y;#n$tBhQ-Ox@n_ymx>Q9rBX7AqOcfY?=XR`Mwzt|oZ7&(G zma6Tw1R4QF_V_5;xe;`#iX7d?d!Tj-FVokXs6S|*F`a5K(!SkrX zAkhiT{ks5$2*b?9{&M`+z2&^WEyy}8FtB6qh+2}eJ&XV2Tkw2&H-?0W?c+A&f{OJU z;HEZ|^}xo49luiyHg62EnM{ly*Kuzy^+!nG+Z}xUawo_;Bvy<(J~^&{mD__Fd>~t~ zsjrVH_te%ZJmIxY5}m;Pn5NS@*;2cVH#p9#?I&6uXm3q!S-RuRbUVkI$LevCH7URw zoNYzcN4~&MJN+bBd=Nn6kKeyAP|`dIBKb9zxSe(%H6fbd(^7163)9L1nwZd}+5pM> z@EzE}Qk`UCdHo=2k?HA1Qf&#ssVZ$f0zG2#K{fx!d1{AQnCMfhk15Djk24F@CbUXXVh1N%O{ui0mpHqTTC|e)2xC8o5HWeU%gFVHcqP~JVdvhP^ncZkvlj4 zaV_qXo1Ujd(cU3<=&I`vRm=!KC|pNyANlIA^v)u zHuF`u8MaIW-hPP^&Rv6DPu4A{^aGvk)HNNo?R7O=tGeNM<8?!AJ@~4>JOi#6_jbpm zaeF4PKUX`|60a#@{X?To&gs7(U;v0ty{1G*j6$%a{)cig_!Bb+6ulH z<0F4H#^=^!x0plwtf$Q_L!^%6aim`;y$ts}L|h}ORfR!ly#(wO6A-p0TAoBM;hpvhkn@dq%1 z?@`~*&hFzE;`yjR6#mglh78{NScr7Wz~@}MKjS`{ROGu4ha;mi$7o^wci$P6-`{_J z2WoU4>>9A&{IT%1eafB_94DyJ9MpE3v-_L|I2P;R_UJ%b-^N*=6R0>x7)&yAPR3?# zUFF_SjSVjuD!nnFxt%3NmnbC@Kl(GqPGZd=ZD!+WVufA&^CMdQ2YjJP6HPfOG*ubG zAjHVwKY_0Qe^EMB-J_5O|L_@vLi<@ECVpIv7L<$P51f2li={Vn3UBy z#~?j8(Swk)hxNDERVpC^W#^c}KYG@{;%3Z*BqKri&U0xoHBEhx9?mye77a>dn+;v~ zGDO>hbtruuUZ{RgDf0~&QfPKZs{~Wv5iC*BB|xq2JD}bQj2J>|Y;Qpu9KRw&9RjhF zl$&D%2m83)w@z8P-Mab}0aLk~ypLkzNz9T`cOVP8sEUlapPpeOl zkGk%#(tZ+o zTKj;yJEkup9yQ+&-p)Irv$yYUS$ftwdGy$$@y*`idwf=(?mz8@9U7*rDVhXxDR{gw zct$6@y1uC#W9a=3lR%KDqJgdXMKNZ3-WgYZGwgTHms_NVt|zKrXOfq?o7p?Uvw99p zymCi++%pQ)*nHYcVaO!gWqu zTk`scxUrwP{^Qu)1J3kv5+dG_l|&tQ6Mpk*vT`8NdJ^IAbD9Y3aFE$^UW~Z9H2VyS z4GIYc-A{*Z%B#z*-`7O03g=ZR#fGpIJ!wuD5R^GBY@V}iLLqU9v*~)}nlj;#+N8Tm zKhsg$DqemV!YO*J^>_K+x8ZCdtYHs>te-bjW(lhfeQRSN?39Bk86Y7|IDLP)^nSF$ zkzt!^>>V&72}%k&sJFue`?3Sp|3L!O#cc-nyuwlbLrr5pmt7+_#;z zq*LVwT552VS{O%n&TT9Oja|%BFDxLJ#5mKoU4<*R)R|R%ov6jFeO<~H*wU| zB$X+lEQz%&p>y>GEoHkiXItigY_vpHGbHl(K55e}79M$)$ zL}DM>3Zukfc{YX@_R=h9lT&`TL?GJ|pYhv6-hG1LxF)f(#1UKf{oki7ZGtC72TZO5$-iUf-1Tlr21p(LXq0diDiRs745 zeWI18C;yL9{4X$;mN#2BocFA`2=rJr>%?}d+Y5dE1$CGVq1J%>|67sqA2k{O){p<0 zb=EGK|6kM3oc($C?^o#%LJKMaqN2Cweu5AE4qpOVmED7^5D9_RdlLmRVw2kt0f}i$ zgGA@$vWa3JlIUw8F@=qz75YP6`j8V8-hsGIb86lJ+aF#Y%U*qAGJAmA;+mI<%f^Lo zqiZcCu9-uk41~wt0{K?daV1YW=P$pisgta19L3ujHb*d%>8F81%&%g%V0oK)SPRyY zZ`u7!N{4vhnR8hB`DOKI&9Y|XsSF+h@0>_TQBmi`6XKtQvD1RLPE0YGlJ~Tr-9vat zf9}M+ zmfAVtkR66+^pWbRqltFfE<4Y4nkaSoa<+!%YnNWvJIY7~=A&?Dc;=1a_ik19&2LpU zK4Yh;zKmFQlF3PffBQ+3E}Iictq=hvqw=LEp=tW_m$t%sh^yWazBjb~uVbP@*nJP) zh{M-=;k~73MFr6)K6i4CRI>t`ngtuJA)pnp$Cr%m?PQO$F;*3*1mlxD0_i~~ z*sSqx1;#zJ$e4D?7lEij-#aoY-FTMRQkpidYn^f6|7c1P0Cgf1#aV=*d!2fV4^IKJBA6?rzuFj$wq4kHmZh(%qvy51}nHBiWP2d=kq9Bq8|D%d!s=^ZN- zD1H9pU{1i+g;hO@i{#XZ`uk?L?OWIUm2Erzlsi_df5G7}**2{)vH7dK(RqHvEnm%KiJGBNvL*lYvKfjdg^40DNW9EaC%td(0|zYndM&8asZkI-@|qjuT@G<~wH!W5swM%ir^@{ANW@1kk5%4ptHj4YhxBv878K zdDwn+%8lSazCLag0=_t|a+b2!;%&A8L7V|`~**-A0QsO8B9 zH>+${aq4ECP;v>=HaFO&VH74jTcb;O2GqZX7I^!#h3?~V`;g$Jn}(+u<<_uxaPfhb zQ}e=-0i#-m`F-m=Hoe3836&4|K>+DNW=WiH<>F8YB9KVUPMPUO;>kTanfy8lS=*08 zik4t`uAyavuwxE%0}@qlnFdD!$Esnp8qSPg_UsBnUSlLduSwfBK-l#0_C`5R7bOMB}QO*FMH|(N1xgKhC#JVES!B%oCQiWinyf>AI-w4ryt!(g%~l(Jb5QRgj7k_kqZGFnUF$b#v_W zaPommYc0zbj;=uBTJQ-Vp{L!Y76Q~HUzE*1d^1xmzPZpOH^`d_Tv?;A&Pk_vG5 zEq$!VXO$79y7^OkcC;Tw%Pi=h61(-qY8eANec!1=_$gh z#Sar|j?EWx)1};|e5VRGYi@zNmKa($x97c|-F)uQ^fz%}u+U}SGsQ6z+9DmO!rW_< zEAx}^S37pNQN=qaHe`E2@McRj z5!*b_?2l6EqAatUzRn~E8A>9mfHX5Kr7sh4+v-+2Uz2H_spja;TG(m!T;eOE8$wIR zNTpDqT;CJkZO)PFihn4+xs9u`6%oq}Qu9h1pid=jyaoo zf#y{dRYCvJMJ4l=4gs^2)4U7WgG>O8QGOm8AIxF^hlyK#b05fwZj&q$=#;(Ib_FjVG$g~)mS&2K446L(32NA!$l8;wt z<5tR3*NDC!KfMrW&)i>q9V6>$C1)UI{NMydTy==*SUm5kzlt|5);?e}4>Qi=u_tr2 zbd&W=K!s^5jd z;gf`&l75b)>;-j2i8X|iq3tIMJ;U0}m*cQRD`up-e0dJHb^?)%^YM)5Hk$N5k$4WW zJC3W!AudJnJ{Lzu2=P$wN+x1+Y&VNR#`Cs9NL@zgW1A)xYElR)CG`N&$!+3$P^G{{ zx_K1J$E1;3B(pSO#>ZTMD{wuB!$wT$c8zBj+dFZ&7v6nhSm+>(kw0O|Vmj>;#XCXM z?J2^ey9yWVf~}-A0r?!}c@G7)4NEq58Q0o{-y(}4k8?-QTxga=Y|>ELYF%2x2BIC0 z>Eg^A2nL9X<8Q<`_LN(2f8}L0yj}{PS%6Dik{zS%MZ0H>u#(7yFUC5bvTzk>%V5)< zg*f@{W_Yf9h}>3`+xXm;7RPBYFVQvVM4Fb@6Iy=yx+NCx;(8FhOEtkEc$fTyeL+-i zQ{d04ug|I`7NQ-7@1;xh%bcpEwqF)$fC%cf)tyGp7k~$K3vUGLxA`+R=1o|p$ysL@ z-qkX4qn7P^Q_dYrVqK2_v9zavj@72qV638+ONr0hB7Y&neJ;`qg~?vjP5e-Js8pza z(==0Kn$8lSRe!MC>}@ArXzudVX!UP{4dY3-e~>Vqw9ijEB24T=fm+i$92>f1Y2V1h zWksXzgPC*N`~l7rs0L3G=V7g`BM#H>o)LmCP8Ykn;X4wAV%p%f{dY$2EXBE^G|fDf zckuiZYR zPg73pytIidq{NCfbP6MtWCrcN>CfI2Xhe9P{>?A_^>7;-=BC|J1Okp8Y$ z#3rv#;N7yp5Z#m+7@O*mi|o=+?U(Fc8BUw3%1>q|l|93ANra;@;vb}=lz))+2dWO6 z62kSw9&m%|0Rk6_20adM%bb6DypO)v*GcGZ_K9*B@z`E#pQ7~$I*$#Z*XDteS{t|eauw$?`fP4Sm=k75H@y*Os zCF9=U{e#pjnQHaT+)UfedoO`~zL(~mnCJ#bW?O`94!W|eUl|*+la8zzohXm7+ox7v z136FVRa&9>EEgfyK4sCC+((vSmh;{5*YA|r@}=PT&`E9JX5ibNs)^Fo_bX%JrN+m% z^Jz<-B^%-Dr0<5k1{uK8zr9q%MYWn|Z?HcdY0jRS=vy^4zRowr5XF0k^hcF>wKVIq z=)SXvD9g(j4~cQ%Beip~^AK+E{fz3y82#gBNBDM2ZM1f}3<-yVBwy`M4Tm-uJ-8)>!KMH@OBpa}x4y@Cfk+-Y8b`oil1ixeMD zdR<7>s4NoR$fA}b#Ws*R&u6cjmFI2Trmf;buUYkDT1-rwARc$t>!Wocs=pLS8Pn`9 z;=Kk4mn(0uGTM2ggefy!eUS#k->9;B%gxCm2e#fds31x&uTrdVMR=^1P|R zy02A#(`qYNtOvEfhw?uw>2%Dv>%UKWmHgw2h5Hi3wCoMK!d9{><2tfy4>b`r)hxe$ zjJV>d68oo3rG~$$W*<`Ir7ho*c-kXp`>XN`PItGb2|LD0P*1zFD|KrN&Z&)wJ+!sO z#xIUYX=#0&FY&G%Bk2~=D!wr5BZhD_LEQ%3w$KU`he$1A@M^nWrM{6G8W^=hI5qO6 zLG3^1@rTHu)rIW|mJ(Jn#>f+nzo2|)xcUoTc{+1jnOcoA(}c+a{e71+!STG~zLUkp zArI7n8{e^P0z~q9^&m08)t7x+PvWmd$;~l3X0$A{TAgC%N%N8hR{&>k5d3pDvGzQK z^LL{2V2{pXnHD=dOSd08^3Pjakp z(!nu{^tw2QIBO5gyfe{Qs zcM{;a_Fz2*CAKSKU>CT$9GuRFq_#jKzjOZ|`>^F=xk$?mJ>G zxzf$~QH!`=-3yj)WaW{zBv<*DygIsT;n6^j1J0`Y=g)v&V?bBO`cy`fV69j0WJM7D zz!l_j5hhSS=}J2+XFiBXfqrGzZ5XvW(JNz|CPqX!@B8Ng{cjym2`am0i41X=97(kK z6uaI>NnfJ&8#Byn5*_)5aLI1Hl4$i4h8b$ReIsFzKHXheMhw^Z z#=s@fVqiCNu|k0z%y2ZFK>zUJM{{gkBWn+9Ds4V$T(LCSM7xZF$%g2{jVLSVTkk_d zAyo=7B)GLvBe}(uE>1e}S#>WZeKf*lub1ZjU8~YRNX8?1&xEtvkQZ`D4P558SK9QZ zSE~Y{027r=v3+mVV7|bfL!VYZ_c)J>!UW`Sj@vd<^CYbQi{RH*-1rt<#q0p|8Za*U z;wqeasR!S{fV~K>i+s3o^^1)B1nHjj1Ysd7rYL3VSp?!FhUuq#?v{xUaAYc(cmB?+ za!K)VT6xPK7RNP>y>%r;((B!-}3gA zA#uz45)Bqyt{;EjRTWsWY<)*pf3mZo>j#mrJ!LFsh<%GYX!dD-V>YKF+}_RPk1eCk zJpGYs^Qftv78MemQ%~BUv1`kM$vOPZM}6I<*&DkPCH0wO3V?4p3UewdYU&r6H^Rc( z)N)Njqs?d&B6F>RCPjWk&{j>GJ;VuJ4rpfKjQ$(Soy?NU=L&CT!v6L*JIhgROuATj^gX>3&DYY1OZZoCrc*TyK}@pyZoZUk4KJ2PmT zrS_h)192VLhf;j;jd7s#KMnZliZ<~+rCZPC=^gljA!F%#LrwJNDqLk_eL-4A3TF~& zi}Xg^8$^RQ#u?M6*WTWN?^PQnXI4@rD1K^Bg;8ZD65{qh}6^ffFaxz6#p z^zp_`3Fk{nGxdi0TJ-?>N9FUSBA3ObmE{4>Bu)v_l6e=xZ9(QLf7|cTG?#eia?cTn z>CPl$RZNc$Wu|az+L1=b%<1Whk#1Es5*HT=eNdT1D07pTiQnhn(x8c=5ofmA9Dy57 zGt7jHpIk_LkWpJlP@lglLp`+MA}~r!+j|oi`>>tB=EO!@L&{cYwHzNTxE>6t&lGHJkF4eHKQ1aqQ=! z%!M9SZe!<98C$|%Zzg}Fd`t4?(4*;8&cNkkWohL#Vk2E$#n-+G9?I;SnWsQ7ReyX|$N09;k(IryK|4PB;w z`Bz5PT>L%ZzV{Vi+47Xmt`%k`T{@o#KY5b0DO*|s@KyMG^KWHvr`m8Qa*4eCy7ODW zYd-vmrr4GSWgyZaZ3A4PPZ1Mi*HJHI=ZYo&RTjBBAzchdff?jsMBSdHadG#<9jgGl zZ!PTU{xvB@MuFKw=Am0PhVDT-av)}(v(v33kiRygb{ClLp{i`|D72YZ;-xsRI?I=} zzn4)2t)D89E&8CPn!Zbm)A8Y80F0yEDBw-=LyV&6@cS#vIrrDQd1@iBOFMly*lmlY~~C-;mboE z+KA-fpq|>yC1Bn1!cSvv5L$Kab9v#OuAjhJ@&c>^JZ7)U+J}fiCU1smV`&XkiYP0L z12MO$bH?pz+6Mhti+c+FfHTLS_o*O)FR@*O$t0KBV>GnP%nmM6%yA2p#@c_hQ=j;u zg{>E-;7z5E?pRr5>wkQ_=mK9-IGD6aMd??SFtf{&$kcfTxU0AQ2d=jdSA^;#)d?d*{?mF8p=9e7P`s z$4`wW>iVOfpg%@r6=VBsbs_W=wEe}-I<{=UO(96O8?kP9Ug0b}hDY7YQOFqMwj7jY{b4bQ`x!iMQHgoL^b7Ckj>=Mi~z#DJ&)dwt{ z2COfdLpq}t0mf2D$*$u8r5|)|hKFMe>eGAc_U(54n<*@s?W;#>f0gac)3?5`2dZ6^ zKsIt%=3e#`AdOS9bw0P|Yza*vuV*7grR-AR#q_~1d}wI9lTa?!_++J}Y>)wB_Xu*_yq2&Pk@nvpXi|Mkv`0og zfS&grg7Xc56h8v0sy4LOri_6bW0eTA~7a%O2n09`|< zM73}EfoG=Ks?=Sdkxq#m@=u=N%M;-)>b$6t-#XW}tbI>{RYz$wZ#4J_S_=uHJl2gFu>^epb}! zTRX^jMyUMDu@vPC(Ppzn&RkrfpW+ONKS%q7SWxgoRU7W7!o+|Mj*PSX*yQ)@$9v64wF=R%R;7@m zPnpG^!`vGJ$S-hm$`%2*(VUzo+ix>}XtxLtZfw9pO)ww~#W(_3R8+UMcED1j)h|Xj z_Cva+b<}Rb{XAK67cN3a+U&(7#23nc_8Fx%3_WTF$6p`Y_455XbNl|v@5?NZKSy~* z?@+KtZdb9`rRvwur;Z~o?%eF_s;rZT(kL;6`PYYC>rACSMm9#hwGqt1l(P`_hBUO^ zlhOU)4A9Hw<4&|auh(9^v3F4&u{Z1Bs0Wov(STMnE$w}2(IN6ca-ge`9#G7$1Z-k6 zYy{+NecJ?l@>itrRf+%`7r-=Jf(n^F46)&>Lyo7Emtx@doc1ZE<}!>`9d2cO%X2tDg;@$tFnz#b-wD!tO{RT0(mpY$xELtw+rlFuAt6Xe|t0Pa^NaTT`J=>O3gKIdhU7a)W-QI4?hokpu8F7 zu;nikYb-HVzeGf}VVfpDC+blc`NFC%IohAB|sR@OQ=ZnTas5Nj18y}hoDwZTd7y4Ah-pjo1=(k|2RK@o!b zt-;;bN`tMk%1njgl^NIo?wqfC~9Z$K%XlC!mDy*Csh$BmM!gp5_V^DH#|qn`mU8O8?#~Tb z5uBpz>&h5Jd@tqYT^W5iqQDqzwi#T=KV(?2&Fb8WGr)o){_zs`=j|cuV5{pNBe*;~ zP&%tO^H;*ROq*(c?MQ$#rS%_W=K^NrsP*-eJHoZs@Fx3KHU88R@SmehiiHu^=9k$y zJ8v_jq_!kvEyHEwbwqGa&MxBPVP@Nth*qj^*^0xXcoD8MQ&$R@u(tE2^ACAoBoK@~ z9WdtTGi9q4a`~|}Wv77XEh}5I=*@Swjofw>AUvMi2r6cM|@;)Ct#4y+%b`9 zIkYZ++|#V=|6%VtprXpMwTqlY6v-+eL6N8gMJ1|aX%K}XmkCKCk|a}r3W69w!4?$| z$*Dw=AUO*v83a_4AUP;WlK;L1_B2(#X=moee@(lbcJ-8(y7!*5&)Hu(ZyjYsl0I}= zacvyc=~a4mzs%S2wCSx{CKvhRTK9zA3XWdnX4SZGKFIhvJGqhHmnd(e?RFuQo)xbC zeo<5VgJi_G0><)HoZ^S~ANyixkn|)ofVn2=;FxebS=d|G*=Sku0oz;GFFGB1*RQ$p zQ2Z?#mHRL2%8rs4e>)e{hbs`(P9Mr?)7CdIHu+G^lbv%jHndJjiG9~3s@3*dzM@U9 ziNx6KzPV?eEaf&%B-d+RkRK##QI+9JHTQtS^{@>23KVZDibBuI#<(V6B-6-{I|8TGX&C0uUDL`rhWXG z`*UP%dTq0?+hgWFuE{W$E5`LpWFoN>?{G6)+fybuB{!sI*k_CldJUaAXx@=WFFV6P z@1fZ=Z6Nhn1q7!WyU)>i)J!m?-*KiyT~b!w+ctgRaMe?Yy5;%lxfAQf74OhoiP%@h zlR3+-rdYn@_$g+F>(hb)(b)(8kgNZYt^aTRcYbXT>yq!x#3KC%0Mri`>?8OOaafwi zCO3{8_q31rvTTFQ-P`-s9->Z;EQl_8fR$5knt&>@07pgZ8|9MYieIho!9? zY4;@e>E+xS*N<5|sV!&!Qn5pyRN(+u&rs&^*HsQa&H1d@c+B9z+gH+rd-9rui!w}w zx+@Re@S-Ni?YOdGdf4;X*+vhB1dZP9wkM__=A?1tpzXV~(>d>Nu=Dw*f4=i_@2dkM zcPp*y6F_HMcd%(mzAsf?C96JVCY5t5-Kl342_i2a#$L0_bTyxIe};NBHu1(5TYAV2 z6ze-c6mrxCt#;5g=<{o_&$b_$*s4ZMWSJcH8V}?vS@vSbjNH5EhgswlZr6mDu1NH! zzxAka+p%wml3de`PkKuf~@^#c7Hu3Nu(s$}m;O@J#QAH}}$-J%p{fZn;o+*)*+Z`+A zj*ITrn+62>#PV~+UY&92Cb?}may~sX;>*WzYkj`F><^!gP5Dk;WV14Xc8k=s-B4tiE*#T+raSo7Sp zv-pjJq;(J}?w(Guz3WI-k*kvEd7($5@jZ2$^j*rd+dOtT#gQbIahMtn)9w5)bu(f3 zM1()N-NKZ=(_|<5VX2%*3sMeSFSrvdM=|Oq#w-nBQk@RA6V`_HkKC zVBpT)9ABkNrFUmXhlSV_#R;N8FvAii7^s`r!#|&Rk{lo*T}KhjOc0bKSKl zUs|q+rx(7^+GUy>e$wLkG4-h=hluW=1+=9SD_z9#sVPp&*o9Bfduc$T7h zG2~)o?djWlf{QyOu5HUcKz600W6)W9esYv>iUf1ro)?p%g%|S8V#++@_64Wb%D$&)DR0me+P&j? z->EXUh)DJ3g2{+f^F)hKXHIF3XSte-7NqJ+UG-8IFR|vV)YaW3tjH&^&1q1u>U#cm*Tg0M+ogBj8^sQ{ zcN(!jlrtR+ItRHA@9Zj^C3OZ)+o6g{!vc3x|7_FyAIYa*8m^rb`TzOBkSemNgRJ{k z_D!~CFg5TOhTYc?ws~AP5S=vEw{7!V%Z2m)c9wlMwg#?G_qEN=PVpT% zkro*Eb^tBY?zP>x@LGzI?DSqM#*s$rJkOflcH|Ez_V2EA*+Bitp^MqoV}I{<2jhkb z855^iI$1$XW`%Wp%2iEia-m!=A2)A_=1*XGBCKJ%1Y; zuQjgP5z!J;`5h%pmQ|o2{dww*27}++WiN{Q%y(klHw+s@KaMwkwsd(Ve&~W-NyibC z-B1OP#SVL391ZS67{SG4g8WZgDt8mA_-> zheYa9@XDEY z)y2hC1x`#lMT*8>UgU4-9rWOJ=nF$`aL`eFx#VC8G;K=*j8@?JD z%3r|=J7K9m)Y@Hq_0)2g)&ulqlUc!jm!U6n70xG-`Z#dMHqXxlyE{D)a^WE;hd8m$VgyrMG#;gw<3$3bW(>29s#L6;n)4s~jdp>jL z>#IJw+`bo3pjgG1j>oGd&zqy0PC2UC3J>HcdyMHh3er?vw7%CY!Rq|OQFH_UG zELdfmjr3Xar!||ann;5v7!A;6XSB$R8ICvdB@n;)u3##^EP9;rB(Mg zymYqz@M_n#2ug}WhbKJ;A}8ZUN*muB6@1EWyCj?(Da>woI6m&u{-7z7H!!Sni#5AH z=rxv=-ZvB(i*Xz9KbL)Mm)^cPf#bTN>3-YNy0Lo)zxHT4>w>)_z-CD$xk6+d$8eWv zUr9w)6s^KLwojkB)6>2L9)JS34ChCyIH$}X(V3$7_<+AMu#M-eRa&9dE5_(M)Qj!p z5m)L@*vLrqMly&#Ioo42#%;M@LS~Y#`qNk8+DFe5OxYD7kT}A@^cu__R+(8b|2L;? zx?h^?8`^M?xz_l%FP~)kecmfeygI*&e7ZNsiHqTlQ{Nk26N4Qrvw9iD)$Jb*s!O(= zOZML6vh*Ib2({B=0I=m~Pv!vCGaiw4>b zG6dv{r4HYZV9tKtBKi2RgY(Wv$&bgsN-bGo9+Es>%ULqo z>zXq=cMGP z=ktr>$M5suDa=j2oSZ3<$6*0c!imDOc6GBiZrr@O=~^2tQ{-7bcK~{< z{b`5!-*o`$FZ>*dCB>Ld>pcGP`))KjF9V{_986Q$An|_N=5ZmP=YT5%x0-FIFXw-@ z7j$RRX;FnNZ>yy#mF{?sZnRsN!TlEPclZ5$W|2BLJ>icz%(QO8O^5G>DOT`E>+gL; zp#S!%S-ZbiH=c&cUTH7?YP)WZtE{ULIJM|o`m+q?Tiz6{o8(;UszkxgzyoLB$^QHM z{80q|{d`u}n7@sm%9nlF+}P40x`_SzvPj6@ck512yOe161GJ zY0WO4b8xgbJ8gsf$@YvD?S5(6J+#OlWMpW?PB@)$biHIoE2d_1+8p`UMMpFHOSTtI zJDSlt+B?C2L0g`4w4jyRvxinp)y&e|!g2M_M{F|`Ye3psM%%9vt~LfhiSzQ zTRJ*uo7o?+wYg+_(d?oltu(EevgHN1D17Y5$)jdxZO_5qIA(Uy9Ih%Y4qruwR!)v~ z?JItN_q`jnNnKe@8AU>hLXp5P)b~!*5fmjk1tkSJB_#zV6%{2l?Iv1U8X8)rjSL$$ zu`;o-u`;o+aBS!2;@HZ&jfI6= zamL=4hL(kujh%yk=PrTWf|64E_Ddf)c;u*(vWlvj`iYaedT4zE!?Wki&YN3US~)m6 zU3PYHb-Qx)nxFsmfWVNu_d>(&|NbC6`e{sTTzo=e(({bWtn8c@xp}2!L2(#I5a%<1uWLHbMxO8kozJ*k*(eq{O{_G5!}~ixGz$2ax!u% zrh`%m53A2;^5`|3b#AR~d7N46Oyk6MWPUqH(+Ko@I)x#`6_Z`-FK!h7U-KOBljjA!E&jl(sU7o>-L4Z#3RMj$R{(d;z7tG63!}2z^-vr&z%RX>mZo}8M zIvAQ%OH!Cy@`KDhMN3qXa9HedI9M3ncYA@t#r8Xj1mvuJEnkdSE$98qpA4T=858Q;?p_&A8SEN2 z?h5*G+3v)pHSk40Cv;4zo!L6TnGV&@xl&&L(=QnX^If&35hR zs;#6)B)0X}Vbzxwa9P+h;K2^ZE&Ij75Zt6qRn%5pxPLj;<80J?6Q)skx{IM8J2Ju8 z@MvSn-pi_=%qXtk+t9tCn|5KiNU9LN>~6Dx`M*-5^3jnN^4 zhJMM?EXLxp;nCTqp`pufT$zG;I@FlF^_193H-5~5AS%MURT)b~E~x$;^-LJEAm{dN z#asTj{LM*qI2SR6mI+3_+-Au|_gp>h!$Pk((rIaSvF~EvdHXNkMhd<|{-PnX6{P(} zV#}NEd4P&O#Gp@Xk@O>gSN>59p;)4Eb$i~bXdAX(s0=&LAP;Ax;35a37^39=|M*-J zj@&9^1$8p{3n*zTmryTZGtAt<32;KtoS$NWR+2=yh^kKB_A4&dP z%quWaPfp_&Nh@G#e8xqN3^H^Yt*A$Y!UNVXn)aCax{UJjT@s&UxPp`0>hjz0*HSO8 zhyl-?jcR81HLpdeSZIfxLGy*E@wI{7g0`<1PS4pn4|S2^5_U?`V;Ayvy1N!h+p&XJ z)569F=nfgA;dTbnS!|98GcXoZ4iq;C=thz7g`)DTR<3p-^&pJ_Id~n-Nd@O* z?}zs$bOnF*GmE?ryk+~zt`&N2IL{pN5U<_t#x86_%J&sj`S~Q2{Qt~Fl4CP-eZRDB zO+FAE(cx&o6SiwZ2=4|z9cgY~Y94Qywq9FrkL~7@ofY@>ytYg(vF@?lZ?7b5ctLO~ zuk@4nom}!w)I3FU$^@_U+nOSJWcM~-YVys- zxH2&=mxFaZIakMQWej@eMNc)_@P_S%GXVRXu94_bJg4UNrRUn>;n_V>=l4-KD`U#s z|1PA@ zkPC;FvOM5_eL1{5)sI9ri?lVTKUQ?cB}j6A>L zI+!=U15_|HMD{VeeE99iZn`^)C|{x2H1x_}59_bEjtQd{M=rk(n^ynCF3TLTWTmYd z=9ea4?(jQvGL*ZIdz(A$H&(b3Y*g&0cCFCE%Fr|MOm#5*x&*R|hXxx6=w>;>+3Wb*XE3}nQ1r(suidJ_$nrvyI$nSge% z6WZbdl&deK;v$FHufK-8q8z(%o$F+0sWbX6oQAic852?~6z019$zg+lPcWFm2SvxC z^0UHQzp%w;Kjt`aCX|ftdKra2CpGsS#WZYBXyz=IK7W_B>xO5>B{3Z;!a7gTH(QzD z1IPnT^ZkcvO1}K;%gIQ8$<+rLWyxVvJKUh$*xs%}_nhrKznU%;JF4#;`USSMYEpiA zqbaO2B{5t}x-Q>QV~UCT^Ap7fy&iPCciJ*q9k;T3|H|@dP0n4u!@Eyb>xh>Nm@B?y zt0j4_O;wqd6YY{w?na;7G3d5}i|ah}V09|OA(n@qu@{rcm1Yt=sC21UCk?3>AepQB0f9cx8g4bucr~aB3Rfp@7|509g!oMY>iKz zw?10bjB~8Dewh3+nL0My)s){n_`|)h^Jml`tue&;&$WYXzz^ZvD( zbnq2Zy5+Ov%3*tURbyltn}{%JQ(gCJbNiSawY0D4Vy5hGi<-Hfh5{W%hy1U#Z;)V& zNnCwk)kTx($Zqb){Q&t%OIT!?F}mybfVjW}vQb<+RudVGPV`z;EPD9S_$m9=gnj@r z8jtS@lJSAj`1zt;*sfgMDP(Lxao^$r#ohOX{CxNq+`IS{we!i}QKu8J(?^*nrb(D% zGg&S_>u4`yVyWk;Vmi)!@+OioQVhKn^BaP_0ZdoS4KCO`z%KBVQP=XOX_9Zrrag;1 z7U6mYQ@eDs+9YeYtG7!&IH!*Tfem`gVKP*4PogDKZPS47gCidbA66!SDp959WN zt1s1kn`pHfiT8Obc5?G~^_18pq1zByQU4H{3+56yceR0d6(t;uT=1+JkY|l-KrLa3 zWLBX1Z@Y}t6ByZL;WJIh$PP|4j%J6E{cgZXK|%O%y7VhDx!&vqvYw)jiKC5~Tmc7d z(){D}hqCKpDtML5FWz~2ApDg6H57g=np{{Qn{7oFvRGK}#Fn{aJ)j-nip9`;M|}!& z*}qbpjak?sl$3_g%dF2#Q1kAR)UGm-l% z*VX0zyrpk|_CU=X+54#`D0yf{1l@4UKJa)NCbg+L z;4nxO^S4yEQ}sx=Qz^L9ryq;dt-l(Js*(0AMx@0r1uBd&amojv+ ztMYzcVXm#GZ03S{hhTfOguf;4Db@4GgLX^|VGaWoraRBI;$sR&;S{^b&(EOTmzk?Q z#O8fsJyh#Or93x+!O222ydi9AvvFSZUT&d1mD`+W(h9w4*Y|8~k6rv{Lnkj^!4119 z4Lt0n%555t%?yq9g+?z|=i~#$N@(>`G>vAxCvmr?le?%bIlOW<#^OpBbW?J)%b&$$ zBnGh8R6~6yze7`bi9sDT-wLBF5c?@{xM-H*KHO`G%940IEWJW7jj3T<71X8(r5WS( zmLsK5Y^prFZNX-Am-;P{?coMj(`p6I@NK^N^0XbeC!~iJs9HmbhVcvrdKRQE2*Ey$ z0j4--nowmSQ{nQ{8U1`rx2sKxWT${~D4$`OVrLn zHf0NQWbbx8dMbtH8TazgvCKt-i~aiEqOUkub|`Y2qx$&J*Rh0ei7Pv2DddgNO4)Jj zV8BRk(n4Ehp-}qr)9Hl#9o;Tz7o>!C`z7<`m8NL_9&E@HReA1E&M|*BGSt_4PN5a{ z6IEQ(%&@^Hhpk?v1zF4bW*A-6_L`G+%H;NFPpn1{!!{)cY@+FFC;k407PG5Ihtnx` z9%28G$0}XI#v2jkh_vAF?4r=HC~-2Z$SQzy#~4>}8%lvVQVJ$kuDf+i&L&ghr%t$f zSjV*#w4HDi)yZHe{frX6628`~>v!ZRFRM1f9r&oqjLS%9h!Bq>o>+4zG zzuy0auJ7ZXu74z4>*}?@d^#LWl2Hl$L;=(b1_iG0OsE1(NX;PpYWV6%Fi=rkEb>tO zYgdYMiWYW^;7jbEt99Ez>d#6_;CIxzGKKEA_p`;JNYP8cgK6?}`Ax4bbeouyi|DB= zBPF8)XHN>GjndF>#bYpiu+s{affZH}16!@5TubM@WeL}y_21IEtm7odMxQuK7F(fC z%h_~*X6~4TNYc`6LcN7wPsts`?Bh5qizbq=!0hTwo>9LU}r;!2tr*#THfD`BUuaxOw7Gwp;rsMKgHzo$KF|iU` z-Ykp!SSC66v5b;*p1j5{3Vl21VqfZIIHE-phDn4|_WH{f2#`TUUJJ4+gjoTK2CKqR zMPyZ2{|*yi{ldn2?5`J~Q<2_7_~E5@;!)JZi0Km| z=(`z(?DN+_NYCb&jVgNQNf~E_#)Dm5!Ui4R32uwM{WkCc)=F0#OnF0ZkX;cWik~R%X8;Zv% z`?4=pP-If4S1_qE^D42?MqPq_jRNI>`Ohl-sN<+C7hbCmZ+5Y z%4Yk=bjFXzf~liVv$>LOdh+<~`#xbU2L&#U253bl(~u?Vur1OAqM@d4!9-%W*hFQ_ z-|ek6l0M_xL2o!N9UVX#W04{K;|XgJG9j>MhxIp99%-(upt(|s^}1L8Lu5-ekOO-q zK`&&l)H1Ph+f5F^4^9A%?3YqB?S>xY?*dfQ)k&)5^VKDJ+1KNZ8p3%Ogufix_5%`@ znxZQ)Wp2nP>ow6*ooo#_ooHZrfB(Lm%h{WiBpG9lz2Z5TAXrnpsTj}(ZK~MgupklQ z2&P?&JP4FBSN>SN&A4sGbFD)cJNJOOyxzN5V)G+LiE#_Ekt9TY2RsIBKlrs^`@w;1 zKPE7-Qg2M=sY=@JpD;0X(JK4;{_Pmw^V+!5I^OhG=lSgc8qq{~Ssee_10@>1^;83? z%rk9c&OP!QE#&DlJ5w1HkiNbp`etm#^INRv_PkaPN!ln*QuPcMj3=4Mh&JNuHV%V? z6K4J16y_db`-QHXAu4>RMV&$+f~MC>Pc#Rba;*JzUISa|4_ymMw z`uHBXhohD%esyO5TBZ1gCfEggChF(yy1H~A>Vs^nKOSs*vi6|(7-N#I1bN$y3R!u} z5q@`h*kP|L+MgFtM7704*S=`o##1Qi51Ntzc7p`_Vt8sqNP)M!q8Gc%VoB>NzSvvG zP~t#&*K%9BM&e-rvju3MiQEB<(K?ohW`LULEe}QUEcB=TVhCZ;$gm=aOn#V%Pild% zkc1suAnuJJ>?V@`8sGhguE*MIdmBteKqiD`dkIf2%}EUHx2s?>yazMyaJQg$J6{Nj zv`8)iAyd~ksTgEABxDm%gyjiV8i2b97WF~0xXek0AX|~sc^Q+D*LP(Jm3q4^-> z=;=E(hr4~LxdTO)$ojS-^p4D~UTTpjW#9~&&I2BIE`#v}3Z=HQND*H@{@|gGuiv|P z%S%}wIocp);x;tqC@a3GlY3NLQt$GFL=q{<8Kx~kcO=GzI7@%Yf#9aoA18FYD#o`va~2lSs;+uWjRX2$JD z4wO$mu*?K#D^)ocg9meO>ei|ij^-IGz4c`do3MBr2PbEz)56*%jOr<04n6lyN}>@~ zMUiTH7J*5U3t`g^ASwgOJJ_j{1b8NlF4XeD2B25o;2#-QwK?thhMUZfM;#7EakK2u ze{{|#(#{BOk6@#;sN=o&uaL=BEUZz;mc1Vk4Gu+wcBv^Mnv`09hxN+Etq0QnZV&nE zZMA-0*9{q{DEw);xFLY=qk_-m7eMLdgQb8h$X8<2+KR9kDsbr%La2_}_xG3@mN}VA zp6LAT2A@uO4}Ku40HZ*T?!QL3IgQ%*_oz!?E(r?3x;vlwmaM>K=GDv*3OVIu@k0?* z1=&+OV_D+2zYYtRNp=-K$`g9*8n5tSKgX@~Vc$5&2>ER-xdAszoby^dRN0*Nk zHeEC!zro!9vUK$79X3ipZ-N#%>V5?tAb>mn@-4mast*4c8nvX>oR;FbTVo3zISc@4G4})1XHUJjj4fDCXxl1!h}Pe@O^n%{a0L(vuDv{#0>%e zHS_9c4k6(G?@ui+j57lGe@s0jCaC+$Z97vgkU>%@ixq+PtJX6$_%Gk3*Y`6ysx`ihO!5 zbl-pvkd1d|H-f4N8tO7ZpeKC`fs`u_fGzkN&qO7Z$4JadJty}~FpABGc33in3SaeAkgil1Qchh|a6wnO=}uggyeV(w4@bRu3bq<0oYB`Y zXf6-xKX-;n!dI2NPns&$qhvk2eH&@rPAFG0 z4}O#qblC5b8tRcbY8od6Vyu&(kE1|1I3L*kPXP(H{z-%`oKWE6pBE~<-<9E)EOukb zP9$sPp*v0E(;F)1!%ho5uVD)yKYQ_=u{qzTTL*(Xh){h(xEM9V(7_7qz}ob&^`yw; za08r+XLU5_t<9dFOv-<>lqGn99!nDEw<3wxV-1bPH+=*>*5*ft)Ig6V9(0-ktNvv{ zfNYEijK@V3SzxYnpv!M_7$8{5^y>R_xxPBX4gB`>6{Wg*GNI6IrqrO^+8#A8rqC!R z*|kabZDf2W;D3rVt2q0;ZRfU~qy5Gbh*}t_gg{W-m8=Phkp-oQhrQ&8Lh6QUxc&}m z9N&egbjG_u!H>u=JPkkPRDK44{@O6>hw)1=lrdJv71#=?8{_LeSfeaiZ*O@&wBT6~ zle(Foz3=A9P(HGtD?vUgH>VS4@L%>}`Tc`_k#?3_)K!&Sc|ngx4kwzUT3dcHeE*MD zvtO;sH@a^MdQz3RQ3ktA{dm=k$0MX$)N~Z2tEH=%v(}#zL-IxJ=694OhHX$zvTgc? z?EbO|8^{r536^|z%p~LhyW$ysGHEht()6DovxrvcPbjASJz@na8X4joOUP1mKTkQ= z48Ii3S+&}!!a%*Lz#nru=)l+zhLw=gfHAMWW@g*#VVhJ3!xz&s+PEvXX?pR-i!g0< ziK?x8Hjq%UlS%UwDiJF-7k;8+>fp*~t1QA-`SIX1152dJ7j$Gj(t&x+t4(9cc6Ot? z8@e92Fyieh7<{~Cjvy4~m8>x=p2FP3|MrO!LSar`MF-ach54KKZ{nI~thzFwTZ8Io zI$xyPEQM4@))t#HdErQPJeH8gBE_%4O-{N|!uKHT{A-r<|5`p+aAekPzO7e2fK#%d zQL0viht5KB4#3|)CHoORD-sdj4X5jD)#nR|dJ`@yP*9@Kgec1LZX6*zO%l*Ersqk8 zX_CUrP!|)@dJPl>>bClkcmoY*P7Z<;VA=YB3q{sGS6KUI5Y!Uo=3l{psGNhNjD|S+ z!-6R?Sv6J_y)D~+yj@ew>X0KD=j6nTNC!F22b+Ul7T7%f)Ky5?f{BGkTf$qyTgX~% zIZ8&iuRyP^l%p^*`bgZ!*PWqGA}Qi2ub4)8E+1~(vw`^)xvxafmBvD+G#mkVgz|*F z+=fI@ZO|g^7%7PK`XsTiY;(b~jnKH)<>%kHgI2nm3rY?`&EbHW<6&5lAV$iI8WcE5 ze(h>skx6tOM`eK*^2%zIGdRQ#&9T}EXOzO+Yxh3Ivo=z3jq95d{MP)}sJCC@R9vwH zQsCnRgxybdr`h?N@sRygoKK9YWg*uO4#gJ;eAOiNySv#-q^qUAia22rz+*j8@t>#1 zUSNe`4$^MbNt1D0n$bJJLZW5^vn__Nu}HsTWdHrMsQUu?bBkv(ULhb1>ToHsmFvFV zvMYs3Q$>gpo2oK=Wo=|FAMS138AfyCxeBj<@X;u9P<)^fB{sok1XPV2IB4E!0e>c| z`;MvtK^dVS|Jw?zjby*}xn+vwh(d0wB1Rcj*mQ=??lCS&kX_{-Zov-h{DIntmC&J? zZbVWU@&>(9rUT&jb)l}oKLp{?fdZ)LztrszcgNb~IbI;9>ThmCM}WX{PU5AS@bjT( z8P%iq1_8#1X7V_;^aW_jXprq|i80rbCb5i%s6Wz%2|%E!l>z`Fi}K;wZY|W%LZr`V zYX1I2jl?P&{*SjA+h0$y#hzt%DGiAY-uS*xkm0l`w2}n9l`j4Qu?W~av|#QtVS@*o zs~q^_ZVMt{bL@#7s0#gUN9XR|cEIpJSoRC}i!{i@FENI{sOc%cC^oDoM?Sgn zNt{dXY-gFF_jXt_rar3M9LUc|ekW1TVB5t?@tDh!B-6THo=cijb3qqY_~xIt z)>TAsuYuY(bROtP8a$%V-U_?{3f)QEX(Cwo#Z&nR7LJ$XdK!+a#s-w}U2i(DA?6Z* zdP*qAA_foZ-c)mdW16I}j3dqqHskR&HcpmKSm9@NTWXS~@+3CZ)Tjz7k~7jHa17y# z_%=5Qp&{}Ca$EB9!v#d5T2lG&lI9!YjIXs&C>p-D!Ciz6uQt`~m1Yi`+deX6@xxwJ z&$A~##)`&o&%Ey@qhT&lekL@?tdCYb?C2qfpaj`#2oONW1@q&83sh4|_&udNjU99D zt=nkb1@N;81Ex_*=w3^7aCAn&EqMB`={BYOCazHT0^nz|aZLLbqZX$LzmCw>+{7*` z^zLL0j#}4CUk^t4F*336;X&Zpg>Uy~kAnIZkwk{BVJgFo)#;|DRUnBx{X?nNMkI+u zIq5Qg$Yc%6F#LFgX}0Mp2s5M31+$$>CMzLlq?R-^E^)P{Z+X<9WphwCSYwNy+Gamc z2LrycS*M;#i1=}Wu1u>eoWALU1?-;U-siD_$WWl?@?k|m^#ti^D$dgEWO<|3=~T)V z(N*BVd2>q6eHvPcJF43HK95N4MlHw=7b-2MEgAI6QuY4!(E7>9LgB*;3&(UM^_-s{ z4jQoZIm7Jz7R5fxJnc{TV$jt^Ss!y^t-BZ<0o6Z|-kf?@EpT7h+n$|Dc9P|Zf~s$+ zrRSJPJ|jcTZk^82c1d;;ea$HnHE(^QWl1U;GmOqN%X-uDq2;R18yOs9M)i1&hQwaJ zbP&l)eH+0<6>Z1|*|WUg$1Pd;@Zh^aKb?6?Kel;I*2+>1nsG^zMr8UB)C)q!hp1j0 zCz|aiQN(43@G^!Ry8u$dnaHO31EdyOvtw;Ik&~7St>Ug$-Ul$mYJ39j(E5lGGLE*! zWVJ~x^J?ZgG76*br>_E1r|j-1d)_pMds?rnMIlo>+qbS)>xRgM9@HUZJ9^toUT^BwnYfvB81(QC_} zNh)osAx$Pdubk8&L;55W>+r|79$pv+Dnyi#$(;KKUR6(d&Ev+R$vn_Z4CRmawH*PP zX`V<@bAAqps1 z?f(U-4Qz)AjRhodYT~+=83^k5z4=*qbv*Z~aYAGt0O?RE=zvo26-t^n>*iu>Us9WV zjF60qfCXfMeq8jSIMA9qgv--VC`Pp?hI;i$#I~Y#J{0hogre!AGZQntTv;Cjl15hR zQ?k3U7z_GpVEGSDS!$M*HttEQV8<>O_&r#6aH*QH0%7ZLKn_%|k0npX#J zEOB^+qd{y&=!1C2!0`BR>F)Cp=m3LH&Sv}%eh<+{B=Ji#xO$AAsobPfWSK2Z$45}y zPOgdHhqaR{M`%e?=*~eYhoOEtCyS9E3_lKY!g;Aku`Srwk0sQ4A+k9vE%O@sfL+b)0-(^;h z#k_3jwXW7VE}U{!jO`Sg(38$bJwD^eU;al;21C~2^JX@(tB>=DFc@(51=lhqtlCki z?%-*@zsn!a`u_@K_Y*8dflIytqkuF)>#$4nd4EK-dnL-stzaOwXD+*G%3H#G?*RE%gM`NPr6e$k)+*wR)+Y)1`DSUa6wAeDi^ z^2A8T%7Yk#d^Lvz6QxxUYny2kXV^~j881|X?T8`<;h>Mg9{aqv9G0jp z$7>1ytWIu8-8GAyLiwOKDiy-7xUPiPC7a#Z?BZc>G};wpxy zML|M29HFk(6oUv3K~;I1q8$+&;wWBo_#%QsjwedD5W(Rs`#umHddy&~R=|s;A%$6_ z*8q7uH!d)F5Ys-=hXGaNyy%>2n{bxvxOp?@nBiN2c2Y^Z1oF&4hkJ;&ZghcI+M!D* zJ$8*tU6h|su5wGAxG{b6$WedIwgFGQR-wdLgOJ_tY65%CLJjd&;4_!r1>a^w$=&}t z_B@Vl@E~P;@<%IEE_WNbR-;_K-2mu#Z@KB zpLL@yc)1{71^`sgnu`{AXy+DCgn_FMZ<#6NwdPZO(}0siUP4zDMGb8C=S zwDShv`vIDTPBGw}=nBo#H{R?o8?s3-tX(r%gU~=c_|cZ2D+-)MCL+AscAdzZi3F%U zL=leuHODtW36iaXeK=7rpB@G zFT2^xGDCKwQUdWZTab$pS*X3`nxoS_{zaE}6nzrmcCH^o=r1?M{x$TezzNtVXe>dq zPpf%nm{YIml#v#FScFsQKMCoQz)t2kpXYlTGZ@EiEE_kW0X-G{$7l-TOYl_iB zo%$X4ni6ecs?UVf6rGdLQ4l9B&710qBY^+3sge+b_1}^Zpx_NNP`IQm&fab@oAkfM zll`pe!jpq3_JhL>$IO)VeedqLW78?|=+ri!I&F8%f0iDal)(8m^A-C`v_mdt6Cy)y z%cR#@ix0S#k{yz%eGIQ&Uj-&5NqVO70)KqI0fo$gDc%xiu=ThnuOW!`l?lhs-t^h= z6fgZ%;F3iT5!kW55b48lk_b!5?6O4{&r%NFwag>0!?TpB5*1`@z)}X%F)OH{Hhe}o zMlmE1_BTjj2U2CEgED>%Q9ayhq-H3vb7LY8Gr!uspzcTKIR1me{t!#I0uUno%;HVV zk(~610e8JjvwW3v)Ng}SX=@zrZC|!-Ce98(27V!+8ieTOPd}N4Uhkl=aN*UBG@Uf{ zN&d(On-KiaRJe)`kvhY~h^IBoiFgW7mVw-nsLpxlnm(Bxf|3OuN6_g+!LxD3H+2aU#65WS4Ht~H2KVS~#reB& zYbIj3yG)3>Yt2M?O2V7c^BT(2iNM7%h^Q6UOO+R~|Hz$0G1M9U(}GXT!G8_kJPE=I z0-0HT>r4UKG*2Vd;RJN?$H}cl`paGqdx!jhFzY~LjTa^S$FU$!2~0-oMYv>N^?qa) z5vumk1F4R!5pq*E5z#v2E0C|+jIB;Ua>X8Ig$n>blPGXSMG^?t;mEg%n;yC;^PqMx zJdf)&x%eHWSknh^b=5W9uY88xK#f9`+gA~n154@p@C$D_UBW&?Pc#70 z9q-q2dNRnN{Lp^ztmTE#r`OtP$P)#l@BsiF(7}FVoqaiFetmk?dy5-hu*n$OtJ+}j z@fEGagE)%odSucl^LJp|BSiJ_#;d=1f$k-yjhpA^g%2YM5RW_5%tC8rZdI*8QVEE- zd5)od%hATHiGYKE8^`Gn>%EGpMO^E5d0vEXVxxpZ34<2HQIiWqMGD#x0@HIF>?N`& zV?DdIxbU3BMUVY)wQ(v4Cn01|`sINca1u4X6~`$@&1tDlgPM+rR3(5D{vmI?1=-iu zz-5a0huvIM221;<%vvHr&kj9|=KEj`mWQ8v}ooX zOy_M90am00Cv;q@FbvIm4y*9Gj$O!avTxk|32(KYWW7Cay=Y~ovBOBw+?qc1(OyLx zQeitKMheviWzvLg$Url0Ba(;z`dj$PjJE!S`30Lcyg?%IH6}c($ykW!Z%YBOF~ow^=_3C^sZ|v%y=8b&fD>Lto1LAPnOB5Y(dxQ< zV83o=#>dRzTpf&j@7DIlI3@fA`{#&J8t+#gIoRO1grBeLtO8Czb#A|TcH zH}k|l<>(Q_1Y|dT^nfv#`bZqYweC7^JAQNxlRbdwx}ymk117pCFKdAK*As1ShypsU z%VkT|f?s^!4WUT-q31&(Mv&!xwDnScoc{01oC?t4JLDWFz5A}MUAKFk2x|~rw*-pT zLd*EOAKZXy_)+(#1C1DPP>GEVY;Uw#8z9$MoBw(`LpyX_rPzhghn_8 zE!&Y#t8Vf_MQ99qksxDFTD# zAy_q;fyORx1JZ$H03jHAOtu!w;R(jUFpki$2de}l(+NevqX@xBnvy~-r~p|wN>lr* zK5opPw*m8xJY>lrgA14t5p@NljQD z-Axz}kQ*-me+kQ@H*DJa_%v(-P@(~I#@cOXGG0_2hq25N^;HV|@&ULv z)eU4QJagj}O<<%Ogr0pURR$FQwfYxRmUi{hjKwQK3Q*H|-~i8w-+2MAk0&>rsB$Q9 zZSnxVEHKlSYn3lceP@|%_;{5sOFu%cCW!E5q)7>U>D(w9sab%u2z2N_dBxKs2!km# z5|1Pw@va&NoYPky!WsPWWH$f2@c}Olz+GAnmMRc}%@|Vc5fW+PSo$jc_~6M7#WR$b zXsXh23_o*)AUo2T0wGh_#{sqZ_*U$N@MFg_vz=+gg#zOE)pV3EDOSBe{wgie!-6tP zC_MJ&pMPj0`?<`P#jw3hc+L8uYVhguwPIbe5H)U;(ANnt^#RzY32+T9AcVcv({X{Q zC2*kqMN|*u;zcoRS`LQcqzJ2;;YhgI>_hv7%;&=Bu!&VJc$MD3*#dexkhTOY=Ap#Y zwS1?`YZPX4cQR=^$ml6^F#&}@V61-C`3!Jg)x~^(h!!jDjOsBu?>&ABU=ICPy~P^K0j_9w~(9s z(sFb>E-T+pU-T4mlVA->EYVw~3}y}zChn1AHl&>b4_?oq@LQ7Z4s!0?o zMAOR`c3$hUh49+;c*DQsV8Pa~E^-26rA-B_b=TD;6`Y3}lFmbh{y|&Us0ABq?iEx| zWG|uO?9D&&vmr51$Zn(snPjDxbMDk4yPX*O3PFgbI<27V^9doBhAd!EuE_x9+?Stt z(YoC3Rk1XoD%Aj5jp4MoJxTrT|8kO@zD!k~vJ2EZ8olHnbbB5qOdNi3v_0#XKUO$8hT z3dnFl)TJP}vugeel-RP6F$vy-wP+Q0X#eFRK*eQW{dRi{g2Ak1tE?q5c--j2wkKB} zoVzKtY+9#-xWzfHRlL^_{z`Q+MEOT{Od9$Z!ecyN5hiQ=EAGXgtTw+?9VKOKW3?b* z5@Iqx;u9u8Kdl1^lUslAIe4`yfutS4QPelF5>tp*c_d}vf$0md!A*C*`z>^v;UUQk z8j~>Xa#h}~mrMH&?BcU)zSTyEhbJIJcbFwuPH%weUkk&mP1VdP1(eVjS5gH~LS(fz zr{mfWOD6KPvPb`36Vw<+x|h2%`y6}q0jgV9zY@!@O$ju11uI~ZgfT_%z3ZkJMq5C3 zhlI1d(Lj{L9ktGa6*7QLA1)WzOY(>;C>Udp79#T5SwQ_3YL;WgQxi8y`_T0hj@Lz^ z@~oAOUY&zTgCJG9ts72PVGX|!H*Y9#FB3%F{Hu-xNO$;!=>ld=Ry@gc)2k0a=`19= z!x|EOpF(s;pn?$Zw*D$x!|8>eg(GsFo;rf(m_}w7Kn0B?XC!?{HmHE)3};XtGkq2S z|)|KoO|UsX|DL0X6`gp{CQR-7G5FYoM?(kuRut4|z~`Pm{ z`H(4*3YzcZ&&kc5P+`Hp+56|j!o3raqNaqLXcR-U7K7C@>ki5X$?Y+Tz^_yQ?1+L$ z3s9l+O7lwZ%mnU6YhCyNbVf+%%#Yt**7$Dp&wJ;*qIDr5Gd0>ICjO=0QP(+eWu9Iz zE5=66b0b<(*=;wslS({gBz^vd&y}MX8zE9_b{hBOXK6&plSSg81nJ!o;;SlDB#X|# zhTr1)D##A_Pak*dwV!Cc@ekQIV%u8M$T&{+^=vBQe!Aep-T?l%)u@q3xH>X?Xk8pu zpXvR){M9ItN9jpS=*wWJ!ar0u&!7AV(=M2Y5L<=JLnO8e5xT1at4l#~9i+(SC_VUI z$WTYT8Zgv@5wFI380x;OdU0y$YW5Q5FJgoUc?)4eg}3aHUVpr+pQYmX1IcwDm#+&Lw!w z%7JhV_T>V6kIp?h7hV_by>DrAtRl{(37k`$C$pQS=-kx|dC2hL-m1LPyVxlU^N>Xm zHd+)&{;1C;>{R$SB&dlX&w}cA2;JG;Q|Gs^TnYZdVdzAxTEUN5S-tr&nC+wv)NEYI z8k#_&+M7Zb7wfQ#u1vIrQh23DyttLZ4>y$CaHM8QTi_%wz;%n3r%ao#dzJ=hYhjUM~k z#v!b44!uUDh3!)a8Z7rtPkgKGJOhV!1){z(1ajetLre|?qkk}^`&~q@LGP`83$4&g z(j&@M2OPQ@Ux4X_AVdlWdGQiUvayO$h^6KH7bMh>IYx6gMLRE`TdTKM510Qz^Z(P( zxEt;#*%5~eIl=Y#i-NuzzY+j_`&Sfy_j_4ydLX1!dEWWpUXxW)O4KIRM#Q!kA*DbW zuXM)X!F3V^fC~{S=a*pmuQ)=DBhGd?7=j!SC3P$kA%a&@1LP5=14?QORc!->wblluB>1iB!WYFV~W&ArK8D*mL}N$*mSX*=66zk$Nd4*#)s* zkH$cr@f$0mxRWb5>%(O&tx_!a$f;hk$|6QAl6kA zcJU||BqBKO9g;fX72oYHgioEY>r``oT8^Yn?AEU|-2;8@ksRroEAP;+i3muH3XO{QgZb1@Eus{}Y|EUV8Q%gxTp%qj{rh!5>G zQ*B@lIDej-0u`c4>MaM3FhX_`FuwLJ6%o8`g?z($c>_hsKbRzUzUs7{S1Cz;Uk%~i zfp`YiCw+|IbCVF-2%npjhNq3xklds#2yJu*a+64bHhTO1Gp*KHppA|jR@OYMd!nIssgdpD%S_{P9s zZ0m&GF`-}|gIb?whieS~g}Cz6R9mCQ%&jL8&(8LJ?eCSJe>CP3c&qpWzD&UoYTKj8 z{yHD5qXBSH(=7K@(?sxV806+KMrI$OnL-|i`J4bf=G#noH z*ZC9LRJxES0trPp6aLm*NGJ-e;l62>{~WwDP)7Rrao;x!yE7C)Y|A>o44Ka`;P-;HMzaBHjh!({bR;eVuEj`%n1(5O)t0?r?!6 z22}nUi9?(mt1AD2f!6WXQoPFl0iTL4sQgLUHYuV4=ZTyJW6;X{`rIr;rY1p{JL(tb zCdLH(GtVLFNo6ege*=d$39uLM;;byp!#A?)`p`Bc(&{G*EE3KH z!CkA)2vAfYbeQE@b{BFIfeyT_&tO`nJIx&+2HPEGox%?$UJqG6|I8i1T0>CgBw@89u;4kMoh3e+ zXyP3sNT69we}u}}kk?wkL9QLdv93@`5-pb~2fh0e?H`VSi{_be@dzZ~^ux%562e_nW88c+PokfVaRT~C1KI^R}I64Tj-tcBO35D$#0?za}@nr&{EyB|Z9Kmey zz;i7;+!;d2P-}(^X25?5@1A6)Z8RWtIB%}ZMt#J%c_IrOZ?P~-U${QjJ^~|)ag}NJ z^ceYdccIiMvi<@h`{xk#?Yhj&v9DRfo_#QQ1CF-nRc8^fS-~YhXfTWXfh7Hev6j&pF$UOJTQjdhtw`GNQRPd@mo%LqE+RZ1Ip_z@$dSV5 zbSD@=ZfAEEaDwE^sprR` zZ)+wsIJpYjDNqnVYC`vj1n?-YdxRzc92U0+C=IS*#4HR)8#%KeW?}wLslL2b(YoG& z+FKtpNxsb}d4g`5FoFk+9uNpSjK~C$Kv+a3s0*0@&L9(nK-i>J(fVyfp26Vt#uQOd zN}w~E^Wgv{e8hCdYfw#qql%Z6H($P_(jL zkRg?!G8L6X`F}p&wRPKT?W28$`@6s2|J;}Byzbqy_u6Z%@A^KU=XpO+?Gv^hGS%v5 zWV#y@`gW-eMCn1K?8w^&zYPrgBHH1#{5_ z?Q%B{l#5|^tU&m&Vo9^q#}+}ldP(V)G<$t=Ru{r9ouKEbiE&$jLbc~W&jY<|{X3E5 zgN??xf&Rc!L1D*-+d@=K$hHs_lPK60I)Gv_3ATkt`%Wt_44$0D^cwJ#xCPnBnt+`r zWZ8i=;Q>4T6H{p2(XHy6;%g=Sppkh_XMya&(4s#87#^|`I~$$K`_!mx-qz#Slv^!H zr?~Sh&S}g$6RC71@6u>46>N5A#T-ZKz1&X%oFJg%@YJD$3zI(3!G(e!@sJb24?X1e zo21mn2Ct0Jeg(#&WDt{bWwk4^LQq2dc<I?YYaqQ5 z+UQ`M&xG~8s+Ch|wnmTf;`*SF=fq>IVzbAyJ9>=WEjfL`W31c#S^tgKrXov1P;8Es zJM=1%;e)o183ZgCpH^@I`^LPSlMzM7ZUCOYyN7NMT}h|98HuPezz4+eLD9&!gc9FB z4AdMFqM%wQ9Jz=ZkYJGDG!TbVatW8j_=~{*06b3WfS`HbNIE_vihjL$M|6Mz@~B4E|8Qr2l@Tu&m?XZ7NvLWj)Yj#fqAm7;t(0A~R=)Ck?yPxK&{Mdu$p zdN;1S1_v7s2P`;@5&qME$GvJ>3(Rl*=3Q`ItmJpl zJ=TAy|IB*qmZkr}nFoflOo60D0iLb2A$dYKzsc42NHok$sojuSIep*6O-1RePJz)H z`7t26uY{e3H%mS&eO|sL&7omH5G>nBzU+lG=+P$H6vO z!{ZR6H&O^Z`xT6ItgkigDvYlW+NpWrbkV6}6Kz(yy*@K_v8ltfo@%?_J{}wXtUKqL z^#;tCJu?8%+xIZmZvZj%h7z z81HsFJ0rwoF{OM-`H~{%Fa$oNgYkwa5W0B76O0Gf)59Sq=P^0qe{jMhasr%XQpS>Mm+|Et6>3a(>ZdO$i z&tf)k^2y{-07wLbVTMmb`!&W4Nv8^l8In#F5;L3*ohm0VW(b`sYGUSjx^o=i!Ji2Z z;?&zR$BYn0Q=TXAIXqzvshgK`h|X(d!gCCn*lF(AJ$T|6wGkc|*dS|27CKn)E|R@t zMCy(nH_c+o0;Y_D)n*Uy-r6TH!G=FE_3%bO{V@^^&Z^Lg0%KlmMZq!eNoYk0fiZ8? zAQQl9RB04Q1t_KebrBuXxHjA}1Pj8|{O4$-0=lH99l?{?mStI=680|JRn|_Yi|;^f z&(?8GJrn*IbvkLp74EXFC&v7e_xSYTysm#tZV<<{g;9Bn>9DJ?f*aB^NwbKTR`=e( z3J#x0!{ggL2EFA_01Ll_(Un_#lA3|u(OAg$LLcb@Oi(Rog)*1v2J7q4fiKRnE$#sP zW!|mk`gcNu$S<3p@9G0wk;2QX#ZLiO1O!Xy(j%>d#;PZa8BfE{QPaXb`AxV-lD@-J zt=_0LCRy`g;{74K@BD`@#6lM;Z@tr1`J*0Z8wrhJaBNL^_oP^$$W%;ny1p3B7so=n zp6;I7@Jn?j5}~r_<`SfI0LfM;ogFQrc(ZOV`YM3uHo-7#P|A)V4_S-Pmtu_WHROvw zdDQGZYu^t$Us%o>Xm@VYbKM)qrtXQ93_Buw|BhmhD;Jr1&k2gbKF2zM4&;m%-!b$j z?_;ccLU&AX?7;B<%7)*RhKJ56?s_tZ6TEQ73bXtRSY-0waQh46!t-Jebx(E$!z?=O z;`xoFm{BM=JRK)Jj+f;O&B6+@w~P(d z!xBWwY$zV-b2|tec6)LGwEG%T4iev_Y5TpTkc_$GzhF_@){6-v@g-81#yJbjq4HYP zH+*bigdH2;zNg47<)NN7A;o_jf_BA$?L5zp=xGyZ)q}pOf(=bsOUGX3Dd}%g-wg!k zyBC8h7mPKlAC(SnB#(9DO3p{6zrWhOr^cz1D(a_Y5@M-X@ac3O7;`v5e+ph=PQrjbPfhg2ft z-jQI>oPXB)N+d1&HVKNRTg*n**w_J~e-ECZMKQ}_a8DCV^Y;>C+}!E3p7*q`2tg=(n` z7&+H=ehU1+4vl!VCpsd~#Fs9I6qC)D(`b zje`AdN+SAm5L2l?!OU|On8#$yiNDW#Tjqz3X$(7HRV<)f zYFB(S+X`}v(B}o0l849 z0UUFIFibw`3kgR|sVU@GpS?Gdgw!g-+%(N1A*8m@HZnxg4D`SS#Iw;0{uzFt|e~QyAPq$`k~5E>U9U`nQDh#hr~l zTY1r zb~>Ku(1iu5Inv~dsW}K+=ps4%iKe~7dSM}$?f%! zrd_$8qo;{<>q4spTqb(UJLz5^NsKcB#cVvd7Fbmxq)CM7GADg7bH9_ru`XqLOxc($ zIRvv+-1e(DPrz)@ND`fjU^a+pgen7=Z5#5Kl-`d7U}{;m;H6WUz2XM_b<)ScE|SZ z*(L9lv3(oqas0xP$w1B8h_$`#9X`MKTQ!#w?^70E3H3+^0PqZ=p*xyRxH0fa#yk20 zF<1S-b2)E|PjFZI%!Z3R{4xdp8aI_?v;!4qBwCze4dZVP+b_SfpLjTjs{+7w3tqlG z%j&^RcKi`Nh%kF#vY125dpbjU?kaNAvz@g+Z@?5dAmqOR#A<+<}m z{3tHDqKicMONqvmgPttOhZ53LN&vzF>@33l|0p7DUy<{VFzBlL0>7_)4;)x{yfm$K ztl2qV*f?i|6%N_EJM6uIm3{DR-5D!ny%^6;7)9^sPo!9ICef>7XO=_??suyx*7$<> zPJwd2O+^ySj}OaDyd>|@G<_QY5G^A`1E12^IjEo%d8FDreIv~yR2yU}Kej}w4KUzW z0o7(BGT@!dne+j1;1BczXh;tLNs#WstqLF~yv6RqpVTkzISbu|tZ;!(0%QC(l_MonpQ)&4@UXYWO)f=LOs7H1kg@{ zPsj=bmfmdxyJ2?&T1NGy>36fe|Bv5_TtC$^XM<3b&TQn2_9#!44!hVj;Ysr}vwIEZ zsgK263zJ+jHrws53<)>8V`nNE7ON2~wK{kr_rZT3VcjCKW*)PVd9dBs4-2ZlJn2OL zw->s#V(}Kf@&bwTbvmj`d3yrM$zLT6w8>cvbu&x*5x9HC4V!FOR z4DzR=U|gCG`wv}!jX^SGz6#2xa%_nEhyj>w^vRP$UKirTV4{*%)VK` zy8thn#WV1-MQ<13#~=+>we6>JWMC%CwGBZZo;3RKVC<_67Kv@FjoAtId+GFtB*}tF zxqoSL4B(*~c33=@zYb8HYowi!zj;kFR&E&r#`ke4o`-9qCVHK_03hvj8YLXt{VC_r zB1bq4`WJ(f?z^q2+V$fv8TL4bEQmy-uFZi+#<-v!HF6w=v%#D_AKFrTF0d^}Pos~1 z(#!3W0anxF?oCBvXgr{_&D!Vin9m^?k__FD|mQ3-BT%^ahz!1bUNl?4jY$1bTx^DqzY(hsf+HJCI4mOwy!5 zrFGf6D}m_pu1R+s7(!g$SNmDIx}eMZmv3qz+yzUSc(`V?Aq$8o$jnY{3Ib-f=lbra z`DA21KYbvud`+ORFD&fsi*8s)iGokhID+O6({v+&M18FX!5A*i{Rav5d=M^hne>E79#{MZP5qLz84>$?r|4^OK@&1bDg{;wV17K5%_*T=f!`c0SCDTmipUi`@td;%xndZ6a}l|4 zg%t66`HK^rJj^)YB0`+}?+D^p#NAQSXVBhF*VTee6#aG4YfLnQ4_9MULtn@afl(H* z8{1p)Pnf%+AV`c=57{0*0__hQ*L-vwcszg)>fb_RsEC-ZbjVR<2#~i+=fGvKuZ-r& zr-NBjzMFh3>7+F77sSM`@fKjOU?P9qF&o-HXE|c8;FkTx5~G3BK2%ww>JcPMnB*1m z=Kx*uWn58`&u!h$vn~WU;{0LVrU%_e2VWX3tt{bszd$GlX9wfkLwy#C4aoF? z=5~GRopq!2gub@wfM)4A_a@8vc~#D`7&&{={*ij??cOilYC3$s%nbWY-K)nhQC>JH z?9)cZ_24GH_eiRKC%S00ctf9xeR%5uxinrqV6jdm!z4d!DjC*vJpKCZCVn+xV+v;h}L>!X7gNAyFQy`hnHMNmDu zj~Pt{Ont4>3IZ*0Blytx{59)aSGj2Ts?QPZI#46lEe48~nGTG-9G%>U`%z~*TYJYH zbvC@LR?##+GH-^G5!PuOM7H}5KFkB|*w7wRuDZd27feYZ zl&dp@RjGd6jWQgXLO%sUPYS&TlTigy=jF)CV)+++Ws2P2@bRsFXJ)KBKE72n@O`2& z&~T*o4Ko3peU=lkT9`4E8IK3Y;=lj86(YbDoK=lg8GE7>+!6`UMU3FlW0G!IB*1@ zJnQ$hhIj`xOoJ|o0H3O$GVbNFkD-mN>iM&9f1?rrCbJRpKrkI=WxvgwIKiBH7AdUV?(Y?#Ge#1Eb8)*Zos=^|mHkNOw2FCMrC33m7BGLnF{R@Jk`HlA zy`fbqY{=w0u)#4E#z0Gy;s<3oV8Qp#+|~hIGr;HREw~7^r)O^E5%v>hX1DB z;`C=Wr@uE_F92wWA-$_N1NZd3w*U=+cEA2V!bqe4((X^gs4~&n!T<1;EwA9d(()0G zwsXBYI-zm8AOXT`V!H*_NDxjO=mD!Gd;BHZsg3w3BmFG6Wz2(H#^#iu2EWo_yj9qJ z0SFBA;l7B+qSI0F*nI(p>1UZP6(>am_kKha?^3$uPP0c~^{^Oy1816|t1SakKv2-WY6q_ps+uG2)+N(pwXP)_-aMoEpd)K zjh7JWIKQ0@_egnt9t|sacpq3biJ;dH24V{6^)7@}0QX3SArZznb9qW^Q>L&NGJ!x@ zwroovpoRV>(H_T8;p=eH==#&q$t%x63af{%)CyDo?ZVde58f3)0C)kG z&C0~;wM}Dbip18}1X@B{qKWJd&uB^&*O>~drREFchY zBx@64&#kV=4t_!&JiarLJ$HP9NqI@u2GFA!(ShvJm*oKTLBNf7?0l>y zfl}^|v)0~TuLz-B;5ml*Hs) zQv8jmGvUU3pc}aWAAop}j5mKA73WE;waFj{bd#r&E4!-%wh>^cl8aV@BWMm(F)l z+YL(1GBy#tWHSanWw8tJATTJAbp3W-4-x1Ma1zGjfXV}_a1HC~x z=zi~yAU8~b2as9os^0Z|;&|J0ePzBp4eS^dKUQOFj--8WY@5`-#pf<#H7V9e(pljG zJu$V7|Uor565K1x?g~gO^WqLil(*Tw*${ zs#9RLYdm0l?!#Ynh?(w=+wt><>`?7m@rSzJ9e!);{MPu?kNd3Pa07NY11^n0u6yo7 zN#`FLyD24EMh0686bB|uf>GK>aKpE~naqTv3~lo-(Ti{Q%ch$1?v!{Y=67ulrDgv$ z4*=Ps%&&?}UIzDkhJZm&1CR`9*fH*Tqx(|&P@<4LRy;g(>}yZBaR`pe zfG{2_XW6{zX^N7kp;7&)<8i*8PTBXoeJ1_-tJCjJU0pW&#@H?0Gr(rEopqOmQ1+nJ z><6!Pdty{qay+rw(+T>2(k6NSn)rKS*TtK=MA*9SdAwKB*2;XbF{R)M1P{Sj*j~oE z4ud&HyJO&FTJ;6GjxrnMV7 zuEDzg3~A1!jj|&VL(sMiX=st@>6NNyVTb^>{WR?btA8N2{V1ABKCL^P+R*l=+@${o zp>0t0><=7r8o2|C=urO2izsreh24bo2AF_=SrnV3XV-oJvnU_Uyl)mZN$>u~umH0t z#bu@kgP5^Z;KY%529)OV=MF)DpyAo!`)e{-usf$qcX4{2n`H{yUyE$UIg{aJ`HRlT zMKm7>q3Lj$jlS+O7={p`+V8J0pGvGaf&kZSeelgOm&gKXMv08}8w+75)V>+z__iNw z@~fU>_bk4cxf33(+D~yd?&dj$CoN(kzfueBvm5-O*NzH2UiO`S=TdFKj*AR_X$G7< z%+rjvl|Wq6rXl6C*wwGp(U&QQU{t|OJG=RoTVO>JM7Xi1(H(W3I9gz&eRi%angbOzNXWe&VT8daG3^)D1bGgv76roJGE{E z9?@0YKw4S-3<#8IK@2c8k!V%EK#3QRU@DQt=LpqrTEOBv0+`Bc6IMPf$u?vmv?1`k zehW6TA=UFC-{^r*ZE!UPv1$rdXI9pSF3(rspBkXJ2w!6oe-4o{~1{Mrd zs(%vcS0OuiPDw>kS~JfgEvmL}lwy?6n86bq`flp}G=gJrhf~8FO-`2oz-yVa10gQb z6M>?Uz>OvSKZ?>)8PL^~LMeekLirPSu4i0Ze%tW6A&IV)tvsu{L+-8V`m=3DSc$u% zYnYTmMyy*=@8LgDX3BYHublUxJ|Sqjtj%ULDg_%Bqe|8JY4W#UR)C~~r*8xMfYBAc5)T-dHiR(sUwpUjtVpRA<{Z3y=oZL-i-XDROrNLJ921*9(Cf1K#Po zG%c3aiGk5AmX(1BCAgw5Zy*RIP=#d;5uxM@g#aq;&dclUj+M!;5Y>gK8G`DP2RgJ5 zqPpq;HIwsAB=!sFaI(Ef7i1rhY23Uz@7B$yvKuyZ9_Dji1h-(&R-py?Ce0l`WMw(S zDR(UdX4-2f@4aH&X&^$*Iyl51jw-G1sE_o~A=XAcpQ&h!?tW|aK5&*p4y0JnD{MRv z{JrWTwcWl-U{x_258PgM(cW7MA6lgWBq*%w#ssrX-v}@l4FO+K1l*}D zEnH|sc7~^fs|~#i+}{Dyt2%kX(jCT{k()=qOpg!f#y-!UW1cc{3b*ajS@2af!{aRl z({Ba<1)GI0b);N)3b&uby`I?5dH3}FrdX0_gXua2VzgaxX*4}qaxMn|xnR8FRXO_` z5RFc=UKkUayQO&x^nRi*7-w-)YoU8uZL0S5=Uc7J4gN6rLmv?6jD0nb!C?A~5$N`l zi(4~`S`X#)Wa{$t_mOmIDG|tfLWlOMF=~AKZ%j5k>#f8R5;RIqhGwM=P;bRTg~b9p z3nvsaL*K#B_emb#SwGW83$3xY2#h(?5GuikVNd{gS@%77tvx0ETHDod1j8?Wg}$fE zHT!6pQ!5lvkPuy0m>POxwyycL3#R})#jt56C%|)ZP-kY&|C?WRwKFQIlMS{zi(mpR z;<2c&3m}Mc15>gLFBOvx`_Ept=6qCvLs<@yK(W+sdI*@if)k`s0JTYN&lO_6P+ET- zG$uMDhLYepC#6Q*9QA8AQWF`8b$EJ?0PrkXXZ0B3t2uQ9GfDbTPhNK!L=?s~@BmmHfeH{#d5D3K0?T_Y3*iEWetM zjg?gA<(nNy|4*N|L&Ro0-D&MjOzq8u~jsW zTIjqgHJ9PUs!L{}pmU=0m-lHsO~d$@}0fXrRrQ8vcy3-vl)Z z-9O881gw7pt^con|N212W%<(8YgV}|^1^@fUhE+=euB(s8T^;YlVx<~`7Bb_>RmCLGW-d-!bm%A)qBV!<=GsFEy_@VH!X*SbcmUu6P zKkF(~+i|4?5aQqw3Y2}vnQ2`MQ_ zDQRh`E;8~mGF`jMDE5%+F5gG7Z{I$Oy?d(+&{S3FH@JWA-fAP%1`ioJZ1^x`)sdq| zYK_*^8m5Imgd;62Ez?D&myAp=EtTFXT7UVUua~HvT{sP#262u$CDxN8-jnk+mr{lI zDaj%K;4K0F;fRUD`<3njELM0ynmi@O5f>Me5SNsckbwU;0RDeUqNk+7pfM&=z2+{G zR$r;88?xtcm%&rdTvoEaTcAzjbxRR55HSgN>KW-G>D=IE2z5k%BqO$7Q^A|6xYijG?e`siI`q=!b z1wR*u5~n{F{I}50)e}CKn1qD5gfxCGj@UZ<;5{WI2aS8+txp;?a~jeIiEK3M4A`ef}N>_4BYi~`6ge0kzMDI==o7`oT~ z$G_xazEW;HGLf&c90}A%$UYvLV+lo0ajrcI&Emw)YURnVZA{S-vbkblqv6z)W(@A< zvaAlpA6hYI`hWN9nxLhH^r267Cy~|Z^i#2`V%YN%Gl;Ct=$jMsB(ec#-ir9_R~+=Z zn@-!V(5xc%_X(9B*#y~`2O%TZW6gvdTS@O}XAagHF+COwaJZ#HqKw&>RWZ-?PQ^{d z^u@2}(j}cMT0@}WDhwjOdk*vp-w3R4Av78}gz2hzWJBoIh3}3zp-CHmcDDPLK9n-P z25v$dgVc8dTl|+Pt#q)n&Y5|p0`p^ zz*vz}wA(J739A0|>SYVnIWhI z4K2uM_Qjr1k>rb6Nd;17hzdTfU349)JXCoIp3igstn`fGj}Zzf=d^UIy9rq{8lwg? zQ_?#OY@7w-uy=T>!?yVlG5UFd4$Cvb81Oj#we|+4{bCn0wa8BFk%2OZ#JzAt6Z)G` zGfZfhu|NAZjQ!n&*qIj2_tJT#kDT+<5oXG-PfnDN^~;0_hUynzNkj0y8wH@>coAPl>`ThC-qPq$THE z?gqKsgX181*cdSGLBlU`Zl~TY-K2c$UVAts7YEZ-ZCiApV6-r(Z8(2t-#*U85x;6Y z$SU7w=BajK30alh{UX%<(%}$NTS4PziumEX-dNkM=RXV5W+{e{oGHnNv>C$r-WnX) zZp|+;@23%A42i?sY-W1Kxg6X(@L50R9>gJhBQ^r<$07VuXap*N2_?OGdOWdA7F~Jj!411I6Wq`KxhftR1y}z)mPGZ@-{AD}5k_z>d@ifJV4HRqgxW zi+SBaehq_4S{&}Vb?JiPWQtNSPbsjV@=F?KK`DzROwP~nfrS|m34x0v**RX_iT==ixRl*K_3aE3nOjOecLX@lObvNT{;Tc81AZra3`K?iQP0+;m1R zgRBv><;(z-kuglepg>V?qvCH)d79EmAgx#9m!;uET8d?b?^hi~XXT~0A?yC*bp>M#?``HdNLBO0wWar zh>#JAeMAz-2!%c(4Pb=!U)uA~5@Tf{MNTZw9(XYsX9#jPLGbJ0-0v%OIZpM9Ev3p* z2LD?>25h+CE%U@6@2eIdwryPs>&_Cot|gbWk(I^DZT?DmX7;iu2-K)KPm6JeKP%EI z5#D0?IDi~sSUxs>`vOnU?-W_wt~dg$i}CmgZV3U)61~QeDvc=L@oksR^I8UJF-*_M z#O;8+H0;wT;gcNDaw}%d<*pD71 z%U=_e5?#S!C4Ky^sqdDpLGCtybzHApMJU!>;C%{%+~j1Mds&>T+njRz)oKq%iDB^zEIqr=>UL9X z>%rZrVHQzSP1O1?QCpLgEf~c(DJbKC#A`GHGA;Uj+P21k12`=RPF2ll zZtLbFU#YvjO0U{bbFpXW>G7>?8g6}5vbOle@wsD`>KA;bFE+Nnzof^cmeNHy=L7$@ z3`WJpAk|s zYhj0lz1pktNbE>u+=QDkZIRcAk4v>JG)vZCm6gXt`ZnJQL5)LB`ow=L9cWD;JkeqP%aNAx>O9@B3GKx z6YaP~;S=7}7^_Yt03@bQpmi7vs>|+n{PKHU69h;ReH1?#dCdv=u>~AfdpO z%$)278x|db#)FtFXgsK#xkG0ST~1B9pDXvw&-g?vV5n~DyQGKT1~9ekoy(ijR*+2^ zwezAJXKZna<3~65nB5r=2e(c-+l5D7STYjgoI9Yx0lgulfSPcq#2`3a%%8sNanf+c z$#esUB?^P`B@$hB1n9E*I&E7+GuwpC#{sTqkC$~j93na40#85|Xn>dxld_g_2p*jT zhyuVPjAyDlMXU^VfpmTY4B~MZ&wQlKBCiIP)$k1|ts$UE+^yr5?d7l{+n?GXnw6IQ z>|_nENfP!BGxK>y1=7s?8Il_2p_}|E zsTEZI=@fa~t}}vFc%SZ=!amHC^H-`^;CjhWrKmAT)@@%)jbDVY0_NR3kH@(W4K#(K>g&6bZr! zUH2*eVQN^bq$s7IDftN^`l$(ZFqtc8smDcF@M?{PlZIu`#^-1T0_5MvA`0vL*_Kot zZI|g0mGNT#l9Nt@w*m8L&3>gz5RCwYu<}QJxLg^Q2|W(+P(|G4w&hrZhia>K`Ku~k z*+%QEx}m!oTE|}cm~Pnbp3A+#7b5P>j67Ab{)e+CcgMMyEIzSu?buD?r&H8~oK&sD zm;&T8yN+kn@X$2rk0XlJ_xnIsz^y zQAR<{PiXo{R1mtTKd%5Zbs%-U1Wn!X0RR)ByfN-E~a&JR!xVU*jMwh5Gj|H4lkSn+wms||M0Q3Mda#z_NUs`SfIAPOif z<@Wl)A|j5|)HtgGkGzHPAexczJWyah&9(gx`V6-pP)`dRzbHpq;gE`n3Qv!?4jVrx zNnElh+~D0SXC6!9&~F09BkUsu0}i14GNh3ICtmlV{BG|v(spogwS@tkhu`| zzqom@#UTLdgv2>dp0oORO%wEsPNxx3bOr6e@qpnc$a!p{CIqr!5Z&1UHJ80Gy5nRc ztnR`2u!t=J6zu#NKr7OfBCtCG`AsCU;J-`f_&+0zv(|~il00RZJziICzU$vOV{EDzBz0cdtqU{Gk zJK>M*!7QLaiMq}GM|BW=v${YNvVWgg_ddIN@mXa(kAjx! zl@jd2Lb#ftNN&HmB3Z`daaN`|Cy&>pk_np7J4Syb1!AQrF25SajH6oo20MB3yT~=i zffg`d5a6y`ad52!FOW?0&oDNC$Kfjd7t!f&IF%`49_d-~g?g{`2rH$qQvsnfsHqyV2+_}`~xwvv9UDNXjuy4 z8VmIOZd(#uW7Ee~r{-OuRoBJD)0QQq(2`TpHXiwIw70WS2LpM>A1%l|n~&?oGEVST zf>9*B0UZarFpQwqLU%a&QX4<-pp#L4cBw8GXD;n>r#)9!#Fo$hxudYGZYCk<`cz6K)|Fpg3lEmwOQ7K; zltuu$J^KdHb3VjuPKT;F2CuD}_uv)$och6+*JaSaHkFMK={%aCXkWF^Y}t|n7v9zI z4%xEn89%ms>O+>@@HHgV8S`t!MHNO)tuwe3$ZiVVty3XRry=>7E zuSRlhr?2|^Uf>Qccey=5p4q*9ky?KYcUpv6j}C>`Xct>(ziHvvV5xvjzGwo2cl5k+ z&KDKXv#)Z~5#HTtxne!~U$A0$JTQ2*0s6NsRxZ5_YAdf~DtO+ z%VN0Ou(ncj|1S~tUX39|)zEWGV^y`v$JXMu-kIvq<#!}Ye<`3u3XQXCihYgF3 zRJZkgtQ=xzC!wS!Zz7e!>e>_1)&K)C57}|oF2!)}H5!ROaPsxG-ZyV&nPuic&2#%J z$5`a))^F0ZR3C65&t~A2%#F<5Yhn(VJm46vc5e0}#}Ia_$CAh~Ts<*%GaSRkq{NZ( zuMpxeDt(PKHyX)R^e#<%Z*lw%my5pv5q=s(Mif>?%${=FU!Q45h?NT>6^MrQI}Skw zB1%EIuw@`rE{}P`XKWt}QqV$3YRI%ou!d-y0{(Ak}a|BDqc4ag9qy@;#Cyl5;lehuY9fTaRDo-rN8e} z6@P)uFzBh~yK1r%(c*Y@u&Jw`hSr^Bzw{ntPx>UB2eA)#bvE?f#(S14ta+FuHxKN8 zKbw=j+aYu#C{)ZDd{nAv;OIZT^%0|SvjFGxyZMN-7Xat<>|8I*?dcZ^-jq&2ysWAp znqa>St?c^dI5KOHuG4p^?(W~vi{%0&t@+&$=!nq;uCSI8QCiY@lbjka^$Il;Bp=;#(IH&@Hmc=7n^7It=quIBSal|Jeq*@1 z?jf9dda{GRb#-XH@G8cumP=VV8v_5@Oo1tYi4HZIEv%S*9(IxewH&m+2Q}C50tzWSNc}JlzhK>0m`M zb2S;N8J9)D0tTmgS14exNh>AI=NR+dcb4{9FD7nMb^!zXaQ2Uff+|dPwYvup$jpT2 zwFEWsica}=eL7&;5A|2yq;GB<<}+c`lGGASrwK8G6)iNn4gzn5!Q*fjGq5yQi*!4~ z2HgvxA1dc;A4Sp)jh@glgcj=`p6Tu(&@|4iyRaL7izqf+QG5`^MphJpV#5`secsqu z%34BiV2`gLvf(eMiBm>5A0}mvjh_Ps&p%uI@PN z5Tjr7Rc#8h^5HL)uExq8bQ8H#!>aR7r+u@UI+8i9B8Vuv1*7zV&ukW2*6kQYC8(NopSsHKBOFZedXxriS z3+MJa+k20>^>s5)+Lrc+^cGTe!Q^v*s?J19JqJAz;%`u7S+@Xuqz^p6QFcNT;%{?d zU-S&(Z++273ho&jkvxnA()(DNFVx#J&XZRu67KV=4Z9WSZNCQIvQ|Ub3T}-Eug^=c zhyau!G#qsQN(oqjARz>+OUD@_%1pCYDqf9oo8`QW8Rrar7L-t zMsulPvpXy1IKmmtm|Ey@KC~)9-nO&p#{cYflwgS^6t=v~e((yds{NV^0hyz-X4{+N z_nzFfyW^mole(w9jkVfB=p5fI@b685@bfd_F2z9=k+|5J@Q~0l9d;$l&R^^a<&oD+ z>W_saKJjo?{Z!+q}lvloF@P{I&u~?BisD4_dRAgPbaXK`j`qjKSp5bKb zq&H*5>z#mYIofwxd13Ix7UlpHYAqQRxZHeRs!pz~Hn;{y0B!wAOE)*Y2DqB1b4Q&u z%MCu2(|2WgN$}*XFzrWR<%aj>T%dQ`Io}$CsJ+jiC^Oo}Tz+(SiRrEoHY$+ba@V<{ zQuRS1LbguU@}0$LQNUqZ50I@*Tdfuo8sSAl0BVWis@3|tOTxz%ZKIsBQz}g%$2^+c zhx6ZU@Br)S-TBSiNix(obOrM`q0c8aThUO)cXj2AY;PQOUFWC1CzR38$94A3cA}e67uVsBBeG$7ZSl`1)Kt(cpS~~r^dol z`0$h+jSj#$d(}exo`Hu}u2Z1Op9V!+@PSQYmfouP$ASm+YHq7q(=$Zm#0~?i-gsI8a4B>#<>D8Qb5h3eOe-R;Fj!D$U8C zn^qJruG3x*F%~93lIF9Z#)6eLxRUDR*t~&J80kY z;{zfQVTgQ2f-od}#(9V^bVEKPA`I_u>i&!}H^?)8nxy zkU)8bBk1Oc6Z0LX7hWDi1KRd>f7<=24AnAC(EkQb@4Jq$7+0nYs69^>V}$|ZdHcy? z9J$Qw_##}4gBK>7Y4kj>bYNsn5c9NGRhrB5V0~|h*A%!q;AJp`o%+S7FbnR#H_Zy( z>HvKjfe_bbtazglW;{G$%ufR{J#Pwu!ur_Om2b%gUAuas)c!b!nk=|I8kRsN231NG zNy)ABXDeWjVyMs7Va+K_!4$t6Bvb6EvV05=n}urUH_q`(^E8NqTi=ZTTr-Ei-6Yz7 zPx<>$3w$S6|7nUocw8a_4Ohx0!>t)8Q@`Nj8`XrH6>|Mey%rsNFxAKY`Q73pzuX8v zBROQ6+Qaj%2A3v?$HWHvXPX9)rCngiLSjS=lRaw(46~ld$#S@cK@xeo>X&7i**Rr4 zDg?0Tt^Lrw=?t8EyB9?0$#jzkQqvtOw!5GQTKI#HkhS3jR(k*kFef0eie~1;6elTr z1N3a{Q3bKH2cAm@IW{t7=2&)SjOPeiZIn@JV5H9WFDpmh-W=~Trts+YnJ!_y6o%jE zyG>%t+L{BdY72Wz{J8)lI08ptLyBM;qBarMnD2eu4r>gaKHAI{`vtb9>%1hNpDIb; zeRWD|HMF{(P$q2|btV#_vQ(h`TsY*NCjc?ari7LohK9moTVb<^u%8I!hMlxcV4K7& zs0!=`^H3n(feqsz6Xy)k>>}GPi{V((HZVr_!d_dq3jt)@WYclt{9> zHFy*E``t>iyFIl;r!VYo2R%ICV)9!11u6q5xZi|(p&khCVX<;7ds)fmbkLj|3m14s zA8dl;;$V=*2D;ive5(>I380t}KSt$BU_hDg=e%)PFhG=NgrS+9gw|ZGOSYWTpgT*h z$(Hl?tW0vf)~0e#KS<%#x)!gu$GyCK+Sg^nedB?U)1i7ts^)F#l-bb8y9SC$*U5D|tI*Zjh73Wp#2Xdw6 z^JUz<<*8G|3FaTCDd_OVTsE`2c$($hVwu?_rH3y>$?VtN{=9mpuW zM6>hQX9t)pj$BCTK^ESYXPEwK#roPiDD1H-z~L$ zj;im(_qF|;jC%V5;RRb8(zG0&t%cs8apoGq6wKKKCjX4=7tW+R8_N{1N)iUb1H|9; zd-CM{r`B=F_-^04!pZvd`0n=Yq{m4=;rLEl*KB73jPE2yYsi}@y@+J`HiHe-{$kAr zQ*34~1|9{{4|r)(@k^?*shSqokau1e%}<)1ytZ2N*skGEe%R9`e%>InoAQSbO1)k( zLV6`{G^=`dLkio$W2B!A5SxyL8O&KS+*h^4-{-w8^TY3VP*k^H1{@`AyjWZPOx{F7 zrG_|E+i|cWu!aYHUQivK4D$V~w1S44Z=fQ{4S+Ilp19h`-}+Y3jr7|Wm5!y*rR&tGA5u9W|k$}NSacvu@N7W9K~5w4BZQ7Vy9`{}h&ah}QW>9{tEojTQJ zxUpKO>;_?moby>jnm=DIJtTV(`j}vj0+QCx>u?F4nm;&ol-LQ`2y-1-Q_Es*a)-q|PfajXjk zU|W?h4IP*Vpkzu&S_1pF?s;EaSJg_MlJd9d-A}zvo{~JTThASVPe~wQAAWeCBIK?1 zOUKV#2BMephf9+ADQ+)#ILFmTKk1n+J(e4;m%;< zY}Q|Zm*C$yR;Dpb|NNB zHRoK;Zc+jK_g%FG>}b?;hmX?z`G%5Cy{6tjwQk=3YH|&T@3*1DEd8 zL&v25IBIOfs+j}K-k?1ew&KPquoa)I`enl|=iu%3SZVl!6E zSTSocO@mQox*&y?yo=I*Ge3y+2_geo?MH8T%o*RQIsMv@E#px5Y6MM_HPTRr-!!2X{4$5ux&hEWM;?#y4?m~6;QTpBay zHKm?VQg*-Xj*3l|e0?r=d`sl(YqmQV46w7GK08s~dg+*h4-c;n?-@FwR{CBeD;Yt1 z00nOYdd1nUUnwQucea`JfqPE4?XJoAlAlm^)kiN;*L0Hd-1#GZ6qj7lMI!vAL}SW9 zPgVqr@(1oEo^f)(y@dYdy3Y^YTQ+4rN>u#NXX#E;=wA-L!^tyCNj`BTcmmw2ZE zw@3mq!l`_Y*OWr=JsugmWhv=FIJwB&)$K?9tHA6v$VBS+28AIQ94Q%6o3Gu|D&z*Q;iO;<^ zdSY*Z&t2);Y$Pk=2wfm5$~`#Kkm+xM2?Trahs6=9Z6VGG%0L4vgL%Cem zlug=D@GQ%~Hk2+jVu<0|FWHOPP1YKlgBB%DP zL>=49XTU_RC#h~IZuY~9a{}$4%gf&$;WvQ)26xAhJmWiEQcT(01SMS6uw|O=I)0Mp zx4%(>HZ0%04%0VMbxi6P5PjtU4UQf$z}a=~!VrS40xBC?ym?ow7Y-0>mcg z+v*5*(*7+9xVm{2!3(>PCUYRUG5W}nm^<)r{j@3`5`cQQ&|nnF!pDgYSAhUD^Bc&6 z3&rXbbJii8o`EY4a&P5e#Q|~@ef?jJn}rqFJ7-wgZ!<~6@6riBH z9S5$ReZB8TGS$OaIl205QYvy8EXJ--LXKnp%D0+PzBGbZ!Wbbk;J<3IWfCF4up>zL z_>&z>*jI|F0X2|0pynKluhi)gycWX^pW1>AMJm22DTf(-2xN-2Vb|7W<5w!YG=bPY z+dHU}6M`qBb-qY4zf*Uig0L>uZei6IA6ckJSxI7V%R$LhTUT0QS!{f;){!4DZp z9SLsL;xAiROf?j07$HnBXF||rGA-PIh>qnSpVcaTM4-V>-(yneOkz>HDa zNI*a2TiUAtW{g|n6j(9tbV-8PXU7}?O4iIXoFoT5>s9$hHc@*dQ&s%KM`?ZW(I%E7rZF3ygGpd`B%zgHip2B{o{gue-|jBTe@WV3NOtC4}$**FH;O zPXVEaYVtG@+lu~8mJMQMzWw?;T`x(p-dAJ#7c7t9m#r38^?9%XrV6kA(F0H@l)_)B5 zhEChrB_FQFsKt~8IKtj*pY{HT>F&Gv0%j3U{-P2Q@imJYcFB4Y5r6e+&vl-Qh=>nb zXTt6qH%z*Bm5?`81!78NQa=#dpoI896$VRc!-0*NWX2?4ZU9WK0W`1aj>7_+;DzHDm`AhU0bp9d` z_)Q@=e}MoKOPt|s=P&*-kvy%j!1#qW5gOqEj?$MG4w<9*{oW$iJ!OiTzmRGd{ZEbH zhY$q@%qbM1vxXHJ7jhst6~N>bNsUcO&K4!D;J@9t--e;vC(k5y=#<(PuX7jpC>^zS zu<|sDY}UjU84Gx3jj8d1YVje##cXUJ`~D{%G)L~qiwF+ikB0`IRy2z|o& zs)eE$3l+r(wKal@Vj3x(`e47t4CU@|qd*PllDx0tUFb#IqrR{obc{)uk}R z*h)Gttr3zP z6-GTg%b}zy_j+()&3c8V74V(}ha5 z#vEgcqEZT?ftdU&5R;$yo7cM(ANuJFOfXu~9__L0{VSBm-=eliUPt?FMo63kwavsIU2S- zOgfCe=VzUo^d}PaZHG@bSKfG;v*E{#rBQbuzv`)fKxbIgke*w1YmKn&|K`q$xF-EZ zY3A*~N@{aD9^g`QpJX=`B(TC96T9qj$V1z#^I1oU326~xfsZOI>o&50!%IBGIc?10KiugNfAz|v=c+q3Twd=9kn3Z0Z8tCHvBZgqZzcS zX)?%UvDAvL*UrSs$^iRhXvOUfHNavPH!Dh>D*=@0y{jk2YHX6+dtm9$yH-2EuIvm- z7Sr}^hJSU3y}uIc)*vhyP*~<<;_4}zbYP5$m)MAvrV5f~cV~#5=no%=GryF1Sh<$& zt6{`G-fp!ijI_?0j+hN2cDVjlfHU8e0&%w!3VI-*oUdF1^{)qRpDxFNQO`Co)PL6b zm=6`{+eeaW?1o=|qs7Om-#XGiK_Ho-z5=f`35LrX$P&>8iZtOkJs4uT0)WJ0lrIl9 zd~rq_Hg8NfIOBo}9@{Vn18!-43*-nAY&AbAWGuPWPTYWUy>G`1x553D`CeFpCWxbF zurO}gK9FDBVZWucKsu)!)?bHu*zKm?=E3^g_N(8?hfWI|7w~S57@PY(;o|b}T-~z~ zG7xgu=dcTmH$yMi`J1_Thuh@g>kOqFUO&@1D+t8zxj%Ean*8Bmq8 zK%b_F*g(svF#E3{EbyDB0J;vdWft# z<0{S~_OYwaGp9i(4}7N0ZF-qtE`F@;=icxU^qnZQ=>6DLRwaCqT#yCTqR<|@&9Co~ z2o_h54Vje|O=SV6(pQ}_28$~^p6(tSyfQ)?`YHsqpkO(sI33_w#RCoUZi|hxeBEU3 zIF-n~IkpiC7TIb2V3yR=YKiWEhsUOcbAs1b%PFz6pub`-|2J*eEMM-&mO8;t1}dPf zNGC}u=XoP@FO1P3rq0-D|GbvCN7!HgKBlyVeURJqmFlbvKGQH*hU{oP>t2EtuiUJ3 zMB4hdu4ztSoIDCK`&!OO^#jl4ye+C&`XAK$d>=Uh$lgS$%&J*I+;isE53PzujjD7o zhBB(~OQR*ipN2n;p4>^teX!ANw-gGFnP5EVwPBwx@OEJXUS(GBIt@4Ap3p#c6gJ>t z#@d7XKfmVfNHws`@}kqiL<8JVEgoU@a-DO-_1`qmcUosCX|CdJG3@uM2_-d%c}z(_ z&7q&#jCCNXDZbS5+khp_jLb_B=Uszc(3UiN{Ws#!Xk2J>zG&oPP$Q{{aa;RJQF{*b zJkZOL+{pj6n|bN=tbxRKT&=Q<-$M4;J_!aEKofUU?5%EvMt5yb^VZnOwpE#S`Bzl3 z4jq|x?A3=Mkv=0&>7M#S@wNKesfDAvEBzr6IyQV`VX&dkk*s1o`yuEhi4WZ&@M}~08E%Myx;ZHR|)_h z&?K=aQKxm_UP3rL4me_2$PiV3M8;mEkrX!if>u8>o`Q+CsVLRLv2t@njR7E*S{tuN zczPDQIQ}aY`~kcawQK?h)NZgnTyF;s!jme+O(lj8)#&EnrRf&?3!KO{kwd`2v2wR( zPPJ%qD&2%ABI&}OB>)1&mdk`g4`+X}>d8u#zrQOpvfX!Opg~v}?B#!|J#+JDqUo4O z<;5~TY&J>%@y^QNRnk*Ts84~+R_>WBi54F&g5v$h7mUK`UW=dm+h~~X-90c#9j1FH zusJcd2Sjt8@o-*dL=R&XalPOJXS93L{fIY8Y?$~jv62NCbe}cv>)ybg}l@azUBOs1*OeY z+&{E-PKt38Z-`*Z+BlN#ICtT~T}caspXo*&XEJ6;Hf21Yq5p`JhiMm z5E5)qYbO1N4HstDf`JIuSB~N{nmA83k8jJdYKF?3^dnQp@j{uny&#W|Kb z2C!dGrk#Ya9t3-}E#0Bp+TrmuA6MwM25ZzQRE@y3b9~U=P1n_eO%yqW*m@#D>k{P` zpoIQ0rsEpbvrf4v@P`$-FUxbwRekgFA*nqQB$&!BBV&t`tH8uLEOM~v{%>}4Dj~{;n_j$2{6JOWrj+d_23XthTVW&0$f@&`8^=HOmG??%nZ|i3%bL2q+?w(jZDmi*zHMDlMg?greX54CvOuy_b8v z@Be$>|M6|tu@=ah8RmIr=DDx?yw2-)Y6F#v^0WUT?7-gy9y`MTGhaCTX1#MNtM*SXC84!td zd0)~P6XR@FU{ciF$3@p5`}raJE!(;gk`4_%tjNxCL=wmUa>DyzQco*FLooe&6co_+ zhFrCb&%wUvX6Rp5CwTyD}xm>6D1I#&jpB`MP9W{b0BdI>Y6e`xi%Os{;Pi#S5JbHEK9nxwJHR3=;zzf zlWmYyI|$cSz#gcG97=G7*B4w49Ql%Tj!0x`kWIBw1Bg+py3fHL3xSOCtk@IW(%MHx z#p>IH&Opehn{YTI>4_k0%<8v?L}L(i@MpmZtk8^Z?8TZ-lyTo+=cJ(FbIPxMlrdX@ zV*VNPiC9%-D{mfhKA>rjjTg(a!EJ@doDX4O#U(vQRhYm+6LJaCxPPW>sbkHnkak?* zErYbvYaa@jV|^cNJOmM>P*X+v+IJukBDofFNg|w*0)K&%;Wq>bmccl6Xmkhg!#fub ze8a$~itCo-iSoS>I5R7HVZ zP$D384t0QH2D|#mHjy2$T0B0L)7GS2)ML30fIpu^9;p+6tO!+J$*vc9*J^6mo2Qb@pAu&@6MVZ27k7W%Lwo9ZF3 z|IfV~`;8}IurC!LG*eHi916{>K1lGZc(ruxF4!SYoe2L-+4Y-9Hbj7K)0<=a_TDZq zUV(d`|DgiZJ_0^!3rU?o2gpdR`9&Hy$vhv!w&TwCh$*L-E$EfQJBstt^S)?yh!qgC z%H7OW=Hr2}phroP?kplF7r~J9{we^20Y-4_sXZC3)rOd^>l?!!EgY#81N8R7rdsUh z8Sqc2>t~AqBe>#{{ZjTJ0cxS#toxP{Is@wg!ZDThKF{4Md>bp!8b!!3+Qx zT1KF|fcF$QE5L_0*aM_|)Ii}9L9$_MpTOu*6dJ4@(IrKEcp)d)kDy7N3bTIV~wcBS#H;_M!IAPqNpq zz+h1-SA&o{#{V9#eFK1}p1k$>*tB~!jX*8q`%>$<(eh;$2RegOg6QVKB@(pM)nzXVM_l^e4BV*~N` zP(o`3hc0`Lf8`st{dG7pU$eXhNqRxq)jC+rP#_!fr;Do*`#NV|<=F#Ee4AKpKV#&5 zOjLTlAif~`#car+2rvL(_0$6q*My)UN0EwTZMR=mVnO>;o(W45K4NY?C=oI8&S54~ zg&28PmNROx-lu)+vwI4-z|IhfhXgt1cLpK-j_sWaD?-1^>&UVtcmnBnJp5ejIFNpK zn$-XsJ-{_Qu;=*~XGHGfifIirsgJNtz9#0_!&pIrH-CAgN0aP&Xi{ zi;NrOzd=&hLI~;W@9~JPn}>QB;F5`qQmL$&ya66)qPoU8%|4EdZ>;NLDI&^}VqB6b zM%C>`Y5LWu|B^@Tf35F$$9s~76-3+hZ6NSNpR<5y7P_Cz3D&l$6S{AI9W;RYaz8c_ zP+v~zF$m`pfP+e)2Mny*Bf|!229cC7Aj9PJ0g;^q802oFg7N&19yd9X%I){xS()Jq zxKwx+P5y>!yN9QgfR*)Ec+lXD?Hd68Ke#DQzdCskEJ_djr!$J0lETfx&7`}bNR+Ji zXcD!Qxs(X2_$t$PW)5sW$a22{wRo7L6$bjT#fN4lkgfOy(9JT%?7__%zr+<2v+CtU{j5^4X5ee3nFei8w}Z<1Idb*Re;2Um_!Q6g_0Gqv?Bp_lL&Fq z1t%4{a4U-e&D`9GYmeaPK;rvX{!TKb?;aQ@yglW|dK9ZM{_DQ%g#fYuCUYjYJ_pD%y9b{yMM=P~AX~MYgCOk|w)0{tGuVGx1^2 zdAx6XXH<00w1e2)lGpU21T0C2RC!f-RjyhdBB8;$K?m<_@VhF|!Ba?_Q|tWzI(Skn zUDOVsgSQXuCP${QEI=4?WifEEF*kaG|+V}Ka*1Mq>KoRNR=n*azC_ILo+aXKaf2-hyDIOheXmr3n(}j>hWzs z!MRY6F9*=Sl|hdW=;-==b1Wb@Hv{Y(p?RaAMC$Fxg3*QDnGXdR?PNJn^2)^!((%BP zsR+Ec>0?>gZ+=BQ@gSj+WjIboe08IA)QN3Xu z(iaq!MfF-|c;>Hsau;a(szf(E*ttln70MVRuxki#KUOyw5e z0=8}2C3c5EN)cc>5fEuT_O*Du|2LOUfRTa@Y`+!ytmjlo;(Y#a0evK*qm&zlU@tvA z+!#Q-yob(`#2*Y_`1t+kG{f|uJ~;sU7x-{V_J0)MB4FxFMg*}!XM#cZq}0s>>jdj~ z1lXS#LZq%Z?*%&4Y)GqPJ@Wa30UKxF%R<`yf~m*foCRnRL420LB4TD-)&H(6SlxHu zl3&>P^6qOeH@CIFh#<9}f9W*q)pTR}-zduDr$Ia4!~RCEq<7g8l(;7lEpL!L0sb-k z9xxAmCH)&)*8rx975v}=&L`!S2ygbI5k+{MN=Tx-RaCpubQIvp-#Vn?LsIcO|6OXR z-x{nSv7L=<5e+!R>OGu&_&@a^`TxqSI$JYg1;*HJa2*A}#2);wtiLn6{)@a=aQ|Pu z(}(U4(R83D){o@9Of;Eu5N8>Z@HdV!?Bh+mG=NeRq#dK~diR)kh@&niKz{(+t{Q~? zfNZ-E`ojv?b^-dMeu@$AbJ$1{o{2LsHxA}UEgA!JqtXlkFw7dr^JSwds2d#cTMo;} z{Th;lhX2Cq3fK#y50<`C`8-?bv@f4K(jRcS}rS z-<4T@k9D;?0gOWc^ZAKEfmPhbYSMu#Xp<&<3agx<{#mB;ae@OSv8AiZ{A-nfe?(u% z-d+z&B2t8@W7QwBh(dPVpY`3pXEgoqc@#6}FXAhD2;I$ItN)9@zV24s(LdgQ4bt6+ zo;QDJ1-ct!Aq2f&#X=tahfI=o(AiWSSfhZ>W)UE(9ALZ=fCNcG%ajVY1`k1aZX}DYnLJ3XfD~T@-eYqQLFa}r0w7pW3h(9j_umd# zfasx46EZpKuVx*R!Q~YJF>^i#K-e2pdd1zFduA#n-n{&}-p{1Nr(xg2H7s@CfJp(u z#eo9PS>I7lsm(oCBEqWGfnhiR&Zx{?<`j9(Xd+6J6cX5ye3StGIoPv45C}sA1 zpe2T2UpNJ>by4=~ACa}(<$o(ZBS6$Fw3H7>NMJx9p$C$Xycsp?XMlucd|guno!|(4 z%~`O6v)Y~l7a1@{-{b$4wR&XxA;8(2UIBN?dkj8DAfQEM%vF{w9ak)(`^68aPBv_p z4N$uaAYuoC+KnJ~v>>S62x13B?FPh-7vtd*H$T`f9J&aDE~>SPv(kZ5m|^u~^lUUF zg1(XtpS4v`*AGlUbzQOtJ6U8>I>b7uB8KibUs6u{0C7hst)m>=(Js)E1SJ8+x5QSr zI3{6V<*YPV%{X6bNSgt2g!hRkug-@}+J$OrMap zklJR4Xm!xr9elig8V@j}1QR?W1t#M8Hwxw{V_Hu_6Fgx41RYH95QpF8`@n)GfxIBv zPn(T=Jl9i17b@zQe*?-v*bmomItYY;A?Qq>4|zTQG~W-UUqi!WtQN|Bn0^fg68NLq z*h0WS!a;J#;eiBoECdBWnZMxkQCZ;dI#m#svs3`0nG09n0umgEW-fWd*q72bg@|T$ zW>&bS2}LvCRPPM-;)z9jQE(rrLjc@Uhx&A;C!wH;{9u6XFCOG?1I_16J1A%ZAXT_u zfgLZkHQ{3`)3-kYE-^rf@@H)z61^8tH3lS1XeXVRKCy9NFibRGh&u5d29XDub$%8v zlkgwE|6>+;(qTalnuh$_kLR+AztlfPgC*Iw3BstL!TXUmZ`KB}hG7QjdKMm(1hnu- zQ##2%Lq9;1kcS$1$aXp?fH!Nq?Q5N0&93<3UkOw!XdAO(D-gaC+C#E|JtRI@O=zJo zC8)EE1Lly>YQMpnGSS|?|Bb`-ki8n%dH?9q`hS^x1qoVyp3vNN?Z{TpCNy^qZB`KJ zn(PE%?=J}Et`!kFPoym@r2_H`<8PXUQtmZICXeaYx?|*+JU2Z90Lii^NOeWpBHk1) zKm=G}h>r}dko5ilkW44>+D!70A^uNqXS00+dg~#)=CkQgP}MTLBE}K|WG8>8LV)4y zlrYHjE75UJb@+V9)G#3l(9z$AzSAM65EVd{J|yXTmmIj^0b)aF z#pFX|zOnuRY~5)okW#o0)j%6^;i_Y03?9z6FNnP2j6h~1m?I0OAcsvx{RPAY03Q^E zb~F@1idu?V;9ch+g{+S8l~%wSl~`~o%g1lI=(B;-jD7~>pVbe+Jb`f0*S-J2E;t0t z_$BZ8J(BWZ_*ZeMl63d~TL%M>ZF6RSIt>n`#@U%+*&^8a9YXc^2jQ>k(i(}v{fe4! zED9_N)By3iL-^uBQwV$v?JW`DW5nKa3<4iRdrLTg11DIAzoP_&&~MnXb0F4s6%D|Z z0SS1YXW=KlOzQA@p9s&#(ntWdgUQHRaRB&`O@nutWKT7tEjdtcoc%D0$W?6Hd~W8O zfZ-3)`&P$*cw_cAF0shCf&A=4%4G7CpROMkL?5^i`8^;HXokYW2bcyDlw#Q{dWWzO zeGmy`3Xnj6#QE|Pkij-#0EYQrxnVze%>)cKKVrP6teQL*Cwl#{vo~w~!Hym%8&iy6 zn+*CqOo_a}wZrl8>&?qw`T>Ldu(-R=?_Tu;FElEfJ8VItWZwMG82z9lu zQgTZafr@VvgYsxW-|&R%UA`c;X+zj9+9897*+YNazmba=@Nf9H`|_a-mZ&a}#Y(mX zyh7p-e(tE=FYe#|$CGpr)ZY#53NBFlVF+$ z$kX^6P{X7Ou+eTo4U;#^h8?es%UdV|l-cksx}24E$&n>aTeQh+z=O9nyRi!zx|9ZX zlr#{=eSRJ+OYb{r(jvcG`N3G(;m?0H)yfu>Fo`AE%YRE;2vNZ_*bytEg9--NXNdw4 za?_!v0I;oVn300na-^BgOhc*Ju1K2)n!Sn{wNXH@Q1?2Gt7hhX5NU;NLAECw8Kb{ovoD`2uwruo*YyH@HD`O>IG$rECT|aZ$M&o z#}?SA`WDtI@s?bo__h2PjI&+7W_5tgMJAk>#a^U<1 z1N%_^B^Go(HU5IZ4iL?_+18XAK)L-zK!HS7 zum$)T;9m0;>8k26comSTAr5{b`zrdU-c)&Z%>^x9g>Y`*sUwg&5p3M?yTJFqW3Sdh z0u@R80X&{W!$hc#&6W!Rmw__;9_vElpkxa@e>0$`LQhbVx`XsL1b%^uKf{dl`Q4dyAU4%?bveK#R~evLH%Znz&1Y`%gl z(&{|+gY$iz;5eqa>s>j&+rAKV15$5hCThM=Ng_b2NPXT8}BE=5Onc_78oHQn;{~(5g7GD z4`-jg4F`B2P_KX_fjNK&g6fsDs5Z`rP`v_dulX<-kzzr&5{SrxL5oDJo!KYKTVOAv z2Id}+#)Y8C<3D>}K$uo&LH_mC@Fehq}W%`*~kKe90g{O_DC_(?35(?c&x$_(7b5Yw1~J zmY~F7H{H)H!Ns{z$qmX{HZOzMkiStqEisjYEF0LJ!j1|$7uarj-Foh0($?R&I8N%R{Sh=y`hU&ez9 zf74Iq+(VUaW)ga($s!9~yZ+3o{b#qDGdcAsV5K0CKS$!o#oeo=g6T=p z@j87aPwTrYpR$Aw<0^oTFe4F4BQKUx*J{l&8&JJ~4hV4<0y#a8o(1#I5W}~HiiQ1L z+7zP=Y_Rj!X2iWDR0QG$kidmj(?9G(lg}o83M;Vj2%iqW$` z8B!~LaeQtb`aDU}CDq`571)L{9f7;t%Mi+REZ)z8g<2Mo5pGkZd6)fu7bo%GHcfCf z1^Cl~5heAL2&W1Kk!0ryoKa-P_Mc4gBA4fR!5IDL~jZA&k<#33;6UAcho#3NJGL!#@u6 z>R+3H(6t%Q>@U)G^Rj;$3jr7MKiL?F*Fnb$)9Mg@_%`ZyqJr%qF&(UX zfN+d*SWWuBcT3+JH~m3K;^GKqMw+QzHE23X4;U#LvM?XZq9jmxl|UzKcRv|*zUYEUPVL=$;Q!$$rGX2O3$az;kL z=r!mZQZ`^)yQ}yFUpq{X4HoaI=~V&&Jx(;F4}hw)UI7C;`*)J}GWZbP{8O_bnc98%a1 z0|l-Q8<=hg7$G*b0D+^D{a2~BIotM=BOj{+?HDupuQBJqN9&!-@N)sd^ z&((X~Sofjf3<0z2UvUw`8KCjeM+Am5Xznt|gW-(**vp+oWdAZEJ&q|}Z|`~v$WI|2 zY|sXytDnWMfV05p!wF)qIhKII4f4G5drIG;cEHAKcaHO*bknA=+FRa%(71d4f%%!`#Zt$FP|h?BFc*AqdpGtn~0}$_AgWWfw>GlIz_W1~=1Ef!uDn=Tk0t*xZ;bBOkj>UH9OdqnM zd20Xh%>@2}B|{2OGBBIP%giwd+4PD2f^PF981)_B2f?E91!1lBlMlKLH94;+SOOHz~a2zg0 zM++P9MbFOK!xo2^n_n1*O95_YW9xy#!_Ccy!zJVF;OwU5VqpbtbPn!iX9bscv$%xA zC2i;7t`2vTadvcZc7i*3;D9@xhdbGTM-k=+zep2@OU};01MUXCI#_tX&%v#nt>HLl z&*B_BE1!hrS`-u*>| zU@sG}<~Oe>{-yxoIVeDQMEC@SMSj#Jyazw#7vcNqr+nXkDl9C_^W(NqX#v$Ryxcs3 z-+w6d{fAItBj*fik?-H|;_yHZ4%H&y$KW12Z$D_;oc*tvcfVv0qT%;Ua zY%RD!MYVr_#9w)Ec=jI-@nqbbt+e1CI7Z-kos+}i(uVtZ9Q+>XgRe3NUlnmopeOvj zs1pDW`Ms#qMpSg_h=NYt!VRj*4xX_J+}h4U+Sv#E0_Zsi@p9wva|?h+0`;Af2e_d- zj=%*XiMm-hxw}BW%L){QGFsn@ zL``{V=vn^sM4^ZO{zQLQ8UCmqf4oFL3dLfBHm6ZJl1He9M^X82Yb52Mnxqw@-hZ%_ zT0!RGAR=hl7Bo}enPS_G9vCg?6nNFxKYz|Nik?Y=J~A02v@YjlSNkKrIoj68X`J`c z233b$TBo)@W9=wrOP_uuv)1Z*r{CQpr4Gw3_>R=-j9y2m##zye#w{_#yH`%ltuaWR zZON!H-rM{j#Ps&-QFIz(?Xz(H+l6neGhS~{cdYF?o~rj=yK`y{z2Kn>dXiPz1;)Dp zvFn_@=de2|3#z0f>VtJkYMrF@^6qL$FSIIX0iCOQWkO@*kAg=e4?K^O9;h8CgE4NF@l-?I!;jqDS z^B#ap)=HvD@(33V_9B*cf^CR{Gv4F=aG9UMf#h}eKzw& zp0a(H9;M6B9Tk|YF(M}jFBzCiaBl10vv>J+`w?4IgP%;3tgYkt%`CPZuIe){KUekL zd&O{R)v!e$`P1{{A$_80=fZDtj6Z^-e5ytKStlGZl9d z`o_>cM~|DluvYSRNTd-;o>g$5VZj=!Ee#c3Ur2(k)Z&nN61RjaX;H*cOv+*vR}AQz zc=n}v99tTO?lZV*_WW%PLYUj!ff`4L!%aC$ z9Cp9nWHo%Za_w z=Uw_w=8t?-WPd1wLRV?vMWsnGWPj_%6>(S=OVzz_XTyhWVUH?~3@~8(1hGHU74=FT z!c=@OUD!0~z^*KK{v~Qk56W3@?n_Eii)|vP_y+ecyc;3xR8s1(GJAK{2G??#S3GO0 z%c?yo?6uD4n0j&JC&|hj_u3Y(x?PvHV!xs+KOnXAylViD9^Mgqc6ULdaL}QfmOd6` zrf5;=>E_&LIKRW=%@7v1_TpnH0;uz<4HOaXt3+QcCztOf_=H5PXR|!JA_Y_1VQ%tU zq-Em7j1whdq9XeyK-VJFnJ{&fR0KOCsWmO_sNlf5Y43HW){SUO`SM(eMNSV5OWxS@ zgvx9x_ykvo-GD-mlIndUr7Jh4@XyD@Gcp|ctjz7y_*f^ja%?tFJ}hJVvS!U(I=2p! zc}eco;=z$1)E@oL1`JNS@(n}c8}i;$k8sB`ZChR>E8ry?q>GHh;fX7>$2W<+A=|_d<|nsOE@D}W4gxn`J<%broz*s96e8Bne${yb+^!#R7{GECQi4#&vd&` z(O$WJQBo_vod22?=YVg=)H$`XbryPNuOeH)9r`CE%aUJ4>ljZZH20+4zRb-tO}}ur zPEN~_$8|5uODC^u#qug24FQkkATDznn)u_wQs***u)%NWBY8(nxYQnp-M#mLMPD`5 zV>;>jvx{o1d}oNFaOwLDDwI09$Q%WaSM>xqMptz{p^6i1e)YsS<+6V>>S_?j7e(c> z5yM%==QSJr!rnXD^1}vaHYt1<#oVqteWYTrM(43~~*Z`b}{Z6Jy)9uX|zUAxZ zVT7oJGw^B_}O$4RTmnqxs=HD^~`lcUWn}b`1$Q)n^o^l;6jyOjR4rCo!Rk z#Is`N zT))%`(bh38v+5lgwz6+0*FDp@gYb{T!|Mhtt_ommC*W`<*Dav3?KsNi6V~VUmPmIG zy$O5a&wx&+#Xsh4*L(t%@>UXw=?Ht>G zj4D8vvq6qKvg(_JenTYVj;h-?t4piWEqax7(nZ&O?(lE5)KM6SjO&x--_L@-3}^m$ zvZs-;-}PN%vslml+YgqfrBt&jzv0kc&NWB%qAFs0z;btok(c;PhF&=yPJJ&0y2_I5 zHGE-_;HNfn<|YAW<10HBuPy~_s0J$vF3#H9&WvUHPGsa!YcK}M=Mj{|D9Jqjfca2@ ztJ{B7@s01w#NOMRhUIHt$Y&-ug|V%!6PP&AKMXhKHyD_Vsk~c3fAa;FX}6W$mC{ot zPG3%Vp<{>m%8R`v?s|Od^JJF(%~O*uYSnjdF-=4L>pZ-VY{bHa?n6fvLdU{B++8@~ zVKcL%s1<~(N}wH<{-&P6HDXaaA=J6S(O7sqLs(C_+`%SS;;uk*J+eO9g0jthrVDM%=a|y?b(Gt$ zbfZ7@QnwRaX)#hV&Qb%h;&S}|4wZ7$ty-3IvklQJx7^FkvwOWwC zKQoy2wQ46Nj4Lahh)ukUdyCr(zC-n(AW&vgG+iWD=+)|R;^;?$Z!3;OeAAgSNoDCF z(H~bng_&9uQ%qdmCxZO zEG(D#q9OgEqf%*|@#9BsjZuqTCL5P|NzaupIJR+5YBk*Y6diumZmwQ=7PUecYXw95 zPFKXPR)8?-?3w5Bfid<8nl{gr?~SoC3B~&qDaJ-{3q9SOW_x@uvEihv&yBd?V14HW zdsXHSbp|vWr--}ECr&lbT#`@t!o_j+F}+YzqAvLyMK*YIrEi33McqJSunX^CdSGBsKEk)+e{)i^WSq`{blB?-=>ty*uN;R_ zUu}KkjgEMSXsPn3-1MxCz(>JNoD$Nxse-#FKctsjqNklC|6ozN3R^k4MCesNxXm#& z#Z$hvcjT?1^T|a2_znxn66VYn(ss92yA*Fhn}^BREC!pV^F%qg4%{^sO975amyc&n z_%|B9BI*@$t!-$%&TVqRguTC6Li#~||1MA8_WkuidPzKk<%sQS*{->sg4fyAanjJr0*9q^TI;@bmL= z3h@hb^WyLd3UTs6>W_ecFekSV5M+3T`8m0vp8z#N+S$z-w2byu3U25pQV6Bt;8$3A z*f~3a-+{xWqp7(69~N5=4;Ob)E-o884_i-5PAg|eE_V+LD-NKbz@6N|?cKQ?9UQqp zD-6!%Xkq8X1^2OVba8;YpFR*M{{2G`;O69qp0J<@I2Hju5utw^)&I~j{3sJee%6DK zn|z8u>Tz>%hT3sB9&VmL+I~FT;1IsI{e*eJ_lLWFkf8J1rr&oh=bVi8L67f8RkW`k zfztAzD*86`?H!CjNlsA?hJp&>Lcu?{5B*%}FlaP^7(lF6cQZZ1Ik)2>a!N7d#H0x;!Iu33Q7H%e%(=5<~pkQHP;T*vs z#=#+Gp(LYZ`M3XkdkG^vf_4U75ej#RM=^6f`tcbTkYMbaZfQKk)xy=!6(VCwZhWi8U;+=v_&810$1C9vUG`0=5ZD8MJ@8<3@T8$LoU)ZuEN;kyG>W z1+p){`^WzCb>Bxf(AOuQI{!Kqn}9!;$*jCSrWy8bHR7G;l(;=}(a}DldBRcU*|hF6 z{BUjF7Y^36a-yEI&lfE7k^sC$`+v&l@W1uUwK*djB@GHW@?Ztd~;&GiLc5Hj$u^ip$*sahTn4RKMr(UHPeXaiZ3uj0@|-h6~qc6l2%A zmRY+UMYJ`;(VXTIY$EJMPEobsIxi0Heh$wp;*e93n{8V9%;^}&hizh||8l|Leh6A* zr;8iUK@pSm-{nCp{+F!%-M!ho{VIQoo9YcE(V$ zL3=8Jh%M!g!D|OGwY0ajG%q|2FcydEC-GjuF^E*%P+E?ob?e&P6u>r9{mgi|I>y_! z7hCKh8{PAS0Lcq`J;$zvTW=<-I_6>ZnUVUKzn?u7Wbb`#RF>^}Rmfvsmd^g8FY?vU z(V9fW?K$VpRh1MP<%9&W43o*qmxU{7Z_ta6u3X-j?^5br75gNbM&>=RdkvRe*X8A> zh$w8KBpes%dko=oE>myvjm?IPZ8e*6P3A{JT8*w1MZLk+oE1co&MA}Cl|<=WZt97; z*E3jSZgON}Zl&~-N@iuaU&WHQsa<=`;+j}ug2%?xKv|Bx$Oo%L1!6bJhtncx7kAfn z78;7w6{(lSo1)%7xa~!@PSwkhF;Fx!Q}Kec;c`XlDAR0~qw{Hc5o*jPV;$E1m0n;( zdvio}JX)|(xXwNCcE3L=pQ=h`NkFnUqg!VO2{x+NId;h}ip?t{Yj~Ul8K@ri)v1tcu_YKl+JJ*`9>jg}!>zf)RwC5gs!xSPD z$zfk|u~gp_6S>{0kun|q1~c-n6)|M%b`Ybpm>nG%Q=7vsxX;w%WX3ygzJ66_j;fT) zQohP^u_f6bF3)i<7EQxob$Zw@t#OsGzjETP6k75$ZGv|8Yp3Q59G~JYS=qteJ&!dz z6SSZ?YgI|r3S%*>HfZKY*L!{PAEG4POAi-x8xQ@`A2JO;LydBKsowRY(Qe|y6g$EN z!ZH2%XN-bbpX_KiMJ>II zf9^Ap<+S)TqO=zoOMwva=wxJ4c*rHxsBAS!HK_!;)+#a|k7XJ4mCgs==1fs@O5p-6 zF?I55A|?R@!VITe96synhWa_v1r+=3>fEa~X?Rw$b^lV@$C<(t)Beu`7mjjWT-x|r zU~#H+vwJf8!^0(J;@|rBA zAgi*=9KNWASy;0imThz;MJ5P^I>?vMpx<4+&q)AS42u`I=31q5s4-eIVaKqNP?Ia8 zD4eW)ZLi!^+_8FNWV@SKH02RxE~87^X5OSbaj2dv5XQ)o=pa}P2R_gLXTH}NXVb3ic@kxE z)(S65?lm6<7VG5*`Ne@O4aKzn`;?DIM>1kE#3OEsF0 zgwOO@M@)DtwqvR@P)ICA_dYhfVLcF3Ra2nFyj~w4vK(({f-6{je)-(9An|~NN9pRM zE!0z_uNSVKe*KZD;zblzf(puQ4tQ@829>$GO6L@V<6?sKJC9s7VjrjV^A&x}WNkF} zgfLJ;V@8-5m)?}Im!So{ypSCIYNTCvnLjpATXrsl?}XPKTgQcpQr>_|CkRBkWHc^n zDgq!Ty4Q0y&a%wBnMWgImXn<)@s1W=JqHWm38&4-<2&D9z~AtQgI0po1-($2Na;>+ zWQ>cP)O*)Rtq~tzt%?%Gyye%|Zgx>$ur{#P=~R+a{X|VGDUP3Rzin0*Cq${6oYj^x z{`TgS+Ovik<(c;O&x)<)Pc;&6Eb5(>K0Ri5+-szvqbOR;RX>`|*_pQy8z!-IU7Exf z4=2ahQ+#u*RLHI9dF$w-q3LL&T_f9@0!)MKA;m*40%T$9H)2!N-g0SP{kT=OG5g$; z&DXbv&_pWv$)dq2c(HNhy_V6fviU{ni=VH2{kS-NcJ|^KhMeTO)6Hi$nP%Dt<9LmY zt9Q~wF1)0W2;tSXP4gME=#F9N4l7QjlFAvTQSsK_LA;tDsLI`Y#YOUnRD!$H4arN@ zP4q{CXY<;zXBoh*s(RG(IPIGrIYE59{hva#pzj*#xyOe_hKXWwK z7d4AImQGNyxl^7RM?B5Z_r~*>Wvl3vlBFvgId4X!JTZ#=FFXp9Wsf6l%zrs$%U;J3 z`EtQm$Cn0Qz0y9C`t?t#g20*RWcX&G z|1|c8vFJx#>#SBuua=kl;%ne(!wpzB=&OSL-eh<^6EwI!>Q@VUDN*m8u=(c)bRrt5V#8S;m`rLmUDzBmkOFUTo7LPM4-Pr1#R?IQRd+kW zMC&&-tQdHz?!mRx$L!=>qspn1St|H1Xc(1yhY0w|u~-)e;hnz?D5-rKXOcSg*`8Wf z(z-?*T^ec+yvf-sju+{vO;jDbFfdp0 zqSsMC=o-JH{a!jXV>LF0fBfNpfk0%egmk-j8j#MtQv?P0f$i_}`y!-Pe| zu`Y{ryYUHz4VMNyHVWa zV!BKp0y7N^s`_5P>TaxMvsu0l(W9fO*rbWV?XPp6WzR7&a8xy6#b70G zWVFX=u#|Q;r-ap{&kM!he~?G7MSX$-9wi$lyyhZw=5Fe#Cu;nog{O^^W$i}advB3@ zldZ~P=>5Wd2A@P=DeXb8{XwxlBX)7>_cv%euMEoF$oGHb}nPwoQ!UyrF0}VC@(FE zI-M8g%*ymxTl2houiNP{iI0)Wk4zif&Y11?&A!j`lc_6Dd~DCr&`!AH@>H?1Y$`I@ zDgm2R|DFi?m6z^KhVg3HiyB7!YX%`w_#>zfQje`JAFa~znpMYVM2m3me%(boISoEg zIAQ%o-2zlOj1>{bd$6$y`FooP??t3=FX65?wc?9;<`rzq!fRHlgT2#7PmOSz+RjEP zhlDHCzLcdJLLKTvU9)vpAfXb$VbiRW>T|v}dt8Hz0$o#}z6CWWVS;!1=oqc&s%FPT zo+gc|-&uVN<@@AUhRbeQ%Lwnh_3EEPLyu6Pc|U7X7i$uJkxi#kA}jw%3FheD$<+0G zp(M$7DAvW=mxu36c8V|1Xen0qd9NnEA9@~^z-fdxA zZDcfeEpoDm?ONG98)MicTV2Vw<0?=2a+J|GGzvp^ZiXE?S$v83>C|m6%FL_;!xkz9 zCMZ5`F5Z^VLhT#PO|%rK*JwU|68_REstk=0m8a9U?<(!e+mYf4i>qQ^MwLaIGR9@u zM9y8np%4mCG`6CcOIH)~-6&H^cvQ6Ly!cTho-N~sWW-jz*RJ`qKK{VM^cUovj2^O@ z4FN-sUme5pH}uL&8YvAKH0gO)U0OOLIAC99=Vw|LUAEm>-q$lnlS-%U@<F&*t@cg1K?~~X(Y43 zrO^;;M&d-Cc#`O+!o~g!oMF9v9!AT&M?N@NhAcm5w^VRqcp!ulm7Z#e(qt)>$3-+c z?EgwUX@Sg(U|89EE>xF1^4^jQ*4qmVcP@*>#x79bG1?HxW_wcD%kQVzreTC%+T;nh zb*kJM$5Ae&ifhBYw^;jTTzq@hF2mbGc-WXF@AjFx%TH1-#Ces>f6{Y59&eBuDinUD z;z0n`>~R`3;m)H>1vfm;gmS7&MpD^bd7x7N`en{33FbL-To)heRe9bI)CIm2Bzkrh z?>;|X`UWF3G8vKcwC6!PLC$jSMA;jIU`INZIoGL?GCwVqik=VW$X_2BkF?gz&(9A( zxPUQ7B^W(}D-lJ!&yY3lDH`oCTr!;R=HJ3Fcy*fMq?{_>lBmv}%&U>k#|}=MxvNJ! zR9aXSqo!Eodff1ZEgGdLI)oS>Jz(X?Nwd^2+`VzbQ~d0J(XIOoYZKVw@MH=FxL zsy(pJe>HR2t}Ig4^V2TgWst<`Nh8`RoMEEyWbVZDfYK z$h}bM3uhigz+i5QyYYQ1P1miRN$qqmH#}>z^I>GMysr?otoyluia^1f7o{tY)3dE( zo$mRSfgS1?(yVM-(TF&w=r=EOh!rfyqS783V z`p9-x@0jkubsbWtk7^Y~eTlCov6SnhTX{UsRAGvKrLnis>mD&9ctj;rZ1=&@Vpu4) zA^cg&tR{+hgd|$GYrIHoU~8vS*g)mVhb%jRTumcv+WB^u9ip__F#?SKKhYPHf-hM_> z&zWKeVDJ1Ex40%T&-CZK#jzLUQQgwLMRzyRA#|?M8vCx$($N{GL zWbKEy-LPzOR)dN-eQuO}wT0+ao*ydb zz<9;g+15l%6b7*sTX$tI93o$a*p%|O_}gx0s@ODN#MWu_8M*P1-}=B3B} ziyI=XY{{z;0sLnkGEjEjH8sjzq~7K|cbS(5W*sDs)vZfYL^N(Jk5TE!-ot%PmV#YP z5<}ZCs+?J|VK`F5kTNmS^GS2$*ux8v_cQf5QxbyC5QMvK_YHof>05GSEPD|smia)_ zf_k;NyYM}uj%BkCI5CN$ulGNLEnvaDayoaY;mo)p`&H>n&rUt2xXUd0_Nm}x<(>O@ zzWwWeQPr!uDs53-dsrNy8us3UhQBL)q4a2m(OZX7x4cgqx0g%Stk<@jT=?e0GBRu_ zBT_B5N}gs6^{Abmi?t3Ve0mI*4<;IJQ=nSpe$wqZYgnHNmZqcJY(rkXH(A;Gmti9Q za2pC6OA=It+Afjfop#Jc4`uoy1M?^=Cn0^_=SqYFb}O$ugb{N!&O&z~4|Fc=UCV4=0m>;u&vD zT^&=N+T$Cu=_>q>-4bX^D4eNm4w%@7L!>nRv>nP;f}+FUah)m<;B+-KPRADTrS>G*N%4XEJdsl*41301t0{cqj$!ZX zO7U!ajf(k_H*O5M4vn&s6wix@>OC8=sp(LEQ#*YRpNoP((CZ&RHtrrUZY4o$~z@NAKP|UGz2}& zF+GP!)sO)vY{8=dr+6#mqbJwdVVekrSW^4ee&dVD{ewWz7ICOV2qaBSF#=BYTq|aU_2){g){86!}$nxSY<)CO@TBJ`A_S)cj&ghrC z&o7zT)l`M&5_Fu27hX*nDnAlkFiGh-E|hG|K#*PjNw{<3{iR%^TbJ@4=uT45Ur=A5 zQHn~lCQPjN&LOh%j-2PY=zNSFe(zP3v#Bv&Wcb`_gUxX{iNR(+=eJ*}m#}W?EPLeK zKBL>q|2aolJ1}ZdjYug!m?}yNH-WH=(R{Y7gLC)D6^Z=O4rWfyYiBi=C3p;Y$2O=h z4``I$H{z(hF6Gp&0cZ7!MPo$k6^meMX>+rjMQFfAO$6G=fqkz2uJZvErk~y+AuwFy0H};#=x2uCEcz9~#V> zUhi`e$)kEkVW^(NkS(}@9x&7>pMN^WUANb17`7358hl`cMNnXc6x;K&X zhB*rDIevq|GFx)e_nfq966>^A8t)wMGcT#=os1O!;I^Qi{cJtqO1+!7NJ^(K z)kmzR^sY=PD^H9?V>DOl@F<28)c=RMw~T6YYqy4RXt9>!UZgk_cPkVvTHGlV2ofYX zrC5s-tU$5gZbd?{;_glf?nQ#T?JxUz-*d*^&w0;2scVp=BaOYx!`psKmIbU@XKg5Q9kx{* zO8IA9K*2GqbpcPjRg9OksYG&;w+6q(XSRQP@q;}cA{}0(rMo(pd}cUX`8ZdwV6b9R zS7lWq%Tz`${v*IMS~ql~pB-d~^rRt{Y)N@izORO1&C$ACu2pDJl+Xh~7aL?d8|@ zwpE8UozTuR5$)E0J$w~cIey$XCO74Y(s!pzchCHp0qOH`iFD=&N(hLdJ5IWedJKWX z98}5v2_6e@F4WaeUok)RQA$L|L@Lc6 ziQ1kAjQi;!P38xrdt&70&y&<8AgwUi;UJhn}iggz)*H zeA)7W!ah8F_Y{1WoGy1(O3r6}n2jiB(Yg+F=Y;szu0Vn$l65ulg-lu7_@w)Ge!9d) zrT*U=#iKZaeMr5${yNVsq5aA=1#FOp;;dj<~!ujo2T;d%#ko z9W!1TJNpCW^<|UMvU$P-?lLu4lCY0&(L3xtv_5Urhtxt(k&jmoGv&kcXvp=go`1mz zBy;WPIbi*fDgyYmEnz%A$Qpk4{nKE+g>Midt?2Ios8?|@MzUzIv@BO)KjP$2I~o8J zS!h`EUP?rw)5NxvRUW{+*S&gT*H!XdiUSj${4w0yC%ciq>_*8=mVk^vf1A2cT}iSG zy{FnlxnMU%YoM?-p-|P&z1mRsc@WSAuSQ)?r&#|X&$ zuVINaOZdywkFWW0x0ecfEsmeOg9D*%@H)zGF177J<DwJ9gtk z$|dA$i~wYmz^a1XIZw|Lbmrv@rX*7=bf#c35k`no#|TLJuOkWC|AAt1Vj4F8I9Fjm z@sLXbkv`w~^A3p$oJlAk=A~y*DsX56xSSQ%yEAdolT!Q~n2PPbfZtB~uJk`l_#A`o`b5S%)(*GYqw}|SuN>U~=Q>!*P-ns$A zTBEpgh|NC5jgag{YH$tOvdd_%(sYNwVDz>zQ~}lYO@$F3YNBF<6`%m_N}(h}62p8K zbPL1)4j-!M?#M^u{Z{ryXj5aD(M%eZu3l>E;)b2gQxUE)Cil{nzdbrPkKg_+e2y|p z6>w{I$!2d9-2|?3Ej9shPNo_V%!{@^>Q3*$3)3J%QQh^hAEupiu8Zl?+;3AAF+v(W zt)GL*FUzI>{Y8{s<2WIEz=k^C<0ak$P7%PYx!>G2N1qGJVZOi=r>dWYMYP$s2|m0E z@k#~6{nT~o-|zynEmhroPeurd?bmmVz&mQqDfaUnSm&HyK9DGy^-(NJ5=udl{uO#B z9$yQRW|nKq6fyTG=$&EJ%h{_LSpD~|IstzhmX+y!@yhV{bm5dog|M>cbY6AZ;Iz?@ zvw$0~Q-0h;k~RUNFO;MId^;B5AbrsGL~iH)l8k7;rP+8BOV`2|)Go=dOBjBySwH0B zk!fdKOKhk%-K>h5fI7^dm2Nk78DY{-=3_!eexu;#T{L7H zAdWn!_u=-^JB1-nJn$TuEZ6^p}62%$NLa zs_jX5_7DF+VN}$;e60KfWq2{l1gu&%B&n}cn?@BQGT-F^u(yg_*&!g#jv?S9a49QUi6V`@87f)&0Yi{C``!T4gT|}gU|GmKe zTg?!pG9G%wzIigzeDjF(bmA{O!4B`)gr(f-RTV5mrMp!*y~@DsA9V7*?|3rmgL1SB zPEu8v<|K$Efrax3EG&?3ICC$`3d2{Wd2y+O&`$eAY&j4He~bRVr@Ld z>a9LMy<%u=`{#F|34ru`^}^ID3fOn}Tv(Y@S^im=4Bm6E&s(PkywW>PlBsweqoh{q z(n#%u4dypcD>90j4s;O0f5E-sLKMKIaiw&6W&1ndZ|1*LzrRHSpm@PqRuq;eCeA}_ z0Py-uTW{;6FsBh|2ef@E6K}Ixiq++$>9?8)!PK1d@Ya9ZQmdxIrM`W+E=p@)>Aexj z+JO^fs88pYO^$+s|MBlt5a}TFS74+%j|3GJM>nzXpKTQtH{{UyMSD^*N{s4#{WM@6 zh^9eR5f*IS6w|I*dZ?uvhXQJ-J}-Cv$7!-Jp#5OQtq&@sWiaFtK&CnU$@BeYaU@he zQvVYwqy8sUu1VLga}w@!rT7EI#|pVvj1HfI3jXh6A=Bw!|EJ==#TPS1=3_wCP0UEc z>3xg?ja~U_CdhPqYxB3l`){kQk!W!llYW)3tJg|l$}d01Njw^?dXpcz_AxVz zfw@~AgU(EYg``Vw?%!sc?yprxV1vpeRb`jEtMUTJyp!@{^n1EGIWLJx1ypjp>aU`^ z_gtp55qtxyC5Ik9oF8B8`L&E_j_w^YZiYPJX@+>Y$kHYun_m6}9sJv$l#7`OqnIyx z@c1)rw8XDTF;~xBa47LW4U+u^J{6A? zbX(RZo(a4w6}e()s$O5>{?)}d2&5#L!iloN?|rsxK|#Kn)dzJ&wlMn(8vlDvnqUQq zxAAmoDda`EngztP_0J?9sZAoFS9Q}H({$PzuUIG9h;viXlM~&7;)wCsfEs3^Q9b;C zrkNr8aeJ-KF*K~|1W~-=y&$0y+#gkgILu+#g$e`#|F}Brp1**3{sf^k`pPLr6CQKZ zr0A9y461bO8iEk!cAPf{@L$x)OJtcVtBFff zwBB;lbJ2ScP$2OV3Ie;zw|4CT^lk#^P9@Z;8tzod(g-;e+58nM|BFOcvl|ahefi#& zKGdtxQ$Lsv*;w*}ftg~7>GEpofXk119scdG4T;q>L;$=1#1w$#PN>ng=Wtz=o>cTUC2 zqlC%#`N?(yo>B`jc^oaW4a$98eB-c{KSd@qK z^Y$S@NG1kIVK^TcmwcNv@tZZN&FFA#kse`HiW*>zWMAiRwe{c9d*OzcD_dQ;!*!JA)KOgoZ8oYZ$-@ex znjbG=+o?Zt(E^PaR#HX@{#m54-uBFld34{QLUi@(rSR}JvnFpeSa!e1;-BW~{lV;V zTZGxnlC(zqZdiD-sv5(F+RXV+vBS|Bdh6z?F9~JY?bdN`b}&E#n zAZMuPfD7TWO!cF2eO7_T{sxutl43WNH7Om?uAr{DA-w-Xg5W}9aIhR-Vm~%Olr}Hv z9|ww%OApw;{gEe36Cv@wxWj`s^&^0{A+!_yc}5AXLoJyNa+h9@B_m;rRx6O251U5V z1n+Wgfn|1G*21Gh;*>Nsej~ST|CGxFl?@G2Ra2MJjldNJa<2I+sFtA84$p)!?o7P6 z9wyb0Gmg@j&5$b{LL+mceOgDcl*`Z1f&p9aRcMQmOYqv9w*}1?dLjb;vor9;|5$_T zPI=(90a|l)yZ8F*xZRCQP98-P&suwLGP+B#c;ovey~`Iw51d=*Xj7zeFk`04DqQfp z-H`og0$sEWf}ft#d+h79{R5K7o8NWTXg8Z!er$`#Tb-LiyqsZbok4J=?F~A}$84m2 z=eNT1>{VEn1R-<}dAMF4o22P@0R;P}?@zYMzIxwRGzWd8xud4DMQ{JCoxSB3>r%Wu6a|4|uu3-v+B-YkeA!9E!==DX*)o&{coJbC# zg%X-wHKObF-Z?RD>LX>(Ld2 z<0bH+A7bgdjZvo9k%F$E3Pn)i(h$^fHN=0pL-{2-w>EUUj zG^5sdLL}PxtF+~!<>vnkeu*i)+AgYYlJ`vA7KZ)=b5-GjsHOW&q1h!{6~jlY<}%9k z`pT>Rz%JG5=gW&eY7Zp<7lmHwX0?S_^m;`a2eSX+DJspqQl^esG8;i2b0f@=QO@uS|QpYI$&IA%1|U5NhI5-v2QW{ zRG^0F4j8EFRk-U3zk}Pm?h%%-BoYINBemWI4JkLu^gqQShOtypZ~arIRO`Hp(5de) z6Re1|`(e^oe3KT^ucylMGAub`4R$WN5wvf*G(2krELxK^yV8omgrqvt*U86?yb^wf zy6^+ddn@d-r1#N3E)Zal+cco;DIZK@Z)=J4cF-T!cnWx!Tb+DpU>m9Y94;MKuXCWs z7`hSd3eSaH&hlUm6ezkUn#5>~Qjv7FeBf&iqIZS-Sswqf=qs}9UK`(sz@?FH{5Me> z;`{!J-Cn|aZa#5hy(IPV84B6QK7069ox#dlPw4qklqeXFkKXT5emyMU8!28|G#xJc zA#qw4O@?eqcE0)Of%ihynKfZqKT>vLA~OCuGQYe$BC)yA*07oqSRk4GU2Q8)I4JrA zl3AL>hHS(=AgP?6^C~&l@-6ZEzg@f_FJsUgR3n_Ya~fg(iEq~B9c>-Z<9x2l<|vo8 zR^pn1z=t?C39fiiP*o+j8#ZVo*lTz&BjMeNKhi zj(NEOqtEaf6U_3${Pu_wr5V|Y>rmH9I(#A#=6mB;BgacIR>&c=Vcgm{wNcyP%^WH4 zoKdpHi6L9`DHBHv>Ml~2P=?*z6fqSObVoQ(C}r>?q>{H;oWGf_XKuMhGeOVvE_nCB zUASP{>HXS6NPUbY!$YgiuQ4e;Mve3c)PdWL@uwrliuc1bZR_umaJ**LEUUuYz(}&3 z5O+cRCX@}aktw%973e`v?HaEQ_)On6xthSiXcxs$)95E+ZS#Icm5)fV-c_y;!PFFC zmvS+?T@`jdBH`_+ru}fB3Z0vecm6!FRg6QPwHUJiR^XFqm-N$`appQ7vC=ZfH+@mG z*t3~fmyw5JD&>KVa!i1_s_SR!`#6VSAPX66usD5lIU(^j>{SU5w@pi9!urM_1WB?%~1zV0sqna3mAq{O#^+t@|dX@_HPPi)$JgmQ={P3F@rEh&`@YP++2z7(tF z9l0p4y6(mjL=}v1r_)G12XmQ zz{x~V2vE?oNvgccJDk@-aseRI0gSV#^sr0}iy!1qODP%-l_gePc!%LbW4C{xhzBDc z0*nmiC!n}G#{_kKia%UZ^wyFfpOmxsF{|lCX{uvC&01^zf_r;-q}DAslyD!>k|UOt z6`!yeqxOH$+~9IFHyx9gJq3^?gqgBOQoWAc$8 z(Q{aoai_0Rl29W?%TGi@3%2OPCqX>UluH3e{cP;Lt%2te_nYbK?WcUr`h@FhtblY zS2u(fmmQZ!HtO=uQS!67?^)?$Vvp~13K{6<83nN7aftVHYCDR2A=<)UQ3B#q!~xAt zxp)XLreP9O4C8z`^>UV_TE4l?IHE8B>YsyKLf`xRodLDW`~WtSXYX;v&zOs3sI!M9 zMuM@y2#93#hE!%K+Jz1%dI-%T42O~*LLvUmbzK-PcfA2Ub-&3M(pUA%s)0}kL z4DE(9D3ycFMky$!FSLih#3M2^r>4m?;;YyE*(aR|)dIMnUq{9kNKsO*vTULi>yp{M z3b#l32igxn#>!Gr_+c?r8r6|b?2L{-x)b_I-%zjCzG#TP=%7H4wyCZQATsRB)v)zT z_lw|uoV1Qr3*Hl=at(TsWYB-1HR=klg)Vt;b33n3GLWWuz`JX@8RXC2`BRrhzhq&t zKN<7YZVs4><7%tiQOtj9Wx0`sH{euc{G|;%8^D$SEu1DDBWDGYC*ri^kk!^W1-w^} z@Uz1Iny~bvF=2Xebf7uGs~Hr1j$SocQ!vBxF>TZ)^Gm%QlEsboeMVg$!wchL|NZhl z3 z6E4VBu009(kSq{8V8{fEDbU&3B1&4uX0nnL*?p(xrKP&S0d4H*$#{c9_u)Pq6~&5N z;>AGzl>N$_7MFCDT>hlMPtqy5NoNn+sb4D+G4##CvdIGe4Y32-!Y=B@lKQbmQAN9Y zVtPeoice;^68=Cr(2L?1duc*?M$M)-fP%u;l6YPoMdPPgQ$y-1L1Yxh$EhzgpfYA$+#r9QF>@ zpz1NeIYet?hRPxVNso0+T#llVR!Z-toF+5ktiNn>ims#wEWSIUFi%}z!jgEHfI(3A zP0IG>%3)>O#m4PreC75z!Erh$Sj1@9=rp{>Y0^=LFB_U0W~dPFX+#gQZGwe2H=I-B z&w^st7Xbo@t4G!7Cd7A#_bIBjTo3IysvI2UmjMZy=X4q6=Qdxyi5cX;=Ij_GF5cl>7RUpR%V4+kJyZUrt#^r z(g>*>Y)X0vo?mx{TI=+S~80Ucd z)3?yoC52{^`hI=jp)8_T?7cg}?M|cCPl*;A>UH)`pY&uj=p?3HERH~=zkJdSgscUN zq_dArLCg^>CEE#50sJ?T+*^m~!#;0FlsaRo;$y!jw%?*>*$+#ky_oGfBl_=%E&ngF z%m2^5L)!*BVO3arylfg8)sO%^Rxx_1``Q*bct_nmIY6Yy#gZv(uPUL&C6fMuvgCg# zbyOq;9i2fuJrO|IcU~IY_aknIc2nChAeY#{E{t0UQ z4Zy&8ZP8z@lHnRkS79R@1{JLJO9ZA9z2xtGCC9GddRFK2AGC2}uN1Mj^@;0DuoKxfY(#*j}QE3&Ek2_sji{-42x)Z4;t?;w0-Y=Xn z!YRI`R^W_@t(gK&(T}l_LEw-*$#XyuPtw}vRb*zUNaf>#!+dALvi(w9Cg}6YC`II* zt^lO#{c&%WCD*;L|4ejE)=GX1_0TH<*|#6aoqBP0!4B#^re!!|)#HNVn+<+`j(xyK zlhIRlPDPCS;ciSiw#}0af_&Wy4*ABYZoo%>E4)+rL95x%u@~2yYqW!&-AT{tM zobIW;*e6hRn(^=aw{V5)8EXtkS3-+T`r7=YspsI4&U69>G=XKwbzAh~8!26Q#W(?K zdy$XOT|hf_HMK9-WkLCh;qEN{PUq-|BbdCm^cN%3{jYwy3J!1ITk&Q)The|QN}bz7 zB^_J4h)AO6aO}GscvB1wm+c8zBr|jxksrL*d8i?(tyzs_@!3LCSnd~P$1G39%L(@i z?#VT0%2`8}1b021Aw*~8DisP3Q_w*1mrb}?=6&zQ&yb!+8nIVZ9(Y9UmnFhUwEGPZ z^J}7#{@XZq>F0p$K8?wUshoOlFy%JYOoMSUhV^~^*S>d8vwAhGN*wgX3X%(eyI!mT zFY}VD!=H~HB|2lrCdEPxX3f>5s3s~97k(V+F%pAj%wX4TXBQdmiJ+-US9$6R0%yoW z&Jg?(YAnG%95iEp#l3&E!r$9kJ$QiCF(`#66#LwvJ`jrIPMN z6lu&AG>xKkWIRV%pGp@l$n#A0a{_dl@5a+iC-|+;3*a2Hr;`apj(XK~3_rwVYOcGL zvdJOq+)o^5HML&2f6e51wDqZ?irHjAo%w7N+G879Rwz{$+GM{&^>zS^PGZ~q`s#F4 z>WD6YM)aNoQeT&LySrW+>t~t4Ez=41ODogk%nb%aE}8g4B=e7cnM1nJXQ5lrEtj{x zbH_Q8DW)(fdQ&)%ZiG(Sw8(jJ=jcNXYZVx*JE#LCO?mHCrL~#@DDk2D9LtD)Kih82S1I!*w<|#^8*w*OxTn4xZ1@EC=Dtl zXci5bVP92`(Qv#`bL-MPF3c+$b8sjcO)OX{?bs1XdfX2-&7$KbwCquxa^5$eGH)l# zx_AIwXC!&~R((DHzBOCHCAC7*n{Ja5V3%g?o!>84YbT?Vc}>T=Yr^cy4P8&C`LJO) zRmGE^sFDU}sfnK%>~N)ai00T02r&QYDS3o+w zWz;Ab`wkl`}vG}q*S6Eq#cZpu}_!<;nJGRD4Hxg9eh zrT5aiD`;P#DNO#u?jzka6qg0*?XGsYykBu`&}y+>i#jEd&N66*1d{eL|bbU9?WV-VBT2 zNtn-WY^*z5U!n}ujgJq3l^4tTC#K74+K6|rVqmi5ALH!U2Dk(6iaT-RN& z?)G|uSL72o-AfPHoIg}xD&fpr+iRL6QC3{&h<-0ij*vFdYn-E{Bek1@&CND_{TZSd zS_3=PV$|o<)yV}7NQz&SFS&_3IB6Z03v#GlB-q5idCM{=Z0&6L3_VL-5nI5aXjuHd z?LFTtFV`?{{hQ{mB3FV_*F&-)3N2}q_>6{uQK6w!WsS067XrS#L6e=3F1p?yM^Ls4 zMk14nZz@Hhp`)z4kewkJrTcv#*PAK%4$W4X#`=abLm^(>&WyAAV82~e(IXx1 zJ`}^D2Zg;h!1ZcK9?qA)UrQO(u?!|uYuJI}UlRO*GG~>NrP3UEOC|Vh%vA`(!9fCa z$h3-=_dE+&*OZ(HD(sJ663p@X&=7ja<{3Zd*()AEt+!p}R}^EV+B8wgSza{}okFHp zJy>6QS5u(%?FVw-u`&K$LIYH=YzY6BsP1oA&^<@`Y>4=kWcJ62q|cu=?<27!e>abd zCAGXQgl2}uVWr|X_k#=9ac3II9LdoXCf{s`v{wLHghBb&dho*l{KdtkQ5(SWI@`2S z?kZa+Nw1HnBbdFu)qPijBM)xupr=nJgywXT4~n^4d|p>);l7{1A*|C1%jy!N$=3!p z)H{T*J23*cwOh_bQO*m>#-BKyPf9TRdBfdb#GU+TQQhPL7F0uX@Uy;OF%<8@nJ;r3 zuY^vzllvbH(|k69`F@R#kG8)+2C@U_&ErUHXWGw#UZ@r3$aP?@1SpHgDnX7U8VpG- zmWO{XT8oiZPtgkP-0K9W+bUCv&b}d7{WBU|gRwC{@GL!==qO3bOT@OpEct!%FNCWr z^;4?5=FC8rkoN8RPyB0aP<*%TF6{+Jr&%oq!C|d_8qFX7sZ~=n`W)n%Z~Xg8E2@lD zkPeE*&ExoaoOY3I?O9&n{7!}^RnyGWI=;ZYQr7#kg*!3tXepQQnC9&HhU|kUn}q88 z%CJ(?HW|_4^N95s`ufyzCY$ar_;2VqizPzn{Y$+iUZiE2PO(U_XKB<xq+Z zpAA~0p?u0*0%iG@yYK6^Dq+=HOpq)B(KNP79(QTY4j#y8FXrqidlSiGt!Fl-KQz@e z$7EaKX+NRICroJx)5XR}>|h~2x(ym!^ai~TT(BW8Five9qe3S3e(Q}*&S)74@Dt*u zl+X)PA-LfYR}vA~^TAwe+X%4hPgKsvjt+Vom_VkY`Z&VrU`{LaYIM5d@MALh<`X>E z7Y`SDoL;nn$6{x?Ko1AemnYsYwyJg%VK>HCf$t0;8Lnd@`3t*$vWPJP=C<9S6J4uW z&r}%LicYvk8XQM2q;_DPK2z2}G*0LK7NF}q|@4UMpGQEn+S_c@~xazuKBWm-q2SDW6ybx#lbjs;VV@o z9pLK8T*$5|&BI}0gj8T zayJ^Dz8rJHe-qCa6jVpuu&@{in${^q1nlRiIXw8JE;AmV@kCY~2z+N$;z|(ya8}w! z&f54&(GkVqByoVAU?z#H98Q}bQSwVpl$FLR=~o}akF}&c%Ld986(Z!xCnQ(lUJO}0&6eZjKP+sY#6|8v39$q4qY$d4qSCi28I2pUy> zqz27q7>^^paAsmE)7P8#RdK!uO?;at|FGZ|slk*u4Y`PNLSI~D;{D#$*v_X^U9~^pprfptXwP~B%LOY*KB@fh%~K!CgO=;KdLo(!WA^9? zG*lno4_*1^w--=!AV*>c%E_pPQ3=nNi{gqjAIDDmsIjLu(c+4ALKkWasWK9AIMh2i zWoB%UF1_Hv#|5n*o5(>N+EJxVq9YmN)vv6I6r*c>Z6w%{9j3SR`WFj5FG3aKKitWG(AULCKnmx&LdI!BE9@u% zS;{j&^-RpmA_a5GbkwQ9a0XCuzfR?Kd}>fI0(n7s9%zY2c)}AWp<qz?~?@z@{Q>%dn(`H-`2Zutb*cS zP((S~r9k2!U@J`|-WX-I_6K@#ukZQ)fGWza$dco|xz39ZCmoXh<2LYTbC8AjrHItb zcw6}Su7~uqK9Z#txX!qc1_qg7?TkcX7|?GE+M8{;hY4ctz#;RWSCi75?uNGQE7F*i|H5 zn(2Eq1i6xwol~8cV$gfBuanD4zs+Xfg2nxdP4UP9Gj(`j+UV49L zOIx>FeV4Hc^u%olROi#co~&=7`y`N>(;U_fu%fU4R#37T3}U$nm40*4IcWeZ@6J}u z@54XAZSrg#n87K{ntsh5KWoT%eH?jfAB>YMgT}3@1SF{*n~__K7g=Fll-+Y=;}waV z$xOIeyfYYvqqwB>P8;G)RvGIRzab=zjVF?jl;Rr~rkEGvxWz$si_rp(%7k&=3r!V^ z`?*d$-4o_}ub0f0qI4paURo>b@%N*DK%k(Aq8IQ&hggw}tEbClb=82&%Y6}D`cOsY zz)?Pz&)*cT^dIYp>pl5A)Cl~zqCEWzO zFdpHwf23#$(T76BaS#@%+H4{CG0B!qub)1OUKZf%0CixVq6pP4-^z3+&a33X2;A^3 zEk6G4K9S|XWRum^IDVx^>KUSe!h2o5hECtg0|)C$msEDqEel(SaP19 zUD`MElO1OeUMSbjqmfWIkgNtNcQp{35=hH99S9)J;jGw}?6z#Tk;rN-4N#$7t>?K` zd{;Mpc!bnmKrHKPllL77o`26C<Qbd2<0w8j$+Y@N~G1`?+U4Ok^i|wg6oHu@FEy z%fG*0+(TR9B*7jb_3|q&P{ae(7fdEd7UA)W+Y#Du=#hnp_j&C{e!}4&ht1W@$Bwx9 zY{CtK_&(Jbx?On0najFpyGIYH3|>)V?9_+F6v>JbQsH*DzPa2prZRdqe-rD*kyY9J zPe`%U54R)}uqFvS9OP)=gcPTP7iDR;WyH7?uc&|g$V!MU_m&3zN{BS3n>oc`p#82@m(OvD8y<3_kKgvpQEATY}P-XfMf3WC9^J zM0|Q|P3OvWgJ-eQ?x%7R(<)!SnYLe*HJ*(?wpu^=2+%qh>fLz zo5H$|d@2iiwj@U)*&OcxOCpG`Oyw25C`toU+4IF{i2rU`*u@PvO0^}4C(}aQF%*dV z+MH*50j$9yVFA)9Ydk?5umOmS*&=uJPcNu`M>?G@*pT?1GxZ~z4;!r&t6k8gaWCz9 zC8vF#I;3awR$+~G5#>ZRlkF2FsV(?js|cugD0&A&?$FqXkq6ox&k=@%BP_{O+}Kkj z)AQb0at@iI&fIVM_>33LR5y8f)zEsM`&#cs18!P4BMPlQt>+yszjXAEUTVf3-z3B31> zZ!1d*`!>8=R2}><7rA_B25L_?4dYyt#8Yf!$=71-tC*M53*ZjDQ}1In6aSrWi}Ei% z%67Vz{$d3cf59;XN>Z!A^V#7c>Y zN!|t`5}ohyJk-J*BBhD6H!(g@ujKaVX_^9V!MW)Fjg|y087Xuy0w%uv??o&nE4Meu zx0Yx(VE=>Fnqk#FZ?@^KUdd%ta_Xyp*~+XPM+*PItj@sPoTbgm-V>p*>_XL zwdW9xY1Nk1A{-_ld>M+vI2i+dgqd&Cn$MY^itM%smdcfkS#rKE7->367v{wXx1|$5 zgtx3(#1EkVR9L2)o_lYM?(`Tpanl|_+-ueQX^dao)9Si5)^~s89`5wmW?N}y(C1ge zM8<0>nGIQ71)}u!s{~i{4aCWm@;by1fc$Jr_mV+!prQvbRkP}QYQ1Y0B$ymW^wY0t zEFY;H-99$|=Knq;kUqlGFC3o@_TVC}R!QhxrKYL;Qqr-<-=k%Mg%KTnUKwK40*&f| ze~tyXr&QogE)Gf9?FBYyl6VF7eH~yT(5QD1H-=W%H7T8sDBdZ&psZEh6ficpFcD^< zZ9SiQ{&U^)xTL1-u`|}GZ-Mbn>Rr(lt^UYW!`)-ct*c24NzN-sS?=57CpSLPW?Ck+ zSZ;*AMv5+{{J(P}v!DKH3Ct&N>Kg=DMcP?WIdK+=%DZndJnsJIhrj4qhpr z-|S(DH@r+!?&jm3;d(i=Svb2HYhK81E;v(9xPN>9l#KMun6ILnPkuOOS}ciKsh?3Y z{76gRVPk(k0BWfCko56qIhTQItJ9zmdfn$U@;>Td*Au!41`?`qj27cv6iVmtc^q^oq zFD%;5G5}mJ#wvdoW>lW`DfCboFUww-{)^&5_$=B{^>#-c93r zEW(&F=-BSV?W4-vYXDH$;}MBL*r5;kvt+e!)54)}>OO`;d}vSy1-0(gbpB)|lBrL0 zlCF{9VeKiKiUEA*=*CC*c}D9fX14SSp5R|n5I4lPWBXlsV0Y@cR9$VQXk+RT=aN2n z-64R#KTWBno42)>qftXwWRI{wtasL7zn_ci{im}Au;3yY=tUr(_rBJkZocQ+Utbc) zMBC3tq(--m#T$T5S=Pr*15_3?|5}O)<6>!s!;&0(F`efl0YC<@vh`QO?-eQ02-iU6 z)vH~@qzdl5lKliDgJA?HJlv5ZR0bo4ZdVPS*WeY zVaeE;sJ~SYhZlvOCl(y~Ymc%(HpgE5Ug|*okL3u|-hOQT1LYKXa6ffFD%L08+E(4r zTxY-(xkRa~kKm0U(J%A)2(yAT6rcOEUl}wDHMvWY~ zW&N%&BV*1Tlq`_zzysfxMqF!ZwJCDL>xgDkU#+-r3*PR5UM#SHfd7H=9kJ4OLp?$= z?rq;Wt0t{KePrQKe108Q(TcR)JgOsO%*;!0k(F>`b9bM5 z%uBIKPDEbXF+skM5v+?IKcPoW@I}=&=@2YG!W`C?=VzDr@Qs>{V7a!dy_|r^FeMccc_y| zmp6~31UsSu1!ljD3{6eDwmN)6m8g6(_XwV}i_(GFV?1c-Yiknak1w{8zLD~qQzYv~ zY_fVb=t_(8Qv1!8Hz_16)6YnVaS|~CFq#Dkg){^PD1n^q^&>?9@~5wHcEGCh=5xn{ zjKL*N*~xp`9DeS6Y8+qWX$&LUNmh(^#W?JZu#(-|$BK7{1m?IT(&Gn(C{P>;^jTai z{7?;~2+?{a6-^Q!O&Auie|D$p+=u>o%M;1d7U!p91#gH z;hL7dGQbI7x#kUZC}V{_IRrv5l_77HW=ND-tk^hJ39j3B$0)BLbW@x_j~KawQw>`O zfU^flqS9x*EFj4*%g9QNcQ5)Fq840MocE2X<)00?ipe=s4GBb(JSVQ@l|(@=DQv0{ zXDrcsAB@w1)ij1_4sQbsB*!Y(MJu}!VGzC3d$n>k#glQq7Dc$FURPgpLKb87BViEU zNhfBLgn(;LV&eT0Pd!#&{FK)w*PipUH6YMSCc>;jmc*$oA>3r!wR2Y& z+E46cf^ocb*M&HB@trhoskS*#cy66p=e(oTxS$_tik)*UM*8qr;X6M*>E*tk?v%iE ztAMrNiHh}8M;^{xBi;J^Lo}VRk&vgMIxZx#eZy`(;b4=%H6sT8Xnrg`Oj`fg{0B<>;Dl*qie=79jFoPr zNW}p{8zuRwf;YlCF?1lx{i`fKEPmShl2gnq$-hd$T??s@A&GBn(Mxcz5Bm13k26<0 z%YF6JiV$kGP|KNU#}4fvr6h`7hhXZYTW=5JGeY0 z=1fmaV0{Bvob8IUvfZb@Ck~5c>qeGhVAQ9NIHTghXW<;P>SFiNHfut^s*-aXS_7W! zJD8IHYMU}@d$u4UM2Nc^q+=h*S|xLQ6jpBYI8rl{GqslXxKyY%xk#0Z;{glP^=l35OsCUuh^Q+;f&yym}G_5VBWm>ar47lw2ua#W8eDKL8YsQm+}<1 zhjF~~$4v^bP&w>*PeWoL)+L3+IrW@*34l^PD1R?e^+VIwp8Cqm*LAgGh3$YW zIYh#wypSlBT12GR*Q02!$zwLLSj{ScF3ID`0s{~~B>Dmae34h7LDLp>VfYFfiojfK z@8NYR+L2!TC|%*Wa_u&_vF?1yTq6jL>JM>rG)(&RHB zCV8BN@7Qkpz_JH`Ma36fEyq2030(||ueqrB;;7Msb*?BjB5Sdd{G<{=B|QX=6-!ph zYI{Pp?&PBys~qJgdU^Jrc-J}}Vk{&Uls#$A9(S(FrOcN>`)9zNg~*|)iUVf}it^Fh zPfvWTHhsKUPo14kpLwD6__}r?6He8>#Q{h_-;kz0Gk>>iF)l(P(-Tk|kZE)U$3QbYSm zS%OS1c%P4>V@6GUOoL7T9{_UF>5d+<$F`~#>8kxh z(S;}z~uQ2S=u2Y8pt@lt4>5G3u(+?mP? z1i?PFG6gz$%(rBwoy0)iK3|?P*^O7 zAAZlj-F`^>)8krqf$~Bk9+DR{;-ROnhqU7$C`|U31jg;{42BvSFg)&GM<&^{Zv>0( zz-uKGjJsNyW-0`{?6``e2CYQ`mXu0+_!L|D=OTH^%xC*a2arcOsg$j$Uis#Nki2K1 zTe=2?7mipcU|Gf-5|xU*w3yj4?>Vp28yH?`LH*Y?9oAJ8F;rc)|225#+Jz@wrgJD4 znJvPVx*Pa1hm$nL)T+0xY3;1IQ+T4`&6nqbS_MsDZs4@kS z*&luIjFp81=l<`u3jevSVE=FETGxSg+Hj-7ue99oy;W&G5b4S01Cp$@v9G;llLSNi zk~Xt6lOd#^Ab&Yg+Rfx(0MUu24y;tTC+KoH-_?Wu{2+Snhfmw7nlg1TzlksMbo9VS zT=u2R0iSQ;3Yw%`7iDWE#_6&V&KC@ylIKVqmgf+yJ zqw5n0FCT?Ae{5Z*~A1J|C;F9%$!%6syiF_Jrm%JoSnMv-((%{|vF`|+vOn&xBAYW`m`DV}DEDK4?E zwwE_)+N;enTrh2S(@1klkRBmDq~aA|@BKxnHs?(;i_DZwtdm zlZIUU2siW&>WuHYKwF*hQ6ETc8j|P@ zeq}guZsHw#?{}P+iSYsIPxq=FRKWWV3=70=Lp#AjYjLaKmQyHDrHhZ*Gg&cy)O6s3 zzjC2o-~Y$nTL;D2{^_1gfIxyIxD$fAyAy&3586P21((Jpc!1yz!Gmk#jk~+kxVyUr zdC&9ye!Ek%v*%3hPSwBLd2CEAk#Ovi!(2H zzUyr4U+aIk+us7u>lJ6cSfSr`evP2zO!CXbiCIQoAKWuFU{@fShh?{=En`KUzw(}U z4b`S?mO+ZN7>=A({=c?XtL?W^PCE@Xuv#mosrUEXK80d`jtQt^xCqDT zT+VG(xX+I4YJIbA>Ah5hsxb=DYg`ZtqF;Lv51Geb zAhlOFJ9Q~ij4M{UJv$t#ehr-`wqngno^TCZZ44lcgMGkvgJ$Y@LuKvz<71_taPvP2 z>xbdrQXw1qnj14~Dch*A9O$t>jj{U!2sPtbZ%8p;i69$K$oFG#&pP9_R5gLq^mMu@ z{BGF#ec!(12Jhgu8H&51W- zIN<({1){Y`rzL)LylG#1NX!T`@l63{9>lxOdX^6%(U>w==kv9uCbG6CRwPQ^H&t;0 zTOOgJ)9hx}7-f9)Z>VrAa!lzNanNoCih`xw&usu6nS)-=F;S!#f8WqtE2RZuR zm49~Ipe7UI#DW=>&P9a;a^EnIx3j8)@adLgB*Y>FclFvDr#7n^+-QUNyJaWA(v!uA z(b*rG+R2mm`{akS6B0Xi@Ss-Z09+Q;MzNItgTMCidmUdYl-n%VU8L|`o;WFyD?~|! znNz2lbQbEU!88PBwaz%{I{_jsBop#rBHRIIp&}Mrmay!_G4}dcp!ZzCSDXUG4l-_U z-_29Y_GPosh3>>(z~YOuO)j=%B2456CSv^5??Njv+X^KLNfupdgTDRj9Ky?$Bgr~| z66!}}LiYD{xK&;*WiY_0-IB}NFN|XeXAGr2%e{nasMLcZ+aZg1$nd7Z<;9kkk>bVYBm4gE7 zNbcoy_!LYG%hDrZOUqULBkShZLt*^$E?Q}J1xkO2Uw8%+WvFHaaowNiEH6d{?&#bi zw)9ps^K}5JvtksAM&6uuEed1J+VBFa)Hc*L)JOFKhB{cXgHWr%G7M3!D|5qnNh02A0=rOU;|&}6!H!bsb0|DDx756sQrms+6W`M`I}mDb(sB;UlOxzvfg-S~+bxz3lWujtyJ)c?jrS3T5G$B3Xox%D z%4)eGP64?CwI#PCje3|HZNmrZa7pTH!tN@HUc5ZCmS9AGWeM#o^$Kg9rq=qVP`FSC zUtW#(CrNV>b%-@&Hc`aO5}sc6We&)gVSl(O-B708SP>ZK<)~*473bfiA}SrEe{s~9 zz6ED9WA1@wI64e|c6?9Bl4e$5n?Ro91u0w+nK{ZZIRSlJcxewJ#RTS|!t8cslZm`( zWv&5YCfjA=Aj2qeSv*mg*Hd26nCte>?%?+_*67~fHHaB>4Ay`u9rk~j5dL2XkpHP) zlQ;nvD%2mv)0Y#SFD(46sIR?rj#;vMm!sKKl_3LbtamvWq>1tt|LO_wgA$q`B^EJv z0cz(+1p7?-l59z)+p^SJF}%kPTHj^{wm3#nNYA@8b|;+)*Dby%H)$vGB&T(DeBfI) zg4`+_kHeMHtdkN#XPQzM-rYEP6U;zac~a?Z*}7@4a?+0GwxWBCsS5HfM}n#m&Tdkz zFmv+f_2-&>Qx_5V?Z@f``Qo?8?PbVHLQCL(MDrj3LG_RGR;@+s6u{6f6WsP~@4?Q8 z+1x+-tF{K6#1#+QUNf*c>(k1fo}i3`ceZuEy@fHT6`_ z!~SfTkvQd6dnf0s_WR1nW(~ftaxJ0U8jFf-D$S7sEX=kAa?}?w*@3^fHiaY*<02vZ zpXcQ(HIdl)DXww#m}!6}CjbB0$opUYwMK9`;enQ*37nIrJ_yWjtsQ8yNNF?Zm{A~n zbAvacD%Ya`=~WUUUqlJ~PF?a^AxDwA7%so1-;Y?cNygRw&T~40A8+hVB)`Uv%!0vD zNLzPq8Fk&_mAIs_%Sv*e$5z`q`>d<&gR4-M-8IK`*wdG@nA`zx8Icu#K-3k zy!C9T24&_q1il#!yBln!bWEnU0KB$i#df1=f!xyAnAM7QR<6 z>&rQ0SSk%vNT*(guVt_cIgVN}=}caM#fZ(bS!hr6S#Ksuk}7IlVn66B4;Bar`+7t^ zF}-=lVeuTf6kWZ%j~&XS6>Fhb*gd&@mt*Jf ztT#iioSNKr_~j1ivMVWZHMrmrC-=-dIosgNU96YPrwj!l>dW`F?mA>*ZXivnR(`Q4 zk0Ul=3$Y{dk#yC$WbiFD~$%r zIdTI~HFMJ>B8szI=k}w{dJL;xQ3`mi;Uzo3RUH?+QAC{IXTo6 z*vS?(!>1T?dX2?VQK+&b9R#oQj&^QOm+!qE#F{Njaa!7tcW<2@qCU(DW34OlDK=JR z>?+r_hRzO09_Y)41;-JA+Qn50=63IAIer`HEq!M=|Hwyxqk#Lyx{|8FG@M|IUPSD5 z?-z2n1gE%sA4?$}!f<4AY9p0!topK(jBD1+^EW-jUg7vI9tBA@FHkp?tGita_c*n< zThflETo=z=k<|#oH+(1)cTZ#FYiVt<; zL)q~c7K{V`ske;(zudb1?ay&k?xc(bO@e04yvKRC8i`;D^b1M-gI=hJ|+G|``PFG^F zQ>;r|Pxxd+$_8>`NxRJXe&`WdBrF;Sijw5+gCVc zudf?}k|h20Blaz}J`X$(7gBMt)JfUj-*Mtb8!S+kIeYD+h@c+OvRnu7->-!qz-K{C zS*do%iXv+Stk|?GrDz_ea-av|y3Kd!V!_N#S(q85}jH`?9`P z#G_=6r68rnf_F(Cn#C!$oZ6IZ;&Kk@&Ig6J-H@2@l!A@Av*pttR}o^0=L8EtXO>f> zSVe!PIqTZBFs;ZyQTWcW^KA9;v#FrH;{4S~UE94^FH2olIiB7;&62LdJ!Wc$dyZt? zbkSFt4aV!+uH_FlbPBEGEUdPh89lbPI_V%Sfx+@mXM*S{SAT(U_g(pF1=FEvH#h33 z6x9m6u^TcGDyGDTLT}bE#a^#Fwc+naTdkla>Px_flqxy&B4Y6(KZL&-id0@EA}Z7{ z69Vufx}53s5}wO#pTFICuD2GH+-aVwE4V8TA@OpQRtEmU@4|`e1?@q!b-$h*QKD6)zEc56oD^Niuwc_@sLbw zF=YTPLzalbi%C+Wu{LF)6HPNYahV8B)=zE-ryc3fpJ`oc{8`b#C8F&C#C0$(LN=2vua1uO%G&g6eL?Z3o%KRu63_(Rwak#M>Kr+G#}4n5otI5 z04@-zXq5g0`N4 zo`o6>tT8y|Hmh@u)E85>V=H_!Q&QI(`OdS*>Q>X00PgyBFZP7ZK9-V~Hw_OXR)T-` zWw06ppO>F{oCVl1D7#UFpu^+22|bBeI-UBae_OaW<}J1eA68~(`uY=QL&>k6Cw=H=4?IlJhMr9CNM4d3P!8s|}FlT*1tPKUIm~`~Acy*2DiN5kLgm$4I zp#SFEU<7UyNw^?(t_PN)9QUUrCaa1;hJFNRlq{Z{4LpA`B~L3W^L1Gh6J(tb!_)fA zDO^72k8eQJ=YN|XamJk}ZkInT;ZwYGIq77JMD6IWc$7jB4xC$s&zVySLa!Af1fN}| zPF{2)Sx=P4Alw3>^w_?bX#ju|@^Ur;JdK)H!}UZ~2e^3;G$ z6MNLG#xuH@LcPwBUoTVq)qvP1IA;#I6va`YN~2t}B9W3o^CBl>+C@^ULB;_eaMJOqX+59^PqP6=Bh2Db z(n>#0t_t#Bhkp7>NhKD7W<99RG=LeLyMCMHW+-}uDS(Jb*yI8-S?|Fl19)5Cb&ts9 z*&RwwUb9$rxp)X!gcRvpg?JUwY%k^GhnakRY`5L2B>M}LVCh!S-HIoQ4X;_o_C)rK zAqr%1+O4Bz3J5m7{YfOyUQUr+eS@ax0~PC^J;ZJ~Y6ArOqet&>U`2N1uoaXp#anC<`+(HW`n zqs!!d5jW-tkp_Ah2@y(6WV(A%?7aVf$W!@Wet&xK$i6~|pD3vx#r0Hwzsm`zCvAz4 zTepY1{jqhuJUq@QPS_D`nU#*Y)}M&dx>|c_=0tU(6uDS#=>r5a!^j+>!zrjVH;@WA zMhjzjFKf#(fPFuiYnis0WJHj`F($A9eQI5Oe(Q7e7l`kP?LlVj;>>$DsZL;jwoZ2? z_47m-4C=6@r_0h^Db8HR#*(5P@0%^IZtUpiE1wZm?T})pD7GH7eEnP}F!#t+GT_Qn zr5hAWpXf^Yd49W=ef_cqXbnSo7nA+aMcfk}E#qjkA-7{rC1vWuiEe728|{u{RwzJ( zH@$in_Q|h^e3p58gu7A+;F&jvFl1aD(ASZzIDw_70oMM{BOXw)(;E%>~&L`>%>r(Gg2Ly!F zTUkMDjyQNj@g&2Tjt}_FaK(*dUaWqV(ehGus|>SXxO4Hf;fAjcbqS<#tpNkGlegTs zDeI4h#{>fWPN$if`AE8r+*Wky`(?7v=IS8-L$lYT)9zWJHTN>Tn*|KK$5!Cl_CP6R zV_yks;xpTkp}r|IY7%>6xv|=DYHU^h7sz;(J(rvTf{J6{IK zsw?P=$xl073W8U2e@F@iyAASAU4niGEc&ffl;oV}Z5;5$EXfpFT#5$_`ol+PG-`i3 zskZWr%@*;DYJ9Y&hmsr{?A$C#aJw-22K=%%45|MMWbyVLyt?S;5v&|_siifBH|iU& za)FFcQM%*^Et-JTx20}$Y+O+Xj!z2< zVOo<@s%Iw^&it2o^HL-_KesOpJ}zGb)O~wJmA=e%RXT>MSkQqF<#~o$SkY{!!3S{q zI86T$>m+eIay(W$J!Sg>Z*LtNdVV$P<-hyD^&m6!7fAB5If~2v;lb6IXiVv@2TcBM zIx=KZH0Mm3b?WXh|?57ZV0GV@>4?Dwwc^$=WQii0hR;e=duo?JW3; zmUczKuD4qVE&48(uULE+D&+akc<;*2$*>~1vC8X4JR`2SeszBlhE=U67tG9A$Fzy7 z2SuiC__$jwMlA+WOvQG>Omw`d`PlHQK1SK%*7t&P!Sc_2D&;p)4_{b)eBzo;J&g-+ z-BSK|F4iO6-nb5-Q}VA&zMqPnK9SpBg&I!)zG3+096c1nOj%#hT-EIIM@4Cy ztA*YTW%ZsSj}sNN*$0h`+^1R^8CX^zG5EQdg$yE36AXNtCRSZtr&N}tm%7TUR_kfx^bccl={DF5vKZk@N zMBu0d#0qA2QuJ#)vcxbSH(TL)HJ&<~SXg(_iyR-P>S#Xuzdan#g!(CG5jIJM2x$>f zMPY8WoE|Cy_4i);m9lg@ROnjK0#^-1hk|xLp>}FJ+fHyBxzm?-$+x|OFJF#3Y}z>> zjHybdoz`9Z^odKm{=6c~pl_+1q73E#sy&xXr}1%+LBQ48L7DV+BQ^WZXlJ*(HU)^K zC%uq8PomtRVIheLiU{f2BIiAUrlxCsY?^gGEG(##`xc314Dqryjj+e%HSmK^OUDF$tmhU%DB=j%I~n z=EFEdH0B%HwnoX3n4(|9U7q<*_f@~_-KIEk=;=|j*-^z~O9(sCuKRzk;sC8hzTv5~ zO`)j^vpKOVKZap&Dg?XZ({CfA&?p2+^$!rCWgt9$JAYYZ!50|YV`p7v+q0MU6xj{# z#WBWY52?R85IRqRq|LHs`YCVJNo3I2p`|hboHhQNC9g8E>aC&YoWc9n+jl;*nMzEl zo&u8ttn(bUC#qkl63L_mXFMv-#hGI@>X+^Hf`Sc6v?`a!pO|F(VszI+uc!7s$Z~q} zpa&}oj)k%PEc2fw-wL_be%{Rz(E>S_88sf-=)zAWr=YBCYTXNQWbGHp85UWeG|*AJ`?wPUDJ< z82zSz>=6CBG;V)-#$X|(6<<*IFmcyFf5GM5@H;+$v$G6vcJgNoE1JE?-@IubbEc_c z>7>2+R!_Z!u`;*cV+fxOxJL8h>c+n%NXCCK;BzLTCwqN@xG3<*Am^1gRj~Tx)lumH zlv_QZ1d2`wir@A=iW8&7r*2;iEVyuhwp@3r%W5z_EX<8D+Y=_h1<+kN=GCr?f#W7tC&Wn=Gt64JnuU zgC?02-q2ZFQBVlQYqCV?MGEdz?WXvMj`b5<-&S+!oaM~z{jph6U*L`tzZfNce!*EL zesQ+S2Xa~-BcDmK_-)DO(rM+EZQno1?ET$HOXU@fF-uD@%5M=2^Dkq@MR#^`;g)Z~ z`r1;=c1Q!XCPPVTfuAECBW1Td9Kp};;M~B{qBJi%f@X!T+6*fi?kv^p+JC!zP0B`f zQili>l8-{d4o?06F?jc7rwpRA)tlDLqNV2Xf*4zqpCt7;LS6LtU8I2>!fEK6DLaQg zok_K|hb6izqb!LxBfsU6brRk=R4n1*1k@3MuJ?7P+nBbOgmBF!PT$uxq?K|?SntIS zpq~#GYn!@j3ZS6G^tv6YFSyxhHUkd1kzDuRd>p@>mnMQ1n}|la?tyQR@g|h2OyB(2 znXD)9sY!~bn|_iRx)@OMm!F0O2IstQ>>=aT$mssj}^f zF?NUGr&Qkowf=6zfHZQeg30S+A?YLu7{NR1&{3VOj1Bt8naj_#Sb8t)Un+?YT$i@J zwZv{szmdK6Vmz71$9Ct{6f+Y5`Hno~lD#4vI8;<})%Eu34SD=`#~Cf&|7TN5uW;xr zl2%z==g7LDnGw(3CFEvvHx0Ozkw2^UEpMJ~7KjBpeAZ|wMIK;g#mra;l?uZV@D*LZ zJ#VrF45o+bG83%E=hQA*aCSX89ER9Y@Z9m^c)OuwB58V;U!3~BmY~<_k5##rHU%Q= zd)t5koO-9Z&w&eXhWXdlNU!l+4jw+W-UU7tro{8!U@0IKU-q%?qT)~h-QNMTh%15T z;DSf?+>0dj|iKVSfqd7t}Dx~G^E2FvYChLOjHkx7n5X&%!yv?NJ z=zFE#Ya5D-uaL09cj|Cdrb=OB*h~2Z=;xOBt_o<9q&d6)Qr)8cCn(E~F4zgpEz`Lt zXLK?jb+KW(oWG+VCGXR_E}uh(Ja|tgzMH9&zRSkEEi|#m7Kw>!S%x}Ptob~Pm1ERf zH>}%3DbqA(@3zroR-I)xji}&t!(4~NYta+0S3GxzMi+{UZN^4sYh=_7WKWV+$4T z58E*)yf`*;3@@N}{d%Ufy-P*vNSpGE``iyBsC-lR6nZ!+kox2;6EhVFn7*LqD~F9% zhk|9zY~3SXCgTypxj|B{;k0lX7i;xc_P*bnQ)BxFS3d9!Fx`{WYbHsBDfl0fS+0BO z1swXpEnXornAudLZM&75S4{;E+p*JukCSGjW)##dSSvsh#s#KL zF@;H4aP1<0%KWwU*wc8fC*nko*#fJ{RFAyawn;qb1e+uzgqHAfr2kHX%n^^~>ZirI zR@6SXh?O_zxo3aT8L=Yk{E&S}OC;58gR{2we8xNa#=z}VOIRxZ*ELwk&FPMNlcm|Z z6U%T`nvQDQit}C`W?Je^HnwF#u1Pk^(aA`=&lGLXQqA-1XDg~t zO^Ft=>hK2EeBE~Gpr%WENwsh$XZs2%63YIusmkaHTKq z2MH|K|4~y*(Y-xF%j(k{i3)PIS`_juWQjYPMF&8h8T>Pg{0n^SLnh>cDZOR;Sumg1 zZc0|m@=W~evFn3XvZHJAujcS%$KG|zSWY@XV2y2;I5yS}a1WmAMI~(NpW-WePza-V z@zP^nnqN~upTV0vMU-G3i_?>%oT})hg|A~o6xKwDbaaGUq*r|+0%fVs*kFC>RSl_( zG3695sZ(PiU$VW><)TR3Eeq3fzwkaq9$Vl-~^D39;jG` z!l`unKr|B`0FWyX)u(K028<&wc+@FhVZ}Y0I_&dL6nPomN6LbT1}jvk>BOAHAFb3?;7)}{Jf5DO zhbWQm8&=v-?!Q2ECRX(Pu5+c@Y{nVs4pw*q`@i|}Cj9sUc^v$KaioKN(mHZDs5@zLX)U+Yu=McVV`2<`yL8rg#h%yvcb(BL4^bCem1!X7}|Wt z#cF&k#!nAdVUH-wpdBj_KJ~L&sAr*crpeUTXkAKK(>RifziIbg;Mpi`4NI`bo#?RL zBY@Nz@UU00d1BNTD*3NML}5Thp2r%6ZGCBe0jIu=~2fNSzH(IOTX z>53%HFD{_h5tx(5UMm{Dwwy9JNK7nuH{+@LI5FI#Q|a%LMdEfn22;$j)U5r3JQ~k~ zAZ5h4G77rJ`0#%zKE^VeviXfy4o}`;v zO^x8Ufdr@^SR_7 zO7}d9>RaX3I3 zS|r+?f`V%cca?O-!~of0%dti?ur{OG{ML2FyUX^VRp(1v)A*kUO|Ne$9%Mk4;Qz+& z|F=B<|M2HfFQ%@PvJxaNZQc9I5rJCC9m*Z?rqBy%QPniSZwlic@l>0l@)sh>WO$!> z%n=c~XtG%6N^!GE#%MZX=L!+J;v$l-RG%g#ca+nA7nn80YS==MKLEqlIyzq+qE=z= zV7YuxXbU3wX<&IBnPg>Vu>p>-l2>>BI)3jm#P#FDku)b^qMmW9?4J9GLSgn%?_;E3 z{0mu-Ny^dchr0UKDO)J>nu5jErk61G2t^QCUc#@KB!&bOP@+IP_lVJ=Vue1AY7K1a zMDuW1jxyv#*ne>CrT(@F3QAg)+{%_+t|Vx!#ujE(MVveh&V zkti^w7P?5f{p-jlQ`TLKJK|lrdZ5#x_Lf4duCs;fK;H+ngxxvJ1g&nD8=pC1yr;Zy zUWet7$Ch@)=EsXPy9ynfwZAf~9I5%|xEab zOa?A@9XdDCElC@})soARD3DtBe3JjuckGI#FNMxHSw%M-sdSu+Evk1W(NDTbv6MGh zCPtN--NeEP1bv@pXDB0?JQYlQX%tNIAS3KJuVjO+nL>(mCL$1k_9zD z2Sol7cg#|${IE+k*IOk}M+bRArXzA>*1Bi9JQ|_XLl`*zXDO%b0As!J#C+s>%@u#g zeh>MKkAdy#ui+7OndZrjy2N9{i!wgK+#t6dtp$5`X)1p!!A2X;=Z|A(K8v%@;dog- zS^MX}0RwLg*l1z0V>g7aa&Ci%Vpl*oZZ=dtFR5ksj=iCe#67TTiO>Z9s0UxIz~U>X zxCqenS!(e|emmD6SZE-TZQo)LXFCu9!CW?S4=48Po@&K|t-=cYu+5xhXK=B-rPZ_($(*hoV(c2Pa6{VU;E6mg5&T7m_+>XdbK z3<&m;_z(qkmM|X*Rl#@SSvd7`*Njt(%tuvI<{LQ(PyrK>##y0%&(AO72(M&=p_OdG z6pFt0z1HQOW`5IJfdgUSM1NK5<4RL{7yK)fd`sDy!+C3f{3etH`*f0Q zWE2+JVEt9|`f2NS1y!dkms9R3ug1*x_eXXRDM$#Ry)1SPtb3O!J{+WSGu~rkM`EbS ztDL^{5c}vVoWYLSoaA!#s4?oU3DK(aX}=U?1V@KK=zs38Z!z4A;o+I2&y4!-q~|Xm zeAqowbxrO!s$?jkq?|HFpJ;pGA;hpQW9@ZT$j))L-TULoMGe?~5&6 zh3%(oe18LkrHJrIZ+{r~!-JPrx195a`)#*6`nG%#<1g{Wmo8_&kBRzr)t2Jgl)Hfl z;5oZ_S>H2Om-|LK>nPZh$%?7!gJS;hlniH)P-t}%*^)5|;U;CJt!eG_$vSMR#_c%Q z-Cw#=kxIzl9xtqtq|xC;WU~iWVP1t^Ka`|}_-0BmOeNu~l^m&bl@x^Zml2=Md+lh* z+(x5~vCLGGB%GLgDyMZSH$r}X!2XDHo5+L{BjWm#g9wJ1&j`=E8vw_>z#|GjI6ny} zmf_OgcvJ#^Vh>R38^< zsy(*7s*x&9HWawB8PAdu2bIo`pgSft)ji0+^;X;#5W$qm(}ZFv_s61|)+bZ?^CfEW z1AMn(FA$ltmuAR`Ba7Qb_t(#Uu0%{B#|=`!suRexfZcpvMztJGk#}rdhytXmIl>roGQ0@ zA8A!0^oug?L^y`C1d{QJbY|>TA9^e8prgCoMqnJ~C3wx8cz$%EInk(O^fh>It_MKCR?W98 zX}YpmCNFb#_Yjad%(a()Xuu!8E70?IM<3%U?H`2xJYLhj2w1K+NPFYp#u5lC54l3` zH+^G+t_eS{#WOa!Umj~<>vJ5~1i{b%CQ{q>llIsl=Au(WpZ1{v)dLqzWM0Wr#{A2V zTm!Y#q?p04nK*AQ4xSxFu7_v2-Xg?Wpj9Fk(537Pi?}lNKo^*E=erE;jU?K)gNGs0 z4;c`@aVhaR20hGwu$S(JZb1CA;v4q@$tD~q3E}@ z#fr|Br&{?n#6ayUjUu_PGh_7$sG(ppZmLWgtdA1<0s@eJ9h+I)DHDqheFuW3D`|;P zcY;LLY@D9U5?jgfGq*jD8OFUUEV`dCPbM2R&De#}na*rbsd0qP%?lJY2Tlj~qECW= z6dasCJ(^Z)W8q4wOja|Bw6`9K5Zy{>BYXwi29(8EW1q{8eES7?4)#lYD7(m-icBt9 zsbm1UaG^FA`Yq^+TNhv%YqGe7y#~Kzq)yr34|vP@;nc7`Jo2SS=$^0@?=PDgjmXJs z)92A2y(2Dp8hm_6?#6WG6p<|=U&=;uGhgl*2{BzGE#1E_e|uyz6ua6;5(H^qye_(l zwX#{go>s`}nb3DhFVOj7jzt@1W9V6Yv{-o0g@zlr3 za%ZgyV~>+bv>XSZd}T>y%b(9#!1~%i#9~I_x8BzKx)kSxtROjjn$`DG)RenKq5;&7 z>iY{eE4i%RJp{=&=DHhS(zUFurZ3zN_<;obdP#&R{2gAGnT4IZ6<%qOzz%20$h#Cj zNzfpu_YLUXwqEf;wFJbKHj`9S&iPecEWN{^$|lt=vwN?{69Yp7Z|pmO92A2O&0pT< zgIW|yZR^o%GBkiezA_Xsq*@Ux_W^eJe@Bw z#xKWb<(NKjpW=2vxb&9saP&TDAL)Gj%}9UZPLbJe&*`*1`P}9gU+gfHGGC3Js!OxqbcRlc-#a3%3j%V9zFCjX&LiBY%L%Pg3`FD?BYG?GIpaz0%Zm$tuw6 zC}Fy^m+Z!B#Sq38tby$P*^+BGFh#dS}_e+7dLm)_xQTTa28c9zhrY zOqH)Ywcg}hv*?AzO{IJiQtA&2v^KI1hqlHz653F-37!p|Ik zQ-8^w9K(56gbsmwCAU(KnQ7-IWwju;a@+6I8KxN$mD0N!3vUn~nlNIN?mm0;^smy<2>CF4BN&oBj552DCC!V+g- z(w=GIQ)r&){oBL%`*oscNSSb(s0Gc%xOD1V?F<>N*>Ca$JX{dqpZeDi1g0^rE>dOY2weBM zzz~fwJ8o5AD!VcLkO zBP>}=n?2jP%T*)&f|#3OJ0>C(b+PVUSNLba{7SE486?+gl*m;|YV8?(c1Uy<&_Tw( zuXCk3gnRmxhX=#uLG{%Qye@gV#2sow@T*7qS^Z_i|}psSc30+bV8Ajm%9WPG)hWwgx*Ref}We{{Yw{rdTt zGR@gD?mO#a(>rd~kv5~?p}r@_`8v_N5wi*91cMtyHGNMt&mnM@n{z@r3Qq>dw`%p?>Wspfg&$kJML=oS))^i~2XH@I@ z&X{)(_5b>gDEr_ZVp!2MG?DAYpi)!fVlW~vAXey)__Yu4A8W^}4v>|;O#Bbk*a1P> zO@c;5%|(N@S^_j2@UH?0Q|C>kFgREmt13Z#fD}Phq4WTU=Ff=3B-)Nj^G4q1hAk~yjbjo9R*q0Z=FgoUl4j}-XQwaH#fn4#X|>4C-g}U1$_^K1XUd^ugDarmi&c z8|Iq$_Nd+Cxg~#rzSmP-6YpkzJ-o02^d=mG=#|ul_)&RYB92GBOgDpPH ztLfwh(&z{upMm?(2%gV@}97n`WbazY;82CB*y^I*xeT-~N?=5yALm{!phzy@`NYqh@X@Rd1TM zns-tO-4w}sMK^>9MaryqL(pD{pFCc&%<}C#w8qhoxP+1;LLob&xJ-H*B?AF5?ocOQ z)rB->p*JJF3^>5z)(o0gozB6Bh0MoaBPYvI&85Ui&tUgHTkT6&3|468glO_E35>Gi zz7ZE=?9a|uNY;svqH_uqPLZe2=kz3LII`VntWH?352>Td>UddtAlP$~^IFpWoSD9- z8|WKjs6W##rbk*crb`(EN+z59zFpjGT!F)q`R=h$sqV!W0{BUt56n|;Havx_bWE1* zthKwF#24%Rm#zic4}s8ZKZXKOwKzE^X=#(yiHqH5fjx*oDAtVDmPI8nf-iXdl<=!2 zVl8$~z&UhdL10GvnvqP2>sZH0Z9D2Ko3>?LB0(%b6NwpMtdeb2!*#YTR*A^-s*KD? zK;9l&UgDlCl|K&unJt^-7l|j1c!r0JdsJ>u8rgraXFurhrbW)(k!O22iGZ!u0#m2r zrSiJUgwnFOhEXYz96F{1S&1~Dp0u_7=yB$(;zIGN%qAj4f3Ypj?6oLj#T&{tu1I?_ zq5%ECm9@A(9&8^=l)R<=t}SUGei1qFEdRef&gsEPJ6{6jgmEMl4c zP(4{Gr#m4}suTuoY5P>;tTR)k*G*~;-C}cF4Zg;3s_2Q5ka3;CRY$3T`^`m@Bonxk zB3#jqG_;V*4;CLVeIacn8md=PL99Cp^DG^tnI=YwCk0Ze{PXpQv7xWlFl#J5mT!s( z!8`t%gtT9(d#h?+zTAHiWGf<9xwYGoJC{w+l! zs`Y)DF11&`m6+U#Nqc@<-X$KK2%Cbg-<@vCXTz8iBd)y)V&8GyU%SAtR z771I?MP;2D&!$r`!#d|L%;l@gdtP28qIvE+ZpIu`OwkA(n`G^Wy&iBybCN=uNvhhU5xL(k=7WW% z_H+Hh;ZBDmpAv_$GNo`e{`EBWzdr`1Q!TCaptJUxD&iye%;UZ>fh3^IuR5x!Z?#X! z=k+#yQM`LXxgn3E?$C#}X&cj)YJU!ss$avCpJKB4RM3Rboe9Sb(k(f%zW~WtJsr8% zk`Pe2ER$qbAQLq{}@5ALI`Iz@fS)Zz*gpxAZB8!j5cNpqz(Xpr4s%9W%&SL zS=Si4(dSn7MJ{MUhb8=du1)|uaOvO}E7>l!0;aw>c>$6m5FkvJ*xVKNV+;#j*zeEw2JK}MJ7fF9iwk}U>lle4FChS z3t+%5Yyu3}wgchv)Kkdqll#@i@AH>gO#7=QQCgE_$Hazoai&0^CK?rewNYX`COiW+ zq8X#)G4yB7+cda3ojLY64*z5u??S+E+8C-;@&@{JlI0finj(GETo?7_NZ#+r#eICf~R`0i~ z1y7@f5Q##-ZN~e`O;=BdLw^pRygK#o42Be2XALf_!oo0kKL%oB7cozYF($wFUqj4z z^T{}a@h(mhcJ`cSG^=@AZtQAJ_m(J8AjddbHPw(vP2gT;oOm&+NB4VD;}vhLQ~`88 z)CxSnGVnQtr%T{7Qjv8f(u>d09v2+fEFVZpMrh%EnhKw%SZ<&XAzI(_hN@X-SOsif zA?7PF;$1yA`eY7!0V?<5Gila_A}73;jB{sbOtu{Qc#holGM4REIWwrAzn`C!xT`Fx zCncffx;7oPQ841EvA$vYb;ad{gvJo)xCW94x*<8`Z!Bo-8dlp8MZB;NY=EDhT zr~O!Gf=>;tU1HAJm1voXfqBkPxjHcvr*w%${a zoy+%60RI19N+nfwiGwm~6Y&Wsf&UFlX`4Wo_>R5}k$nr2_a|nvV8C|NR%Ii#WqiD9 z+<2)3sEJ=Wt|~4gd4b(!QUN@$r~}uIsZ(a z|GR3!?iAl8l73V6%TUY-tt{S`%p}KuI754^A~eSyggWg3@k}KALZtK9E}BTgZ+{H2 z*0MLxC;t#%D>2h9bYMz7<3!+FQk|XkZ~m)t58PbK;Mfp* zJ{z;}mxGs6=mJEe7z$}uF3->>bD&1rF}Uk?Vg)S0UMpe$xBCg={(rikjEP3T=RU#U zk25E~>tY#fV(l2;-xTKl`eQ346ugmL>Q?d@)-YA0&2sX)A!B^-8}Ci_if}ap$!A7? ze&IE80o+!aRJqo3F3XKSLa9ut@v&eHIc!r&|Mu+Vd=LKLH#ee<+9Q^l>X;mVUIHH5%B^`7pT>C<1I)4k?Qe}CrikF}_^imJVz z{m6A+_Xo#gUxS9(-L5X+#da;L=#-O_?KgvAn1&I}dl*z#Ma^s0l$Y4*DNE83;_V{0 zxD4$#f-aljyI4)ytF_}eAH4AIpC;3=r638J3F+_~r+ zOW)wPdlZj2V-0Hfmdz0XqT$^TJt{!Pt3Usoy%#| zsKIsp24m~XU?p^6a=jT!m=lq*l8q&WhMB1=7)Sfyv6g}7!b0UX_`05{I|rkyCqx^U z{?8O(1$tCupN|E|90`xfhjh72X-ih1Q@wdsN{6d47eM4PHKTUCb3m2ssFJ3gc#-nA zZVKZ2=OONfp*KU+6nBxk0pCzq@j$Y}M3lzpI~Ahg{yo;qETzxFqW+~Q& zO=fPYTRqg2(0$EH7z7xEJfV3t!__9vaP89r-O#7M znH|kQ|GWMEZ!|Xta>V!|@W5($a-^r=LlC6F`xReM_zxJ%80fK8z21{QlnJE}>hW8O z>o^@MQP@$`A44x@=E>nyP-sTTk5o^q8WXaKgC?KCkLa;>Vxw!3Ya|@+`pAaF z@@mYqq_#W8l+O&DK6SP$@OEkIGL&eUBT&#N^=g~rObV$yLo<3XMQ@Yb)0$P+rI4c| z7q{{4(zmr@4u7r$>u=pdTZWrsJ=}Iy?k2?Kp2_<7F3vQ!6r1)og7)5)KKpzu%SP{M)Z^8aL+h#?ChVRZd zaU4)W9;mTJ_zV=EP$v(>=ER4r&m>$)oUKPgGW z-GF{=(@+#VcK*(RlLDEx$OKxN#^3eK)TWZqa`A{=DSc)YlgM?%XtLd4R|w5ym!2%m zDj?=g+44%-7h8BWNUzKGK}&wHMy9a&=MY2DGkM0|b`a#*tx~mqGh%aGf70H_>)Whb zvGcWq>dc!&i}raltmEZO)g%EC>>rRM&Q{m0m^o6n9+m5$0{U<6Pp?6HR^ER*7*(q# zQ7TQ(-o{TpFT1v9iHyrZXMH46`4CkWtMq&}!IzY5xvB011|? zEU`>>c7V^s(nTFRlzwzfZ4OwFgOgX=tz~SAp!Y;wK-9>?h;$ff6h z(ZP~IBA~MEE?SOqaR(0*+=fmZKt>X)fjpj?z@z|m!tn&t=-9$tpqaF}FU{%kn7<}c z&5BO^gd3>?rD2IiI+w3AhOnlCr=ZkJ$ShUM(#72=bhpEa6&Ak7?#u6fMp;a@O@TfR zBir37*^%ZsgocVTYe7(v`D1E5-3r$4mcOJ7d-<9BVdp(gv(;F`%bN?_%oleA&fBsk z63k?WNShjvVTZp>qDymSZqC&dw*Pcj^LzFK5Z8K*H?lizxWnRs0wMn1ncojCbs_|I zniV1)idxz_Avi^ZT27N$MkH;N!LmC|9yFebYp*b=KbG85$jKM<)bQU~-WY%leF64$ z2ecb&@u8Ba?yE|EpP>OYzY=CeA5s$&}|N~b?%)pAVf?v3B_wD(%X_f{L2F?&Yvk3d&1i2KkcQfRi3__ce7 z{m&KxI~nyEC->n#!)Wid_n#yVXj9~f`lJaPUnxz?rCuTI+vqZrZa2@@6CQ!@d+NJp zE&NV%1fO+SyA2j%u=~e36*5{FnLJ@aI_Bq+Y^o5|iNI(db>uwuKh6vhrp#EymVD%Y z%4A>b-E)<3(K5ZV?4ge=`HF47mQh6EZ}D!-8RLU8{Phy>$YPOO!5hL;-_Zyf4G_t1 zZU*%|o*Zx_07_t=d+#g}MZ&d>aE>M1X|JHomob0Ud^s>*F%t;C0d4i+e>Os~Bhb8> zBCD+C5&-d~dheodr7ZKYKQ&^E%`Z&B>*}umjN-1*QUp4&w>P8|%TX~_JM-3)$q2k{ zzNcwwn-Lc9fXc>g9McHYf=8%@qYvS35Y)I{uMG<;j(ltL_&^st&tuEX4y!vl@SK2{ zJ;8dyOj-!XP_hIE;FY;gT4 z!0o5sV)S;b8#V)534( z8MSr&F+|O*BszpW(ly2atDS<yaHvs!~XsH!vrpdvO}X>NdxAZr5Sa$y5`O@W^Vfc zu9wn(dyf36t>)r_E-=E3L6gxpENs$-sptwUXfe)Lc(=k^DF2cx^kfcvOGwjgPL0+J z=Yld}*f4u;e=e-xQez|USWQg9x?<@ZX%IOmi9HtMHA03VP~m}Vkp3fKNG(_n1~thb z>qzsFVAWxvB>SC%Xtq;Xs7^6vAGomzn{%Hte+zqv|7}LKo=r1Kp)GG}d%)<1PZU5^ zWGG%oA7-qxI(X|gDF%r5c{T2S>Gzk-Gy$PV+UA_?HlVDfWCTcxaWnu)gmK^@&Bx5f z!p#GH*a>q4&PlyX{2M8LY}z3?)t87TK9PdP*^$yVm0A9Rhp+m_Bd`3G2io(?NUk*D^0q z5%*D_WR=IoQy{Z~hFeA<@R-}0`>2yGsKQA5rFMs@ydYdx^W#&($Obr6W-J#;0502{ zB)LsvXb&n%u_)C(O8c?;t5|iw$;Lh&zNM2hJymAA(R3^Yo>zcOTG!Q0#$I2^Sr z=%;tls@=aSuLNfzZgOA`U=WcVIVfATvlBa2)!#e*>}dR!Q%Qioc0yRV=_k~wTBShm z{t%&)0$z(q6iSKG0WDgZzUw9Ar=D%PFm9L^W^=0$H$%^Jv2#tpi;yFt(L(hV;#lX+ z{YogpU$k0xIE@n5nOMvr#RoF}RBxKSetFtb{?|@2qI0rC1jD9LZs5gq=$5gzSnY}8y`FWfO$*6PPG6z4WKcLR+-JCE0VYy0o_Ztw6G#>!XA`koOTh`&oc z`&TsN`kPDV@nORy-4EsCWo%nB*PTHk9jhsQjQ<75N7U3eHs+lbxBv@+W<8e`EM7bs zCR7dZN+2a)Bd8Ww?F)M{caFC{W^AbONWteNB&X7R^*44uj2){Xkf{$d=(OW)l{E&p zwS*j)>=U)o56A*g<0OLx$ZSR{#e+_-_&4YjI~MA88|QXz9nIk@9Z|C1C<8*Ki49~v zb<8C$)KT3G%u9H8dpHdHl4Foz=&tm!1v!~3&2W^@J zUFeeK2=h(H*nUTLo{@Z=CS?6x=Hj-4=6-&%o{+tcJXv@b>~Uryi{OJEUk7k<|6EF-hu8wA-OAOB~S0h{F{Ku8>BrtW4YF(a6AVvT=plLu#ht9(-zpc!s z#W%j~8Q0KirNAyK(8HjiPJQICe9KMxZ=h5Tu`d(BZTN{#LDu2zV>+AQsvyZ!0=h*<8UOYkwZ zTC=OZ5NeyW4r-WLfI4ZMq|T39MVXiIo`+avNPDMW{z=04Vt2~+gqB7qQ8kPI@d+Rq(g zq-6?*Y!fG~&9b{TdRA4!Zk!lKj$B0;AvWDHWqWe)oa>(w#7V}OvKgsTEk%RT!Ovp~ zSqz<7V?H(egP!u?B;>6;)835l0lqVGMWG&z4vlSMRH-WGLtL{v{+rKFKLb1Brn2HSg3_Xd*ZR2<`1O#R6al;|0i$S@gj6 zj@a@UEr~1DG1oZ$h;A6@&hbrE@P6=OvfiNMV3)kJH;w#{xM{5d{b*}{^;&V^2&>FR za|_LW&nsph@r!jfCB!yi{O_wv{lDItbAD}(V6yXGLvCpFzc^e^+ilys4%Q8aZmb*K zyjEM?e|2crzfEUxWX0ABePjaFMxYadS*#o@Gn_9K@6+MI^uv zvs>ff?R%jWtq0bTYl`^3)gKlzhLOHo@hH3tmtU*Yl&DDU-Mpq;;G{C|1fi3ecVczi zc#Bt-QcUTKnhDw7Td1wm9g@uS$UP>~9D@X`37(e9w4C>P*2E};jcdV$DvXta8FeS zB`12UZ@cY};rb!R6CL5P$eDGxm`Z%qK9OD#H2h4S^MzN^q zYU+^O!gdVeiBb{=JTq{YPEb<;N0UK?hT_CGa_y1RVd^?%t7u$g1%r&nU59}iscP)c5n?wxphs@|sV zfZcnLPfX>l%t5|NFJ~}ESTEv}7Grz$w7$Ve*$`f$frP^zkhC$GfB0#P+$Fb1Ufxl$ z_$zdUE>#5`A{9?{ZLxf`knw?Qq_5!NxvN9BZLh|hFtIxr;yzfxNRQ5VbHOx1_$2M>UA@hH1*m7PjXcDr z>KR?WA9`D7^M3%BuGu`V{n@^aoQLYfU4d)n)`6g!ZJwL5v3c}MI*%@DKS}vE^_#;d zEbiKTu8^Rx}!(PQnA;qIs;h(v?p)LoJyor{lX2>r^a!=B)O%`F*FL~b?C zbUL^pK)zt>N)KbdGn6QzFDp0Rkh@g(m+Od7#q3%(fmEV74YG3Lhe9k zj|A7z!yx}ktYbjU$Cy_Rd+odxT|u!kXKdNwNED)a(9-o2*0B8?%^#YVv2~ArkzMWV zF%MV!osVA8VT>>cqk2~>4RMFY*?sj@WXwGF0XSLdg98qY|N3-DQIjjcv?We0^41lR z_;qr4xc;$;JItAI3UCYJl7nXQGSl06RegH?ciaPD1${&tw0v<_B!2$bn5EiiQ_EW1 zshMD5!PwAGiU~V-_G`~LJ8Y0cSc-ne1JnI8zRHQ9y|ne`G=oN}G!-K{qQ|K&7V5J5 z7i+a8hn}tU%)e1xL>B&Xki(Is+|de2uARM-RgJtG7U9P|S66Lca3a2VHR9b)`P@9+ z3GJ4FLHxj2BC=S>!|E?tW6*nLVEZd(y0uS+W~{OP5q@jY09PeZ?@w%@H&r33ID+0h zQznA>$$DJAR7nZZe*UxShrhCLDjZHc1W`{U4R3Uet$Q9Wk#VX1yT5>{+yCkn|IqK6 zDg7!Vg?(P6OsG{H;h`MwUsb$Zl`!Ujip!|0^o8jJ;1{KxZ)C=xi7?VU(OHJLEdwPn zip>RrL}^E_+k zAL-U~H?7oa4j^DdGdx0)Jja9G=l;VkxquxJ>0bl(7ovj>bMNt(jTJKlgyi#?l9mW3 z%w}W&ez0wPKuA+!`fHljx5k#(x=92+9C_nMd&uXDgFhFyB#4# zAiDIneR)V&JDf)`sKj#;|p`L)5t507jCIl88+`G|>|q z_a`!16K)g|0+kQ^sLO-9zYR`BfdYOZehLe0+$|~9B^ubJBUrmSSW7c0fA*iaEL6EX0zq*%2d;7p(UePi!|E9(IaTdT{3B`jIj|QiZ#mz#9FV7cU|lU>9PlDg*F@qF{lL02AwndSN#E%LBr) z7LW%WvgQgnSrDGXWI!G${NhWa^x!m<};EphDT_64!*C; z`pk-sraAp}D69R~j%0+=qZ-NpX9OwMrt(i|r#xe_Y#F*+_3*==_k9MXF-n=B9~Sj8 z3SU|aLE*aoNY8MjIK}AOd7|FkI&~=7SGo9R;C%0~kvWa6YvB!CFndw{PSuRmJ3V8b zyncd9bNi{~*Ks9J6#5U7932-PLxJF7j|mA9o@S6UwT8JgM}@okg2wQA{%tR%Yk(am z(91qo_JN1HOF{^RWDj=JE`3}GIX0MLXVO)5%kuSPXVWTg%+Klm4ZOA{t6R!v7=|f{1 zoJg6Cp8E?!hwA7=lxr+z)JHpDn}VSIL$9kln>#yVwEJP>3ExOfr6;|37l`aZT{g;5 z9ynzra1RuXrb>(RE#>GYTt%i}l3QKf_c&lT4a+Hu+!hV)S*TI6n9> z2__=eL%VwLM(zd0&WL5u%@_`Z%OPl@^ z?A%3&n$fA&<5hZXsiw5?Wiz)VHEghcIYL~ARgLA0(wTmO=A4<5gPTg`_?jF)M>1BE zk1fEQ3@?u)^7tG7mai&$Te+lV^UNf?ZFS@z4=d2OvW+B}+#4QUxdv(~U3QhRBlh)d z^DFx>qf25TqZXsPNN1@&k8c5pGqqJD`K&t_UV1|7T=eUF7 zHh&0LqgfbD$;0At`mA7rR?++wNkxIISb-ki`1OkQ^-IhlxAtkvgQn>$U#Nod{vuPf z^`VB@e7Ohz6vW~$GPc30p}j(aH|1ea(DySz8k?8%oO}aQ zGbdFPmEl`{4H%5x&$#N1UA?YC)Kvw248x-LH2dRAX`K4{-A}~=mc2w`;gV899#r){z>kYF;0)g-_1YE+Q+Un@%c+`Ap8o(nMqR_Xt#)I?Jt3sP%ni9pfI zW2OI8LNKNtMs*%o)VjL{`P|*z+U=ctqRdek^2phqA5z&}(bF zqr&UQH;igoF@2i3B$9`Uxth5PxEnoN4nTz5cKI2R|B7A}%v_3nC zSk7ErcD_VxEciF}1bG$QKUDupIn3Aw(WOcQh0i4VD-UZCZGoBHEztMI5d80gEC0`; zlA6t>g(4J6v4pZAB_@n7i-6h>h=?&>aCJndIz0J~`DwDCRU;nSkd-3Ff|Ncp${UWk zIv!3vcIg0I)z5z^aQuJ38UJ7YKMjl`Nc!H)4%;;x1hr5I9~k|7yqOfeqzEDt_|24D zSgLxU+4W^%!j1*`4;WQQ>cb?`K;ozwmmH^bnf;ym^rEA>;xSYawbtFUcql{>;o-x2(5#>`D}_C| zC!ZzUJV+|)nX>2KyL-cJc3_)9H@N9Pn+STk#&#i023Jhhe}F% z6(IQ8Pd+Ey>&4gTmft{9x@#^Uv~$3pyRkk<6Y8G92b)-u5Q&J$FTA)ErT6_{^beS4 zbdeScySTF_C<;}6)9utX^yB_;4j9%?{H3leAW_6fz5{IYC08*eZe{WVC0F1vqJ%W3 z?-Gx$l)x$5smW6+`J{WJLh~oRj%2Oj{jaJZh+(y`3JM^_kx!rCeZjKy!kL%5n0%cs zrQi<~zVPsz$fezhp|!YNH@4q?Pcjr+Ag#Idgz2me2flgAP;2PrJpKQ7vg4U*bwcFX!$s*iP&2AK!Ux z`?2so8~BaXvNCh8VB^Zl7dOfNt~8H82}bu8;Q)Ep)p;xV8Q3W_)dPcmW_(PP!u@$m zW$HY<2Rjdb%gmdR2K&*sMPbb3_|Kexq_p~eZ&LZfEAgu1VSUDDW(`A$vzbhvVp zVeZU7OM5%>h2@NR!f_{SIAC(W*nK_5X9J84JLqc_`4~xY7V&WzVeQzh6z*rklS*iA9&3JWIHX- z#oKR|s9GrPZ*HY?y#OY##yZ{VH!-={u3Sc+rg_NZc@h^1A3AeC2ijlvn+J-1M(=Ig zb8b5kk!y`Wz35Fo;1{L#IX&J#Fp20Fjl0rs!|4Fc|P|>A@2R?I#VrS zxyJJf5o~i@R(bUliIJ|YAzf$3T(J!c0PD$q47?>>lyI7$ptl?tw76%;B&fOwZPWe| zAaVRmy$rpu{fz%2_krg1=m9C1iE!-jA&Fw>_jWoB#EvB*`RR)L@q8gM*SR?r8+0bP zgRn$I#O<J zj79uo-eW@43HN8{HLI82hPE(f_uy0ZVC7qmgkcfyGO0=%H9K9=*2mL#jS*NhY00l9 z-f6HZ;VY1O0cMV*A=2F`A=@5U11OP7jnUVRH(BCl!zF{%;1?d1Y4_!e7`1Ed0Rjj^ zYGltB$mT9*xd@T9$49EExiF;RS_jC(n7)Zfh)_cOlr&(!dg7~br;GadSU3Vc&M6If z?`Z>@HvU!^t?SAQE5<4}x&DOsW8Uh`keda<-DVxSw0=Hf|BjiohP5qYSse z%ikI!@0PAIS89bPt!rnz#&rPT02@65WP3|!`&`VR(@$x z*~#on`@`rtT6ONn*H3k*>IpY#(jT-j9%c7D4lKclPNOc13W#S5?wX1{0a?O!|2nr<$*kp6GJLdtn?y&*uA80PNg+e_(z940#G~L;g#e+;l2oVdCp~sTR9Z6VrAw z8{>dCV#}_^ZzexG`(G(tXNB-xO@1EP6(%IuggC)U=W604sx*ziGXuE52ojZzI+3auDrEa3m zdH++396*$*W>*M-o#RH2n}1nIu&jtTPpn7D#+puag(_M@Mn1L-qin|#d`yK%B;}n* zlWr#7Le@_|&Do2K-KNwXSxcaf>I(Yz74-(~u!!MZQqLNUw=b#MkN`flAR&b>EXTP# zG?E|tO3$#m5CvE(k-}n%sW4R@+XnHxiH+6N&WB) z%ZU?1)i7i-plG$jBDngnIpK)AHc-->_prk9yMI%^`;sMuhHDV{kgPJG_g-Z{{|GpHkxulDCs!S_1MEAFjrtQ zdT+)Ov*#n1=q%!^iD!emZzCIM5gjdXz8$KQWbamCJt@8}R-#o!fb}81cY58YQ80YZuIikwbucUL(+-Y9_r!ap-*?ai*1)@SwCpM8`16cn5GW- z{@!C(6TBWFbNOrso~^s9iskBy4k$;Fo^=HHn6Y-w2{{VKB zCgufv9Ts-j&|m{g)h~P`SW2BWbnNp8$gCJsuKMSGs16LQimjaKC5=Zxg6y`*_}xyEX8- zi-2z9xj@d`kQy1~Ftw|L5{nAm&E^a=u$nmWr|Jn3Y+2S|v+F4cm+HLxnw=50NOv(0 z;=+o5d1o7(v@p~_%bM>97Xoep+@9n>1NKixJipj}0<`M3C5!X}QYqQ~fN47KY|7}_ zJ#@KkzkUqxzN?i0PB+gjI*?yHPc1uaXpJ#FKKfD^**cU|VV_w+10i4aB=tz9&dVS5 zeHLG3I5Cp`7xQcP21wjqpV_vuX5B2u)-GWU6ZpfnLuq*kUC9m?sBUGXeoh(EoHGYs|Z z5`oDCk(|IAq8F2LUMSF>UE`@vPH4|ARyNj1ZE1LNE9GoMWtWET-HF4K0$1A?pr_ys zXcNnsua~Nz?F`KF6p4|xc9^%?q?m$t)kKGx+kMK+iS;VM9r*7*^pZZn0cTkiPg{P& zi=AEr=FVz)NWjfaF(X`uDDiJ$MgX}maEZ!qO7axiB5s(B))j?Ymsu{T(@C>Eq$w#X zDul&cSV~Ki!~+nb!%YsRNCb^TkyDUY;IY}o@uo+-wwtfX6GX;&Ymk_i4kiUOSJIQ} zD@94*Vtb*!vya7dYvNuUBz?Z=sf+yE5oR82NjTyzxaG4hH>sMGk@YqhW;-LeZ_>6k z%?caT7)=G>&W%|+%uaI0cOQOXo0Jb zkg7dQQgN|SY0S2bnjxv>(rs?BsYDtm6FW%uPE7=J&2X3A@4Oz^f z*GO0(@qP2b-i&$)&qhz8g~E!IbDc_mYEQydS228;@C;GS7d>nq1gWVx_Ds!;$igd9 zGH!1HnjOSzJDpCOHnJ4ySba>i-qI8vp){?!Uw!vG+{wG3x;7$vu{{SoNTOYnqd^0Y zH>sBl=X83mTc!JI$?23iR-el_YdmX}iFCK21k=Rrvc5iyEDw8vnA+tnjH7?M^_*_DRVjQJ^lf)k}In`O0azsXlO=|tc4ho9kyAhNL8`9 zXbIir68~>)NBp~XI!!6tzkLq>c`S4DV#n*qk~77$teju?AhBHxMY2@C&zDUx$rezz zvfGm?n{N`TcOb#O4#S7pxo}Fxx;Q!4-$J~YTzc}Y;O0El3MqU!#+-w>b;v(q`ZhC7 zRca;niPVE0J|1R-XQeyb$t9o^DzNNLojV@<=ta3InbPC z+)i6$V^_9bvy`4Fg|qI1kkX6VF*=NnA;3ReprKd}ox%nUD;~QgwT9Z+Y?7oGN0{?l z@2ORnO^3}^8`*fJ@}_F>shmYzqsH^z3(b?_1iOlnYDr#G-5_2YmLVT6HVmf$z$dep zNuVzTOjGq_jCGOc&<37*Zl-4iLi_y=oTn<3;ZaY1IFgmf-OXfM0s0Q7S1k(ltQxE$ z!{#K~;%K;4nU-<$*4PX_QnX<~9{c zvxIr`2lg?72${(0$Xu>6NcU-YjN)GL7B4P7x#f3>r1_X!+kn#MrdJ5wq*99X0gM@7 zHwkz)*Ec2>S!31?Zv3ijZIPj;*lI)Frk#?0ZfQxG4I36J!X$ctLMHkBQ7{>w{rC~T zg#k<3JRwoTd8nv~tk34iC2S5TQu*4s(Zi9ESsLe4GT_9r+PAOo$RUS%JzfXix`~m2 zU-WQaef%Aji~k2qOWg}0lLWM{Wp3wMInsfuc>q!pHihkE*3fS&KI!U1SBIOTz~(n~ zW#R_ny+yHTWrr410GUgaW_!(peXSCpgXdkxgapb+&HGzwaP(wOOXZoep|Y5`fqr{z zrN3Cc=S(%gsAV*Z=y33(&8-WifSA57tWGX|=;-U1cErhd#8ecbTC>(4lpYp?Z{ZxM zb5AA9&o-K|7uZf~K(@f68kQPnVGjHXHw(PqO9aYq0Fx&PmGpq$F~tqcLc4Hf!j1;k z?IK@@&v$ho-z5=BCOR>=Fz6>nq#4C2&3#E>hfkF>)S$sFqmbbv&CKwJGQ94Dp7UzL z(h+#8V7YGqPsA=RwK*s5Yx~Cr`{&ORJJg*V<^p}rN`mB&rfRvDua(EXpvb~eowLMU z)5KE}ehcG{8)s+V!x~c~TLP^S+cdSOXgkc%_h7X0ca+Wod%4Qow0jrLzoEcw?{8^f zvPSfZajKM^T~Jg02jok()C<>u07mGdJfp@Df5B1rom5lvKytyd-ZXhe1=U=gMU!7^ z^@ZUASGz?NkX3NMAw+NKG3kf*d&~Ct5xR%encO!an7uI0FlUHw+7(P3>~;d+IEf_J zB=I1f4&mA>qF!zn3fJp5-o1jZ25WQIS_1nz1BM%az`%_kRX9qp^cPa6_r;g334hi| z^wJVU$^2XV6t^u@*O%nGnEAy}<9oPiR!Th*yz4tMq|)Ud>&qw!Hf(7Rk-G1^5nXvX z1%4sV&t0D18)4BbMIHXY`oxvOSX^lWXHT^DJq&C`k)zN(!V42h*sGQiNb zo>KxnD<$$US<&>>k0o2g5A*UZa17t^KxggT^FhndMY#3+vtHFuJ9-7_gu}5ec}wN8 z1ozKeJ-J#``dr`23<<}<**-+;Nkw-R8&UH5ub-l|a!0UFW*liVUgsXZu)cfC4m9iC z4a<&q1Fd)GKtX?9NwV;zG*W`M2ORqq{r^)KM|z>9Y83c=p{j@_xe8B2{M#XSisgSm zd|IpD078izX=U?c_fsbEuoSo`J|OA_?3YX=Zz}G0F5c`4(MZI`=@TCb<6$O>SQpQH z6I|h4(a%dzp!eL(>&VT%RlY`99oZJ4I4e}FpAzN}E;~$kJF5-qbKxiJQr2xDVfq6` zZ+U3d?{^Q|_d_PlTJY(btXbyCQ3{^v{E%&oCcP6DU`ZEBTnR# z`wk=*lmB87wU?^;*{s0Z9<91$I3s#DCOkkuUXzV{;wS|cWmuxjmE@YR#3h0h?OxPFeL z{OHg}^EI108qkjQRx05^!uvFGQzp#1u!Mvkc%n&A0q@fFip{l83+EdRK7>hFy2KAh zXzEqE7B7<-P`yP=w?@Cu>Q6)>cqm)`uK3c*VU(i$IL+5p7qVxl-5#k-Fj>=vAqka> zo_?+>n*NwewQyDgk<(SM6VgJCeA58pv06qVlN%lxIVfR2PJ1QKQWtbxft0Mf2z$=) z;}k{kzm@oD0=}I?EW;!H-LCMfqY;ksXsN2S=65uz=S4}Q3mWQUo-p0GU8E^-I;!w5=O#11Dv(Fs#N)X8kpJfkV3u#omFh(p4&n(}#l9cw=( zw=-1m?mn=CH_@M@Ao8qk9>;AjqEoV=g;gQ&$dPCW&S|l1Rj#HbXi1gzD}j{9s%MTx zK>o)}MM(HXRl`KT7MC2^_q?pPG^piU^oSH3BYS4REV(&uJ4GD%t_8zyv8Nrftg*w4 zz-JeVM5K-R{iX%)`!WsI5V!bY#AP=e z5}n=^m+q~~1|7bB)cueB$&5Mr^E@Q6^3du)-{_~C_{t$z*Gd?;kRzCKCqRT=2Kg!l z6?UNZW9q7CS&eR2N^it}ouLNQAkB5EBlJ(Wxqnu4;V^5kzz!}iYTFA9f-=-|X$rqy z->OxNu^K54EN|OtnRWdRvD*j!6J*At$Je2~haH5+ORI%9$_62xukGod zf13G}$QF_0EHlRJ0`6)r9%W{^pM;f}GlR05QEZK)N<3h*(bno+rIlnS1CXi}eVJH< zROV`p=eDd_tBYFgbjT%%o6Jcuzg;IJq+UYjaTOv2_jbU?<)Qhz(;6<7%)wu5tS3}> z)9m)7Rz&cid(?+py>)H^EMczqt24tTI?4rzCGLULp<~k5ka7G)OgS48N?95o-LID=;wP_v#MT=4!Ag{JNXlK`R|9@Y_QN;j4E&v@@BbZvOM?$XiP+gm$4>?-ziQY07>#xRTWiOzL( zl_MYyx=6Hh=O1UF)dDe3$hbk15nGWp_;fr+rRxvwCq@5 z#y#i<^!}XuH+Ks0c292%MB9F zN>MP(5yI!vl=x7nkrTd!563`hPJaS0$IB-iqXT*?KwDV&*J3k9ow7{lP#g1js&j)g zrI{nH>Cd14oBQeiDH8psNc5i~(SM3W|0xpvr%3dlBGG^MJpR8a9sQ?B^#4D}=|4rH z|2HY$e~Lu^DH8ohMWW1OTjfPdlwYF1If>>jjo8Y+6l92Rymg6vLd@y8BE8n6{?FUx zBUvC53?3*#R&8pjg8uP(Mk6SkEOQ(|d^QNpp|XgMGKhG@YroE4&0c%(eg&2iM1nhn z6uIPj8uZff@6Bmf_ZK!io8cmm+ceK_K;oy`c=O&pYLM>w*eRuwYRvMu@7}_evXuxLU37^gb({f=c{?#o($Ce|I6 zU#B98cA@#Pb$JGdsgMyEY@xY3H14V5lNLIq&}WMd&X%=A0hZ?bq|uGG-l=e0pI)!?678O?md+xl2B<~K4*jB#NU%8-@?K=(ooOYX&>-p8ojjC3wD`16<; zmlI`(LU#|lfvB`-T7j)#33v%#bNhVTxN-CbU_(Ti(3T!t6gINUPbOQnh_9(@uvurb zW6irxll79}#qsiltP=Va9#d|L(FS23((>h=g@bigXRkX#>Sp2lFfj2=AEirTCn<$( ze`~JYR}7cGJ}3_`x}PS13d?I0#qe_IPt}6Hix#-QB%Bcib=5mQ|9&}J6cNS6mXDN! zO@H%YgyO3&q?88eJS>9kDZVkk5I zR^&v;2;DYKb7lgeojrkAc9)B4j4Eb7k#lX?*$3v1r>Fch(|?oU8evEOqNTmw`+Y#{ ztw8K&R5R*$-)p7l&$Gpg-~gA)MH~xMDg`!%-`}rU-xQ!U*%`ZPo6&&;hH^a@0^fAJ zc1u%yb!Wnqy-EDGE~p8oL>Nrwxue7& z`=EnSlw$~fidAP5AM(SY%XbE8*haTu!*!6gTh67^$&nEBP;pe0~Ws5N}?ki^*h6mu#9@2H72;8 z;v!-Abb^QB;+Zwa<4v}%)q`POX^tyE(0`VxV}L$|oO0P;*!+-C1YJt|n%bIn@W(S2 z?|MM#?!gEYb#(C$ZK+U;Sr;ll|gGwdR)@`u& z9`gQ4VRj9JHRr%U_QTaT=8~CK+5wrPICm&lcBJ!3NS1PHwZKb`$^Km=^pzQADo}2w$Ww;Uf}eVN$uXA_oT)%Z(D1x0%h;r-;K+Kaa}t-9O1W zV&Ti3o9AB{DK*;IY=LN9S!DN%Q^26WisTz9w(p?RdER1x4n|xx|d{`?|DJ$TrXoIj} zx2*7DvI}SR*ltXZ+**jyURpzn@k<%j2a{;l+3>eu87B!VvoU?B!2TNBVMXb=?`ohH zLEJwrf&phmLZ5ke+JrGNNcZlmL@5_oXs;TzYtB<9mb-BB8kVEIzuTJ(V)2pZ$OLj} z_$!KlD$sK7y9$U9U$p8ZLdWSr;QQjIFqG17wg z`)i|x9T?vajn71EB2p&`0Y~d3)3j$;cIFqqUyKSd+&zS@t_orNs7fFFn3#-s2{)5Y z`ha(s;=a#dc!WQsT=LVP&Y#Pt{AqDaP!7Al#_tX5;zmc{!ILr^OuX-v9r39`M{^T_ zS|N!U*9QRTbAngxJ0dkdOz|T>O9(ep72nnWVDGJi;(GdhT`Z8`5Zpp=C%8jGf`tIV zVFvdB26sXT5Zoa^upzkn41-H>4=}j94g?4mBxio_K6}@DPHm}s_kNGux>d}dtXZ{s zx_fo^=leXDm4(a8{kFV438Q3n`E~T6b;TC7I0T7(;z$4k!7Wd%{cop&2d}ipz$t0_ zw_%atYIDqfNv)sU^y8-aw4#&!KV}4Wkt9-v!XmA*Nym4BNLAo(qnPxmwR&>CSSCZV zPjy%25!#xnPo40OgLS!?z6fkeU4_7%1ifuBaUk3U6UWaCf83e72Y3_IFSWJC^8{UD zSg}(nSjKfnWsLU#JYmSTj3rKZv?^E*SqHp{Y;6iy0b;zhjUgYC(z#VRELzfs-e;-*oARBn9-U#U702ALps$RQ% zACP+BESY7^?^gxaBh5KSRRz2I?uGU0WNMj%h%frVM^gJlH@!ZOj?aiG2 zux$E??!gcGkN>t*+YrT+pc{wWY zG#ikp<{@tfA#Z9rm4T#{+_G{fw za_Vo5>5HQzV|mZBg4g;X?srmUu;!b{KolQal8o3sL!m1EGExr8Yo3C&MX~yvnGQW@ zD(+)Z_J%PjJ=3B+=yxspcfNe_Gvto+u7%^CKm9JFE!`T(0T7piUAR8_c32D61{S2X zD+m@&H_Q-aNiat1-^{VM$uHS&m}zJ64^XxzDzCfI^mW6I@y)zaHh#H;g9&m{*`1bp z;6MN2@XPe4a<%FAaK*-3o|mXe+jh~{Rw%H4Y;)K1Z-8c_Q1V=Gam9kn@>NdFVsmw> z{>kw#*>=RDsvhgyIBNVSYzS)*%URSsZalBNi?e#h_6Kd{ens}AS~hFu5t)c5N<~oL zFyZLw)2hoB>%^i8vJ`!1Wo57-D5}Dzh&?gr1ep%GkM(vae+}}*$2}_NAT{czb5m4& zMVh+sioWaK{wkcW5<8>{G^<~0IOxMD&|0=l*guG4QM->+te1i0yA~Pr2I6~NiUt$G zMv|}+;X-tewC0A*th|thN*RK1jq7JSM0x`-Fz0Ho7=?i0t0Lm=dm2>)H&v(jxp9qq z*2Rg&X?VDLc)4*mR?VP&vaf4AOo63;%8heLj+|U9&dIUrPKmFuc(u!$Y~(W&OVlt- z$Gr`0E96Ipa|~-8LS#5ruUk7P^}uX{G^wK2%DrW4v1@bN68VT9DY8&Y(Pbixrz3)@V&Sm$b)dO_!N}Dt%4Sz*{Gp|siZ$}9Rhp2Kj@}VE zrgv$TBD9!owiSEBN8ixj$A%)r>eTl~h_HE)k<$%XgVAOQTB7c+QM~tvJVRcKXv>Z? z>QtYN^JnoXm^DkjbbNmCn#P4AGk#9R>tMju`&ik*qAo`0n}lIDF*8iK8P;!jHAB;k z-dJ!Fo+?mSuVO4k9^Q4i6b2H0;9}X z=j+FTvl}YK^G5b!Ah0cUlI<8JBR+bPiZmJy3*?ciY??d4mR<*nzvx;6TvB==A$}0^ zQchdT=i>%YO^q%1Hy$N!_b5cvqYI0ii@feJi&-#tZqi9NcteKC|0@_kY*;;-(c1=I$y}^5iz0^ChV;S04Dz zX(4{lv>P*R*!rqiHg+qZBt5X+iE%-*V@77cMbcX{>sLivp(^qw*7@FB;&v7HP*n5X zm0l1&=T5WlL^?*`2S#wO?`@~$YE*4;m$mmA(!#bTi0`O1o^PE&ZM1DbD#)Tud<}QM zRn6VDz^4V!0r|~Yocd$2FbniNVEnOZRtg>z6GC;lIfe83VJ!apZ&+bpy){Aa_2)cc z_v}o%B&rH4k6)v>ZeO%N0!`aHKBe}_rsvwzd{Jes&~)@Z+Y}t9GqF59`{qR(&m20g zdBAlX+$>Bnd+PABrd4IlAf>gJD^Ft;gEDvVaJ*Qg)V!kegG|vvH)=f6_u^+{yX;h_ z6FMf0-Il;XrGxFaE~FxzE@;c6BU60~Q?j>p7wD3cI?c=&+HfYJ>RMnK%DZO>UJoFm z5_x>5;E5fUS!tD>I_;*Y&F;LiTU=@THkK@&Hb#=Pz>h=&s$AF<%g1)cWEqwW0_V?S zRtml^XD$={h4pE!PpOJ)vLVz-c1+y5@l8|Cz~?P!CSHQT9AUvPdYn>v2Ow|~$tyx2 z%B`5y<>^e;Kgw9MI{U5H3aD5&7RfTvS>c=XvRD5Q`t$~O<@B|oF@Z#-rxYkgv=%5? z_VzJ%7Mufnb#?)!2fG`wS`|q%m)0%lDi{|g*>BE5x3Sx7YDyscf{7sF_510=*0ivv zHeHpyeu$LiMzp7%DbM+GZHNccrAke!Z%zeGb=Z$3Yv@ieA+YXR`}jGkh%hB^+TLU+ zXt!02{N~6D{*Eeu$M{EmVE-;zDGD(qf>eDM_xQ-^LqS*|v`>^9ob0r`6tWoOQJN;w zw%l{_W8|Neo~#}pDZ<}1h5a(gWJ9Q!*7pbUB);s%f{%PQZ$xu??pr=1XmnY5|rg_Qo?j?oZU-DG788Zmx;) zWto}}C^Tk5=HxEBE7r_Zs~9RKINQ zi`A3#w{alcG`&{us$`4B0L+SQU^X=s3LI#>^VdOFT0tjq+62+{+dlwF)drXL18du|8oKw^hbeNv>_SRG< zO1u)un}n8n6{bx(a3}iC(Cu4TKXb|8k$EaVemsdGiL|YTL%=K^Rpy{dry~cC^yueM z_EKtT#H||G_THX5E1N5J1g%e{pPhWZI6O6w1kmpZvL=N57#3{EbeU9gtK}A07#Vpb zj){Zirx!3nAsHTe?8(7nK6T9Nq{UP-$jnl<9m4N!Www;F?i{2Q@-eu%$&*&+I?xQ6Z=l@aoFXbT9uqOOv+>gHW8*K3dTHKADfg+h z1k<01cqoL7`d!;!9t_9eV=pMl%!F&sw>Ywvna%>~rpYG&DAK5p1+Ui55cf?L9|TJ! zdzxA2y~+)>iiLr9AC9`uQuBm||6`HGzIunxVR)*UJ`6Stnwd#4I>9doeu-ly&SaGp zP(E~ECjO`t!9%KZ2QUXN8VIN*Jsw9(4pu%Q^0O%{S^;g$pIFRamW1{w`B)6NhplCK z$T-*hj)NTe}zs^t2=Rs*|Sq3ePEKo@2eXqkT{M za?O2E8e*q5xD39&_=6U79ZSwpPFdH*6E%aX(6N2_iG0PBcWLYQZ(Y=yTnMnlTebux zjkX0xbH1*Df0Gf?QYbbVwz+aOTxu(`^%#CiX5=|+i2<)ZVQ>E_KkE5BNdw87FZ~GP zIZ8i_K1cY-BlX{78hUKCz>7Dk+=uF;+FBlP(kHZ*J_94)C<%l=*J$u5DQ7vZ@}Lw( zik@gu%2`B@{GE7K`ht$oZW_AS#&%ID^0>7;6t`E5+l=_}7O5nOT5U&D4JFg0DL;}J zO8S#<%hAgH7kO#%>f%8=lWO(T@ph)Kwp_X@I^VJ9gy5m5=%buu>Q?sekI(M|O(R1T zyySky(TU9N!$@z-6Sm_+@6rQe)1^? z8riI7hMI|@Z2HS=7JI!h)o}APj^XDCj?QJ4iF*!G4>(l-T2nINFhFe$uhK5;&R z5zAriNKxeSfJ|fmTZyHry!QLQCwPLmMzenOOZc}0LUVDpRp^ud`1! z+n+vZMJ9V_L2Nmzr;BK!Hfk`9Sd)s`2qpXwXMCj%5GM=brnC3Y&QsRkaP zU<>>QeSrpEZ762v3~*UdHM$6xS**FE!HK^`bRzIjl(4!&OI|0Yk39#tau*rniX~LRqj2171ln{qU)-tYm={$xoxJfcBB_%Eb#p&NurSF;O;t?2Sdd(-@ zqxakthncyZE8yP%0~hN-hi|h5FQr?jPKHfmyD_UX#q5may#(68MB$IvJ(j|5y@=!(Oe_fF=W- zQ1$Y8#)N!Phft*C(Cy1e;YTsZcpl{I}Gao$m={Et3cO$wiZk>}E39 zQvA!>LTG2b5{zjRbjdF_NHMXy zL*P<0P z!v$ravTs=KYEO8f0U7|9KX(uTpn0kq{5;N~TW>9i5U)seTexY`%QF~5w z?RP}A^f@O2z#2fB!W^>|Wf=}oVsF6GH zMms(xADh>({KU6)Ir2nr_wJM)rN(YLeC4fROqvvZneg_EoLWKVHTHpqU*?9|k|4^% z6@*Ii7ODoTeHRX0jazFn9aMU&S^CjfO#iN9#K!tEsA4ZzwdE_#+`?EQHL3MdQVLM&|Cv+0*zyE^P)6>=KU{-rritDpBbLw-YmqH6r zXbyq>0+d*-cp)-B!yQb0u8CqoZ@c^x*xz!dDs6*6Lp2Ju0B9`;c6a~#HmRBcpnpBk zjDo*+@f`*Gc!2|QTcTgJwuW*0WE^+|@AY8BV9YHE`g!a$2R`1*5V?%B7R|SsGBQ^2 zsbm@&(zT2bXT*%1zZmF}z=^T&iPFqFVB9O=$whd~#r!DcYq3(``_`^5bduwzzKZwI zQBI^(w)j90CCeV*McYwx9d&$cn1|luzLXw(j20}xXhmWGbJjsP!GL`&9ciPD*1Eh< ze%xFoH1r?1rE1*IQ6$ZGPn?|CnzM_VGE|BjoqVb4=}>+!h5u0kkET zVpp@c8YP>qIE@?-S^rPI;%A`_`|a$hE8Rw7EKBw@L6NB{xhlzAJ=sGy^h9*ezBiR| zSw9~3z^?NN*HKfb4jr?#i@_4M(;jA~6(xZ?$%Rvuc&b_4>cl-hu_2;wf1_Mm#$&em zTpsn}<~muwm!HbH(rIr`gS^apimY@ND%Cp&Ebt3N#So0c-CgfD+*bQ;6h+zww!_5+P7vGfy-4bv^&;82vmp7VM8U$?+Cu%e=jmICo_U~Y& zKZyUw2LgHEoS~Ufb@!5PVj@<4!$G5i2gN~QN-=|yTo-CN{(_Mb@X7(&YoPuH43rJt z=lI%-{gUB*VrU01#W$G>ChuMa7Iv}dDNax*Si4=i42%?)rCPDXJ8sn3<@WJ=U{^M@ z1v>Iku)zh?H}pf17Cvyo7-nm(;v{j5yfi}uo9aczb^+x`rHcWE6_;DNo<(dCHg=*T$K@fT;mF5pul;HexWev^v2HsVjsO?dp4ZGB%FO0TS z%U6<{9RMrIom_&9MI~{PvN~oeL^J0>*_P9L-!)7E`4b18QO`+ zhz)(HVkgn5tpxkxvsmj1g|{kFU&t+nj#W8(epK+RkwoUI=s(=JDDCU+6=8?2)CYRH zItz_&x50l0VeoKMN(_~uk?m%ou$2z*tGa@E72LOVzKd({I12vz4b4}Uv&oR+nYz8w zZR1b#9jAQdfnZl>SJ!9BZe2UdYjFb1wo;k)F%3#4(Bhuv$f?+%TcUX)S%aF8DuEU$ zp_XU8vn#cBg-4qX1_X8=UX>`>l9!7>f5_wZ@$oW!{U(!=t%5m6Gnf}ukTi!!p`See z&KeewM9!Us*>yOB0+>p9V)TY?_l6EF0hBFM+=M>8!U=vXO&mZ(c6%?sbHC}3rp0Vr z5)l;ONM>YIc6DGfEdpHDLh?BmpR+4Gt{`JW+rL7o?k~!3uixowb2Gp2 zUZi=R_^Fdm2cv(vex}~8*o#lO98_B@+Ek)u11`v-8hSk63L_OHj2e&a@mR}pk>Ln8 zLOibr+U;V9=)JL|NmG!~HHsY~lE%PcpQ-1_JCb0A#mYz-p;%^il>~M9rHZ@`PwP1k z@C1{TYDL&$%UEOYW+#KEQp{?VNGrgNsJV!P;nPRmM1^;0g7q{}>if99!e2DsSzU^` z&n@?Q+H!ZhK6O%h9ZX<|@QhwoBnw;LFwjJu`UZ<@yROyhynoW!r-7p3vL$A*c`rd(4YfhM*2;=ZsZ z46*q7GY4zjBJ%7Sn+fr*tc3CV;F--%J>m zZGUC>MYTkjh(kh<73x~=g2PJow3FTranXX*dI2BBs(A6P!#3915uaf45&n{2vLW<+ zE_oeVIgzi_JZruzcw)HB%%#6{98j>lE)M5W6t0qtsxr`%&e18X22b^mb`iqF0CJ zk}Gnd%+%D#R9eH6{p-Y=gxm#e5=AoCJuVp8{~lVUx&q%pJ~cZg3;GQt#p1HhUw|ZA z+wohSpmG(JExk_S+e0(1nbtR5>kWx7M`p2wTAiq#%rT(vmTdXWD5%MdT%lu~t8&DE zUmgSPeo^ngeY+N6mlyR7mm}}f|NlWfgW2gnXj>%tfwPn-4^LQKGRTuq+34)$Am%=R zrgFM`v3ZCQF^%I9T0cB zVvN#_)n?UWG>H#%9bOESUAaEyD~h1|?Dh?EEne!;*osu2^nT1Ru_n}h5hmq>e%xvP(F>0j+v z55$e`{AqB&@H}3lZECGCY^|LhqF~pl$m}$OS#v;O$yUi-^aNGbH=8@kpvLOpV>6Cy zZhZ_kYgI4>_S|90H}B_QJ8>Pq?E;0GT|R2^-#qoNZ0Y}5JF$B!Y-V~NjH)X%y}nt#U1<$iHId

8 zj*l==Bd8gf=Ks26{{KneMLy+&>p)BINAUVR0*tiyRKu~)Eo4n)1(uhDZ0QRryvrZS z@(*gu?Xm`Ka2wiAABDC-Ye#IJ2pFQ7DQj*Yk0a1e0Of(jhKC=S8`a)YZy=Y6 z)7yWaXl1j_ah|iuK9*IK!hFHKnA0ty-6I(aX>ztLiLS1eU807sLFn6>R?yJ{y}5#gWsdb97p?xx+1XY-tsgU#K0(q zB6cWAM!aOpD{+3yVyvI_>sIoCy;i-WBtc#j*QfuRNA>^gz0dp{ibwje;N$fzrt)tj ztoVzzi`UlkXsNC_ptzFqj>r-)+GNUaCVsMbRL$HwHxL9o!$K^sV9;>nmHfj_ z=KoPA{{P_X;$=ucX<&(nutRC^Gwt+C4z`;e6C4fI@9kbMT3Pm4qOr@O%sV1F_y zCEgKV>7K%yU*Y|}C5x*$DWG0!)0f>bGT~^{Ce1 zVxVT*ktOJ-q4BkpLHZG+Y70N}aHCSPyR#eNnnAU?I7ac$ZXYv%A%U0l_~qtq7D}4V z@L<@#ym_)&EEmcbexLm;^uj?k)@Fz{`t->gyImTbdm%ftAWe)|Y5PqV+u3fMVrZNTi>}4{pGqS*(w>#K0jh5&JiwB8 z{_7>iz=Mg^x6F|Dj%)6gJUTZ9_an8FaY8T=ai*BUd>QpXcI3V5_Sv6194K4#5l z{E(QtyUjLLr{949{%dB_*_DyV5A2l+j#I-nBv>Xs+QQ}wGP&?Fr==nEtxqp^We8+f z)tJBQ!()qINf6QE^|Z@h9sp?p#Pc`tZXBoTReYYk%~MX>3%raWeiZToxcSwVF~K&Sc8jL?p9lAW7-e<$ z*p`EEM!LbwAzkBC($lr;qZ&wWuM;v7nfx1V;aLGC8o4X)`bWH7YbZKAf#Wq0FopD( zpeW@K+)rb>?DZ0QVo>@>(glwPJSL8vo##-ivVK_3ow>*j+-Vd02)<8fiZdR*CleIE-6ypJ~#103A6Sl_qCH8!Eg` zRmRPAk(R5C*njo#ed9-c)rATh^x8e|?Vku4ck`!NSR}ly<^pqVRgIQ6o>A>$#`%0+ zMI}qB@eecyq4L*3Kw1-#6rTFK4>^Tr>q9)Is>Mb140)SI}L3?$oAYW2Cra|>p9 zVr6N2x1d~+yt=Cw{t3!D1HIUk?3fFg02(%kh}22F@QS)-rmtG3nQhLi6CEM|sC>@Z z_zg<)5%Hg$+x}1ff5^~`!{PuhIPJr^c$~-pwS^0|2EBv)Zg+EKIiTXQg=WXQA;LGp zTe%XJ7ScyVEv@HS*wc{qerd6NFxQnyR0tL{AbmS?oLIhUFL@bFu=QZ&dVpa~OJ=^6 zs0zVxllxwHZVWURvs%5lcQjjm#acNsb6z!==T2Mosv9#{Q09OOd8b5}{ZU$5m;z(P zAFq)6Maum4GB>v~7V>al0b3x>p5E1iK=AO0w{Y-$Ug>$`Qz_+SX|7?Y6CRvB;gxij zWsu?b%E>9yYf8=&%eeApn@rErK_&nb{7dGRFN?thrTDNAF%Ao%niuhZ2-cdGmf}l= zkj(Zpz^mjt**LvQSnf|~U&SDiS;ylr!m9X`K>b>=$sO|Q@C)t^=sgPA1OzchDaQHC zzm@{OBc5Y~2nuqg+!xGH)-Ms1*!#al#^StfkTa{X;YZWRk7;*&E?@LPkJ{s{zxjCW1Uz@thpCzFk?3LulAQW%pA(DAX8-H{Hzwv>de@NK=G`uN}S-N>Pa8YSW zZPY6Z1v{!ZaFYS0J_Hi0;{|qRx_=ZYtOPLI|9%!a`HBYkCCr;HURDqL^|clM9Y*2X zOStJkF|EnHoZR7=_-}65DS1vf_z0%zV_g^Zd*Nk6x$|W{&sT6oy>HZ0@m+3s;-0Hs ze0T-vux4FbxCR_i=}3SIOg8#|aVcAsU>;-)8K8@aTSMIHI?PpDoeaBwD%D!?h9`N1 zDFzFYZ{fZzl|h%mb_wJ<%=RGQ*Z6t63gUO0ZFm49Anw8CJCZvh_}C9}(cGPzr9yV_ z%UT~C6f-YUH*1i7v@S=a2;1nSTXY`#F)AI0d8jrvIPZwOp3^M$s=Cs@<8!NBTP_scSuC_H^Qbr%XJ#k$ zb#Ag!{wxOCJ9{bvHsAjhE?9t2&s!=dRvw&;(P;8*MIIo(k)#(19c+Uz-wH#1fewj{%n9?U*fviG7uAw!%! ziIo=-YJnZd#mwCzC)f2k*V=RY`b$aW2_ERs4L+OpV!kaqk26Vikkufe-rSApW)9+l zgE%#2-3@~dhc!oQ#IZHzXf(9I1*9PWp?AyyK@S$i65Uo&tisvBFWmH{FQbrEcQOV0 zqBZo2UXT?vHRfBZm%%eDfF^4rNK1byRmC4Piv4~37t3>o`wm4dDRDdBeXa17vA84Y z>T2ktsy{-xB9Fw>P<1w_zkwaQLVAae8E8DgzH?yFvXMc>58%Ur)vaa|=rW8p$dnr- z?fQdc%$HAVo9)Gp1o;GirgE~jLeSC1;*OwE-&khcL=&bHwQOF!L&?uSXm^neC@LZ< zOiW|{5MQ|0kU^2`UoH#Tx!D3ens0t&sk9hzm!NoDkUFlrS*0(N*%3Io?PfA_t?qmBeSw3N_RGm$!|D2vF_hoIaT&|E*T~;M% z8Hz~GrG7k#wy4~7Qy<%3#VvX2an19KUXPw_T5UC(uAxXJ#!w0E#m!Yn*nSJ0t|ACV z8wfyk3%*R1mOp5K!1NKL#Zd>TE_bqok#GXKDBUl=iG9g!&Xo`q;QXexscK&2R;P+} zP$H0-87qc?yXv%ZHv5#&-=Cgq99jM`la=5(2*`}vl~welUx7TgyqkQqI9f51+1Pl= zNa=Eq#o~?a2wjg?ywKI>*nSXZ?U+5e;wB~d587H_`o}>|6;o%_eB-;Mr>_kdbtizH z0bj+7>c)JDml0zKk-ac!a{^Q9*8W_n{{{egBe6v701EIA#zyJ+d^(#uxY#%~>}|fB zSfr1;$lvG49KG9bWOe1J%8+v43AF0R;AR9y~ zx|}?UJv}@L{@5@fg)z%Z#>Z$k!MB5SFSS}WoFdxZJn7dU_7t<|rD2AMW!72(wrl@4 za;`GxwBHMx9vSgs7j1Di{_wXNEw=c2=m^8sQlnwvY0><;xlA-zLxgEH*S)GP(JKW)trd%$6Z< zfL0=zq=5)f!Du!mU)Jzn=f_`K9y!-wHm)B)rdsasYwN}dS7XJ^0(zRRC{A)m38eq>?00CJU2Yvli``HW~&CNiJy_l+$ zxnT+=^M0Lr@-A94S&M)tmZgrbhm;IAlZs%8RMqJ~d^2MQxw1OD#HW5z_+UCE-~lGR zHB8K(N`1om>}>SdGIlZeqpr=PMw}vhUiNoQ(@qL)ISDr6--li4fRW;8l;+9FKirMI z!=QV=;-m43yEs$1K|8TVn=DvPjVFgEM*S$5-ImQ{;Nda^-S*W0L`EkJ#f~iM%&_P1z=MMeLZAFRiPWCS&v<6zj;l8Y z*)}Flo=H6u?<N?T)p+%g4c3bm4Qt$eFBRtfnTq;y zwRV9T`ft>tYaUxq<8F3J2ltCM-UAM6hgAwq`ty6sq{VAfwQ*J2d|d<;mv&G4xMDqK zQ!jomW$_$(Iw&exG@h@t>m4PGD7x=GvR?!NjA&M3bB#d5F0((sPpq;uR`jsD-aK&{pM|9?blI`l3LU^a~f-^H6c z>@{ZpkRLB%^qzGb-~h!?z}P(MYw zv`_iCR@o*oLs#&N^@j$5B`~g{Bm~ADi(9!MD2lhNthQ15uNdp~|+@S&r1cXnra z98S(vI0-`G%V`U3ru+l5<9WF7cdszLHv6@3a6%R( zn5USpgDiw4Vw!zhg7VqDskz?9c9NnGV8yIyQkP0GrihVyxuutmk~JU%DR`a`&>irfE3r9r3O7x;L+z zTT=BKH3$F$&);<%qvS47``zG?OaE4-G9&S+3JZS&Jw+Z{FGUP8h8$51GfoL;;r7Gp zn5V9&x6+Y~LseCjgGX-#RKa^Ux9+o4PaPYAXATLPbW#PB-#$%5F!+>dsV)9K zXYDFEr%tj!S z8|*3U7b=?Z6$S46$K^K*VGvc|S0_er@|%q}j+kLMjBAMB|LP7ntg<(E`4xyTxVCU{ z+2{#=QXPLv%atMMvF6$C>P+F#C^udJzU?$Wz4LU@K)c!1Gp@TW(KSEUacPVEj<&{* z#;41JJ8wytm!U){I$UuwXc+KTjdh#Jf=`R1juRrSg5v&rcqcAGp#(`N2n32C(l7GG zL*|XWx1>Li#M`mz{JAGOxuObhmL>i9=sRmXW1^9yXT@#&ff#9b1Kw;f3 z{Y$K<>LNQpSRv`40~wJ1u5qNkpYrS7hZ6d*&4G1y1j>&`;6;+A4KPv#xzk-D>kP)W z9Wg_$XIB2bdQw#_IK1VQ96>|l1WWP)>JC!B%kJ=pK%h6tUho@_KWK6zHXc=z17{M$ zO*|T*SOMML!KBr}d{&y&aL{-BjFiFxc6`MK-C<`{xOr2WpN zKsDiWV1+shX*cQ6P|!rz1MduH;U+!mmDyqLdBQn-HH~ zr45ZEYMx5{SMijJ2W!gc3CR?H(3b9xWlxG_Ve(fm5j+(u2X^armS#y*Rm@*{`o#%L zdUDs|zY;2Pd8AhORg%?Ki$C#jNDcPa(Iy#?#ol>0kDLuvyf(RgR( zBxEBQFQ-7_LGdcg#?W-1!bVR`{Y*av-eR<;H;b=PWt9?9(#q*<8E9V7(R z*{?lREw5^;$X2jAe=}P2rr)~?|N2fKDpMKZK}(>wsg?YGy13ON%`#h3WS%)#dgRGX zp9*H2>%P%Sda?0=H#RNRySNgRJc}zYu3|(P7pIg_r!wCJ@1hVqO)sMjNAbuxotFn&=h~axvlVMHluQAae(D4E{7(JIWc(`A{1Y#pLt8@(8QNx zFe82C&gojzN4VjhbA5eLw%a{>y0Qoy<4rK)^x3{OlGQE|m$F)}Nl+BXn(m;wcHHyp zT_RS)Tqs!4@vnaF8@Q%i%zeR#E8J|+9!u#dW2%PO^lYDYX0`3|4Xgp{=`lAYyrqLk zNbI(0h(+@5gc+=wP74T|ycua0X>KirJJI(n=EQ9!aX;(H@U5MKCV9;9M)$2(nYRN| zn#~k}+ZL4cFSwq35Gm_LvHlm?<~E)VQe_BnDY~9RU%`V0B$#ut(|EvJvc9GPs@`sU zaF>N%*9!Zw)QKBSqNB#J=_MeY#yF4PZ^Uoohm^vKeNctHiO$*+i!`NRgH;@6j&qU( zKRPR2mY)#l<>@ zHT^+*6?Cj1#j8!evJ-Qa@#azsAX{4+t)I2@HCZ``a->fX?W>t(&E`TL!g|7!w!gV` zMg+v}f+==s^jaK^5bJvH(d#_a=GKB=BLq)X3`&W4j|;p;4wp(R7A^^F#>8aA88aN8 z8zFcdk5cCrTVqb859^j+TM}>+H`3uJk8jGWU^+M1^!}pd4ic73xfRE<0Mk54d${q9 zxaZpXU6muUTseMuTuIiDb9&4;X%=d+E5}vPrKn*dablopcU5n%W{&Y%-h@B|9<1@K(VjS6rMjQ=&*RLMqtC@p`YQtaXR3_RJI`M9G2=FHcXj_kkG zk$cWVm2+`-hGT^I?Nw`DY!9bNfwYt>`OE%66Vy2RO6zr=x;7e=V{Q~mCSHWAW}iL{ z(*LcO%11G7fcWfS(3J_i2KUHCeOBMG(5 zTy?c}L1$U$s`GvWvZ>`@<5^t>ssn;9&m90+H3m+%(r$Y{C9BlcUwu8M3#0%wr{)&g zzfeM*@s#k8)Otn{P^@4rDdLfmY(HQper#NZ<@B33`;LHoLg8q^n)fCT_&$wfDK`Xt_(du?C9C-Ra|5Mkg1^Q%e$=D&|uqCfM;V`(gqI-prN|BP3o}j zRK?6X^Nc4aGekpF`B>P&H=#pLboT3~CCJNBH({;qS0l69b;zKq=CsO1* zw8S7?TMC%oVs$#TP&5TwW?I;hI2MrsY^eI!sA_r4B@g;OVZF}GqOd?eiGRDkSFi@j znROnpcQX#G9IdXu_I?P?fIr|_{z2Qk$S<>(bSn2I7|XA+pMCl!m$*HJ@CBhSgBKA? za^jfpsM{A^1AQr}dv}fY8X$MJ-qs?UJd=;#gmf#a@Wtwpo052+J;BEl)DhN}8|!7I zGuDfKXMDN&(}o`1ep6|yxZ*;MOVPSCw8AnbsU# z=5n@8c_|3+jp$n;o zQQ9{`l70E>VMy*@7|S}e0CSMb08X&n=F+QzF5KR+kGd+sDC>y(O169Xewt9X)Ipkx zv{vMdvIm}WrjGNZt!93s%gRCusI+$#1MFp#x&na z7{7ifcK*Umj3Obm>ta;L0m+$P8*>P#8m0vCc21gOh}z%>Zg)rr%{19_Z0k2RW$H=c zfo;AopHO?Yy;W#U9)(Ci9egdl2c;UMdtYsxJrbPKo~#t1Y= z)n)zec+Rn7DR@ZPM$kZ&QBGi_7@Z2A?>wAj{6$M^m39)i1?P}1jn&`8Iv}aahA3Cm;93L)4kH^#h z8+&g76j#@!jW$68!4lkq26y)mJh;0w+PGV8zu)}# zzjxkScV_;nnwqJpIaD`Y^x>Sd&faJ5wby!{XJyPkakO1*onpsT*VP6ZZUccj%$O=` z2f|*+bEtVtnNM{+8uGN%V$B)(;8r^uX9@w>Q9;BjNIdnSk=sOV;4ypD@An%yajeNR z+c6tjjhW2b4F<*oHmM8|DY0xyrCbz=6Hg{A83b?gj+huP9NTkDWNnIiJ$aSH5?kLn z;B4$FiXk72PnMdhIyr5pmt-dm!%ah(go-{C+W7yK^Z$Yy+a%sQQ z9O=0L;1m=zO&x>i3^?E%G|?Hk*lh2A)}-@n#{9gbENVCe-DLVxYGR2V1inQDvkIB} z%PXR!O`r
JRdZ*V;}^gH?)+Et(2@8-~y-vm=>bTNFBmcpB!aT8_t7+%3B_+e8o zI)zff#zu$+0o|CIb-Wx!Bph{NV8#xkG)Qn(48ZoF z;^bW9DN$W(7gb!hZqF4t!6AIhz4b-Ax#EC}qGA@-%FFiKNSJjT~`PvUn{3a*w)#6MPNg?6mYG+=3HP4V6Wi96~2R15H zd>;v%&BaA~iFFMTfu+{B{x^jUen|PaOp7 z!}lhS)@NsQ>9}9)Vg3PN9_{94qRJ*g7oKo$W0oW5Ui_4wq7OWzcG$M6&(vo~ z6|(WM>`$T1W=Rnu6>ltr&6}F^of*Q6)yQ~CA+BId{WWPC7sXY-8NPO@nY24GSYSqd zU7oQ6*I`>YH|2%m>j(q#pjlKIxKQV7RU9GOw6)XRy}Oa&KwqFoyG@+5%Y?!S{boRZ ze6stSYt_PRWd5;5X?Dml>WHQcpB=EDHpxcfGgT7hvonzuB8U29L$5EWtuw9DSGHQ* zPzceltrP`Vwl;p}4&Zcv5I5SiTWj{H&WKWVS>c!gcazVpEdH7B()WK7eKUTHE}NT+ zGc+u?-EpM=HgIe+0jy7FD;!dZa`UAr=C0P?Y=RZkZzF&EjLngtWa0*WH(*6-E>}cg z?z;GMj1~@v1og;VzYo6b6*~7GAVFm(p%mGnjy7qSxhQIpDe;NKmSzMt*qj}{*L<$C zrIK%)^t;ZRN`_+9b(}){A7Oa+7jd=!?=U@l?}>$dIn4_g?T0U7cDHS*x{xSrki@eTlFmc&g6nZ8N;DZEu9{WCyPAw zt$8&)Tc$_+ngkC$Je#;$0}s8<0zYS$`R58kHKyP{!Q1Kw{#c{fUA~Pl9gQ;~bTNOj zZO1y5w_VIR)oo4nkrojzNmG!oZa<14z-Asx9OqiZazmVghZA)@?IIQPa|q7bUji?| zJC8v~ck}yt8WWb&o}xx?!C>f}57htbq+F!%S(#G!NTva6Ov)8pH$bw&K9#*M%yw>1 zOrX}-c-)i1%~A98P)A*xd-u7hJktVy-~OG=a(uw7U({RjBpu7NnJSWh(oSH}Rl&V` zz^)E-{sX`;(kGRi9Q(=i8}c~LR^dKXxuO4ELuYn<&+4s;xZb;O>aWhuNm_Cm#9nMt zU1n*HicNifrA+^c*x}gHD^@x)Bqy(O8i5He_=_C(-|2-~&U0lVh!CKJV%kEJY@~j7 zvbgcaEb1BM>`&f6dqg;r%DS*=1%g{??6rFJW)VkH(Lnl0K5Ue(PwmeR?-QUyQICrjEI zJ?>l(Y-vbco6_YjRoWUV`W8ldD9)PdObBFmG#AWj;!p{{}J zX4NYevA-oc>C>ZDozW>yFGju0a2~h|9LV_7o0j9vWfu?Q78e~7r0IWBP;)SlSPCEU zn(CPl#cr74?ZRBDraYNxAi8YD)#Ua}Oei5z<4zfYK!ZLNQOSc%tLL)(o{s@z#Sh}y zKK?2*{Oro_8)i0QwG-9C@kQU!={zyo>@el4pvC9j1h0o7WP>W0Le2+)?pKB3$^yY2 zo%HT~^0N((ynSu2r#Ox|96gyLjRs%TKEX*12Dj?tq$H)7`Ho3%LRF_ZIm`K(jG9M$ z&&2Fs2YB3fY>>j$vn47|&z|b|Jee=dLXIC<9eIr-Nm`r(3984%n^u}27Q+e$+Y}%B z>8mNng-i9+KbW0l`U(m_VY**--XuKlJkK%76-K9bzZBw^*FTl3E_2X@-bEv(nK`QW zA$)It2vd6?&87w@mQv$IyH-A*L0V*bQ<%{lbR=-Gk#B58pL9pd^ajf6X$M+&#5xg=&d%99JKKA^60DPw=5b@J_`PwA zx_c?7RwwiGCf8uXiGy*{Id$nsa`qvzvvJI&BkByu^K|5Y|NH1@WuzfvBtZhO*t40A z!}48xd&TUAdg~5vpF@^#YIyGML0K;~Wt#u@CA%ET_i$Up8F%L+>bdaE(GDQB%cC@Pq=sF&5G%0kK1BNCqIOfSIr z>!qyqUqTLJ|F@7sc;?S0GCvP8P-RG(PSaGv**P2mZ;)oID25JWpQDW6sg|{aq z1TFwdKna4`|KFA4g4HAxc8Oup@X0pDPJhhclX1GW`Q_cFj(@{vVy$;LZ-v#>0w}bb zj7_}??TJXfBx#2oM8zrvRdc6lG_bwGJj`|Y6!(1JFY(Atty~R8wy%jGQ+@ug#E$#V zycVO{sUuFE=&I<*5Tz6iBY^dq;^4+)iEevX`zD9vK~(!4dns+c;K+mr)h z{q@P&(g9Og0Fw*zuMc8kn4DUkmL9$?Hkh1>APc*{emQyAxVbnxT6oxCdboKa{-S4Z z?ePJVTY#GzlT*RQ-tL13CO3}&KPIP)v!k<{mWzcIVyAaDUiMZtn(}WkIp5lQxU1W^ z$vA^toSkf(JTQeYIpypf5r;+WCZqk%#>&|m@gMJPoa_+C6&6BVj3%ap1m^#`$UpOc zRsncQa*A>Qq-OvC65D5q%3$Vjw+XZT3S_(*?x0Mv-017_p%h%k}Xscs|8vW6-^=?j+RwbwbZ;=@#-F zlZcpvl#GFq=?yarAHRU0kg$l%J6Sn-1w|z-Z5>@beFH-)Ya3g;5B3i39-dy_KE8gT zpTokxe2s`qNc^4zPX3XSnv^uO#vdghII zA>*Tz==s(dPX99PAC~>w3=8>p zS@ypT`+w|$0bU>@AsP=EA0P=hi~LI*heZ#XDP)zZV6AU`A2ak8I&oc81jvbe^FOcu zBKM&9bwoju)!R>L+1{9vJW_;|1W1MJf=eY0NFU$5L;7C9_0a{_VWgbhN#ChJxyV-2 z1mBQ0kB3kl$ETCRi$6^ZH|%xQ|2V$?^(HG%XsW~~s#x(Jvd~tTzR_5G%7$>t!b?W( zM2PuD(Xl=eOf}cjj$x@j%bP#XcZJWTmUh*8>tjbp2|sKvXF+2E4tkKP*Dzdoi=aNW zggFTbZ1RQiV;+S)JU&v0H~MJr*6&dr~eX)u%urkAJJ#81EQ zLNB*juqR8J8JV4J3f!E-OIIdv;S~$m*ald;9~encb1(TI=+fYI7;B?V$cI^9Fy4NC zs6~3%z@pHoTDHOOif>+t0vWDB$&t~{zJXg^)nSsYnlWt_WAZ~rF(0=R)4m}DZ_C5n zQzFOqjmB$aLA*;x%$p@I@4sk3D*}r-9giHH$gmcC%L|QPQ4DB=`?>g5Tx+z~HqVLa z5N13=^aQU?+3Wh#>V*Lq*0Ceb%?&RCdhAHVfnn32d`J>a<_8-avs){kp`zzZ_OmRC_io|u@@#RD}P4N&S+5*P#M%SKW2vV z1Er?(ej#d!-Gsk?iN^Z4wL5$hBEMlGm+x7CfK1qC*oz7JxlBt!ILHKWFr9loxGvJr z$Lf`QPqjA+-ixUH-aJ`{CHkR)lZ|5)noMO}(=}8XA0HxzOEH;2r%5!qm?3d~cxpb# z8MmNCgP$0MgCY5rwd_><;+N5ZG7#tURq`2H!us;fAX{$GmNR>SC2r+#pPEwcdb!t@ zXG3P+jhM#XsS(F4&L>0EmyE)c%62P@x~|2{?8KLk!6xX_o%NHR#4zMv%>HCv^NU+H*_GgPNI3}%vQp7 zA7R7PHuS5CFM;DEg*nI;B~YPPSOsSK_Rzg4C@rv9v>?OI-D{U;7)9l^#=gs&P?ffZ zRE3{4jbQynx!rhPLQ5Bdk3z!eu@1YIP+|#!ry*z~f=Rf1o1ZDnu_2qJ1SqS}rvr84 z;GSB0mIoRcK@+-rpTTZloEiN#f|N31PcaSCarm11ju-8;;^ek{L-5YJ@1ELue@sA1 zy-w*3gTIcz0)(9T2HtUev9K9C?Nb$rxg=`0D}>49BdQ-vL9V{Bckr4ClKCe*U^B=gwRG zzaM4oSKYs$;m4kma1v9XO#}?au=0t{+$msHFyO^TcISHI9b8P(eC6Z|Fs^PkHPQ5& zSBNk_27Vea;WuihF-|{$_$!M|S5GKH`}%B;vv@x_!O-BgYnhV;S45GTR7i7(3ysHp z(Z!)6D?e=*c&h@BZvRcUQsWx}Sqjqc7mcMJYKp~iU}gHOJ2rZlGwXPis!!jXVTqBz z60&O?wu~8Ny@?#h!$Wz2(>`aFa>^Jh5n8rrKgUM8PV)uuaY%}0^-PE^(hPTxNw@Kb zSl99_jHsa@y#oHVEwm9q7L!wi8$Qwcw8*Z{gUTz*6X?TPHGJJ)EBweaCuWm>E8S0V zs_DbAJ+3xg7cHpnZ(!B*2|g+Jy$qMO!Fo8#f~11CAH8UwL0sY_cvCMJ*HA_x)Z;p# zEuvVtYMkB@J&H9fAgU(Hj%G75wg+a5AccT9lKkdgwT|{U6<7yW=dKHMMLl$-JnFI)TeY`np7WO3mUgDdPXGF}43}yRa(r9q_v*2Q9p+*?_E~Z#&-#E?K%x zT!~|AR)lQydS8<{*7Gp5Co<#-ybE*u906sf*bqK=D4A&s1#yOJKFz|8H5=ZHO8$1z zkj)-OT_Ngo<7#B@=qEikIBzH&z#sZ$QW3!cZhJQKa4$O7+gp`v1FN{YJ<;RN$erJj z$f>zdVS(Lp9HowJl}$=TG(C~q7;k>GiFX=PF(?l+y8Sn{!*?ADo+m=ilLw2zGaT7R36!d)%smRrdlI`wJP-5dU4 zD!eMjC!6j_jVAv4A3zJCnisYM5^IWXD-@MKfIwR0yID{B z8=&$NY!+T7_6u`BAM%Bor37p>i2PGrfv~c4_fDrE3w2#VBWxhXh=02L$l7OM?D9kZ z@I;LECAE@pF8UDht{X(pqQb{r^%vwAPMY78I(rj7g|AOnW6sO>xfq!|WYtsbqWD2W zAQ6#9o%>R46AZ3P9{2-zua&lv?<+7e#_K61I-5`U|#Z871%bI(6wA64)|54%fUrj9)_> zPy7{Ee)M|MMiMFgTb-nE%=l^i`6<@?Z*t)vXA?oUMR9PdO@iDDvEQzYGvr_U6zSMQ zV^l?T9_hM8oT^=OM;))hSAq$n&U|hngY>EqEqI+$=F-$%BKXHzaLc6m<*4=DijY45 z)hV;Lv6@pVi%QTe>o{YPwl%1WYn|Nk7uIvH&6!xjUEMpAnn4SoFMoDmaWU3+@bfP; ztF!^1dE~9#EKg|wFX~#6f)Vk@Y2gg|EAZhC`8pa58btgXlNrT3Gsbb zNBuTDcue}@2t&F~N1LVS0$`5Yh0sN&FR%Ka;qO0?kW}w6>V40xaR@nhbF4wCd(M-B zCXKS%HnN(vR_4IWmsi#?J?R<2cW>0JTVLM{X@XgYyUZ^ZvUKFKKI8GfE{2P}y}Hse z5XiFPPg@Ku5wdwn7UcTeC>b0nr8jODWV`EPUzAulBA@hoQ5D;S&)(E0=k9JnBjl7Om3)xMB&raP zCkmMgcQ~wTBmN_*%wzqeJ)Zrwmq4{u(+~Qu+=Ix#k1lRCi$kAlYYx@#z#fRMO!ifX$T-tOac^~}rUQ|?!P+srtR;3K3-VLxn7>Zu!uTnjwNfXHOuA@Z zJ~ulYSvD$3!2d!*A7y?w3DInZ-w+OL!dv?UBN)i?dk=MqGy;n$Im|WaG(3s6nWoPQ(QCHx4@Tr0G87SVk4=aQ;M!%XVM%jxp%x*k)-|M>CV7$<@*Za+g zi`a{bKLA-ertBi;Lr%Uugq&l3Z&|OmuX~?H^+AY;t2{k|P>B51b$VT@C$bhO;!iG$C5pj8YUoTe(5KSK@;rV4@G6sAhZ9mRqZY%=dB_2` zN`5p_!J-Myrc2G&875-YXX)`4W!r+DnLBfb`j(}5_M7`-CP6Y}`PPDFiGk*R#y|As zeEXOCL{1evnoq@B(E4`O+z?!|LC|FJuC^5$Zc$+_Wr`}~!rnsRcscKZZ;@Ymbmw#zN?pT{VNz^jq1%`UXkI;KP`N2 z5rby;o`P}+OmZo7qqQ4fMkg1;t%~4PoJuCc+fW$X3@p2i>`9gT=kM zc$3jsj^{Ks-h&-o@rmR42B-X=MLaLmJMBvhgSJSgG@|IkZU+HKXFK^61HuOJvZk$* z{H)|YN1Pt_!#)fhii~0LX8(|P5H3{7*^e_EbeBl;r)-f24xMnl6LV1{L65)vOV`S8(EcGPuceb2fe_;Iw1p+owbX3iMggRD=GT(p0aM;Ns?rG%HW90iLd9#<-&E z4xw^N&hG2-@_zfGJ&{h?p2TjD#ofl&5J+N2s+r*>^d!*{!Bq3EE;6oFZ z_|SK)%}9lU57yC>I+jsUTpckObhGuB8EDFZ>h>^4Vm)tlS&}Ak}1KvfbdUqs>SwRZ+&@}ELVpqM=yB;v7tSqf7Y z4O5=V_kHmoI4zO@9@fYXMoVb_i~isKwrL4U>l&c>!JM)*@@h}Q>bi7eWk^4M)N$a7 zH*)cq9HNw-;>mn#b$hD+?rLLwJ$TjdGbbb6>X%KFofx;k>QI>kr9%e})q$N4IpuqU zR`g~3{VA942fOsNtJk zR%YFBp+Pg(j&%tvfsi@Ub?b>_Oes)|)n66m0pQVNYLoz&s9X1BGEZIqz_Ar$WQ#|% zg8d2%UA2XXWE>U{es-E3cxY8g0QS?(_IGCQO$uA;!4ED=cw;alG*15lhj|HeBwyAe z!N=D30-N?)sjju9q3IQ5kHA*y6U7^vHv>EE$PMtjMTU2#Q^oZ zAB%=88hYgy8FJeOwDnU*+X;f)P4ZaWx`2c{q|UBP@z{KRNUO9H`znw;TfFN_I4_n{ zlG@u`Qkr`W4_2NGLffaVbJcX2B12=t5k2o@F&lEK2D(DRXRM+nv|w8yz>5U?a<5mq ziy*@0qTK}hCQRib`_$2bpL68ii$=Fz+v2TAbfRYxKT6OQro%HHe|j8rT0}h-4mfj? z{$o_s8j0MpA!E59lgk(Xw%l2`tZ1FW=@M5R?K+1DU@<#hfHZFj4wZ5<4m>eQvg+nQ;KM%Jbm4b<5ejPU#|5$@HbL%xLZ;C zK59oW7B}1?afuGtba4}Z(^mh~Uj9xUq2Gr{A^#^8JNPenUOhF!n{R6^^%^E9V3YTJ zacn>Aq=_|Km5z`XXmr^Nl8Q{_DZpT2_q-TOxkw`O@hCV7j;e5fz6oTyj+Ii_%iwpK z{$lU;Xn{26_#n(=A|Wth53a@FX_<3)6qD`A%6Vh>%D8p&*|N`zx2p}zt?>HIs*Pic zR}1NL!Z|b(0S0+0MZ=&iSyzgR6JvRilJLz$Qj3K`!*5S7m5*=N@(?0E1#^D@(ZBux zo-Ag9_Ewj7S}y7!8J)YLgf&bLLJk?nS zzu4Buv6lF<2X^s{$E~`tLhmAmNsJ@Sz#qCVj`o#8dOvmwZ!p%D2N;zYs@57t3y>y@ zTF1Vx*QKxup(|=%qi;iaQDkaQn4sXBC8dIyHnY%1)%-i}2c774!t(s5EcfDlWjkO6 z-?!eRJL7&2MbQXZTkbgSu~l3P^{S>v7MX0cdT1fU6R42~}v7O5^I(nK1GuJ@tDkD5IoN^Wj`=Y9GXmcL>pRUYr-Sy(KLCJmx!uCu!!Q+os*IJt9e;h6XQArul)P(^ zygiK#c3pf*zsgcKu0!2Vfuww&Cxvq7B*;>&G~q};R&vC5Cr6~{e)1~xAXFQb%6;|s zr)u{3{Vd#i@{{Z`%#_k-64<5FdEeFqkK`^%l{^YiDIeS|C0RAWS$?RfjGSdAGP8I&>&B07av<2!rZ{&ojr zZxlJ(cft`7kB~I8CqbFeL`1v=v9kHW{F^WNvhWsrj*SCOWzSIw=V;lBU`Jh7wGn&R zWTy9gVxvww_{!;t1^nh2!%o{b(}^;SHKKnXaK`n>GX6lHymH>H_y^FbQuzl!p8GeG zX6S!$=y{9c;yE-lPV-|EEl4HI9*qy48(x&H(~)R~6a5Gnjsm=@qS5$i3N!Qx!lvEO zs#7stU$%v`oa-cXNJx5^32CkwF-bBWyBi1pD`%Sx8dfGMflNnZ0~q?lE|=aI8}|Cs zPbia(y2P`7W+TVx;XtfS&O~f0c2%6j*nJE53}t&C^t$vS&(4Pw@fasGW#b9!GZvl1 z1Y|9OyA%We0L1vR9tdE60H;lo|GejGg?b}oU7XKeW|VK;tvrk+9GGMViuS!URkH&X z8TSK;lYuUz*6J>u`n=A!LDx)e4(QYQDrQny%HS^FjY(ZnqU|+&VVtt4-eh$9y#}fz zgj&)+dz^O>jKYNbCm(ys8)n2Zb;Bb`@?gvSD(3nL+UVTVTeA- zeVsa1X}z1A8kFU96e4Tj0kmc-%ze>2AOX2GP5r{-J>_odjR1T`(zj2u9TRIJ(dauR zSn=Lwf6muVXaHpWKt8vctpt*_5L0oTQbY$6fXDM%@Sy3Kf=7uMg+h`7K9uLiS^rA= zP2Y14^@>znpEtJVm)GZK8!q^SIa)&M!=A?dak9zA@ov+A(hbSOc-#=dR<}E+l&b@y zy|x7_(3SqfX!0vZ-=>G^sDROaCB*&u7w@HKK)Jx2CPktmfAz$T%HqT<`cAqDM z3-*JTSead3!n4ZhhurwiV|6~k>tMXeYi%P|W{D}n#Y~$;MQX58oX+p62lqHtAlpr| zjzG?Iw9o=;3X0ip@B)G;T)nj+bgW7J3g}n9`N5*5waJA}7Ln`Jd#(dfI`NQi>e?|sV>v@r>*n~C z8)wOl*ahsutsCKGNk69_0stsU=&MnieM~`9I`Nl-ss7oinMpi54SE>|q|> zW>KoqRhFB~Y(VR(PCu6y?VZ&zP&^mNBV4)T(Ui@ViQfaSe@k%azZ~1Qs{C6 z2H&`#T;p`mf@P-i=X>7Kh|Mu!?S2}yS2vBna^v56%E`>K(KC5lw>nyP_;0q#4p z|Ige=Vqm}dGUNK3zXc2Ul|Le{u_}y%?-ri(%C!3x-xm^cgHP0&+{Y^6i^ew!dji+G z8fFVCklMWDc)40;DZ->-6i^=5DnbQOUQ4^YF2i(>(H|tKmO`V(qZ=z%Z$b74;9E_M zyg2>0LG}yL(xW6mvu2@vz06~rzx+CCYet!UrXt>+V(wK`QUjPz2VMMH5#m1WZqP)FeXQ8)o?5~T8bm#=@i}Y4uML= zejJ+$e`Xp4+AAl%y#JMXtpy%D zh8)O67(_vdS!jh0DczonSI;I&hwmMYfaTR*%88gM0%S5p-g`k0BD4NJs6xq(ib2dV z+v6&cQb@lUV;u`otSLzDL$G!8cGcEz*)Q4sCS=@^O$J|REUVH#4rJxxEj{}b+kAH7 z+Q;IIEnXP@;P`sF0$$;G)!G6jN+6DPj89rDL#J`tiRr5i{^v8&-}+)gOnNK-gWOJ~ zpot{%&pFPmZ{6M^)>8(G;xi-4AbSguQ3AaF=7LG7#nHthvBbe0roI?-m#2QZgvUc&$A%YT>A7rp+9VQadnd@Re}ouky;Mu9^oK3B?Z z0b0Mxm6x9BH)Fuz0asn`hC@#jX$@Bh<(u&HYDm-b+=MLZ^eHY$Nf25VfAfZw(HcvP zeY5Oprfkk82JZR%ZDF~k6!INZkPMFY*;!^?ue$cql}o+=Ab;%#Khzc`RmGp@JyrT+ zlX(Uc2_#nE|2wn=K(;*d*PNI>CN#@{()8bQ>JQJ)*W-HjJgp>S;qHrrW)E-57Dk~ zgiO=L7r+QL1wR>l6&fEA*k~xTT3=FMV6P^#hw5@vQ}Qf)u;fypGUfd!{PzU~6WYR4 zlfHwO^4)=ZXW~M6Fugws z@VZufp<$*X7FYJuSF#ON8E0P8Ma^+e@^4T4zP~t7x3xi^?U3&vVu4-jTv`zx96==xvSEpN5kC1`~#s8wx#Vp%F zW|~d7+E#8(&a{cJcC?m#*^~Q^YK*E~-$WbBws?$c@_uw!{!F?irJ!~l)ikcIVN^@0 z7uZLyZv;PgZDV>fFHDL~NXYtfMERxSX5w-d3eTcy+(O^kC>`oMS+)^1DZsu%(xA16 zPHDNs)g*ty(d0VD?-auPi0?#N;Q)l_TyCAtf1F_4f20`Qf55SEzDS+gW@j(Jx<7yq z!PmB@0likq%(dt!u94GIsohV6Et3ur?zF)`8(OI6+Y!s75%LenOxYJ3<*quvenY&e zNL55ktd!~^DpY zJFkm-cgtaH_mHxY;K=Ool~9kJSOiilqbB*Q5Ng6CtG7+Li)-gR@YCL zJ*wF|WpTQL#W~Dx5E{Jfk-g zEbJ&xd5APcMDT>gtEcaEO)kL6L>j-POK<$fdTq{AG3eTQVxw$Qa&5(|t!Q4P{wQYU zR2w(zC|2S)Mo8JO%d9UwTT!Z0^te|Zgkzzqyf=|&Z|RP6!IyZeaGxJRvZt>ZY!_@T zvlUo*uQe*+1aDJIjuAk(S%;V7gp-TI)_0)ZXmIh`Fe3jz7F^pO)Tfe{gfbBQ@%cDO ziJOsrTRirctMM;-!{3Lm!s?q|3CJ(mp80C*>5(sJ(r*N!-8cr@?lx6G`d^0K6BZwD zE8tvF9~B(;h6#3Rb_;z~U$I{x&oY7e;f)nnKUZ?BYhk-v8eqDLcuMyK)B7eFL-?LfKoaB&-~ zXP&BSQuox3qJ2^y?_AFC0HyNWx=Z3Vka3GsmhdJrH!)-=>q zw}JiH<-65o`J0VY9A7@>CXrWozc%;tu$a&)oJLkG5YKF1yT?78vqMOFUR&87+KJ|f zHhB*U3y_$Fc+hF zt-;o++U1(mnik`?9@&-$eyFVJ&pMXtlxGU-cnIeW zu09OjwVn(^w}~b53!e_VnxDC zG!*Wi(3026dHw+2skkV66Q$TjHANEXCXSN8XhmJWEQ-V?r|(2HYc|wOZ?Fd!-Pi)B zNTQZ~y$_f>IxGpF5g}6~!N(kcDtd>pw(NB)xbi>{@RO~taGNz6TeTC9`@9uN z8C=vCoX$}JLFARmb5-(ik$^Ub&LfuFD zwBiaEvu)Qx>zZltqo5E?)xnGQebyUy zS*XP8Oy#|!!;3ZKE|7K9ZKlP2RJYsaOC*c3=BkeG2TNd2q_mOmoo$QfWyx%azj6U0s`mf6U3lA~qk%AdHr z|3uZOtZY-KkSV&QtFDLwkD@s9!xJx3GC^ot2LBM2hh7Gs@$x_N^FhF-(zODzAnYJ~PsH`rT%mCR_|DK-2;o4)8a z{?q0qox}y}F5_%HZ{8$d+JcI?y`)pj#(Oiqx}L8GVisN8m;?l3A!tSo<9_X>K0rC> zv}YjCq>6OKVcF<>s=UhQFx@xm9BSytP83&{w%MK_PiJoek;?GH=nb^S1Q_|ml=)HT z5-Fyjdl_S1UL)N!;~B z5v%p9f)h5ZIc+NX9ZEEd!dk?l=*2)D!yOfK>BI)SdLtGtTe<4??}{SluaCqls-7i(~jf{SCqtI2W^2)YWq@@8#Pk zmihIUXq%J|Wm!JzSImqF;vn;CABV!%TujvV$gdS9f z&h3;_tiI3(bPU&SZ)A#dkLuT-!67|0p*^WQv?lE91GLS{H7u*{n;X<&ANEDk1;Kt{ zHT!L(^(N9iP)>f z8PP2>7J#$tUxGDoHp7f;7wu4`Z=pE;ez*DFP2t6a8zxHp&e)y)o_OKFhMcx@N-lyZ zJ{vt6fLGC@imfzulp+6E)?@h^^gLY>mI>P(`_YfNtOnSKkJAHZb+XkmW;fJoeE7_t*<-B4>e${G8Z} z`eMs|hQpLk^JXMNTvCr*7;NsJRF;pH->M4eoj*Vxl!!A)`@gaCl`^Nmk5RN_5MWyU z3>lkd8#(ujQbo$x$N(#^gi-#s6zrBZ8M*9Kq3o}RtCwqXa&m6I$9n8XWl?vnk1Jmx z_0tugr*S8%@GYw_Rl@4~Os>!m$g?$&AM6*+5sc7NqR3Ht9x0h#FS)t5d8ZgVDC*x_Jx1sv&oyog#u~CBh7+nLe)4G|ElC$Tl7yZUM?RY+Z zlT+_PHR{>XoZ3d|ZSTlChmNqDXt*b~6vmZeWnw6ab)eI14~n_IC-qW3PLWjzoDgCN zR47fJf|=My6v~(QILr>(5mRa7EuVGZxs8%qVu+7ZR;v`GRwaH@MJy*TAB`*5%hBeP zLWCX5jw{%dKQ<*S_0zxl^p`UwM^AxfDJP6p=~Dore!>sNvF!T;UXqlTFWjV9Nzl>b8>rgSwSPk@e?5h{%L+P`Ub4;m$g7_5T})R@KIdfb+1{%o z_W`f?Fd&6Jc~kO8Q~K*58HauBC0)#|}o?=e8RVA}~G#cs#Cg4xcBCM)M5!M%UR1q@CFk=`bp;U#>}y zAGyZHd0iHKuQ+1u8@}6nvi74&wsK!@q*Wa4i~ca~O5dxL{7HC|0#6Nj-(Hvgls@S7 zv|WO9N&nN2uNd>EM?Ik=W7>F#I;VP$*^`G4;zfptqHBWixdd9VOr5cruprByx59&< zMtE2Wj7{K9?q{;s)9YW>Ho9^#`V~VWHAyz+uMr3L^9uI9`~$$@u(>{d4BYhltbXI* zkL37GAm<9mw!J1(hJ(->Jv6p*dGEH+=)@(}ll4l`nZn_HPeMSB;_-c6F}*TtwB?3+ zJ7WIq&q#qWTeWJV+&M<8QHDD>zf`oVG$n7mG{adit`{71ro0~i2pF(7=K}1a(r58F zkDrnQlk&H2D57v^Glj|cl5|2zRz!^`V=#mydh`s|?+2Y*7}k7u=1JS8pY?qrl!|vD zln3}@#_Gm&Yqo~3?q`zK>Hkvi27!# zxlQanM15O`+I6c_;Ciol4SUAQ#_qW)`(MF!4$IV2+l}12a{?1`_4si?uydLf`fpPo z*so)PcCjYndq%ONQrXD7ub|;mLve#wc?ci9&Hb$QR;*H-dtNuJA_shR)qU^WU1I|4 zv#4+N;e0WXJqGA8Qsr?mP$XTw=qgH23Q7Nta1_c%{s3MW$y${;h@}4jf++ZkR3&`9 zL0^Mc^d)8asly=O0_{1s8qO;@r;8(p$iIgmK+m<$_7|#Sn~<3Jo%B8GPDVsP(65kR ze973Z9&o||9H|}$N%sT*oA1$#nJQ!wMA&op<%_d2MRweDX9Jeq zOUEOi5^)i^w=UU7+4l?E>i-HMPii+w7C7tl-co4q;-W zI13D;r7%8?UOyd;rZ_{M-qt}$Ff%_BQI_)rK~7%k@m)0ZWE5QL{xd^B`I}Lo{MbwO zk#BUeTW&pE7&v;rlT2*k)LuWBgdv}mf#(Rx@6mAOm z>+ey4+^UlZ{Oo{mZsq0F!{8+@=7(RqlZ!C5AiH~lWR2UXv|w+ps7=%{a$#gi4v{)t zHB6(nB(F(XSD>%6wNtl>Kay<+cBmsl5F!^^(`%m9s+k`1v@{vPd zv9915&w&kCnehR$%bZ(%`PwIMUnfunhivO!g3fQKSl`=pK#)3*-%h?tiP7D8b-*+t zt{B`YcGuJnkhk)#Fff2#<=0(|4MDw}Jfk0!j2ooq+#Y4&8{c8nUX z2J*0bZx!au^wD*o-(9zb87Dp$cqQ_AnSN?hA6b;P(>-I}9Pl`&n*Qh`w4-=H6qTF% zK6lOJ<(y8;%>ZLl%h#gtJ}g96`!r~)xxY|Fd{jigonoK6z|dA6T)eO%1GHh0Vi)U3 zBzAKt+Y;)~N~}$cLAQt8o3KnPUPa4vCztiVMkrAZX&SD2m z#p)zwy~bF;vtbcJp~`UAysa#}gg(4Xj5RyBd-x1FsZVyLU4mR!@44+InB_c_vw_G# z)=U7d0U;sN+T@=n`f%Dv0MxyBiU8FMO z)Fff}xivRccCcsq4ikNPf;*z8XP|v6gvpoKLnA(%IVykH(YqZ}w4!BMB}9(#J)V!{ zNeG@ZyFp??CqksIP890K@lAmOaYjpduU}^Z!`|R{D=qw>NbHlRo~0sUuFI{r`3j|1(3Nq)J+5+$Cg zBd*Uh+CV8`ihd@uMTC2fBjNZWQZyuAsloDcB}d>ce+ySmyjpCxB23fVK1i%@ZMxo`UjmzpzjJElQk;$xYTm1~RVkR>4Q>BsB+s$WvBnYCqsz=KEcaR_tOk#- z+ob3C3v1f%e8^lrVs;a#MuA)E72VI59So9_x20aqK}uj@R{(}W>zi)|soeDt88gv$W$S+;J!F<2t@w5yda}Wr z4*&C-mLD-0Mv3gq`yYK>)T6apzEx7as)mLhu-W(HLzMy6bZVrgS-Y|XpmzB64D_1^ zjkbtQ^1Wa0Ba?P4%-PJ%9T}WR8q&sD=F^xQC(-+SecQeUz54ccXO1fCyxX581vTxU#-U7^G9%dG zl)p2IW&a!8nH~o#9kJ)GSR;IbS$SdW!i|=scf}AZ@dY^qKOSMMZmms6Xf{n1dxG*C zrkUyz1R~-6!y82hYagLTm^pmA^eQbCjo1hnBTD8m&QdagIo55xVNyU9bf6F#&Eg6j*r03jO~*0pS^J~GKt*| zPv5EgwNaDmA>}Oq?F1&hE8Y5<`7HYh4ULWmr~rEZm7O)iKUnQ{^y$s(X`$ciN%x%x zv*N)sb>lVI*TmvKbgL^2OyE+JCT4IGzbRrP-0sXlzpH+2mAzX7Sj2oZRf}6daYg;Gc_9C|voBS``s} z8IVGN`CjcGT0-+6MW1Dc88?p-2P*FRP!`BiPBId@W7w_4SBS^Wca=r~U^AD?mus!7 zJG!M(>@9XkZ|!Lr0r?@zSV98d|7vqB?5x*#ufB||y@;Euc1Um17jOPg3!{PQ0JV7B zy{5Mf(5MU5+*IN8wdeYe4Mb=^8OQ!S-}D?Y8BbsIH9CD`Ul$$yyYfRN>DKm_BnI`| zg6QX*PLd6azK&6WBcdmFn7LVP!KH)pMP`fY%pw<}+C$WzmWWwx_1G{}9)>3y$Gq`^ArRi>US-lF z_(+c>vd2<|F4qzrf7j8uI5cz{Cvd5P4)5D&Xq`IbUQNSbPA5|gjEN!U^F?NfME{Tn zvkYH5?Ry{7R&xIAAUy71Hm6hGHhFa*gfJsf4K6WU<|%j}SGC04Yj>*fwY!}Y!6ktDJht_C}wFV=W*IJ=dtpdeLhj^%cOa^uV*x;d>#3+s3<0_MFQ&-#8GMi}9D zw;6=S=C$snO?i&Nj8@by5Y#R;eMrZK46Bj3tr#n$vxIJ`!{PWym!fll|NpAieEF!S zMaP%QrZIdZX7}|f_3wQ@gE3WREVI%pWv1}uTzi*;d&a_pl6pPupd!vjsiB4>S*{d@ zvRaGZ+YFhL+n0^O72%u4QD(D;x9!iEl#gz&=RQBpvU2fHxXT~%wpVLyBJ14&^gccu zx2*)35;e+jK&ON=fO|mDvaX>K6H&tRzD&**HYMWAqogDmLOJd5># ztf;u;lRlc&QppPd4{0*a&UvVBz7TcZ>og3Ytay|6`@negEK> z4m10?Ss|3AG>^c|k~w(hai6P-%bPKEuo<|dtf}>uS~Bq>Z1xnx*?Z)RY?F8|^;EX_ zp^08%nIc^TSonPIn*=y2iAe_^rChA0jDj-SRiAOB8+A2V6)3cZ3>n2%u8dB`og} zi~+4c`VHJraevW4LeOA$mgS!N%USHoi+=GiqC_=duK(!P2zbn8|9~`NaXE))^*>q1* zWY!T9P}jT0~)o(k`^_C3p$uGG8IX?#If{jdsq1+c-&SJ!1;aH_+gWJes+F3vX0jFVx_xk8TSgcyuPO1UHU?O*O+Wke&@WH zQe5~h*zBnD%R8OmIrN?%)4SEeimZ|~?K{G3#0wAQY_du0H~e%ZRaj0*Whb?yMb+X_ zR*3?hh=1XaEA~lc^uYY(;sFQ$We~?$6z`$e81Yi)b@ z%!=X!lvbGMJNdHr?*mpt?|t)p%;)E0g|;HeB}JLM@J^H?fm$-|<1w+D`94$5qGQrz z-tap1h}kUWdNX^$KGIuafkRh)4CB=Pvk~y`aNVBKyb}9*IA$u$`@LrRT%jEiMdug3 zx-O)#IUpYeUYdLt2@?03Iv!rC=<~Pr1jE}+dv6MK@b{o+L zt*Tl#AE$%$FTLH^GC0RrdZx8#hanS&p-gO575*zKN$Qr|62MlOrN!0JOO^3T%7Mfu zBubj;V>M3{-It~3n;s>3flE`6WEb_v!adzvK7MYM+Su-@fTseQ4jIN1WL+9l=hWhx z4O55VpOy^*i}60<;cR^z4+HCTq>=f17ng&Y!r?=-(*%x5LIrXsoRP*2y+lzPQm+1S zdCT0>o5}K3QwImRjcw$_#zPl=WGZXgKT4^-46b7RDh8Nqy9W-g%%ap)uS%mgD#Hr zf@{C`_DrOOXcZc($2e$ij(o%hD{B}QrNYPjX7YhVY%bbFe^Qvqk0p2N5P#Yl`{RJq zUJ_t%gNZo?UGkmoijYgdq8OE@ob6ho<~yA$@Z8>zzH7RQ+6&L517boHoe;^eLQYs0P(4TaP#Qet6|3-iM!0{YWhNhJ1?j)H)&~&L zCxxn*zt?59@{u1a^vGsPg3DqRelJRPaTmtmT`1>)2fm1nTvuz@m)SWR#ed^apEBpt z?Ou?we{)a%7l7##u(ChYi|~r3d)4EJ=tvLJ9ykHIfJkK<_142<}ZL# zb;FG|`3VZSd~~)hAOGcaYJRpavY(Fd*j7W3wEaGgv>-b@*yvkFz^pBIePXGJp{gIa z*i;=v=QBow*WW-XZqCQYK6MtWrWL0ubSHDNEB4zvjLfxN8=G_n1a>O5*Q;M<1X4h_ z^MY%ayGoR5yJc+Qe??~)GEK6zy&`{8?+ud6v-RceLn|vEcU)4sH(XZ?)^TXAOutTDV$e|79$IQsmp(hG z`ut_52#tmv~| zHh@B^=6ij*`qU9l&+XB_HyTW(m62Slhn^3cA;misO(g#UbhV#w{;n9(oH{S%J_|_p zuq~zLDpCwg3aJ_l5o3<;tlpWZxFYr8IACyg4qu$f((W}8xds{zQZn_vrU_5XmX(;i z81FAtB+>aVr?P)Il|4ZHXEB{$bX?Oyk^u%z#7jxb`^&sv%iXs`%va<1jnX~P8Sb!j zbuAuiO_XDS-a(0BjLAZ{6TtdRCey1l1GaWe`uG%Gqd7IYbB_@uYLtP4u3YvlnH!mW>ii&vhQ)KH{p*{2&q8|Hx`~}uHiaH8 zZfX6e@A8E}NpnwKIx|g+H!?3~idCG3{XL^8IZ2e&>KRp~BIwL0Wm0$}`!1ZLf9$<+ zV>hcd%D%S_IkdRnb-p#w2_&VG_wgzp#rUWeJ@(dLsC%6StwjDLt0*Lra)!9RZ&muf z)bd9{Iv(j1tc{LF2~g+xlZ_&i=s>Bm`yhYjC8BeM5P!zzjjwZe@DJ#z? z99j5Si>&qWJ!t1YT3mgVGSH*ea0`*ADB2>;Ck_YIS)v0y{wdj_KLb=@a!w&V5oi-# z9E@W&GsdDO&=6SiKOQvQAs6x96Ph%rAqEhxC~$h*4~okc3R{TP{6`?roI;7Of<|@R z#Vqnf%!L~=9JU6fcCUF&!XJ;8?HULUh9|jW^obFI-cwESp1qpGgt>uI?T1S8Y(P>I zvEP|s6hU1jSAL_u!#67Mt$-IMOyvL3QIJot+^0I@_V=-G5kZShfp0S4SnyQ z2K|VO&NW=#@u4dC(L2AG;mf_E6}Avb?#9g=9r=@kj~uN9a`)hDM*H0de|0yV4M6iv z=(SJuKl+zWx8mOsIfP>@XP4gouAyrpHA;bFe0RMTjqXnXRsE}(bSWlvw7mDk_yXij zNeGSBT443|VCZy;%hJ^cEXfvl{_>a_RsbId8~;A%W&{R)f-PA zD$A?F3T9=)ji*GP-sa|Q5(+H!2F%<6yNra}^2>HolN|7UY;2voCnX%2IjUcVy8Fro zxNgIKTqM%hr0tyY{f(&ln|{3x@;{-6*-ci5&Zm(j1&xOMCqSIiTi&()b7`veyK*SE z;zpyIo0Iv=rm%uEORa_tioWTnuSOs;I$0B$o^vMW+5#eDdH?9=jpn!qM2Wqc4;yZ# zD;gWM=g^W+{*yLSJJ|WXl5rcuv_;B#>YQ5KE6eiO0;8}3FHFBcDzA#hA10$!@C8uq zn*{`ozjQ7Ch7<;^gRg_6n(XIl#3E#7NV(L{O?5lMsnhsTVCmAqqZNqBQS;7Z;F~%! zy-U4)www`A1=-sb&Xe5d8|@z2+l8pfEe`*>6(G%j^zhAQ8nGq^I~6bPAg{%&r;|Fh zB=ZH!016c(PSWpnnrYk}%CBkb+#`kty>g{Ik!^hxSS>-8upDIduyX#M^DzaMB;1Tw0O7LK+K=$@XOLOs_W zWL!)rb40|fmdJ{%jk%Z!6+U^vkSVSai7=cwNV2P+I=f23JY}&z1KSc+US<%vN{`6@ z?S9<7{ICXVp7JVrl^#RRKR+ZXMJ{idqEDe5Z>utJf4Qbx?unodCa8dvu}lvLcLBTb zTgr&8-jUf_Lhe=peU(z~2-SHK=Va615VmMxm9O#s@`V`*_626mNcrs zuTA~9;xPcv%A3G=L(22VvIJU^9B|)3h7MpAW)bETp1Z9ORqx$7`wJjR^3M^GvOn*0 zy-vS^YHMaZg&;i0*bV#Ueaa+T1oz78X3+BnXbY@H)S{?0q}KdVNBzTLIe9VW?CvZs)CI0F9fDDIa6U@tBD=v4W5k0Djbm?%MHUuh}H7afV1w;_nX65$y= z<;QZjum8+QEr0>(`T&M`+w-m(ZBR4sNsO!nlaw}_UBi(Ce`D&<&T$M14BCNxiuahkRVhlxsgIqmcK)m_a|$P{!ztmOE@R3mDcoT7tnsK@TJ@7 zP_v`L{dLFni;`RJ0^pu%Fn3>;-}}NhdT$pCh{v*ezLM)L#RQE%5icBu{gSo4*wy*_ z`p89vEOkQ$We=&R4Jk0~PoOd!;>z9V0sd2GcT`K8vpi6WN^Zxxaa;tA-`2PK0-LCi z;+gu38)(^Ta*=Auo-IoYtXksLy=6034ey)Pklf>`&^ZLNyQ)ajg9x~08QlOQU=oKPRqT|2W7tFrT3*x>V;@WYJA-5+4_Tg+W-%Y=LvRxqv%qE@S z_A)q(2?Lk)M}2ZMN7vO~X;N*_bv4HO-7pPMDjNI*?#^9jwVsL8YZpA28h*m>!-g}e z6N4o#DK56^Z9E`J+CNMUT87)Ca%apXHa?8+4}0;`cx4&z9T;7j0RR{-#hXhco5U7J z)HQ!5Llw8itEIh3x+C8LS=l4NjA9s(@*SP$w44GboKB2Fv_49P$-{{SgiB&+j)`LT zEV}*TH0C~e8a#UUO@9HBv7fNR?mYhj2ompUw${a3H`g_UiP$QFEN!s9tc5UpVV9tE z!FI;Sq{vzjRxA7^F(tA=J7n7v(il1*W$ktcrYbcnZ3@XkRJcb`HB42*qsQBrsV0Aad`WJAGq7p$ zb-~+_Lq1xJvtzrR;s=EGi+>jMBCGrtRbc&oMHptA&Eiu9dI1sH3Ut74;Xk5r7tc)S z{sJh4_vocVNA5$Nt6P%ZaBZ})z8q9meu>RiFOlOg)Rr{4J}Aj9986$1U*6^+kLfd? zcpOtJ_w6y6y@Q#e_&G+B(mN+^zLZu136x-?7~L773<{dFl(isnAri@eC)CLRa ztg!x5R*zI?#$Nzk+9UQx8jpiLdurbwAoX8pF(@n*4kOsMc#nEK(n+_FZ~|p9_LD+pFFDnrQQGsm1?h zJAM6EUXOHl!DNjjm@}G_ddIG2I#3u>2MDd3?cjxrYc*}VlVKMt(PBvi$qA)fE$rRX zSKW_z2Us|{c#AmqdNeUL7Y8OMXU-8Q(nMX-OG4vn{}%|4a-$c8P9G5dwP zY*&Ud{j8TsG~48Q(3OuOLM|etk0rn(J$*{|hG`+%$){@qj*z=RPRsjRelt7#h7rvL zjLE#9=;aLmUYzJC;|-O>|KCL`j7> zC;po`ouAdSx@R>5(D2k2H+SmHbKk=hLwV+B^?V)!zvM3dL|W^gUt$YNQg7F`fJu_| zj!xzmB8dzOe3s3I-4|G;x7qG07A+wT{t>Nv^Fw54EJ`wiG?sfCrmo=6LHsVT|L2K+ zVvheBJ34?}P}1q;E_`?SfZfXse}TFe--D%2G_R;*DZEL5#CaPB&`%c@9X*qyH!X}k zcSa<9-V9XvPCb(M8ms?q)+0nB*;t*Vkx+c#TvD9}Ov`N*K&#f}w(?v6f*d+!U?v1& ziP&NO1;E#xvZ$_xwtc(-cKOIU#1EbFa93ol?VTzG=A<<4q5eduzx9xQdeTuRX@(aR z=A@(4)*x!@4&z^bJmKv$_;o{XF(5qg=b^gA+6}E6Z(YD0{)TSsBxgZew{{6u6v}wR zbyZNkjVa0zH!ju8g|= z1#k!e=Sx`8aQaC-j8l?K-$LiqGa&7p@-(gT(ON10kC7F0>uh0$w(1HVO7nxaC4il2 zyqig&rVVNNY?6a1bwib3%NaCP@~*0l|BHF(wK<`|_Jf8W?3?O~BGL^wT z>)hN>&Wzw%#MiY(gEgH9$M@SY3~<1CIf~nS%DgR#fbdrgEb*~5FX;lqBm7>*y%f?x zt(Q@9n+r=0=^u>ptJ`J+CAnOD=PKz_{C^A&{?Pw)3d510xtTUPyO8K6J02+c?XZMe zH?T^=oEGH*XYvlm5STWMwYt62eye72I&k0=Y=zFX9v?t2@hi=h_kt$Uqcv&xKAaBA z6y!dsNcj3DaQPdHNruO;^^2d_TMyYP{PlCR)O*z2UWo1cxH@Qc*VoY6btRd>dp0`) zk4&$sOE7sKNPj4iA})xN#!}2%G}s|DX8y++6OA;q`*X&Y^ta?By&lS(ccTN7KotfjLO$X1`vR^Nl$9+I!o?g)?M31wk5#mE(vY2t&GZV9fKAN>e;!;3w-tkcR)5{eQ@hgH-Dryv2SO8C z%`TBnmUk!I5a*59i|lf#@}z*w8PxmhK4YKMgUhZbu3A>Amg=wkUW;Lnl*(ZjE$Tl} zr1>QNZASfnQ&!!FtN8TE0gk$(w?J26Wu(QFQ;TBJ=Yj@sbg_MfoI9Flyvays<+j~P9%+FUE6jx zc3v04lM%4bLMjM#KRU7#=g*S;i`0DRM*CD=sb#|y>ReLohI$MaZj8`i(;@K>#Z#74 zv0|)jJLfh0J2_F#j>VP#n*ooZ3I+omI}Kt zl}@2N%e2_w!URuEYiT00ya4+1j*534M)dIKz*Z&jQh;1b)NN_@vOO=Rb>$+Hqx_eW zRYHHS5!dOr>)9LH_6PXaS5q}$IHsGbHQfJY)v{wG(=_ivZRX}?a*~FJLDN+3gy)UQ zxw^A0OA8&){4dta^1$HZ_FoNMj3@C`=dRJ->LkUpBo8ArOjV}=d*=q zz%K7Ez`~Dms=(SEm}tqdpZAtRo=ZkH#=}X7I$2edRp*6{vMmv-H(BVTu7tQ@a%MVL zRb+|qCUV5dClnxA|07~C$RITNH?mfLb_wm^9Tat@rD)IaJt}>2cKyODZ1jmUt79UK zib>of&4=lL$f#`Om50l;30 zf;jVhD1tw+C1Om{T>nu(Jj@CQb7mVpypJe;INu_>Zd2CK(32&5*P=5fy6&3R8P zEJ~5P4q@(eDRYq8T!;4;keyOU9pgpP-kW_TK`q6g#@=i|B|}L`-S^a{xtS6V%AIpn z7L`!UTzLjD5zKK<(Pno#1?d3*Ek%<$v@2)-M$%;GfoI~d%EZfI%Hyou(1AX&vmz{x z7Y3x3<&Vu>D%BkB3Qn9y`U@xKIAllo{*deJH}2g!6E>@eM+FuB%b8fe~Paj+LZ zuWkDN!pmbA9&c8tRZC^~qFZ+&hk;l>|Rhd;rP2(}hJu7v>zxZS<{_%zK=!4VxbAT7KX`(N6z%D|a%mS)gc}`Ih)qV1Za)eqs%SOfv8Wt_E z^ks7l{=o=pw2ceZpUe3tH42^L`~iJM4NS__s0K&JtKP<58f1D($1A)mW&MgpqKm-i zd^=67TvgTFq;h{Fk1J+YflVTkT8{Hh7b2_CI&E!#b|ab5NaAc0#+neiD@Tf1-J;#% zp3nU0bxl==wnUgD6;D0J7cE6T9QIQ9^HbbsyoA!Uur&_{oW9X*1}PL%6^f6^7P^u40d=YFkO#%X5c@6B$l#m2jhOipTKQc`T_XT{87y5R z-^Ph_WGi9`ZNho7mHOYLj-~&aBu>gTu8y6y-NXFe^2sy*#70de%3bMS4>&l~d|4W^ z#kjvGfeIwG#incd&j4P++;KcsIF~lZvX~R zgDULIRpLl^`e=P=rkqj5wG9CQ{VZXgYxyZSHJ6)oiU5Uw`9srW)oH7U!eq^6gH+*f zS$XDp)Di#4SJ3*u+BDhtp1kv{em~bW;UJPu0}trO zT10_8t<7HvJj^_!=jm!blA7*Q8@HO^Ik%OFsbaY?LUboR|Mtvz)i5fnxb#=RQ;BIK z+cL8FHHZ?0^BUS1P*>MN1#w3mMj0&-|Fuluws9?9rYNU;9_}l&pbmBl@bn@Olb1~g zX!26m#I*kIkd077&Oy;Hb_KLM<6nTIPe5g~{qdX0d7v_8HRocFQ!WQMw6~Nt z%(&d#5CN$}>nhR2`)0P^#gDmmn^W?A)8Mo!=hNz}rQ^66({j_ryB~_dtdG5O)vJoe z-4<_VQ|o`~S43_1G)44&6OQ@pvN>djmB(Y{2OQ6{)hj^Z@(lWmbThI zN=el(v)&IX6el^gAR_)2{eQqygyxK?2)~S6cu03rweVt$E z_od4a{-(@lqfbFVJ+$=c?XR@+>R`>IyT*p;mYIM(HDG*g;jsQV{N;y>mHS6+ga!_UTJJqNl|Ef(9$k< z$~Jk164X!A5t%SWD1wTI+{;)x2aOba1zv$qPNyg@%cx{OI`INKI}Pp3P{7a6zn0Ro z>*L@Y&t+eg@0s{6?BaXa6dMBjnDJeNYrYwYYlUKaZ*%WVe3aJ%_P{I;Rnn=|D9B&C zUyS!rV^T7#wK--hYkLd~2whk1wclb$f88kh1v^o&$zL=n%Dr?$@WNg7yqxhuIBvg+ zU8#v;SCaae93j)}igpF$Jrj)=nm%>yik#k+IK$`TWYYyFs?^*PvjvU6h!S^rrV&=F z=DR)TyC=hDxc4e92dn;|EJ#zGT5J9WYaNzxsCL}UDjdYS?7T#&78jo*?w=SLLp|1) zUT(Ze?|lV3v8fH~Pk zYj$9nA3`VKg^W)M17kT+?Y2ZYP=s`OMu(VEuSy5av7QUG5@q6Zqoy0N5cNH!E^R3wl{rhp20B(sTRc?PnmJRcjayF6M+4kPMLn(a^ndYaJ zq$w%T6A{C8Vj^|~4E)HQ9~Q?yTjn5f3rl|uN?cfg8!|8Z_dVcaJd$Vm_E~()-5Ding^})FG`qrQlF(=}*URdaqL8zr$O+V1eSn|t1>YwNYL1R@g15>#@WSFCsrJ<{^k4v@PXAkRKeMZ( zkGp>Y-ch+MFlcK6sp_Ss5D&DdKNIhxC>tp<+MA^#s;(wpK)jx_i8)1YcMAk*5pO-Q zDIYG*Nwu-Jprzze^5Bc$T58^ElndK{Y{w#DZd+iyh1jNIW-5PHdma4UT^+aJI) z(ADdG7pAe+vALOZkDs36q4_Q=~3B$HXf; zBG-NsXTP4;<1yH$2TeGOJ31$XCrO4Y<-d?gbWf#s6qvsPDmamkf8z_@`5JU}(F<-4 z?=T|!r45W#sSaQcst9LY^C$SS0os=CqoDV18Ep#PFnOg?xe2$HF3)jmLd38g`y5_d zmLxjgN`jr+=(}qL%@&6+`Z{pZAKfHGEd{V$}UP)=ruQ zT1PZ{h6iOubf-?W_S7Z!4x8IC)K4^nC@HB!J2rKMDxVD%g9Uf#OvT9_v`w!8wF`x*Vd3y4W)p_+ zW=B>uM^4r#_WNQQJ*WF`B3WC)LvWP}f1s%X|Hhn^h%8m@y1E;5ugga|A`3c1zpUzP zeRTw&#M^%a*vGQY!`bao0Jy)~#zsUjc_uybY-0~2*rz90HX17N6D%LBGFklmfsqD} z5vKvWg5SufJ+clQq--$7wK+|7&^x~LdDC-VMb|Ro!RFEXi?uO_p6Od9*tKq3wr7yU zV@S9k{xi)c?vd2qoyX!#4MIcl&rCJZZ-ww4XVx|t7(~M9g!7I^KXV&LB3TWHek_h2 z{t(SOn*B7_M3#B7`{+gw8mGnXN%ZsJsTf=>wyQ}0VIwMqHPnT+GID9zMNlhSrIo^;nlG5_90D}k? zxGGFXl~QMcA8hT_%ro&jG?`@i#H3<$%*cn$?6$6H$v>ja2C!osm*E#?wTK~Vu}0k$ zs^MIKRBhy{NB>2I(Uc*TO>eH}Co0Z>AzP?*L-L3h`Za8WBbeAnpT(W?iN^`5{_?2H zg|8hAeG_x~Ial})b>N}H*|4R&$`K3s4UHhn`pB85{3I-cm9(&0`r%2{o%bt9y>vwD zpS^E;*&;Z-Anh`mYIyh4EA!Bk60Pa%&e|UVEJ{t$BdKBuB5EpyY4L9{Sc_*XxGSLI z$eIrd&V8G5{BhEfb`Z&hc||Jr?_X)L`l1dGgccmF)q+{oR2)C!EIfJUtS#Q_F?XfC zxC6IMvoQB!43OU1f3WID%msSD&*+Ymv>lU}vM;#YxC=LVuUu7M-&$SMD)K{n88ma* zjaJ*1KLohTnJ;NNbBf{y%JM0e2#xRz_PtIs04`Whdpy5Oe&=>NCvK=*{}+TOW|rO*pH(xq@p&er9&=^lL!}HT0=k4O&thFIx+~qV&wU zzKQ+|pg>xaE&-+!n9~D2kauF~>CS0YiN;`k@G&^WU4>Fw01LAt5&*r-8HkBry3lh2TXL3-wSIc_2uI8h{{L0{B zpw^W|!#_T)y`=nCpq3XgLdA(|vke+O5OzLuJ3sw^JOuFsaP&G!?2J_B#(8`H`VGr- z&Z7RwSFY|onfyy*QgQReLn7zFXs-InY)^@oT08!tL%LISl;X{67jK;;i-Z&=><~?( zJTL$BRG9EZL3x>npc)^Hg2`(I5Nk5M?(l!m$40j}X{3G;@D+Ko zo@OyRpzjW=rrq73<+;3X?}s&44S4&-Z#kcwcpvP=EnJq?AqIr*lx8mgML<8jcX$E< z1w=W{9F%6mi7O5j>l!l@59b4PIA+8Av%FICWuwny>6NE1l$|eY#C_$T;*H|Eql00J z>9fqHr8x6hqq%1aE|J02s$TS82Vj>Tk4NQ_WxZ|e=) zO!u8=U6E1^_gQpCG?N!i{d0yV2$nPU+u*8E>a%UAnF}%FgltWFwP%M@`)EJt@`(s) zB}cSE((|I?eUAQ}C-FkCiN-}=XOo~k;qubRds_*=cCXk3c3hE>e2({*l}8)0BCed^ zY?>({?AG)f6il!49L1dJm7biZ)N3&)%_O$bizW675B#c3&&cdlE4$DP}SvYzx&`#T$|uM z%~M{}-=;(AK}r|9z;9;mVQLr+F;5$$IWx>iOod1DST@OEt}B?th}Y%SYcj~Cm_qN+(D13* zg5+MR4^0L7WBA`*fG=1>6zX3vZf|lBXt?!C;BcV}C*|v~`*w^r_DM(28!+WQ&$Gar z?)rA8$elb6rKi6e7(>r6&Cg43edf?+dKZsj=niJt^NqLlsmLcfD%BB8Y@YlrTj&O7 zfM-PeVG_q|E82bEvBNnDluCB!LZv{HKneRZq8VX&AifuKGcn<{)T)y!YoeVib5U8(z-;%LLZ>VqDF`>dn#Yx1hYDCf4R?wK^peMO;o* zWQ-FLZ9~_AY5rCRTEZ(sb#zx$NJG2?G~pr_eZ;;6{>|MP6MFLbku8%H3bC^imDT`SH!r%QsRwLU+H zD?NUJp{}keip7(s*J6+i5!c=mhizr3-GJSJm+9Tey^+o1V5D;G{V7DZZx+%Vco<{fotUzwe}9^8B94=o%>SZ-$Q372qH% zpnWavQR^3jlfD+86!7y-$=Js|AA%okFmF~fXM5=LwitSORCJXq*x7(edOKpOK0i+0 z!j07Truf+h@cOZLiS}ZAHlJZSA%t+^;A{qdfaRbbkk>mY;r6mCy$b1x0mx$#EqZAD zi(DVb^+&Eh8*`(hL#{RA!na9-shN-@vty|wp(m493S3Izx4#a`$6oGzl(9{}#8|*U zP{aYw@@&g+v$82(FpzicpSsH&{O@AJ)PMw~w*S1l0a3B7{V1RP0#nCic-M;Y=`T5{ ztxt!)1Qooe)vD7JNp#VD=Km|xX)tD&?XNNYr7j5_o?e11TqKn2Vvu%@DqnjwCc@+L zTP+Rkji7f8*?ns5jUh>x35e!Wrb-6OTJZD(O%fxTdJ(sg(pYZu4{9Yn0Ld;qYVWS< zt2jQ_MLIAgOx^Udp{2bd`u@rGY`RRbuk8(MmY-~r_t2Ky$X1Th&yBo2t(|M9i-Lo6 zudES7?$AGY-Jcah>P?!zl|4OcVUyPFQ^+qvwC4z*lsoxiMSH8?rhYM*B-k*0T# zhO5Wm!RrKUY{2n82vW4dd~qb4GC1OzmlxCBQHY(V6_XHDHU$yhd*(ks&47KQprN`2 zdUM4Hr=nh(n2p=o5dmINmp7+!p+ZL z2biCTZ^vY(Satir=xrzWx1p0L6vS|urMiinVo}~)^Xuu(^aT7yz zD-ZV?rQ^lkk?`Jsd%KJU-A=MxOpArzU%S~jKp1$fbZ&ksA8O1*B=D< zt(u!h&CR-OP+?!3Ip@EfLG{E$kFNH+30?;dR>%LQ*4AYi%mBvz+PB+*%Y@1#gQZ7v zkC$4rrYDuRd-H5!;<;Uwl-9B(vS)@A@oLIrNu2j67PsCdy#OpR3f0b0Zs_a3X*!kP+c&vi|c76W`LX@wZovynH_ct z>MH!VPI8SCMvkYsAZ$VVRdiKimnafY0@Bn`RmYD&M@Y;6n@&E-zYYoh>pRB(sq+GK z{hhBD!T3aqWmS{sMfxo3Hxf@=Mw1Q7jciFh7Lv?&FgX+0lo#%ds#AHz0huA5!*Ta0 z?Qzn-jPCZ{&HtI(F|3BeVRgKuX20q$#^KC(fAiEndRI@sVESBC1g6P5Z&+Y|K>CpP zYbHCptH)yUS;?0|>SlXvN<|m=&MZ}SPT7cg+S^5==bAJE!!^#IXjGGk+~pZAHl*Cr zr)rOuQ(df~tqslk&?$V>L^Oz#4Zm8RHU*8}2C;h)FUnT#9g4xjbxX@ zh2W0K2%zbJkT#?{n(37#_1DPGFr4gF^Eh?Axw9adITf`b)g;bP*)Ow@5_#|82zMHa z>KL@X)`w>NNAHD2W4uUK$-HwqvJ*)fDOYYA5~1I_3Td!n_6VQW@#22Hr=3W5pykC>3p6vO=MaD2N^|dx($FVd?Zwm%=USxm>Ig^(G^`@US+0_2HrH0FSqO zv)3B=!R6riHXtsVmnE}Syoio8%L?UqS)n`XecD$661B5Kr?ObIt<0S_4)l>8R0q|- z7Y>{=pKT%J2l{lN*k>g?{~uE|hu_g^uxfRYgN{NGpCiACf^PDdNRB}jfGET2sx@88 zgl}B$l+N!$536A2L}gcP=ETR;*8Dufn{=Y)^p!?ZX*sL-=XO|%o~pTuWEsvbn@PAg zWv3uwHz<(`u_T`L?J%HMf@*QDg|iss|GvnkdInXI+Xw_JH8m)zeOJYr39M3~zy>6S z$vE)d1+5_I=gu!_@JZpak!STYm1pcmXAboV{VO04Nf&cs1=5Vy`JL-ek&SV*^Rti) zZh6<6)1CQgn3!=s(FtlOO#e?msBjn(yjOXJg)SPWHz8<;ixaWUx~k?Z zW)EVax3!M~?d%!c-A1K3G9HxchT=VaEM1m6E@fC^?|o4PXK7|>U1%}mH`p3CTD_|QI>$f{=*>y~KGOfMp8@|T&IxILzC+E9_UJ?p-m&qkado_(UlN~+i7~{< ziDS}ng1e}c!h=E9*A=-JQ)+?cDX)%mRRU`|?k)O8LbFrGjOG_tmg=ay>Mph2U%re~ zf=jOA#MyB6M0@yj8O5fgR>50}CTH1G(rzS#QZ=PW;O|@(MKaMTRjvdN;_>%fyGp@6 zO{J=IC!=2TYxP4+3Eo)^40HkUCFLrfLsymAgVda*yw4bORlfG~&vC{at2@b@yWDrq z`aHOld_QXGA}H+!qa0EDU~-O*BNl33V{MH))Jz?e3=rGL6(W3D@ICdW`+&Lr;3M;K zkIppoF)xXqgl=r|!J_HnP%`SHHy{X5vOS5myq>OYsBVfnc;gtlX5&5f<^`otnvvIe zVT&lao)4cq->|moGmd`#oG*#teTCXuOBmY!;}pcPYpwaq5wfs!mn^NmlQaSXR~cl^ zKwu}KN2%d&&2}uu8hD4NvcWvtXtb-3)7DxmvNjm!mnXxwa7(iCBCD@6pf=)h>U$ouI6vFD1Jcq+nFt)&zq! z@gq8|V+xzazI9<#5v^oi?o8H3CYNN%&Ev})qJCN5i_XWuu z^WJw}q~QiM@GcBHG7tO-2rl!!ev=AciY;oz8u=io5~d(P@y&`mtjqP6_%_9Q)@)b+ zHC5kdh8ZaryVBP-alOk1M-#n2ZggRSsGY{IwN}}h{?N)rUvC31!;Sl4aH%mgZ>k60 zPtoRn?@Wki$Ed8+%gNTA?wn|2<-(fw|FHL#QE|2Jnr8t45(p3o5FCO8hu{z_KyY^{ z+^ujY1Si2QK=2UUt%|}eSm6{>P)KmMph461?{hx%teJEAotf3WdV0-=`o^lg_u{E% z-}iH0*YEN}yc8enb1BgYsxMp@>`h#!+9^0P(30U$q=ZraP~eRles8fa?npoLqe>q& z;xVFxnzFSv-+d^74~t80bH54P)F&D$0xXfvKf`zu`DF7pD?#$5>6`KrvoF>6M-t1R zADBQVwlFl8fcwD`b{udza+Y7GHSLXmQQC${1Ey~G6C%NsfZLc-YbF#Yhd~g+|E%h$ z#&rE&mP0ARpMc!zHA9?xX!ufovCUjmD#-PnsiGH?br|hi4j1CoX8a;rGbQHJw$ECj z2a0M*_A;0e@!meq~n(s|rfo0oXc{Y)D(NdJY z^|)zPxkcwQUNxpMnev$i_>C&MAW9%S{-|PKiyzbESl23@e|)zu;%GHZ+|B1y4b!Rk zq4aB(l__eiIn*S~S)Pp37$m{khR-FA1wUptLUZg$x=~^yqAy45{?_7z#PyOPKm2T< zX+QFWVr2IdiWTnh?ARRD#{L5I>VUPEODFumwxD+#y*@$+pK9^yy9vhVcZ$^QD*8Ca zMD0nVZhjNxHGwJ!o5zK?{YFTC1axZIggyRlIKSgyG7sCR`$xI9;&Kd9;K3W^%4wO= z5)ESR*D~Hu*MB9{C^uQ8kIOzBW_+@mBrNH5zwCjj??g%ixZ_5Ge}Q99ApX*icq?XU zaT~$LzoE4d_ZgiEJ-x1r>PMO7r3+yJ1Iaa})AYMPog<)Ksz*g5EaPiP%$ z*CMA2rZ0fCeCp};$0o-{x4#Pozu6$I;!PBX$cOMIO4uWQIFYaO; z1iDBUtH;`dK`~xUzR6lb687dosbFi2Fa_dY&%ZcV3oHxnI(V#%CX>wt*1b;Fh4T8> z54{pAzndRMh1bkz9)clvpD+R*?QCyrO2lL>VOX(LO>?#j48WPU-@aHxeI54yNqF6} zXZVQ&Jk41I2@-PF8m^i~7Q>f{uziO~Wmm&Q1{A5s%r#ZD8&%M2Oc^Ud_SS8RQ%PUr ztvM{ocjZqX*m6lg0KKZefHMwcFk&YE7DrFlDB;oXaIB2y+cQqcx*T0{m=puU_dO-W zj!+lfY7@#wu}jxm6u)Qz-cT`?yEzAX9rFGBmDT5XV-&FVC%PyOV@*|fxlxQ43Zt{YDAdP<$@)Bid%~^jHoc)cx9>}On|Jcgux0qg-CK?vKqO8 zdH6BwSJdy%AZvV|Obd1Lknm~%;Wwl=!GPWI3cceWU+ACS(7*p3iRJe2{wzris5BCI zoXNmOFfCvjaZ>lsAMF3;_5Mda$3OU9icZSEfTYx5#Ivpopq{S%E?>WEnQL>BEP2d_ z6)8HR2>g(|l5(|Js;X!l5C88@G$>I+h2W!cET02(oAqs0iyD>DQ$ z-dQJ&?7U~hYoS2yi;ydvobk|?P3gQzXxh-7p+60L=zKh02dQ2Sq^gXQ5{uP6x#SGJ zz-nRZsC3kJ^!#wn;a;W5!81tqT9eofOHrb9UzHL1Xq$nVvB3Fq*yAt2-rzU;ju@X^ z@`Sphhp#U^;TF*KA-G$#gS_Yr92uh@|EX^g9Mp|FUg$@T^tEI5q1?KWan}{&J>$wK z{NhTh>iyp?H$cC|pkc(LrctXz zr4V_C^=B4PNKBxpa-;p>)yccgU6|;X8v`uzo#zDFMxK?wZhzgLi7b;F{X&=>bgdfK zXXv}WSf1bgq54jd%Vb4(p7|@9$n%Zd3e;?+Qqxg`InfYYc66V4Vx{|4ju&f{($40& z{}B10w8*$kezXf+tcGGW$R+RL+E|(E()U=OWh8RKvD&Uu)}aiy8Qexaq+2LGO%nfg zhv7O?GMc`GAZ>66uHmsgT~Keu;r=JXtZzyxpx51jqv{1m_W4g5lBOuYrbocsG72MY zY_I)`UkI5LvzsHFJ;oC^Kpy&fh&~g3PTcO6Av@JuWf$7YY4jy64%#=8h^YD~r zrqsCIL>hVglIqRk7y5X2DyMNBj2Wt&9mdVgEPA-2hz0fu=hZ1}4Ypnl#3I(mWea zocVe8mJ6i3NWlscwlcs{eBKMh0>BocZJ85(3e$W&k}=6TCf@)$0j)fGj%hH>Z5i@B z6sXQ40d}VaFo6djv!pa~=HP>1#O>svYnBXFNhN!`0cNtf>41RMf2*@9cg- zEEHB=wSGrhS!AFrqRQn*AMKoqeWXhN@$B72H}eVYamYI&;hTGPZ+2r9&T58^mRMNU z5lQ=?7C?*?`3xh4mcL*EiZhMnwuE%^IeL930cApZr`kua=>E;&zBR|KWlFb&?8 zugmA`s?NAvLcqPB2&T7k)>M}{K-s-n3}0(+!J5lV`i%*PZ)w1Of=;otB*At=_0K-S z(jDF}9ZJ7lY`z+rAe;F3I}T4s_i_B`siBd;5~x))Q>d}v@cnXQ!h*Jz{q5pjhV7vd z(0DoB_N6g7E?#%|wJ`>2K7LuQ?vyp04Nd_*1|-`EGsuFws8^TBz5DsWP>c*POp*5%p?8-M!vzVqtUK5 z>MOyA?z|nzG##e{Pmh#%Hkbx0){AqH)qb#lo1{z(_Yaw`B1Mbxh9w57{?!f{sb;EG zGMw%3Mck^4a|Z1*-jrYc2@&BMj&RCETxHJXy{;MOT81~ieKA7e-)3@-HKEK+0na_$ zC{5d6HTk~q_gNnWL8Am7mdr27M3_ZH7*jkIy{o``&ovi}fXJdwcjy-h80~CB-^B(X z1j{{!Dy^!kT2ZHXH2V?y*m-VwwS8vxR8_D=bc|_fXpWWL<}12yL*klDcX#)FWlD92 zli4G}H)Th)!EiyEBN^QNof^G7sf=d6U&>n`YuD#$>PvC^`SW<**IE_wON=3k6Kk3x zP6gF0V94Z1O<|9aC(}bacO}1Ip8c}r=$#AStj~ts*z`6-wZ~;~>AsU?+0@>Zt0(zV z29bZ<@N&ZP9lofIdZ**}!{gp6|3WL74?+5Oo_D&*7O zqMWb!G~w#Gm2;#2tW$78@ zpR%JZN7aN6Ligq}|HBsq-my|?gOlqXHCDd6yZ_plnrOT%gp{R=@S);j`K@`F6$zdeLmT#sK>O{--wTJLhX!86EE8|IC1ys2$>lt?s-zOMp98K2j!SVNte>lwm(kg=Hq| zzQ4%{aqmrp7s3S!N~HMR_vWBSG;5k)^ns8a(%X&F;7+{XU_D-8SC@&ItiP zv&JAr@Nu%woOI8p3iH<);&%3QYbcMhD8vsZDt{pz30*9GqkiS|R*$cpU2QNYh={@F za=F(!8o^EA*7%W31_!DZabH)TasS)xbdZndCay5&p%!^$Z*gnW^YB9I{^&uA$pBqX z?t{6_K=NQSzVhD;N=UV4yv2PU+=xZow~`Bg0YWO)p);khwAIZ7OxwNdSFiG@W;U8< zfSMN06rzH@RxTt_);HZ47;&$e@%9Y$TkoNy*U2&t4h~lXcy5#I+bUEW+m?U{VPl=( z#W(B@mJRjbMu*gq6od8wU$uh_TL8@;jI;7i6kg}@CV?NR2&}ycHlk<}N_1cCaG_3? zC6=_ssjuPn&8Zhh6*9YTg{!%ri^Ue(KdK(=#b1>UN8w)mPI40gB*%A2yvpm4^=vZQ zNA67+}jHq0PjQ_EyY+1H!1et;+;ChVtZR( z3Ihql^81OknCfa{poydBn9b9u<;0;7E2;pW38NTaMRqUN<6(iyb?!g+;g1~_C`T!# zjb2UDsWBOI*tQTo*@k^@v(0OO$k3qX{H*w7a+hJ7HHQ zpNG%7+7P~`o;f=m`n(Nh2yNEs)KsV2#oI#%zx4g>l||{6^Zvu#gpsl)MxvZ>u*=To z#BYFzfZk-^;Jkx{mqoldjIaovlzHJ(Xin;YWd?0k5prr7QJ<=$M_+9r`$#W~UApjU*|UZS&>YuyG`Rx3)4Uc9cH z(RTV5@Y%L`@%-5tgT{9>=J(hDD~O9RX-9^UdJ}T2AX_LM{v^{t9wPIG9-HN70V95C zjZ^B3Ku=()jIGxQSz*ZA$U@%ZM0ePLHQnZIxCX2OI=_O1&mqT{&}{8})4x8aA{y;` z9=B>v^MHx3tQjbHH2p}k<8SwB9%4e@YdGxS*+Z;s{Y}!*;pI*;q6AIS?=Qd$Z8BL6 z6GS>F=f{<`(i5vFlrDESc#iYs_x*bo@(IApnIr;k>@PKzQD~b$@v(MW7MD!mSiCs4 zC@PLffzd8uW`x?u31~nU=mbo5*;e++HTY(5<{pMd-t*Ji4x;}Kr5vnPKaduWsII;2 z>_Xg71A*1C2YPe*pXGIC!isk-D}LrLZK)mewS^{#3}O{Ehq=42vmfY~2%f4w2Z=V6 zhY4yKsg%>b>b`3kKYYI3{6_$mKIarT5*WB^le3iU-cINU8X1xPjQGotSt~&6>0)Rc)gy#WX^yg(9VPHZT-I)SW!%OWM-`Vi=7Hvg0=$wt zdg;zHAMN{!T&Qv|5MtiqPA?6ezEG;oGIj=;u6PAAu7vd~oyxqn6lNBNVRr`TdEJ(` zbSNHIbCx6s_h~NX9#F9CV$ISS4rIS{F*! z9kDedSJl*nkfUaUYjaKw8H~QaU$MJB!vct0kc^p$X_+pGw;qNTSy9|_`O&61EF2uU z7XAg;3g+7gv`K#38m)lSEXKUsp^g-iZ)u2mbZQ#{^`RNys>au^M~kqi5+ZiWs#51l8ncAo5O9Kp*yH>? zGH@?%3~1-FeApcK2Z11x9t4>3#-+x)%_(d}BmcqjXf0IF5)1BmT|cO)@|#a-g(7yW z6J#N~0qW#z8zy5Ixk)(8ad|w!cyd`~^BZq7AToCp_qn2dF&$KARH0Nf<4KCI^=69V zglQVdaosg3`T#D_NmQM0+zFb)LnP+gC4rgAw9BVTd2(rokuEQ!*`uzVUNu`;$k5wQ$N z2~wXlcUL(D9sLC?5>je)hATJ9HRsajrb*+w0fcX&F@9I*{fDnm?ax~2)Li=m#PRek z-u_e=&5^q;6U!44Ez}O@hD-T&Ub9d;Mb`=w(>=s1qo8}zfGX&i0L)lMbX{LafIhDcYOg~q6>g*?=EvLvg3b)1-VDIkjkg$c zM4csu$yjgS3Ro^0x5WJlDyHv9xQNQ-60-P46*ZhBMRg&*t7V2L;4L~ndT`8Nn?(Fp zU1~BK19$3Zt6vGvx-#KB`u_#w{Y-hb0m#YYbqnB*u40@O3-)!6dlks8$l&$iDK5|L z^Q^&^IiuraR+p+Hn<%n~w~N#VRF3bgoUp`i7%$7cX$ehC_OWiCDB}*SZ8xUq*pXpi zbNQk8)USZ?(n@nHbNBJV#QQInc9D!tlg#tg$ILNL&4hVsGveoac2fK&-cER4)#AMj0z5>{is!(czm^oogHM9GSfFj0Lu>7o zn|#>t^vB4yyMuJ=8}%*=bmyrEta67ux_36SqgMf-81llirfst%U*zI7dSK3@uEwv$?6j{Ag0In! zc(Ah_BucNd8~dK#(4CNcrSI1FiH=~)NaFu+(5jBS3I68w2Am+`!l1Zq zK+n9LR1PZK6%i=*E=Cqdb{2sA`J1>!!lX~1qzD3NUio7uUVUEEL8Z<#{gQFEi&|2c z=N(I;C&30kNwk@#^soZt8UTNt}6Z$16Q2y@r`f{%JDg z&j!|rf@5QV^qYPUv|Sw`mli&(Q;p$adIf+8{y=c92*jq z4Td5~+DtG)g1T0}eiZ%jruN++(}mvF2pgAB8;Qx_)=>8~W1t;234e!}DQ2F&D>=C=7a0@g*f*&5!}$HaSCbvf5-(R_~zx z^jb$4LNgVXPOi28w$wp1==FZuFAb(X(?0R0XAHzq&7$AJ1#Pyiie)s z*>yVbsj=`O>TDd>a14PgNU$GDwDr9pgOxa@3;Hmv0ugyvf(!IT48z#X_&{cAiDOB8 zb*YM0L&p{BE{7wguyJad&-r|b<>b^6qxpILn0{>i&NsCrGaJIKOS$RR9 zC=S2@R*m)(%rrUE7qPO_Ug{7-V~2A`guSNnN^ib(TpSH~=!(=mCZ1#e_>6bJBkk#c zY5ou3h*RlUP#`0%Yg%E5EOvI>iz4VK59}ya{)$Ske(X)PA813l1Z+mn&EHtNBFs@} zKeQvVQ|#jBvvZhb`z_s9Pxwv-a<;ToLDqtN?r$zXthh`&mUoY)!?~kqbOoPxfKt3O z;je2d5Q#6OitonOcaF2RXbc^2SO_-b{_}c5v?I7Wc=cn9hhOkvqa(9s>sfVG<_j3{ zCo2WBugId%A@a>Q9KF+1AWX<4v5u*%<4z%w>4z}Jv;20$O?GbGvvZ| zpfrpOHjl;_uDtH*6!H{e8c2lAhl*RMyu>y=MBi;Fge(A2 zQ7$lns>X-R_W2Jki6H@4=5hqaa|xA<6v&6x3anU^NYoSKg;vTb(VRG7ug^QB$AbP)<^U@x`9kQe@O;3!hc$RcVm7k5}8=U`0m9q(zQz3sA;X z`o91_Jpr#3;^r<$%8L4t!V$PQ!|S&=axLRe=x3kpp$$qk#~-NyF_jJ`#2nx@-)W{9 zZm!~}DLc}=Eonv{XO~S<4J`37eFXnD+*|Q*MK)uE?z3k6@O!$A`W`BunpDO1c#g|w zVEx8~b>QkR+x9df9)M^D&gN^84YA|_o}4*b2*{!APm{gZ-4M|;1Kag&+q0jb5$dB9 zxx>}Gc8$3?dcKe2cfn?e%tR}a_Qv(&)x}=odJA$NiD6-w#3n(&RNIs$UPL;g9+JD> z$cVt*az?uKL;*`gU*;|SR++kJuJx|1U;1UV*d6zABq~i;Dg2&sl_(I!_9rSrWTe*t ztK&#D!||#V192lvi`ua1Ue2ThOo3jqXNlS9W?9!y*s=B7JjZ|CnjlSu zksN6mOp}JyCZ?C=l3#2%o>C=qBt-BMOE2^DdwFcf)gVvRqU_7ZE_5qaMY#!0gegr7 zLlB7McZOy|9E@K=??q_*nwgKH@wMjUdcNISb7{)JoH8Qe@rpo#_=QX26QY8AH@e)8 zuc7(X_Dxmh(5{Xd26+GFa^-s(q$WorAB)x~$%1x*I*#JK<93=ah@>g|SsVBr_X3#- ze+Heg+)>JYxPkKzF%%10ft=uykxSm02RL-53{j&7xo zwP$(!6?3WfFR~tid&y$K+A`c=ekq*t6o)TE@z~l44^g5i?7&{1Me|u}r&wVWL(+i$ zrAa>}AJJQ!^e0~XeuXNn(;)tn!-Lq^FI;)M;-g9ZR73lvTN;n%lu|H8yNd!Q@8AQi zEfFs3Of5W2+P+s5UeMptNlOpeqc$T7z9f_yGy!%s*tIH?DRV1}x+s!!o^BL54IiT> zwpEz?GKaXhQ$f0@QzEURuZ=(MBGYv)N9qVMo1~xOyz>19^`OLTZW&S?Mc?KeSsW>C z@i+BbI5zhiJ{E@AF8&3eiQVZG|9ET*?qOA3KA80I^M5nT|BbHA7BUmUqcVA9a}$#b z%ljTad46DczBo@_5Hqm9ujh-i;@vv%Dz6ZK;ep)>*z8{de^iapa9Veajn8wK3Wi_ML^aQ^B-eBU3PP+tBH`e`km#hx;r8SD65%QJ$Eq-RLu zB+t+XxcDCbzZWmJj4AB@P4SYqtp3sJ$-y3JY{_oEV?*=w_H51MkBp8;2^cw<7#~J^ z_#d3=HD#?N$6C(*ILkm*^EgF+B2o`IEL^+#onpaOVCm&8Ms}mar98Jbl1yxs%PQrA zn5EED&r6ioo-M&1Np32{Vu=4t9$ymu8TLLaYEMI*;cB+DxEeu}sr9yzL<7P(73m_v z*A=?8>$<9_t$zxaX{7=k(xQ-8yvWyL2;6?a0%=F7r} ziR3}dH9G0{nf<=Oeh5Ih*1qGodNJDQtz;A#Im(Ip31Gd8OKz+(l{z~^6ID*Zcav&K{%_&uHzD#?bex}UG&fA(LsDVvm;1h3WTsR=OBgE@%L(vQLP{QN z;&@D({Soyiclz;qvZnTN`K2--I_v4cA+|8N^D50B@@o`pv1z(`u2*zSY42z)GxN2= z52B$z`|}*%S;qNtcA&;i_H&@WfTx|+FO3Ztp{6n)5(9DSar$z?mfYvpYaBAJ@rv#1 z_il^y%&dKtAx>$r?AtESrRav5nM3pLJ;yvMqi0e&^3A62M{%hI;U-+`kH^P;7BSwT zAN1DcEPK8%b2Z;}mQ(_JO54wG5RI}f`TIlAWyYMp0AHV}lk{8LCeCB7Mg7j~pNPFu z0|?AUuiXG^=~RgnGlV)sBFzQ_&UNk2xTX*E<8K~H9pPofS`D4Tc!9Dk9)$!sYIVeT zI$j4OEJIJX1xRC$-Xn3VoMjwvn$Hjk-vHkIOp;Zf{9GlCCW%qCF-vUcZ zn0bUPStW;gPRGnZT9f|d0Y_j})itEEoj<9B>@D;(BjPhD0aju>fa_JbBSl2Av3;tP zK=d4;sYsz>(xQJ5i5lgIar^?#`yH{Dx;76Vhj#K1d$++x_f;qcz6H~akH_9CPEYFo zZm@)x^czJ2m5{L>>hpQH$u0`?W7UcZ@(nC>pdaJ~OPD=b<^4G5HbE8QPo?-iWJM^JL&dSM$7%2@&^HoAD-wOkJ|%QS;(1UQ28BstbkO#qznD zw}+sYQ=h%l0teS-+!K98(QXj;F+%^@%f0}95v!^&=!*4yP%}l)J9bFI^gXkKhtxRs zwZe6E$!r|y^>u4RfI(*)#2#Z&i7DOI2FEb0jm;glrYIRN|DWwWEcQwsTeAmek5yJb zOAJa9K|#TRp0ALMDFOYBqPuE=-K3RzHbQA-|k zyH-`<$)_D3Glm4>?MC`WigBnrX%0guqpzQq3>Xvk+HXR*JXO(n4sW@{W@awdWjfTK zqh2P#h@~(7hSY3FlLnt{E|VC(!n`n6mn>m%^*LTU(d_M!q>S`Zi+yYc(xf^kows9Y ztaN$6T2T*e`#Dh&F=yN{?aJN+MB-YhAyI}RzWQh+DjTM-(_}D`#M}4csC(nQQi3U& z3!xmNSe>t>!=pCYdc(qZ2GHLm!_IC0BvK}(>-nrDT)jTcrlBqo7C*D8@L)1H+xQ1f z6*)T0rJkXU-vq%U;pErp1kTsc9?{x)MSE2E9Iu_92e|R8>wJ>k+h1C)R8rYfy+9$n^E2G11Q zSD!Egf4>~r5^pBV{a#P`Gj)=t5)tE)Y+(`1+0kZV#<@BELZ0MD>t+tYw;{U_K+_%zdJu|OM zl0HE-VWRcII7PMQ>Wr2@PR~|~e%aTjs>$hL2&KG#8?gBdKllYZDpnX|rT1AGNSQ0R zmA1@XBUWrnb)sjdKd$UMPCy?4mSR;Dvb9;Zuf#l)L)29lc0*a+=@wi0rg3>g$=Sjy}?EMMH^6aaL(0OZUmg~C{qUNM(`wCd|6HL z$zX_U!txg$6CF5>zE|cyT{2R}`&kyh(Gow1^L^*JPu#WekCE?kTCG|^l0%ig#Rh{v zY6@M0Jcg!k*iwzEZ2pXp^u_16@6G7=zB8$G;Qh6S@KmMZ+kwpXiCbVy ze&2LI(^gZa1+Su=W!TfDw>ZaYCTD&UEj zvEI1xF5UVT!RNY*Ik~P``iqQAj7$U)zE3Y9f9?!Lp(i)Qxgh&Clk@iZ^qlW`p+rW8 zkc~Ixz6ALs&7VEczzv^2ZW3YnX(#aMmo%Di|2zSe8aqrcFArw7g$5D~<$f%}JPYt} zpODIehwF#dT#PB<#sUMaW8QQ=oW5-P03eKDcGrfugUwS@{MK9a%?^V9V7U|>`JsmH zr90)L^Sf^1kcf=yltsuzH8DF$S9aW6EwgQ76ktkKH=!4fdlxINb?o;hMjPK8`jVAy zH77&+2E#<|b8y2z&*8CiNXotsV&M09lxXmfG&4^Y1(!gC=FhfU)I)&jKM$ zhC|UOc>w9-;Up%Ji_Pa#HmLI5a%Stq>A@sfYVG`?O)%Rx5VIx5JEV)lB)WUP{pG

*8h=NOoM9S=8KYa6ZH# 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

-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

lYTs*ez8%>znq1EZU4VCTc)Fogt>>_& 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 Date: Wed, 30 Oct 2024 14:06:58 -0400 Subject: [PATCH 05/83] add nom-type vs statistics checks for specific combinations --- json-schema/schema.json | 144 +++++++++++++++++++++++++++------------- tests/test_schema.py | 3 +- 2 files changed, 99 insertions(+), 48 deletions(-) diff --git a/json-schema/schema.json b/json-schema/schema.json index 4fa86e7..1ca916d 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -491,62 +491,67 @@ "type": "array", "items": { "allOf": [ - {"$ref": "#/$defs/ModelInput"}, - {"$ref": "#/$defs/ModelInputNormTypeStatistics"} + { + "$ref": "#/$defs/ModelInput" + }, + { + "$ref": "#/$defs/ModelInputNormTypeStatistics" + } ] } }, "ModelInput": { - "title": "Model Input Object", - "type": "object", - "required": [ - "name", - "bands", - "input" - ], - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "bands": { - "$ref": "#/$defs/ModelBands" - }, - "input": { - "$ref": "#/$defs/InputStructure" - }, - "description": { - "type": "string", - "minLength": 1 - }, - "norm_by_channel": { - "type": "boolean" - }, - "norm_type": { - "$ref": "#/$defs/NormalizeType" - }, - "norm_clip": { - "$ref": "#/$defs/NormalizeClip" - }, - "resize_type": { - "$ref": "#/$defs/ResizeType" - }, - "statistics": { - "$ref": "#/$defs/InputStatistics" - }, - "pre_processing_function": { - "$ref": "#/$defs/ProcessingExpression" - } + "title": "Model Input Object", + "type": "object", + "required": [ + "name", + "bands", + "input" + ], + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "bands": { + "$ref": "#/$defs/ModelBands" + }, + "input": { + "$ref": "#/$defs/InputStructure" + }, + "description": { + "type": "string", + "minLength": 1 + }, + "norm_by_channel": { + "type": "boolean" + }, + "norm_type": { + "$ref": "#/$defs/NormalizeType" + }, + "norm_clip": { + "$ref": "#/$defs/NormalizeClip" + }, + "resize_type": { + "$ref": "#/$defs/ResizeType" + }, + "statistics": { + "$ref": "#/$defs/InputStatistics" + }, + "pre_processing_function": { + "$ref": "#/$defs/ProcessingExpression" } + } }, "ModelInputNormTypeStatistics": { "description": "Validates the corresponding statistics required for the specified normalization type.", - "oneOf": [ - {"type": "object", "properties": {"norm_type": {"type": "null"}}}, + "allOf": [ { "if": { "type": "object", - "required": ["norm_type"], + "required": [ + "norm_type" + ], "properties": { "norm_type": { "const": "min-max" @@ -555,7 +560,46 @@ }, "then": { "type": "object", - "required": ["statistics"], + "required": [ + "statistics" + ], + "properties": { + "statistics": { + "allOf": [ + { + "$ref": "#/$defs/InputStatistics" + }, + { + "type": "array", + "items": { + "required": [ + "minimum", + "maximum" + ] + } + } + ] + } + } + } + }, + { + "if": { + "type": "object", + "required": [ + "norm_type" + ], + "properties": { + "norm_type": { + "const": "z-score" + } + } + }, + "then": { + "type": "object", + "required": [ + "statistics" + ], "properties": { "statistics": { "allOf": [ @@ -563,7 +607,13 @@ "$ref": "#/$defs/InputStatistics" }, { - "items": {"required": ["minimum", "maximum"]} + "type": "array", + "items": { + "required": [ + "mean", + "stddev" + ] + } } ] } diff --git a/tests/test_schema.py b/tests/test_schema.py index 6c3ddc0..9c356f3 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -93,7 +93,8 @@ def test_mlm_no_input_allowed_but_explicit_empty_array_required( @pytest.mark.parametrize( ["test_norm_type", "test_statistics"], [ - ("min-max", [{"mean": 1, "stddev": 2}]) + ("min-max", [{"mean": 1, "stddev": 2}]), + ("z-score", [{"minimum": 1, "maximum": 2}]), ], ) def test_mlm_invalid_input_norm_type_statistics_combination( From d2cfbeb1d24051b998af2135b6b647f0eaae792c Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 30 Oct 2024 14:47:31 -0400 Subject: [PATCH 06/83] test more norm_type/statistics combinations --- CHANGELOG.md | 4 +++- tests/test_schema.py | 25 +++++++++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 116e1d3..4651778 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/stac-extensions/mlm/tree/main) ### Added -- n/a +- Add explicit check of `statitics` sub-fields `minimum`, `maximum`, `mean` and `stddev` for corresponding `norm_type` + values `min-max` and `z-score` that depend on it. Other `norm_type` values are ignored. Additional `statistics` + properties not directly required by the specific `norm_type` are also ignored. ### Changed - n/a diff --git a/tests/test_schema.py b/tests/test_schema.py index 9c356f3..b76e83c 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -91,27 +91,36 @@ def test_mlm_no_input_allowed_but_explicit_empty_array_required( indirect=True, ) @pytest.mark.parametrize( - ["test_norm_type", "test_statistics"], + ["test_norm_type", "test_statistics", "is_valid"], [ - ("min-max", [{"mean": 1, "stddev": 2}]), - ("z-score", [{"minimum": 1, "maximum": 2}]), + ("min-max", [{"mean": 1, "stddev": 2}], False), + ("z-score", [{"minimum": 1, "maximum": 2}], False), + ("min-max", [{"mean": 1, "stddev": 2}, {"minimum": 1, "maximum": 2}], False), + ("z-score", [{"mean": 1, "stddev": 2}, {"minimum": 1, "maximum": 2}], False), + ("min-max", [{"minimum": 1, "maximum": 2}], True), + ("z-score", [{"mean": 1, "stddev": 2, "minimum": 1, "maximum": 2}], True), # extra statistics must be ignored + ("l2", [{"mean": 1, "stddev": 2}], True), # statistics "don't" care for this norm-type ], ) -def test_mlm_invalid_input_norm_type_statistics_combination( +def test_mlm_input_norm_type_statistics_combination( mlm_validator: STACValidator, mlm_example: Dict[str, JSON], test_norm_type: str, test_statistics: List[Dict[str, Any]], + is_valid: bool, ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid - with pytest.raises(pystac.errors.STACValidationError): - mlm_data["properties"]["mlm:input"][0]["norm_type"] = test_norm_type - mlm_data["properties"]["mlm:input"][0]["statistics"] = test_statistics - mlm_item = pystac.Item.from_dict(mlm_data) + mlm_data["properties"]["mlm:input"][0]["norm_type"] = test_norm_type + mlm_data["properties"]["mlm:input"][0]["statistics"] = test_statistics + mlm_item = pystac.Item.from_dict(mlm_data) + if is_valid: pystac.validation.validate(mlm_item, validator=mlm_validator) + else: + with pytest.raises(pystac.errors.STACValidationError): + pystac.validation.validate(mlm_item, validator=mlm_validator) @pytest.mark.parametrize( From 15b293cf90076f782242b33d5f1ce6cd94e96957 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Wed, 30 Oct 2024 14:35:14 -0700 Subject: [PATCH 07/83] wip adding tensorflow artifact types, remove torch.compile --- README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ad10344..423139f 100644 --- a/README.md +++ b/README.md @@ -657,10 +657,12 @@ the users understand the source explicitly, although this is not strictly requir | Artifact Type | Description | |--------------------|--------------------------------------------------------------------------------------| -| `torch.save` | A model artifact obtained by [Serialized Pickle Object][pytorch-save] (i.e.: `.pt`). | -| `torch.jit.script` | A model artifact obtained by [`TorchScript`][pytorch-jit-script]. | -| `torch.export` | A model artifact obtained by [`torch.export`][pytorch-export] (i.e.: `.pt2`). | -| `torch.compile` | A model artifact obtained by [`torch.compile`][pytorch-compile]. | +| `torch.save` | A [serialized python pickle object][pytorch-save] (i.e.: `.pt`) which can represent a model or state_dict. | +| `torch.jit.save` | A [`TorchScript`][pytorch-jit-script] model artifact obtained with one or more of the graph export options Torchscript Tracing and Torchscript Scripting. | +| `torch.export.save` | A model artifact storing an ExportedProgram obtained by [`torch.export.export`][pytorch-export] (i.e.: `.pt2`). | +| `TFSavedModel` | A [SavedModel][tf-save] from Tensorflow or Keras. | +| `Keras_v3` | Keras v3 is the [recommended format][keras-recommended] by the Tensorflow team. See this example to [save and load models][keras-example] and the update to date docs [disambiguating different save methods][keras-methods] in TF and Keras.. | +| `h5` | [Keras and tf.keras model][h5] weights format, which uses HDF5. | [pytorch-compile]: https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html [pytorch-export]: https://pytorch.org/docs/main/export.html @@ -668,6 +670,11 @@ the users understand the source explicitly, although this is not strictly requir [pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html [pytorch-jit-script]: https://pytorch.org/docs/stable/jit.html [pytorch-save]: https://pytorch.org/tutorials/beginner/saving_loading_models.html +[tf-save]: https://www.tensorflow.org/guide/saved_model +[keras-example]: https://keras.io/guides/serialization_and_saving/ +[keras-recommended]: https://www.tensorflow.org/guide/saved_model#creating_a_savedmodel_from_keras +[h5]: https://keras.io/api/models/model_saving_apis/weights_saving_and_loading/ +[keras-methods]: https://keras.io/2.16/api/models/model_saving_apis/model_saving_and_loading/ ### Source Code Asset From 7635f0363ea20673ff877801e7f513fbe868d627 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 31 Oct 2024 13:53:05 -0400 Subject: [PATCH 08/83] convert poetry toml to uv toml using pdm build backend --- pyproject.toml | 151 +++--- uv.lock | 1347 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1416 insertions(+), 82 deletions(-) create mode 100644 uv.lock diff --git a/pyproject.toml b/pyproject.toml index f76d9fe..546754d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,93 +1,84 @@ - -# Poetry pyproject.toml: https://python-poetry.org/docs/pyproject/ [build-system] -requires = ["poetry_core>=1.0.0"] -build-backend = "poetry.core.masonry.api" +requires = ["pdm-backend"] +build-backend = "pdm.backend" +[tool.pdm.build] +includes = [ + "stac_model", +] -[tool.poetry] +[project] +authors = [ + {name = "Ryan Avery", email = "ryan@wherobots.com"}, + {name = "Francis Charette-Migneault", email = "francis.charette-migneault@crim.ca"}, +] +license = {text = "Apache Software License 2.0"} +requires-python = "<4.0,>=3.10" +dependencies = [ + "typer[all]<1.0.0,>=0.9.0", + "rich<14.0.0,>=13.7.0", + "pydantic<3.0.0,>=2.6.3", + "pydantic-core<3,>=2", + "pystac<2.0.0,>=1.9.0", + "shapely<3,>=2", + "jsonschema<5.0.0,>=4.21.1", +] name = "stac-model" version = "0.2.0" description = "A PydanticV2 validation and serialization libary for the STAC ML Model Extension" readme = "README_STAC_MODEL.md" -authors = [ - "Ryan Avery ", - "Francis Charette-Migneault " -] -license = "Apache Software License 2.0" -repository = "https://github.com/crim-ca/mlm-extension" -homepage = "https://github.com/stac-extensions/mlm/blob/main/README_STAC_MODEL.md" -packages = [ - {include = "stac_model"} -] - - -# Keywords description https://python-poetry.org/docs/pyproject/#keywords -keywords = [] # UPDATEME with relevant keywords - - -# Pypi classifiers: https://pypi.org/classifiers/ +keywords = [] classifiers = [ - "Development Status :: 4 - Beta", - "Operating System :: OS Independent", - "Topic :: Software Development :: Libraries :: Python Modules", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3 :: Only", - "Framework :: Pydantic", - "Framework :: Pydantic :: 2", - "Intended Audience :: Developers", - "Intended Audience :: Information Technology", - "Intended Audience :: Science/Research", - "Topic :: File Formats :: JSON :: JSON Schema", - "Topic :: Scientific/Engineering :: Artificial Intelligence", - "Topic :: Scientific/Engineering :: GIS", - "Topic :: Scientific/Engineering :: Image Processing", - "Topic :: Scientific/Engineering :: Image Recognition", + "Development Status :: 4 - Beta", + "Operating System :: OS Independent", + "Topic :: Software Development :: Libraries :: Python Modules", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3 :: Only", + "Framework :: Pydantic", + "Framework :: Pydantic :: 2", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: Science/Research", + "Topic :: File Formats :: JSON :: JSON Schema", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Scientific/Engineering :: GIS", + "Topic :: Scientific/Engineering :: Image Processing", + "Topic :: Scientific/Engineering :: Image Recognition", ] +[tool.uv] +dev-dependencies = [ + "mypy<2.0.0,>=1.0.0", + "mypy-extensions<1.0.0,>=0.4.3", + "pre-commit<3.0.0,>=2.21.0", + "bandit<2.0.0,>=1.7.5", + "safety<3.0.0,>=2.3.4", + "pystac<2.0.0,>=1.10.0", + "pydocstyle[toml]<7.0.0,>=6.2.0", + "pydoclint<0.6,>=0.3", + "pytest<8.0.0,>=7.2.1", + "pytest-cov<5.0.0,>=4.1.0", + "pytest-mock<4.0.0,>=3.10.0", + "pytest-timeout<3.0.0,>=2.2.0", + "pytest-benchmark<5.0.0,>=4.0.0", + "pytest-sugar<1.0.0,>=0.9.7", + "pytest-click<2.0.0,>=1.1.0", + "pytest-pikachu<2.0.0,>=1.0.0", + "coverage<8.0.0,>=7.3.0", + "ruff<1.0.0,>=0.2.2", + "bump-my-version<0.27,>=0.21", +] -[tool.poetry.scripts] -# Entry points for the package https://python-poetry.org/docs/pyproject/#scripts -"stac-model" = "stac_model.__main__:app" - - -[tool.poetry.dependencies] -python = "^3.10" - -typer = {extras = ["all"], version = "^0.9.0"} -rich = "^13.7.0" -pydantic = "^2.6.3" # bug in post 2.3 https://github.com/pydantic/pydantic/issues/7720 -pydantic-core = "^2" -pystac = "^1.9.0" -shapely = "^2" -jsonschema = "^4.21.1" - -[tool.poetry.group.dev.dependencies] -mypy = "^1.0.0" -mypy-extensions = "^0.4.3" -pre-commit = "^2.21.0" -bandit = "^1.7.5" -safety = "^2.3.4" -pystac = "^1.10.0" # custom validator required (https://github.com/stac-utils/pystac/pull/1320) - -pydocstyle = {extras = ["toml"], version = "^6.2.0"} -pydoclint = ">=0.3,<0.6" +[project.urls] +homepage = "https://github.com/stac-extensions/mlm/blob/main/README_STAC_MODEL.md" +repository = "https://github.com/crim-ca/mlm-extension" -pytest = "^7.2.1" -pytest-cov = "^4.1.0" -pytest-mock = "^3.10.0" -pytest-timeout = "^2.2.0" -pytest-benchmark = "^4.0.0" -pytest-sugar = "^0.9.7" -pytest-click = "^1.1.0" -pytest-pikachu = "^1.0.0" -coverage = "^7.3.0" -ruff = "^0.2.2" -bump-my-version = ">=0.21,<0.27" +[project.scripts] +stac-model = "stac_model.__main__:app" [tool.bumpversion] # NOTE: @@ -262,7 +253,6 @@ plugins = [ "pydantic.mypy" ] - [tool.pydantic-mypy] init_forbid_extra = true init_typed = true @@ -314,12 +304,10 @@ addopts = [ "--pikachu" ] - [tool.coverage.run] source = ["tests"] branch = true - [tool.coverage.report] exclude_also = [ "def main", @@ -328,6 +316,5 @@ exclude_also = [ fail_under = 50 show_missing = true - [tool.coverage.paths] source = ["stac_model"] diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..8c04040 --- /dev/null +++ b/uv.lock @@ -0,0 +1,1347 @@ +version = 1 +requires-python = ">=3.10, <4.0" +resolution-markers = [ + "python_full_version < '3.13'", + "python_full_version >= '3.13'", +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "attrs" +version = "24.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/0f/aafca9af9315aee06a89ffde799a10a582fe8de76c563ee80bbcdc08b3fb/attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346", size = 792678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2", size = 63001 }, +] + +[[package]] +name = "bandit" +version = "1.7.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "platform_system == 'Windows'" }, + { name = "pyyaml" }, + { name = "rich" }, + { name = "stevedore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/26/bdd962d6ee781f6229c3fb83483cf9e09d87959150a9000789806d750f3c/bandit-1.7.10.tar.gz", hash = "sha256:59ed5caf5d92b6ada4bf65bc6437feea4a9da1093384445fed4d472acc6cff7b", size = 4228540 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/9c/491231d973d54f6465002812b4cadc663f208436407745be473254725f55/bandit-1.7.10-py3-none-any.whl", hash = "sha256:665721d7bebbb4485a339c55161ac0eedde27d51e638000d91c8c2d68343ad02", size = 130756 }, +] + +[[package]] +name = "bracex" +version = "2.5.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/6c/57418c4404cd22fe6275b8301ca2b46a8cdaa8157938017a9ae0b3edf363/bracex-2.5.post1.tar.gz", hash = "sha256:12c50952415bfa773d2d9ccb8e79651b8cdb1f31a42f6091b804f6ba2b4a66b6", size = 26641 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/02/8db98cdc1a58e0abd6716d5e63244658e6e63513c65f469f34b6f1053fd0/bracex-2.5.post1-py3-none-any.whl", hash = "sha256:13e5732fec27828d6af308628285ad358047cec36801598368cb28bc631dbaf6", size = 11558 }, +] + +[[package]] +name = "bump-my-version" +version = "0.26.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "questionary" }, + { name = "rich" }, + { name = "rich-click" }, + { name = "tomlkit" }, + { name = "wcmatch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/e8/79b34e1be514aea34182a766ab9ae1fdb493ce0e36609517c3dd10adf3f7/bump_my_version-0.26.1.tar.gz", hash = "sha256:af1cada726cf6f9a723d18941c68c325d5196453a180b3a42f8e0b38567d734d", size = 111540 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/91/5febfa761935bfd3028d12cdc8765e51caf42926435b1f68881b53a7d0e5/bump_my_version-0.26.1-py3-none-any.whl", hash = "sha256:be09c48111eeba56f8c870b69718013f52b5b6c6e65bc3bda5bc928181901c48", size = 52299 }, +] + +[[package]] +name = "certifi" +version = "2024.8.30" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", size = 168507 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321 }, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/8b/825cc84cf13a28bfbcba7c416ec22bf85a9584971be15b21dd8300c65b7f/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", size = 196363 }, + { url = "https://files.pythonhosted.org/packages/23/81/d7eef6a99e42c77f444fdd7bc894b0ceca6c3a95c51239e74a722039521c/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", size = 125639 }, + { url = "https://files.pythonhosted.org/packages/21/67/b4564d81f48042f520c948abac7079356e94b30cb8ffb22e747532cf469d/charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", size = 120451 }, + { url = "https://files.pythonhosted.org/packages/c2/72/12a7f0943dd71fb5b4e7b55c41327ac0a1663046a868ee4d0d8e9c369b85/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", size = 140041 }, + { url = "https://files.pythonhosted.org/packages/67/56/fa28c2c3e31217c4c52158537a2cf5d98a6c1e89d31faf476c89391cd16b/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", size = 150333 }, + { url = "https://files.pythonhosted.org/packages/f9/d2/466a9be1f32d89eb1554cf84073a5ed9262047acee1ab39cbaefc19635d2/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", size = 142921 }, + { url = "https://files.pythonhosted.org/packages/f8/01/344ec40cf5d85c1da3c1f57566c59e0c9b56bcc5566c08804a95a6cc8257/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", size = 144785 }, + { url = "https://files.pythonhosted.org/packages/73/8b/2102692cb6d7e9f03b9a33a710e0164cadfce312872e3efc7cfe22ed26b4/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", size = 146631 }, + { url = "https://files.pythonhosted.org/packages/d8/96/cc2c1b5d994119ce9f088a9a0c3ebd489d360a2eb058e2c8049f27092847/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", size = 140867 }, + { url = "https://files.pythonhosted.org/packages/c9/27/cde291783715b8ec30a61c810d0120411844bc4c23b50189b81188b273db/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", size = 149273 }, + { url = "https://files.pythonhosted.org/packages/3a/a4/8633b0fc1a2d1834d5393dafecce4a1cc56727bfd82b4dc18fc92f0d3cc3/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", size = 152437 }, + { url = "https://files.pythonhosted.org/packages/64/ea/69af161062166b5975ccbb0961fd2384853190c70786f288684490913bf5/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", size = 150087 }, + { url = "https://files.pythonhosted.org/packages/3b/fd/e60a9d9fd967f4ad5a92810138192f825d77b4fa2a557990fd575a47695b/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", size = 145142 }, + { url = "https://files.pythonhosted.org/packages/6d/02/8cb0988a1e49ac9ce2eed1e07b77ff118f2923e9ebd0ede41ba85f2dcb04/charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", size = 94701 }, + { url = "https://files.pythonhosted.org/packages/d6/20/f1d4670a8a723c46be695dff449d86d6092916f9e99c53051954ee33a1bc/charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", size = 102191 }, + { url = "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", size = 193339 }, + { url = "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", size = 124366 }, + { url = "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", size = 118874 }, + { url = "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", size = 138243 }, + { url = "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", size = 148676 }, + { url = "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", size = 141289 }, + { url = "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", size = 142585 }, + { url = "https://files.pythonhosted.org/packages/3b/a0/a68980ab8a1f45a36d9745d35049c1af57d27255eff8c907e3add84cf68f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", size = 144408 }, + { url = "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", size = 139076 }, + { url = "https://files.pythonhosted.org/packages/fb/9d/9c13753a5a6e0db4a0a6edb1cef7aee39859177b64e1a1e748a6e3ba62c2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", size = 146874 }, + { url = "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", size = 150871 }, + { url = "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", size = 148546 }, + { url = "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", size = 143048 }, + { url = "https://files.pythonhosted.org/packages/01/f8/38842422988b795220eb8038745d27a675ce066e2ada79516c118f291f07/charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", size = 94389 }, + { url = "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", size = 101752 }, + { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 }, + { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 }, + { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 }, + { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 }, + { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 }, + { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 }, + { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 }, + { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 }, + { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 }, + { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 }, + { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 }, + { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 }, + { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 }, + { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 }, + { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 }, + { url = "https://files.pythonhosted.org/packages/f3/89/68a4c86f1a0002810a27f12e9a7b22feb198c59b2f05231349fbce5c06f4/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", size = 194617 }, + { url = "https://files.pythonhosted.org/packages/4f/cd/8947fe425e2ab0aa57aceb7807af13a0e4162cd21eee42ef5b053447edf5/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", size = 125310 }, + { url = "https://files.pythonhosted.org/packages/5b/f0/b5263e8668a4ee9becc2b451ed909e9c27058337fda5b8c49588183c267a/charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", size = 119126 }, + { url = "https://files.pythonhosted.org/packages/ff/6e/e445afe4f7fda27a533f3234b627b3e515a1b9429bc981c9a5e2aa5d97b6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", size = 139342 }, + { url = "https://files.pythonhosted.org/packages/a1/b2/4af9993b532d93270538ad4926c8e37dc29f2111c36f9c629840c57cd9b3/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", size = 149383 }, + { url = "https://files.pythonhosted.org/packages/fb/6f/4e78c3b97686b871db9be6f31d64e9264e889f8c9d7ab33c771f847f79b7/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", size = 142214 }, + { url = "https://files.pythonhosted.org/packages/2b/c9/1c8fe3ce05d30c87eff498592c89015b19fade13df42850aafae09e94f35/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", size = 144104 }, + { url = "https://files.pythonhosted.org/packages/ee/68/efad5dcb306bf37db7db338338e7bb8ebd8cf38ee5bbd5ceaaaa46f257e6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", size = 146255 }, + { url = "https://files.pythonhosted.org/packages/0c/75/1ed813c3ffd200b1f3e71121c95da3f79e6d2a96120163443b3ad1057505/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", size = 140251 }, + { url = "https://files.pythonhosted.org/packages/7d/0d/6f32255c1979653b448d3c709583557a4d24ff97ac4f3a5be156b2e6a210/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", size = 148474 }, + { url = "https://files.pythonhosted.org/packages/ac/a0/c1b5298de4670d997101fef95b97ac440e8c8d8b4efa5a4d1ef44af82f0d/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", size = 151849 }, + { url = "https://files.pythonhosted.org/packages/04/4f/b3961ba0c664989ba63e30595a3ed0875d6790ff26671e2aae2fdc28a399/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", size = 149781 }, + { url = "https://files.pythonhosted.org/packages/d8/90/6af4cd042066a4adad58ae25648a12c09c879efa4849c705719ba1b23d8c/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482", size = 144970 }, + { url = "https://files.pythonhosted.org/packages/cc/67/e5e7e0cbfefc4ca79025238b43cdf8a2037854195b37d6417f3d0895c4c2/charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", size = 94973 }, + { url = "https://files.pythonhosted.org/packages/65/97/fc9bbc54ee13d33dc54a7fcf17b26368b18505500fc01e228c27b5222d80/charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", size = 102308 }, + { url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 }, +] + +[[package]] +name = "click" +version = "8.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "platform_system == 'Windows'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "coverage" +version = "7.6.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/12/3669b6382792783e92046730ad3327f53b2726f0603f4c311c4da4824222/coverage-7.6.4.tar.gz", hash = "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73", size = 798716 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/93/4ad92f71e28ece5c0326e5f4a6630aa4928a8846654a65cfff69b49b95b9/coverage-7.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07", size = 206713 }, + { url = "https://files.pythonhosted.org/packages/01/ae/747a580b1eda3f2e431d87de48f0604bd7bc92e52a1a95185a4aa585bc47/coverage-7.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0", size = 207149 }, + { url = "https://files.pythonhosted.org/packages/07/1a/1f573f8a6145f6d4c9130bbc120e0024daf1b24cf2a78d7393fa6eb6aba7/coverage-7.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72", size = 235584 }, + { url = "https://files.pythonhosted.org/packages/40/42/c8523f2e4db34aa9389caee0d3688b6ada7a84fcc782e943a868a7f302bd/coverage-7.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51", size = 233486 }, + { url = "https://files.pythonhosted.org/packages/8d/95/565c310fffa16ede1a042e9ea1ca3962af0d8eb5543bc72df6b91dc0c3d5/coverage-7.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491", size = 234649 }, + { url = "https://files.pythonhosted.org/packages/d5/81/3b550674d98968ec29c92e3e8650682be6c8b1fa7581a059e7e12e74c431/coverage-7.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b", size = 233744 }, + { url = "https://files.pythonhosted.org/packages/0d/70/d66c7f51b3e33aabc5ea9f9624c1c9d9655472962270eb5e7b0d32707224/coverage-7.6.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea", size = 232204 }, + { url = "https://files.pythonhosted.org/packages/23/2d/2b3a2dbed7a5f40693404c8a09e779d7c1a5fbed089d3e7224c002129ec8/coverage-7.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a", size = 233335 }, + { url = "https://files.pythonhosted.org/packages/5a/4f/92d1d2ad720d698a4e71c176eacf531bfb8e0721d5ad560556f2c484a513/coverage-7.6.4-cp310-cp310-win32.whl", hash = "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa", size = 209435 }, + { url = "https://files.pythonhosted.org/packages/c7/b9/cdf158e7991e2287bcf9082670928badb73d310047facac203ff8dcd5ff3/coverage-7.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172", size = 210243 }, + { url = "https://files.pythonhosted.org/packages/87/31/9c0cf84f0dfcbe4215b7eb95c31777cdc0483c13390e69584c8150c85175/coverage-7.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b", size = 206819 }, + { url = "https://files.pythonhosted.org/packages/53/ed/a38401079ad320ad6e054a01ec2b61d270511aeb3c201c80e99c841229d5/coverage-7.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25", size = 207263 }, + { url = "https://files.pythonhosted.org/packages/20/e7/c3ad33b179ab4213f0d70da25a9c214d52464efa11caeab438592eb1d837/coverage-7.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546", size = 239205 }, + { url = "https://files.pythonhosted.org/packages/36/91/fc02e8d8e694f557752120487fd982f654ba1421bbaa5560debf96ddceda/coverage-7.6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b", size = 236612 }, + { url = "https://files.pythonhosted.org/packages/cc/57/cb08f0eda0389a9a8aaa4fc1f9fec7ac361c3e2d68efd5890d7042c18aa3/coverage-7.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e", size = 238479 }, + { url = "https://files.pythonhosted.org/packages/d5/c9/2c7681a9b3ca6e6f43d489c2e6653a53278ed857fd6e7010490c307b0a47/coverage-7.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718", size = 237405 }, + { url = "https://files.pythonhosted.org/packages/b5/4e/ebfc6944b96317df8b537ae875d2e57c27b84eb98820bc0a1055f358f056/coverage-7.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db", size = 236038 }, + { url = "https://files.pythonhosted.org/packages/13/f2/3a0bf1841a97c0654905e2ef531170f02c89fad2555879db8fe41a097871/coverage-7.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522", size = 236812 }, + { url = "https://files.pythonhosted.org/packages/b9/9c/66bf59226b52ce6ed9541b02d33e80a6e816a832558fbdc1111a7bd3abd4/coverage-7.6.4-cp311-cp311-win32.whl", hash = "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf", size = 209400 }, + { url = "https://files.pythonhosted.org/packages/2a/a0/b0790934c04dfc8d658d4a62acb8f7ca0efdf3818456fcad757b11c6479d/coverage-7.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19", size = 210243 }, + { url = "https://files.pythonhosted.org/packages/7d/e7/9291de916d084f41adddfd4b82246e68d61d6a75747f075f7e64628998d2/coverage-7.6.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2", size = 207013 }, + { url = "https://files.pythonhosted.org/packages/27/03/932c2c5717a7fa80cd43c6a07d3177076d97b79f12f40f882f9916db0063/coverage-7.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117", size = 207251 }, + { url = "https://files.pythonhosted.org/packages/d5/3f/0af47dcb9327f65a45455fbca846fe96eb57c153af46c4754a3ba678938a/coverage-7.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613", size = 240268 }, + { url = "https://files.pythonhosted.org/packages/8a/3c/37a9d81bbd4b23bc7d46ca820e16174c613579c66342faa390a271d2e18b/coverage-7.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27", size = 237298 }, + { url = "https://files.pythonhosted.org/packages/c0/70/6b0627e5bd68204ee580126ed3513140b2298995c1233bd67404b4e44d0e/coverage-7.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52", size = 239367 }, + { url = "https://files.pythonhosted.org/packages/3c/eb/634d7dfab24ac3b790bebaf9da0f4a5352cbc125ce6a9d5c6cf4c6cae3c7/coverage-7.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2", size = 238853 }, + { url = "https://files.pythonhosted.org/packages/d9/0d/8e3ed00f1266ef7472a4e33458f42e39492e01a64281084fb3043553d3f1/coverage-7.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1", size = 237160 }, + { url = "https://files.pythonhosted.org/packages/ce/9c/4337f468ef0ab7a2e0887a9c9da0e58e2eada6fc6cbee637a4acd5dfd8a9/coverage-7.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5", size = 238824 }, + { url = "https://files.pythonhosted.org/packages/5e/09/3e94912b8dd37251377bb02727a33a67ee96b84bbbe092f132b401ca5dd9/coverage-7.6.4-cp312-cp312-win32.whl", hash = "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17", size = 209639 }, + { url = "https://files.pythonhosted.org/packages/01/69/d4f3a4101171f32bc5b3caec8ff94c2c60f700107a6aaef7244b2c166793/coverage-7.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08", size = 210428 }, + { url = "https://files.pythonhosted.org/packages/c2/4d/2dede4f7cb5a70fb0bb40a57627fddf1dbdc6b9c1db81f7c4dcdcb19e2f4/coverage-7.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9", size = 207039 }, + { url = "https://files.pythonhosted.org/packages/3f/f9/d86368ae8c79e28f1fb458ebc76ae9ff3e8bd8069adc24e8f2fed03c58b7/coverage-7.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba", size = 207298 }, + { url = "https://files.pythonhosted.org/packages/64/c5/b4cc3c3f64622c58fbfd4d8b9a7a8ce9d355f172f91fcabbba1f026852f6/coverage-7.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c", size = 239813 }, + { url = "https://files.pythonhosted.org/packages/8a/86/14c42e60b70a79b26099e4d289ccdfefbc68624d096f4481163085aa614c/coverage-7.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06", size = 236959 }, + { url = "https://files.pythonhosted.org/packages/7f/f8/4436a643631a2fbab4b44d54f515028f6099bfb1cd95b13cfbf701e7f2f2/coverage-7.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f", size = 238950 }, + { url = "https://files.pythonhosted.org/packages/49/50/1571810ddd01f99a0a8be464a4ac8b147f322cd1e8e296a1528984fc560b/coverage-7.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b", size = 238610 }, + { url = "https://files.pythonhosted.org/packages/f3/8c/6312d241fe7cbd1f0cade34a62fea6f333d1a261255d76b9a87074d8703c/coverage-7.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21", size = 236697 }, + { url = "https://files.pythonhosted.org/packages/ce/5f/fef33dfd05d87ee9030f614c857deb6df6556b8f6a1c51bbbb41e24ee5ac/coverage-7.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a", size = 238541 }, + { url = "https://files.pythonhosted.org/packages/a9/64/6a984b6e92e1ea1353b7ffa08e27f707a5e29b044622445859200f541e8c/coverage-7.6.4-cp313-cp313-win32.whl", hash = "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e", size = 209707 }, + { url = "https://files.pythonhosted.org/packages/5c/60/ce5a9e942e9543783b3db5d942e0578b391c25cdd5e7f342d854ea83d6b7/coverage-7.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963", size = 210439 }, + { url = "https://files.pythonhosted.org/packages/78/53/6719677e92c308207e7f10561a1b16ab8b5c00e9328efc9af7cfd6fb703e/coverage-7.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f", size = 207784 }, + { url = "https://files.pythonhosted.org/packages/fa/dd/7054928930671fcb39ae6a83bb71d9ab5f0afb733172543ced4b09a115ca/coverage-7.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806", size = 208058 }, + { url = "https://files.pythonhosted.org/packages/b5/7d/fd656ddc2b38301927b9eb3aae3fe827e7aa82e691923ed43721fd9423c9/coverage-7.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11", size = 250772 }, + { url = "https://files.pythonhosted.org/packages/90/d0/eb9a3cc2100b83064bb086f18aedde3afffd7de6ead28f69736c00b7f302/coverage-7.6.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3", size = 246490 }, + { url = "https://files.pythonhosted.org/packages/45/44/3f64f38f6faab8a0cfd2c6bc6eb4c6daead246b97cf5f8fc23bf3788f841/coverage-7.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a", size = 248848 }, + { url = "https://files.pythonhosted.org/packages/5d/11/4c465a5f98656821e499f4b4619929bd5a34639c466021740ecdca42aa30/coverage-7.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc", size = 248340 }, + { url = "https://files.pythonhosted.org/packages/f1/96/ebecda2d016cce9da812f404f720ca5df83c6b29f65dc80d2000d0078741/coverage-7.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70", size = 246229 }, + { url = "https://files.pythonhosted.org/packages/16/d9/3d820c00066ae55d69e6d0eae11d6149a5ca7546de469ba9d597f01bf2d7/coverage-7.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef", size = 247510 }, + { url = "https://files.pythonhosted.org/packages/8f/c3/4fa1eb412bb288ff6bfcc163c11700ff06e02c5fad8513817186e460ed43/coverage-7.6.4-cp313-cp313t-win32.whl", hash = "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e", size = 210353 }, + { url = "https://files.pythonhosted.org/packages/7e/77/03fc2979d1538884d921c2013075917fc927f41cd8526909852fe4494112/coverage-7.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1", size = 211502 }, + { url = "https://files.pythonhosted.org/packages/cc/56/e1d75e8981a2a92c2a777e67c26efa96c66da59d645423146eb9ff3a851b/coverage-7.6.4-pp39.pp310-none-any.whl", hash = "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e", size = 198954 }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version <= '3.11'" }, +] + +[[package]] +name = "distlib" +version = "0.3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 }, +] + +[[package]] +name = "docstring-parser-fork" +version = "0.0.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/17/0e/8468b881277ff077e63c57ab5747ca0770bea76e1ca636a9ed45caec2fa7/docstring_parser_fork-0.0.9.tar.gz", hash = "sha256:95b23cc5092af85080c716a6da68360f5ae4fcffa75f4a3aca5e539783cbcc3d", size = 29975 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/a9/afc6140d68e260cdcc1214abbe924556cbd1ceaaa5aa7cd3b62eb739e02d/docstring_parser_fork-0.0.9-py3-none-any.whl", hash = "sha256:0be85ad00cb25bf5beeb673e46e777facf0f47552fa3a7570d120ef7e3374401", size = 40302 }, +] + +[[package]] +name = "dparse" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/35/e224f4e70799bbb8e9f6c69a8dbe966d640bf43dea11fc5ef77df120f8ed/dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528", size = 20316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/d0/4ed375a914d3cdbddb19fb7a72431e511c4cb102c54137d8fc2e563f3567/dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318", size = 12962 }, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, +] + +[[package]] +name = "filelock" +version = "3.16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/db/3ef5bb276dae18d6ec2124224403d1d67bccdbefc17af4cc8f553e341ab1/filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435", size = 18037 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0", size = 16163 }, +] + +[[package]] +name = "identify" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/29/bb/25024dbcc93516c492b75919e76f389bac754a3e4248682fba32b250c880/identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98", size = 99097 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/0c/4ef72754c050979fdcc06c744715ae70ea37e734816bb6514f79df77a42f/identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0", size = 98972 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462 }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "mypy" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/56/afddb0a1654cf7f192419fbd9e46e01bceb11b1a6778a9d4257387f71dd8/mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d", size = 2755325 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/57/a81b17ef5cdc120f58d85ae36c01c8e2ad8e0aa5e7bf8d9f05f328f88fe7/mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a", size = 11345500 }, + { url = "https://files.pythonhosted.org/packages/b1/06/e851fb58910b71cca74eec7fe41d6812a17893eaefd9c35ddcaadbccd177/mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf", size = 10439382 }, + { url = "https://files.pythonhosted.org/packages/88/aa/94e45af5f45418eb4038d0264ac085c7426ea80b329f93df5e5b7485a0b5/mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0", size = 18582818 }, + { url = "https://files.pythonhosted.org/packages/ea/5b/39221b3e2eb104529867617a993a842e39aa240b43bc39f3a48302915f5f/mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b", size = 20053312 }, + { url = "https://files.pythonhosted.org/packages/3b/33/ec5f800a4424e6591b3c32b04211e6bb2a5be6741231dc8751e3d30b9d82/mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4", size = 8829819 }, + { url = "https://files.pythonhosted.org/packages/a8/1c/b53620475d58a366d793c6b82e8d615ab38cd256937759949c905891da18/mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262", size = 11231078 }, + { url = "https://files.pythonhosted.org/packages/27/2b/ebc13ecd6389ed1401f86f46bbb45737d68a08b28b2858ae66e865e2f784/mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8", size = 10342236 }, + { url = "https://files.pythonhosted.org/packages/4f/01/fbf84b7785916a75c80ccffd70b708600376b606af3bab4993f7da2208af/mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8", size = 18434223 }, + { url = "https://files.pythonhosted.org/packages/9c/c5/0c287ccb5a70b4fb37f3d3025dd6a0d12616bb041c76068c813c33933c00/mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65", size = 19834372 }, + { url = "https://files.pythonhosted.org/packages/b1/c9/610cb9d81221b54596ad2d16fa873ea425227043b5b22ab09a0b27486af2/mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994", size = 8825671 }, + { url = "https://files.pythonhosted.org/packages/d1/95/fa68816abbbc48f0ef213490cc4445e30365831576fb9427fd99fa771e6e/mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4", size = 2355780 }, +] + +[[package]] +name = "mypy-extensions" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/c6/7809c27b5c5dacb9f6537e9489d969b266f7091204c75a03048edcb4daf9/mypy_extensions-0.4.4.tar.gz", hash = "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd", size = 4246 } + +[[package]] +name = "nodeenv" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, +] + +[[package]] +name = "numpy" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/d1/8a730ea07f4a37d94f9172f4ce1d81064b7a64766b460378be278952de75/numpy-2.1.2.tar.gz", hash = "sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c", size = 18878063 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/a2/40a76d357f168e9f9f06d6cc2c8e22dd5fb2bfbe63fe2c433057258c145a/numpy-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee", size = 21150947 }, + { url = "https://files.pythonhosted.org/packages/b5/d0/ba271ea9108d7278d3889a7eb38d77370a88713fb94339964e71ac184d4a/numpy-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884", size = 13758184 }, + { url = "https://files.pythonhosted.org/packages/7c/b9/5c6507439cd756201010f7937bf90712c2469052ae094584af14557dd64f/numpy-2.1.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648", size = 5354091 }, + { url = "https://files.pythonhosted.org/packages/60/21/7938cf724d9e84e45fb886f3fc794ab431d71facfebc261e3e9f19f3233a/numpy-2.1.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d", size = 6887169 }, + { url = "https://files.pythonhosted.org/packages/09/8d/42a124657f5d31902fca73921b25a0d022cead2b32ce7e6975762cd2995a/numpy-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86", size = 13888165 }, + { url = "https://files.pythonhosted.org/packages/fb/25/ba023652a39a2c127200e85aed975fc6119b421e2c348e5d0171e2046edb/numpy-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7", size = 16326954 }, + { url = "https://files.pythonhosted.org/packages/34/58/23e6b07fad492b7c47cf09cd8bad6983658f0f925b6c535fd008e3e86274/numpy-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03", size = 16702916 }, + { url = "https://files.pythonhosted.org/packages/91/24/37b5cf2dc7d385ac97f7b7fe50cba312abb70a2a5eac74c23af028811f73/numpy-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466", size = 14384372 }, + { url = "https://files.pythonhosted.org/packages/ea/ec/0f6d471058a01d1a05a50d2793898de1549280fa715a8537987ee866b5d9/numpy-2.1.2-cp310-cp310-win32.whl", hash = "sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb", size = 6535361 }, + { url = "https://files.pythonhosted.org/packages/c2/3d/293cc5927f916a7bc6bf74da8f6defab63d1b13f0959d7e21878ad8a20d8/numpy-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2", size = 12865501 }, + { url = "https://files.pythonhosted.org/packages/aa/9c/9a6ec3ae89cd0648d419781284308f2956d2a61d932b5ac9682c956a171b/numpy-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe", size = 21154845 }, + { url = "https://files.pythonhosted.org/packages/02/69/9f05c4ecc75fabf297b17743996371b4c3dfc4d92e15c5c38d8bb3db8d74/numpy-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1", size = 13789409 }, + { url = "https://files.pythonhosted.org/packages/34/4e/f95c99217bf77bbfaaf660d693c10bd0dc03b6032d19316d316088c9e479/numpy-2.1.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f", size = 5352097 }, + { url = "https://files.pythonhosted.org/packages/06/13/f5d87a497c16658e9af8920449b0b5692b469586b8231340c672962071c5/numpy-2.1.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4", size = 6891195 }, + { url = "https://files.pythonhosted.org/packages/6c/89/691ac07429ac061b344d5e37fa8e94be51a6017734aea15f2d9d7c6d119a/numpy-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a", size = 13895153 }, + { url = "https://files.pythonhosted.org/packages/23/69/538317f0d925095537745f12aced33be1570bbdc4acde49b33748669af96/numpy-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1", size = 16338306 }, + { url = "https://files.pythonhosted.org/packages/af/03/863fe7062c2106d3c151f7df9353f2ae2237c1dd6900f127a3eb1f24cb1b/numpy-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2", size = 16710893 }, + { url = "https://files.pythonhosted.org/packages/70/77/0ad9efe25482009873f9660d29a40a8c41a6f0e8b541195e3c95c70684c5/numpy-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146", size = 14398048 }, + { url = "https://files.pythonhosted.org/packages/3e/0f/e785fe75544db9f2b0bb1c181e13ceff349ce49753d807fd9672916aa06d/numpy-2.1.2-cp311-cp311-win32.whl", hash = "sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c", size = 6533458 }, + { url = "https://files.pythonhosted.org/packages/d4/96/450054662295125af861d48d2c4bc081dadcf1974a879b2104613157aa62/numpy-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9", size = 12870896 }, + { url = "https://files.pythonhosted.org/packages/a0/7d/554a6838f37f3ada5a55f25173c619d556ae98092a6e01afb6e710501d70/numpy-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b", size = 20848077 }, + { url = "https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db", size = 13493242 }, + { url = "https://files.pythonhosted.org/packages/56/44/f899b0581766c230da42f751b7b8896d096640b19b312164c267e48d36cb/numpy-2.1.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1", size = 5089219 }, + { url = "https://files.pythonhosted.org/packages/79/8f/b987070d45161a7a4504afc67ed38544ed2c0ed5576263599a0402204a9c/numpy-2.1.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426", size = 6620167 }, + { url = "https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0", size = 13604905 }, + { url = "https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df", size = 16041825 }, + { url = "https://files.pythonhosted.org/packages/e9/50/6828e66a78aa03147c111f84d55f33ce2dde547cb578d6744a3b06a0124b/numpy-2.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366", size = 16409541 }, + { url = "https://files.pythonhosted.org/packages/bf/72/66af7916d9c3c6dbfbc8acdd4930c65461e1953374a2bc43d00f948f004a/numpy-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142", size = 14081134 }, + { url = "https://files.pythonhosted.org/packages/dc/5a/59a67d84f33fe00ae74f0b5b69dd4f93a586a4aba7f7e19b54b2133db038/numpy-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550", size = 6237784 }, + { url = "https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e", size = 12568254 }, + { url = "https://files.pythonhosted.org/packages/16/72/716fa1dbe92395a9a623d5049203ff8ddb0cfce65b9df9117c3696ccc011/numpy-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d", size = 20834690 }, + { url = "https://files.pythonhosted.org/packages/1e/fb/3e85a39511586053b5c6a59a643879e376fae22230ebfef9cfabb0e032e2/numpy-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf", size = 13507474 }, + { url = "https://files.pythonhosted.org/packages/35/eb/5677556d9ba13436dab51e129f98d4829d95cd1b6bd0e199c14485a4bdb9/numpy-2.1.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e", size = 5074742 }, + { url = "https://files.pythonhosted.org/packages/3e/c5/6c5ef5ba41b65a7e51bed50dbf3e1483eb578055633dd013e811a28e96a1/numpy-2.1.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3", size = 6606787 }, + { url = "https://files.pythonhosted.org/packages/08/ac/f2f29dd4fd325b379c7dc932a0ebab22f0e031dbe80b2f6019b291a3a544/numpy-2.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8", size = 13601333 }, + { url = "https://files.pythonhosted.org/packages/44/26/63f5f4e5089654dfb858f4892215ed968cd1a68e6f4a83f9961f84f855cb/numpy-2.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a", size = 16038090 }, + { url = "https://files.pythonhosted.org/packages/1d/21/015e0594de9c3a8d5edd24943d2bd23f102ec71aec026083f822f86497e2/numpy-2.1.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98", size = 16410865 }, + { url = "https://files.pythonhosted.org/packages/df/01/c1bcf9e6025d79077fbf3f3ee503b50aa7bfabfcd8f4b54f5829f4c00f3f/numpy-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe", size = 14078077 }, + { url = "https://files.pythonhosted.org/packages/ba/06/db9d127d63bd11591770ba9f3d960f8041e0f895184b9351d4b1b5b56983/numpy-2.1.2-cp313-cp313-win32.whl", hash = "sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a", size = 6234904 }, + { url = "https://files.pythonhosted.org/packages/a9/96/9f61f8f95b6e0ea0aa08633b704c75d1882bdcb331bdf8bfd63263b25b00/numpy-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445", size = 12561910 }, + { url = "https://files.pythonhosted.org/packages/36/b8/033f627821784a48e8f75c218033471eebbaacdd933f8979c79637a1b44b/numpy-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5", size = 20857719 }, + { url = "https://files.pythonhosted.org/packages/96/46/af5726fde5b74ed83f2f17a73386d399319b7ed4d51279fb23b721d0816d/numpy-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0", size = 13518826 }, + { url = "https://files.pythonhosted.org/packages/db/6e/8ce677edf36da1c4dae80afe5529f47690697eb55b4864673af260ccea7b/numpy-2.1.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17", size = 5115036 }, + { url = "https://files.pythonhosted.org/packages/6a/ba/3cce44fb1b8438042c11847048812a776f75ee0e7070179c22e4cfbf420c/numpy-2.1.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6", size = 6628641 }, + { url = "https://files.pythonhosted.org/packages/59/c8/e722998720ccbd35ffbcf1d1b8ed0aa2304af88d3f1c38e06ebf983599b3/numpy-2.1.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8", size = 13574803 }, + { url = "https://files.pythonhosted.org/packages/7c/8e/fc1fdd83a55476765329ac2913321c4aed5b082a7915095628c4ca30ea72/numpy-2.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35", size = 16021174 }, + { url = "https://files.pythonhosted.org/packages/2a/b6/a790742aa88067adb4bd6c89a946778c1417d4deaeafce3ca928f26d4c52/numpy-2.1.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62", size = 16400117 }, + { url = "https://files.pythonhosted.org/packages/48/6f/129e3c17e3befe7fefdeaa6890f4c4df3f3cf0831aa053802c3862da67aa/numpy-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a", size = 14066202 }, + { url = "https://files.pythonhosted.org/packages/73/c9/3e1d6bbe6d3d2e2c5a9483b24b2f29a229b323f62054278a3bba7fee11e5/numpy-2.1.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952", size = 20981945 }, + { url = "https://files.pythonhosted.org/packages/6e/62/989c4988bde1a8e08117fccc3bab73d2886421fb98cde597168714f3c54e/numpy-2.1.2-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5", size = 6750558 }, + { url = "https://files.pythonhosted.org/packages/53/b1/00ef9f30975f1312a53257f68e57b4513d14d537e03d507e2773a684b1e8/numpy-2.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7", size = 16141552 }, + { url = "https://files.pythonhosted.org/packages/c0/ec/0c04903b48dfea6be1d7b47ba70f98709fb7198fd970784a1400c391d522/numpy-2.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e", size = 12789924 }, +] + +[[package]] +name = "packaging" +version = "21.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyparsing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/9e/d1a7217f69310c1db8fdf8ab396229f55a699ce34a203691794c5d1cad0c/packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", size = 84848 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/8e/8de486cbd03baba4deef4142bd643a3e7bbe954a784dc1bb17142572d127/packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522", size = 40750 }, +] + +[[package]] +name = "pbr" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/35/80cf8f6a4f34017a7fe28242dc45161a1baa55c41563c354d8147e8358b2/pbr-6.1.0.tar.gz", hash = "sha256:788183e382e3d1d7707db08978239965e8b9e4e5ed42669bf4758186734d5f24", size = 124032 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl", hash = "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a", size = 108529 }, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] +name = "pre-commit" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6b/00/1637ae945c6e10838ef5c41965f1c864e59301811bb203e979f335608e7c/pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658", size = 174966 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/6b/6cfe3a8b351b54f4b6c6d2ad4286804e3367f628dce379c603d3b96635f4/pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad", size = 201938 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.36" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/93/180be2342f89f16543ec4eb3f25083b5b84eba5378f68efff05409fb39a9/prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63", size = 423863 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/37/791f1a6edd13c61cac85282368aa68cb0f3f164440fdf60032f2cc6ca34e/prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305", size = 386414 }, +] + +[[package]] +name = "py-cpuinfo" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335 }, +] + +[[package]] +name = "pydantic" +version = "2.9.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/b7/d9e3f12af310e1120c21603644a1cd86f59060e040ec5c3a80b8f05fae30/pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", size = 769917 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/e4/ba44652d562cbf0bf320e0f3810206149c8a4e99cdbf66da82e97ab53a15/pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12", size = 434928 }, +] + +[[package]] +name = "pydantic-core" +version = "2.23.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/aa/6b6a9b9f8537b872f552ddd46dd3da230367754b6f707b8e1e963f515ea3/pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", size = 402156 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/8b/d3ae387f66277bd8104096d6ec0a145f4baa2966ebb2cad746c0920c9526/pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b", size = 1867835 }, + { url = "https://files.pythonhosted.org/packages/46/76/f68272e4c3a7df8777798282c5e47d508274917f29992d84e1898f8908c7/pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166", size = 1776689 }, + { url = "https://files.pythonhosted.org/packages/cc/69/5f945b4416f42ea3f3bc9d2aaec66c76084a6ff4ff27555bf9415ab43189/pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb", size = 1800748 }, + { url = "https://files.pythonhosted.org/packages/50/ab/891a7b0054bcc297fb02d44d05c50e68154e31788f2d9d41d0b72c89fdf7/pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916", size = 1806469 }, + { url = "https://files.pythonhosted.org/packages/31/7c/6e3fa122075d78f277a8431c4c608f061881b76c2b7faca01d317ee39b5d/pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07", size = 2002246 }, + { url = "https://files.pythonhosted.org/packages/ad/6f/22d5692b7ab63fc4acbc74de6ff61d185804a83160adba5e6cc6068e1128/pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232", size = 2659404 }, + { url = "https://files.pythonhosted.org/packages/11/ac/1e647dc1121c028b691028fa61a4e7477e6aeb5132628fde41dd34c1671f/pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2", size = 2053940 }, + { url = "https://files.pythonhosted.org/packages/91/75/984740c17f12c3ce18b5a2fcc4bdceb785cce7df1511a4ce89bca17c7e2d/pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f", size = 1921437 }, + { url = "https://files.pythonhosted.org/packages/a0/74/13c5f606b64d93f0721e7768cd3e8b2102164866c207b8cd6f90bb15d24f/pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3", size = 1966129 }, + { url = "https://files.pythonhosted.org/packages/18/03/9c4aa5919457c7b57a016c1ab513b1a926ed9b2bb7915bf8e506bf65c34b/pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071", size = 2110908 }, + { url = "https://files.pythonhosted.org/packages/92/2c/053d33f029c5dc65e5cf44ff03ceeefb7cce908f8f3cca9265e7f9b540c8/pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119", size = 1735278 }, + { url = "https://files.pythonhosted.org/packages/de/81/7dfe464eca78d76d31dd661b04b5f2036ec72ea8848dd87ab7375e185c23/pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f", size = 1917453 }, + { url = "https://files.pythonhosted.org/packages/5d/30/890a583cd3f2be27ecf32b479d5d615710bb926d92da03e3f7838ff3e58b/pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", size = 1865160 }, + { url = "https://files.pythonhosted.org/packages/1d/9a/b634442e1253bc6889c87afe8bb59447f106ee042140bd57680b3b113ec7/pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", size = 1776777 }, + { url = "https://files.pythonhosted.org/packages/75/9a/7816295124a6b08c24c96f9ce73085032d8bcbaf7e5a781cd41aa910c891/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", size = 1799244 }, + { url = "https://files.pythonhosted.org/packages/a9/8f/89c1405176903e567c5f99ec53387449e62f1121894aa9fc2c4fdc51a59b/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607", size = 1805307 }, + { url = "https://files.pythonhosted.org/packages/d5/a5/1a194447d0da1ef492e3470680c66048fef56fc1f1a25cafbea4bc1d1c48/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", size = 2000663 }, + { url = "https://files.pythonhosted.org/packages/13/a5/1df8541651de4455e7d587cf556201b4f7997191e110bca3b589218745a5/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", size = 2655941 }, + { url = "https://files.pythonhosted.org/packages/44/31/a3899b5ce02c4316865e390107f145089876dff7e1dfc770a231d836aed8/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", size = 2052105 }, + { url = "https://files.pythonhosted.org/packages/1b/aa/98e190f8745d5ec831f6d5449344c48c0627ac5fed4e5340a44b74878f8e/pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", size = 1919967 }, + { url = "https://files.pythonhosted.org/packages/ae/35/b6e00b6abb2acfee3e8f85558c02a0822e9a8b2f2d812ea8b9079b118ba0/pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", size = 1964291 }, + { url = "https://files.pythonhosted.org/packages/13/46/7bee6d32b69191cd649bbbd2361af79c472d72cb29bb2024f0b6e350ba06/pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", size = 2109666 }, + { url = "https://files.pythonhosted.org/packages/39/ef/7b34f1b122a81b68ed0a7d0e564da9ccdc9a2924c8d6c6b5b11fa3a56970/pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", size = 1732940 }, + { url = "https://files.pythonhosted.org/packages/2f/76/37b7e76c645843ff46c1d73e046207311ef298d3f7b2f7d8f6ac60113071/pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", size = 1916804 }, + { url = "https://files.pythonhosted.org/packages/74/7b/8e315f80666194b354966ec84b7d567da77ad927ed6323db4006cf915f3f/pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", size = 1856459 }, + { url = "https://files.pythonhosted.org/packages/14/de/866bdce10ed808323d437612aca1ec9971b981e1c52e5e42ad9b8e17a6f6/pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", size = 1770007 }, + { url = "https://files.pythonhosted.org/packages/dc/69/8edd5c3cd48bb833a3f7ef9b81d7666ccddd3c9a635225214e044b6e8281/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", size = 1790245 }, + { url = "https://files.pythonhosted.org/packages/80/33/9c24334e3af796ce80d2274940aae38dd4e5676298b4398eff103a79e02d/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", size = 1801260 }, + { url = "https://files.pythonhosted.org/packages/a5/6f/e9567fd90104b79b101ca9d120219644d3314962caa7948dd8b965e9f83e/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", size = 1996872 }, + { url = "https://files.pythonhosted.org/packages/2d/ad/b5f0fe9e6cfee915dd144edbd10b6e9c9c9c9d7a56b69256d124b8ac682e/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", size = 2661617 }, + { url = "https://files.pythonhosted.org/packages/06/c8/7d4b708f8d05a5cbfda3243aad468052c6e99de7d0937c9146c24d9f12e9/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", size = 2071831 }, + { url = "https://files.pythonhosted.org/packages/89/4d/3079d00c47f22c9a9a8220db088b309ad6e600a73d7a69473e3a8e5e3ea3/pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", size = 1917453 }, + { url = "https://files.pythonhosted.org/packages/e9/88/9df5b7ce880a4703fcc2d76c8c2d8eb9f861f79d0c56f4b8f5f2607ccec8/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", size = 1968793 }, + { url = "https://files.pythonhosted.org/packages/e3/b9/41f7efe80f6ce2ed3ee3c2dcfe10ab7adc1172f778cc9659509a79518c43/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", size = 2116872 }, + { url = "https://files.pythonhosted.org/packages/63/08/b59b7a92e03dd25554b0436554bf23e7c29abae7cce4b1c459cd92746811/pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", size = 1738535 }, + { url = "https://files.pythonhosted.org/packages/88/8d/479293e4d39ab409747926eec4329de5b7129beaedc3786eca070605d07f/pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", size = 1917992 }, + { url = "https://files.pythonhosted.org/packages/ad/ef/16ee2df472bf0e419b6bc68c05bf0145c49247a1095e85cee1463c6a44a1/pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", size = 1856143 }, + { url = "https://files.pythonhosted.org/packages/da/fa/bc3dbb83605669a34a93308e297ab22be82dfb9dcf88c6cf4b4f264e0a42/pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", size = 1770063 }, + { url = "https://files.pythonhosted.org/packages/4e/48/e813f3bbd257a712303ebdf55c8dc46f9589ec74b384c9f652597df3288d/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", size = 1790013 }, + { url = "https://files.pythonhosted.org/packages/b4/e0/56eda3a37929a1d297fcab1966db8c339023bcca0b64c5a84896db3fcc5c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", size = 1801077 }, + { url = "https://files.pythonhosted.org/packages/04/be/5e49376769bfbf82486da6c5c1683b891809365c20d7c7e52792ce4c71f3/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", size = 1996782 }, + { url = "https://files.pythonhosted.org/packages/bc/24/e3ee6c04f1d58cc15f37bcc62f32c7478ff55142b7b3e6d42ea374ea427c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", size = 2661375 }, + { url = "https://files.pythonhosted.org/packages/c1/f8/11a9006de4e89d016b8de74ebb1db727dc100608bb1e6bbe9d56a3cbbcce/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", size = 2071635 }, + { url = "https://files.pythonhosted.org/packages/7c/45/bdce5779b59f468bdf262a5bc9eecbae87f271c51aef628d8c073b4b4b4c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", size = 1916994 }, + { url = "https://files.pythonhosted.org/packages/d8/fa/c648308fe711ee1f88192cad6026ab4f925396d1293e8356de7e55be89b5/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", size = 1968877 }, + { url = "https://files.pythonhosted.org/packages/16/16/b805c74b35607d24d37103007f899abc4880923b04929547ae68d478b7f4/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", size = 2116814 }, + { url = "https://files.pythonhosted.org/packages/d1/58/5305e723d9fcdf1c5a655e6a4cc2a07128bf644ff4b1d98daf7a9dbf57da/pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", size = 1738360 }, + { url = "https://files.pythonhosted.org/packages/a5/ae/e14b0ff8b3f48e02394d8acd911376b7b66e164535687ef7dc24ea03072f/pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", size = 1919411 }, + { url = "https://files.pythonhosted.org/packages/13/a9/5d582eb3204464284611f636b55c0a7410d748ff338756323cb1ce721b96/pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5", size = 1857135 }, + { url = "https://files.pythonhosted.org/packages/2c/57/faf36290933fe16717f97829eabfb1868182ac495f99cf0eda9f59687c9d/pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec", size = 1740583 }, + { url = "https://files.pythonhosted.org/packages/91/7c/d99e3513dc191c4fec363aef1bf4c8af9125d8fa53af7cb97e8babef4e40/pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480", size = 1793637 }, + { url = "https://files.pythonhosted.org/packages/29/18/812222b6d18c2d13eebbb0f7cdc170a408d9ced65794fdb86147c77e1982/pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068", size = 1941963 }, + { url = "https://files.pythonhosted.org/packages/0f/36/c1f3642ac3f05e6bb4aec3ffc399fa3f84895d259cf5f0ce3054b7735c29/pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801", size = 1915332 }, + { url = "https://files.pythonhosted.org/packages/f7/ca/9c0854829311fb446020ebb540ee22509731abad886d2859c855dd29b904/pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728", size = 1957926 }, + { url = "https://files.pythonhosted.org/packages/c0/1c/7836b67c42d0cd4441fcd9fafbf6a027ad4b79b6559f80cf11f89fd83648/pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433", size = 2100342 }, + { url = "https://files.pythonhosted.org/packages/a9/f9/b6bcaf874f410564a78908739c80861a171788ef4d4f76f5009656672dfe/pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753", size = 1920344 }, +] + +[[package]] +name = "pydantic-settings" +version = "2.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/66/5f1a9da10675bfb3b9da52f5b689c77e0a5612263fcce510cfac3e99a168/pydantic_settings-2.6.0.tar.gz", hash = "sha256:44a1804abffac9e6a30372bb45f6cafab945ef5af25e66b1c634c01dd39e0188", size = 75232 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/19/26bb6bdb9fdad5f0dfce538780814084fb667b4bc37fcb28459c14b8d3b5/pydantic_settings-2.6.0-py3-none-any.whl", hash = "sha256:4a819166f119b74d7f8c765196b165f95cc7487ce58ea27dec8a5a26be0970e0", size = 28578 }, +] + +[[package]] +name = "pydoclint" +version = "0.5.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "docstring-parser-fork" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/59/8969dde565efb8d6ef564907ab5562a49e633451087b5f47de48ffbfe1f4/pydoclint-0.5.9.tar.gz", hash = "sha256:e200f964a5d9fbbb2ff1078bd7cb5433a0564d2482b6a1ba1be848f66bc4924f", size = 48704 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/a5/f50c1543bf9213524363a12209a9f39b442ddbca6672f87dd29b1141ec09/pydoclint-0.5.9-py2.py3-none-any.whl", hash = "sha256:089327003cef6fe5605cbaa9887859ea5229ce0c9abb52775ffd57513094c1ae", size = 46037 }, +] + +[[package]] +name = "pydocstyle" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "snowballstemmer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/d5385ca59fd065e3c6a5fe19f9bc9d5ea7f2509fa8c9c22fb6b2031dd953/pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1", size = 36796 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/ea/99ddefac41971acad68f14114f38261c1f27dac0b3ec529824ebc739bdaa/pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019", size = 38038 }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version < '3.11'" }, +] + +[[package]] +name = "pygments" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", size = 4891905 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", size = 1205513 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/d5/e5aeee5387091148a19e1145f63606619cb5f20b83fccb63efae6474e7b2/pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c", size = 920984 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", size = 106921 }, +] + +[[package]] +name = "pystac" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/90/4f/f6f89956aabffd1211fa9c9130293ac67f774c66fab7944bfe33dc317f18/pystac-1.11.0.tar.gz", hash = "sha256:acb1e04be398a0cda2d8870ab5e90457783a8014a206590233171d8b2ae0d9e7", size = 141392 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/5b/60dc94cbf6af2fd3a3d3fae52de7e294819af2dfe7a1bea4d246beb7e0b6/pystac-1.11.0-py3-none-any.whl", hash = "sha256:10ac7c7b4ea6c5ec8333829a09ec1a33b596f02d1a97ffbbd72cd1b6c10598c1", size = 183925 }, +] + +[[package]] +name = "pytest" +version = "7.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size = 1357116 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", size = 325287 }, +] + +[[package]] +name = "pytest-benchmark" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "py-cpuinfo" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/08/e6b0067efa9a1f2a1eb3043ecd8a0c48bfeb60d3255006dcc829d72d5da2/pytest-benchmark-4.0.0.tar.gz", hash = "sha256:fb0785b83efe599a6a956361c0691ae1dbb5318018561af10f3e915caa0048d1", size = 334641 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/a1/3b70862b5b3f830f0422844f25a823d0470739d994466be9dbbbb414d85a/pytest_benchmark-4.0.0-py3-none-any.whl", hash = "sha256:fdb7db64e31c8b277dff9850d2a2556d8b60bcb0ea6524e36e28ffd7c87f71d6", size = 43951 }, +] + +[[package]] +name = "pytest-click" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ec/ec/bca3cd29ba2b025ae41666b851f6ff05fb77cb4c13719baaeda6a757772a/pytest_click-1.1.0.tar.gz", hash = "sha256:fdd9f6721f877dda021e7c5dc73e70aecd37e5ed23ec6820f8a7b3fd7b4f8d30", size = 5054 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/1a/eb53371999b94b3c995c00117f3a232dbf6f56c7152a52cf3e3777e7d49d/pytest_click-1.1.0-py3-none-any.whl", hash = "sha256:eade4742c2f02c345e78a32534a43e8db04acf98d415090539dacc880b7cd0e9", size = 4110 }, +] + +[[package]] +name = "pytest-cov" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", extra = ["toml"] }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/15/da3df99fd551507694a9b01f512a2f6cf1254f33601605843c3775f39460/pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6", size = 63245 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/4b/8b78d126e275efa2379b1c2e09dc52cf70df16fc3b90613ef82531499d73/pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a", size = 21949 }, +] + +[[package]] +name = "pytest-mock" +version = "3.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/90/a955c3ab35ccd41ad4de556596fa86685bf4fc5ffcc62d22d856cfd4e29a/pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0", size = 32814 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/3b/b26f90f74e2986a82df6e7ac7e319b8ea7ccece1caec9f8ab6104dc70603/pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f", size = 9863 }, +] + +[[package]] +name = "pytest-pikachu" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/a4/f882bdce6182b21c0fdc8aec9b2dc01c6c5a0138b5da7c6666152eae8a7f/pytest-pikachu-1.0.0.tar.gz", hash = "sha256:8acd13fdc51491e86aff5106cfaa31f80f4584ac41dcc3ae512d471c18333fd7", size = 3728 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/59/82ef0f4cea4db4dc06240d207948bcdbbfacf29c9f6409273e3b7adc4e83/pytest_pikachu-1.0.0-py3-none-any.whl", hash = "sha256:c20cfe20a84978e11e69af24f7a9d07beb90cbca805ae5011e2061c14a486eb6", size = 4415 }, +] + +[[package]] +name = "pytest-sugar" +version = "0.9.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "pytest" }, + { name = "termcolor" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/18/fe569040c5796879288544b1cc98888fce1754138d54e8287ed21614491e/pytest-sugar-0.9.7.tar.gz", hash = "sha256:f1e74c1abfa55f7241cf7088032b6e378566f16b938f3f08905e2cf4494edd46", size = 14874 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b2/8f5d346c86e690c58da3b21b7c14d656b4100606abed8e91a98e8b50f3bf/pytest_sugar-0.9.7-py2.py3-none-any.whl", hash = "sha256:8cb5a4e5f8bbcd834622b0235db9e50432f4cbd71fef55b467fe44e43701e062", size = 10034 }, +] + +[[package]] +name = "pytest-timeout" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/0d/04719abc7a4bdb3a7a1f968f24b0f5253d698c9cc94975330e9d3145befb/pytest-timeout-2.3.1.tar.gz", hash = "sha256:12397729125c6ecbdaca01035b9e5239d4db97352320af155b3f5de1ba5165d9", size = 17697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/27/14af9ef8321f5edc7527e47def2a21d8118c6f329a9342cc61387a0c0599/pytest_timeout-2.3.1-py3-none-any.whl", hash = "sha256:68188cb703edfc6a18fad98dc25a3c61e9f24d644b0b70f33af545219fc7813e", size = 14148 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-dotenv" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 }, + { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 }, + { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 }, + { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 }, + { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 }, + { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 }, + { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 }, + { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 }, + { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 }, + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "questionary" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "prompt-toolkit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/d0/d73525aeba800df7030ac187d09c59dc40df1c878b4fab8669bdc805535d/questionary-2.0.1.tar.gz", hash = "sha256:bcce898bf3dbb446ff62830c86c5c6fb9a22a54146f0f5597d3da43b10d8fc8b", size = 24726 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/e7/2dd8f59d1d328773505f78b85405ddb1cfe74126425d076ce72e65540b8b/questionary-2.0.1-py3-none-any.whl", hash = "sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2", size = 34248 }, +] + +[[package]] +name = "referencing" +version = "0.35.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/73ca1f8e72fff6fa52119dbd185f73a907b1989428917b24cff660129b6d/referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c", size = 62991 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/59/2056f61236782a2c86b33906c025d4f4a0b17be0161b63b70fd9e8775d36/referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de", size = 26684 }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "rich" +version = "13.9.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/e9/cf9ef5245d835065e6673781dbd4b8911d352fb770d56cf0879cf11b7ee1/rich-13.9.3.tar.gz", hash = "sha256:bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e", size = 222889 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl", hash = "sha256:9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283", size = 242157 }, +] + +[[package]] +name = "rich-click" +version = "1.8.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/a9/a1f1af87e83832d794342fbc09c96cc7cd6798b8dfb8adfbe6ccbef8d70c/rich_click-1.8.3.tar.gz", hash = "sha256:6d75bdfa7aa9ed2c467789a0688bc6da23fbe3a143e19aa6ad3f8bac113d2ab3", size = 38209 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ea/5a0c5a8e6532e971983d1b0fc99268eb66a10f489da35d9022ce01044191/rich_click-1.8.3-py3-none-any.whl", hash = "sha256:636d9c040d31c5eee242201b5bf4f2d358bfae4db14bb22ec1cafa717cfd02cd", size = 35032 }, +] + +[[package]] +name = "rpds-py" +version = "0.20.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/cb/8e919951f55d109d658f81c9b49d0cc3b48637c50792c5d2e77032b8c5da/rpds_py-0.20.1.tar.gz", hash = "sha256:e1791c4aabd117653530dccd24108fa03cc6baf21f58b950d0a73c3b3b29a350", size = 25931 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/0e/d7e7e9280988a7bc56fd326042baca27f4f55fad27dc8aa64e5e0e894e5d/rpds_py-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a649dfd735fff086e8a9d0503a9f0c7d01b7912a333c7ae77e1515c08c146dad", size = 327335 }, + { url = "https://files.pythonhosted.org/packages/4c/72/027185f213d53ae66765c575229829b202fbacf3d55fe2bd9ff4e29bb157/rpds_py-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f16bc1334853e91ddaaa1217045dd7be166170beec337576818461268a3de67f", size = 318250 }, + { url = "https://files.pythonhosted.org/packages/2b/e7/b4eb3e6ff541c83d3b46f45f855547e412ab60c45bef64520fafb00b9b42/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14511a539afee6f9ab492b543060c7491c99924314977a55c98bfa2ee29ce78c", size = 361206 }, + { url = "https://files.pythonhosted.org/packages/e7/80/cb9a4b4cad31bcaa37f38dae7a8be861f767eb2ca4f07a146b5ffcfbee09/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ccb8ac2d3c71cda472b75af42818981bdacf48d2e21c36331b50b4f16930163", size = 369921 }, + { url = "https://files.pythonhosted.org/packages/95/1b/463b11e7039e18f9e778568dbf7338c29bbc1f8996381115201c668eb8c8/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c142b88039b92e7e0cb2552e8967077e3179b22359e945574f5e2764c3953dcf", size = 403673 }, + { url = "https://files.pythonhosted.org/packages/86/98/1ef4028e9d5b76470bf7f8f2459be07ac5c9621270a2a5e093f8d8a8cc2c/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f19169781dddae7478a32301b499b2858bc52fc45a112955e798ee307e294977", size = 430267 }, + { url = "https://files.pythonhosted.org/packages/25/8e/41d7e3e6d3a4a6c94375020477705a3fbb6515717901ab8f94821cf0a0d9/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13c56de6518e14b9bf6edde23c4c39dac5b48dcf04160ea7bce8fca8397cdf86", size = 360569 }, + { url = "https://files.pythonhosted.org/packages/4f/6a/8839340464d4e1bbfaf0482e9d9165a2309c2c17427e4dcb72ce3e5cc5d6/rpds_py-0.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:925d176a549f4832c6f69fa6026071294ab5910e82a0fe6c6228fce17b0706bd", size = 382584 }, + { url = "https://files.pythonhosted.org/packages/64/96/7a7f938d3796a6a3ec08ed0e8a5ecd436fbd516a3684ab1fa22d46d6f6cc/rpds_py-0.20.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:78f0b6877bfce7a3d1ff150391354a410c55d3cdce386f862926a4958ad5ab7e", size = 546560 }, + { url = "https://files.pythonhosted.org/packages/15/c7/19fb4f1247a3c90a99eca62909bf76ee988f9b663e47878a673d9854ec5c/rpds_py-0.20.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3dd645e2b0dcb0fd05bf58e2e54c13875847687d0b71941ad2e757e5d89d4356", size = 549359 }, + { url = "https://files.pythonhosted.org/packages/d2/4c/445eb597a39a883368ea2f341dd6e48a9d9681b12ebf32f38a827b30529b/rpds_py-0.20.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4f676e21db2f8c72ff0936f895271e7a700aa1f8d31b40e4e43442ba94973899", size = 527567 }, + { url = "https://files.pythonhosted.org/packages/4f/71/4c44643bffbcb37311fc7fe221bcf139c8d660bc78f746dd3a05741372c8/rpds_py-0.20.1-cp310-none-win32.whl", hash = "sha256:648386ddd1e19b4a6abab69139b002bc49ebf065b596119f8f37c38e9ecee8ff", size = 200412 }, + { url = "https://files.pythonhosted.org/packages/f4/33/9d0529d74099e090ec9ab15eb0a049c56cca599eaaca71bfedbdbca656a9/rpds_py-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:d9ecb51120de61e4604650666d1f2b68444d46ae18fd492245a08f53ad2b7711", size = 218563 }, + { url = "https://files.pythonhosted.org/packages/a0/2e/a6ded84019a05b8f23e0fe6a632f62ae438a8c5e5932d3dfc90c73418414/rpds_py-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:762703bdd2b30983c1d9e62b4c88664df4a8a4d5ec0e9253b0231171f18f6d75", size = 327194 }, + { url = "https://files.pythonhosted.org/packages/68/11/d3f84c69de2b2086be3d6bd5e9d172825c096b13842ab7e5f8f39f06035b/rpds_py-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0b581f47257a9fce535c4567782a8976002d6b8afa2c39ff616edf87cbeff712", size = 318126 }, + { url = "https://files.pythonhosted.org/packages/18/c0/13f1bce9c901511e5e4c0b77a99dbb946bb9a177ca88c6b480e9cb53e304/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:842c19a6ce894493563c3bd00d81d5100e8e57d70209e84d5491940fdb8b9e3a", size = 361119 }, + { url = "https://files.pythonhosted.org/packages/06/31/3bd721575671f22a37476c2d7b9e34bfa5185bdcee09f7fedde3b29f3adb/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42cbde7789f5c0bcd6816cb29808e36c01b960fb5d29f11e052215aa85497c93", size = 369532 }, + { url = "https://files.pythonhosted.org/packages/20/22/3eeb0385f33251b4fd0f728e6a3801dc8acc05e714eb7867cefe635bf4ab/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c8e9340ce5a52f95fa7d3b552b35c7e8f3874d74a03a8a69279fd5fca5dc751", size = 403703 }, + { url = "https://files.pythonhosted.org/packages/10/e1/8dde6174e7ac5b9acd3269afca2e17719bc7e5088c68f44874d2ad9e4560/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ba6f89cac95c0900d932c9efb7f0fb6ca47f6687feec41abcb1bd5e2bd45535", size = 429868 }, + { url = "https://files.pythonhosted.org/packages/19/51/a3cc1a5238acfc2582033e8934d034301f9d4931b9bf7c7ccfabc4ca0880/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a916087371afd9648e1962e67403c53f9c49ca47b9680adbeef79da3a7811b0", size = 360539 }, + { url = "https://files.pythonhosted.org/packages/cd/8c/3c87471a44bd4114e2b0aec90f298f6caaac4e8db6af904d5dd2279f5c61/rpds_py-0.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:200a23239781f46149e6a415f1e870c5ef1e712939fe8fa63035cd053ac2638e", size = 382467 }, + { url = "https://files.pythonhosted.org/packages/d0/9b/95073fe3e0f130e6d561e106818b6568ef1f2df3352e7f162ab912da837c/rpds_py-0.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:58b1d5dd591973d426cbb2da5e27ba0339209832b2f3315928c9790e13f159e8", size = 546669 }, + { url = "https://files.pythonhosted.org/packages/de/4c/7ab3669e02bb06fedebcfd64d361b7168ba39dfdf385e4109440f2e7927b/rpds_py-0.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6b73c67850ca7cae0f6c56f71e356d7e9fa25958d3e18a64927c2d930859b8e4", size = 549304 }, + { url = "https://files.pythonhosted.org/packages/f1/e8/ad5da336cd42adbdafe0ecd40dcecdae01fd3d703c621c7637615a008d3a/rpds_py-0.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d8761c3c891cc51e90bc9926d6d2f59b27beaf86c74622c8979380a29cc23ac3", size = 527637 }, + { url = "https://files.pythonhosted.org/packages/02/f1/1b47b9e5b941c2659c9b7e4ef41b6f07385a6500c638fa10c066e4616ecb/rpds_py-0.20.1-cp311-none-win32.whl", hash = "sha256:cd945871335a639275eee904caef90041568ce3b42f402c6959b460d25ae8732", size = 200488 }, + { url = "https://files.pythonhosted.org/packages/85/f6/c751c1adfa31610055acfa1cc667cf2c2d7011a73070679c448cf5856905/rpds_py-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:7e21b7031e17c6b0e445f42ccc77f79a97e2687023c5746bfb7a9e45e0921b84", size = 218475 }, + { url = "https://files.pythonhosted.org/packages/e7/10/4e8dcc08b58a548098dbcee67a4888751a25be7a6dde0a83d4300df48bfa/rpds_py-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:36785be22066966a27348444b40389f8444671630063edfb1a2eb04318721e17", size = 329749 }, + { url = "https://files.pythonhosted.org/packages/d2/e4/61144f3790e12fd89e6153d77f7915ad26779735fef8ee9c099cba6dfb4a/rpds_py-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:142c0a5124d9bd0e2976089484af5c74f47bd3298f2ed651ef54ea728d2ea42c", size = 321032 }, + { url = "https://files.pythonhosted.org/packages/fa/e0/99205aabbf3be29ef6c58ef9b08feed51ba6532fdd47461245cb58dd9897/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbddc10776ca7ebf2a299c41a4dde8ea0d8e3547bfd731cb87af2e8f5bf8962d", size = 363931 }, + { url = "https://files.pythonhosted.org/packages/ac/bd/bce2dddb518b13a7e77eed4be234c9af0c9c6d403d01c5e6ae8eb447ab62/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15a842bb369e00295392e7ce192de9dcbf136954614124a667f9f9f17d6a216f", size = 373343 }, + { url = "https://files.pythonhosted.org/packages/43/15/112b7c553066cb91264691ba7fb119579c440a0ae889da222fa6fc0d411a/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be5ef2f1fc586a7372bfc355986226484e06d1dc4f9402539872c8bb99e34b01", size = 406304 }, + { url = "https://files.pythonhosted.org/packages/af/8d/2da52aef8ae5494a382b0c0025ba5b68f2952db0f2a4c7534580e8ca83cc/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbcf360c9e3399b056a238523146ea77eeb2a596ce263b8814c900263e46031a", size = 423022 }, + { url = "https://files.pythonhosted.org/packages/c8/1b/f23015cb293927c93bdb4b94a48bfe77ad9d57359c75db51f0ff0cf482ff/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd27a66740ffd621d20b9a2f2b5ee4129a56e27bfb9458a3bcc2e45794c96cb", size = 364937 }, + { url = "https://files.pythonhosted.org/packages/7b/8b/6da8636b2ea2e2f709e56656e663b6a71ecd9a9f9d9dc21488aade122026/rpds_py-0.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0b937b2a1988f184a3e9e577adaa8aede21ec0b38320d6009e02bd026db04fa", size = 386301 }, + { url = "https://files.pythonhosted.org/packages/20/af/2ae192797bffd0d6d558145b5a36e7245346ff3e44f6ddcb82f0eb8512d4/rpds_py-0.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6889469bfdc1eddf489729b471303739bf04555bb151fe8875931f8564309afc", size = 549452 }, + { url = "https://files.pythonhosted.org/packages/07/dd/9f6520712a5108cd7d407c9db44a3d59011b385c58e320d58ebf67757a9e/rpds_py-0.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:19b73643c802f4eaf13d97f7855d0fb527fbc92ab7013c4ad0e13a6ae0ed23bd", size = 554370 }, + { url = "https://files.pythonhosted.org/packages/5e/0e/b1bdc7ea0db0946d640ab8965146099093391bb5d265832994c47461e3c5/rpds_py-0.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3c6afcf2338e7f374e8edc765c79fbcb4061d02b15dd5f8f314a4af2bdc7feb5", size = 530940 }, + { url = "https://files.pythonhosted.org/packages/ae/d3/ffe907084299484fab60a7955f7c0e8a295c04249090218c59437010f9f4/rpds_py-0.20.1-cp312-none-win32.whl", hash = "sha256:dc73505153798c6f74854aba69cc75953888cf9866465196889c7cdd351e720c", size = 203164 }, + { url = "https://files.pythonhosted.org/packages/1f/ba/9cbb57423c4bfbd81c473913bebaed151ad4158ee2590a4e4b3e70238b48/rpds_py-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:8bbe951244a838a51289ee53a6bae3a07f26d4e179b96fc7ddd3301caf0518eb", size = 220750 }, + { url = "https://files.pythonhosted.org/packages/b5/01/fee2e1d1274c92fff04aa47d805a28d62c2aa971d1f49f5baea1c6e670d9/rpds_py-0.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6ca91093a4a8da4afae7fe6a222c3b53ee4eef433ebfee4d54978a103435159e", size = 329359 }, + { url = "https://files.pythonhosted.org/packages/b0/cf/4aeffb02b7090029d7aeecbffb9a10e1c80f6f56d7e9a30e15481dc4099c/rpds_py-0.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b9c2fe36d1f758b28121bef29ed1dee9b7a2453e997528e7d1ac99b94892527c", size = 320543 }, + { url = "https://files.pythonhosted.org/packages/17/69/85cf3429e9ccda684ba63ff36b5866d5f9451e921cc99819341e19880334/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f009c69bc8c53db5dfab72ac760895dc1f2bc1b62ab7408b253c8d1ec52459fc", size = 363107 }, + { url = "https://files.pythonhosted.org/packages/ef/de/7df88dea9c3eeb832196d23b41f0f6fc5f9a2ee9b2080bbb1db8731ead9c/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6740a3e8d43a32629bb9b009017ea5b9e713b7210ba48ac8d4cb6d99d86c8ee8", size = 372027 }, + { url = "https://files.pythonhosted.org/packages/d1/b8/88675399d2038580743c570a809c43a900e7090edc6553f8ffb66b23c965/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32b922e13d4c0080d03e7b62991ad7f5007d9cd74e239c4b16bc85ae8b70252d", size = 405031 }, + { url = "https://files.pythonhosted.org/packages/e1/aa/cca639f6d17caf00bab51bdc70fcc0bdda3063e5662665c4fdf60443c474/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe00a9057d100e69b4ae4a094203a708d65b0f345ed546fdef86498bf5390982", size = 422271 }, + { url = "https://files.pythonhosted.org/packages/c4/07/bf8a949d2ec4626c285579c9d6b356c692325f1a4126e947736b416e1fc4/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fe9b04b6fa685bd39237d45fad89ba19e9163a1ccaa16611a812e682913496", size = 363625 }, + { url = "https://files.pythonhosted.org/packages/11/f0/06675c6a58d6ce34547879138810eb9aab0c10e5607ea6c2e4dc56b703c8/rpds_py-0.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa7ac11e294304e615b43f8c441fee5d40094275ed7311f3420d805fde9b07b4", size = 385906 }, + { url = "https://files.pythonhosted.org/packages/bf/ac/2d1f50374eb8e41030fad4e87f81751e1c39e3b5d4bee8c5618830d8a6ac/rpds_py-0.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aa97af1558a9bef4025f8f5d8c60d712e0a3b13a2fe875511defc6ee77a1ab7", size = 549021 }, + { url = "https://files.pythonhosted.org/packages/f7/d4/a7d70a7cc71df772eeadf4bce05e32e780a9fe44a511a5b091c7a85cb767/rpds_py-0.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:483b29f6f7ffa6af845107d4efe2e3fa8fb2693de8657bc1849f674296ff6a5a", size = 553800 }, + { url = "https://files.pythonhosted.org/packages/87/81/dc30bc449ccba63ad23a0f6633486d4e0e6955f45f3715a130dacabd6ad0/rpds_py-0.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37fe0f12aebb6a0e3e17bb4cd356b1286d2d18d2e93b2d39fe647138458b4bcb", size = 531076 }, + { url = "https://files.pythonhosted.org/packages/50/80/fb62ab48f3b5cfe704ead6ad372da1922ddaa76397055e02eb507054c979/rpds_py-0.20.1-cp313-none-win32.whl", hash = "sha256:a624cc00ef2158e04188df5e3016385b9353638139a06fb77057b3498f794782", size = 202804 }, + { url = "https://files.pythonhosted.org/packages/d9/30/a3391e76d0b3313f33bdedd394a519decae3a953d2943e3dabf80ae32447/rpds_py-0.20.1-cp313-none-win_amd64.whl", hash = "sha256:b71b8666eeea69d6363248822078c075bac6ed135faa9216aa85f295ff009b1e", size = 220502 }, + { url = "https://files.pythonhosted.org/packages/b6/fa/7959429e69569d0f6e7d27f80451402da0409349dd2b07f6bcbdd5fad2d3/rpds_py-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a07ced2b22f0cf0b55a6a510078174c31b6d8544f3bc00c2bcee52b3d613f74", size = 328209 }, + { url = "https://files.pythonhosted.org/packages/25/97/5dfdb091c30267ff404d2fd9e70c7a6d6ffc65ca77fffe9456e13b719066/rpds_py-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:68cb0a499f2c4a088fd2f521453e22ed3527154136a855c62e148b7883b99f9a", size = 319499 }, + { url = "https://files.pythonhosted.org/packages/7c/98/cf2608722400f5f9bb4c82aa5ac09026f3ac2ebea9d4059d3533589ed0b6/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3060d885657abc549b2a0f8e1b79699290e5d83845141717c6c90c2df38311", size = 361795 }, + { url = "https://files.pythonhosted.org/packages/89/de/0e13dd43c785c60e63933e96fbddda0b019df6862f4d3019bb49c3861131/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95f3b65d2392e1c5cec27cff08fdc0080270d5a1a4b2ea1d51d5f4a2620ff08d", size = 370604 }, + { url = "https://files.pythonhosted.org/packages/8a/fc/fe3c83c77f82b8059eeec4e998064913d66212b69b3653df48f58ad33d3d/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cc3712a4b0b76a1d45a9302dd2f53ff339614b1c29603a911318f2357b04dd2", size = 404177 }, + { url = "https://files.pythonhosted.org/packages/94/30/5189518bfb80a41f664daf32b46645c7fbdcc89028a0f1bfa82e806e0fbb/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d4eea0761e37485c9b81400437adb11c40e13ef513375bbd6973e34100aeb06", size = 430108 }, + { url = "https://files.pythonhosted.org/packages/67/0e/6f069feaff5c298375cd8c55e00ecd9bd79c792ce0893d39448dc0097857/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f5179583d7a6cdb981151dd349786cbc318bab54963a192692d945dd3f6435d", size = 361184 }, + { url = "https://files.pythonhosted.org/packages/27/9f/ce3e2ae36f392c3ef1988c06e9e0b4c74f64267dad7c223003c34da11adb/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fbb0ffc754490aff6dabbf28064be47f0f9ca0b9755976f945214965b3ace7e", size = 384140 }, + { url = "https://files.pythonhosted.org/packages/5f/d5/89d44504d0bc7a1135062cb520a17903ff002f458371b8d9160af3b71e52/rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a94e52537a0e0a85429eda9e49f272ada715506d3b2431f64b8a3e34eb5f3e75", size = 546589 }, + { url = "https://files.pythonhosted.org/packages/8f/8f/e1c2db4fcca3947d9a28ec9553700b4dc8038f0eff575f579e75885b0661/rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:92b68b79c0da2a980b1c4197e56ac3dd0c8a149b4603747c4378914a68706979", size = 550059 }, + { url = "https://files.pythonhosted.org/packages/67/29/00a9e986df36721b5def82fff60995c1ee8827a7d909a6ec8929fb4cc668/rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:93da1d3db08a827eda74356f9f58884adb254e59b6664f64cc04cdff2cc19b0d", size = 529131 }, + { url = "https://files.pythonhosted.org/packages/a3/32/95364440560ec476b19c6a2704259e710c223bf767632ebaa72cc2a1760f/rpds_py-0.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:754bbed1a4ca48479e9d4182a561d001bbf81543876cdded6f695ec3d465846b", size = 219677 }, +] + +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ruamel-yaml-clib", marker = "python_full_version < '3.13' and platform_python_implementation == 'CPython'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/81/4dfc17eb6ebb1aac314a3eb863c1325b907863a1b8b1382cdffcb6ac0ed9/ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b", size = 143362 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/67/8ece580cc363331d9a53055130f86b096bf16e38156e33b1d3014fffda6b/ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636", size = 117761 }, +] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/57/40a958e863e299f0c74ef32a3bde9f2d1ea8d69669368c0c502a0997f57f/ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5", size = 131301 }, + { url = "https://files.pythonhosted.org/packages/98/a8/29a3eb437b12b95f50a6bcc3d7d7214301c6c529d8fdc227247fa84162b5/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969", size = 633728 }, + { url = "https://files.pythonhosted.org/packages/35/6d/ae05a87a3ad540259c3ad88d71275cbd1c0f2d30ae04c65dcbfb6dcd4b9f/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df", size = 722230 }, + { url = "https://files.pythonhosted.org/packages/7f/b7/20c6f3c0b656fe609675d69bc135c03aac9e3865912444be6339207b6648/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76", size = 686712 }, + { url = "https://files.pythonhosted.org/packages/cd/11/d12dbf683471f888d354dac59593873c2b45feb193c5e3e0f2ebf85e68b9/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6", size = 663936 }, + { url = "https://files.pythonhosted.org/packages/72/14/4c268f5077db5c83f743ee1daeb236269fa8577133a5cfa49f8b382baf13/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd", size = 696580 }, + { url = "https://files.pythonhosted.org/packages/80/29/c0a017b704aaf3cbf704989785cd9c5d5b8ccec2dae6ac0c53833c84e677/ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da", size = 100326 }, + { url = "https://files.pythonhosted.org/packages/3a/65/fa39d74db4e2d0cd252355732d966a460a41cd01c6353b820a0952432839/ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28", size = 118079 }, + { url = "https://files.pythonhosted.org/packages/fb/8f/683c6ad562f558cbc4f7c029abcd9599148c51c54b5ef0f24f2638da9fbb/ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6", size = 132224 }, + { url = "https://files.pythonhosted.org/packages/3c/d2/b79b7d695e2f21da020bd44c782490578f300dd44f0a4c57a92575758a76/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e", size = 641480 }, + { url = "https://files.pythonhosted.org/packages/68/6e/264c50ce2a31473a9fdbf4fa66ca9b2b17c7455b31ef585462343818bd6c/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e", size = 739068 }, + { url = "https://files.pythonhosted.org/packages/86/29/88c2567bc893c84d88b4c48027367c3562ae69121d568e8a3f3a8d363f4d/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52", size = 703012 }, + { url = "https://files.pythonhosted.org/packages/11/46/879763c619b5470820f0cd6ca97d134771e502776bc2b844d2adb6e37753/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642", size = 704352 }, + { url = "https://files.pythonhosted.org/packages/02/80/ece7e6034256a4186bbe50dee28cd032d816974941a6abf6a9d65e4228a7/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2", size = 737344 }, + { url = "https://files.pythonhosted.org/packages/67/58/b1f60a1d591b771298ffa0428237afb092c7f29ae23bad93420b1eb10703/ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4", size = 100205 }, + { url = "https://files.pythonhosted.org/packages/b4/4f/b52f634c9548a9291a70dfce26ca7ebce388235c93588a1068028ea23fcc/ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb", size = 118185 }, + { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433 }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362 }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118 }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497 }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042 }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831 }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777 }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523 }, + { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011 }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488 }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066 }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785 }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017 }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270 }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583 }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190 }, +] + +[[package]] +name = "ruff" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/21/5c6e05e0fd3fbb41be4fb92edbc9a04de70baf60adb61435ce0c6b8c3d55/ruff-0.7.1.tar.gz", hash = "sha256:9d8a41d4aa2dad1575adb98a82870cf5db5f76b2938cf2206c22c940034a36f4", size = 3181670 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/45/8a20a9920175c9c4892b2420f80ff3cf14949cf3067118e212f9acd9c908/ruff-0.7.1-py3-none-linux_armv6l.whl", hash = "sha256:cb1bc5ed9403daa7da05475d615739cc0212e861b7306f314379d958592aaa89", size = 10389268 }, + { url = "https://files.pythonhosted.org/packages/1b/d3/2f8382db2cf4f9488e938602e33e36287f9d26cb283aa31f11c31297ce79/ruff-0.7.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27c1c52a8d199a257ff1e5582d078eab7145129aa02721815ca8fa4f9612dc35", size = 10188348 }, + { url = "https://files.pythonhosted.org/packages/a2/31/7d14e2a88da351200f844b7be889a0845d9e797162cf76b136d21b832a23/ruff-0.7.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:588a34e1ef2ea55b4ddfec26bbe76bc866e92523d8c6cdec5e8aceefeff02d99", size = 9841448 }, + { url = "https://files.pythonhosted.org/packages/db/99/738cafdc768eceeca0bd26c6f03e213aa91203d2278e1d95b1c31c4ece41/ruff-0.7.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94fc32f9cdf72dc75c451e5f072758b118ab8100727168a3df58502b43a599ca", size = 10674864 }, + { url = "https://files.pythonhosted.org/packages/fe/12/bcf2836b50eab53c65008383e7d55201e490d75167c474f14a16e1af47d2/ruff-0.7.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:985818742b833bffa543a84d1cc11b5e6871de1b4e0ac3060a59a2bae3969250", size = 10192105 }, + { url = "https://files.pythonhosted.org/packages/2b/71/261d5d668bf98b6c44e89bfb5dfa4cb8cb6c8b490a201a3d8030e136ea4f/ruff-0.7.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32f1e8a192e261366c702c5fb2ece9f68d26625f198a25c408861c16dc2dea9c", size = 11194144 }, + { url = "https://files.pythonhosted.org/packages/90/1f/0926d18a3b566fa6e7b3b36093088e4ffef6b6ba4ea85a462d9a93f7e35c/ruff-0.7.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:699085bf05819588551b11751eff33e9ca58b1b86a6843e1b082a7de40da1565", size = 11917066 }, + { url = "https://files.pythonhosted.org/packages/cd/a8/9fac41f128b6a44ab4409c1493430b4ee4b11521e8aeeca19bfe1ce851f9/ruff-0.7.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:344cc2b0814047dc8c3a8ff2cd1f3d808bb23c6658db830d25147339d9bf9ea7", size = 11458821 }, + { url = "https://files.pythonhosted.org/packages/25/cd/59644168f086ab13fe4e02943b9489a0aa710171f66b178e179df5383554/ruff-0.7.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4316bbf69d5a859cc937890c7ac7a6551252b6a01b1d2c97e8fc96e45a7c8b4a", size = 12700379 }, + { url = "https://files.pythonhosted.org/packages/fb/30/3bac63619eb97174661829c07fc46b2055a053dee72da29d7c304c1cd2c0/ruff-0.7.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79d3af9dca4c56043e738a4d6dd1e9444b6d6c10598ac52d146e331eb155a8ad", size = 11019813 }, + { url = "https://files.pythonhosted.org/packages/4b/af/f567b885b5cb3bcdbcca3458ebf210cc8c9c7a9f61c332d3c2a050c3b21e/ruff-0.7.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c5c121b46abde94a505175524e51891f829414e093cd8326d6e741ecfc0a9112", size = 10662146 }, + { url = "https://files.pythonhosted.org/packages/bc/ad/eb930d3ad117a9f2f7261969c21559ebd82bb13b6e8001c7caed0d44be5f/ruff-0.7.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8422104078324ea250886954e48f1373a8fe7de59283d747c3a7eca050b4e378", size = 10256911 }, + { url = "https://files.pythonhosted.org/packages/20/d5/af292ce70a016fcec792105ca67f768b403dd480a11888bc1f418fed0dd5/ruff-0.7.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:56aad830af8a9db644e80098fe4984a948e2b6fc2e73891538f43bbe478461b8", size = 10767488 }, + { url = "https://files.pythonhosted.org/packages/24/85/cc04a3bd027f433bebd2a097e63b3167653c079f7f13d8f9a1178e693412/ruff-0.7.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:658304f02f68d3a83c998ad8bf91f9b4f53e93e5412b8f2388359d55869727fd", size = 11093368 }, + { url = "https://files.pythonhosted.org/packages/0b/fb/c39cbf32d1f3e318674b8622f989417231794926b573f76dd4d0ca49f0f1/ruff-0.7.1-py3-none-win32.whl", hash = "sha256:b517a2011333eb7ce2d402652ecaa0ac1a30c114fbbd55c6b8ee466a7f600ee9", size = 8594180 }, + { url = "https://files.pythonhosted.org/packages/5a/71/ec8cdea34ecb90c830ca60d54ac7b509a7b5eab50fae27e001d4470fe813/ruff-0.7.1-py3-none-win_amd64.whl", hash = "sha256:f38c41fcde1728736b4eb2b18850f6d1e3eedd9678c914dede554a70d5241307", size = 9419751 }, + { url = "https://files.pythonhosted.org/packages/79/7b/884553415e9f0a9bf358ed52fb68b934e67ef6c5a62397ace924a1afdf9a/ruff-0.7.1-py3-none-win_arm64.whl", hash = "sha256:19aa200ec824c0f36d0c9114c8ec0087082021732979a359d6f3c390a6ff2a37", size = 8717402 }, +] + +[[package]] +name = "safety" +version = "2.3.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "dparse" }, + { name = "packaging" }, + { name = "requests" }, + { name = "ruamel-yaml" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/c3/a1eeffef985f0ae71e133312fd474b616e55acb55acaf597a314c4fcf88e/safety-2.3.5.tar.gz", hash = "sha256:a60c11f8952f412cbb165d70cb1f673a3b43a2ba9a93ce11f97e6a4de834aa3a", size = 93439 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/e6/b11774ee5c3a220960c07d04fc4298987fad1dcdafcfdf3997f5234262a0/safety-2.3.5-py3-none-any.whl", hash = "sha256:2227fcac1b22b53c1615af78872b48348661691450aa25d6704a5504dbd1f7e2", size = 57496 }, +] + +[[package]] +name = "setuptools" +version = "75.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/22/a438e0caa4576f8c383fa4d35f1cc01655a46c75be358960d815bfbb12bd/setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686", size = 1351577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/12/282ee9bce8b58130cb762fbc9beabd531549952cac11fc56add11dcb7ea0/setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", size = 1251070 }, +] + +[[package]] +name = "shapely" +version = "2.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/89/0d20bac88016be35ff7d3c0c2ae64b477908f1b1dfa540c5d69ac7af07fe/shapely-2.0.6.tar.gz", hash = "sha256:997f6159b1484059ec239cacaa53467fd8b5564dabe186cd84ac2944663b0bf6", size = 282361 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/d4/f84bbbdb7771f5b9ade94db2398b256cf1471f1eb0ca8afbe0f6ca725d5a/shapely-2.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29a34e068da2d321e926b5073539fd2a1d4429a2c656bd63f0bd4c8f5b236d0b", size = 1449635 }, + { url = "https://files.pythonhosted.org/packages/03/10/bd6edb66ed0a845f0809f7ce653596f6fd9c6be675b3653872f47bf49f82/shapely-2.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c84c3f53144febf6af909d6b581bc05e8785d57e27f35ebaa5c1ab9baba13b", size = 1296756 }, + { url = "https://files.pythonhosted.org/packages/af/09/6374c11cb493a9970e8c04d7be25f578a37f6494a2fecfbed3a447b16b2c/shapely-2.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ad2fae12dca8d2b727fa12b007e46fbc522148a584f5d6546c539f3464dccde", size = 2381960 }, + { url = "https://files.pythonhosted.org/packages/2b/a6/302e0d9c210ccf4d1ffadf7ab941797d3255dcd5f93daa73aaf116a4db39/shapely-2.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3304883bd82d44be1b27a9d17f1167fda8c7f5a02a897958d86c59ec69b705e", size = 2468133 }, + { url = "https://files.pythonhosted.org/packages/8c/be/e448681dc485f2931d4adee93d531fce93608a3ee59433303cc1a46e21a5/shapely-2.0.6-cp310-cp310-win32.whl", hash = "sha256:3ec3a0eab496b5e04633a39fa3d5eb5454628228201fb24903d38174ee34565e", size = 1294982 }, + { url = "https://files.pythonhosted.org/packages/cd/4c/6f4a6fc085e3be01c4c9de0117a2d373bf9fec5f0426cf4d5c94090a5a4d/shapely-2.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:28f87cdf5308a514763a5c38de295544cb27429cfa655d50ed8431a4796090c4", size = 1441141 }, + { url = "https://files.pythonhosted.org/packages/37/15/269d8e1f7f658a37e61f7028683c546f520e4e7cedba1e32c77ff9d3a3c7/shapely-2.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5aeb0f51a9db176da9a30cb2f4329b6fbd1e26d359012bb0ac3d3c7781667a9e", size = 1449578 }, + { url = "https://files.pythonhosted.org/packages/37/63/e182e43081fffa0a2d970c480f2ef91647a6ab94098f61748c23c2a485f2/shapely-2.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a7a78b0d51257a367ee115f4d41ca4d46edbd0dd280f697a8092dd3989867b2", size = 1296792 }, + { url = "https://files.pythonhosted.org/packages/6e/5a/d019f69449329dcd517355444fdb9ddd58bec5e080b8bdba007e8e4c546d/shapely-2.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f32c23d2f43d54029f986479f7c1f6e09c6b3a19353a3833c2ffb226fb63a855", size = 2443997 }, + { url = "https://files.pythonhosted.org/packages/25/aa/53f145e5a610a49af9ac49f2f1be1ec8659ebd5c393d66ac94e57c83b00e/shapely-2.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dc9fb0eb56498912025f5eb352b5126f04801ed0e8bdbd867d21bdbfd7cbd0", size = 2528334 }, + { url = "https://files.pythonhosted.org/packages/64/64/0c7b0a22b416d36f6296b92bb4219d82b53d0a7c47e16fd0a4c85f2f117c/shapely-2.0.6-cp311-cp311-win32.whl", hash = "sha256:d93b7e0e71c9f095e09454bf18dad5ea716fb6ced5df3cb044564a00723f339d", size = 1294669 }, + { url = "https://files.pythonhosted.org/packages/b1/5a/6a67d929c467a1973b6bb9f0b00159cc343b02bf9a8d26db1abd2f87aa23/shapely-2.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:c02eb6bf4cfb9fe6568502e85bb2647921ee49171bcd2d4116c7b3109724ef9b", size = 1442032 }, + { url = "https://files.pythonhosted.org/packages/46/77/efd9f9d4b6a762f976f8b082f54c9be16f63050389500fb52e4f6cc07c1a/shapely-2.0.6-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cec9193519940e9d1b86a3b4f5af9eb6910197d24af02f247afbfb47bcb3fab0", size = 1450326 }, + { url = "https://files.pythonhosted.org/packages/68/53/5efa6e7a4036a94fe6276cf7bbb298afded51ca3396b03981ad680c8cc7d/shapely-2.0.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83b94a44ab04a90e88be69e7ddcc6f332da7c0a0ebb1156e1c4f568bbec983c3", size = 1298480 }, + { url = "https://files.pythonhosted.org/packages/88/a2/1be1db4fc262e536465a52d4f19d85834724fedf2299a1b9836bc82fe8fa/shapely-2.0.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:537c4b2716d22c92036d00b34aac9d3775e3691f80c7aa517c2c290351f42cd8", size = 2439311 }, + { url = "https://files.pythonhosted.org/packages/d5/7d/9a57e187cbf2fbbbdfd4044a4f9ce141c8d221f9963750d3b001f0ec080d/shapely-2.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98fea108334be345c283ce74bf064fa00cfdd718048a8af7343c59eb40f59726", size = 2524835 }, + { url = "https://files.pythonhosted.org/packages/6d/0a/f407509ab56825f39bf8cfce1fb410238da96cf096809c3e404e5bc71ea1/shapely-2.0.6-cp312-cp312-win32.whl", hash = "sha256:42fd4cd4834747e4990227e4cbafb02242c0cffe9ce7ef9971f53ac52d80d55f", size = 1295613 }, + { url = "https://files.pythonhosted.org/packages/7b/b3/857afd9dfbfc554f10d683ac412eac6fa260d1f4cd2967ecb655c57e831a/shapely-2.0.6-cp312-cp312-win_amd64.whl", hash = "sha256:665990c84aece05efb68a21b3523a6b2057e84a1afbef426ad287f0796ef8a48", size = 1442539 }, + { url = "https://files.pythonhosted.org/packages/34/e8/d164ef5b0eab86088cde06dee8415519ffd5bb0dd1bd9d021e640e64237c/shapely-2.0.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:42805ef90783ce689a4dde2b6b2f261e2c52609226a0438d882e3ced40bb3013", size = 1445344 }, + { url = "https://files.pythonhosted.org/packages/ce/e2/9fba7ac142f7831757a10852bfa465683724eadbc93d2d46f74a16f9af04/shapely-2.0.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d2cb146191a47bd0cee8ff5f90b47547b82b6345c0d02dd8b25b88b68af62d7", size = 1296182 }, + { url = "https://files.pythonhosted.org/packages/cf/dc/790d4bda27d196cd56ec66975eaae3351c65614cafd0e16ddde39ec9fb92/shapely-2.0.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3fdef0a1794a8fe70dc1f514440aa34426cc0ae98d9a1027fb299d45741c381", size = 2423426 }, + { url = "https://files.pythonhosted.org/packages/af/b0/f8169f77eac7392d41e231911e0095eb1148b4d40c50ea9e34d999c89a7e/shapely-2.0.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c665a0301c645615a107ff7f52adafa2153beab51daf34587170d85e8ba6805", size = 2513249 }, + { url = "https://files.pythonhosted.org/packages/f6/1d/a8c0e9ab49ff2f8e4dedd71b0122eafb22a18ad7e9d256025e1f10c84704/shapely-2.0.6-cp313-cp313-win32.whl", hash = "sha256:0334bd51828f68cd54b87d80b3e7cee93f249d82ae55a0faf3ea21c9be7b323a", size = 1294848 }, + { url = "https://files.pythonhosted.org/packages/23/38/2bc32dd1e7e67a471d4c60971e66df0bdace88656c47a9a728ace0091075/shapely-2.0.6-cp313-cp313-win_amd64.whl", hash = "sha256:d37d070da9e0e0f0a530a621e17c0b8c3c9d04105655132a87cfff8bd77cc4c2", size = 1441371 }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, +] + +[[package]] +name = "six" +version = "1.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, +] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/7b/af302bebf22c749c56c9c3e8ae13190b5b5db37a33d9068652e8f73b7089/snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", size = 86699 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", size = 93002 }, +] + +[[package]] +name = "stac-model" +version = "0.2.0" +source = { editable = "." } +dependencies = [ + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "pystac" }, + { name = "rich" }, + { name = "shapely" }, + { name = "typer" }, +] + +[package.dev-dependencies] +dev = [ + { name = "bandit" }, + { name = "bump-my-version" }, + { name = "coverage" }, + { name = "mypy" }, + { name = "mypy-extensions" }, + { name = "pre-commit" }, + { name = "pydoclint" }, + { name = "pydocstyle", extra = ["toml"] }, + { name = "pystac" }, + { name = "pytest" }, + { name = "pytest-benchmark" }, + { name = "pytest-click" }, + { name = "pytest-cov" }, + { name = "pytest-mock" }, + { name = "pytest-pikachu" }, + { name = "pytest-sugar" }, + { name = "pytest-timeout" }, + { name = "ruff" }, + { name = "safety" }, +] + +[package.metadata] +requires-dist = [ + { name = "jsonschema", specifier = ">=4.21.1,<5.0.0" }, + { name = "pydantic", specifier = ">=2.6.3,<3.0.0" }, + { name = "pydantic-core", specifier = ">=2,<3" }, + { name = "pystac", specifier = ">=1.9.0,<2.0.0" }, + { name = "rich", specifier = ">=13.7.0,<14.0.0" }, + { name = "shapely", specifier = ">=2,<3" }, + { name = "typer", extras = ["all"], specifier = ">=0.9.0,<1.0.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "bandit", specifier = ">=1.7.5,<2.0.0" }, + { name = "bump-my-version", specifier = ">=0.21,<0.27" }, + { name = "coverage", specifier = ">=7.3.0,<8.0.0" }, + { name = "mypy", specifier = ">=1.0.0,<2.0.0" }, + { name = "mypy-extensions", specifier = ">=0.4.3,<1.0.0" }, + { name = "pre-commit", specifier = ">=2.21.0,<3.0.0" }, + { name = "pydoclint", specifier = ">=0.3,<0.6" }, + { name = "pydocstyle", extras = ["toml"], specifier = ">=6.2.0,<7.0.0" }, + { name = "pystac", specifier = ">=1.10.0,<2.0.0" }, + { name = "pytest", specifier = ">=7.2.1,<8.0.0" }, + { name = "pytest-benchmark", specifier = ">=4.0.0,<5.0.0" }, + { name = "pytest-click", specifier = ">=1.1.0,<2.0.0" }, + { name = "pytest-cov", specifier = ">=4.1.0,<5.0.0" }, + { name = "pytest-mock", specifier = ">=3.10.0,<4.0.0" }, + { name = "pytest-pikachu", specifier = ">=1.0.0,<2.0.0" }, + { name = "pytest-sugar", specifier = ">=0.9.7,<1.0.0" }, + { name = "pytest-timeout", specifier = ">=2.2.0,<3.0.0" }, + { name = "ruff", specifier = ">=0.2.2,<1.0.0" }, + { name = "safety", specifier = ">=2.3.4,<3.0.0" }, +] + +[[package]] +name = "stevedore" +version = "5.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pbr" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/59/f8aefa21020054f553bf7e3b405caec7f8d1f432d9cb47e34aaa244d8d03/stevedore-5.3.0.tar.gz", hash = "sha256:9a64265f4060312828151c204efbe9b7a9852a0d9228756344dbc7e4023e375a", size = 513768 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/50/70762bdb23f6c2b746b90661f461d33c4913a22a46bb5265b10947e85ffb/stevedore-5.3.0-py3-none-any.whl", hash = "sha256:1efd34ca08f474dad08d9b19e934a22c68bb6fe416926479ba29e5013bcc8f78", size = 49661 }, +] + +[[package]] +name = "termcolor" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/72/88311445fd44c455c7d553e61f95412cf89054308a1aa2434ab835075fc5/termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f", size = 13057 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/be/df630c387a0a054815d60be6a97eb4e8f17385d5d6fe660e1c02750062b4/termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8", size = 7755 }, +] + +[[package]] +name = "tomli" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/b9/de2a5c0144d7d75a57ff355c0c24054f965b2dc3036456ae03a51ea6264b/tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed", size = 16096 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/db/ce8eda256fa131af12e0a76d481711abe4681b6923c27efb9a255c9e4594/tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38", size = 13237 }, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/09/a439bec5888f00a54b8b9f05fa94d7f901d6735ef4e55dcec9bc37b5d8fa/tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79", size = 192885 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde", size = 37955 }, +] + +[[package]] +name = "typer" +version = "0.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/58/a79003b91ac2c6890fc5d90145c662fd5771c6f11447f116b63300436bc9/typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722", size = 98953 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/2b/886d13e742e514f704c33c4caa7df0f3b89e5a25ef8db02aa9ca3d9535d5/typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b", size = 47288 }, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, +] + +[[package]] +name = "urllib3" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", size = 300677 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 }, +] + +[[package]] +name = "virtualenv" +version = "20.27.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8c/b3/7b6a79c5c8cf6d90ea681310e169cf2db2884f4d583d16c6e1d5a75a4e04/virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba", size = 6491145 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/92/78324ff89391e00c8f4cf6b8526c41c6ef36b4ea2d2c132250b1a6fc2b8d/virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4", size = 3117838 }, +] + +[[package]] +name = "wcmatch" +version = "10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bracex" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/ab/b3a52228538ccb983653c446c1656eddf1d5303b9cb8b9aef6a91299f862/wcmatch-10.0.tar.gz", hash = "sha256:e72f0de09bba6a04e0de70937b0cf06e55f36f37b3deb422dfaf854b867b840a", size = 115578 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/df/4ee467ab39cc1de4b852c212c1ed3becfec2e486a51ac1ce0091f85f38d7/wcmatch-10.0-py3-none-any.whl", hash = "sha256:0dd927072d03c0a6527a20d2e6ad5ba8d0380e60870c383bc533b71744df7b7a", size = 39347 }, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, +] From e19f4b561f2cbe59897469f6a82cfa92496b3b2e Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 31 Oct 2024 16:11:43 -0400 Subject: [PATCH 09/83] correct all commands to use currently active env based on which python, except precommit? --- Makefile | 99 +++++++++++++++++++++++++------------------------- pyproject.toml | 4 +- 2 files changed, 53 insertions(+), 50 deletions(-) diff --git a/Makefile b/Makefile index 1023181..f890680 100644 --- a/Makefile +++ b/Makefile @@ -1,58 +1,59 @@ #* Variables SHELL ?= /usr/bin/env bash -PYTHON ?= python -PYTHONPATH := `pwd` -POETRY ?= poetry - -#* Poetry -.PHONY: poetry-install -poetry-install: - curl -sSL https://install.python-poetry.org | $(PYTHON) - - -.PHONY: poetry-remove -poetry-remove: - curl -sSL https://install.python-poetry.org | $(PYTHON) - --uninstall - -.PHONY: poetry-plugins -poetry-plugins: - $(POETRY) self add poetry-plugin-up - -.PHONY: poetry-env -poetry-env: - $(POETRY) config virtualenvs.in-project true +ACTIVEPYTHON = $(shell which python) + +#* UV +.PHONY: setup +setup: + @if ! command -v uv &> /dev/null; then \ + curl -LsSf https://astral.sh/uv/install.sh | sh; \ + else \ + echo "uv is already installed"; \ + fi + +.PHONY: remove +remove: + @read -p "Are you sure you want to remove uv and all its data? [y/N] " confirm && \ + if [ "$$confirm" = "y" ]; then \ + uv cache clean; \ + rm -r "$$(uv python dir)"; \ + rm -r "$$(uv tool dir)"; \ + rm ~/.cargo/bin/uv ~/.cargo/bin/uvx; \ + else \ + echo "Operation cancelled."; \ + fi .PHONY: publish publish: - $(POETRY) publish --build + uv publish --build #* Installation .PHONY: install -install: poetry-env - $(POETRY) lock -n && poetry export --without-hashes > requirements-lock.txt - $(POETRY) install -n - -poetry run mypy --install-types --non-interactive ./ +install: setup + uv export --format requirements-txt -o requirements.txt --no-dev + uv pip install --python $(ACTIVEPYTHON) -r requirements.txt .PHONY: install-dev -install-dev: poetry-env install - $(POETRY) install -n --with dev +install-dev: setup + uv export --format requirements-txt -o requirements-dev.txt + uv pip install --python $(ACTIVEPYTHON) -r requirements-dev.txt .PHONY: pre-commit-install -pre-commit-install: - $(POETRY) run pre-commit install - +pre-commit-install: setup + uv run --python $(ACTIVEPYTHON) pre-commit install #* Formatters .PHONY: codestyle -codestyle: - $(POETRY) run ruff format --config=pyproject.toml stac_model tests +codestyle: setup + uv run --python $(ACTIVEPYTHON) ruff format --config=pyproject.toml stac_model tests .PHONY: format format: codestyle #* Linting .PHONY: test -test: - PYTHONPATH=$(PYTHONPATH) poetry run pytest -c pyproject.toml --cov-report=html --cov=stac_model tests/ +test: setup + uv run --python $(ACTIVEPYTHON) pytest -c pyproject.toml --cov-report=html --cov=stac_model tests/ .PHONY: check check: check-examples check-markdown check-lint check-mypy check-safety check-citation @@ -61,8 +62,8 @@ check: check-examples check-markdown check-lint check-mypy check-safety check-ci check-all: check .PHONY: mypy -mypy: - $(POETRY) run mypy --config-file pyproject.toml ./ +mypy: setup + uv run --python $(ACTIVEPYTHON) mypy --config-file pyproject.toml ./ .PHONY: check-mypy check-mypy: mypy @@ -72,26 +73,25 @@ check-mypy: mypy # see https://github.com/citation-file-format/cffconvert/issues/292 .PHONY: check-citation check-citation: - docker run --rm -v $(PYTHONPATH)/CITATION.cff:/app/CITATION.cff citationcff/cffconvert --validate + docker run --rm -v $(ACTIVEPYTHON)/CITATION.cff:/app/CITATION.cff citationcff/cffconvert --validate .PHONY: check-safety -check-safety: - $(POETRY) check - $(POETRY) run safety check --full-report - $(POETRY) run bandit -ll --recursive stac_model tests +check-safety: setup + uv check + uv run --python $(ACTIVEPYTHON) safety check --full-report + uv run --python $(ACTIVEPYTHON) bandit -ll --recursive stac_model tests .PHONY: lint -lint: - $(POETRY) run ruff --config=pyproject.toml ./ - $(POETRY) run pydocstyle --count --config=pyproject.toml ./ - $(POETRY) run pydoclint --config=pyproject.toml ./ +lint: setup + uv run --python $(ACTIVEPYTHON) ruff check --fix --config=pyproject.toml ./ .PHONY: check-lint check-lint: lint +uv run --python $(ACTIVEPYTHON) ruff check --config=pyproject.toml ./ .PHONY: format-lint -format-lint: - $(POETRY) run ruff --config=pyproject.toml --fix ./ +format-lint: setup lint + ruff format --config=pyproject.toml ./ .PHONY: install-npm install-npm: @@ -120,8 +120,9 @@ $(addprefix fix-, $(FORMATTERS)): fix-%: format-% lint-all: lint mypy check-safety check-markdown .PHONY: update-dev-deps -update-dev-deps: - $(POETRY) up --only=dev-dependencies --latest +update-dev-deps: setup + uv export --only-dev --format requirements-txt -o requirements-only-dev.txt + uv pip install --python $(ACTIVEPYTHON) -r requirements-only-dev.txt #* Cleaning .PHONY: pycache-remove diff --git a/pyproject.toml b/pyproject.toml index 546754d..6bd1c10 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,13 +15,14 @@ authors = [ license = {text = "Apache Software License 2.0"} requires-python = "<4.0,>=3.10" dependencies = [ - "typer[all]<1.0.0,>=0.9.0", + "typer<1.0.0,>=0.9.0", "rich<14.0.0,>=13.7.0", "pydantic<3.0.0,>=2.6.3", "pydantic-core<3,>=2", "pystac<2.0.0,>=1.9.0", "shapely<3,>=2", "jsonschema<5.0.0,>=4.21.1", + "pip>=24.3.1", ] name = "stac-model" version = "0.2.0" @@ -71,6 +72,7 @@ dev-dependencies = [ "coverage<8.0.0,>=7.3.0", "ruff<1.0.0,>=0.2.2", "bump-my-version<0.27,>=0.21", + "types-python-dateutil>=2.9.0.20241003", ] [project.urls] From 26b570527404d1b3e3e9418568e92875c5e3577e Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 31 Oct 2024 16:23:06 -0400 Subject: [PATCH 10/83] add lockfile, test precommit with relaxed python version to accomodate different envs --- .pre-commit-config.yaml | 3 +-- uv.lock | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3ff038d..690d4b5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,8 +1,7 @@ default_language_version: - python: python3.10 + python: python3 default_stages: [commit, push] - repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 diff --git a/uv.lock b/uv.lock index 8c04040..43b668a 100644 --- a/uv.lock +++ b/uv.lock @@ -482,6 +482,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl", hash = "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a", size = 108529 }, ] +[[package]] +name = "pip" +version = "24.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/b1/b422acd212ad7eedddaf7981eee6e5de085154ff726459cf2da7c5a184c1/pip-24.3.1.tar.gz", hash = "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99", size = 1931073 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/7d/500c9ad20238fcfcb4cb9243eede163594d7020ce87bd9610c9e02771876/pip-24.3.1-py3-none-any.whl", hash = "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", size = 1822182 }, +] + [[package]] name = "platformdirs" version = "4.3.6" @@ -1174,6 +1183,7 @@ version = "0.2.0" source = { editable = "." } dependencies = [ { name = "jsonschema" }, + { name = "pip" }, { name = "pydantic" }, { name = "pydantic-core" }, { name = "pystac" }, @@ -1203,17 +1213,19 @@ dev = [ { name = "pytest-timeout" }, { name = "ruff" }, { name = "safety" }, + { name = "types-python-dateutil" }, ] [package.metadata] requires-dist = [ { name = "jsonschema", specifier = ">=4.21.1,<5.0.0" }, + { name = "pip", specifier = ">=24.3.1" }, { name = "pydantic", specifier = ">=2.6.3,<3.0.0" }, { name = "pydantic-core", specifier = ">=2,<3" }, { name = "pystac", specifier = ">=1.9.0,<2.0.0" }, { name = "rich", specifier = ">=13.7.0,<14.0.0" }, { name = "shapely", specifier = ">=2,<3" }, - { name = "typer", extras = ["all"], specifier = ">=0.9.0,<1.0.0" }, + { name = "typer", specifier = ">=0.9.0,<1.0.0" }, ] [package.metadata.requires-dev] @@ -1237,6 +1249,7 @@ dev = [ { name = "pytest-timeout", specifier = ">=2.2.0,<3.0.0" }, { name = "ruff", specifier = ">=0.2.2,<1.0.0" }, { name = "safety", specifier = ">=2.3.4,<3.0.0" }, + { name = "types-python-dateutil", specifier = ">=2.9.0.20241003" }, ] [[package]] @@ -1293,6 +1306,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a8/2b/886d13e742e514f704c33c4caa7df0f3b89e5a25ef8db02aa9ca3d9535d5/typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b", size = 47288 }, ] +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20241003" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/f8/f6ee4c803a7beccffee21bb29a71573b39f7037c224843eff53e5308c16e/types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446", size = 9210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/d6/ba5f61958f358028f2e2ba1b8e225b8e263053bd57d3a79e2d2db64c807b/types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d", size = 9693 }, +] + [[package]] name = "typing-extensions" version = "4.12.2" From 6d32293c505792a793f433ea1f74585923b3b3bb Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 31 Oct 2024 16:33:44 -0400 Subject: [PATCH 11/83] remove poetry lock --- poetry.lock | 1707 --------------------------------------------------- 1 file changed, 1707 deletions(-) delete mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 5f502a0..0000000 --- a/poetry.lock +++ /dev/null @@ -1,1707 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "annotated-types" -version = "0.7.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, -] - -[[package]] -name = "attrs" -version = "23.2.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] - -[[package]] -name = "bandit" -version = "1.7.8" -description = "Security oriented static analyser for python code." -optional = false -python-versions = ">=3.8" -files = [ - {file = "bandit-1.7.8-py3-none-any.whl", hash = "sha256:509f7af645bc0cd8fd4587abc1a038fc795636671ee8204d502b933aee44f381"}, - {file = "bandit-1.7.8.tar.gz", hash = "sha256:36de50f720856ab24a24dbaa5fee2c66050ed97c1477e0a1159deab1775eab6b"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} -PyYAML = ">=5.3.1" -rich = "*" -stevedore = ">=1.20.0" - -[package.extras] -baseline = ["GitPython (>=3.1.30)"] -sarif = ["jschema-to-python (>=1.2.3)", "sarif-om (>=1.0.4)"] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)"] -toml = ["tomli (>=1.1.0)"] -yaml = ["PyYAML"] - -[[package]] -name = "bracex" -version = "2.4" -description = "Bash style brace expander." -optional = false -python-versions = ">=3.8" -files = [ - {file = "bracex-2.4-py3-none-any.whl", hash = "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418"}, - {file = "bracex-2.4.tar.gz", hash = "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb"}, -] - -[[package]] -name = "bump-my-version" -version = "0.26.1" -description = "Version bump your Python project" -optional = false -python-versions = ">=3.8" -files = [ - {file = "bump_my_version-0.26.1-py3-none-any.whl", hash = "sha256:be09c48111eeba56f8c870b69718013f52b5b6c6e65bc3bda5bc928181901c48"}, - {file = "bump_my_version-0.26.1.tar.gz", hash = "sha256:af1cada726cf6f9a723d18941c68c325d5196453a180b3a42f8e0b38567d734d"}, -] - -[package.dependencies] -click = "*" -pydantic = ">=2.0.0" -pydantic-settings = "*" -questionary = "*" -rich = "*" -rich-click = "*" -tomlkit = "*" -wcmatch = ">=8.5.1" - -[package.extras] -dev = ["generate-changelog (>=0.7.6)", "git-fame (>=1.12.2)", "pip-tools", "pre-commit"] -docs = ["black", "markdown-customblocks", "mdx-truly-sane-lists", "mkdocs", "mkdocs-click", "mkdocs-drawio", "mkdocs-gen-files", "mkdocs-git-authors-plugin", "mkdocs-git-committers-plugin", "mkdocs-git-revision-date-localized-plugin (>=1.2.6)", "mkdocs-include-markdown-plugin", "mkdocs-literate-nav", "mkdocs-material", "mkdocstrings[python]", "python-frontmatter"] -test = ["coverage", "freezegun", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytest-sugar"] - -[[package]] -name = "certifi" -version = "2024.2.2" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, -] - -[[package]] -name = "cfgv" -version = "3.4.0" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, - {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coverage" -version = "7.5.0" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:432949a32c3e3f820af808db1833d6d1631664d53dd3ce487aa25d574e18ad1c"}, - {file = "coverage-7.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2bd7065249703cbeb6d4ce679c734bef0ee69baa7bff9724361ada04a15b7e3b"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbfe6389c5522b99768a93d89aca52ef92310a96b99782973b9d11e80511f932"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39793731182c4be939b4be0cdecde074b833f6171313cf53481f869937129ed3"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a5dbe1ba1bf38d6c63b6d2c42132d45cbee6d9f0c51b52c59aa4afba057517"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:357754dcdfd811462a725e7501a9b4556388e8ecf66e79df6f4b988fa3d0b39a"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a81eb64feded34f40c8986869a2f764f0fe2db58c0530d3a4afbcde50f314880"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51431d0abbed3a868e967f8257c5faf283d41ec882f58413cf295a389bb22e58"}, - {file = "coverage-7.5.0-cp310-cp310-win32.whl", hash = "sha256:f609ebcb0242d84b7adeee2b06c11a2ddaec5464d21888b2c8255f5fd6a98ae4"}, - {file = "coverage-7.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:6782cd6216fab5a83216cc39f13ebe30adfac2fa72688c5a4d8d180cd52e8f6a"}, - {file = "coverage-7.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e768d870801f68c74c2b669fc909839660180c366501d4cc4b87efd6b0eee375"}, - {file = "coverage-7.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:84921b10aeb2dd453247fd10de22907984eaf80901b578a5cf0bb1e279a587cb"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710c62b6e35a9a766b99b15cdc56d5aeda0914edae8bb467e9c355f75d14ee95"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c379cdd3efc0658e652a14112d51a7668f6bfca7445c5a10dee7eabecabba19d"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea9d3ca80bcf17edb2c08a4704259dadac196fe5e9274067e7a20511fad1743"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:41327143c5b1d715f5f98a397608f90ab9ebba606ae4e6f3389c2145410c52b1"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:565b2e82d0968c977e0b0f7cbf25fd06d78d4856289abc79694c8edcce6eb2de"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cf3539007202ebfe03923128fedfdd245db5860a36810136ad95a564a2fdffff"}, - {file = "coverage-7.5.0-cp311-cp311-win32.whl", hash = "sha256:bf0b4b8d9caa8d64df838e0f8dcf68fb570c5733b726d1494b87f3da85db3a2d"}, - {file = "coverage-7.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c6384cc90e37cfb60435bbbe0488444e54b98700f727f16f64d8bfda0b84656"}, - {file = "coverage-7.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fed7a72d54bd52f4aeb6c6e951f363903bd7d70bc1cad64dd1f087980d309ab9"}, - {file = "coverage-7.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cbe6581fcff7c8e262eb574244f81f5faaea539e712a058e6707a9d272fe5b64"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad97ec0da94b378e593ef532b980c15e377df9b9608c7c6da3506953182398af"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4bacd62aa2f1a1627352fe68885d6ee694bdaebb16038b6e680f2924a9b2cc"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adf032b6c105881f9d77fa17d9eebe0ad1f9bfb2ad25777811f97c5362aa07f2"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ba01d9ba112b55bfa4b24808ec431197bb34f09f66f7cb4fd0258ff9d3711b1"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f0bfe42523893c188e9616d853c47685e1c575fe25f737adf473d0405dcfa7eb"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a9a7ef30a1b02547c1b23fa9a5564f03c9982fc71eb2ecb7f98c96d7a0db5cf2"}, - {file = "coverage-7.5.0-cp312-cp312-win32.whl", hash = "sha256:3c2b77f295edb9fcdb6a250f83e6481c679335ca7e6e4a955e4290350f2d22a4"}, - {file = "coverage-7.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:427e1e627b0963ac02d7c8730ca6d935df10280d230508c0ba059505e9233475"}, - {file = "coverage-7.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9dd88fce54abbdbf4c42fb1fea0e498973d07816f24c0e27a1ecaf91883ce69e"}, - {file = "coverage-7.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a898c11dca8f8c97b467138004a30133974aacd572818c383596f8d5b2eb04a9"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07dfdd492d645eea1bd70fb1d6febdcf47db178b0d99161d8e4eed18e7f62fe7"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3d117890b6eee85887b1eed41eefe2e598ad6e40523d9f94c4c4b213258e4a4"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6afd2e84e7da40fe23ca588379f815fb6dbbb1b757c883935ed11647205111cb"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9960dd1891b2ddf13a7fe45339cd59ecee3abb6b8326d8b932d0c5da208104f"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ced268e82af993d7801a9db2dbc1d2322e786c5dc76295d8e89473d46c6b84d4"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7c211f25777746d468d76f11719e64acb40eed410d81c26cefac641975beb88"}, - {file = "coverage-7.5.0-cp38-cp38-win32.whl", hash = "sha256:262fffc1f6c1a26125d5d573e1ec379285a3723363f3bd9c83923c9593a2ac25"}, - {file = "coverage-7.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:eed462b4541c540d63ab57b3fc69e7d8c84d5957668854ee4e408b50e92ce26a"}, - {file = "coverage-7.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0194d654e360b3e6cc9b774e83235bae6b9b2cac3be09040880bb0e8a88f4a1"}, - {file = "coverage-7.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33c020d3322662e74bc507fb11488773a96894aa82a622c35a5a28673c0c26f5"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbdf2cae14a06827bec50bd58e49249452d211d9caddd8bd80e35b53cb04631"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3235d7c781232e525b0761730e052388a01548bd7f67d0067a253887c6e8df46"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2de4e546f0ec4b2787d625e0b16b78e99c3e21bc1722b4977c0dddf11ca84e"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0e206259b73af35c4ec1319fd04003776e11e859936658cb6ceffdeba0f5be"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2055c4fb9a6ff624253d432aa471a37202cd8f458c033d6d989be4499aed037b"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075299460948cd12722a970c7eae43d25d37989da682997687b34ae6b87c0ef0"}, - {file = "coverage-7.5.0-cp39-cp39-win32.whl", hash = "sha256:280132aada3bc2f0fac939a5771db4fbb84f245cb35b94fae4994d4c1f80dae7"}, - {file = "coverage-7.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:c58536f6892559e030e6924896a44098bc1290663ea12532c78cef71d0df8493"}, - {file = "coverage-7.5.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:2b57780b51084d5223eee7b59f0d4911c31c16ee5aa12737c7a02455829ff067"}, - {file = "coverage-7.5.0.tar.gz", hash = "sha256:cf62d17310f34084c59c01e027259076479128d11e4661bb6c9acb38c5e19bb8"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "distlib" -version = "0.3.8" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, -] - -[[package]] -name = "docstring-parser-fork" -version = "0.0.9" -description = "Parse Python docstrings in reST, Google and Numpydoc format" -optional = false -python-versions = "<4.0,>=3.7" -files = [ - {file = "docstring_parser_fork-0.0.9-py3-none-any.whl", hash = "sha256:0be85ad00cb25bf5beeb673e46e777facf0f47552fa3a7570d120ef7e3374401"}, - {file = "docstring_parser_fork-0.0.9.tar.gz", hash = "sha256:95b23cc5092af85080c716a6da68360f5ae4fcffa75f4a3aca5e539783cbcc3d"}, -] - -[[package]] -name = "dparse" -version = "0.6.3" -description = "A parser for Python dependency files" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318"}, - {file = "dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528"}, -] - -[package.dependencies] -packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} - -[package.extras] -conda = ["pyyaml"] -pipenv = ["pipenv (<=2022.12.19)"] - -[[package]] -name = "exceptiongroup" -version = "1.2.1" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "filelock" -version = "3.14.0" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, - {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] - -[[package]] -name = "identify" -version = "2.6.1" -description = "File identification library for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, - {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.7" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, -] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "jsonschema" -version = "4.23.0" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, - {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -jsonschema-specifications = ">=2023.03.6" -referencing = ">=0.28.4" -rpds-py = ">=0.7.1" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.12.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, - {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, -] - -[package.dependencies] -referencing = ">=0.31.0" - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mypy" -version = "1.0.1" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, - {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, - {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, - {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, - {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, - {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, - {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, - {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, - {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, - {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, - {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, - {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, - {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, - {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, - {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, - {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, - {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, - {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, - {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, - {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, -] - -[package.dependencies] -mypy-extensions = ">=0.4.3" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=3.10" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -python2 = ["typed-ast (>=1.4.0,<2)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "0.4.4" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -optional = false -python-versions = ">=2.7" -files = [ - {file = "mypy_extensions-0.4.4.tar.gz", hash = "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -description = "Node.js virtual environment builder" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "numpy" -version = "1.26.4" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, -] - -[[package]] -name = "packaging" -version = "24.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, -] - -[[package]] -name = "pbr" -version = "6.0.0" -description = "Python Build Reasonableness" -optional = false -python-versions = ">=2.6" -files = [ - {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, - {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, -] - -[[package]] -name = "platformdirs" -version = "4.2.1" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, - {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "2.21.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, - {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "prompt-toolkit" -version = "3.0.48" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "py-cpuinfo" -version = "9.0.0" -description = "Get CPU info with pure Python" -optional = false -python-versions = "*" -files = [ - {file = "py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"}, - {file = "py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"}, -] - -[[package]] -name = "pydantic" -version = "2.7.1" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, - {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, -] - -[package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.18.2" -typing-extensions = ">=4.6.1" - -[package.extras] -email = ["email-validator (>=2.0.0)"] - -[[package]] -name = "pydantic-core" -version = "2.18.2" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, - {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, - {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, - {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, - {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, - {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, - {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, - {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, - {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, - {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, - {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, - {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, - {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, - {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pydantic-settings" -version = "2.2.1" -description = "Settings management using Pydantic" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic_settings-2.2.1-py3-none-any.whl", hash = "sha256:0235391d26db4d2190cb9b31051c4b46882d28a51533f97440867f012d4da091"}, - {file = "pydantic_settings-2.2.1.tar.gz", hash = "sha256:00b9f6a5e95553590434c0fa01ead0b216c3e10bc54ae02e37f359948643c5ed"}, -] - -[package.dependencies] -pydantic = ">=2.3.0" -python-dotenv = ">=0.21.0" - -[package.extras] -toml = ["tomli (>=2.0.1)"] -yaml = ["pyyaml (>=6.0.1)"] - -[[package]] -name = "pydoclint" -version = "0.5.9" -description = "A Python docstring linter that checks arguments, returns, yields, and raises sections" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydoclint-0.5.9-py2.py3-none-any.whl", hash = "sha256:089327003cef6fe5605cbaa9887859ea5229ce0c9abb52775ffd57513094c1ae"}, - {file = "pydoclint-0.5.9.tar.gz", hash = "sha256:e200f964a5d9fbbb2ff1078bd7cb5433a0564d2482b6a1ba1be848f66bc4924f"}, -] - -[package.dependencies] -click = ">=8.1.0" -docstring-parser-fork = ">=0.0.9" -tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -flake8 = ["flake8 (>=4)"] - -[[package]] -name = "pydocstyle" -version = "6.3.0" -description = "Python docstring style checker" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, - {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, -] - -[package.dependencies] -snowballstemmer = ">=2.2.0" -tomli = {version = ">=1.2.3", optional = true, markers = "python_version < \"3.11\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli (>=1.2.3)"] - -[[package]] -name = "pygments" -version = "2.17.2" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, -] - -[package.extras] -plugins = ["importlib-metadata"] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pystac" -version = "1.10.0" -description = "Python library for working with the SpatioTemporal Asset Catalog (STAC) specification" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pystac-1.10.0-py3-none-any.whl", hash = "sha256:2d1eb969abc7e13e2bdb4bb5ae1a68780da1e06f30f66fcf0d4143f51eb03f38"}, - {file = "pystac-1.10.0.tar.gz", hash = "sha256:e2762a700953ae9bab914137116cea31e08378f6c7024d805d651009a6341e20"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" - -[package.extras] -bench = ["asv (>=0.6.0,<0.7.0)", "packaging (>=24.0,<25.0)", "virtualenv (>=20.22,<21.0)"] -docs = ["Sphinx (>=6.2,<7.0)", "boto3 (>=1.28,<2.0)", "ipython (>=8.12,<9.0)", "jinja2 (<4.0)", "jupyter (>=1.0,<2.0)", "nbsphinx (>=0.9.0,<0.10.0)", "pydata-sphinx-theme (>=0.13,<1.0)", "rasterio (>=1.3,<2.0)", "shapely (>=2.0,<3.0)", "sphinx-autobuild (==2024.2.4)", "sphinx-design (>=0.5.0,<0.6.0)", "sphinxcontrib-fulltoc (>=1.2,<2.0)"] -jinja2 = ["jinja2 (<4.0)"] -orjson = ["orjson (>=3.5)"] -test = ["black (>=24.0,<25.0)", "codespell (>=2.2,<3.0)", "coverage (>=7.2,<8.0)", "doc8 (>=1.1,<2.0)", "html5lib (>=1.1,<2.0)", "jinja2 (<4.0)", "jsonschema (>=4.18,<5.0)", "mypy (>=1.2,<2.0)", "orjson (>=3.8,<4.0)", "pre-commit (>=3.2,<4.0)", "pytest (>=8.0,<9.0)", "pytest-cov (>=5.0,<6.0)", "pytest-mock (>=3.10,<4.0)", "pytest-recording (>=0.13.0,<0.14.0)", "requests-mock (>=1.11,<2.0)", "ruff (==0.3.4)", "types-html5lib (>=1.1,<2.0)", "types-jsonschema (>=4.18,<5.0)", "types-orjson (>=3.6,<4.0)", "types-python-dateutil (>=2.8,<3.0)", "types-urllib3 (>=1.26,<2.0)"] -urllib3 = ["urllib3 (>=1.26)"] -validation = ["jsonschema (>=4.18,<5.0)"] - -[[package]] -name = "pytest" -version = "7.4.4" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-benchmark" -version = "4.0.0" -description = "A ``pytest`` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-benchmark-4.0.0.tar.gz", hash = "sha256:fb0785b83efe599a6a956361c0691ae1dbb5318018561af10f3e915caa0048d1"}, - {file = "pytest_benchmark-4.0.0-py3-none-any.whl", hash = "sha256:fdb7db64e31c8b277dff9850d2a2556d8b60bcb0ea6524e36e28ffd7c87f71d6"}, -] - -[package.dependencies] -py-cpuinfo = "*" -pytest = ">=3.8" - -[package.extras] -aspect = ["aspectlib"] -elasticsearch = ["elasticsearch"] -histogram = ["pygal", "pygaljs"] - -[[package]] -name = "pytest-click" -version = "1.1.0" -description = "Pytest plugin for Click" -optional = false -python-versions = "*" -files = [ - {file = "pytest_click-1.1.0-py3-none-any.whl", hash = "sha256:eade4742c2f02c345e78a32534a43e8db04acf98d415090539dacc880b7cd0e9"}, - {file = "pytest_click-1.1.0.tar.gz", hash = "sha256:fdd9f6721f877dda021e7c5dc73e70aecd37e5ed23ec6820f8a7b3fd7b4f8d30"}, -] - -[package.dependencies] -click = ">=6.0" -pytest = ">=5.0" - -[[package]] -name = "pytest-cov" -version = "4.1.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-mock" -version = "3.14.0" -description = "Thin-wrapper around the mock package for easier use with pytest" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, - {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, -] - -[package.dependencies] -pytest = ">=6.2.5" - -[package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] - -[[package]] -name = "pytest-pikachu" -version = "1.0.0" -description = "Show surprise when tests are passing" -optional = false -python-versions = "*" -files = [ - {file = "pytest-pikachu-1.0.0.tar.gz", hash = "sha256:8acd13fdc51491e86aff5106cfaa31f80f4584ac41dcc3ae512d471c18333fd7"}, - {file = "pytest_pikachu-1.0.0-py3-none-any.whl", hash = "sha256:c20cfe20a84978e11e69af24f7a9d07beb90cbca805ae5011e2061c14a486eb6"}, -] - -[package.dependencies] -pytest = "*" - -[[package]] -name = "pytest-sugar" -version = "0.9.7" -description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." -optional = false -python-versions = "*" -files = [ - {file = "pytest-sugar-0.9.7.tar.gz", hash = "sha256:f1e74c1abfa55f7241cf7088032b6e378566f16b938f3f08905e2cf4494edd46"}, - {file = "pytest_sugar-0.9.7-py2.py3-none-any.whl", hash = "sha256:8cb5a4e5f8bbcd834622b0235db9e50432f4cbd71fef55b467fe44e43701e062"}, -] - -[package.dependencies] -packaging = ">=21.3" -pytest = ">=6.2.0" -termcolor = ">=2.1.0" - -[package.extras] -dev = ["black", "flake8", "pre-commit"] - -[[package]] -name = "pytest-timeout" -version = "2.3.1" -description = "pytest plugin to abort hanging tests" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-timeout-2.3.1.tar.gz", hash = "sha256:12397729125c6ecbdaca01035b9e5239d4db97352320af155b3f5de1ba5165d9"}, - {file = "pytest_timeout-2.3.1-py3-none-any.whl", hash = "sha256:68188cb703edfc6a18fad98dc25a3c61e9f24d644b0b70f33af545219fc7813e"}, -] - -[package.dependencies] -pytest = ">=7.0.0" - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.0.1" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, - {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "questionary" -version = "1.10.0" -description = "Python library to build pretty command line user prompts ⭐️" -optional = false -python-versions = ">=3.6,<4.0" -files = [ - {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, - {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, -] - -[package.dependencies] -prompt_toolkit = ">=2.0,<4.0" - -[package.extras] -docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] - -[[package]] -name = "referencing" -version = "0.35.1" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, - {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rich" -version = "13.8.1" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, - {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "rich-click" -version = "1.8.0" -description = "Format click help output nicely with rich" -optional = false -python-versions = ">=3.7" -files = [ - {file = "rich_click-1.8.0-py3-none-any.whl", hash = "sha256:846f504eb83a948d864888b2d73c71e52c310490c2babceac57e388aead086e2"}, - {file = "rich_click-1.8.0.tar.gz", hash = "sha256:f8cad0d67d286d6cd6fc9f69f2d6f25c6c4c2d99fb9d6cb3b8987b593dbe6fa8"}, -] - -[package.dependencies] -click = ">=7" -rich = ">=10.7" -typing-extensions = "*" - -[package.extras] -dev = ["mypy", "packaging", "pre-commit", "pytest", "pytest-cov", "rich-codex", "ruff", "types-setuptools"] -docs = ["markdown-include", "mkdocs", "mkdocs-glightbox", "mkdocs-material-extensions", "mkdocs-material[imaging] (>=9.5.18,<9.6.0)", "mkdocs-rss-plugin", "mkdocstrings[python]", "rich-codex"] - -[[package]] -name = "rpds-py" -version = "0.18.0" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, - {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, - {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, - {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, - {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, - {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, - {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, - {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, - {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, - {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, - {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, - {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, - {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, -] - -[[package]] -name = "ruamel-yaml" -version = "0.18.6" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, - {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} - -[package.extras] -docs = ["mercurial (>5.7)", "ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.8" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.6" -files = [ - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, - {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, - {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, -] - -[[package]] -name = "ruff" -version = "0.2.2" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0a9efb032855ffb3c21f6405751d5e147b0c6b631e3ca3f6b20f917572b97eb6"}, - {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d450b7fbff85913f866a5384d8912710936e2b96da74541c82c1b458472ddb39"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecd46e3106850a5c26aee114e562c329f9a1fbe9e4821b008c4404f64ff9ce73"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e22676a5b875bd72acd3d11d5fa9075d3a5f53b877fe7b4793e4673499318ba"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1695700d1e25a99d28f7a1636d85bafcc5030bba9d0578c0781ba1790dbcf51c"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b0c232af3d0bd8f521806223723456ffebf8e323bd1e4e82b0befb20ba18388e"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f63d96494eeec2fc70d909393bcd76c69f35334cdbd9e20d089fb3f0640216ca"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a61ea0ff048e06de273b2e45bd72629f470f5da8f71daf09fe481278b175001"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1439c8f407e4f356470e54cdecdca1bd5439a0673792dbe34a2b0a551a2fe3"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:940de32dc8853eba0f67f7198b3e79bc6ba95c2edbfdfac2144c8235114d6726"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c126da55c38dd917621552ab430213bdb3273bb10ddb67bc4b761989210eb6e"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3b65494f7e4bed2e74110dac1f0d17dc8e1f42faaa784e7c58a98e335ec83d7e"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1ec49be4fe6ddac0503833f3ed8930528e26d1e60ad35c2446da372d16651ce9"}, - {file = "ruff-0.2.2-py3-none-win32.whl", hash = "sha256:d920499b576f6c68295bc04e7b17b6544d9d05f196bb3aac4358792ef6f34325"}, - {file = "ruff-0.2.2-py3-none-win_amd64.whl", hash = "sha256:cc9a91ae137d687f43a44c900e5d95e9617cb37d4c989e462980ba27039d239d"}, - {file = "ruff-0.2.2-py3-none-win_arm64.whl", hash = "sha256:c9d15fc41e6054bfc7200478720570078f0b41c9ae4f010bcc16bd6f4d1aacdd"}, - {file = "ruff-0.2.2.tar.gz", hash = "sha256:e62ed7f36b3068a30ba39193a14274cd706bc486fad521276458022f7bccb31d"}, -] - -[[package]] -name = "safety" -version = "2.3.4" -description = "Checks installed dependencies for known vulnerabilities and licenses." -optional = false -python-versions = "*" -files = [ - {file = "safety-2.3.4-py3-none-any.whl", hash = "sha256:6224dcd9b20986a2b2c5e7acfdfba6bca42bb11b2783b24ed04f32317e5167ea"}, - {file = "safety-2.3.4.tar.gz", hash = "sha256:b9e74e794e82f54d11f4091c5d820c4d2d81de9f953bf0b4f33ac8bc402ae72c"}, -] - -[package.dependencies] -Click = ">=8.0.2" -dparse = ">=0.6.2" -packaging = ">=21.0" -requests = "*" -"ruamel.yaml" = ">=0.17.21" -setuptools = ">=19.3" - -[package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] -gitlab = ["python-gitlab (>=1.3.0)"] - -[[package]] -name = "setuptools" -version = "69.5.1" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "shapely" -version = "2.0.4" -description = "Manipulation and analysis of geometric objects" -optional = false -python-versions = ">=3.7" -files = [ - {file = "shapely-2.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:011b77153906030b795791f2fdfa2d68f1a8d7e40bce78b029782ade3afe4f2f"}, - {file = "shapely-2.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9831816a5d34d5170aa9ed32a64982c3d6f4332e7ecfe62dc97767e163cb0b17"}, - {file = "shapely-2.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c4849916f71dc44e19ed370421518c0d86cf73b26e8656192fcfcda08218fbd"}, - {file = "shapely-2.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841f93a0e31e4c64d62ea570d81c35de0f6cea224568b2430d832967536308e6"}, - {file = "shapely-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b4431f522b277c79c34b65da128029a9955e4481462cbf7ebec23aab61fc58"}, - {file = "shapely-2.0.4-cp310-cp310-win32.whl", hash = "sha256:92a41d936f7d6743f343be265ace93b7c57f5b231e21b9605716f5a47c2879e7"}, - {file = "shapely-2.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:30982f79f21bb0ff7d7d4a4e531e3fcaa39b778584c2ce81a147f95be1cd58c9"}, - {file = "shapely-2.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de0205cb21ad5ddaef607cda9a3191eadd1e7a62a756ea3a356369675230ac35"}, - {file = "shapely-2.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7d56ce3e2a6a556b59a288771cf9d091470116867e578bebced8bfc4147fbfd7"}, - {file = "shapely-2.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:58b0ecc505bbe49a99551eea3f2e8a9b3b24b3edd2a4de1ac0dc17bc75c9ec07"}, - {file = "shapely-2.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:790a168a808bd00ee42786b8ba883307c0e3684ebb292e0e20009588c426da47"}, - {file = "shapely-2.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4310b5494271e18580d61022c0857eb85d30510d88606fa3b8314790df7f367d"}, - {file = "shapely-2.0.4-cp311-cp311-win32.whl", hash = "sha256:63f3a80daf4f867bd80f5c97fbe03314348ac1b3b70fb1c0ad255a69e3749879"}, - {file = "shapely-2.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:c52ed79f683f721b69a10fb9e3d940a468203f5054927215586c5d49a072de8d"}, - {file = "shapely-2.0.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5bbd974193e2cc274312da16b189b38f5f128410f3377721cadb76b1e8ca5328"}, - {file = "shapely-2.0.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:41388321a73ba1a84edd90d86ecc8bfed55e6a1e51882eafb019f45895ec0f65"}, - {file = "shapely-2.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0776c92d584f72f1e584d2e43cfc5542c2f3dd19d53f70df0900fda643f4bae6"}, - {file = "shapely-2.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c75c98380b1ede1cae9a252c6dc247e6279403fae38c77060a5e6186c95073ac"}, - {file = "shapely-2.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3e700abf4a37b7b8b90532fa6ed5c38a9bfc777098bc9fbae5ec8e618ac8f30"}, - {file = "shapely-2.0.4-cp312-cp312-win32.whl", hash = "sha256:4f2ab0faf8188b9f99e6a273b24b97662194160cc8ca17cf9d1fb6f18d7fb93f"}, - {file = "shapely-2.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:03152442d311a5e85ac73b39680dd64a9892fa42bb08fd83b3bab4fe6999bfa0"}, - {file = "shapely-2.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:994c244e004bc3cfbea96257b883c90a86e8cbd76e069718eb4c6b222a56f78b"}, - {file = "shapely-2.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05ffd6491e9e8958b742b0e2e7c346635033d0a5f1a0ea083547fcc854e5d5cf"}, - {file = "shapely-2.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbdc1140a7d08faa748256438291394967aa54b40009f54e8d9825e75ef6113"}, - {file = "shapely-2.0.4-cp37-cp37m-win32.whl", hash = "sha256:5af4cd0d8cf2912bd95f33586600cac9c4b7c5053a036422b97cfe4728d2eb53"}, - {file = "shapely-2.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:464157509ce4efa5ff285c646a38b49f8c5ef8d4b340f722685b09bb033c5ccf"}, - {file = "shapely-2.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:489c19152ec1f0e5c5e525356bcbf7e532f311bff630c9b6bc2db6f04da6a8b9"}, - {file = "shapely-2.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b79bbd648664aa6f44ef018474ff958b6b296fed5c2d42db60078de3cffbc8aa"}, - {file = "shapely-2.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:674d7baf0015a6037d5758496d550fc1946f34bfc89c1bf247cabdc415d7747e"}, - {file = "shapely-2.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cd4ccecc5ea5abd06deeaab52fcdba372f649728050c6143cc405ee0c166679"}, - {file = "shapely-2.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb5cdcbbe3080181498931b52a91a21a781a35dcb859da741c0345c6402bf00c"}, - {file = "shapely-2.0.4-cp38-cp38-win32.whl", hash = "sha256:55a38dcd1cee2f298d8c2ebc60fc7d39f3b4535684a1e9e2f39a80ae88b0cea7"}, - {file = "shapely-2.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:ec555c9d0db12d7fd777ba3f8b75044c73e576c720a851667432fabb7057da6c"}, - {file = "shapely-2.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9103abd1678cb1b5f7e8e1af565a652e036844166c91ec031eeb25c5ca8af0"}, - {file = "shapely-2.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:263bcf0c24d7a57c80991e64ab57cba7a3906e31d2e21b455f493d4aab534aaa"}, - {file = "shapely-2.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ddf4a9bfaac643e62702ed662afc36f6abed2a88a21270e891038f9a19bc08fc"}, - {file = "shapely-2.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:485246fcdb93336105c29a5cfbff8a226949db37b7473c89caa26c9bae52a242"}, - {file = "shapely-2.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8de4578e838a9409b5b134a18ee820730e507b2d21700c14b71a2b0757396acc"}, - {file = "shapely-2.0.4-cp39-cp39-win32.whl", hash = "sha256:9dab4c98acfb5fb85f5a20548b5c0abe9b163ad3525ee28822ffecb5c40e724c"}, - {file = "shapely-2.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:31c19a668b5a1eadab82ff070b5a260478ac6ddad3a5b62295095174a8d26398"}, - {file = "shapely-2.0.4.tar.gz", hash = "sha256:5dc736127fac70009b8d309a0eeb74f3e08979e530cf7017f2f507ef62e6cfb8"}, -] - -[package.dependencies] -numpy = ">=1.14,<3" - -[package.extras] -docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] -test = ["pytest", "pytest-cov"] - -[[package]] -name = "shellingham" -version = "1.5.4" -description = "Tool to Detect Surrounding Shell" -optional = false -python-versions = ">=3.7" -files = [ - {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, - {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, -] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -optional = false -python-versions = "*" -files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] - -[[package]] -name = "stevedore" -version = "5.3.0" -description = "Manage dynamic plugins for Python applications" -optional = false -python-versions = ">=3.8" -files = [ - {file = "stevedore-5.3.0-py3-none-any.whl", hash = "sha256:1efd34ca08f474dad08d9b19e934a22c68bb6fe416926479ba29e5013bcc8f78"}, - {file = "stevedore-5.3.0.tar.gz", hash = "sha256:9a64265f4060312828151c204efbe9b7a9852a0d9228756344dbc7e4023e375a"}, -] - -[package.dependencies] -pbr = ">=2.0.0" - -[[package]] -name = "termcolor" -version = "2.4.0" -description = "ANSI color formatting for output in terminal" -optional = false -python-versions = ">=3.8" -files = [ - {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, - {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, -] - -[package.extras] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.12.4" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, - {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, -] - -[[package]] -name = "typer" -version = "0.9.4" -description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -optional = false -python-versions = ">=3.6" -files = [ - {file = "typer-0.9.4-py3-none-any.whl", hash = "sha256:aa6c4a4e2329d868b80ecbaf16f807f2b54e192209d7ac9dd42691d63f7a54eb"}, - {file = "typer-0.9.4.tar.gz", hash = "sha256:f714c2d90afae3a7929fcd72a3abb08df305e1ff61719381384211c4070af57f"}, -] - -[package.dependencies] -click = ">=7.1.1,<9.0.0" -colorama = {version = ">=0.4.3,<0.5.0", optional = true, markers = "extra == \"all\""} -rich = {version = ">=10.11.0,<14.0.0", optional = true, markers = "extra == \"all\""} -shellingham = {version = ">=1.3.0,<2.0.0", optional = true, markers = "extra == \"all\""} -typing-extensions = ">=3.7.4.3" - -[package.extras] -all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] -dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] -doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] -test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.971)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] - -[[package]] -name = "typing-extensions" -version = "4.11.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, -] - -[[package]] -name = "urllib3" -version = "2.2.1" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "virtualenv" -version = "20.26.1" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.26.1-py3-none-any.whl", hash = "sha256:7aa9982a728ae5892558bff6a2839c00b9ed145523ece2274fad6f414690ae75"}, - {file = "virtualenv-20.26.1.tar.gz", hash = "sha256:604bfdceaeece392802e6ae48e69cec49168b9c5f4a44e483963f9242eb0e78b"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<5" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - -[[package]] -name = "wcmatch" -version = "10.0" -description = "Wildcard/glob file name matcher." -optional = false -python-versions = ">=3.8" -files = [ - {file = "wcmatch-10.0-py3-none-any.whl", hash = "sha256:0dd927072d03c0a6527a20d2e6ad5ba8d0380e60870c383bc533b71744df7b7a"}, - {file = "wcmatch-10.0.tar.gz", hash = "sha256:e72f0de09bba6a04e0de70937b0cf06e55f36f37b3deb422dfaf854b867b840a"}, -] - -[package.dependencies] -bracex = ">=2.1.1" - -[[package]] -name = "wcwidth" -version = "0.2.13" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -files = [ - {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, - {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, -] - -[metadata] -lock-version = "2.0" -python-versions = "^3.10" -content-hash = "f0d33ddfca67a2ee9ccb540858cacf1574705e3d7a32a298f401e3bebcde9a63" From 903c979fbce5e7465142992197d28ea2e8303088 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Thu, 31 Oct 2024 17:14:26 -0400 Subject: [PATCH 12/83] update JSON schema and docs about scaling field instead of various norm_... fields --- CHANGELOG.md | 19 +++-- README.md | 107 +++++++++++++++-------- json-schema/schema.json | 182 +++++++++++++++++++++++++++++++++------- 3 files changed, 237 insertions(+), 71 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4651778..50951dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,18 +8,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/stac-extensions/mlm/tree/main) ### Added -- Add explicit check of `statitics` sub-fields `minimum`, `maximum`, `mean` and `stddev` for corresponding `norm_type` - values `min-max` and `z-score` that depend on it. Other `norm_type` values are ignored. Additional `statistics` - properties not directly required by the specific `norm_type` are also ignored. +- Add explicit check of `scaling` sub-fields `minimum`, `maximum`, `mean`, `stddev`, etc. for corresponding `type` + values `min-max` and `z-score` that depend on it. +- Allow different `scaling` operations per band/channel/dimension as needed by the model. +- Allow a `processing:expression` for a band/channel/dimension-specific `scaling` operation, granting more flexibility + in the definition of input preparation in contrast to having it applied for the entire input (but still possible). ### Changed -- n/a +- Moved `norm_type` to `scaling` object to better reflect the expected operation, which could be another operation + than what is typically known as "normalization" or "standardization" techniques in machine learning. +- Moved `statistics` to `scaling` object to better reflect their mutual `type` and additional properties dependencies. ### Deprecated - n/a ### Removed -- n/a +- Removed `norm_type` enum values that were ambiguous regarding their expected result. + Instead, a `processing:expression` should be employed to explicitly define the calculation they represent. +- Removed `norm_clip` property. It is now represented under `scaling` objects with a corresponding `type` definition. +- Removed `norm_by_channel` from `mlm:input` objects. If rescaling (previously normalization in the documentation) + is a single value, broadcasting to the relevant bands should be performed implicitly. + Otherwise, the amount of `scaling` objects should match the number of bands or channels involved in the input. ### Fixed - n/a diff --git a/README.md b/README.md index dce0f89..6d246b9 100644 --- a/README.md +++ b/README.md @@ -255,18 +255,15 @@ set to `true`, there would be no `accelerator` to contain against. To avoid conf ### Model Input Object -| Field Name | Type | Description | -|-------------------------|---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| name | string | **REQUIRED** Name of the input variable defined by the model. If no explicit name is defined by the model, an informative name (e.g.: `"RGB Time Series"`) can be used instead. | -| bands | \[string \| [Model Band Object](#model-band-object)] | **REQUIRED** The raster band references used to train, fine-tune or perform inference with the model, which may be all or a subset of bands available in a STAC Item's [Band Object](#bands-and-statistics). If no band applies for one input, use an empty array. | -| input | [Input Structure Object](#input-structure-object) | **REQUIRED** The N-dimensional array definition that describes the shape, dimension ordering, and data type. | -| description | string | Additional details about the input such as describing its purpose or expected source that cannot be represented by other properties. | -| norm_by_channel | boolean | Whether to normalize each channel by channel-wise statistics or to normalize by dataset statistics. If True, use an array of `statistics` of same dimensionality and order as the `bands` field in this object. | -| norm_type | [Normalize Enum](#normalize-enum) \| null | Normalization method. Select an appropriate option or `null` when none applies. Consider using `pre_processing_function` for custom implementations or more complex combinations. | -| norm_clip | \[number] | When `norm_type = "clip"`, this array supplies the value for each `bands` item, which is used to divide each band before clipping values between 0 and 1. | -| resize_type | [Resize Enum](#resize-enum) \| null | High-level descriptor of the rescaling method to change image shape. Select an appropriate option or `null` when none applies. Consider using `pre_processing_function` for custom implementations or more complex combinations. | -| statistics | \[[Statistics Object](#bands-and-statistics)] | Dataset statistics for the training dataset used to normalize the inputs. | -| pre_processing_function | [Processing Expression](#processing-expression) \| null | Custom preprocessing function where normalization and rescaling, and any other significant operations takes place. The `pre_processing_function` should be applied over all available `bands`. For respective band operations, see [Model Band Object](#model-band-object). | +| Field Name | Type | Description | +|-------------------------|---------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| name | string | **REQUIRED** Name of the input variable defined by the model. If no explicit name is defined by the model, an informative name (e.g.: `"RGB Time Series"`) can be used instead. | +| bands | \[string \| [Model Band Object](#model-band-object)] | **REQUIRED** The raster band references used to train, fine-tune or perform inference with the model, which may be all or a subset of bands available in a STAC Item's [Band Object](#bands-and-statistics). If no band applies for one input, use an empty array. | +| input | [Input Structure Object](#input-structure-object) | **REQUIRED** The N-dimensional array definition that describes the shape, dimension ordering, and data type. | +| description | string | Additional details about the input such as describing its purpose or expected source that cannot be represented by other properties. | +| scaling | \[[Scaling Object](#bands-and-statistics)] \| null | Method to scale, normalize, or standardize the data inputs, or `null` if none applies. These values often correspond to dataset or sensor statistics employed for training the model, but can come from another source as needed by the model definition. Consider using `pre_processing_function` for custom implementations or more complex combinations. | +| resize_type | [Resize Enum](#resize-enum) \| null | High-level descriptor of the rescaling method to change image shape. Select an appropriate option or `null` when none applies. Consider using `pre_processing_function` for custom implementations or more complex combinations. | +| pre_processing_function | [Processing Expression](#processing-expression) \| null | Custom preprocessing function where normalization and rescaling, and any other significant operations takes place. The `pre_processing_function` should be applied over all available `bands`. For respective band operations, see [Model Band Object](#model-band-object). | Fields that accept the `null` value can be considered `null` when omitted entirely for parsing purposes. However, setting `null` explicitly when this information is known by the model provider can help users understand @@ -319,13 +316,26 @@ An input's `bands` definition can either be a plain `string` or a [Model Band Ob When a `string` is employed directly, the value should be implicitly mapped to the `name` property of the explicit object representation. -One distinction from the [STAC 1.1 - Band Object][stac-1.1-band] in MLM is that [Statistics][stac-1.1-stats] object +One distinction from the [STAC 1.1 - Band Object][stac-1.1-band] in MLM is that [Band Statistics][stac-1.1-stats] object (or the corresponding [STAC Raster - Statistics][stac-raster-stats] for STAC 1.0) are not defined at the "Band Object" level, but at the [Model Input](#model-input-object) level. This is because, in machine learning, it is common to need overall statistics for the dataset used to train the model to normalize all bands, rather than normalizing the values over a single product. Furthermore, statistics could be applied differently for distinct [Model Input](#model-input-object) definitions, in order to adjust for intrinsic -properties of the model. +properties of the model. + +Another distinction is that, depending on the model, statistics could apply to some inputs that have no reference to +any `bands` definition. In such case, defining statistics under `bands` would not be possible, or would intrude +ambiguous definitions. + +Finally, contrary to the "`statistics`" property name employed by [Band Statistics][stac-1.1-stats], MLM employs the +distinct name `scaling`, although similar `minimum`, `maximum`, etc. sub-fields are employed. +This is done explicitly to disambiguate "informative" band statistics from "applied scaling operations" required +by the model inputs. This highlights the fact that `scaling` are not *necessarily* equal +to [Band Statistics][stac-1.1-stats] values, although they are often equal in practice due to the applicable +value-range domains they represent. Also, this allows addressing special scaling cases, using additional properties +unavailable from [Band Statistics][stac-1.1-stats], such as `value`-specific scaling +(see [Scaling Object](#scaling-object) for more details). [stac-1.1-band]: https://github.com/radiantearth/stac-spec/blob/v1.1.0/commons/common-metadata.md#bands [stac-1.1-stats]: https://github.com/radiantearth/stac-spec/blob/v1.1.0/commons/common-metadata.md#statistics-object @@ -406,32 +416,55 @@ Below are some notable common names recommended for use, but others can be emplo For example, a tensor of multiple RBG images represented as $B \times C \times H \times W$ should indicate `dim_order = ["batch", "channel", "height", "width"]`. -#### Normalize Enum +#### Scaling Object Select one option from: -- `min-max` -- `z-score` -- `l1` -- `l2` -- `l2sqr` -- `hamming` -- `hamming2` -- `type-mask` -- `relative` -- `inf` -- `clip` - -See [OpenCV - Normalization Flags][opencv-normalization-flags] -for details about the relevant methods. Equivalent methods from other packages are applicable as well. -When a normalization technique is specified, it is expected that the corresponding [Statistics](#bands-and-statistics) -parameters necessary to perform it would be provided for the corresponding input. -For example, the `min-max` normalization would require that at least the `minimum` and `maximum` statistic properties -are provided, while the `z-score` would require `mean` and `stddev`. +| `type`
([Scaling Enum](#scaling-enum)) | Required Properties | Scaling Operation | +|-------------------------------------------|-------------------------------------------------|------------------------------------------| +| `min-max` | `minimum`, `maximum` | $(data - minimum) / (maximum - minimum)$ | +| `z-score` | `mean`, `stddev` | $(data - mean) / stddev$ | +| `clip` | `minimum`, `maximum` | $\min(\max(data, minimum), maximum)$ | +| `clip-min` | `minimum` | $\max(data, minimum)$ | +| `clip-max` | `maximum` | $\min(data, maximum)$ | +| `offset` | `value` | $data - value$ | +| `scale` | `value` | $data / value$ | +| `processing` | [Processing Expression](#processing-expression) | *according to `processing:expression`* | + +When a scaling `type` approach is specified, it is expected that the parameters necessary +to perform their calculation are provided for the corresponding input dimension data. + +If none of the above values applies for a given dimension, `type: null` (literal `null`, not string) should be +used instead. If none of the input dimension require scaling, the entire definition can be defined as `scaling: null` +or be omitted entirely. + +When `scaling` is specified, the amount of objects defined in the array must match the size of +the bands/channels/dimensions described by the [Model Input](#model-input-object). However, the `scaling` array +is allowed to contain a single object if the entire input must be rescaled using the same definition across all +dimensions. In such case, implicit broadcasting of the unique [Scaling Object](#scaling-object) should be +performed for all applicable dimensions when running inference with the model. + +If a custom scaling operation, or a combination of more complex operations (with or without [Resize](#resize-enum)), +must be defined instead, a [Processing Expression](#processing-expression) reference can be specified in place of +the [Scaling Object](#scaling-object) of the respective input dimension, as shown below. -If none of the above values applies, `null` (literal, not string) can be used instead. -If a custom normalization operation, or a combination of operations (with or without [Resize](#resize-enum)), -must be defined instead, consider using a [Processing Expression](#processing-expression) reference. +```json +{ + "scaling": [ + {"type": "min-max", "minimum": 0, "maximum": 255}, + {"type": "clip", "minimum": 0, "maximum": 255}, + {"type": "processing", "format": "gdal-calc", "expression": "A * logical_or( A<=177, A>=185 )"} + ] +} +``` + +For operations such as L1 or L2 normalization, a [Processing Expression](#processing-expression) should also be employed. +This is because, depending on the [Model Input](#model-input-object) dimensions and reference data, there is an +ambiguity regarding "how" and "where" such normalization functions must be applied against the input data. +A custom mathematical expression should provide explicitly the data manipulation and normalization strategy. + +In situations of very complex `scaling` operations, which cannot be represented by any of the previous definition, +a `pre_processing_function` should be used instead (see [Model Input Object](#model-input-object)). [opencv-normalization-flags]: https://docs.opencv.org/4.x/d2/de8/group__core__array.html#gad12cefbcb5291cf958a85b4b67b6149f @@ -473,7 +506,7 @@ On top of the examples already provided by [Processing Extension - Expression Ob the following formats are recommended as alternative scripts and function references. | Format | Type | Description | Expression Example | -|----------| ------ |----------------------------------------|------------------------------------------------------------------------------------------------------| +|----------|--------|----------------------------------------|------------------------------------------------------------------------------------------------------| | `python` | string | A Python entry point reference. | `my_package.my_module:my_processing_function` or `my_package.my_module:MyClass.my_method` | | `docker` | string | An URI with image and tag to a Docker. | `ghcr.io/NAMESPACE/IMAGE_NAME:latest` | | `uri` | string | An URI to some binary or script. | `{"href": "https://raw.githubusercontent.com/ORG/REPO/TAG/package/cli.py", "type": "text/x-python"}` | diff --git a/json-schema/schema.json b/json-schema/schema.json index 1ca916d..30e18ab 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -523,14 +523,8 @@ "type": "string", "minLength": 1 }, - "norm_by_channel": { - "type": "boolean" - }, - "norm_type": { - "$ref": "#/$defs/NormalizeType" - }, - "norm_clip": { - "$ref": "#/$defs/NormalizeClip" + "scaling": { + "$ref": "#/$defs/Scaling" }, "resize_type": { "$ref": "#/$defs/ResizeType" @@ -734,34 +728,164 @@ ] } }, - "NormalizeType": { + "Scaling": { "oneOf": [ { - "type": "string", - "enum": [ - "min-max", - "z-score", - "l1", - "l2", - "l2sqr", - "hamming", - "hamming2", - "type-mask", - "relative", - "inf" - ] + "type": "null" }, { - "type": "null" + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/$defs/ScalingObject" + } } ] }, - "NormalizeClip": { - "type": "array", - "minItems": 1, - "items": { - "type": "number" - } + "ScalingObject": { + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "minimum", + "maximum" + ], + "properties": { + "type": { + "const": "min-max" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + } + }, + { + "type": "object", + "required": [ + "type", + "mean", + "stddev" + ], + "properties": { + "type": { + "const": "z-score" + }, + "mean": { + "type": "number" + }, + "stddev": { + "type": "number" + } + } + }, + { + "type": "object", + "required": [ + "type", + "minimum", + "maximum" + ], + "properties": { + "type": { + "const": "clip" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + } + }, + { + "type": "object", + "required": [ + "type", + "minimum" + ], + "properties": { + "type": { + "const": "clip-min" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + } + }, + { + "type": "object", + "required": [ + "type", + "maximum" + ], + "properties": { + "type": { + "const": "clip-max" + }, + "maximum": { + "type": "number" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "const": "offset" + }, + "value": { + "type": "number" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "const": "scale" + }, + "value": { + "type": "number" + } + } + }, + { + "$ref": "#/$defs/ScalingProcessingExpression" + } + ] + }, + "ScalingProcessingExpression": { + "allOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "const": "processing" + } + } + }, + { + "$ref": "#/$defs/ProcessingExpression" + } + ] }, "ResizeType": { "oneOf": [ From a65be790c204fd5ce96a1820894c845d38e778ba Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Thu, 31 Oct 2024 17:22:14 -0400 Subject: [PATCH 13/83] update tests to match schema --- tests/test_schema.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index b76e83c..40a7baf 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -91,30 +91,34 @@ def test_mlm_no_input_allowed_but_explicit_empty_array_required( indirect=True, ) @pytest.mark.parametrize( - ["test_norm_type", "test_statistics", "is_valid"], + ["test_scaling", "is_valid"], [ - ("min-max", [{"mean": 1, "stddev": 2}], False), - ("z-score", [{"minimum": 1, "maximum": 2}], False), - ("min-max", [{"mean": 1, "stddev": 2}, {"minimum": 1, "maximum": 2}], False), - ("z-score", [{"mean": 1, "stddev": 2}, {"minimum": 1, "maximum": 2}], False), - ("min-max", [{"minimum": 1, "maximum": 2}], True), - ("z-score", [{"mean": 1, "stddev": 2, "minimum": 1, "maximum": 2}], True), # extra statistics must be ignored - ("l2", [{"mean": 1, "stddev": 2}], True), # statistics "don't" care for this norm-type + ([{"type": "unknown", "mean": 1, "stddev": 2}], False), + ([{"type": "min-max", "mean": 1, "stddev": 2}], False), + ([{"type": "z-score", "minimum": 1, "maximum": 2}], False), + ([{"type": "min-max", "mean": 1, "stddev": 2}, {"type": "min-max", "minimum": 1, "maximum": 2}], False), + ([{"type": "z-score", "mean": 1, "stddev": 2}, {"type": "z-score", "minimum": 1, "maximum": 2}], False), + ([{"type": "min-max", "minimum": 1, "maximum": 2}], True), + ([{"type": "z-score", "mean": 1, "stddev": 2, "minimum": 1, "maximum": 2}], True), # extra must be ignored + ([{"type": "processing"}], False), + ([{"type": "processing", "format": "test", "expression": "test"}], True), + ([ + {"type": "processing", "format": "test", "expression": "test"}, + {"type": "min-max", "minimum": 1, "maximum": 2} + ], True), ], ) def test_mlm_input_norm_type_statistics_combination( mlm_validator: STACValidator, mlm_example: Dict[str, JSON], - test_norm_type: str, - test_statistics: List[Dict[str, Any]], + test_scaling: List[Dict[str, Any]], is_valid: bool, ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid - mlm_data["properties"]["mlm:input"][0]["norm_type"] = test_norm_type - mlm_data["properties"]["mlm:input"][0]["statistics"] = test_statistics + mlm_data["properties"]["mlm:input"][0]["scaling"] = test_scaling mlm_item = pystac.Item.from_dict(mlm_data) if is_valid: pystac.validation.validate(mlm_item, validator=mlm_validator) From 0c73c3970dfe0fdbb0bb42586aa3e920e87fe0a8 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Thu, 31 Oct 2024 17:33:05 -0400 Subject: [PATCH 14/83] update examples, schema and tests with scaling definition --- examples/item_eo_and_raster_bands.json | 17 ++++- examples/item_eo_bands.json | 16 ++++- examples/item_eo_bands_summarized.json | 17 ++++- examples/item_multi_io.json | 3 +- examples/item_raster_bands.json | 2 +- json-schema/schema.json | 99 +------------------------- tests/test_schema.py | 2 +- 7 files changed, 46 insertions(+), 110 deletions(-) diff --git a/examples/item_eo_and_raster_bands.json b/examples/item_eo_and_raster_bands.json index d3fe6bf..ab521f1 100644 --- a/examples/item_eo_and_raster_bands.json +++ b/examples/item_eo_and_raster_bands.json @@ -96,59 +96,70 @@ ], "data_type": "float32" }, - "norm_by_channel": true, - "norm_type": "z-score", "resize_type": null, - "statistics": [ + "scaling": [ { + "type": "z-score", "mean": 1354.40546513, "stddev": 245.71762908 }, { + "type": "z-score", "mean": 1118.24399958, "stddev": 333.00778264 }, { + "type": "z-score", "mean": 1042.92983953, "stddev": 395.09249139 }, { + "type": "z-score", "mean": 947.62620298, "stddev": 593.75055589 }, { + "type": "z-score", "mean": 1199.47283961, "stddev": 566.4170017 }, { + "type": "z-score", "mean": 1999.79090914, "stddev": 861.18399006 }, { + "type": "z-score", "mean": 2369.22292565, "stddev": 1086.63139075 }, { + "type": "z-score", "mean": 2296.82608323, "stddev": 1117.98170791 }, { + "type": "z-score", "mean": 732.08340178, "stddev": 404.91978886 }, { + "type": "z-score", "mean": 12.11327804, "stddev": 4.77584468 }, { + "type": "z-score", "mean": 1819.01027855, "stddev": 1002.58768311 }, { + "type": "z-score", "mean": 1118.92391149, "stddev": 761.30323499 }, { + "type": "z-score", "mean": 2594.14080798, "stddev": 1231.58581042 } diff --git a/examples/item_eo_bands.json b/examples/item_eo_bands.json index 23656a1..cd820c8 100644 --- a/examples/item_eo_bands.json +++ b/examples/item_eo_bands.json @@ -98,58 +98,70 @@ "data_type": "float32" }, "norm_by_channel": true, - "norm_type": "z-score", "resize_type": null, - "statistics": [ + "scaling": [ { + "type": "z-score", "mean": 1354.40546513, "stddev": 245.71762908 }, { + "type": "z-score", "mean": 1118.24399958, "stddev": 333.00778264 }, { + "type": "z-score", "mean": 1042.92983953, "stddev": 395.09249139 }, { + "type": "z-score", "mean": 947.62620298, "stddev": 593.75055589 }, { + "type": "z-score", "mean": 1199.47283961, "stddev": 566.4170017 }, { + "type": "z-score", "mean": 1999.79090914, "stddev": 861.18399006 }, { + "type": "z-score", "mean": 2369.22292565, "stddev": 1086.63139075 }, { + "type": "z-score", "mean": 2296.82608323, "stddev": 1117.98170791 }, { + "type": "z-score", "mean": 732.08340178, "stddev": 404.91978886 }, { + "type": "z-score", "mean": 12.11327804, "stddev": 4.77584468 }, { + "type": "z-score", "mean": 1819.01027855, "stddev": 1002.58768311 }, { + "type": "z-score", "mean": 1118.92391149, "stddev": 761.30323499 }, { + "type": "z-score", "mean": 2594.14080798, "stddev": 1231.58581042 } diff --git a/examples/item_eo_bands_summarized.json b/examples/item_eo_bands_summarized.json index 8e20a17..d27cade 100644 --- a/examples/item_eo_bands_summarized.json +++ b/examples/item_eo_bands_summarized.json @@ -97,59 +97,70 @@ ], "data_type": "float32" }, - "norm_by_channel": true, - "norm_type": "z-score", "resize_type": null, - "statistics": [ + "scaling": [ { + "type": "z-score", "mean": 1354.40546513, "stddev": 245.71762908 }, { + "type": "z-score", "mean": 1118.24399958, "stddev": 333.00778264 }, { + "type": "z-score", "mean": 1042.92983953, "stddev": 395.09249139 }, { + "type": "z-score", "mean": 947.62620298, "stddev": 593.75055589 }, { + "type": "z-score", "mean": 1199.47283961, "stddev": 566.4170017 }, { + "type": "z-score", "mean": 1999.79090914, "stddev": 861.18399006 }, { + "type": "z-score", "mean": 2369.22292565, "stddev": 1086.63139075 }, { + "type": "z-score", "mean": 2296.82608323, "stddev": 1117.98170791 }, { + "type": "z-score", "mean": 732.08340178, "stddev": 404.91978886 }, { + "type": "z-score", "mean": 12.11327804, "stddev": 4.77584468 }, { + "type": "z-score", "mean": 1819.01027855, "stddev": 1002.58768311 }, { + "type": "z-score", "mean": 1118.92391149, "stddev": 761.30323499 }, { + "type": "z-score", "mean": 2594.14080798, "stddev": 1231.58581042 } diff --git a/examples/item_multi_io.json b/examples/item_multi_io.json index 14c63f9..e92fe6d 100644 --- a/examples/item_multi_io.json +++ b/examples/item_multi_io.json @@ -85,8 +85,7 @@ ], "data_type": "uint16" }, - "norm_by_channel": false, - "norm_type": null, + "scaling": null, "resize_type": null }, { diff --git a/examples/item_raster_bands.json b/examples/item_raster_bands.json index b97b06e..24b36a5 100644 --- a/examples/item_raster_bands.json +++ b/examples/item_raster_bands.json @@ -95,7 +95,7 @@ ], "data_type": "float32" }, - "norm_type": null, + "scaling": null, "resize_type": null, "pre_processing_function": { "format": "python", diff --git a/json-schema/schema.json b/json-schema/schema.json index 30e18ab..76532d9 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -490,14 +490,7 @@ "mlm:input": { "type": "array", "items": { - "allOf": [ - { - "$ref": "#/$defs/ModelInput" - }, - { - "$ref": "#/$defs/ModelInputNormTypeStatistics" - } - ] + "$ref": "#/$defs/ModelInput" } }, "ModelInput": { @@ -529,93 +522,11 @@ "resize_type": { "$ref": "#/$defs/ResizeType" }, - "statistics": { - "$ref": "#/$defs/InputStatistics" - }, "pre_processing_function": { "$ref": "#/$defs/ProcessingExpression" } } }, - "ModelInputNormTypeStatistics": { - "description": "Validates the corresponding statistics required for the specified normalization type.", - "allOf": [ - { - "if": { - "type": "object", - "required": [ - "norm_type" - ], - "properties": { - "norm_type": { - "const": "min-max" - } - } - }, - "then": { - "type": "object", - "required": [ - "statistics" - ], - "properties": { - "statistics": { - "allOf": [ - { - "$ref": "#/$defs/InputStatistics" - }, - { - "type": "array", - "items": { - "required": [ - "minimum", - "maximum" - ] - } - } - ] - } - } - } - }, - { - "if": { - "type": "object", - "required": [ - "norm_type" - ], - "properties": { - "norm_type": { - "const": "z-score" - } - } - }, - "then": { - "type": "object", - "required": [ - "statistics" - ], - "properties": { - "statistics": { - "allOf": [ - { - "$ref": "#/$defs/InputStatistics" - }, - { - "type": "array", - "items": { - "required": [ - "mean", - "stddev" - ] - } - } - ] - } - } - } - } - ] - }, "mlm:output": { "type": "array", "items": { @@ -921,14 +832,6 @@ } ] }, - "InputStatistics": { - "$comment": "MLM statistics for the specific input relevant for normalization for ML features.", - "type": "array", - "minItems": 1, - "items": { - "$ref": "https://stac-extensions.github.io/raster/v1.1.0/schema.json#/definitions/bands/items/properties/statistics" - } - }, "ProcessingExpression": { "oneOf": [ { diff --git a/tests/test_schema.py b/tests/test_schema.py index 40a7baf..4f29bbf 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -108,7 +108,7 @@ def test_mlm_no_input_allowed_but_explicit_empty_array_required( ], True), ], ) -def test_mlm_input_norm_type_statistics_combination( +def test_mlm_input_scaling_combination( mlm_validator: STACValidator, mlm_example: Dict[str, JSON], test_scaling: List[Dict[str, Any]], From 984ee7744019bd38225d5ead779ef58ed9ec099b Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Thu, 31 Oct 2024 23:47:11 -0400 Subject: [PATCH 15/83] fix linting --- README.md | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 6d246b9..f58ce2d 100644 --- a/README.md +++ b/README.md @@ -420,16 +420,16 @@ indicate `dim_order = ["batch", "channel", "height", "width"]`. Select one option from: -| `type`
([Scaling Enum](#scaling-enum)) | Required Properties | Scaling Operation | -|-------------------------------------------|-------------------------------------------------|------------------------------------------| -| `min-max` | `minimum`, `maximum` | $(data - minimum) / (maximum - minimum)$ | -| `z-score` | `mean`, `stddev` | $(data - mean) / stddev$ | -| `clip` | `minimum`, `maximum` | $\min(\max(data, minimum), maximum)$ | -| `clip-min` | `minimum` | $\max(data, minimum)$ | -| `clip-max` | `maximum` | $\min(data, maximum)$ | -| `offset` | `value` | $data - value$ | -| `scale` | `value` | $data / value$ | -| `processing` | [Processing Expression](#processing-expression) | *according to `processing:expression`* | +| `type` | Required Properties | Scaling Operation | +|--------------|-------------------------------------------------|------------------------------------------| +| `min-max` | `minimum`, `maximum` | $(data - minimum) / (maximum - minimum)$ | +| `z-score` | `mean`, `stddev` | $(data - mean) / stddev$ | +| `clip` | `minimum`, `maximum` | $\min(\max(data, minimum), maximum)$ | +| `clip-min` | `minimum` | $\max(data, minimum)$ | +| `clip-max` | `maximum` | $\min(data, maximum)$ | +| `offset` | `value` | $data - value$ | +| `scale` | `value` | $data / value$ | +| `processing` | [Processing Expression](#processing-expression) | *according to `processing:expression`* | When a scaling `type` approach is specified, it is expected that the parameters necessary to perform their calculation are provided for the corresponding input dimension data. @@ -458,7 +458,7 @@ the [Scaling Object](#scaling-object) of the respective input dimension, as show } ``` -For operations such as L1 or L2 normalization, a [Processing Expression](#processing-expression) should also be employed. +For operations such as L1 or L2 normalization, [Processing Expression](#processing-expression) should also be employed. This is because, depending on the [Model Input](#model-input-object) dimensions and reference data, there is an ambiguity regarding "how" and "where" such normalization functions must be applied against the input data. A custom mathematical expression should provide explicitly the data manipulation and normalization strategy. @@ -466,8 +466,6 @@ A custom mathematical expression should provide explicitly the data manipulation In situations of very complex `scaling` operations, which cannot be represented by any of the previous definition, a `pre_processing_function` should be used instead (see [Model Input Object](#model-input-object)). -[opencv-normalization-flags]: https://docs.opencv.org/4.x/d2/de8/group__core__array.html#gad12cefbcb5291cf958a85b4b67b6149f - #### Resize Enum Select one option from: @@ -486,7 +484,7 @@ See [OpenCV - Interpolation Flags][opencv-interpolation-flags] for details about the relevant methods. Equivalent methods from other packages are applicable as well. If none of the above values applies, `null` (literal, not string) can be used instead. -If a custom rescaling operation, or a combination of operations (with or without [Normalization](#normalize-enum)), +If a custom rescaling operation, or a combination of operations (with or without [Scaling](#scaling-object)), must be defined instead, consider using a [Processing Expression](#processing-expression) reference. [opencv-interpolation-flags]: https://docs.opencv.org/4.x/da/d54/group__imgproc__transform.html#ga5bb5a1fea74ea38e1a5445ca803ff121 From 473cee7ee70336ba7924f89d00f7a1c3894e4d94 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 1 Nov 2024 00:08:28 -0400 Subject: [PATCH 16/83] update stac-model with corresponding scaling definitions from JSON schema --- stac_model/examples.py | 18 +++++----- stac_model/input.py | 76 ++++++++++++++++++++++++++++-------------- tests/test_schema.py | 2 +- 3 files changed, 62 insertions(+), 34 deletions(-) diff --git a/stac_model/examples.py b/stac_model/examples.py index d882623..573a6b2 100644 --- a/stac_model/examples.py +++ b/stac_model/examples.py @@ -7,7 +7,7 @@ from pystac.extensions.file import FileExtension from stac_model.base import ProcessingExpression -from stac_model.input import InputStructure, MLMStatistic, ModelInput +from stac_model.input import InputStructure, ScalingObject, ModelInput from stac_model.output import MLMClassification, ModelOutput, ModelResult from stac_model.schema import ItemMLModelExtension, MLModelExtension, MLModelProperties @@ -63,10 +63,14 @@ def eurosat_resnet() -> ItemMLModelExtension: 761.30323499, 1231.58581042, ] - stats = [ - MLMStatistic( - mean=mean, - stddev=stddev, + scaling = [ + cast( + ScalingObject, + dict( + type="z-score", + mean=mean, + stddev=stddev, + ) ) for mean, stddev in zip(stats_mean, stats_stddev) ] @@ -74,10 +78,8 @@ def eurosat_resnet() -> ItemMLModelExtension: name="13 Band Sentinel-2 Batch", bands=band_names, input=input_struct, - norm_by_channel=True, - norm_type="z-score", resize_type=None, - statistics=stats, + scaling=scaling, pre_processing_function=ProcessingExpression( format="python", expression="torchgeo.datamodules.eurosat.EuroSATDataModule.collate_fn", diff --git a/stac_model/input.py b/stac_model/input.py index 22788d7..aa41d1c 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -7,8 +7,8 @@ class InputStructure(MLMBaseModel): - shape: List[Union[int, float]] = Field(min_items=1) - dim_order: List[str] = Field(min_items=1) + shape: List[Union[int, float]] = Field(min_length=1) + dim_order: List[str] = Field(min_length=1) data_type: DataType @model_validator(mode="after") @@ -18,27 +18,56 @@ def validate_dimensions(self) -> Self: return self -class MLMStatistic(MLMBaseModel): # FIXME: add 'Statistics' dep from raster extension (cases required to be triggered) - minimum: Annotated[Optional[Number], OmitIfNone] = None - maximum: Annotated[Optional[Number], OmitIfNone] = None - mean: Annotated[Optional[Number], OmitIfNone] = None - stddev: Annotated[Optional[Number], OmitIfNone] = None - count: Annotated[Optional[int], OmitIfNone] = None - valid_percent: Annotated[Optional[Number], OmitIfNone] = None +class ScalingClipMin(MLMBaseModel): + type: Literal["clip-min"] = "clip-min" + minimum: Number -NormalizeType: TypeAlias = Optional[ - Literal[ - "min-max", - "z-score", - "l1", - "l2", - "l2sqr", - "hamming", - "hamming2", - "type-mask", - "relative", - "inf", +class ScalingClipMax(MLMBaseModel): + type: Literal["clip-max"] = "clip-max" + maximum: Number + + +class ScalingClip(ScalingClipMin, ScalingClipMax): + type: Literal["clip"] = "clip" + + +class ScalingMinMax(MLMBaseModel): + type: Literal["min-max"] = "min-max" + minimum: Number + maximum: Number + + +class ScalingZScore(MLMBaseModel): + type: Literal["z-score"] = "z-score" + mean: Number + stddev: Number + + +class ScalingOffset(MLMBaseModel): + type: Literal["offset"] = "offset" + value: Number + + +class ScalingScale(MLMBaseModel): + type: Literal["scale"] = "scale" + value: Number + + +class ScalingProcessingExpression(ProcessingExpression): + type: Literal["processing"] = "processing" + + +ScalingObject: TypeAlias = Optional[ + Union[ + ScalingMinMax, + ScalingZScore, + ScalingClip, + ScalingClipMin, + ScalingClipMax, + ScalingOffset, + ScalingScale, + ScalingProcessingExpression, ] ] @@ -107,9 +136,6 @@ class ModelInput(MLMBaseModel): ], ) input: InputStructure - norm_by_channel: Annotated[Optional[bool], OmitIfNone] = None - norm_type: Annotated[Optional[NormalizeType], OmitIfNone] = None - norm_clip: Annotated[Optional[List[Union[float, int]]], OmitIfNone] = None + scaling: Annotated[Optional[List[ScalingObject]], OmitIfNone] = None resize_type: Annotated[Optional[ResizeType], OmitIfNone] = None - statistics: Annotated[Optional[List[MLMStatistic]], OmitIfNone] = None pre_processing_function: Optional[ProcessingExpression] = None diff --git a/tests/test_schema.py b/tests/test_schema.py index 4f29bbf..73e9789 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -118,7 +118,7 @@ def test_mlm_input_scaling_combination( mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid - mlm_data["properties"]["mlm:input"][0]["scaling"] = test_scaling + mlm_data["properties"]["mlm:input"][0]["scaling"] = test_scaling # type: ignore mlm_item = pystac.Item.from_dict(mlm_data) if is_valid: pystac.validation.validate(mlm_item, validator=mlm_validator) From 323fb8f4b00f53a66d99d46ea5e0bc2974922d1c Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 1 Nov 2024 00:10:17 -0400 Subject: [PATCH 17/83] fix import linting --- stac_model/examples.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stac_model/examples.py b/stac_model/examples.py index 573a6b2..497ae93 100644 --- a/stac_model/examples.py +++ b/stac_model/examples.py @@ -7,7 +7,7 @@ from pystac.extensions.file import FileExtension from stac_model.base import ProcessingExpression -from stac_model.input import InputStructure, ScalingObject, ModelInput +from stac_model.input import InputStructure, ModelInput, ScalingObject from stac_model.output import MLMClassification, ModelOutput, ModelResult from stac_model.schema import ItemMLModelExtension, MLModelExtension, MLModelProperties From d36a3740ee23188181ad089c93f811302b6c63c1 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 1 Nov 2024 00:12:52 -0400 Subject: [PATCH 18/83] avoid typing error due to literal type override --- stac_model/input.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stac_model/input.py b/stac_model/input.py index aa41d1c..20dc84e 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -28,8 +28,10 @@ class ScalingClipMax(MLMBaseModel): maximum: Number -class ScalingClip(ScalingClipMin, ScalingClipMax): +class ScalingClip(MLMBaseModel): type: Literal["clip"] = "clip" + minimum: Number + maximum: Number class ScalingMinMax(MLMBaseModel): From d1b9409adca4fda6a6434ae7cdef11e6bbc7d090 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 1 Nov 2024 00:21:19 -0400 Subject: [PATCH 19/83] fix disallowing undefined mlm-prefixed fields (fixes #41) --- CHANGELOG.md | 3 ++- json-schema/schema.json | 2 +- tests/test_schema.py | 23 +++++++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 116e1d3..9a47ba8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - n/a ### Fixed -- n/a +- Fix check of disallowed unknown/undefined `mlm:`-prefixed fields + (fixes [#41](https://github.com/stac-extensions/mlm/issues/41)). ## [v1.3.0](https://github.com/stac-extensions/mlm/tree/v1.3.0) diff --git a/json-schema/schema.json b/json-schema/schema.json index ff21357..2072404 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -314,7 +314,7 @@ }, "$comment": "Allow properties not defined by MLM prefix to allow combination with other extensions.", "patternProperties": { - "^(?!dlm:)": {} + "^(?!mlm:)": {} }, "additionalProperties": false }, diff --git a/tests/test_schema.py b/tests/test_schema.py index 4755978..3958b55 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -27,6 +27,29 @@ def test_mlm_schema( assert SCHEMA_URI in validated +@pytest.mark.parametrize( + "mlm_example", + ["item_raster_bands.json"], + indirect=True, +) +def test_mlm_no_undefined_prefixed_field( + mlm_validator: STACValidator, + mlm_example: Dict[str, JSON], +) -> None: + mlm_data = copy.deepcopy(mlm_example) + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid + + mlm_data["properties"]["mlm:unknown"] = "random" + with pytest.raises(pystac.errors.STACValidationError) as exc: + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) + assert all( + field in str(exc.value.source) + for field in ["mlm:unknown", "^(?!mlm:)"] + ) + + @pytest.mark.parametrize( "mlm_example", ["item_raster_bands.json"], From 1ae124229ee4f4577daa37bdaf5def4edd7a8e30 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 1 Nov 2024 10:00:33 -0400 Subject: [PATCH 20/83] check npm versions in CI, reset before npm run format-markdown --- .github/workflows/stac-model.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/stac-model.yml b/.github/workflows/stac-model.yml index 1881d7f..4fb75b8 100644 --- a/.github/workflows/stac-model.yml +++ b/.github/workflows/stac-model.yml @@ -30,6 +30,7 @@ jobs: - name: Run checks run: | make lint-all + npm list - name: Run tests run: | From 634bf2b81161ece7c3bb3e43fd01a1e4d68ca8d3 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 1 Nov 2024 10:19:54 -0400 Subject: [PATCH 21/83] gitignore reqs generated from make --- .github/workflows/stac-model.yml | 1 - .github/workflows/test.yaml | 1 + .gitignore | 2 ++ Makefile | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/stac-model.yml b/.github/workflows/stac-model.yml index 4fb75b8..1881d7f 100644 --- a/.github/workflows/stac-model.yml +++ b/.github/workflows/stac-model.yml @@ -30,7 +30,6 @@ jobs: - name: Run checks run: | make lint-all - npm list - name: Run tests run: | diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 2260534..03169a5 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -12,3 +12,4 @@ jobs: - run: | npm install npm test + npm list diff --git a/.gitignore b/.gitignore index 4d99463..e82a7d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +requirements*.txt + ### ArchLinuxPackages ### *.tar *.tar.* diff --git a/Makefile b/Makefile index f890680..b3f4de7 100644 --- a/Makefile +++ b/Makefile @@ -87,7 +87,7 @@ lint: setup .PHONY: check-lint check-lint: lint -uv run --python $(ACTIVEPYTHON) ruff check --config=pyproject.toml ./ + uv run --python $(ACTIVEPYTHON) ruff check --config=pyproject.toml ./ .PHONY: format-lint format-lint: setup lint From 305e40cf2ef29b2a1a79f98298712427d4a9c497 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 1 Nov 2024 10:22:43 -0400 Subject: [PATCH 22/83] poetry>uv in actions --- .github/workflows/publish.yaml | 8 ++++---- .github/workflows/stac-model.yml | 6 +++--- pyproject.toml | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 8b56119..ff89a22 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -25,9 +25,9 @@ jobs: uses: actions/setup-python@v5.2.0 with: python-version: "3.10" - - name: Install poetry - run: make poetry-install + - name: Install uv + run: make setup - name: Publish stac-model to PyPI run: | - poetry build - poetry publish --username __token__ --password ${{ secrets.PYPI_SECRET }} + uv build + uv publish --username __token__ --password ${{ secrets.PYPI_SECRET }} diff --git a/.github/workflows/stac-model.yml b/.github/workflows/stac-model.yml index 1881d7f..5d42720 100644 --- a/.github/workflows/stac-model.yml +++ b/.github/workflows/stac-model.yml @@ -16,14 +16,14 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install poetry - run: make poetry-install + - name: Install uv + run: make setup - name: Set up cache uses: actions/cache@v4.0.2 with: path: .venv - key: venv-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('poetry.lock') }} + key: venv-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('uv.lock') }} - name: Install dependencies run: make install-dev diff --git a/pyproject.toml b/pyproject.toml index 6bd1c10..7413902 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,7 +86,7 @@ stac-model = "stac_model.__main__:app" # NOTE: # Although these definitions are provided in this 'stac-model' project file, # they are actually intented for versioning the MLM specification itself. -# To version 'stac-model', use the 'poetry version' operations. +# To version 'stac-model', use the 'bumpversion bump' operation. # See also https://github.com/stac-extensions/mlm/blob/main/CONTRIBUTING.md#building-and-releasing current_version = "1.3.0" parse = "(?P\\d+)\\.(?P\\d+)\\.(?P\\d+)" From 6094b22b05afb4b7df203a630977dee2e7240e7c Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 1 Nov 2024 10:44:37 -0400 Subject: [PATCH 23/83] code linting with ruff, fix makefile command, ignore line length and type annotation rules --- Makefile | 1 - pyproject.toml | 1 + stac_model/base.py | 13 ++------ stac_model/examples.py | 2 +- stac_model/input.py | 67 +++++++++++++----------------------------- stac_model/output.py | 20 ++++++------- stac_model/runtime.py | 18 ++++++------ stac_model/schema.py | 23 +++++++-------- tests/conftest.py | 10 +++---- tests/test_schema.py | 18 ++++++------ 10 files changed, 69 insertions(+), 104 deletions(-) diff --git a/Makefile b/Makefile index b3f4de7..90cc310 100644 --- a/Makefile +++ b/Makefile @@ -77,7 +77,6 @@ check-citation: .PHONY: check-safety check-safety: setup - uv check uv run --python $(ACTIVEPYTHON) safety check --full-report uv run --python $(ACTIVEPYTHON) bandit -ll --recursive stac_model tests diff --git a/pyproject.toml b/pyproject.toml index 7413902..0bd5f97 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -185,6 +185,7 @@ search = "https://stac-extensions.github.io/mlm/v{current_version}/schema.json" replace = "https://stac-extensions.github.io/mlm/v{new_version}/schema.json" [tool.ruff] +ignore = ["UP007", "E501"] exclude = [ ".git", "__pycache__", diff --git a/stac_model/base.py b/stac_model/base.py index c5ff7c6..772cb12 100644 --- a/stac_model/base.py +++ b/stac_model/base.py @@ -1,18 +1,11 @@ from dataclasses import dataclass from enum import Enum -from typing import Any, Dict, List, Literal, TypeAlias, Union +from typing import Any, Literal, TypeAlias, Union from pydantic import BaseModel, ConfigDict, model_serializer -Number: TypeAlias = Union[int, float] -JSON: TypeAlias = Union[ - Dict[str, "JSON"], - List["JSON"], - Number, - bool, - str, - None, -] +Number: TypeAlias = int | float +JSON: TypeAlias = dict[str, "JSON"] | list["JSON"] | Number | bool | str | None @dataclass diff --git a/stac_model/examples.py b/stac_model/examples.py index d882623..dbd0657 100644 --- a/stac_model/examples.py +++ b/stac_model/examples.py @@ -68,7 +68,7 @@ def eurosat_resnet() -> ItemMLModelExtension: mean=mean, stddev=stddev, ) - for mean, stddev in zip(stats_mean, stats_stddev) + for mean, stddev in zip(stats_mean, stats_stddev, strict=False) ] model_input = ModelInput( name="13 Band Sentinel-2 Batch", diff --git a/stac_model/input.py b/stac_model/input.py index 22788d7..3001941 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -1,4 +1,5 @@ -from typing import Annotated, Any, List, Literal, Optional, Sequence, TypeAlias, Union +from collections.abc import Sequence +from typing import Annotated, Any, Literal, TypeAlias from typing_extensions import Self from pydantic import Field, model_validator @@ -7,8 +8,8 @@ class InputStructure(MLMBaseModel): - shape: List[Union[int, float]] = Field(min_items=1) - dim_order: List[str] = Field(min_items=1) + shape: list[int | float] = Field(min_items=1) + dim_order: list[str] = Field(min_items=1) data_type: DataType @model_validator(mode="after") @@ -19,43 +20,17 @@ def validate_dimensions(self) -> Self: class MLMStatistic(MLMBaseModel): # FIXME: add 'Statistics' dep from raster extension (cases required to be triggered) - minimum: Annotated[Optional[Number], OmitIfNone] = None - maximum: Annotated[Optional[Number], OmitIfNone] = None - mean: Annotated[Optional[Number], OmitIfNone] = None - stddev: Annotated[Optional[Number], OmitIfNone] = None - count: Annotated[Optional[int], OmitIfNone] = None - valid_percent: Annotated[Optional[Number], OmitIfNone] = None + minimum: Annotated[Number | None, OmitIfNone] = None + maximum: Annotated[Number | None, OmitIfNone] = None + mean: Annotated[Number | None, OmitIfNone] = None + stddev: Annotated[Number | None, OmitIfNone] = None + count: Annotated[int | None, OmitIfNone] = None + valid_percent: Annotated[Number | None, OmitIfNone] = None -NormalizeType: TypeAlias = Optional[ - Literal[ - "min-max", - "z-score", - "l1", - "l2", - "l2sqr", - "hamming", - "hamming2", - "type-mask", - "relative", - "inf", - ] -] +NormalizeType: TypeAlias = Literal["min-max", "z-score", "l1", "l2", "l2sqr", "hamming", "hamming2", "type-mask", "relative", "inf"] | None -ResizeType: TypeAlias = Optional[ - Literal[ - "crop", - "pad", - "interpolation-nearest", - "interpolation-linear", - "interpolation-cubic", - "interpolation-area", - "interpolation-lanczos4", - "interpolation-max", - "wrap-fill-outliers", - "wrap-inverse-map", - ] -] +ResizeType: TypeAlias = Literal["crop", "pad", "interpolation-nearest", "interpolation-linear", "interpolation-cubic", "interpolation-area", "interpolation-lanczos4", "interpolation-max", "wrap-fill-outliers", "wrap-inverse-map"] | None class ModelBand(MLMBaseModel): @@ -66,11 +41,11 @@ class ModelBand(MLMBaseModel): ) ) # similar to 'ProcessingExpression', but they can be omitted here - format: Annotated[Optional[str], OmitIfNone] = Field( + format: Annotated[str | None, OmitIfNone] = Field( default=None, description="", ) - expression: Annotated[Optional[Any], OmitIfNone] = Field( + expression: Annotated[Any | None, OmitIfNone] = Field( default=None, description="", ) @@ -88,7 +63,7 @@ def validate_expression(self) -> Self: class ModelInput(MLMBaseModel): name: str # order is critical here (same index as dim shape), allow duplicate if the model needs it somehow - bands: Sequence[Union[str, ModelBand]] = Field( + bands: Sequence[str | ModelBand] = Field( description=( "List of bands that compose the input. " "If a string is used, it is implied to correspond to a named-band. " @@ -107,9 +82,9 @@ class ModelInput(MLMBaseModel): ], ) input: InputStructure - norm_by_channel: Annotated[Optional[bool], OmitIfNone] = None - norm_type: Annotated[Optional[NormalizeType], OmitIfNone] = None - norm_clip: Annotated[Optional[List[Union[float, int]]], OmitIfNone] = None - resize_type: Annotated[Optional[ResizeType], OmitIfNone] = None - statistics: Annotated[Optional[List[MLMStatistic]], OmitIfNone] = None - pre_processing_function: Optional[ProcessingExpression] = None + norm_by_channel: Annotated[bool | None, OmitIfNone] = None + norm_type: Annotated[NormalizeType | None, OmitIfNone] = None + norm_clip: Annotated[list[float | int] | None, OmitIfNone] = None + resize_type: Annotated[ResizeType | None, OmitIfNone] = None + statistics: Annotated[list[MLMStatistic] | None, OmitIfNone] = None + pre_processing_function: ProcessingExpression | None = None diff --git a/stac_model/output.py b/stac_model/output.py index 0e25ec7..5b1d2ea 100644 --- a/stac_model/output.py +++ b/stac_model/output.py @@ -1,4 +1,4 @@ -from typing import Annotated, Any, Dict, List, Optional, Set, Union, cast +from typing import Annotated, Any, cast from pydantic import AliasChoices, ConfigDict, Field, model_serializer from pystac.extensions.classification import Classification @@ -7,8 +7,8 @@ class ModelResult(MLMBaseModel): - shape: List[Union[int, float]] = Field(..., min_items=1) - dim_order: List[str] = Field(..., min_items=1) + shape: list[int | float] = Field(..., min_items=1) + dim_order: list[str] = Field(..., min_items=1) data_type: DataType @@ -32,15 +32,15 @@ class ModelResult(MLMBaseModel): class MLMClassification(MLMBaseModel, Classification): @model_serializer() - def model_dump(self, *_: Any, **__: Any) -> Dict[str, Any]: + def model_dump(self, *_: Any, **__: Any) -> dict[str, Any]: return self.to_dict() # type: ignore[call-arg] def __init__( self, value: int, - description: Optional[str] = None, - name: Optional[str] = None, - color_hint: Optional[str] = None, + description: str | None = None, + name: str | None = None, + color_hint: str | None = None, ) -> None: Classification.__init__(self, {}) if not name and not description: @@ -78,7 +78,7 @@ def __setattr__(self, key: str, value: Any) -> None: class ModelOutput(MLMBaseModel): name: str - tasks: Set[ModelTask] + tasks: set[ModelTask] result: ModelResult # NOTE: @@ -86,11 +86,11 @@ class ModelOutput(MLMBaseModel): # it is more important to keep the order in this case, # which we would lose with 'Set'. # We also get some unhashable errors with 'Set', although 'MLMClassification' implements '__hash__'. - classes: Annotated[List[MLMClassification], OmitIfNone] = Field( + classes: Annotated[list[MLMClassification], OmitIfNone] = Field( alias="classification:classes", validation_alias=AliasChoices("classification:classes", "classification_classes", "classes"), ) - post_processing_function: Optional[ProcessingExpression] = None + post_processing_function: ProcessingExpression | None = None model_config = ConfigDict( populate_by_name=True, diff --git a/stac_model/runtime.py b/stac_model/runtime.py index 9104fa6..197f7b8 100644 --- a/stac_model/runtime.py +++ b/stac_model/runtime.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import Annotated, Literal, Optional, Union +from typing import Annotated, Literal, Union from pydantic import AliasChoices, Field @@ -33,17 +33,17 @@ def __str__(self): class Runtime(MLMBaseModel): - framework: Annotated[Optional[str], OmitIfNone] = Field(default=None) - framework_version: Annotated[Optional[str], OmitIfNone] = Field(default=None) - file_size: Annotated[Optional[int], OmitIfNone] = Field( + framework: Annotated[str | None, OmitIfNone] = Field(default=None) + framework_version: Annotated[str | None, OmitIfNone] = Field(default=None) + file_size: Annotated[int | None, OmitIfNone] = Field( alias="file:size", validation_alias=AliasChoices("file_size", "file:size"), default=None, ) - memory_size: Annotated[Optional[int], OmitIfNone] = Field(default=None) - batch_size_suggestion: Annotated[Optional[int], OmitIfNone] = Field(default=None) + memory_size: Annotated[int | None, OmitIfNone] = Field(default=None) + batch_size_suggestion: Annotated[int | None, OmitIfNone] = Field(default=None) - accelerator: Optional[AcceleratorType] = Field(default=None) + accelerator: AcceleratorType | None = Field(default=None) accelerator_constrained: bool = Field(default=False) - accelerator_summary: Annotated[Optional[str], OmitIfNone] = Field(default=None) - accelerator_count: Annotated[Optional[int], OmitIfNone] = Field(default=None, minimum=1) + accelerator_summary: Annotated[str | None, OmitIfNone] = Field(default=None) + accelerator_count: Annotated[int | None, OmitIfNone] = Field(default=None, minimum=1) diff --git a/stac_model/schema.py b/stac_model/schema.py index 63310ba..aea1e41 100644 --- a/stac_model/schema.py +++ b/stac_model/schema.py @@ -1,13 +1,10 @@ import json +from collections.abc import Iterable from typing import ( Annotated, Any, Generic, - Iterable, - List, Literal, - Optional, - Set, TypeVar, Union, cast, @@ -48,13 +45,13 @@ def mlm_prefix_adder(field_name: str) -> str: class MLModelProperties(Runtime): name: str = Field(min_length=1) architecture: str = Field(min_length=1) - tasks: Set[ModelTask] - input: List[ModelInput] - output: List[ModelOutput] + tasks: set[ModelTask] + input: list[ModelInput] + output: list[ModelOutput] total_parameters: int - pretrained: Annotated[Optional[bool], OmitIfNone] = Field(default=True) - pretrained_source: Annotated[Optional[str], OmitIfNone] = None + pretrained: Annotated[bool | None, OmitIfNone] = Field(default=True) + pretrained_source: Annotated[str | None, OmitIfNone] = None model_config = ConfigDict(alias_generator=mlm_prefix_adder, populate_by_name=True, extra="ignore") @@ -80,7 +77,7 @@ def name(self) -> SchemaName: def apply( self, - properties: Union[MLModelProperties, dict[str, Any]], + properties: MLModelProperties | dict[str, Any], ) -> None: """ Applies Machine Learning Model Extension properties to the extended :mod:`~pystac` object. @@ -118,7 +115,7 @@ def ext(cls, obj: pystac.Collection, add_if_missing: bool = False) -> "Collectio @classmethod def ext( cls, - obj: Union[pystac.Collection, pystac.Item, pystac.Asset], # item_assets.AssetDefinition + obj: pystac.Collection | pystac.Item | pystac.Asset, # item_assets.AssetDefinition add_if_missing: bool = False, ) -> Union[ "CollectionMLModelExtension", @@ -186,7 +183,7 @@ def _validate_mlm_property(self, prop: str, summaries: list[Any]) -> None: for value in summaries: validator.validate_assignment(model, prop, value) - def get_mlm_property(self, prop: str) -> Optional[list[Any]]: + def get_mlm_property(self, prop: str) -> list[Any] | None: self._check_mlm_property(prop) return self.summaries.get_list(prop) @@ -251,7 +248,7 @@ class AssetMLModelExtension(MLModelExtension[pystac.Asset]): properties: dict[str, Any] """The :class:`~pystac.Asset` fields, including extension properties.""" - additional_read_properties: Optional[Iterable[dict[str, Any]]] = None + additional_read_properties: Iterable[dict[str, Any]] | None = None """If present, this will be a list containing 1 dictionary representing the properties of the owning :class:`~pystac.Item`.""" diff --git a/tests/conftest.py b/tests/conftest.py index 417a913..5688bd9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ import glob import json import os -from typing import TYPE_CHECKING, Any, Dict, List, cast +from typing import TYPE_CHECKING, Any, cast import pystac import pytest @@ -18,7 +18,7 @@ JSON_SCHEMA_DIR = os.path.abspath(os.path.join(TEST_DIR, "../json-schema")) -def get_all_stac_item_examples() -> List[str]: +def get_all_stac_item_examples() -> list[str]: all_json = glob.glob("**/*.json", root_dir=EXAMPLES_DIR, recursive=True) all_geojson = glob.glob("**/*.geojson", root_dir=EXAMPLES_DIR, recursive=True) all_stac_items = [ @@ -39,7 +39,7 @@ def mlm_schema() -> JSON: @pytest.fixture(scope="session") def mlm_validator( request: "SubRequest", - mlm_schema: Dict[str, Any], + mlm_schema: dict[str, Any], ) -> pystac.validation.stac_validator.JsonSchemaSTACValidator: """ Update the :class:`pystac.validation.RegisteredValidator` with the local MLM JSON schema definition. @@ -58,10 +58,10 @@ def mlm_validator( @pytest.fixture -def mlm_example(request: "SubRequest") -> Dict[str, JSON]: +def mlm_example(request: "SubRequest") -> dict[str, JSON]: with open(os.path.join(EXAMPLES_DIR, request.param)) as example_file: data = json.load(example_file) - return cast(Dict[str, JSON], data) + return cast(dict[str, JSON], data) @pytest.fixture(name="eurosat_resnet") diff --git a/tests/test_schema.py b/tests/test_schema.py index 4755978..83cfe29 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -1,6 +1,6 @@ import copy import os -from typing import Any, Dict, List, cast +from typing import Any, cast import pystac import pytest @@ -19,9 +19,9 @@ ) def test_mlm_schema( mlm_validator: STACValidator, - mlm_example: Dict[str, JSON], + mlm_example: dict[str, JSON], ) -> None: - mlm_item = pystac.Item.from_dict(cast(Dict[str, Any], mlm_example)) + mlm_item = pystac.Item.from_dict(cast(dict[str, Any], mlm_example)) validated = pystac.validation.validate(mlm_item, validator=mlm_validator) assert len(validated) >= len(mlm_item.stac_extensions) # extra STAC core schemas assert SCHEMA_URI in validated @@ -34,7 +34,7 @@ def test_mlm_schema( ) def test_mlm_missing_bands_invalid_if_mlm_input_lists_bands( mlm_validator: STACValidator, - mlm_example: Dict[str, JSON], + mlm_example: dict[str, JSON], ) -> None: mlm_item = pystac.Item.from_dict(mlm_example) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid @@ -53,7 +53,7 @@ def test_mlm_missing_bands_invalid_if_mlm_input_lists_bands( ) def test_mlm_eo_bands_invalid_only_in_item_properties( mlm_validator: STACValidator, - mlm_example: Dict[str, JSON], + mlm_example: dict[str, JSON], ) -> None: mlm_item = pystac.Item.from_dict(mlm_example) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid @@ -72,7 +72,7 @@ def test_mlm_eo_bands_invalid_only_in_item_properties( ) def test_mlm_no_input_allowed_but_explicit_empty_array_required( mlm_validator: STACValidator, - mlm_example: Dict[str, JSON], + mlm_example: dict[str, JSON], ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_data["properties"]["mlm:input"] = [] # type: ignore @@ -92,7 +92,7 @@ def test_mlm_no_input_allowed_but_explicit_empty_array_required( ) def test_mlm_other_non_mlm_assets_allowed( mlm_validator: STACValidator, - mlm_example: Dict[str, JSON], + mlm_example: dict[str, JSON], ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) @@ -121,7 +121,7 @@ def test_mlm_other_non_mlm_assets_allowed( ) def test_mlm_at_least_one_asset_model( mlm_validator: STACValidator, - mlm_example: Dict[str, JSON], + mlm_example: dict[str, JSON], ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) @@ -163,7 +163,7 @@ def test_collection_include_all_items(mlm_example): """ This is only for self-validation, to make sure all examples are contained in the example STAC collection. """ - col_links: List[Dict[str, str]] = mlm_example["links"] + col_links: list[dict[str, str]] = mlm_example["links"] col_items = {os.path.basename(link["href"]) for link in col_links if link["rel"] == "item"} all_items = {os.path.basename(path) for path in get_all_stac_item_examples()} assert all_items == col_items, "Missing STAC Item examples in the example STAC Collection links." From fe169535d6fb098a16aa3d358a1fdffff916f21d Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 1 Nov 2024 10:52:23 -0400 Subject: [PATCH 24/83] update example to 1.0.0 --- examples/collection.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/collection.json b/examples/collection.json index aff632b..0c596b4 100644 --- a/examples/collection.json +++ b/examples/collection.json @@ -1,5 +1,5 @@ { - "stac_version": "1.0.0-rc.1", + "stac_version": "1.0.0", "stac_extensions": [ "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json" ], From 5a849052a9f86cc2d0a58ecdf58f72ce6102ef8d Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 1 Nov 2024 11:00:01 -0400 Subject: [PATCH 25/83] remove docker, point to uv docs, uv badge --- .dockerignore | 39 ----------------------------------- .github/dependabot.yml | 10 --------- CONTRIBUTING.md | 19 +++++++++-------- Makefile | 7 ------- README_STAC_MODEL.md | 10 ++++----- docker/Dockerfile | 25 ---------------------- docker/README.md | 47 ------------------------------------------ 7 files changed, 15 insertions(+), 142 deletions(-) delete mode 100644 .dockerignore delete mode 100644 docker/Dockerfile delete mode 100644 docker/README.md diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index b6d76d3..0000000 --- a/.dockerignore +++ /dev/null @@ -1,39 +0,0 @@ -# Git -.git -.gitignore -.github - -# Docker -.dockerignore - -# IDE -.idea -.vscode - -# Byte-compiled / optimized / DLL files -__pycache__/ -**/__pycache__/ -*.pyc -*.pyo -*.pyd -.Python -*.py[cod] -*$py.class -.pytest_cache/ -..mypy_cache/ - -# poetry -.venv -requirements*.txt - -# C extensions -*.so - -# Virtual environment -.venv -venv - -.DS_Store -.AppleDouble -.LSOverride -._* diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8f872f1..ff92d7a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -23,13 +23,3 @@ updates: commit-message: prefix: ":arrow_up:" open-pull-requests-limit: 5 - - - package-ecosystem: "docker" - directory: "/docker" - schedule: - interval: "monthly" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 5 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a9adfdb..dc2ba61 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,23 +2,24 @@ ## Project setup -1. If you don't have `Poetry` installed run: +1. If you don't have `uv` installed run: ```bash -make poetry-install +make setup ``` -> This installs Poetry as a [standalone application][poetry-install].
-> For more details, see also the [Poetry Documentation][poetry-docs].
-> If you prefer, you can simply install it inside your virtual environment. +> This installs uv as a [standalone application][uv-install].
+> For more details, see also the [uv documentation][uv-docs].
-2. Initialize project dependencies with poetry and install `pre-commit` hooks: +2. Initialize project dependencies with uv and install `pre-commit` hooks: ```bash make install-dev make pre-commit-install ``` +This will install project dependencies into the currently active environment. If you would like to use uv's default behavior of managing a project-scoped environment, use uv commands directly to install dependencies. `uv sync` will install dependencies and dev dependencies in `.venv` and update the `uv.lock`. + ## PR submission Before submitting your code please do the following steps: @@ -85,7 +86,7 @@ git push -u origin your-branch ### Building a new version of `stac-model` - Apply any relevant changes and `CHANGELOG.md` entries in a PR that modifies `stac-model`. -- Bump the version with `poetry version `. +- Bump the version with `bumpversion bump `. - You can pass the new version explicitly, or a rule such as `major`, `minor`, or `patch`.
For more details, refer to the [Semantic Versions][semver] standard; - Once CI validation succeeded, merge the corresponding PR branch. @@ -110,6 +111,6 @@ You can also share how the ML Model extension does or does not serve your needs with us in the GitHub Discussions or raise Issues for bugs. -[poetry-install]: https://github.com/python-poetry/install.python-poetry.org -[poetry-docs]: https://python-poetry.org/docs/ +[uv-install]: https://docs.astral.sh/uv/getting-started/installation/ +[uv-docs]: https://docs.astral.sh/uv/ [semver]: https://semver.org/ diff --git a/Makefile b/Makefile index 90cc310..29f54cc 100644 --- a/Makefile +++ b/Makefile @@ -68,13 +68,6 @@ mypy: setup .PHONY: check-mypy check-mypy: mypy -# NOTE: -# purposely running with docker rather than python package due to conflicting dependencies -# see https://github.com/citation-file-format/cffconvert/issues/292 -.PHONY: check-citation -check-citation: - docker run --rm -v $(ACTIVEPYTHON)/CITATION.cff:/app/CITATION.cff citationcff/cffconvert --validate - .PHONY: check-safety check-safety: setup uv run --python $(ACTIVEPYTHON) safety check --full-report diff --git a/README_STAC_MODEL.md b/README_STAC_MODEL.md index 897f5cd..b60a37f 100644 --- a/README_STAC_MODEL.md +++ b/README_STAC_MODEL.md @@ -12,7 +12,7 @@ [![Contributions Welcome][bp8]][bp9] -[![Poetry][bp11]][bp12] +[![uv][bp11]][bp12] [![Pre-commit][bp15]][bp16] [![Semantic versions][blic3]][bp5] [![Pipelines][bscm6]][bscm7] @@ -30,10 +30,10 @@ _A PydanticV2 and PySTAC validation and serialization library for the STAC ML Mo pip install -U stac-model ``` -or install with `Poetry`: +or install with `uv`: ```shell -poetry add stac-model +uv add stac-model ``` Then you can run @@ -73,8 +73,8 @@ See [LICENSE][blic2] for more details. [bp7]: https://kutt.it/7fYqQl [bp8]: https://img.shields.io/static/v1.svg?label=Contributions&message=Welcome&color=0059b3&style=for-the-badge [bp9]: https://github.com/stac-extensions/mlm/blob/main/CONTRIBUTING.md -[bp11]: https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json&style=for-the-badge -[bp12]: https://python-poetry.org/ +[bp11]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json +[bp12]: https://docs.astral.sh/uv/ [bp15]: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge [bp16]: https://github.com/stac-extensions/mlm/blob/main/.pre-commit-config.yaml diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 6972457..0000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM python:3.11-slim-buster - -ENV LANG=C.UTF-8 \ - LC_ALL=C.UTF-8 \ - PATH="${PATH}:/root/.poetry/bin" - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - curl \ - && rm -rf /var/lib/apt/lists/* - -COPY pyproject.toml ./ - -# Install Poetry -RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python && \ - cd /usr/local/bin && \ - ln -s /opt/poetry/bin/poetry && \ - poetry config virtualenvs.create false - -# Allow installing dev dependencies to run tests -ARG INSTALL_DEV=false -RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi" - -CMD mkdir -p /workspace -WORKDIR /workspace diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index 614d5b4..0000000 --- a/docker/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Docker for stac-model - -## Installation - -To create Docker you need to run: - -```bash -make docker-build -``` - -which is equivalent to: - -```bash -make docker-build VERSION=latest -``` - -You may provide name and version for the image. -Default name is `IMAGE := stac_model`. -Default version is `VERSION := latest`. - -```bash -make docker-build IMAGE=some_name VERSION=0.1.0 -``` - -## Usage - -```bash -docker run -it --rm \ - -v $(pwd):/workspace \ - stac_model bash -``` - -## How to clean up - -To uninstall docker image run `make docker-remove` with `VERSION`: - -```bash -make docker-remove VERSION=0.1.0 -``` - -you may also choose the image name - -```bash -make docker-remove IMAGE=some_name VERSION=latest -``` - -If you want to clean all, including `build` and `pycache` run `make cleanup` From 15b7aae4320777f792ab54abf7cd617331244618 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 1 Nov 2024 11:03:06 -0400 Subject: [PATCH 26/83] line length fix --- CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dc2ba61..d1a29ab 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,7 +18,9 @@ make install-dev make pre-commit-install ``` -This will install project dependencies into the currently active environment. If you would like to use uv's default behavior of managing a project-scoped environment, use uv commands directly to install dependencies. `uv sync` will install dependencies and dev dependencies in `.venv` and update the `uv.lock`. +This will install project dependencies into the currently active environment. If you would like to +use uv's default behavior of managing a project-scoped environment, use uv commands directly to +install dependencies. `uv sync` will install dependencies and dev dependencies in `.venv` and update the `uv.lock`. ## PR submission From a94aaa5711d9f12dd647a226f402ecbb954c9a81 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 1 Nov 2024 11:42:43 -0400 Subject: [PATCH 27/83] fix style of uv badge and remove github pages badge --- README_STAC_MODEL.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README_STAC_MODEL.md b/README_STAC_MODEL.md index b60a37f..32a9f4a 100644 --- a/README_STAC_MODEL.md +++ b/README_STAC_MODEL.md @@ -8,7 +8,6 @@ [![PyPI Release][bp3]][bp2] [![Repository][bscm1]][bp4] [![Releases][bscm2]][bp5] -[![Docs][bdoc1]][bdoc2] [![Contributions Welcome][bp8]][bp9] @@ -73,7 +72,7 @@ See [LICENSE][blic2] for more details. [bp7]: https://kutt.it/7fYqQl [bp8]: https://img.shields.io/static/v1.svg?label=Contributions&message=Welcome&color=0059b3&style=for-the-badge [bp9]: https://github.com/stac-extensions/mlm/blob/main/CONTRIBUTING.md -[bp11]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json +[bp11]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json&style=for-the-badge [bp12]: https://docs.astral.sh/uv/ [bp15]: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge @@ -95,6 +94,3 @@ See [LICENSE][blic2] for more details. [hub6]: https://docs.github.com/en/code-security/dependabot [hub8]: https://github.com/stac-extensions/mlm/blob/main/.github/release-drafter.yml [hub9]: https://github.com/stac-extensions/mlm/blob/main/.github/.stale.yml - -[bdoc1]: https://img.shields.io/badge/docs-github%20pages-0a507a?style=for-the-badge -[bdoc2]: https://github.com/stac-extensions/mlm/blob/main/README_STAC_MODEL.md From ef82f26203cac288e4bccf365a2d3211d9abb3f3 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 1 Nov 2024 17:13:18 -0400 Subject: [PATCH 28/83] fix mlm:artifact_type check missing + update corresponding tests/examples (fixes #42) --- CHANGELOG.md | 4 +- README.md | 16 ++--- examples/item_bands_expression.json | 1 + examples/item_basic.json | 3 +- examples/item_eo_and_raster_bands.json | 2 +- examples/item_eo_bands.json | 1 + examples/item_eo_bands_summarized.json | 2 +- examples/item_multi_io.json | 1 + examples/item_raster_bands.json | 1 + json-schema/schema.json | 89 +++++++++++++++++++------- stac_model/examples.py | 1 + tests/test_schema.py | 37 ++++++++--- 12 files changed, 114 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 116e1d3..93449c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - n/a ### Fixed -- n/a +- Fix missing `mlm:artifact_type` property check for a Model Asset definition + (fixes ). + The `mlm:artifact_type` is now mutually and exclusively required by the corresponding Asset with `mlm:model` role. ## [v1.3.0](https://github.com/stac-extensions/mlm/tree/v1.3.0) diff --git a/README.md b/README.md index ad10344..d55685e 100644 --- a/README.md +++ b/README.md @@ -600,13 +600,13 @@ In order to provide more context, the following roles are also recommended were ### Model Asset -| Field Name | Type | Description | -|-------------------|-------------------------------------------|--------------------------------------------------------------------------------------------------| -| title | string | Description of the model asset. | -| href | string | URI to the model artifact. | -| type | string | The media type of the artifact (see [Model Artifact Media-Type](#model-artifact-media-type). | -| roles | \[string] | **REQUIRED** Specify `mlm:model`. Can include `["mlm:weights", "mlm:checkpoint"]` as applicable. | -| mlm:artifact_type | [Artifact Type Enum](#artifact-type-enum) | Specifies the kind of model artifact. Typically related to a particular ML framework. | +| Field Name | Type | Description | +|-------------------|---------------------------------|--------------------------------------------------------------------------------------------------| +| title | string | Description of the model asset. | +| href | string | URI to the model artifact. | +| type | string | The media type of the artifact (see [Model Artifact Media-Type](#model-artifact-media-type). | +| roles | \[string] | **REQUIRED** Specify `mlm:model`. Can include `["mlm:weights", "mlm:checkpoint"]` as applicable. | +| mlm:artifact_type | [Artifact Type](#artifact-type) | Specifies the kind of model artifact. Typically related to a particular ML framework. | Recommended Asset `roles` include `mlm:weights` or `mlm:checkpoint` for model weights that need to be loaded by a model definition and `mlm:compiled` for models that can be loaded directly without an intermediate model definition. @@ -642,7 +642,7 @@ official. In order to validate the specific framework and artifact type employed [iana-media-type]: https://www.iana.org/assignments/media-types/media-types.xhtml -#### Artifact Type Enum +#### Artifact Type This value can be used to provide additional details about the specific model artifact being described. For example, PyTorch offers [various strategies][pytorch-frameworks] for providing model definitions, diff --git a/examples/item_bands_expression.json b/examples/item_bands_expression.json index ea5d690..956f417 100644 --- a/examples/item_bands_expression.json +++ b/examples/item_bands_expression.json @@ -150,6 +150,7 @@ "mlm:model", "mlm:weights" ], + "mlm:artifact_type": "torch.save", "$comment": "Following 'eo:bands' is required to fulfil schema validation of 'eo' extension.", "eo:bands": [ { diff --git a/examples/item_basic.json b/examples/item_basic.json index 4ce3c24..3806446 100644 --- a/examples/item_basic.json +++ b/examples/item_basic.json @@ -120,7 +120,8 @@ "type": "text/html", "roles": [ "mlm:model" - ] + ], + "mlm:artifact_type": "torch.save" } }, "links": [ diff --git a/examples/item_eo_and_raster_bands.json b/examples/item_eo_and_raster_bands.json index d3fe6bf..8469f91 100644 --- a/examples/item_eo_and_raster_bands.json +++ b/examples/item_eo_and_raster_bands.json @@ -497,6 +497,7 @@ "mlm:model", "mlm:weights" ], + "mlm:artifact_type": "torch.save", "$comment": "Following 'eo:bands' is required to fulfil schema validation of 'eo' extension.", "eo:bands": [ { @@ -546,7 +547,6 @@ "description": "Source code to run the model.", "type": "text/x-python", "roles": [ - "mlm:model", "code", "metadata" ] diff --git a/examples/item_eo_bands.json b/examples/item_eo_bands.json index 23656a1..d02313e 100644 --- a/examples/item_eo_bands.json +++ b/examples/item_eo_bands.json @@ -273,6 +273,7 @@ "mlm:model", "mlm:weights" ], + "mlm:artifact_type": "torch.save", "$comment": "Following 'eo:bands' is required to fulfil schema validation of 'eo' extension.", "eo:bands": [ { diff --git a/examples/item_eo_bands_summarized.json b/examples/item_eo_bands_summarized.json index 8e20a17..8864505 100644 --- a/examples/item_eo_bands_summarized.json +++ b/examples/item_eo_bands_summarized.json @@ -366,6 +366,7 @@ "mlm:model", "mlm:weights" ], + "mlm:artifact_type": "torch.save", "$comment": "Following 'eo:bands' is required to fulfil schema validation of 'eo' extension.", "eo:bands": [ { @@ -415,7 +416,6 @@ "description": "Source code to run the model.", "type": "text/x-python", "roles": [ - "mlm:model", "code", "metadata" ] diff --git a/examples/item_multi_io.json b/examples/item_multi_io.json index 14c63f9..6db9aaa 100644 --- a/examples/item_multi_io.json +++ b/examples/item_multi_io.json @@ -228,6 +228,7 @@ "mlm:model", "mlm:weights" ], + "mlm:artifact_type": "torch.save", "raster:bands": [ { "name": "B02 - blue", diff --git a/examples/item_raster_bands.json b/examples/item_raster_bands.json index b97b06e..4e83bbf 100644 --- a/examples/item_raster_bands.json +++ b/examples/item_raster_bands.json @@ -216,6 +216,7 @@ "mlm:model", "mlm:weights" ], + "mlm:artifact_type": "torch.save", "raster:bands": [ { "name": "B01", diff --git a/json-schema/schema.json b/json-schema/schema.json index ff21357..6b662f0 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -63,8 +63,12 @@ "$ref": "#/$defs/AnyBandsRef" }, { - "$comment": "Schema to validate model role requirement.", + "$comment": "Schema to validate that at least one Asset defines a model role.", "$ref": "#/$defs/AssetModelRoleMinimumOneDefinition" + }, + { + "$comment": "Schema to validate that the Asset model properties are mutually exclusive to the model role.", + "$ref": "#/$defs/AssetModelRequiredProperties" } ] } @@ -369,6 +373,15 @@ "type": "string", "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" }, + "mlm:artifact_type": { + "type": "string", + "minLength": 1, + "examples": [ + "torch.save", + "torch.jit.save", + "torch.export.save" + ] + }, "mlm:tasks": { "type": "array", "uniqueItems": true, @@ -729,6 +742,57 @@ "DataType": { "$ref": "https://stac-extensions.github.io/raster/v1.1.0/schema.json#/definitions/bands/items/properties/data_type" }, + "HasArtifactType": { + "$comment": "Used to check the artifact type property that is required by a Model Asset annotated by 'mlm:model' role.", + "type": "object", + "required": [ + "mlm:artifact_type" + ], + "properties": { + "mlm:artifact_type": { + "$ref": "#/$defs/mlm:artifact_type" + } + } + }, + "AssetModelRole": { + "$comment": "Used to check the presence of 'mlm:model' role required by a Model Asset.", + "type": "object", + "required": [ + "roles" + ], + "properties": { + "roles": { + "type": "array", + "contains": { + "const": "mlm:model" + }, + "minItems": 1 + } + } + }, + "AssetModelRequiredProperties": { + "$comment": "Asset containing the model definition must indicate both the 'mlm:model' role and an artifact type.", + "required": [ + "assets" + ], + "properties": { + "assets": { + "additionalProperties": { + "if": { + "$ref": "#/$defs/AssetModelRole" + }, + "then": { + "$ref": "#/$defs/HasArtifactType" + }, + "else": { + "not": { + "$ref": "#/$defs/HasArtifactType" + } + } + } + } + } + }, "AssetModelRoleMinimumOneDefinition": { "$comment": "At least one Asset must provide the model definition indicated by the 'mlm:model' role.", "required": [ @@ -739,15 +803,7 @@ "properties": { "assets": { "additionalProperties": { - "properties": { - "roles": { - "type": "array", - "items": { - "const": "mlm:model" - }, - "minItems": 1 - } - } + "$ref": "#/$defs/AssetModelRole" } } } @@ -775,19 +831,6 @@ } ] }, - "AssetModelRole": { - "required": [ - "roles" - ], - "properties": { - "roles": { - "contains": { - "type": "string", - "const": "mlm:model" - } - } - } - }, "ModelBands": { "description": "List of bands (if any) that compose the input. Band order represents the index position of the bands.", "$comment": "No 'minItems' here to support model inputs not using any band (other data source).", diff --git a/stac_model/examples.py b/stac_model/examples.py index d882623..2d8cc41 100644 --- a/stac_model/examples.py +++ b/stac_model/examples.py @@ -128,6 +128,7 @@ def eurosat_resnet() -> ItemMLModelExtension: "mlm:weights", "data", ], + extra_fields={"mlm:artifact_type": "torch.save"} ), "source_code": pystac.Asset( title="Model implementation.", diff --git a/tests/test_schema.py b/tests/test_schema.py index 4755978..9f0acdd 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -119,25 +119,44 @@ def test_mlm_other_non_mlm_assets_allowed( ["item_basic.json"], indirect=True, ) +@pytest.mark.parametrize( + ["model_asset_extras", "is_valid"], + [ + ({"roles": ["checkpoint"]}, False), + ({"roles": ["checkpoint", "mlm:model"]}, False), + ({"roles": ["checkpoint"], "mlm:artifact_type": "test"}, False), + ({"roles": ["checkpoint", "mlm:model"], "mlm:artifact_type": "test"}, True), + ] +) def test_mlm_at_least_one_asset_model( mlm_validator: STACValidator, mlm_example: Dict[str, JSON], + model_asset_extras: Dict[str, Any], + is_valid: bool, ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # self-check valid beforehand - mlm_data["assets"] = { # needs at least 1 asset with role 'mlm:model' - "model": { - "type": "application/octet-stream; application=pytorch", - "href": "https://example.com/sample/checkpoint.pt", - "roles": ["checkpoint"], - "title": "Model Weights Checkpoint", - } + mlm_model = { + "type": "application/octet-stream; application=pytorch", + "href": "https://example.com/sample/checkpoint.pt", + "title": "Model Weights Checkpoint", } - with pytest.raises(pystac.errors.STACValidationError): - mlm_item = pystac.Item.from_dict(mlm_data) + mlm_model.update(model_asset_extras) + mlm_data["assets"] = { + "model": mlm_model + } + mlm_item = pystac.Item.from_dict(mlm_data) + if is_valid: pystac.validation.validate(mlm_item, validator=mlm_validator) + else: + with pytest.raises(pystac.errors.STACValidationError) as exc: + pystac.validation.validate(mlm_item, validator=mlm_validator) + assert exc.value.source[0].schema["$comment"] in [ + "At least one Asset must provide the model definition indicated by the 'mlm:model' role.", + "Used to check the artifact type property that is required by a Model Asset annotated by 'mlm:model' role." + ] def test_model_metadata_to_dict(eurosat_resnet): From caa85971db6c14981b438eef38ff6859271a0cdc Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 1 Nov 2024 17:19:29 -0400 Subject: [PATCH 29/83] ignore typing in tests --- tests/test_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index 9f0acdd..f9a77d1 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -153,7 +153,7 @@ def test_mlm_at_least_one_asset_model( else: with pytest.raises(pystac.errors.STACValidationError) as exc: pystac.validation.validate(mlm_item, validator=mlm_validator) - assert exc.value.source[0].schema["$comment"] in [ + assert exc.value.source[0].schema["$comment"] in [ # type: ignore "At least one Asset must provide the model definition indicated by the 'mlm:model' role.", "Used to check the artifact type property that is required by a Model Asset annotated by 'mlm:model' role." ] From b750dec7aa57045f06caca89b989e8d5e65410ae Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 1 Nov 2024 17:21:07 -0400 Subject: [PATCH 30/83] ignore test typing --- tests/test_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index 3958b55..fec5660 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -40,7 +40,7 @@ def test_mlm_no_undefined_prefixed_field( mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid - mlm_data["properties"]["mlm:unknown"] = "random" + mlm_data["properties"]["mlm:unknown"] = "random" # type: ignore with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) From 24140750e80214a4492429f0490d278150705fe4 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Fri, 1 Nov 2024 17:22:39 -0400 Subject: [PATCH 31/83] more test typing ignore --- tests/test_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index f9a77d1..3ba15ec 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -145,7 +145,7 @@ def test_mlm_at_least_one_asset_model( } mlm_model.update(model_asset_extras) mlm_data["assets"] = { - "model": mlm_model + "model": mlm_model # type: ignore } mlm_item = pystac.Item.from_dict(mlm_data) if is_valid: From 7f70ce47d9fb4d17b29fb7b2ad630c6a67d05acc Mon Sep 17 00:00:00 2001 From: Francis Charette-Migneault Date: Mon, 4 Nov 2024 01:25:53 -0500 Subject: [PATCH 32/83] add missing close parenthesis --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ad10344..a8b52ff 100644 --- a/README.md +++ b/README.md @@ -342,7 +342,7 @@ properties of the model. | Field Name | Type | Description | |------------|--------|----------------------------------------------------------------------------------------------------------------------------------------| -| name | string | **REQUIRED** Name of the band referring to an extended band definition (see [Bands](#bands-and-statistics). | +| name | string | **REQUIRED** Name of the band referring to an extended band definition (see [Bands](#bands-and-statistics) detiails). | | format | string | The type of expression that is specified in the `expression` property. | | expression | \* | An expression compliant with the `format` specified. The expression can be applied to any data type and depends on the `format` given. | From 43c0aaf87fdceefbf57338d4fe573f9c320d2f9e Mon Sep 17 00:00:00 2001 From: Francis Charette-Migneault Date: Mon, 4 Nov 2024 01:26:21 -0500 Subject: [PATCH 33/83] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a8b52ff..1f4c05b 100644 --- a/README.md +++ b/README.md @@ -342,7 +342,7 @@ properties of the model. | Field Name | Type | Description | |------------|--------|----------------------------------------------------------------------------------------------------------------------------------------| -| name | string | **REQUIRED** Name of the band referring to an extended band definition (see [Bands](#bands-and-statistics) detiails). | +| name | string | **REQUIRED** Name of the band referring to an extended band definition (see [Bands](#bands-and-statistics) details). | | format | string | The type of expression that is specified in the `expression` property. | | expression | \* | An expression compliant with the `format` specified. The expression can be applied to any data type and depends on the `format` given. | From 56a48f54a7ff0c06e24482a51af6f65a6f21aa51 Mon Sep 17 00:00:00 2001 From: Francis Charette-Migneault Date: Mon, 4 Nov 2024 01:30:11 -0500 Subject: [PATCH 34/83] fix invalid dimensions of MLM inputs/outputs example --- examples/item_bands_expression.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/item_bands_expression.json b/examples/item_bands_expression.json index ea5d690..edd4a41 100644 --- a/examples/item_bands_expression.json +++ b/examples/item_bands_expression.json @@ -86,7 +86,7 @@ "input": { "shape": [ -1, - 13, + 4, 64, 64 ], @@ -110,7 +110,7 @@ "result": { "shape": [ -1, - 10 + 2 ], "dim_order": [ "batch", From 768ac13b80c187a408cbc237350d005de5c58c66 Mon Sep 17 00:00:00 2001 From: Francis Charette-Migneault Date: Mon, 4 Nov 2024 01:44:43 -0500 Subject: [PATCH 35/83] fix typo --- best-practices.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/best-practices.md b/best-practices.md index dcdf389..d7e1675 100644 --- a/best-practices.md +++ b/best-practices.md @@ -116,7 +116,7 @@ A potential representation of a STAC Asset could be as follows: Furthermore, the STAC Item representing the derived product could also include a [Link Object](https://github.com/radiantearth/stac-spec/tree/master/item-spec/item-spec.md#link-object) referring back to the MLM definition using `rel: derived_from`, as described in -[MLM Relation Types](README.md#relation-types). Such a link would like something like the following: +[MLM Relation Types](README.md#relation-types). Such a link would look something like the following: ```json { From 0cc32e98c6c0aeff1ebf09c4a141d36a9c3cfb95 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Tue, 5 Nov 2024 11:11:54 -0500 Subject: [PATCH 36/83] update scaling -> value_scaling and corresponding definitions --- CHANGELOG.md | 31 ++++++++++-------- README.md | 45 +++++++++++++------------- examples/item_eo_and_raster_bands.json | 2 +- examples/item_eo_bands.json | 2 +- examples/item_eo_bands_summarized.json | 2 +- examples/item_multi_io.json | 2 +- examples/item_raster_bands.json | 2 +- json-schema/schema.json | 14 ++++---- stac_model/examples.py | 8 ++--- stac_model/input.py | 36 ++++++++++----------- tests/test_schema.py | 2 +- 11 files changed, 75 insertions(+), 71 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50951dd..8e606f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,16 +8,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/stac-extensions/mlm/tree/main) ### Added -- Add explicit check of `scaling` sub-fields `minimum`, `maximum`, `mean`, `stddev`, etc. for corresponding `type` - values `min-max` and `z-score` that depend on it. -- Allow different `scaling` operations per band/channel/dimension as needed by the model. -- Allow a `processing:expression` for a band/channel/dimension-specific `scaling` operation, granting more flexibility - in the definition of input preparation in contrast to having it applied for the entire input (but still possible). +- Add explicit check of `value_scaling` sub-fields `minimum`, `maximum`, `mean`, `stddev`, etc. for + corresponding `type` values `min-max` and `z-score` that depend on it. +- Allow different `value_scaling` operations per band/channel/dimension as needed by the model. +- Allow a `processing:expression` for a band/channel/dimension-specific `value_scaling` operation, + granting more flexibility in the definition of input preparation in contrast to having it applied + for the entire input (but still possible). ### Changed -- Moved `norm_type` to `scaling` object to better reflect the expected operation, which could be another operation - than what is typically known as "normalization" or "standardization" techniques in machine learning. -- Moved `statistics` to `scaling` object to better reflect their mutual `type` and additional properties dependencies. +- Moved `norm_type` to `value_scaling` object to better reflect the expected operation, which could be another + operation than what is typically known as "normalization" or "standardization" techniques in machine learning. +- Moved `statistics` to `value_scaling` object to better reflect their mutual `type` and additional + properties dependencies. ### Deprecated - n/a @@ -25,10 +27,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed - Removed `norm_type` enum values that were ambiguous regarding their expected result. Instead, a `processing:expression` should be employed to explicitly define the calculation they represent. -- Removed `norm_clip` property. It is now represented under `scaling` objects with a corresponding `type` definition. +- Removed `norm_clip` property. It is now represented under `value_scaling` objects with a + corresponding `type` definition. - Removed `norm_by_channel` from `mlm:input` objects. If rescaling (previously normalization in the documentation) is a single value, broadcasting to the relevant bands should be performed implicitly. - Otherwise, the amount of `scaling` objects should match the number of bands or channels involved in the input. + Otherwise, the amount of `value_scaling` objects should match the number of bands or channels involved in the input. ### Fixed - n/a @@ -62,7 +65,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 when a `mlm:input` references names in `bands` are now properly validated. - Fix the examples using `raster:bands` incorrectly defined in STAC Item properties. The correct use is for them to be defined under the STAC Asset using the `mlm:model` role. -- Fix the [EuroSAT ResNet pydantic example](./stac_model/examples.py) that incorrectly referenced some `bands` +- Fix the [EuroSAT ResNet pydantic example](stac_model/examples.py) that incorrectly referenced some `bands` in its `mlm:input` definition without providing any definition of those bands. The `eo:bands` properties have been added to the corresponding `model` Asset using the [`pystac.extensions.eo`](https://github.com/stac-utils/pystac/blob/main/pystac/extensions/eo.py) utilities. @@ -123,7 +126,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - more [Task Enum](README.md#task-enum) tasks - [Model Output Object](README.md#model-output-object) - batch_size and hardware summary -- [`mlm:accelerator`, `mlm:accelerator_constrained`, `mlm:accelerator_summary`](./README.md#accelerator-type-enum) +- [`mlm:accelerator`, `mlm:accelerator_constrained`, `mlm:accelerator_summary`](README.md#accelerator-type-enum) to specify hardware requirements for the model - Use common metadata [Asset Object](https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#asset-object) @@ -138,7 +141,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 STAC Item properties (top-level, not nested) to allow better search support by STAC API. - reorganized `dlm:architecture` nested fields to exist at the top level of properties as `mlm:name`, `mlm:summary` and so on to provide STAC API search capabilities. -- replaced `normalization:mean`, etc. with [statistics](./README.md#bands-and-statistics) from STAC 1.1 common metadata +- replaced `normalization:mean`, etc. with [statistics](README.md#bands-and-statistics) from STAC 1.1 common metadata - added `pydantic` models for internal schema objects in `stac_model` package and published to PYPI - specified [rel_type](README.md#relation-types) to be `derived_from` and specify how model item or collection json should be named @@ -154,7 +157,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - any `dlm`-prefixed field or property ### Removed -- Data Object, replaced with [Model Input Object](./README.md#model-input-object) that uses the `name` field from +- Data Object, replaced with [Model Input Object](README.md#model-input-object) that uses the `name` field from the [common metadata band object][stac-bands] which also records `data_type` and `nodata` type ### Fixed diff --git a/README.md b/README.md index 96723f3..dec7a96 100644 --- a/README.md +++ b/README.md @@ -259,15 +259,15 @@ set to `true`, there would be no `accelerator` to contain against. To avoid conf ### Model Input Object -| Field Name | Type | Description | -|-------------------------|---------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| name | string | **REQUIRED** Name of the input variable defined by the model. If no explicit name is defined by the model, an informative name (e.g.: `"RGB Time Series"`) can be used instead. | -| bands | \[string \| [Model Band Object](#model-band-object)] | **REQUIRED** The raster band references used to train, fine-tune or perform inference with the model, which may be all or a subset of bands available in a STAC Item's [Band Object](#bands-and-statistics). If no band applies for one input, use an empty array. | -| input | [Input Structure Object](#input-structure-object) | **REQUIRED** The N-dimensional array definition that describes the shape, dimension ordering, and data type. | -| description | string | Additional details about the input such as describing its purpose or expected source that cannot be represented by other properties. | -| scaling | \[[Scaling Object](#bands-and-statistics)] \| null | Method to scale, normalize, or standardize the data inputs, or `null` if none applies. These values often correspond to dataset or sensor statistics employed for training the model, but can come from another source as needed by the model definition. Consider using `pre_processing_function` for custom implementations or more complex combinations. | -| resize_type | [Resize Enum](#resize-enum) \| null | High-level descriptor of the rescaling method to change image shape. Select an appropriate option or `null` when none applies. Consider using `pre_processing_function` for custom implementations or more complex combinations. | -| pre_processing_function | [Processing Expression](#processing-expression) \| null | Custom preprocessing function where normalization and rescaling, and any other significant operations takes place. The `pre_processing_function` should be applied over all available `bands`. For respective band operations, see [Model Band Object](#model-band-object). | +| Field Name | Type | Description | +|-------------------------|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| name | string | **REQUIRED** Name of the input variable defined by the model. If no explicit name is defined by the model, an informative name (e.g.: `"RGB Time Series"`) can be used instead. | +| bands | \[string \| [Model Band Object](#model-band-object)] | **REQUIRED** The raster band references used to train, fine-tune or perform inference with the model, which may be all or a subset of bands available in a STAC Item's [Band Object](#bands-and-statistics). If no band applies for one input, use an empty array. | +| input | [Input Structure Object](#input-structure-object) | **REQUIRED** The N-dimensional array definition that describes the shape, dimension ordering, and data type. | +| description | string | Additional details about the input such as describing its purpose or expected source that cannot be represented by other properties. | +| value_scaling | \[[Value Scaling Object](#value-scaling-object)] \| null | Method to scale, normalize, or standardize the data inputs values, across dimensions, per corresponding dimension index, or `null` if none applies. These values often correspond to dataset or sensor statistics employed for training the model, but can come from another source as needed by the model definition. Consider using `pre_processing_function` for custom implementations or more complex combinations. | +| resize_type | [Resize Enum](#resize-enum) \| null | High-level descriptor of the resize method to modify the input dimensions shape. Select an appropriate option or `null` when none applies. Consider using `pre_processing_function` for custom implementations or more complex combinations. | +| pre_processing_function | [Processing Expression](#processing-expression) \| null | Custom preprocessing function where rescaling and resize, and any other significant data preparation operations takes place. The `pre_processing_function` should be applied over all available `bands`. For respective band operations, see [Model Band Object](#model-band-object). | Fields that accept the `null` value can be considered `null` when omitted entirely for parsing purposes. However, setting `null` explicitly when this information is known by the model provider can help users understand @@ -333,9 +333,9 @@ any `bands` definition. In such case, defining statistics under `bands` would no ambiguous definitions. Finally, contrary to the "`statistics`" property name employed by [Band Statistics][stac-1.1-stats], MLM employs the -distinct name `scaling`, although similar `minimum`, `maximum`, etc. sub-fields are employed. +distinct name `value_scaling`, although similar `minimum`, `maximum`, etc. sub-fields are employed. This is done explicitly to disambiguate "informative" band statistics from "applied scaling operations" required -by the model inputs. This highlights the fact that `scaling` are not *necessarily* equal +by the model inputs. This highlights the fact that `value_scaling` are not *necessarily* equal to [Band Statistics][stac-1.1-stats] values, although they are often equal in practice due to the applicable value-range domains they represent. Also, this allows addressing special scaling cases, using additional properties unavailable from [Band Statistics][stac-1.1-stats], such as `value`-specific scaling @@ -420,7 +420,7 @@ Below are some notable common names recommended for use, but others can be emplo For example, a tensor of multiple RBG images represented as $B \times C \times H \times W$ should indicate `dim_order = ["batch", "channel", "height", "width"]`. -#### Scaling Object +#### Value Scaling Object Select one option from: @@ -439,22 +439,22 @@ When a scaling `type` approach is specified, it is expected that the parameters to perform their calculation are provided for the corresponding input dimension data. If none of the above values applies for a given dimension, `type: null` (literal `null`, not string) should be -used instead. If none of the input dimension require scaling, the entire definition can be defined as `scaling: null` -or be omitted entirely. +used instead. If none of the input dimension require scaling, the entire definition can be defined +as `value_scaling: null` or be omitted entirely. -When `scaling` is specified, the amount of objects defined in the array must match the size of -the bands/channels/dimensions described by the [Model Input](#model-input-object). However, the `scaling` array +When `value_scaling` is specified, the amount of objects defined in the array must match the size of +the bands/channels/dimensions described by the [Model Input](#model-input-object). However, the `value_scaling` array is allowed to contain a single object if the entire input must be rescaled using the same definition across all -dimensions. In such case, implicit broadcasting of the unique [Scaling Object](#scaling-object) should be +dimensions. In such case, implicit broadcasting of the unique [Value Scaling Object](#value-scaling-object) should be performed for all applicable dimensions when running inference with the model. If a custom scaling operation, or a combination of more complex operations (with or without [Resize](#resize-enum)), must be defined instead, a [Processing Expression](#processing-expression) reference can be specified in place of -the [Scaling Object](#scaling-object) of the respective input dimension, as shown below. +the [Value Scaling Object](#value-scaling-object) of the respective input dimension, as shown below. ```json { - "scaling": [ + "value_scaling": [ {"type": "min-max", "minimum": 0, "maximum": 255}, {"type": "clip", "minimum": 0, "maximum": 255}, {"type": "processing", "format": "gdal-calc", "expression": "A * logical_or( A<=177, A>=185 )"} @@ -467,7 +467,7 @@ This is because, depending on the [Model Input](#model-input-object) dimensions ambiguity regarding "how" and "where" such normalization functions must be applied against the input data. A custom mathematical expression should provide explicitly the data manipulation and normalization strategy. -In situations of very complex `scaling` operations, which cannot be represented by any of the previous definition, +In situations of very complex `value_scaling` operations, which cannot be represented by any of the previous definition, a `pre_processing_function` should be used instead (see [Model Input Object](#model-input-object)). #### Resize Enum @@ -488,7 +488,8 @@ See [OpenCV - Interpolation Flags][opencv-interpolation-flags] for details about the relevant methods. Equivalent methods from other packages are applicable as well. If none of the above values applies, `null` (literal, not string) can be used instead. -If a custom rescaling operation, or a combination of operations (with or without [Scaling](#scaling-object)), +If a custom rescaling operation, or a combination of operations +(with or without [Value Scaling](#value-scaling-object)), must be defined instead, consider using a [Processing Expression](#processing-expression) reference. [opencv-interpolation-flags]: https://docs.opencv.org/4.x/da/d54/group__imgproc__transform.html#ga5bb5a1fea74ea38e1a5445ca803ff121 @@ -536,7 +537,7 @@ the following formats are recommended as alternative scripts and function refere | result | [Result Structure Object](#result-structure-object) | **REQUIRED** The structure that describes the resulting output arrays/tensors from one model head. | | description | string | Additional details about the output such as describing its purpose or expected result that cannot be represented by other properties. | | classification:classes | \[[Class Object](#class-object)] | A list of class objects adhering to the [Classification Extension](https://github.com/stac-extensions/classification). | -| post_processing_function | [Processing Expression](#processing-expression) \| null | Custom postprocessing function where normalization and rescaling, and any other significant operations takes place. | +| post_processing_function | [Processing Expression](#processing-expression) \| null | Custom postprocessing function where normalization, rescaling, or any other significant operations takes place. | While only `tasks` is a required field, all fields are recommended for tasks that produce a fixed shape tensor and have output classes. Outputs that have variable dimensions, can define the `result` with the diff --git a/examples/item_eo_and_raster_bands.json b/examples/item_eo_and_raster_bands.json index ab521f1..3c9da1d 100644 --- a/examples/item_eo_and_raster_bands.json +++ b/examples/item_eo_and_raster_bands.json @@ -97,7 +97,7 @@ "data_type": "float32" }, "resize_type": null, - "scaling": [ + "value_scaling": [ { "type": "z-score", "mean": 1354.40546513, diff --git a/examples/item_eo_bands.json b/examples/item_eo_bands.json index cd820c8..569c54b 100644 --- a/examples/item_eo_bands.json +++ b/examples/item_eo_bands.json @@ -99,7 +99,7 @@ }, "norm_by_channel": true, "resize_type": null, - "scaling": [ + "value_scaling": [ { "type": "z-score", "mean": 1354.40546513, diff --git a/examples/item_eo_bands_summarized.json b/examples/item_eo_bands_summarized.json index d27cade..53c66ab 100644 --- a/examples/item_eo_bands_summarized.json +++ b/examples/item_eo_bands_summarized.json @@ -98,7 +98,7 @@ "data_type": "float32" }, "resize_type": null, - "scaling": [ + "value_scaling": [ { "type": "z-score", "mean": 1354.40546513, diff --git a/examples/item_multi_io.json b/examples/item_multi_io.json index e92fe6d..dce2b87 100644 --- a/examples/item_multi_io.json +++ b/examples/item_multi_io.json @@ -85,7 +85,7 @@ ], "data_type": "uint16" }, - "scaling": null, + "value_scaling": null, "resize_type": null }, { diff --git a/examples/item_raster_bands.json b/examples/item_raster_bands.json index 24b36a5..c52fd42 100644 --- a/examples/item_raster_bands.json +++ b/examples/item_raster_bands.json @@ -95,7 +95,7 @@ ], "data_type": "float32" }, - "scaling": null, + "value_scaling": null, "resize_type": null, "pre_processing_function": { "format": "python", diff --git a/json-schema/schema.json b/json-schema/schema.json index 76532d9..4040641 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -516,8 +516,8 @@ "type": "string", "minLength": 1 }, - "scaling": { - "$ref": "#/$defs/Scaling" + "value_scaling": { + "$ref": "#/$defs/ValueScaling" }, "resize_type": { "$ref": "#/$defs/ResizeType" @@ -639,7 +639,7 @@ ] } }, - "Scaling": { + "ValueScaling": { "oneOf": [ { "type": "null" @@ -648,12 +648,12 @@ "type": "array", "minItems": 1, "items": { - "$ref": "#/$defs/ScalingObject" + "$ref": "#/$defs/ValueScalingObject" } } ] }, - "ScalingObject": { + "ValueScalingObject": { "oneOf": [ { "type": "object", @@ -776,11 +776,11 @@ } }, { - "$ref": "#/$defs/ScalingProcessingExpression" + "$ref": "#/$defs/ValueScalingProcessingExpression" } ] }, - "ScalingProcessingExpression": { + "ValueScalingProcessingExpression": { "allOf": [ { "type": "object", diff --git a/stac_model/examples.py b/stac_model/examples.py index 497ae93..a41b233 100644 --- a/stac_model/examples.py +++ b/stac_model/examples.py @@ -7,7 +7,7 @@ from pystac.extensions.file import FileExtension from stac_model.base import ProcessingExpression -from stac_model.input import InputStructure, ModelInput, ScalingObject +from stac_model.input import InputStructure, ModelInput, ValueScalingObject from stac_model.output import MLMClassification, ModelOutput, ModelResult from stac_model.schema import ItemMLModelExtension, MLModelExtension, MLModelProperties @@ -63,9 +63,9 @@ def eurosat_resnet() -> ItemMLModelExtension: 761.30323499, 1231.58581042, ] - scaling = [ + value_scaling = [ cast( - ScalingObject, + ValueScalingObject, dict( type="z-score", mean=mean, @@ -79,7 +79,7 @@ def eurosat_resnet() -> ItemMLModelExtension: bands=band_names, input=input_struct, resize_type=None, - scaling=scaling, + value_scaling=value_scaling, pre_processing_function=ProcessingExpression( format="python", expression="torchgeo.datamodules.eurosat.EuroSATDataModule.collate_fn", diff --git a/stac_model/input.py b/stac_model/input.py index 20dc84e..7941a36 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -18,58 +18,58 @@ def validate_dimensions(self) -> Self: return self -class ScalingClipMin(MLMBaseModel): +class ValueScalingClipMin(MLMBaseModel): type: Literal["clip-min"] = "clip-min" minimum: Number -class ScalingClipMax(MLMBaseModel): +class ValueScalingClipMax(MLMBaseModel): type: Literal["clip-max"] = "clip-max" maximum: Number -class ScalingClip(MLMBaseModel): +class ValueScalingClip(MLMBaseModel): type: Literal["clip"] = "clip" minimum: Number maximum: Number -class ScalingMinMax(MLMBaseModel): +class ValueScalingMinMax(MLMBaseModel): type: Literal["min-max"] = "min-max" minimum: Number maximum: Number -class ScalingZScore(MLMBaseModel): +class ValueScalingZScore(MLMBaseModel): type: Literal["z-score"] = "z-score" mean: Number stddev: Number -class ScalingOffset(MLMBaseModel): +class ValueScalingOffset(MLMBaseModel): type: Literal["offset"] = "offset" value: Number -class ScalingScale(MLMBaseModel): +class ValueScalingScale(MLMBaseModel): type: Literal["scale"] = "scale" value: Number -class ScalingProcessingExpression(ProcessingExpression): +class ValueScalingProcessingExpression(ProcessingExpression): type: Literal["processing"] = "processing" -ScalingObject: TypeAlias = Optional[ +ValueScalingObject: TypeAlias = Optional[ Union[ - ScalingMinMax, - ScalingZScore, - ScalingClip, - ScalingClipMin, - ScalingClipMax, - ScalingOffset, - ScalingScale, - ScalingProcessingExpression, + ValueScalingMinMax, + ValueScalingZScore, + ValueScalingClip, + ValueScalingClipMin, + ValueScalingClipMax, + ValueScalingOffset, + ValueScalingScale, + ValueScalingProcessingExpression, ] ] @@ -138,6 +138,6 @@ class ModelInput(MLMBaseModel): ], ) input: InputStructure - scaling: Annotated[Optional[List[ScalingObject]], OmitIfNone] = None + value_scaling: Annotated[Optional[List[ValueScalingObject]], OmitIfNone] = None resize_type: Annotated[Optional[ResizeType], OmitIfNone] = None pre_processing_function: Optional[ProcessingExpression] = None diff --git a/tests/test_schema.py b/tests/test_schema.py index 73e9789..c7cc9fb 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -118,7 +118,7 @@ def test_mlm_input_scaling_combination( mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid - mlm_data["properties"]["mlm:input"][0]["scaling"] = test_scaling # type: ignore + mlm_data["properties"]["mlm:input"][0]["value_scaling"] = test_scaling # type: ignore mlm_item = pystac.Item.from_dict(mlm_data) if is_valid: pystac.validation.validate(mlm_item, validator=mlm_validator) From 278b75acd0e4f42b3f0de234cf43e253caade4a4 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Tue, 5 Nov 2024 11:14:14 -0500 Subject: [PATCH 37/83] fix missing replace --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 98f0735..265ac4d 100644 --- a/README.md +++ b/README.md @@ -339,7 +339,7 @@ by the model inputs. This highlights the fact that `value_scaling` are not *nece to [Band Statistics][stac-1.1-stats] values, although they are often equal in practice due to the applicable value-range domains they represent. Also, this allows addressing special scaling cases, using additional properties unavailable from [Band Statistics][stac-1.1-stats], such as `value`-specific scaling -(see [Scaling Object](#scaling-object) for more details). +(see [Value Scaling Object](#value-scaling-object) for more details). [stac-1.1-band]: https://github.com/radiantearth/stac-spec/blob/v1.1.0/commons/common-metadata.md#bands [stac-1.1-stats]: https://github.com/radiantearth/stac-spec/blob/v1.1.0/commons/common-metadata.md#statistics-object From 8471a496325eb115bb1ae066008fabf56c4a04e2 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 5 Nov 2024 09:58:53 -0800 Subject: [PATCH 38/83] ignore line length for certain lists, remove remove command --- .github/workflows/test.yaml | 2 +- README_STAC_MODEL.md | 2 +- pyproject.toml | 2 +- stac_model/input.py | 26 ++++++++++++++++++++++++-- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 03169a5..9d8e0ac 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -11,5 +11,5 @@ jobs: - uses: actions/checkout@v4 - run: | npm install - npm test npm list + npm test diff --git a/README_STAC_MODEL.md b/README_STAC_MODEL.md index 32a9f4a..0217e7e 100644 --- a/README_STAC_MODEL.md +++ b/README_STAC_MODEL.md @@ -29,7 +29,7 @@ _A PydanticV2 and PySTAC validation and serialization library for the STAC ML Mo pip install -U stac-model ``` -or install with `uv`: +or install with uv: ```shell uv add stac-model diff --git a/pyproject.toml b/pyproject.toml index 0bd5f97..39e68c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,7 +86,7 @@ stac-model = "stac_model.__main__:app" # NOTE: # Although these definitions are provided in this 'stac-model' project file, # they are actually intented for versioning the MLM specification itself. -# To version 'stac-model', use the 'bumpversion bump' operation. +# To version 'stac-model', use the 'bump-my-version bump' operation. # See also https://github.com/stac-extensions/mlm/blob/main/CONTRIBUTING.md#building-and-releasing current_version = "1.3.0" parse = "(?P\\d+)\\.(?P\\d+)\\.(?P\\d+)" diff --git a/stac_model/input.py b/stac_model/input.py index 3001941..b40a458 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -28,9 +28,31 @@ class MLMStatistic(MLMBaseModel): # FIXME: add 'Statistics' dep from raster ext valid_percent: Annotated[Number | None, OmitIfNone] = None -NormalizeType: TypeAlias = Literal["min-max", "z-score", "l1", "l2", "l2sqr", "hamming", "hamming2", "type-mask", "relative", "inf"] | None +NormalizeType: TypeAlias = Literal[ + "min-max", + "z-score", + "l1", + "l2", + "l2sqr", + "hamming", + "hamming2", + "type-mask", + "relative", + "inf", + ] | None # noqa: E501 -ResizeType: TypeAlias = Literal["crop", "pad", "interpolation-nearest", "interpolation-linear", "interpolation-cubic", "interpolation-area", "interpolation-lanczos4", "interpolation-max", "wrap-fill-outliers", "wrap-inverse-map"] | None +ResizeType: TypeAlias = Literal[ + "crop", + "pad", + "interpolation-nearest", + "interpolation-linear", + "interpolation-cubic", + "interpolation-area", + "interpolation-lanczos4", + "interpolation-max", + "wrap-fill-outliers", + "wrap-inverse-map", + ] | None # noqa: E501 class ModelBand(MLMBaseModel): From d7278bf79472ea105e15390f768985372e53ae24 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 5 Nov 2024 10:01:05 -0800 Subject: [PATCH 39/83] make format --- CONTRIBUTING.md | 6 +++--- Makefile | 12 ------------ stac_model/input.py | 14 ++++++++++---- stac_model/schema.py | 9 +++------ 4 files changed, 16 insertions(+), 25 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d1a29ab..47b5169 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ ## Project setup -1. If you don't have `uv` installed run: +1. If you don't have uv installed run: ```bash make setup @@ -18,8 +18,8 @@ make install-dev make pre-commit-install ``` -This will install project dependencies into the currently active environment. If you would like to -use uv's default behavior of managing a project-scoped environment, use uv commands directly to +This will install project dependencies into the currently active environment. If you would like to +use uv's default behavior of managing a project-scoped environment, use uv commands directly to install dependencies. `uv sync` will install dependencies and dev dependencies in `.venv` and update the `uv.lock`. ## PR submission diff --git a/Makefile b/Makefile index 29f54cc..4e51def 100644 --- a/Makefile +++ b/Makefile @@ -11,18 +11,6 @@ setup: echo "uv is already installed"; \ fi -.PHONY: remove -remove: - @read -p "Are you sure you want to remove uv and all its data? [y/N] " confirm && \ - if [ "$$confirm" = "y" ]; then \ - uv cache clean; \ - rm -r "$$(uv python dir)"; \ - rm -r "$$(uv tool dir)"; \ - rm ~/.cargo/bin/uv ~/.cargo/bin/uvx; \ - else \ - echo "Operation cancelled."; \ - fi - .PHONY: publish publish: uv publish --build diff --git a/stac_model/input.py b/stac_model/input.py index b40a458..8e831db 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -28,7 +28,8 @@ class MLMStatistic(MLMBaseModel): # FIXME: add 'Statistics' dep from raster ext valid_percent: Annotated[Number | None, OmitIfNone] = None -NormalizeType: TypeAlias = Literal[ +NormalizeType: TypeAlias = ( + Literal[ "min-max", "z-score", "l1", @@ -39,9 +40,12 @@ class MLMStatistic(MLMBaseModel): # FIXME: add 'Statistics' dep from raster ext "type-mask", "relative", "inf", - ] | None # noqa: E501 + ] + | None +) # noqa: E501 -ResizeType: TypeAlias = Literal[ +ResizeType: TypeAlias = ( + Literal[ "crop", "pad", "interpolation-nearest", @@ -52,7 +56,9 @@ class MLMStatistic(MLMBaseModel): # FIXME: add 'Statistics' dep from raster ext "interpolation-max", "wrap-fill-outliers", "wrap-inverse-map", - ] | None # noqa: E501 + ] + | None +) # noqa: E501 class ModelBand(MLMBaseModel): diff --git a/stac_model/schema.py b/stac_model/schema.py index aea1e41..e2d2b5a 100644 --- a/stac_model/schema.py +++ b/stac_model/schema.py @@ -94,18 +94,15 @@ def get_schema_uri(cls) -> str: @overload @classmethod - def ext(cls, obj: pystac.Asset, add_if_missing: bool = False) -> "AssetMLModelExtension": - ... + def ext(cls, obj: pystac.Asset, add_if_missing: bool = False) -> "AssetMLModelExtension": ... @overload @classmethod - def ext(cls, obj: pystac.Item, add_if_missing: bool = False) -> "ItemMLModelExtension": - ... + def ext(cls, obj: pystac.Item, add_if_missing: bool = False) -> "ItemMLModelExtension": ... @overload @classmethod - def ext(cls, obj: pystac.Collection, add_if_missing: bool = False) -> "CollectionMLModelExtension": - ... + def ext(cls, obj: pystac.Collection, add_if_missing: bool = False) -> "CollectionMLModelExtension": ... # @overload # @classmethod From 277b1d7bbb458cacb6e324cb85e0cd818ecda3b8 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 5 Nov 2024 10:30:12 -0800 Subject: [PATCH 40/83] fix if condition on linux, linitng --- Makefile | 7 ++++--- tests/test_schema.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 4e51def..2240e8f 100644 --- a/Makefile +++ b/Makefile @@ -5,10 +5,11 @@ ACTIVEPYTHON = $(shell which python) #* UV .PHONY: setup setup: - @if ! command -v uv &> /dev/null; then \ - curl -LsSf https://astral.sh/uv/install.sh | sh; \ - else \ + @if command -v uv &> /dev/null; then \ echo "uv is already installed"; \ + else \ + echo "uv not found, installing..."; \ + curl -LsSf https://astral.sh/uv/install.sh | sh; \ fi .PHONY: publish diff --git a/tests/test_schema.py b/tests/test_schema.py index 7864f14..0f949b2 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -34,7 +34,7 @@ def test_mlm_schema( ) def test_mlm_no_undefined_prefixed_field( mlm_validator: STACValidator, - mlm_example: Dict[str, JSON], + mlm_example: dict[str, JSON], ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) From a8cf7ca13adf0f0e29470596013e7fbc6fc52e38 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 5 Nov 2024 10:40:47 -0800 Subject: [PATCH 41/83] don't run setup on every command in makefile --- Makefile | 27 +++++++++++---------------- tests/test_schema.py | 5 +---- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 2240e8f..f7733f9 100644 --- a/Makefile +++ b/Makefile @@ -5,12 +5,7 @@ ACTIVEPYTHON = $(shell which python) #* UV .PHONY: setup setup: - @if command -v uv &> /dev/null; then \ - echo "uv is already installed"; \ - else \ - echo "uv not found, installing..."; \ - curl -LsSf https://astral.sh/uv/install.sh | sh; \ - fi + curl -LsSf https://astral.sh/uv/install.sh | sh .PHONY: publish publish: @@ -18,22 +13,22 @@ publish: #* Installation .PHONY: install -install: setup +install: uv export --format requirements-txt -o requirements.txt --no-dev uv pip install --python $(ACTIVEPYTHON) -r requirements.txt .PHONY: install-dev -install-dev: setup +install-dev: uv export --format requirements-txt -o requirements-dev.txt uv pip install --python $(ACTIVEPYTHON) -r requirements-dev.txt .PHONY: pre-commit-install -pre-commit-install: setup +pre-commit-install: uv run --python $(ACTIVEPYTHON) pre-commit install #* Formatters .PHONY: codestyle -codestyle: setup +codestyle: uv run --python $(ACTIVEPYTHON) ruff format --config=pyproject.toml stac_model tests .PHONY: format @@ -41,7 +36,7 @@ format: codestyle #* Linting .PHONY: test -test: setup +test: uv run --python $(ACTIVEPYTHON) pytest -c pyproject.toml --cov-report=html --cov=stac_model tests/ .PHONY: check @@ -51,19 +46,19 @@ check: check-examples check-markdown check-lint check-mypy check-safety check-ci check-all: check .PHONY: mypy -mypy: setup +mypy: uv run --python $(ACTIVEPYTHON) mypy --config-file pyproject.toml ./ .PHONY: check-mypy check-mypy: mypy .PHONY: check-safety -check-safety: setup +check-safety: uv run --python $(ACTIVEPYTHON) safety check --full-report uv run --python $(ACTIVEPYTHON) bandit -ll --recursive stac_model tests .PHONY: lint -lint: setup +lint: uv run --python $(ACTIVEPYTHON) ruff check --fix --config=pyproject.toml ./ .PHONY: check-lint @@ -71,7 +66,7 @@ check-lint: lint uv run --python $(ACTIVEPYTHON) ruff check --config=pyproject.toml ./ .PHONY: format-lint -format-lint: setup lint +format-lint: lint ruff format --config=pyproject.toml ./ .PHONY: install-npm @@ -101,7 +96,7 @@ $(addprefix fix-, $(FORMATTERS)): fix-%: format-% lint-all: lint mypy check-safety check-markdown .PHONY: update-dev-deps -update-dev-deps: setup +update-dev-deps: uv export --only-dev --format requirements-txt -o requirements-only-dev.txt uv pip install --python $(ACTIVEPYTHON) -r requirements-only-dev.txt diff --git a/tests/test_schema.py b/tests/test_schema.py index 0f949b2..6825a51 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -44,10 +44,7 @@ def test_mlm_no_undefined_prefixed_field( with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) - assert all( - field in str(exc.value.source) - for field in ["mlm:unknown", "^(?!mlm:)"] - ) + assert all(field in str(exc.value.source) for field in ["mlm:unknown", "^(?!mlm:)"]) @pytest.mark.parametrize( From 2a5963d4f01d3f8e614e7c4d7098f81d0c018553 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 5 Nov 2024 10:44:37 -0800 Subject: [PATCH 42/83] disable dependabot --- .github/dependabot.yml | 44 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ff92d7a..6cce39a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,25 +1,25 @@ -# Configuration: https://dependabot.com/docs/config-file/ -# Docs: https://docs.github.com/en/github/administering-a-repository/keeping-your-dependencies-updated-automatically +# # Configuration: https://dependabot.com/docs/config-file/ +# # Docs: https://docs.github.com/en/github/administering-a-repository/keeping-your-dependencies-updated-automatically -version: 2 +# version: 2 -updates: - - package-ecosystem: "pip" - directory: "/" - schedule: - interval: "monthly" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 5 +# updates: +# - package-ecosystem: "pip" +# directory: "/" +# schedule: +# interval: "monthly" +# allow: +# - dependency-type: "all" +# commit-message: +# prefix: ":arrow_up:" +# open-pull-requests-limit: 5 - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "monthly" - allow: - - dependency-type: "all" - commit-message: - prefix: ":arrow_up:" - open-pull-requests-limit: 5 +# - package-ecosystem: "github-actions" +# directory: "/" +# schedule: +# interval: "monthly" +# allow: +# - dependency-type: "all" +# commit-message: +# prefix: ":arrow_up:" +# open-pull-requests-limit: 5 From e15f0adbb0defa3a1aa056015c9cefde28caf2ae Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 5 Nov 2024 10:45:23 -0800 Subject: [PATCH 43/83] temporarily remove dependabot --- .github/dependabot.yml | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 6cce39a..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,25 +0,0 @@ -# # Configuration: https://dependabot.com/docs/config-file/ -# # Docs: https://docs.github.com/en/github/administering-a-repository/keeping-your-dependencies-updated-automatically - -# version: 2 - -# updates: -# - package-ecosystem: "pip" -# directory: "/" -# schedule: -# interval: "monthly" -# allow: -# - dependency-type: "all" -# commit-message: -# prefix: ":arrow_up:" -# open-pull-requests-limit: 5 - -# - package-ecosystem: "github-actions" -# directory: "/" -# schedule: -# interval: "monthly" -# allow: -# - dependency-type: "all" -# commit-message: -# prefix: ":arrow_up:" -# open-pull-requests-limit: 5 From b98a7c418006187f2be91f9a6496db61b9fa7ea4 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Tue, 5 Nov 2024 21:43:20 -0500 Subject: [PATCH 44/83] more strict validation of MLM-prefixed fields under Assets and Item properties --- CHANGELOG.md | 1 + json-schema/schema.json | 91 +++++++++++++++++++++++++++++++---------- tests/test_schema.py | 76 +++++++++++++++++++++++++++++++++- 3 files changed, 144 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dc5e17..ddd646e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 for the entire input (but still possible). ### Changed +- Use JSON `$schema` version `2019-09` to allow use of `unevaluatedProperties` for stricter validation of MLM fields. - Moved `norm_type` to `value_scaling` object to better reflect the expected operation, which could be another operation than what is typically known as "normalization" or "standardization" techniques in machine learning. - Moved `statistics` to `value_scaling` object to better reflect their mutual `type` and additional diff --git a/json-schema/schema.json b/json-schema/schema.json index 3fe74c4..42371c9 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2019-09/schema#", "$id": "https://stac-extensions.github.io/mlm/v1.3.0/schema.json", "title": "Machine Learning Model STAC Extension Schema", "description": "This object represents the metadata for a Machine Learning Model (MLM) used in STAC documents.", @@ -20,7 +20,7 @@ "then": { "allOf": [ { - "$comment": "Schema to validate the MLM fields under Item properties or Assets properties.", + "description": "Schema to validate the MLM fields permitted under Item properties or Assets properties.", "type": "object", "required": [ "properties", @@ -28,8 +28,11 @@ ], "properties": { "properties": { + "description": "Schema to validate the MLM fields permitted under Item properties.", + "$comment": "Allow properties not defined by MLM prefix to work with other extensions and attributes, but disallow undefined MLM fields.", "allOf": [ { + "type": "object", "required": [ "mlm:name", "mlm:architecture", @@ -39,18 +42,26 @@ ] }, { - "$ref": "#/$defs/fields" + "$ref": "#/$defs/mlmItemFields" + }, + { + "patternProperties": { + "^(?!mlm:)": {} + } } - ] + ], + "unevaluatedProperties": false }, "assets": { "type": "object", "additionalProperties": { - "allOf": [ - { - "$ref": "#/$defs/fields" - } - ] + "description": "Schema to validate the MLM fields permitted only under Assets properties.", + "$comment": "Allow properties not defined by MLM prefix to work with other extensions and attributes, but disallow undefined MLM fields.", + "$ref": "#/$defs/mlmAssetFields", + "patternProperties": { + "^(?!mlm:)": {} + }, + "unevaluatedProperties": false } } } @@ -93,19 +104,19 @@ "summaries": { "type": "object", "additionalProperties": { - "$ref": "#/$defs/fields" + "$ref": "#/$defs/mlmCollectionFields" } }, "assets": { "type": "object", "additionalProperties": { - "$ref": "#/$defs/fields" + "$ref": "#/$defs/mlmAssetFields" } }, "item_assets": { "type": "object", "additionalProperties": { - "$ref": "#/$defs/fields" + "$ref": "#/$defs/mlmAssetFields" } } } @@ -261,12 +272,10 @@ } } }, - "fields": { + "mlmSharedFields": { + "description": "MLM fields that apply at any level (Collection, Item, Asset, Link).", "type": "object", "properties": { - "mlm:name": { - "$ref": "#/$defs/mlm:name" - }, "mlm:architecture": { "$ref": "#/$defs/mlm:architecture" }, @@ -305,6 +314,30 @@ }, "mlm:accelerator_count": { "$ref": "#/$defs/mlm:accelerator_count" + } + } + }, + "mlmCollectionFields": { + "$ref": "#/$defs/mlmSharedFields" + }, + "mlmItemFields": { + "description": "MLM fields that apply at any level (Collection, Item, Asset, Link).", + "type": "object", + "allOf": [ + { + "$ref": "#/$defs/mlmItemOnlyFields" + }, + { + "$ref": "#/$defs/mlmSharedFields" + } + ] + }, + "mlmItemOnlyFields": { + "description": "MLM fields that apply at any level (Collection, Item, Asset, Link).", + "type": "object", + "properties": { + "mlm:name": { + "$ref": "#/$defs/mlm:name" }, "mlm:input": { "$ref": "#/$defs/mlm:input" @@ -315,12 +348,26 @@ "mlm:hyperparameters": { "$ref": "#/$defs/mlm:hyperparameters" } - }, - "$comment": "Allow properties not defined by MLM prefix to allow combination with other extensions.", - "patternProperties": { - "^(?!mlm:)": {} - }, - "additionalProperties": false + } + }, + "mlmAssetFields": { + "allOf": [ + { + "$ref": "#/$defs/mlmSharedFields" + }, + { + "$ref": "#/$defs/mlmAssetOnlyFields" + } + ] + }, + "mlmAssetOnlyFields": { + "description": "MLM fields that apply only within an Asset.", + "type": "object", + "properties": { + "mlm:artifact_type": { + "$ref": "#/$defs/mlm:artifact_type" + } + } }, "mlm:name": { "type": "string", diff --git a/tests/test_schema.py b/tests/test_schema.py index 7035e8e..20441a7 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -32,7 +32,7 @@ def test_mlm_schema( ["item_raster_bands.json"], indirect=True, ) -def test_mlm_no_undefined_prefixed_field( +def test_mlm_no_undefined_prefixed_field_item_properties( mlm_validator: STACValidator, mlm_example: Dict[str, JSON], ) -> None: @@ -40,16 +40,62 @@ def test_mlm_no_undefined_prefixed_field( mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid + # undefined property anywhere in the schema + mlm_data = copy.deepcopy(mlm_example) mlm_data["properties"]["mlm:unknown"] = "random" # type: ignore + with pytest.raises(pystac.errors.STACValidationError) as exc: + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) + assert all( + info in str(exc.value.source) + for info in ["mlm:unknown", "Unevaluated properties are not allowed"] + ) + + # defined property only allowed at the Asset level + mlm_data = copy.deepcopy(mlm_example) + mlm_data["properties"]["mlm:artifact_type"] = "torch.save" with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) assert all( field in str(exc.value.source) - for field in ["mlm:unknown", "^(?!mlm:)"] + for field in ["mlm:artifact_type", "Unevaluated properties are not allowed"] ) +@pytest.mark.parametrize( + "mlm_example", + ["item_raster_bands.json"], + indirect=True, +) +def test_mlm_no_undefined_prefixed_field_asset_properties( + mlm_validator: STACValidator, + mlm_example: Dict[str, JSON], +) -> None: + mlm_data = copy.deepcopy(mlm_example) + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid + + assert mlm_data["assets"]["weights"] + mlm_data["assets"]["weights"]["mlm:unknown"] = "random" # type: ignore + with pytest.raises(pystac.errors.STACValidationError) as exc: + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) + assert len(exc.value.source) == 1 + schema_error = exc.value.source[0] + assert "mlm:unknown" in schema_error.instance + assert schema_error.schema["description"] in [ + "Fields that apply only within an Asset.", + "Schema to validate the MLM fields permitted only under Assets properties." + ] + + # defined property allowed both at the Item at the Asset level + mlm_data = copy.deepcopy(mlm_example) + mlm_data["assets"]["weights"]["mlm:accelerator"] = "cuda" + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) + + @pytest.mark.parametrize( "mlm_example", ["item_raster_bands.json"], @@ -224,6 +270,32 @@ def test_mlm_at_least_one_asset_model( ] +@pytest.mark.parametrize( + "mlm_example", + ["item_basic.json"], + indirect=True, +) +def test_mlm_asset_artifact_type_checked( + mlm_validator: STACValidator, + mlm_example: Dict[str, JSON], +) -> None: + mlm_data = copy.deepcopy(mlm_example) + mlm_item = pystac.Item.from_dict(mlm_data) + pystac.validation.validate(mlm_item, validator=mlm_validator) # self-check valid beforehand + + mlm_data["assets"]["model"]["mlm:artifact_type"] = 1234 + mlm_item = pystac.Item.from_dict(mlm_data) + with pytest.raises(pystac.errors.STACValidationError) as exc: + pystac.validation.validate(mlm_item, validator=mlm_validator) + assert "1234 is not of type 'string'" in str(exc.value.source) + + mlm_data["assets"]["model"]["mlm:artifact_type"] = "" + mlm_item = pystac.Item.from_dict(mlm_data) + with pytest.raises(pystac.errors.STACValidationError) as exc: + pystac.validation.validate(mlm_item, validator=mlm_validator) + assert "should be non-empty" in str(exc.value.source) + + def test_model_metadata_to_dict(eurosat_resnet): assert eurosat_resnet.item.to_dict() From 28c2983ac6eb19b8585e87eba5b83c36d1500b42 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Tue, 5 Nov 2024 21:51:32 -0500 Subject: [PATCH 45/83] ignore typing errors from mypy in tests --- tests/test_schema.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index 20441a7..bda53d1 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -53,7 +53,7 @@ def test_mlm_no_undefined_prefixed_field_item_properties( # defined property only allowed at the Asset level mlm_data = copy.deepcopy(mlm_example) - mlm_data["properties"]["mlm:artifact_type"] = "torch.save" + mlm_data["properties"]["mlm:artifact_type"] = "torch.save" # type: ignore with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) @@ -76,13 +76,13 @@ def test_mlm_no_undefined_prefixed_field_asset_properties( mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid - assert mlm_data["assets"]["weights"] + assert mlm_data["assets"]["weights"] # type: ignore mlm_data["assets"]["weights"]["mlm:unknown"] = "random" # type: ignore with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) - assert len(exc.value.source) == 1 - schema_error = exc.value.source[0] + assert len(exc.value.source) == 1 # type: ignore + schema_error = exc.value.source[0] # type: ignore assert "mlm:unknown" in schema_error.instance assert schema_error.schema["description"] in [ "Fields that apply only within an Asset.", @@ -91,7 +91,7 @@ def test_mlm_no_undefined_prefixed_field_asset_properties( # defined property allowed both at the Item at the Asset level mlm_data = copy.deepcopy(mlm_example) - mlm_data["assets"]["weights"]["mlm:accelerator"] = "cuda" + mlm_data["assets"]["weights"]["mlm:accelerator"] = "cuda" # type: ignore mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) @@ -283,13 +283,13 @@ def test_mlm_asset_artifact_type_checked( mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # self-check valid beforehand - mlm_data["assets"]["model"]["mlm:artifact_type"] = 1234 + mlm_data["assets"]["model"]["mlm:artifact_type"] = 1234 # type: ignore mlm_item = pystac.Item.from_dict(mlm_data) with pytest.raises(pystac.errors.STACValidationError) as exc: pystac.validation.validate(mlm_item, validator=mlm_validator) assert "1234 is not of type 'string'" in str(exc.value.source) - mlm_data["assets"]["model"]["mlm:artifact_type"] = "" + mlm_data["assets"]["model"]["mlm:artifact_type"] = "" # type: ignore mlm_item = pystac.Item.from_dict(mlm_data) with pytest.raises(pystac.errors.STACValidationError) as exc: pystac.validation.validate(mlm_item, validator=mlm_validator) From c80a5e624aac0c531c574cee05e87b81de5aeb93 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Tue, 5 Nov 2024 22:42:17 -0500 Subject: [PATCH 46/83] fix missing package/bump as stac-mlm --- package.json | 4 ++-- pyproject.toml | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 13d0079..b6cbbdd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "stac-extensions", - "version": "1.0.0", + "name": "stac-mlm", + "version": "1.3.0", "scripts": { "test": "npm run check-markdown && npm run check-examples", "check-markdown": "remark . -f -r .github/remark.yaml -i .remarkignore", diff --git a/pyproject.toml b/pyproject.toml index f76d9fe..19d507b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -191,6 +191,11 @@ filename = "CITATION.cff" search = "https://stac-extensions.github.io/mlm/v{current_version}/schema.json" replace = "https://stac-extensions.github.io/mlm/v{new_version}/schema.json" +[[tool.bumpversion.files]] +filename = "package.json" +search = "\"version\": \"{current_version}\"" +replace = "\"version\": \"{new_version}\"" + [tool.ruff] exclude = [ ".git", From 1f53bfac5144ce71f12ba6d43bbdab3b5de90488 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 13:45:58 -0500 Subject: [PATCH 47/83] add more tests to validate MLM fields disallowed under Asset --- CHANGELOG.md | 2 ++ tests/test_schema.py | 29 ++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddd646e..2726743 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Use JSON `$schema` version `2019-09` to allow use of `unevaluatedProperties` for stricter validation of MLM fields. +- Explicitly disallow `mlm:name`, `mlm:input`, `mlm:output` and `mlm:hyperparameters` at the Asset level. + These fields describe the model as a whole and should therefore be defined in Item properties. - Moved `norm_type` to `value_scaling` object to better reflect the expected operation, which could be another operation than what is typically known as "normalization" or "standardization" techniques in machine learning. - Moved `statistics` to `value_scaling` object to better reflect their mutual `type` and additional diff --git a/tests/test_schema.py b/tests/test_schema.py index bda53d1..d3152a8 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -68,27 +68,50 @@ def test_mlm_no_undefined_prefixed_field_item_properties( ["item_raster_bands.json"], indirect=True, ) +@pytest.mark.parametrize( + ["test_field", "test_value"], + [ + ("mlm:unknown", "random"), + ("mlm:name", "test-model"), + ("mlm:input", []), + ("mlm:output", []), + ("mlm:hyperparameters", {}), + ] +) def test_mlm_no_undefined_prefixed_field_asset_properties( mlm_validator: STACValidator, mlm_example: Dict[str, JSON], + test_field: str, + test_value: Any, ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid - assert mlm_data["assets"]["weights"] # type: ignore - mlm_data["assets"]["weights"]["mlm:unknown"] = "random" # type: ignore + + mlm_data = copy.deepcopy(mlm_example) + mlm_data["assets"]["weights"][test_field] = test_value # type: ignore with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) assert len(exc.value.source) == 1 # type: ignore schema_error = exc.value.source[0] # type: ignore - assert "mlm:unknown" in schema_error.instance + assert test_field in schema_error.instance assert schema_error.schema["description"] in [ "Fields that apply only within an Asset.", "Schema to validate the MLM fields permitted only under Assets properties." ] + +@pytest.mark.parametrize( + "mlm_example", + ["item_raster_bands.json"], + indirect=True, +) +def test_mlm_allowed_field_asset_properties_override( + mlm_validator: STACValidator, + mlm_example: Dict[str, JSON], +) -> None: # defined property allowed both at the Item at the Asset level mlm_data = copy.deepcopy(mlm_example) mlm_data["assets"]["weights"]["mlm:accelerator"] = "cuda" # type: ignore From 007176a785625bd5a9423dffb0aeeb2a161a55df Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 14:04:51 -0500 Subject: [PATCH 48/83] add more explicit indication about Item-only vs shared Item/Asset MLM fields --- README.md | 63 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index f427c99..1e82e73 100644 --- a/README.md +++ b/README.md @@ -116,34 +116,41 @@ The fields in the table below can be used in these parts of STAC documents: [item-assets]: https://github.com/stac-extensions/item-assets -| Field Name | Type | Description | -|-----------------------------|---------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| mlm:name | string | **REQUIRED** A name for the model. This can include, but must be distinct, from simply naming the model architecture. If there is a publication or other published work related to the model, use the official name of the model. | -| mlm:architecture | [Model Architecture](#model-architecture) string | **REQUIRED** A generic and well established architecture name of the model. | -| mlm:tasks | \[[Task Enum](#task-enum)] | **REQUIRED** Specifies the Machine Learning tasks for which the model can be used for. If multi-tasks outputs are provided by distinct model heads, specify all available tasks under the main properties and specify respective tasks in each [Model Output Object](#model-output-object). | -| mlm:framework | string | Framework used to train the model (ex: PyTorch, TensorFlow). | -| mlm:framework_version | string | The `framework` library version. Some models require a specific version of the machine learning `framework` to run. | -| mlm:memory_size | integer | The in-memory size of the model on the accelerator during inference (bytes). | -| mlm:total_parameters | integer | Total number of model parameters, including trainable and non-trainable parameters. | -| mlm:pretrained | boolean | Indicates if the model was pretrained. If the model was pretrained, consider providing `pretrained_source` if it is known. | -| mlm:pretrained_source | string \| null | The source of the pretraining. Can refer to popular pretraining datasets by name (i.e. Imagenet) or less known datasets by URL and description. If trained from scratch (i.e.: `pretrained = false`), the `null` value should be set explicitly. | -| mlm:batch_size_suggestion | integer | A suggested batch size for the accelerator and summarized hardware. | -| mlm:accelerator | [Accelerator Type Enum](#accelerator-type-enum) \| null | The intended computational hardware that runs inference. If undefined or set to `null` explicitly, the model does not require any specific accelerator. | -| mlm:accelerator_constrained | boolean | Indicates if the intended `accelerator` is the only `accelerator` that can run inference. If undefined, it should be assumed `false`. | -| mlm:accelerator_summary | string | A high level description of the `accelerator`, such as its specific generation, or other relevant inference details. | -| mlm:accelerator_count | integer | A minimum amount of `accelerator` instances required to run the model. | -| mlm:input | \[[Model Input Object](#model-input-object)] | **REQUIRED** Describes the transformation between the EO data and the model input. | -| mlm:output | \[[Model Output Object](#model-output-object)] | **REQUIRED** Describes each model output and how to interpret it. | -| mlm:hyperparameters | [Model Hyperparameters Object](#model-hyperparameters-object) | Additional hyperparameters relevant for the model. | - -To decide whether above fields should be applied under Item `properties` or under respective Assets, the context of -each field must be considered. For example, the `mlm:name` should always be provided in the Item `properties`, since -it relates to the model as a whole. In contrast, some models could support multiple `mlm:accelerator`, which could be -handled by distinct source code represented by different Assets. In such case, `mlm:accelerator` definitions should be -nested under their relevant Asset. If a field is defined both at the Item and Asset level, the value at the Asset level -would be considered for that specific Asset, and the value at the Item level would be used for other Assets that did -not override it for their respective reference. For some of the fields, further details are provided in following -sections to provide more precisions regarding some potentially ambiguous use cases. +| Field Name | Type | Description | +|-----------------------------------------|---------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| mlm:name [[1]][1] | string | **REQUIRED** A name for the model. This can include, but must be distinct, from simply naming the model architecture. If there is a publication or other published work related to the model, use the official name of the model. | +| mlm:architecture | [Model Architecture](#model-architecture) string | **REQUIRED** A generic and well established architecture name of the model. | +| mlm:tasks | \[[Task Enum](#task-enum)] | **REQUIRED** Specifies the Machine Learning tasks for which the model can be used for. If multi-tasks outputs are provided by distinct model heads, specify all available tasks under the main properties and specify respective tasks in each [Model Output Object](#model-output-object). | +| mlm:framework | string | Framework used to train the model (ex: PyTorch, TensorFlow). | +| mlm:framework_version | string | The `framework` library version. Some models require a specific version of the machine learning `framework` to run. | +| mlm:memory_size | integer | The in-memory size of the model on the accelerator during inference (bytes). | +| mlm:total_parameters | integer | Total number of model parameters, including trainable and non-trainable parameters. | +| mlm:pretrained | boolean | Indicates if the model was pretrained. If the model was pretrained, consider providing `pretrained_source` if it is known. | +| mlm:pretrained_source | string \| null | The source of the pretraining. Can refer to popular pretraining datasets by name (i.e. Imagenet) or less known datasets by URL and description. If trained from scratch (i.e.: `pretrained = false`), the `null` value should be set explicitly. | +| mlm:batch_size_suggestion | integer | A suggested batch size for the accelerator and summarized hardware. | +| mlm:accelerator | [Accelerator Type Enum](#accelerator-type-enum) \| null | The intended computational hardware that runs inference. If undefined or set to `null` explicitly, the model does not require any specific accelerator. | +| mlm:accelerator_constrained | boolean | Indicates if the intended `accelerator` is the only `accelerator` that can run inference. If undefined, it should be assumed `false`. | +| mlm:accelerator_summary | string | A high level description of the `accelerator`, such as its specific generation, or other relevant inference details. | +| mlm:accelerator_count | integer | A minimum amount of `accelerator` instances required to run the model. | +| mlm:input [[1]][1] | \[[Model Input Object](#model-input-object)] | **REQUIRED** Describes the transformation between the EO data and the model input. | +| mlm:output [[1]][1] | \[[Model Output Object](#model-output-object)] | **REQUIRED** Describes each model output and how to interpret it. | +| mlm:hyperparameters [[1]][1] | [Model Hyperparameters Object](#model-hyperparameters-object) | Additional hyperparameters relevant for the model. | + +[1]: #sup1sup-allowed-only-in-item-properties + +##### [1] Allowed Only in Item `properties` + +> [!NOTE] +> Unless stated otherwise by [[1]][1] in the table, fields can be used at either the Item or Asset level. +>

+> To decide whether above fields should be applied under Item `properties` or under respective Assets, the context of +> each field must be considered. For example, the `mlm:name` should always be provided in the Item `properties`, since +> it relates to the model as a whole. In contrast, some models could support multiple `mlm:accelerator`, which could be +> handled by distinct source code represented by different Assets. In such case, `mlm:accelerator` definitions should be +> nested under their relevant Asset. If a field is defined both at the Item and Asset level, the value at the Asset +> level would be considered for that specific Asset, and the value at the Item level would be used for other Assets that +> did not override it for their respective reference. For some of the fields, further details are provided in following +> sections to provide more precisions regarding some potentially ambiguous use cases. In addition, fields from the multiple relevant extensions should be defined as applicable. See [Best Practices - Recommended Extensions to Compose with the ML Model Extension](best-practices.md#recommended-extensions-to-compose-with-the-ml-model-extension) From 2b06e30f30318def095939f50307a93f2e9b7307 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 14:08:45 -0500 Subject: [PATCH 49/83] fix brackets for markdown rendering --- README.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 1e82e73..9f1bc7d 100644 --- a/README.md +++ b/README.md @@ -116,32 +116,32 @@ The fields in the table below can be used in these parts of STAC documents: [item-assets]: https://github.com/stac-extensions/item-assets -| Field Name | Type | Description | -|-----------------------------------------|---------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| mlm:name [[1]][1] | string | **REQUIRED** A name for the model. This can include, but must be distinct, from simply naming the model architecture. If there is a publication or other published work related to the model, use the official name of the model. | -| mlm:architecture | [Model Architecture](#model-architecture) string | **REQUIRED** A generic and well established architecture name of the model. | -| mlm:tasks | \[[Task Enum](#task-enum)] | **REQUIRED** Specifies the Machine Learning tasks for which the model can be used for. If multi-tasks outputs are provided by distinct model heads, specify all available tasks under the main properties and specify respective tasks in each [Model Output Object](#model-output-object). | -| mlm:framework | string | Framework used to train the model (ex: PyTorch, TensorFlow). | -| mlm:framework_version | string | The `framework` library version. Some models require a specific version of the machine learning `framework` to run. | -| mlm:memory_size | integer | The in-memory size of the model on the accelerator during inference (bytes). | -| mlm:total_parameters | integer | Total number of model parameters, including trainable and non-trainable parameters. | -| mlm:pretrained | boolean | Indicates if the model was pretrained. If the model was pretrained, consider providing `pretrained_source` if it is known. | -| mlm:pretrained_source | string \| null | The source of the pretraining. Can refer to popular pretraining datasets by name (i.e. Imagenet) or less known datasets by URL and description. If trained from scratch (i.e.: `pretrained = false`), the `null` value should be set explicitly. | -| mlm:batch_size_suggestion | integer | A suggested batch size for the accelerator and summarized hardware. | -| mlm:accelerator | [Accelerator Type Enum](#accelerator-type-enum) \| null | The intended computational hardware that runs inference. If undefined or set to `null` explicitly, the model does not require any specific accelerator. | -| mlm:accelerator_constrained | boolean | Indicates if the intended `accelerator` is the only `accelerator` that can run inference. If undefined, it should be assumed `false`. | -| mlm:accelerator_summary | string | A high level description of the `accelerator`, such as its specific generation, or other relevant inference details. | -| mlm:accelerator_count | integer | A minimum amount of `accelerator` instances required to run the model. | -| mlm:input [[1]][1] | \[[Model Input Object](#model-input-object)] | **REQUIRED** Describes the transformation between the EO data and the model input. | -| mlm:output [[1]][1] | \[[Model Output Object](#model-output-object)] | **REQUIRED** Describes each model output and how to interpret it. | -| mlm:hyperparameters [[1]][1] | [Model Hyperparameters Object](#model-hyperparameters-object) | Additional hyperparameters relevant for the model. | +| Field Name | Type | Description | +|-------------------------------------------|---------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| mlm:name [\[1\]][1] | string | **REQUIRED** A name for the model. This can include, but must be distinct, from simply naming the model architecture. If there is a publication or other published work related to the model, use the official name of the model. | +| mlm:architecture | [Model Architecture](#model-architecture) string | **REQUIRED** A generic and well established architecture name of the model. | +| mlm:tasks | \[[Task Enum](#task-enum)] | **REQUIRED** Specifies the Machine Learning tasks for which the model can be used for. If multi-tasks outputs are provided by distinct model heads, specify all available tasks under the main properties and specify respective tasks in each [Model Output Object](#model-output-object). | +| mlm:framework | string | Framework used to train the model (ex: PyTorch, TensorFlow). | +| mlm:framework_version | string | The `framework` library version. Some models require a specific version of the machine learning `framework` to run. | +| mlm:memory_size | integer | The in-memory size of the model on the accelerator during inference (bytes). | +| mlm:total_parameters | integer | Total number of model parameters, including trainable and non-trainable parameters. | +| mlm:pretrained | boolean | Indicates if the model was pretrained. If the model was pretrained, consider providing `pretrained_source` if it is known. | +| mlm:pretrained_source | string \| null | The source of the pretraining. Can refer to popular pretraining datasets by name (i.e. Imagenet) or less known datasets by URL and description. If trained from scratch (i.e.: `pretrained = false`), the `null` value should be set explicitly. | +| mlm:batch_size_suggestion | integer | A suggested batch size for the accelerator and summarized hardware. | +| mlm:accelerator | [Accelerator Type Enum](#accelerator-type-enum) \| null | The intended computational hardware that runs inference. If undefined or set to `null` explicitly, the model does not require any specific accelerator. | +| mlm:accelerator_constrained | boolean | Indicates if the intended `accelerator` is the only `accelerator` that can run inference. If undefined, it should be assumed `false`. | +| mlm:accelerator_summary | string | A high level description of the `accelerator`, such as its specific generation, or other relevant inference details. | +| mlm:accelerator_count | integer | A minimum amount of `accelerator` instances required to run the model. | +| mlm:input [\[1\]][1] | \[[Model Input Object](#model-input-object)] | **REQUIRED** Describes the transformation between the EO data and the model input. | +| mlm:output [\[1\]][1] | \[[Model Output Object](#model-output-object)] | **REQUIRED** Describes each model output and how to interpret it. | +| mlm:hyperparameters [\[1\]][1] | [Model Hyperparameters Object](#model-hyperparameters-object) | Additional hyperparameters relevant for the model. | [1]: #sup1sup-allowed-only-in-item-properties ##### [1] Allowed Only in Item `properties` > [!NOTE] -> Unless stated otherwise by [[1]][1] in the table, fields can be used at either the Item or Asset level. +> Unless stated otherwise by [\[1\]][1] in the table, fields can be used at either the Item or Asset level. >

> To decide whether above fields should be applied under Item `properties` or under respective Assets, the context of > each field must be considered. For example, the `mlm:name` should always be provided in the Item `properties`, since From 66a9051c85776e7a49ed4a65dbaa25e928d7673b Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 14:04:51 -0500 Subject: [PATCH 50/83] add more explicit indication about Item-only vs shared Item/Asset MLM fields --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f1bc7d..776268b 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ The fields in the table below can be used in these parts of STAC documents: | mlm:output [\[1\]][1] | \[[Model Output Object](#model-output-object)] | **REQUIRED** Describes each model output and how to interpret it. | | mlm:hyperparameters [\[1\]][1] | [Model Hyperparameters Object](#model-hyperparameters-object) | Additional hyperparameters relevant for the model. | -[1]: #sup1sup-allowed-only-in-item-properties +[1]: #1-allowed-only-in-item-properties ##### [1] Allowed Only in Item `properties` From e8f785b25ef116137f88c64598a40f40eaa3e8e4 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 14:17:08 -0500 Subject: [PATCH 51/83] patch markdown linting of special header --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 776268b..32689fa 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,10 @@ The fields in the table below can be used in these parts of STAC documents: | mlm:output [\[1\]][1] | \[[Model Output Object](#model-output-object)] | **REQUIRED** Describes each model output and how to interpret it. | | mlm:hyperparameters [\[1\]][1] | [Model Hyperparameters Object](#model-hyperparameters-object) | Additional hyperparameters relevant for the model. | + + + + [1]: #1-allowed-only-in-item-properties ##### [1] Allowed Only in Item `properties` @@ -152,6 +156,9 @@ The fields in the table below can be used in these parts of STAC documents: > did not override it for their respective reference. For some of the fields, further details are provided in following > sections to provide more precisions regarding some potentially ambiguous use cases. + + + In addition, fields from the multiple relevant extensions should be defined as applicable. See [Best Practices - Recommended Extensions to Compose with the ML Model Extension](best-practices.md#recommended-extensions-to-compose-with-the-ml-model-extension) for more details. From abf4a5e180894f54a9312612e5f27f411593ea67 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 15:32:39 -0500 Subject: [PATCH 52/83] patch markdown again --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 32689fa..d3dff63 100644 --- a/README.md +++ b/README.md @@ -136,13 +136,14 @@ The fields in the table below can be used in these parts of STAC documents: | mlm:output [\[1\]][1] | \[[Model Output Object](#model-output-object)] | **REQUIRED** Describes each model output and how to interpret it. | | mlm:hyperparameters [\[1\]][1] | [Model Hyperparameters Object](#model-hyperparameters-object) | Additional hyperparameters relevant for the model. | - - - + -[1]: #1-allowed-only-in-item-properties +[1]: #_ -##### [1] Allowed Only in Item `properties` +### _ +[1][1] Fields allowed only in Item `properties` + + > [!NOTE] > Unless stated otherwise by [\[1\]][1] in the table, fields can be used at either the Item or Asset level. @@ -156,7 +157,6 @@ The fields in the table below can be used in these parts of STAC documents: > did not override it for their respective reference. For some of the fields, further details are provided in following > sections to provide more precisions regarding some potentially ambiguous use cases. - In addition, fields from the multiple relevant extensions should be defined as applicable. See From 778865a6ead6a5f00a724d6b2afa843c820f90b9 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 15:37:30 -0500 Subject: [PATCH 53/83] use actual notes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d3dff63..9739397 100644 --- a/README.md +++ b/README.md @@ -138,9 +138,9 @@ The fields in the table below can be used in these parts of STAC documents: -[1]: #_ +[1]: #notes -### _ +### Notes [1][1] Fields allowed only in Item `properties` From 282fc4a6ff46e2b0d4b26ec160707a3fef78e532 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 19:15:55 -0500 Subject: [PATCH 54/83] refactor the schema to replicate behavior of disallowed fields with JSON schema draft-07 --- CHANGELOG.md | 1 - json-schema/schema.json | 172 ++++++++++++++++++++++++---------------- tests/test_schema.py | 13 ++- 3 files changed, 108 insertions(+), 78 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2726743..94afa3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 for the entire input (but still possible). ### Changed -- Use JSON `$schema` version `2019-09` to allow use of `unevaluatedProperties` for stricter validation of MLM fields. - Explicitly disallow `mlm:name`, `mlm:input`, `mlm:output` and `mlm:hyperparameters` at the Asset level. These fields describe the model as a whole and should therefore be defined in Item properties. - Moved `norm_type` to `value_scaling` object to better reflect the expected operation, which could be another diff --git a/json-schema/schema.json b/json-schema/schema.json index 42371c9..b87ad45 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -1,12 +1,12 @@ { - "$schema": "https://json-schema.org/draft/2019-09/schema#", + "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://stac-extensions.github.io/mlm/v1.3.0/schema.json", "title": "Machine Learning Model STAC Extension Schema", "description": "This object represents the metadata for a Machine Learning Model (MLM) used in STAC documents.", "$comment": "Use 'allOf+if/then' for each 'type' to allow implementations to report more specific messages about the exact case in error (if any). Using only a 'oneOf/allOf' with the 'type' caused any incompatible 'type' to be reported first with a minimal and poorly described error by 'pystac'.", "allOf": [ { - "$comment": "This is the schema for STAC extension MLM in Items.", + "description": "This is the schema for STAC extension MLM in Items.", "if": { "required": [ "type" @@ -28,40 +28,13 @@ ], "properties": { "properties": { - "description": "Schema to validate the MLM fields permitted under Item properties.", - "$comment": "Allow properties not defined by MLM prefix to work with other extensions and attributes, but disallow undefined MLM fields.", - "allOf": [ - { - "type": "object", - "required": [ - "mlm:name", - "mlm:architecture", - "mlm:tasks", - "mlm:input", - "mlm:output" - ] - }, - { - "$ref": "#/$defs/mlmItemFields" - }, - { - "patternProperties": { - "^(?!mlm:)": {} - } - } - ], - "unevaluatedProperties": false + "$comment": "Schema to validate the MLM fields permitted under Item properties.", + "$ref": "#/$defs/mlmItemFields" }, "assets": { - "type": "object", "additionalProperties": { - "description": "Schema to validate the MLM fields permitted only under Assets properties.", - "$comment": "Allow properties not defined by MLM prefix to work with other extensions and attributes, but disallow undefined MLM fields.", - "$ref": "#/$defs/mlmAssetFields", - "patternProperties": { - "^(?!mlm:)": {} - }, - "unevaluatedProperties": false + "$comment": "Schema to validate the MLM fields permitted under Asset properties.", + "$ref": "#/$defs/mlmAssetFields" } } } @@ -85,7 +58,7 @@ } }, { - "$comment": "This is the schema for STAC extension MLM in Collections.", + "description": "This is the schema for STAC extension MLM in Collections.", "if": { "required": [ "type" @@ -272,10 +245,13 @@ } } }, - "mlmSharedFields": { - "description": "MLM fields that apply at any level (Collection, Item, Asset, Link).", + "fields": { + "description": "All possible MLM fields regardless of the level they apply (Collection, Item, Asset, Link).", "type": "object", "properties": { + "mlm:name": { + "$ref": "#/$defs/mlm:name" + }, "mlm:architecture": { "$ref": "#/$defs/mlm:architecture" }, @@ -314,61 +290,119 @@ }, "mlm:accelerator_count": { "$ref": "#/$defs/mlm:accelerator_count" + }, + "mlm:input": { + "$ref": "#/$defs/mlm:input" + }, + "mlm:output": { + "$ref": "#/$defs/mlm:output" + }, + "mlm:hyperparameters": { + "$ref": "#/$defs/mlm:hyperparameters" + }, + "mlm:artifact_type": { + "$ref": "#/$defs/mlm:artifact_type" } - } + }, + "$comment": "Allow properties not defined by MLM prefix to work with other extensions and attributes, but disallow undefined MLM fields.", + "patternProperties": { + "^(?!mlm:)": {} + }, + "additionalProperties": false }, "mlmCollectionFields": { - "$ref": "#/$defs/mlmSharedFields" - }, - "mlmItemFields": { - "description": "MLM fields that apply at any level (Collection, Item, Asset, Link).", - "type": "object", + "description": "Schema to validate the MLM fields permitted under Collection summaries.", "allOf": [ { - "$ref": "#/$defs/mlmItemOnlyFields" + "description": "Fields that are mandatory under the Collection summaries.", + "type": "object", + "required": [] }, { - "$ref": "#/$defs/mlmSharedFields" + "description": "Fields that are disallowed under the Collection summaries.", + "not": { + "required": [ + "mlm:input", + "mlm:output", + "mlm:artifact_type" + ] + } + }, + { + "description": "Field with known definitions that must be validated.", + "$ref": "#/$defs/fields" } ] }, - "mlmItemOnlyFields": { - "description": "MLM fields that apply at any level (Collection, Item, Asset, Link).", - "type": "object", - "properties": { - "mlm:name": { - "$ref": "#/$defs/mlm:name" - }, - "mlm:input": { - "$ref": "#/$defs/mlm:input" + "mlmItemFields": { + "description": "Schema to validate the MLM fields permitted under Item properties.", + "allOf": [ + { + "description": "Fields that are mandatory under the Item properties.", + "required": [ + "mlm:name", + "mlm:architecture", + "mlm:tasks", + "mlm:input", + "mlm:output" + ] }, - "mlm:output": { - "$ref": "#/$defs/mlm:output" + { + "description": "Fields that are disallowed under the Item properties.", + "$comment": "Particularity of the 'not/required' approach: they must be tested one by one. Otherwise, it validates that they are all (simultaneously) not present.", + "not": { + "anyOf": [ + { + "required": [ + "mlm:artifact_type" + ] + } + ] + } }, - "mlm:hyperparameters": { - "$ref": "#/$defs/mlm:hyperparameters" + { + "description": "Field with known definitions that must be validated.", + "$ref": "#/$defs/fields" } - } + ] }, "mlmAssetFields": { + "description": "Schema to validate the MLM fields permitted under Assets properties.", "allOf": [ { - "$ref": "#/$defs/mlmSharedFields" + "description": "Fields that are disallowed under the Asset properties.", + "$comment": "Particularity of the 'not/required' approach: they must be tested one by one. Otherwise, it validates that they are all (simultaneously) not present.", + "not": { + "anyOf": [ + { + "required": [ + "mlm:name" + ] + }, + { + "required": [ + "mlm:input" + ] + }, + { + "required": [ + "mlm:output" + ] + }, + { + "required": [ + "mlm:hyperparameters" + ] + } + ] + } }, { - "$ref": "#/$defs/mlmAssetOnlyFields" + "description": "Field with known definitions that must be validated.", + "$ref": "#/$defs/fields" } ] }, - "mlmAssetOnlyFields": { - "description": "MLM fields that apply only within an Asset.", - "type": "object", - "properties": { - "mlm:artifact_type": { - "$ref": "#/$defs/mlm:artifact_type" - } - } - }, "mlm:name": { "type": "string", "pattern": "^[a-zA-Z][a-zA-Z0-9_.\\-\\s]+[a-zA-Z0-9]$" diff --git a/tests/test_schema.py b/tests/test_schema.py index d3152a8..633b087 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -48,7 +48,7 @@ def test_mlm_no_undefined_prefixed_field_item_properties( pystac.validation.validate(mlm_item, validator=mlm_validator) assert all( info in str(exc.value.source) - for info in ["mlm:unknown", "Unevaluated properties are not allowed"] + for info in ["mlm:unknown", "^(?!mlm:)"] ) # defined property only allowed at the Asset level @@ -57,10 +57,7 @@ def test_mlm_no_undefined_prefixed_field_item_properties( with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) - assert all( - field in str(exc.value.source) - for field in ["mlm:artifact_type", "Unevaluated properties are not allowed"] - ) + assert exc.value.source[0].validator_value == {"required": ["mlm:artifact_type"]} @pytest.mark.parametrize( @@ -75,7 +72,7 @@ def test_mlm_no_undefined_prefixed_field_item_properties( ("mlm:name", "test-model"), ("mlm:input", []), ("mlm:output", []), - ("mlm:hyperparameters", {}), + ("mlm:hyperparameters", {"test": {}}), ] ) def test_mlm_no_undefined_prefixed_field_asset_properties( @@ -98,8 +95,8 @@ def test_mlm_no_undefined_prefixed_field_asset_properties( schema_error = exc.value.source[0] # type: ignore assert test_field in schema_error.instance assert schema_error.schema["description"] in [ - "Fields that apply only within an Asset.", - "Schema to validate the MLM fields permitted only under Assets properties." + "All possible MLM fields regardless of the level they apply (Collection, Item, Asset, Link).", + "Fields that are disallowed under the Asset properties." ] From bcfb82ab68b39d29bbffa9053a2e7053e6733f10 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 19:24:01 -0500 Subject: [PATCH 55/83] adjust test asset to be more adaptable to future schema changes --- tests/test_schema.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index 633b087..f3bb313 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -57,7 +57,8 @@ def test_mlm_no_undefined_prefixed_field_item_properties( with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) - assert exc.value.source[0].validator_value == {"required": ["mlm:artifact_type"]} + assert "mlm:artifact_type" in str(exc.value.source[0].validator_value) + assert exc.value.source[0].schema["description"] == "Fields that are disallowed under the Item properties." @pytest.mark.parametrize( From 7afb18809105ac530c8a003cf2ef8f6a3d329648 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 19:48:11 -0500 Subject: [PATCH 56/83] ignore test typing issues related to JSON manipulation --- tests/test_schema.py | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/tests/test_schema.py b/tests/test_schema.py index f3bb313..7e025f0 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -4,6 +4,7 @@ import pystac import pytest +from jsonschema.exceptions import ValidationError from pystac.validation.stac_validator import STACValidator from stac_model.base import JSON @@ -11,6 +12,9 @@ from conftest import get_all_stac_item_examples +# ignore typing errors introduced by generic JSON manipulation errors +# mypy: disable_error_code="arg-type,call-overload,index,union-attr" + @pytest.mark.parametrize( "mlm_example", # value passed to 'mlm_example' fixture @@ -34,7 +38,7 @@ def test_mlm_schema( ) def test_mlm_no_undefined_prefixed_field_item_properties( mlm_validator: STACValidator, - mlm_example: Dict[str, JSON], + mlm_example: dict[str, JSON], ) -> None: mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) @@ -42,7 +46,7 @@ def test_mlm_no_undefined_prefixed_field_item_properties( # undefined property anywhere in the schema mlm_data = copy.deepcopy(mlm_example) - mlm_data["properties"]["mlm:unknown"] = "random" # type: ignore + mlm_data["properties"]["mlm:unknown"] = "random" with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) @@ -53,12 +57,13 @@ def test_mlm_no_undefined_prefixed_field_item_properties( # defined property only allowed at the Asset level mlm_data = copy.deepcopy(mlm_example) - mlm_data["properties"]["mlm:artifact_type"] = "torch.save" # type: ignore + mlm_data["properties"]["mlm:artifact_type"] = "torch.save" with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) - assert "mlm:artifact_type" in str(exc.value.source[0].validator_value) - assert exc.value.source[0].schema["description"] == "Fields that are disallowed under the Item properties." + errors = cast(list[ValidationError], exc.value.source) + assert "mlm:artifact_type" in str(errors[0].validator_value) + assert errors[0].schema["description"] == "Fields that are disallowed under the Item properties." @pytest.mark.parametrize( @@ -85,17 +90,17 @@ def test_mlm_no_undefined_prefixed_field_asset_properties( mlm_data = copy.deepcopy(mlm_example) mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid - assert mlm_data["assets"]["weights"] # type: ignore + assert mlm_data["assets"]["weights"] mlm_data = copy.deepcopy(mlm_example) - mlm_data["assets"]["weights"][test_field] = test_value # type: ignore + mlm_data["assets"]["weights"][test_field] = test_value with pytest.raises(pystac.errors.STACValidationError) as exc: mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) - assert len(exc.value.source) == 1 # type: ignore - schema_error = exc.value.source[0] # type: ignore - assert test_field in schema_error.instance - assert schema_error.schema["description"] in [ + assert len(exc.value.source) == 1 + errors = cast(list[ValidationError], exc.value.source) + assert test_field in errors[0].instance + assert errors[0].schema["description"] in [ "All possible MLM fields regardless of the level they apply (Collection, Item, Asset, Link).", "Fields that are disallowed under the Asset properties." ] @@ -112,7 +117,7 @@ def test_mlm_allowed_field_asset_properties_override( ) -> None: # defined property allowed both at the Item at the Asset level mlm_data = copy.deepcopy(mlm_example) - mlm_data["assets"]["weights"]["mlm:accelerator"] = "cuda" # type: ignore + mlm_data["assets"]["weights"]["mlm:accelerator"] = "cuda" mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) @@ -130,7 +135,7 @@ def test_mlm_missing_bands_invalid_if_mlm_input_lists_bands( pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid mlm_bands_bad_data = copy.deepcopy(mlm_example) - mlm_bands_bad_data["assets"]["weights"].pop("raster:bands") # type: ignore # no 'None' to raise in case modified + mlm_bands_bad_data["assets"]["weights"].pop("raster:bands") # no 'None' to raise in case missing with pytest.raises(pystac.errors.STACValidationError): mlm_bands_bad_item = pystac.Item.from_dict(mlm_bands_bad_data) pystac.validation.validate(mlm_bands_bad_item, validator=mlm_validator) @@ -149,7 +154,7 @@ def test_mlm_eo_bands_invalid_only_in_item_properties( pystac.validation.validate(mlm_item, validator=mlm_validator) # ensure original is valid mlm_eo_bands_bad_data = copy.deepcopy(mlm_example) - mlm_eo_bands_bad_data["assets"]["weights"].pop("eo:bands") # type: ignore # no 'None' to raise in case modified + mlm_eo_bands_bad_data["assets"]["weights"].pop("eo:bands") # no 'None' to raise in case missing with pytest.raises(pystac.errors.STACValidationError): mlm_eo_bands_bad_item = pystac.Item.from_dict(mlm_eo_bands_bad_data) pystac.validation.validate(mlm_eo_bands_bad_item, validator=mlm_validator) @@ -165,12 +170,12 @@ def test_mlm_no_input_allowed_but_explicit_empty_array_required( mlm_example: Dict[str, JSON], ) -> None: mlm_data = copy.deepcopy(mlm_example) - mlm_data["properties"]["mlm:input"] = [] # type: ignore + mlm_data["properties"]["mlm:input"] = [] mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) with pytest.raises(pystac.errors.STACValidationError): - mlm_data["properties"].pop("mlm:input") # type: ignore # no 'None' to raise in case modified + mlm_data["properties"].pop("mlm:input") # no 'None' to raise in case missing mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) @@ -230,13 +235,13 @@ def test_mlm_other_non_mlm_assets_allowed( mlm_item = pystac.Item.from_dict(mlm_data) pystac.validation.validate(mlm_item, validator=mlm_validator) # self-check valid beforehand - mlm_data["assets"]["sample"] = { # type: ignore + mlm_data["assets"]["sample"] = { "type": "image/jpeg", "href": "https://example.com/sample/output.jpg", "roles": ["preview"], "title": "Model Output Predictions Sample", } - mlm_data["assets"]["model-cart"] = { # type: ignore + mlm_data["assets"]["model-cart"] = { "type": "text/markdown", "href": "https://example.com/sample/model.md", "roles": ["metadata"], @@ -285,7 +290,8 @@ def test_mlm_at_least_one_asset_model( else: with pytest.raises(pystac.errors.STACValidationError) as exc: pystac.validation.validate(mlm_item, validator=mlm_validator) - assert exc.value.source[0].schema["$comment"] in [ # type: ignore + errors = cast(list[ValidationError], exc.value.source) + assert errors[0].schema["$comment"] in [ "At least one Asset must provide the model definition indicated by the 'mlm:model' role.", "Used to check the artifact type property that is required by a Model Asset annotated by 'mlm:model' role." ] From 3bcdb87be6f2ab0f03024ad05742cfd43c1e657c Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 23:35:26 -0500 Subject: [PATCH 57/83] adjust pydantic fields attributes --- stac_model/output.py | 4 ++-- stac_model/runtime.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/stac_model/output.py b/stac_model/output.py index 0e25ec7..79bc17f 100644 --- a/stac_model/output.py +++ b/stac_model/output.py @@ -7,8 +7,8 @@ class ModelResult(MLMBaseModel): - shape: List[Union[int, float]] = Field(..., min_items=1) - dim_order: List[str] = Field(..., min_items=1) + shape: List[Union[int, float]] = Field(..., min_length=1) + dim_order: List[str] = Field(..., min_length=1) data_type: DataType diff --git a/stac_model/runtime.py b/stac_model/runtime.py index 9104fa6..1fd60d7 100644 --- a/stac_model/runtime.py +++ b/stac_model/runtime.py @@ -46,4 +46,4 @@ class Runtime(MLMBaseModel): accelerator: Optional[AcceleratorType] = Field(default=None) accelerator_constrained: bool = Field(default=False) accelerator_summary: Annotated[Optional[str], OmitIfNone] = Field(default=None) - accelerator_count: Annotated[Optional[int], OmitIfNone] = Field(default=None, minimum=1) + accelerator_count: Annotated[Optional[int], OmitIfNone] = Field(default=None, ge=1) From 1dcbac8069c3640bb49d6fca18d2fcd6a351bd13 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 23:35:57 -0500 Subject: [PATCH 58/83] update packages --- poetry.lock | 1330 ++++++++++++++++++++++++++------------------------- 1 file changed, 690 insertions(+), 640 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5f502a0..c750465 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "annotated-types" @@ -13,32 +13,32 @@ files = [ [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "bandit" -version = "1.7.8" +version = "1.7.10" description = "Security oriented static analyser for python code." optional = false python-versions = ">=3.8" files = [ - {file = "bandit-1.7.8-py3-none-any.whl", hash = "sha256:509f7af645bc0cd8fd4587abc1a038fc795636671ee8204d502b933aee44f381"}, - {file = "bandit-1.7.8.tar.gz", hash = "sha256:36de50f720856ab24a24dbaa5fee2c66050ed97c1477e0a1159deab1775eab6b"}, + {file = "bandit-1.7.10-py3-none-any.whl", hash = "sha256:665721d7bebbb4485a339c55161ac0eedde27d51e638000d91c8c2d68343ad02"}, + {file = "bandit-1.7.10.tar.gz", hash = "sha256:59ed5caf5d92b6ada4bf65bc6437feea4a9da1093384445fed4d472acc6cff7b"}, ] [package.dependencies] @@ -56,13 +56,13 @@ yaml = ["PyYAML"] [[package]] name = "bracex" -version = "2.4" +version = "2.5.post1" description = "Bash style brace expander." optional = false python-versions = ">=3.8" files = [ - {file = "bracex-2.4-py3-none-any.whl", hash = "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418"}, - {file = "bracex-2.4.tar.gz", hash = "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb"}, + {file = "bracex-2.5.post1-py3-none-any.whl", hash = "sha256:13e5732fec27828d6af308628285ad358047cec36801598368cb28bc631dbaf6"}, + {file = "bracex-2.5.post1.tar.gz", hash = "sha256:12c50952415bfa773d2d9ccb8e79651b8cdb1f31a42f6091b804f6ba2b4a66b6"}, ] [[package]] @@ -93,13 +93,13 @@ test = ["coverage", "freezegun", "pre-commit", "pytest", "pytest-cov", "pytest-m [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] @@ -115,101 +115,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -239,63 +254,73 @@ files = [ [[package]] name = "coverage" -version = "7.5.0" +version = "7.6.4" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "coverage-7.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:432949a32c3e3f820af808db1833d6d1631664d53dd3ce487aa25d574e18ad1c"}, - {file = "coverage-7.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2bd7065249703cbeb6d4ce679c734bef0ee69baa7bff9724361ada04a15b7e3b"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbfe6389c5522b99768a93d89aca52ef92310a96b99782973b9d11e80511f932"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39793731182c4be939b4be0cdecde074b833f6171313cf53481f869937129ed3"}, - {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a5dbe1ba1bf38d6c63b6d2c42132d45cbee6d9f0c51b52c59aa4afba057517"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:357754dcdfd811462a725e7501a9b4556388e8ecf66e79df6f4b988fa3d0b39a"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a81eb64feded34f40c8986869a2f764f0fe2db58c0530d3a4afbcde50f314880"}, - {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51431d0abbed3a868e967f8257c5faf283d41ec882f58413cf295a389bb22e58"}, - {file = "coverage-7.5.0-cp310-cp310-win32.whl", hash = "sha256:f609ebcb0242d84b7adeee2b06c11a2ddaec5464d21888b2c8255f5fd6a98ae4"}, - {file = "coverage-7.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:6782cd6216fab5a83216cc39f13ebe30adfac2fa72688c5a4d8d180cd52e8f6a"}, - {file = "coverage-7.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e768d870801f68c74c2b669fc909839660180c366501d4cc4b87efd6b0eee375"}, - {file = "coverage-7.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:84921b10aeb2dd453247fd10de22907984eaf80901b578a5cf0bb1e279a587cb"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710c62b6e35a9a766b99b15cdc56d5aeda0914edae8bb467e9c355f75d14ee95"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c379cdd3efc0658e652a14112d51a7668f6bfca7445c5a10dee7eabecabba19d"}, - {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea9d3ca80bcf17edb2c08a4704259dadac196fe5e9274067e7a20511fad1743"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:41327143c5b1d715f5f98a397608f90ab9ebba606ae4e6f3389c2145410c52b1"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:565b2e82d0968c977e0b0f7cbf25fd06d78d4856289abc79694c8edcce6eb2de"}, - {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cf3539007202ebfe03923128fedfdd245db5860a36810136ad95a564a2fdffff"}, - {file = "coverage-7.5.0-cp311-cp311-win32.whl", hash = "sha256:bf0b4b8d9caa8d64df838e0f8dcf68fb570c5733b726d1494b87f3da85db3a2d"}, - {file = "coverage-7.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c6384cc90e37cfb60435bbbe0488444e54b98700f727f16f64d8bfda0b84656"}, - {file = "coverage-7.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fed7a72d54bd52f4aeb6c6e951f363903bd7d70bc1cad64dd1f087980d309ab9"}, - {file = "coverage-7.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cbe6581fcff7c8e262eb574244f81f5faaea539e712a058e6707a9d272fe5b64"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad97ec0da94b378e593ef532b980c15e377df9b9608c7c6da3506953182398af"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4bacd62aa2f1a1627352fe68885d6ee694bdaebb16038b6e680f2924a9b2cc"}, - {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adf032b6c105881f9d77fa17d9eebe0ad1f9bfb2ad25777811f97c5362aa07f2"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ba01d9ba112b55bfa4b24808ec431197bb34f09f66f7cb4fd0258ff9d3711b1"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f0bfe42523893c188e9616d853c47685e1c575fe25f737adf473d0405dcfa7eb"}, - {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a9a7ef30a1b02547c1b23fa9a5564f03c9982fc71eb2ecb7f98c96d7a0db5cf2"}, - {file = "coverage-7.5.0-cp312-cp312-win32.whl", hash = "sha256:3c2b77f295edb9fcdb6a250f83e6481c679335ca7e6e4a955e4290350f2d22a4"}, - {file = "coverage-7.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:427e1e627b0963ac02d7c8730ca6d935df10280d230508c0ba059505e9233475"}, - {file = "coverage-7.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9dd88fce54abbdbf4c42fb1fea0e498973d07816f24c0e27a1ecaf91883ce69e"}, - {file = "coverage-7.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a898c11dca8f8c97b467138004a30133974aacd572818c383596f8d5b2eb04a9"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07dfdd492d645eea1bd70fb1d6febdcf47db178b0d99161d8e4eed18e7f62fe7"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3d117890b6eee85887b1eed41eefe2e598ad6e40523d9f94c4c4b213258e4a4"}, - {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6afd2e84e7da40fe23ca588379f815fb6dbbb1b757c883935ed11647205111cb"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9960dd1891b2ddf13a7fe45339cd59ecee3abb6b8326d8b932d0c5da208104f"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ced268e82af993d7801a9db2dbc1d2322e786c5dc76295d8e89473d46c6b84d4"}, - {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7c211f25777746d468d76f11719e64acb40eed410d81c26cefac641975beb88"}, - {file = "coverage-7.5.0-cp38-cp38-win32.whl", hash = "sha256:262fffc1f6c1a26125d5d573e1ec379285a3723363f3bd9c83923c9593a2ac25"}, - {file = "coverage-7.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:eed462b4541c540d63ab57b3fc69e7d8c84d5957668854ee4e408b50e92ce26a"}, - {file = "coverage-7.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0194d654e360b3e6cc9b774e83235bae6b9b2cac3be09040880bb0e8a88f4a1"}, - {file = "coverage-7.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33c020d3322662e74bc507fb11488773a96894aa82a622c35a5a28673c0c26f5"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbdf2cae14a06827bec50bd58e49249452d211d9caddd8bd80e35b53cb04631"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3235d7c781232e525b0761730e052388a01548bd7f67d0067a253887c6e8df46"}, - {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2de4e546f0ec4b2787d625e0b16b78e99c3e21bc1722b4977c0dddf11ca84e"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0e206259b73af35c4ec1319fd04003776e11e859936658cb6ceffdeba0f5be"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2055c4fb9a6ff624253d432aa471a37202cd8f458c033d6d989be4499aed037b"}, - {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075299460948cd12722a970c7eae43d25d37989da682997687b34ae6b87c0ef0"}, - {file = "coverage-7.5.0-cp39-cp39-win32.whl", hash = "sha256:280132aada3bc2f0fac939a5771db4fbb84f245cb35b94fae4994d4c1f80dae7"}, - {file = "coverage-7.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:c58536f6892559e030e6924896a44098bc1290663ea12532c78cef71d0df8493"}, - {file = "coverage-7.5.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:2b57780b51084d5223eee7b59f0d4911c31c16ee5aa12737c7a02455829ff067"}, - {file = "coverage-7.5.0.tar.gz", hash = "sha256:cf62d17310f34084c59c01e027259076479128d11e4661bb6c9acb38c5e19bb8"}, + {file = "coverage-7.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07"}, + {file = "coverage-7.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51"}, + {file = "coverage-7.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea"}, + {file = "coverage-7.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a"}, + {file = "coverage-7.6.4-cp310-cp310-win32.whl", hash = "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa"}, + {file = "coverage-7.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172"}, + {file = "coverage-7.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b"}, + {file = "coverage-7.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b"}, + {file = "coverage-7.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db"}, + {file = "coverage-7.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522"}, + {file = "coverage-7.6.4-cp311-cp311-win32.whl", hash = "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf"}, + {file = "coverage-7.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19"}, + {file = "coverage-7.6.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2"}, + {file = "coverage-7.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27"}, + {file = "coverage-7.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1"}, + {file = "coverage-7.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5"}, + {file = "coverage-7.6.4-cp312-cp312-win32.whl", hash = "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17"}, + {file = "coverage-7.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08"}, + {file = "coverage-7.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9"}, + {file = "coverage-7.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06"}, + {file = "coverage-7.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21"}, + {file = "coverage-7.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a"}, + {file = "coverage-7.6.4-cp313-cp313-win32.whl", hash = "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e"}, + {file = "coverage-7.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963"}, + {file = "coverage-7.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f"}, + {file = "coverage-7.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3"}, + {file = "coverage-7.6.4-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70"}, + {file = "coverage-7.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef"}, + {file = "coverage-7.6.4-cp313-cp313t-win32.whl", hash = "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e"}, + {file = "coverage-7.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1"}, + {file = "coverage-7.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3"}, + {file = "coverage-7.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376"}, + {file = "coverage-7.6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111"}, + {file = "coverage-7.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901"}, + {file = "coverage-7.6.4-cp39-cp39-win32.whl", hash = "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09"}, + {file = "coverage-7.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f"}, + {file = "coverage-7.6.4-pp39.pp310-none-any.whl", hash = "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e"}, + {file = "coverage-7.6.4.tar.gz", hash = "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73"}, ] [package.dependencies] @@ -306,13 +331,13 @@ toml = ["tomli"] [[package]] name = "distlib" -version = "0.3.8" +version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] [[package]] @@ -347,13 +372,13 @@ pipenv = ["pipenv (<=2022.12.19)"] [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -361,19 +386,19 @@ test = ["pytest (>=6)"] [[package]] name = "filelock" -version = "3.14.0" +version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, - {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "identify" @@ -391,15 +416,18 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.7" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -434,13 +462,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.12.1" +version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, - {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, ] [package.dependencies] @@ -539,100 +567,116 @@ files = [ [[package]] name = "nodeenv" -version = "1.8.0" +version = "1.9.1" description = "Node.js virtual environment builder" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] -[package.dependencies] -setuptools = "*" - [[package]] name = "numpy" -version = "1.26.4" +version = "2.1.3" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +python-versions = ">=3.10" +files = [ + {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, + {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, + {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, + {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, + {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, + {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, + {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, + {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, + {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, + {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, + {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, + {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, + {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, + {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, + {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, + {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, + {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, + {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, + {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, + {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, + {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, + {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, + {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, + {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, + {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, + {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, + {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, + {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, + {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, + {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, + {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, + {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, ] [[package]] name = "packaging" -version = "24.0" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] name = "pbr" -version = "6.0.0" +version = "6.1.0" description = "Python Build Reasonableness" optional = false python-versions = ">=2.6" files = [ - {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, - {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, + {file = "pbr-6.1.0-py2.py3-none-any.whl", hash = "sha256:a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a"}, + {file = "pbr-6.1.0.tar.gz", hash = "sha256:788183e382e3d1d7707db08978239965e8b9e4e5ed42669bf4758186734d5f24"}, ] [[package]] name = "platformdirs" -version = "4.2.1" +version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, - {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" @@ -669,13 +713,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.48" +version = "3.0.36" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.6.2" files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, + {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"}, + {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"}, ] [package.dependencies] @@ -694,109 +738,131 @@ files = [ [[package]] name = "pydantic" -version = "2.7.1" +version = "2.10.0b1" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, - {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, + {file = "pydantic-2.10.0b1-py3-none-any.whl", hash = "sha256:ee50a4f50f15a8aa1f9decf28e22ce508af6b88f505f8f039a8b3e74e676c97a"}, + {file = "pydantic-2.10.0b1.tar.gz", hash = "sha256:ae656221540a46d4207814a8ade469291d932eafff594511907f1eec7bb94ec7"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.18.2" -typing-extensions = ">=4.6.1" +annotated-types = ">=0.6.0" +pydantic-core = "2.26.0" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.18.2" +version = "2.26.0" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, - {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, - {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, - {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, - {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, - {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, - {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, - {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, - {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, - {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, - {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, - {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, - {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, - {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, + {file = "pydantic_core-2.26.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:fa77bb565223821cedb59e1fc4e9654fc55c3cfe8bf35cb6a23ceb3e4314ff1f"}, + {file = "pydantic_core-2.26.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e06ea3a4d2dd8213de98abafbd82455997daf5ed2c9ac858e13f1fe929e8ebff"}, + {file = "pydantic_core-2.26.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d717b3ee2208ee80a91382fd2d0d000c50f775a2a3a9b59b05e70063a82e767"}, + {file = "pydantic_core-2.26.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebd2ad03dff9a72952972cf89eaf62afc110dc4efc920b3ab1d1fe4cec350ebc"}, + {file = "pydantic_core-2.26.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c71d75e49d3d566f73389289a6470983a01e580ddc1d06105a31fd87410211da"}, + {file = "pydantic_core-2.26.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69f94e23cf93f487962eb5fd2294ca252f16b4f251b5a06b59f471777d842d3c"}, + {file = "pydantic_core-2.26.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e7282095ce7e535ba187f04171a9b149d244dfd4ae27b10953966fb1bbb7938"}, + {file = "pydantic_core-2.26.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f6bcc8f7f54a80aca5347ac540e2bea327114bbdb13ca1523c6b7672b0863c2a"}, + {file = "pydantic_core-2.26.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ffb4278eb5e1aefee951e18332ff5d8b2e76f40efc7f4931755525871de2dbb0"}, + {file = "pydantic_core-2.26.0-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:579e67fbd86d9fa9941198b0642e988d7e169df2e1f1d07b93bcd555c8075670"}, + {file = "pydantic_core-2.26.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fbca9dd66c7d47cc103288c93fd1f472626236c5d015dae1cbe236ffd84d7ebb"}, + {file = "pydantic_core-2.26.0-cp310-none-win32.whl", hash = "sha256:5a2e33c88c5f8d96d56e0c68e95f87663cc3ce4c20f207d0b382533bec836610"}, + {file = "pydantic_core-2.26.0-cp310-none-win_amd64.whl", hash = "sha256:f7b7f4ff5f1fc67b4bab2cbab5d5bd321a0bf40ed63bde9a0d439d78ad97d9c2"}, + {file = "pydantic_core-2.26.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a784ef6bbc8f3086601cba9fee29b6e608889a823762af5bb0b92227298d376a"}, + {file = "pydantic_core-2.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61c6b18e7cc5ab80a8f78b1181cd1fec18ea7b8e3b871995b337d6e5622c5a9f"}, + {file = "pydantic_core-2.26.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d561fa3a7b8267645f678a114105c4b91906da70fd4772cd0bf15f5b35987149"}, + {file = "pydantic_core-2.26.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77411c34d38c3fd0998d34e7a4e2a46432511f6b96096438691d08dfe103d40d"}, + {file = "pydantic_core-2.26.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b105bfd776f303e61b8d12f73dd8613be93d3df634d0a6a7d435661038530d8b"}, + {file = "pydantic_core-2.26.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d81b369d40e5077624e22ddbd5d3a2090b5eeab1fe836552019718f93c114fc0"}, + {file = "pydantic_core-2.26.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:616be5b07fb64d23a8ed6b711732d3038698b89f67d76f97248819626415bed8"}, + {file = "pydantic_core-2.26.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e4de25be2bb212057f674ce211f395baa6181cadcc83ddf014bb29148515bef"}, + {file = "pydantic_core-2.26.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d736f34c75600020739d57ffd1a106e36e4afecf6f0d70db804fe9612195f0c6"}, + {file = "pydantic_core-2.26.0-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3867f3e474aa9191fb40dd413e7fbcaa1e2099603aae3da0d66141d9eb83b937"}, + {file = "pydantic_core-2.26.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:063a33d46af3593978bce031eac378c9603ca0a11719b0f7bd1969aa9e870a8c"}, + {file = "pydantic_core-2.26.0-cp311-none-win32.whl", hash = "sha256:82a803d0ae210f3f7dddbd774ad5a2cb53e40676cda7c91f670cf8297832225c"}, + {file = "pydantic_core-2.26.0-cp311-none-win_amd64.whl", hash = "sha256:7b35ab4a675b43acfb483dcdf9e11ef845b68ac9d8b6ca81dbaa522f38da0ed6"}, + {file = "pydantic_core-2.26.0-cp311-none-win_arm64.whl", hash = "sha256:b1fc2653ccc27bf7917cb70f13c64f4122edc4bc992e8be8c04ee9306dafce57"}, + {file = "pydantic_core-2.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9401038c16d560ae01551319141c0ffd2e1b80f9659ea535e076ca23ae55e866"}, + {file = "pydantic_core-2.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a91967938a5dd16d2074307d98a2232cec494d6215d97f5c0f09135be478517d"}, + {file = "pydantic_core-2.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3525264ca53dd25de397584fe83aa949042854229bbfe940ff7cb19ef5238691"}, + {file = "pydantic_core-2.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2076ead709b2e2f6c32677822a53d72c3aac0a91c9a189256390a67990fdd729"}, + {file = "pydantic_core-2.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a33391da35242c051004e23dc6ca138237943b1c182f6f7d7cd73b784047a76"}, + {file = "pydantic_core-2.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da5090641c03599317079b258c99a13c15ed2e4de334d6e4b5c39e5555f3f296"}, + {file = "pydantic_core-2.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:550f622b247b1209b8880043834be7f1ac24c33f63f54cd53ee4a6f62c80b9ec"}, + {file = "pydantic_core-2.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48ef296842a01398305d2901c5c60347f8508d2f7d83bcfd9d3438bdfad96f5e"}, + {file = "pydantic_core-2.26.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6bc9eb88b2b48527b9b6b7a79a80a8e48b07e1334f659d09f5dd26ebb19cfd9c"}, + {file = "pydantic_core-2.26.0-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:d9651e747f64017aaa9ed8eab70a9ceada438b4395c8379614032dd178f96d57"}, + {file = "pydantic_core-2.26.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c005173da25bb76c54373374434d922ba3888f430879fdaf749d7abb4d8ea3"}, + {file = "pydantic_core-2.26.0-cp312-none-win32.whl", hash = "sha256:3f411e6d6d3fb93af5bb111313bb0cd68a6e38bae5afb79f2de530b3b44fad33"}, + {file = "pydantic_core-2.26.0-cp312-none-win_amd64.whl", hash = "sha256:f615cba236fdd4b3f366d42427d447856b1afa19f5e40e24aa1da56b6f042e30"}, + {file = "pydantic_core-2.26.0-cp312-none-win_arm64.whl", hash = "sha256:9e0330e20adae0571934ac745b240a0809eb2d85ee76e786bafe0d30a6ccd8cb"}, + {file = "pydantic_core-2.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:18305e996cac7053c82f10bd945ef67a8f6e80acc947f8929ddc0af87d5eb3cb"}, + {file = "pydantic_core-2.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:036fdd55f2f435dcb06dccdb9e1074fb8b9121560e5bed19f40a56c807b878a7"}, + {file = "pydantic_core-2.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:330d10f9112599863008d130a3ddba54e5bcafc5b9d24f62ace63e054b72f169"}, + {file = "pydantic_core-2.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f829f593a9ccb1fca8d9e98ef76bed89081c2c8acbdcf6ce230a27b8b5d7d9c0"}, + {file = "pydantic_core-2.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9965d2b196e64f1a008b1ef6d1cdb7d4c9da1ea757f49428d0ec497c766f50ad"}, + {file = "pydantic_core-2.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2279b4086e698aa6c21a1e4987530492704d7bbee696b251c00e26bd37d9037"}, + {file = "pydantic_core-2.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997b1bd0605a5e7b2509ed5642f9a3fe3078abfca5e4c940dbd572df815a7559"}, + {file = "pydantic_core-2.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0101d0b5a333a14d95a109f82ca95fe2ce34b4e48fd7dbc0fbe1a4e623aa94c7"}, + {file = "pydantic_core-2.26.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:32c0c99180cecd8fb1c91b9695873b0ff9bf381518977776757b253291cf0235"}, + {file = "pydantic_core-2.26.0-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:4e437d26da787b3ad8b96cac47d00d3786457d68b4e2f5d7ee03a9a2d4bc12ab"}, + {file = "pydantic_core-2.26.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:04d64cb57f9ebde2c88976ef7846a915e7a7e74944d7c1d674314bc1e38b404c"}, + {file = "pydantic_core-2.26.0-cp313-none-win32.whl", hash = "sha256:023bdce63154fa2285d236b350723c82bc76d051e60de6f761441e9680c8a940"}, + {file = "pydantic_core-2.26.0-cp313-none-win_amd64.whl", hash = "sha256:2bfeffdee3175c2593f0e4371c5b44da2f8044d5f5dd98be665fc8a6464008c8"}, + {file = "pydantic_core-2.26.0-cp313-none-win_arm64.whl", hash = "sha256:3a4c5666eed3d8e9c9b89dd56a96e3cbc261c239c92a87a15fc55affe5d379f9"}, + {file = "pydantic_core-2.26.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3d8b599013a80e591eff37ec3e0151b2d86d7feeadd77f1b11061bd7987d08b9"}, + {file = "pydantic_core-2.26.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d6bc543db35ddb53995e0f2a0f18fb0f3ad55e73c38c414a23f4ae8592bd42c0"}, + {file = "pydantic_core-2.26.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4a8a96b6a228c597fa232ba3e4ddc482abb1cd69e340ab0418195e4c520cb1b"}, + {file = "pydantic_core-2.26.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b26991a3fb41ebb73acba7a7811787ba5ed8176c557708c68aef46d9fcbfed20"}, + {file = "pydantic_core-2.26.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3b608c1b08671c111ff41aa167994438de0633bb321fae1700bcbe4608b5a6c"}, + {file = "pydantic_core-2.26.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6b38f53dec01ea7e203b211b33f4019100e83465d4d935ab9120d820a0ea4d3"}, + {file = "pydantic_core-2.26.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd41f98f58819d6bf16b2e50c5f67d8ece09c99e41a950cf5ed76b5b4586814d"}, + {file = "pydantic_core-2.26.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fae508dd35f42adc03dba8bd0f6b18bfea23edc41ca5c6c75cc6262800929556"}, + {file = "pydantic_core-2.26.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2a3051216d2e1daf1ee22426452e05c8fdb5f476e9806cec67b1534391d2d549"}, + {file = "pydantic_core-2.26.0-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:e2255b4b90746666e4725c7b8e26747d5396ef1ef724fd88be8dde8e9a8f5029"}, + {file = "pydantic_core-2.26.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f994cfd732d56e2ed5b44e018d131c8d2273b00121b720d84a3d8b88f2a7d1c9"}, + {file = "pydantic_core-2.26.0-cp38-none-win32.whl", hash = "sha256:1be8973dcda3f6336acf1939e9e948f2611b27ddd9454f0ed58586710c248d75"}, + {file = "pydantic_core-2.26.0-cp38-none-win_amd64.whl", hash = "sha256:27b71639a044c816b87498d006d2a6887a8fc1f56ffabad34c54da97eca69aae"}, + {file = "pydantic_core-2.26.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:df2054459dd0373cf6d9b6e374cd952c8018fb135b9162e1c8e1ee60456c3c22"}, + {file = "pydantic_core-2.26.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8e9bd70d40d2b6d91186e886e8634e8f4d29122fb918f36c88789f0a8dc16f08"}, + {file = "pydantic_core-2.26.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1fc6d44b5fa4f5805ff8beb03250bd4c3d014658afca73926d1a0ea06cfec9b"}, + {file = "pydantic_core-2.26.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27e0ccdad2db7159b766061e947b568ef7cd3c209f7722b36867a5a4184c0a1d"}, + {file = "pydantic_core-2.26.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:204cf1a3aac1339ac2926cce415f5b5e4a2cb1eb7bd6c92aef4cd3c0040b0faa"}, + {file = "pydantic_core-2.26.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a860c3fd2bd3c521c189b4af32a12c3f16e342c97b395f220a0822bc5c18374e"}, + {file = "pydantic_core-2.26.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6c39003ca3411e150dadd991ff0c12e15c01609ad3c387fc4b92b5773eebfa9"}, + {file = "pydantic_core-2.26.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cc607fad021f699f6891056a39d419cfb572dfde2d59c5062f60dc1508264e95"}, + {file = "pydantic_core-2.26.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f6b1b04c4c0f56fd7dd8d95475bcc4da816a79cfcebd5eb030794fe293c23203"}, + {file = "pydantic_core-2.26.0-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:af445f7740ed3549f9478e3665273c47532c17ffa8fd5f6e20742fd7ae7fe487"}, + {file = "pydantic_core-2.26.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2d816f3f80e5ccec2c5ffccd2fa57f36e9fb6b15d7c210ad793cdfded7feedfc"}, + {file = "pydantic_core-2.26.0-cp39-none-win32.whl", hash = "sha256:8f3622aee8d2411c894721110a196abc1779eb0b271da4700bbf75a3e7b0c535"}, + {file = "pydantic_core-2.26.0-cp39-none-win_amd64.whl", hash = "sha256:2a8af9ada5bb86016cbe18861aacdea64aa2572e6d6ec8a9ad687f97c4cf50a5"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:54c52a1ce830de3d93ec1d2af391a0d3f3255092c5ebf160be9e117796e3d472"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:727282cc2ac6ab40861e8e461b8c75ca4c60b95faae631d119e780993a14c5f7"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bcf674bad21e3a4e83b4f4e214a3a689f0a3ff49f0d858738b68dddb5c301f6"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d85c60fe46d1501af0007137553ae5fc1b8c6aa72ebf3b4bce806a983a163f"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b26d88c9c8677699a9d134e4eac063662abe2b1053c9821adbd000a894f2d5ea"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:83fe1dcdf9faccfed14b60fd6ea0770814fb0510e7c5e9fb74d5713c2fa9f139"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:114059f663569af42d90d8771f33bb0526eb8f89dbd0ff0f448f7d549cb28c03"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7daed5575b5163016bceeed0c6a31d508c4e4aca4eef6ecdb5266f07130ae988"}, + {file = "pydantic_core-2.26.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:56d163e491360cb7806f3b0c9325706b1794a217e5dea7bd6462730151e655c6"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ca8231f51600fa4f5116eeb7d491f0d535f2a3fe8d5fff7c40febf90d3ebccfb"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbc787251b9c6180202b8496ce5dbff51c1ec78e70f95e073a2f495455363def"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3380e05787a7fc9a41fe0e343fbe8d160bfb28bcd1bc96d7671576e0ee5dea30"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785d0b12c29f2b6cb5f1f0ce1a239bd7ac13fd978239b14e0e23a40487ecc212"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56c6607026c311169a079bc6dcd8f6a7a2e29ae4ad13b145893eac6f1c6941c4"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1ea69ae5c52fa6b1e1ccf9a278d5f8f1a9891f912693ed3c00b88b0ceea11d4f"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3c8e7e2f733a04cc96e7e0913b95906ffd6300cf84c9dac4433a243bf2d1aed5"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:8a0300cdbea0d4568b39fc7be3436cc702f9ee1655b8dd899ec874ff2b663a4b"}, + {file = "pydantic_core-2.26.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b42f4de434e6e7a57c127b519f907c4928be33fd1db8000f2b74992cb031decb"}, + {file = "pydantic_core-2.26.0.tar.gz", hash = "sha256:4578d4914bdbbd18963b4c611fa39d912d0dbeeffef8211fb546e45176a72d1d"}, ] [package.dependencies] @@ -804,20 +870,21 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.2.1" +version = "2.6.1" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.2.1-py3-none-any.whl", hash = "sha256:0235391d26db4d2190cb9b31051c4b46882d28a51533f97440867f012d4da091"}, - {file = "pydantic_settings-2.2.1.tar.gz", hash = "sha256:00b9f6a5e95553590434c0fa01ead0b216c3e10bc54ae02e37f359948643c5ed"}, + {file = "pydantic_settings-2.6.1-py3-none-any.whl", hash = "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87"}, + {file = "pydantic_settings-2.6.1.tar.gz", hash = "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0"}, ] [package.dependencies] -pydantic = ">=2.3.0" +pydantic = ">=2.7.0" python-dotenv = ">=0.21.0" [package.extras] +azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] toml = ["tomli (>=2.0.1)"] yaml = ["pyyaml (>=6.0.1)"] @@ -860,39 +927,35 @@ toml = ["tomli (>=1.2.3)"] [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pystac" -version = "1.10.0" +version = "1.11.0" description = "Python library for working with the SpatioTemporal Asset Catalog (STAC) specification" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "pystac-1.10.0-py3-none-any.whl", hash = "sha256:2d1eb969abc7e13e2bdb4bb5ae1a68780da1e06f30f66fcf0d4143f51eb03f38"}, - {file = "pystac-1.10.0.tar.gz", hash = "sha256:e2762a700953ae9bab914137116cea31e08378f6c7024d805d651009a6341e20"}, + {file = "pystac-1.11.0-py3-none-any.whl", hash = "sha256:10ac7c7b4ea6c5ec8333829a09ec1a33b596f02d1a97ffbbd72cd1b6c10598c1"}, + {file = "pystac-1.11.0.tar.gz", hash = "sha256:acb1e04be398a0cda2d8870ab5e90457783a8014a206590233171d8b2ae0d9e7"}, ] [package.dependencies] python-dateutil = ">=2.7.0" [package.extras] -bench = ["asv (>=0.6.0,<0.7.0)", "packaging (>=24.0,<25.0)", "virtualenv (>=20.22,<21.0)"] -docs = ["Sphinx (>=6.2,<7.0)", "boto3 (>=1.28,<2.0)", "ipython (>=8.12,<9.0)", "jinja2 (<4.0)", "jupyter (>=1.0,<2.0)", "nbsphinx (>=0.9.0,<0.10.0)", "pydata-sphinx-theme (>=0.13,<1.0)", "rasterio (>=1.3,<2.0)", "shapely (>=2.0,<3.0)", "sphinx-autobuild (==2024.2.4)", "sphinx-design (>=0.5.0,<0.6.0)", "sphinxcontrib-fulltoc (>=1.2,<2.0)"] jinja2 = ["jinja2 (<4.0)"] orjson = ["orjson (>=3.5)"] -test = ["black (>=24.0,<25.0)", "codespell (>=2.2,<3.0)", "coverage (>=7.2,<8.0)", "doc8 (>=1.1,<2.0)", "html5lib (>=1.1,<2.0)", "jinja2 (<4.0)", "jsonschema (>=4.18,<5.0)", "mypy (>=1.2,<2.0)", "orjson (>=3.8,<4.0)", "pre-commit (>=3.2,<4.0)", "pytest (>=8.0,<9.0)", "pytest-cov (>=5.0,<6.0)", "pytest-mock (>=3.10,<4.0)", "pytest-recording (>=0.13.0,<0.14.0)", "requests-mock (>=1.11,<2.0)", "ruff (==0.3.4)", "types-html5lib (>=1.1,<2.0)", "types-jsonschema (>=4.18,<5.0)", "types-orjson (>=3.6,<4.0)", "types-python-dateutil (>=2.8,<3.0)", "types-urllib3 (>=1.26,<2.0)"] urllib3 = ["urllib3 (>=1.26)"] validation = ["jsonschema (>=4.18,<5.0)"] @@ -1065,80 +1128,79 @@ cli = ["click (>=5.0)"] [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] name = "questionary" -version = "1.10.0" +version = "2.0.1" description = "Python library to build pretty command line user prompts ⭐️" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.8" files = [ - {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, - {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, + {file = "questionary-2.0.1-py3-none-any.whl", hash = "sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2"}, + {file = "questionary-2.0.1.tar.gz", hash = "sha256:bcce898bf3dbb446ff62830c86c5c6fb9a22a54146f0f5597d3da43b10d8fc8b"}, ] [package.dependencies] -prompt_toolkit = ">=2.0,<4.0" - -[package.extras] -docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] +prompt_toolkit = ">=2.0,<=3.0.36" [[package]] name = "referencing" @@ -1178,31 +1240,32 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.8.1" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, - {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rich-click" -version = "1.8.0" +version = "1.8.3" description = "Format click help output nicely with rich" optional = false python-versions = ">=3.7" files = [ - {file = "rich_click-1.8.0-py3-none-any.whl", hash = "sha256:846f504eb83a948d864888b2d73c71e52c310490c2babceac57e388aead086e2"}, - {file = "rich_click-1.8.0.tar.gz", hash = "sha256:f8cad0d67d286d6cd6fc9f69f2d6f25c6c4c2d99fb9d6cb3b8987b593dbe6fa8"}, + {file = "rich_click-1.8.3-py3-none-any.whl", hash = "sha256:636d9c040d31c5eee242201b5bf4f2d358bfae4db14bb22ec1cafa717cfd02cd"}, + {file = "rich_click-1.8.3.tar.gz", hash = "sha256:6d75bdfa7aa9ed2c467789a0688bc6da23fbe3a143e19aa6ad3f8bac113d2ab3"}, ] [package.dependencies] @@ -1216,110 +1279,101 @@ docs = ["markdown-include", "mkdocs", "mkdocs-glightbox", "mkdocs-material-exten [[package]] name = "rpds-py" -version = "0.18.0" +version = "0.21.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, - {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, - {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, - {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, - {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, - {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, - {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, - {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, - {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, - {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, - {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, - {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, - {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, + {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, + {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, + {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, + {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, + {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, + {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, + {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, + {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, + {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, + {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, + {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, ] [[package]] @@ -1342,61 +1396,52 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] [[package]] name = "ruamel-yaml-clib" -version = "0.2.8" +version = "0.2.12" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, - {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, - {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b"}, + {file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"}, ] [[package]] @@ -1450,68 +1495,73 @@ gitlab = ["python-gitlab (>=1.3.0)"] [[package]] name = "setuptools" -version = "69.5.1" +version = "75.3.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, + {file = "setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd"}, + {file = "setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.12.*)", "pytest-mypy"] [[package]] name = "shapely" -version = "2.0.4" +version = "2.0.6" description = "Manipulation and analysis of geometric objects" optional = false python-versions = ">=3.7" files = [ - {file = "shapely-2.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:011b77153906030b795791f2fdfa2d68f1a8d7e40bce78b029782ade3afe4f2f"}, - {file = "shapely-2.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9831816a5d34d5170aa9ed32a64982c3d6f4332e7ecfe62dc97767e163cb0b17"}, - {file = "shapely-2.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c4849916f71dc44e19ed370421518c0d86cf73b26e8656192fcfcda08218fbd"}, - {file = "shapely-2.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841f93a0e31e4c64d62ea570d81c35de0f6cea224568b2430d832967536308e6"}, - {file = "shapely-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b4431f522b277c79c34b65da128029a9955e4481462cbf7ebec23aab61fc58"}, - {file = "shapely-2.0.4-cp310-cp310-win32.whl", hash = "sha256:92a41d936f7d6743f343be265ace93b7c57f5b231e21b9605716f5a47c2879e7"}, - {file = "shapely-2.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:30982f79f21bb0ff7d7d4a4e531e3fcaa39b778584c2ce81a147f95be1cd58c9"}, - {file = "shapely-2.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de0205cb21ad5ddaef607cda9a3191eadd1e7a62a756ea3a356369675230ac35"}, - {file = "shapely-2.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7d56ce3e2a6a556b59a288771cf9d091470116867e578bebced8bfc4147fbfd7"}, - {file = "shapely-2.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:58b0ecc505bbe49a99551eea3f2e8a9b3b24b3edd2a4de1ac0dc17bc75c9ec07"}, - {file = "shapely-2.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:790a168a808bd00ee42786b8ba883307c0e3684ebb292e0e20009588c426da47"}, - {file = "shapely-2.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4310b5494271e18580d61022c0857eb85d30510d88606fa3b8314790df7f367d"}, - {file = "shapely-2.0.4-cp311-cp311-win32.whl", hash = "sha256:63f3a80daf4f867bd80f5c97fbe03314348ac1b3b70fb1c0ad255a69e3749879"}, - {file = "shapely-2.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:c52ed79f683f721b69a10fb9e3d940a468203f5054927215586c5d49a072de8d"}, - {file = "shapely-2.0.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5bbd974193e2cc274312da16b189b38f5f128410f3377721cadb76b1e8ca5328"}, - {file = "shapely-2.0.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:41388321a73ba1a84edd90d86ecc8bfed55e6a1e51882eafb019f45895ec0f65"}, - {file = "shapely-2.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0776c92d584f72f1e584d2e43cfc5542c2f3dd19d53f70df0900fda643f4bae6"}, - {file = "shapely-2.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c75c98380b1ede1cae9a252c6dc247e6279403fae38c77060a5e6186c95073ac"}, - {file = "shapely-2.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3e700abf4a37b7b8b90532fa6ed5c38a9bfc777098bc9fbae5ec8e618ac8f30"}, - {file = "shapely-2.0.4-cp312-cp312-win32.whl", hash = "sha256:4f2ab0faf8188b9f99e6a273b24b97662194160cc8ca17cf9d1fb6f18d7fb93f"}, - {file = "shapely-2.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:03152442d311a5e85ac73b39680dd64a9892fa42bb08fd83b3bab4fe6999bfa0"}, - {file = "shapely-2.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:994c244e004bc3cfbea96257b883c90a86e8cbd76e069718eb4c6b222a56f78b"}, - {file = "shapely-2.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05ffd6491e9e8958b742b0e2e7c346635033d0a5f1a0ea083547fcc854e5d5cf"}, - {file = "shapely-2.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbdc1140a7d08faa748256438291394967aa54b40009f54e8d9825e75ef6113"}, - {file = "shapely-2.0.4-cp37-cp37m-win32.whl", hash = "sha256:5af4cd0d8cf2912bd95f33586600cac9c4b7c5053a036422b97cfe4728d2eb53"}, - {file = "shapely-2.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:464157509ce4efa5ff285c646a38b49f8c5ef8d4b340f722685b09bb033c5ccf"}, - {file = "shapely-2.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:489c19152ec1f0e5c5e525356bcbf7e532f311bff630c9b6bc2db6f04da6a8b9"}, - {file = "shapely-2.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b79bbd648664aa6f44ef018474ff958b6b296fed5c2d42db60078de3cffbc8aa"}, - {file = "shapely-2.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:674d7baf0015a6037d5758496d550fc1946f34bfc89c1bf247cabdc415d7747e"}, - {file = "shapely-2.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cd4ccecc5ea5abd06deeaab52fcdba372f649728050c6143cc405ee0c166679"}, - {file = "shapely-2.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb5cdcbbe3080181498931b52a91a21a781a35dcb859da741c0345c6402bf00c"}, - {file = "shapely-2.0.4-cp38-cp38-win32.whl", hash = "sha256:55a38dcd1cee2f298d8c2ebc60fc7d39f3b4535684a1e9e2f39a80ae88b0cea7"}, - {file = "shapely-2.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:ec555c9d0db12d7fd777ba3f8b75044c73e576c720a851667432fabb7057da6c"}, - {file = "shapely-2.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9103abd1678cb1b5f7e8e1af565a652e036844166c91ec031eeb25c5ca8af0"}, - {file = "shapely-2.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:263bcf0c24d7a57c80991e64ab57cba7a3906e31d2e21b455f493d4aab534aaa"}, - {file = "shapely-2.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ddf4a9bfaac643e62702ed662afc36f6abed2a88a21270e891038f9a19bc08fc"}, - {file = "shapely-2.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:485246fcdb93336105c29a5cfbff8a226949db37b7473c89caa26c9bae52a242"}, - {file = "shapely-2.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8de4578e838a9409b5b134a18ee820730e507b2d21700c14b71a2b0757396acc"}, - {file = "shapely-2.0.4-cp39-cp39-win32.whl", hash = "sha256:9dab4c98acfb5fb85f5a20548b5c0abe9b163ad3525ee28822ffecb5c40e724c"}, - {file = "shapely-2.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:31c19a668b5a1eadab82ff070b5a260478ac6ddad3a5b62295095174a8d26398"}, - {file = "shapely-2.0.4.tar.gz", hash = "sha256:5dc736127fac70009b8d309a0eeb74f3e08979e530cf7017f2f507ef62e6cfb8"}, + {file = "shapely-2.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29a34e068da2d321e926b5073539fd2a1d4429a2c656bd63f0bd4c8f5b236d0b"}, + {file = "shapely-2.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c84c3f53144febf6af909d6b581bc05e8785d57e27f35ebaa5c1ab9baba13b"}, + {file = "shapely-2.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ad2fae12dca8d2b727fa12b007e46fbc522148a584f5d6546c539f3464dccde"}, + {file = "shapely-2.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3304883bd82d44be1b27a9d17f1167fda8c7f5a02a897958d86c59ec69b705e"}, + {file = "shapely-2.0.6-cp310-cp310-win32.whl", hash = "sha256:3ec3a0eab496b5e04633a39fa3d5eb5454628228201fb24903d38174ee34565e"}, + {file = "shapely-2.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:28f87cdf5308a514763a5c38de295544cb27429cfa655d50ed8431a4796090c4"}, + {file = "shapely-2.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5aeb0f51a9db176da9a30cb2f4329b6fbd1e26d359012bb0ac3d3c7781667a9e"}, + {file = "shapely-2.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a7a78b0d51257a367ee115f4d41ca4d46edbd0dd280f697a8092dd3989867b2"}, + {file = "shapely-2.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f32c23d2f43d54029f986479f7c1f6e09c6b3a19353a3833c2ffb226fb63a855"}, + {file = "shapely-2.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dc9fb0eb56498912025f5eb352b5126f04801ed0e8bdbd867d21bdbfd7cbd0"}, + {file = "shapely-2.0.6-cp311-cp311-win32.whl", hash = "sha256:d93b7e0e71c9f095e09454bf18dad5ea716fb6ced5df3cb044564a00723f339d"}, + {file = "shapely-2.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:c02eb6bf4cfb9fe6568502e85bb2647921ee49171bcd2d4116c7b3109724ef9b"}, + {file = "shapely-2.0.6-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cec9193519940e9d1b86a3b4f5af9eb6910197d24af02f247afbfb47bcb3fab0"}, + {file = "shapely-2.0.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83b94a44ab04a90e88be69e7ddcc6f332da7c0a0ebb1156e1c4f568bbec983c3"}, + {file = "shapely-2.0.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:537c4b2716d22c92036d00b34aac9d3775e3691f80c7aa517c2c290351f42cd8"}, + {file = "shapely-2.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98fea108334be345c283ce74bf064fa00cfdd718048a8af7343c59eb40f59726"}, + {file = "shapely-2.0.6-cp312-cp312-win32.whl", hash = "sha256:42fd4cd4834747e4990227e4cbafb02242c0cffe9ce7ef9971f53ac52d80d55f"}, + {file = "shapely-2.0.6-cp312-cp312-win_amd64.whl", hash = "sha256:665990c84aece05efb68a21b3523a6b2057e84a1afbef426ad287f0796ef8a48"}, + {file = "shapely-2.0.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:42805ef90783ce689a4dde2b6b2f261e2c52609226a0438d882e3ced40bb3013"}, + {file = "shapely-2.0.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d2cb146191a47bd0cee8ff5f90b47547b82b6345c0d02dd8b25b88b68af62d7"}, + {file = "shapely-2.0.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3fdef0a1794a8fe70dc1f514440aa34426cc0ae98d9a1027fb299d45741c381"}, + {file = "shapely-2.0.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c665a0301c645615a107ff7f52adafa2153beab51daf34587170d85e8ba6805"}, + {file = "shapely-2.0.6-cp313-cp313-win32.whl", hash = "sha256:0334bd51828f68cd54b87d80b3e7cee93f249d82ae55a0faf3ea21c9be7b323a"}, + {file = "shapely-2.0.6-cp313-cp313-win_amd64.whl", hash = "sha256:d37d070da9e0e0f0a530a621e17c0b8c3c9d04105655132a87cfff8bd77cc4c2"}, + {file = "shapely-2.0.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fa7468e4f5b92049c0f36d63c3e309f85f2775752e076378e36c6387245c5462"}, + {file = "shapely-2.0.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed5867e598a9e8ac3291da6cc9baa62ca25706eea186117034e8ec0ea4355653"}, + {file = "shapely-2.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81d9dfe155f371f78c8d895a7b7f323bb241fb148d848a2bf2244f79213123fe"}, + {file = "shapely-2.0.6-cp37-cp37m-win32.whl", hash = "sha256:fbb7bf02a7542dba55129062570211cfb0defa05386409b3e306c39612e7fbcc"}, + {file = "shapely-2.0.6-cp37-cp37m-win_amd64.whl", hash = "sha256:837d395fac58aa01aa544495b97940995211e3e25f9aaf87bc3ba5b3a8cd1ac7"}, + {file = "shapely-2.0.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c6d88ade96bf02f6bfd667ddd3626913098e243e419a0325ebef2bbd481d1eb6"}, + {file = "shapely-2.0.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8b3b818c4407eaa0b4cb376fd2305e20ff6df757bf1356651589eadc14aab41b"}, + {file = "shapely-2.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bbc783529a21f2bd50c79cef90761f72d41c45622b3e57acf78d984c50a5d13"}, + {file = "shapely-2.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2423f6c0903ebe5df6d32e0066b3d94029aab18425ad4b07bf98c3972a6e25a1"}, + {file = "shapely-2.0.6-cp38-cp38-win32.whl", hash = "sha256:2de00c3bfa80d6750832bde1d9487e302a6dd21d90cb2f210515cefdb616e5f5"}, + {file = "shapely-2.0.6-cp38-cp38-win_amd64.whl", hash = "sha256:3a82d58a1134d5e975f19268710e53bddd9c473743356c90d97ce04b73e101ee"}, + {file = "shapely-2.0.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:392f66f458a0a2c706254f473290418236e52aa4c9b476a072539d63a2460595"}, + {file = "shapely-2.0.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eba5bae271d523c938274c61658ebc34de6c4b33fdf43ef7e938b5776388c1be"}, + {file = "shapely-2.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7060566bc4888b0c8ed14b5d57df8a0ead5c28f9b69fb6bed4476df31c51b0af"}, + {file = "shapely-2.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b02154b3e9d076a29a8513dffcb80f047a5ea63c897c0cd3d3679f29363cf7e5"}, + {file = "shapely-2.0.6-cp39-cp39-win32.whl", hash = "sha256:44246d30124a4f1a638a7d5419149959532b99dfa25b54393512e6acc9c211ac"}, + {file = "shapely-2.0.6-cp39-cp39-win_amd64.whl", hash = "sha256:2b542d7f1dbb89192d3512c52b679c822ba916f93479fa5d4fc2fe4fa0b3c9e8"}, + {file = "shapely-2.0.6.tar.gz", hash = "sha256:997f6159b1484059ec239cacaa53467fd8b5564dabe186cd84ac2944663b0bf6"}, ] [package.dependencies] @@ -1570,13 +1620,13 @@ pbr = ">=2.0.0" [[package]] name = "termcolor" -version = "2.4.0" +version = "2.5.0" description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, - {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, + {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, + {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, ] [package.extras] @@ -1584,24 +1634,24 @@ tests = ["pytest", "pytest-cov"] [[package]] name = "tomli" -version = "2.0.1" +version = "2.0.2" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, + {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, ] [[package]] name = "tomlkit" -version = "0.12.4" +version = "0.13.2" description = "Style preserving TOML library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, - {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] [[package]] @@ -1630,24 +1680,24 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6. [[package]] name = "typing-extensions" -version = "4.11.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] name = "urllib3" -version = "2.2.1" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] @@ -1658,13 +1708,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.26.1" +version = "20.27.1" description = "Virtual Python Environment builder" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "virtualenv-20.26.1-py3-none-any.whl", hash = "sha256:7aa9982a728ae5892558bff6a2839c00b9ed145523ece2274fad6f414690ae75"}, - {file = "virtualenv-20.26.1.tar.gz", hash = "sha256:604bfdceaeece392802e6ae48e69cec49168b9c5f4a44e483963f9242eb0e78b"}, + {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, + {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, ] [package.dependencies] From d4f8c48d1081bfdab234ef2605c8fa7116f08761 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 6 Nov 2024 23:49:14 -0500 Subject: [PATCH 59/83] ignore inconsistent pydantic/mypy typing between versions --- stac_model/schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stac_model/schema.py b/stac_model/schema.py index 63310ba..008d7ec 100644 --- a/stac_model/schema.py +++ b/stac_model/schema.py @@ -173,7 +173,7 @@ class SummariesMLModelExtension(SummariesExtension): def _check_mlm_property(self, prop: str) -> FieldInfo: try: - return MLModelProperties.model_fields[prop] + return MLModelProperties.model_fields[prop] # type: ignore except KeyError as err: raise AttributeError(f"Name '{prop}' is not a valid MLM property.") from err From 9c18aba6f891a386a4e887c52e187ab237dc3db3 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Mon, 11 Nov 2024 11:27:21 -0800 Subject: [PATCH 60/83] update setup command, add back dependabot --- .github/dependabot.yml | 35 +++++++++++++++++++++++++++++++++++ Makefile | 20 ++++++++++---------- 2 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..8f872f1 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,35 @@ +# Configuration: https://dependabot.com/docs/config-file/ +# Docs: https://docs.github.com/en/github/administering-a-repository/keeping-your-dependencies-updated-automatically + +version: 2 + +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "monthly" + allow: + - dependency-type: "all" + commit-message: + prefix: ":arrow_up:" + open-pull-requests-limit: 5 + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" + allow: + - dependency-type: "all" + commit-message: + prefix: ":arrow_up:" + open-pull-requests-limit: 5 + + - package-ecosystem: "docker" + directory: "/docker" + schedule: + interval: "monthly" + allow: + - dependency-type: "all" + commit-message: + prefix: ":arrow_up:" + open-pull-requests-limit: 5 diff --git a/Makefile b/Makefile index f7733f9..301aea7 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ ACTIVEPYTHON = $(shell which python) #* UV .PHONY: setup setup: - curl -LsSf https://astral.sh/uv/install.sh | sh + which uv >/dev/null || (curl -LsSf https://astral.sh/uv/install.sh | sh) .PHONY: publish publish: @@ -13,22 +13,22 @@ publish: #* Installation .PHONY: install -install: +install: setup uv export --format requirements-txt -o requirements.txt --no-dev uv pip install --python $(ACTIVEPYTHON) -r requirements.txt .PHONY: install-dev -install-dev: +install-dev: setup uv export --format requirements-txt -o requirements-dev.txt uv pip install --python $(ACTIVEPYTHON) -r requirements-dev.txt .PHONY: pre-commit-install -pre-commit-install: +pre-commit-install: setup uv run --python $(ACTIVEPYTHON) pre-commit install #* Formatters .PHONY: codestyle -codestyle: +codestyle: setup uv run --python $(ACTIVEPYTHON) ruff format --config=pyproject.toml stac_model tests .PHONY: format @@ -36,7 +36,7 @@ format: codestyle #* Linting .PHONY: test -test: +test: setup uv run --python $(ACTIVEPYTHON) pytest -c pyproject.toml --cov-report=html --cov=stac_model tests/ .PHONY: check @@ -46,19 +46,19 @@ check: check-examples check-markdown check-lint check-mypy check-safety check-ci check-all: check .PHONY: mypy -mypy: +mypy: setup uv run --python $(ACTIVEPYTHON) mypy --config-file pyproject.toml ./ .PHONY: check-mypy check-mypy: mypy .PHONY: check-safety -check-safety: +check-safety: setup uv run --python $(ACTIVEPYTHON) safety check --full-report uv run --python $(ACTIVEPYTHON) bandit -ll --recursive stac_model tests .PHONY: lint -lint: +lint: setup uv run --python $(ACTIVEPYTHON) ruff check --fix --config=pyproject.toml ./ .PHONY: check-lint @@ -96,7 +96,7 @@ $(addprefix fix-, $(FORMATTERS)): fix-%: format-% lint-all: lint mypy check-safety check-markdown .PHONY: update-dev-deps -update-dev-deps: +update-dev-deps: setup uv export --only-dev --format requirements-txt -o requirements-only-dev.txt uv pip install --python $(ACTIVEPYTHON) -r requirements-only-dev.txt From f70b450f1e5664dac781f95244d6fe37ac64cac1 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Mon, 11 Nov 2024 16:51:05 -0500 Subject: [PATCH 61/83] better MLM Asset roles descriptions (fixes https://github.com/stac-extensions/mlm/issues/54) --- CHANGELOG.md | 2 ++ README.md | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dc9d3f..9a50648 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/stac-extensions/mlm/tree/main) ### Added +- Add better descriptions about required and recommended *MLM Asset Roles* and their implications + (fixes [#54](https://github.com/stac-extensions/mlm/issues/54)). - Add explicit check of `value_scaling` sub-fields `minimum`, `maximum`, `mean`, `stddev`, etc. for corresponding `type` values `min-max` and `z-score` that depend on it. - Allow different `value_scaling` operations per band/channel/dimension as needed by the model. diff --git a/README.md b/README.md index 265ac4d..5a5c6cb 100644 --- a/README.md +++ b/README.md @@ -595,6 +595,21 @@ names for nesting the Assets in order to improve their quick identification, alt left up to user preference. However, the MLM Asset definitions **MUST** include the appropriate [MLM Asset Roles](#mlm-asset-roles) to ensure their discovery. +A valid STAC MLM Item definition requires at least one Asset with the `mlm:model` role, as well as, +an accompanying `mlm:artifact_type` property that describes how to employ it. +An Asset described with this role is considered the "*main*" [Model Asset](#model-asset) being described by +the STAC Item definition. Typically, there will be only one asset containing the `mlm:model` role. +However, multiple `mlm:model` are permitted to provide alternate interfaces of the same model +(e.g.: using different frameworks or compilations), but those assets should have exactly the same model interfaces +(i.e.: identical `mlm:input`, `mlm:output`, etc.). In such case, the `mlm:artifact_type` property should be used to +distinguish them. + +Additional definitions such as the [Source Code Asset](#source-code-asset) and the [Container Asset](#container-asset) +are considered "*side-car*" Assets that help understand how to employ the model, such as through the reference training +script that produced the model or a preconfigured inference runtime environment. These additional Assets are optional, +but it is *STRONGLY RECOMMENDED* to provide them in order to help correct adoption and use of the described model +by users. + [stac-asset]: https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#asset-object ### MLM Asset Roles @@ -617,8 +632,8 @@ In order to provide more context, the following roles are also recommended were | mlm:training-runtime (*) | `runtime` | Describes an Asset that provides runtime reference to perform model training. | | mlm:checkpoint (*) | `weights`, `checkpoint` | Describes an Asset that provides a model checkpoint with embedded model configurations. | | mlm:weights | `weights`, `checkpoint` | Describes an Asset that provides a model weights (typically some Tensor representation). | -| mlm:model | `model` | Required role for [Model Asset](#model-asset). | -| mlm:source_code | `code` | Required role for [Model Asset](#source-code-asset). | +| mlm:model | `model` | **REQUIRED** Role for [Model Asset](#model-asset). | +| mlm:source_code | `code` | **RECOMMENDED** Role for [Source Code Asset](#source-code-asset). | @@ -642,7 +657,7 @@ In order to provide more context, the following roles are also recommended were Recommended Asset `roles` include `mlm:weights` or `mlm:checkpoint` for model weights that need to be loaded by a model definition and `mlm:compiled` for models that can be loaded directly without an intermediate model definition. -In each case, the `mlm:model` should be applied as well to indicate that this asset represents the model. +In each case, the `mlm:model` **MUST** be applied as well to indicate that this asset represents the model. It is also recommended to make use of the [file](https://github.com/stac-extensions/file?tab=readme-ov-file#asset--link-object-fields) From 021d0a2a126ecc4d7633da46b241af28198ffa8b Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Mon, 11 Nov 2024 14:52:22 -0800 Subject: [PATCH 62/83] add backticks, remove extra | None --- CONTRIBUTING.md | 4 ++-- stac_model/input.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 47b5169..07a47c9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ make setup > This installs uv as a [standalone application][uv-install].
> For more details, see also the [uv documentation][uv-docs].
-2. Initialize project dependencies with uv and install `pre-commit` hooks: +2. Initialize project dependencies with `uv` and install `pre-commit` hooks: ```bash make install-dev @@ -19,7 +19,7 @@ make pre-commit-install ``` This will install project dependencies into the currently active environment. If you would like to -use uv's default behavior of managing a project-scoped environment, use uv commands directly to +use uv's default behavior of managing a project-scoped environment, use `uv` commands directly to install dependencies. `uv sync` will install dependencies and dev dependencies in `.venv` and update the `uv.lock`. ## PR submission diff --git a/stac_model/input.py b/stac_model/input.py index 2989f2f..c0a2972 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -71,7 +71,6 @@ class ValueScalingProcessingExpression(ProcessingExpression): ValueScalingScale, ValueScalingProcessingExpression, ] - | None ] # noqa: E501 ResizeType: TypeAlias = ( From eb2e5c62ba7d33bbbf0f39fab737d56f453c6ab8 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 12 Nov 2024 10:20:35 -0800 Subject: [PATCH 63/83] remove noqa, make format --- stac_model/examples.py | 2 +- stac_model/input.py | 5 +++-- tests/test_schema.py | 11 +++++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/stac_model/examples.py b/stac_model/examples.py index 731830b..e5047cc 100644 --- a/stac_model/examples.py +++ b/stac_model/examples.py @@ -70,7 +70,7 @@ def eurosat_resnet() -> ItemMLModelExtension: type="z-score", mean=mean, stddev=stddev, - ) + ), ) for mean, stddev in zip(stats_mean, stats_stddev, strict=False) ] diff --git a/stac_model/input.py b/stac_model/input.py index c0a2972..e69d8c0 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -18,6 +18,7 @@ def validate_dimensions(self) -> Self: raise ValueError("Dimension order and shape must be of equal length for corresponding indices.") return self + class ValueScalingClipMin(MLMBaseModel): type: Literal["clip-min"] = "clip-min" minimum: Number @@ -71,7 +72,7 @@ class ValueScalingProcessingExpression(ProcessingExpression): ValueScalingScale, ValueScalingProcessingExpression, ] - ] # noqa: E501 +] ResizeType: TypeAlias = ( Literal[ @@ -87,7 +88,7 @@ class ValueScalingProcessingExpression(ProcessingExpression): "wrap-inverse-map", ] | None -) # noqa: E501 +) class ModelBand(MLMBaseModel): diff --git a/tests/test_schema.py b/tests/test_schema.py index 5e41393..53addef 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -122,10 +122,13 @@ def test_mlm_no_input_allowed_but_explicit_empty_array_required( ([{"type": "z-score", "mean": 1, "stddev": 2, "minimum": 1, "maximum": 2}], True), # extra must be ignored ([{"type": "processing"}], False), ([{"type": "processing", "format": "test", "expression": "test"}], True), - ([ - {"type": "processing", "format": "test", "expression": "test"}, - {"type": "min-max", "minimum": 1, "maximum": 2} - ], True), + ( + [ + {"type": "processing", "format": "test", "expression": "test"}, + {"type": "min-max", "minimum": 1, "maximum": 2}, + ], + True, + ), ], ) def test_mlm_input_scaling_combination( From 9752f5ef02fc9a86279b0cee4ded409098e0a5f4 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 12 Nov 2024 13:46:02 -0800 Subject: [PATCH 64/83] backticks, use Optional instead of | None --- CONTRIBUTING.md | 6 +++--- stac_model/input.py | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 07a47c9..ddb3127 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,14 +2,14 @@ ## Project setup -1. If you don't have uv installed run: +1. If you don't have `uv` installed run: ```bash make setup ``` -> This installs uv as a [standalone application][uv-install].
-> For more details, see also the [uv documentation][uv-docs].
+> This installs `uv` as a [standalone application][uv-install].
+> For more details, see also the [`uv` documentation][uv-docs].
2. Initialize project dependencies with `uv` and install `pre-commit` hooks: diff --git a/stac_model/input.py b/stac_model/input.py index e69d8c0..7a189d2 100644 --- a/stac_model/input.py +++ b/stac_model/input.py @@ -74,7 +74,7 @@ class ValueScalingProcessingExpression(ProcessingExpression): ] ] -ResizeType: TypeAlias = ( +ResizeType: TypeAlias = Optional[ Literal[ "crop", "pad", @@ -87,8 +87,7 @@ class ValueScalingProcessingExpression(ProcessingExpression): "wrap-fill-outliers", "wrap-inverse-map", ] - | None -) +] class ModelBand(MLMBaseModel): @@ -99,11 +98,11 @@ class ModelBand(MLMBaseModel): ) ) # similar to 'ProcessingExpression', but they can be omitted here - format: Annotated[str | None, OmitIfNone] = Field( + format: Annotated[Optional[str], OmitIfNone] = Field( default=None, description="", ) - expression: Annotated[Any | None, OmitIfNone] = Field( + expression: Annotated[Optional[Any], OmitIfNone] = Field( default=None, description="", ) From d564b2d9c3e257cf9880e7f75fcc178519ace7da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:14:12 +0000 Subject: [PATCH 65/83] :arrow_up: Bump actions/cache from 4.0.2 to 4.1.2 Bumps [actions/cache](https://github.com/actions/cache) from 4.0.2 to 4.1.2. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v4.0.2...v4.1.2) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/stac-model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stac-model.yml b/.github/workflows/stac-model.yml index 5d42720..42b52a6 100644 --- a/.github/workflows/stac-model.yml +++ b/.github/workflows/stac-model.yml @@ -20,7 +20,7 @@ jobs: run: make setup - name: Set up cache - uses: actions/cache@v4.0.2 + uses: actions/cache@v4.1.2 with: path: .venv key: venv-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('uv.lock') }} From fb1ad158cb93424d60109c7be13a5c98625c5591 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:14:14 +0000 Subject: [PATCH 66/83] :arrow_up: Bump actions/setup-python from 5.2.0 to 5.3.0 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.2.0 to 5.3.0. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v5.2.0...v5.3.0) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/publish.yaml | 2 +- .github/workflows/stac-model.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index ff89a22..65b78fe 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -22,7 +22,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v5.2.0 + uses: actions/setup-python@v5.3.0 with: python-version: "3.10" - name: Install uv diff --git a/.github/workflows/stac-model.yml b/.github/workflows/stac-model.yml index 5d42720..bf4198a 100644 --- a/.github/workflows/stac-model.yml +++ b/.github/workflows/stac-model.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5.2.0 + uses: actions/setup-python@v5.3.0 with: python-version: ${{ matrix.python-version }} From c6403f4fc422fdd5d77677a0c349aa5dc15e5bbe Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 13 Nov 2024 11:07:15 -0500 Subject: [PATCH 67/83] fix unused typing ignore error from mypy --- stac_model/schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stac_model/schema.py b/stac_model/schema.py index 3b0ee0d..e2d2b5a 100644 --- a/stac_model/schema.py +++ b/stac_model/schema.py @@ -167,7 +167,7 @@ class SummariesMLModelExtension(SummariesExtension): def _check_mlm_property(self, prop: str) -> FieldInfo: try: - return MLModelProperties.model_fields[prop] # type: ignore + return MLModelProperties.model_fields[prop] except KeyError as err: raise AttributeError(f"Name '{prop}' is not a valid MLM property.") from err From be0a95313134cb5a344b02208dc8ab0bf75df99b Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 13 Nov 2024 17:06:10 -0500 Subject: [PATCH 68/83] fix makefile to allow reuse of conda/virtual env --- Makefile | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 301aea7..72c9377 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,17 @@ #* Variables SHELL ?= /usr/bin/env bash -ACTIVEPYTHON = $(shell which python) +PYTHON_PATH = $(shell which python) +PYTHON_ROOT := $(dir $(PYTHON_PATH)) +# use the directory rather than the python binary to allow auto-discovery, which is more cross-platform compatible +UV_PYTHON_PATH ?= $(UV_PYTHON_ROOT) +# to actually reuse an existing virtual/conda environment, the 'UV_PROJECT_ENVIRONMENT' variable must be set to it +# use this command: +# UV_PROJECT_ENVIRONMENT=/path/to/env make [target] +# consider exporting this variable in '/path/to/env/etc/conda/activate.d/env.sh' to enable it by default when +# activating a conda environment, and reset it in '/path/to/env/etc/conda/deactivate.d/env.sh' +UV_PROJECT_ENVIRONMENT ?= .venv +# make sure every uv command employs the specified environment path +UV_COMMAND ?= UV_PROJECT_ENVIRONMENT="$(UV_PROJECT_ENVIRONMENT)" uv #* UV .PHONY: setup @@ -9,27 +20,27 @@ setup: .PHONY: publish publish: - uv publish --build + $(UV_COMMAND) publish --build #* Installation .PHONY: install install: setup - uv export --format requirements-txt -o requirements.txt --no-dev - uv pip install --python $(ACTIVEPYTHON) -r requirements.txt + $(UV_COMMAND) export --format requirements-txt -o requirements.txt --no-dev + $(UV_COMMAND) pip install --python "$(UV_PYTHON_ROOT)" -r requirements.txt .PHONY: install-dev install-dev: setup - uv export --format requirements-txt -o requirements-dev.txt - uv pip install --python $(ACTIVEPYTHON) -r requirements-dev.txt + $(UV_COMMAND) export --format requirements-txt -o requirements-dev.txt + $(UV_COMMAND) pip install --python "$(UV_PYTHON_ROOT)" -r requirements-dev.txt .PHONY: pre-commit-install pre-commit-install: setup - uv run --python $(ACTIVEPYTHON) pre-commit install + $(UV_COMMAND) run --python "$(UV_PYTHON_ROOT)" pre-commit install #* Formatters .PHONY: codestyle codestyle: setup - uv run --python $(ACTIVEPYTHON) ruff format --config=pyproject.toml stac_model tests + $(UV_COMMAND) run --python "$(UV_PYTHON_ROOT)" ruff format --config=pyproject.toml stac_model tests .PHONY: format format: codestyle @@ -37,7 +48,7 @@ format: codestyle #* Linting .PHONY: test test: setup - uv run --python $(ACTIVEPYTHON) pytest -c pyproject.toml --cov-report=html --cov=stac_model tests/ + $(UV_COMMAND) run --python "$(UV_PYTHON_ROOT)" pytest -c pyproject.toml --cov-report=html --cov=stac_model tests/ .PHONY: check check: check-examples check-markdown check-lint check-mypy check-safety check-citation @@ -47,23 +58,23 @@ check-all: check .PHONY: mypy mypy: setup - uv run --python $(ACTIVEPYTHON) mypy --config-file pyproject.toml ./ + $(UV_COMMAND) run --python "$(UV_PYTHON_ROOT)" mypy --config-file pyproject.toml ./ .PHONY: check-mypy check-mypy: mypy .PHONY: check-safety check-safety: setup - uv run --python $(ACTIVEPYTHON) safety check --full-report - uv run --python $(ACTIVEPYTHON) bandit -ll --recursive stac_model tests + $(UV_COMMAND) run --python "$(UV_PYTHON_ROOT)" safety check --full-report + $(UV_COMMAND) run --python "$(UV_PYTHON_ROOT)" bandit -ll --recursive stac_model tests .PHONY: lint lint: setup - uv run --python $(ACTIVEPYTHON) ruff check --fix --config=pyproject.toml ./ + $(UV_COMMAND) run --python "$(UV_PYTHON_ROOT)" ruff check --fix --config=pyproject.toml ./ .PHONY: check-lint check-lint: lint - uv run --python $(ACTIVEPYTHON) ruff check --config=pyproject.toml ./ + $(UV_COMMAND) run --python "$(UV_PYTHON_ROOT)" ruff check --config=pyproject.toml ./ .PHONY: format-lint format-lint: lint @@ -97,8 +108,8 @@ lint-all: lint mypy check-safety check-markdown .PHONY: update-dev-deps update-dev-deps: setup - uv export --only-dev --format requirements-txt -o requirements-only-dev.txt - uv pip install --python $(ACTIVEPYTHON) -r requirements-only-dev.txt + $(UV_COMMAND) export --only-dev --format requirements-txt -o requirements-only-dev.txt + $(UV_COMMAND) pip install --python "$(UV_PYTHON_ROOT)" -r requirements-only-dev.txt #* Cleaning .PHONY: pycache-remove From 4564af545157e8cfd6b61cdf34f0b58e7d2bd94e Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Wed, 13 Nov 2024 17:35:49 -0500 Subject: [PATCH 69/83] update command to be more readable if not overridden --- Makefile | 16 ++- uv.lock | 340 ++++++++++++++++++++++++++++--------------------------- 2 files changed, 182 insertions(+), 174 deletions(-) diff --git a/Makefile b/Makefile index 72c9377..49a24bd 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,23 @@ #* Variables SHELL ?= /usr/bin/env bash -PYTHON_PATH = $(shell which python) -PYTHON_ROOT := $(dir $(PYTHON_PATH)) + # use the directory rather than the python binary to allow auto-discovery, which is more cross-platform compatible -UV_PYTHON_PATH ?= $(UV_PYTHON_ROOT) +PYTHON_PATH := $(shell which python) +PYTHON_ROOT := $(shell dirname $(dir $(PYTHON_PATH))) +UV_PYTHON_ROOT ?= $(PYTHON_ROOT) + # to actually reuse an existing virtual/conda environment, the 'UV_PROJECT_ENVIRONMENT' variable must be set to it # use this command: # UV_PROJECT_ENVIRONMENT=/path/to/env make [target] # consider exporting this variable in '/path/to/env/etc/conda/activate.d/env.sh' to enable it by default when # activating a conda environment, and reset it in '/path/to/env/etc/conda/deactivate.d/env.sh' -UV_PROJECT_ENVIRONMENT ?= .venv +UV_PROJECT_ENVIRONMENT ?= # make sure every uv command employs the specified environment path -UV_COMMAND ?= UV_PROJECT_ENVIRONMENT="$(UV_PROJECT_ENVIRONMENT)" uv +ifeq (${UV_PROJECT_ENVIRONMENT},) + UV_COMMAND := uv +else + UV_COMMAND := UV_PROJECT_ENVIRONMENT="${UV_PROJECT_ENVIRONMENT}" uv +endif #* UV .PHONY: setup diff --git a/uv.lock b/uv.lock index 43b668a..09a9ba4 100644 --- a/uv.lock +++ b/uv.lock @@ -258,15 +258,15 @@ wheels = [ [[package]] name = "dparse" -version = "0.6.3" +version = "0.6.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/22/35/e224f4e70799bbb8e9f6c69a8dbe966d640bf43dea11fc5ef77df120f8ed/dparse-0.6.3.tar.gz", hash = "sha256:27bb8b4bcaefec3997697ba3f6e06b2447200ba273c0b085c3d012a04571b528", size = 20316 } +sdist = { url = "https://files.pythonhosted.org/packages/29/ee/96c65e17222b973f0d3d0aa9bad6a59104ca1b0eb5b659c25c2900fccd85/dparse-0.6.4.tar.gz", hash = "sha256:90b29c39e3edc36c6284c82c4132648eaf28a01863eb3c231c2512196132201a", size = 27912 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/d0/4ed375a914d3cdbddb19fb7a72431e511c4cb102c54137d8fc2e563f3567/dparse-0.6.3-py3-none-any.whl", hash = "sha256:0d8fe18714056ca632d98b24fbfc4e9791d4e47065285ab486182288813a5318", size = 12962 }, + { url = "https://files.pythonhosted.org/packages/56/26/035d1c308882514a1e6ddca27f9d3e570d67a0e293e7b4d910a70c8fe32b/dparse-0.6.4-py3-none-any.whl", hash = "sha256:fbab4d50d54d0e739fbb4dedfc3d92771003a5b9aa8545ca7a7045e3b174af57", size = 11925 }, ] [[package]] @@ -289,11 +289,11 @@ wheels = [ [[package]] name = "identify" -version = "2.6.1" +version = "2.6.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/29/bb/25024dbcc93516c492b75919e76f389bac754a3e4248682fba32b250c880/identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98", size = 99097 } +sdist = { url = "https://files.pythonhosted.org/packages/02/79/7a520fc5011e02ca3f3285b5f6820eaf80443eb73e3733f73c02fb42ba0b/identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd", size = 99113 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/0c/4ef72754c050979fdcc06c744715ae70ea37e734816bb6514f79df77a42f/identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0", size = 98972 }, + { url = "https://files.pythonhosted.org/packages/e0/86/c4395700f3c5475424fb5c41e20c16be28d10c904aee4d005ba3217fc8e7/identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3", size = 98982 }, ] [[package]] @@ -403,62 +403,64 @@ wheels = [ [[package]] name = "numpy" -version = "2.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4b/d1/8a730ea07f4a37d94f9172f4ce1d81064b7a64766b460378be278952de75/numpy-2.1.2.tar.gz", hash = "sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c", size = 18878063 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/a2/40a76d357f168e9f9f06d6cc2c8e22dd5fb2bfbe63fe2c433057258c145a/numpy-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee", size = 21150947 }, - { url = "https://files.pythonhosted.org/packages/b5/d0/ba271ea9108d7278d3889a7eb38d77370a88713fb94339964e71ac184d4a/numpy-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884", size = 13758184 }, - { url = "https://files.pythonhosted.org/packages/7c/b9/5c6507439cd756201010f7937bf90712c2469052ae094584af14557dd64f/numpy-2.1.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648", size = 5354091 }, - { url = "https://files.pythonhosted.org/packages/60/21/7938cf724d9e84e45fb886f3fc794ab431d71facfebc261e3e9f19f3233a/numpy-2.1.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d", size = 6887169 }, - { url = "https://files.pythonhosted.org/packages/09/8d/42a124657f5d31902fca73921b25a0d022cead2b32ce7e6975762cd2995a/numpy-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86", size = 13888165 }, - { url = "https://files.pythonhosted.org/packages/fb/25/ba023652a39a2c127200e85aed975fc6119b421e2c348e5d0171e2046edb/numpy-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7", size = 16326954 }, - { url = "https://files.pythonhosted.org/packages/34/58/23e6b07fad492b7c47cf09cd8bad6983658f0f925b6c535fd008e3e86274/numpy-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03", size = 16702916 }, - { url = "https://files.pythonhosted.org/packages/91/24/37b5cf2dc7d385ac97f7b7fe50cba312abb70a2a5eac74c23af028811f73/numpy-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466", size = 14384372 }, - { url = "https://files.pythonhosted.org/packages/ea/ec/0f6d471058a01d1a05a50d2793898de1549280fa715a8537987ee866b5d9/numpy-2.1.2-cp310-cp310-win32.whl", hash = "sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb", size = 6535361 }, - { url = "https://files.pythonhosted.org/packages/c2/3d/293cc5927f916a7bc6bf74da8f6defab63d1b13f0959d7e21878ad8a20d8/numpy-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2", size = 12865501 }, - { url = "https://files.pythonhosted.org/packages/aa/9c/9a6ec3ae89cd0648d419781284308f2956d2a61d932b5ac9682c956a171b/numpy-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe", size = 21154845 }, - { url = "https://files.pythonhosted.org/packages/02/69/9f05c4ecc75fabf297b17743996371b4c3dfc4d92e15c5c38d8bb3db8d74/numpy-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1", size = 13789409 }, - { url = "https://files.pythonhosted.org/packages/34/4e/f95c99217bf77bbfaaf660d693c10bd0dc03b6032d19316d316088c9e479/numpy-2.1.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f", size = 5352097 }, - { url = "https://files.pythonhosted.org/packages/06/13/f5d87a497c16658e9af8920449b0b5692b469586b8231340c672962071c5/numpy-2.1.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4", size = 6891195 }, - { url = "https://files.pythonhosted.org/packages/6c/89/691ac07429ac061b344d5e37fa8e94be51a6017734aea15f2d9d7c6d119a/numpy-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a", size = 13895153 }, - { url = "https://files.pythonhosted.org/packages/23/69/538317f0d925095537745f12aced33be1570bbdc4acde49b33748669af96/numpy-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1", size = 16338306 }, - { url = "https://files.pythonhosted.org/packages/af/03/863fe7062c2106d3c151f7df9353f2ae2237c1dd6900f127a3eb1f24cb1b/numpy-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2", size = 16710893 }, - { url = "https://files.pythonhosted.org/packages/70/77/0ad9efe25482009873f9660d29a40a8c41a6f0e8b541195e3c95c70684c5/numpy-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146", size = 14398048 }, - { url = "https://files.pythonhosted.org/packages/3e/0f/e785fe75544db9f2b0bb1c181e13ceff349ce49753d807fd9672916aa06d/numpy-2.1.2-cp311-cp311-win32.whl", hash = "sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c", size = 6533458 }, - { url = "https://files.pythonhosted.org/packages/d4/96/450054662295125af861d48d2c4bc081dadcf1974a879b2104613157aa62/numpy-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9", size = 12870896 }, - { url = "https://files.pythonhosted.org/packages/a0/7d/554a6838f37f3ada5a55f25173c619d556ae98092a6e01afb6e710501d70/numpy-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b", size = 20848077 }, - { url = "https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db", size = 13493242 }, - { url = "https://files.pythonhosted.org/packages/56/44/f899b0581766c230da42f751b7b8896d096640b19b312164c267e48d36cb/numpy-2.1.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1", size = 5089219 }, - { url = "https://files.pythonhosted.org/packages/79/8f/b987070d45161a7a4504afc67ed38544ed2c0ed5576263599a0402204a9c/numpy-2.1.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426", size = 6620167 }, - { url = "https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0", size = 13604905 }, - { url = "https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df", size = 16041825 }, - { url = "https://files.pythonhosted.org/packages/e9/50/6828e66a78aa03147c111f84d55f33ce2dde547cb578d6744a3b06a0124b/numpy-2.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366", size = 16409541 }, - { url = "https://files.pythonhosted.org/packages/bf/72/66af7916d9c3c6dbfbc8acdd4930c65461e1953374a2bc43d00f948f004a/numpy-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142", size = 14081134 }, - { url = "https://files.pythonhosted.org/packages/dc/5a/59a67d84f33fe00ae74f0b5b69dd4f93a586a4aba7f7e19b54b2133db038/numpy-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550", size = 6237784 }, - { url = "https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e", size = 12568254 }, - { url = "https://files.pythonhosted.org/packages/16/72/716fa1dbe92395a9a623d5049203ff8ddb0cfce65b9df9117c3696ccc011/numpy-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d", size = 20834690 }, - { url = "https://files.pythonhosted.org/packages/1e/fb/3e85a39511586053b5c6a59a643879e376fae22230ebfef9cfabb0e032e2/numpy-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf", size = 13507474 }, - { url = "https://files.pythonhosted.org/packages/35/eb/5677556d9ba13436dab51e129f98d4829d95cd1b6bd0e199c14485a4bdb9/numpy-2.1.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e", size = 5074742 }, - { url = "https://files.pythonhosted.org/packages/3e/c5/6c5ef5ba41b65a7e51bed50dbf3e1483eb578055633dd013e811a28e96a1/numpy-2.1.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3", size = 6606787 }, - { url = "https://files.pythonhosted.org/packages/08/ac/f2f29dd4fd325b379c7dc932a0ebab22f0e031dbe80b2f6019b291a3a544/numpy-2.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8", size = 13601333 }, - { url = "https://files.pythonhosted.org/packages/44/26/63f5f4e5089654dfb858f4892215ed968cd1a68e6f4a83f9961f84f855cb/numpy-2.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a", size = 16038090 }, - { url = "https://files.pythonhosted.org/packages/1d/21/015e0594de9c3a8d5edd24943d2bd23f102ec71aec026083f822f86497e2/numpy-2.1.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98", size = 16410865 }, - { url = "https://files.pythonhosted.org/packages/df/01/c1bcf9e6025d79077fbf3f3ee503b50aa7bfabfcd8f4b54f5829f4c00f3f/numpy-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe", size = 14078077 }, - { url = "https://files.pythonhosted.org/packages/ba/06/db9d127d63bd11591770ba9f3d960f8041e0f895184b9351d4b1b5b56983/numpy-2.1.2-cp313-cp313-win32.whl", hash = "sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a", size = 6234904 }, - { url = "https://files.pythonhosted.org/packages/a9/96/9f61f8f95b6e0ea0aa08633b704c75d1882bdcb331bdf8bfd63263b25b00/numpy-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445", size = 12561910 }, - { url = "https://files.pythonhosted.org/packages/36/b8/033f627821784a48e8f75c218033471eebbaacdd933f8979c79637a1b44b/numpy-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5", size = 20857719 }, - { url = "https://files.pythonhosted.org/packages/96/46/af5726fde5b74ed83f2f17a73386d399319b7ed4d51279fb23b721d0816d/numpy-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0", size = 13518826 }, - { url = "https://files.pythonhosted.org/packages/db/6e/8ce677edf36da1c4dae80afe5529f47690697eb55b4864673af260ccea7b/numpy-2.1.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17", size = 5115036 }, - { url = "https://files.pythonhosted.org/packages/6a/ba/3cce44fb1b8438042c11847048812a776f75ee0e7070179c22e4cfbf420c/numpy-2.1.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6", size = 6628641 }, - { url = "https://files.pythonhosted.org/packages/59/c8/e722998720ccbd35ffbcf1d1b8ed0aa2304af88d3f1c38e06ebf983599b3/numpy-2.1.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8", size = 13574803 }, - { url = "https://files.pythonhosted.org/packages/7c/8e/fc1fdd83a55476765329ac2913321c4aed5b082a7915095628c4ca30ea72/numpy-2.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35", size = 16021174 }, - { url = "https://files.pythonhosted.org/packages/2a/b6/a790742aa88067adb4bd6c89a946778c1417d4deaeafce3ca928f26d4c52/numpy-2.1.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62", size = 16400117 }, - { url = "https://files.pythonhosted.org/packages/48/6f/129e3c17e3befe7fefdeaa6890f4c4df3f3cf0831aa053802c3862da67aa/numpy-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a", size = 14066202 }, - { url = "https://files.pythonhosted.org/packages/73/c9/3e1d6bbe6d3d2e2c5a9483b24b2f29a229b323f62054278a3bba7fee11e5/numpy-2.1.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952", size = 20981945 }, - { url = "https://files.pythonhosted.org/packages/6e/62/989c4988bde1a8e08117fccc3bab73d2886421fb98cde597168714f3c54e/numpy-2.1.2-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5", size = 6750558 }, - { url = "https://files.pythonhosted.org/packages/53/b1/00ef9f30975f1312a53257f68e57b4513d14d537e03d507e2773a684b1e8/numpy-2.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7", size = 16141552 }, - { url = "https://files.pythonhosted.org/packages/c0/ec/0c04903b48dfea6be1d7b47ba70f98709fb7198fd970784a1400c391d522/numpy-2.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e", size = 12789924 }, +version = "2.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/ca/1166b75c21abd1da445b97bf1fa2f14f423c6cfb4fc7c4ef31dccf9f6a94/numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761", size = 20166090 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/80/d572a4737626372915bca41c3afbfec9d173561a39a0a61bacbbfd1dafd4/numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff", size = 21152472 }, + { url = "https://files.pythonhosted.org/packages/6f/bb/7bfba10c791ae3bb6716da77ad85a82d5fac07fc96fb0023ef0571df9d20/numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5", size = 13747967 }, + { url = "https://files.pythonhosted.org/packages/da/d6/2df7bde35f0478455f0be5934877b3e5a505f587b00230f54a519a6b55a5/numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1", size = 5354921 }, + { url = "https://files.pythonhosted.org/packages/d1/bb/75b945874f931494891eac6ca06a1764d0e8208791f3addadb2963b83527/numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd", size = 6888603 }, + { url = "https://files.pythonhosted.org/packages/68/a7/fde73636f6498dbfa6d82fc336164635fe592f1ad0d13285fcb6267fdc1c/numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3", size = 13889862 }, + { url = "https://files.pythonhosted.org/packages/05/db/5d9c91b2e1e2e72be1369278f696356d44975befcae830daf2e667dcb54f/numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098", size = 16328151 }, + { url = "https://files.pythonhosted.org/packages/3e/6a/7eb732109b53ae64a29e25d7e68eb9d6611037f6354875497008a49e74d3/numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c", size = 16704107 }, + { url = "https://files.pythonhosted.org/packages/88/cc/278113b66a1141053cbda6f80e4200c6da06b3079c2d27bda1fde41f2c1f/numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4", size = 14385789 }, + { url = "https://files.pythonhosted.org/packages/f5/69/eb20f5e1bfa07449bc67574d2f0f7c1e6b335fb41672e43861a7727d85f2/numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23", size = 6536706 }, + { url = "https://files.pythonhosted.org/packages/8e/8b/1c131ab5a94c1086c289c6e1da1d843de9dbd95fe5f5ee6e61904c9518e2/numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0", size = 12864165 }, + { url = "https://files.pythonhosted.org/packages/ad/81/c8167192eba5247593cd9d305ac236847c2912ff39e11402e72ae28a4985/numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d", size = 21156252 }, + { url = "https://files.pythonhosted.org/packages/da/74/5a60003fc3d8a718d830b08b654d0eea2d2db0806bab8f3c2aca7e18e010/numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41", size = 13784119 }, + { url = "https://files.pythonhosted.org/packages/47/7c/864cb966b96fce5e63fcf25e1e4d957fe5725a635e5f11fe03f39dd9d6b5/numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9", size = 5352978 }, + { url = "https://files.pythonhosted.org/packages/09/ac/61d07930a4993dd9691a6432de16d93bbe6aa4b1c12a5e573d468eefc1ca/numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09", size = 6892570 }, + { url = "https://files.pythonhosted.org/packages/27/2f/21b94664f23af2bb52030653697c685022119e0dc93d6097c3cb45bce5f9/numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a", size = 13896715 }, + { url = "https://files.pythonhosted.org/packages/7a/f0/80811e836484262b236c684a75dfc4ba0424bc670e765afaa911468d9f39/numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b", size = 16339644 }, + { url = "https://files.pythonhosted.org/packages/fa/81/ce213159a1ed8eb7d88a2a6ef4fbdb9e4ffd0c76b866c350eb4e3c37e640/numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee", size = 16712217 }, + { url = "https://files.pythonhosted.org/packages/7d/84/4de0b87d5a72f45556b2a8ee9fc8801e8518ec867fc68260c1f5dcb3903f/numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0", size = 14399053 }, + { url = "https://files.pythonhosted.org/packages/7e/1c/e5fabb9ad849f9d798b44458fd12a318d27592d4bc1448e269dec070ff04/numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9", size = 6534741 }, + { url = "https://files.pythonhosted.org/packages/1e/48/a9a4b538e28f854bfb62e1dea3c8fea12e90216a276c7777ae5345ff29a7/numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2", size = 12869487 }, + { url = "https://files.pythonhosted.org/packages/8a/f0/385eb9970309643cbca4fc6eebc8bb16e560de129c91258dfaa18498da8b/numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e", size = 20849658 }, + { url = "https://files.pythonhosted.org/packages/54/4a/765b4607f0fecbb239638d610d04ec0a0ded9b4951c56dc68cef79026abf/numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958", size = 13492258 }, + { url = "https://files.pythonhosted.org/packages/bd/a7/2332679479c70b68dccbf4a8eb9c9b5ee383164b161bee9284ac141fbd33/numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8", size = 5090249 }, + { url = "https://files.pythonhosted.org/packages/c1/67/4aa00316b3b981a822c7a239d3a8135be2a6945d1fd11d0efb25d361711a/numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564", size = 6621704 }, + { url = "https://files.pythonhosted.org/packages/5e/da/1a429ae58b3b6c364eeec93bf044c532f2ff7b48a52e41050896cf15d5b1/numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512", size = 13606089 }, + { url = "https://files.pythonhosted.org/packages/9e/3e/3757f304c704f2f0294a6b8340fcf2be244038be07da4cccf390fa678a9f/numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b", size = 16043185 }, + { url = "https://files.pythonhosted.org/packages/43/97/75329c28fea3113d00c8d2daf9bc5828d58d78ed661d8e05e234f86f0f6d/numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc", size = 16410751 }, + { url = "https://files.pythonhosted.org/packages/ad/7a/442965e98b34e0ae9da319f075b387bcb9a1e0658276cc63adb8c9686f7b/numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0", size = 14082705 }, + { url = "https://files.pythonhosted.org/packages/ac/b6/26108cf2cfa5c7e03fb969b595c93131eab4a399762b51ce9ebec2332e80/numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9", size = 6239077 }, + { url = "https://files.pythonhosted.org/packages/a6/84/fa11dad3404b7634aaab50733581ce11e5350383311ea7a7010f464c0170/numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a", size = 12566858 }, + { url = "https://files.pythonhosted.org/packages/4d/0b/620591441457e25f3404c8057eb924d04f161244cb8a3680d529419aa86e/numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f", size = 20836263 }, + { url = "https://files.pythonhosted.org/packages/45/e1/210b2d8b31ce9119145433e6ea78046e30771de3fe353f313b2778142f34/numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598", size = 13507771 }, + { url = "https://files.pythonhosted.org/packages/55/44/aa9ee3caee02fa5a45f2c3b95cafe59c44e4b278fbbf895a93e88b308555/numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57", size = 5075805 }, + { url = "https://files.pythonhosted.org/packages/78/d6/61de6e7e31915ba4d87bbe1ae859e83e6582ea14c6add07c8f7eefd8488f/numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe", size = 6608380 }, + { url = "https://files.pythonhosted.org/packages/3e/46/48bdf9b7241e317e6cf94276fe11ba673c06d1fdf115d8b4ebf616affd1a/numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43", size = 13602451 }, + { url = "https://files.pythonhosted.org/packages/70/50/73f9a5aa0810cdccda9c1d20be3cbe4a4d6ea6bfd6931464a44c95eef731/numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56", size = 16039822 }, + { url = "https://files.pythonhosted.org/packages/ad/cd/098bc1d5a5bc5307cfc65ee9369d0ca658ed88fbd7307b0d49fab6ca5fa5/numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a", size = 16411822 }, + { url = "https://files.pythonhosted.org/packages/83/a2/7d4467a2a6d984549053b37945620209e702cf96a8bc658bc04bba13c9e2/numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef", size = 14079598 }, + { url = "https://files.pythonhosted.org/packages/e9/6a/d64514dcecb2ee70bfdfad10c42b76cab657e7ee31944ff7a600f141d9e9/numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f", size = 6236021 }, + { url = "https://files.pythonhosted.org/packages/bb/f9/12297ed8d8301a401e7d8eb6b418d32547f1d700ed3c038d325a605421a4/numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed", size = 12560405 }, + { url = "https://files.pythonhosted.org/packages/a7/45/7f9244cd792e163b334e3a7f02dff1239d2890b6f37ebf9e82cbe17debc0/numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f", size = 20859062 }, + { url = "https://files.pythonhosted.org/packages/b1/b4/a084218e7e92b506d634105b13e27a3a6645312b93e1c699cc9025adb0e1/numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4", size = 13515839 }, + { url = "https://files.pythonhosted.org/packages/27/45/58ed3f88028dcf80e6ea580311dc3edefdd94248f5770deb980500ef85dd/numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e", size = 5116031 }, + { url = "https://files.pythonhosted.org/packages/37/a8/eb689432eb977d83229094b58b0f53249d2209742f7de529c49d61a124a0/numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0", size = 6629977 }, + { url = "https://files.pythonhosted.org/packages/42/a3/5355ad51ac73c23334c7caaed01adadfda49544f646fcbfbb4331deb267b/numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408", size = 13575951 }, + { url = "https://files.pythonhosted.org/packages/c4/70/ea9646d203104e647988cb7d7279f135257a6b7e3354ea6c56f8bafdb095/numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6", size = 16022655 }, + { url = "https://files.pythonhosted.org/packages/14/ce/7fc0612903e91ff9d0b3f2eda4e18ef9904814afcae5b0f08edb7f637883/numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f", size = 16399902 }, + { url = "https://files.pythonhosted.org/packages/ef/62/1d3204313357591c913c32132a28f09a26357e33ea3c4e2fe81269e0dca1/numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17", size = 14067180 }, + { url = "https://files.pythonhosted.org/packages/24/d7/78a40ed1d80e23a774cb8a34ae8a9493ba1b4271dde96e56ccdbab1620ef/numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48", size = 6291907 }, + { url = "https://files.pythonhosted.org/packages/86/09/a5ab407bd7f5f5599e6a9261f964ace03a73e7c6928de906981c31c38082/numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4", size = 12644098 }, + { url = "https://files.pythonhosted.org/packages/00/e7/8d8bb791b62586cc432ecbb70632b4f23b7b7c88df41878de7528264f6d7/numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f", size = 20983893 }, + { url = "https://files.pythonhosted.org/packages/5e/f3/cb8118a044b5007586245a650360c9f5915b2f4232dd7658bb7a63dd1d02/numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4", size = 6752501 }, + { url = "https://files.pythonhosted.org/packages/53/f5/365b46439b518d2ec6ebb880cc0edf90f225145dfd4db7958334f7164530/numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d", size = 16142601 }, + { url = "https://files.pythonhosted.org/packages/03/c2/d1fee6ba999aa7cd41ca6856937f2baaf604c3eec1565eae63451ec31e5e/numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb", size = 12771397 }, ] [[package]] @@ -629,15 +631,15 @@ wheels = [ [[package]] name = "pydantic-settings" -version = "2.6.0" +version = "2.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "python-dotenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6c/66/5f1a9da10675bfb3b9da52f5b689c77e0a5612263fcce510cfac3e99a168/pydantic_settings-2.6.0.tar.gz", hash = "sha256:44a1804abffac9e6a30372bb45f6cafab945ef5af25e66b1c634c01dd39e0188", size = 75232 } +sdist = { url = "https://files.pythonhosted.org/packages/b5/d4/9dfbe238f45ad8b168f5c96ee49a3df0598ce18a0795a983b419949ce65b/pydantic_settings-2.6.1.tar.gz", hash = "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0", size = 75646 } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/19/26bb6bdb9fdad5f0dfce538780814084fb667b4bc37fcb28459c14b8d3b5/pydantic_settings-2.6.0-py3-none-any.whl", hash = "sha256:4a819166f119b74d7f8c765196b165f95cc7487ce58ea27dec8a5a26be0970e0", size = 28578 }, + { url = "https://files.pythonhosted.org/packages/5e/f9/ff95fd7d760af42f647ea87f9b8a383d891cdb5e5dbd4613edaeb094252a/pydantic_settings-2.6.1-py3-none-any.whl", hash = "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87", size = 28595 }, ] [[package]] @@ -914,102 +916,102 @@ wheels = [ [[package]] name = "rich" -version = "13.9.3" +version = "13.9.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d9/e9/cf9ef5245d835065e6673781dbd4b8911d352fb770d56cf0879cf11b7ee1/rich-13.9.3.tar.gz", hash = "sha256:bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e", size = 222889 } +sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl", hash = "sha256:9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283", size = 242157 }, + { url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 }, ] [[package]] name = "rich-click" -version = "1.8.3" +version = "1.8.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "rich" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/a9/a1f1af87e83832d794342fbc09c96cc7cd6798b8dfb8adfbe6ccbef8d70c/rich_click-1.8.3.tar.gz", hash = "sha256:6d75bdfa7aa9ed2c467789a0688bc6da23fbe3a143e19aa6ad3f8bac113d2ab3", size = 38209 } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f4/e48dc2850662526a26fb0961aacb0162c6feab934312b109b748ae4efee2/rich_click-1.8.4.tar.gz", hash = "sha256:0f49471f04439269d0e66a6f43120f52d11d594869a2a0be600cfb12eb0616b9", size = 38247 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ea/5a0c5a8e6532e971983d1b0fc99268eb66a10f489da35d9022ce01044191/rich_click-1.8.3-py3-none-any.whl", hash = "sha256:636d9c040d31c5eee242201b5bf4f2d358bfae4db14bb22ec1cafa717cfd02cd", size = 35032 }, + { url = "https://files.pythonhosted.org/packages/84/f3/72f93d8494ee641bde76bfe1208cf4abc44c6f9448673762f6077bc162d6/rich_click-1.8.4-py3-none-any.whl", hash = "sha256:2d2841b3cebe610d5682baa1194beaf78ab00c4fa31931533261b5eba2ee80b7", size = 35071 }, ] [[package]] name = "rpds-py" -version = "0.20.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/25/cb/8e919951f55d109d658f81c9b49d0cc3b48637c50792c5d2e77032b8c5da/rpds_py-0.20.1.tar.gz", hash = "sha256:e1791c4aabd117653530dccd24108fa03cc6baf21f58b950d0a73c3b3b29a350", size = 25931 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/0e/d7e7e9280988a7bc56fd326042baca27f4f55fad27dc8aa64e5e0e894e5d/rpds_py-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a649dfd735fff086e8a9d0503a9f0c7d01b7912a333c7ae77e1515c08c146dad", size = 327335 }, - { url = "https://files.pythonhosted.org/packages/4c/72/027185f213d53ae66765c575229829b202fbacf3d55fe2bd9ff4e29bb157/rpds_py-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f16bc1334853e91ddaaa1217045dd7be166170beec337576818461268a3de67f", size = 318250 }, - { url = "https://files.pythonhosted.org/packages/2b/e7/b4eb3e6ff541c83d3b46f45f855547e412ab60c45bef64520fafb00b9b42/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14511a539afee6f9ab492b543060c7491c99924314977a55c98bfa2ee29ce78c", size = 361206 }, - { url = "https://files.pythonhosted.org/packages/e7/80/cb9a4b4cad31bcaa37f38dae7a8be861f767eb2ca4f07a146b5ffcfbee09/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ccb8ac2d3c71cda472b75af42818981bdacf48d2e21c36331b50b4f16930163", size = 369921 }, - { url = "https://files.pythonhosted.org/packages/95/1b/463b11e7039e18f9e778568dbf7338c29bbc1f8996381115201c668eb8c8/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c142b88039b92e7e0cb2552e8967077e3179b22359e945574f5e2764c3953dcf", size = 403673 }, - { url = "https://files.pythonhosted.org/packages/86/98/1ef4028e9d5b76470bf7f8f2459be07ac5c9621270a2a5e093f8d8a8cc2c/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f19169781dddae7478a32301b499b2858bc52fc45a112955e798ee307e294977", size = 430267 }, - { url = "https://files.pythonhosted.org/packages/25/8e/41d7e3e6d3a4a6c94375020477705a3fbb6515717901ab8f94821cf0a0d9/rpds_py-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13c56de6518e14b9bf6edde23c4c39dac5b48dcf04160ea7bce8fca8397cdf86", size = 360569 }, - { url = "https://files.pythonhosted.org/packages/4f/6a/8839340464d4e1bbfaf0482e9d9165a2309c2c17427e4dcb72ce3e5cc5d6/rpds_py-0.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:925d176a549f4832c6f69fa6026071294ab5910e82a0fe6c6228fce17b0706bd", size = 382584 }, - { url = "https://files.pythonhosted.org/packages/64/96/7a7f938d3796a6a3ec08ed0e8a5ecd436fbd516a3684ab1fa22d46d6f6cc/rpds_py-0.20.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:78f0b6877bfce7a3d1ff150391354a410c55d3cdce386f862926a4958ad5ab7e", size = 546560 }, - { url = "https://files.pythonhosted.org/packages/15/c7/19fb4f1247a3c90a99eca62909bf76ee988f9b663e47878a673d9854ec5c/rpds_py-0.20.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3dd645e2b0dcb0fd05bf58e2e54c13875847687d0b71941ad2e757e5d89d4356", size = 549359 }, - { url = "https://files.pythonhosted.org/packages/d2/4c/445eb597a39a883368ea2f341dd6e48a9d9681b12ebf32f38a827b30529b/rpds_py-0.20.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4f676e21db2f8c72ff0936f895271e7a700aa1f8d31b40e4e43442ba94973899", size = 527567 }, - { url = "https://files.pythonhosted.org/packages/4f/71/4c44643bffbcb37311fc7fe221bcf139c8d660bc78f746dd3a05741372c8/rpds_py-0.20.1-cp310-none-win32.whl", hash = "sha256:648386ddd1e19b4a6abab69139b002bc49ebf065b596119f8f37c38e9ecee8ff", size = 200412 }, - { url = "https://files.pythonhosted.org/packages/f4/33/9d0529d74099e090ec9ab15eb0a049c56cca599eaaca71bfedbdbca656a9/rpds_py-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:d9ecb51120de61e4604650666d1f2b68444d46ae18fd492245a08f53ad2b7711", size = 218563 }, - { url = "https://files.pythonhosted.org/packages/a0/2e/a6ded84019a05b8f23e0fe6a632f62ae438a8c5e5932d3dfc90c73418414/rpds_py-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:762703bdd2b30983c1d9e62b4c88664df4a8a4d5ec0e9253b0231171f18f6d75", size = 327194 }, - { url = "https://files.pythonhosted.org/packages/68/11/d3f84c69de2b2086be3d6bd5e9d172825c096b13842ab7e5f8f39f06035b/rpds_py-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0b581f47257a9fce535c4567782a8976002d6b8afa2c39ff616edf87cbeff712", size = 318126 }, - { url = "https://files.pythonhosted.org/packages/18/c0/13f1bce9c901511e5e4c0b77a99dbb946bb9a177ca88c6b480e9cb53e304/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:842c19a6ce894493563c3bd00d81d5100e8e57d70209e84d5491940fdb8b9e3a", size = 361119 }, - { url = "https://files.pythonhosted.org/packages/06/31/3bd721575671f22a37476c2d7b9e34bfa5185bdcee09f7fedde3b29f3adb/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42cbde7789f5c0bcd6816cb29808e36c01b960fb5d29f11e052215aa85497c93", size = 369532 }, - { url = "https://files.pythonhosted.org/packages/20/22/3eeb0385f33251b4fd0f728e6a3801dc8acc05e714eb7867cefe635bf4ab/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c8e9340ce5a52f95fa7d3b552b35c7e8f3874d74a03a8a69279fd5fca5dc751", size = 403703 }, - { url = "https://files.pythonhosted.org/packages/10/e1/8dde6174e7ac5b9acd3269afca2e17719bc7e5088c68f44874d2ad9e4560/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ba6f89cac95c0900d932c9efb7f0fb6ca47f6687feec41abcb1bd5e2bd45535", size = 429868 }, - { url = "https://files.pythonhosted.org/packages/19/51/a3cc1a5238acfc2582033e8934d034301f9d4931b9bf7c7ccfabc4ca0880/rpds_py-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a916087371afd9648e1962e67403c53f9c49ca47b9680adbeef79da3a7811b0", size = 360539 }, - { url = "https://files.pythonhosted.org/packages/cd/8c/3c87471a44bd4114e2b0aec90f298f6caaac4e8db6af904d5dd2279f5c61/rpds_py-0.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:200a23239781f46149e6a415f1e870c5ef1e712939fe8fa63035cd053ac2638e", size = 382467 }, - { url = "https://files.pythonhosted.org/packages/d0/9b/95073fe3e0f130e6d561e106818b6568ef1f2df3352e7f162ab912da837c/rpds_py-0.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:58b1d5dd591973d426cbb2da5e27ba0339209832b2f3315928c9790e13f159e8", size = 546669 }, - { url = "https://files.pythonhosted.org/packages/de/4c/7ab3669e02bb06fedebcfd64d361b7168ba39dfdf385e4109440f2e7927b/rpds_py-0.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6b73c67850ca7cae0f6c56f71e356d7e9fa25958d3e18a64927c2d930859b8e4", size = 549304 }, - { url = "https://files.pythonhosted.org/packages/f1/e8/ad5da336cd42adbdafe0ecd40dcecdae01fd3d703c621c7637615a008d3a/rpds_py-0.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d8761c3c891cc51e90bc9926d6d2f59b27beaf86c74622c8979380a29cc23ac3", size = 527637 }, - { url = "https://files.pythonhosted.org/packages/02/f1/1b47b9e5b941c2659c9b7e4ef41b6f07385a6500c638fa10c066e4616ecb/rpds_py-0.20.1-cp311-none-win32.whl", hash = "sha256:cd945871335a639275eee904caef90041568ce3b42f402c6959b460d25ae8732", size = 200488 }, - { url = "https://files.pythonhosted.org/packages/85/f6/c751c1adfa31610055acfa1cc667cf2c2d7011a73070679c448cf5856905/rpds_py-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:7e21b7031e17c6b0e445f42ccc77f79a97e2687023c5746bfb7a9e45e0921b84", size = 218475 }, - { url = "https://files.pythonhosted.org/packages/e7/10/4e8dcc08b58a548098dbcee67a4888751a25be7a6dde0a83d4300df48bfa/rpds_py-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:36785be22066966a27348444b40389f8444671630063edfb1a2eb04318721e17", size = 329749 }, - { url = "https://files.pythonhosted.org/packages/d2/e4/61144f3790e12fd89e6153d77f7915ad26779735fef8ee9c099cba6dfb4a/rpds_py-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:142c0a5124d9bd0e2976089484af5c74f47bd3298f2ed651ef54ea728d2ea42c", size = 321032 }, - { url = "https://files.pythonhosted.org/packages/fa/e0/99205aabbf3be29ef6c58ef9b08feed51ba6532fdd47461245cb58dd9897/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbddc10776ca7ebf2a299c41a4dde8ea0d8e3547bfd731cb87af2e8f5bf8962d", size = 363931 }, - { url = "https://files.pythonhosted.org/packages/ac/bd/bce2dddb518b13a7e77eed4be234c9af0c9c6d403d01c5e6ae8eb447ab62/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15a842bb369e00295392e7ce192de9dcbf136954614124a667f9f9f17d6a216f", size = 373343 }, - { url = "https://files.pythonhosted.org/packages/43/15/112b7c553066cb91264691ba7fb119579c440a0ae889da222fa6fc0d411a/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be5ef2f1fc586a7372bfc355986226484e06d1dc4f9402539872c8bb99e34b01", size = 406304 }, - { url = "https://files.pythonhosted.org/packages/af/8d/2da52aef8ae5494a382b0c0025ba5b68f2952db0f2a4c7534580e8ca83cc/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbcf360c9e3399b056a238523146ea77eeb2a596ce263b8814c900263e46031a", size = 423022 }, - { url = "https://files.pythonhosted.org/packages/c8/1b/f23015cb293927c93bdb4b94a48bfe77ad9d57359c75db51f0ff0cf482ff/rpds_py-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd27a66740ffd621d20b9a2f2b5ee4129a56e27bfb9458a3bcc2e45794c96cb", size = 364937 }, - { url = "https://files.pythonhosted.org/packages/7b/8b/6da8636b2ea2e2f709e56656e663b6a71ecd9a9f9d9dc21488aade122026/rpds_py-0.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0b937b2a1988f184a3e9e577adaa8aede21ec0b38320d6009e02bd026db04fa", size = 386301 }, - { url = "https://files.pythonhosted.org/packages/20/af/2ae192797bffd0d6d558145b5a36e7245346ff3e44f6ddcb82f0eb8512d4/rpds_py-0.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6889469bfdc1eddf489729b471303739bf04555bb151fe8875931f8564309afc", size = 549452 }, - { url = "https://files.pythonhosted.org/packages/07/dd/9f6520712a5108cd7d407c9db44a3d59011b385c58e320d58ebf67757a9e/rpds_py-0.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:19b73643c802f4eaf13d97f7855d0fb527fbc92ab7013c4ad0e13a6ae0ed23bd", size = 554370 }, - { url = "https://files.pythonhosted.org/packages/5e/0e/b1bdc7ea0db0946d640ab8965146099093391bb5d265832994c47461e3c5/rpds_py-0.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3c6afcf2338e7f374e8edc765c79fbcb4061d02b15dd5f8f314a4af2bdc7feb5", size = 530940 }, - { url = "https://files.pythonhosted.org/packages/ae/d3/ffe907084299484fab60a7955f7c0e8a295c04249090218c59437010f9f4/rpds_py-0.20.1-cp312-none-win32.whl", hash = "sha256:dc73505153798c6f74854aba69cc75953888cf9866465196889c7cdd351e720c", size = 203164 }, - { url = "https://files.pythonhosted.org/packages/1f/ba/9cbb57423c4bfbd81c473913bebaed151ad4158ee2590a4e4b3e70238b48/rpds_py-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:8bbe951244a838a51289ee53a6bae3a07f26d4e179b96fc7ddd3301caf0518eb", size = 220750 }, - { url = "https://files.pythonhosted.org/packages/b5/01/fee2e1d1274c92fff04aa47d805a28d62c2aa971d1f49f5baea1c6e670d9/rpds_py-0.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6ca91093a4a8da4afae7fe6a222c3b53ee4eef433ebfee4d54978a103435159e", size = 329359 }, - { url = "https://files.pythonhosted.org/packages/b0/cf/4aeffb02b7090029d7aeecbffb9a10e1c80f6f56d7e9a30e15481dc4099c/rpds_py-0.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b9c2fe36d1f758b28121bef29ed1dee9b7a2453e997528e7d1ac99b94892527c", size = 320543 }, - { url = "https://files.pythonhosted.org/packages/17/69/85cf3429e9ccda684ba63ff36b5866d5f9451e921cc99819341e19880334/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f009c69bc8c53db5dfab72ac760895dc1f2bc1b62ab7408b253c8d1ec52459fc", size = 363107 }, - { url = "https://files.pythonhosted.org/packages/ef/de/7df88dea9c3eeb832196d23b41f0f6fc5f9a2ee9b2080bbb1db8731ead9c/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6740a3e8d43a32629bb9b009017ea5b9e713b7210ba48ac8d4cb6d99d86c8ee8", size = 372027 }, - { url = "https://files.pythonhosted.org/packages/d1/b8/88675399d2038580743c570a809c43a900e7090edc6553f8ffb66b23c965/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32b922e13d4c0080d03e7b62991ad7f5007d9cd74e239c4b16bc85ae8b70252d", size = 405031 }, - { url = "https://files.pythonhosted.org/packages/e1/aa/cca639f6d17caf00bab51bdc70fcc0bdda3063e5662665c4fdf60443c474/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe00a9057d100e69b4ae4a094203a708d65b0f345ed546fdef86498bf5390982", size = 422271 }, - { url = "https://files.pythonhosted.org/packages/c4/07/bf8a949d2ec4626c285579c9d6b356c692325f1a4126e947736b416e1fc4/rpds_py-0.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fe9b04b6fa685bd39237d45fad89ba19e9163a1ccaa16611a812e682913496", size = 363625 }, - { url = "https://files.pythonhosted.org/packages/11/f0/06675c6a58d6ce34547879138810eb9aab0c10e5607ea6c2e4dc56b703c8/rpds_py-0.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa7ac11e294304e615b43f8c441fee5d40094275ed7311f3420d805fde9b07b4", size = 385906 }, - { url = "https://files.pythonhosted.org/packages/bf/ac/2d1f50374eb8e41030fad4e87f81751e1c39e3b5d4bee8c5618830d8a6ac/rpds_py-0.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aa97af1558a9bef4025f8f5d8c60d712e0a3b13a2fe875511defc6ee77a1ab7", size = 549021 }, - { url = "https://files.pythonhosted.org/packages/f7/d4/a7d70a7cc71df772eeadf4bce05e32e780a9fe44a511a5b091c7a85cb767/rpds_py-0.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:483b29f6f7ffa6af845107d4efe2e3fa8fb2693de8657bc1849f674296ff6a5a", size = 553800 }, - { url = "https://files.pythonhosted.org/packages/87/81/dc30bc449ccba63ad23a0f6633486d4e0e6955f45f3715a130dacabd6ad0/rpds_py-0.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37fe0f12aebb6a0e3e17bb4cd356b1286d2d18d2e93b2d39fe647138458b4bcb", size = 531076 }, - { url = "https://files.pythonhosted.org/packages/50/80/fb62ab48f3b5cfe704ead6ad372da1922ddaa76397055e02eb507054c979/rpds_py-0.20.1-cp313-none-win32.whl", hash = "sha256:a624cc00ef2158e04188df5e3016385b9353638139a06fb77057b3498f794782", size = 202804 }, - { url = "https://files.pythonhosted.org/packages/d9/30/a3391e76d0b3313f33bdedd394a519decae3a953d2943e3dabf80ae32447/rpds_py-0.20.1-cp313-none-win_amd64.whl", hash = "sha256:b71b8666eeea69d6363248822078c075bac6ed135faa9216aa85f295ff009b1e", size = 220502 }, - { url = "https://files.pythonhosted.org/packages/b6/fa/7959429e69569d0f6e7d27f80451402da0409349dd2b07f6bcbdd5fad2d3/rpds_py-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a07ced2b22f0cf0b55a6a510078174c31b6d8544f3bc00c2bcee52b3d613f74", size = 328209 }, - { url = "https://files.pythonhosted.org/packages/25/97/5dfdb091c30267ff404d2fd9e70c7a6d6ffc65ca77fffe9456e13b719066/rpds_py-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:68cb0a499f2c4a088fd2f521453e22ed3527154136a855c62e148b7883b99f9a", size = 319499 }, - { url = "https://files.pythonhosted.org/packages/7c/98/cf2608722400f5f9bb4c82aa5ac09026f3ac2ebea9d4059d3533589ed0b6/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3060d885657abc549b2a0f8e1b79699290e5d83845141717c6c90c2df38311", size = 361795 }, - { url = "https://files.pythonhosted.org/packages/89/de/0e13dd43c785c60e63933e96fbddda0b019df6862f4d3019bb49c3861131/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95f3b65d2392e1c5cec27cff08fdc0080270d5a1a4b2ea1d51d5f4a2620ff08d", size = 370604 }, - { url = "https://files.pythonhosted.org/packages/8a/fc/fe3c83c77f82b8059eeec4e998064913d66212b69b3653df48f58ad33d3d/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cc3712a4b0b76a1d45a9302dd2f53ff339614b1c29603a911318f2357b04dd2", size = 404177 }, - { url = "https://files.pythonhosted.org/packages/94/30/5189518bfb80a41f664daf32b46645c7fbdcc89028a0f1bfa82e806e0fbb/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d4eea0761e37485c9b81400437adb11c40e13ef513375bbd6973e34100aeb06", size = 430108 }, - { url = "https://files.pythonhosted.org/packages/67/0e/6f069feaff5c298375cd8c55e00ecd9bd79c792ce0893d39448dc0097857/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f5179583d7a6cdb981151dd349786cbc318bab54963a192692d945dd3f6435d", size = 361184 }, - { url = "https://files.pythonhosted.org/packages/27/9f/ce3e2ae36f392c3ef1988c06e9e0b4c74f64267dad7c223003c34da11adb/rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fbb0ffc754490aff6dabbf28064be47f0f9ca0b9755976f945214965b3ace7e", size = 384140 }, - { url = "https://files.pythonhosted.org/packages/5f/d5/89d44504d0bc7a1135062cb520a17903ff002f458371b8d9160af3b71e52/rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a94e52537a0e0a85429eda9e49f272ada715506d3b2431f64b8a3e34eb5f3e75", size = 546589 }, - { url = "https://files.pythonhosted.org/packages/8f/8f/e1c2db4fcca3947d9a28ec9553700b4dc8038f0eff575f579e75885b0661/rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:92b68b79c0da2a980b1c4197e56ac3dd0c8a149b4603747c4378914a68706979", size = 550059 }, - { url = "https://files.pythonhosted.org/packages/67/29/00a9e986df36721b5def82fff60995c1ee8827a7d909a6ec8929fb4cc668/rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:93da1d3db08a827eda74356f9f58884adb254e59b6664f64cc04cdff2cc19b0d", size = 529131 }, - { url = "https://files.pythonhosted.org/packages/a3/32/95364440560ec476b19c6a2704259e710c223bf767632ebaa72cc2a1760f/rpds_py-0.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:754bbed1a4ca48479e9d4182a561d001bbf81543876cdded6f695ec3d465846b", size = 219677 }, +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/23/80/afdf96daf9b27d61483ef05b38f282121db0e38f5fd4e89f40f5c86c2a4f/rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db", size = 26335 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/a4/91747f902f166c589f1753cbd8bda713aceb75817c8bb597058a38aa85e6/rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590", size = 327473 }, + { url = "https://files.pythonhosted.org/packages/8a/72/75a30a07f96ae210e732c50c7339e742945fdc83661e65a1c80fcf39ceea/rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250", size = 318359 }, + { url = "https://files.pythonhosted.org/packages/dc/63/87d469d7628cd71366fd1baa32573acd37385843b8d39b6e2b69f16eec48/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c", size = 361377 }, + { url = "https://files.pythonhosted.org/packages/dd/b1/78da258a4cafa1d8606a21b7d9ed4cc9d72d1c663583060ab02444b9bd9c/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e", size = 369494 }, + { url = "https://files.pythonhosted.org/packages/44/47/6fdb7273cc80066d434e83cd49a3cfedb6d96ff70908480870877fb64b1e/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0", size = 403639 }, + { url = "https://files.pythonhosted.org/packages/5f/4a/8c6c46afc050b5243be579be7f7b194d00b9731e83cc0845e9c70db127bb/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1", size = 430551 }, + { url = "https://files.pythonhosted.org/packages/d4/31/2dd40abc26fc0fc037b86006583276dc375d38ac821d4ca2394274e8045b/rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5", size = 360795 }, + { url = "https://files.pythonhosted.org/packages/9d/2a/665b9ebef76f54764f1437ac03373a95a69480b7ce56c480360f88730cae/rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e", size = 382663 }, + { url = "https://files.pythonhosted.org/packages/e8/8c/e056f0c887d29baa256f8c8d7f7079a72d80395c35c14219de45ab19dce2/rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153", size = 546477 }, + { url = "https://files.pythonhosted.org/packages/33/11/588568f6c2ed5c9d6d121c188c71ca0f76e0e369a6d66f835737189e5a75/rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624", size = 549477 }, + { url = "https://files.pythonhosted.org/packages/15/86/c1401e2f70fbdf963c2ac9157994ebeb00c101ddf87975a90507f27cb2f4/rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664", size = 527966 }, + { url = "https://files.pythonhosted.org/packages/66/f2/452420f1493112825e975c87b3b4fd8b334e0e228cdb641597a92e0c3267/rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682", size = 200978 }, + { url = "https://files.pythonhosted.org/packages/35/4c/674b2e2d75607acdbc7a162ace36dcaad225c9e760cef5defa5c0f5ddd2d/rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5", size = 218549 }, + { url = "https://files.pythonhosted.org/packages/80/61/615929ea79f5fd0b3aca000411a33bcc1753607ccc1af0ce7b05b56e6e56/rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95", size = 327267 }, + { url = "https://files.pythonhosted.org/packages/a5/f5/28e89dda55b731d78cbfea284dc9789d265a8a06523f0adf60e9b05cade7/rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9", size = 318227 }, + { url = "https://files.pythonhosted.org/packages/e4/ef/eb90feb3e384543c48e2f867551075c43a429aa4c9a44e9c4bd71f4f786b/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027", size = 361235 }, + { url = "https://files.pythonhosted.org/packages/ed/e7/8ea2d3d3398266c5c8ddd957d86003493b6d14f8f158b726dd09c8f43dee/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9", size = 369467 }, + { url = "https://files.pythonhosted.org/packages/51/25/a286abda9da7820c971a0b1abcf1d31fb81c44a1088a128ad26c77206622/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3", size = 403482 }, + { url = "https://files.pythonhosted.org/packages/7a/1e/9c3c0463fe142456dcd9e9be0ffd15b66a77adfcdf3ecf94fa2b12d95fcb/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8", size = 429943 }, + { url = "https://files.pythonhosted.org/packages/e1/fd/f1fd7e77fef8e5a442ce7fd80ba957730877515fe18d7195f646408a60ce/rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d", size = 360437 }, + { url = "https://files.pythonhosted.org/packages/55/83/347932db075847f4f8172c3b53ad70fe725edd9058f0d4098080ad45e3bc/rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75", size = 382400 }, + { url = "https://files.pythonhosted.org/packages/22/9b/2a6eeab4e6752adba751cfee19bdf35d11e1073509f74883cbf14d42d682/rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f", size = 546560 }, + { url = "https://files.pythonhosted.org/packages/3c/19/6e51a141fe6f017d07b7d899b10a4af9e0f268deffacc1107d70fcd9257b/rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a", size = 549334 }, + { url = "https://files.pythonhosted.org/packages/cf/40/4ae09a07e4531278e6bee41ef3e4f166c23468135afc2c6c98917bfc28e6/rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8", size = 527855 }, + { url = "https://files.pythonhosted.org/packages/eb/45/2135be31543677687a426117c56d8b33e8b581bc4a8b7abfa53721012162/rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a", size = 200968 }, + { url = "https://files.pythonhosted.org/packages/68/fa/e66c3aaf13ef91c203ba47c102cd7c5dca92dde8837e5093577968d6d36d/rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e", size = 218502 }, + { url = "https://files.pythonhosted.org/packages/d9/5a/3aa6f5d8bacbe4f55ebf9a3c9628dad40cdb57f845124cf13c78895ea156/rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d", size = 329516 }, + { url = "https://files.pythonhosted.org/packages/df/c0/67c8c8ac850c6e3681e356a59d46315bf73bc77cb50c9a32db8ae44325b7/rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72", size = 321245 }, + { url = "https://files.pythonhosted.org/packages/64/83/bf31341f21fa594035891ff04a497dc86b210cc1a903a9cc01b097cc614f/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266", size = 363951 }, + { url = "https://files.pythonhosted.org/packages/a2/e1/8218bba36737621262df316fbb729639af25ff611cc07bfeaadc1bfa6292/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be", size = 373113 }, + { url = "https://files.pythonhosted.org/packages/39/8d/4afcd688e3ad33ec273900f42e6a41e9bd9f43cfc509b6d498683d2d0338/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab", size = 405944 }, + { url = "https://files.pythonhosted.org/packages/fa/65/3326efa721b6ecd70262aab69a26c9bc19398cdb0a2a416ef30b58326460/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7", size = 422874 }, + { url = "https://files.pythonhosted.org/packages/31/fb/48a647d0afab74289dd21a4128002d58684c22600a22c4bfb76cb9e3bfb0/rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf", size = 364227 }, + { url = "https://files.pythonhosted.org/packages/f1/b0/1cdd179d7382dd52d65b1fd19c54d090b6bd0688dfbe259bb5ab7548c359/rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4", size = 386447 }, + { url = "https://files.pythonhosted.org/packages/dc/41/84ace07f31aac3a96b73a374d89106cf252f7d3274e7cae85d17a27c602d/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca", size = 549386 }, + { url = "https://files.pythonhosted.org/packages/33/ce/bf51bc5a3aa539171ea8c7737ab5ac06cef54c79b6b2a0511afc41533c89/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b", size = 554777 }, + { url = "https://files.pythonhosted.org/packages/76/b1/950568e55a94c2979c2b61ec24e76e648a525fbc7551ccfc1f2841e39d44/rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11", size = 530918 }, + { url = "https://files.pythonhosted.org/packages/78/84/93f00e3613426c8a7a9ca16782d2828f2ac55296dd5c6b599379d9f59ee2/rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952", size = 203112 }, + { url = "https://files.pythonhosted.org/packages/e6/08/7a186847dd78881a781d2be9b42c8e49c3261c0f4a6d0289ba9a1e4cde71/rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd", size = 220735 }, + { url = "https://files.pythonhosted.org/packages/32/3a/e69ec108eefb9b1f19ee00dde7a800b485942e62b123f01d9156a6d8569c/rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937", size = 329206 }, + { url = "https://files.pythonhosted.org/packages/f6/c0/fa689498fa3415565306398c8d2a596207c2a13d3cc03724f32514bddfbc/rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560", size = 320245 }, + { url = "https://files.pythonhosted.org/packages/68/d0/466b61007005f1b2fd8501f23e4bdee4d71c7381b61358750920d1882ac9/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b", size = 363585 }, + { url = "https://files.pythonhosted.org/packages/1e/e2/787ea3a0f4b197893c62c254e6f14929c40bbcff86922928ac4eafaa8edf/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0", size = 372302 }, + { url = "https://files.pythonhosted.org/packages/b5/ef/99f2cfe6aa128c21f1b30c66ecd348cbd59792953ca35eeb6efa38b88aa1/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44", size = 405344 }, + { url = "https://files.pythonhosted.org/packages/30/3c/9d12d0b76ecfe80a7ba4770459828dda495d72b18cafd6dfd54c67b2e282/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74", size = 422322 }, + { url = "https://files.pythonhosted.org/packages/f9/22/387aec1cd6e124adbc3b1f40c4e4152c3963ae47d78d3ca650102ea72c4f/rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94", size = 363739 }, + { url = "https://files.pythonhosted.org/packages/d1/3e/0ad65b776db13d13f002ab363fe3821cd1adec500d8e05e0a81047a75f9d/rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3", size = 386579 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/c68c1067b24a7df47edcc0325a825908601aba399e2d372a156edc631ad1/rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a", size = 548924 }, + { url = "https://files.pythonhosted.org/packages/ab/1c/35f1a5cce4bca71c49664f00140010a96b126e5f443ebaf6db741c25b9b7/rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3", size = 554217 }, + { url = "https://files.pythonhosted.org/packages/c8/d0/48154c152f9adb8304b21d867d28e79be3b352633fb195c03c7107a4da9a/rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976", size = 530540 }, + { url = "https://files.pythonhosted.org/packages/50/e8/78847f4e112e99fd5b7bc30fea3e4a44c20b811473d6755f944c5bf0aec7/rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202", size = 202604 }, + { url = "https://files.pythonhosted.org/packages/60/31/083e6337775e133fb0217ed0ab0752380efa6e5112f2250d592d4135a228/rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e", size = 220448 }, + { url = "https://files.pythonhosted.org/packages/ff/d3/ffb04445d29c03d380047c62bed01b979adb9204424e2c833817012f679e/rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035", size = 328265 }, + { url = "https://files.pythonhosted.org/packages/dc/9d/894ff29a2be8f85fd1acff6e0c1b52b629aee019da8651125af9ee4894e1/rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919", size = 319238 }, + { url = "https://files.pythonhosted.org/packages/43/3d/0e5b835c22933a5bdc4413e4a91de55a8c1ef33f55eb2514a5cf24729173/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c", size = 362136 }, + { url = "https://files.pythonhosted.org/packages/67/81/c9f29da910ac19758f170633c0937fc2f0898b84389bd05bfc255c985f19/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f", size = 370411 }, + { url = "https://files.pythonhosted.org/packages/a8/df/b989044f90b81093e454eb54799e7ee5b085ebf957a75d07d5e21eac2fb5/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333", size = 404598 }, + { url = "https://files.pythonhosted.org/packages/8f/09/f79cd575f503932f41138c4bec4c902eb3b71ea8570436688145cc77b8ef/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356", size = 430224 }, + { url = "https://files.pythonhosted.org/packages/34/46/7fae3500bc188df2feee09dd72df262b97d31e8e4bd2ff4a8be4e28bf1d3/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a", size = 361660 }, + { url = "https://files.pythonhosted.org/packages/5b/1d/d850242d30e68f99ad80815576f38b378b5aba393613e3357ed5e593499e/rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061", size = 384008 }, + { url = "https://files.pythonhosted.org/packages/c9/16/df4cfd1de216c25de24f8631f17380f8edee92201ec7810d1e2ba1dd9f85/rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d", size = 546855 }, + { url = "https://files.pythonhosted.org/packages/c0/b8/03d4561095d4fbf2ab62ed651a2b5cb674fe5245b1ab2f7909e8056bd014/rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18", size = 550599 }, + { url = "https://files.pythonhosted.org/packages/f4/54/d93867e2bf4acf57314798181faf3bd7d1a4f51a3aa81cb6211d56f74d3f/rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c", size = 528963 }, + { url = "https://files.pythonhosted.org/packages/66/86/6f72984a284d720d84fba5ee7b0d1b0d320978b516497cbfd6e335e95a3e/rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677", size = 219621 }, ] [[package]] @@ -1066,27 +1068,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/21/5c6e05e0fd3fbb41be4fb92edbc9a04de70baf60adb61435ce0c6b8c3d55/ruff-0.7.1.tar.gz", hash = "sha256:9d8a41d4aa2dad1575adb98a82870cf5db5f76b2938cf2206c22c940034a36f4", size = 3181670 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/65/45/8a20a9920175c9c4892b2420f80ff3cf14949cf3067118e212f9acd9c908/ruff-0.7.1-py3-none-linux_armv6l.whl", hash = "sha256:cb1bc5ed9403daa7da05475d615739cc0212e861b7306f314379d958592aaa89", size = 10389268 }, - { url = "https://files.pythonhosted.org/packages/1b/d3/2f8382db2cf4f9488e938602e33e36287f9d26cb283aa31f11c31297ce79/ruff-0.7.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:27c1c52a8d199a257ff1e5582d078eab7145129aa02721815ca8fa4f9612dc35", size = 10188348 }, - { url = "https://files.pythonhosted.org/packages/a2/31/7d14e2a88da351200f844b7be889a0845d9e797162cf76b136d21b832a23/ruff-0.7.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:588a34e1ef2ea55b4ddfec26bbe76bc866e92523d8c6cdec5e8aceefeff02d99", size = 9841448 }, - { url = "https://files.pythonhosted.org/packages/db/99/738cafdc768eceeca0bd26c6f03e213aa91203d2278e1d95b1c31c4ece41/ruff-0.7.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94fc32f9cdf72dc75c451e5f072758b118ab8100727168a3df58502b43a599ca", size = 10674864 }, - { url = "https://files.pythonhosted.org/packages/fe/12/bcf2836b50eab53c65008383e7d55201e490d75167c474f14a16e1af47d2/ruff-0.7.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:985818742b833bffa543a84d1cc11b5e6871de1b4e0ac3060a59a2bae3969250", size = 10192105 }, - { url = "https://files.pythonhosted.org/packages/2b/71/261d5d668bf98b6c44e89bfb5dfa4cb8cb6c8b490a201a3d8030e136ea4f/ruff-0.7.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32f1e8a192e261366c702c5fb2ece9f68d26625f198a25c408861c16dc2dea9c", size = 11194144 }, - { url = "https://files.pythonhosted.org/packages/90/1f/0926d18a3b566fa6e7b3b36093088e4ffef6b6ba4ea85a462d9a93f7e35c/ruff-0.7.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:699085bf05819588551b11751eff33e9ca58b1b86a6843e1b082a7de40da1565", size = 11917066 }, - { url = "https://files.pythonhosted.org/packages/cd/a8/9fac41f128b6a44ab4409c1493430b4ee4b11521e8aeeca19bfe1ce851f9/ruff-0.7.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:344cc2b0814047dc8c3a8ff2cd1f3d808bb23c6658db830d25147339d9bf9ea7", size = 11458821 }, - { url = "https://files.pythonhosted.org/packages/25/cd/59644168f086ab13fe4e02943b9489a0aa710171f66b178e179df5383554/ruff-0.7.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4316bbf69d5a859cc937890c7ac7a6551252b6a01b1d2c97e8fc96e45a7c8b4a", size = 12700379 }, - { url = "https://files.pythonhosted.org/packages/fb/30/3bac63619eb97174661829c07fc46b2055a053dee72da29d7c304c1cd2c0/ruff-0.7.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79d3af9dca4c56043e738a4d6dd1e9444b6d6c10598ac52d146e331eb155a8ad", size = 11019813 }, - { url = "https://files.pythonhosted.org/packages/4b/af/f567b885b5cb3bcdbcca3458ebf210cc8c9c7a9f61c332d3c2a050c3b21e/ruff-0.7.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c5c121b46abde94a505175524e51891f829414e093cd8326d6e741ecfc0a9112", size = 10662146 }, - { url = "https://files.pythonhosted.org/packages/bc/ad/eb930d3ad117a9f2f7261969c21559ebd82bb13b6e8001c7caed0d44be5f/ruff-0.7.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8422104078324ea250886954e48f1373a8fe7de59283d747c3a7eca050b4e378", size = 10256911 }, - { url = "https://files.pythonhosted.org/packages/20/d5/af292ce70a016fcec792105ca67f768b403dd480a11888bc1f418fed0dd5/ruff-0.7.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:56aad830af8a9db644e80098fe4984a948e2b6fc2e73891538f43bbe478461b8", size = 10767488 }, - { url = "https://files.pythonhosted.org/packages/24/85/cc04a3bd027f433bebd2a097e63b3167653c079f7f13d8f9a1178e693412/ruff-0.7.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:658304f02f68d3a83c998ad8bf91f9b4f53e93e5412b8f2388359d55869727fd", size = 11093368 }, - { url = "https://files.pythonhosted.org/packages/0b/fb/c39cbf32d1f3e318674b8622f989417231794926b573f76dd4d0ca49f0f1/ruff-0.7.1-py3-none-win32.whl", hash = "sha256:b517a2011333eb7ce2d402652ecaa0ac1a30c114fbbd55c6b8ee466a7f600ee9", size = 8594180 }, - { url = "https://files.pythonhosted.org/packages/5a/71/ec8cdea34ecb90c830ca60d54ac7b509a7b5eab50fae27e001d4470fe813/ruff-0.7.1-py3-none-win_amd64.whl", hash = "sha256:f38c41fcde1728736b4eb2b18850f6d1e3eedd9678c914dede554a70d5241307", size = 9419751 }, - { url = "https://files.pythonhosted.org/packages/79/7b/884553415e9f0a9bf358ed52fb68b934e67ef6c5a62397ace924a1afdf9a/ruff-0.7.1-py3-none-win_arm64.whl", hash = "sha256:19aa200ec824c0f36d0c9114c8ec0087082021732979a359d6f3c390a6ff2a37", size = 8717402 }, +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/06/09d1276df977eece383d0ed66052fc24ec4550a61f8fbc0a11200e690496/ruff-0.7.3.tar.gz", hash = "sha256:e1d1ba2e40b6e71a61b063354d04be669ab0d39c352461f3d789cac68b54a313", size = 3243664 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/56/933d433c2489e4642487b835f53dd9ff015fb3d8fa459b09bb2ce42d7c4b/ruff-0.7.3-py3-none-linux_armv6l.whl", hash = "sha256:34f2339dc22687ec7e7002792d1f50712bf84a13d5152e75712ac08be565d344", size = 10372090 }, + { url = "https://files.pythonhosted.org/packages/20/ea/1f0a22a6bcdd3fc26c73f63a025d05bd565901b729d56bcb093c722a6c4c/ruff-0.7.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:fb397332a1879b9764a3455a0bb1087bda876c2db8aca3a3cbb67b3dbce8cda0", size = 10190037 }, + { url = "https://files.pythonhosted.org/packages/16/74/aca75666e0d481fe394e76a8647c44ea919087748024924baa1a17371e3e/ruff-0.7.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:37d0b619546103274e7f62643d14e1adcbccb242efda4e4bdb9544d7764782e9", size = 9811998 }, + { url = "https://files.pythonhosted.org/packages/20/a1/cf446a0d7f78ea1f0bd2b9171c11dfe746585c0c4a734b25966121eb4f5d/ruff-0.7.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59f0c3ee4d1a6787614e7135b72e21024875266101142a09a61439cb6e38a5", size = 10620626 }, + { url = "https://files.pythonhosted.org/packages/cd/c1/82b27d09286ae855f5d03b1ad37cf243f21eb0081732d4d7b0d658d439cb/ruff-0.7.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:44eb93c2499a169d49fafd07bc62ac89b1bc800b197e50ff4633aed212569299", size = 10177598 }, + { url = "https://files.pythonhosted.org/packages/b9/42/c0acac22753bf74013d035a5ef6c5c4c40ad4d6686bfb3fda7c6f37d9b37/ruff-0.7.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d0242ce53f3a576c35ee32d907475a8d569944c0407f91d207c8af5be5dae4e", size = 11171963 }, + { url = "https://files.pythonhosted.org/packages/43/18/bb0befb7fb9121dd9009e6a72eb98e24f1bacb07c6f3ecb55f032ba98aed/ruff-0.7.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:6b6224af8b5e09772c2ecb8dc9f3f344c1aa48201c7f07e7315367f6dd90ac29", size = 11856157 }, + { url = "https://files.pythonhosted.org/packages/5e/91/04e98d7d6e32eca9d1372be595f9abc7b7f048795e32eb2edbd8794d50bd/ruff-0.7.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c50f95a82b94421c964fae4c27c0242890a20fe67d203d127e84fbb8013855f5", size = 11440331 }, + { url = "https://files.pythonhosted.org/packages/f5/dc/3fe99f2ce10b76d389041a1b9f99e7066332e479435d4bebcceea16caff5/ruff-0.7.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f3eff9961b5d2644bcf1616c606e93baa2d6b349e8aa8b035f654df252c8c67", size = 12725354 }, + { url = "https://files.pythonhosted.org/packages/43/7b/1daa712de1c5bc6cbbf9fa60e9c41cc48cda962dc6d2c4f2a224d2c3007e/ruff-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8963cab06d130c4df2fd52c84e9f10d297826d2e8169ae0c798b6221be1d1d2", size = 11010091 }, + { url = "https://files.pythonhosted.org/packages/b6/db/1227a903587432eb569e57a95b15a4f191a71fe315cde4c0312df7bc85da/ruff-0.7.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:61b46049d6edc0e4317fb14b33bd693245281a3007288b68a3f5b74a22a0746d", size = 10610687 }, + { url = "https://files.pythonhosted.org/packages/db/e2/dc41ee90c3085aadad4da614d310d834f641aaafddf3dfbba08210c616ce/ruff-0.7.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:10ebce7696afe4644e8c1a23b3cf8c0f2193a310c18387c06e583ae9ef284de2", size = 10254843 }, + { url = "https://files.pythonhosted.org/packages/6f/09/5f6cac1c91542bc5bd33d40b4c13b637bf64d7bb29e091dadb01b62527fe/ruff-0.7.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3f36d56326b3aef8eeee150b700e519880d1aab92f471eefdef656fd57492aa2", size = 10730962 }, + { url = "https://files.pythonhosted.org/packages/d3/42/89a4b9a24ef7d00269e24086c417a006f9a3ffeac2c80f2629eb5ce140ee/ruff-0.7.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5d024301109a0007b78d57ab0ba190087b43dce852e552734ebf0b0b85e4fb16", size = 11101907 }, + { url = "https://files.pythonhosted.org/packages/b0/5c/efdb4777686683a8edce94ffd812783bddcd3d2454d38c5ac193fef7c500/ruff-0.7.3-py3-none-win32.whl", hash = "sha256:4ba81a5f0c5478aa61674c5a2194de8b02652f17addf8dfc40c8937e6e7d79fc", size = 8611095 }, + { url = "https://files.pythonhosted.org/packages/bb/b8/28fbc6a4efa50178f973972d1c84b2d0a33cdc731588522ab751ac3da2f5/ruff-0.7.3-py3-none-win_amd64.whl", hash = "sha256:588a9ff2fecf01025ed065fe28809cd5a53b43505f48b69a1ac7707b1b7e4088", size = 9418283 }, + { url = "https://files.pythonhosted.org/packages/3f/77/b587cba6febd5e2003374f37eb89633f79f161e71084f94057c8653b7fb3/ruff-0.7.3-py3-none-win_arm64.whl", hash = "sha256:1713e2c5545863cdbfe2cbce21f69ffaf37b813bfd1fb3b90dc9a6f1963f5a8c", size = 8725228 }, ] [[package]] @@ -1108,11 +1110,11 @@ wheels = [ [[package]] name = "setuptools" -version = "75.3.0" +version = "75.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ed/22/a438e0caa4576f8c383fa4d35f1cc01655a46c75be358960d815bfbb12bd/setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686", size = 1351577 } +sdist = { url = "https://files.pythonhosted.org/packages/c8/db/722a42ffdc226e950c4757b3da7b56ff5c090bb265dccd707f7b8a3c6fee/setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef", size = 1336032 } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/12/282ee9bce8b58130cb762fbc9beabd531549952cac11fc56add11dcb7ea0/setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", size = 1251070 }, + { url = "https://files.pythonhosted.org/packages/fe/df/88ccbee85aefbca071db004fdc8f8d2507d55d5a9dc27ebb93c92edb1bd8/setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829", size = 1222710 }, ] [[package]] @@ -1275,11 +1277,11 @@ wheels = [ [[package]] name = "tomli" -version = "2.0.2" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/b9/de2a5c0144d7d75a57ff355c0c24054f965b2dc3036456ae03a51ea6264b/tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed", size = 16096 } +sdist = { url = "https://files.pythonhosted.org/packages/1e/e4/1b6cbcc82d8832dd0ce34767d5c560df8a3547ad8cbc427f34601415930a/tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8", size = 16622 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/db/ce8eda256fa131af12e0a76d481711abe4681b6923c27efb9a255c9e4594/tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38", size = 13237 }, + { url = "https://files.pythonhosted.org/packages/de/f7/4da0ffe1892122c9ea096c57f64c2753ae5dd3ce85488802d11b0992cc6d/tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391", size = 13750 }, ] [[package]] @@ -1293,7 +1295,7 @@ wheels = [ [[package]] name = "typer" -version = "0.12.5" +version = "0.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -1301,9 +1303,9 @@ dependencies = [ { name = "shellingham" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/58/a79003b91ac2c6890fc5d90145c662fd5771c6f11447f116b63300436bc9/typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722", size = 98953 } +sdist = { url = "https://files.pythonhosted.org/packages/e7/87/9eb07fdfa14e22ec7658b5b1147836d22df3848a22c85a4e18ed272303a5/typer-0.13.0.tar.gz", hash = "sha256:f1c7198347939361eec90139ffa0fd8b3df3a2259d5852a0f7400e476d95985c", size = 97572 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/2b/886d13e742e514f704c33c4caa7df0f3b89e5a25ef8db02aa9ca3d9535d5/typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b", size = 47288 }, + { url = "https://files.pythonhosted.org/packages/18/7e/c8bfa8cbcd3ea1d25d2beb359b5c5a3f4339a7e2e5d9e3ef3e29ba3ab3b9/typer-0.13.0-py3-none-any.whl", hash = "sha256:d85fe0b777b2517cc99c8055ed735452f2659cd45e451507c76f48ce5c1d00e2", size = 44194 }, ] [[package]] From 3b48555ad25164b73a4eeb1d556ab64e802ac00e Mon Sep 17 00:00:00 2001 From: Francis Charette-Migneault Date: Thu, 14 Nov 2024 09:03:55 -0500 Subject: [PATCH 70/83] Update README.md Co-authored-by: Ryan Avery --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a5c6cb..c45754b 100644 --- a/README.md +++ b/README.md @@ -599,7 +599,7 @@ A valid STAC MLM Item definition requires at least one Asset with the `mlm:model an accompanying `mlm:artifact_type` property that describes how to employ it. An Asset described with this role is considered the "*main*" [Model Asset](#model-asset) being described by the STAC Item definition. Typically, there will be only one asset containing the `mlm:model` role. -However, multiple `mlm:model` are permitted to provide alternate interfaces of the same model +However, multiple `mlm:model` roles are permitted to provide alternate interfaces of the same model (e.g.: using different frameworks or compilations), but those assets should have exactly the same model interfaces (i.e.: identical `mlm:input`, `mlm:output`, etc.). In such case, the `mlm:artifact_type` property should be used to distinguish them. From e8db76b51373751c15a04e2f2165e7c3e4c3cb83 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Thu, 14 Nov 2024 09:10:31 -0500 Subject: [PATCH 71/83] improve description from PR review comment --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c45754b..0327f47 100644 --- a/README.md +++ b/README.md @@ -599,7 +599,7 @@ A valid STAC MLM Item definition requires at least one Asset with the `mlm:model an accompanying `mlm:artifact_type` property that describes how to employ it. An Asset described with this role is considered the "*main*" [Model Asset](#model-asset) being described by the STAC Item definition. Typically, there will be only one asset containing the `mlm:model` role. -However, multiple `mlm:model` roles are permitted to provide alternate interfaces of the same model +However, multiple Assets employing the `mlm:model` role are permitted to provide alternate interfaces of the same model (e.g.: using different frameworks or compilations), but those assets should have exactly the same model interfaces (i.e.: identical `mlm:input`, `mlm:output`, etc.). In such case, the `mlm:artifact_type` property should be used to distinguish them. From b4885f6c07c4efd346b5502680865f24161973ec Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 12 Dec 2024 15:58:36 -0800 Subject: [PATCH 72/83] update TF/Keras formats using the saving method as the artifact type --- README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 423139f..0707203 100644 --- a/README.md +++ b/README.md @@ -655,26 +655,29 @@ Following are some proposed *Artifact Type* values for corresponding approaches, permitted as well. Note that the names are selected using the framework-specific definitions to help the users understand the source explicitly, although this is not strictly required either. -| Artifact Type | Description | -|--------------------|--------------------------------------------------------------------------------------| -| `torch.save` | A [serialized python pickle object][pytorch-save] (i.e.: `.pt`) which can represent a model or state_dict. | -| `torch.jit.save` | A [`TorchScript`][pytorch-jit-script] model artifact obtained with one or more of the graph export options Torchscript Tracing and Torchscript Scripting. | -| `torch.export.save` | A model artifact storing an ExportedProgram obtained by [`torch.export.export`][pytorch-export] (i.e.: `.pt2`). | -| `TFSavedModel` | A [SavedModel][tf-save] from Tensorflow or Keras. | -| `Keras_v3` | Keras v3 is the [recommended format][keras-recommended] by the Tensorflow team. See this example to [save and load models][keras-example] and the update to date docs [disambiguating different save methods][keras-methods] in TF and Keras.. | -| `h5` | [Keras and tf.keras model][h5] weights format, which uses HDF5. | +| Artifact Type | Description | +|--------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `torch.save` | A [serialized python pickle object][pytorch-save] (i.e.: `.pt`) which can represent a model or state_dict. | +| `torch.jit.save` | A [`TorchScript`][pytorch-jit-script] model artifact obtained with one or more of the graph export options Torchscript Tracing and Torchscript Scripting. | +| `torch.export.save` | A model artifact storing an [ExportedProgram][exported-program] obtained by [`torch.export.export`][pytorch-export] (i.e.: `.pt2`). | +| `tf.keras.Model.save` | Saves a [.keras model file][keras-model], a unified zip archive format containing the architecture, weights, optimizer, losses, and metrics. | +| `tf.keras.Model.save_weights` | A [.weights.h5][keras-save-weights] file containing only model weights for use by Tensorflow or Keras. | +| `tf.keras.Model.export(format='tf_saved_model')` | TF Saved Model is the [recommended format][tf-keras-recommended] by the Tensorflow team for whole model saving/loading for inference. See this example to [save and load models][keras-example] and the docs for [different save methods][keras-methods] in TF and Keras. Also available from `keras.Model.export(format='tf_saved_model')` | + + +[exported-program]: https://pytorch.org/docs/main/export.html#serialization [pytorch-compile]: https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html [pytorch-export]: https://pytorch.org/docs/main/export.html [pytorch-frameworks]: https://pytorch.org/docs/main/export.html#existing-frameworks [pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html [pytorch-jit-script]: https://pytorch.org/docs/stable/jit.html [pytorch-save]: https://pytorch.org/tutorials/beginner/saving_loading_models.html -[tf-save]: https://www.tensorflow.org/guide/saved_model +[keras-save-weights]: https://keras.io/api/models/model_saving_apis/weights_saving_and_loading/#save_weights-method [keras-example]: https://keras.io/guides/serialization_and_saving/ -[keras-recommended]: https://www.tensorflow.org/guide/saved_model#creating_a_savedmodel_from_keras -[h5]: https://keras.io/api/models/model_saving_apis/weights_saving_and_loading/ -[keras-methods]: https://keras.io/2.16/api/models/model_saving_apis/model_saving_and_loading/ +[tf-keras-recommended]: https://www.tensorflow.org/guide/saved_model#creating_a_savedmodel_from_keras +[keras-methods]: https://keras.io/2.16/api/models/model_saving_apis/ +[keras-model]: https://keras.io/api/models/model_saving_apis/model_saving_and_loading/ ### Source Code Asset From 2c63d5e8ba31119cdae72066c9ba72dfd240aecd Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 12 Dec 2024 16:36:17 -0800 Subject: [PATCH 73/83] move framework specific fields to best practices --- README.md | 43 ++++++------------------------------------- best-practices.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index b1840a8..4b83870 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ However, fields that relate to supervised ML are optional and users can use the See [Best Practices](./best-practices.md) for guidance on what other STAC extensions you should use in conjunction -with this extension. +with this extension as well as suggested values for specific ML framework. The Machine Learning Model Extension purposely omits and delegates some definitions to other STAC extensions to favor reusability and avoid metadata duplication whenever possible. A properly defined MLM STAC Item/Collection should almost @@ -668,6 +668,7 @@ In order to provide more context, the following roles are also recommended were | type | string | The media type of the artifact (see [Model Artifact Media-Type](#model-artifact-media-type). | | roles | \[string] | **REQUIRED** Specify `mlm:model`. Can include `["mlm:weights", "mlm:checkpoint"]` as applicable. | | mlm:artifact_type | [Artifact Type](#artifact-type) | Specifies the kind of model artifact. Typically related to a particular ML framework. | +| mlm:compile_method | string | Describes the method used to compile the ML model at either save time or runtime prior to inference. These options are mutually exclusive `["aot", "jit"]`. | Recommended Asset `roles` include `mlm:weights` or `mlm:checkpoint` for model weights that need to be loaded by a model definition and `mlm:compiled` for models that can be loaded directly without an intermediate model definition. @@ -703,42 +704,10 @@ official. In order to validate the specific framework and artifact type employed [iana-media-type]: https://www.iana.org/assignments/media-types/media-types.xhtml -#### Artifact Type - -This value can be used to provide additional details about the specific model artifact being described. -For example, PyTorch offers [various strategies][pytorch-frameworks] for providing model definitions, -such as Pickle (`.pt`), [TorchScript][pytorch-jit-script], -or [PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] (`.pt2`) approach. -Since they all refer to the same ML framework, the [Model Artifact Media-Type](#model-artifact-media-type) -can be insufficient in this case to detect which strategy should be used to employ the model definition. - -Following are some proposed *Artifact Type* values for corresponding approaches, but other names are -permitted as well. Note that the names are selected using the framework-specific definitions to help -the users understand the source explicitly, although this is not strictly required either. - -| Artifact Type | Description | -|--------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `torch.save` | A [serialized python pickle object][pytorch-save] (i.e.: `.pt`) which can represent a model or state_dict. | -| `torch.jit.save` | A [`TorchScript`][pytorch-jit-script] model artifact obtained with one or more of the graph export options Torchscript Tracing and Torchscript Scripting. | -| `torch.export.save` | A model artifact storing an [ExportedProgram][exported-program] obtained by [`torch.export.export`][pytorch-export] (i.e.: `.pt2`). | -| `tf.keras.Model.save` | Saves a [.keras model file][keras-model], a unified zip archive format containing the architecture, weights, optimizer, losses, and metrics. | -| `tf.keras.Model.save_weights` | A [.weights.h5][keras-save-weights] file containing only model weights for use by Tensorflow or Keras. | -| `tf.keras.Model.export(format='tf_saved_model')` | TF Saved Model is the [recommended format][tf-keras-recommended] by the Tensorflow team for whole model saving/loading for inference. See this example to [save and load models][keras-example] and the docs for [different save methods][keras-methods] in TF and Keras. Also available from `keras.Model.export(format='tf_saved_model')` | - - - -[exported-program]: https://pytorch.org/docs/main/export.html#serialization -[pytorch-compile]: https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html -[pytorch-export]: https://pytorch.org/docs/main/export.html -[pytorch-frameworks]: https://pytorch.org/docs/main/export.html#existing-frameworks -[pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html -[pytorch-jit-script]: https://pytorch.org/docs/stable/jit.html -[pytorch-save]: https://pytorch.org/tutorials/beginner/saving_loading_models.html -[keras-save-weights]: https://keras.io/api/models/model_saving_apis/weights_saving_and_loading/#save_weights-method -[keras-example]: https://keras.io/guides/serialization_and_saving/ -[tf-keras-recommended]: https://www.tensorflow.org/guide/saved_model#creating_a_savedmodel_from_keras -[keras-methods]: https://keras.io/2.16/api/models/model_saving_apis/ -[keras-model]: https://keras.io/api/models/model_saving_apis/model_saving_and_loading/ +#### Framework Specific Artifact Types + +The `mlm:artifact_type` field can be used to clarify how the model was saved which can help users understand how to load it or in what runtime contexts it should be used. For example, PyTorch offers [various strategies][pytorch-frameworks] for providing model definitions, such as Pickle (`.pt`), [TorchScript][pytorch-jit-script], or [PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] (`.pt2`) approach. Since they all refer to the same ML framework, the [Model Artifact Media-Type](#model-artifact-media-type) can be insufficient in this case to detect which strategy should be used to employ the model definition. See the [the best practices document](./best-practices#framework-specific-artifact-types) on suggested fields for framework specific artifact types. + ### Source Code Asset diff --git a/best-practices.md b/best-practices.md index d7e1675..4236db9 100644 --- a/best-practices.md +++ b/best-practices.md @@ -282,3 +282,31 @@ training process to find the "best model". This field could also be used to indi educational purposes only. [stac-ext-version]: https://github.com/stac-extensions/version + +## Framework Specific Artifact Types + +The following are some proposed *Artifact Type* values for the Model Asset's [`mlm:artifact_type` field](./README.md#model-asset). Other names are +permitted, as these values are not validated by the schema. Note that the names are selected using the framework-specific definitions to help the users understand how the model artifact was created, although these exact names are not strictly required either. + +| Artifact Type | Description | +|--------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `torch.save` | A [serialized python pickle object][pytorch-save] (i.e.: `.pt`) which can represent a model or state_dict. | +| `torch.jit.save` | A [`TorchScript`][pytorch-jit-script] model artifact obtained with one or more of the graph export options Torchscript Tracing and Torchscript Scripting. | +| `torch.export.save` | A model artifact storing an [ExportedProgram][exported-program] obtained by [`torch.export.export`][pytorch-export] (i.e.: `.pt2`). | +| `tf.keras.Model.save` | Saves a [.keras model file][keras-model], a unified zip archive format containing the architecture, weights, optimizer, losses, and metrics. | +| `tf.keras.Model.save_weights` | A [.weights.h5][keras-save-weights] file containing only model weights for use by Tensorflow or Keras. | +| `tf.keras.Model.export(format='tf_saved_model')` | TF Saved Model is the [recommended format][tf-keras-recommended] by the Tensorflow team for whole model saving/loading for inference. See this example to [save and load models][keras-example] and the docs for [different save methods][keras-methods] in TF and Keras. Also available from `keras.Model.export(format='tf_saved_model')` | + + +[exported-program]: https://pytorch.org/docs/main/export.html#serialization +[pytorch-compile]: https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html +[pytorch-export]: https://pytorch.org/docs/main/export.html +[pytorch-frameworks]: https://pytorch.org/docs/main/export.html#existing-frameworks +[pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html +[pytorch-jit-script]: https://pytorch.org/docs/stable/jit.html +[pytorch-save]: https://pytorch.org/tutorials/beginner/saving_loading_models.html +[keras-save-weights]: https://keras.io/api/models/model_saving_apis/weights_saving_and_loading/#save_weights-method +[keras-example]: https://keras.io/guides/serialization_and_saving/ +[tf-keras-recommended]: https://www.tensorflow.org/guide/saved_model#creating_a_savedmodel_from_keras +[keras-methods]: https://keras.io/2.16/api/models/model_saving_apis/ +[keras-model]: https://keras.io/api/models/model_saving_apis/model_saving_and_loading/ From 3cb4e0558d228140ca142715e5a323b63f9c431f Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 12 Dec 2024 16:36:41 -0800 Subject: [PATCH 74/83] edit line length --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b83870..c5e2ebb 100644 --- a/README.md +++ b/README.md @@ -706,7 +706,12 @@ official. In order to validate the specific framework and artifact type employed #### Framework Specific Artifact Types -The `mlm:artifact_type` field can be used to clarify how the model was saved which can help users understand how to load it or in what runtime contexts it should be used. For example, PyTorch offers [various strategies][pytorch-frameworks] for providing model definitions, such as Pickle (`.pt`), [TorchScript][pytorch-jit-script], or [PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] (`.pt2`) approach. Since they all refer to the same ML framework, the [Model Artifact Media-Type](#model-artifact-media-type) can be insufficient in this case to detect which strategy should be used to employ the model definition. See the [the best practices document](./best-practices#framework-specific-artifact-types) on suggested fields for framework specific artifact types. +The `mlm:artifact_type` field can be used to clarify how the model was saved which can help users understand how to load it or in +what runtime contexts it should be used. For example, PyTorch offers [various strategies][pytorch-frameworks] for providing model +definitions, such as Pickle (`.pt`), [TorchScript][pytorch-jit-script], or [PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] +(`.pt2`) approach. Since they all refer to the same ML framework, the [Model Artifact Media-Type](#model-artifact-media-type) can be +insufficient in this case to detect which strategy should be used to employ the model definition. See the [the best practices +document](./best-practices#framework-specific-artifact-types) on suggested fields for framework specific artifact types. ### Source Code Asset From 4c1c63a8e3e6e117664266c4a62abed4f20a6d0d Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 12 Dec 2024 16:53:16 -0800 Subject: [PATCH 75/83] update json schema, note when the mlm:artifact type is required by mlm:model role --- README.md | 9 +++++---- json-schema/schema.json | 22 +++++++++++++++++++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c5e2ebb..2d16b3d 100644 --- a/README.md +++ b/README.md @@ -667,8 +667,8 @@ In order to provide more context, the following roles are also recommended were | href | string | URI to the model artifact. | | type | string | The media type of the artifact (see [Model Artifact Media-Type](#model-artifact-media-type). | | roles | \[string] | **REQUIRED** Specify `mlm:model`. Can include `["mlm:weights", "mlm:checkpoint"]` as applicable. | -| mlm:artifact_type | [Artifact Type](#artifact-type) | Specifies the kind of model artifact. Typically related to a particular ML framework. | -| mlm:compile_method | string | Describes the method used to compile the ML model at either save time or runtime prior to inference. These options are mutually exclusive `["aot", "jit"]`. | +| mlm:artifact_type | [Artifact Type](#artifact-type) | Specifies the kind of model artifact. Typically related to a particular ML framework. This is **REQUIRED** if the `mlm:model` role is specified. | +| mlm:compile_method | string | Describes the method used to compile the ML model at either save time or runtime prior to inference. These options are mutually exclusive `["aot", "jit", null]`. | Recommended Asset `roles` include `mlm:weights` or `mlm:checkpoint` for model weights that need to be loaded by a model definition and `mlm:compiled` for models that can be loaded directly without an intermediate model definition. @@ -710,8 +710,9 @@ The `mlm:artifact_type` field can be used to clarify how the model was saved whi what runtime contexts it should be used. For example, PyTorch offers [various strategies][pytorch-frameworks] for providing model definitions, such as Pickle (`.pt`), [TorchScript][pytorch-jit-script], or [PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] (`.pt2`) approach. Since they all refer to the same ML framework, the [Model Artifact Media-Type](#model-artifact-media-type) can be -insufficient in this case to detect which strategy should be used to employ the model definition. See the [the best practices -document](./best-practices#framework-specific-artifact-types) on suggested fields for framework specific artifact types. +insufficient in this case to detect which strategy should be used to employ the model definition. +See the [the best practices document](./best-practices#framework-specific-artifact-types) on suggested + fields for framework specific artifact types. ### Source Code Asset diff --git a/json-schema/schema.json b/json-schema/schema.json index b87ad45..0dbf2ad 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -302,6 +302,9 @@ }, "mlm:artifact_type": { "$ref": "#/$defs/mlm:artifact_type" + }, + "mlm:compile_method": { + "$ref": "#/$defs/mlm:compile_method" } }, "$comment": "Allow properties not defined by MLM prefix to work with other extensions and attributes, but disallow undefined MLM fields.", @@ -324,7 +327,8 @@ "required": [ "mlm:input", "mlm:output", - "mlm:artifact_type" + "mlm:artifact_type", + "mlm:compile_method" ] } }, @@ -354,7 +358,8 @@ "anyOf": [ { "required": [ - "mlm:artifact_type" + "mlm:artifact_type", + "mlm:compile_method" ] } ] @@ -460,7 +465,18 @@ "examples": [ "torch.save", "torch.jit.save", - "torch.export.save" + "torch.export.save", + "tf.keras.Model.save", + "tf.keras.Model.save_weights", + "tf.saved_model.export(format='tf_saved_model')" + ] + }, + "mlm:compile_method": { + "type": "string", + "minLength": 1, + "examples": [ + "aot", + "jit" ] }, "mlm:tasks": { From 357ad61f5b3e03f64276076c8dbd518e2041820a Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 12 Dec 2024 17:14:00 -0800 Subject: [PATCH 76/83] lint fixes --- README.md | 16 ++++------------ best-practices.md | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 2d16b3d..768a021 100644 --- a/README.md +++ b/README.md @@ -667,7 +667,7 @@ In order to provide more context, the following roles are also recommended were | href | string | URI to the model artifact. | | type | string | The media type of the artifact (see [Model Artifact Media-Type](#model-artifact-media-type). | | roles | \[string] | **REQUIRED** Specify `mlm:model`. Can include `["mlm:weights", "mlm:checkpoint"]` as applicable. | -| mlm:artifact_type | [Artifact Type](#artifact-type) | Specifies the kind of model artifact. Typically related to a particular ML framework. This is **REQUIRED** if the `mlm:model` role is specified. | +| mlm:artifact_type | [Artifact Type](./best-practices.md#framework-specific-artifact-types) | Specifies the kind of model artifact. Typically related to a particular ML framework. This is **REQUIRED** if the `mlm:model` role is specified. | | mlm:compile_method | string | Describes the method used to compile the ML model at either save time or runtime prior to inference. These options are mutually exclusive `["aot", "jit", null]`. | Recommended Asset `roles` include `mlm:weights` or `mlm:checkpoint` for model weights that need to be loaded by a @@ -701,19 +701,11 @@ is used for the artifact described by the media-type. However, users need to rem official. In order to validate the specific framework and artifact type employed by the model, the MLM properties `mlm:framework` (see [MLM Fields](#item-properties-and-collection-fields)) and `mlm:artifact_type` (see [Model Asset](#model-asset)) should be employed instead to perform this validation if needed. +See the [the best practices document](./best-practices.md#framework-specific-artifact-types) on suggested +fields for framework specific artifact types. [iana-media-type]: https://www.iana.org/assignments/media-types/media-types.xhtml - -#### Framework Specific Artifact Types - -The `mlm:artifact_type` field can be used to clarify how the model was saved which can help users understand how to load it or in -what runtime contexts it should be used. For example, PyTorch offers [various strategies][pytorch-frameworks] for providing model -definitions, such as Pickle (`.pt`), [TorchScript][pytorch-jit-script], or [PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] -(`.pt2`) approach. Since they all refer to the same ML framework, the [Model Artifact Media-Type](#model-artifact-media-type) can be -insufficient in this case to detect which strategy should be used to employ the model definition. -See the [the best practices document](./best-practices#framework-specific-artifact-types) on suggested - fields for framework specific artifact types. - +[pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html ### Source Code Asset diff --git a/best-practices.md b/best-practices.md index 4236db9..d778909 100644 --- a/best-practices.md +++ b/best-practices.md @@ -285,8 +285,19 @@ educational purposes only. ## Framework Specific Artifact Types -The following are some proposed *Artifact Type* values for the Model Asset's [`mlm:artifact_type` field](./README.md#model-asset). Other names are -permitted, as these values are not validated by the schema. Note that the names are selected using the framework-specific definitions to help the users understand how the model artifact was created, although these exact names are not strictly required either. +The `mlm:artifact_type` field can be used to clarify how the model was saved which +can help users understand how to load it or in what runtime contexts it should be used. For example, PyTorch offers +[various strategies][pytorch-frameworks] for providing model definitions, such as Pickle (`.pt`), + [TorchScript][pytorch-jit-script], or [PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] +(`.pt2`) approach. Since they all refer to the same ML framework, the +[Model Artifact Media-Type](./README.md#model-artifact-media-type) can be insufficient in this case to detect which +strategy should be used to employ the model definition. + +The following are some proposed *Artifact Type* values for the Model Asset's +[`mlm:artifact_type` field](./README.md#model-asset). Other names are +permitted, as these values are not validated by the schema. Note that the names are selected using the +framework-specific definitions to help the users understand how the model artifact was created, although these exact +names are not strictly required either. | Artifact Type | Description | |--------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -297,12 +308,10 @@ permitted, as these values are not validated by the schema. Note that the names | `tf.keras.Model.save_weights` | A [.weights.h5][keras-save-weights] file containing only model weights for use by Tensorflow or Keras. | | `tf.keras.Model.export(format='tf_saved_model')` | TF Saved Model is the [recommended format][tf-keras-recommended] by the Tensorflow team for whole model saving/loading for inference. See this example to [save and load models][keras-example] and the docs for [different save methods][keras-methods] in TF and Keras. Also available from `keras.Model.export(format='tf_saved_model')` | - [exported-program]: https://pytorch.org/docs/main/export.html#serialization -[pytorch-compile]: https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html +[pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html [pytorch-export]: https://pytorch.org/docs/main/export.html [pytorch-frameworks]: https://pytorch.org/docs/main/export.html#existing-frameworks -[pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html [pytorch-jit-script]: https://pytorch.org/docs/stable/jit.html [pytorch-save]: https://pytorch.org/tutorials/beginner/saving_loading_models.html [keras-save-weights]: https://keras.io/api/models/model_saving_apis/weights_saving_and_loading/#save_weights-method From b54dd11694f39796024d7bc38dbfcef743fd9e9d Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Thu, 12 Dec 2024 17:48:15 -0800 Subject: [PATCH 77/83] CHANGELOG updates --- CHANGELOG.md | 41 ++++++++++------------------------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 66b5335..fc558f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,44 +5,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased](https://github.com/stac-extensions/mlm/tree/main) +## [v1.4.0](https://github.com/stac-extensions/mlm/tree/v1.4.0) ### Added -- Add better descriptions about required and recommended *MLM Asset Roles* and their implications - (fixes [#54](https://github.com/stac-extensions/mlm/issues/54)). -- Add explicit check of `value_scaling` sub-fields `minimum`, `maximum`, `mean`, `stddev`, etc. for - corresponding `type` values `min-max` and `z-score` that depend on it. -- Allow different `value_scaling` operations per band/channel/dimension as needed by the model. -- Allow a `processing:expression` for a band/channel/dimension-specific `value_scaling` operation, - granting more flexibility in the definition of input preparation in contrast to having it applied - for the entire input (but still possible). +- mlm:compile_method with options 'aot' for Ahead of Time Compilation, 'jit' for Just-In Time Compilation ### Changed -- Explicitly disallow `mlm:name`, `mlm:input`, `mlm:output` and `mlm:hyperparameters` at the Asset level. - These fields describe the model as a whole and should therefore be defined in Item properties. -- Moved `norm_type` to `value_scaling` object to better reflect the expected operation, which could be another - operation than what is typically known as "normalization" or "standardization" techniques in machine learning. -- Moved `statistics` to `value_scaling` object to better reflect their mutual `type` and additional - properties dependencies. +- moved mlm:artifact_type field value descriptions that are framework specific to best-practices section. +- expanded suggested mlm:artifact_type values to include Tensorflow/Keras ### Deprecated - n/a ### Removed -- Removed `norm_type` enum values that were ambiguous regarding their expected result. - Instead, a `processing:expression` should be employed to explicitly define the calculation they represent. -- Removed `norm_clip` property. It is now represented under `value_scaling` objects with a - corresponding `type` definition. -- Removed `norm_by_channel` from `mlm:input` objects. If rescaling (previously normalization in the documentation) - is a single value, broadcasting to the relevant bands should be performed implicitly. - Otherwise, the amount of `value_scaling` objects should match the number of bands or channels involved in the input. +- n/a ### Fixed -- Fix missing `mlm:artifact_type` property check for a Model Asset definition - (fixes ). - The `mlm:artifact_type` is now mutually and exclusively required by the corresponding Asset with `mlm:model` role. -- Fix check of disallowed unknown/undefined `mlm:`-prefixed fields - (fixes [#41](https://github.com/stac-extensions/mlm/issues/41)). +- n/a ## [v1.3.0](https://github.com/stac-extensions/mlm/tree/v1.3.0) @@ -73,7 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 when a `mlm:input` references names in `bands` are now properly validated. - Fix the examples using `raster:bands` incorrectly defined in STAC Item properties. The correct use is for them to be defined under the STAC Asset using the `mlm:model` role. -- Fix the [EuroSAT ResNet pydantic example](stac_model/examples.py) that incorrectly referenced some `bands` +- Fix the [EuroSAT ResNet pydantic example](./stac_model/examples.py) that incorrectly referenced some `bands` in its `mlm:input` definition without providing any definition of those bands. The `eo:bands` properties have been added to the corresponding `model` Asset using the [`pystac.extensions.eo`](https://github.com/stac-utils/pystac/blob/main/pystac/extensions/eo.py) utilities. @@ -134,7 +113,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - more [Task Enum](README.md#task-enum) tasks - [Model Output Object](README.md#model-output-object) - batch_size and hardware summary -- [`mlm:accelerator`, `mlm:accelerator_constrained`, `mlm:accelerator_summary`](README.md#accelerator-type-enum) +- [`mlm:accelerator`, `mlm:accelerator_constrained`, `mlm:accelerator_summary`](./README.md#accelerator-type-enum) to specify hardware requirements for the model - Use common metadata [Asset Object](https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#asset-object) @@ -149,7 +128,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 STAC Item properties (top-level, not nested) to allow better search support by STAC API. - reorganized `dlm:architecture` nested fields to exist at the top level of properties as `mlm:name`, `mlm:summary` and so on to provide STAC API search capabilities. -- replaced `normalization:mean`, etc. with [statistics](README.md#bands-and-statistics) from STAC 1.1 common metadata +- replaced `normalization:mean`, etc. with [statistics](./README.md#bands-and-statistics) from STAC 1.1 common metadata - added `pydantic` models for internal schema objects in `stac_model` package and published to PYPI - specified [rel_type](README.md#relation-types) to be `derived_from` and specify how model item or collection json should be named @@ -165,7 +144,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - any `dlm`-prefixed field or property ### Removed -- Data Object, replaced with [Model Input Object](README.md#model-input-object) that uses the `name` field from +- Data Object, replaced with [Model Input Object](./README.md#model-input-object) that uses the `name` field from the [common metadata band object][stac-bands] which also records `data_type` and `nodata` type ### Fixed From 2c3c44ec5524dcfc803e559eb21ec45a304e2678 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 13 Dec 2024 15:02:40 -0800 Subject: [PATCH 78/83] correct the deleted unreleased items in the CHANGELOG, woops --- CHANGELOG.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc558f9..02e0ea2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [v1.4.0](https://github.com/stac-extensions/mlm/tree/v1.4.0) ### Added +- Add better descriptions about required and recommended *MLM Asset Roles* and their implications + (fixes [#54](https://github.com/stac-extensions/mlm/issues/54)). +- Add explicit check of `value_scaling` sub-fields `minimum`, `maximum`, `mean`, `stddev`, etc. for + corresponding `type` values `min-max` and `z-score` that depend on it. +- Allow different `value_scaling` operations per band/channel/dimension as needed by the model. +- Allow a `processing:expression` for a band/channel/dimension-specific `value_scaling` operation, + granting more flexibility in the definition of input preparation in contrast to having it applied + for the entire input (but still possible). - mlm:compile_method with options 'aot' for Ahead of Time Compilation, 'jit' for Just-In Time Compilation ### Changed +- Explicitly disallow `mlm:name`, `mlm:input`, `mlm:output` and `mlm:hyperparameters` at the Asset level. + These fields describe the model as a whole and should therefore be defined in Item properties. +- Moved `norm_type` to `value_scaling` object to better reflect the expected operation, which could be another + operation than what is typically known as "normalization" or "standardization" techniques in machine learning. +- Moved `statistics` to `value_scaling` object to better reflect their mutual `type` and additional + properties dependencies. - moved mlm:artifact_type field value descriptions that are framework specific to best-practices section. - expanded suggested mlm:artifact_type values to include Tensorflow/Keras @@ -18,10 +32,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - n/a ### Removed -- n/a +- Removed `norm_type` enum values that were ambiguous regarding their expected result. + Instead, a `processing:expression` should be employed to explicitly define the calculation they represent. +- Removed `norm_clip` property. It is now represented under `value_scaling` objects with a + corresponding `type` definition. +- Removed `norm_by_channel` from `mlm:input` objects. If rescaling (previously normalization in the documentation) + is a single value, broadcasting to the relevant bands should be performed implicitly. + Otherwise, the amount of `value_scaling` objects should match the number of bands or channels involved in the input. ### Fixed -- n/a +- Fix missing `mlm:artifact_type` property check for a Model Asset definition + (fixes ). + The `mlm:artifact_type` is now mutually and exclusively required by the corresponding Asset with `mlm:model` role. +- Fix check of disallowed unknown/undefined `mlm:`-prefixed fields + (fixes [#41](https://github.com/stac-extensions/mlm/issues/41)). ## [v1.3.0](https://github.com/stac-extensions/mlm/tree/v1.3.0) From 66ca180a212f894917dbac1e780d34edae6363dd Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 13 Dec 2024 15:45:01 -0800 Subject: [PATCH 79/83] correct best practices links, be more specific in table descriptions --- README.md | 27 +++++++++++++-------- best-practices.md | 54 +++++++++++++++++++++-------------------- json-schema/schema.json | 8 ++---- 3 files changed, 47 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 768a021..5bf4e99 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ connectors, please refer to the [STAC Model](./README_STAC_MODEL.md) document. - [Collection example](examples/collection.json): Shows the basic usage of the extension in a STAC Collection - [JSON Schema](https://stac-extensions.github.io/mlm/) - [Changelog](./CHANGELOG.md) -- [Open access paper](https://dl.acm.org/doi/10.1145/3681769.3698586) describing version 1.3.0 of the extension +- [Open access paper](https://dl.acm.org/doi/10.1145/3681769.3698586) describing version 1.3.0 of the extension - [SigSpatial 2024 GeoSearch Workshop presentation](/docs/static/sigspatial_2024_mlm.pdf) ## Item Properties and Collection Fields @@ -340,13 +340,13 @@ defined at the "Band Object" level, but at the [Model Input](#model-input-object This is because, in machine learning, it is common to need overall statistics for the dataset used to train the model to normalize all bands, rather than normalizing the values over a single product. Furthermore, statistics could be applied differently for distinct [Model Input](#model-input-object) definitions, in order to adjust for intrinsic -properties of the model. +properties of the model. Another distinction is that, depending on the model, statistics could apply to some inputs that have no reference to any `bands` definition. In such case, defining statistics under `bands` would not be possible, or would intrude ambiguous definitions. -Finally, contrary to the "`statistics`" property name employed by [Band Statistics][stac-1.1-stats], MLM employs the +Finally, contrary to the "`statistics`" property name employed by [Band Statistics][stac-1.1-stats], MLM employs the distinct name `value_scaling`, although similar `minimum`, `maximum`, etc. sub-fields are employed. This is done explicitly to disambiguate "informative" band statistics from "applied scaling operations" required by the model inputs. This highlights the fact that `value_scaling` are not *necessarily* equal @@ -449,7 +449,7 @@ Select one option from: | `scale` | `value` | $data / value$ | | `processing` | [Processing Expression](#processing-expression) | *according to `processing:expression`* | -When a scaling `type` approach is specified, it is expected that the parameters necessary +When a scaling `type` approach is specified, it is expected that the parameters necessary to perform their calculation are provided for the corresponding input dimension data. If none of the above values applies for a given dimension, `type: null` (literal `null`, not string) should be @@ -463,7 +463,7 @@ dimensions. In such case, implicit broadcasting of the unique [Value Scaling Obj performed for all applicable dimensions when running inference with the model. If a custom scaling operation, or a combination of more complex operations (with or without [Resize](#resize-enum)), -must be defined instead, a [Processing Expression](#processing-expression) reference can be specified in place of +must be defined instead, a [Processing Expression](#processing-expression) reference can be specified in place of the [Value Scaling Object](#value-scaling-object) of the respective input dimension, as shown below. ```json @@ -478,7 +478,7 @@ the [Value Scaling Object](#value-scaling-object) of the respective input dimens For operations such as L1 or L2 normalization, [Processing Expression](#processing-expression) should also be employed. This is because, depending on the [Model Input](#model-input-object) dimensions and reference data, there is an -ambiguity regarding "how" and "where" such normalization functions must be applied against the input data. +ambiguity regarding "how" and "where" such normalization functions must be applied against the input data. A custom mathematical expression should provide explicitly the data manipulation and normalization strategy. In situations of very complex `value_scaling` operations, which cannot be represented by any of the previous definition, @@ -667,8 +667,8 @@ In order to provide more context, the following roles are also recommended were | href | string | URI to the model artifact. | | type | string | The media type of the artifact (see [Model Artifact Media-Type](#model-artifact-media-type). | | roles | \[string] | **REQUIRED** Specify `mlm:model`. Can include `["mlm:weights", "mlm:checkpoint"]` as applicable. | -| mlm:artifact_type | [Artifact Type](./best-practices.md#framework-specific-artifact-types) | Specifies the kind of model artifact. Typically related to a particular ML framework. This is **REQUIRED** if the `mlm:model` role is specified. | -| mlm:compile_method | string | Describes the method used to compile the ML model at either save time or runtime prior to inference. These options are mutually exclusive `["aot", "jit", null]`. | +| mlm:artifact_type | [Artifact Type](./best-practices.md#framework-specific-artifact-types) | Specifies the kind of model artifact, any string is allowed. Typically related to a particular ML framework, see [Best Practices - Framework Specific Artifact Types](./best-practices.md#framework-specific-artifact-types) for **RECOMMENDED** values. This field is **REQUIRED** if the `mlm:model` role is specified. | +| mlm:compile_method | [Compile Method](#compile-method) | null | Describes the method used to compile the ML model either when the model is saved or at model runtime prior to inference. | Recommended Asset `roles` include `mlm:weights` or `mlm:checkpoint` for model weights that need to be loaded by a model definition and `mlm:compiled` for models that can be loaded directly without an intermediate model definition. @@ -701,12 +701,19 @@ is used for the artifact described by the media-type. However, users need to rem official. In order to validate the specific framework and artifact type employed by the model, the MLM properties `mlm:framework` (see [MLM Fields](#item-properties-and-collection-fields)) and `mlm:artifact_type` (see [Model Asset](#model-asset)) should be employed instead to perform this validation if needed. -See the [the best practices document](./best-practices.md#framework-specific-artifact-types) on suggested -fields for framework specific artifact types. +See the [Best Practices - Framework Specific Artifact Types](./best-practices.md#framework-specific-artifact-types) on + suggested fields for framework specific artifact types. [iana-media-type]: https://www.iana.org/assignments/media-types/media-types.xhtml [pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html +#### Compile Method + +| Compile Method | Description | +|-:-:------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| aot | [Ahead-of-Time Compilation](https://en.wikipedia.org/wiki/Ahead-of-time_compilation). Converts a higher level code description of a model and a model's learned weights to a lower level representation prior to executing the model. This compiled model may be more portable by having fewer runtime dependencies and optimized for specific hardware. | +| jit | [Just-in-Time Compilation](https://en.wikipedia.org/wiki/Just-in-time_compilation). Converts a higher level code description of a model and a model's learned weights to a lower level representation while executing the model. JIT provides more flexibility in the optimization approaches that can be applied to a model compared to AOT, but sacrifices portability and performance. | + ### Source Code Asset | Field Name | Type | Description | diff --git a/best-practices.md b/best-practices.md index d778909..2036523 100644 --- a/best-practices.md +++ b/best-practices.md @@ -3,18 +3,20 @@ This document makes a number of recommendations for creating real world ML Model Extensions. None of them are required to meet the core specification, but following these practices will improve the documentation of your model and make life easier for client tooling and users. They come about from practical experience of -implementors and introduce a bit more 'constraint' for those who are creating STAC objects representing their +implementors and introduce a bit more 'constraint' for those who are creating STAC objects representing their models or creating tools to work with STAC. -- [Using STAC Common Metadata Fields for the ML Model Extension](#using-stac-common-metadata-fields-for-the-ml-model-extension) -- [Recommended Extensions to Compose with the ML Model Extension](#recommended-extensions-to-compose-with-the-ml-model-extension) - - [Processing Extension](#processing-extension) - - [ML-AOI and Label Extensions](#ml-aoi-and-label-extensions) - - [Classification Extension](#classification-extension) - - [Scientific Extension](#scientific-extension) - - [File Extension](#file-extension) - - [Example Extension](#example-extension) - - [Version Extension](#version-extension) +- [ML Model Extension Best Practices](#ml-model-extension-best-practices) + - [Using STAC Common Metadata Fields for the ML Model Extension](#using-stac-common-metadata-fields-for-the-ml-model-extension) + - [Recommended Extensions to Compose with the ML Model Extension](#recommended-extensions-to-compose-with-the-ml-model-extension) + - [Processing Extension](#processing-extension) + - [ML-AOI and Label Extensions](#ml-aoi-and-label-extensions) + - [Classification Extension](#classification-extension) + - [Scientific Extension](#scientific-extension) + - [File Extension](#file-extension) + - [Example Extension](#example-extension) + - [Version Extension](#version-extension) + - [Framework Specific Artifact Types](#framework-specific-artifact-types) ## Using STAC Common Metadata Fields for the ML Model Extension @@ -68,8 +70,8 @@ information regarding these references, see the [ML-AOI and Label Extensions](#m ### Processing Extension -It is recommended to use at least the `processing:lineage` and `processing:level` fields from -the [Processing Extension](https://github.com/stac-extensions/processing) to make it clear +It is recommended to use at least the `processing:lineage` and `processing:level` fields from +the [Processing Extension](https://github.com/stac-extensions/processing) to make it clear how [Model Input Objects](./README.md#model-input-object) are processed by the data provider prior to an inference preprocessing pipeline. This can help users locate the correct version of the dataset used during model inference or help them reproduce the data processing pipeline. @@ -99,7 +101,7 @@ Furthermore, the [`processing:expression`](https://github.com/stac-extensions/pr should be specified with a reference to the STAC Item employing the MLM extension to provide full context of the source of the derived product. -A potential representation of a STAC Asset could be as follows: +A potential representation of a STAC Asset could be as follows: ```json { "model-output": { @@ -186,7 +188,7 @@ leading to a new MLM STAC Item definition (see also [STAC Version Extension](#ve ### Classification Extension -Since it is expected that a model will provide some kind of classification values as output, the +Since it is expected that a model will provide some kind of classification values as output, the [Classification Extension](https://github.com/stac-extensions/classification) can be leveraged inside MLM definition to indicate which class values can be contained in the resulting output from the model prediction. @@ -201,7 +203,7 @@ For more details, see the [Model Output Object](README.md#model-output-object) d ### Scientific Extension -Provided that most models derive from previous scientific work, it is strongly recommended to employ the +Provided that most models derive from previous scientific work, it is strongly recommended to employ the [Scientific Extension][stac-ext-sci] to provide references corresponding to the original source of the model (`sci:doi`, `sci:citation`). This can help users find more information about the model, its underlying architecture, or ways to improve it by piecing together the related work (`sci:publications`) that @@ -285,17 +287,17 @@ educational purposes only. ## Framework Specific Artifact Types -The `mlm:artifact_type` field can be used to clarify how the model was saved which -can help users understand how to load it or in what runtime contexts it should be used. For example, PyTorch offers -[various strategies][pytorch-frameworks] for providing model definitions, such as Pickle (`.pt`), - [TorchScript][pytorch-jit-script], or [PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] -(`.pt2`) approach. Since they all refer to the same ML framework, the -[Model Artifact Media-Type](./README.md#model-artifact-media-type) can be insufficient in this case to detect which -strategy should be used to employ the model definition. +The `mlm:artifact_type` field can be used to clarify how the model was saved which can help users understand how to +load it or in which runtime contexts it should be used. Applying this artifact type definition should restrict +explicitly its use to a specific runtime. For example, PyTorch offers [various strategies][pytorch-frameworks] for +exporting models, such as Pickle (`.pt`), [TorchScript][pytorch-jit-script], and +[PyTorch Ahead-of-Time Compilation][pytorch-aot-inductor] (`.pt2`). Since each approach is associated with the same +ML framework, the [Model Artifact Media-Type](./README.md#model-artifact-media-type) can be insufficient in this case +to detect which strategy should be used to deploy the model artifact. -The following are some proposed *Artifact Type* values for the Model Asset's +The following are some proposed *Artifact Type* values for the Model Asset's [`mlm:artifact_type` field](./README.md#model-asset). Other names are -permitted, as these values are not validated by the schema. Note that the names are selected using the +permitted, as these values are not validated by the schema. Note that the names are selected using the framework-specific definitions to help the users understand how the model artifact was created, although these exact names are not strictly required either. @@ -306,7 +308,7 @@ names are not strictly required either. | `torch.export.save` | A model artifact storing an [ExportedProgram][exported-program] obtained by [`torch.export.export`][pytorch-export] (i.e.: `.pt2`). | | `tf.keras.Model.save` | Saves a [.keras model file][keras-model], a unified zip archive format containing the architecture, weights, optimizer, losses, and metrics. | | `tf.keras.Model.save_weights` | A [.weights.h5][keras-save-weights] file containing only model weights for use by Tensorflow or Keras. | -| `tf.keras.Model.export(format='tf_saved_model')` | TF Saved Model is the [recommended format][tf-keras-recommended] by the Tensorflow team for whole model saving/loading for inference. See this example to [save and load models][keras-example] and the docs for [different save methods][keras-methods] in TF and Keras. Also available from `keras.Model.export(format='tf_saved_model')` | +| `tf.keras.Model.export` | [TF Saved Model][tf-saved-model] is the [recommended format][tf-keras-recommended] by the Tensorflow team for whole model saving/loading for inference. See the docs for [different save methods][keras-methods] in TF and Keras. | [exported-program]: https://pytorch.org/docs/main/export.html#serialization [pytorch-aot-inductor]: https://pytorch.org/docs/main/torch.compiler_aot_inductor.html @@ -315,7 +317,7 @@ names are not strictly required either. [pytorch-jit-script]: https://pytorch.org/docs/stable/jit.html [pytorch-save]: https://pytorch.org/tutorials/beginner/saving_loading_models.html [keras-save-weights]: https://keras.io/api/models/model_saving_apis/weights_saving_and_loading/#save_weights-method -[keras-example]: https://keras.io/guides/serialization_and_saving/ +[tf-saved-model]: https://keras.io/api/models/model_saving_apis/export/ [tf-keras-recommended]: https://www.tensorflow.org/guide/saved_model#creating_a_savedmodel_from_keras [keras-methods]: https://keras.io/2.16/api/models/model_saving_apis/ [keras-model]: https://keras.io/api/models/model_saving_apis/model_saving_and_loading/ diff --git a/json-schema/schema.json b/json-schema/schema.json index 0dbf2ad..813bb17 100644 --- a/json-schema/schema.json +++ b/json-schema/schema.json @@ -356,12 +356,8 @@ "$comment": "Particularity of the 'not/required' approach: they must be tested one by one. Otherwise, it validates that they are all (simultaneously) not present.", "not": { "anyOf": [ - { - "required": [ - "mlm:artifact_type", - "mlm:compile_method" - ] - } + {"required": ["mlm:artifact_type"]}, + {"required": ["mlm:compile_method"]} ] } }, From d770629cf2dbc2528cbaa5b6ec0129c9646c871f Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Mon, 16 Dec 2024 11:23:01 -0800 Subject: [PATCH 80/83] code ticks --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02e0ea2..a9d542b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Allow a `processing:expression` for a band/channel/dimension-specific `value_scaling` operation, granting more flexibility in the definition of input preparation in contrast to having it applied for the entire input (but still possible). -- mlm:compile_method with options 'aot' for Ahead of Time Compilation, 'jit' for Just-In Time Compilation +- Add optional `mlm:compile_method` field at the Asset level with options `aot` for Ahead of Time Compilation, `jit` for Just-In Time Compilation. ### Changed - Explicitly disallow `mlm:name`, `mlm:input`, `mlm:output` and `mlm:hyperparameters` at the Asset level. @@ -25,8 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 operation than what is typically known as "normalization" or "standardization" techniques in machine learning. - Moved `statistics` to `value_scaling` object to better reflect their mutual `type` and additional properties dependencies. -- moved mlm:artifact_type field value descriptions that are framework specific to best-practices section. -- expanded suggested mlm:artifact_type values to include Tensorflow/Keras +- moved `mlm:artifact_type` field value descriptions that are framework specific to best-practices section. +- expanded suggested `mlm:artifact_type` values to include Tensorflow/Keras. ### Deprecated - n/a From 4b5898e45824e99dacc1a3e8437a04dd694cd1f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jan 2025 20:55:41 +0000 Subject: [PATCH 81/83] :arrow_up: Bump actions/cache from 4.1.2 to 4.2.0 Bumps [actions/cache](https://github.com/actions/cache) from 4.1.2 to 4.2.0. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v4.1.2...v4.2.0) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/stac-model.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stac-model.yml b/.github/workflows/stac-model.yml index 10dbe5e..25c71ca 100644 --- a/.github/workflows/stac-model.yml +++ b/.github/workflows/stac-model.yml @@ -20,7 +20,7 @@ jobs: run: make setup - name: Set up cache - uses: actions/cache@v4.1.2 + uses: actions/cache@v4.2.0 with: path: .venv key: venv-${{ matrix.python-version }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('uv.lock') }} From 3a3d2620a5bec2363e8763e7220a1433987e259a Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Fri, 3 Jan 2025 12:52:15 -0800 Subject: [PATCH 82/83] fix line length --- CHANGELOG.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9d542b..02567e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,15 +8,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [v1.4.0](https://github.com/stac-extensions/mlm/tree/v1.4.0) ### Added -- Add better descriptions about required and recommended *MLM Asset Roles* and their implications - (fixes [#54](https://github.com/stac-extensions/mlm/issues/54)). +- Add better descriptions about required and recommended *MLM Asset Roles* and + their implications (fixes + [#54](https://github.com/stac-extensions/mlm/issues/54)). - Add explicit check of `value_scaling` sub-fields `minimum`, `maximum`, `mean`, `stddev`, etc. for corresponding `type` values `min-max` and `z-score` that depend on it. - Allow different `value_scaling` operations per band/channel/dimension as needed by the model. - Allow a `processing:expression` for a band/channel/dimension-specific `value_scaling` operation, granting more flexibility in the definition of input preparation in contrast to having it applied for the entire input (but still possible). -- Add optional `mlm:compile_method` field at the Asset level with options `aot` for Ahead of Time Compilation, `jit` for Just-In Time Compilation. +- Add optional `mlm:compile_method` field at the Asset level with options `aot` + for Ahead of Time Compilation, `jit` for Just-In Time Compilation. ### Changed - Explicitly disallow `mlm:name`, `mlm:input`, `mlm:output` and `mlm:hyperparameters` at the Asset level. @@ -143,7 +145,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [Asset Object](https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#asset-object) to refer to model asset and source code. - use `classification:classes` in Model Output -- add `scene-classification` to the Enum Tasks to allow disambiguation between pixel-wise and patch-based classification +- add `scene-classification` to the Enum Tasks to allow disambiguation between + pixel-wise and patch-based classification ### Changed - `disk_size` replaced by `file:size` (see [Best Practices - File Extension](best-practices.md#file-extension)) From aee9d16e7a11c49f5f7da425a705dffb8642f258 Mon Sep 17 00:00:00 2001 From: Ryan Avery Date: Tue, 21 Jan 2025 09:56:20 -0800 Subject: [PATCH 83/83] escape pipe --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5bf4e99..4c99598 100644 --- a/README.md +++ b/README.md @@ -668,7 +668,7 @@ In order to provide more context, the following roles are also recommended were | type | string | The media type of the artifact (see [Model Artifact Media-Type](#model-artifact-media-type). | | roles | \[string] | **REQUIRED** Specify `mlm:model`. Can include `["mlm:weights", "mlm:checkpoint"]` as applicable. | | mlm:artifact_type | [Artifact Type](./best-practices.md#framework-specific-artifact-types) | Specifies the kind of model artifact, any string is allowed. Typically related to a particular ML framework, see [Best Practices - Framework Specific Artifact Types](./best-practices.md#framework-specific-artifact-types) for **RECOMMENDED** values. This field is **REQUIRED** if the `mlm:model` role is specified. | -| mlm:compile_method | [Compile Method](#compile-method) | null | Describes the method used to compile the ML model either when the model is saved or at model runtime prior to inference. | +| mlm:compile_method | [Compile Method](#compile-method) \| null | Describes the method used to compile the ML model either when the model is saved or at model runtime prior to inference. | Recommended Asset `roles` include `mlm:weights` or `mlm:checkpoint` for model weights that need to be loaded by a model definition and `mlm:compiled` for models that can be loaded directly without an intermediate model definition.