From feabe92c9cae0e0e3ead1a92fafa481561853d57 Mon Sep 17 00:00:00 2001 From: aagrande <47125106+aagrande@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:17:02 -0400 Subject: [PATCH] add README example to tutorials --- docs/docs/doctrees/environment.pickle | Bin 0 -> 500082 bytes docs/docs/doctrees/getting-started.doctree | Bin 0 -> 15210 bytes docs/docs/doctrees/index.doctree | Bin 0 -> 5002 bytes docs/docs/doctrees/modules.doctree | Bin 0 -> 2812 bytes .../nbsphinx/tutorials/README_example.ipynb | 209 ++++ docs/docs/doctrees/release-notes.doctree | Bin 0 -> 2603 bytes docs/docs/doctrees/samples.doctree | Bin 0 -> 95500 bytes docs/docs/doctrees/treeffuser.doctree | Bin 0 -> 190307 bytes docs/docs/doctrees/tutorials.doctree | Bin 0 -> 2797 bytes .../doctrees/tutorials/README_example.doctree | Bin 0 -> 16635 bytes docs/docs/html/.buildinfo | 4 + docs/docs/html/.nojekyll | 0 docs/docs/html/_images/README_example.png | Bin 0 -> 175080 bytes docs/docs/html/_modules/index.html | 305 ++++++ .../html/_modules/treeffuser/samples.html | 688 +++++++++++++ .../html/_modules/treeffuser/treeffuser.html | 458 +++++++++ .../html/_sources/getting-started.rst.txt | 121 +++ docs/docs/html/_sources/index.rst.txt | 29 + docs/docs/html/_sources/modules.rst.txt | 8 + docs/docs/html/_sources/release-notes.rst.txt | 4 + docs/docs/html/_sources/samples.rst.txt | 11 + docs/docs/html/_sources/treeffuser.rst.txt | 11 + docs/docs/html/_sources/tutorials.rst.txt | 7 + .../tutorials/README_example.ipynb.txt | 209 ++++ docs/docs/html/_static/basic.css | 925 ++++++++++++++++++ docs/docs/html/_static/debug.css | 69 ++ docs/docs/html/_static/doctools.js | 156 +++ .../html/_static/documentation_options.js | 13 + docs/docs/html/_static/file.png | Bin 0 -> 286 bytes docs/docs/html/_static/language_data.js | 198 ++++ docs/docs/html/_static/logo.svg | 25 + docs/docs/html/_static/minus.png | Bin 0 -> 90 bytes .../_static/nbsphinx-broken-thumbnail.svg | 9 + .../docs/html/_static/nbsphinx-code-cells.css | 258 +++++ docs/docs/html/_static/nbsphinx-gallery.css | 31 + .../html/_static/nbsphinx-no-thumbnail.svg | 9 + docs/docs/html/_static/plus.png | Bin 0 -> 90 bytes docs/docs/html/_static/pygments.css | 258 +++++ .../html/_static/scripts/furo-extensions.js | 0 docs/docs/html/_static/scripts/furo.js | 3 + .../html/_static/scripts/furo.js.LICENSE.txt | 7 + docs/docs/html/_static/scripts/furo.js.map | 1 + docs/docs/html/_static/searchtools.js | 619 ++++++++++++ docs/docs/html/_static/skeleton.css | 296 ++++++ docs/docs/html/_static/sphinx_highlight.js | 154 +++ .../html/_static/styles/furo-extensions.css | 2 + .../_static/styles/furo-extensions.css.map | 1 + docs/docs/html/_static/styles/furo.css | 2 + docs/docs/html/_static/styles/furo.css.map | 1 + docs/docs/html/genindex.html | 485 +++++++++ docs/docs/html/getting-started.html | 441 +++++++++ docs/docs/html/index.html | 344 +++++++ docs/docs/html/modules.html | 336 +++++++ docs/docs/html/objects.inv | Bin 0 -> 1371 bytes docs/docs/html/py-modindex.html | 333 +++++++ docs/docs/html/release-notes.html | 323 ++++++ docs/docs/html/samples.html | 676 +++++++++++++ docs/docs/html/search.html | 317 ++++++ docs/docs/html/searchindex.js | 1 + docs/docs/html/treeffuser.html | 738 ++++++++++++++ docs/docs/html/tutorials.html | 342 +++++++ docs/docs/html/tutorials/README_example.html | 469 +++++++++ docs/docs/html/tutorials/README_example.ipynb | 209 ++++ docs/docs/source/conf.py | 1 + docs/docs/source/tutorials.rst | 5 +- .../source/tutorials/README_example.ipynb | 209 ++++ 66 files changed, 10329 insertions(+), 1 deletion(-) create mode 100644 docs/docs/doctrees/environment.pickle create mode 100644 docs/docs/doctrees/getting-started.doctree create mode 100644 docs/docs/doctrees/index.doctree create mode 100644 docs/docs/doctrees/modules.doctree create mode 100644 docs/docs/doctrees/nbsphinx/tutorials/README_example.ipynb create mode 100644 docs/docs/doctrees/release-notes.doctree create mode 100644 docs/docs/doctrees/samples.doctree create mode 100644 docs/docs/doctrees/treeffuser.doctree create mode 100644 docs/docs/doctrees/tutorials.doctree create mode 100644 docs/docs/doctrees/tutorials/README_example.doctree create mode 100644 docs/docs/html/.buildinfo create mode 100644 docs/docs/html/.nojekyll create mode 100644 docs/docs/html/_images/README_example.png create mode 100644 docs/docs/html/_modules/index.html create mode 100644 docs/docs/html/_modules/treeffuser/samples.html create mode 100644 docs/docs/html/_modules/treeffuser/treeffuser.html create mode 100644 docs/docs/html/_sources/getting-started.rst.txt create mode 100644 docs/docs/html/_sources/index.rst.txt create mode 100644 docs/docs/html/_sources/modules.rst.txt create mode 100644 docs/docs/html/_sources/release-notes.rst.txt create mode 100644 docs/docs/html/_sources/samples.rst.txt create mode 100644 docs/docs/html/_sources/treeffuser.rst.txt create mode 100644 docs/docs/html/_sources/tutorials.rst.txt create mode 100644 docs/docs/html/_sources/tutorials/README_example.ipynb.txt create mode 100644 docs/docs/html/_static/basic.css create mode 100644 docs/docs/html/_static/debug.css create mode 100644 docs/docs/html/_static/doctools.js create mode 100644 docs/docs/html/_static/documentation_options.js create mode 100644 docs/docs/html/_static/file.png create mode 100644 docs/docs/html/_static/language_data.js create mode 100644 docs/docs/html/_static/logo.svg create mode 100644 docs/docs/html/_static/minus.png create mode 100644 docs/docs/html/_static/nbsphinx-broken-thumbnail.svg create mode 100644 docs/docs/html/_static/nbsphinx-code-cells.css create mode 100644 docs/docs/html/_static/nbsphinx-gallery.css create mode 100644 docs/docs/html/_static/nbsphinx-no-thumbnail.svg create mode 100644 docs/docs/html/_static/plus.png create mode 100644 docs/docs/html/_static/pygments.css create mode 100644 docs/docs/html/_static/scripts/furo-extensions.js create mode 100644 docs/docs/html/_static/scripts/furo.js create mode 100644 docs/docs/html/_static/scripts/furo.js.LICENSE.txt create mode 100644 docs/docs/html/_static/scripts/furo.js.map create mode 100644 docs/docs/html/_static/searchtools.js create mode 100644 docs/docs/html/_static/skeleton.css create mode 100644 docs/docs/html/_static/sphinx_highlight.js create mode 100644 docs/docs/html/_static/styles/furo-extensions.css create mode 100644 docs/docs/html/_static/styles/furo-extensions.css.map create mode 100644 docs/docs/html/_static/styles/furo.css create mode 100644 docs/docs/html/_static/styles/furo.css.map create mode 100644 docs/docs/html/genindex.html create mode 100644 docs/docs/html/getting-started.html create mode 100644 docs/docs/html/index.html create mode 100644 docs/docs/html/modules.html create mode 100644 docs/docs/html/objects.inv create mode 100644 docs/docs/html/py-modindex.html create mode 100644 docs/docs/html/release-notes.html create mode 100644 docs/docs/html/samples.html create mode 100644 docs/docs/html/search.html create mode 100644 docs/docs/html/searchindex.js create mode 100644 docs/docs/html/treeffuser.html create mode 100644 docs/docs/html/tutorials.html create mode 100644 docs/docs/html/tutorials/README_example.html create mode 100644 docs/docs/html/tutorials/README_example.ipynb create mode 100644 docs/docs/source/tutorials/README_example.ipynb diff --git a/docs/docs/doctrees/environment.pickle b/docs/docs/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..e9b86a26dc8637f7c692f95de5703d6cc451a160 GIT binary patch literal 500082 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 literal 0 HcmV?d00001 diff --git a/docs/docs/doctrees/index.doctree b/docs/docs/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bec18bd2edeb5e252604e7ce4e391488cdc9540a GIT binary patch literal 5002 zcmds5Pj4Ja6?fu{?HPOQjI#-Z#G*ILW}Q_$V?qwQCXTcU64F|-M6xVeLDa74u9>R1 zr@ObS+L<}5fWtey{q^^i1N2jo^Z%vASPXy?XD} z@BQAZ{#E0*zr3_y|ICJpg$&1C=KEpfbCsDDKl0KM4|Vn;yY=hri)`C86ZTX^Y2xwB zEMSHwWZ)+}%pPNKo#ty9sBWQP*^5Rq>qWzSr4!BvgH-XvDfKfgqtF>Kr6C;1fZuk! zgfq>3r$1@scI|wgO7B={mS_i)AElx5F@AS`;Ou^X@9qbCyB|7tcJJKnwmyqe$77+x zd=_g*3#qJ12e!lk*F2awI&vm(!U^QD42QR!eySa*9VMbP@ExX|fWwxS7loS15IVS% zM3HumbmWowM~*KO?rC|#yO~&ioQbBn@ChGNp#J|H{4%4nH%l?YLF-JcsXj9;rgb6_ zH~@u!u_%275SV2zU`j!V=SIjz`O}J@#?zNR^NtffuydN@QLv|CMu1w06AoCM@GLdU znhj}1CR*Z(STs$y1WSgur4obpdOyVq)nmhig+A~7h^u2A#l0!WdRV9OfBB-G#Kdto zQ93gh0vYn`ppo`*f{Va*g>)eG!MzdJ%n@40I~?dc*}nm+VWPMJFohby*uSy+Lnlpw z{UO&HP};HhxLfFMsVDB1!Tljq!zqb+gr9qU8 z7hiQ*}4ibd=6vLYNuVa;)|M3CM_L>gM^fY*jhYZ}3pdG|}hvL>@`Wj=&u#YhPem>nAxM~e+0&aAwv8eBV^JhFjB6CXNqp2-O z$bzaYmAq|j+ZG+OTAQCut$S3r4vubEM_n8*2gZTLlJEe7wfa7Y6!~cYZJ5@6$f*W$Cya>UO*_fo zck=gV88>S(^n%pqRIiE3x5XdCpTwWVU%6Qsv9Zr%EwY32s0gUT#4v~E!Z3*X*{N9) z()ZCcoSJr_q!O%z>8Ot+^s|EnunqB#io#%mxh?Q>&0+C-@kj9&PT>Dt0sao+{$ieP zklcBQcbwF2=bf-OCsBVV&Vd24Ha$GmDN2M!ee?R6ww zk}?&yI`>_j-Fp9}ziR83M)nJSgT}AkWb5zDY~6X^*#jN!9SwPC(RNhs{ECsv=fA(n z#@AlGG0=F%#?z5%o%IPf28^p0cu%&q<5A zPC&hf!?m@$06a?NR9U%v+6WX~lGrwHY4k@bu+`B8^AFL+;1iW~{KuMs7rjM2%>@|wYNBrA3LS-4m%~4%rRYmx^iv z94V|^E>i_*w+3g>UWGRAptM~~bIYP>uFw-U!7YZ0B+iDk`8e`bl)LKn;GF4Dz5zMm z5I_v%Nb2n4g|GkFFzYdor>!e_xJHsb%C}3&VZKdQ7`4~yL9Dv*M2jfwM#&I4b(v;b z6EM@&99LxIAYH|Hyz}nvT|{&}8F+K*NitP`vs91tWdzz|o^&PG1G@((p-1-+Y}Q2e zL>~Fn7p#~qpmO9^=~?yOZhjj)H5b(c_wTVQN@sRf}A4lX`_psBMr=MIblw$Q^7ZqSDjpPS7YX@2L17}^Ha z%My_)uIrF5lQ4gNvW6so(!@Vynk3ef7eeD+MdMelPS=i zODI9hdAZ4TNj?wvRh;vv9|aW@?9{jBgw^ckjK*fUt6j7?qu=(y88YYcyslyd4JPQr zLu(F%puTuf5Fp6#0R?3FK_P#E5PX?EL?Yluij=}94TZDMH>_A>M!Z^y?eVP^O)lUv Tr0*gvpNOvD1iD?M{qDa3P$+iQ literal 0 HcmV?d00001 diff --git a/docs/docs/doctrees/modules.doctree b/docs/docs/doctrees/modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1938ef914b9689b0993833392998910ca85a4cfb GIT binary patch literal 2812 zcmZWrTW=gS6i$=uHM`j+Z4pu%XoU)`XtD_LfOtUMUZBznRe+GH%JR;5)>b^@!Ix(9 zPzfH28p&@pKaiim1MhsEnVsD%m8MxAAD`>@9sBprU;hkus(*fBN-m1!8BNndrOX81 zPgUY_R@m@1JpLoR3Xl9i(+i`VPFV0e&`7wDsb)oZ5&U6Pw?dk;=6uhv#0pik$9ac$ zdGAGd#0S1(g_Ue$%a6bQ@%#JFSjJ!v_M;;7_J3l_7{K=S>rhA3Eh+SE;75Ky+JO0< z?>2GH{JsdN(EPLp%ZvZ&*H z&(cNQ3Vg!v@)5ts_xOqba{9Aj+Dz#}(;{Wl@0dBas+?NQSe7~LO%bB0|EuGh<|=iP znKNyW#CuP7-5go>6P1_B73oHS>e}%g_*O}@`2W54krRJ_x_yA}A-<3BJ;ry}_ZmOQ z73I>R%J9+557)7UKf}!T49!c#g9Y;=Q6$o(EE7=@8}}9ehWUO@mnkbP4^MBPbhNCx zj6yG@nujajfVC$4n3m!c{cPYyS2e3P?r&~1MT{1Q zu(($@yNV3mx*pYL2rUHp6Mx$R5k}HjDN<^+(9F~j>{w-~tjp2pRMm0O-wl75I2{2_ zS~!nZk{Z^&Z1=G|jjouGZ z3Sw9Q0E+{yltrj${xbL*)8G&45D5I9Lt)q~ot9XQ(G3zQ5_b_wC${o3_~Q&_3T4^G z<{LkbqXAGL%S`D!yzz$ym@Elk9|w+s!MnADNmfb7g|M8gXbOMLfrhs;KhmsJ+7iiL zGL&=I4>^_Xvg41~QlN^KT4z>D9p6dW+%4el@Pg_BRfL9SG>2q>mL)8v6yp;GYDO@b zR0^%&2hL`vpPw3m-}kO>5~j7%gkuCqz!ES(Zix+kQdfS%N~f|C{K?kNmI;mkYNP7_ zR!8q$-`G0oZ^i@wJi}2RiG(moB`p??E*Q$4V!aEh`dgYMN~Z+825jIaPKcTBCaTDg zBg!Gt6&iTgA5v!(S&RIx0M^E-%S+PY5ml`O0#MWimC@j&l2mMntzU~u!(6J!GLLAw z$(E%ujBK8)Ad*<}QW#O=bwW~M=v>A`nkaiKo`7>BBxAsgigYkKZq&$XocVX+FF3(q zu87HsXe~v*4={|-r+SGgcNED6*c1z(P>NjG@WamE|91Rg$x6~ri6AFb}5O<`T{Zmd-(aG8K{FPPjS4#>4Um^m|n1zo!3AD}$%c+nA zPn$S)tEi8f#|h9XvwEam`8`&=j1L9huZIcP3oMEv6<~)Ymg)t=aKag_FIt39}8aj^1Q9Xh^dAH!AK z_$IisZL8VAm5-5;;9&z);6h21lqf86z>U%SwvoR@@~^`)fFEx=&_11~V$T2o literal 0 HcmV?d00001 diff --git a/docs/docs/doctrees/nbsphinx/tutorials/README_example.ipynb b/docs/docs/doctrees/nbsphinx/tutorials/README_example.ipynb new file mode 100644 index 00000000..05fcf404 --- /dev/null +++ b/docs/docs/doctrees/nbsphinx/tutorials/README_example.ipynb @@ -0,0 +1,209 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quick start: Forecasting with synthetic data\n", + "\n", + "In this notebook, we train Treeffuser on synthethic data and then visualize both the original and model-generated samples to explore how well Treeffuser captures the underlying distribution of the data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting started" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We first install `treeffuser` and import the relevant libraries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install treeffuser\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "from treeffuser import Treeffuser" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We simulate a non-linear, bimodal response of $y$ given $x$, where the two modes follow two different response functions: one is a sine function and the other is a cosine function over $x$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "seed = 0 # fixing the random seed for reproducibility\n", + "n = 5000 # number of data points\n", + "\n", + "rng = np.random.default_rng(seed=seed)\n", + "x = rng.uniform(0, 2 * np.pi, size=n) # x values in the range [0, 2π)\n", + "z = rng.integers(0, 2, size=n) # response function assignments\n", + "\n", + "y = z * np.sin(x - np.pi / 2) + (1 - z) * np.cos(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also introduce heteroscedastic, fat-tailed noise from a Laplace distribution, meaning the variability of $y$ increases with $x$ and may result in large outliers." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "y += rng.laplace(scale=x / 30, size=n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fitting Treffuser and producing samples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Fitting Treeffuser and generating samples is very simple, as Treeffuser adheres to the `sklearn.base.BaseEstimator` class. Fitting amounts to initializing the model and calling the `fit` method, just like any `scikit-learn` estimator. Samples are then generated using the `sample` method." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "model = Treeffuser(sde_initialize_from_data=True, seed=seed)\n", + "model.fit(x, y)\n", + "\n", + "y_samples = model.sample(x, n_samples=1, seed=seed, verbose=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting the samples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We create a scatter plot to visualize both the original data and the samples produced by Treeffuser. The samples closely reflect the underlying response distributions that generated the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.scatter(x, y, s=1, label=\"observed data\")\n", + "plt.scatter(x, y_samples[0, :], s=1, alpha=0.7, label=\"Treeffuser samples\")\n", + "\n", + "plt.xlabel(\"$x$\")\n", + "plt.ylabel(\"$y$\")\n", + "\n", + "legend = plt.legend(loc=\"upper center\", scatterpoints=1, bbox_to_anchor=(0.5, -0.125), ncol=2)\n", + "for legend_handle in legend.legend_handles:\n", + " legend_handle.set_sizes([32]) # change marker size for legend\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The samples generated by Treeffuser can be used to compute any downstream estimates of interest." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = np.array(np.pi).reshape((1, 1))\n", + "y_samples = model.sample(x, n_samples=100, verbose=True) # y_samples.shape[0] is 100\n", + "\n", + "# Estimate downstream quantities of interest\n", + "y_mean = y_samples.mean(axis=0) # conditional mean for each x\n", + "y_std = y_samples.std(axis=0) # conditional std for each x\n", + "\n", + "print(f\"Mean of the samples: {y_mean}\")\n", + "print(f\"Standard deviation of the samples: {y_std} \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For convenience, we also provide a class Samples that can estimate standard quantities." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from treeffuser.samples import Samples\n", + "\n", + "y_samples = Samples(y_samples)\n", + "y_mean = y_samples.sample_mean() # same as before\n", + "y_std = y_samples.sample_std() # same as before\n", + "y_quantiles = y_samples.sample_quantile(q=[0.05, 0.95]) # conditional quantiles for each x\n", + "\n", + "print(f\"Mean of the samples: {y_mean}\")\n", + "print(f\"Standard deviation of the samples: {y_std} \")\n", + "print(f\"5th and 95th quantiles of the samples: {y_quantiles.reshape(-1)}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/doctrees/release-notes.doctree b/docs/docs/doctrees/release-notes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..649dadb48490fab56069339fb93c4f50497bdd7c GIT binary patch literal 2603 zcmZ`*OK%%D5O!=!wroj`^Fo2dX@Vkcg2q-4JrunJNOGzHAA+{GfS`7{A|Woh~ z0op?V8{jSM5A2WVy&rd1Ye_&2thF;7&hwj@{j>M?lY_1LFC5v53$-|-d9HNMYz+Ik z&V0#~i(lf4zv8F(JPZu|Xtg&Pi(v~A85c4)OvU#xjFY$%(w?>V_bkht(5k!6d%Vy0 z-pA*B5PD8H$yScS=pB=cTJ}U~2lGh~a=X8>MRH*C_;YML>Q@x@UF64MKstx{PUyFO zUW8pK6pI&rO2Ywl&WNc`22wmbBDcx+y-ZST!Nhw{(Xx5l&wX`6OldYZtVl9G>^VA1 zN0A@#hkVE%@g05=-cEkA%-9K?8LDzNdCTnF>1yH(V@2U{Hi3(_`PcY2F-_E`b<}6Z zB9zDH+kT4J2Z$}Hs`zT2hHrE!)a;4XT0L#j^dPJ=+vLErN#ofCf1KjyUn6M#6p8%? z&oeyV;dz08`1kyjpYWHky}Jy^Pg!>%jMn^&bg7{`Xv;=dRUSaqPUAtX8e#pv4_(Fh z%W%&jfmYH4A5s}TGt4#>>pAVHjOSb7U@60LkUoWQD~vO55*|ob{o#_+pdjp9<{a_| zfFE~=EsR!=< z7;a5sIBZ-XusesqK}&igL5-ZwNJ3OPg)2SyY%XKCQ$S6E!ph-Q7^O~9z9fr6n=)R7 zu?37PlIb$_r-j0Y4F_PVIpm{ooGeidd+mi5<`-dTSf!04l6_!E=XN;YRCZ)99J7T$ z79DloE`@rbm$Rv#!QA*GH40gTgkiJ}iqoG?t-$-E z^+Upp(S~qzjARBCNUmlshNC9)D_VNBmKaVpPBv6<9mb8)8wZwGAFUs3+zhu<005rl z$d5!o7(9}ynWr;`bmySAG48@$!!m7hlCui1ff)hJT!en6Re>0h4v{a>!24lLz0>4| z6}APiHp+cjkq(c@YRwRUqES>Pg-11~MtUm!4Xd)u=b9|agr?hUQEAJ_>dhJ=nIj*B z6%AgGNG>d$$`nZJ<=(PS&~rlsW6>FP(?RK|6(fa^%{+XN-e3fCtZq!ElC~W6KEz%? zof`7|Rya=02H2<>P$)$yT>NG0pMQH{T(OFvNf??mt5Y^ioGIo$Nu3eC;?7m}=g9z&x06S4tQgI66fW<&MYm{cr+EmZa;=E&yVygpuoT+g>V17lex$mv{i*U8xiD zhqk2Xvp;;j)vm(bnr=uUbw=Cdo@5-;K11o7c0-=)B;xkmS1^(GYrQnvDR2$^=uD^r zC}_vRoirz`pKgeWGND&$+Vo=Dhw})~lv9?YfiK|!XUxII{R~ob!b&P6!IwZ9yQtDt zIBs`2&?<{&q+N#{raq*-8upuEg6;(tg~|oG!x2Z#jA1xoryj#8V9VkA00TWwTl5o# z-5R&qv|vM9(GmSLQL&`K-%HHqoxkRkQTHk{OyOS#6)RZb%Z=TX~os%2OHTJ+uqvy&dIX&fxA)|c+A>Bn$2E}~oRZ|Z7K zu;VZ?GVRkqz(UEilt?UMz{c2n)AGL{_|Nejz>m)bv=KgDEb84D>?X$=`>oHrx+O literal 0 HcmV?d00001 diff --git a/docs/docs/doctrees/samples.doctree b/docs/docs/doctrees/samples.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8c47c210b807b2b333bb6cd34271f99d09a7cfb9 GIT binary patch literal 95500 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 z zf9G=wzr#;#PJw-z#hik8Q7<~JK2RS~A=pS8-qnIZ_2z&VZBB>H_Q6dv-Lu+i0zvzz z3J)hprOqyNZ|UW$xyFt5k!CDwqWvVgI!urcR-$-K_1xX(pV|%&w6_NXQep!a4h84q zEkPr#>f}gkx-=ec58_h6z=ap`)QEUN*HT$Y!}7JKTLEci>bR4w8kRTSYP?AUs#aR? z8iUPHE++G~RiW(axPc=;e{2f>m9Yj^IgF35VmN+L_<2s;CD&vMJ=3Jb5uJ@>_|%Uw zie+(%Qx?q*>gk`|x4>LZa+8v{`Vy!FFEp9vv5O||HV;AEF%Vfg|^IDGzUr(G4BfQ$7g%R;C{){L>p>`r6y!NX|)^E)39H8(@;NNQii9* z!qRvJF31-5Lh?fsa@WFObvPVm#Eb%3qR1nYIfc?67jl*nn>Dg&zJxCeVjIQLSc$J6 zeI(WsT~ow*QmvY@?IBWZqfi64v7ebAR{KY2l}CGD#!oETW1nUb?M1v-vspn}Kiv%R z6(eo=Xi$rxw2xXmBnYHNciC%4FG*6%f9GGjQQID{`)?ulz}DfdTel6t8})$^b`N~m z+72$%hF`XA-8vMA3+A^6c)>h8WY@wcSE%~puJPC*{;q8Chr*WJwn#?|{}$KnzI=`X z;1OJ(8WCAxN8%kIY{kkxy*(WF)?T%0=Db612<9+msSFV#sr9kBy2o$9W6i+Yf&};a z+3!Jf5M*f~g*$>fh9>SFLIv^62yO#S+#SIQ;%aemj_&c>N;9Wnv_2C-?Ae^nJ$^&L zjHxbn1h|7{+N~}@JQ)+mw*o1&xR!1pzf|Hj3T?$n%Ef*2&;-pkDVIz$ZqvlwX3RNv z-#p}becubncFCKEl5%rL(61t!NO^%1#53h~4^5nsn+{y=dkx-86Q7;NKTZ=TIZwKo znb=bK+UMw2^81?E&@3EIz2dO-5^9LCifT;D7b)Di@EblHsloEtJme zx=~GOzGEG4zmSQo0cH~GC#1$Qg?bL%KT4=xTZ}Ft>62TGeC^^IvWb*?G&phN40?Al zd$W*!Bfcq9csAKik()F)69sW#jr#>Cfd$L8aA8dFrP27zQ zf_SDG-$@g9o3S9SutDYeOd^9d=l6EH!Th*Te9rI9OaWf+HooG#kM12MPA^pW5=oy# z1>Y__Og52%3Y@r!3JYOYLHZ5*to-E%WE({gfiqAL5sr6GeIx*(PZX1#iodIlEf^$+ zTKACidys|?5FA4jcLRYSo(TjSXyR_m6~q+~Xq�NWgzo!rDqVnI8&x1BD`lA>hR` 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

    XSSU*_J z{N7CRzy)Gvpk6Q($oWhBs6_t#BE1tLw|3c>Es{B}e_5o}|H>iL=n*LFd3ZhgHI(h8 zOpkuDX?p2qfFLI<#z&?ZIj@5v?XHJP7aq~Ig_{Hd#jp7K{z$k!~=o5oz}wC$@?80d`TJt$ve zoO2}aag@o-d2QD*XC{sw9o2#XmG?SjV1G?6S&PXsn*->1dhTnxu*t6HqS&AJh)rXu zz~;;&P+k{(Fk`I4frG6Ntc%{yiW-Ypt`PFi;Pl>M3>~p`?~su=Y51jFDiR^$=b;jN zyD>vVd~CQ58PE_R;v*IzuL1u%jH&dZdWe`SocSIQ&KP*PK+J$GHAMVPk=_ZBlM*FE z#N|&hm6I+gEr?nQmF6UvSpkH5DbrJn^v*}786o01McUmqS5kdkF{x&Rh*uTqqmOLK z5OGhDR-ZXnk{u}~*;$8(ogz~3k$wJ1uLmLGON#X7g>$9T+kACuhlnU&W1Mq@h>kLu zA);N!jJaU_6b5}28d@m>-knRfA|$k1Btt^Gu*sfhNcf2!v1x>aHfLTT;X@hmLjI8O zjpFd`sgEDGDN(wNUQa^l5DG(WM>^B-d;osKC(Y7A>!+b z^ybgzN~f>))u|mKqI`{U&JiLy%4CL!cAZ2FCISEzCOQW6Pv(-b2o>#?$xzWQoM1EF z!YxtL8xo-+O_lA*TNk~@V@^_JVaA1U&n(P;#-}e| zlvpSqjBeMSb>n;ZWZ)<7=~IEhK1XKui!7mdS-|;NDVGJvi}#o* zTJbCBLH?{PbC)+?MML_y(TouE8m1pwE<)>9dlVH~M-k@II&F3$>$=?RlPl}GJk+i< z>d3mz*0G7K>-am*y8cq=8NZj0eVTRFb-Lp`b9`l#55<+Peg7DqHXr2sMHY|OO0Cw6 zvFS59VI6QggDjtjpI#j^&ps7lzOp4L{lUuB-J_=(Kfz zUZOD6J+9p>)mw0zR<%(dnQk^Fn;{7EW)SY;cB5UYfeeusUM4KV*A9SOWqx<%c&FKf z4vz?0JG)28C$(xloY~o33TfKg)%s*>rn{=#81J;Jwbt-NlL-S3-!6H2sn!WwGk4DL zEyv)vo%VF6J+rfN^v>?G$*>+a@zy_}v<$C&g)2X%rs2!-W}^WYGd9DC>VcW={4-~| z%Q*`p(C%I+&@aArnl<>gqTLuD87qzN#b1Gy#lUm(;7s?}2_OS!*+T8d+qx@SaH(v) zGc|GmuMnHLt-G?-ZdRv9;3lvsrrn+0b^J+K3)z#A{nd75gxMf;2HF!9&?wo1qnhD# zquCy*h5JGf=Ynp3rBsW*F7B=h4^%;l?NYnbl7$v`7nj4a&Lq%Vxxdt`gA}1eGb~NP zlVzZe@esR&{8j59vyreq-Y7$B%*%;$Lg-+bQKS>_DSXsR^{$7*axt^Rs}>t$%B$^^UQ|F(ARyiEi_m`7eFvGXDbiUoDI1&YH3hmgc@bx~#8LQClbZ-ylyqyhPn3tFnC6%ME<2b4j{GD0=mwzRqO8B zUoxGBLAAM?p+rx|5J&G7hkbUNh`UdU3`4XqJEIIvz$bzs_>+bziNJy?Gptdn$cxUD z8(Niuy*drN9A{io0%_uo;Lz{@Gmt_UjIj~I>x79oP?`mtQ|5KEUZu#CkEw07&uT+^ zT_k7a%c5f!d_IAI!9|sD1$7u^f__(^`hYpBm=w5WkZ=)$i-_{MU7N5bL5!hbMzpBD zn4_f1oqe8+{_}(0S1O-h2tE^h0u;7E9%hiaINoRIz8@BH3kAg8AeWpsis!Lx*f~GT zI_1k*{|_4SF8t*dYU6QT>qe#0&Z-2;pmh`}Z0=-K$ z6~7LDEk*BQ9c%wc(57dK1A-@8fJ1`rJwQzGo8S+@>3zT%L310hPVkf97s10vfPI2* z2Y~McZw~?Q2&lnokGinB_bv74rA&owURH%Wr)H?2EjnnNowrc>8~J%cT()>W&;%-q zJE^XP=3H-18EfyxM8w8uRCm+bM0`}TzA2HHHl|}$-{64)$vI35O1-GwVXCz!Jj(O@ zv&wz}cD^rPAj4NhgG%DDbq+y4O0 C_1lX8 literal 0 HcmV?d00001 diff --git a/docs/docs/doctrees/tutorials.doctree b/docs/docs/doctrees/tutorials.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7d8e4735a6ba25c323f5439b886f628b79d2ef44 GIT binary patch literal 2797 zcmZWrO^*{d7+!Wa*(93}c7X~BwiT*qL1i~p)kD=2RpHWAb3hb{1G1bMC${3Tr?!X9 z9+27th?RW9{ekU&=)I3;CX-}~G;I9(_51leul+~suYYcYX(On#Au2&<|0P>S=bKyaLlsFor||0nKk{AD1j_e(yN++- z_oYxQOo}P>J?fkh)50OIn8%(-ZH)OKkKoI8oma$Tr&qcm03_zt}5B-;G{-WSMXkNA#m7YsI z4OhO+MVbN)SAI~RZUh}wWK(8X8qRlouWY{6N?t;@2T-l!D)=}2JAT5Spd|aK@fiK% zo9X#cU4_#NL-U-OKsPgv=TFzYiFN=1)|l9=2VIqGTUggFTI#{lUe)C?A~b0`noZXY z_V^Qj+W`tz(pVvq8$CD7R@iGf?WnBEQ0tUcDWbm{ewY*{BAYZg?yn>jo_)tM=Y*Pr zqDKwqW=1Q=02|+aMP-4OHKc9p!sUev6F!>w?wl!RD3}(oNGTZM&~z*gjn)pKqT|cp zZ;XRKtU@60yMRKkUKU1TH9!|gSDAbHFmFN^&m_db`o&IoY1%BV( z-XzQzZ3qYVCEy4cAh*N?KdLIfVWm}C3I62T&NUPKgCAB#*8!}K-rwH1cGBOB2>^JO zqdpP|1wW8f%?mnbD0hnWE-3168J1|167U(YftxrMCcd3$HA9Xlhe%gw;B7yom{(*i z^1A|98>B^+lLn8dYAFzaqET^@PyDEqlx&EtUyE|fid2(j7SVK*Epu%d**sZ7Byr@e zu%g22h@`^Osf>x#Q68*#0?zf3j0H1F(!uDURwJt!=0A(S-~X zf@i-MAhkuQZk6k5Nu*9_bwT)(gj2+W)>m{xoy#KP^rFb&BEAsH$zM+aToaH8H3JIj zv2Yycge|7m)I=81D>bdS7;pAP0BCTfq#*DmBH)ZU__&imYe85>g(P^(#IajOeN?|j zfL1xHM%tC%W9n^uA^1);Ou$}XQK(da9ga9^<_yCLuY)551#IEUi~}9lVjSlFcuQKn z86bwWS+i)ziHhe2^5p(DCRV z7Ar|4ckhn(Tcr{4B}Ul1H8FKm?ZD>FKVn?yjn@y1I*Bocx{t`h{cSCpi-Zw&V4ihGlua#iBHs zv3xV`F^{Kjr3+t5Ur+1FY-sF6ejJ)CO^%_4X*;eJGB3TI*6m}-Y1`@8EDy^iGdK^OR?I=3$enPk2u+h|(>0<9h4?<{89n)J#)^aDp=Fp`A!~~|6M}p) z;rSjInQZ&S(B0&W>v+ubxgD~|_FXIe%FO@DpI?uYX>N3gT58WGQ-J}dd1{|XX7zlO zc$!j!dui!cA{ItVMkh2pi!FVIMO)ktmUzfmyB*`*652)bmu$4eWA2BJ;YLd@KmY7! zUVL6>eWMq+tmy;;uazbf#9q37JZ>d()G2q|sF}_6wCVRMQ?2IAp2I}hXK$zWd3-M5 z^I?1*#YD~ad+ur!7_=5M0fx-NZI;INN9~W>kJ~3~4WEzM^Y*3nskmi7kxWO-fydX1i zgY`*V4%qsQREQVYenzsrVPD#aTgJYFr%^tQ>Q_snoE4*-#nRHE1$KEbfB#ueZv9p=-y|C7>Ay{q!r%l3-Wl(Gz+1C1+H8g=_q zsvtS@i;N2u5L&@3wHCX|ivh9m2SfthDhc!>ha6Cu#zoNhT+aVY(vNGHd!C zhgo7_X|5!E62eaSo;%p}2JKE~Gpx5<-`pzING5J+w^!Bd$_F`S@cx(4kdXy6hJG*L zsZqh283Nqc=m2UY=qd&J3lRA;Qp8c#I+=h44AIo)Jy#&qpP<a`P_Uh(fQ|ma}K=$mp zzX_+nX25B}cE00l1nH61_FWgiO$CoHXv`(8N@nv}Py&8@P_*w(9Y1!gOk$+T z?M_hb$L$|uRjwz~*|Zka>36`1{LwV-6-CvIIXBNjaLKkdiu%{AhP!Q)@kmNo4X9IQS$@MJ`2?+ADi zZ?Q>*)d0F$vFWrN!1bW!q0P1BWzh_%)Pfa&eIhqs3w+1pQLPq&)EbbgDQPt=);407 z>nN`i-8K5PQ0t=-ikh+Kprc-Wc~QHpeUjP*&LRxb9k%8z5O;lT+i+u;HSByc7CTJ4 zMfLA}aiMl6ql3;_2OD5Ps6t?ujK}Pa+=BwS%O1oxh8mCKL5Lo)XxEdon2*Z59hj|s z9Ev}_FSh2#ST(7HbwJ1P{8iOpKj3}!2!Z$ZL4o&58F=X-H!1I6;tmVE_h`}&3cTM% zqfx+{JUP&wlBnlO^{hvx;j*TPaDTP}9RUb6)}YCeZw z&ja?bGxS5m{=^wfQ&XKAJwJv=NAYXNb2!d5oI48aM66pZ2ow%mZRzc9Znhl`LOq7K zgSDu2V+0yqXA7|F4XAh1*>ZS8uz+ez_1)B7$ztV*XpmFtX+;=4h8L;G%Teb&6ae|E zV!Awd1n%#5#!8@bHD7y)h4ve2Ly&xQ^u#I=eQf{PFZJ{DL;Z}FO2j(5#2G~Bdh*=; zFJXz15d)siR$7hh1lGOOa^vtrcw`^pDN!H6*V$niQw*Lei(ZM==HWSAIk5be`W-Qb z8pa^BVKaBDrer~>eRz1jXR;YCMF)fgmHoWJ-Yer?w&W^6&@WlUqp^fv0GR`Y39gpC z6?(|A`x}^{!+I;fOS5}WZ{;mC0{i=h36kHIMsuxXpzD#v^xU{Ioi-af?f%zpgfXmn zX@4&oH=$?s{-QQmz&=}-QW0UlEnmuKdhe-sYbzxpiv$%dKVpKq+I9cr@s+RPclKJt zgZf{8KF(t1{?|8Ad$<23*S4w^`}$u)@P5c>_Yjr!uU5P;sN5lY!NjOx3V>IecfQaH{w+GZz zXmW)RU1$wTcA%-TulFObM z4A2t9`l6%y{1g2rGV%jeGN6*0ix4%u{53kRnutiVa2`ENwUr@t z8bPb&_jT^;hG*J-xK>|oUR%@}%gvR`*A@Vurthv@UZ_#TUQ*RGGWJ8UsWD>k6Yk zSd5>D#mF6#mA$m}ppHp%9JS3IlgChdw__r;cwEP%igSl`OsZ7Y->#tLW*NweO?(CI zG}G|37SnKv5;)~+xcP|N3^GVy`8&9n1i0;~?G?foI1;1dC;%UqTYl_y-}{aVytzp$ zHMV1-@aC_M9B=;i=ld%EHgsrYa37v^|HJ_l$mlE^pJi92i~x<;c*@A;&*AK=q3OROt z54Cq=m$VV@D|Y>;62#5pp$!D<_K4VCpeW<6VCu;5EFz%A0J9t{c~ZaH08*+9t_Edr zHS!Fu1_cUBq2k5Y%9&qe!A50%?P92$d4`;m2)DZ7wdw%$4mJZaad49RNMA|Uk0nSKk#&%bvwke5s|LrDIWrFFnzo*G zu#ucnB_aoJBbh;XhUOM&j_2}RJRk)2nVyBa?7u25N#+-(lPSbwuuDxh?58)9*=%R) zhbbN~d+;S-nelKk^nDIi87_gQ$?>H$IVoAt(eD;2)UwAobn$eW`=(Bbjr10*OoHcd zkS6EbAVaBYrI%k$PE!IOu8Hb>tVs{^Ge;?60cK334n`pOGqMC}JK{Q~P7AH8i{&sG4T<=Zc?xjMd<(UZvKaGr<5LY>7fq9oRA1^yH1NYLpoUx#{-sE<$&z4%jHby$ z$a_sb1nuxcOSf16$w4>REMgv};FPv8Ow5R5DS@!3k~srOqIyx3Jmf&!PFqMx(Q}c+ z#EJqD^}r622%ZroLfC2bi=rT6vE}PX21Tv2NVLJ}0S*-rFUeX8DKWW@!wLsCJ&2Z$ zvjd~$LeCVJ(@IsKi>ELc%JdX^hw7)ZYI++NBSrr0hv^$SK>%3jCi94zg(W|U1Ys&8ScJ72Pq4d1&xm{U&V~hg>7?)Je3sWpH$?@_>s^e zB-?ZtZ;L))5|$`g37ySyqXj*(kUp_KlU#&U_Vipm^8x5G5%+F#mdvWr*Yiwh%KP<6 z_)kR${Br%Z7OKI#Ztt=@F zF675I9j^^3$SlKoG8MR3G*k_DeL7eT-;nA^3CUY2ga$XyE$Hw79N3I;^zkrGp^Pn^ z^>7(hM@l$ZUcvRbEQ=V@>b9j-yPKR~-gb(BVlpG`36j?!iw;5{& zDaaO5rOBq_GCSGx zK0>Fw>bhEfldb#jRIJWP8~HiuK1ZwFN2uc*q$?mEC$q#N9|V{)V01?Dic9K)`@sKk-9D0zWt_K~;et0A~?(XC*sRXEy^! z6A&2#XM1ZqXKM>XB3BbfCks1UW;y^J11*ucv$MSuCq2E*e+JOmIhxV4fQvT*iF~#f z*Kh&>L2>?bfv%epx`Tj%fJg`nD7$B#X1RH5?cIHBOtj;yd#%JLEiQedr64P3LQ!3! z38GtO5?a|v@s&Dy#)xlBlzFj{_$COu!PIL`g)8XKBp8wf&h*>fP^yueOp72sw9xC~ zBF1Wj)YbL(<&AGcmA=NjkMrP7rc?F=KnyFyfGAF!3?)pMBu-oue0Yn%|IfF-et0^L zMflGhQ^5btn`*ps&`4oTP0h#4UPK2Dyv4KoULL%^mP>{*ge>dk#!e6uTIF+QRajJn zKWQcbwaIX~6-wxM)sIPdZtyQ_qM6?Bs{9 zc4VP=a!yctbD$u@Wnk{Fsj~KCk$wfC^gjIs+7tV00un)dwK*zr1ynKcv6;Sz=4_xJ)l@qlp-7 z!eGZ(n!hM2pPj#(JE^ztBpOFlWWmE?6S~ZbWC1@>ZJE0KlUzGxwmxLcCJdJ8ui@u{e@dF%#DM%}XkK(+@ z|6RHmd-$gz53%|yMA9nYA3m)A{t+)UDo&$7P0s%>Baz4aS0U2=Lpl!c1@5;F$3Pqk z(Z8FS*r<8DOKgQPntb;^db=BYsiM4qZGrBM0O|OjUFInMNL_joSr5Yt1$G4T@AgIb ztS91<6{p&LpilJQ_X_o>Dd?CLs$2rF{ue8M|3#qi4*@FB_(R;d7|eO|wTmV<054UHvYtgJu6?I;!HB{gwK5hr^Y7q_HjBO&8=ZOv+H zYXf`FyuWv4k>P?S{j(Sezm9NG-u8$WiwB>sq?mI4nW#WtxG-VITc&uN@F-}gO?~_4 zqvC}4ctJtIPnf#y#4C+9T&qIBXXA}Rs`BF|#5GsRQHDC0{~G>z@>^_dY!~Z-HmVcI z@W_bA<~Jygt3K49B_&;3_NVt3xVX4iPu^g&y%~7` zXB^Gpj4v1!n+i4@hwVoo0pDK;Rt;6zb}b3Kh8HI=^}HF)a(vi|vpuOhU)C<%AGbo? zULK^9X$_|GMM6DOf!oM&)~N*dDYCF%hXgyCXTKW{Mo4F2YfVq+42P07&?6$ooI;m*?&h&%F9kQ;%(J`&uD&djVoVuF^>gKq}FHjq24ze5ii+^MuJ@)@O`8u zCu6kf(t}iWJX5o>vVy!`hVqfIvL@wxydH2r?IxVAwxFhrKy(4O^zV9$8A=)&QsBSg z;V|#_O`Tiz9FP6v8WWZhq{Y~3AgKCc)!2BcFV~o0B0-Z#nWaV zl~$0T0i(vv*rl*a|T60K_6ip7N|-PDdI6IFy-43xEtmNh-118}xOzWqnZ+z6d`K~V z<&|FefWTR3!zsz^icdolh8-x902c8g&1CyGpCaPJ+KzkI*ZoU$>cm2yfc%=>)t*(L z;IHr;<@qm(@{4vtAPIdqnhHR^q&I=V9~x+Qm&^;KNlI1=x#7^piFn?m&qzsxQ4Vl? zCxhecfAjWe?FV0Ggu2{yc`;S9Rjr<%g^XQcbtuml3*R{jprBh4#Sw_1GO^Y^JQ@eO zJs!?gIwF7IDnAK%Nn=ItZ36}RbV2NS&kC-xHe`;ci#N*(W=_>||8y}2 z^8?fD9t-oTSJKM03_e++B_4S+Z#WA3JZ&FqWB!NyWuN%)#=6XHK)hV$6uq4=C$oZEboCJs4u<4>s7er{H1Gr&c3aH&b0%_^u)@W8KI%i zdz^Cetv)F}$R7&MG%>HJDuIhxd?S^kt12h`2pIMh9+g0-jC-Ikyk0!nc zeDZGIWo~6&G*P_pb)uERAQLK}4gipA=qyV!kfk%F1s~_ zJ0W^z-LsbTJN@AU>=wWp9T`M?&_sODuFqrb{aKLL{H7<2T}ZOKn;TsWXljA+S-jEr zx9LLyi)-w(+13rbk$8xq%hLy!jf||uy!Dw2Y*v39Idq6k4?z7??d;sA!om-P_2Hp( z!0n<^*z_naY4%0s0cTOplN@$1y_;l-=f!*N;Yakl{l$@oXw;~p?iHr}u^yY_9x2Ve zc5CMY^9zqy@0dor>=+au;48+Fn=u)~S{lYniI(0go(y})dt@P=_%N6ho~R;$%37FE zv|Tgcr<>Xq&;%~NT)3hU{}re1Vr|EY`6KdY*DYKZk~*jf4#$%X;&|1~u&sJ|W={c^ z+4O2c3OT%f#({8!_cNU7G!s1m_ih)bB)q3xO?qqeg%3QpXU%O?hqqu25rZql(x{Gp z)Q!L$-R$ZR^k)2gztD&$M|52GkDrco5GU2A z=eq3rKp>LW#Tb6npVp;&&Vg`)2hU{&Ujw!^ERE+nsNZEqw$DE${cC36QXvJF?`P{M zm(aKb&rJ|1&v_RoG2zzle|G$-RYMk-I1cY7_#7D3ky|eEYaiZi4^s~^zLo*@a2$zL zy!d@e`;x^~32--+pGWx?FRZTh3D0mTl2!T6pg=q$fA!aHW%? zr?z#rJnV?N=Nk$4w@M=>DE`0AuHq75!6V2n0E$fR7`sfNHKcKr%Je~BW$liqI~%$a zt2r>YfgS0mW^lU=)TfX{u2Z@#IU$D5YrN969jbY4Zl^Eq8A5}F21M8ba7s~Dn{^C_ zJb`#uKGX>vg5iu`(GDud@mb7tdJ@v51i8Q!z9M_fdTD92Ae-I8 zd28XNzAat!axN#K_6=RwjjOMyXLm$@-EhVosFfb;w6bA{jK1HY-?Oh#xySI!9hyEJ zJ+4-0*Y2XSd9D~1@dmjuE;afD=EK#od~mXtL+|4EpP3muy=THhmhb30$G8p}O$VmKo_ zn)Hb$Hr%HxA%zVQY|@k#YwOZnM5#usBGnbMf8c6=q_DTN7+?>UMU`MdSKyZN1&6@9 z(-x@j*cN3%aL=y~J1Nl@8pjgX6bE&_D}Eb-pt8Pf>|fWKL)$K<_a$IX&2D$a$g+El zPyBHQoyI^5n8n)#zgy#lJ-ge~1^qg=Kfxn<>+6!cZe?aT0SX0_!P6NoR>iCUm%A3H z0~~A9UE2@Lq?2)j?3ON(OYyh_~B;-MfE$$XV_Vy=*B^gTPS!P-ZyJ zu(M8RmY-Xadc8X|iQqDnK;;zq=>RF@wXNU$4Bj+!>*1r9MGVJ4hOj!Li5+3E#{Zwi zPFXEd7bSPmTDRj&z4%DSNE3&cpF!JD$%{L8Xg3+~^fpzgPAj>u*!(u7XuFB_fD4ZChr zU~U)S!59NA6a`=iy|g%%6k!ywasa`z?MoVQ@x(*#j=5YOLgvq*qjR5G1Df#ap$jp4 zGlOfqTsl!+L$M$1$NT6|3Ve4|gEs?C`~sVb5|{={I$m?TL)!8;!wPSIKj~K#li!yu z)-Y|mz0eZSjCKE`QDN^PKI7o#i{N8P`xnn*2#AKtjE(v~2J>*9yF~Z^h!c@3%}0S( zj}ragafEO-+Hb31E6I%qshzpK)~x9?u0LnA%~>C5_kvr2$>?yNi{qSdGCz$q;*%{` z1pR6thEMci)rUM_f?LOLF7pI6L;Fm?^RdcrDxb2p&TiYwU!fC7YDU6wzIOKDqP{}u^kX2?U-t`UAzaBP zmf1S2=;PMi54;N5f5b+{xL7@r1}z9T*;g9QFZKINDj*n*!R7P?OXXDO(F=Y%{P+uj zv|n1?jAaexgmBBLT@5u)^e9DzG*;dBd0$zzFY_649q5X-ipEES2s@zKH?|sG_R$IEg~rn z1oT14-5Z*%vh}GYy`|xfRWC0El={w@YBj}d;sKu7I`ut7_(k-~dF7o${3Z-gq0oV` z$!275`}H>=DV&Wr)>1DBDJj#so9mV4yMFo-`zD5;M8PST*+Dp`Lk`f&-!Rz9!i&)Q zIwp#E2K+8KqWAap{|Uo{J1Mhu)kD0ND|R&lw69{$tldBOOi@l;>NGAFl9ZKmMzKYT zFArCpWOPn-r~S5alw*5D?Qoas;|W*As|%vD-jR0pUy1J1UW~mTuxNkT;XZYn)^Y@1 zTS5ruz#Xgw1be%6o3H!0LPed=r#AYDIy}b?_|d;8kJ}?|wEDT^@;IU?6D(DcO~egP z)fd!NJ*@L`;Jn0RGAy>>t%5GbneI#nn7;4H7-%}M0sVlF4gl zSi_V4+l9p+hHYD%!D~M$lkZ*lNw=xwF&nxLeyu{Nwlq_k=&88Wg?Im?)5;pj`roW; z+u}U(>nm=%jr6FTfm7BvX91dXU`1BTV(T`Q#Mw(^J6ner90o)QD#T-kk{8Y+nf=7x zV4y%b?%@sl{-7&y+qYN%FWe~7);qH{nRh1&@m3cZo*wec+nOke*mm@|Jr|0X!^PRf z_=G-{oPZ{`%Dax28QhV!;VnSnX+~i!$I;K6tJ5udz;Vrs2(9vTA!X<3M2>;4&f$hG z8kiA``aPo3U9V4gOQEW=1my){v0T)%-|lh*2|!Q&dijM;aRC3wn{b`*)cgAL#Tz@C z>>oXc7s)H-LT)OC5unbB>(G;-7B`qL8Ev2MeW0tnX_Mk0??}HgDc(tK{eCpgLcRKR zKf^hSRy)h+H4?AX~mNR0rnNjFX!MrtEwCdY-++VTK-vH#|@C9z2B^>7NO0w~M> zH8dL4a z5|P7v(fxrp*J|*Oa)eYSTpe9J*4_EcV;8NW>-c}`*(Ja)AIm@0ji0Fsk6lm_32hC~ zn5Q2?c!5@{AgSyf{3kLL&UI3lDacGz?q9Ct9)LkK`U<~@JD=ac&hNNB33+!OnM@EU z(jR$`I1hD!lEvHg-P#Yzq(t2P;sh9?gAJ2%!~-Vr!jSvp8Vj629{fIDdlO`yGGs8H7ep%%+*zYlOy*xW;vvXl!$%{~1MJb|z&qQZ{>2=zroJ@DF zG>vTSwv-LzemOvJ*Q?_G+2eD25%PB~B8rnII-S12JU$Jgz|juk>oK=rIE}p+MONHt zKyZ{_QW2f9{mC5C`KQF9HZw6Jlv=+2FJ|}{FN)$mHOB6FaS2xvouj%-TdhH{Y+79( zLmEWgB$oQC4n)xrf`S<+q&R%ME5G9xioR0-> z4=x~h475aF>|izOYp2RC+PhaSbb)z*y=a`iWv}ZWcWMJEUXTF=#kt`EMUpc+@MXRzE1`m;3siu)L6!9jonM`7H9vx z0_jXtm@`ZWEH6G)>3gbEoyF_nkNI^uYOSw3X|ZX7-Uit4Gq!tN=vC?Dd?x{~3r<#P z=hDSJJm!pRQBzE_4|wGtgk7M*#!zCf^nQ;@z=$(dJGQ58VQgS!8nF2Q%!qp_a4uX9 zl(2PD@Pr{ZKJ;C0*CNaWRKP#lED);J-M)(8XOu{!iVGaKc=7J%dg){}rHa{crfgaf z_H!D0_4tf`Tx&v4q=~kv9MQtyWGSU-zWszl zX0S;jV8S4(H3_@_2&^#Dlo-SwBW55jjb%6Xfz517eF;9{FN_)w>{KZ!IUAwN^G)=V zDyD=XA<5Jm{Ec{u1{LXQw5gP+Lst0V)SPEJmuKS;y6tD}p2)H<0>*;KHbQ}3BI>w~Ph$Fdj?az7qUJI6X#hPlEGqkRao{NF{pQ!@+IKX<{e zvvGez@K^5;%GcS;h^fMPen}p}-0PHp6z+yw4z$^w_a45IWS+O5 zO~k%GhrZ{E{>1$em2oAkXy_#Ifd_6UbzlpBzvl8n@G4CJ+iD=T@Luo-oDMOjwDI&~ zS<4+J6r6#dbh$NgtKJI>ZhPxwXZ+Zb8(j$1@7fT^G4Sn2wLfF3KS_4-xkiz-ekNBt z=fH$#%w0n0y4{wB!7G?V0v1u+uLe-llw(o21}1c$y%$9VG!5z0cz?yuoWJ|wp3X+uO(}JNSyjf^ZU9;%E2Kny1{e8E z*3s&7kLP&XhYVs-C5c?C;Z#E-g z481R>vX0uX8K>NeNH^t{>0To=OZ95+WRZktt-gImecYrdPJ?VL%_ld$ISypM+Iv=M zI~(E8@If6qTfsK55Cj3W0%cn$Up%n*yi{*0+x;78mp+$BEcvwh|BA-3>`Jm7oL~A* zL+ZPj1*m9@Ahl<9eJP0jCw*ZQQG)GvbNXuM>up$ zOPRU?z!vjpxH|60cS_jKihZPw8ZwRLm(~>vgoDazlww`_VC~?f^OBu|Nk(+nYbamd zvW`g2On;!7>|QzFE0jNsn^aC^bB?XLP<8$^pFVLVyfag8T=Ma*C!*xVD}je{@*N<0V=d13g|S3c`Bsc2--P6)`vr9+?BsJZfm$(-83`IL>RCj%dU54ooDfXL7$TW*L#8ZDRVLw?01e2l?c7W zH4hZKlVg4?%jBk;2{}R)EJ5bu3QhmvltI}rK`Gsx(EQGaC1Br?84`P6(+f;%zD>?` zF=~R)aP<^&cJ@{0U0Owj;OSnPWa16m%P!ycf`=!wyi%{;ughaKidk1)SsIwIn}_}? z95U`dsCHVGdm4Y)8EYf1LOGGzwt(5LTo=IL#O{`4N&hYiUw#I^-*7ypGEJJh>1qpBvXI3cZ$!(6+zx0>PUO zk@|LGQ>-9T&bjj|e$G7GsFzBP?3}hs007(`a>1x5>8t~z<4u67Q+(n;P>Pi}C*wkE zefRuOMY?7#?oO zduJMLFV5r>8w`WoAqH@(pjfAm6#M#4V?76mHI;R#JFqjrU?ApvC4_lVoUK@COSR;> zp>8YeBb2l``?_%FNo=|y(MvPt_(hNtgfyw(r%DSDsw7et`D4p2Jsl~vJ8^1iVDga@ z`O)hf;i5;RHrdDcOd}QLdLkyeTrLFEU@Z;DE8~u`yS^23&zLur5V6Hjv}wNRXxJXMGuGGw7aan&o^ zzooZ<2^#l2=~%042@IgURfUG&(}wBqEc5dcm&XT5)us^-IOna@R_H1-3Lw~0Ls8sW zz|cZO{-ssx#3IT^wM46TWjbtRJzB9fq$U}1StOBA)VIq>p?{U!zDaRzHH`C(4X-W` zXxjJHp;Y*poZ>khMs@m{m)H{~v$`4@i46DP68TwWrC>MM*LT+fGNx8eQqetgq>G|n z<(b_e$3d9>6-(e!srEUUIGGq^U{1d;d~07V*YEWf6yhFznNJx3y6OXS6X!&lo!@F4 zbhnQLAKAJ|iv_(o(Z+XhDk?Mh0Lq`qsBU7cU3UxoGm9#r0R2DR3u=XmT zX{UviVENz+d%@-EWM;p6ZjUP724J_{|E~HCYiq31BRu|crDtJ|n87;ab%WqZg9wj) zhIh=W6YBO3)ms;!mJ!iHZchb_Q^vj@)viD#Ds$t&M;Al^g_%zsaA3#%S?;EOE91TW z#mc_Qzfp72b2;PzXV#0j47apx|5c0^f09Q#tqDucNpJfM(oU=VqYFEDGQV(;FHBQMbvDo!$~|mrTl3Vmu6sjSUD57e9MWL_0;-0+&-_iK zNsJiTLEO)lCs|$8jSfS!gZC}4?4u`MRh6yB0G4DAKpwbUuQY0fUi~Ut4=;XUya_M<&$baVtfYoKa3)g$K+n2mMmQ5!ry7 zoggGHBa025LDOm~kQa@3as~H!_!yqL<>7V?R%0)xt6U+iBpi!H7hMsixoA&uKw*F+ zn`oppxME5>d*c1e!+1NVY2ri7D=4($lSS_v^vRc?JW?F?>YE8nM$h?{#c;D}8>~fP za9q^^3NG=Vo=`msw1Tmws4T(V1!i@>M*272Yl3%Ra5WrvJWR2>u3MiR#~gXj9Ua`9 zdCkzE39wt^zwQxUDwr{TjQ=9Ym>brVliIlVy?C*neIc%eJi*8Hm7f z(j@gWtngC*c||!Y)=z}SmjISfaF-76_bX+SocV?v*Cw|IA`AiCe6UJV(r-Y} zO<7q;ribhh3Fri#irJ$G@5rvZ`NKf?F)E~M*}r|6g!^tt%(^W8Fs|}i`l98n%pNW4 z1$nhLCOsN`a1|-}>!fM2QtK*AkatS#s_Agad*d48qjoKNE6{J_1?8bWYiJ`rIRW>I zK}J}^*dtz|BTJZT`8R?avy$_*dwYf`6R1+9{2ZDfIkK5S8nzxSZ6LjFZmui5K-s{! zIPXcMqGdjn@sy;mJt>aN{`N8#;r)d`Z0sB+4?edV4#*D&qdH0?HquDo%9-V7yk338 z_1Ec*^(h9wi1Rmw}%DNTa0kFhWRTo%7L&qWZ;>seM!{1}j5gtV>LA8W}$+W&2 z-_x9UOqdJ?cCDtt&Ks1yvIlv8XQQt~wSy#Yx!~X#Yy|yy?;fhL0%ZX3g@te;`YMiP zU*kU>2kbMeDsx|Y-AiVoIHeW|1*{G0tf}qPLwP)0)5xpb zm23p#A|voKVC}AZU6||*CzWe9g!2=1ZG61DRkrM>w?DrCJ1cyjXL7D5{N59yqY+HU z()-^YHYRS5W)RQ15Lxkkl_nOnEkxh%2i^JnF?N7u4>gvx#iCmiX(P@O!+xW4YNr!k zo@h6MmLz7*3?xA@MmS+X)zhVV^yDi^XM*l@c-q?ctY&dADh#etJLZGJ1*0JNp#Eqq zKi=&4GL8enJL72t&`XF>Q{DDu9W}YWiNDL9sJKQ&^x{TZn02Bi=>t}X?f9PfM+c5G zy>_*27(Y0tr{KV3*yYg~`AKr2&6(oEL|ePF{n^t8GPc4pQPhNL=f}K1a&2)R=#rXdpp`CqKl?z)wBnmy1$MRLC3o5TOxoEb%NGrAMW8mTwFx>w~D&BhR*bn z($X%vo0X~2@Am(HCs_Ntmd?V{^FrtN^W90y-MrS&@UY=fJb9+;vPEJ_3bW~Gsu267 z&{#La`a?YgWm6n^eEW}1g(;i7FGZ)4HLCav@X21uH1#9}9j?8T}I6Ytl^%bz^Mb zv_7RUv~$ehg^~~ffHiGo=H+6*bn|YW9Q2*?k@^dt8L0hHyxiiZO@zxSd`TJ>_~J6s zF0c}8Eb721=kozRT$bShgsv{1F?DTy4DfeK@}!!OkTLLrMKaw6?5Mtb%D+1S!N55z zg;c`|BkC0@l{R&Fc%26OypHe|i4_SNo`keAS<@)SWWnB;=pIWWJl<&!t_x9KIQAQj zf=xfA?0#9ELuBi4Nl%tO5km+K35Uq`efp9tnap=!+7EIO9Zgv-`;^`Uybfu z7ZOllq$AEX2u$;u#4S0xM5L@}jzA7~*hJoX)5eWnDg_8#s*ph=y6}3%;4}M&mYi&4 z?EX?i_XznVDujLIwIbrqzE(;9)@h?Xxo7y}kYvMrzgiHg(G`#reXFe- zF+PB-5ktWl?1bv5KG_NT*id)qy^~VNQb9=B0?V53xxg^A{+*O3+o{8p{JJ}IF^Udc zp4OY&UKEc_N^h@XJ^R!CYHJd(!XhokG{N-|w!IQrp$|zh(ejjPnZreb=l}ZZeSCcU zdt}6DES+^U6W~Yvy#EXYGMZVyox5F2EW;mry4CaQT-yB$I}Q+s58GRNOlOMauN7j* z=zGtjooD(2tOz`yobg+~=O5#cTatQcvYvWJF~i9Am` zyRjTa$MyC$`<*bK8_WU!6RTuRXUA`f5m~aYI+wK+32r%+yXPYbP-MKaA8SmUy__bp z^iopmf=5s5w^gPreQzktf@fz?bR(-$HV^vI%cX!9->e5==Y8IrmyV}1j`v~Ap!_t7&&20mR#w!)isq-QM5!E zARA3>L&^$6zs3zub;5G7q}_h>!+ZudBVV$(UFv<48rqhA{ie)R_6cm@{Vi1Y07~Wp zh;;K)6L}8KD9N0T{9@y^9NWt-KK7ugiI@`1#f4-gK{RtEQ0cf=m+jtcQOk8QSR-W6 zRQ-nhjUPS43*rnrLA>pdceb)ifp8HI8Nq+emV(~y!}*B5#-wJCAej?^CKJx64mA#Dy!gMrya}mokW^@zr|cQRgy>i9AI;j))^}) zQBNY{WQ8c3WJJTgcw|<897Xs6&|-wkYRFdo!8PN4{tTdfJTd#z->sV{NGIbz{y=M& z@N(~Zj-dly!Pbb=ze@0i;MUpk4QfX32T^kz2f1LeZ638P37=hOVva_(S!qXBW6DP_ zD*~T_A8K+rqwqvWMuQAB^TKMl`Le8=A@Y3HNA~RNj=1lGt8#0`L~ES|Q+ygJTLCU7 zvQRPW;#f{4RnITyua==Pc$!blm^1urdDW1q1NXs*K9Xg27z`00S8b-PS&CAyl7(Qs zt)Kd{Ji0aVB+o2pO5K~h^*#vhU0G@otmnM9Y zKM0akobHu`KK@ug-W+H{(PO%(b5Hz69;`#JU!v)@3?E05`yO>12SbnY8y z)KBAKB&ypuTR{G*thtg)sq44DzIgrEKEjn1onalPoz>8Vy<&q6+X68P4izuNrKJw9 zoH<(qX~6xtevACnvb3l}0k;NtqBH<@UPJXPH&~_d`fv{C!g5>9(-QdHDm2=z4Lc0t zyQPXYJ(#BtVB)f0Z-tIvCCo~wIq@WE6vx`lCLooXc@J_*a*Zf}P9gKBIe*@j`=(!z zmN3tEWac&%|K5pfS&L;_%VS9@25hFT%@FbAC@|Eg*a&4H(1Bn3nyYD;llSFdi;}?R zz5K+ztZ7C;Cpuup`$u{}^S0pb7c-`vrVIOwJr7A?{Pb$WB3zJfqLyv=;RlNCHt=Pf z5zXxsjvYYbh*1Hp_|v}WQlcoQVUG99=6>dLOiNcIN)jawwFOB~5@iTODnC4kpJj7u zd>?&U>|sG`Sp=O3@lZ8Gzv`f}5m!MH=d!CWq>^m^59s;;rXM_-Qex@{e!xD4a!Y5Z zGL4UzR&2k$Gc-H*Fh)(VqWLWFNHS-kf;I6jv%*@zj6Mo_m778kxGZPnU8rQgtK!2V z=fzs+5O|b|fDtf1lTsJ1lSmYl!+dcIQATGttxp7Y_z;>{x6nghwUF^UIzR@($xS7M zg}~sM?Q1hAf2ODQk{YQMxVhy~hq>n~T|!Kc#s5qTYiqkCqw_f=rMu+mfoq6&tOx>v z9EMI~0h;~NAmeGxBi>xMZzT6ro_-90^kOn|neV4%AsrhyO-*Af_bJ^6sNb=>fDIRl z>GOzq59e^V?Wd$$7U%lFB99}+rMedly>utE+DFhvy8`?zN6h*$K1aaGkn%Ers6v*W zz2bV&>)C#Sp@Q2O1INufBB=U_t?7*tVjQ~OSo2Xa@@e$t!sCQRjt{ql-V3p1Nw!(1 z-oQh0+YrT_4cTJF>KacDUlI36WO7B@a~J&TwD;$k%rvZ!=on{^*TU&c4#=;Xq4_R5 zNW8Qp!|s;32$hdYK_eLi+nqbdEq3=*k7geMb?=viz|t(oov5%nMPYw}O}!zxWb%H| z$cng$QEW{ehM^QaM>FO-4G`J$$^~{~E6MS=q%7RrjHxc^R=G7H@EaMC^5)oeS*NO9 zqeOV-kn)LZI2s=bFMM1qLd9IJ7*Z(&oB;5!6aFHjJksIo=rvqj9|jwi>^ok2(2Jhd z#7bDiP>d%MRv)r}{$wyZJbKw=HHfS8mxwH5C4M~+F5 zjT4Fo!7RNPL2BZJn00-|+wNX)Bjj-lgl&RYe?R;9zH0sgm+?Dw@ zAu)BM`l7JeF4?|hOo19hvfayqAGWeJiH>RypG-}Tj2q5#D;l$3&HZV|b9;C$)48A4 zmPQF&*z7hQY#eVTQA98iroKZ&?a(&#vGa6kSOSv2hfK$cJ2+DSTiZHaa>npZM6Z*+ zr01)mu|`N2OeH?%AxAkoJSAv79>iS7AegxU&*?0JWo2avNqTQ@ZyR=Q;QxD4#Ms&^ z0vHp7ZNZekkesj+wG<4$c7vSV_*MJ7IhrDqDb&wI^+cCKVpNTi3Lq+ou=zFd{Wd>l z@V9{n6_sg2)7qN-mLSq8%K1jIqFz`)^}QG4)T1l914@!)iPURS4G}X=$FmoY`(1*A zPb+Y783r25jV{yafq(7dG+6!(nFOT=2G8v07V@5LpC_M!PH}S?Hb;Vs=x5h_Y0h)n z<$yCXx28{=HqkR-ww?)Bk~A8kxG_!yAehuNzmdPh5=W8 zw#B2Yhre)ZQu-ZX0*-}oV!zz+xSx~vn&dk@vAAS?+INF3W*@i$$J+0972sdP$FhTT zt_rXx4aurorbm9#`=$Ub1DVfTQwan!KWv~8!t!abdyfQK{ruo?zU+9$NZ^4V6gdDB z^OH+;Tv{g7w@T0j9hqTK@=uz5)*1qSaCwP-FX;TcI$9d@3}r%zgH zxH~EkLd>aY=q3$%24zLi`H-xiQLmbQFs-E_VAXgBBn%h>J;r9J%?86BKbd3b9$_RZ z!Kx^RtU^pMbV#+~0_UOcnW}Gz2{A3?QhwBTgMLi4p2$p)5I%7=H%tYgqLpfSH9fCc zYK%XppSE{)j?T~5_wFhyD;F=^277{GTeib#Aln*!UR>!q9=8M826z&*haN3clJ|x*voAjEei57iQra7(>K3Y zRA3ce`;26aqG_qGabiH=RQ}lcqaU5_tBNI3i#nMN{sVJ1UDnw!020|L3aF&s@ z+lkPqvzoU1tY0FiYlU$IyB;q^E1!FDoAFYvM;#!)p6C*nTCg;_7}%_c#u*~1&?;Ll zl@GV1ThRkB*Xsp$zC;FKKjN&^Sm;pp=zBgC2k}%Fm8Kn(W$&#!@VtceQ|g;U)h)24zF&a8LXjKOht{PiMKW$=7DHPCUj$UN}+te zvt1%<%65`;zw>3K+JPYu=NAvKYvLun9X~j36wK7_2EU`UcHyn4KE#&u8vyl%%e z{k(gig<;SN#0GmXq0pj4v%ZQ@J5}?HR4FCrzjMD{{Xi>0w9<@MIpe7Wa^5YJG`p3!$%x z-Y`dd$bO$9-Q!iksCh&mUL>_2C0iH(*jIEe-g{j;4S~ zeNR0a%EdRK_=E%@+3~H4sH#%xgV${h?}>MR^F7DfDhF})NQ0N?mCpLb zaZ+?&jl+=OJTErMdjn+Crvyiy%`9}ABCmsXS}q?g%yo1YVMgQ~DKhL%s|ev((+4`u zn6+HlZb}Yh2y`Cr@}v^s(JSJ}#mL1#y-HnK%ke7B;@Hv~XV9lC%#Q}*rZIKc{MEdl zR1sO5nS0`W(-6h_0Nc#H8s^5StX|qS zay1}2oc};>o^MClTRjX#Km@hAoAS$oxhU49K|LDZPiQ&x3Y{_umgUJHh^9E9$?v_k z=9Cy*Wd#Km3Ntch`zH@VC2^X5xcE68BEkwasQuK=Jt30$hugUCP+`u&)l{4YI^>5# zM!>Mdku)mPGUC#m1<8sGvbyp|lHG?7dKg<0BS50O%p&To($5z1vxYp&4DH>L9H+7R zHZYp%M+rSt`@}NvJ{lSr$<7LBk~{Fpy*U&}4UJh0w|~*Vx5&XFsz?Ln;tSy?H%{zn z7;$y^7y9J_|uKxmywv6lxl%kWaVX8X}*0Fz#H>EDfacLk|lp-*(lJ|}rSN>N6DmKrctvzq&E?$RL zCz;4@K;FY<*VjMXRL$b}GA8g@Iq#)$8krGG3O?c12G~3zK1~Y*44Z4Ojf~pP`dyS; z%P3ucx$pm4@}_xogDJ-?v39r&eW2U*t6)u}bWxu=oJ2d;R34B^3ks0^xdXo3n!kuM zf0aiOAvYMkTq9ra0%GkE`2*0gs}9x2%a!O zm;wfJP2EF^X2)#mqNeX!Y`;|RbWg!WQG`o^M7R(v*>`>beA&Kf&c6F|LkSHbq@9PJ zTX!GcGE;H2i5WAn4g)++&}v%&U)-ITMFZ4_KRNoA9Pl(^T*k%bUWVLK(a+K9u*5Kc zIfRLIsmFn`bJKdWW8XqTJH<9Q?3%Jwz^pEz|tp^TSFdbF)odfeQdbqWJl~=9R^+6 zKh9~x;wE-*V@5|3=-Rjmz6tq)OIB|~jsOoI7>hi37I&d&Q~(S(-31F*9A4%`ua$ zO=qO^ve5x55!$@rKqo&%gsL_IMf7#+QK@e57%S}Fs9r`=mM4mDLy)zu4K)$ptaO%Q z7sTf!xJA^pjVF5!p?m&=sXzuq!f2r0?Ao7-xfJ^3`?2uiF}aQP;!n1%t$zN^*KyI# zbFfmP)B9J`J==>5ZMy-&aa;es=f;kT*C(CwDw`cnEAo~&P3KPjhGqVU)PCN5TJVSB zAE?z=CYR+P2Vt$+z3)!yH8bcZ!U%A``Q*90|E}V{)HJaYSuVhRO@o>59Y`VC4P>Jq z?EvNVM4D?KhWniQv4e?!^R!0A*QeruC>fFAP2Sa?ET?Xk=#Oy1sY4c&V1F0s(0?zw z?~#%!@xHD|%~q(0wAy8CLb2n3+HlC@XQhv+&=ZpMr`ATQI_<@jqe$P3`t@*Ut(b<< zlgts~C`?`}+T10HG)Q-hXL78-4rZ`~_1npKHCRQe@aSeeTVYQHd$9wC35pME~Pf;m^4 zYPAD(7490ay^v*0qZ9J34?Lc^NW1?`La)wsY*&boUb3h5zU5AZ<+X<#LFN;TGGI}i z(SBiUjE$3ceYO2Ff5!%(N80s%-PbtdB>ZVqG3T(diq*FAw+Rj_Lf2JkF`bI-po=Zw?APGWl8>}|v)rjyNoPl>cE0{jg9>1>mHXQVi+&nw3KugI zkW}LOPLj$G$kP3^Q*{EJ3!QC#YWMVhHQ|NNT=VT~B#`Au!Jc%=#AZ#K!u=PIOXe8@ z4<68)J5vsm;miEYX&KJgj*>B}LP+&$;FnM{HP(2)CRc zT&XQA=ID+?r22QZ#PQs5ic1-yVi3C(a2d!Q6gjWzm7}&qBldWji{-@JyFa!qb6D_% zpF8s_#K2Bqo$P<#kr~-TeI6#^7nc2lyRfQ6lGne`w-jf!EPmR5- z+8t~U^7($mH#a-$w{!-%y`ZXFP&h~{`_xDH89hI*X5&$KaNL;}ewK zohyT-U_?}RzALgVu-++-X-c6N=5$e;f*u1YKk7n_358S@-p~X}6@5vI)CUf$P@+r* zz3u!MR(p!wNKpyWzd|>tGfj>LD#?84os#cuXB=hp|H9}t!kI19Eva_wpIWpCGJk77 zLCn^|{dp)o>0eU@=39E{!9$7zREbWDd|%XtniklmHz|W(OE&+$UqOAb-A^K^Z+zAJJ6*GS#q*bEn-qt7fUoN5Qj+i8KHCf%Ddt@ePp3;+xcFMAt2+)y0XKCqLeV9 z#QgN>Qpm~dwiCDlBy)3BY)#7K`+*w&+>DOOsXsq5#6Kmu@Xq^RKpbtsa;|)2oxA*r zs2Q@t#ux)vD(uS!sYoOV-0<#0~Kv|vwr+L%8a zKv;4d2KurTc5FcP0!b1uB_~1^opV8a9I1^bm4FOo+RS?+7qbrp(Q@z)rOU|4p_FI5 zya$}~7R-Aa;n!)@rGc49DUAi*^AuniE-c~TDh&tTRl0X&zi#B;7K1E&ScMp~pOx&KXACe~Gs1O%Xk$AAdSHe>KfG}J8l6Lf< zxH_Io9^;CQ|HhClKVmxCtWdhBjEZLN?~Dsf1;9QvN;S5O>raoE!UWT20zw1(%=Y8` ztv&Y%$Fym?kFJQQCTC4aPry_~d0s=`T3YVBdWl0->4*x<$PMO8Vr^Qp zS7uaN!{#;KtOZ@qk@&F7ecUvi!MTiX08aX6v#oGCl8*?!EC7nDsf2Pt?dtrq+Z_IS z=oma)`7}g!RK$tRP!B0GRUlf@hth@jBmcI5D={R63V7i@%erF6c`k&jOgPMJwDzbK zBxbREq)sle1IgU2@9Hte;`oo3hkcK)ykbZH=eCnWX{Po$j>bL_GlD$@ZDW>{dfdAS zG8p9JZz)25N@&{QV(bTsPboyFo$AJ%_WD8!KihzM14`OHRGHjfe4;cLCho>O7waJ; zE;SS+NMF}80>ty)+@k?F{}ICM8LS>= zXBBaNF_Gb0a-okz;w%)7zpJO9mIp76Us+?8bb=|E_JjF5zvX`X^GtXeOBimMjNwX= zG$ZzghAXpry#xE*NO+^;Q`3}@jR|qy;)bEic%+lOQB55w-M{;37nFEP{fTU59D~5t ze~j`!IW3?igj3SzM@B*?eQ*G-5e{Gyu_%Ekemu6SbnlKG;)+O1?&^6^Z96&o)HZ%g zUO4g|h?27M#SO14&kY3d>8GzMDk{2LHjKIfKKSpx_^{^@g*99Km86H;$6gHOY?G7L zB2VhUq_X>8EkJ{{{7V?wd;9~mE-y=+N<5q7I#!?^*`&OfoexJG{X(nsGidsDAwF6r zh}E}Yld*jHSD<=coq2IZZm|hsu6M@DZxDU*^NX{mXz@wNIalmNeY_PukNXde#b2v-AbQ zU-Oet^<&42E0;@O6Kt;GX9>&gv&Yj4kK&W9sCw!$&cs3Fa8q;tEo{^p0g<{B((FV> zn-a39UUZ>Tw5cUjL+a3~raeYfBqtqYi3``(GZ|Gx*^H*eNQ8ee%WX4-+YeV6&EVe+ z-R%QFNJi~FicU-JOH8JEiGiE~xesM%t<%XtP*)+BjY-8kZ%!_xshH=o>Id|5=Ye!# zsN^XM#cugCLSAD!`#WSkOV%KQ2iZ4IB3g)hBPX;)+=BfOAOk3v6x*$={biJ)(8v9X zkZ6Wksleujs_*L$Ah7-Y(j#c|+9$-BWUq5(TiA@~< ze%)171@NUACi zJ@HOpy|gF7n5pc-aiYuDX?&=~8}9T5`9=WGgZ8Zv-pLXEt)(|5HsiOy`$P=${h7)C zC~29wVK5Vs8D&hYH=tt6Rc<8uwBtV{C|vh2r8qiS*ZA|1Hs7#v%{V&Jcu=f^V)~)^|3_O}HuVD39(DlbLL>4Y8{g-YO!PTqo8#XT6VZhx(5~(SgPEhDi zmZ!MU8{si&t~CfVuIY&IxPQVfT8y)Zh$YHJqd|P9KH1`+7F3#Oo?y{Xy!+##Pmo!N z&0!@VtiYCu!w&y-3)!TeNh13_+LF0?B~CoeiL2{<*9))bfrFMVe+|;25O?P>n^hHf zpFqjvY0>CQd80^>)wS6F#y&e+wZ}krbROaMclGvTwM1Dw{F#!1rl+KZlH}t^aN|OA z%=I5)Rc3*{RD@nluNE2#^k<^&a|7ii@#}?zGSW;{7YwtvDH4FZ%0c`y^`JAWJk}N4 zfe;3K6#LSDZTS6A6Q=w3nGl)<^B$-~huPbsgAAcLYY7A6L{ zElpv`HJ9OxVDCq5BVnI_)*C`f4b0pYl)V<)>H)%?JQ>U@4BGt{T-jCAmC;Rc%t#J8 zPrh#rG2X(gKXD5~6{?V5*B=i5@c*S@wl^EHy`~SZ%nQU(bKj6EU0=|8?RS=9Smy|c z>OZfE=Kj;o+c0^tcL<$Hx?+zftLsDjpU0zXu!2O5EwDd~P`E)Y#q~_ljh8zm1|y34 zH6n*SXmFY__7+ww_i!@BB05c5_+u$CTIZPQH{8z;w#P*aKy-5B=J6Nz!j@TLOVm*T z7Ba^qmKIShPkxe;;W-PQd`E4Qzgs(K&TJoIO+}?Ka?j@QPQEBiUIexuH$(5YAX-8U z)6=*5?5Hi?h6w7Yv~^Et+_P1;1*V{sK@69`s6C1(?~!{0LSW#;Y(hZ`IuFg9QQ}*;05|y51gcwV;eU6tcOwLek_5v@&mlQ}TCg4#)J<-fu;1~0 z0t){6AdEd3#`~ z9Pd9iFJ0KenqR|BrXFtx$q_0ns2D0TfeAeAMR2R7(*h-As(sw!2(w92S zJWg;jFpVuXa5lq>YRVKV{uMVJWNEN=0FrqL(WntxZJ}RS`p}QuQ+c|tcDADR`D^P% zubt}PO*BN^f{7bj9EzxETBO~JCdxHy%<4_$)|xK3o;cZo40G`dVZ%(IX8BlVT*!W0 z0LC|0qXZBPq|W_kidoX(g;Rzh$V|eG8_CWZ{+Yxx)J22xY$%C(bQm9fkqm48Qgf%# z@`^u8qJvj|`*u80J}z-&s+vAt`1QspigX%F9*3SK9q{%W1bF$BzC!^oALIyJY`z_i z-iQ!N&N)4FDf9$25&!;s1B)T=Ah4X=!o#}z!p?mG^na>@UB5Xhi*~NJ2 zx17YBHou`wW1a5`HYAdA9p5g*>fS+(K8qZW*@)Seh$vTt^L?`D;P?;+T=D+fu@xMV z6x){~Y8aTfaS!f_)DGF@`5rntJl!h{#%g3aah#!>8k>FWIVtNN=2s~xJSkjPUSc62 zJ#ln`>!99H7lJ*2?Rj^Tu&(UITIY@vY&;_=((vNh%(M%js2yWZCs$Z>Rg7j?%mMS6 zop53vl{xi^q|h>5BchOwF}C0J-Nwu-HhL4yzPW~2a)^CJ+m?)lkoZA4=?w(}nU|Xr zSPl`z@gGS1a2et97S&*_Ncnm$+KUnNGMWbl7TL|3FY`{N38 z=p2=JSWzwGuuq4|Sb!+iarFYFLAjmbkI+yV-)qO314X49e979_?ND928(rBU{(e## z{Qeouj6N|gQCZ0;KpGMUudsY#MAyN$4JR*`5NnIoax5w5M z7AtL$LHLLM6YY3v=Vu(tYqi=G3njsP@WxKaqR;tvt0y=!Mn{^4M<|{cG`QJa_396+ z^~{@^z<*!inf+JgK7GDfb_*8e54bC}hv2n+_$-=tR2dyeVv@hm5(ZKe8Q(;OH{59_ zxF`G%R| zROQ7%b(*#Wiu4CWlY?{kM=5DnP_Ks}e>-rjD5eY$K#4IMer+fQgQ< z426amQj%cu^7>VLH4+aqnXewrOb>g19y8aRlZjM0RdToc*Zr=xBKR;&@yq$ zqoSQB$C3k+5w}-rzp^&7)e&^bdUeP9n-Q=_Ff7FMcpdG}K3K7GA`>ES%sPfUArJw^ z!QKdp+m}OWHQjfVpjjBMdZ5uvSB-reIpjX-b2rJXY~)_bN!AJHp-D0iW46rCVM(0y zZVU-L?EuvkSF3X^iq*0bBm#IMonN4IeNp7j(Ar^+Vb08kg=ht{gB&0Oide&_CBgPigwzxO}W&T1|saP z@HU65Wn#Wa!TETDkY2zLrMZy;TCbZo|7?0wZ}f);ciT56sXzy=s;{v$t*z@{d$fr8 zU=~3?$^TKxX{tXbExA>x+%F^~IiB_y7n^-Ca0dZyXyDqAvRpHHQPk$Xhd=@0c|=jML=CP}j)~!mLBCM9I;S-$4X&;% z^G`fA86`i;nbfr6LfIk33$ZV5{kB8&+;|^P{ehT|u}$!#oyzA0AGB*&TD*S~JjwMN z_FG3xf1<{w+rBFBW>5A|)G@JN3WC9XU*is1;Fet3wkAna0S-tq#?@YPzhr4C^~;GS zV!CqDfYOX0{!2|Jt`OInSj~A6AE2wj!$Awkzq{I(pGu>xVoctVqF8Vy*DfoSi-2h; zjnhQEBtPGp%vc-}rwFF*maA|QBjF9{<1)_$FQ5o%<{R;sz|eQf*4dBoI*1$haXOfu zkObH`mll(X|Qx7>iA0teaM_9%~Sr43lTQrmLjhslwCm*aE4pn^2K@Lx;j!ilrM`w@w^67-vhCdKZSePtMc@kic)25%TM* zu2fU#^ddLbqUG)o?s!oZi8oTi;(=!DgSdPL3xhmt4LTTa<*2o}Xbm=n6_YH&0U%%t zq-V&JlssX^4fi8jf{5TG`JAZGE|UY}B9cr9jSJ7_Vbu9+PH>yegS15)Cl12;*d_cD zhiIFew!bzPZGgYZ8wjpf?4Q*=Yk^G#sLC+wnHGf_G!h}N*A1FxO$TxsJn*XXumtP_ z-!MbSiWKH>j4f3Oq)G4kOqXtFr70X<`m!Fy3&;1j+BCswE&lv-ypKZK`6h=J9yoQg z=>Fe-Hz3xVxT$v z2D+8KF=u}2?6Y5NjMtCv08+Uq4o%9M}>f}wiv-uMbIdvX>azR*E0)sH!yZuSKc=OC&Wo?qkxM&4p z62EepMx(p_--*LPrsD*g?-wDk74x9VxGJ2Tj8QhI)AL5`;}92$IM zyn}Dt!jR{W``>gU?!o^cSl~T&{&0U>&kKks2RAeLJGP$AZi?=Qb@m zF@jos2@g4ExJ~|x%bSaQ^yz=jA&|$KWhv?KEc3Bd18s?%W1_U}Fa{SJ?oxhy+)b;0 zYUGtaCr<7vQgyh`lQGow>3sP0zgyk2H@A7I|9vQuuELRR*>r}B0a=>r0(8zcSa@IrgpYrPS&|yLfkDK zG3`HeH}^keBJLbCp11lbken0#e$%BDX>-ATn1mn3WyW7Hu*iBV&B|w_;!BBezF@=- zr3>kR%wKbL9pPfoAZ3O+h8W$~&oC5uu?`J? zk_#R=y8Vc>fIe*fjHY;_w1jc0q7?Li*jp)6u2sa=l%*x(Dbk+8Y2-zTYO3%tY5j_# z0Kl0Bh+w3_x#)$B&eEE5f6>c%@@#t1cXjG9t=N97oa@dK6d3dsg1Wyot{CSxdQ9wb zn&u6dDm?AVw)8w9vyp|{z|^8xPs6pm41{C5vW2=LI_Lham=I}>D`b$q;Aci~7)&30 z%kmYBPqGT5Le@bOq7djtKlMp2Qo8>6L3$agGZCNb1Yn80=$DDwl}9yb9PvPhDw=89 z5u^Cz8{8Z|NHY^1Z`kxgIlWdl$yO>TmT=Y!lv9J=1;yKmv0ZJoK8OayOnb&$JcxR3 z0?L5cVcXJoE5l7bg+ylLDOlI@)ayi>Aa>h;!HFO*ff&3$=jJg>yUZ){OTsq!aZt9X zd|yLsi}Us0KQ+w85RvIF(UpYn|@&@7tm|!t@M~Zw9HA5Yl^tCM*OPbF($7(WMI2 z9CsX>m^wJ(+8O6^X6GNC*l1IM9~nG*=5k!}l3}op9X$jt15ehBhU&;-=y$jJLo{#u zg%e(MS*QaQ1Ye5j0S{KN>T7pHDA&nkVaYzs>@%zk(9$F=KRzo%XF&e?eATrJ>ojoa z2j>cZ_3^YM7r@Xk-cbOWagy$Rr`!BC5T&MLnJ7qG9SC!!6|(UKNnDNH`$M7ZtIyto zOVdF&0jjGz&zz~#+6o)0shw-NIS#I+Lib9pT(TP9${ z`p>-iAN?(ai`(%O_MaE!*!rC{yk=Q$!Pr;kf|}*9Q}d7fykhOT8lJeqeKE0Lw_&(C6(`vICX$Yl4^-0>aS1=vVX&>l|&JBCiqingtGnUr9e1<3I72m_<@>Fy@F=|Y>!OiK1}{y1;$#Q9lKFsyovL}XM+=9>vl z%}Y!g^D&gI({dqLaKOwa!KKq=W72R&h1eYj*V2Wq+>TUrbd?Ygx^Y?|lvK<)bKS{i zw^l|-NG6;>z&Ls_BRS<6P~e<#Aat0A;so>tAtFu$^E)p5Wjlm8%XvjrWL|GZreK(} zhgBwMN>NK9fVO>y=v0Ffjheh+pr?!_iRyuOQ&t>aCzgp4y13r4hC?}48J44k=!IKg zwIRv?+8yng88w4U{~tW&J;P^xN!-r5fQE)%=R{xMe(Pw_^^BBrQeUPXYzCt5gvzGG z=5oMD&7I=5B$ez2O9}RHhY4Hm8AzIkh#wG*EK7dDk)GH5RJ%7GnKIhlFK2pVc6iVH zX&5Nv&So(weE%8&(~;IPs!{k%4cqz1D3SD$a@saF5}F#*7h7A0?0gW-jC|1U@kgh) zX5YklU*3;v zsV>B!b0Ui>-$jp~7eBZvsZET0F#jEvZ*_;TlOTv+oFMoJJ3u)5Y^9Y-33Zz4-tWIP z?;%H?{vZGIxTVJfrIICHF&l!2{?TcZco^I4{PH+f7&`Icx7fn7|16w~&6;nQuqdux zi*RGdp~s&4Be@|)wXi_b8Sqy$Go1?)@Y?_5P3x^oCSj}VP451A zm=!3k+^i>vGk7HLKLbb`6s=sZH)#s_hhvK8thU3NHT8(LRy+Ij@Yva z=ZE#m`b1o2N-W&3*%=*vL*OYy12OT9#k5HmQr>g3`kf_M-&UixCoo5}8iJfO8dOmL zczchm4T0%lT032Oe34?b1@tS9ukjqvr}EyH+}EKPSx1L8QAJY5uOM&`|F$vIsbB0P`!cJ`I5%276$RzOVp`)$Sh( ze>&WWSkDXka5~#mSg~HeVI0@_q~};XEvUpRmZspP*0dIy7ZLg?%j{}1r~`>O_fc_~ zT#lKL;*wp{k}LV<^B;A+1MLHDsc*zrQ4LMEz4u{u52LE?rwwVMg1l2Y2f6xlL-D5x zYH0Yubjc<)fzpjPeZ8t?U?6?bB=3a(ikLH#a z11v9ii*+24RgX4%X3NBOPBQ)bHj&E!S3SApO^!Dy3!wwaFPIpt~?L0kxisUG&D6;;MR_0FutoR{v;$x)IKoN*bR>a%q2}j z#WP3%x)v+8QB>W&80-wXv2DFK8}w^8!Ez8->G3Tb1UK-c+tv$Lc}dNE{ouU)-1Pl^ zV5;S`X9-K$iFFD;E4X-zf4&VpY}5J>Dql^W(M2Nqf;ANNf;z`$A|AY8^~T*rL2i40 zmW*&tO;tK*K(x)K&m!t5f}io>q6J_J)UCt&_;X0#$u2TAX78o7a$O7sNG1%T7w19f zY~(76BXBt>>}e!})HR%Cj^4t*Y^Y?-e$j9&?hFC#k2)GFq4Ih4aj1ajbjNO_N$WHQ;^JS`(}5% zLOZeO^~*+0ov^;fk-rJ?{5Cd65DCuQxqg) z83qSqRu~BqaRy!3*0%q`mL1o_$_+cOEP!77;CIDecOR~!hm9@y1q;trdV0?Aop02I~UbjTom;OrM-lGXcv+{%Oir{90EUBNEX_5yS+-zSCTU`%Ko*eQQ+9|U*?=eaWoV)r#0ZC zR45}ea{S-vs2^z{vgBP;5Srj%ia5^3vMAe5rd+mL4m?dfU6B!+Y!F-2GvXp*ZxG;+O4`WpH&jo;pYQAHMIG!vjS*h>IFa8|ZTo6vGo-JIHM+?BKNG$0+ z=d-&)FZymie$T#1vkp4xx!uIvV-G(As<_{y9=@$#yO$Wb46O0S#{;kF!G$oY_m4X>@l;^96gU z{EMAFD6RmzAo%cNSy9aK>OnQf<+X*OEV6i}cfOn}ep4Y;gc%fx6E&r%pV4r_AQv=) zo$wj+pdu*^Wk8Rng&WSz!7rj!ny{{s=KDw30-71ClLcHwBJF5j3rkFR)sQ)`bmv^d zVr4aO^(U6VrjeX7Gf}J$&(s#BfzRHm8vu+Z^4>aM)EJ| zzvHgqq(f5qmEyX}qD61jS<+C2Tl;*f>B9ocp&=vD4&mxrl2i$qUD8|BT4+%)j{`zT6tWRo9x)nNe zIVYA}wmpEzi*HMjZBg;VU@;^A=eQhhwrZiWELVQ$x7-}k9N2J}TZBtn%Oi2QCSW%q znBf8adZRksv4?7vCo3qi>LvW=uXl%T{^H!aL_ixP2w#cky!!ZYx$rLB*fo@(k`g;8 z9Qq}ORcS9DW@i7ucQ3y#8wvoOtY)d#cVZzj`FS4q8=XsTs~!E651JQFP)-lgUh;op zlhZqs1%x-py?02FDN2jb;@{X~r)x5l7BI?Q5W!vDN7GBjN4}xHFVUsXzkp(pg*Grt zh9HG2@+^lS0Xv31UD6>%JiBhHv`n-^K;M~}!ooRdTsA~CS$wTDR6v@!=qJ*JoGU&xc{Q;y=-s7VRucEkI?OZa>e zts=1@P~^Wf@;CfuVTp+4$G9ge@a0KXDUOeklUJIuAH^MVB-2{`^M!!X$(a~|0KYEu zkRM(;?LdLM7YFuek zvUVhQXEyDgpbGoY4hg=l5QQ;fQS`tKOU$^n_7t#bfx1iqTBltO18|63q$Rq6EVK4 z{s30GRLGEL4mstM2NCOz5xLzhED8+b06+C%9lkWr^(4mR$DWuGDv?25&JQH4W0=zi zgie-Fj)hyYKg8V@hO}GXw**m3uqfY0UQH#@f2yz`EQIF5Gv!^Z<7Z5%SuA5vZVN39 zp@9*v)`82ZL2;tiw3*b*5gJ*V5-{(chFDs%xQ_V!I=tdYvUq|BwZGv3OYn`61WZuC zl+j>jC}Oj*Q!6BVJz1Y~BSjQAIN$-Ux0ntW@A4)ua|e9eJ>ma%c>|;2i7b3!&9-j_ z)?XWt)<_1Z(Sk%B*Pp$At4-+u07CvQio|Dj#EQ;`FY)&_tW(eZ+VkR@;Y;TMq6v;B zR)&(GhG60!UMGCk`Qh0!+3vY@U%*frkEs$ptsvx2DNk#~q6HGK0M83nAU97$ac&|Y zgE&H0Vb(f%Vt{|KVZW~dwtOcUB8nov)&Y^LLT~xS2N!P=A1pJU8Ju|Dui}Xk5ILh4 zM)89_)81Tt-9u%kI?%9+M127bN3NznCZ;+p-ilH}*hi=#3FtA|c-=TsubYVEdsHRQ z#(DAz;`@Gxvk=stto|a8y4)4MkGqmnYdph(;-m)f855g`{}Fo@|4U*J5yqFU?1zBhT{=LWm=M7 za{2v4t~8f4HhsXy+N(u0v zZ&m*ZbZMN3HZ|v$@~tKX>u_e}ZE%4dWe)v2qfFd(DoX4({DU-To`M*TAuq>MT%Qn|;yAic%H@-T+R4UCB@WC^YITR*(twVsa@0m~dA@$3j2 z6XgsG+t&s8Vjw)x)tCKlRA#rarPzxVZ2L2>I-)oe?G0Okb5qtpX@>MTPQr?6X-!jn z5y21Urs$G7pUJDNGJ$Mnz>nDH+t*m+a}58`>)2D9D1y=1S~C?s{mZt{L!Vz)swy*yA)Aicg)V#pvZ|n!1eip znM#a{I~bGgIz=8TU*X9_mF3?z|7j+n0)II3wXrE{Nw<*29_Sso6C^wE){;Di|%7a60`wBfJkc}B^pk&!wz}M(2+r%W)&tcIPCbBIM(7fxr5LSI3bay0ORT9*<{%Z)g z4d|%LmqP)hT}vOE^k|pAKOO?G2!Yga78CKtlwv@N7aVGRybh6L2!M7u~D7Bz(()7^c;O75&5t8iH&z zE-c>}K7CC7B$gQbXUU<5{Yji=@@dnSWK|I1sQ%AvBA;f!cT--vMnSf7roYLdLl{n$ z=yTrVMl@~$VrySZ29edkXbG9|9m!8>^-mRfMkzl#pO?L<)a~s%yQEy4qkRE&&163i z7wvuW?*3Y4evy7s28=W&FT71HZR(gkXpUVru^~2|JlA9;;_WZTW z)FjMZyCK1aOw-}2ah(ztE6u>2HBgBwupQR_F~%Rn7LJU6lQbSnoQNe2N7Ag3v0rbG zn0=jYZML$$w5(QSHZkSpGkL*+tilSkaQRqEmEOR-ftwo;>A7+~anc&)2@%fHjmTWS z{7MD0-SSszN*G^v;JAzW8_r4+0}Dwtzr^XBP{$$E&xG?cvGcc_PEd&(*X*I|j0L+e zHv^?#1*YZe1#NCUu9CHe_q8tnvL)DBVWf^!|-i9E|%1Qmb;5ACDy`7Jz)0y;E zhiE$HoTUaknGRO>uB+lZV$^;4JB!*I1KIQaUsnTvVSVI&1i8SqugS5pqqOcWZdLLG zG!c4Yb7fCjN3>qJ2nl58qsbZlEMP>b9!lM7F&MvTol=$X>*^v5E=4|o1E11n3=2KQ zC`30EDe&?@iv;jpvC~^_Se1%7NWs>nttCd=TUJ9#P^{i2lv+}!mHtlasbLdZlsblv z8)mMiPuw_+d{k6e|7a4SUTQF9@py$HMg!at2mx^H1SCBOCJ~C##SlLTGbyH)YMl1y zbf4?esiqT9R)5>?28#iy%&B^U^d>%t3KQ;$;)Js))!(xW3}mMzwMW%bHJ#}^Elrq0 z<53XHQ6g}ta@ZiKhmy-El};I{^*?(`Xc@|hwNJyvx4?Gj^Etb6Ujj6-L^CE|Y*%G9 z1c_CDb)}%Q65nQziOEcgpd}hYoTfU{eVPxXWS{i>aSbA_&&O^t5}j&IB(+n{X1y{_ zKQ%%7<^p{_Gb!e($6O>HeYgpBDM>mVm%88n>?@mZP|`xPqI`5PL?gyrVn-fTRO#yi z-NxoQ9HkohV@d<4^yA3{BxI8;$C_vbESfP++rsdWFtcOZ>H9>%7HW~U;lQ?&xA9_z%eqg-IL*D)j06SuTA zGI-G@;Z+v8F2`E}1rEDXU`7Wm*9%8wLDNR_Yu~rSwk}siaChkMpq4r6N^hTWplb_- zCoD)_$*z<+BF2t@$Tli$b}uE~c}_6YkoV`aAUchf;1vOSNBHtPZ7NP~Sz&A%-q7`R zZe6p{jm4zdEB8>L5~Im8o>3&Ivd|6Ny%XGfgm?q4`1LuoDHc+2qs3%n_dfj4?O4+p zN6RI0q-^Shof=pdDEeOmc!}w#L1wd%kzXO9fU~@>Qeie< zlm$_NX()EFS%}aZ(&FenBC8w^l3y_+2-dX|6EUd>qu_RDA+H7leXq2nkkWyUC*#L$ zp@(~m@sttf%5!u;AfAn}@4(32L;-1Gm35feB z5HOf;a^0zVus&WU_)#BbTn>0aGnwqqiM-i?*A00;5e4O0(<8z6l`BYcy!f~+)>hCc z^)w8UXVm+qT{=bl76ZWECwgNE-4)d@cTbt&El#{DMYTE4AW@O73tKN*E zZCyiS#2T|GBM(Ku`R<9hnNx`$Z^SRK)R2jc0nhCSyl+sSIKPtY2Q91=Na6;5IRGk? zzP53sHgWU}GkzHGkVFNhHLm6~;DGn;w{MPabUXFYeqL}SW^4GWBmQ6+M*G#d^vrVh zI5oJlJms`Ue=8{MU%K?e<4m5<%YOs+9>V-j4=Zg;J=zMFG#}*|3lf+#+wMrF|AbC& z7@zome=BuG0!6+L^3|cz&$&kjcIW@Lh`ql0LcHPlz2GG_;_H68|007Wij|3Ie$r6lNnLaQO#%CPYH(?D0uUO#1R@&Fh-u~CBDv4}p zyr|lSLh?@Mk>=(3)-

    nA)0i>Ve_Um;FsrJdgKL+7wz%66`GKpxl7U9$LJ=l~LC} z`Cf_C<7wr9dOWbZ&)#|Lt)b9tVq>1v?`)O@H-vKTA6@90m!ymxeWEF9gcwg1(?wdP6HRMK2{lJ_~M8jYYs&zR|B`F43;P^#uiGlz4$)Cf?K|L)lpMAzaT4FE)DCd;t#_JdlFM1 zsOkW-lh)dkVy)8pldDH3TU}`D=cKrB2e1T7eJ3=i=IZ+185)okJ-DqiMmXYy zA4wCLzs|Gz=9c8B7Yqb{2tdprrIS<~_U}uM<6F=4p_qjySYl^jZ{ysx?OW2BiDO+H z5D}?0M5br|8zB}~*vPu!T@$sq5zfEM`m00}T4=wJcXi!E5K*&G_UGkP9paAM5M$>V zRy*DQs(Sms66$}^^i6@0wN03r*tTukwmq?}iEZ1qZA@(2_QbZe{r$V!mwnfL-cxVY zqe?0KLqrwo_$)SKuCE{NHIo-iOKv(xhUQuP*-Iigng!@v9 zgeAIDvn=L#{I&u&O);dQCIDC;XMJivt>%O=(eYU^ICA7^_7CYe!W93DpYiwYm6su7S zLX?2W5ZA~nGRjJHyuGW^-jqz<`m2<1D@4L^14g0ibiEUqYm0w2Q7~$@;>sfKtN}#0 z`p-%lYcpMC(L0(N(3fo76>GA$7c3Ang5He9Ts1%~m3`aGQ;kK^* zJIL3~P5Os`m=dS&hu9(Lg(TaV6VkRc5iq8%#*DFwUoagHn3$6LgTimcrG_9|BhX$1 zy&)zp=o3)A6Ny}jifhG&lVrsMw<4nXHKgMGBy%Y^Hl)7rB%OPUL0S>@!U&z^7)Y== z#BvK~L!&Td(Y56nP8SBOL6u=)wVDkUXbL_mpZotL{`qp5c6*{D6{D!Bik94NEX-?KkeK3n9?1?PBaAj4#*z{iUjKX*d?-&sZ zBuF{5YRy13^{WZWMT*jz%^*bbJ|8yYe;w4A7^#1Kh=}Ts1NXB%TL^OgIY_Kuim#wi zeaMzK4ud{Rls?}(u*%lYv55x@a10^vbiBN9Y7VL&pH-g(AuKoQ z%md$N#H$m^K_dLmZ3JEGj*RvY=tUg8y;o6)qUWna(hFIB`v^T|7ogT`-pD-OZhXeu zn|B+*vfQ^I>8THD|Il9{4jcT{SW=LG4mHD|t->#}k(Gn7oMc#_%}Ql?;ko$CzMvwq zcCCvGJ>3|VQ!P?<8?-o(lttbzI(yA+fC|NUTaug(X4=*oRW!_WhfrdvFaH{)>a&tj zBY7xh42n!m4P79n!y^CD@zYTNKKOI$qx-I^U<@}@*qCO)xBGDT6JlHo0+*cJg&8p= ztJn4^#9!{rQen(?rVIgm)E>vHY3j$Br61-i ztd*MLr^gO*5IWqUC{zy9<}sGmc)8ON+sn~4ShPB2p3O#gj-Q2VW!UIIkWs)LxO{Q&QHXo&b8D@H z$&J}F^H$3lLMpawwBq31K4+j2Lq6I7%>j(oIUdDQK0CH$<{mH(mtymFq5*nRM8veb zlO(I~dY6aP<(c zp#Lg-&B{ASsWfN~c-3L_qC7n-CBP-E~e=OV3>Bsz-}>fQVqEbL_VJV(60?wBId#V z-`Ef?@wF49G2k**PAR!2GumMCt-02yT)1W8@%G1q(1WeO0B%1PQ8(Q~A!7oEO5kWb zP)%}EpBxkVK)H!3{#w|B;O=gm)?9rsdL6t3Do%Zvq-d@=C*Y~68? zNnGFlj0`;}+1-o8>?kb_dB$QRYT8jO*@D6jvW)hWV2^fL-#RyIfS2TnHk$qw^Q z?Vlg-oe4adipWh4%c@CfR{uc%#LL(W#+zm&)pcOpjfI8VV-TOlyl0G6cubWB^d9~o zEd6)b0IhWj8#G*tT9@mU&5V~b+@=mb_q3*s`h+AK);N8}U5W~xK%M&c@4z~*o+<_4 zBj*o$)tfl@iszCZs>p#OKd&gfC**DA8pI;ZQnf^WSN50I+_A&s?&!pee38Kcoy@Vr zZhM0;|4(>92kB1w#l1n#ML zf_Yt6!9LT0B%*Po`BQf14@}eFbeDdr zcmCwWNg1EcAV|K97Y=c?#SU`_Pb`GO{(GK=6}!Cv4gG{mR6?wEZ3Gm0pp!Dd4P6EK zhHW@K*n#U{$i@C)&lwry_g~jnR;x^&DgKCvYOV+h z!t1t*x~J9dq%t%m+kmpL??O~%8#9@{+Y0|$)cJ4X&Mnr&bL(qPrqr6vz#O*GiGIvy z9Xct|cpv=%C-$dMX}Hhj3bY5OH@N^Ct#NYs5sC{gHa5wy?+QyM3-`_5vO}KoTmys> zBb0m(PB819XH*K7Ec@i=-na`Nb4&t6n-*hA)=Ttp3)`8jLrn~*hG&bcliJ+%*7!Au zonAHe)3#KSF`VlM?Zj1C1JS_IjoA7dGYbod4hC31VEj_P!UO=v z11uEe305oa;+;v#N)q=pvq4l?S}#Rbw~M`9{WIVK!_UaMz31t^6QVPz@ZXyT!1rx` zuaLhx?X&UYasTzivTdCoF=z6CBR2uo&kNo5X-$D5eS@>^ea)fT*$JdAY_V?ONf=E_ib~VGPQ0`Q;5zrJdnY~URz~_9bo1ui|3cG!>&o~MSc}G2L@C;M{O?(M zzDUQioCbAry}3@2lgN+$B9D@mF5!N@(haK5?koNjow|xIv1k*in5Xu<^r*FYOt4^` zL!BTUC%p@zSQYDl4vdMlt61%f=gEvua(e5nz?<@!E9%S(GhAA;gmt?a*s2b&+50-C zU1`C>G?zPg3mHt%TfEU#3(DjDq^~-M%T{fUrbuLe9P@I!vHTWKPV${pi|ZbR@M0|$ ze=c`_5RrD&V~vnvo^TF+jJ0~{il06uQf+~6G8Zs673r@S%wTqv^&6iBn|;LeEYU6+ z9~R0xlbCn%`wvG&LRdF2d9}4J-|bBJhoq7KH?qSJzP{95QNsDRwm{O#sBvu;61VtY z+#DS%vXbXl1r(#DUb2fqz0D$jBX?D~B;ITW$2XqGu&#)5z69pK%9mzmgUK=R8N8z2 z@|&RDUCB%@m?BuXaK<*3iFjs}f^KkbZ6URJQbn~8)tVgUc_~PcMnx!+1lkV7Nb!pH z7;0na5G%T*a+99sR6_EFki2nK;sRoS@0ysGsolYLa}=pi@P!yNQHdt}SJ&Ui;PxT9 zO?4RryzTJeph`8m$y1#;-cRlVuPhjBKQRfR%-0oqYbXX}Cjd}n2=Ee25l;mkhuyj6 z3ckPn%q8Wox!`@=KCDQ9-)F}2(x>Y6K$>$F3HTgLPEElg#&cAlCs!ACgbWC> z4Nkj|&WEgMff>&TiruEt#2f(2w9mBVP1iE()Fi!Ap$wBN0#K-ijZnDCcMKd^Tl?mN zwmmcHKsVt*_$4wBCaH3}P9st$W7b=>13lF!)G)o>Ii}r{Fup!3&vS2{$YhwHE}r-7K+x0W6AxY1VZARg}Ohvu5k|)3+48_2D1cpr;#0$kGQkLF9sK zvXnoVvwRniUh~^8^j*) zB{aAGzrT@!mBfhYtcW8DVdfwW3iT!hLBu1qqCuhD{wCGB8X-c1qcVr&(Fc}Gj+J{J zX$ZOo23PSVOoMk%uycDMpN+SN6-$mK8n{-F$s?8o^m1hmA%=2^6;kvik}A) z&zT*=l`JVoYMPp#{Y`koZ_o9255H7~4l`J|ao&IWP$X5^3-7|;u_R2eH-CAnAd9Z$ zk_1z^;&jTq7}5}3h#VUmNgAWX5l>)I?Ow0(QV!#z%hhdjO| z0XHQ33Zo_^ujb7mbWL`zz875Qb6ETL(`JV4R%}UCj;LmTdGK0oN<1<rX{5~UZ^ zgE@7F_sF)pq$A=;e;6yqYA2yC+%Z&w9XN9JemPS`n7`KCKN$|Mq{G>zchue0tgulZItnL+!5n-7-PT}%9tAYIdU3GbZ zKJuFO5hcm_BaSt?*`#crnu=IRQ3^EreQ;}-ou<-uBnxLi;_UkVnafu!Gt_MXr~%|I zoHN4JFBIQ<^IES{tZxJFK-qBw;e0EtxOQbwtvo-Fr3y`(w283^%m^bo3RGn#tw{%0 zGGmz)cz#3=)E4+S&Y?MXGg0cj3;4EmjT#(nG!O&At@giNB zV-y$IvI#WOC`3rC;Herc0tc1NkZjv0ho3Wy3u@l!?;vH;4g%F#J^myBvu6f7dA)p( zz7KRJR)m$q7copBJMV{~x!*|Z^y8AY=Vgs!c}>TiQhYPma5Jco=m~yr)AXeNPI%Xj ze7NRMn;1N{y-=Gm$ zZ^DZmZM_=Cx4U@Aruf*bggUkF5^hn08@c| z3;yoKma{&I*s?}bU3(eIiH-R%LvI|dXtMh1SEpTc6zus#qpt!@<%rnq^}!)G%qYb> z768!#prB{cVm>Rf466u7t|@_xL0^NV$k@cyNX2t*2{z4r=~Jaaob9_JPU7?k^KZLL4Fg39ET z8i~eru&eV!Evp7ALY3{qi`pRpLakAAgh25TLfvMPrwaA1J4jjN0N0#-<_Swy5tYOJl0x?!f(oq*uA{2PO@NZYA7J$Ew_o zQI%L*9r@_l`MBMa2an*Iul*0R^77^C^bvTVjsF|M=>;tl%uYKRwwvI*bG6uTwnj6E zmk0|qc%Wn#POhx@U$kl6xSFw8@{SNjHhN!g-62t$Ahh03ezNs(&Z=j|$zDL+44dAS z9MF=KdMr#&8qc){&g>4Z!uQCk5+xfXP4C?SCq15Y!>KqcP&}!;ZFAV7Smik$b4g5 z6CI;%KWEMaMmu~rcm#xI%T1cBs|s~oqVSF)Fk|oyu8EZWu9!;tM;{sQxFt}VRE%T> zmlQgl#w}1_cP5xx(pn9gA%_0vGVjR8i9D`J#js3d(Z*;&z9&7M0+UGowjOiA ztN$rJtPHtgD?D2=ig9dkJ8jv?ZqNc;(r zz0`0vn~`@W+me^3#pRnRP4)^hoL$q&n8g$=52-m1PZ!p$p_%4QY;LN4FrG1TABk-SiAlsY{(Ex{8`eO& zzZ{e*m9Q9lK0e-5C}JIkRQbqx4n1)!fiw}aP?}uynGwH|4+1TyHdFC+%K}I|MV^2Cq7=tA^n$*Wwq&uhpc|6hJtfb^CJNBdYi$Uh7*_2GIg!Y%6 zuSeCj1rANZ=83N|A}2`2T4KytnZVqGm$Tdt-47;6PQ5nGKi@M7oz-syavT~5&rwIG zk2n7za`WmcyR6(POX|+l?^Ki!1QKZUaTu?k7)DZqF+7;2x}wUKCb!~_|A6pf5)0sy79@dH1a$b?j-hBA;YA6A09o4>Med= zlDN<7oE0B7Z_sE_pAm^v2zp+cxGv+`B)z;S6_>X%Ln)Lzhkt&4$*&085#d{FPT^kz zPyAV}zjN*4$&JtPEDBNW$mq!w!oSe;jeJ*PY6c@v&jqi6w8zAkuCGF4DDOvl=>vFKN>!^69h`S8juM}t*^Qe6uh9J| zi}hi9rC9_yFrB$~>m32MyeEdQ5KAM5U(v;LVEg&_Z4{dRxzAo|1l)+&^AKv0nzt-R zVBL-FmT5b~7Fz`rEZ5R}`7(5KIS&6Jj&S@$e3F5PuvOVFV-z+{9-eMQ@2b8CY6VxN z=tFS$5YoaOemnJYKe^LheFoy!R>SJNxMIsaTmF`SRLnXhgl`ajiwe<--5Iezr>mx! zbU8GM;z-w(Bb2J7nk&=YW5=<#rd>Zt^R#|-vDz2-#+hAl&?U(LWe;Gc^0+%+zqEdI zxF*TlLm2Schw&J6hA5Ln%eJv3*$&m|MVg-=8feb)UnZklH z22JXb-E$-LaxX$x;7bFJb{k&I56#Q~K9hW22s0zP@t}Tk(9*e?WjR-faXwH>1OGP^ z^rH(UOwLV?2oKnfZF#0Phtd6VP<*}VF|7Mc?>Sb5uWBJ@z~Ai5Fdb$PtCF_eJ9}qF zK;iodN#Z;Uhy&Wrr|C#N$XF+O_cOEN?^jHpB=|-kSe5Amo9`wMQ!mAFGfcuR0EwLz zNQ=85D_vWF3TAU%dcr(w&xRN~UyCD;z`V~3B?sN9b|5V~G(cON(oCQi5dZgzLZcf<(*mrSaj7Bp46PP4nMbB|Tq@UmAruOpo_?YKkp zH-h8zdu4n@!7lEM2b-zB$ z`@BhHq!)6Xq@Y442q}pP`UOrq?cxqn;lO-k=nx#;iL(8<{lsXjsGb8xK>Y}{IXiGl z%(9);Hvci|07Q#teVzfTbBHHwU!ttRt~)_aE%c`r@vj2Jr74rSaY|E!H)T92D~u9l zJ}52!{ej`HQa|NeB^qimn( zIIx3(&j6btK%wz8!i)XX_CUg|?^JO(%%Z+f|e6e8zSSW@x35kv@ z?}T1T+@}GnX>|Iv*}1l@ZPaXvZzSBlst0~61yqDOHZ$Qf%Q)R`ORD46c!B%OqRRYC zjitg0%Kl+eo9nD!EqPPH^sHp{3~g`h*5&ehxf`5Az3M;FR%4r|(&^!Vqh8l}t*`fW zT@E&DyyGO%^WorfKjpZ5Y#!vW6m?F(l5d{nr0m|bfNuX29uMbCKE&4cc7e6*jj|vN z(X>B}CG5}ZJZp9VtDT1jjhxG}>=eUc2$-wMAG{S|oQuQ};jj_Lak0$fQ3J_6pR*60 zUPE|_rS8FhVr6&#)L8DiT{`uqv>LQu=EB=UBU=N4L*T*h z#_|S6&JXGz<>0%YZY>dpm2=%V7<8Rve?F9<26;F{4rX4H*LzkU1N|PyJn*H5DR!P> z-`WFDU3eXm#*2byc>d!!J44cObW=&ComAY<6 z!SN1O=w^3Vq38%_i3wI@VYng?iIDl@;$2uIQt}gL4ebP{UdWa%G-ma&AR@AexD0C< zZog+m*j=Yb28pQkW>RA~X81@suvaGc*jpaIjW2nQ>UjlX+*{`t3Msv`jjpy|{L~P*qFDbvAbL1J?D_rp0sX*M>3&@{#oOxf}kc4_35B zRM?PfNRiG)Q)>QYLj>ug1z0)+=2vk@CZuW&2@_yR8d=_N5ta;k*CrvHh)@IUkBT{I zOX8$ba0?vv2-!YW&X~U{-f%ma^o<5h(dtekTo%4`qVgEJwiyiT*-;Effj7Bx2`XdEg|V5Tb5nj z$PTK2ZzsSk{w^hVoJzni`pwTfW$w0#lsdTw@ z1KGpwV_J0E^wH$fmUmu}seIF3SNBViTFbIp0(=@v>L6jjZ5-)LLN zEt@R{pix7^5?tL|l%TBCoF&Q7)LHdpvN~+&?4OT47|?zaI_4aosEUe>aaHq8dLkrg zwi55$HBDSo(A6e-K%s5R{L)}a(lqOirNC9=vs>JEU7%BMK9&da)!@tf?f2+pQs5xH ztibe7e1g7YkoVX6n?7(qP-koHQ5xE$6tmePl5&QXfO|{FCLVVOxXOc&nim(Vj6->B zn97Zx;%nd|KuIdI@ulaGgiA+URAt#Muy{4tbEjAQn_W?ZGbS?GVK1mMn29yy(fSg$ zL@|jUojaecJ$amtr|*DN4$3ibT}HkQ90gigBAhYM2W`@0uaAjSgz9ikT8=Q}$D=CO zrb{*!_Di}2N0F7T()j>D6F_)54=9Sc(Bxe^yC)I99$>` z8qb(dTvSMuK>mrT_)C&-$g9TnGe?g+0)6GT`R$;>cWA@2%I#7BwlIiQwwi|RV5s-6 z9;qSFu*gaWrK1W!tcfLB#g>)E0IdhY2g-<(@dsFRi&=bHs-RkDWOqGo5%}3J49iLc z&2ke8$xl7cl;%`!eqS4^-=tYw4P)bB{5XHgo6?D%>*Z+7I9!)X;dQQZJ}--vbe>gV zI$MYp`x98v6Br{nwwp4nH-_!o1A?Ew;*&+LKK&f8dNbz%Kl^IrW#!7#wDu2kMPd()`phreTc$ewKyI3pER{{JBjmSKkf{&(m9=u*J)hU_cg86f;`98 zg@5L4l^+@IQIdYcEZ%Ve&;8qngr~LIw256f&k(92fn?4T-Yi~7K|k!cHw1uty!P4*IbPZ$vnt+DDs+pp2$MZx73{yNZSKT? z(WFTuBCe>EHrjZCQ2%JP{l!5>6;@H(GS8NmWd`mU>dHp+l+e%D^E<5jx8qt&x^)5J zqmk(DjO4uY*UyQ#?A*Iv6X)uqVx^%)rXFg*D=@JCICqSGOAYC6Yfffy!`2};!7nAN zBpqgvpRNDjA(V?>2DRsb7@C08qoXx3nIeOIqa%~1z%E0SO9~55)0=8LrMFB#CPFew zT~hpRPN4T@3Q~o(G6y-Cz+oyRw1nnaB`^>+ViEpNgyB)glq44CJEGc2qa}4Z$%Z?y z8U>J&#muPF3jST0$XLLpZB{|Gck-Ue_*^|I_-9B9(?C=lB1&W00 zA}xw*)u6c2k{W9HC&YC1)b_?dEc;V9aSD)#2kqJvw{%R$y^HIK!{ULn)@?|}B?KWS z$1kps$z`B;V{>L;+@j6#V_7|99p&%|mQ#fDq4>aYj!M+hiOu2Kw|8R?CZn%8w;VR| z=utrl;pNj+`M1zY=krnzeJO);no<(kaG^V;%U+7=A~U8#VUXzhW6ep)NXjgeFUg}8 zgOj}=QXx}%ZDioIfz`bOU;*y;k{}el-VnH*O^$mjt_t=VfLT{M5h9j_XnG5KLCwwc zrgzkayjb@$bJ*_mR;&`6&J_F|$8~t?lI?_gF~>W{^(75*;U2z-hHdjw_8X!-Zs{yd zc(<5(9C*hwdB|qR`||hH)m8*4YV^Lpo(DWcx&3wI_uChSY+v)e9WMQezeHy1`J*(SyuSNt;wzge+|{i{@qtMyLNx7L5n-cIyqnf}r|j?T*M zJK`18%0#+bi0kjhV3xMeeE|mq9^++7N#r}G?dN6FQd=x5OJVRMLnVa|WZZK{Cq%A8 zDvjb4Xhu&dQ1t7?uCB_LI^nfqr~1o~JbLpPy*ALUxoIU^zq(kOAP|99V!QNj6`>K& z0g#J%-YILJ*tj<+sQ`6uNptP)JeWME2UnwT+PSDADlccA^>K+inU`9 ztuv{Sl!fGBneFKKi{jG#g-!QNOq@pOIQjj{2&xOQwmz?>CF(UDop?pz4 zN;Lc;H!zhuU6LfmBg|z^KdQP5I*VrT+LoH|!W0jc)MYeIIe9sw8J{y1*YK$1YcSMs-_&46?sWH0!P2q$xzyK1Lzc)^Jl)f4wlUWce116?4|_?1Q-B6R|k%4Jzr z9WWG_3vbw5|9)r`zDNmPE5M{gYD^2Ey9`Jwm$rmiycxT3>3; z0P_WLuDz;~4Z}XP47TK%LvIu9nVCyZtNN4cXUyQ;%G-6$+VKus+r&w$6t;reQy+DD zArIK-n{Pu8bWnR7yqNBp_VV8hZ`?c$Ir;hk@*=ncEWZIm?3vJ%A29HFmv9bu91>lw zj{5Ah(%hK9@CjL08VI(enaUX>fcXYXn>pye@9EkI&dxkpOQL{F(DkR;^F`ApZ7+&h zd7wUHx}2Y?+vKZ*`VEU-yoaqV>$mf+V>KCC?Ky3N@}L8was~X0JOvcWYE7am0#xC! z6D1OM=Of1n?;6U2aqzciP`&VEYBOsPO3cU!Kd}3_;S?m|J@sXpsc)RsP^O#>q1}kQ zpOUH7x}29`br`k-yB^qr=QL{N_rD$q?w7_-6p1G(txV8=J^olxyJsmTI<{HdZRm}< zxx&l#SkV4_tjIsBR+}^z#Ih!ZB7$%05B)~4RR5|`Rr_fT_3bfwsR85+zvBQ*n)&Qk zV!)!&h4J0>*^XYbx7R0fI$qs>wdG%Pv=OhRyH6dz1w5gNcOQ3LG5>GD8$Ge(fPwnk zy`?Zguh6{rQ3V8tEEZ3S1SAO75zkaa_zQes3%@PxNP+%@{|=>gwXtoEl8L+ogbPd)Wp^+ z2zTEUcbOD<@B3EFIYM+`43ijK-wbs`vcgbAq{*^mn%i!tiB6u?O&=O z7?T68?`O*t8Y!+IedEeXm9Q1wYNyPDQy+rsuwx;Vy)oILYd9JJ*FOa~ovC_!Jltz* zzwucs$FFTU4;y@QyG8Z&DUhqRBwWW~ivyw75FLVYMefr&e{wQ+MSe>*DlW`NCoUDW z3M}VBS=cx?H%xVe)6mn4Nl!1PcqcnJmmmO4abaItzq}}cAHOIVmPMzdI1Ha`#Oe7% z6WiUM6}kCOT0RyYbL)i69P0ba=vV^68ubRxw^t6(eKD*0wj;vBrPh!mC%E25dxzCj zWiQGI8f7+4OxuIkx z#Z3xS{6?T4{4CF-6@3z)L@A8a|BlZG-c0{Uc&dQ)WLw%)^Wzhba!e)48X0mGAKnXH z!JA=DAR4BdFd1LlEST@C@Gdz0^#0(ieM1u(e7VtddE(6|ZuH%-tra(F%X7N+o+fqS(*0NN7=wFGANEpsGV4u`8ul9G zreJ1GavgYvBXlW!yEAcsWGUwjIY{CqcuvNugnrF2R^~_&Ax31xX9rQf;rr#ey<=21 z`>4QYNx;7A2n=r`{`3<{Nj_YY&ma7&CQEZPyQK?eB&NkkBqmfk7hLEIAE3Gi7bFw9 zAf$wKHX==-H(|9YjPMJKJCZtf3OkXL=fD+ALXE{(=G{-4i+6^Yt1?&4T>54H_3JaH zxYi@RO!?=(`teOoS4?@jC-mS%S+hI_jzXL(st4PnO1#!ey;7!jZF7dZg?$0Pf@|HU zQYC{eEYN*3h&6Qv=V8y-SC`P3dKy+vz?9 z-KHH-pF307Bp6>;wZ@hH188`)RHJEMqW7pFYk%A2vnvkTUCK6^K9og~1FHRD^De_a z*p(XU{x1bOeg&M0orysSw>Mr+9p)$qs8{gK3V{5NbMv3@@|I*OQuy1;S^vHvH$g*$ zq}xF0WIuFrGBB!`nDL)k0?7BAysrByO>6uZbbkONr9HsD!#ZX5_iql9lrH8bo&lrb zU%7&k^@zgY_57G2I~stG3TWqDuhf z96NMdr8}N0BycyIJMbUcD)9#1d&8T{Io1qY$3CI(E=fn7#MA~|hMSvT*dC|-Usnf_ z$@W8g;O4&IS`%sGK<9Rz`Is;U$GBOo;=G&WB9_;%|HLUGr*WK-7y$JrHEzum3*^QC zI4~ZSMzcI~NE#^N&aQ;F;N;Wg7K_y>JbBK8vzyX<{wz5RRua) z^M0of@M9erWaqzxTGU8ZlD}=ZZ;9COQ*h;kZ*;9m5f5oS@bU`?*GkZn=z&ooIX>8E zIvbK=(y|TEesKk_+mzPZU|&P)YB@KNY!&@8&H+bZ5UpJA18Cnuu%LMNZOl1b)m>8d z;DVo^e=Eb|7BBd$q4cL06JBFSVJNylkk~Hs9b16_N>FVa4uqie^u_-DKyy|^{{bs8% zPAZ7@8X)`hzLu13Owt4h6l47Z%@%%pMb*KatSDg8b0n2ohS$lQ@TyNdPfpOn6Yt@u zmJxIPJ_&Xska4^9OQ)2+Lrz!=wy)$%qWTL9m}WTH^@mdvfE<+{KPgk^r(P$~y#rvp zxDs|zdV+Da+I6+Z*HgJg4Y?Mi+~UDNv$NXftWNG(%*9O`yvPzl*@u$edno2!r_YMg z?`AvGX{pz@G(ww9;mNovIuc4ZXQvr#_lHJbZWYy`%(Z3tnuUQjZEo9uem$>)EWklD z^#E{8*%niK#~l9Fr}aew<@?EA61NTnA3Xk9b9h#3#Qu5FUcCQXOTt+=msoh);|v{H zawyBhzaSdLN8w!YRPuYYGiK5H9WgyAF8(}t}_Jw|H2 z^mhJuVM3h1zjc$OyeKtcOG200i@8qpCHtGY2~K-LLJ)RxbRS$4ZoobIz*m-|D5N?O zf|MNUEVce2_js|6P7BOGFO?H`JMjdB9Nb?Xv79k#yQ^eO1Mr!=(8+YFD{%`VZ(jka zi1n{x-lCHmd!?>-aNWBlEq(;}-xx$Yh-Ze^n0T~ATZi^d|0a}dv^vs>U*vauPhDm{ zj}FG1Zh~9?jQs8nxkwSeHZ)v{z;(`;5pQfSc;YS9<%Q3x5iN^hyCH5UN)2AAS-Pz4 zQ*Ma`o%ID}k}A#&=f3t1{1E78{nW5or%KRFf9Ihnr}7~A05 zIBorpJqtxd@S%2V7)+{wyHGl>s;AW3Xi@zPR+_JeBtS+KH%j4-1#BL}TCfYuOxVuM zaT{FJp!~sLMO)sLb^oE3B~f@64tr^tJjJ65-+okiXdtuh4y3UbHNRWMG=n=2`fYS7Jq(iFP`B_J2#;2)#wQE zI!8b6e{U~)DnKwHW|ny*;!?nC=6UpgX#R-5A9?tcvfml3vZ$^CH>jio0p&}~flGPa z(JFCz>0GYjS0H``3vAJ|o&wx^1@4UFJ#~^aUVu$!|M>?gxz=!80JY*-NS!KsC2Qx- zMd=D)U;rTl_XJ~}vH#o3Z`-gHvY(ettE)Xmp)E?wq_4M$+n^dcMGQbOikbb?^4CJQe`= z%sL4?Uj2LIQ`hh2=RkkZ(=U~_0T@;R)nq!B9DiIR@Tr>{xucR%+VHmUW5t9_Xio8awNw`o+#=MaZh6pqZ*K@y5OSPKdcOsbMNPY$N4ZDf`DhtnR1(EhkaCkvF z6(stlK#bKWW+av2S=Z-I6Ri(!m9g4$^I_=4=JRMeoqW9KX zf_E9UqE$(5b}lD!(ZRnRp_y?wH)KxLDu*bS^$3uVOXW^ z@9dSY)a|-)qV$w>14EvhPG)v`6f%GDg>>KR^D}(Q;Vj##R+$tH=hH$WnduCwu=ZBv z^r9)sCn%U$*vgk9s8kAebfEf`}g5Ym|^{9b5Hn@j%Pzj9dsI6cjW z2rdGm$e;kf)Jt}1!&OPIFur6h)%%3c;^i0GnC+*z&2;UDWs~Z?Pp*zc_g~v)yI&p3JeV z`8njp#vsqfF_Cw(>S1*?!2Uv?N$f=CgIA^BWo0%yH4da)31}^(YH197);?n+8>_5tv-z z+CFaH$O7Lc<$VUH>HB8rfBwUW#$*aC%k_+WdpK!wJd%#(xo#8r{wj*&mj-+ucN=P6 ziM+!QD=Z`*zSBhgNX*I2oc{Uw%2_?2pHGvi-pmY>vlUo@S1#*JG)`UqQ3J@{=lw&B zK@jfD2aOLS+0iX!*4tb#n`*RG*8US?yN-x}&bL7MGMr9^}Lti_4{r*^}i z=c>`ddf`U5uQHS(eN}%I#F79aaZ0itPXs$oT$km25z_GGpxgZIk1dYOEup>=SWX8K z4@Z9JX4k*cj3UgGx#o29pIYSFPftePfl?Nk&E%vZYQ(zio0G zJl4h-v#ntH?o733Qe0HNsU1t3+4aPvO-wlGI9JgpP(wYly{{>qfQ8$SVTf}b0R$Ky zRcK;~aB%-cpb+3|Ppcqhj0s8(pW4no{vQq2}Lc?bsj6 z3yNo4{R2Gf`z3sa#h% zHt82tqri;Da7thf~JYvdP@^~q)%g*TQr1+u@(#Y%(8IP!Jx zkFQEwlo|cC|9oyj2b`o-%w8}8djt~Rh zA9Y=eC$oYX-dOE7RFYUaAQ&Y*s3Q5e^oiS$|mlYHU8=>GcGEy|fJ9jeNSm zx=+oIg%Np!w2@Ik>^YY%7Je`0Ng^tj_o2RSF)~I(UqDfiM1N5~W0K^$bG9@}a%~`g zlIl*wEJ=FV`4YWTBZ=DeWXWEDT0XZrjOf_QsKd^yFEK!tZuIkaMRNXWyRD z%U2JIXy|xD2(D26u$h<A8W2iag$9S$pM`f?qpxlEwext2*9%V)P_LJRUy0@!Rka;7uT3E#;0%A>T^#;=cw{S3a%5fP zUlmy65X6Vi&#Q%SH8%AS;|bg^QZSf(#>VfsaC1{v8+l*p1jV+*pwN)clsui1W?o6K z%N1A+B3XrkSS?gRTd`O?DTJVakATY{buk=U&7`7P&Y?(nH_dzviP8HO0z<=--IvD+I?;n({|_yLTYW z_DV9`6y|qb7fZaqqS?-P_)nq_1izzffa+9R$Affdxiza_{Q>peI3)zTi8bu{!NG6@ z3j6B|!Eu7YA_9-isI6DNvJ6FHD!hYUi3w(CoOk7VWC+Apk8uYdV~--oEb^87{G5(r z;2!Kmht|6Y>H^mOD_Nx!1ol)6Li5#lpcJiExM|l4i z4}8ic?H{g(dv1vxB?eWQ-RCbu>Jg>iVW81baa7K|BYdyAz--&6jQSXGfD+Uc@HSL@ zG--S}MNmZ6TjzS&Y01|SY%d?&>L{}Lz(HBzfL1VFkg<})6^%^oZRd1e5ERO{V{bW< z($scv^8n1l;#_O?yov6xLvTtttae8Jz8m1@I{brd-;gc?X23&~8p!2!=8E#TO94Ef zoi*ve1?3Lcs5Q_v+_7darwW$jIRC?ob!4tO$)XGfWt_j;;a6p2q^K!l)|WCK3*Ij`qch9V z;e1vv(O>v^!yO#+ z^Len5tR8&@2Al`k2AWuHv8o6=d8<$}!xYWUBzEYvUHa)pRto<2^**_3dQT6c;sn9t zeDhsvWvkb1#~ibt6Qwx&nReQIAg`HOGDi^5#j#u!e6dWVO@?d61H-y;^7sJQI2su{ z54nN4UhKssr&bwdKF#IjkMV<@!BmLiWy*&8OjBn_)pXq_tpA)Z9;rKSiiKp9>R+9g z>@}6ImdzSJ%Mjfs`m3qi4a!~~UOF8tx7OfgGuG82uLReAAS@PD@@V#0Q<6B+S$;kX zP_#lQv&AM8JV(SP=D(IySe|9SfYw&f!N}!In7uq1C-i}{gAp!KI-67%CjCLKvEV-} zt;x0s#9_|@v*{7=RIa+g)s|3TjHnf~)MR<=ld8{Qg*J&d zYWAYvkr8F@F_kT3HU}4?rom0mmaH(RoG%3eAD8D7K{T3~DD^+54q)vwZd4pPcUL;L zJ@|3qE)j(jCi?&_&$NbeIRE>IOVU6T1r$xb-f*G}6%0a!7S$Ze)CJ8<`WRGt3=Qa4 zxO68Ezsm~l2J56-O#QRC2Z`kIY_a0WMDm)GNLXzP28J$iiuX4mt@v4f%LR4H=iEv` zfz$4fdpYq~%Pgo|6;gY_I6tyr{Uix249R<%UxzTI?7k0jYWT{RCt=HD!IVoZ9_aTS zU@BgG=sz%K^Utr1Fw}k>@WI$4__jn!PMd1!s z=)l_FLKNBviU!mael%y74N|k7jlcps4B7CXif<_?J53<5we?ZbfyEW|=dCyT#+^@1 z`6AP6;~RrzEBiF2@(0is`&7>4R6fE?`SnOnfkZ_`<}El?~`5eCO^LP;xfCJ_AwVpug$4ysE<%7mT)wYASP&s_wZ*x$d!anriUC^$u71|Kxw3ieB z+N(r-&)L9BTgm=h5OCt#woKS`S2Vq;kEh~7FFfoe^N(v1X^r!D3I0`1|VCJ;Q38Ws7)*DS4S`~Ff&`G?}z_Dtyg0=&{a#fg=|d?GVzRpPh2aw9HnN`_Z&(ZqsI%~GI`Z(ii7{l@Zukd1ppL~CcK00h=k0!0 zagWbY;F2b~cSbg>!SIE8_BntY2Bar2%=KOoT8)lWwhDkyn73Mhsn=`M0>CIh1sy4u z&V*vG154X7V)gesDowi8J*j{<$l+Ez9d2RvGKwrsbRBO|xZ{^h4D9fFXWQwFr&hb< zPA{FHr7n08+?coZ=}K^s%|LGOC1Ri*A6I}NOU#qlEF@nOV3Zyt3=4rpB>mrU$NLvI z#Hpbc3o&(JnoAqLhsuk^{lfL>e|Yl4(mK$_?T?xG0+@^S6K@QY?S3r%KJ1IShhSrx zy8b{Ht^atM6EY4;-h6ObeM(A4ja24eI^1Cl;mbqn$`-w_k=PL2v*oo@VWMI9g@)FF zV5FdGC46~$Vu{$TxN|Lh=g^WNbPfrbMXe|7(z4nTreiS?rwhTfllvTNN|ee=M&T8> ziWj3id7)J8gXa2h5}Fhh3AAFS4m*$gE0cq4AB08Es!uYDy|G-eN=QdG-S(ZC3px7Q zqk$^RC&gmOq(OD{>qSzy^nm`YmpmYuk=8e!WpsL(cIUsfi~iZby5+S~qn5P9P(_`VORH7xiQpux z6e@D9rBkf7mHfbr6IN52`tKU6?%(gKQ6SIg&$^^Ms$)eTwbc2 zoRtg7nJ~vl{z&rB0%di>E7p6y<+n?tUN2S!4++ysu*EF55kV+3QmIgL0)_*LR!eTk zCDbSgO0>%lP}#bX_&+Q77EPIT2vDjPC$#*>)c{v-@lE)^@!Z^2a56J&%4jFKmW2W? z$Mv-?gb?Mv-I@abXOuKzfsv4O)17U-v6`!xB&pb z*br$OzPPba0wm1fkc&K+|I2Sm_{mdHiv*LKvroT*w#$fU^&UoR``!*!1=c93m)Rfn~Z zXZSmN#Jb(oyOSJ@UL@~CO+;Qos898$aSGaCv9SJ#bljj{47Bc9TEpn}r*vP_cS6OD#$HJDC9o<5pEvmP; z=$(jB2|(J&do@xtE;jt~U5OM%Ky|Z^77&HR(~CXFl^OqgClM}|x~6EYAXB&GcI8as zNe4;Hgq9XeHvK+vuP#nto?Rqm4mmTqklh}?gv*~FgD+X59Rq<~exs73aO9W$Q zcL8@_#ivKRvF%1ivps zy67{85XWEiu?GdAORbNs=`}w#S{UyYp5;p-_GO`<`LJs06e)+*3)d510~C9Rk~u6U zy8HFQ(C2XL6#0rVM9DMEkTDYg7CVklm8RUL*V1v>NJr>q8jl|n&2ILhVM^5VgDgUY z-K&N;FUzFTwLzi9#h9B>&zbT_pd$=W$zn1X$P#r0Ce8!3Nuq?TX|C*Bf+VeXbD|WI z_TBAryyXtOr4eAv?&?O-c|5JT7|a2T;%|=c+EALHk(P0+<&Vx=u1@7fpG<(bJ|dp6 zh{|E2iak(bTB^SMI ztwp0nFc<6#J3eBfn=lX?9kP z7G~?dK*;Hdvx>E%(;sW)}2 zJcVIiXSRk7mA(_{Kp*cczSY}n$-Z?ca!b2R8#6TtcoHwNkva-EkprH#cP4W_Ps1+| zOMxyNdDRj03%MrCdmT+`Y3?rNH<)>tQu0OC4l|2&KO%x~0W_7B^A<6L-5(3(ub1@9 ztQ1kDCnQ+@oZ1$#jqi41n_65KpFhp{$bZto05*=tS$C-Q8SYSY_HDb1Q@^@_X#?8T zhrRi4QMCpssn4O&`Zst};v?{xB%xgjXpXJ2vND~;d~}CzoET3!0YQnW;c2Q^;IatWpwfyvaK=gkLeB=2_6dq>1doih z7rKXFgCsEKpqF79Dr_V%>K8OE%!|?jg!%bPAVIh64Us3Zg9rV6@m69$Fb-i4R zd@lQLppZdi1>@b(gkKNz0@lBNRJzjRr=+j;HsI*E*LGF?&b&Z=X|Gj^_^(kSp{Za` zbyEEhak<{3NTpkqLiZcbLn~Hk$w=Y}4>+UdqRxCcKF7iNr=z@y z1}g*q9XJGxJl+J3^v{&f1vKw4A(#wZNZ^rxo*Q^>+!k2s>hVnMMjdS129d)F!)(u~ zXk%oKH-|{jk;nm^{PF2&zIrq2zYs&#|2hJ}{yQvEbyG}vGKx|oDTaUR3qlg*po&P1 zH?v|CoVh-9m@NX4@0UO3l`t;@iPlecy8|{y8sBZTUi%X}O8N2`I)jY>?K(N@^V~b( z+_j=U&FrNk+4Fk|SsKBT&v!r$JfD2X-$653P`Lp{>~cw#A1WvD^2j_p{r7&I&O(m` z(N>~R;Re@=qO7QWNLgo&D4?+Cs8AU{Q%Y8s#S=T%B1SLT-V{H3{SMzuS}AF}tjdO+ zx-uLM^hm1e#Xy%Fzm5@*APq8AAo_0GIu}@1Ucxf~X{2x1k(Qqgmio}WNw)DrC%Hir z`)5lp5&BRYZ&PrZlYQ(D8r7^_U0?44Y-QmUk1?A^jGLP%+C!5-k!;SEMWiGW!C{=@ z$H?+~CVtB65x$QxUV-{v`CY;XU+mV0>E3{`P?PwoEMw&3ajj_Ne^Mx=$H!Y7?0|PDdG73k!0%o;Gc%LxVP5r5 z433uUnnq-0rqtJ6)|Z(-zwaF9Hq64h_cQtVh9mVXy`mHQMl9^X1AZ{3UOf0G z!FNg_wwlm3x_$*!q=3^VZuk%%lgcM!5rYl~jCnFJAxUqzqOsj(fPawdrNa3F9Oa>%K235ZM-dK0*%_|Gk3awIXOKO++u z>d`KDKmKfu7e2~*G2OXKgn2ep&M7#{P?Xh!0f4J6uLb?rd_9YxNk8}MldGA(e;0Nc z=L7`IZkdYj?{b9yJfKU*`QT~$KpAbEG5p^ggjNIPU+@Wn!kAdlUeYqH%xBp{(v`YU zx}QOd%}}OXLP=!TRWNKeC*uhotQ&1vc&kEESdB7?3LjvjcW?>822tcz!h*k{4BtYe zD+rke=Z7!j;QM57UR2;%|2ZU`e#tpS=KV{;rrMjde0u#p48v`0bF0kp$j4C@(|-(? z%%}s+c1cN042s+tPOj}%q0e6Y6elhyR@&)2f2{P?k?lX$p#30 zFFL>ek30H=hL2ItkFNIj6T9k%Blg@pK_U2cLse#Hjhn;A15+p;~=?be45Us(?M>jR-!4fgEh!HoZk z!lueF)Qps*=)yrc1Pqc9Nutq{ZG!oL_|`9kJlD5a|M$Bxn^1o117c`0{iyEYaevnu5f&hVaCBrR_C|IJF_S83=zRao$Fx zVSM=%t=obPh`jFV*4H&#<3sizn&plOGe@1i8IL!@$>F5V+dk0Y2vLP%6PJa}ZRtdn zLqc*T4DNhM0}D-*&$u)27JR~y8xQ*Dy1oeg>QML+sd5M?YN7Q~LZH(w6F$FrnCy@2&ipKL;~b%g~}EstY59@X4O> zz@L1Dn3j9}>A$)}Ho%lIMA*s2>M#HpG5gU7#eb?;lYewfQ>HkWGul7TN_DMzePK5B5`JrI%RiD-g9Wcrxr%uJz=zEIOW{udHX8-=dh3~O}{H<5QE z!oIGr`pk`cPx#&b{0M=gJnq-KKl;X$L%6ZAvEwV1lczHdd2+nGU4cTm|ior3W)sIgaQc=) z(nm)YH+ZqBZ4#!b(|UxU?)K%=Llk(iEp7HSys`T`egmIorYNTJW6+8K-b~^UCM@l; ziF|523!OHcn@f9S^+LbbqX7YsI58b5L)Cn0PE*#G1VKM=J@nzwgBhAGc2Z7=1s#8p(QDaGoB1(zKUoai4Zx`2FZw20-S45-)lH9o@LqyC*w@$@~ zz5#1a#T3ewQCBrofmzwnLo6Bk>NV#xQ9u_5%qsTa zwU0?+eW~SQljQCDpj|o<6Uca|OMj9HEvV_7Av%@5qU9uEvkB+u4HHCxOec8#+15GC z)%eRF?U@vv)g+&nK;IRZFD@^9Vby5kR|FWW8jBuK7 zuX%IHJb%m)j%wh3=hy_6=|MWLJ~O*%%F^OJHET?Ogf~a>096f#Q$oef_)!G%_eCC~aS#Z|%Srlf`ujWKs#8=TRuB@0wiWRXM;iH+SS&g(>lvb(8Vaf&W9` zMd$nvG`w_(DU5FSONN<7KSoV{z9hzSJ)U4c>Fez~J(+9Sj^TJJhd3223VCBzw+umD z*;fSl#6WrC^sb>`&SV3r8|(#|4;Xu#27FS;^u7I5O-VA1Cs8O^;9x}8xT9XP&NRZ>p2CZPtK0$oJZG<)+3%N6^K4>Vf5AqkZq`7MsgQEEej}Y&>goLubNzto^P~U_ zsYpH6=`oO#F9B0c=RXM(w_4)OX2dZJ8bde3HjpPRb9ka;_rEhoF?kdqYs3PkQdlbR zP#D#q3>$C0CNNrQOno3L*Qzn3K5mInLQ-a$1&O4~fE`Z+;RTC48_20q9+$=f#L&O9 zrWA`RdQx=}WVsj$aLVi~O^$Hr`ueSu$G)rT;T>BMD}zfB6?;O4j9c2k1R&;2mBqwD z(t{-1YYSn>PjY}b_;%+0s>LQyCs9svUEWF*`MD}HO-Pn35i%cc^MFou_fMW63@xyS zFRq!4=C^KQb~F_oCI0_i+AT6_DXYc0626e}U~T=H1sp!nm^rmj{U>Ej)IgFmMISsrEn-^+a$2@ACu^)2b>v{9^f48`y~2|B&U6RoJzMSNc+ z0fV2U+?a}wWFCam6XTcm`hO)c6{la`ncqy;e=d9BJv*#Ut#KBypZ~o(yeOu?O32O& zvga7B7RNf{WS&*}Zk(=_{u2lR%VZrtlZRNpUREf@u)I4zXa}-xnN77gC`8G;t(PIM z)(gj;VDqaoEE)4gG6LSx?HRtq5q_~{-k-7J8LWz;a3=}PZD;#_x2D%Em;h~rDQk+7 zN95!#uRd*N1?&ff?wLIXYJmE{(rs(~^44j`w95PAb?-+-IRXvnqOQ7F9q9awt3x zRk9wMZ7lH4D$S2dXyU$mm)$u)k4T8Zxh(8&306Z3sdH9ZA9G{}&eDicA#M7wLkl!a zWc3YYZ*jC+*@l4LtBVhhZ1^8Q^2yv-hZu}uAt&*zh5-}@3)=WzLzx5uDKkh&6p{>W zP!=(_o^kKu_s04;Hz9(b>erljvQTg`!8>$dEVBM3iY!Yx&4Ul;EDoBPEDK}}96MbC zeZTQzp?{dY;S1QFRPhhLH77E1<(m$4Ad%=9*FDZR`wVc0MnHZcVdqZCoR-ln39D|1xB@cydf z&sy`Y9EW;1b0pFTI2LjHbIS*-*lcs|AI0IgN^tu{8SC^nO&OZJ8B287v4+X^WMppX zX7+_yIUayB{_&pK9jq7#b(%Jip6@r~cdWZtkL#$&pVS!wX7ry89zdi1)5waNz>iV0 z#WJ@t5%H%On#>xMzv9T}S(T#67GhG1TI`8e7;l@mtL}>h)o;xWg!1?Z@8037&J>}P zP*YEs*NEOJdfUDi6!(LPL;E*Zf*7Jk(}i(~!1x!%!BX1@*ZOKRjIwj+fI}vn`A34` zO5l0bjQ##x)Xjd%T_fqQ6BEqPB;4rAgp_QFzuA(0Raw3*h}u?Uun;>dL*CvL28t@$ z>Ws`aT&myI@&)OMZjtI2tIPVUm9eSF=Bky`vhb}>ivCb=z(m{;@t=S1AdNkJuRV%2p^aV5U1LzF zmetTk?&$d_ENqpg>Ej}k{N+CshaubHQr7aTozK9&vn(5KN1eplMYJYhGMY2fs~6~; zC`K>y<$6x}90N*Sok%1?#_1RWF(qNiEz^YnH~_^J>f_XsL3Kqm8Snmy$M;M?)X1h= zY)Xcz;Pl%o;`x5#n|^&u0=?zDs9$qbyzDF^u-5Mr-X4xZ11w0SXblS#l0>0>)I$J+ za}w8qmXmICL`|21(10H&t2<=!FO=SEIHeUdCGqrg$&R@Kn;oUahF zY`K}9VGK9es7&{J>#a*aO%V!fG8=S`^jwU4j&4`-&*U+Jj*QS=d%)y!5->I$G@3Xf{ zIPg)Ux+9b>gYt?*o^0Y$Oir@YWE5&ERS_ke1l zB$NhDiOK&f6~Ha0>eTBuzo_QgU$h4LU*aFjmV*$!K(uz1r3)<~)97)&mJLw`0}nf? zybVdE$u_FGCsNP&wZKq1BGYVApcShazU>WXA=!~1uTDj{&{HX+lC#Pkmgi=_Z-KRYF zfLZ$k46H$Xuggc3W>T)?^m6Z zrdvhpxs$+RytqO*Y0V}PhLq(zLOa?^nNLRPHH2Y|YZkxi!2~2o$%gsMikqB<0!giS z*c)g9uKDJ0J@>r#{^)6YVgT)wT!T51ni_CANr%>dC1~=z%io@2SxL-`Pm@ z#ryxCje8ZRk^f+`eSr37e)k97!dnK#73uPE;p)Yaf;}tc7&;bAVjzJM1#+=|I#>ST zb^JATOkb~C18UZ(MEcO*V^+6}4(NC{CG6D>cdVPW@Iz9)P>TK=ODMzd)H~`ZXu^(S61P%a z!;&;&LU?FIS#>hu+_C3&G2t`nqcJz&+pFuigDl$a9OI8sm{ ztpYM7pibOX01^h0jDu^{Syr~;&kq28bZ@ZTW#gM#e_mG;11d z^{Uw@*>tmZ9k0xsAWCZ~V>_J6XO&vF=M*oQART)LGEqz#$eQ^X_iDnLG9E!e0pQY< z7I?<(eE>z7Iu`ZyTZ0n{Eq`_Y@cGwk?ekaiI+>}Q~0NUWZ7brAC)JY@Qs7}^Pus@hXH+Pi+c!>X`xy+>N z?`Ks+WHXt4++?3<3H>Nh*6$DR1%5nKbiI_(Qn_4hhYEHLUx8s>>y7rO?1+PCd%ZO6 zF#BVC5_-&gC-P=-4f+PYJMotX0ak2EIL7a#e9`Upgji(r>ka3Xca5Xg#w)IG|K*qc zfrO!qWJL4tR>-PGbU#0AtlcG?;V^C~FBYvmDKRyK z=p)uDU2t91Bd0GFOvu4=vQ4C?M{XC-R;OGI- zN!OPb7`33=J^Y23PYh(i5xc@dMAvbL${CUZq@PJD8VLhu%`1Ld7eR8bN6{Lz4MRJL z?+1_f$994Atf1~I_~)DXl$(x+dJ~U4vDjfO(EY~%&7sa4OAlSydy+&G;=8$ad%=Mo zaA%l~DS#%CHcfP#m)165&-{U!Pb@<&-{^~4^z}dD50#7wFmG0y@Y(@k`_y+Leahhp z%GR71&Oy1HL_&e}#QhxkKS4T_{bej`z93Cy)UP=}Eymz$jrV2%_}9-^$)+R`i4#3| z`ju^OOeRlS$1Ov^uzN8zeHUUmSo#%8mFe}r$In6in>+>K7TJHeGWeY{vAkG-*k^@JZnzHX_&gmm>SHC$U=iD3Q!kMe6_CtO+)4{R{`l-%nwYz) z+hf(_6<v(oGnR<8i$Ixm8E*KT`h_pX?7TUU45;8Q`}a57dc#3exFk0AnV`g&GcDSQZ=tOpsyIeN}sP^gJyNg)USj&Z+Y)weXia`{00dD zR)fFHe%{ zQIP+HZe6x0@Iq@YNeP&j$o_{b>c!{goYU(6HyH9Cs=LCVc69qtixMX`uQ6=bkM_?^8R%&wdqf~!xEW&a9@I=a zuoZMd{pYGmELj$kR0rgzC1U|hFD@_td%=ZEru30UKMHIpZj(|XbUl+F)Gs|AJnkA0 z3InO7&v@?^j=VE?N2lNKUn{&<*S|;a0=BNWaSU#A8_9V+JVZ)Slj@0$r&vUPezV8^ z=^qd(QqUaABvU{=4GQ}0=Qr~ZWs3qKq8JgWT{1*7Mcu{&;p9PTU!yP2hDlB! zC}htZ*hU5F=)FNzi2WNJ1U_NtR}!g(HH5^vA|b`wsP=RMD%`62ax{sXI=V1Y70$jVr@FIH))KJ$P@db%B@$^KswJR(Rp^7 zMj+1xPLW<^OIYEw4%yrYu~7;x4NsJbh*YGsGRTT5)Q4T1ptpmYo7Ce$$_1T2B5w{?U8Lq{E%i-o>R@Q7qEOi)twTRPIb^1rWW z!(gGZ^>yJAgV=UnMxtrwC<==^tbQ?m?!I^sifDxWouZMwp*>tlZH3cG>YMCl$0ei< z)evjUL4?0)heSUl!Su%j{xNi3kLnRby@P_NcY@FXI`u;&qd zBbZkt{5#XNNHt|`0LK!?rv0pFi`Yb_iAq&{yi$az z@|x6wHHF9Db39(_aUWJ_hi5DPc|S;bSym=?6W|+b5G7E)@AkY$I!j0D*?`=ia zA7HpDSE&c;Kn>oOCivz+_$wCg=Rom&dsyEwzsu5fRe+DyiG!&_X%?zhxE5C@=kCR$ zyR&{4vwK$ween5&Jsw9J$O1Qlc+2#(Ng4318}f{K2niA%V%Y_3JtNT+`CvwZOL|rn z%k^HzNx{s}fB;apWh#6%0(Z*r7T-b3*eK)UqvD6nEWsRpNbr;cJHxV9zwfW9q$8VW zB@mhLmewiCq3yo36-5&X}VLMqB5(@YBbF%B_cr(c0EKqk0&k1`4835cn1c z73Q{Ag>eKovT48p%26EB}7Q;_5 z=-9lB&k1GeH75o`IB2!0+fV8nf|FLqF{F*~VNb(@9AKoIjb7`4w);MYLLo0krJ32j zeoyf958>j%a9FdQ$r~GkU*Z=AaVajMiliz&_tb<~^HN|fHhX7ikq|VGU2wa_3p^Pt zt$vMG-$Z%JOn0~l^U9Yh(RhJp2upnJ@20qTJK0* zUHWO7$w{q*Z~T+nG@A;zW7eE}4&&(gygYo4(se)6B?GIcG2CXNXpUpOcpFu*uEs4w z$J$zd@wKPGOwt*2+Yr%v+Y!1acGik|Yc3fyByOlj+;0PS~o zPFFCuD~hNf`+XO>G27HS!i=qc|9esU`we^;C?esY;GgrpVk2bLDkvA{e^IQ(L1YH7 z?eukqHMFJLt;C8E3V*W;g+|PT!nEc_lb{vOibX{rX(la`+)*Lf1Kw_N;eB|}g;_(N zw=4--&j%dCrG{hg?u9xK6p2sha3sErS7KUH@$opraTRW~GAr^7rbQuyKgpg>W~+(W zE-QSS?{CQ|kfd7ZxS;%)RnrYxNyFnUK_jpbq%#Wds1Al9KD!JhN|NZAhCd4{%&BCLo#yas*j!KMIcU)Y<)4ACNqYzT?duYTv-a|)^KkwX;U*zl#kDI&v|>>o0My4f{p?N zLQB?kGWe*VisL$KG2Wb8h3hl6B?HJmQpaEpW6bsYcc$r!R*Po-NMQGMe?8V0I`E@r zXLR>3Qlwez)PukAX89e+`Yaab8p+rQR2H7M>~vCE8as|zd5n_j8JkH#X5!|9AoNk? zysjp`bg$3(N5uAYlJ0# z2m}aK<%XgLHMILa8k*WR?-^;Vib?d59@yvPFk*EuijwTL)@%!miVJdTsCX-^@1r#? zYd{5+{;{%uo$&%cTeO>GIYw-@#TvQglk4CH2QtHk%iN8)Pesnf9ud@#6}vDQZ>Be4 z*v9{1`%aJGJ!vN@8jB_x*yOvd_>Ly^&%f}-HiGCHJ4OYV6(IanVDQ&zm{DiSMT_ou zt4I@(7JETG&%APxunLD<2^H6L-hmK>53R(vX_20|I%0}JWhU@k*nW&%vz}!#!plp7 zbKHVPsLFT48E*rV^nfio&tUU`-|!JX9cCchO&08@ekvk%Y7Lzk{K}NYM1c5vcDoZ- ztb`FCh{0a$soNpt=y|7b8|`LY&-Q?Yr%j1Fq}T>CltNTl1A@?7eN@@5syJBqPwKZh zaY$h4f>JB|OnnrpI_g4ddvWf=FM|~o9|?x0!_O?nv$c_N*ZP??7$HlwqmwZT>+ExLo$ z_bp7mE#XIMt9#gJmA1`Nxt}I7<~WDnJR_dfS5ou9Mz4sAfO*@&$UEoK>=sG=}Jn$DW$#zbNC$Tljyv0R?D zgj31U$+`^{<>j9&&c#lMr!voY*Ni7nDgX>UbE zm)!rHPoE=5!ET!BO!sdjYTh`q`Q}mZOA5Hr$L1tlhf4xZHWC)uU)xvi`S$)6YH<`M*zn=Re2G1#ve(|>k zv2Qf?^CyS-#4T*~fNFfA77QWd6Qr}ivG-5@vA`dUCz#bf&iT7iIzUD%)c?y0A3^W> z9OK(%omA`hqsMX2VMP1VUJq!*F>oeIVs%ldEfGBA$3${=CG^SRTJi53uA8oFuPGH+ zGThOp>;kN@#d<%=%eiu67zrd6HLgB0?iyuDZrz%-c_uS7JHBPyBRwv#EDwVKp zR6sdO;cg1*SO+l>GfYE1!rjhEQkKmJ1+H}p^l@79jWLfsVwf~HF)B1NWz0V=RD3U5 zpp7Ew_M21qjvYL7m3_E|&ZS<$w-}{8i^AEy;F~6pUU+v1o6c~w8R^ypf+fj1BUFVhGv~DKoa+1#s$-RDV|ohN zIcnHij#KMklw?nN$GPo>fuQ~m_WdE8dTqHB^6=i@{ovbIE@GU$PjR4GtUhGqPeV^l zL*CYB>o1PHJdZi_-H5^LNuy^|nol@Y{N}`Q=V<*>Y9I5}ui3Elh$2DrG41$RgZqYz z+0d)WWb|1GxL=~{hKk$4Zy6i+42V^~tg0gElH-_cBgWZ6609C&G!|dA%2u$87MTX| zSaeF0n*K7Qd$QS=v7k$aMLwxIQgUtzMOQ>Llhz6Mc#wZ~JlI7X&1A4-eCtkB+-UcG z+&5XDAifP0-l-c_PyHWiZOHd+ljt=hp#`TDQeUi zBe6CXVj#GU83QLrj-;h7$I~sd1-U|S?gZgl{9!^GlFjnk#yO<>gTrD=fRu1o9ET&X z=&dR-foQpf*yk|6BOb2=-`ntHdyzF45|~~5$BFH-8V{?Ml0TQcJ+nrbtTjcJ<{X2W zTX~pq6mB3@ko)Y238L};N7Og4Ro;dDPMU1nwl&$dZM!DdWScwNwwvslY`Z4gXV3G# z=bSH4*R|LB-}q@&k%k@505{82bY_441}kwh>v9>=oi(?i$X=^}m6l05>Y0^v&64o2Vov+K7N;f_qw=XNT-kPwmGnUlq8@Hh_ zjR%55!GnXY>0J*E&=I)OFZ;4(soQQ0f{x!d)TPAc``y$1orb{^J|*;>mKOH)#RzJ` zK|;yg6ASizb{TFk(xJsI4qE+;8YBKaBkSPe@K(!2PWw*Ffvs_dH4Naff)~>&Okrj& zM_yH)86N)TU+Wn)VxBFnGV(ZwE;sLS*OR*sr^+g3MXCqQ5{UDIB{Nx3V{ z@6pX@M)oMsGs-(Gw^%#R_Aqy)X^)g2KCMCNg&8zkMpz-QYwnkQ?r2IT!eNlttOUIT zvox=_X{>h-7~~4pR;K>1Y!+xpZ3@nM{VUf09sBSLZ7l?5d+RF|RMJ9s-X$>io!i@| zmB&_ng0b%ORN&N ziiKKWgO=;kjUXkvx4GlT&QnUhbg97tmkBBZfy<% z5@BI2o_GjiPg|dImVx`*SB9IWfLPulyif~((cJHzERi0j9ln^Z_X-t(TDq{lFNP=x zy}7#UWt0?;;3=OpToS+h#PXM@;aP&%xpmm$m+@^;GdDAUJTl~QM7b;rC&`dm;J4mD4`)7cZx?*KWz9j#~))3sPW5$ zuagSCPYU=Uh)FgC(c>A>kel4_*=qKLTXUz+;Gk1%yzuX)FLf??o>^1FR1N2|70Lui zosc1$#9NBf^MIO-FaBa9d6i~ynZ}-Qdh(AJ96@%QZGV8hEnpaq!iu$ow_BltsS!$} zA6>GWJo5;XD%sso;ce_(dm&%jcZ(Q0(MS&G^>Mgp}j?t@*vWzARHl}48Rfl-v=x*vs@c{-G_WDoG_Q*(1>*2rUK(|GYL$1)W)3W_}%KUn!5iPJn zQ*bqE?%rZs<8WJ*MZy~o^CyX-Rnhn%w1^WM1I+n%_}#7b*X!)avZ_FqnMqI13)GmFI>2~ z6D(l5d`p6xt~zw4V_Y-YiK7_*oSBx{wcJ=KPiuxqkmi&{Rvsn&0qR6a(3qLJ>iy%U z8-_RM(a}Hq4G1<$5sx?A%@$4T#C^t6=W92hp*LEysLuA=mHmeHEZ$l1F6apln%PZeyk_V{FXK4|ZL+rxs@NMI4; z>R8Yah&LM$8N2aHOt%sp9U5N7F&R{nhtM62EruL>&p#k)L&}kq@^FMgH_P;-eS8H2Y0!dY3(%dGXy5SV@0R^{$RC(4OTsa3ELcDq|0{&6BAm3Jen&qV!*XxK zqP1aead@f(T2_hkHiRE7HzR26l)UglCfpr+OXLUWC1bR#bg1t(|F*td(0bkGi@ul^V9CIt_Vk58<=|dQcbL`^F665 z47-ZMh&WapCYuF-M?RY2NN}E_9D3f&CKk#hGG9mK_#FQu&mYOCfE3IkcaCbNPKFw; zMo7uk#|sA=;*cyw_RK9^v=8cjcoC{QD!(9h6+g|fpb;ag7sE)tz-V6j?}J+S(v&1M zbhjUvzqH;AmH`lFvv^#(QgAfSKTTX)LSmK+{3W0GGV07GAuiBgA;}UPXj}H(RTa8g z4p&nDoy}i`M3bIJxD3jTZeaQi|F&7HOs_gx8kX3v1u4Ix&VvE_K@DyOd!kE4fu$$R zd)|G~VtSx-S6O}7qM;QeL(kX!=PUpB$DMFI;8h8R`Lj&&--cQD#{%u`CC+CUE)F>c zm;c5xnLn!Zbx{UR>XvjMl*f#&1PrEw>E`JffR|dzG<&a*h|?=7(N}FYUq#-itR62M zY*avyHhBo%417#L;yQ-b06V-BTjWYu>j>mO zocA|TyzB)oEpg0-Qij2IJixJSMQv(DwBC`V6)+6_6T$_38CP{S@4leDGly^lhr*^Y z@U%QXCb+W9%FL1ynw_?;F>WS~TN16=Q6nw!bVwu}^dRhXh&n;#Us2JbFQ4$Q%KaH( zs?6Q2A&Tqm&;~c*m?5-0hUg7x2Xhi8+Yv{eCw0F6w$L+ciWkyNgChPzej;gHR+U;T z>V~@L%;X=LHDNnHkGI?${M@yVWHKWJ@UnY4#=HkdWN{-bh$GfyI;Gjt2z9kNM?5OH z`vM0%UL5<*;ROe0sL7OF(vUWr!d-n=S6;w2kD*QLO8mOmc^E=ep7(u1xup&=K#}qr`dM!0@B!O zyi%al@=b_I*X&sl08iiUmkuSuknR_{aNKMarHjp9WsV*2=v@uFA{NaXMPi&48rZQW zbCB!GFSh!wpC2`a*}URGUL4^aW||T8i+g!Iy5i-H(G6LfxY8L6vqh!_r1)u_sqcZt z(;08rdb3Op+UMBfkfg~7{pk^g`Ra^&Ei2^DlKVLGxLNCU-;c++WnHs=JG(=ogviS< zuvFL)iZ8JC@DrF!h*%_{-|gsqA`g^sW-`iFJ95Ty zK8D8a9(wEk<*b23V6x~QPfP&A{-5w+0e>Dq`Qd7KhyhluhAwn@JCPfkzx#l{ytc!K zcl+EgZZxq-F7tfkC^x4&T>BpDjo+5uJe9bCRYnx;LIPH+Vh2s^O!Bt*iZ{sd)E;I$ zQHPQ_;klApKXGK%s}5iV3PtJL3&42DFJy8^CmtXQTyZX;f$%mme^pp)xyjfGzd~GU zUv>hlSMx*MVk6bLjZXzdvdX2&N^>mJ=I2)7&i|x7b@kL^`qPn2e~1glSPNdQzV8z^>l{@QcMPm;#>uf z+=iah>DQs>$9^I^uT#3B$&=HwBLc&pyZp7*2=MwYxe?{Ih!!^yFn0aIw!#OLGT5Bqv1W)-Q=y;p>Zbk4ItZiO3Cp2gTE(_E;P6 zJ!^(ofpPK%qdUWy>lQbY3W$fkW=!&{ zvJrEk6zIn3;nJ*fG4{8Ln)|ar2Fx_36wJbkTS1QlFy`JX)69=WY*eh@=dvfta9~Hk zx;?WOo6vNm-?xO3&EAkKylS4zWS#e7%?zO9DgpP-Zh|i6F3R?DzgjSY3^ks<)h^b^ zx1>aaU@r`BxKsxCuS6>YdT9hoSYc2?$mub}SLfSD<}DO4VW9pL{mouDultFzI3>9l z%}xzLPo7q-O$^ZxTipna5RV!m|3-ey*D~qIwE+Sw6lN6 zJdd;2@~qIdd5|aB*Rs%-W8l{(p9UNKo}~)(P#;eu8e)=Y z@a_VWp4KX(G{*3xNsGa?cx8PXWhMkE1woLdu2Hh+DookvN)I($Q$4ryoX0kQ)QBE? zGS9@bmi*dhyA~fA2{7vTCnwe^uh90Dd0Zso-@j!)alJvY^mWH%P^Xz1ECuCcEWMjn z8}YO`3PuXh2FdnCvw(kt&K-U~VKgF|wRVI!gQ=XtdjG{kS=5{})Hw&Z+RjU^!fsW2ZvEPP-{eToN^>8cwRm~0ad2_O?S?7?w>#eP zy9=$&4}4iibCP1w0wg9g(*4AnSXq0&!%BUSAjBF07zuTh-PTGe2fYxgnn8S-2q#G=jyQb}7$^vd^0=cMx}4;qI)OrkmhnvK)>>XHn(& zT~AU+3FX(6V*0JQhE1t;2pmvg^`l+Js~7oY%Gk>*R|&u0YX=Ke?>_wg2@^>+PK${3 zzY}l|GJ>F<2X1T+tiAz{&a2ps7lui*gnq2)xU({MiKdaI3;v-r=}F*%Chi?WZr{O= zn5dl1QL7j$Sy>uW&6*UqEvVdfmmBnwy92WUY62={j^BYb#9aOp5pB96FLrMv@=v<< zvY40pMcx@y8cSZDoEP%nD`UbZmFMKB;WTgs=N-pDrA=AI3Sx3Iw;`h8D`8P**(e*{ zxwbUTZ8{n+wKC2VBA%#3Qd^Bn% zR<*4Omwi83J<&1d``^Ib?g3@vFFTWtS%-gDo(F&W}i zif(Id_&|ue%VQ|t_0n!ACjiyq7hh)&30RYo>Fu}ZlYA^O>gUe#~+-L@St|GB}es3GFju2^FQwV%jRda zqb#7=Jrah`Opv-AjO}$(zB5s(8813APg`A4d(UuT?Ja_{W+(LsgGAWKPJ_7j>{&ot zSf8|74|Au1G7W^O4=^U9A-CS61y`5XsUxh~{(g|Jh@~4OU&;Jl`IZGd|1cE^p{i-c z1FOn_CeXPBt{|(vg442-718wlL1$f-IB~wrVrMFo(yvtLLJ6jPPwLCHDZHd6z=1mE zTx+Z#nf#fS|K@&OJ%OqiR>x|7iD)u^U*A|O^2J7WVaLEWu$)$v*&UkC-$mQ3$qvv) zQSrPHEI87Vkf#|5F;dU6F-%Ag%@Z88)0XVs#0=TPFx|aWFZkV}D-_e4fjbp3)&J0y zgvIvY!+$@?SMW4>exrI&ix&Wu&j71{eyf9i4uMyDwW3TZhBGO2Wdh}-U>nxL;rg00 z^4=V1T=vD|t#Y_*acu2a0sjB>Nvjs*4LmN$UyZ(TO7}f!+d6mctj-|i>gb(kkbJ9( zj!`R)C;G{+G@%(d*awn_7MO72&BcOc*g$S&|H>;@QIvFwMw9))1uy49Zq0aMm8xdQ zXKU{_?i2~80BTZZ-A^{+Gc}C&XB-Sp>MGAyo?!r|$^~|GryHG_XG=D}`V8OXz)Ym} z$2oh$RmJd^4%Ni$e|jEyrMj5!M#oLbUETV3sDE?*6W4rY;LF&6cPeCGYJP8WY+pcLx$|{>z2v7h+aFG&nHk`J@YMe)FEpZmB}xm~H9LV!w|4IRMwa2Bf}8i2Y6^%rS12sZ6yu z_(xMbW>+NI5vtCCLD^qUtS_;wha~w-Gaa`hpdjlgET9AN016MnOf}VKnjhxL7x+7TSO5)-+L5n5Yn$xqxpVUi_c0gLBP`EZG2@8bcF5`w`(h2zFmV5jD=y04lsDqlm+ zxb|zxm?Lzcz7foDrta4J95#B6vtArKknbaSD?jnA>GOg8sCTG&;o^L+qor~5P*Z!2 z1?%|y)jsV2U-Z9S<#YM3rgoBg+wsC_teIe4c3h7k+V5j~{HStFLJ2 zoK%=>aeypdL4@h*5VSSAQPreEcVt5{Q!X18ikrLyb!=5pHaYlqFT8p$T*9{s;LEQP zxk2X}+dHHD*nBIK5MLXjQw7V^ZmBmL=<`gj?{e=H=lnUD1VEC3U41nqv|k+{qDoN@ zG~xoN1ZWVL3VdLCaa|EG`II2AtllW%U?tYm@@xjH0afs8WvL?1b@G?KqO|!7NjruX z4(BC^f`C6Y(qcz?z9{gFjK&jZ3gxNjK5EP6aO-EW9EfBoYn*4FJ-!%}S(<}Y5=)@s z*xOw703dXv2_r$0sgBbK!SM-+{LZdz4dT#}qKIa1;Z_tsgp3~1Uwt#7c|V^}RvZ+K zda0jwzbCDWYJWyR!u89kc1Y=XCa=wo)f6!_mmb^=u_UghFf;?;z6kBw^+3H;k`kUM z{mJ~HS}5f{hhcJXjX#3%K zr8Da>9AQwBPL63p;zy!X{Q9RV05L{hd1P+G6sg1hLyRH(az;L0G8s6H#GZgw!ui8k zmim!Pv!ggLrG|s_Ll^V-BQ4iVylSfKP?XZ3X+PDI4At!CJ4!5<6P#IbPktxeDZt(3_`qL@3@VWB$u1hrQbA&!@#{D7e;p1w;pVW^c zwMX$asto?u){$bg!o$eIiFDBcArh2!MpmKykPlkX4W%lE?!sG+Mc&vQfA_e|AZDEC zOolK_=|Cw^*=kr=I#@3SA@r-B5tZDiQya#pWSP;@m%2cquzWej?^ns(T5KII33hn@ zeaG!~Y`}b8?SQG?G0UTnT8B3Ofo4~O5*zQefnbv1!9zvSfq4RX({GQc|2ql(y9YFL zt(fv6ab6Lrr=~UyNgk%S6dB=P^{}F`JdjP#!VFp_T^;+aKC0>B&C8ES(8GYNmQ2^}P3RJBBw^P?`-^RtUTT z^{&X|7o1%Nu{rF_hHvhPlz@yOvbO5Ov1AFgdq5^UVON!*%%^)tT+jf*63QI=vHD_l zn6+7von~mUjH#%1RpQh&gLdURnHz%wX;GzJUO79C;)4J7jkZjQvW_z!#++z~ z)SRNY+aMiBdLuumbuFh0nJpg=rXV#f?_1-Brr~wj3+QCe*QV(UKri2HD z|8pr^fpNCMzQUTMbY3ZWwgU4Ix!VT(@}~cjWy87EDLad4{~6gdSI>2_0^{7fQdi2m*J& z@Yz@5*0EL6g4`xghiZ%8i8f*d=Sme+Gd>bSAj-t(5_)(*zW1@Fe z$I7$YK$&{mYBX=DiB2Q}9kdV+Dyoicyw>dTj;#KqM0D$Vppuvsff0xFN9B)FJFPRw z2%!MzNT@&2d4)$Sca#>Q{}8wZ0;9SrPPW!iN+{`mI?Sh6I5^P)Xw)%|&1Oyys_-fP zt>)>E1PFni@69?wR=KCRmM=Iqr#dl6SLA>gTDvqWXge>V$=gi@ zRa6~sR-C5NT?K$E4k05k4R>@9mA&G)hrqFuYtH(Z{C=c$haC$`oF~=_Y|6(MsdV;Z zEk;WuhH_yA^}|Jbv0lM7#LA7th2Sn@Xe=3Da)|_2G4WD)Vry*-JW*zFyK)nDa7s9e zO$;4pJ%hK8F;G`LJkG<3KhHMHgt2fIDh)vS_^+E+*2_);;x%RCch(QSnK%5*@T@B| z;`VKs^A)VrMHj zxLfy*6?^z3{J}C{$w7|lrp8=FjyWc)-nOD@DN_Lhb|j0qVjf-&|!VRT)zFF2O{l-@lnkiAB6ISOi`D48<}BQ-2e@*xI1u+IFl4zzImoDHBO*5SF=vA4TrpN|s=-qhGec!wq!wYWQw4F1y>{661nq(`gu%Ga zzQviEgSBVgJe-0ho<9_JT{VQ$#t6ii0%8y$R6XiE`!H7vl*|oo&_Anl;MdpEkNv_t zF%?AZ^leN*RFjCY+xDARGHp^6L8PyJjlyJ?wiZ;cWH#M;pH^pAS7z(Coc?H*tzO^S zg?yL?{M+XO=y(U@_;nL>Lt!u>>M0I18223+DNrs4tK1XGT%|<}P&Tzilg=T@Wg7G+mF7Z62A0w<)cSRo=OcuTMJmd{HUGSI z`b^RsN0cza(f$)58pi#eZVE5^6LL=y#sU<%HXZHkG zeTYWW0JprBSip5-3W>T^F`jj~1XZHIXekw%U3##%rh{NXd|2EUYj@;OF9bCk6bDJ* z)b%QuWN(xuo3NV+B_e-!7Q7rtDj-y;>`fArIB>4t+l$;E9g`Rt2rtyB$&xA;-ZHkv ztlmVuxGl>>qdEbxbCE;J3~{Y7vVD=mIJWzK$hrKj`DW>|Z{*Je4V>(Y+m=`hIparO zeqm#)*V8ehC2p<_Odrxwn&fIHln8YqzMPj8}9J`pXBC`rzb zrmq!TVx-LCONH1)wY0v)lIxp-k+JdVUVD^_sjiYbEzqP9EmATq8v)G|6-@diIE5=8 zL{&JH)&~?z0AV;N*I0-2i6OBE*D?mxy}W_3sm8j@0T1J`AEwz8k}b?Am}Av?le<6g zcHQ7unvtR^WsT@j7wMDdzVY}Z`t!$qZDW^J)PMf9^jMF=AN2s|BM_N2)-;QjoKl_) zpxBsY)3koBuhz{qE@e3wfb_FbFOKDLLwsxLC{#opw5i>bxnIg2Sd*uUC17L+C_ z@OO;=PtlaVI)BuOJJ4GDDiUPJMybFR7%|an7;3=)91P7Rl_B-?^pFyKYT`_*R>qBi zZjXIdY@FKtMWI^aOwKvvq_zj$3Nr`+_U-|)`T*nEKxq7;1S=-D7NX205|ivQsK+KeIP&5^JN zEE)lBD=@@-Y^sc2#&IcV^gQrwu*Z@TFN5=%r;MC!qfM4@@Pr;5l6op!Yi-X3yUCLi z=D>4nPUjpe<`M>hb|_nj;`Et!+}p}D&0ZhmSxKy@)kt3t@{t@Tfps6fjqV#0{tYM- znMufM&+fK?B{9X;)yO3;kk4;Lxm)Y%^3vvyddXk`-u?(jQBCA-p#o`JV(r z_SLx&)3P z3e%Ib$5tGFy&Q#TrkIkznRq-p=J21Zs?I;Mdq@mq3X-08DZv;MrI2ZxArQ8^cz&(Y z|9HBiMq5iHvb>l2cuiphd@S*(f7U@4s$1g8rC54M@IX z`fr-P;^}1a@m?VO;nob)0u)rx!20P5{S5)K@pe!^f-5hpWyvQrq(!;tIenDFc@Jbx z8lg|S2^!S?y`Eu7k}`K#!m<0sfD4Tg3YNYDK8i$=(3e3cnT5l%5m2JTgi1*w|u6Q z*wY|zzdw{gSroryXRhkZ3iA&M&j-nf)q=HDOCNY}818`Md*PpIAy7#M2Ecc|0zqoqbn-7q$gUx*42M$bF9Xv z05vSK*+Vzfp1=j4HxVaoej`W5dvJX7^DRFgpV)1ZWLWF$IIGqVR4{CmsPfi_hc`nC z-hO{-G3NbtUIAJ6_eBX5ka8(d3Tt%KBc+sP1Y+JmXA&vRlx;l1ClYVm{yXxx^Bbc8 zuXx$Gvx+doYY*;1%|VDc1x=Art(G1GwKlN<7~OLNPF)p~+r!cHeY@Xapll zUqa;KK5?ra8x6Hg9m@$O>(=5MUMdk#e%r+$fN)HtYp1t4{54&5;|d&v3KEC?JEZ|+ z9c8KL8_rt^WEvj;3zo{V#<+vBGgy!0q|v^ai(BlysZ6S~d*oSggP>K^pLB| zl$qC$854cMW%7j8qsR++e-f8UErYr=piMEJ2T!Hy5-$Lcs-p}j&{(5lTyb)YDY&18 zAo4dgMwPxED6WOG=x)$MH-|Lw|BVvgtv0l#He6lHj1@<6q!2dEajRVY!|P`7B39g* z|Ndg1+YS4IXK5Y97OzPjc5dAlcGPw|$(xOAqH|H6s?A&1{EA={&izIv5 zx)zYk7WGRc?1Gy`6EEPFk`iM?7;jzkM-qsqt60iVmk#9$MM@oWA0m8z!@cf$C98gq zHFM^2(#sdVF%%!5+1qd|N$B6U;}fv;ry~gX8~K@8S##xlYZeGDK=pGp^r8x;F)DQ1 zS7~TXZ@BvEN218INE?QUvwX;X!RO2>@wK7Ghi#3vsQyAoE4k?09~rGv794M#`UH`0 zrG?1?pO$c~z1PUOoYazN>K$vEY7Yjn3hpLz>)2^(HsF*UGc(${5v=-=%bNkByJH8r zJ9f@bIpgoo5k;D+e%{Z>KF^nxS&KIcp&8adiy1L^KR-;h6E{%ziJ{aIqVjwbDV?+G zfe@4;z9lnNOl~bqV@{`MSGQwK#Rod=2TEW4&0S~3v5PDeClOp0qppM)9o6Ag`sL6? z2cUR%tY8smB=?l{O@v-@H;Bg)MwHt}a%+0ogNO_ZJNNQyA|N-Fs4w<^lql*5K!t6r zT!2hBdKGjUi@qqeT83l^Y_0NO(5^|_z`N>IPQf?py6<|@;7BoI+${~s#JF>cT{hIM z9PxCWRME?<;D|1J7I(3S7%V4$?WQZekF-P4n@~@bU{3EZ@$`Z(;tt_BOvPcv{Tm5@ z(wCk%A9yt^!)-qiZ<@Cg1XW-TRA}kere4&RL^&-vCXY@y#i8?(NN(fO{50~5l6mkQ zHcf$Qn2hJ08zzwFv&dQzZ4pyW%nfO_WeFg6xb?S-;+j2RQtg*zB;MYdq(JVI2j5+l ze#As9oNUAA(NR>sdl^V4qWpYN`L@IX(Z2i$QmkhKv~w$2nFDG6CCu$T*?R1#@J43+ z-*s8_rYkT?v0WhbyW2?C;zUq3P7SAdMCyfU@K+k=1C>opf(Zkl)mk;>NEdEvZ6G2Cf z%Ovv%@BuGGMScCA5ffCh=QTVi(pGO$C)2|R8<;HJoRNRFuMIU3EhlJ~SeC}u3(p@V zA2F`TXPBzW#YM2FG){CZ;yR0sq{ z{tc)i1AZpN=aoPw__Ujy1#^B=0uWC{bKA8W#=$rj&Zz2I)g9#d(%P`~3YcHRG~u9q zr{qZWKmN=*66Z{sJf~K}8B;||e*A~Qtf2L2Hish5$)O-;6##^!!Kg(gNkSQj8|&ZhNR5(VTr<^-@6__+&*;bGmJNh<^JBgJwxBR5x8o56aY!E zQ&t#T(9w~Rm6hdiqeAv9RNou3!H*lEtveQ_v0;Dz&6TkQwuT4Jecc1dTzPD)I|lcV zNSuBn^8-kSLYWAcLg30Y6Hh8?7zvklvSCK_eA z4F-b}(ZBb|7Arj_0+DKOLyi~YZh^|7QmvsV2O*rcxjF?Ud_uPvhB_|?T%2N~{6t;* z?ldPT_H!Ij8`oN4aoVZ}JTE&MsT%QMVHrei+zX#uelgABC=?Lq$S9YFM9x^;392(M zzf21k{PU}OSUDEg=N!iUDrp`~oysC(9|kNp%HoQjREt>}bO(~w+}WQoXZ;MCl~J5W zS@XMkq(HiNv$;hq7(3avR2K`Z9YX8}(d=-gX6(8Kbvc^c4aK$pwv#BsV03>n`~JGz zdvrG=uzgtXay)G|Um{1R*O4rh6irc*B+nBuTPWeO?fc~PwCV0on@ik>82@2+a9Nj7 zmaPvQ>qf_^b;mJRxG(T3?`tTq8ws$3(p#q)0j>`sh&AEW@MnJFr0G5}UawJep z^BRg!kibOYg0kq0giCD%z#AqmCk`%%XFFkfeg~2NBOt~(vJ#!7a^@Eq8-c;1`0jMc z4uJ(&7>e`vm~XJ6BALqnw+r?7}r3fr7r@gGQjG| z)i)K z_CRydphxHis5V9%@L)zRA%JG}skLpgzn^7Oq%OZ=*(n?wG$IT*=QU(QuA1J1aa5A@ zF}w(IePir>XQ`-g9zxf+=TA*e9#rsuRr&Wu?uI=lLYPU~hY^!a?5V`XWSDg1}yDtUdm7L zKe2kDepv(UPGtybb8}>pao!-7#6bfvYe6Roylm8~j@tb;$?%1Dv5h(?Q ztEcCKu_TbPni_&XAb;GlfybOU!Px6l+AEjy1Msxv9VbZiYs#FLi86<%@6*&BJLIVO zPYZT|&>T6O5=punen63|mGFsU=P6+{%K9iWe%Xm6n)QPZhcsknU86EWD8JR?FKdxe zBv5#0Q9KF7MEz;LO8`)bknTP$RaP+$3|BEZT_T2?o>ye~sT3Ixw5r$6#1<2HndH~sXnTdZPHrGvI-f^?8WB&=y6$ti4v4PgC^*w=8 z_D_XrD|2Z_K617~A}pn>q5dW%E|DoNS-(rHONynH$mT+5B?GY$o8=q-Ed{Ldg#uU1 z6NiV_girC$x06}`Ll9K7?J=@3d)$5@0FNLZ(>SVi-fZfiuo>|>(y3vIyimKL?P4oMFah^YNK;mp{Y)DZe{@$z@4TN6Yc4ua0-gtF?5Uh83-s$Ih z2ZFz)=$WD2O5jMN%T*?Hh^N_`1MnsRXT~g0%+jmk0k(ZKdy=LOcRG>bEO4B?9NnX+ zH>hLgG_9GrCBjyDB1NPwEctF=ddi0(4@OidbX}iVz`ffW{udz5ceeDh5$a*RivSwM zXM0txe1u4(ZS)w3d$9f|b&}7Y#QB!E>U6D%2!`$Eix2LuL-}6_l2!70{H)FU zwyjre?qFK}A9E_JafTW%FYHEtS5&~211a^1cvF=KJpsHq`mKbajds-h0hr!56nsrQ z`opWcwClXpAk}EUA}$yJ$!|v4uf4u!fCsw?sH1aH%t1-D4=0AkTWGGEw-s-4maz#g+^IwTUnMlXbjF!&HHASO|`-7mf zS!P8QpQ%&i@UlAqYU7gXp^&6*Le1*az6p&UWXFu)-OaMd=jm5l(G}5GF_&a#{HSDH zzkQOFgF8ZIH;iT_CL{qCX}RC=C{TA@ZiKe--O0-y1;5=yiuZ;AC<-e&AilQ2b=#N6_Lo=gfk9RO`@>7h%ToX^{Jn>UhQ`&lyBpqh zbL@rDQk7Pg_htKk7oXK4$Mc9_h8K7Q<6EN@4@JAYdJ``e4e~sJ=?HEm!X0(-;&9*a zL$-$)1|(=4G|iKUK?fCQi-lWI$P7fWmD8stTWHg_afFHba7li6(v;I@VwWu3%q&1U znSQoCb-Qal0VMAzB;g*@q`Lj8+(HYbh$2u* zJe;QPbgH5T)VSXEKa?hYY^%9euZhF(z{Jy#a0REO+wWoa*m$mH^jT!04KFk97gt6< zEtYJ{Cv}EG8hj;I>Rg(}pB*|zMU4c39E~XKDNcNk6eG0~t)iKLINY z&BBC{db1}Lo~dh!DkNjVNQynW>_=+D{?)I5rN8)B7Sc7litk8ET^hpomDKtCoSmQiII140c_WamS)&$-O?3ws& zO0k(p`ZLx(D9z&(kT6znkGQqEH59a@WXjDrb?D0KTZ6MF#(MZeuSN5=NIbqFIM~1= zyH*=#d7?tpi!Z79j)s>n=b8W2_1n1eD>?YAqbMK@Hj~*l^Fu=T-R88f*<^`~kB|R> z6OcxyHTU)upokU%6esEiWF<3jvFA}nt5)=Z&?C1gJ@QmMFFg(7R=#pb@w_zpziX_^S zs78BKvdSC@3_Ku~v&vk)ho%SPt;-bq*tocBwC#_sP@JU|ZI(m=!Fn9gMyDmr#;C#pj_+x*UwuVJY)onL+$+-1V!C z+ed7#y%4*9CbyqAcmBGnJmVfWQ86S58L`-wg*SSoVU|Iz?+_91S^)g+ZB5Z2q?aa z*M7s835or#I5nJCpjYgP3J3&3UTQ!kvfJOG6e4mGf3i3{4g&5k3Se_Fe&{tEXAcc% z;j9qhL-3I%@aM6BJK+hc_zJ$2MhB{4F>Uz*w6~dt*XBJBP9n-=2=eQGVp}vFHN*lW zO(rpbbYG*H==OL*A3Vzt%pH3YDwfdP(7MT7aWoBw=mh4P@U-8m}g2N1WwG$wR~NiofR~J zo*KEL*Ha3Ltz7{pw?XXLj~mkbx+KVwy1tF%`Q|`rvN*Y?mIwi77z4=^cWUn8{R|zP zWC0mPALkD6H1WJn^8dA^_an~U{PuQ0Ul8Qof{KEYips$I%bjER>D zcBA>!Ui}EcezJ=Ezm@v8Er-k3$CHYp;_q6&hsv*^5vh2?Cs&6GYi)u7+Bo74JLq(mSlWW5m2_Sfy{USu@`6#5R8sfcyd7E{J*3XZBl}M+o&QQXN!#cN;IpR%g>~S2{Fg)av&Mlpi1h-0Bdr5&tpzFObfGP5UKk@~Y6jJNm$586Mza|URZYOt zi7;=6JP10L?z`Go#E448NjgtzDs}H+8zldQZ>8=#p84i5l?!VB6M2>+Vv|N;^Wy&@ z>Yc*t>b^J7q>b6wHX7Tu?WD17H@0otXskw!ZQHib`hNd&o^!FU_P*H9nsd!L#yeib ziD8D5iUwJbB#*qnL}tnYI^-S8N5vw+NUB&SZLZNVexk<0-}xm!2BMdAFBD%RF^;(` zOH-qiuL4>Mrxl{rIAWy#WP^eI=Q9H+#kY0pH(S{@#5zI50NvidAZgbX1>Wth=M-tf z$C6swKDR)Epzk2p_jB@hZ(CnEK&=6hJ2jlfXykrY-NJGEkHpO@Yr=G|FqUt({j6rM zrsGm*$t8yG)g0e_8}#<}w!64dKF)xCg^0RFCRbMJPRsphDI}j(21?XK!qGo-98ga~!v-|#R?eTvSGxF`jJ^RFS1C=S!jIAxA@mc*o#!GV50 z8Kxmh#qa(hLa4A;C&}&|R;CjbqtTy@n4_d@N&zA}bM{mRZRMnB>ewOuF-X-LSohp) zvt&oxVd3P@_zrc(9iCY~%7yRRFD9R+6Z1}_orhIU*E%T6YlWJug)9|M zb+qfbXU`6}XY}uQc$F;>(nhhuH4IJbORA|1d!vl}f5T5O~A$h`~ zfrmIz4@1`|z!iZw*)Cib4SS^)IWwIF)n6V1yiaL#E~4Cw?fV9HR8)9jep3##=NXW4 zl;nvBI|uI-jS|YujC)bJAz#CGGr%7~Pf0dqqB)|WTqp`QnKDX(vX_}AIF6Ou&=->} z@;-1dr)Q-6i1{BPi}gfh2i8<2?mAyTiBrs|AxQ_QB~8o97yfxag8gidb|+)aZ2-MI zvyHygO&Y+364spqWM}QIvDSAWvRlyI%c@lGX;vOi`gE6!mq-)V{91;NFZFdfn?BQzwo2jf3X)Yr4jj6t8IJB6F;p zomVgs0ahBeI1?5NC2V9>rl&M^h`-+#EL;AB3m$O~xk z(Pl*#Xqgv5?aZYsqLMW3I9Zp71rP&fWO4R_ip;Z>jgmBnQ}vCCw;{}L%RJ|`xzY*i zbkQ_qA}$&PV+OwO##;3bwHEjk71Erty5n3Y+oNSO^iJ&!X@K{chSPWEJKi*!nBKjP zAmk@Q5&1bgv&b9H_Ob8(FZZv5?YJjR+WO2d9k-&dYJdnNr(FxT_yF=&ibBG^cbUqw zBer?7BkI#Pk*Pp{q{i?$uzg z+w6Ho59WXx&~W6ce|O=z|1wSJxYwJ_Od-tG_Z7vD#179P{h&PYcIk zWhJL%xiE%eP*Perqssga_kL{I0%E*!V^F3HJ;Rm@vejwiNz_Tu2t$;ItiqDczw`+l zg*7&kLLz5oXRcWC>Ppa^4gZqhj>vQ{z@GppO5C4b8x@JG=bJ)WeK)lnp$MlryG-zB zjxy6`6nY&^Z-3!A%iu|iP5E$Ls*T%i4Ll#xw}yjv#(RNJrTdNYu31t=a%=Wli?~70 z|8K^^Vn$)~afZ18IjXQ#Z0!_qMf!iV5)>aRp<-K+1+RjT2t(^-fDL|SzWqdZg}A-Y~MrT)txMbZ>R_2S<)oZ)T|gc zKq$*gHr64bJqdLeBnpWxhiR+dQZq!P07~H=b5Y>uS%o3(*A=#0!+cz#rQkiwN63HD zvFDAm<+|!LZ2D9l&N%e;2lR>7R9t9bd8k zBstYSid`?iFRFDoc1}su@+Eb_!v+MxQrRXP4a%N)C|;&a$&+wE&F%;&X9Bye1vnoN z#fBOv%oTOQxic1R{!s@JCpaAb+#fiLw}cZ_JegHpv>H?yBck>3;*Bk~H7qNK4qY5) zw9v-f-{`eTu?Q-F0oEoVG&XnCEsXA+M6$$~iv&B9_$90BQ77gP4G-HdX!0ivu&TnF z8s<@=4Mm(8H#@R&7qo>DH10Or-h~z?kLeca}YH{Aukw!ZK0}ZMTE~ft5~-iAQxqV*MxZR{mB=o=)s>SXuUO zn1JqX{NHf4+wR_ayuEv_4$Dm%$}1!}Gxsy@t}7BV-&2Cvn9|USs}!N-TEmCS3Y)7{ zNQPLta$CK7Wk1qYI7=He}z9mSR)grGC;rWe;Y%nEl* zk?-1+C3)sQBqYUkOgxOp`$h1SB9SB=66WXbGc)AHCpFlttqQde4*R({?NKY`zw5f* zi2UuRGpaIDD0rvnb4$?`vwKqdv`-zrDvvUkU-{i6gz3W8iVGqIlp5bo6)!KTb&6it7T&H!*b>LoZP&#C-j70sbkHwv|(Ut z3_s^#mdG|;1FLzrB-U%_{r*X1G%{aM^m;Zjr=@_C(s-MyemAKOux7F$NMZH{(8uwr zok_W$WzT+fN|Rxu^W7iM=lXI!mM55fVus-trRvISzX3pP;bLE8TjQ zDt~hBq0t@dM2ZeTodBt>wPTYQOAl*#Iu)75O?7V*UVMP!USU zu?6US!zRWs8p>+0>{{$W1=gCj5^SNbuf+Yt6_07SG7~sXBOy7vY^fHbzSZ31iVLq& zvJEYwz`wMux5w45vi;{B@S$0&_%8UpwgvTuW-EO?^#Pj#p<-A|E4=E2cpXhF3@+ug zU$TLe+4~>MzC#OR?a9U_YXvPuv;IpmFHLe!B}P211&Q^XepQIy%TjMR7b1VQ-PAsJ5N;I~v{hJo#G91Y0GfZ<^9m%6yW1p@f zJ=Enva$~9Pq1~k8+rzIF1#GE7yDicO>0+;3Qw$qrbuHXiJaR2Vx zo}K5g79>UjXXr0>;hs=mM*tQ#D0H zx9fjoiDB&({~`dJ3{0gg!1cjIemFi^Xn~8J{Z;Nzb_`j}<);|!8!FLWR$iJWCnL@k z5~BTue$I~VU1CxM7sNpt=PysXVriV|P8>>vX2v9`^FG!z3(+tRoQ%MI$>cB=W`18L zBl&cH9%C@5;LJ(Rh{%s$=U5{mdt66A-}Ildopxe3)-0NsbJo=RGHhTDzl4^(c`1$m zX@*|o#B%R<6*nhIEoglxC7c zQ1|UWt#Vc)Vm>WZ5VeS1kQIO#A{zIMVsYY+!ie=sI)Th>E-@0&HiQFjIsAXiR}-`J zBkO6MO{ZDgqv8q zaaHn>(w~+{*ipn9mAN(FmL1SX)wPGUR5*LPL+{5HuHgI!nV>UaY8vky(3D<3epfd@ ztUBCUBs`ceggM674Vd05dRvUoK;5kvKUn7OB1IwFuG|~*n<`{shP#16M>0Wi1vp?K zr7MJf!~`AdQ7ABg$&R2j0!F98SkM%AoRV4b+SZ##;snf28bWWxs#>@A?bl77$4}sA zSLk{h^qI-&| z1&4i|Kw`K~DKER8^h#vX8+!DZ1Ovc)RyMv>oE_V3Nw^QfLh%lbLh!5mvEZ6nc-Un; z57Lx2xJ$#PjxV)s+#|-Qr^HKwpycK6CZ0&3QllbfJ_v0tP$*GnU}dI?WQ+{_RfEi* zL_lbskLQ0^FnvF!FC%A`$p&xE6D9FYLm_|qC zKs68+e!;~w{q*Rp5e08#y_okCO^(1&a*Zf$|9^e=pMt5}J`i0R1e{86cX=0tk3f zPrTCqk$=?m7_&F!{If?h{Pp$-@|ID1XWCL6i$R^ASvLRllgOCXbg>3vM&FZ?YZwXOE0lPQ4OUBanD+6QEFF-*8=* ze`Wc;o~-*kZA4)*8v1oP1MrqXFSv^IPX@N{PLPaKmO=OwG2t#+&_9j0FA~Ys(E8>h z{wt)SZWrTdzENUQe}JYB_#H@)Q)My~##@BIa{CQ24pQHZVxVl?LT^q|J`K^6P~dMD z8%+|<8M952ux?F%OLhnoSCD%r8To2UPZavvX{|zgCt-;9+QWzw_FqhcFKr8iJ^;gg5W&Iq!); zAJkDLk78pb4X2O*e)Ol#A(45d&;Io;ns6bz(ye=`r=+^L_n*$e)pI^;_Ebmfx$ z?O>jgeD{#T_Ami5KWt+yivx-T!1FJiNIaJ|9JnSR`@RnBh#44) zKWW^V_yTJK6du4klN~WQXJdhOJlhV+01j98#J04ARYX)z>+5{d&7}IRChG_>?Bfum zN~1pDDAzAX+pa5_(P+s2W)Q>a?V@GRp5t*z8{p3Nmt1|zV8{K5zxOWAS2%i5I-A}X za4Wnrjcn-A8pnBByg&5Ob?fENSimfR#If?&nTnUi?R(SuMQR-gpzqTfE)q+COYIWEFdC3A|-YCh=uRNlo*sT6Vnk* zL*N@q&;Doc-g^W{mN|QRb0$pN9ybgg8wM!Mu^3;e{TTMZt4XaVUCt?jA8*Z&1^~+Q zA5_cpdR(~fvZTxN^?o;=!5XP;+ZGJ)(>`9*ppoCN6;O?&F4x%qhPcI@ZT$-I`!?1V zN1aOW)W*(eeac!SqSR_Xh-=s^T@Pr@e_PMOfQW@eQ6sH>(03$yL zM}_Gy@qP}etRcf_5yBD04)=u@ro&tENiUU#^$pNo5pf85c(x)AeY<+659Mf{IDj8B z=NW`F-pXJMRmYX$*6h9?F9zX})ZBK0@MVFmn&`i4rxE5hrOtCbeNxa*AhBPVg z;uHl!uEiLCu1`Hz5Vbxf{&bV@xpL%~?M^T^mcGV2#2Mp2V6m?2hS^18ps<;O5xB}g zX@EC%REFhew<`vyHEw4bqqo*wSTaEOsU!u)HMz{jq*XDa&2BV_Hy+TLdzV3xy?36_ zI7w|(L@D}t;RJ%daAqxMk*{)B=&=~rkTMxjyqfs%1 zL8zLds}arHR7m%y#=OcV<|iNMoS~jMNp<*-zXp65{XV^ITX!I8dOkgsl#mnmfNZ8! z=RX2_snaU~5&LOHKY8%)_h^4!**-TbqML)sqgf8C2^-SSTjQ?bH7omP#_*)F)@p|3 zPs_oK43v??hOq!VW^}8D8$I6DEg(uKKrcb)!Fhph@Bm*fHe$-Lg<#2pJs;u8aiiZV zj`BVKLqm?Tnuuy!C@rxpFGlc%ufPRc2>YhW7zvzLNM4wsx63RRv|PETK7!cJEb8f0LSLX9)@W)D!xS!t7DQ(~O zuZrw^VD;jvqGd&|Nl0PlZdu#C6@vU4oLXb2H(F^IDO|qPR6a->|YCxBXVuag76*VX0gIZ8u;s z)N%GocE$o(ILqwb0x)k8Yj>7+S>HE0!MaS8b9W35RAR7W%o(!CyIPUe=R=G}X;GI9 zfhi8E^FNl9(OQ4I^7V9-Y(RmK2BRP)1=I8Oan*J|E8TYe7q;!<&zk#nALPr& zmETmdx?cE5(howZID=ft3CJUr<7>h=IDFQ?RPvk|eR5_pj9W2GmzNikC_h;6uGWN_ zGBK-B%3CFHjBOBF}32~3%VfZ9K{0Gr8ROFG64_eA@cvSTA zb8jJuB5+m%oDT?23mIq6GM5E~Q_6lN-)C20PCwEJBV@Jm!e(oc@Mp<*BnTS#V$jxP3yIYek2N{$s-W5L;BpM^PE29|%pSa%*@@(M4^hyNkH#2LrHe7L7taY2Oq$Go|GE*Yr zgb}uKa~oEu!SRLI&rrlOQbc3;QXcx~tXWA)E4`2yh@yho)$;g);kbx!cPZ!-*|Q%u zYko^9^WX5h+=;bx`jIV&Qj*4?{VYrhX@{zYfpS4p!^W*;63UzTv(lKr*@;>P~y{Yqd10*k;v^YOEOxC#2@i zaL_NTVxw4mcw;qFNt_bM8aob*A^+^#(8yE^V33ML1ubX#>uf?c#af&H&zjQ1I()et z-;HL^8x|?&0H_m-4NLATX38~1iFODfL=KWsED$$=Yg=rd5h#o~~|4i_FpZx-KW(uVkxB2?Simj7w z=(#!!Fyf}josOKxjKt-GoqJQJX=P@CYJbn^<@dU)*g1%lhXIj_%;Zi)+n1?g_Rv)o zJ(JXyi14Yz;j(jys9FKCS*8oilpZ6zs%pBz>cFiQL4!O>qW}dWLB(_wD=`^{yjR)* zUEzvH+u9V2uQ3O6J)GDov&Ai@Niuu)I~u*N2_-r_U^;`JBwV3-F#(e07?ypM+TQbc z-CCPXghy#KZx-Ezs;*R#ymK)La(?DP#!+|94rwr*C)lb(2U3)Tih;pwF-z+EzDJ;} zsVQk_@Uyt69QDL00p{MPoW|NKpt<+L15iMD9k1eYSZ zH6mL(yX!;~c*D1}6His*j?@CZUv96|YFg#y7vRV@hil71|Y1p;~^k!c&b0 z73!KR71rk`BQFe<^yCgOScVrW{e%Rd9{ZerL8ZV@`#mnP4EA3M*m&h8owM;%0GScE zDqr6BJYf3ZzuZ$TmB9z{C;7v0a_$6U1uxj)PFZsh$de8Y+~B?$Umd}k#hU!Ff)Oq+ zgva3`uX)NIQP9Wxb4+;{>^F=i8_BV%@|R&lHh9*b40Tu}$$Kyq1R>Vfy6iOx{!soX ziU@n|WkGtO%If+~d5$})gm$QadcX5AND;eOl!}q;M!*!wt%V>kl{VogdFKo*bvD+z zmk`k$ft7dxknUnz#ktt)KWdlr$e`Mj-Pe%81~ZpfmzHEVzy9IERMat!dBKqF(+B5p zeNRq${2#&~7KPa-?|X|vO+%B;Vu1_}4*s35wzD$}92VXFAX(iJXksY-8*;f0Zq6%R zVm6;~Pg5+4ie$Vr(bcN|K9YHGQVPSQM;s`QkgQ0e?aV-D6_HU7|795H9G95Ya>og8 zKx&=4o*BA&*RsA-cfY~e^;bJ#<57=TybVx zg;dVv-mg1-Aig4OFdC83MIu+0js_ag!g$$vTRF_P*bU5dqDzrq+`M#5VBWJdfMcT^ z2tXs~JvQr`(5q-cyjEvkBnR=XP{w2W)$v68{IY+uqb0-GMRMkip(Bb2{}a}GchiFv z3ki!&&BX~Ov9LOF?*k3Wj#iLZrm!N$m@;>@_rV^>()JEq;J&x9COmNu)L(VgN5BLe z(ex|ii!I$V*%6R50?x4i33BDV+&gy4$2P|;Jf-lTs=qiBx%q{V0+yPELHhuQfM{7V z(sXW2Q%j)%vho60W(U-KMbcHzdv^)6?Dxm&g{Jfj%^l0D=zj!ic@Fi1!b(;kpka%$ zd1(Tcz}-c4%9eGg3PdZkQE(;t>G7poXn%z~Z#x~DqTAcNz2NE^vVFrPZrk##EZ%<* zJEh=g1Q~%*_qxitb{VsJWEF;i%VLz8*ut+nolDB1eB2nrv}fJ}@tnv}``6>FH>&^QbsWV+XCN~d2R=8NDf zx9biewzB=t^VK@HXqTIXn341)#1l-Xg0&~~0!Lh&P%oyE1Ry9+NDV?3(gXQEL`nqC zP!c3yUcw$|)3&2mjAbF#HEGUruzB~{S~wHc9u1Az)Ez6Yk>NPjc68n~wQ5!U`l^Ae z`4TFp?rwo)t!;z5q)=;?<`_=WzDV+nD|}W)qSA(7^#&Tq$(IG@@*_Egk0t(JkAMDO+^{>_9n2b9XOuyVf)z|vmLEBtD$g9QUeV5^P01~ zK?m9lc7fz1qVk5#e})$r{LW@VP<3ErSy+HKu+|N(5FSi(TX#$lg8)Ej#vah%TY1$GHfc zv+rIiJIrSTynqDH?jS-#Wl+TT15X?8vS0%q|=R^A;qp&WM&V~3(5@JeBWCm_%Tvtkn zGP-t<4edz`FtV|{udlBN*I8ZGDBiO?`5UinK--!~Pinu-n^QxzA9G#2j$^xbb2WJo zjKOo9lm&o}7TD z{aOAD+NoOrKE#6YJt-WC27wZtgUFI6Sgx{pyYUSFQ{!}YKXf?X5XO{<hUR(U#%i9}=|YiYssJ>h|EtkCM*oAeQW= z$LaMZs$(GF?+>BEkt%GgOV-=qOLgG}kOkZuWt$KB0l2JY}jG!yG51>xIE)0rd{c8`Zo4ovrqxfWjhjyrn+*_2d!Gb>Yt( z*1Tkcz)i?npE6R*+8nz@=3Gx`L``A0EAt=WeCEfTFNBsCHxacL=6nOp~vA_79#bom!~MnUixn_pjSmUBslnSc2-oVCR#>oVH*u zPkkT*xr|Vu*3>T>cjPUW+I*GyS$HXt!-Vuv8buMUFSnK#xH-OPorRnn zu}ZVN*i);X!=hDX-x=p7+S2nVVc6b|%~7lZ21m2|L_wO$HP@e#nS5_zS;vhL3xhII zk&1L42y?!=iS*a?`oWySW;jREFh0PENZoPZsg&}E@T_u02$>)y;A#`j2-Zj7-mt1( zACc!L#gdYACN<;aFE*o5eXeOl?tB$c=WEa>UvBzab&@+@3E17*v0ub;67{1trv`JX zHMpPr(S=g$X4j$$%aZ)O%@88hha?>JRQ+LEwc6dQ#SUD$#Sm;*5+>oi$VIWj?Z-vy zT$%-UWPYCBC?Bhqg>9tIJC9KLxvz0_8NhbXY#Jvt^Vzmguvx5WECf9T=f-a~70V}V zyQ(TFHRcbO8nikOEx%mZXZVR5C-W;unLET7faRJw%hz>LvlKX^!$d8>@Y z#*69-@yqUL;J>3oKxY`zbVE>Nmx)7lw|66S6VMUdr(fv`UiMeU3aF~$OLrifX_Gyw zKpL$DsHil@N#lTTUYN7|V$v-5T}(~d(@^u5$gM#$#Yx;9X<}-#_iT|h4H`)d)QO3> zAM|JPv=(>-R=lQEfDc>I{$G+(;>;%`37m<8+a>F=M=_6QA9IR$&b(DstOx3H`#;-0 zZ(BuIe)vT(T#s-OQ=KSTjZvpwq#){O;Gu<46sa8MexGKfo_sX* z$%&lsq`6fK9-W&ZTyFli4T=g_{&cKakY+#qm%CXK_al*G;1V-ShgiaDb+$DBIU#hh z0XWya04^DQs5{n@a38P_yeMh{6*yzlXiuOZ1|+^Q1R&wUA2$ca+@{ody>`FZ5}nZaM@e9jH#TKqB zmvCYj(w^(&$c4G4BHOl04o+Yib#cQ0L!@#ldGr>mzTMb<4YA)F>3cOu{^;$DSH01H zhxid7bmdB|MBy|UOMox=P3-z*m{3sJdTYB3}OnWbT*N#1c2NR&Wr zNu~B50+=YeW}CvhjQYV#c4yH4j()O!+gq*vSHk-*FV^4#zw@_^KS@ROmMnL@3E5!V zG&)e~b~XK>AgtK}+4PLdm?0^GYMQ$m(A|r$-|<4GNo`D+ytszS4m`5x@wMs!@*TdvuKEQx~&SO7Vy zrb)k*`30|o8~u17E$&8SG+|raY}|EwL|-@L@OJAl3**DqRzse8ELTPP zLx9-9)+5zHneMd1tMu&p#Yc3C*w!NM>C6gZw0ZBhYMuSv7l1P%le{}fh5Rr^U50mEDt%}uFp8D9X) zf@sGYy<61jC~_lX?Fz|!fsfvv>Lm16u;NU(39NC26u#|1!JU7vF^0_N;$yq!*w2i- zr0y3Z6_4A-O`zK7o@ctJ?pSM1fNk5nJk2ydrNf1p+hd)vq`3V*Oi2(ihJZrQh;OjA zeO;vi1iV@}GZAd#rnXGHecmRJM1)aTc)^fA{fG%=0jx@}D{i78Yl)Yf+==ANOlwlI zBvuicSyCl{ZW?C|$~0=o`!%~Pco?pl*Z~v1u0C?2>vT!;#C9lu)uZ5C)s@{F`NAp5S;{xg3wh~~Am@&`WFq4Ax zI0n{li+q|ss2MR*aR__Nm&h2Jwl8Sth;x*YJa-mwKS#pv8x2_zJXCBpzF3uH0 zjmwNP%OK2bC;^Rnv)*K8Wa+O)&M4!Z1|}hS7DLPG(!ZI56ZtgD(Rluek>EW%uDBL< zKDB;)zWl1rs)`{5xKFFlcqywZ@qY!vt@wRZLdm2(gRV^q@T33lMFr6fU9!!u^Zf2s zeBdPhM&+#KC;|6}QTm)*yr~cfnbC|$MLiK$R^cg#%YE&cq{Ed!Wuf)v_r`0vrJSq6 zUxdWnFV$d#e7gQklgc{fQfC>SmkGsutaeVs*6T{oX7$AG_(F1aogf)l`F)9u9k38> zCIwgaoDWrksar0cTWG~0>OU?Eia(}oN|Zn*sv;IaDVHdB+Tt9{;(A-oF_NBSrv7qS z6M*f@NzJ=7s+(dCDBVqmBCK?W_^elFaCs`Eobom+Lb3tN)rV{R#YESOXWSw%N0wT3 zY^%mvu|bX8**uh@T~S|n^iL9BjRF0s3(tj;6$jJEg4nv*kuYxZu*Om90wF?5Y9`XG zVQfQA)QgXZ^|z!aMNZPq`+4S4UiXTCnmN0rbhNYGeqMZ!X`qji0!!MCXy3D0?X!bjeXBmR7bY&`tED~AyUYZqo8(h_O*0VAf*L1_F$;A#c?)5_noiH|L#tJD#wC_(+z_h zLG;r-4O8jjTw>=(gxJ@@04an%+v&{zd;4B5kXW%zU#|A?_+a?SuJ(2GF|PL!FOJnO zmr=me!x$hTC&GaKlnGfJNVdR9a~?EVf4P6_Jb}PN`J(R35!I(5VNCmrn6oURTREoj zo@Fyskdh45?Wv_Bg zokk3<3%GlSK>D`w(8eUDi(Te-U`h-MDcY`-iR^B7%UbdN@WVr;d4rC3ptBYm^cq-G zF5rQtMVcz`xlt`DV5^ILdl2-MF<0s=NDkJ~t@FiXrln@V$D>n#93(Mf77lV$qIgD+Co%mIUpSSd9&N3(orLxJoZ*-3I+ zCRV2c*52iHo}i>SW`v)NnWBi*#iN>%Ivn7zSXWf8?8+X=%6j~=p$ zVune~xz?&wOfLRbKcBHdKnZFgj;cFu=e>S4S=bC#vkb1|o{hu$+taeixNk zxa&V-rL4-*Iv*+Y8M1L{3o;p_wRp)@Sl|C9r294PJhB_gAEhkh*zAlvLmtMz6{Dr$ z#Xo-~vM)<|5cPGii*~krY)v#%wT*bfyF}egSfjX@lHPkYms?Wg1es~V89SdX$6&z= zeE}JDg&D-mA3zc~mEd`=X+R2!31BI(xCJlamaVX**=%t8 z`G%-iHK0(2ME)i8f!Z-e_~)@SYNy0CR0cRZ#6`Vc7?Wn~jCX({vG2&zN$sT<59hl+ zs$ioTESN0q!W84pR4<#mh{N`ef=_oMHjK{Dy>NH1cS_pUMIa0Y&}8*{aw1Ga84QV} zsU?)pG5^il^a_U6q%$wd&l)X>7&e z^Ed2EduoI=9^(!i**OKpAF}b=bK0;Lq7G<}FlMlvO+*q`JzCf}MNh7~y7sVprdb1% z54DZV3KFH9fftvqbh6zi$AUsl7b#DVH*y<-X@Zo1c7ccFi=4Rd03HFCDcztwj(FUKV zbbkT#_urMPST=c&q4#`GgpYjX-CUDXuCwUZ{t(0HW(E%9A=oAoliq$uj>}V5`IA2S zd2P3i1^7N{|5w#~u|aI#4#}=c7%9n){*KY|wz54s4T)X0q2Bqt=9J;Gf$2W_Ox?=( ziux~l#gs58Jm|)(ZruaMZe9W~(h66xJy0AXYgc%v+lg4K9^TjrTB@8aD>)ptYb21I zzhVgZ^2f+{Qamd^)b)#<9qQ1;Xe`|v^GSI-9+0Zm`{yRSM1rJa<{9Hq5F+cy60DZ} z?F&?|(+nD=#{qH98q3=C#5(1m=m(*8t>EdeAbj$P4}1!;W8)B>BCYXdT0I3NFLc$P zQJ=d^0hcx!xK0Y6k-VU}p}lWoLxH>%(=^X#>cvN=Z4RUSf52NFwHMBnFUI8rwcT;l zud@69WRQR6IMW}n5TCkXsa}A$6!f^lZu(eh9*-F1hnE#z0KEVJK`E^qNBa7%b6m>m zpIQ&F`e0>luJvi`?7rPH+L|%qWdF>%4Q)xcoeC?1rz*<&&{k{J+l{vDH)-jqr~*8s z*(=BzWe0`*G)m+8|o@Hkcc4Nyuo4g{{ZA&q1C5YiJc;B{0;Un9q^?YzI`hpsFf z8?CQfDbB$nzRV-ArhRpSZR)e(pDPCIEi8Vjc&;y~hWs*c6Rv2f*{U%0Q|Zj$MT`IY zJ3S^2EHTI)1J@gJ;?BX?ZE{4X8BI2oV_qzVO5#X6m812r55uESi)kVU911vV(`=`< zYa&axkI^s_v&0o!Q=lzb3$F=_2q6m%w|wxEqxnW}l@wHy(WIxa?=>4t$QZj=GS@26 zogBlrf5Xa~d5&>qsX}rP)x%hMWh+WvnXoK;bh_YJx)?bsVoMZE{ie^WKeZ}M@9Kk> z1%5U&JQ~9WRB6^|ZgpP$XVzDvyCDH4JiZgvW!dm?N&RI@wmVZJwReIBs4bxwB#NzP z1ytkj6W9sgqInE-`{A6>3LcFZD1Of)r6VYH-*(}KZ2nY4A>`?7Thv z_ep50^tVh2Z&&t$^r3P}>fci`Uf9mRH@vtD%R>#H-`<5)o;gtmWDhH#YrH2E&Ll?# zRaGuK-Kk+er-9(b;q=wI*!m9n-Oayb0KiJs%-!0cL3nEgt)|W>sJ1u!*HjatJ)V#y zK~A_jH9WZd{MuPTobCwH&IDHu|M|5Xph;5JZU_Zviel6q=Qpcxz#HYErOK12G{WbH zLKzkO)fZ4=C@vLz`7v29&#={1$tf^iqs9!iGzQn+q1EpooM0@2G8c@ z$Z>G6<)pd+InI{s)ZygNwAwYZGD_vvGr<^4#q;q%rg4aU7ZI}EuO*R4G)^29{Dc4V z)Z6xTX)-4etw_1TFk)*bf$T^q0Eb!$v09QlOfUd>Vii(N?# zw9L)$KbK7?V36U#(RkbG{*02&ic(N>!6rwq55FM!`Qv+VsUjhX=CxykVMEkW~Bfx@CKiY27;SWyQtuBU$yk(rSfSlxTHdbcF1V zld`pFfc`5Ce*=sRUCeRS-(B!loazoWHXx z=eGBXGiWzt|L{#8XdynRtDMh*5aZle8WPeht$qEYtPXD~sjiyRA05qb z&5$?{n?nIfYo zxOK#NT+LTRLE*N*|Q} zqSZfO9t_vf6~OyhGSg6HDOD=bKexn48?nJJ+ID0n*M-0Ns~5n zvStV@e|V!*<~iT`#BbUE2sl{MlUCwr9!@1h?}ws(QNz^i`N-CeyC8MAlI>?9< z{4$U%_!apqbZvkbI`yte2K(PmQL>39f2}{V%7m;a{yOS>YI9Y-IsHRaRJ8o^Ex9ex zV<>S%W6nKb$0uqk{jacD?%?ksxo)Sco^xa#KOkwI^ z_Y)LqJVeEP?74)m=l`7_Q!q$fUYp&pZ8og=0&$8NfsKwC92C_sGb-W2&cqC;N8U{F zxnQ-swJ9AVKlsqgw9ArSNJkhEddYRB^aI9JbthS0PpH2UEe*S6 z`*F3k?ZJC!XP^C$AEjzTH~?UToGjmCzY~w!T9Aww6IVL3y@|W`o9dW2dogv$5?owr#6n!~g2{`MoFaS@ucB9&6m|-XF|)%^Na1 zcK)%U(gaI(RiX;KdZE|r~<}w!CP&Jy`i}GJp255KM1BB>Q@JGeh zHw}l1H(%ZH=4G4tYH5FT#Jm*%KV^$38J;-uCv1`7j{)Tf+`)0XTCuy&g=jb zSN7x;n;0%~_QshV6Zz#j`_3R>p?sk4S3Y~PDgQNyTvuq$b)#B_L!CWN78<|uzE%I? z>qN}KF#o1b!3$t zTL~vP{4Cqnb+8r2_C(#Y&w-^34YL*Ka+V<|Z3gw>_lD_fPOg*c0_*mo`qfxl;UaE_ zyuot|&cA;=WucNn)GuIRoW_;}4v#oVdqh4fU)y%B~6b+KY z{;egK8X^C_*fDOo;{nO=qCivAp~Q>N#Yvlb(G`91HiC{3fyLt*@^tQ8cB+y_#=R%H!QFf3Yw5c4jaVtyTE*LK8pd_izo#J{4} zVQh0#E!`j&vrVDik~knPrfm~kgc3|c+T7@1jGJ!$pqY3s(`g) z@21cdSq*0jq#U0)d+>RawWNIpT-XfDz`(MNxpZT`!O9oi*8Y8RAr6O-N%ExH5yLjC zg0?`t*M7FBPyh-7I_v9zmK|-RAw{9O2+&t! zjlT}5E)0;PfI~E$+pz-IKTbj$#a~RA*f1WJ=Y!oXXNs}BLUW-_Bak~}PvYX-vLld| z`AN?EV`o}sO7v^aD5E0ub$k7&-wAdU;`Nb!PY}Dftaj5u>oY~(a;MpId?VP55S1eI zv4ePBSn%vfVevu3N#9enZ!Q}C-~D6qbIxz_O0dmsmS+fc1~Hu8$U5x~T9|>!=cE6p zu28SL$#Da=is@$K-x4d6Pnkm^uS6o(UE_e0An6i|Z_nUy-uD-@eo$fsMw)b7?GCuRz6Kxg^Z_(c&uo-IXs3uDGI{O(W+v`jdM;r77AaQ2Yakb zR)9zvG{fge;?j1lB9@czjfRVyvi3~a7eCXw2L?WdA+@ER81mWJHTfP#t56*kE8$O< zT&)pB_n|z{LSSwHh%XN2uv&ic2Y#Z3@;(Y0{b4sPc#=ksI^d(p0M(g!=AL;C^Xhg^ zEs!297(uGvopd*jXc zH<(-GsDE%>^>?ofwABd1K=VDrngnCySglwQ25?S+J*~$DseO z+sDu5U#{aUsP2;Q_Tbza=*_!F6Yt}Gm#Fq|<^#+2>UxT=^hl%Y_c{5gJP6TKhe00R z54`72hs$F#Du1*(dg4Q_4uKJziL)(k&4P?sxI#|6$zSK^ObqRJ8zk(JduK{x$BB~s z*%328+UO$i;p(Bm{)OMEBZdg-sKYT1Pp$MB0Uv!nC&Yr$co%uJriZ7GHcM~Lf|V&4 zgV`OxGeex>pwpTF`ehA8L3mp3qD-KH8Dc_u1rweJvTjW;nt#w-+6f7rdTTkrAI0!+2;7*&oO{Bf z;{h8ZgDy|BhL0juyp0jD-TtUyh+R_x1veHve-^$dETRNhrLskbQQ}YO2p>4blu4oR zcm>m~rdyZXAbWg_@Q@bV<4*W)G7WJc{RB4xwNC~QBjs}Pbq1SRmD|fB=W4vd!6mk)T z&VFH6TW4p;4Zr!sI^CJw=)fzWA6EgRrskyj>uv8M9AkAHn5qVXgcXC|-b0BXdeNNP zaCm$$hM*JMP_MRgj_HQwpYm@~>E}}X#IHcJ8CU2t;K=|Eu!jm&A|6NG>h+0Xab?T; zZU4Gfm#F|SA=%$(h`wt*$Zu+`c)YE3Hr=go1G}l<)_`g%1x5G&(u|e?Q)<o8rl9Ei#Xi zsK8B-NmW!qgQ}FlXsu_7uXZ4?_c#VeIC<@R`oG z(|hCy5n@a;Ax%G!`*o4KB??hln?MXYzVCeFM?)x^LgvzREu@B4s<%eTM$C;mVh;51 zRv5mowV=&4rLOj}Y19a?BJ!|7aOF21)~bN$aHUfZXzZ3@W}Z276OqM~`8}>Rq!_Lf z9fE@H5Px&a5XI^z*1jcz!s^w8Ms-AGqD=9%Ir%md(|VNNiF7RSoby=+)KC!UP97gmnksW`12>S* zw*$(4sRdDDSb}dxvCv`?#)8MDQM{U>(Dts$@g)o7lo#?@5+*cV_OU{P->z!$?4h+d z!;(o#v2d1W1^m7}RFGaBJH)t)sh2_jS5eLo$6yfi)|0HWI2X!m_bB>hB$N|$;1|ku2*bI6P-qtfQGh{&gyh*#Wg^)jf2E?{7)Hb<7|G535g_@chdLgmJ(xpf zw01gntoOl-KvLV4+iv!swCVUqP%Odv#L=(g%OHV^ZX~(ruk%fh?7p=95EFD>_h1p0 zWXcd)mVe1{N3vuWANftKn+O)*|C*eD@%%X^Irq*|Awvv_OdFDvoid;On7`$|`|H(D z{96MIrl@X{MXmO#QgX>g$e!~2Zm1C@7ggc ztupI9lTZCe?QFTtR*gR(h*)W@E#!5AcXdH&YW1`9t{=HOu%jvRJad{lEYXsJFkGZw zd?x0te4~p1+CwR5>*GM$rn1NGd!;%&R}I3gXyt73_MPqW9QC# zTqeRJ>w;Q(w$3csVQQ%7@E2al`NxOnprH}w2$m^Hgn0qw;h$_T!=3gi!YB>CnE=uu zZ5|%as=9rkTaUN-Ic!9g-`3fEvnlT zMlq>aaUvEyn1m*cGs9F^fZjU++C_3^N3Tp%7robcTHN_3AF*k6$J?r`6E){|WBE7@ zzC}MDT;+IO1VIX5=%C zbmI~D;512;V{^?|r5J}@Q`|Ydo*MexnmV<=pM?RsF{mC`BPUT&>`Dy2j4P%be zJ;{M}tX@~j2moP|i27@%tj;_ZdAck^uZ>kffE)x*Y_OtvUtn9AWr)S3?^aESsyrnO zVFfyM96p>%n_o-5Sdzw1JRqp`ENkPJZzpJYs*RWs_48N_joliH=^R?*H!btE8pG%p zc$=5Q@^@;`E`9}pLx{gh?!oQvkjAmc<16?##nK=;y1H!uvC`vl)%^70!u0WC^&cWZ zE?2s9Tjiy6{9Xsi=P_CH8o@=K5BgltY#Qg7C>ceSLA|4BW%=Ca57PcwtEf z9V^m|B)Jyz+R<`nlJ8U_JEAX{Or5Zpb{i?vUsXh-R439*v5RH+K_~mGs|f;C$Y~~L z!6bq@2;D2UEp}}0>wuAkjT48XQ~0;7lP_xOr-ByvgP`1uKY0g(9e(Gr?ZwFTTEA6o z8_ghl35wPQB1MbqeOmC(%L?MH^i~zaudnuqyKv-D9y*P}k;BS1_dY$0q}%iVURt!j zDO`e2kIU`f#GO_-;}vRHRVdh!?%!4*mv@;hph#plXO@vGw7GT$3vx3Zm+LjNGf!bi zmPt)CiJYrluoGz}7BWp8z;(wv=9uwD!R0;YBb(y0-Rz@^Ax`AoVZZX}3X_XNc8=ju z(^2&6`$(wn3IccBLHqRbPVbIlTw!!7*=Kf;XorSK*7atJ;2V@4Z9++$W(g4B? zaGyHv@9#kk_yfO!Lsj9pXvSnb26B&cULUC#}fqLLa5ZCl2H_qvsXh*ReSzfQA9lbIm>Rf(H9iPSA&@IE5I(XR71%oD3z zht;onOEh6CaL=CfW?DQ8{h6IJE$2Y57%j0t33bZ6zKlZOUiel93_o`#{1j}NvPC&5 zonWLX+R3_uzNV|Xd~)wFSd6-@&r@e2ByGAIJ)#7mtryAFUO*W*W*W?&gIqEr_xZ-X zJ7yq>g1-u5fM$=l<|^o-(jqx4to_K$rn(6Q3BR%F8?}xs`(Dtiw#y9yT^2)@-WQKU z=+B^HYrak=lwEsaIO*h^5uRb?-R<781PZ-2;qv^5xzn;+7m zd|7eu0^LjwZBcQh2xGh%P+~EYj$vbD@JAS~e=#@^)QLNNxE(7-(Ib+e3G<##Btr}n z4OHuaq!0YspWaKS5rzDW zuVbyTprT#+>j9o%S~+&1yeew2FWPT3p}hHY2^dQ*JA&AHJJ$?rKfhlfKC4iGDDppG z5PRQ%R%+H96+|+E{g-8Pu~N6;eK*PXxMCve8#-#b_hu;&<2p2zQrK&;# z*(i6BPoIMbJ?ORuPYFllOH$KydSZY1rT>n;Jib+_Pc^PmJJ;5uviqKXN^3^3V9by+ zP-g!gV=s6EcfCwEQEOgrbw3`Quw=xTEq~aEul0D(q0shvne(m7m-jR}b3en(Yg?AQ z^?du^>6)1f*=Ir*k)Llp3rO_<_RL*u>v6=Gbk%pc16UPe3~8n_e#SLFW)b#t&Uk3x z#G94nzWyR)@~^VFA0oVl9N#w2?8wHbBw?PBGZJRD#wX0G^q|3*^q#&)Pz+WSTV_{6 z*k@Gtr@|CTyQQZ!jmel^^wXU_XYc2_syq^_NvvE|1atsxjmj%^i2C+I$)sQUYaK-B8|67`KKu>|7K=H})ECI<-nlmoXCrCPuSN-CfX zq-paubRvI$3CgO=3yIqW0h6K#R&2RR^TRSv<4D}n5HFN7>M)R@50ApMix7uT?++sr zwqFb5UmS(1hp|ck6gC|7X_7oT9-jT)HjlGD)Ei$_nmCI=eC9$f)@wsK*CkYI_cXII z_a%Tkll8iPaSlDpzRIfqwST&H$!Nnlwk^4B1!%t~y5 ztB4k>0p|=q&Q#agqMWamdc{>lTgxN*d8yylO`H8zBm{ZA8Td3OmLni1muvct3S$kd zweN{L2l1Rpqe*ha3a&`H+=W1VCTo6|>y7ZI59w_?31`K4w*+L{RFW<@fH+6O&n_aU zKrhOWZ1&}}BZ18g9x+1i->Igrb;j0}=-dq8n9bs;{nn6c9L0bOBw}n@j9=1@wO9$K zTp26e7F=#cK5|+I06Mr{5lcBWG_$e7S%Uyk9J9hsuR zyfEvc-_i`Ru>sbPoNxdq@QzK~KJrZ^CO;Hwt`1{*Fu|br_EhXs!o2X-nMu8IcMrw= z0gB-#0!s}N#)aQ1L0At4Y;TEtW}1Kxk4#M;o7ba_MwM1y4!;-IQJM+Vd(_mF0&r|k zE-oloSrdmMv7LbwsJH|cIiC$wg7=dynx_o0c53o~{==)bdXOgqZt0a?s{{$1~tL?_O*#KiNsSNF^?r8DgS=O;<&8B!4J7C>kP7_Ud zrQw_MfJJG~xAYnODqitO2RDVw>A0$kP8Q1dL>8nV_U?xAjd%a)cCz2~Jb!Z(F#hFS zmK_ZSzo)&)o6@88R2Rq+ic2xF{TiU?V1m!C-@r(E`6b0B7XhgcUyv97h4Jjl;lAq7Y^X%AsG zgBAuLteTA;mqys&w_{eWpoS)%)2aXLG>+HVI}J3OTU?wJNGKNTEf~ieeR)Pb2`&o% zwnU+#GQX;Md|3F6w6r|)cL6vk2Hm9G;uCX<6@fl4B6qjK^VFYI57W~ck9}m#IQ6y| z)$gpCTEXK#;>M<6lMWRjXi2RxvV2E+0X?Mw<>7so`IgSgN8@hr#+3xn{jy*2bb@?D zHnL*$nXh$n>b+=C;3$K{(iGHjcl+6>D6jQye7q3y)3FMvFADqKtLQHt>yecG{S{va;kwF0LsY_2Neny(IRw^C>zrXby6 zO@Pgx%h6C6lSKZO%6>r=>#`akRBI4Z9PWbmy9l7$%xNBV0OB-%>|o(z+ZE;vKaCc#l+t<@-*VEQpIf zH4XyOd6PyZCMkq(Pmf`QqKF6>2=LeRw()Jp_B-R%cB+9Vt;tBt;j!Q+_rIDM_5j<-LmC*UK`^Mk!ylL?x2F%S1~>Y!$148sS8QDCunJb`C=)fHiAjml1#TTo;qU` z#i0JiSVR)cmIW7?J1tpkSWYlt-J#vFXG#3`qbmk_AvA6NlvzjP0V5A6eG!Wmwe&OG-t%>I!%XNQDU+n79z-Bq&O#58Wueci;pD}upRLy)oP~%ApsKZ>qR=7jkZ*|ZC?pm zqM2Qd`9eTZ5|OJ7xEl2?po&|^FEO=E>DvW9EV)+MCYUYbesmaK zuV1`dC>dA5q*oXAn<&###79TZD=MtS|HS^>C8N{zrOgtXdb!%38^DS03_lrSg$;Hw zu%tP733I~%WtZr8{`m8>dSz$c&W{e4Qd_?!O@7MPVg=7@#S0?JmxqrQqR-_K|5t9_ z4Oj_&kL)1SOvDBrm$%SnE&Qy8cs)!Uji?rEA$;pVW5Vr{nGL>sU-@v1nEMXzX3nTS zHen<=HFpfQeT!$b*qU0{5D)14{rc*kmi6@Q2P_TL;ko+dll#*fk|RcO`LB2eA)n|F zmd#ZZC8=i4Kn-(Hq{Gc$imS{5&(5CP!6#eqqv3nl%)82~9u=qAtGFS6VZvDa~?DJ!DtZ#7Mc$}np#$zQxTPz^A$gY4LT?LFQY zQ(=9-SxES+_wh5IgRPwA*T}v6S?E~&LbP!RQHk3%)m8-(^ST<65l*IHw92F~@H*tR zrzGLMBkQ2BMT1~%{hB%i1Rzd4YaX5(-VsFy37EtZlxCXx8lf2(g7@#-QC{2@XwTA1 zy#}LQfbYxVdg?gA%mat(49(wt>qi(6WooHav)SfMy+0C5&CDDxL^5-Ht*@^SLP7O- z?azht4+`h|ciiyLnsp6g2FSk*)X1;hTvzU|kC*$EhVN&je#bBZq6h_Is2xJ(v~6YL ziM(9Ti_lf~g`|H)V+f!-uIoDBpX5mG8YGSBXaYWtASsvIMh z7hLyNb5(1;kApjcg%1Xo1<&{U&oPD?)dDtFg;NsA=06z%gyr-$=!bk5JlPT~@xA+F z+Hc%A5m4XUyXJda&?LzJdFzcMRwDIn``4;*`T~eJqK1NTn7A&g@pvkcZY<6+F4Q z>RG{HT?%H?9Y2>j+c7c#-t?k^C<}GKZyD0#0%^Xk+q<_9`#Ni3C83%;O6#XVnwICd!=K2r$0n>|X>G;@YX zp%2#-7S`LYyaFR?m6j8pA|vC_CcvVLC;XJnEPQ#g+O7Md_vjAj{fM0B-QIEt(@f*s z?EU3vm2oA2w?k%qnD;%$mdjOgxP4%)Pa4*16ajbi-9Fbl40Aarq~d(IGmtIkcHfW9 z!rAhox)=DNsQEmhU#U;vTJiqUv(B0syUF0aeh=5fAt)1gB~CYd!BWVUiHSapuJ?dq zC8HQ*_6kl=N`}7-nNLh>#gDxJR*rh=Q~Ty zxvDhTZ`=~N36`IsV|Lmi^_N;Ut6eWLP#HKqLYN=1M^n^@$xi&k74;Y%X-#q(%pzaxDK!GU9xf#N`f zrLVwOMy=2bYkK#O_a9QSZ*RJlzHZX+4ixhS#I2fzvA|0HCyw~0sb>~C8a-{63)ran zd#Eh&$4_7?3G^3fyga;k{&RI}rXHH5aGqblZ zmdSk~zXW@jpa^zez2h@vLB5{?&zY0QCkv#qZzgr!w!KD68+ZaVdB_$s%5Be=^-zjxh zdzN*zsY~@puh#e`-8k2E%k9~Id8*`cV?ki0Yku64#|c%Q(1yZ%&69T=FOLr=B?MS#Sxb zkBeZ?&U<_f9~e}Euc+CA`QXD9^Gh^E<1%?hOP(tSiaKNj z&cXvnV8lny0(Y_4ABiSY5hEzUA5N^gdh(q~3v%IGLk5QAJ%2|Ga?W`d|1O4%;Q2nHIyxPW7 zls`dAQG`_=S+$rUWL~(|5!L&s$DlC`Q#)h3bFBif#kREv%bLj5u4#>oJaTP(b3Y_H z3+4{s^Sv0PPGupZ5s|#E;Yh+`g#D>hxJhha2scL2xsTt7NetVw?j5 z6Mk8E7q$k>$IzP(z@ztmbsW_j3(0gU#&zxpz0oF_56DQ7EGrHToVq-4fWxo!cjJ6A z6%fsL=gnCd#lXzAV!NfIGhNxO9N&$f&ufBXjD_?OT>hq zVj4CWVgyq^uNCtIhZ-b#QUTEWnv|66_?|CYXU&Lq29MIr{??D!qvZd(0VHT_eHYY! zHU2c;o!kO+UR_=MVx=aKO?W)`0DZA-Z-JJYoD2#jPlEv$pMj@1`utGi7oC(auPFH5 zxh*4 zxqtrBzT|k4i?;KaSmc6s><3^S11h=i%QiHjU{8mIx|jMA#N~tz)7XTg?%fq7No7B> z(U@tD2d9PhLKoutORz$w4VwU+_IW zjQ$Ls#*cF5ASPJ0Rvw3tIR}J#Da5e;Il?bk#ky@r`KkN&W5}6*=CZXou1^2D+c>0T znX7%Ax8SRlyktxI{NYyW@&ErRu8_m5SP&Yrh)HxSR@85?G&|Wry-rUQ&TR!dAzcGwewBnk2qe@njaf z)%z(%nu@e0LdP8;qm)tZq(1ku0Z*{;hhx2or5Y`jnd)mY13MvwHU>`+59{UepOq#- z3finOJwhxAH%yQVZCE}&H$uRC>?*#`BJgHdRK>s zrqw~H&0Ol5|1fJBCjN)7!51roH_(HkY!KMY_QzS+>ribV=^FC*4F79ws?`)U(Md0Z$Uc$jL~;K??wL03&;XGhR;Q3+&(|- zP0Rs4z}g&7Eg__WRNz5%+WUM#Tg7$GcC)0)eXeQxEPAo^5 z^JmWZ;V$dwG;h2t7%vWeR;wxF$f)h_YBv#)zN$23HFO@l3akUOdBMNx&$@Cn6F3@8 z7EC-+RfWfZ8~UhXif~rHG{3n38j&s0DGDwRi_MqnaIi;P8DTB97v`e}Wb{~QG=+gR z0CEUV*IK7;UGiz>Mg^`{AlKh+PhT_U)|&_kGEcLq?MXrGdm^&>&*vSojJ!+n*+8x% zSN{w=!~|e1)kr1CYIDk^FJWvmE_24&8eKe-d}4c0>kq{Oz=`DR32-fKu%*tLyQFEG zEJP9rtc+w4VO$b|7+m6Ik{i(6J>X(C)Y$Y{Hgj;5@x}&?9`al1mF`JQqXHv8m*#)x z=rEmZ0A{ARt;WL{Hy&5Q_aNZ&x{+Pyk z6t;!b6>`xu#2=f1G$>_?#Ik*G9hYRj0dw|z8=T2s@TYKEkO3t!H|M}zO`?|jUCo%V} zD7K{+rd#Wz8pp0`PCL~b?bu8Mm&MgmJhVbmlHv5^q-MLn8qxl?dV4r0Yrb6e6ONco z2hg-}4HbmQ;!>5 zRU+L{4#c55T#LW=3kDVBQ5-vt=pp~v-OhjMvWUPnFY~{gn<|%q4DOT~ngHIMfGNJZ zY=YT{h(VFK8aiU8@y@WzNu&~O{)4dd+7r)U4^kKzbkFu6i2mOxGIBa`js+P6YtQ=y z=z@+-WxQGw#nA~rk1my{(8gZsUWGcW%STW2Z;dl*Lp@(yuO$BPP}g1+c>g+xy+JyS4nPb=wK zmIu4V?rx*}cx*cG#^Qe#P&fwlP5BE|8tr7_I>8ask-O8(fZ<^(9C9FuP zy&NqNvEqoqYnSMR(1U>ER=?W8X|b_kz>k1%gJ6nSSDBGu!ghU5x^FIn1Qf0jvYWY! z@7JL2j!;r;#_wpsCLI5xxYex_0G4tLcSw_}$rWeTGJOw0?3(AFR4Q%BlDL^WBEh0G zSgd5+nQn$@O=}e1OMHwz1#nDGkJo7iW;ur>UV-VTh|HD{6P`G$I^vstcE=$*Hf9n0 zHZ#NZG}8+0qjT2}KkZGY0G~yS(L%}LaE2P&fD*6u%BpI7Y}Pq73uBbG#D&7EG$kFR ziFu%NiX&sLvhtp@Js+2xH!T{7|HOnGAPE^AOQr`JQ1`RjDJ5fFdffyDULp}sWvMCI&FX&ml%qS zZuCWJI2>=v_8tCeY2NXmgynceTJANEUq@OM6IH*lA}bkU(Uqc+mO?*{ zqMWP3GQ{CxXh$!SCVe1QkYGgR5|$-I`2iaiw=?^Ny?gT>p{*br1WRZyF;uNq-jZas zNJZd~D=4ok#RM=t zc>^1)n*88?ChQO2Kq2-f5*^5;|A2q^C&@*$Z~#k1k66T7Ju9=Za&%ne$;m9;9T2ce zEMf+0pW+%aPX_=rP{oht6oy^#sNxK(hHQuiSU)MrJk_G+{iV6z`O!c_V}?3he0*y> zrx||uHYE6SJ^VXU?SJnx11{VAS9uhD2P>`y7 znPFZJN`nt@h)bQ>IuP?cuN=iwKY>5GgD-JJy#3_v{49&P1%sjP)hF>NKsh>M;b4tGj@^*c! z@WHYP)=*9e%=v#)IL5Ke3-c7qNNF)?tH$ZX2{HLwD?-MW3m)wH7cE@v@E%VDr9CiQ z@r+O?<7fZUdkOQykNAG1BQ_5T^A}-Wl*tW>%q+<2RxYRW4E?t`)$!1EW3CTWMFo*I zWT$9Ws-W|JANkL(^8a9X_mRSZr5{B17UX7JVvE;D-AQ{A8(<~H-{NB++?3HtXhOc2xUbdI9{uM z2_@$eF-E!272H={fG-;ub&Mh|6&e}qnnO(ulTAsFMQ1p;Zfj~bVD-J4?i7Dl>OsGK`33WX2Q2&ifbOCoXLD}&6ADXtE3Wsmt1dR80!yVT z@Y*s|M6GXdUs-hCs3(#Fmkc!ASV7D*c{bkId?exRXmuC^ zE9sgLqq4=yz#uQQ7y$ zese26k6`8mkf@#UXyMj8aJo*ejxx!m9Qn`j3 zWBm22r>h^=PYB$#ENh3B7ux!0mcWxOE&}%IDF#?IRznU}OXUk@!8N7{16Ho{Dd{N#-s!pfS>iLoNY#;NT7WcFjFT`N|M@oo;d z_kmYfqBjuPQMDx2YZ1|%$s7^9P&^bB&Z(B%ttc-0fPkeIaz05w@d9`*aVL+s_w(K8 z8@ZzeAD`r&)<}QKLr{-oR1k*zGZ@|+4wL9M0{p@vEy(Zyv$v%$5iDpx0g3JVNjUst znLLSzxe;UcSj`oE+Vbw%@_C&tQ3lC&#ir0PiU>YN@Xy$Fk3xz)y@^`1oHH3&Q}4=E zh;Iw&J~$^cS{Wg&i>jf2%ssQW`GAOv9E=MQY_39}_O2nP!C)pbpJK&yn6%6GcgVo( zA_DIa!Q#Kq2Cv^|NnpPLf}4pJ-zmtFCKz0@MVn!>Td?x5qJsrNbM9Fj;&veGe&+v^ zWmv+PI(b!jPAVsn_!_h};sweQ)kIL}KfFVWNOMb|(0`xiCy0p^nS{FEOXn)x=E`%i z&ZS`BSdBy5>gXs%_1d)sh`X)bhu%(Ht4sr;r>Q2tP7{E0rCP!(tp-+hlC&%G?!di9 z+e5ao7%mP^)~~-JbCH*k#{GkA{=!z-HQ%xs!OqhRznX`bvxp1V+E!vgO>DY@|6GfQ z-d&j{<8RC+r3qJY##YRPhQH7gt zRr#8-3^?9@M@>Rdw{cTAyu{L5@fBKi@^z&udEZJPN8(9X;nX{xV#pyS#UDv4E)AAR zf$ML|DQ1kO+cy==`Z26RmR!IH|F@eziH>MOg**x~krs4TA2aIL<79`M)KC62`{=EHznsbo|h=XJP(9OS_-JsL1$-_ zcV#wza6#S7!KwKh!KIGh8KJ+o(NefU%SMQdg$w4nt?QbG@X2Ama<{FV@XwlxcvEuy zDl5(RCOH##@9A{_d&;+P4U=+w61 z+Z^>ji>f7Y4_Ai|x3IoMu@fA~Ys{&rlFZ0`C&4uAWipgSXxz={jw;|5xO(3=Gu28k z#>BXIgZDl5Z2wal?>1$>PmmI1#GfHVp}Y7|xf(=JSy>SQV0~?5z)7#&I4(B`+d|=V zt#n{?mY&u-u)Kb~-nS0jqaZYayOcpf0Bt*PUz%l(FpKzf9}&1gZ@X!6#kl6e3f@_K$cCcjjV#>mS_~ZE%1Q{I;}v|1hu#J*}nJaw-Uc4;+{Gh>DGM-qGRm4KwxEPvP91~qlsM#DI46BA(gLX_fUAaqTksPL%R1#>j zG;~LCH2TpNnqf4tF+DF1+}+!CO%cGXGgQp^J;wdRw9!Vq^R0cBK)YjzsVCiobgyxp zo7xXeRW}GAdF|N|Qmi~vfWF1MY+pQRSD$kFHtVe!utjM%t7`B3h(kxKtkt}TQXKSx z2Fs2fp6;U&j_)m}FOsAb!_Ss)6#Qgm$!x({Zpg$-N&?^V1dw`j`h9oNP}HAAd;6B> za^^<1gwzynDrxK?jYS*6Uc7Ab1Ar5Pi8KuGLLSWZ=LVWPRei_a7e_=}(O)0adKZUF z#`125tuMtPIEPWA_|VVU0~&05chpjABptCCRAtlOtCp5)*kHl5=DjcJ%>*H_bk?2hZoN4@{opo1E=M_|>uNMA4rrt3+ z(yr^mjcwbuZQHgwwr$(CZL?$BR>$rn9Ve%r_d92d^S^%7sM`11_gZVtYc@M|yq7?W zsT6{H#4rjx;2&u{#$4A%UEpf-+0(JgY=>X#$MmiF8LZbt5Z(6s4}k>J(?(sCZSEMf zWvWJ#(~kLrv7;y9R~gg~??zb*PM%ZZ&=!#X&z~g>XF`kW(B;s(7Sgg!FI@o+ z-!-sCQ*z-Tc5@b4;xSs;({*!mDTXJ5Z}sX#nzCX#p9Buf@AX$tR zH-NkaF4R<&_m&QtYLzBYTsVKQI@9pbW~_0{uCKDWFi80Q0H^7C3#dSY*RUxE(xP{c zMN&vv2qA*_2!nf?h5oqJegyGevcl4MT#nzNz`bkAl9ievP3gG-o~?NX!mW1oFO7hq ztO)+4_^{_u4JN905weXgy~)Qif7EMl8R)WfxRR&wq1}o){-1vl?qabWI!e`?M1IJZ zgE7;w`e8~LgAaF(B@w}B@7a^5W(EzDU_8YTzv2kXS$7|kh@}?bt3)H3N(!YXA3Xvx zhT`o2-drcm>aow?yp`uv=jThE8qujUC_c>4apo?>ZZdFi7p;dpCBmfThj+xHrO1PirPfOgBi@!y0r!IWu zN#WurE&^828q=7y;pK$fF*P5^5!5jAA6z76Q);ZGD(84e7J#M(Qc9tCe9;x|UtA9o zo7CQ#6w~zY&={^5^%A$X`P%vLb-=ss(skkCFA}LXDf2nvUu;WK3BO9S5Lx z0^kVC_x{lgI%4&#P6ya`Gi~wliS8!UnPBE_&Ep~a)ON?ODM!#|28SQ42g#PW98Ka6 z2KlTL(SX*7CP#FS4Q^ zp`?H4sNg${_SPrqIgWzPJWWU{Imd7)xyjuB(VleE^#GxwdEeSJwQ__+6tCj?0P82O z(VR7HIm5WceT+AJOf7@W0W{;=lo6H>@h^N6W(<^z5~EoP-LX+k7)k&of$|9V{wr!V zH#A>PoOpHH)B!H9AkfEW5a`FSm0p})4Zx$zS-Ur1m7fn`nw9GF+M4HI38rYE?`Rog zN%s2xL1Y010w9eGKbhe9^MEEN;x+?e(MgG%&^Pv_UKUZDNd?osv?$lI-n_UOy`MZc z_-;N{>7NW@Aohh&0#gr8x|9V?wTZwN9Wr+63eW=p4FcTVsrDMmt3w|jI9(RA_8dJr zos^H*bF&W%NvvV%rVXWyrnn{Oh~^HN4_(liqBm43qN3z!OO|7`+vd3~1JJJcRve@Y|3Tl;_SV+}iai$MnG^C==(5xYViwCOma^NiCQBIN zLYv(fMG%8bM6yvT>)lmSleo;p1>1#M1~Q#`)P zdQ}=jp~JAR@1LFuN1!oWH5YlUjsIhrGg;P)JTXhge9V34*X)6Za^C>>k+n(JPFK=e-RxBpGmPww2WV66F! zsZ!+ts7rJtp(xb7U`m^H+uD@l%_~oYFjj@hd{b3}a8jdUCVOI`)i@~y1Y)IWiH;BZ zSd?nXAkunPH`j}(nyHmt8SU1Da54Jvpktb}^p16p$HvW$Wz#$%=AC zmFwyo8bAy0HPDTZgn*Q6KKES8qS1*}x8f|scyPLa9@;YQQaCxSRlT{aH?-2u6yI_S z;Xwbs^#OewfLJphXIamdstTdgir9pVa)e4A7{?4h*6QjflJENYs$u+kmq52vH01`^ z>o+Ee)44KIK8ckecM{U@SABT$Si=((C>^0Xo#|LM1f|m)G$66xvqT1F{D1g z4KRQdVz5K=?pR(^pU$5$C#cV!-=t3Y4V&`|TcIG#B?TAiBYUybEP?K*{I`b^0F(Vc zYAy%X zTPcG=awPd5D{=934Y~`1iTqwq6?t8-F%SFS3^DDyUnS-ywJ6QUrzR3>d)gm94SF;` z^*jVqgLS0Np{$Mm7Kk=~UR!n!1~c=C7b=zoZCMu>PY%`RQeZg2iyUZ`D< zLpj>7pU@IA4|GPEqg`G}BQYslJTitz0-p;Dvgrp>j<#V;+wutM%#PJ{|?X~>xlekgpn zMV=G@XGH2*_r|&rnBitCGkddV_97HCs!9f(8LNf}6da6AUH<5)5HWywuwz8;L$hZV z_6SZu@Qg9lzB(pSncYNVZcc`wa@dh%&CF{3>Gb*%H@>+t$ylezBE26&`3t3erX>#I zIaP#V7hpj3c6SUP6?bn2S7tMHL~YoUK0z9kx;B9f*R{0`d7wP%ALH=;=N^U+lO(>i zWkGJPRGAuC;vy_kAxUy&!Z}b0yLEW84rvd@IJM(w2G)v(-|On4G%Z5Ii3k znU%6~lr^L4NL%I(nX_vu)ux3dXpJz_h4VQp@%zvr9y%Fbp(E1^<@SP8A|wDvABEl5 znj~$u8E+`u_2$Yx%)$53L+@pM9S(D!1AlunBkA+A;#tt~CXz=tL7*710xd7xBIh`d{;b{K9u$57M;U0`lVrLEfgTU?;tzr zMh5sNwZx!MjomvhyPk@%^_~?&@*$M^2arT^!xG0BbT z`6z7f+6KHM`^<4~t+$Ums%p?l1m|d5SCT^`pV=XoJ^iA9+acQbVHmb#&>TGPiM)m( zSepAIr1!%uTU;&OS0-qYYHl(u$My7fd*zpvp>&N;!xn5sSI7nk59W-iCfoj`dOJ!-S1XU}CE)cX~Xq&Al%70I?<8 zgXwjT&XNy^cU zrA+;17}Cq>Ne+Km9`os6MfCqHjgk2=0`BxG}1_aL3?@58E(1Z6uk#H!(3&7S1 z?XQ0MoIyhDN+M!6B&^yiGK%~Meg>F)9Ilh(JOWlI8_zumE)Zx)lIxnnrE1dgB!3Mz zRpz-(=m!w@IulouB&INoa352&G6<^A$&_cmB;h_G)#^pq)n{0>yK;2J3h|GUyyn|G zw$rvQ*3S2ZK8u{Vbr=E04=&S>|IzdT*+GJ40@Ic2`y|?}C8SWWsGF`>(E5zSgAB3| zkXLZt$=kalRsju?<2d~5pT$d-C|L8Of_ds0`Z0iXgqlr4Wz}db@e{HXqXKwpaI_1i z|Kq_Pf4D3KvXy775vYj&M5-{xo27gRomaBEr$E$rzJzRu`2q}~j~N5=0}WJ?b^Dv7 zgzs%OfCuZuCqbQQ?ONoVm~C}RwupKMSD;`l-PQiuGtugFH_k~l}5J|h@YTzL6=8eMKVP~*~bpY^|d2011d;dPQS4IdC zW<1zCL^uM?K#vWa(cf6L->lBqC}riJ^x}0C;jCU6V9jR}>T3AUw_r#^N|>^Q5r86R+ZZy_0Cr&ujv(S_HC{k%lnrGU6UEc*d}~ z0yC{TeUT2Zh;~jatZ%09gd>*$Mbx@G4y5}tbkHy{gjtu$ZjL7#r7irQz4R6+fK|qs z073k)uTR*QIK*@<#qu|RW+gp{hKDuSr7X@sxoR?`#s%pj^L$OQQho+1a!^x zf#SVPhc}$$g?HZ59k7pL)j3afv+cNXv!r8Z`}K@K$EM#50IF3*cP`ZHIOhsKM5jI7 z_|L_dV---l*?XGf0)}U`t^Gq_I6}XJ;2WF)j={!FNo5@q3q?EVDhyQZvX-hR%H*;R zqQK@Iw)~!AxaSLrT040;^g6vXwTRaF@vhe~%Rv9LFo|U4`=wog#j^7JwMmJ?ilau6 zhj9-11;8kN`0khR|2!k`R&mivl$UJ1BU&tO^q%}Y_wjal&@W=c>!T?H$k?1u%6=tg zCxjb44BKp;+FPi=>5DCsdlvZ{$=Hzh7Y= z7suoQjP>r;u~)x$H>k6iP@5WXVxU+Dx5NxO)5*H2Q0>Q5W)&nr6K$2>3T7#tohPMh zxgO!v)Z>S?+d&kIQUYP zR5K03W# zpgDa-c22^tT!I+|xH`}0$4<0;1P3YmqXYwRaBJcrm)?|cW%HLpQ}4|+x#deqazDJh z{*9AS%V)}(w|MS@D0n$gYexC~2iW!*HevWW^Uuc>#64VLYFh_r4WTY6Y+d>+y`9;V zvaJ*?R?m+utsIjJy`ZDTSX7oLXA~&b*Z_jRQS7LsQWv=M;LFk|w)Qef!(+tDm9`hE zA2_lQE~UR(+IMktUE8Ft$bhh-0+E>j`~r98F--@yerw{8Zx)LvVcshaLEJyufVePL z*@PHaU%O3eiL!2gNHX(5R!tIXPM2(xV$&%vGR9t9fTd`BeMh9_TVQ?#^MEYl;yTXX zUP}f&n_Ps9CBcUu#od+P7rQ*Kr^eMVXh9y}CdT+QV#9+4# z^l8AHFYNM09E_J)6MS`!Krv0QAbtK?i)e7@x;=CLXsxOAEPevO zG*T2MZL<$qEz{VS&yTxDB>2Z9d~4Dzh+M9tn;QMOHG<6NS%kyt*LfGJmF2yJkJMNK zchXZz09M(#tE?YSv#OFb?mdp1paWpbN$3A6N>iB_Oer@@%b zp7mc2+rSG7M_K-6o&&P?HOor#@iBfh`yo_me8LhJ(3jACcFt4VsO5W~c&{8AX*FZMvpI=zAVNi`NL`dBI5J*y_?MW8E(y zJ3m8y0NTN>KJUMr7npTfz@~7mP=={#QvD~jC)50ZbYhU;x(85g0f9Ey@FU~1eHiS0 zOz-_v1Dfk``oK(<7$Qd#GGZYDEX~Ij`C^66_~oBg001hgnyaQ4uqIO&U+9NS12CgUud73ro5saUh72`&$I!uia}&clFlU3Bz%jg(?8AU^aDhs=s zdO!41wb>rFtHW#qQ-9i36Mt3=DR|)iV)CDtjq409lI$Pg9tKaiHPtnvyqIjxK>k7l z3O3Gb*!v;i<+q!eU*FKG0Df4w#C~rcHP>Il%7cWn{*DEP{Wvi+jv$W>GUgu%( zygOk<;Z;DHr2%{taHNNUVF6~AuGhgfTUVU9J%ABm)~h@LNh;HoIQRWZpcvO_eJg!z zU9~*W1J+%YR-<7WYkp7XscqT^2Fftd&F{ZFqzuqL42qjSy04cdJ)R;QEDB&!A}l&s z&Ve9Mq?RevW>E-0B2fA3r;Z-4BrFdP3$HRf2(_jy1F0%KAzr_@4W<4&p#Z@OkfBhF zX7vFRT$%5)QXj$Lrijj$yXPj{PYc`*x|ZK+ZstN1BhnBVnMm7T3001D{>~89=#CbW z5)|qjrDp3y!~(fOdqHRxLU8z$g$L6znfZz;_K4+Ki4wzzhLlikdpd1$rwAu1-95jV z`FH4Eh|3sYqW^y`QO;_%a1J1158N@5{vn8_FPp)shlV;zs!5{3A(qx-;EWS$*RrwN z`A(>}r=j>`$A^>H`b;qP<;F+a=W;s|>&zr59uQ_we`?xD-elFb6#H*S0ZR3O zp((QCY)RT?^0LZ?-Pk%!68DKOf-ka=_S(urhtTl3n)(u*4{IhddR+gAY6hyLTOCZK=tpA?hfNiEs^&vl-cr`pNxx8OW? zi&a zgaXK<9E&!Ek9qQp^W5Xdu^dGT_(-?f`)NM|15wK<-Tb5e?VVpu&OPU~>3$K0#v0#r z-?~18$l>QNn@!by<5!qg4QJuMp8jhO^yQePj~#b;!B=~NMoa9~-hgD*dn8VV{RFWK zLhJtTP-4;N;X2Wp`mEviYV-cb*Ycoo(@dM?)h&E!E<4wQ`&%Fv)z`tplzQOttyO7< ze=ql~++FPc>}Ojzv6;ddAuv#JNgzW_(f>^*emEC8n7#f9Ps~&53Xsh017@PpXqqJ% zcC08ang2i+gh}|dycRx*K2k{(w!ZZhrg*b-8{R22w@@JM4SvM&22JrLt66Z;irsA8 z+F5s#Sd1nf8YAb~$Z&Jqg9w7l`6bFYefwY7el2fo%l1~QP|J1}U8w+>bJPpT)(_h@ z3sr;Ky$D8?L^useBcW0NZaO)C{NCKPe`4{teKCP9gx%|tumRuP`)?Xm{?JMwPJaGy@%$HTQ)_@A4xz>mB`?0t z$4Ozp%aU_+i(T#OEStMifAi1H7wuGx$8$}5XajB%ZwNRh-Pr103`R~6!M3P~2nA~H z)yBo`h$u}y1flGAe;TO#9`JCHz`z)*=8TDgIn+aNPW&FkdDs=9Urarb<#z_s-u z+U5QALew@pVz&>2qBpQR)2~UDe{joD2oUMXc()ZC*4X~7w;Q7qGdz5P-`Nx_a6enS z_iQ(Xl_kZbd5@7%G@mX#Y~YV}>PMWzQJc}w)B%Ul8JmdMPyH@B6&CKT8I5T;s9hW49czk2pW~HTcrgJTVQj)?x)}N$40M8k^ktGn8@j}TwhIT4hp-9Zl9Fw*me&9k- zdlUXy>DTU&SxDwSanSUB+tBoa9b;uYxp;dDJZ3s2tEs%0I~`Yd#@a`er@n56hy@bY zhP47iR9wEyiN{kh5*}ST%n|mrD&gkoR%ezX`D-rL3(T5Bc|Tv$MVDn6c1fD+iUHs; zBEk8*TZe%9<7Tu95>Bn1d(%=kpfiCbH;b3R@e}V)lf;sG^w9MHehs_0?h{mkBzs6V zEPJ$1z2S>NUL-IqiEt;kmmyUNdyDr^hoP0+!~^Zv36O2MxUU@aeKpX%IX<7iKgXfT z3$%=9)mw&J3^Gf`I-A5n7FcipPn^sWa02m~qa4OGS*&NOm_EEUR^^P8A3y73ww!UJPaBvPL52RA7QB!bHVh3-$$ZSxnbVM+rU5X2Lqbg zg^j(1-+$i~UU9WEoH#^x|t)`dcgCdE^ydN*EwdZFOGsSdfg5t+mwF#)A$=t~L{ zF{q}~057{~vAIqs?hL-}q`EnGpmJUnFMp>1H{bi0SOQN$ZbKu*COBS4+?znZ zlLSJz%HHkeBQA19mi?AE&qGNmRI^yom}xAn!OvEg!m9=Cgk3Uf7c$&Sp7<5w7VKdS zK{x!nj{pkh1u-O4!e_4Vx}mD*LMD0)-#F2LdE@%9!*C?jBbLn5y@_3RWB(^@Sa=yZ z5eORLg*YK?`3a*{_RWxBHs(g41x%v$bu5*{D)6u7LL)Aubvxk~JfiXK=(rT>24yY7 z)tOur+y;XHkgJ;PuFnUz*s}DmKdb_raRGE$F+F_|JEx=kuBM8 zbEvu`JYN>$+nLH|(T<-kH{x=PmPR)6u!yDgLrW)Om&Bjl(OuuDEBcHCyYDq&2TgAa zI#F`8C&>$Ww(f4sC54CQt5xwBh6^(j2V%;HuK|Kp0JAXHmXC>J@>P8uGnJNKl-RMt zN^R7zL4#ilc9IL>vvxHJpd1~9*(4AuQ2~-b!>gOjDn^u&nU%B(9h7<;>SS1?W$NtCd=tx4uIC%N5WRWap9Hhu8c!)MP*TS(gaIkAjIsX|Co0^WZ4nDp%yJUYw@-T zn{biy^TXyVU)pMK5nF{U;wV#J>UhO}O?%fMP^ZVY&NX1XCph~7Z<^C@!;IIts1gO> z>9xMm*E6N55X%Zdc6iZcZMyTp8{8sbU(!s^^Ws13-L!i1XszoG8IF)Yy%v~NR}N9| z2)mcWXsy&f_+ItMdi@L|A`yNvibvzBYDU`iyfn^k%9wAox#XzcIh6R|!kN~z`wtVd zGv}yl5=OifbR@6n1$llVetkoR$Th8W({C(QG|qZ~6vAC#@%`P!o{+4IBtS>b33oqI z?DBjYJ3NC352+vC9thTFEGE%ne*nqF{Kgw!^HI{M<9uB_1nx7YebbL4Yr7SyP7Wz@ z<*?A_X@tS7hqGzA@celjAY-?aFjEX-{QgfKS6~sVkQN}j&3}-{3)aS&LM{jZZ z?vt;a>=H#mfDf83h~zgY9NQ!^&2_r@GatGc6K6bR!6-`4mmfFE$wayCxLik>aoTQn zL{GEt<*WLqbBw8qW3KXN9Y4Aj-<-GbCt9^jMhUCWgB z_n>_yDQH0r_jZQM9JI;;6TvoDAX(G;II;x=c{?{{EgjxCDs#M2G0j7KQ=Vl;J54K^ z9Wb4E`)ob-r!)Sqb6iJ_I9`-&3-~bWc?SU#&G-;D&wgpzYExhZ3FXQ$#w&+RA{J!lZ`wE}ANh44 zUm&7F1(<|MS~uobi8zYhdy~P;-b_ltO@)gcuF3XCRac&)h$ewZ`!>eer=$_l#FZW_ zv05reV{_UwcZnP(`7!6x$WCO)bIsgDP7OTB%F@Gb1_E)66@>CX$2J}=u$Wo!3fu~o5Hf00n zHC_Vq&sYACm`@a3+{wPsafx{2x%i<)p<^%sL6t0A?doF=TPax}OmZ$-g(Nze#;<}p zZF1K}T8*dh5H%ENuGeA08+p*UdWt4l#0Ao|eK0%%j{ju`JJAs0M&aBUmqHQtHqgW2 z4ihUg01}hGIS6oHQJ9TCUT%0O^ZO9F;LRAsmdkE&@JlAIDcJa-d-x^BP4nc)3-+g1 zXyS#oyB~qfx<+^{tkMg}fTX2PStAKcsD?QDgN;5`+TWT3ioU61^6_p|M-Q-KOM><| zJvNqJcK3PRUTE86q4MWFd(o(c(?tpH(4;7Xg$}|YtZPa*rfMVpEKY(|qp%Jdn>;Iu ztRnc3t*c||lM0F|MNrMvwDP~V?m5jc-u`;h*(JE412W8mqw3`c9+ytW!@Jm)HIh&+ z+hmtkmTJk862e{T-p$tJs^VlA2k5pK0t%}S(`(v*0vPS7@i+>KKNwCOA1n$JYhItR ztivx;g`u14T%|RuoIc5LUuO)L{eE@CF+Mzs63#67Yii}~&p3m=sg&b#A5}9A0bDF0 zq-XogjjC7*eD5G$qiCYlb}+ean1u+5bolo?G3%WHIWHj?Ov%2#^>qOuSr{zmMmBNE zwimqNk}mNBxBs(KJdZf?y;sKR%+s1Grx`D>F6U3UoROO*NFR|b^PrePh82hXIUp`I zp(qq?Ui)ojO%D=KF@(1Mg zbT%>fgHV8r^mPVn23G?uGl2IfE=S6G3p9s77;R?c_@Q}#GpG2|_xe;}!4$r}og1P` zYhxMjz~`ked{;R(5r<(Nto+a1;bBzHgRNgdbUsLT9Y?SK?P&$22JV=-(FCab+x^u-lPP}LnqkRI*PN6Q%NVg6{=fjHe%k^HXHYE`E(TM) z^ex;1NaPMSona%ArtV$iZGP^1&V_syrCoI(7M=P$;>eO-i&(TFND^52?qav3qt*F1$(cK>L;&qq)eM{ zB-t1u>S&<^EChmI_M$^gbr5~^xzY55%x&iQG7+di87({_i`LeazY;vyQETNR+i@&6 zgf*A6T9u&GElXn*zRkNLI$Bx2)!hVj^>4z9qbo~Aa6~gX8|W-fxScAaC#4QbLtp$u z4BEnT5Ob&K%Pq3V{~03#0}9<(pb3=|P{mvG$(7cDf<=B?+>)d72B8qm4uCtlj32?| zK}c39TEm_3Bn=CJQz{NnglGyrL1=Q;Gl!Qxj*%#IV=F(w=c8U`NG7~y&ufZnK2PIK ze%VYI_gk>(*L8E|)6XG*AqZU3mvWH?WjYq}<&vx|PE{hTEf!>^F#YinPewiy?*1{5 zmnh8lY>BE(1zTwenE$)QsijYgU63>6qKQ9#B)NBR3=t+vxXl*mj#~64jsJH_iL7-} zO=k<0w1raa>N5iU@u~c4=3;kR^i*+!Zv3yz`zn`i_oO;+qnMX7pU0j!*w1EcTMM#s z2Y5ICFa-hIousuePe^dzYPjozXw3XU^2rrxG2*;FKc$IO1xXxx<8z|&wQ^meri6Wd zo?zKGL=RwX8cHqEBu@3C{IK!>^7o!+^5%2A!@RJPu1!aTN_vZ7b>C5A+Ui-xV?lvZL0+0uEoD$Q@ z5KBU7p-VGx)MJL*1_#PctaS&F4^1wtZfO4Tx9k_;Y^_bh<%>{jL1s z@5b8;`+IJtr7pYQWEl1eXQp zjf|4RX7;%xb1G3?n0KMd~Ti6e$8bP=wja4-{F|#<6vyni-$B$vi;2eMc zeLrfH(6UIyQL1D;u@l>@6}hn&%bqJGOU1oO*LwGHHiXBSdt2 znH_IzkJVDhxHlsE@8Hp7`Tl`>NPu8RlwiqDLTj0tAX%kM@?4BlE#6jy99Z9&1G;#P z{Y2L>wd5GZXtj`mmFV+z&wd&dsSZykTm9(2M-?+Pcw=twc{}8KUeeHH=0(I1D!Rif zBf|*2h&q@hsA1CF(7k-8_$!zJf`5FfqJP^nmYRM-cY64bwC~y4{{R?e43md|i!ihY z>ZbR(qNc0Jhm$f}rmN?4DG2@Ea{2d)G?{t)3ERI$yPaukst z>%-ahKHs|r{SjUD_WAsvYH%VC2uuedaaLAv?-ZX%Ud}Hzsj)NU{K=q&<4vaXC z8()li?)3|>q)xuu6qS=i4+SX<-L)UKraztY<`C3JaC3CdKM0K%MFU4<7VeDPb%l)P zCh*y~?XNnA09;FOJeie*LXT`EP@NY=>U4jfm^9c?k<9gUXwav$2%rJ=mfGeu$)xAwhX^vKTw9LONcZDC-M6b8%!CAWo;8kC>-b>3myFeJt?cas( zP%4r2N-%e8*yHXoEud%O9ZH_PcaP)?%DX`=M=XwQ?kTpnVvu@+WX`I`q{0i6Z^5OF z-~LZ;_=$33n^0gOM8uKM8R@a(%fpav414w46V;<0jlb3n2n3Yo3}*rcV+(|Y2D^XU zU=VsIzoc6{OI;{F9Pi!dP#6X}12YKT3?-gzDfL~AFp?3l6Xb8ev4>*AEw=_q_rJLJ z5KogfIt@PNNtJA|xP@iAxY zrg|o1Z8MDq!;11DNXxT{)5|b7fZx`W1?UegT%YA`D(CmD;7U>5KjNIb`aRzy+E-^z z5SD={B1K&}`Q+4()o^&eu3bHng(2T|d#IInGM|ya*XDviKb0kZK_apvJFqivZOJqv zedYdGKJ9kwK`gBaN*ydv)P58AFMfh;%azeRGZrr`k6K0vN1%*7w$)2ueDy`s+X&!I z3?mL0*41Q(A^M5%=(DBFgzlgsHfELoCig(xO;e|l9a4Su=O=7 zmB#M-sI#a(_JwF*@UvK@rDiDJuJ=VXL9MO`g!bP^tP5d-VAjZ}-YIgOaeKX3WsdC$ z7?NE#870*EqA3PdoIzwv)&hqCI)jsShLMl0h)VSaY+!jUL_Z+AW5?ZAV}cLGY)^bt zt}X2_;dxcmmPX0hYM`Cx9UT9fTEHWBq_i!~?g1ithiP=){rWC{uo;rg9Y3_3G1M~+ zN3Am&o6k86Rh)-ELnU>R4@;?Puq;7=Kcm^6#K1F|WcPW!`J#2koD#(x*rST3N`*Ut zT&Gw4g{nEdSy_$aq;|^*PZwk$Ev$pb+{KC@`%6Tbh#2?RoLeTPLFo6EJQ^*#6#iJW z&K9C=;qZ!7^JFko18uz#if%6c@B4o8u74!u=xj;`rhtV5%8!BNobY+?(~ zoEI1VWYe1Za3CTi!toyJfXvm2;j*Zw_bt}CS5ol!+6{BpS?>Ws3jGC zGO^>1taigaPDNq+jrWy&zaMg?f&x{@vb#01&q#HYaJ5}o$wyNu{y76z)hj4UqYgT5q3yb_b>Amjl!jr(F%;jBM zzK(jsL6hTeneX)gZsHWPR>!0azPQg+Ez{o|4REr~9NYeBcCAscn8i;VlBMK#Rb7!D zM|VU`r})X20wOSJaPlUL-b|{TI;cOqu>*eZ&X;0p z(LO|k5Mq{?MTUif@-38tsEGpUWF)jwd5ThL8d`xuk@O`w7D0oiIDUBjnOP_%j+MB! z@dPMnrtx5IgvH(P=eoGX1fcFm*)HsoZAY-x&0=<2f_=|gEwNh)Pz&ci=? zsmBeHog9T7tA(W)M034}&J-aH(0xvvOZq`eoiQU(n9gm_1noV%PIz?YWl0QhTmja; z6q9E=acgg;qC6`GXp83wxfR)NV;=>`W!Y$c2(06S7qUea?74hYkHtZt4=H>?(DQCW?08M!cnsp z@GP*3cLn@c8<)0(S%6ay)sOO;4W;HlLVG?WheZ5E1w0_En|>f!rmE8vWe+w+@{Ibk zx?|~|6(!Tg{0DR_w+JOf4tE&XkeaieXM{}>=P}@kDNMt#6J+@J0ZT6t++kliU;#z^ zVZ)#L&oE}52hJ00@7}2H^ICa%kb8OJwm2oG(#B+~lX*l(f9LcE7@;P^qu&j=aw_o7 zRQVuO8GFoT=4&Y#{(~dwLxq*(Kpeu?Qc8_Fa##cjTpXaG)0`ETpDDfwV;@<+6-!B; z%_~Wy0&`O(LwfGyt#Wuwl7y zAsRf0w^(a&Lzd&{c5i;=(zfu zH&PdKDo&*gDmRbP>{-{Bh}V$etvs>0nWBUqCKMZonFpO4^&9OH{6(R?r-D?O%0uD{ zAq0iV?i*jPx0u40FZ(^gSQGTxck#8yI6|42`%2&#>q$NJiWW{7?2Mw30#75~8BF=V z8ee$^uYoKQIIKKlbIUywQ&sG`1QL?X0+r41afW~cFUp}{2;;C9Yr7S;e`oP>dt;`> z7A+?nn)>Gylc}VT+T`0~T2P>6%pEl_ZfY#vZK- zb!3EqzF^f&tlwe3t;2UR3$P%b2)H8_i$T4l>$I^6A6Oq+&#Y}YcqQ`897gPo(ROqtb20@3939Iz@J zSZ`pdX7)w06I*h$VRqF*^lLx><5|+(9MOOe=aYMJHH}x3qv$$0vO$fQaX5cg*J{Aw zb0<2O2v5$DLNU`x0P8>ARYW^ zx`Vz3Gf+EmzZhApZS|lHNJCToOE%4rH>3M7KuoJ9%g&wqb8VNK>JfP&i%}fD8di#N zfUbzZDbUMn(!^jp<4nH^?fz%Xh=VVN?@P{>?f8Pw?4$2aJSMnV-%o1&;=jXVAZ$l+u86I;7};b4Vlq2~O>(otSdJl+!n*wcoqNWc1uFAKkeG+N?655jw>QZ3W>eJHQan^A6;lqh$=J0`{0`x3cIL~yJ(y#N z-XJ%39vP2<8261rdI80`uN!^wU-U$zoYdL9Q=pSR?%w1t({gI_b{r`xMU$Dt z`n`u_DlRE?dJhK!TH8RBCp3C~Cd4h5Q_2v_7$wAU>@MX1P$ely((H;hIHcHSJg z2TO0wLeu|p(hU{ia9US+uC#jxVz+MT{2lyr)kb*_+EImKp^A;qJzz&iST*q^-{bRE zG_Fg-(9**h$oW@BA6e%{^Yec{IX;_iaO^P+ouH}4#8!9QgRQ|1i`6(@3WYQJpC zmCfhc{|~v!;tL{p_ca73PQMQn;Uv+gex8i(nz@i50KcYQVD4P5cU#254m32@3%{pi zqwec4OqUq|GeSFlO9`t=O|tOQqBYE8ueg`xk!^RY&9dw- zKua0C)ViG+#jGuP9&gB2JoBoNmU`HGPl3068&?U1&d~YT=)!Ww-C4(yS2UDtLxM#px?wr$(CZQHiZj&0kvopfwFUtRa} ze*d73s#<%mIp!GW7(VA5_bI1KLfDuUtNFe2=7maCI}TXPDjIL2UCT}Wt6526XJ`p6 zz7`E0{k=V17O`HO>x9m%Ybqa&)JSncMmN@nO8Gkf63|kchI;mmew_!=6mcTBsCjT z)qd?u+Me!A%h3pY;vu8br8a2E9Dc+qCYN1sbPQ^w<4snVSB~E`6QaNvkxmh|S3=+E zF+Q;U=SaQ?>sfKRGOddN`}N+#)?PF@YgMvtooqCgKtl{IL^CW&UU=ywZ#qw8v_=u7 z{xK`(PX3A{VM(Ro$t7pcsVl|WUViuEO3x?kVgUMsi@~gvKWy@-WDpxzqNuybI%m;X z>$&6IN1uAf`p5;*y6nFTAt;bug(Ab501^8^o2jhv{s|#%Q(+iAZr=@1T=@|nSFVnX z(qgD&ehwI2U>RQL5kb32J-dMAZ==`~t&z(wB1rbGj+WlT(k*L>1?fy4U#<@WmLb@i zzX?o-SoO!b;Es1?RmDK62VTEW2*O#Y!t-MX&smmuz+DC|EgZ5F$vAo}*f1r@Ecxe% zRGiBXk}*-jNh6cNtDgSdp2ODN=&3g&kd1(POj&{6yy&uXIKn@vY@St#`Q8It$}tsM z(6O%;piK?){A=KzTKV~e(HU;@-hc4C^%QT7=_)}?hpQ9uWLF1 zlbz&^-M_&&v_2tS*qKzk0g1E$JmSJvF#57zF$@>P{=wGT)jSDSUX7J7C&O-76RZv` z1v&MI-oC=^?o|ByN0~)P9Ds%3fRbJiq#LN-WLqc|9VV=}`&}5KOMw_|FP<7bluX_z z$xF8+OhhqPr9)>!eVAF+OmqKI)Ny>54|Sb z{ECPrYmee?j&&XedX9)WeVsaCb#6DN$%;{tvhrp5Ft)dPv%wim?6wDOklhaclQ$+J z*;(`cv5|?{QR?kx*h`3huktM?q@@^Os7E z%u5qyG$m1Y%p*9Dxo0zGF%+gQZrXwFi-0Kxr(MX@+H38FB^dN2==*{q3aeDYabaMM z*xM!|J0%gCawVL5T>lnQ>S)|48+kgL4g=m>2gxkRsb#**FFt?=2(^>7Jg_&tyoBW@ zT#R<$%~#z=xxVnt%gfx~Yo2&)KMCxg`@w34q~UN)6QJ>&G^n-rs_kJc66m)N;+t3v zhCWsAvK0L%nf0!$0cP+unq&bO*f*Aq85Ga;8nGp8CfQCQ&uOk{Pt*g=FOfPf6YzQw7v5O z>&98EvZ4^4@8&-;p@cF}1e;~?q?8R!G7YoO*nc%_M8CugqTwysh_GGrVNy70QUKAB z>!4NpXE}Tkl@DCLt8&aT50g+y{t@;mvhU>SS?j}!l3m7;r7>zLbTjsf`U*7X=HyIy z*6Ds@(tpJEsV4?AEmcBK;$5}A!j4rTqX!db**qDbl@Tj4w9GnCc`&#E#bTOg;S_sF z54y}W;$q@rsEO{M`@bfHv6`7zLPj2*v+z`PxHj6#oN=qakpq{p>s|2**~%7Axr4VA zxG%9x7%12m4%UvL;cHuU{Hv>jfUDzEV1|H_YF{j4jF)Zi6qEDfnkj^%3yo0w!v|0! z8TtgbG6(u;D`7N-!r$SKNb$=q)*lvwg)xr0@ zDbNlwT}u4-yIKm4Ah=npY0*8S!06Czk1fk!XP96OFT9IveGK4T3yQ(cqI2_D;tucr z=mw9tJND>X9tsE!Ob{gWo77O%)s`8k-2F}#I1Xv2s2_CvaeBCX)O406h{>;W6gO2O zkUDGGNN4rcCKfpBv;*a=$&}oxX1#YTCCIAmy9kJh!!Ph1@uVjSXalbr+`Wj)p+PBnIx6`fM4e)kFv?SMWn`}|R z&Z=_4tvGZ~oPEdDR3ob8xtDU}>xtI6BjMI>M}jX0XgA~|GB^Qat1APv9pn2KKB;SB z+9!=iWz~Q-y_Pn^iF@3UY=Gy|IA?$=SKHRx99`+E97n!KN;^MeIF-$v@%opd;Pg-h zlGGq;(~Rd*4E&Q)#xb>kLt4=of^oC}PAkS_r5_>Dkzt9iKS}>ZMpAeDg&cd-(A5hf zSz7p7egp8y9M(t7CA*gpjFPxN# zZbhT1PPS9Y8-14NWk5ro_2~@m2%{W_ZYBZ^2l?SIVV~Q~CJq6940WChYBS-4FoAPQ z*#^v@iiXOv@@@njS_;L&;l$@p$_>l1iPM~3o=ojDuRhQF{2iSCvj!e84|VpM?jA3L z0`mk5WBtQrP37%M@@Vf=_kH`lWFXyM7~~ug7^ciEd&pyk`WN25*afgLQ)~@6fgVAm z->hqK`}2-c6PjR!TfpTTa(bb7rcmKjVX?;1^owyR<51jUeHufFD0uIP8{qAu-*Li7 z2=3u|Ig^Sk(^QpFog41CXBpCYX1jE%8ATP>pUi}hAdcD3ND6O9n@dra6de5?Gn<)S z(YUZB3xd-W|L;No$$KKO7768EQRk|%h`rSAyM6%}rNR_*O#+??l2G_g6S<`293^j5 zk%Zx~ps}Dm0_r+F3|)JJulV=|7V2W$bXd8I33DLM#^4aJ7wZ2g_{5-;m?&)@3~D$b z2;BQOYh69dV{L-<{2BU7|CShbb~SEf8ji1hM@L#2 z4)NUK;O@OW2LJYBuJz68l-bu(b39^#j2M#77f~!r9Hct~fs)JQ7honMWtLY)D`w5_ zaSKxj$?|1-FB7%Zw*B3QjcOb&Vh~t0P_kS^ZiA&aV+ntE9b|X!?}^FqUC$hL^@`S(hUi|Cu{NNwcCw4e zF|vqT?tf%!rrz?{V6o)-`VsbMrD^4zAq#oIm}}a>2SnFWOcYj^Jxi$m>98 z@&+dKkMBZztq3P?naz%%+=$Ou4tx~nvBNR9O2W*G96v%(j{oE=XIq=$%zY?U2vP@R zc`B<~qxj8x=@1BtqXWJYaz8)A=OCM6=!#l>^%;0EMp9+gOj}e$$883oHRRKa>8Ef!E>)bCEYP+uVDIT*K?W0 zsm%7-0U!~qoih_F_5K$^VWK#e4U*bXj36Xo@Idabf-83a%_PmUK=2ibfU55X5Df_k zCLyUmOkCC~!v&y>`CS1^S*UiWQfoc9eCWr59}&=^&M%T6hd zuEm~3%eV(6ttg>4KDpZ73)s{f^$vTQY-h&Nqnl;+BSK(2zP^W#+}#@Vj+ux`@G4Ib zwx75-iZ@SD&ywBN)NylnB_31=s<0H(9mc6iBe57$X!#dPMi(t72${^lSK6Y*?W-#& z$IX85sw)%R@;LgYpWvMorAao(rk&4z1&>N}Sb;3?h8^wv@ss*YkMo4~AaffBoE=H| zkU)8qr6KBjqcF->Ko7>hRw>BOZaga|2zLS{wt{@*c*^fJ?i%l7pe!Ao(Jm;A|D6^} z`m&CtRspj)0oheq=k>rq0%VNvap6^JYbR2A1yd%~a$Ls*=x9)Wp}80^nM``bAyQ6p z3wOMS;TQdD+t4-U+slyX`taP9BF8qIe#p>DU${~!KKFPR@jhm0)S2bWqOJANq!4br zK$Vjm8G|x#*DApkI~HL7w%?A2`fA=#1$bm=1q_;Pb@KsX%ID)pC366ybmobpTEd1F zz*Y#QBU#bxeEnN{#HIvQ-8lwu8`tt7u@wJT`tdz%**Xzi#cu5^oE$94bWnbOsyv2t z*#JdAk|pTz$-R1ictzgqFbIZGq|GVKQZ(E!*B0^P%(;a5deV zk2+;IFK}o^b|N75{3EY)QT%7OAAe@5Xi5Qtf%u$>BI{b57mpp|tp>=g*TWy88m26rKpx9=EZ}AyDqxm^FflTFK%154?B>N{SGc) z?oP6CpoLL7_X`{&D~(9CXG-cd5M7Ar-OHW^I~y_6PJ8SJU9MySO;7JbTKcfl2@B$9 zDTI<2Os;>dScySWj`?(0nT2^N6Oc#=8tr)OKZq0Je8PF>wxb)B>_vuL4K(z>MY4N| zy=wKt%LZj{I-Ll?NN?TEZNGKx==5dFu%aXirjsSL_~UKi5*E*leZK~i8^`h?Ihg9X zBIDLC{Qeiyj54SizdDvR-9UEe;BFd5Ct6f=pUD}nhQAT5O9H&@>^mATMNUB(j0o9} zY*2p*N}^B*1dEqoOR!mcbO$}}4>szjcmW5EXG~MMrz_t3uWi|RpIWo%+{-DBYR6#+3a-KACTmFU! z^B7FQ!#{LNTqmYAC^5qqDKSOMbfp);AyzsQzIa|Bk{)`^M7&}-olb$&QQV#jrdbkl z62ca#7wxW5Q!ATiDvu|jZs{2Z?M71Da`)YF;6-f!4O5XZKm^e9!3F z^m16Fwolj;wG0f~34t|(&zfaY>HHd&z@B2bg`E&OmTktQiz$=~B4n7(_v)v=GsQ=R zERQ~OvMU`_UnY;*D+j`9OWL*S&lOvMC#Q&-*)um=VBXRenHV5qRaCFPO&vJo_f z^2~q~Vf;Dy@67amGpu6!XASA6cl-33en7R`BgC4addz2!!K%j_nWLLc^6%yfyyYF% zw#xQ{iuE?lPNJNm9>bCS4&M2Ou9v@E!7m{>-WV9eogAwT4Nbq1^(Ux;lx&4shZMSf zh)}yj683%oLLZt5+kMaKjKuQpuu{%M)3Fb?-}Fs+d3&VD zW6vCvr_?%lYz7sx;px{bkK%HV3qH6m=rs)t+2J;>{``-)gBDaNIIp>+IDpMozIJyOv3BTMut1g~Z&*Qsy0omu2qkj<0TS=n``LF? zdB_TL{S_|}RiIB)Q5OG~+M*3w?$9_l!q4B(iAU0q_MyX#NQlOGl63}tD>gO)4QUXm zkdtggH3{1?dd$*O+{DcX-S7QQ!u$S6YOWh3tURZF#dQN1Nv5ofQP^%#fcJFj&vurm zojeJtKB0!f8KmGJ64a#K$!~e^RdBy(;eDTvMfFXs^kl`+g;-iZe9<`816`v)GqE@? z!w~=fyz^1^F;88L&ns?s36mq8v#O3am>hshk$xtmA=I;@-sP_Nd}f3a%ekx1R17xR zAvw9}^73ebC-!{PpBvs!C*LKfc)N7b`lWWr8$LT0V%?9e@S=)prt_7DM-mZ~lHt16 zf|ymK>px0X`I4qiM0_MXGtw?n*w28=gbOpv%s?{NE;x$sg6prtS$q+PWu?olPdtZ) z99jz!Ee2BvXP><{^wUp*JC7N)mm-SlCaUdxse6zxbApVWcv%ZmBsv{GLbQL_b5DGT zCU{&2;n$@;d4J|4mN$NfDJ^}ov~9}^Vkz$bRF!zr4;k&LrwM(^9oEgXD2!)}Q5n5? z8?8NsJ7I|$zf-(29}PG^f9J+Y(={ak@0nsAj%BFnYO4tm^8qu|{{dFMJF<6}O= zh*o{O@2EHDbZlVBhL@ApR0d>U(-J=neskHhZFru=jPHe&v}RCJ0v=4!t+7x+tVSW=(aSNog1;u4ph3OAOS=NWpL0k1~Ut!}|wvC&b82=&AQ{QxQLv>5fU?#xl zDui{PROg3>_z^(aSu(vRyYlv}<{ca_!6g?Dmgld>h|1}E{XE5XEY@TRoQeHv zSW$ZVz@hxPvf=#%IV7k3imDU6EhqByFU~Gs*KuIztJq(?l};NnpT;t95M%#Np5T+7 zT$wbWJU%gD3OGyqbXnj03zdA@I0|IKBma^({;JD@9Qg9oXNZx*&e;KTZ=(DFIpk zjUVdLmgULJX$S>Kk>BgGUWJhuPwc)_Elw4hGO=@~#JOwITv?n_cc6-xX*qql;B*;H zj+%Qk!KLU)h9xpIeUw3;%kN^&P_<`HZJlQgzVEWhjBId-u7hAgst-OYRT`xr$ zR~E^K77$-m2$8M0b<{e*Hh%{*ztaHeY0S(PDxg(BNij`a$Dkg#fUj4IE(9~0c36WM zmx=fX;pY*CA0Zj}zxZj!u@9gfMFUGyxMo~RhdctHbfpex$d_VV9Fx)Iuh=knOU7#b z78DUlr0mMJ-4G0+77;1v;*E0CJ3DH}e1OFJ#AtTG*DQmmyd+&E7LSZ0Lb&|b6KwWc z)*9aGl$tMO%nH5tQ_az*?1kmlNjoeGQ9b0uC8vK?g8L&6@PMz>j zpHy#I-h)3MYvI(@`=+|w=7JhAW%%Ig74do7uxE!Cm-nxiq&X}faZGPji7s6rF*@xZ zz?X@u*FmdSvoon`hFxZbp7{j1^n^N}2(uL@TCPC!{`E?o_0NEzZ3BAGN-$zJdW=mJ z*#Fk7%z;&vQ&+U*Ki;6`lY2HnkSWm|;%V{zAT4+Cxh*8*JFnXZ)>Q|tz{fJ_Fs2ReyE@qzo|zUa z;Ive}FwK?Bj(nUg+mk*KR^&J1hN99S3^_7WQcG=sEh4HTim8l|BcQVqJYrF14H#E? zLXN210_GJ^Kt4bX`pcq(qa|3>3Q?}zIveA{$XXXu(wp?zz28}klJ-O(wpBF=x56a# zHi;@zKA3?TLy$zQNncb5nbO^$KWFw%=MJ1HS@PQeDqpJKlq0oMC@rDPWuM-Qz5sb( zh-<@Hmir4Y*S839V^e%_Gd(v?R_;oGnh>QO2kGPs?dGV64Sju$5Csa|xGP-{n z-`NM(g1%Lcv3}t;!TikavAgY_IlHEw8DG*g(~D@9?mK%h>PHrUDis?tn7x`OHUl8D zm%}@!#eCIQ@n5YUaBj9tl^b!LLQ%#E7e+los$#PSw{n-$Lu3ZH_NtgXvLF%j`%^f)G5y09OxZwMSB`X#tyEthPcE~?$W0it_U4f+N_xn35Egg z-dG`FM|asi%SPlC^||>Mh;bl&`AsprxV#z>zeCgiShkVfp>waCvzg*(>nQ8JI{EtP zqcM5qnZ&Nigq{u+Tj5;B{%stTsxMEOyo&fg_j%(pKU3Pza(e0dx%Ejo{?x&JuWez5 zu`NTjerEG8lPSU1k=frJcMP6iasT%Z3idSxI&p?X-yEBE~#f7ZhL zRz)i3EQRkSh*7Q-y%jlla7_lcJKguIq^IwP^b5^pi1pcIlgGFx3W->fc({}8 zPN+gpy+^+RX*(EcB;5Z{W=>5c@LoFw|HZ&KmLwr}e-fN0Ker&BcuIg!Q4}J~Ol`a{ zus-2wU6^FOK4DY2V>X=F=+G)dcvpn0Y@-#VWGbA?$G{fhMVA%*W7TAE2sk$8(Z5>J`9y&(i%2)Udv&87j=d5!GBgXCir zCog?abyc^Ba935rX3M?g`;~X9whO2lqHM{L{Yx+6vz8?;qyfCKLY~=&cXF0@nw}FT z&+EjY)u@%k$FdKPCL?{RVOw4mrjsqLlaqiusBW3V-gj?z#Ow+S&@mN&Cg}G?`fRg1 zCe{sROm=J^D?`XQ^7O$?Kex|{R3-)=c;k)ejVF{~{hTQNViEp$7b8cQ2Kd_Sksx0! z2oU9DurH{x*uUrW5Sp`~UcJT|M;!e$@z`2&<*L@B$!n`DwYI3Z9 zmdmZz3mG+WR#rgSsaEocvr7`dR!iT}&nz>{OBG{N4J-(Xp2-xo_U6?5g1b+INjH!i z`NuhS)P-V-UdmYX2i0s^;CMutssCJn`G(~n)`_6Oq*g*b7`}e!d*pw1gI_R#&K>9|=0p6@_v;B9uCHIrOvakB>W3dP>;$d-;+F z=2@7^(!@-vqKR&30iYfw9T|?RGPu20*2^rFnLg~X7sQ(_LG_4x#$p%tIiVEt5Fss- zKb%gH1dxLB5|4%0UFpcE+ToaJrY6kyvLD2p=9ARy1vg>G=#gb1`|mUaOjDbY+{fV+ z$>8{k%Kv64gC;hy!#rZ(VRLO)w^_m!4*zXjtq=c{`yN*Jfk~={{UqMkb?xAKyQW01 zH2nlpctAwS7T-(WY&TrTuG)rY%i2h%1pV-82*0S8U+V^892t0rC}@N$Pd^*alr+@m zR+S4^FDL--$o~tCg6y94r}p3bpsrOPYv0?4Ne>W4PJs`wS$!*Z;PqQ3yFwn*{ z`DKUI7GS3}IkdI`6t@zkhx@pUGG!&obN2y9{HNl>B_@o&ONeB^#q;BO)qa11Cw7}X zK1tq4ZTak=(@<0V<@&C|Lf3O+qjH)PwRF)ti=E^y) zuFh{$j6p*S4glf>&RRBGuR~ni8FiUm@yH^frz%s~Ido$j-RV$8qxRno&C0B2%42nr z3hyY1$c^eQGORT#w#*dmk8!$qtbTzyclqSdHS(lS5y%;-7Z|5k4o|pW-vT|P_Gy3; zj9_AQ5&x}go-L<>nDqDzfPqwiK_oQYh{p69N_z@~f+_>AYTw9@fDN>^w9mxs-(l&( zW?dXDP1K|jnUmkt6vmwbQM! zqd@{rZc>&+9U6KfY|1G79SsN<* zck&79h2$I8>V)9gz3cK?#>m?m&FEpmJ`4$p`MP9j!ygiW#Iphp1~$LI8zHMc?Gwlt zd@E^|MuY&&RL*g{VRO$X^N8HmZ%oyGTA>+#iY!QVoC!dOqCA^Mbod$m&9JiK`cW{M z>A?u@2ZpUQHukTHriP+9gq_(%tLdP8+K>i&5>Vh9{?{Jq^UX}VOP?U&!8>wP0=Q*} znsKD9B@cMzic67X-NWW&!0i;0>s!TIK&k#X4 zWJdO-utdDSWP^7m&G!pQJ=HyLS(w?w@tao4Blq5hN0qiOL4Jjt-HC#^8`GY{4EsZW zq*cS>7hF~expp8jhAU59u3kz{ND_f-)I5g3&= zlZUrwQxEN%?#`dcZmYvq905!~oV>qxt4uSD$6)lFc>rh|d*u2ho>VkRDg%@30NeWq z@rX&ozW$~>SXKIMJ!EZ4K)$Go4ijJ#B#8FV-C9dn@_(G77& z5=UBJ1Y6w>Wydd6IH%Hz&9e{0;0aGsh-c-7u)GDx!dFb}{_6pVg^wSj``PbGI00M= zg-BIKPdjh5azN)77jF-FKT{(y*nsL~7~R@57ONHe1qm|TC$FXDWrxEUw)^KzyP^xu zhvVtP?~j|(wzk*Fj{`l_LN)|?&43GhP&bd@XCXJHq4l~hFD^Ve^g97MzX+e-7tfy3 zjN~A$M(8ogFYMu2?@E_w zbkAGdfi$L5fGXpb?7+S2y5XNAF1M8Y|_zTay)^@h7G$!EuMMcH}%W(MI zOB{ft3GHIcUbH>%vKk5H=)s-pwTm$zeAXFcVPhjng+mRd1(f-`Z{y!3MYe`BRBn}a zN&T`dfr9l~6}t4x4{iPyY&dwxkU?E9OaUzN-)uez@s6xZD7-LBmkhv3)iu=_s#Aj- z@e0ZhU=_dLgbW7;z%tSL+P{P(4LjGgc86b9qK6gary}!cN0pjm8ZNby(`p!hxBI8; z_Q0vpM*xU8;VT?{!;@@^3Qml1q@81|EQXqH&LNP}%JU!KS78Swfqj2lGhW{_8NjLk11vT}{8<4VC=b;Rk9l`0u4>RC*LJ z*{^8?P5He&&BRAn1bU^*!zL!jIy2&X*=r;`Csn0A@}u=~S5@npqOOt{zyKxM_T9K3 zGBFd+6e(l^i$TQ(Sf-wx%BSIF2#cTKDGKVGcVo6R3WUyY7y)Otw=V7=5)PGDIUAl5|BG1 zF-R{d6O^I1Gq;i|nY-nui_Qc1oRl76ch45o`?Y4?I1XO2cIo zPW#b(k9L+3>pwjf(~$qoGfvLQgee0{(E-{kM9xUcBKmSsMYdBf<5+&bQhRmebmv66 z#-n`>amlB>G%WL^>3_JwC(;ljF)MiaXQ_w~me$vE#yv@aF+4vTA{6%r-d9+RDSU|o zU6IOGnChWps5c~#bkhIE3Y%rJkC|Hn1VRdxEp<>1!4Y7`!h^y z+X>SjrJMV(q3Q4yN}$WeP6rf}!*UCue5a^0jhVa0&f^N0>pu?1B#+kKz?F|mf3VsH z9yz6g(iCke1<(_*G6V$NP&Fh$ltM{nU6hZFmzK(WdEzF6I6^5{}gldqN_Yd?&? zUGu&LO{rspZ{HpuTy!s`{{_vVu(re<@+@1=8A70vE9(!dG_E_Bg=mPJkx$&^ZEz6s zB1_$AYx2kjX2wz(Kr7*ddI#E&W0q-Gmq2!yardxhCsDTd_Hjv<9MF(G6Fvl zYfhE%!f$F{CA8wxM&Gw$y_tav;+@2Br0>$&|zD z$VfLj$(^?&XaSDIRFtxZI1qnOHB=M?Eso&7H%~;P6|vhIBv$%$1C1Qg;*Ro0%K+Oc z&VbHH!ShQ^h6JC-0R~x^g`*HQ39jACt*+Zec-CQxl7> z>lPSY$9dk&^Q*yRlHGm}D2vs`@OUZ%h+4ZXJ_4ESew6P!q4T=qV)AuE5B8lkzNA}x z*4McgUIZQpsk{uQ?8$yb=pS{|2Lm#VZC5uB4&6ocs;JBrWuN=-S2?~JT40@uX>fND z1%qApxGEj_b<F!irs+pS)LzUs}kEUItMCx7kd zNp75mUzLyx)#ZQ%IuIa~4P7Qyf{HAe128KJr*!7J(&SRQK_|&Tj3-_}?n$?&hHb-W z^p8_3@&W(qm-nZ#k~IK9Zd-rEG1W0@#F<7e2>G0QB#qKcMXVdrm!XOPou#UoIOu{{ zJt(imJjj%CW72x)k;(q%G(sgqV>XTaI?C$e&etB9eHzX916KgaUVI`?5TyWRi0F%g zDGc?NZh4nb?ExtfqM9Mzb-Va?6e*1{wm9@^?utNEyeZw;G6>50KJKLZa#;J!Jp&Ur ztF7IPM2nG*wESL$*^X$tS>!3HWgy76iFVj!K^#dZN6Sz@^1t%q_KhOq|vkcX?IVK$8@!?sUI-DY*03td5U& zuM=G&1Jm(-wdQPkBF7%Nap-o;qKXjHxO8i&A)8yEX^5L|jC1u#^9r!KRv#|EQS~xmeC{ubeSg_P{S5|hT+0uc7&*0QZ|aX z`yq)ru<3ddYW5FZfQLKZ@qw#rSIZCsNtbC9frA0vu+_CFQuy*rVk+E*m}rlHJmz}X zd^kp^$!PxmwE7Elva_`ar${;&@Lu`Dz;Nf({T+g?s}DFB348eZmuvOejuRABn$73w zl0Z%T@UYmr`fdj}fie)}Qyof>iG_cZ@Xa5y;2um@$lVZSYOF_3>dONw!RBm_wkU*7_QFTP=q%!p6R>2dK zb$nFNTlEJvPQ#O7p5U-NB5$Da=RrtQ_ZzIexmL&yLS4zD+zJ>zbmqWxQL-eG5+xr3 z`H7Lna09R)M&wl2yH?uJ7hU7HG^m$sis1LV)tiV^qKl zWN{?+AEpT*>pE1QDF?V#OHeB_V}4X_xoL$X8(;a)B;w^ zJ>%zH4{wZ2aZHLP_zL@#fTI;-AS(&Mb|bnk4bZA9@8v<6far3Vb% z#k^xl5|W*ONBtH8^x6x!GaD0?@^EG9^qN*C6pdeSZlBC!NI4x%MwAGc*PEgz{B?do z`L8T%QRo~{s7b}_;`fTOxV*ki8;+^-ow)Yah$Yy#J<86IMc+?I0Ne-A6HPwlcO-*% zt|OvQ7ef3uf-Jjq{%yl*>E;sw^Yp-hQ)AbK`XT&Pk znaz2DRwl>V!eIJ(OxZYx-k8M~<(*z0kT>3G$4o3P*XusKANx_gMx*H+U@%!+UVds% zimn9?z@vL#5Og$-w~mg~%j@~JCujl^1-P;O*dLp}g9hk76p77&r7@1V(v1jsw8yy) z;jKB;BAQ5J_I{M;8RxhF)5dcXJLxfL{h|%%-_EU^LAw!!WgVW{=$$5pB{FFsx+OB% zqv*RsdlcvWa*M;OY!d5*O?4dz06xMZ=b_izZm<&4`PhrfFSfJ3$I*d z;X)PJT`X@5YC)1YX^L5Dww#j@?pqG(+;((wqHbl3JOnk>bL!;iT5fwPZ zt|$ZmJ%S-aj%pIy@f z$RgJi(g#NMieajNVhUXDp7Y?67kA|?#E6SZ+vW00F;?cu~^ z^5|3Sk0&qrCSbDtb?7daDCZ{z7*Up^p+?m8PS}F)4i=>79~A8z^pZiOKo1~ zU|5w_AJQm~#F$V&Zcf0bt1laN0GN9h0l^ zi1rIBDj>L$x5NfEl*T?@&WqAxK=} z?D!&mn>9&=TOd_LVavIW`jjJ$RYMJXvicrUL!-sLr@Ww6#OhXLnquTcX#AJ82pD4d z*PERFA96q)2vL4>GivXyob1fpRLzZ2kT>*EPusbR6A`vhte;kySuys zhp+-h`_HF@n8}6hAt(}}BHoX}J>0?m81 z7DusVs_jE%%hl4QHmI!3`B1vVsZ~Kttg9zUIZO3yXa+YF0RoFCq%6*UBKzKz!Zm2b zLkDc|0Oz4BzK9YA?iWgfu)W6J^l2EltkP{xM_yDhjRS z=^ZR!HV_qxr~^Yas-s^5M8u7QH90mL;I!(H-z2zZbvfP|6 zIXxF`rE7P`2AtCFR^@=1LxS?Oy%43lfNpk{yUr=}i4Mz>Iid$8AVX*|qa@6;5e|?AZw@j_3(O7yr8YhME-1)7$sT#)92BP*! zEE`oT=!^^K3$?#NMRzLdoJki_23-ya4v-XD7~-`!d9Jx>a5(@^{AG3Qjue!%wnY!# zxghH}H;7uo*0$+`S;UxRZs*7_xZxiUJ%A#$RmP-oAL9h+-3Ha{3!xea$-gS7eb+k8 z{dV{uf5^0-vl$Oqbp4z8yT2!U&mkUo+K*T2_m*5s2Q{h;oPWU?z`s|PYt^iYm?uK& zi1GOND7<4uZ)j);&V6F9-eQgEw&gH-@{X5>e!YQJRgk(b^(7YZ3+oF5DHjl>N-czO zUvNX**~r;K|M@*$;`vw%eC+cHz@k;DLR% z!?KToEZz{u6DWVd_DT?>QjspYLJ(G&w9n5F+~n0J#Qy;?NRLbGN1EdbUA^2-ZdCTH z4_B60)H|{Jtp76D{x0gI!ZfioR^<}F9wcRmLo6fUQMavMK8TrK>^-ypkt5qTTx-wAy*|ELrJD$ zdLs822)~`t{X~VX_icsk?Y1BVJVqR}u7cE6YcvUu9{9%;;IHcvi6{1?hr&gCbi88H zav!xZHMB+Y<7Enaz1A!?bdR}ET+nIF1GQW1+Z)|OL&V39l2DlwBBh1g>c_}#O6Y@^ zw)^kdX;eCUh>wf9boHJNt;C?hm}NNspKSfiPdls45S5**F8g)}!B3g%Ne7IJJ>ph# zajTS`5Zjo#^8oh4T4Gt-fU*m?l~k-QAw-M<`Tg#keHw^xJj zYeU2y5=C;&f3!91$s(Du-Oub+#?Qo#u`sfq0fCo6=y*KioIdYe#+>-Abj8KIH8qhn z*j#EFVu7N}i0Jr`xt@fEbJg?k1hh8P{;S`>(i9&OMaN6b0Fb-~GI~SU{9+fH!cIho zmE4YTi+dZ>Yu-VmlT_HLb>WyPq-SP~tgBEpsb7(=wAbAUvVNLU8$P4j2F?vUZ#4P$ zO}^ZDZJFzPDl#}S2$DN!oR_W*^vb}}niQ(8#lU2j`2?>j!jeDzZa%*t9HdEr@O@ti z017Kt#mV)0V_3b>sBg_|R7?z5-^~lWM^$U9Tb~nL7>QKsZ%po*s;Z-|hnWxU-K)kw zY`y+8cZ=g^wu7Xc^9+swJxMo%(%}f>`{TN}ukzA|*q8jlsI;0U+*k;u!REwCKWE*6 z*;`0>?Vr-B&|qql&Nx~Z3hzztNsgf{r4TnP&Aqfcay+EgNN zz4>1uvv#06T-!NqT%RZ#j_U2~*Z>xr#|>}zHB^2vy5l{Vl!wim%^Z!r+tH$x#6H}Y z16nzLVIi_$KY)n%n}h&~u}?M9nkSeKrLfVH3KWa?iGL_Z9$P&?Uh`E8_U?>;BCGs`RD- ze@3u?&9_bXe{Lv~A}I_6h99x7P^R z&-272ig9SFGv}2cE1tsc(8H4%)&86P^(&DK04H2qD6tbTs z;D=y!Ve*+DZV{R>UC9viD1ow+C*#H)pKP@=3V^Wcc?lL6KgVuca*n86XZv#&RRfyF zL2LZ4)$SS};o6-3Ta{Wrmfp3s7oE3xQUewSDZ|%fd#dpiy5s{CoRd0 z6QV2)}6}2n)VVlwpvOrtusYSEw5 z*`e1hNS@#&5?v*vn3L)~>>^UaowkUH$Y$&NlZSw-&Ml?7fT0##;-i$iy+^A0QZixN z$ARdfS>9}~XzCRrjDEGqvJb(dlzQ)PL4aXi>~~KgNMsKjzq5V;W#HB)u&&Ka|Gw2h zyseodeMX*(Hw^ZJg{{QcnnEW6LPLd_Tx@z?CQ@-mmps@BfmD+grT5gS0ieFGy zl<`bNN#0Bw&Td<>tQo5pTmWfK!Cfs+a;}z8_mx0$#T|OK4Sh-YGIONb;wEXaIq7{U zLb^3ClyDFFNd_SHbk(;B@YUAuTo!oV*_f6}kFyTsx+*>JoTuR6h&ZpSHS;2p^f9GfzSxyCI|J31 z55Q~8;^Q2#ov9Aog;JX}Q@oTR|8@$sk+8qFvN;P?ZJHGr--&D@>Iu|@=`}i5+#?1F zDm$#mTbRri0NeTk8R)=sm3Ivq$I`&(V{$nn7eVHwDSxf{eEz|RMN9~<^)`Q9JSHr} zyMY>)g%VrgQup=;x%@|e93~%T9~v?dlE_IXSOBu&uy`zJddLzN^ZnA>Fsp!kE8>ATR*aB7jH14$ABX@tSwi!a&0Zre*^H)SZfg z!jDXf(g?=z<)!VU&uW58#lf&LzV?|hlyh%|r~6E5HSi8ZrOD}G_h{?>fIb$V_f=rc zy8z=(=$$sJ|LQhS>}GMCy-Esa842IsmvoX+nYCqVa~CsjCqAL*_l2g z_A(5;s}bgfpub5Jfw0{U>LVf|XFmbopMn_rY+bgYz}vWrZbczzZmfkn+fU*=tqz?u0fTU63A!F~RTUyjphub&Q|f8k7v)r@(T(pkRW2oh}RVi%Q?j1*fFel}kK4mV0*X$^KR9Asi@U5K`gf**_34$Di05zHrNmv+!jR zFjrJ)wG2i6pnSDMS(xVD(m4>WT)%F69|FSe`sY6kRRuJby@h@2M?;UG)QA4X<{hNsEE_{Ac3i)w2*Xm=Ksa6JP3{f$zF>`Z^yh^!BOL$d6+ z$X8j@RO(1CmQ+y#PXSdjmV%`xO2{w`pvpvoQ8c942fP;`>Eg;D2Dv&X^Qtb23be-e zTf&wG^h{$boe&QmwNwVLgUFO{Kjv5cRc@l#?o?m`^;iuE=3Uhq^=fl}aA35Cd zpx)z~)0RP&_HP(M*A!Gz2+x9_#wE!&huB9q%--G+npUUW9X3aol)U!2{gdev*xtL{ zQ!sARgO3^V6udDl!TRON@_E_HaC@uXEUnwKp+%ZhpM-wMi&R@LY zWeF5mX2$L&xnk1@rHLOBX&43_tjk(M{zicv*7=i|UudH?+nak^Z<=WYMcH>N^Rd*O zNf7H?EAy$t;krJ@qnxNEM7Ae?2rP~yyj1qs`>_17v;f6ThS{voB#RMcsGaoTA`Pj* z%}~SXrIxP;e;WF*zGF~Os`y77CHQ`MX*Q z=P5!dVUElvCk2N^8zI}V3^s4bxzb~b6Iy1#5j%)lpSif%pHx0ivp6I-6W}d`Pamu) zR7d}|Qm<;cBnDtlmgRk4Mus0KWPT3W(lEz#U?{CqZ<&~&a~Df5iG}Vel|WwwHHh2I zfosvfDS^+kUVWTm1D-`k-et5fP5-@bTrs-!8LnDmJ#oProOrIB0BHGJGec)lPQtZQ03L{=MGY`^@(cpNnEWwCg9F4+2;>ZqBf* zB-l7O9#0QfjVC{eZw~By!^`%*IscYg@O^qPHa7NVSiX|!w0BNpQ3^B@8#jZezE;X| z;lwWa_nL&tVZcWmR&T+LsYN=MZP#9k+FA>?`|db5bSNk)d}#gZ;8aFU8Pkzq;Xr?6 zOC^P>Fm1TKE`bwXQc!(5Kb=iyn$3uErOOd`f@dbv@ENzN?h+~iR2T3wru@IGJrl?YDU!y^gvscMcZ8I=ZPG2{J-s46@-zKIhn zcEDcdxf%5Pvxt);`m01^<;80<8<)M1lM>pM*99$uKXp+mZ}_Rw(MmTlr(N1Qx#a@y zo3^}SA=Y3Am-nr#N5f4oX>8BBy-3a60cE2JU~DmhiZ8nqn#RFtrKjj*5Vi_W8gXjc zTHA{|lV1@IZ9kEyXgBu~pTK}Ewwun)Tzjj58D%4dl zcTAk3;jHLGH)Td5RAyB5az#9zSEJ`NTgz{Yzyes)QY%6AXVNeAo7E6moOutqe;fh8 zBU)DcvoA7GJzWPF3x9=e{w=mR5*_kn3YR!RJ^IB*=fsx^CZueK9QmmI>9OMN=;-M7&35J! zZ2Pz`l3qT_Xh_Z|NNR!a{?LX$>h{9cN8%WLiWq+NZh(ZmYzHB$nyj@nh@>2!81$0O z1r*{tyqvem#1kpuW4F$v-)S&^pIkrp*o5&f^b@2F($mZ|%JJ#2$8pso@_6E<3l!?O0suE@Ry^D6USw@;Mzw zT11S1Y=zWh7%-N0t9so%l0HOZUqf0vW1$gI#(h5$sO-yrzYVr)`t38z z=}g(`tjRv_%6-Ql5tSO@nu@Bpw^njPV^?9RQ$Q4QViXHDeB-^C*Gtsfo$3<9PH3~* z+As&Vk>4X>?gTpMb?#dE3D=MJetgP0X%-t#KzzwI9{P1racG$3z!XgEZj? zej&-*XS{X~G)~ZIU|&<(o|}CcL4O;e53k2_yTEZbl$Vj|!yH&NFtgu+R^dY^z4&4` zkjDk7xYKVMCc$;k*7be85p2}4vNAYPQG+eM`EuW_or$Ue$c zmw3afonb;sziuL0s13yu)xqN>^jsqs!L&#lE(SSDqut_D74dQCB$937*GN3#2}W zjpmGCH$kMwZ{NX=m^)cF?3(mj{BOfCN9^ig71O&WwBSu^@*ls69-}TNA`FUKpX3p) z3mev{Ylfc$qH??*18L2lehw{SmFHGq2oJ4T(UV{x>Cb(CbI79G@mwq99mYdcgkLa$ z%=17tAqwOsq8NTXzcLB)nacf(EH8wQ*HP5~(x0f~Lka@UV9Zqo~R?YUAPK zl>@@ph_YQ1@j@4^tVO9f%hmOBaBh6u3<-_Bg?wErmv*T0eJZa zAs{~O#Sl}Xz8LQRU6qqijF7Xt#18PQUawA`o8q_6Ew;!uczSWVTSuYAIIfAF%{NVX z`wX(qK7RHK`gqyg5^R;@K6q>1r5^qAb???y!4nqW1stf%p3cV~uclm7^l-ov>;A0Lm~n#XKk9#JlZCg zA>R&GVJiwb)rMagO-{N!Puae9W9-QMMM|D+<0E*?d6a?C7B!{LNxaxDl=14f!_66lOKE87@8)e1sg6>I<3t}ic^7o41x8a}0+tvDO<9Dw1 zrm>y6xXW zcwG9Df-MbO?7IT%VyxrP?`^QpheblDch+kG0F_-|Mdz}?m-@DV&I3NJZ-QOvSc;SPHc!;5xw*xk#~1x?1CZls zwZ=Kn+-%TpT(qvA4i>=+;Z$$m9)F0d`x|$NsP;f`3ukxKG#qlj^Jy*SHqLxn zZ+|Z>(R~m-8ul3R7~!o-MH}5kdnWZeejnmj2zzftxmb@K?W6NWZ<#+p7=Fi*S62k9&ak4`A%EY5h$l_uYr9jPJ^z4z!&7Xs;S0z+no1K!x^oABAzekuC}mJk*b2- znb}l`0L{HlSmIHRr1`rCY2$H_o3)+xd%=k69NM|}e=&JIAU&n&jhhOPVKcXVO;(t! zInI+boY;3oc_;ZXgP3KcT!<^!FEGI7_EHOOpqJ*a824p*VP;9STZDl4ZxfSO(FC8o zsI(+>k(u-K{GKm8Bj3;W%#EZ)Gs@74E{O==aiBx4Vj=IFZp^;+y;-m5;wQL5MDF*W zTejV?vXDe#CWVzQvq*gH?C>se4zbb*GC)dW=POM*(dQ*uqs0J5_x!DgT zh3Ji9U}6=?J=L7P<_U>6m(y$PdeV;3B!o38Z#F|?Bnj{10#oJ6FZ0DXggr{BXh=V% zmQGW@(x4??wj^8!)J04%X%rdtdRdoJBev9YlgfFYYg10k-nQr7Fiak5i2J0EuXmZb zcijlcYln7@nF;xcE|F$0VHjP`9oh4~f-5@HIp!@&z!UN1Ff`i{ko9GSeTj{qCHL2( zW$%hp;%!Pu$(|0D!+wpaNv77-&p9q>6&YAdsU5YGU9!K?Q_4%7U-x{(PB*3R3pJlL z7ETNa7P^*K1&5x=LJDo=?zhAy7ACz4Mw^K2CViN%kh&5L-uU-T?`2=@hg^ry4O=;x5}mBzMTLyA}3 zjB%9jR{sQNWRKe(Bot97d^A6ZzT_#mNL@zppv1P;-HLUn4gcOYbs)f!vx+%gawgM? zVwAVk;=TDc-GZfx`O~oIrv>M|1mZO7VzpwlZBYUlSZjyq&DKRqPGd6zWol{DXjj$d zmp>*f&)=qGX$f&iYoG+WA^mm?!^&*MV^1Gl?MdkF@85H^`tbpWEnc^~KWi_>@stx4 zBYu;L@%Zvtf#sF(a0XGmVR56P;e~woA(qh0!-BBbjTPP5%aK-f_PC~3kg68%j#<^} z5I?iy^n;;=0ASut>R(o*vBcE=tfUL=S+=O&HNplp!@a^qk;8b{bna0XGKW0Vs4^~_`NR%5rM{$z)u`AxTTp^OtH9EI)hZ)IT$X^rPdvh2L{CuT3j?g1vCU`Ub}7S;7x}C0-TvCD49KkRZyqjDl8obB8>CTv`Wl=swS&P+j2Ax|%Y_?ckRcy*7Urz< zuDs_+dtv-r(I&{4cD>Ul`I(}0n$QDf^Z6yYf&gnNsF#xM{mZ_hbpfXmldT9oSoN;bwG7 z5EFZnZxBwOJZxtgeo>~SkqWfSYd&#GBq8*m4dJUJX}B*o<mK)NxQ$zXyc&YpVs*3b{Eb!viUxjs2Sr3<0Ud za6f~D#4T^j&N*C@E`M~~(Pg*S5b^LSktyuT&aNi%msjGL8mhw?XA0!?&#uNM(|*9W zXVk7rcx@Loa}uq>uIv@uF3vqTaTs$uazsAqgnu5w#VyVmuXe_`-xTj}PKn08@>*d? zn&y?Nz4a>8SUVD+V2nM&{es3Vk?ZxnJ)fJ69id+k^?ich0-?PUtdF7}jffI`<+>(o z##=AaCxyCqA^pMC+Rxgfj9|<#^zWW8>Y}W+F`YjS3wf>Cwl=NpMnu(A7zJAQ%)DPD zO{kej=ufqLM?l=k5lb*Jm8||QDBuIj?lKD{=Am}LHIm(TZAOk({`$H?q~0Y9?} z+i8VZH}u&Qkb2-D$BD}US|pWm4|S%GgiObf-M^JK2{v?fRGDALos;3+#=`! ze;9=xAd234(X+Z=^keTx5W_NBSXS#n5FOVt5yrdJ8--6+Bjo!1+u`4tdP8F^k_dl0 z^4=+kowI!`Z?E&E4iwGSyX*$~js=gbWF_Va>?ui76(_>K`6YnqPz*m-!WH0(`@5&C zZIbxRQflS+M*HDzvouyn+!UowqHq28cYMsl@}h?fXKG1yi%j)>{MRMkGVRQ$(4cTfXjB*PD@gI+yM-w*m@CV1Mf&T5P=I zo%TU%$xo}nex}~X;`+DfM<^E}-UU&qeQN43pASA4p=9ywO>G$C=k8skl_o~vd8O#T z=Q5PA(73ph)2wx@^K|2xi0fBtS6io+FdXbY%Thp?T1;e(Q=#8*^gr#|jV@o@DE10q zQHVoxuu3uD^($-+|NL7icl1XhJe{vSW)ibb$MUCltXvA!<4L-4O6(b9Ji?IX>Q5Cr zzv%<0iL`?Lma9!@gOKVeM@K`oSM+b~oN@ZraLfn6IwmRkV)-T*UuhXFYl)T+lh&3q z?kb;5<7ZzzBjngHWBTkQ#pP-%6ur!hr~f`#*l=G_?!dPe!?;!R>0H3rM0;Y$pzwv3 ziXUQ=`F!8GZu_OK+Chez;NM+>-9VP@%Snzm6PEGbS8nc`8DCz1XUFv6w%<(l z5KO7%?2&aYSr~wq%L$54TvQBx#}sOPVZ{lc#2ZGHkS5h#bt~)IeFvq7N7aWDnZd~! zj@FlI2SVYUdyiex?Ftd74U@@l@5|?}Vu?mmV%5JGXjlQuCXvULTtD5IL_)L6t9OhM z5y0Wfa-U8+mg5g2lz-|?OUnP~OBR^G3PV9V8zPsA*Fylt7pi=nlK#g%u73NyzJ zPFhL0YR<?g@;=RF1VPQNJG&X9ZkLEa;@5Q634A_5=(eRhFu!%&5 zV8xOufevdlBbJ?*G1@EkJsd<=3vNM;+$P*CT|*9%b?OGS2u&+8BGqK*+&JjOxVpH2e-r%5Brfv!)GColu zPImBmq5ZXIB`HOjdgagd{x!w95&I;&o$0KDng~ONns3hER`ovND4!;)02be#ix(cq~ zSMz=G-KAg;J{iXH_=r`L<{7~Xiy24LAcyIMW7?YX`e|ane=iVb^!H(my8(l1gcKp^ z)Y~6pb(dJ*CHlNC?XU8=D?wRxkl-Cl|LJI_&VpFUJtJe;V<5v`f@xAS{l=Ss`UptT zFOFQ?1e2g5*M?kdTmlMZrNBTi>ifhm|4{93h^t^32_W_F|hz39I2vmf<1; zj3(6M@XzsH=sz|;^MohH>}nl4QmeD`W$XMpo1$5rBM2YP!crbbR;>4YZenoq(QEX* z>_;a|FDFCFfj{HSugOmNJXO0N79!~+I8!WzHFEBYg?NrSMivIXwR-N$8C;qtRC*x$ z`Dn<&sg1L>nRS##KCV0){z+Q+@DQVV_r-5b0=-UP0wqDqG5dAXGYwOet|R90R(WoG zUZrXo%m7j6HV^m)%@PfQtWklES2auJom0sWOsv^l&qTO@yT(1P8dwfu?MdtSY3mwO zopy`U?R>hwqO0&j3kceRp(c8GqQB_5KF*boESX1B3~v~x4DBl+DifFe-3LQ&hJvBzrbj zRf3NS;J));mX=!LeH#y1TNyCI4_8wP2ymoi5N6WfuQBe|!xaL4ieOFR^iS-+%{jLI zTw3k#aP7@Zc5{pm@q3OP?}6R|s(F+;*Dqbiy4vjI>r6%eW;5|D0rKFI&Jo^jh-%7KjW z^9j4zX|1#(`Y@NpNHGfsBM-YKi2Ykj5m*be{OLUZ1=0LuU7bWRjfi4uX`1_j<5fFF zap`@3KS^N3ecINQ#PnHhN|;VLmU1q9S6rmCawMVEMO~WK^s)*zR#j;P3f|>%gqXSp zt^7hnfL9=jVxqe~^*~djQ~__UGM*}SQ`@cHLP=rQp!8eWE9an+9Ta=_$P-0BEm|om zb_DT9ovfxK7kW+S0NfYRf7HV&-%>;P-?oM@Io& zgj$v&r;FS-&N=f^we4c0aLMbjUY8_tLIyOXD=UM^rJXsVh5W?BiN`1qQ3jb>7vGmj zwsMR$13BBh@RsGAdYUSi&HXu)u!HPzamdM|f?)D|X5SCjZbPSlj(wGC_huze#G`&)us! z)44kgXf~w6so^)tU$(^E@$9wa^0DIDvfG%_$pJJEw-rbQ_-{~t5q-k@wkzZ2 ziA=#xjh4My8j(adyo=CVCLUS8sw7xhmboiKnPf2dt*yWRXo`M1gBM6ORJ6a8HUNeK zv8~Y3gInP^_-_E6!ExJh(37NOvm*LK|3z8n`kEgGNvQpH?gC7txT7ED+YXSb`#2hp&zJw2ZX zTg6H?E?}yRHU#ym%MSDleX)voRA~p{c9d-=cjQ&MYK`iNAP2Mkd>H%a_ngP|hp^kP zFex2b-Av2=BAXYkwHoEAz3_e^ArUBU3?jbM9Ac`vV*J`&o!@ywQqQ7nOT8iW#O-Jr zzS?Ot=57>ac_KPTn~af6Z_TO7?BBZeh+o5M_%(;aHgYpUl69HrYfQdxa%mSye%mUt z(|LOZW1e4fT>mGFfXHAOCU>;?43GYeas?9~ddijjbi@n;uFK1H6a?(;rQ*9Z#4NW@ zk~iwj5>_pJgo}C=Y2%zwFEWnrsz&IVbCsOT#9s+uyiUlNF1fQSIq`bA7oApVY|%QX zxm$_xMU=TaF*sN8#)B+g93f^SsUo{Uq53rX2c8#@S{#==PBRgAd}C|l0%8_n@wP7c z3$xGg-#Z5i4x6L`TPV<02_^kPmQ4E;&Td&#Sf|~ii;qyp79^*ko)GH*m1KF(2mI3& zbw_k{0e(uM7CcOY)kTTo1h^lIaIvwze^&e(mQ0u~77#^NXGQBD-I^=ht@nh`S05Su zC%>H2!D;1GZjxoq4mU*UM3x4gA*5D%K1OOSkkV1O#d}-oH8;W1H^FLu0DKCX{1;ie zA_Kg783lAbV8bH3a6+wvdplJc9&4IFqT(wbCUa-<70 zIg;cBPq=toJoQZGoeU*WMR6sqLz^)Bl-~pE>s@r57=CG?+Va+oBGZ8n2lN4XUn!`M zDq)4=Gl>;Ehq;cL1EF4(qsf4a5+GUE_Nha}O)nCrD}|KSOJEkJGXUtYhCmfp*#Kez6c62aRI+4H&yxv+bhKJ`j-lB5in9@=Fw0vMn^iEBKpKNIhW}b>@n7nGL zzF0s-HGqPc;F6}Q@C3_fny-f{o!z%N)yB2h}^RMP+l| zMrjzZXnVc&{&(a!5GpEuqchFht)U6T=FoANv?L}hPKR0@>KCo*s`JEtk-k*s^&Zd{Sr1cgNTpl8{bvKDgOq`Go7TNE^0FGJaPW< zw24FYi}BH>2np2qw({m2eZzq7q}Rd|BABTC&9;lDRShlFmDNphVM5TvxNJ)$f=bL% z*Ro`wydl=V5VBV?U~?1+$=T}PaM9?qUAoAQ8LV(oV=>l|moy)I-^};~LqY-5;JAsh zQezJYxBz~1k;t7lSQ45z6AwDdW$8LIB!SB6s9Kel=E8X6gm|4@EOBIMm55?$?j zpjoI=@8+&TkDG`R3p^k<1Lxroclzd~m%#@dtw`OZ#1`(4_Wv1zf|(iJ!^7kF?5z9p zU>@{V`2I|Aq$d;y3lmd+btfdGP(=1%Mn;T|^MaS@1z~!{L~AydB#}+$Ar9ojhY#Tb zQJApe;^N2W=K-=)0@Wr|R8)@Iavt(BUy0KTxl*%SF~lSuhfQ_3RKG61ge3lMaf3Hp1Ta^hl|A0dDwSXM}6&&7cBRugDmf*q&_Dlsh75Arl&`K`$p1g zv^|nuZQ2iFxJBHAxf6Ow$&Vi+7RXmllHLK_K_;alzV*&xB>ao?ICguC{Fb{W%4m}% z*bu2W1w}=JsYdC%-&A>gPglNA1y>Jn7y^DkUu&zuMP=r+CY<42^g6p`p@zoBlna-w zA;RL`ld*Rglsr5H&8`PUXA6x^+iRn5pC;~ZcZlv+JsUT4kd@kn8vK8XsjMymX0(=v@nNR8Drx|EcZX*w}Bw&CQ*uI}#G z%uKy)4-pX&B$TT1lyxyN^xhG5I7-VmL>{4fPF`1dj)Xb)3;UKd6&kdV&d$zcE}PWS zZa+*|3k!>#snWF4ca&6AR#qDl$g%INdT4$2I2qXK#m{-sL{_*UylwU#M zNc*z6v7x`w9~+5BgoQO5SEtzZ^KGooxO`ZdlL`63dwuGJml|5tL@?%sc``|`5cv!N zWXSdPdbGnz2Mna+?c)i?qDQpgCBfz4A}VFT;YVX*8oCb|5%TGLos*Mzi0C98+nK&m zWjf7`Ugma$MtHk!_F9`_en24 z{i|2+z<4iSfAnjAdN{IotB+1u0TDyYbs(Shcw_E}$VYJm_m3Nu2R~|JsG)cyX=rKnYsh{Or{vTAfBhTySNsy* z+X6Y}8fwUJV@(WTBfy8#Hx54D^xZ0!ab;EJF7#qrVQ^{vzDXAu)}%y z9Jg-@W)e&LpV5O|X=8?Pw`s zs{#W6Lo*!M*0$&2Q!xL=*D|}RE8b)r;N$uC(+OF^`O?HfX6Txs7kVv~CYA*M=RU*n zf=AFnp!x_YB&?oZv>fpKm;C-8?)cv(Re1-me|5N+%x3g#uEqk+&CRXGc9DqPY@{dQ zmHLoR#L$o|4Gm34Umv2bt}X$$EeW%BgMM#eD0BuT-G}Nhp5S@wn9R&*@L)eB7uO4X zX6=sM$>Nhmx8+rkE|AdC%Py{Dq@`KikM(h1yjaUi(*06h&8}9a9r_s#aSdE@e062_ zU0oC^8t3hOAsF|oMYr*Cy|?|F^@#iuQ6$jo3@>&kKQ=jAl(x5<4ikOP&tFT@^AU+A z6NEr=B_c)pqDW6h_>WdDruFJA@1Y}!B^qDR3d22nK4x`q6@7DavpVrZ+2!#O!h*RWRkdApO0m(ihQ5(Dn4Eg4?s^fBz0oOG}G{gj9GTAQgAqNA61@B($_* zCg^q9b91(>sI6^X%KA?LuSX7L`~c#x#A9S+Wc4`R&>S5c9hLO(;1v}WeeRPln3#|d zSZ6bz>K(DaZ@saxu|vx5cBl=PLkBgJCZ}OWm>3#lJUl$p^kNl8%C7^@qmJh5F=P^7 zi-?NC9yV@gXp*mQ4W~8r6%9;IsveOjPnBr+gM(@6whw}F!_(v4c%_k~^-M+fNT0ov6C5NyDT(;Lq@+X^ zjJq|G9u7447dk(ZpV8!c+h;i72C*I!al&0q-PcU55Qo^d8NO!juMnJ6RoJmI9ex^G z+7uVt;i~kAi09AAg-Di`maajMvemzTHMWheZ*D|>s1Pl(3wyoh;Ha7ELjoNQ6%=AL z*r4Mob{hlI6L5wQKd?0$6YC472t&pdRb*kQhAeDv&zdinrgpSEI5^mSyxOg(s~ff0 z>_%Mrms^54DOb5b9%OX3>sg@4aey1Dv5}$Dtol#gce^VA>3UeOAyxWna#ajTNK7<5 z-x=>88tS=P_KlvI`S^8Px5*i~;6vsVKbOOr*!}HZxu;Y|3cK0y+2~v1_{)Fc+y*d; z*6EAH180bp_XX&~mhf4WWIophP&ff~6_9)K>Mz>?5-9HV-LLEeF9Xy?qIB+qiV@_9 zbpYsk?{Cgl_xB^*mOtS$Y1VW&jS5aDvjjrz%n|^>kC#Tznm<6~zwy98W*Qu*xoj5- zud4g|`}tn3dwP0O@$wS--pwypIR9089~U6v|IA?XR|3-W=QT>Sf38 zePlDZwET2>>Ig>DU+MUKd~(v5+qZ_~hjx8^t-sLVz~yn6oJ`=nGuBBrda(1q{xtZg z)n@kW&bL7DN%I@LEOc7`TVjBQX+M9U^qw5?a7+RM^F0NU|8{pU#KCcEJyYA$);c3p zCD3F8g#!Qn@c)%{{tce~iiM>Qm8HdRY)k>b&usN_-I+$Gg3@kBBoG2W)|g{~0F3nzK#LM zY-nz#rl5d;Aly;E>|?bzM)Di%sKh$f2!aXCw` z-KP$HvT$@za6BiSMZ*uw-kU;WX}^D?!iYDL`8IkmiDjM- zbUL|%%v9?6+#s}iUUY@wy<+u!^o9s)Xb?h|nUzIB!sp!o6Kk#>m=i88E(O5;pcvd4 z&qa)ji(|E!pg;Fq)Yj2C0f>AZL}L)5Dh!-2Km1Uk;^CQ@ zGT`|p^yzko^AUyusDzZyx#Nd&fi-Tzx)MDuaHc*G4Q)unx@YR`$U%)0rCO{u3xubv ztsPNR#Hba#$}045uB_eciZ+Be}g-ycH>jFqx*(o*2z z{7*8k6CIz+uJN8d$uE!$S2s5i)Ya9WlLn3KR?JlfGzHK2leCa zzP`W=kQSRQNzZmD~%cn9jE3 z=o6&<*UQSvnlf=_n}Pm~mRdY^7Mr>A<6275}M`x8lG3A1HsX=(fQ zpJ;$&kgVSw4M4^Lb@6Ag>{Y1iSzDJx=31wIgf;G4SXfZd)wQ+P=6}7lwKX+EiN#q| ztX{qbvSVOpvsALA9NwR%}BWwfMWvC|@=u$L&5lm<$#IWjV%;ESZymqs7EvYBxIet~6YJ zG&eUl3Kp9%M?pnpvz(yUZucR5`*=LeG?HxY#F&&))RQUDl)&Oo!)GVhMh^PGMpLoi&eRMP=nmb%$~6&83QuuN;xu*I3bsgcbaZ?k z^#CB=^;Vi4tM|2inVg+Ci2V>hjJNj+N7q4U#48&cP_QyfQMC2>tKY%La@|%|(3cZ5 z7Q~#Loec>M?F41E-S@maLhaYaq`(+{f&k&tinZ)>S8D6lRgmdJ1Yl&{^HFBOs|BZj z_W>bwV|$y}`u?JyI(mlw%^kPbr8O=docb@0F8JR zRaFB)#Q_CiAQE(U1)^%)YM>s%TW|mR^$Y4H>t8{dRId6sA7A}FnSh`m z7CwG3bj=|1)w;N&TY&2qkY|29-i-P}LkkZ8Az@)*AoYhpE0ysaaUj7;7kBU!WfgXL z`y(IFattUj`upDxrEz173f+MmZ1wy9t}kEY0}cMqLi4|segAK@=>H#=7%Kx)ws&#q z1@?X(bp#^o$jHbwI8h`dZ{{L_&!zQMtRD66yP$gNFw+899dUpQ#g9FGPzu@5D(r#+1s#gF8 zg5sC{_3P&!1Ww>VE7)it)>TkG0Tr--!e30S0}B-Bme{}l{K3M*LjV@BzuZpl;NVb) z9tzlq%ECBMRR@66=`fI@qN0`UZL@WAFkyTseywW6d!?q|9fbC=)syqvw{Ok^fMU=f z`}frkC`e>!yQb3hI^cvVqS|!03%Ha$umr7O2|&&8AcC1$Zvhz8?FR#Q+yRH755Nq> z51bc;mfO(+r$}7ZGy3aDp&|Pi|HcdjxFHt=3-iS$PS>L)v^=FBce8*AtTgC;_Knx+ zS*d1il|ejUHG=;K&|4+>5BufpupkvDAH>8WCFs6V($gb#9E?)t%z;XzDhmKAaMS94-~JjHK$e%6FDxmkaiO1h z4*i~j65i?&XrB&bZ2Sz0>WVxl6Jd8tDOx%_R0y(mx}qXfc&yilv* z9c2iJmXNTpDi;E=XHZw2{roN%-2hPi4L%P|rSBYg-lPnblmoUvB6J&sEI_;x<>cm8 z`aF2j(9yv{d~W}~eEqQk^6BnUTuBKVK++3|(BP0%vO_qq9fb%5iGU%{2RHE)Y%~5u z?t5RkbOk!Rc7fsuEvnvbxlM6RN?tyQM#}xD^$HUQCzt;bK*M*;N$UVOZAhDlp+_M@ z6xpc)ggp}A^S*xj+B!rL0EMa`pIeinXry8KHDN38z(so72%Pp)doGjnI>H0qfP+W( zPb4w-%Hg5yiF;LbHB1Ku*3igEP+FSSSDX8!#6-Y4cTX8$^1=fqlM}9>4A-FZa(VnQ zfqeXMlN|d0O8vVd9+$imZf{TA=Y((IC8J2#JP*P6tRVbf-`#Z& z4x&O?VH6aU^ASL8cZOh5V`5@LfLGU8PNIN7F~%<$M+5qGq5xFtS6uu`v&Q^0NXx_m zYCv}YYY5$6wLgh_dkcVdRoE`_Iq%P4fii(Bo%#`qn%sOF-Oj=!w zi=^P|p95cC4*QUo>$OK&{K@Z}pC=X)5=!QCDH=ab2fzXj`1LzbHLULLhOMmV4<)m~ z0fg1$^nyh<0?^cCkg+1wS2_bypbsyEf`I`UWI2p4U%q6iFgi@@xETN(YT7sV9q&7w zq!2{N3-j9e%T~Lj&=`rG=rc5;0MLPP?Z1Ku5OY+Lt|zje=~Ik&_zOyaj=;Xh>gwvp z3VoPggM(;f+t5U%txW=!2Vz+;BDpsvAt7N?rlh#I0Z1hfzm5)JP}jZIZ6N?|3q%NT z&E&%;Xq{I(!ax34rsm+lmhtIQ17tJ6q4#WsLF7bP|XMX$kJViE$Nvm!J(1@ad zClU}4V0GR9*y@X_Jk;8k>|{q{Ne_1PI31QBGXmRfKH(=n{D@}GOc|nf?ixgw>#9bnL?ycD95bZ z5&{6q`t`{=kNYtN2nsIS86bQs=gW5P&sLxG;C#pefDDSwpcVoE5vZy@x*Y<6LK8dC zS;f-m#jjW8`hS1t5eRy6Kx+nQoqT<~S_nR8pKwK?R0Fh&^VU#`Kd9Kix1>;e>}&)+ z*%OG0&-&@s86FXFePiJ3ds*2YV80F<{a8TrvdOG4P&{gu`6&pny;J};`Q^hPL9C|B z#DmdEp_1j{l(XdvZuS{rwYeS>2HEwFZ4cL zBphBPF=+(>R+kU}N@%$Tz~(W4nnnQS@ql39?d@G*Imu`}SA)#&y59kKO#p?*8lB8~ zdU`;!Uaa=}Q&f;bA&{Lv1wKc^AVpSux^oq{m{4xmD{GEPN(zQUL|*|U@Xk^zKSVBN zyihS06QD0JIT7ZhJ?t@H4A6Y*8O;muYR}J~YoIbHcX_z&4aWzsVOZ(_)y{ae*#`hT zDQRgDfQ-8<47wr7Zlx;R9;e38CE2yz&;h>U392gSzG;)op8Y5|ymE88In(07zBQT& z2y0J$uprO&cI(+UKm#quU8wydBR`8&i=kD}Hy($aDMd-AL$<9Y;!q-4%-G&#X%?lEdYEt@bFs8u9X%N0+6F75@invCh(9G;I66OBVhHY5GdsI?DGXx zp8tAmY%HwbHRyeDF(T-+6#=1G@_qW$x(+HqJjMiRU~##+qY3HhOxoJoJ*`(uuV|!x zr(gY+VL^r%?oRxm(~HIw^}d)?hxK#cE3J3#19(d8>G1&p5*r`?oxd!yvp1Pj) z(`v-Z7)%z2^Q|s`fb@_M454e`qiaCbzus_coN4!MUpj&Q69f|xgA7*`DK;^Y4i_a5 zG%QS6@_?FNz}K%|mrj84ks*K~kvv)etOW`N21ct9K8r5Lb=n_T3a|nF{cdS~UJD?) z(T%-C8Yy5EVOZ1>J39E>whNd5fnkGq$R6VGE1rRlyu687rzynisI`8|X{c4LW>gSZ z`eG$uImW9@WB||AlV;cUgI`xcfdT~N^RmBywnBnXy?!kVOzLlx-C~m}1QR6WjKdjV zr2r3qKlE}sV%u6Ej;uU4!<=P-CQSn=M3x+BY}QE@I*5uCEIFy{|5e(#heMh7VSE%y zsf5ZQ#iVt}7D@_9*yMbCow9`_(c%py%&-|ERFu=G9NLN`sVEAikem|2mKn4%QA0WA zF!uiKzWd+%{`I;pf6R5wm}j2n_x*kE`*VNIb3a4{cxU(Am>8)2`L_l8ht8d0FnZvK zt59uLcE24=+J*xuXMHC$1LB7udcOB}ta<2wX1)h2fq}5`9_qa7_Oh|DomO34z2~}( zTl3XjAp;N5N8xT>Yrnl=E*<#g_f`8#jrm=8+zuNJ4rrr88bY`%@33RIsFKXte*abG+Q%v*~i)On8+3uOM%W z|7=v5-(pH#=T!a^0b(@Y*yy0A{VhVblc(G8q)L5o0au`7H~0pdzsA-xg=@! z)ZE;>8t=J`$0AW;&jf?j)@HX@PDEPT$DfM=6TY+1hinHU5JFU-6cVWQRmY7>)%;%b z9gBXM`}@0Y3yF5&vCMuh)F{Wi12nM~{#qmwmtK6e1uA?t`=kY}FgYe>artmL5+5l@`paRTSZme=)l9jzuJB=EVk?eiR!Pq~@ z-f^dLeNvrAX9Z3B+}fR|{VL~HV+0@^_(_=P4Z?=OaOI5=TZwGW)%7ZW!aNsZl*3gFG2 zB3c&f_Bm=GZe+wCFt-Otk8sPzkoX^reipL38O6 zUJ{Ka@GOFZA8~acgz&YMd`qHwgAQy>-NyUUFl@9@Gi2A*1Z#D7jU`8(RvT>X zeYpK!{Sj{r0_b9^WMmT9;qx*E(ZYE_N7)>X*J3#$+q*dt8@-Hfd*9K!F4KQYNnV~G z?T|>LL=+ph`|%;%#7RQKTO4kUk3!;dt-#!B_qK1)0`PHakYSi{BK_a-Nw6CB6{kX< zY8!9e5|ITMNHV~$InRPNe5ANrI+n|C8WF=(#6>Rhyu;mEVw&4NDPW~2E} zQ!dAaO6zU4-2GD}eGV%5`lL2UO2~LV5pQtT#60P>J}v0Ff8)!}w&g(z^748G_8*En z4s4CdLpMI4&BmaOBwW=qK(EA%jC=>4ZRUWKR-ht8>Q^+0q3TKquKRsNb>anMDSdYN z?ZNm`qVcBIiM?;b&d2XMe`0QoIeez57SP2IO2esWyRo|D>kw602g<6AHO+a7eBu^* z`Fj#7w&>BYFUxM-Dh76~In~vep=s^xyo8db>b5|9i2$yW`^cm$L)CHcjSJ2k!grEm zkDV)Yy1#cgwAlF^0J6_LWQElC%$_~Fgw!y}yof76AWxo& z+=>zr4r$?d-*Xwc-;kk^(KT=id|Y^pRNqS^AxwiiUGI74;atCAAH0N4pS*OFcMY`lnNad{q;lb zbD%pM22r5I4>V-%uH2(W>Yqqx6h56ZiD8@*VX1A4f%+iK z4NOeV`WoA0(L2swN4}7a>@ZE2riGn48u1h{(%^@TI`%(({9LDNzZ~`P;e?Hy6+07^ za@O!_IqF$0OXoM>;n9|X{CZg87r+k;=o2oN>ps%+tPklZ+;A!%1{Vs`G<;G<#>a_p z)|nl7PTjJ_a<~Y|1x>`lV z$;qiKfVyGBkc;wNoZtl!@JKi60vb+jE_VJAK2eGrfySL!2{$Qd3u za5Wf~J_@UFWMX3VdEMz;ET2culHyah99#{lRtX2Y64agKqsWKqU1RskF@nDocNjW4 zrd_D-4>3JW$973lpejtEz)8gR*Qdro#4ug9Kj_-0o$E9>n%N!Y*yR*68S2HGY34FN z99{H_XiDB;J?%h_>lmq-qOkABTM!v%+bKsC78b_D#ff3gWo1;ky_%`qWq zp|Zck%rD(7pfGv5Vz7TE}zzuwLnaXCic`>3IB*X!KFqwb!~Y z^0|v-?>Pv3LN#sq%%|*2+012r%PP4>Vei{-WOPCi;R8WU(76rkXvb9EP770Ko{P%n zcxKUJ)}&Z|j@MkzVSG~-GEpdP2fkzqu=n+Fcj^^(G27|lP3C1EGh=drI#lQ5p z=lQTr!TQ>TI_3+TOiY{cIq;E%hXD;T*-WLXw`T2$yj?M>m00|r>9&7nIPNW6n=Tum zMkr~znV@mfF&RNnds*Y8NBV2iql74l0!qmycJ}r;IXP8tv+)lJ3(;Bh(R|QBevw(C zu@J;qC;eWebFiZp&qT3-{(& literal 0 HcmV?d00001 diff --git a/docs/docs/html/_modules/index.html b/docs/docs/html/_modules/index.html new file mode 100644 index 00000000..6d306941 --- /dev/null +++ b/docs/docs/html/_modules/index.html @@ -0,0 +1,305 @@ + + + + + + + + Overview: module code - + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + + +Skip to content + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    + + + + + Back to top + +
    +
    + +
    + +
    + +
    +
    + + +
    +
    + + Made with Sphinx and @pradyunsg's + + Furo + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + diff --git a/docs/docs/html/_modules/treeffuser/samples.html b/docs/docs/html/_modules/treeffuser/samples.html new file mode 100644 index 00000000..16a30a87 --- /dev/null +++ b/docs/docs/html/_modules/treeffuser/samples.html @@ -0,0 +1,688 @@ + + + + + + + + treeffuser.samples - + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    + + + + + Back to top + +
    +
    + +
    + +
    +
    +

    Source code for treeffuser.samples

    +from typing import Callable
    +from typing import List
    +from typing import Literal
    +from typing import Union
    +
    +import numpy as np
    +from jaxtyping import Float
    +from sklearn.neighbors import KernelDensity
    +from tqdm import tqdm
    +
    +
    +###################################################
    +# Helper functions
    +###################################################
    +def _check_unidimensional(array) -> None:
    +    if array.ndim > 2 and array.shape[-1] > 1:
    +        raise ValueError("This method only applies to unidimensional responses.")
    +
    +
    +###################################################
    +# Main class
    +###################################################
    +
    +[docs] +class Samples: + """ + A wrapper class for the output of Treeffuser, the samples from the + conditional distribution `p(y|x)`. It provides convenient methods to + compute various statistics from the samples. + + Parameters + ---------- + input_array : np.ndarray + An array containing samples with shape (n_samples, batch, y_dim). + + Attributes + ---------- + n_samples : int + Number of samples. + batch : int + Batch size. + y_dim : int + Dimension of the response variable. + shape : tuple + Shape of the samples array. + ndim : int + Number of dimensions of the samples array. + """ + + def __init__(self, input_array: Float[np.ndarray, "n_samples batch y_dim"]): + if input_array.ndim < 2 or input_array.ndim > 3: + raise ValueError("Samples must have either 2 or 3 dimensions.") + + self._samples = input_array + self.n_samples = input_array.shape[0] + self.batch = input_array.shape[1] + self.y_dim = 1 if input_array.ndim == 2 else input_array.shape[-1] + self.shape = input_array.shape + self.ndim = input_array.ndim + +
    +[docs] + def sample_apply( + self, fun: Callable[[np.ndarray], np.ndarray] + ) -> Float[np.ndarray, "batch y_dim"]: + """ + Apply a function to the samples for each `x`. + + Parameters + ---------- + func : callable + A function to apply to each sample. The function should take a numpy array of shape + (n_samples,) and return a numpy array of the same shape. + + Returns + ------- + result : np.ndarray + The result of applying the function to each row of the samples. + """ + result = np.apply_along_axis(fun, 0, self._samples) + return result
    + + +
    +[docs] + def sample_confidence_interval( + self, confidence: float = 0.95 + ) -> Float[np.ndarray, "2 batch y_dim"]: + """ + Estimate the confidence interval of the samples for each `x` using + the empirical quantiles of the samples. + + Parameters + ---------- + confidence : float + The confidence level for the interval. + + Returns + ------- + ci : np.ndarray + The confidence interval of the samples for each `x`. + """ + _check_unidimensional(self._samples) + alpha = 1 - confidence + return self.sample_quantile(q=[alpha / 2, 1 - alpha / 2])
    + + +
    +[docs] + def sample_correlation(self) -> Float[np.ndarray, "batch y_dim y_dim"]: + """ + Compute the correlation matrix of the samples for each `x`. + Estimate: `corr[Y | X = x]` for each `x`. + + Returns + ------- + correlation : np.ndarray + The correlation matrix of the samples for each `x`. + """ + correlation = np.empty((self.batch, self.y_dim, self.y_dim)) + + for i in range(self.batch): + correlation[i, :, :] = np.corrcoef(self._samples[:, i, :], rowvar=False) + + return correlation
    + + +
    +[docs] + def sample_kde( + self, + bandwidth: Union[float, Literal["scott", "silverman"]] = 1.0, + verbose: bool = False, + ) -> List[KernelDensity]: + """ + Compute the Kernel Density Estimate (KDE) for each `x`. + Estimate: `KDE[Y | X = x]` for each `x` using Gaussian kernels from `sklearn.neighbors`. + + Parameters + ---------- + bandwidth : float or {'scott', 'silverman'}, default=1.0 + The bandwidth of the kernel. Bandwidth can be specified as a scalar value + or as a string: + - 'scott': Scott's rule of thumb. + - 'silverman': Silverman's rule of thumb. + verbose : bool, default=False + Whether to display progress bars. + + Returns + ------- + kdes : list of KernelDensity + A list of `KernelDensity` objects, one for each `x`. + """ + kdes = [] + for i in tqdm( + range(self.batch), + disable=not verbose, + desc="Fitting kernel densities for each `x`", + ): + if self.ndim == 2: + y_i = self._samples[:, i, None] + else: + y_i = self._samples[:, i, :] + kde = KernelDensity(bandwidth=bandwidth, algorithm="auto", kernel="gaussian") + kde.fit(y_i) + kdes.append(kde) + + return kdes
    + + +
    +[docs] + def sample_max(self) -> Float[np.ndarray, "batch y_dim"]: + """ + Compute the maximum of the samples for each `x`. + Estimate: `max[Y | X = x]` for each `x`. + Equivalent to `np.max(samples.to_numpy(), axis=0)`. + + Returns + ------- + max : np.ndarray + The maximum of the samples for each `x`. + """ + return self._samples.max(axis=0)
    + + +
    +[docs] + def sample_mean(self) -> Float[np.ndarray, "batch y_dim"]: + """ + Compute the mean of the samples for each `x`. + Estimate: `E[Y | X = x]` for each `x`. + Equivalent to `np.mean(samples.to_numpy(), axis=0)`. + + Returns + ------- + mean : np.ndarray + The mean of the samples for each `x`. + """ + return self._samples.mean(axis=0)
    + + +
    +[docs] + def sample_median(self) -> Float[np.ndarray, "batch y_dim"]: + """ + Compute the median of the samples for each `x`. + Estimate: `median[Y | X = x]` for each `x`. + Equivalent to `np.median(samples.to_numpy(), axis=0)`. + + Returns + ------- + median : np.ndarray + The median of the samples for each `x`. + """ + return np.median(self._samples, axis=0)
    + + +
    +[docs] + def sample_min(self) -> Float[np.ndarray, "batch y_dim"]: + """ + Compute the minimum of the samples for each `x`. + Estimate: `min[Y | X = x]` for each `x`. + Equivalent to `np.min(samples.to_numpy(), axis=0)`. + + Returns + ------- + min : np.ndarray + The minimum of the samples for each `x`. + """ + return self._samples.min(axis=0)
    + + +
    +[docs] + def sample_mode( + self, + bandwidth: Union[float, Literal["scott", "silverman"]] = 1.0, + verbose: bool = False, + ) -> Float[np.ndarray, "batch"]: + """ + Compute the mode of the samples for each `x`. + Estimate: `mode[Y | X = x]` for each `x` using Kernel Density Estimation. + + Parameters + ---------- + bandwidth : float or {'scott', 'silverman'}, default=1.0 + The bandwidth of the kernel. Bandwidth can be specified as a scalar value + or as a string: + - 'scott': Scott's rule of thumb. + - 'silverman': Silverman's rule of thumb. + verbose : bool, default=False + Whether to display progress bars. + + Notes + ----- + The mode is computed via grid search on the Kernel Density Estimate (KDE). The step size + of the grid is set to be equal to the maximum between twice the number of batches and + 1,000. + + Returns + ------- + mode : np.ndarray + The mode of the samples for each `x`. + """ + _check_unidimensional(self._samples) + + kdes = self.sample_kde(bandwidth=bandwidth) + + modes = [] + n_grid = np.max([2 * self.batch, 1000]) # heuristic for the grid granularity + for i in tqdm(range(self.batch), disable=not verbose, desc="Searching for modes"): + if self._samples.ndim == 2: + y_i = self._samples[:, i, None] + else: + y_i = self._samples[:, i, :] + grid = np.linspace(np.min(y_i), np.max(y_i), n_grid) + log_density = kdes[i].score_samples(grid.reshape(-1, 1)) + modes.append(grid[np.argmax(log_density)]) + + modes = np.array(modes) + return modes
    + + +
    +[docs] + def sample_quantile( + self, q: Union[float, List[float]] + ) -> Float[np.ndarray, "q_dim batch y_dim"]: + """ + Compute the quantiles of the samples for each `x`. + Estimate: `q-th quantile[Y | X = x]` for each `x`. + Equivalent to `np.quantile(samples.to_numpy(), q, axis=0)`. + + Parameters + ---------- + q : float or list[float] + Quantile or sequence of quantiles to compute. + """ + quantiles = np.quantile(self._samples, q, axis=0) + return ( + quantiles + if isinstance(q, list) + else quantiles.reshape((1, self.batch, self.y_dim)) + )
    + + +
    +[docs] + def sample_range(self) -> Float[np.ndarray, "batch 2"]: + """ + Compute the range of the samples for each `x` using the empirical minimum and + maximum of the samples, `np.min(samples.to_numpy(), axis=0)` and + `np.max(samples.to_numpy(), axis=0)`. + + Returns + ------- + range : np.ndarray + The range of the samples for each `x`. + """ + _check_unidimensional(self._samples) + return np.stack((self._samples.min(axis=0), self._samples.max(axis=0)), axis=-1)
    + + +
    +[docs] + def sample_std(self, ddof: int = 0) -> Float[np.ndarray, "batch y_dim"]: + """ + Compute the standard deviation of the samples for each `x`. + Estimate: `std[Y | X = x]` for each `x`. + Equivalent to `np.std(samples.to_numpy(), axis=0, ddof=ddof)`. + + Parameters + ---------- + ddof : int + Delta Degrees of Freedom. The divisor used in the calculation is `N - ddof`, + where N represents the number of elements. + + Returns + ------- + std : np.ndarray + The standard deviation of the samples for each `x`. + """ + return self._samples.std(axis=0, ddof=ddof)
    + + +
    +[docs] + def to_numpy(self) -> Float[np.ndarray, "n_samples batch y_dim"]: + """ + Return the samples as a numpy array. + + Returns + ------- + samples : np.ndarray + The numpy array of the samples. + """ + return self._samples
    + + + def __str__(self) -> str: + return str(self._samples) + + def __getitem__(self, key): + """ + Prevent the user from removing the first or second dimension of the samples. + """ + if isinstance(key, int): + key = (key,) + if isinstance(key[0], int): + raise ValueError( + f"Accessing `my_samples[{key}] would remove the first dimension of the samples," + f"which is forbidden. Instead, use `my_samples.samples[{key}]`." + ) + if len(key) >= 2 and isinstance(key[1], int): + # If key[0] is an ellipsis and self.ndim == 3 then key[1] actually refers to the + # third dimension, which is allowed + if not (key[0] is Ellipsis and self.ndim == 3): + raise ValueError( + f"Accessing `my_samples[{key}] would remove the second dimension of the " + f"samples which is forbidden. Instead, use `my_samples.samples[{key}]`." + ) + return Samples(self._samples.__getitem__(key))
    + +
    +
    +
    +
    + + +
    +
    + + Made with Sphinx and @pradyunsg's + + Furo + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + diff --git a/docs/docs/html/_modules/treeffuser/treeffuser.html b/docs/docs/html/_modules/treeffuser/treeffuser.html new file mode 100644 index 00000000..fa5cc0ea --- /dev/null +++ b/docs/docs/html/_modules/treeffuser/treeffuser.html @@ -0,0 +1,458 @@ + + + + + + + + treeffuser.treeffuser - + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    + + + + + Back to top + +
    +
    + +
    + +
    +
    +

    Source code for treeffuser.treeffuser

    +from __future__ import annotations
    +
    +from typing import Literal
    +
    +from treeffuser._base_tabular_diffusion import BaseTabularDiffusion
    +from treeffuser._score_models import LightGBMScoreModel
    +from treeffuser._score_models import ScoreModel
    +from treeffuser.sde import DiffusionSDE
    +from treeffuser.sde import get_diffusion_sde
    +
    +
    +
    +[docs] +class Treeffuser(BaseTabularDiffusion): + def __init__( + self, + n_repeats: int = 30, + n_estimators: int = 3000, + early_stopping_rounds: int | None = 50, + eval_percent: float = 0.1, + num_leaves: int = 31, + max_depth: int = -1, + learning_rate: float = 0.1, + max_bin: int = 255, + subsample_for_bin: int = 200000, + min_child_samples: int = 20, + subsample: float = 1.0, + subsample_freq: int = 0, + n_jobs: int = -1, + sde_name: str = "vesde", + sde_initialize_from_data: bool = False, + sde_hyperparam_min: float | Literal["default"] | None = None, + sde_hyperparam_max: float | Literal["default"] | None = None, + seed: int | None = None, + verbose: int = 0, + extra_lightgbm_params: dict | None = None, + ): + """ + n_repeats : int + How many times to repeat the training dataset when fitting the score. That is, how many + noisy versions of a point to generate for training. + n_estimators : int + LightGBM: Number of boosting iterations. + early_stopping_rounds : int + LightGBM: If `None`, no early stopping is performed. Otherwise, the model will stop training + if no improvement is observed in the validation set for `early_stopping_rounds` consecutive + iterations. + eval_percent : float + LightGBM: Percentage of the training data to use for validation if `early_stopping_rounds` + is not `None`. + num_leaves : int + LightGBM: Maximum tree leaves for base learners. + max_depth : int + LightGBM: Maximum tree depth for base learners, <=0 means no limit. + learning_rate : float + LightGBM: Boosting learning rate. + max_bin : int + LightGBM: Max number of bins that feature values will be bucketed in. This is used for + lightgbm's histogram binning algorithm. + subsample_for_bin : int + LightGBM: Number of samples for constructing bins. + min_child_samples : int + LightGBM: Minimum number of data needed in a child (leaf). If less than this number, will + not create the child. + subsample : float + LightGBM: Subsample ratio of the training instance. + subsample_freq : int + LightGBM: Frequency of subsample, <=0 means no enable. How often to subsample the training + data. + n_jobs : int + LightGBM: Number of parallel threads. If set to -1, the number is set to the number of available cores. + sde_name : str + SDE: Name of the SDE to use. See `treeffuser.sde.get_diffusion_sde` for available SDEs. + sde_initialize_from_data : bool + SDE: Whether to initialize the SDE from the data. If `True`, the SDE hyperparameters are + initialized with a heuristic based on the data (see `treeffuser.sde.initialize.py`). + Otherwise, sde_hyperparam_min and sde_hyperparam_max are used. (default: False) + sde_hyperparam_min : float or "default" + SDE: The scale of the SDE at t=0 (see `VESDE`, `VPSDE`, `SubVPSDE`). + sde_hyperparam_max : float or "default" + SDE: The scale of the SDE at t=T (see `VESDE`, `VPSDE`, `SubVPSDE`). + seed : int + Random seed for generating the training data and fitting the model. + verbose : int + Verbosity of the score model. + """ + super().__init__( + sde_initialize_from_data=sde_initialize_from_data, + ) + self.sde_name = sde_name + self.n_repeats = n_repeats + self.n_estimators = n_estimators + self.eval_percent = eval_percent + self.early_stopping_rounds = early_stopping_rounds + self.num_leaves = num_leaves + self.max_depth = max_depth + self.learning_rate = learning_rate + self.max_bin = max_bin + self.subsample_for_bin = subsample_for_bin + self.min_child_samples = min_child_samples + self.subsample = subsample + self.subsample_freq = subsample_freq + self.n_jobs = n_jobs + self.seed = seed + self.verbose = verbose + self.sde_initialize_from_data = sde_initialize_from_data + self.sde_hyperparam_min = sde_hyperparam_min + self.sde_hyperparam_max = sde_hyperparam_max + self.extra_lightgbm_params = extra_lightgbm_params or {} + +
    +[docs] + def get_new_sde(self) -> DiffusionSDE: + sde_cls = get_diffusion_sde(self.sde_name) + sde_kwargs = {} + if self.sde_hyperparam_min is not None: + sde_kwargs["hyperparam_min"] = self.sde_hyperparam_min + if self.sde_hyperparam_max is not None: + sde_kwargs["hyperparam_max"] = self.sde_hyperparam_max + sde = sde_cls(**sde_kwargs) + return sde
    + + +
    +[docs] + def get_new_score_model(self) -> ScoreModel: + score_model = LightGBMScoreModel( + n_repeats=self.n_repeats, + n_estimators=self.n_estimators, + eval_percent=self.eval_percent, + early_stopping_rounds=self.early_stopping_rounds, + num_leaves=self.num_leaves, + max_depth=self.max_depth, + learning_rate=self.learning_rate, + max_bin=self.max_bin, + subsample_for_bin=self.subsample_for_bin, + min_child_samples=self.min_child_samples, + subsample=self.subsample, + subsample_freq=self.subsample_freq, + verbose=self.verbose, + seed=self.seed, + n_jobs=self.n_jobs, + **self.extra_lightgbm_params, + ) + return score_model
    + + + @property + def n_estimators_true(self) -> list[int]: + """ + The number of estimators that are actually used in the models (after early stopping), + one for each dimension of the score (i.e. the dimension of y). + """ + return self.score_model.n_estimators_true
    + +
    +
    +
    +
    + + +
    +
    + + Made with Sphinx and @pradyunsg's + + Furo + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + + + + + diff --git a/docs/docs/html/_sources/getting-started.rst.txt b/docs/docs/html/_sources/getting-started.rst.txt new file mode 100644 index 00000000..38fb5ae5 --- /dev/null +++ b/docs/docs/html/_sources/getting-started.rst.txt @@ -0,0 +1,121 @@ +==================== +Treeffuser +==================== + +.. raw:: html + + + GitHub repo stars + + + PyPI version + + + PyPI - Downloads + + + arXiv + + + Documentation +
    +
    + + +Treeffuser is an easy-to-use package for **probabilistic prediction on tabular data with tree-based diffusion models**. +It estimates distributions of the form ``p(y|x)`` where ``x`` is a feature vector and ``y`` is a target vector. +Treeffuser can model conditional distributions ``p(y|x)`` that are arbitrarily complex (e.g., multimodal, heteroscedastic, non-gaussian, heavy-tailed, etc.). + +It is designed to adhere closely to the scikit-learn API and require minimal user tuning. + +Treeffuser is detailed in the paper: `Treeffuser: Probabilistic Predictions via Conditional Diffusions with Gradient-Boosted Trees `_. + +Installation +============ + +You can install Treeffuser via pip from PyPI with the following command: + +.. code-block:: bash + + pip install treeffuser + +You can also install the development version with: + +.. code-block:: bash + + pip install git+https://github.com/blei-lab/tree-diffuser.git@main + +Usage Example +============= + +Here's a simple example demonstrating how to use Treeffuser. + +We generate an heteroscedastic response with two sinusoidal components and heavy tails. + +.. code-block:: python + + import matplotlib.pyplot as plt + import numpy as np + from treeffuser import Treeffuser, Samples + + # Generate data + seed = 0 + rng = np.random.default_rng(seed=seed) + n = 5000 + x = rng.uniform(0, 2 * np.pi, size=n) + z = rng.integers(0, 2, size=n) + y = z * np.sin(x - np.pi / 2) + (1 - z) * np.cos(x) + rng.laplace(scale=x / 30, size=n) + +We fit Treeffuser and generate samples. We then plot the samples against the raw data. + +.. code-block:: python + + # Fit the model + model = Treeffuser(seed=seed) + model.fit(x, y) + + # Generate and plot samples + y_samples = model.sample(x, n_samples=1, seed=seed, verbose=True) + plt.scatter(x, y, s=1, label="observed data") + plt.scatter(x, y_samples[0, :], s=1, alpha=0.7, label="Treeffuser samples") + +.. image:: README_example.png + :alt: Treeffuser on heteroscedastic data with sinuisodal response and heavy tails. + :align: center + +Treeffuser accurately learns the target conditional densities and can generate samples from them. + +These samples can be used to compute any downstream estimates of interest. + +.. code-block:: python + + y_samples = model.sample(x, n_samples=100, verbose=True) # y_samples.shape[0] is 100 + + # Estimate downstream quantities of interest + y_mean = y_samples.mean(axis=0) # conditional mean for each x + y_std = y_samples.std(axis=0) # conditional std for each x + +For convenience, we also provide a class ``Samples`` that can estimate standard quantities. + +.. code-block:: python + + y_samples = Samples(y_samples) + y_mean = y_samples.sample_mean() # same as before + y_std = y_samples.sample_std() # same as before + y_quantiles = y_samples.sample_quantile(q=[0.05, 0.95]) # conditional quantiles for each x + +Please take a look at the documentation for more information on the available methods and parameters. + +Citing Treeffuser +================= + +If you use Treeffuser or this codebase in your work, please cite the following paper: + +.. code-block:: bibtex + + @article{beltran2024treeffuser, + title={Treeffuser: Probabilistic Predictions via Conditional Diffusions with Gradient-Boosted Trees}, + author={Beltran-Velez, Nicolas and Grande, Alessandro Antonio and Nazaret, Achille and Kucukelbir, Alp and Blei, David}, + journal={arXiv preprint arXiv:2406.07658}, + year={2024} + } diff --git a/docs/docs/html/_sources/index.rst.txt b/docs/docs/html/_sources/index.rst.txt new file mode 100644 index 00000000..fa4d4fe8 --- /dev/null +++ b/docs/docs/html/_sources/index.rst.txt @@ -0,0 +1,29 @@ +.. treeffuser documentation master file, created by + sphinx-quickstart on Sun Jun 23 01:48:09 2024. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +.. raw:: html + + + +treeffuser +========== +Welcome to `treeffuser` documentation! + +`treeffuser` forms probabilistic predictions using conditional diffusions and gradient-boosted trees. + + +.. toctree:: + :maxdepth: 2 + + Getting started + Tutorials + modules + Release notes + +.. indices and tables +.. ================== +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` diff --git a/docs/docs/html/_sources/modules.rst.txt b/docs/docs/html/_sources/modules.rst.txt new file mode 100644 index 00000000..ec58539f --- /dev/null +++ b/docs/docs/html/_sources/modules.rst.txt @@ -0,0 +1,8 @@ +API Reference +============= + +.. toctree:: + :maxdepth: 1 + + treeffuser + samples diff --git a/docs/docs/html/_sources/release-notes.rst.txt b/docs/docs/html/_sources/release-notes.rst.txt new file mode 100644 index 00000000..c356e679 --- /dev/null +++ b/docs/docs/html/_sources/release-notes.rst.txt @@ -0,0 +1,4 @@ +Release notes +============= + +Coming soon! diff --git a/docs/docs/html/_sources/samples.rst.txt b/docs/docs/html/_sources/samples.rst.txt new file mode 100644 index 00000000..2909426e --- /dev/null +++ b/docs/docs/html/_sources/samples.rst.txt @@ -0,0 +1,11 @@ +Samples +======= + +Module contents +--------------- + +.. automodule:: treeffuser.samples + :members: + :undoc-members: + :show-inheritance: + :inherited-members: diff --git a/docs/docs/html/_sources/treeffuser.rst.txt b/docs/docs/html/_sources/treeffuser.rst.txt new file mode 100644 index 00000000..4116e4a3 --- /dev/null +++ b/docs/docs/html/_sources/treeffuser.rst.txt @@ -0,0 +1,11 @@ +Treeffuser +========== + +Module contents +--------------- + +.. automodule:: treeffuser.treeffuser + :members: + :undoc-members: + :show-inheritance: + :inherited-members: diff --git a/docs/docs/html/_sources/tutorials.rst.txt b/docs/docs/html/_sources/tutorials.rst.txt new file mode 100644 index 00000000..b135cbf7 --- /dev/null +++ b/docs/docs/html/_sources/tutorials.rst.txt @@ -0,0 +1,7 @@ +Tutorials +========= + +.. toctree:: + :maxdepth: 2 + + tutorials/README_example diff --git a/docs/docs/html/_sources/tutorials/README_example.ipynb.txt b/docs/docs/html/_sources/tutorials/README_example.ipynb.txt new file mode 100644 index 00000000..05fcf404 --- /dev/null +++ b/docs/docs/html/_sources/tutorials/README_example.ipynb.txt @@ -0,0 +1,209 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quick start: Forecasting with synthetic data\n", + "\n", + "In this notebook, we train Treeffuser on synthethic data and then visualize both the original and model-generated samples to explore how well Treeffuser captures the underlying distribution of the data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting started" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We first install `treeffuser` and import the relevant libraries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install treeffuser\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "from treeffuser import Treeffuser" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We simulate a non-linear, bimodal response of $y$ given $x$, where the two modes follow two different response functions: one is a sine function and the other is a cosine function over $x$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "seed = 0 # fixing the random seed for reproducibility\n", + "n = 5000 # number of data points\n", + "\n", + "rng = np.random.default_rng(seed=seed)\n", + "x = rng.uniform(0, 2 * np.pi, size=n) # x values in the range [0, 2π)\n", + "z = rng.integers(0, 2, size=n) # response function assignments\n", + "\n", + "y = z * np.sin(x - np.pi / 2) + (1 - z) * np.cos(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also introduce heteroscedastic, fat-tailed noise from a Laplace distribution, meaning the variability of $y$ increases with $x$ and may result in large outliers." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "y += rng.laplace(scale=x / 30, size=n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fitting Treffuser and producing samples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Fitting Treeffuser and generating samples is very simple, as Treeffuser adheres to the `sklearn.base.BaseEstimator` class. Fitting amounts to initializing the model and calling the `fit` method, just like any `scikit-learn` estimator. Samples are then generated using the `sample` method." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "model = Treeffuser(sde_initialize_from_data=True, seed=seed)\n", + "model.fit(x, y)\n", + "\n", + "y_samples = model.sample(x, n_samples=1, seed=seed, verbose=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting the samples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We create a scatter plot to visualize both the original data and the samples produced by Treeffuser. The samples closely reflect the underlying response distributions that generated the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.scatter(x, y, s=1, label=\"observed data\")\n", + "plt.scatter(x, y_samples[0, :], s=1, alpha=0.7, label=\"Treeffuser samples\")\n", + "\n", + "plt.xlabel(\"$x$\")\n", + "plt.ylabel(\"$y$\")\n", + "\n", + "legend = plt.legend(loc=\"upper center\", scatterpoints=1, bbox_to_anchor=(0.5, -0.125), ncol=2)\n", + "for legend_handle in legend.legend_handles:\n", + " legend_handle.set_sizes([32]) # change marker size for legend\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The samples generated by Treeffuser can be used to compute any downstream estimates of interest." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = np.array(np.pi).reshape((1, 1))\n", + "y_samples = model.sample(x, n_samples=100, verbose=True) # y_samples.shape[0] is 100\n", + "\n", + "# Estimate downstream quantities of interest\n", + "y_mean = y_samples.mean(axis=0) # conditional mean for each x\n", + "y_std = y_samples.std(axis=0) # conditional std for each x\n", + "\n", + "print(f\"Mean of the samples: {y_mean}\")\n", + "print(f\"Standard deviation of the samples: {y_std} \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For convenience, we also provide a class Samples that can estimate standard quantities." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from treeffuser.samples import Samples\n", + "\n", + "y_samples = Samples(y_samples)\n", + "y_mean = y_samples.sample_mean() # same as before\n", + "y_std = y_samples.sample_std() # same as before\n", + "y_quantiles = y_samples.sample_quantile(q=[0.05, 0.95]) # conditional quantiles for each x\n", + "\n", + "print(f\"Mean of the samples: {y_mean}\")\n", + "print(f\"Standard deviation of the samples: {y_std} \")\n", + "print(f\"5th and 95th quantiles of the samples: {y_quantiles.reshape(-1)}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/html/_static/basic.css b/docs/docs/html/_static/basic.css new file mode 100644 index 00000000..91cf78fe --- /dev/null +++ b/docs/docs/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} diff --git a/docs/docs/html/_static/debug.css b/docs/docs/html/_static/debug.css new file mode 100644 index 00000000..74d4aec3 --- /dev/null +++ b/docs/docs/html/_static/debug.css @@ -0,0 +1,69 @@ +/* + This CSS file should be overridden by the theme authors. It's + meant for debugging and developing the skeleton that this theme provides. +*/ +body { + font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + background: lavender; +} +.sb-announcement { + background: rgb(131, 131, 131); +} +.sb-announcement__inner { + background: black; + color: white; +} +.sb-header { + background: lightskyblue; +} +.sb-header__inner { + background: royalblue; + color: white; +} +.sb-header-secondary { + background: lightcyan; +} +.sb-header-secondary__inner { + background: cornflowerblue; + color: white; +} +.sb-sidebar-primary { + background: lightgreen; +} +.sb-main { + background: blanchedalmond; +} +.sb-main__inner { + background: antiquewhite; +} +.sb-header-article { + background: lightsteelblue; +} +.sb-article-container { + background: snow; +} +.sb-article-main { + background: white; +} +.sb-footer-article { + background: lightpink; +} +.sb-sidebar-secondary { + background: lightgoldenrodyellow; +} +.sb-footer-content { + background: plum; +} +.sb-footer-content__inner { + background: palevioletred; +} +.sb-footer { + background: pink; +} +.sb-footer__inner { + background: salmon; +} +.sb-article { + background: white; +} diff --git a/docs/docs/html/_static/doctools.js b/docs/docs/html/_static/doctools.js new file mode 100644 index 00000000..4d67807d --- /dev/null +++ b/docs/docs/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/docs/html/_static/documentation_options.js b/docs/docs/html/_static/documentation_options.js new file mode 100644 index 00000000..a1e9248a --- /dev/null +++ b/docs/docs/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.1.3', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; diff --git a/docs/docs/html/_static/file.png b/docs/docs/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/docs/html/_static/language_data.js b/docs/docs/html/_static/language_data.js new file mode 100644 index 00000000..434cd3d5 --- /dev/null +++ b/docs/docs/html/_static/language_data.js @@ -0,0 +1,198 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} diff --git a/docs/docs/html/_static/logo.svg b/docs/docs/html/_static/logo.svg new file mode 100644 index 00000000..4590ed73 --- /dev/null +++ b/docs/docs/html/_static/logo.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + diff --git a/docs/docs/html/_static/minus.png b/docs/docs/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/docs/docs/html/_static/nbsphinx-broken-thumbnail.svg b/docs/docs/html/_static/nbsphinx-broken-thumbnail.svg new file mode 100644 index 00000000..4919ca88 --- /dev/null +++ b/docs/docs/html/_static/nbsphinx-broken-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/docs/docs/html/_static/nbsphinx-code-cells.css b/docs/docs/html/_static/nbsphinx-code-cells.css new file mode 100644 index 00000000..f3547347 --- /dev/null +++ b/docs/docs/html/_static/nbsphinx-code-cells.css @@ -0,0 +1,258 @@ +/* remove conflicting styling from Sphinx themes */ +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt *, +div.nbinput.container div.input_area pre, +div.nboutput.container div.output_area pre, +div.nbinput.container div.input_area .highlight, +div.nboutput.container div.output_area .highlight { + border: none; + padding: 0; + margin: 0; + box-shadow: none; +} + +div.nbinput.container > div[class*=highlight], +div.nboutput.container > div[class*=highlight] { + margin: 0; +} + +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt * { + background: none; +} + +div.nboutput.container div.output_area .highlight, +div.nboutput.container div.output_area pre { + background: unset; +} + +div.nboutput.container div.output_area div.highlight { + color: unset; /* override Pygments text color */ +} + +/* avoid gaps between output lines */ +div.nboutput.container div[class*=highlight] pre { + line-height: normal; +} + +/* input/output containers */ +div.nbinput.container, +div.nboutput.container { + display: -webkit-flex; + display: flex; + align-items: flex-start; + margin: 0; + width: 100%; +} +@media (max-width: 540px) { + div.nbinput.container, + div.nboutput.container { + flex-direction: column; + } +} + +/* input container */ +div.nbinput.container { + padding-top: 5px; +} + +/* last container */ +div.nblast.container { + padding-bottom: 5px; +} + +/* input prompt */ +div.nbinput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nbinput.container div.prompt pre > code { + color: #307FC1; +} + +/* output prompt */ +div.nboutput.container div.prompt pre, +/* for sphinx_immaterial theme: */ +div.nboutput.container div.prompt pre > code { + color: #BF5B3D; +} + +/* all prompts */ +div.nbinput.container div.prompt, +div.nboutput.container div.prompt { + width: 4.5ex; + padding-top: 5px; + position: relative; + user-select: none; +} + +div.nbinput.container div.prompt > div, +div.nboutput.container div.prompt > div { + position: absolute; + right: 0; + margin-right: 0.3ex; +} + +@media (max-width: 540px) { + div.nbinput.container div.prompt, + div.nboutput.container div.prompt { + width: unset; + text-align: left; + padding: 0.4em; + } + div.nboutput.container div.prompt.empty { + padding: 0; + } + + div.nbinput.container div.prompt > div, + div.nboutput.container div.prompt > div { + position: unset; + } +} + +/* disable scrollbars and line breaks on prompts */ +div.nbinput.container div.prompt pre, +div.nboutput.container div.prompt pre { + overflow: hidden; + white-space: pre; +} + +/* input/output area */ +div.nbinput.container div.input_area, +div.nboutput.container div.output_area { + -webkit-flex: 1; + flex: 1; + overflow: auto; +} +@media (max-width: 540px) { + div.nbinput.container div.input_area, + div.nboutput.container div.output_area { + width: 100%; + } +} + +/* input area */ +div.nbinput.container div.input_area { + border: 1px solid #e0e0e0; + border-radius: 2px; + /*background: #f5f5f5;*/ +} + +/* override MathJax center alignment in output cells */ +div.nboutput.container div[class*=MathJax] { + text-align: left !important; +} + +/* override sphinx.ext.imgmath center alignment in output cells */ +div.nboutput.container div.math p { + text-align: left; +} + +/* standard error */ +div.nboutput.container div.output_area.stderr { + background: #fdd; +} + +/* ANSI colors */ +.ansi-black-fg { color: #3E424D; } +.ansi-black-bg { background-color: #3E424D; } +.ansi-black-intense-fg { color: #282C36; } +.ansi-black-intense-bg { background-color: #282C36; } +.ansi-red-fg { color: #E75C58; } +.ansi-red-bg { background-color: #E75C58; } +.ansi-red-intense-fg { color: #B22B31; } +.ansi-red-intense-bg { background-color: #B22B31; } +.ansi-green-fg { color: #00A250; } +.ansi-green-bg { background-color: #00A250; } +.ansi-green-intense-fg { color: #007427; } +.ansi-green-intense-bg { background-color: #007427; } +.ansi-yellow-fg { color: #DDB62B; } +.ansi-yellow-bg { background-color: #DDB62B; } +.ansi-yellow-intense-fg { color: #B27D12; } +.ansi-yellow-intense-bg { background-color: #B27D12; } +.ansi-blue-fg { color: #208FFB; } +.ansi-blue-bg { background-color: #208FFB; } +.ansi-blue-intense-fg { color: #0065CA; } +.ansi-blue-intense-bg { background-color: #0065CA; } +.ansi-magenta-fg { color: #D160C4; } +.ansi-magenta-bg { background-color: #D160C4; } +.ansi-magenta-intense-fg { color: #A03196; } +.ansi-magenta-intense-bg { background-color: #A03196; } +.ansi-cyan-fg { color: #60C6C8; } +.ansi-cyan-bg { background-color: #60C6C8; } +.ansi-cyan-intense-fg { color: #258F8F; } +.ansi-cyan-intense-bg { background-color: #258F8F; } +.ansi-white-fg { color: #C5C1B4; } +.ansi-white-bg { background-color: #C5C1B4; } +.ansi-white-intense-fg { color: #A1A6B2; } +.ansi-white-intense-bg { background-color: #A1A6B2; } + +.ansi-default-inverse-fg { color: #FFFFFF; } +.ansi-default-inverse-bg { background-color: #000000; } + +.ansi-bold { font-weight: bold; } +.ansi-underline { text-decoration: underline; } + + +div.nbinput.container div.input_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight].math, +div.nboutput.container div.output_area.rendered_html, +div.nboutput.container div.output_area > div.output_javascript, +div.nboutput.container div.output_area:not(.rendered_html) > img{ + padding: 5px; + margin: 0; +} + +/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ +div.nbinput.container div.input_area > div[class^='highlight'], +div.nboutput.container div.output_area > div[class^='highlight']{ + overflow-y: hidden; +} + +/* hide copy button on prompts for 'sphinx_copybutton' extension ... */ +.prompt .copybtn, +/* ... and 'sphinx_immaterial' theme */ +.prompt .md-clipboard.md-icon { + display: none; +} + +/* Some additional styling taken form the Jupyter notebook CSS */ +.jp-RenderedHTMLCommon table, +div.rendered_html table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +.jp-RenderedHTMLCommon thead, +div.rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +.jp-RenderedHTMLCommon tr, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon td, +div.rendered_html tr, +div.rendered_html th, +div.rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +.jp-RenderedHTMLCommon th, +div.rendered_html th { + font-weight: bold; +} +.jp-RenderedHTMLCommon tbody tr:nth-child(odd), +div.rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +.jp-RenderedHTMLCommon tbody tr:hover, +div.rendered_html tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} diff --git a/docs/docs/html/_static/nbsphinx-gallery.css b/docs/docs/html/_static/nbsphinx-gallery.css new file mode 100644 index 00000000..365c27a9 --- /dev/null +++ b/docs/docs/html/_static/nbsphinx-gallery.css @@ -0,0 +1,31 @@ +.nbsphinx-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 5px; + margin-top: 1em; + margin-bottom: 1em; +} + +.nbsphinx-gallery > a { + padding: 5px; + border: 1px dotted currentColor; + border-radius: 2px; + text-align: center; +} + +.nbsphinx-gallery > a:hover { + border-style: solid; +} + +.nbsphinx-gallery img { + max-width: 100%; + max-height: 100%; +} + +.nbsphinx-gallery > a > div:first-child { + display: flex; + align-items: start; + justify-content: center; + height: 120px; + margin-bottom: 5px; +} diff --git a/docs/docs/html/_static/nbsphinx-no-thumbnail.svg b/docs/docs/html/_static/nbsphinx-no-thumbnail.svg new file mode 100644 index 00000000..9dca7588 --- /dev/null +++ b/docs/docs/html/_static/nbsphinx-no-thumbnail.svg @@ -0,0 +1,9 @@ + + + + diff --git a/docs/docs/html/_static/plus.png b/docs/docs/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/docs/docs/html/_static/pygments.css b/docs/docs/html/_static/pygments.css new file mode 100644 index 00000000..1fd41443 --- /dev/null +++ b/docs/docs/html/_static/pygments.css @@ -0,0 +1,258 @@ +.highlight pre { line-height: 125%; } +.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ +@media not print { +body[data-theme="dark"] .highlight pre { line-height: 125%; } +body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight .hll { background-color: #404040 } +body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } +body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ +body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ +body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ +body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ +body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ +body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ +body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ +body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body[data-theme="dark"] .highlight .gd { color: #ff3a3a } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body[data-theme="dark"] .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body[data-theme="dark"] .highlight .gr { color: #ff3a3a } /* Generic.Error */ +body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ +body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ +body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body[data-theme="dark"] .highlight .gt { color: #ff3a3a } /* Generic.Traceback */ +body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */ +body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */ +body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */ +body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */ +body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */ +body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */ +body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */ +body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +@media (prefers-color-scheme: dark) { +body:not([data-theme="light"]) .highlight pre { line-height: 125%; } +body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } +body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 } +body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */ +body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */ +body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */ +body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */ +body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */ +body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */ +body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */ +body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body:not([data-theme="light"]) .highlight .gd { color: #ff3a3a } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body:not([data-theme="light"]) .highlight .gr { color: #ff3a3a } /* Generic.Error */ +body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ +body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ +body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body:not([data-theme="light"]) .highlight .gt { color: #ff3a3a } /* Generic.Traceback */ +body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */ +body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */ +body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */ +body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */ +body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */ +body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */ +body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */ +body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +} +} diff --git a/docs/docs/html/_static/scripts/furo-extensions.js b/docs/docs/html/_static/scripts/furo-extensions.js new file mode 100644 index 00000000..e69de29b diff --git a/docs/docs/html/_static/scripts/furo.js b/docs/docs/html/_static/scripts/furo.js new file mode 100644 index 00000000..9686a279 --- /dev/null +++ b/docs/docs/html/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={856:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(856),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+2.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +//# sourceMappingURL=furo.js.map diff --git a/docs/docs/html/_static/scripts/furo.js.LICENSE.txt b/docs/docs/html/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 00000000..1632189c --- /dev/null +++ b/docs/docs/html/_static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/docs/docs/html/_static/scripts/furo.js.map b/docs/docs/html/_static/scripts/furo.js.map new file mode 100644 index 00000000..ee8b33d0 --- /dev/null +++ b/docs/docs/html/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 2.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} diff --git a/docs/docs/html/_static/searchtools.js b/docs/docs/html/_static/searchtools.js new file mode 100644 index 00000000..92da3f8b --- /dev/null +++ b/docs/docs/html/_static/searchtools.js @@ -0,0 +1,619 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/docs/html/_static/skeleton.css b/docs/docs/html/_static/skeleton.css new file mode 100644 index 00000000..467c878c --- /dev/null +++ b/docs/docs/html/_static/skeleton.css @@ -0,0 +1,296 @@ +/* Some sane resets. */ +html { + height: 100%; +} + +body { + margin: 0; + min-height: 100%; +} + +/* All the flexbox magic! */ +body, +.sb-announcement, +.sb-content, +.sb-main, +.sb-container, +.sb-container__inner, +.sb-article-container, +.sb-footer-content, +.sb-header, +.sb-header-secondary, +.sb-footer { + display: flex; +} + +/* These order things vertically */ +body, +.sb-main, +.sb-article-container { + flex-direction: column; +} + +/* Put elements in the center */ +.sb-header, +.sb-header-secondary, +.sb-container, +.sb-content, +.sb-footer, +.sb-footer-content { + justify-content: center; +} +/* Put elements at the ends */ +.sb-article-container { + justify-content: space-between; +} + +/* These elements grow. */ +.sb-main, +.sb-content, +.sb-container, +article { + flex-grow: 1; +} + +/* Because padding making this wider is not fun */ +article { + box-sizing: border-box; +} + +/* The announcements element should never be wider than the page. */ +.sb-announcement { + max-width: 100%; +} + +.sb-sidebar-primary, +.sb-sidebar-secondary { + flex-shrink: 0; + width: 17rem; +} + +.sb-announcement__inner { + justify-content: center; + + box-sizing: border-box; + height: 3rem; + + overflow-x: auto; + white-space: nowrap; +} + +/* Sidebars, with checkbox-based toggle */ +.sb-sidebar-primary, +.sb-sidebar-secondary { + position: fixed; + height: 100%; + top: 0; +} + +.sb-sidebar-primary { + left: -17rem; + transition: left 250ms ease-in-out; +} +.sb-sidebar-secondary { + right: -17rem; + transition: right 250ms ease-in-out; +} + +.sb-sidebar-toggle { + display: none; +} +.sb-sidebar-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + + transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; + + opacity: 0; + background-color: rgba(0, 0, 0, 0.54); +} + +#sb-sidebar-toggle--primary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], +#sb-sidebar-toggle--secondary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { + width: 100%; + height: 100%; + opacity: 1; + transition: width 0ms ease, height 0ms ease, opacity 250ms ease; +} + +#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { + left: 0; +} +#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { + right: 0; +} + +/* Full-width mode */ +.drop-secondary-sidebar-for-full-width-content + .hide-when-secondary-sidebar-shown { + display: none !important; +} +.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { + display: none !important; +} + +/* Mobile views */ +.sb-page-width { + width: 100%; +} + +.sb-article-container, +.sb-footer-content__inner, +.drop-secondary-sidebar-for-full-width-content .sb-article, +.drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 100vw; +} + +.sb-article, +.match-content-width { + padding: 0 1rem; + box-sizing: border-box; +} + +@media (min-width: 32rem) { + .sb-article, + .match-content-width { + padding: 0 2rem; + } +} + +/* Tablet views */ +@media (min-width: 42rem) { + .sb-article-container { + width: auto; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 42rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 46rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 46rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 50rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 50rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Tablet views */ +@media (min-width: 59rem) { + .sb-sidebar-secondary { + position: static; + } + .hide-when-secondary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 63rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 67rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Desktop views */ +@media (min-width: 76rem) { + .sb-sidebar-primary { + position: static; + } + .hide-when-primary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} + +/* Full desktop views */ +@media (min-width: 80rem) { + .sb-article, + .match-content-width { + width: 46rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } +} + +@media (min-width: 84rem) { + .sb-article, + .match-content-width { + width: 50rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } +} + +@media (min-width: 88rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-page-width { + width: 88rem; + } +} diff --git a/docs/docs/html/_static/sphinx_highlight.js b/docs/docs/html/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/docs/docs/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/docs/html/_static/styles/furo-extensions.css b/docs/docs/html/_static/styles/furo-extensions.css new file mode 100644 index 00000000..0c2199de --- /dev/null +++ b/docs/docs/html/_static/styles/furo-extensions.css @@ -0,0 +1,2 @@ +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +/*# sourceMappingURL=furo-extensions.css.map*/ diff --git a/docs/docs/html/_static/styles/furo-extensions.css.map b/docs/docs/html/_static/styles/furo-extensions.css.map new file mode 100644 index 00000000..6af2f247 --- /dev/null +++ b/docs/docs/html/_static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} diff --git a/docs/docs/html/_static/styles/furo.css b/docs/docs/html/_static/styles/furo.css new file mode 100644 index 00000000..c48c2db3 --- /dev/null +++ b/docs/docs/html/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;clip:rect(0,0,0,0)!important;background:var(--color-background-primary);border:0!important;color:var(--color-foreground-primary);white-space:nowrap!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-stack--headings:var(--font-stack);--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#6b6f76;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#0a4bff;--color-brand-content:#2757dd;--color-brand-visited:#872ee0;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-api-added:#21632c;--color-api-added-border:#38a84d;--color-api-changed:#046172;--color-api-changed-border:#06a1bc;--color-api-deprecated:#605706;--color-api-deprecated-border:#f0d90f;--color-api-removed:#b30000;--color-api-removed-border:#ff5c5c;--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link--hover:var(--color-brand-content);--color-link-underline--hover:var(--color-foreground-border);--color-link--visited:var(--color-brand-visited);--color-link-underline--visited:var(--color-background-border);--color-link--visited--hover:var(--color-brand-visited);--color-link-underline--visited--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:block}@media(prefers-color-scheme:dark){body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-dark{display:block}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:none}}body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-family:var(--font-stack--headings);font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:visited{color:var(--color-link--visited);text-decoration-color:var(--color-link-underline--visited)}a:visited:hover{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link:hover:visited{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{height:100%}.skip-to-content,body,html{background:var(--color-background-primary);color:var(--color-foreground-primary)}.skip-to-content{border-radius:1rem;left:.25rem;padding:1rem;position:fixed;top:.25rem;transform:translateY(-200%);transition:transform .3s ease-in-out;z-index:40}.skip-to-content:focus-within{transform:translateY(0)}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1.25rem;vertical-align:middle;width:1.25rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1.25rem;width:1.25rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg,.content-icon-container .view-this-page svg{color:inherit;height:1.25rem;width:1.25rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{height:1rem;width:1rem;fill:currentColor;display:inline-block}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:calc(var(--header-height) + 2.5rem)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:4.25rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}div.deprecated,div.versionadded,div.versionchanged,div.versionremoved{border-left:.1875rem solid;border-radius:.125rem;padding-left:.75rem}div.deprecated p,div.versionadded p,div.versionchanged p,div.versionremoved p{margin-bottom:.125rem;margin-top:.125rem}div.versionadded{border-color:var(--color-api-added-border)}div.versionadded .versionmodified{color:var(--color-api-added)}div.versionchanged{border-color:var(--color-api-changed-border)}div.versionchanged .versionmodified{color:var(--color-api-changed)}div.deprecated{border-color:var(--color-api-deprecated-border)}div.deprecated .versionmodified{color:var(--color-api-deprecated)}div.versionremoved{border-color:var(--color-api-removed-border)}div.versionremoved .versionmodified{color:var(--color-api-removed)}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>:not(span),div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:2.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(2.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(2.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover);color:var(--color-sidebar-link-text)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23607D8B' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Cpath stroke='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree a.reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling. Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*# sourceMappingURL=furo.css.map*/ diff --git a/docs/docs/html/_static/styles/furo.css.map b/docs/docs/html/_static/styles/furo.css.map new file mode 100644 index 00000000..e9e81ac3 --- /dev/null +++ b/docs/docs/html/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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AEE,CAJJ,gBAEE,CAJE,iBAMA,yFAQA,aACA,eEpbJ,cACE,iBACA,YAEA,CAFA,iBAEA,+DAGA,mBAKA,gCAGA,CARA,SAIA,SACA,CALA,0EAIA,CAJA,OAQA,0CACE,UAGF,iDAGF,CAHE,UAGF,8CAEE,CAFF,UAEE,CACA,uCAEA,WACA,WAFA,UAEA,6CAIA,yCACA,WAGA,WAJA,UAIA,gDACE,aASF,0CACE,CAFF,mBAEE,wEACA,CATA,YACA,CAKF,kBACA,CALE,MAGJ,CAII,eACA,CAJF,iCALE,cACA,CAHA,oBACA,CAKJ,SAKI,2BADA,UACA,6BAEJ,WACE,0DACA,kBACE,gCACA,mBADA,YACA,oEACA,2CAMF,mDAII,CAJJ,aADF,cACE,kBAII,kEACA,iBACE,mEACA,6BACE,wBADF,cACE,mCACA,qDANN,kCACE,6BAEE,mBADF,0CACE,CAFF,eACA,MACE,0DACA,wCACE,sGACA,WANN,yBACE,uCACA,CAFF,UAEE,2CACE,0FACA,cACE,kEACA,mEANN,yBACE,4DACA,sBACE,+EAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kEAGA,8CAEA,uDAIF,gEAIE,6BACA,gEAIA,+CACE,0EAIF,sDAEE,+DAGF,sCACA,8BACE,oC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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/variables/_layout.scss","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto-light\n display: block\n\n @media (prefers-color-scheme: dark)\n .theme-toggle svg.theme-icon-when-auto-dark\n display: block\n .theme-toggle svg.theme-icon-when-auto-light\n display: none\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n --font-stack--headings: var(--font-stack);\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #6b6f76; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #0a4bff;\n --color-brand-content: #2757dd;\n --color-brand-visited: #872ee0;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n\n --color-api-added: #21632c;\n --color-api-added-border: #38a84d;\n --color-api-changed: #046172;\n --color-api-changed-border: #06a1bc;\n --color-api-deprecated: #605706;\n --color-api-deprecated-border: #f0d90f;\n --color-api-removed: #b30000;\n --color-api-removed-border: #ff5c5c;\n\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline--hover: var(--color-foreground-border);\n\n --color-link--visited: var(--color-brand-visited);\n --color-link-underline--visited: var(--color-background-border);\n --color-link--visited--hover: var(--color-brand-visited);\n --color-link-underline--visited--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #cfd0d0; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #3d94ff;\n --color-brand-content: #5ca5ff;\n --color-brand-visited: #b27aeb;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n --color-api-added: #3db854;\n --color-api-added-border: #267334;\n --color-api-changed: #09b0ce;\n --color-api-changed-border: #056d80;\n --color-api-deprecated: #b1a10b;\n --color-api-deprecated-border: #6e6407;\n --color-api-removed: #ff7575;\n --color-api-removed-border: #b03b3b;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-family: var(--font-stack--headings)\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:visited\n color: var(--color-link--visited)\n text-decoration-color: var(--color-link-underline--visited)\n &:hover\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &:visited\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\n$icon-size: 1.25rem\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n.skip-to-content\n position: fixed\n padding: 1rem\n border-radius: 1rem\n left: 0.25rem\n top: 0.25rem\n z-index: 40\n background: var(--color-background-primary)\n color: var(--color-foreground-primary)\n\n transform: translateY(-200%)\n transition: transform 300ms ease-in-out\n\n &:focus-within\n transform: translateY(0%)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: $icon-size\n width: $icon-size\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: $icon-size\n width: $icon-size\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page, .view-this-page\n svg\n color: inherit\n height: $icon-size\n width: $icon-size\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: $icon-size\n width: $icon-size\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: calc(var(--header-height) + 2.5rem)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","// Overall Layout Variables\n//\n// Because CSS variables can't be used in media queries. The fact that this\n// makes the layout non-user-configurable is a good thing.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$full-width: $content-width + 2 * ($content-padding + $sidebar-width);\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 4.25rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\ndiv.versionadded,\ndiv.versionchanged,\ndiv.deprecated,\ndiv.versionremoved\n border-left: 0.1875rem solid\n border-radius: 0.125rem\n\n padding-left: 0.75rem\n\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\ndiv.versionadded\n border-color: var(--color-api-added-border)\n .versionmodified\n color: var(--color-api-added)\n\ndiv.versionchanged\n border-color: var(--color-api-changed-border)\n .versionmodified\n color: var(--color-api-changed)\n\ndiv.deprecated\n border-color: var(--color-api-deprecated-border)\n .versionmodified\n color: var(--color-api-deprecated)\n\ndiv.versionremoved\n border-color: var(--color-api-removed-border)\n .versionmodified\n color: var(--color-api-removed)\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > *:not(span),\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 2.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(2.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(2.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n color: var(--color-sidebar-link-text)\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the