From 5915ac44404784467c269790bb0af80f854e67d2 Mon Sep 17 00:00:00 2001 From: alexander-schranz Date: Thu, 23 Nov 2023 09:43:50 +0000 Subject: [PATCH] deploy: 2c0a91b2fca97e9e97f84c97beeabaf65751e4c0 --- .buildinfo | 4 + .../cookbooks/create-own-adapter.doctree | Bin 0 -> 62769 bytes .doctrees/cookbooks/index.doctree | Bin 0 -> 4486 bytes .doctrees/environment.pickle | Bin 0 -> 691822 bytes .doctrees/getting-started/index.doctree | Bin 0 -> 186773 bytes .doctrees/index.doctree | Bin 0 -> 27431 bytes .doctrees/indexing/index.doctree | Bin 0 -> 28493 bytes .doctrees/research/index.doctree | Bin 0 -> 83540 bytes .doctrees/schema/index.doctree | Bin 0 -> 87125 bytes .doctrees/search-and-filters/index.doctree | Bin 0 -> 32528 bytes .nojekyll | 0 _images/overview.svg | 98 + _sources/cookbooks/create-own-adapter.rst.txt | 610 +++++ _sources/cookbooks/index.rst.txt | 16 + _sources/getting-started/index.rst.txt | 2130 +++++++++++++++++ _sources/index.rst.txt | 104 + _sources/indexing/index.rst.txt | 285 +++ _sources/research/index.rst.txt | 344 +++ _sources/schema/index.rst.txt | 791 ++++++ _sources/search-and-filters/index.rst.txt | 333 +++ _static/basic.css | 903 +++++++ _static/css/custom.css | 101 + _static/debug.css | 69 + _static/doctools.js | 156 ++ _static/documentation_options.js | 14 + _static/favicon.ico | Bin 0 -> 15086 bytes _static/file.png | Bin 0 -> 286 bytes _static/icons/favicon.ico | Bin 0 -> 15086 bytes _static/icons/logo.png | Bin 0 -> 82455 bytes _static/language_data.js | 199 ++ _static/logo.png | Bin 0 -> 82455 bytes _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 258 ++ _static/scripts/furo-extensions.js | 0 _static/scripts/furo.js | 3 + _static/scripts/furo.js.LICENSE.txt | 7 + _static/scripts/furo.js.map | 1 + _static/searchtools.js | 566 +++++ _static/skeleton.css | 296 +++ _static/sphinx_highlight.js | 144 ++ _static/styles/furo-extensions.css | 2 + _static/styles/furo-extensions.css.map | 1 + _static/styles/furo.css | 2 + _static/styles/furo.css.map | 1 + _static/tabs.css | 89 + _static/tabs.js | 145 ++ cookbooks/create-own-adapter.html | 903 +++++++ cookbooks/index.html | 297 +++ genindex.html | 268 +++ getting-started/index.html | 2018 ++++++++++++++++ index.html | 399 +++ indexing/index.html | 546 +++++ objects.inv | Bin 0 -> 388 bytes research/index.html | 672 ++++++ schema/index.html | 1065 +++++++++ search-and-filters/index.html | 599 +++++ search.html | 276 +++ searchindex.js | 1 + 59 files changed, 14716 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/cookbooks/create-own-adapter.doctree create mode 100644 .doctrees/cookbooks/index.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/getting-started/index.doctree create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/indexing/index.doctree create mode 100644 .doctrees/research/index.doctree create mode 100644 .doctrees/schema/index.doctree create mode 100644 .doctrees/search-and-filters/index.doctree create mode 100644 .nojekyll create mode 100644 _images/overview.svg create mode 100644 _sources/cookbooks/create-own-adapter.rst.txt create mode 100644 _sources/cookbooks/index.rst.txt create mode 100644 _sources/getting-started/index.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/indexing/index.rst.txt create mode 100644 _sources/research/index.rst.txt create mode 100644 _sources/schema/index.rst.txt create mode 100644 _sources/search-and-filters/index.rst.txt create mode 100644 _static/basic.css create mode 100644 _static/css/custom.css create mode 100644 _static/debug.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/favicon.ico create mode 100644 _static/file.png create mode 100644 _static/icons/favicon.ico create mode 100644 _static/icons/logo.png create mode 100644 _static/language_data.js create mode 100644 _static/logo.png create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/scripts/furo-extensions.js create mode 100644 _static/scripts/furo.js create mode 100644 _static/scripts/furo.js.LICENSE.txt create mode 100644 _static/scripts/furo.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/skeleton.css create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/styles/furo-extensions.css create mode 100644 _static/styles/furo-extensions.css.map create mode 100644 _static/styles/furo.css create mode 100644 _static/styles/furo.css.map create mode 100644 _static/tabs.css create mode 100644 _static/tabs.js create mode 100644 cookbooks/create-own-adapter.html create mode 100644 cookbooks/index.html create mode 100644 genindex.html create mode 100644 getting-started/index.html create mode 100644 index.html create mode 100644 indexing/index.html create mode 100644 objects.inv create mode 100644 research/index.html create mode 100644 schema/index.html create mode 100644 search-and-filters/index.html create mode 100644 search.html create mode 100644 searchindex.js diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..d1e6c7ff --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 2b6f0c64ed69c907caad67d17f1cdbca +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/cookbooks/create-own-adapter.doctree b/.doctrees/cookbooks/create-own-adapter.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3507d2a8030e867de14618fe90b4250fc2ee2051 GIT binary patch literal 62769 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 PjwMNOZ<3T+Gh_cBzc`sh literal 0 HcmV?d00001 diff --git a/.doctrees/cookbooks/index.doctree b/.doctrees/cookbooks/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e9e4b98262064dd24645423359ab04796a360364 GIT binary patch literal 4486 zcmds5TZ<#d6<+U*q>*Mcvs!0|!0tG0jN@H0l1$=<5VCnOVG}kxfyIQFV0ud3B~_v7 zu1;NMBpXBW;IISr<~D&m<|)6z;J5scK>kL)>YG~1E^M4UWkAq%s_Imo?|kP{^M}q? zpN(!6f9^zQjHjy!iQ`npROjv>mXS?pYVt4hM}N#e&mX$JBG+14717+?!itD-5i6SJ zpXBb?FE?E1NwvSHX=J!eo9(Q_x~%s}{*d)u$8aNPYs&RMlyW)4Pv?FS*6e>oSN`z! z)E9YqlWs2fwK0195#u_ja1A1v8p6|n z;7f=S>_E-~MI)Y39n7T)q+wJAhUlf9l(?R{|58ik0@yz-?Z04ed6e1r04;kPu6qZ+ zckz1*W&4H&ti0I-Ct zkX%bE;y~~v&X&NM20)OO;5}rg?$K-CHQylhxQ&!|FBk=_DFUeuF2L~Qe`H%t1Fc<$c+PhC)O;^*MP8c^ z&p(Q+5Ro)k$Ut5pSRzG<;pqa*o)OI>(AcM;AR`OJRqA=Jf;qX8iW?ft6*8L7TIYje zcOqjxU;FJbof9hzwi~Zb`|N^ae(Ceod61ASD^?MMh?O|(87hYeiljOqXLic@9+OF*0y3%w__3Mp(o%M zMMOI}^eS}f;NAmPEft@)RlGW!J)b`Vi!|cy)ZKeI)Eka&UF`KZ+HY~Rj}}2DnY3x# zGNtSS*ez6385u>}Ik1|mW4I32Ix^XPcd}DAQN_U$#f#c~;T~+JizuLDd7X|)Ofn#v z|0yT#h^LXTpf(r99`-ll4id78X=WJ08(jew`^E)5#6rkfe&f1~$1(bx8#kG7;&2%Rf9^-2ienbE=(oPxuss^{z zgR;AEit9I~xANSUuvL%;(6m=_rYOv4J6_G2rmJG--ikNeab%V6zrv>5I;tgQ*X0iC zoRPax(;3bcS{4d2xbAO=uz(yx&$%7lVmQIS8r?FNj9X4r8fy5hjf5My<{sN*^@o!JGB zJH93=MSjEzB<=)~zHfV|H!6SOj(M6{6QWx{Von$6hpm~9e>~P4-w(DYL#mWiAw%{R zAP^h}+ai;@6KT!1mQJB1cV{~@J1W>e-EpaObAfv6gYAi(o$ih|Km#QPd;|>2-B6Hp zVNr$vcZ~6E1eJRe?Uz(>hzJBZaEuS;3)e-1JBN*cgU4Zp8q8NY>$+oNjSM#;cbkJz z!`LQS*su<$76J~!sgww>@T8Cc+EjbrZ$z1{GOU(`b=GmG{tJg_s{9(b*K3R6??a@GW(ajYiJmDsPcIQ2JoY5?78WV5Kk(Z$0)6hqT`)=KpL98d)+Ax_;q*_dKch9dZ zE`XJxp$Xh$;En^x$M3%X0q{Il^JquCmu%F3zgCY(B~_a~;nd8FGZ6DrW)gwJ`i9I9 zLb1=T2ks1nOu{BM8v{a}d4}A$J9>?G%_?Mk!32IF@4k?p_eVM*h_c^X1hocGZx-Wn z7z!DYGNHS(h~f1V!SQ9V0p$Wh>|WXoNBFmDk*TXBfV2(?Pv_u3ofYo-Jb^N~vyLa8 zyh4&P6#XM}nS(Q^0WsotjVmyUR`$l-i?C`L(u8mk;#sX|@zi|bM%4ojWEJx=r`@129Isf26fE8Y2Do|Y59DG7~1B|!1wF^ z>Ktqiy5)5@1xOOD6}pBI2Lb$L zpud#(2(8zZmu^eSb$D~b)yYhXh7HBi@9YSh)%`7v{rc2m)7>ro$h6A%)P8SQS2cr5 zjrQt;K+&L;l?i$led literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..256acf2d110a07ee2f47ed3b0818a13fff0fcb34 GIT binary patch literal 691822 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≶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%0DdLG&XB+(WzCuFh#2kXcXq~u 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 literal 0 HcmV?d00001 diff --git a/.doctrees/getting-started/index.doctree b/.doctrees/getting-started/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..76777c974423dad8415fb4a3206c723ae243a140 GIT binary patch literal 186773 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 L#~7+TTKxY3c4stH literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0cafb431ffd31ceab67131d0ea33f30ff91cbfd9 GIT binary patch literal 27431 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 Os1FXhEAk8ApZ_yL0cIyEAv^ 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 literal 0 HcmV?d00001 diff --git a/.doctrees/search-and-filters/index.doctree b/.doctrees/search-and-filters/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b13c04da8815019a09311a262912d4053157677b GIT binary patch literal 32528 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 + + +Created with Fabric.js 5.3.0 + + + + + + + + + + MeilisearchOpensearchElasticsearchAlgoliaLoupeRedisearchSolrTypesense + + + + + + + + + Engine + + Schema + + + + + + Adapter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Documents + + + SEAL + + SearchEngines + + + + + + + + diff --git a/_sources/cookbooks/create-own-adapter.rst.txt b/_sources/cookbooks/create-own-adapter.rst.txt new file mode 100644 index 00000000..d4e5c77d --- /dev/null +++ b/_sources/cookbooks/create-own-adapter.rst.txt @@ -0,0 +1,610 @@ +Create own Adapter +================== + +In this part of the documentation describes how to create an own adapter. +Before you start with it let us know via an `issue `__ +if it maybe an Adapter which make sense to add to the SEAL core and we can work together to get it in it. + +Install dependencies +-------------------- + +To create your own Adapter you need atleast the SEAL composer package: + +.. code-block:: bash + + composer require schranz-search/seal + +The project already ships a test suite based on PHPUnit to use it you need to install PHPUnit: + + composer require phpunit/phpunit:"^9.6" + +Create Basic Classes +-------------------- + +An own Adapter depends on the following classes which are responsible for all different operations: + +- ``Adapter`` + - ``SchemaManager`` (create and drop indexes) + - ``Indexer`` (save and delete documents) + - ``Searcher`` (search documents) +- ``AdapterFactory`` + +Create Adapter +~~~~~~~~~~~~~~ + +The Adapter is the main entry point for the own Adapter and provides access to the ``SchemaManager``, ``Indexer`` and ``Searcher``. + +.. code-block:: php + + schemaManager = $schemaManager ?? new MySchemaManager($client); + $this->indexer = $indexer ?? new MyIndexer($client); + $this->searcher = $searcher ?? new MySearcher($client); + } + + public function getSchemaManager(): SchemaManagerInterface + { + return $this->schemaManager; + } + + public function getIndexer(): IndexerInterface + { + return $this->indexer; + } + + public function getSearcher(): SearcherInterface + { + return $this->searcher; + } + } + +Create SchemaManager +~~~~~~~~~~~~~~~~~~~~ + +The ``SchemaManager`` is responsible for creating and dropping indexes. + +.. code-block:: php + + marshaller = new Marshaller(); + } + + public function save(Index $index, array $document, array $options = []): ?TaskInterface + { + // TODO we will tackle this later + } + + public function delete(Index $index, string $identifier, array $options = []): ?TaskInterface + { + // TODO we will tackle this later + } + } + +The ``Marshaller`` is responsible for converting the document into an easier Format to index documents. +There exists 2 ``Marshaller``the ``Marshaller`` which keeps nested objects and the ``FlattenMarshaller`` +which flatten nested objects to the root by using ``.`` as divider. + +Create Searcher +~~~~~~~~~~~~~~~ + +The ``Searcher`` is responsible for searching documents. + +.. code-block:: php + + marshaller = new Marshaller(); + } + + public function search(Search $search): Result + { + // TODO we will tackle this later + } + } + +The ``Searcher`` requires the same Marshaller as the ``Indexer`` to convert the document back to the original format. + +Create AdapterFactory +~~~~~~~~~~~~~~~~~~~~~ + +The ``AdapterFactory`` is responsible for creating the ``Adapter`` mostly used by +integrations into Frameworks Dependency Injection container and constructing the +``Adapter`` via a DSN string. + +.. code-block:: php + + createClient($dsn); + + return new MyAdapter($client); + } + + /** + * @internal + * + * @param array{ + * host: string, + * port?: int, + * user?: string, + * pass?: string, + * } $dsn + */ + public function createClient(array $dsn): SearchClient + { + if ('' === $dsn['host']) { + $client = $this->container?->get(Client::class); + + return $client; + } + + $client = new Client( + $dsn['host'] . ':' . ($dsn['port'] ?? 9200),+ + $dsn['user'] ?? '', + $pass = $dsn['pass'] ?? '', + ); + + return $client; + } + + public static function getName(): string + { + return 'my'; + } + } + +Creating Tests +-------------- + +The easiest way to create an own Adapter is following TDD (Test Driven Development) and use the shipped TestSuite. + +For this we will create the following new files: + + - ``tests/MySchemaManagerTest.php`` + - ``tests/MyAdapterTest.php`` + - ``tests/MyIndexerTest.php`` + - ``tests/MySearcherTest.php`` + +For most adapters they require a Third Party client to make constructing of that Client +easier we will create a ``ClientHelper`` class in our new test suite. + +.. code-block:: php + + markTestSkipped('Not supported by MyOwnSearchEngine: https://github.com/.../.../issues/28'); + } + } + +Implementing Logic +------------------ + +Now we can begin to implement the logic for our own Adapter. + +Implementing SchemaManager +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``SchemaManager`` is the required way to start to implement as all other Services +depending on it that it works. + +The SchemaManager is responsible for create and drop indexes and configure the Index +fields correctly based on their type and defined options. How this can be achieved +is different from Search Engine to Search Engine. + +Read the :doc:`../schema/index` documentation to get an overview of the different field types which exists. + +.. code-block:: php + + vendor/bin/phpunit --filter="SchemaManagerTest" + +Now you can step by step implementing the SchemaManager methods. + +Examples for different ``SchemaManager`` can be found in the official Repository: + +- `AlgoliaSchemaManager `__ +- `ElasticsearchSchemaManager `__ +- `OpensearchSchemaManager `__ +- `MeilisearchSchemaManager `__ +- `LoupeSchemaManager `__ +- `RediSearchSchemaManager `__ +- `SolrSchemaManager `__ +- `TypesenseSchemaManager `__ +- `MemorySchemaManager `__ + +Implementing the Indexer +~~~~~~~~~~~~~~~~~~~~~~~~ + +After the ``SchemaManager`` works like expected we will continue with the ``Indexer``. +This is responsible to save and delete documents from the Search Engine. How this can be achieved +is different from Search Engine to Search Engine. + +.. note:: + + The ``IndexerTest`` requires a basic ``Searcher`` implementation to work. See next ``Implementing the Searcher`` section. + +Examples for different ``Indexer`` can be found in the official Repository: + +- `AlgoliaIndexer `__ +- `ElasticsearchIndexer `__ +- `OpensearchIndexer `__ +- `MeilisearchIndexer `__ +- `LoupeIndexer `__ +- `RediSearchIndexer `__ +- `SolrIndexer `__ +- `TypesenseIndexer `__ +- `MemoryIndexer `__ + +Implementing the Searcher +~~~~~~~~~~~~~~~~~~~~~~~~~ + +A Basic ``Searcher`` implementation is required that we can test the ``Indexer`` as we need +a way to load a document by its identifier. How this can be achieved is different from +Search Engine to Search Engine. A common way is the following example: + +.. code-block:: php + + marshaller = new Marshaller(); + } + + public function search(Search $search): Result + { + // optimized single document query + if ( + 1 === \count($search->indexes) + && 1 === \count($search->filters) + && $search->filters[0] instanceof Condition\IdentifierCondition + && 0 === $search->offset + && 1 === $search->limit + ) { + $singleDocumentIndexName = $search->indexes[\array_key_first($search->indexes)]->name; + $singleDocumentIdentifier = $search->filters[0]->identifier; + + try { + $data = $this->client->index($singleDocumentIndexName)->getDocument($singleDocumentIdentifier); + } catch (ApiException $e) { + if (404 !== $e->httpStatus) { + throw $e; + } + + return new Result( + $this->hitsToDocuments($search->indexes, []), + 0, + ); + } + + return new Result( + $this->hitsToDocuments($search->indexes, [$data]), + 1, + ); + } + + // TODO + } + + /** + * @param Index[] $indexes + * @param iterable> $hits + * + * @return \Generator> + */ + private function hitsToDocuments(array $indexes, iterable $hits): \Generator + { + $index = $indexes[\array_key_first($indexes)]; + + foreach ($hits as $hit) { + yield $this->marshaller->unmarshall($index->fields, $hit); + } + } + } + +.. code-block:: php + + vendor/bin/phpunit --filter="IndexerTest" + +If that works like expected we can continue with the ``SearcherTest``: + +.. code-block:: php + + vendor/bin/phpunit --filter="SearcherTest" + +This is the most difficult part to implement all different conditions. How this can be achieved +is different from Search Engine to Search Engine. + +Read the :doc:`../search-and-filters/index` documentation to get an overview of the different searches and filters which exists. + +Examples for different ``Searcher`` can be found in the official Repository: + +- `AlgoliaSearcher `__ +- `ElasticsearchSearcher `__ +- `OpensearchSearcher `__ +- `MeilisearchSearcher `__ +- `LoupeSearcher `__ +- `RediSearchSearcher `__ +- `SolrSearcher `__ +- `TypesenseSearcher `__ +- `MemorySearcher `__ + +Conclusion +---------- + +If all tests are green you can be sure that your implementation works like expected. +You can publish your own adapter also as a composer package if you want to make it public available. + +Tag the packagist package with `seal-adapter `__ +and your use the Github Topic `seal-php-adapter `__. + +This way also other can easily find your own created adapter. diff --git a/_sources/cookbooks/index.rst.txt b/_sources/cookbooks/index.rst.txt new file mode 100644 index 00000000..ed2aad71 --- /dev/null +++ b/_sources/cookbooks/index.rst.txt @@ -0,0 +1,16 @@ +Cookbooks +========= + +This section contain a collection of recipes for other tasks. + +Let us know via the issue tracker on our `Github Repository `_. +if you have a recipe you would like to see here. + +This can go over creating a basic search page in your favorite framework, +over modifying default settings of an Index, mapping data to a Model class +and over connecting Index updates to your favorite ``ORM`` or persistent layer. + +.. toctree:: + :maxdepth: 1 + + create-own-adapter diff --git a/_sources/getting-started/index.rst.txt b/_sources/getting-started/index.rst.txt new file mode 100644 index 00000000..4e5c72c7 --- /dev/null +++ b/_sources/getting-started/index.rst.txt @@ -0,0 +1,2130 @@ +Getting Started +=============== + +Lets get started with the **Search Engine Abstraction Layer** library for PHP. + +In this part we will show how you can start using SEAL in your project and its basic functions. + +Installation +------------ + +To install the package you need to use `Composer `_ as the packages are registered there. +Depending on your project you can decide to use already existing ``Framework`` +integration of the package or the ``Standalone`` version. + +.. tabs:: + + .. group-tab:: Standalone use + + If you want to use standalone version use the following package: + + .. code-block:: bash + + composer require schranz-search/seal + + .. group-tab:: Laravel + + If you are using `Laravel `_ use the following packages: + + .. code-block:: bash + + composer require schranz-search/laravel-package + + .. group-tab:: Symfony + + If you are using `Symfony `_ use the following packages: + + .. code-block:: bash + + composer require schranz-search/symfony-bundle + + .. group-tab:: Spiral + + If you are using `Spiral `_ use the following packages: + + .. code-block:: bash + + composer require schranz-search/spiral-bridge + + .. group-tab:: Mezzio + + If you are using `Mezzio `_ use the following packages: + + .. code-block:: bash + + composer require schranz-search/mezzio-module + + .. group-tab:: Yii + + If you are using `Yii `_ use the following packages: + + .. code-block:: bash + + composer require schranz-search/yii-module + +| The project provides adapters to different search engines, atleast one is required. +| Choose the one which fits your needs best: + +.. tabs:: + + .. group-tab:: Meilisearch + + Install the `Meilisearch `__ adapter: + + .. code-block:: bash + + composer require schranz-search/seal-meilisearch-adapter + + .. group-tab:: Algolia + + Install the `Algolia `__ adapter: + + .. code-block:: bash + + composer require schranz-search/seal-algolia-adapter + + .. group-tab:: Elasticsearch + + Install the `Elasticsearch `__ adapter: + + .. code-block:: bash + + composer require schranz-search/seal-elasticsearch-adapter + + .. group-tab:: Opensearch + + Install the `Opensearch `__ adapter: + + .. code-block:: bash + + composer require schranz-search/seal-opensearch-adapter + + .. group-tab:: Redisearch + + Install the `Redisearch `__ adapter: + + .. code-block:: bash + + composer require schranz-search/seal-redisearch-adapter + + .. group-tab:: Loupe + + Install the `Loupe `__ adapter: + + .. code-block:: bash + + composer require schranz-search/seal-loupe-adapter + + .. group-tab:: Solr + + Install the `Solr `__ adapter: + + .. code-block:: bash + + composer require schranz-search/seal-solr-adapter + + .. group-tab:: Typesense + + Install the `Typesense `__ adapter: + + .. code-block:: bash + + composer require schranz-search/seal-typesense-adapter + +Configure Schema +---------------- + +The ``Schema`` defines the different ``Indexes`` and their ``Fields``. +The definition of the fields depends on which data you want to store (text, int, float, ...) in the search engine +and what you want todo with it later (searchable, filterable, sortable, ...). + +In this section we will create a first schema for our ``Index``: + +.. tabs:: + + .. group-tab:: Standalone use + + When using the ``Standalone`` version you need to create a new ``Index`` + instance as part of the ``Schema``: + + .. code-block:: php + + new Index('blog', [ + 'id' => new Field\IdentifierField('id'), + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'tags' => new Field\TextField('tags', multiple: true, filterable: true), + ]), + ]); + + .. group-tab:: Laravel + + If you are using Laravel create a new ``Index`` in the ``resources/schemas`` directory: + + .. code-block:: php + + new Field\IdentifierField('id'), + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'tags' => new Field\TextField('tags', multiple: true, filterable: true), + ]); + + .. group-tab:: Symfony + + If you are using Symfony create a new ``Index`` in the ``resources/schemas`` directory: + + .. code-block:: php + + new Field\IdentifierField('id'), + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'tags' => new Field\TextField('tags', multiple: true, filterable: true), + ]); + + .. group-tab:: Spiral + + If you are using Spiral create a new ``Index`` in the ``resources/schemas`` directory: + + .. code-block:: php + + new Field\IdentifierField('id'), + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'tags' => new Field\TextField('tags', multiple: true, filterable: true), + ]); + + .. group-tab:: Mezzio + + If you are using Mezzio create a new ``Index`` in the ``config/schemas`` directory: + + .. code-block:: php + + new Field\IdentifierField('id'), + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'tags' => new Field\TextField('tags', multiple: true, filterable: true), + ]); + + .. group-tab:: Yii + + If you are using Yii create a new ``Index`` in the ``config/schemas`` directory: + + .. code-block:: php + + new Field\IdentifierField('id'), + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'tags' => new Field\TextField('tags', multiple: true, filterable: true), + ]); + +For a full list of available fields see the :doc:`../schema/index` documentation. The +only required field is the ``IdentifierField`` which can appear only once per index. + +Configure Engine +---------------- + +In the next step we will create the engine which will be use our created ``Schema``. +The ``Engine`` is the main class which will be used to communicate with the search engine. +So for all kind of operations like add, remove, search, filter, drop, create, ... we need to use the ``Engine``. + +It requires an instance of the ``Adapter`` which we did install before to connect to the correct Search engine. + +.. tabs:: + + .. group-tab:: Standalone use + + When using the ``Standalone`` version we need to create a new instance of ``Engine`` + class to create it. The ``Engine`` requires beside the already created ``Schema`` also + an instance of ``Adapter`` which will be used to communicate with the search engine. + + .. tabs:: + + .. group-tab:: Meilisearch + + Use the following code to create a new ``Engine`` using the ``Meilisearch`` adapter: + + .. code-block:: php + + setHosts([ + '127.0.0.1:9200' + ])->build() + + $engine = new Engine( + new ElasticsearchAdapter($client), + $schema, + ); + + .. group-tab:: Opensearch + + Use the following code to create a new ``Engine`` using the ``Opensearch`` adapter: + + .. code-block:: php + + setHosts([ + '127.0.0.1:9200' + ])->build() + + $engine = new Engine( + new OpensearchAdapter($client), + $schema, + ); + + .. group-tab:: Redisearch + + Use the following code to create a new ``Engine`` using the ``Redisearch`` adapter: + + .. code-block:: php + + '127.0.0.1', + 'port' => 6379, + 'auth' => ['phpredis', 'phpredis'], + ]); + + $engine = new Engine( + new RediSearchAdapter($redis), + $schema, + ); + + .. group-tab:: Loupe + + Use the following code to create a new ``Engine`` using the ``Loupe`` adapter: + + .. code-block:: php + + [ + 'localhost' => [ + 'host' => '127.0.0.1', + 'port' => '8983', + // authenticated required for configset api https://solr.apache.org/guide/8_9/configsets-api.html + // alternative set solr.disableConfigSetsCreateAuthChecks=true in your server setup + 'username' => 'solr', + 'password' => 'SolrRocks', + ], + ] + ]); + + $engine = new Engine( + new SolrAdapter($client), + $schema, + ); + + .. group-tab:: Typesense + + Use the following code to create a new ``Engine`` using the ``Typesense`` adapter: + + .. code-block:: php + + 'S3CR3T', + 'nodes' => [ + [ + 'host' => '127.0.0.1', + 'port' => '8108', + 'protocol' => 'http', + ], + ], + 'client' => new CurlClient(Psr17FactoryDiscovery::findResponseFactory(), Psr17FactoryDiscovery::findStreamFactory()), + ] + ); + + $engine = new Engine( + new TypesenseAdapter($client), + $schema, + ); + + .. group-tab:: Laravel + + When we are using the Laravel integration package we just need to configure our ``Engine`` + in the ``config/schranz_search.php`` file. The ``Adapter`` is configured via a ``DSN`` like string. + + .. tabs:: + + .. group-tab:: Meilisearch + + Use the following configuration to use ``Meilisearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'meilisearch://127.0.0.1:7700', + ], + ], + ]; + + + .. group-tab:: Algolia + + Use the following configuration to use ``Algolia`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'algolia://' . env('ALGOLIA_APPLICATION_ID') . ':' . env('ALGOLIA_ADMIN_API_KEY'), + ], + ], + ]; + + .. group-tab:: Elasticsearch + + Use the following configuration to use ``Elasticsearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'elasticsearch://127.0.0.1:9200', + ], + ], + ]; + + .. group-tab:: Opensearch + + Use the following configuration to use ``Opensearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'opensearch://127.0.0.1:9200', + ], + ], + ]; + + .. group-tab:: Redisearch + + Use the following configuration to use ``Redisearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'redis://127.0.0.1:6379', + ], + ], + ]; + + .. group-tab:: Loupe + + Use the following configuration to use ``Loupe`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'loupe://var/indexes', + ], + ], + ]; + + .. group-tab:: Solr + + Use the following configuration to use ``Solr`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'solr://127.0.0.1:8983', + ], + ], + ]; + + .. group-tab:: Typesense + + Use the following configuration to use ``Typesense`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'typesense://S3CR3T@127.0.0.1:8108', + ], + ], + ]; + + .. note:: + + The ``Laravel`` integration provides also `Facades `__ for the later used default ``Engine`` + and ``EngineRegistry``. They are provided under the ``Schranz\Search\Integration\Laravel\Facade\`` + namespace. See also the `Laravel Integration README `__. + + .. group-tab:: Symfony + + When we are using the Symfony Bundle we just need to configure our ``Engine`` + in the ``config/packages/schranz_search.yaml`` file. The ``Adapter`` is configured + via a ``DSN`` like string. + + .. tabs:: + + .. group-tab:: Meilisearch + + Use the following configuration to use ``Meilisearch`` as your default ``Engine`` adapter: + + .. code-block:: yaml + + # config/packages/schranz_search.yaml + + schranz_search: + schemas: + default: + dir: '%kernel.project_dir%/config/schemas' + engines: + default: + adapter: 'meilisearch://127.0.0.1:7700' + + + .. group-tab:: Algolia + + Use the following configuration to use ``Algolia`` as your default ``Engine`` adapter: + + .. code-block:: yaml + + # config/packages/schranz_search.yaml + + schranz_search: + schemas: + default: + dir: '%kernel.project_dir%/config/schemas' + engines: + default: + adapter: 'algolia://%env(ALGOLIA_APPLICATION_ID)%:%env(ALGOLIA_ADMIN_API_KEY)%' + + .. group-tab:: Elasticsearch + + Use the following configuration to use ``Elasticsearch`` as your default ``Engine`` adapter: + + .. code-block:: yaml + + # config/packages/schranz_search.yaml + + schranz_search: + schemas: + default: + dir: '%kernel.project_dir%/config/schemas' + engines: + default: + adapter: 'elasticsearch://127.0.0.1:9200' + + .. group-tab:: Opensearch + + Use the following configuration to use ``Opensearch`` as your default ``Engine`` adapter: + + .. code-block:: yaml + + # config/packages/schranz_search.yaml + + schranz_search: + schemas: + default: + dir: '%kernel.project_dir%/config/schemas' + engines: + default: + adapter: 'opensearch://127.0.0.1:9200' + + .. group-tab:: Redisearch + + Use the following configuration to use ``Redisearch`` as your default ``Engine`` adapter: + + .. code-block:: yaml + + # config/packages/schranz_search.yaml + + schranz_search: + schemas: + default: + dir: '%kernel.project_dir%/config/schemas' + engines: + default: + adapter: 'redis://127.0.0.1:6379' + + .. group-tab:: Loupe + + Use the following configuration to use ``Loupe`` as your default ``Engine`` adapter: + + .. code-block:: yaml + + # config/packages/schranz_search.yaml + + schranz_search: + schemas: + default: + dir: '%kernel.project_dir%/config/schemas' + engines: + default: + adapter: 'loupe://var/indexes' + + .. group-tab:: Solr + + Use the following configuration to use ``Solr`` as your default ``Engine`` adapter: + + .. code-block:: yaml + + # config/packages/schranz_search.yaml + + schranz_search: + schemas: + default: + dir: '%kernel.project_dir%/config/schemas' + engines: + default: + adapter: 'solr://127.0.0.1:8983' + + .. group-tab:: Typesense + + Use the following configuration to use ``Typesense`` as your default ``Engine`` adapter: + + .. code-block:: yaml + + # config/packages/schranz_search.yaml + + schranz_search: + schemas: + default: + dir: '%kernel.project_dir%/config/schemas' + engines: + default: + adapter: 'typesense://S3CR3T@127.0.0.1:8108' + + .. group-tab:: Spiral + + When we are using the Spiral integration package we just need to configure our ``Engine`` + in the ``app/config/schranz_search.php`` file. The ``Adapter`` is configured via a ``DSN`` like string. + + .. tabs:: + + .. group-tab:: Meilisearch + + Use the following configuration to use ``Meilisearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'meilisearch://127.0.0.1:7700', + ], + ], + ]; + + + .. group-tab:: Algolia + + Use the following configuration to use ``Algolia`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'algolia://' . env('ALGOLIA_APPLICATION_ID') . ':' . env('ALGOLIA_ADMIN_API_KEY'), + ], + ], + ]; + + .. group-tab:: Elasticsearch + + Use the following configuration to use ``Elasticsearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'elasticsearch://127.0.0.1:9200', + ], + ], + ]; + + .. group-tab:: Opensearch + + Use the following configuration to use ``Opensearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'opensearch://127.0.0.1:9200', + ], + ], + ]; + + .. group-tab:: Redisearch + + Use the following configuration to use ``Redisearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'redis://127.0.0.1:6379', + ], + ], + ]; + + .. group-tab:: Loupe + + Use the following configuration to use ``Loupe`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'loupe://var/indexes', + ], + ], + ]; + + .. group-tab:: Solr + + Use the following configuration to use ``Solr`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'solr://127.0.0.1:8983', + ], + ], + ]; + + .. group-tab:: Typesense + + Use the following configuration to use ``Typesense`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'default' => [ + 'dir' => resource_path('schemas'), + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'typesense://S3CR3T@127.0.0.1:8108', + ], + ], + ]; + + .. group-tab:: Mezzio + + When we are using the Mezzio integration package we just need to configure our ``Engine`` + in the ``src/App/src/ConfigProvider.php`` file. The ``Adapter`` is configured via a ``DSN`` like string. + + .. tabs:: + + .. group-tab:: Meilisearch + + Use the following configuration to use ``Meilisearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'meilisearch://127.0.0.1:7700', + ], + ], + ], + ]; + } + } + + + .. group-tab:: Algolia + + Use the following configuration to use ``Algolia`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'algolia://' . \getenv('ALGOLIA_APPLICATION_ID') . ':' . \getenv('ALGOLIA_ADMIN_API_KEY'), + ], + ], + ], + ]; + } + } + + .. group-tab:: Elasticsearch + + Use the following configuration to use ``Elasticsearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'elasticsearch://127.0.0.1:9200', + ], + ], + ], + ]; + } + } + + .. group-tab:: Opensearch + + Use the following configuration to use ``Opensearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'opensearch://127.0.0.1:9200', + ], + ], + ], + ]; + } + } + + .. group-tab:: Redisearch + + Use the following configuration to use ``Redisearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'redis://127.0.0.1:6379', + ], + ], + ], + ]; + } + } + .. group-tab:: Loupe + + Use the following configuration to use ``Loupe`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'loupe://var/indexes', + ], + ], + ], + ]; + } + } + + .. group-tab:: Solr + + Use the following configuration to use ``Solr`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'solr://127.0.0.1:8983', + ], + ], + ], + ]; + } + } + + .. group-tab:: Typesense + + Use the following configuration to use ``Typesense`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'typesense://S3CR3T@127.0.0.1:8108', + ], + ], + ], + ]; + } + } + + .. group-tab:: Yii + + When we are using the Yii integration package we just need to configure our ``Engine`` + in the ``config/common/params.php`` file. The ``Adapter`` is configured via a ``DSN`` like string. + + .. tabs:: + + .. group-tab:: Meilisearch + + Use the following configuration to use ``Meilisearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'meilisearch://127.0.0.1:7700', + ], + ], + ], + ]; + + + .. group-tab:: Algolia + + Use the following configuration to use ``Algolia`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'algolia://' . \getenv('ALGOLIA_APPLICATION_ID') . ':' . \getenv('ALGOLIA_ADMIN_API_KEY'), + ], + ], + ], + ]; + + .. group-tab:: Elasticsearch + + Use the following configuration to use ``Elasticsearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'elasticsearch://127.0.0.1:9200', + ], + ], + ], + ]; + + .. group-tab:: Opensearch + + Use the following configuration to use ``Opensearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'opensearch://127.0.0.1:9200', + ], + ], + ], + ]; + + .. group-tab:: Redisearch + + Use the following configuration to use ``Redisearch`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'redis://127.0.0.1:6379', + ], + ], + ], + ]; + + .. group-tab:: Loupe + + Use the following configuration to use ``Loupe`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'loupe://var/indexes', + ], + ], + ], + ]; + + .. group-tab:: Solr + + Use the following configuration to use ``Solr`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'solr://127.0.0.1:8983', + ], + ], + ], + ]; + + .. group-tab:: Typesense + + Use the following configuration to use ``Typesense`` as your default ``Engine`` adapter: + + .. code-block:: php + + [ + 'schemas' => [ + 'default' => [ + 'dir' => 'config/schemas', + ], + ], + + 'engines' => [ + 'default' => [ + 'adapter' => 'typesense://S3CR3T@127.0.0.1:8108', + ], + ], + ], + ]; + +Prepare Search Engine +---------------------- + +If you already have your search engine running you can skip this step. Still we want to +provide here different `docker-compose `__ files to get you started quickly with your favorite +search engine. + +.. tabs:: + + .. group-tab:: Meilisearch + + A instance of `Meilisearch `__ can be started with the following docker-compose file: + + .. code-block:: yaml + + # docker-compose.yml + + services: + meilisearch: + image: getmeili/meilisearch:v1.5 + environment: + MEILI_ENV: development + ports: + - "7700:7700" + healthcheck: + test: ["CMD-SHELL", "curl --silent --fail localhost:7700/health || exit 1"] + interval: 5s + timeout: 5s + retries: 20 + volumes: + - meilisearch-data:/data.ms + + volumes: + meilisearch-data: + + To start the search engine run the following command: + + .. code-block:: bash + + docker-compose up + + Depending on the service after a few seconds up to a minute the service is ready to use. + And you can continue with the next step. + + .. group-tab:: Algolia + + As `Algolia `__ is SaaS, there is nothing to run it required. You can create a free account + at `https://www.algolia.com/users/sign_up `__. + After Signup you will get an ``ALGOLIA_APPLICATION_ID`` and an ``ALGOLIA_ADMIN_API_KEY``. + Which you need to configure that your engine adapter configuration will then use them like + above. + + .. group-tab:: Elasticsearch + + A instance of `Elasticsearch `__ can be started with the following docker-compose file: + + .. code-block:: yaml + + # docker-compose.yml + + services: + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0 + environment: + discovery.type: single-node + xpack.security.enabled: 'false' + cluster.routing.allocation.disk.threshold_enabled: 'false' + ports: + - "9200:9200" + healthcheck: + test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"] + interval: 5s + timeout: 5s + retries: 20 + volumes: + - elasticsearch-data:/usr/share/elasticsearch/data + + volumes: + elasticsearch-data: + + To start the search engine run the following command: + + .. code-block:: bash + + docker-compose up + + Depending on the service after a few seconds up to a minute the service is ready to use. + And you can continue with the next step. + + .. group-tab:: Opensearch + + A instance of `Opensearch `__ can be started with the following docker-compose file: + + .. code-block:: yaml + + # docker-compose.yml + + services: + opensearch: + image: opensearchproject/opensearch:2 + environment: + discovery.type: single-node + plugins.security.disabled: 'true' + cluster.routing.allocation.disk.threshold_enabled: 'false' + ports: + - "9200:9200" + healthcheck: + test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"] + interval: 5s + timeout: 5s + retries: 20 + volumes: + - opensearch-data:/usr/share/opensearch/data + + volumes: + opensearch-data: + + To start the search engine run the following command: + + .. code-block:: bash + + docker-compose up + + Depending on the service after a few seconds up to a minute the service is ready to use. + And you can continue with the next step. + + .. group-tab:: Redisearch + + A instance of `Redisearch `__ can be started with the following docker-compose file. + The here used `redis/redis-stack` image contains the required ``Redisearch`` + and ``JSON`` modules to run the search engine: + + .. code-block:: yaml + + # docker-compose.yml + + services: + redis: + image: redis/redis-stack:latest + ports: + - 6379:6379 # redis server + - 8001:8001 # redis insight + environment: + REDIS_ARGS: --requirepass supersecure + volumes: + - redisearch-data:/data + + volumes: + redisearch-data: + + To start the search engine run the following command: + + .. code-block:: bash + + docker-compose up + + Depending on the service after a few seconds up to a minute the service is ready to use. + And you can continue with the next step. + + .. group-tab:: Loupe + + As `Loupe `__ is PHP based build on top of SQLite, there is no service other service required to use it. + You just need to make sure that you have the required `sqlite php extension `__` installed. The + php package manager `composer `__ should already tell you if you are missing the extension. + + .. group-tab:: Solr + + A instance of `Solr `__ can be started with the following docker-compose file. + It uses the required cloud mode to run the search engine. Running it + without cloud mode is not supported yet: + + .. code-block:: yaml + + # docker-compose.yml + + services: + solr: + image: "solr:9" + ports: + - "8983:8983" + - "9983:9983" + command: solr -f -cloud + healthcheck: + test: ["CMD-SHELL", "curl --silent --fail localhost:8983 || exit 1"] + interval: 5s + timeout: 5s + retries: 20 + environment: + SOLR_OPTS: '-Dsolr.disableConfigSetsCreateAuthChecks=true' + volumes: + - solr-data:/var/solr + + zookeeper: + image: "solr:9" + depends_on: + - "solr" + network_mode: "service:solr" + environment: + SOLR_OPTS: '-Dsolr.disableConfigSetsCreateAuthChecks=true' + command: bash -c "set -x; export; wait-for-solr.sh; solr zk -z localhost:9983 upconfig -n default -d /opt/solr/server/solr/configsets/_default; tail -f /dev/null" + + volumes: + solr-data: + + To start the search engine run the following command: + + .. code-block:: bash + + docker-compose up + + Depending on the service after a few seconds up to a minute the service is ready to use. + And you can continue with the next step. + + .. group-tab:: Typesense + + A instance of `Typesense `__ can be started with the following docker-compose file: + + .. code-block:: yaml + + # docker-compose.yml + + services: + typesense: + image: typesense/typesense:0.24.1 + ports: + - "8108:8108" + environment: + TYPESENSE_DATA_DIR: /data + TYPESENSE_API_KEY: S3CR3T + healthcheck: + test: ["CMD-SHELL", "exit 0"] # TODO currently not working as curl not available: https://github.com/typesense/typesense/issues/441#issuecomment-1383157680 + interval: 5s + timeout: 5s + retries: 20 + volumes: + - typesense-data:/data + + volumes: + typesense-data: + + To start the search engine run the following command: + + .. code-block:: bash + + docker-compose up + + Depending on the service after a few seconds up to a minute the service is ready to use. + And you can continue with the next step. + +Create Indexes +-------------- + +Before you can use the search engine you need to create the indexes. + +.. tabs:: + + .. group-tab:: Standalone use + + When using the ``Standalone`` version you need to create the ``Indexes`` + in your search engines via the ``Engine`` instance which was created before: + + .. code-block:: php + + createSchema(); + + // create specific index + $engine->createIndex('blog'); + + .. group-tab:: Laravel + + To create the indexes in Laravel the following artisan command: + + .. code-block:: bash + + # create all indexes + php artisan schranz:search:index-create + + # create specific index + php artisan schranz:search:index-create --index=blog + + .. group-tab:: Symfony + + To create the indexes in Symfony the following console command: + + .. code-block:: bash + + # create all indexes + bin/console schranz:search:index-create + + # create specific index + bin/console schranz:search:index-create --index=blog + + .. group-tab:: Spiral + + To create the indexes in Spiral the following command: + + .. code-block:: bash + + # create all indexes + php app.php schranz:search:index-create + + # create specific index + php app.php schranz:search:index-create --index=blog + + .. group-tab:: Mezzio + + To create the indexes in Mezzio the following command: + + .. code-block:: bash + + # create all indexes + vendor/bin/laminas schranz:search:index-create + + # create specific index + vendor/bin/laminas schranz:search:index-create --index=blog + + .. group-tab:: Yii + + To create the indexes in Yii the following command: + + .. code-block:: bash + + # create all indexes + ./yii schranz:search:index-create + + # create specific index + ./yii schranz:search:index-create --index=blog + +Add or Update Documents +----------------------- + +A document in SEAL is a associative array following the structure of the defined Schema. +The only required field is the ``IdentifierField`` of the Schema. + +To add documents to the search engine you need to use the ``Engine`` instance. +With the following code we can add our first documents to our created index: + +.. code-block:: php + + engine->saveDocument('blog', [ + 'id' => 1, + 'title' => 'My first blog post', + 'description' => 'This is the description of my first blog post', + 'tags' => ['UI', 'UX'], + ]); + + $this->engine->saveDocument('blog', [ + 'id' => 3, + 'title' => 'My seconds blog post', + 'content' => 'This is the description of my second blog post', + 'tags' => ['Tech', 'UX'], + ]); + + $this->engine->saveDocument('blog', [ + 'id' => 3, + 'title' => 'My third blog post', + 'content' => 'This is the description of my third blog post', + 'tags' => ['Tech', 'UI'], + ]); + } + } + +To update a document you can use the same ``saveDocument`` method with the same identifier. + +For all kind of indexing operations have a look at the :doc:`../indexing/index` documentation. + +Search Documents +---------------- + +In this step we will now search for our documents via a search term. This way we +are calling a basic search with a given term to the configured search engine. And +get a result of all documents which match the search term (``first``) and a total count how +many exists in the given index. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new \Schranz\Search\SEAL\Search\Condition\SearchCondition('first')) + ->getResult(); + + foreach ($result as $document) { + // do something with the document + } + + $total = $result->total(); + } + } + +For all kind of search and filters have a look at the :doc:`../search-and-filters/index` documentation. + +Filter Documents +---------------- + +Not even searching but also filtering the documents are possible. In the following example +we will filter by the ``tags`` field and get all documents which have the tag ``UI``. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new \Schranz\Search\SEAL\Search\Condition\EqualCondition('tags', 'UI')); + ->getResult(); + + foreach ($result as $document) { + // do something with the document + } + + $total = $result->total(); + } + } + +For all kind of search and filters have a look at the :doc:`../search-and-filters/index` documentation. + +Reindex Documents +----------------- + +If you have changed the schema or need to index or reindex all your documents +the reindex functionality can be used. + +First you need to create a ``ReindexProvider`` providing all your documents. + +.. code-block:: php + + 1, + 'title' => 'Title 1', + 'description' => 'Description 1', + ]; + + yield [ + 'id' => 2, + 'title' => 'Title 2', + 'description' => 'Description 2', + ]; + } + + public static function getIndex(): string + { + return 'blog'; + } + } + +After that you can use the ``reindex`` to index all documents: + +.. tabs:: + + .. group-tab:: Standalone use + + When using the ``Standalone`` version you need to reindex the documents + in your search engines via the ``Engine`` instance which was created before: + + .. code-block:: php + + reindex($reindexProviders); + + // reindex specific index and drop data before + $engine->reindex($reindexProviders, 'blog', dropIndex: true); + + .. group-tab:: Laravel + + In Laravel the new created ``ReindexProvider`` need to be tagged correctly: + + .. code-block:: php + + app->singleton(\App\Search\BlogReindexProvider::class, fn () => new \App\Search\BlogReindexProvider()); + + $this->app->tag(\App\Search\BlogReindexProvider::class, 'schranz_search.reindex_provider'); + } + } + + After correctly tagging the ``ReindexProvider`` with ``schranz_search.reindex_provider`` the + ``schranz:search:reindex`` command can be used to index all documents: + + .. code-block:: bash + + # reindex all indexes + php artisan schranz:search:reindex + + # reindex specific index and drop data before + php artisan schranz:search:reindex --index=blog --drop + + .. group-tab:: Symfony + + In Symfony the ``autoconfigure`` feature should already tag the new ``ReindexProvider`` correctly + with the ``schranz_search.reindex_provider`` tag. If not you can tag it manually: + + .. code-block:: yaml + + # config/services.yaml + + services: + App\Search\BlogReindexProvider: + tags: + - { name: schranz_search.reindex_provider } + + After correctly tagging the ``ReindexProvider`` use the following command to index all documents: + + .. code-block:: bash + + # reindex all indexes + bin/console schranz:search:reindex + + # reindex specific index and drop data before + bin/console schranz:search:reindex --index=blog --drop + + .. group-tab:: Spiral + + In Spiral the new created ``ReindexProvider`` need to be registered correctly as reindex provider: + + .. code-block:: php + + [ + \App\Search\BlogReindexProvider::class, + ], + ]; + + After correctly registering the ``ReindexProvider`` use the following command to index all documents: + + .. code-block:: bash + + # reindex all indexes + php app.php schranz:search:reindex + + # reindex specific index and drop data before + php app.php schranz:search:reindex --index=blog --drop + + .. group-tab:: Mezzio + + In Mezzio the new created ``ReindexProvider`` need to be registered correctly as reindex provider: + + .. code-block:: php + + [ + // ... + 'reindex_providers' => [ + \App\Search\BlogReindexProvider::class, + ], + ], + ]; + } + + public function getDependencies(): array + { + return [ + // ... + + 'invokables' => [ + \App\Search\BlogReindexProvider::class => \App\Search\BlogReindexProvider::class, + ], + + // ... + ]; + } + } + + After correctly registering the ``ReindexProvider`` use the following command to index all documents: + + .. code-block:: bash + + # reindex all indexes + vendor/bin/laminas schranz:search:reindex + + # reindex specific index and drop data before + vendor/bin/laminas schranz:search:reindex --index=blog --drop + + .. group-tab:: Yii + + In Yii the new created ``ReindexProvider`` need to be registered correctly as reindex provider: + + .. code-block:: php + + [ + // ... + + 'reindex_providers' => [ + \App\Search\BlogReindexProvider::class, + ], + ], + ]; + + After correctly registering the ``ReindexProvider`` use the following command to index all documents: + + .. code-block:: bash + + # reindex all indexes + ./yii schranz:search:reindex + + # reindex specific index and drop data before + ./yii schranz:search:reindex --index=blog --drop + +Help needed? +------------ + +If you need any help or run into any error feel free to use the +`Github Discussions `_ +of the main repository to ask any questions. Or check there if +somebody already solved the same problem. + +Next Steps +---------- + +These were the basic steps to get started with the Search Engine Abstraction Layer (**SEAL**). +In the next part of the documentation, we will delve deeper into the :doc:`../schema/index` +and explore the various field definitions. After that, we will a short look at the :doc:`../indexing/index` and then +examine the different conditions of :doc:`../search-and-filters/index` the abstraction provides. diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..1096a416 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,104 @@ +Welcome to SEAL's documentation! +================================ + +Introduction +------------ + +**SEAL** stands for: **S** earch **E** ngine **A** bstraction **L** ayer + +The SEAL project is a PHP library designed to simplify the process of interacting +with different search engines. It provides a straightforward interface that enables users +to communicate with various search engines, including: + +- ``Meilisearch`` +- ``Opensearch`` +- ``Elasticsearch`` +- ``Algolia`` +- ``Loupe`` +- ``Redisearch`` +- ``Solr`` +- ``Typesense`` + +It also provides integration packages for the ``Laravel``, ``Symfony``, ``Spiral``, ``Mezzio`` and ``Yii`` PHP frameworks. + +It is worth noting that the project draws inspiration from the +``Doctrine`` and ``Flysystem`` projects. These two projects have been a great inspiration +in the development of SEAL, as they provide excellent examples of how to create consistent +and user-friendly APIs for complex systems. + +Structure +--------- + +.. image:: _images/overview.svg + :width: 600 + :alt: Basic project overview + +SEAL's provides a basic abstraction layer for add, remove and search and filters for documents. +The main class and service handling this is called ``Engine``, which is responsible for all this things. +The ``Schema`` which is required defines the different ``Indexes`` and their ``Fields``. + +The project provides different ``Adapters`` which the Engine uses to communicate with the different ``Search Engine`` software and services. +This way it is easy to switch between different search engine software and services. + +**Glossary** + +.. list-table:: + :widths: 18 82 + + * - **Term** + - **Definition** + * - ``Engine`` + - The main class and service responsible to provide the basic interface for add, remove and search and filters for documents. + * - ``Schema`` + - Defines the different ``Indexes`` and their ``Fields``, for every field a specific type need to be defined and what you want todo with them via flags like ``searchable``, ``filterable`` and ``sortable``. + * - ``Adapter`` + - Provides the communication between the Engine and the Search Engine software and services. + * - ``Documents`` + - A structure of data that you want to index need to follow the structure of the fields of the index schema. + * - ``Search Engine`` + - Search Engine software or service where the data will actually be stored currently ``Meilisearch``, ``Opensearch``, ``Elasticsearch``, ``Algolia``, ``Loupe``, ``Redisearch``, ``Solr`` and ``Typesense`` is supported. + +Contents +-------- + +.. toctree:: + :maxdepth: 1 + + getting-started/index + schema/index + indexing/index + search-and-filters/index + cookbooks/index + research/index + +.. + * :ref:`search` + +----------- + +Packages +-------- + +Full list of packages provided by the SEAL project: + +- ``schranz-search/seal`` - The core package of the SEAL project. +- ``schranz-search/seal-algolia-adapter`` - Adapter for the Algolia search engine. +- ``schranz-search/seal-elasticsearch-adapter`` - Adapter for the Elasticsearch search engine. +- ``schranz-search/seal-opensearch-adapter`` - Adapter for the Opensearch search engine. +- ``schranz-search/seal-meilisearch-adapter`` - Adapter for the Meilisearch search engine. +- ``schranz-search/seal-redisearch-adapter`` - Adapter for the Redisearch search engine. +- ``schranz-search/seal-loupe-adapter`` - Adapter for the Loupe search engine. +- ``schranz-search/seal-solr-adapter`` - Adapter for the Solr search engine. +- ``schranz-search/seal-typesense-adapter`` - Adapter for the Typesense search engine. +- ``schranz-search/seal-read-write-adapter`` - Adapter to split read and write operations. +- ``schranz-search/seal-multi-adapter`` - Adapter to write into multiple search engines. +- ``schranz-search/laravel-package`` - Integrates SEAL into the Laravel framework. +- ``schranz-search/symfony-bundle`` - Integrates SEAL into the Symfony framework. +- ``schranz-search/spiral-bridge`` - Integrates SEAL into the Spiral framework. +- ``schranz-search/mezzio-module`` - Integrates SEAL into the Mezzio framework. +- ``schranz-search/yii-module`` - Integrates SEAL into the Yii framework. + +Have also a look at the following tags: + +- `https://packagist.org/search/?tags=seal-adapter `_ +- `https://github.com/topics/seal-php-adapter `_ diff --git a/_sources/indexing/index.rst.txt b/_sources/indexing/index.rst.txt new file mode 100644 index 00000000..708fa08a --- /dev/null +++ b/_sources/indexing/index.rst.txt @@ -0,0 +1,285 @@ +Index Operations +================ + +In the :doc:`../getting-started/index` documentation we already saw how we can add documents to our +created Index. + +The following shows the basic usage as already shown in the "Getting Started" documentation. Under the +``$this->engine`` variable we assume that you have already injected your created ``Engine`` instance. + +Save document +------------- + +To add a document to an index we can use the ``saveDocument`` method. The only required field +for the document is the defined ``IdentifierField`` all others are optional and don't need to +be provided or can be null. + +.. code-block:: php + + engine->saveDocument('blog', [ + 'id' => '1', + 'title' => 'My first blog post', + 'description' => 'This is the description of my first blog post', + 'tags' => ['UI', 'UX'], + ]); + +To update a document the same method ``saveDocument`` need to be used with the same ``identifier`` +value. + +.. note:: + + Currently, you can use some kind of normalizer like `symfony/serializer `__ + to convert an object to an array and back to an object at current state a Document Mapper or ODM package does + not yet exist. If provided in future it will be part of an own package which make usage of SEAL. + Example like doctrine/orm using doctrine/dbal. See `ODM issue `__. + +Delete document +--------------- + +To remove a document from an index we can use the ``deleteDocument`` method. It only requires +the name of the index and the identifier of the document which should be removed. + +.. code-block:: php + + engine->deleteDocument('blog', '1'); + +Reindex operations +------------------ + +To reindex documents it is required to create atleast one ReindexProvider for +the index you want to reindex. The ReindexProvider is a class which implements +the ``ReindexProviderInterface`` and provides the documents for your index. + +.. code-block:: php + + 1, + 'title' => 'Title 1', + 'description' => 'Description 1', + ]; + + yield [ + 'id' => 2, + 'title' => 'Title 2', + 'description' => 'Description 2', + ]; + + yield [ + 'id' => 3, + 'title' => 'Title 3', + 'description' => 'Description 3', + ]; + } + + public static function getIndex(): string + { + return 'blog'; + } + } + +After that you can use the ``reindex`` to index all documents: + +.. tabs:: + + .. group-tab:: Standalone use + + When using the ``Standalone`` version you need to reindex the documents + in your search engines via the ``Engine`` instance which was created before: + + .. code-block:: php + + reindex($reindexProviders); + + // reindex specific index and drop data before + $engine->reindex($reindexProviders, 'blog', dropIndex: true); + + .. group-tab:: Laravel + + In Laravel the new created ``ReindexProvider`` need to be tagged correctly: + + .. code-block:: php + + app->singleton(\App\Search\BlogReindexProvider::class, fn () => new \App\Search\BlogReindexProvider()); + + $this->app->tag(\App\Search\BlogReindexProvider::class, 'schranz_search.reindex_provider'); + } + } + + After correctly tagging the ``ReindexProvider`` with ``schranz_search.reindex_provider`` the + ``schranz:search:reindex`` command can be used to index all documents: + + .. code-block:: bash + + # reindex all indexes + php artisan schranz:search:reindex + + # reindex specific index and drop data before + php artisan schranz:search:reindex --index=blog --drop + + .. group-tab:: Symfony + + In Symfony ``autoconfigure`` feature should already tag the new ``ReindexProvider`` correctly + with the ``schranz_search.reindex_provider`` tag. If not you can tag it manually: + + .. code-block:: yaml + + # config/services.yaml + + services: + App\Search\BlogReindexProvider: + tags: + - { name: schranz_search.reindex_provider } + + After correctly tagging the ``ReindexProvider`` use the following command to index all documents: + + .. code-block:: bash + + # reindex all indexes + bin/console schranz:search:reindex + + bin/console schranz:search:reindex --index=blog --drop + + .. group-tab:: Spiral + + In Spiral the new created ``ReindexProvider`` need to be registered correctly as reindex provider: + + .. code-block:: php + + [ + \App\Search\BlogReindexProvider::class, + ], + ]; + + After correctly registering the ``ReindexProvider`` use the following command to index all documents: + + .. code-block:: bash + + # reindex all indexes + php app.php schranz:search:reindex + + php app.php schranz:search:reindex --index=blog --drop + + .. group-tab:: Mezzio + + In Mezzio the new created ``ReindexProvider`` need to be registered correctly as reindex provider: + + .. code-block:: php + + [ + // ... + 'reindex_providers' => [ + \App\Search\BlogReindexProvider::class, + ], + ], + ]; + } + + public function getDependencies(): array + { + return [ + // ... + + 'invokables' => [ + \App\Search\BlogReindexProvider::class => \App\Search\BlogReindexProvider::class, + ], + + // ... + ]; + } + } + + After correctly registering the ``ReindexProvider`` use the following command to index all documents: + + .. code-block:: bash + + # reindex all indexes + vendor/bin/laminas schranz:search:reindex + + vendor/bin/laminas schranz:search:reindex --index=blog --drop + + .. group-tab:: Yii + + In Yii the new created ``ReindexProvider`` need to be registered correctly as reindex provider: + + .. code-block:: php + + [ + // ... + + 'reindex_providers' => [ + \App\Search\BlogReindexProvider::class, + ], + ], + ]; + + After correctly registering the ``ReindexProvider`` use the following command to index all documents: + + .. code-block:: bash + + # reindex all indexes + ./yii schranz:search:reindex + + ./yii schranz:search:reindex --index=blog --drop + +Bulk operations +--------------- + +Currently no bulk operations are implemented. Add your opinion to the +`Bulk issue `_ +on Github. + +Next Steps +---------- + +After this short introduction about indexing we are able to add and remove our documents from the defined indexes. + +In the next chapter, we examine the different conditions of :doc:`../search-and-filters/index` the abstraction provides. diff --git a/_sources/research/index.rst.txt b/_sources/research/index.rst.txt new file mode 100644 index 00000000..8dbb4d33 --- /dev/null +++ b/_sources/research/index.rst.txt @@ -0,0 +1,344 @@ +Research +======== + +This project started as a research project to find out how to create a common interface for different search engines. +In this document we collect all the information we found out during our research. Feel free to add all kind of +interesting information you want to share. + +List of Search Engines +---------------------- + +Here we collect different search engines which are around and could be interesting: + +- `Elasticsearch <#elasticsearch>`__ - ``schranz-search/seal-elasticsearch-adapter`` +- `Opensearch <#opensearch>`__ - ``schranz-search/seal-opensearch-adapter`` +- `Meilisearch <#meilisearch>`__ - ``schranz-search/seal-meilisearch-adapter`` +- `Algolia <#algolia>`__ - ``schranz-search/seal-algolia-adapter`` +- `Solr <#solr>`__ - ``schranz-search/seal-solr-adapter`` +- `RediSearch <#redisearch>`__ - ``schranz-search/seal-redisearch-adapter`` +- `Typesense <#typesense>`__ - ``schranz-search/seal-typesense-adapter`` +- `Loupe <#loupe>`__ - ``schranz-search/seal-loupe-adapter`` +- `Zinc Labs <#zinc-labs>`__ (work in progress `#79 `__) +- `Manticore Search <#manticore-search>`__ (work in progress `#103 `__) +- `ZendSearch <#zendsearch>`__ +- `Kailua Labs <#kailua-labs>`__ +- `TnTSearch <#tntsearch>`__ +- `Sonic <#sonic>`__ +- `Vespa <#vespa>`__ +- `Toshi <#toshi>`__ +- `Quickwit <#quickwit>`__ +- `nrtSearch <#nrtsearch>`__ +- `MongoDB Atlas <#mongodb-atlas>`__ +- `PostgreSQL Full Text Search <#postgresql-full-text-search>`__ +- `MySQL Full Text Search <#mysql-full-text-search>`__ +- `Sphinx Search <#sphinx-search>`__ +- `Search.io <#searchio>`__ +- `Azure Cognitive Search <#azure-cognitive-search>`__ +- `Google Cloud Search <#google-cloud-search>`__ +- `Amazon CloudSearch <#amazon-cloudsearch>`__ +- `Gigablast <#gigablast>`__ +- `Fess <#fess>`__ +- `Bleve <#bleve>`__ +- `Qdrant <#qdrant>`__ +- `OpenAI <#openai>`__ +- `Jina <#jina>`__ + +Some more research links: +------------------------- + +- `https://alternativeto.net/software/meilisearch/ `__ +- `https://github.com/awesome-selfhosted/awesome-selfhosted#search-engines `__ +- `https://help.openai.com/en/articles/6272952-search-transition-guide `__ +- `https://www.reddit.com/r/PHP/comments/104278m/research_what_search_services_engines_do_you_use/ `__ +- `https://github.com/doofinder/php-doofinder `__ +- `https://www.athenasearch.io/ `__ +- `https://www.g2.com/products/addsearch-site-search/reviews `__ +- `https://aws.amazon.com/de/athena/ `__ / `https://twitter.com/dr4goonis/status/1628451049013972993 `__ +- `https://milvus.io/ `__ / `https://twitter.com/milvusio `__ / `https://packagist.org/packages/kaycn/milvusphp `__ +- `https://github.com/pgvector/pgvector `__ +- `https://vald.vdaas.org/ `__ +- `https://solr.apache.org/guide/solr/latest/query-guide/dense-vector-search.html `__ +- `https://github.com/facebookresearch/faiss `__ +- `https://blog.vespa.ai/billion-scale-knn/ `__ + +UI/UX related links: +-------------------- + +- `https://design4users.com/design-search-in-user-interfaces/ `__ + +Optimization links: +------------------- + +- `https://sites.google.com/site/kevinbouge/stopwords-lists `__ +- `https://github.com/uschindler/german-decompounder `__ +- `https://symfony.com/blog/migrating-symfony-com-search-engine-to-meilisearch `__ + +Descriptions of Search Engines +------------------------------ + +Elasticsearch +~~~~~~~~~~~~~ + +Widely used search based on Java. + +- Server: `Elasticsearch Server `__ +- PHP Client: `Elasticsearch PHP `__ + +Implementation: `schranz-search/seal-elasticsearch-adapter `__ + +Opensearch +~~~~~~~~~~ + +Fork of Elasticsearch also written in Java. + +- Server: `Opensearch Server `__ +- PHP Client: `Opensearch PHP `__ + +Implementation: `schranz-search/seal-opensearch-adapter `__ + +Meilisearch +~~~~~~~~~~~ + +A search engine written in Rust: + +- Server: `MeiliSearch Server `__ +- PHP Client: `MeiliSearch PHP `__ + +Implementation: `schranz-search/seal-meilisearch-adapter `__ + +Algolia +~~~~~~~ + +Is a search as SaaS provided via Rest APIs and SDKs: + +- Server: No server only Saas `https://www.algolia.com/ `__ +- PHP Client: `Algolia PHP `__ + +Implementation: `schranz-search/seal-algolia-adapter `__ + +Solr +~~~~ + +A search engine under the Apache Project based on Lucene written in Java: + +- Server: `Solr Server `__ +- PHP Client: `Solarium PHP `__ seems to be a well maintained Client + +Implementation: `schranz-search/seal-solr-adapter `__ + +RediSearch +~~~~~~~~~~ + +A search out of the house of the redis labs. + +- Server: `RediSearch Server `__ +- PHP Client: `Unofficial RediSearch PHP `__ + +Implementation: `schranz-search/seal-redisearch-adapter `__ + +Typesense +~~~~~~~~~ + +Describes itself as a alternative to Algolia and Elasticsearch written in C++. + +- Server: `Typesense Server `__ +- PHP Client: `Typesense PHP `__ + +Implementation: `schranz-search/seal-typesense-adapter `__ + +Loupe +~~~~~ + +An SQLite based, PHP-only fulltext search engine. + +- Implementation: `Loupe PHP `__ + +Zinc Labs +~~~~~~~~~ + +Zinc search describes itself as a lightweight alternative to Elasticsearch written in GoLang. + +- Server: `Zinclabs Server `__ +- PHP Client: No PHP SDK currently: `https://github.com/zinclabs/zinc/issues/12 `__ + +Implementation: work in progress `#79 `__ + +Manticore Search +~~~~~~~~~~~~~~~~ + +Fork of Sphinx 2.3.2 in 2017, describes itself as an easy to use open source fast database for search. +Good alternative for Elasticsearch. + +- Server: `Manticore Search Server `__ +- PHP Client: `Manticore Search PHP Client `__ + +Implementation: work in progress `#103 `__ + +ZendSearch +~~~~~~~~~~ + +A complete in PHP written implementation of the Lucene index. Not longer maintained: + +- Implementation: `Zendsearch Implementation `__ + +Kailua Labs +~~~~~~~~~~~ + +Next-gen search made simple: + +- Server: No server only SaaS `https://www.kailualabs.com/ `__ + +TnTSearch +~~~~~~~~~~ + +Another implementation of a Search index written in PHP. Not based on Lucene. + +- Implementation: `TntSearch Implementation `__ + +Sonic +~~~~~ + +Describe itself as lightweight & schema-less search backend, an alternative to Elasticsearch that runs on a few MBs of RAM. + +- Server: `Sonic Server `__ +- PHP Client: `Unoffical PHP Sonic `_ looks outdated and not well maintained + +Vespa +~~~~~ + +Describe itself as the open big data serving engine - Store, search, organize and make machine-learned inferences over big data at serving time. + +- Server: `Vespa Server `__ +- PHP Client: No client available only API based + +Toshi +~~~~~ + +A full-text search engine in rust. Toshi strives to be to Elasticsearch what `Tantivy Server `_ is to Lucene: + +- Server: `Toshi Server `__ +- PHP Client: No client available only API based + +Quickwit +~~~~~~~~ + +Describe itself as a cloud-native search engine for log management & analytics written in Rust. It is designed to be very cost-effective, easy to operate, and scale to petabytes. + +- Server: `Quickwit Server `__ +- PHP Client: No client available only API based + +nrtSearch +~~~~~~~~~ + +Describe itself as a high performance gRPC server, with optional REST APIs on top of Apache Lucene version 8.x source, exposing Lucene's core functionality over a simple gRPC based API. + +- Server: `nrtSearch Server `__ +- PHP Client: No client available only API based + +MongoDB Atlas +~~~~~~~~~~~~~ + +None open source search engine from MongoDB. It is a cloud based search engine. + +- Server: `MongoDB Atlas `__ +- PHP Client: `MongoDB Atlas PHP Client `__ + +PostgreSQL Full Text Search +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Server: `PostgreSQL Server `__ +- PHP Client: No client use the `Full Text Feature `__ the Database connection. + +MySQL Full Text Search +~~~~~~~~~~~~~~~~~~~~~~ + +- Server: `MySQL Server `__ +- PHP Client: No client use the `Full Text Feature `__ the Database connection. + +Sphinx Search +~~~~~~~~~~~~~ + +An older search engine written in Python. + +- Server: `Sphinx Search Server `__ +- PHP Client: No official client available + +Search.io +~~~~~~~~~~ + +A SaaS search engine, In the past they used the name for Sajari Site Search. +Lately `acquired by Algolia `_. + +- Server: No server only Saas `Search.io Server `__ +- PHP Client: `Official Search.io SDK for PHP `__ + +Azure Cognitive Search +~~~~~~~~~~~~~~~~~~~~~~ + +A cloud based search from Microsoft Azure: + +- Server: No server only SaaS `Azure Cognitive Search `__ +- PHP Client: No client available only `REST API `__ + +Google Cloud Search +~~~~~~~~~~~~~~~~~~~ + +A cloud based search from Google: + +- Server: No server only SaaS `Google Cloud Search `__ +- PHP Client: No client available only `REST API `__ + +Amazon CloudSearch +~~~~~~~~~~~~~~~~~~ + +A cloud based search from Amazon: + +- Server: No server only SaaS `Amazon CloudSearch `__ +- PHP Client: No client available only `REST API `__ + +Gigablast +~~~~~~~~~ + +Describe itself as an open source web and enterprise search engine and spider/crawler +written in C++. + +- Server: `Gigablast Server `__ +- PHP Client: No client available only `REST API `__ + +Fess +~~~~ + +Fess is very powerful and easily deployable Enterprise Search Server. + +- Server: `Fess Server `__ + +Bleve +~~~~~ + +A modern text ndexing in go, supported and sponsored by Couchbase: + +- Library only: `Bleve `__ + +Qdrant +~~~~~~ + +A vector AI based search database: + +- Server: `Qdrant Server `__ +- PHP Client: No client available only `REST API `__ + +OpenAI +~~~~~~ + +OpenAi embeddings can also be used to create search engine: + +- Docs Embeddings: `Embeddings `__ +- Docs + Search: `Deprecated Search Migratin Transition `__ + +Jina +~~~~ + +Another vector based search engine: + +- Server: `Jina Server `__ diff --git a/_sources/schema/index.rst.txt b/_sources/schema/index.rst.txt new file mode 100644 index 00000000..374d041d --- /dev/null +++ b/_sources/schema/index.rst.txt @@ -0,0 +1,791 @@ +Schema +====== + +In the :doc:`../getting-started/index` documentation we already saw how to define a schema for our indexes +and where we have to define them based on our used ``Framework`` or how the create the ``Schema`` instance in +the ``Standalone`` usage. + +A Schema is a collection of one or more ``Index`` definitions. An ``Index`` is defined by a name and a list of ``Fields``. +Where every field is defined by a name and a type. All fields types with exception from the ``Identifier`` +are possible to be defined as ``filterable``, ``sortable`` and ``multiple``. + +Basic Field Types +----------------- + +TextField +~~~~~~~~~ + +The ``Text`` field type is the most important field type. It is used to store PHP ``string`` values. +It is also the only field type that is ``searchable`` via a ``SearchCondition``. + +Lets have a look at the following example fields: + +.. code-block:: php + + "Title", + "tags" => ["UI", "UX"], + "internalNote" => "Some note", + ]; + +The following field definitions will show us how we can use ``Text`` fields to index the above fields +via ``sortable``, ``multiple``, ``filterable`` and ``searchable`` flags: + +.. code-block:: php + + new Field\TextField('title', sortable: true), + 'tags' => new Field\TextField('tags', multiple: true, filterable: true), + 'internalNote' => new Field\TextField('internalNote', searchable: false), + ]); + +**Options:** + ++-----------------+-----------------+ +| Name | Default | ++=================+=================+ +| ``filterable`` | ``false`` | ++-----------------+-----------------+ +| ``sortable`` | ``false`` | ++-----------------+-----------------+ +| ``multiple`` | ``false`` | ++-----------------+-----------------+ +| ``searchable`` | ``true`` | ++-----------------+-----------------+ + +.. note:: + + The ``Text`` field type is the only field type which values are ``searchable`` and so the only one kept in mind + for the ``SearchCondition``. This is because of limitations of different search engines and + how they are handling different types of data. + +IdentifierField +~~~~~~~~~~~~~~~ + +The ``Identifier`` field type is a special ``Text`` field type. It is used to identify a document in the index. + +The document identifier data given requires to be a ``string`` type, beside the ``Text`` type and the other types +it can not be nullable and need always given to the document. It can only be defined once per Index. + +The defaults can not be changed and so are same for every index. + +Lets have a look at the following example fields of a document: + +.. code-block:: php + + "9178e319-326a-447c-801d-93d084de54fc" + // ... + ]; + +The following field definition will show us how to define our ``Identifier`` field: + +.. code-block:: php + + new Field\IdentifierField('id'), + ]); + +**Options:** + +Has no configurable options it is always ``filterable``, but not ``searchable``, ``sortable`` or ``multiple``. + +FloatField +~~~~~~~~~~ + +The ``Float`` field type is used to store numeric values. Unlike the text field type it is +**not** ``searchable``, but the field can be marked as ``filterable`` and ``sortable``. +It is used to store PHP ``float`` values. + +Lets have a look at the following example fields: + +.. code-block:: php + + 3.5, + "points" => [2.5, 5.0], + ]; + +The following field definitions will show us how we can use ``Float`` fields to index the above fields +via ``sortable``, ``multiple`` and ``filterable`` flags. + +.. code-block:: php + + new Field\FloatField('rating', sortable: true, filterable: true), + 'points' => new Field\FloatField('points', multiple: true), + ]); + +**Options:** + ++-----------------+-----------------+ +| Name | Default | ++=================+=================+ +| ``filterable`` | ``false`` | ++-----------------+-----------------+ +| ``sortable`` | ``false`` | ++-----------------+-----------------+ +| ``multiple`` | ``false`` | ++-----------------+-----------------+ + +IntegerField +~~~~~~~~~~~~ + +The ``Integer`` field type is used to store numeric values. Unlike the text field type it is +**not** ``searchable``, but the field can be marked as ``filterable`` and ``sortable``. +It is used to store PHP ``int`` values. + +Lets have a look at the following example fields: + +.. code-block:: php + + 3, + "points" => [2, 5], + ]; + +The following field definitions will show us how we can use ``Integer`` fields to index the above fields +via ``sortable``, ``multiple`` and ``filterable`` flags. + +.. code-block:: php + + new Field\IntegerField('commentCount', sortable: true, filterable: true), + 'points' => new Field\IntegerField('points', multiple: true), + ]); + +**Options:** + ++-----------------+-----------------+ +| Name | Default | ++=================+=================+ +| ``filterable`` | ``false`` | ++-----------------+-----------------+ +| ``sortable`` | ``false`` | ++-----------------+-----------------+ +| ``multiple`` | ``false`` | ++-----------------+-----------------+ + +BooleanField +~~~~~~~~~~~~ + +The ``Boolean`` field type is used to store flags. Unlike the text field type it is +**not** ``searchable``, but the field can be marked as ``filterable`` and ``sortable``. +It is used to store PHP ``bool`` values. + +Lets have a look at the following example fields: + +.. code-block:: php + + true, + "flags" => [true, false], + ]; + +The following field definitions will show us how we can use ``Boolean`` fields to index the above fields +via ``sortable``, ``multiple`` and ``filterable`` flags. + +.. code-block:: php + + new Field\BooleanField('isSpecial', sortable: true, filterable: true), + 'flags' => new Field\BooleanField('flags', multiple: true), + ]); + +**Options:** + ++-----------------+-----------------+ +| Name | Default | ++=================+=================+ +| ``filterable`` | ``false`` | ++-----------------+-----------------+ +| ``sortable`` | ``false`` | ++-----------------+-----------------+ +| ``multiple`` | ``false`` | ++-----------------+-----------------+ + +DateTimeField +~~~~~~~~~~~~~ + +The ``DateTime`` field type is used to store dates. Unlike the text field type it is +**not** ``searchable``, but the field can be marked as ``filterable`` and ``sortable``. +It uses the PHP ``string`` type and represents the date a date in the ``ISO 8601`` format. + +Lets have a look at the following example fields: + +.. code-block:: php + + "2004-02-12T15:19:21+00:00", + "nextDates" => ["2005-02-12T15:19:21+00:00", "2006-02-12T15:19:21+00:00"], + ]; + +The following field definitions will show us how we can use ``DateTime`` fields to index the above fields +via ``sortable``, ``multiple`` and ``filterable`` flags. + +.. code-block:: php + + new Field\DateTime('isSpecial', sortable: true, filterable: true), + 'nextDates' => new Field\DateTime('flags', multiple: true), + ]); + +**DateTimeField Options:** + ++-----------------+-----------------+ +| Name | Default | ++=================+=================+ +| ``filterable`` | ``false`` | ++-----------------+-----------------+ +| ``sortable`` | ``false`` | ++-----------------+-----------------+ +| ``multiple`` | ``false`` | ++-----------------+-----------------+ + +Complex Field Types +------------------- + +ObjectField +~~~~~~~~~~~ + +The ``Object`` field type is used to index nested objects. Unlike the other field types it is +**not** ``searchable``, ``filterable``, ``sortable`` itself, but can contain fields +which are. + +It is represented in PHP as an ``associative array``. + +Lets have a look at the following example fields: + +.. code-block:: php + + [ + "title": "Title", + ], + "comments" => [ + [ + "text": "This looks great!", + "author": 1, + ], + [ + "text": "What an awesome achievement!", + "author": 2, + ], + ], + ]; + +The following field definitions will show us how we can use ``Object`` fields to index the above fields +via ``multiple`` flags. + +.. code-block:: php + + new Field\ObjectField('header', [ + 'title' => new Field\TextField('title'), + ]), + 'comments' => new Field\ObjectField('comments', [ + 'text' => new Field\TextField('text', searchable: false), + 'author' => new Field\IntegerField('author'), + ], multiple: true), + ]); + +**Options:** + ++-----------------+-----------------+ +| Name | Default | ++=================+=================+ +| ``multiple`` | ``false`` | ++-----------------+-----------------+ + +TypedField +~~~~~~~~~~ + +The ``Typed`` field type is a special ``Object`` field type and provides the same functionality. +It is represented in PHP as an ``associative array``. The difference to the ``Object`` field type +is that ``Typed`` can be used to index objects containing different types of fields byed on the +``type`` field. + +Lets have a look at the following example fields: + +.. code-block:: php + + [ + "type": "image", + "title": "Title", + "media": 1, + ], + "blocks" => [ + [ + "type" => "text", + "title" => "Title", + "description" => "

Description

", + "media" => [3, 4], + ], + [ + "type" => "text", + "title" => "Title 2", + ], + [ + "type" => "embed", + "title" => "Video", + "media" => "https://www.youtube.com/watch?v=Ix6qBW4a1xg&t=826s", + ], + [ + "type" => "text", + "title" => "Title 4", + "description" => "

Description 4

", + "media" => [3, 4], + ], + ], + ]; + + $documentB = [ + // ... + "header" => [ + "type": "video", + "title": "Title", + "media": "https://www.youtube.com/watch?v=Ix6qBW4a1xg&t=826s", + ], + "blocks" => [ + [ + "type" => "text", + "title" => "Title", + "description" => "

Description

", + "media" => [3, 4], + ], + [ + "type" => "embed", + "title" => "Video", + "media" => "https://www.youtube.com/watch?v=Ix6qBW4a1xg&t=826s", + ], + ], + ]; + +The following field definitions will show us how we can use ``Typed`` fields to index the above fields +via ``multiple`` and define different types for it. + +.. code-block:: php + + new Field\TypedField('header', 'type', [ + 'image' => [ + 'title' => new Field\TextField('title'), + 'media' => new Field\IntegerField('media'), + ], + 'video' => [ + 'title' => new Field\TextField('title'), + 'media' => new Field\TextField('media', searchable: false), + ], + ]), + 'blocks' => new Field\TypedField('blocks', 'type', [ + 'text' => [ + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'media' => new Field\IntegerField('media', multiple: true), + ], + 'embed' => [ + 'title' => new Field\TextField('title'), + 'media' => new Field\TextField('media', searchable: false), + ], + ], multiple: true), + ]); + +**Options:** + ++-----------------+-----------------+ +| Name | Default | ++=================+=================+ +| ``multiple`` | ``false`` | ++-----------------+-----------------+ + +Create and Drop a Schema +------------------------ + +After you have defined your ``Schema`` with one or multple ``Indexes`` you need to create based on your used +integration the ``Indexes`` over the following way: + +.. tabs:: + + .. group-tab:: Standalone use + + When using the ``Standalone`` version you need to create the ``Indexes`` + in your search engines via the ``Engine`` instance which was created before: + + .. code-block:: php + + createSchema(); + + // create specific index + $engine->createIndex('blog'); + + .. group-tab:: Laravel + + To create the indexes in Laravel the following artisan command: + + .. code-block:: bash + + # create all indexes + php artisan schranz:search:index-create + + # create specific index + php artisan schranz:search:index-create --index=blog + + .. group-tab:: Symfony + + To create the indexes in Symfony the following console command: + + .. code-block:: bash + + # create all indexes + bin/console schranz:search:index-create + + # create specific index + bin/console schranz:search:index-create --index=blog + + .. group-tab:: Spiral + + To create the indexes in Spiral the following command: + + .. code-block:: bash + + # create all indexes + php app.php schranz:search:index-create + + # create specific index + php app.php schranz:search:index-create --index=blog + + .. group-tab:: Mezzio + + To create the indexes in Mezzio the following command: + + .. code-block:: bash + + # create all indexes + vendor/bin/laminas schranz:search:index-create + + # create specific index + vendor/bin/laminas schranz:search:index-create --index=blog + + .. group-tab:: Yii + + To create the indexes in Yii the following command: + + .. code-block:: bash + + # create all indexes + ./yii schranz:search:index-create + + # create specific index + ./yii schranz:search:index-create --index=blog + +To drop a ``Schema`` or an ``Index`` you can use the following: + +.. tabs:: + + .. group-tab:: Standalone use + + When using the ``Standalone`` version you need to drop the ``Indexes`` + in your search engines via the ``Engine`` instance which was created before: + + .. code-block:: php + + dropSchema(); + + // create specific index + $engine->dropIndex('blog'); + + .. group-tab:: Laravel + + To drop the indexes in Laravel the following artisan command: + + .. code-block:: bash + + # create all indexes + php artisan schranz:search:index-drop + + # create specific index + php artisan schranz:search:index-drop --index=blog + + .. group-tab:: Symfony + + To drop the indexes in Symfony the following console command: + + .. code-block:: bash + + # create all indexes + bin/console schranz:search:index-drop + + # create specific index + bin/console schranz:search:index-drop --index=blog + + .. group-tab:: Spiral + + To drop the indexes in Spiral the following command: + + .. code-block:: bash + + # create all indexes + php app.php schranz:search:index-drop + + # create specific index + php app.php schranz:search:index-drop --index=blog + + .. group-tab:: Mezzio + + To drop the indexes in Mezzio the following command: + + .. code-block:: bash + + # create all indexes + vendor/bin/laminas schranz:search:index-drop + + # create specific index + vendor/bin/laminas schranz:search:index-drop --index=blog + + .. group-tab:: Yii + + To drop the indexes in Yii the following command: + + .. code-block:: bash + + # create all indexes + ./yii schranz:search:index-drop + + # create specific index + ./yii schranz:search:index-drop --index=blog + +---------- + +Complex Example +--------------- + +A whole complex example ``Index`` with different types of ``Fields`` for documents like this: + +.. code-block:: php + + '23b30f01-d8fd-4dca-b36a-4710e360a965', + 'title' => 'New Blog', + 'header' => [ + 'type' => 'image', + 'media' => 1, + ], + 'article' => '

New Subtitle

A html field with some content

', + 'blocks' => [ + [ + 'type' => 'text', + 'title' => 'Titel', + 'description' => '

Description

', + 'media' => [3, 4], + ], + [ + 'type' => 'text', + 'title' => 'Titel 2', + ], + [ + 'type' => 'embed', + 'title' => 'Video', + 'media' => 'https://www.youtube.com/watch?v=iYM2zFP3Zn0', + ], + [ + 'type' => 'text', + 'title' => 'Titel 4', + 'description' => '

Description 4

', + 'media' => [3, 4], + ], + ], + 'footer' => [ + 'title' => 'New Footer', + ], + 'created' => '2022-01-24T12:00:00+01:00', + 'commentsCount' => 2, + 'rating' => 3.5, + 'comments' => [ + [ + 'email' => 'admin.nonesearchablefield@localhost', + 'text' => 'Awesome blog!', + ], + [ + 'email' => 'example.nonesearchablefield@localhost', + 'text' => 'Like this blog!', + ], + ], + 'tags' => ['Tech', 'UI'], + 'categoryIds' => [1, 2], + ]; + + $documentB = [ + 'uuid' => '79848403-c1a1-4420-bcc2-06ed537e0d4d', + 'title' => 'Other Blog', + 'header' => [ + 'type' => 'video', + 'media' => 'https://www.youtube.com/watch?v=iYM2zFP3Zn0', + ], + 'article' => '

Other Subtitle

A html field with some content

', + 'footer' => [ + 'title' => 'Other Footer', + ], + 'created' => '2022-12-26T12:00:00+01:00', + 'commentsCount' => 0, + 'rating' => 2.5, + 'comments' => [], + 'tags' => ['UI', 'UX'], + 'categoryIds' => [2, 3], + ]; + +Can be saved in an ``Index`` via the following ``Index`` and ``Field`` definitions: + +.. code-block:: php + + new Field\IdentifierField('uuid'), + 'title' => new Field\TextField('title'), + 'header' => new Field\TypedField('header', 'type', [ + 'image' => [ + 'media' => new Field\IntegerField('media'), + ], + 'video' => [ + 'media' => new Field\TextField('media', searchable: false), + ], + ]), + 'article' => new Field\TextField('article'), + 'blocks' => new Field\TypedField('blocks', 'type', [ + 'text' => [ + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'media' => new Field\IntegerField('media', multiple: true), + ], + 'embed' => [ + 'title' => new Field\TextField('title'), + 'media' => new Field\TextField('media', searchable: false), + ], + ], multiple: true), + 'footer' => new Field\ObjectField('footer', [ + 'title' => new Field\TextField('title'), + ]), + 'created' => new Field\DateTimeField('created', filterable: true, sortable: true), + 'commentsCount' => new Field\IntegerField('commentsCount', filterable: true, sortable: true), + 'rating' => new Field\FloatField('rating', filterable: true, sortable: true), + 'comments' => new Field\ObjectField('comments', [ + 'email' => new Field\TextField('email', searchable: false), + 'text' => new Field\TextField('text'), + ], multiple: true), + 'tags' => new Field\TextField('tags', multiple: true, filterable: true), + 'categoryIds' => new Field\IntegerField('categoryIds', multiple: true, filterable: true), + ]); + +Best Practices +-------------- + +The best practices are to keep your document also when it index complex model as simple as possible. +This means that you concat data from different sources to one field. And create additional fields only +for things which need to be searchable or filterable a special way. A typical search ``Index`` would +look like this: + +.. code-block:: php + + new Field\IdentifierField('uuid'), + 'title' => new Field\TextField('title'), + 'description' => new Field\TextField('description'), + 'url' => new Field\TextField('url'), + 'image' => new Field\IntegerField('image'), + 'content' => new Field\TextField('content', multiple: true), + ]); + +Where the ``content`` field contains all relevant searchable texts. Optionally you maybe have some +category or tags fields which can be filtered on. Too many fields can in different search engines +cost a lot of performance and should only be added when really needed to display or filter on it. +Blocks like in the above complex example can also just concatenated to the ``content`` field which can improve +performance on different engines. + +Next Steps +---------- + +After this deep dive into the field types, we have now covered all the field types that are available +and are able to define complex Indexes via them. + +In the next chapter, we will have a look at the :doc:`../indexing/index` before we examine the different conditions of +:doc:`../search-and-filters/index` the abstraction provides. diff --git a/_sources/search-and-filters/index.rst.txt b/_sources/search-and-filters/index.rst.txt new file mode 100644 index 00000000..29582b0d --- /dev/null +++ b/_sources/search-and-filters/index.rst.txt @@ -0,0 +1,333 @@ +Search & Filter Conditions +========================== + +In the :doc:`../getting-started/index` documentation we already saw how we can use the ``SearchBuilder`` to +search for different documents in our indexes. + +Beside search functionality the abstraction provides also different kind of filter conditions to build +also complex overview pages for e-commerce or other kind of applications. + +The following shows the basic usage as already shown in the "Getting Started" documentation. Under the +``$this->engine`` variable we assume that you have already injected your created ``Engine`` instance. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(/* ... */) + ->getResult(); + + foreach ($result as $document) { + // do something with the document + } + + $total = $result->total(); + +.. note:: + + Currently only the ``Elasticsearch`` and ``Opensearch`` adapters supports to search on + multiple indexes at once. The other adapters are not yet supporting to call ``addIndex`` + multiple times and will fail so with an exception if you try to do so. + +Conditions +---------- + +SearchCondition +~~~~~~~~~~~~~~~ + +The ``SearchCondition`` is the most basic condition and can be used to search for a specific: + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\SearchCondition('Search Term')) + ->getResult(); + +The condition does only search on fields which are marked as ``searchable`` in the index configuration. + +EqualCondition +~~~~~~~~~~~~~~ + +The ``EqualCondition`` is used to filter the result by a specific field value matching a given value. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\EqualCondition('tags', 'UI')) + ->getResult(); + +The field is required to be marked as ``filterable`` in the index configuration, it can be also +used on fields which are not marked as ``multiple``. + +NotEqualCondition +~~~~~~~~~~~~~~~~~ + +The ``NotEqualCondition`` is used to filter the result by a specific field value not matching a given value. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\NotEqualCondition('tags', 'UI')) + ->getResult(); + +The field is required to be marked as ``filterable`` in the index configuration, it can be also +used on fields which are not marked as ``multiple``. + +IdentifierCondition +~~~~~~~~~~~~~~~~~~~ + +The ``IdentifierCondition`` is a special kind of ``EqualCondition`` on the identifier field, +if you want to load a document by its identifier this condition is faster in most search engines +then using a ``EqualCondition``. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\IdentifierCondition('23b30f01-d8fd-4dca-b36a-4710e360a965')) + ->getResult(); + +GreaterThanCondition +~~~~~~~~~~~~~~~~~~~~ + +The ``GreaterThanCondition`` is used to filter the result by a specific field value be greater than (``>``) +the given value. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\GreaterThanCondition('rating', 2.5)) + ->getResult(); + +The field is required to be marked as ``filterable`` in the index configuration. + +GreaterThanEqualCondition +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``GreaterThanEqualCondition`` is used to filter the result by a specific field value be greater than equal (``>=``) +the given value. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\GreaterThanEqualCondition('rating', 2.5)) + ->getResult(); + +The field is required to be marked as ``filterable`` in the index configuration. + +LessThanCondition +~~~~~~~~~~~~~~~~~ + +The ``LessThanCondition`` is used to filter the result by a specific field value be less than equal (``<``) +the given value. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\LessThanCondition('rating', 2.5)) + ->getResult(); + +The field is required to be marked as ``filterable`` in the index configuration. + +LessThanEqualCondition +~~~~~~~~~~~~~~~~~~~~~~ + +The ``LessThanEqualCondition`` is used to filter the result by a specific field value be less than equal (``<=``) +the given value. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\LessThanEqualCondition('rating', 2.5)) + ->getResult(); + +The field is required to be marked as ``filterable`` in the index configuration. + +Filter on Objects and Typed Fields +---------------------------------- + +To filter on ``Objects`` and ``Typed`` fields you need to use the ``.`` symbol +as a separator between the object and the field. + +For example for a document like this where the rating value is filterable: + +.. code-block:: php + + [ + 'value' => '1.5' + ], + ]; + +Need to be queried this way `.`: + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\LessThanEqualCondition('rating.value', 2.5)) + ->getResult(); + +To filter on ``Typed`` objects also the `.` symbol is used but the type name need to be included as well. + +For example for a document like this where header media is filterable: + +.. code-block:: php + + [ + 'type' => 'image', + 'media' => 1 + ], + ]; + +Need to be queried this way `..`: + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(new Condition\EqualCondition('header.image.media', 21)) + ->getResult(); + +Also nested objects and types can be queried the same way. + +-------------- + +Pagination +---------- + +Beside the searches and filters you can also limit the result by a given ``limit`` and/or ``offset``. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(/* ... */) + ->limit(10) + ->offset(20) + ->getResult(); + +With the ``limit`` and ``offset`` also a basic pagination can be created this way: + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addFilter(/* ... */) + ->limit($pageSize) + ->offset(($page - 1) * $pageSize) + ->getResult(); + + $total = $result->total(); + $maxPage = ceil($total / $pageSize) ?: 1; + + foreach ($result as $document) { + // do something with the document + } + +-------------- + +Sorting +------- + +The abstraction can also be used to create complex overview pages where you not only can search or filter +your results but also ``sort`` them by a given field. + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addSortBy('rating', 'desc') + ->getResult(); + +.. code-block:: php + + engine->createSearchBuilder() + ->addIndex('blog') + ->addSortBy('rating', 'asc') + ->getResult(); + +The field is required to be marked as ``sortable`` in the index configuration. + +-------------- + +Summary +------- + +After reading this documentation you should have a basic understanding how to use the abstraction +to manage Indexes, add and remove Documents and how to search and filter the results. You should +now be ready to start using the abstraction for your different kind of needs. + +Missing something? Let us know by creating an issue +on our `Github Repository `_. diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..7577acb1 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,903 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 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; +} + +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; +} + +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; +} + +/* -- 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; + } +} \ No newline at end of file diff --git a/_static/css/custom.css b/_static/css/custom.css new file mode 100644 index 00000000..5f8926ed --- /dev/null +++ b/_static/css/custom.css @@ -0,0 +1,101 @@ +html { + scroll-behavior: auto; +} + +body[data-theme="dark"] .sphinx-tabs-panel { + background: none !important; + border: none !important; +} + +@media (prefers-color-scheme: dark) { + body[data-theme="auto"] .sphinx-tabs-panel { + background: none !important; + border: none !important; + } +} + +.sphinx-tabs { + margin-top: 2rem; +} + +.sphinx-tabs-panel { + background: none !important; + border: none !important; + padding: 1rem 0; +} + +.sphinx-tabs-tab { + padding: 0.25rem 0.75rem; +} + +[role="tablist"] { + display: flex; + overflow: auto; + padding: 1px; +} + +[role="tablist"] > * { + white-space: nowrap; +} + +[name="TG91cGU="][role=tab] { + position: relative; +} + +[name="TG91cGU="][role="tab"]::after { + content: 'New'; + font-weight: bold; + position: absolute; + top: 1px; + right: 1px; + font-size: 0.5em; + line-height: 1; + background: #fc0; + color: black; + padding: 1px; + border-radius: 3px; +} + +article table.align-default { + margin-left: 0; + margin-right: 0; +} + +article table th { + text-align: left; +} + +.sidebar-drawer { + max-width: 15em; +} + +.image-reference { + display: block; +} + +.image-reference > img { + display: block; + margin: 0 auto; +} + +.sidebar-logo { + max-width: 80px; +} + +.sidebar-brand-text { + font-size: 0; + display: block; + font-weight: 500; +} + +.sidebar-brand-text::before { + content: "SEAL"; + font-size: 20px; +} + +.sidebar-brand-text::after { + display: block; + content: "Search Engine Abstraction Layer"; + padding-top: 6px; + font-size: 12px; +} diff --git a/_static/debug.css b/_static/debug.css new file mode 100644 index 00000000..74d4aec3 --- /dev/null +++ b/_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/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 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/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..4c7b1ee6 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '0.2', + 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, +}; \ No newline at end of file diff --git a/_static/favicon.ico b/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..616d3651556389d47af06cd9c4c48f7aad1f5857 GIT binary patch literal 15086 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 OGU?cej(NEE-v0pR#Bmw` literal 0 HcmV?d00001 diff --git a/_static/file.png b/_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/_static/icons/favicon.ico b/_static/icons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..616d3651556389d47af06cd9c4c48f7aad1f5857 GIT binary patch literal 15086 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 OGU?cej(NEE-v0pR#Bmw` literal 0 HcmV?d00001 diff --git a/_static/icons/logo.png b/_static/icons/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4cdc9939f56b03b98c1f1aa9c89cd56d8312cf GIT binary patch literal 82455 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 literal 0 HcmV?d00001 diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 00000000..250f5665 --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * 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-2023 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, is 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/_static/logo.png b/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4cdc9939f56b03b98c1f1aa9c89cd56d8312cf GIT binary patch literal 82455 zcmeF2)l(eb7wuuGzyeZo@U4_qlHL#F24^b-Ci?Y75Zg~ZWV{I6w7DFY{5nMW zbsTyjJpLlkV7J_?!Jv_0__TVH?o2rlicQY@ZLZ3==l}ote~Qp=gF}0d!*X$5N&BSt zY*F_=q3jpdqI~|9YP^)>(?8*y|A>3x?BL$M-bn4Hj?Q3>2z|>=DVy@fACxo(g3bPo zrcxslq>@L4OGhV+MgJ=p#fC|bV^L!cG&zhd{i?g^P3(QHKqtQ7ng8z%BKeHUXgx8v zmhCF;pY|}f-Tq=xF$*uMN%<6ETGkg$9+l0Q@YTna8ALu zqcok6!j?*D!!PXNXgG6OFdThv5H?rOQT@N?sw8(@t|P3W=y=}Pr|*iW3yREg3kggq z!ptF-XWw^sNfLo5*Q}uC4ci<3ZwI#TJfioC3doao`xBfoH7yndNeY$XGxr4_WnG7k zJ9N`BPQPH{{rB;>BL=U$QPx|!VgG>06B6_hdCFKX!?K{@z-O2y*a>6~XJ1s{!vo_X z2#dk9PDP>*RCfv?g@x?LKDZU{X1xBd>@T4?f}qDz8Elin7ty2b9P4J@WpTcpad}kS zL*h^g==JW>8>-wk$Ik_I0IIr1N~Bm79T2lWn!=H8t8Z+@cvf07WLZylMdN~H1resm zqWEp@mM8c*q{fh$oZ^;ci}>idbF^=G?yd_lLvtW%Vyc@-r!`c`yZ5MgV41kn-+l3L ziN_y&M4w&leucH1e30K40s_XY02BfEt{)nZh;GskwE~So;TjLbl~=S|HFBtE5v2>dOB3z*FjcQ}AO#d^fvEU)q52 z#PyaR_QzElt;4ZNqTZT%pCJk1RCMGxSa)UoA<$^!yD`zF4od65YVrYX{`&WY>*tc^ z72CP0b)@t@lll3VyQt)3w<;<*rRPD+l#&;U#DwR_s^LI;Ny^0rA1{5g$Fb0-vq?tK zKv8CyH_A;OL6?J~Fph#qL(^)1njpsTuN9vf&Xc~ofSMl{c`{ae@<|T|`fkLQ>q3nt zpwI9L!Ed3cMP(H(3YIJeR!Qe;U0gYMrQ1g;(bEm{U8g2<%Z&r;E_y9XTnmoR6Vk12 z4+8bZ5>{to(yle5;#2+P zp=pEqi7Deh7b-jUZ@-76CNIxLw;w*ow9Y4Cb!>?b2_0WyT)40@UO09{h#kM+pWK`m zl){VH<0lf%r2h@cqa`1AxBfll0C!KE+C3}}OnKMh*B3PFzfnP3D57pyGT}aR4n>H1 zzvo|3H}&sKEw}^t^6}Q*q^I9re@Qd>$?rtiBmXgKOvfooJti(zNl6t!fKzaAo|si9 zr;)!}BqIGu3hHKot&uLkA~Q3J1Dg)qm8|&GFr8qA7AjiV&nLs;e4AXnva^q z`lYnDceU%FDaB!_w6v7SkX>XvjpvkV)^_oFRj1{qonKIW+Qar9iPhla2?P`>7Va6^ zD$?sqEi`kgQ*vO@>meoMSMbSo1}nNxo8}NR5MiIDRhdL|dXIUAmwF%?Clq;~4fj}+ z^*VzX_p?fiu$r{ zj>6aodu*-wpNaQd-*6wg`C@9FF`ovuNS)5z;?!a#sI7nJhOTfmdshda+CY7ae^n?` z4 ze~hGPG;-#rLDqpfWg9v|Xo!7OsBS(l=D+mPUnRL8FbJKo>$r8<)r;zZpt>ZRy?ZSp z)}Mz(^8s9B2Y+)SqLyc1DN69Pja~02-W7A3VC$1))bW#P%d>r+|kpd)6zKuSJW7ftOOuzXkg{fvsl09GDf1HxDpw?U!eGWMI8<77YeG$tZ6uZG5SZ&f7O>2y{F*SA?TPB zXg6ACQ^I`nLUie-yYsU9{IPXlkTCWDAApX6LJu+ZcI{tuRk?}ffpXo@Fh@6q)zG!m zB~)K4DYxR>91Jg=e)8~JDD^A6)NBXe9IalNSPNIB-Y=>l#V|+4lfKMNHk^6zG%Wg5 z$cj~t6{S1}x!hLgzF^zV-A4ZOD=)vTb?fbq7K}z8IQxbqFm8`u4(R)!jF~M|0zS{3 z7-5g8-S=>s#fS+;m#K02D6rTwBp1cNXogB@C6{D4`aH{D5?hZ%wl|zV;&TVp?%dkn z_2q$B7(9M$nWFLg%c}1t=wQFg5c);@Eyqt#grM&Yj22SgH%~mj(zsNpL#Tgd^O;y5 z(JE5v(NlVV-RYx#n)E`slnWB6-F`b;if~iZ9ma--{UgMPma2pQu<1AX#WJRY0E7O& z=ng#in^PMrfzJ-Gxw{^h+Ma>l1M|7>FVP@GB@vGgy?6C@BCT7^*eGFX^5WLk`y8LH z^W{h;wQeaWBU;kr=}z)5c?@GSM08NZzs%`VaaZB6UK_V??6*MQJ%>TL&!|f0&Jdf} zeXc0u$*)l$dBX4r}fThKh>Y){-z^BK)C|S-m2=q)l(UDo3_a$m|Tj( zU6Osyth1l5ON?Bd6JEFa% zYu_rKL6Q}?3 zP2=%s4}be0-^V^ApTgTDtW5_Akv_ZkBvRi>NBPOjCFc0M+awHKrOEdSLBDB9ScvZn zNi_H5LCQwAb8ghMyU@kJ^ix8HbKXFo7l`vrxtkUVtmr|PTve#iu>b8$1TPBeTJ>|` zrm|3?)CUy{`a_$Q%6!e0vLeZ{`UbTHP2_?W+i9oJHPAs zH(`Bp7NQPG98wSKa@RnRTt_)Dc$zAcpNB?A6fk1(Sh`WSw6P_8Mb<_Jhk(`K^Ux@QBTuDW1puBtzA5wDGZCg^)(v zF2|ZV9SOevo1w?M*4q#p@y?mfz0qu+hTI5esi~A~6RpBbu?~e8!udf zRbfgA9kQso9rD`0^&L7L%i1NxI$cPy5MM-K_0L9T8u5wM!>TS-MC$t9^f@?)qC<7&>20lpzZ z*v2=BHJ>h97F1AT*-@jEYfc3ws#^~4x&6~io$=->gOGn~b7ndt-#h=uQvs*;>+Dst z-3q#3#5clmY<@WshY-_!d9(+Ws^FH16PP}_Al_3o^S^@hh)0APx>yhQ8_kLnlFCJ^ zCd1j1_T22K7Z{ULKvzOBY#^iJm_<=`N%7Deq2m(Hs039qEPkYT=@@-kucUK$-pjc+ z-h*td@*oL~LgJa8{MMfD+nt!g7HZm0oXMLvjYy0kSZH?H&9@$qf4J|(*u#EA*A0ph zOq9)KQVGe$Au_hPn!f{6^elS6?Dl!?3+hX@{dH7#a|nWpzbi`va8hCv{X+o>izyH= zj06R#X||R(%!xQ_fo?nBiC*{__4KE)P0&2$)^p8!m=Or9`hDrztY8cT&`^dQL-hF0 z69wBP82ZR}?`7ZUQ?n#eGPmH)h?CMfCw<>evT(ewa(MFwA7t`To7?wo5{D<|7}CHx zXP*Av`B@`%_Y*&;@Al3Zm^*SsALb)Zf{<n|OE&m&*pgn*P!6LBqKF zDk`xsSK~uZB-ErG7J>wWa3{0EA(y$02fV~ZrIuUj6#vYH#ifkhkUH0A`AI1bc^m6L zXP&Cr*-i2Oy})MbuNt% zPh6)*_=l2%HS3h~$>mTA=^yF|X@y@0KG$pxsOvsrT+Q}Roz7#Rqw{0cEzKj6C50iR z{;T&<(UNZPq(D;9r?Sq?`QT+nR@M$pfHF>W^=5f40_1(?U=|zk3+UDm>V)vJ8RYnHGdXik4LXY&0n-Hf_hd z6=p%h(7`ELHht>B3snt0%vd(l)9k}|bLr@zy56DYa@D!em@jK4+Wt5_JxOf%%@9ZR zLLLC?apxVUZHAfCVsNi~xAUnUF#*{KdUPD_-XgobGv*KwD7%+kd*w3vR#eM#ctqAL z1>Z=VIlnA#W8|@e`=w(98S;B$wq_hBvoiJv;)+xAcePMGiUD@}`8QOB)zdAee>;(6 zilG|wQPe{(d>B{Go0RzYg%dd+gc|?lWS>k&!*ri~eShBZKM7w@0Ny-zTy0klswc6b zps(Pp@U3(pNPgnr7IL3)_haAd?}H;Ea=m3wEIfVbdo-M{It#^yLbB$oH(#DjRFMQ$ zJ-(+`ir@qKHGOvw2mNmQm3RF@n$|A=W4wb5w8+G;p6=|v1VblqA45MKSS$P_gp(z*em8|Pv!$- z&aCP!?&bD57hjLQWGZ}pj=oxZ;A}9lt20vvjq_N9jles9(Jmka`lGCx!`5BH^Om)_ zG`5NQU0?w;O?I(DBCn&`w{cI%;%C_pPcE6${&_JOe`a$I9xk7Do_4B7j&#TVBsb6q z6Gv~ldS*v>lDqwYz2xH19?E~uJucJ(#)dvJT2-)r0N}YY976Qq>p;_Hd4#QnTi?_- z{94T=rZ?1SFCWNxSE>R)+walQ4WR}rrTbKXL9V^u<9+3MEpfc=6Gjf%eeGVZ_SxkH zx>mR10{YZ!u7b%s?TCDu_$S-yX=DjU;qLdU9+9yVNywrjomQT5f3mdB>vDxm*n z>3tY(UP5iA*+6dMbj*dmX-05B7bU+vd#zo3FzS}lj!A^`-$*_fG1br$MUZ%9oY5N+ ze-rcK_KRUG)h{FdK^dXK>N+dO8f!6h%hp!Kte?kLV|cI?M|I2pL6+i)d{bbAt+E!n z&b_NSsXIvAmmqyqB%S#H98`##$4_8%TEuwR0D@}s#c7nIE+rUZqe3Q$uLh0n~6oui=~5PGk&F? z)GRs7s~q=yR8oHbW}s8Uh)T{%rjPN?@2723*@&#ysmY~!0y;?fdD1qoD6VyeaC~S2 zxfpyDM3|yiJ-^%ew+`QJ?SjtNqLX8NVBOa)DX!Ttfccak8Q+)H+qc~?EUewO-R_C! zCW9@1|FI}YRTo!Pm#5_? ztZ|CJr5##m6jNs>g@zf19n!$yf}%{bW|_=ylHIUoF3ZBoPG@S*{jO1G_FOPTeW#!i z>MrU4wyXqc4jN`MXRH_Uo&KPzO|}Qn)98ue3SBM)rwwB`9{#y=#{AGTa9}P?1{(WR zH*Sz|qBel?k5{}2G}`j{*M~A7$7g1YT?F9X-fm~?) zVDJtm)nK#k7QAUR}K@A=F^92+(&h$1bIxB`Q7=g>%-O`yeW4^v`x=6|I zxueHJl2Vjz5K`^~dW7 zxe{$#S}SL1(5ZWqvvoGD1DJ$|fbSqG^gwx(5_h(8aUwt}wf;b``<$zPnXw^xZzqQE z#4nPVIlQQ7BcI1q%N($<81g&07`+i~hG!?$bnIc+C@%k4AyE7C_8~6ymZc z8L0a8m;zs5A%cVjdO&Gj)IlK{sMn7Xolqg652pnqM@i+E_1Xlsbe97Dq$m#}V_!x1 z0_1$R8cLW?JRqx|71dCL8Z*~|LNP(@(KmTP@Wf^RrR&bg{btazM;-It+S+2_R`uiD zEZ8X63C!a9?%WkESv0SW0b29+SCrYuLtuWg;h5B#0h`jc!Ezi7Pg5e3VzD$TfviK-)*5DGoNJM?6D}Br7*G7 z)nrGd4i%@S;J5?c3C9?5W$LNpgV86?9*~S0t;)dedKfIiB@#WX-yfzmDmER$;0U3& z2}>^Ydb8YfE~f~=$+wy*SMf-wdZ=q%lxz_7S^{&2-GP0h*gYonNaA^BEhGR9Bf$nq z#~z!(4{n$dLh$+yV#c+>WgYR!=D>lSWpPWm5}}9$>pYMVA*M40T;O5?{)Dj6UyRUq zl_Rc0_FjdI{TvYZP#JlYcc)OmULRl0OjOd!sGGD?twW#*ybXvB67r#ydB$uXoN~YZVfl4& zPLl&M{dSPS8D)0n<6U+bETds9cXEmd%9jc-@BL();^59YHKo1Zq!GIu96q0VGEF%4 z0~Y#X=6v_#oa`+Y9vW^_1o+eJVkhh1L1jCcWUv{|fxuK!8)W_ntnSEHQl^ z=(O`{s7)v{)b?D?pE+Op)woWfHk4oNgL8VV-YYo*X?IQilA9ug6G)Y)qZVbel+cO- zd(NO0tZPD~v=CV+Uk!z%66|-N;5fnF$7%_x=z;D4ux&p`l6|4a16_%Re@afn@n z>YTUx;8BfFVL1Nt*S&9P>4i|jpV-X5pt!yF@7ie-@o!FYw}$x_^r@stAXA)q$ttG( zz0!9h`p|X=i|Ibbg;?mYDTacwg&ZGOS6*wW4-YDo3O0bV(i^!8Tc4QHxEBH`A3|*k6Lf@p4M{ByIfCP@`YjS^i)+X$T|fNtpah1hE~w5 z0klC><`Ra-Oc`>iR{YdJ3uD;rbCp%D-J6)OPkYdMD@iDe6oV42CUa$uj>nH1iZ-R~ zKlrb`*U0_n&if|2VEy4g)x+AOS_3s7c5dcEBVi1IfSQir^m;OmiT z2iI@;FL+H0aB;=G5SOPU2mk@~9Das(IkxL^u4nVzb&xCs9dDYILv)Ta8=0S!+0s#0 z1l0YGxe-^m2t=FdhS22!AY%zdT|qR8oo-GVUVNXR6t8l3MzP?`twubnTu1b|Z{2cu zwdD)j!eCW$NAdwVN|_+ua;$@xzPLDhnGGNow+qYfWZ2{Q7o8ZFo{Vfmb>M*!e7#~j zcw3eus|!k%EEd(lkd9g@V&^$&Z5K2kw2|uwjx%QlRsz`KUd~_$F z%`vFm1nT*npip%gqwX9KUd4}WGuY&O z)n8|-=G(w8{9#BkPrTMbWO4)1k`vWE>ow&i^Wr!bp;7QT3PI501 z!v%0cQ7F((rq{b4Oyw0G&ua$S)rN}JlYt~YO!aJ@gab)_s^oUp&(eL05#H-dV#TAV2GN$v3T z4le{^%$CqZ@sSA7ar}TEcdu-~6MdDOGrnyrCJ-(mxWfsRHc7z4M8@FUnWm7@(ynqI zc~D9ne>x==egm(QOWnpsVohtqqWbG-BKaCOk0>NGWqIXvM5SW@zaJ_(4Py)npd}yD zFtVqmHwSG=hAQ}bgCCLiB<&X4`<-b;hQs4S%!!Mt_%p6V4X}Lpoyi5NV=u$1jW3l` zboVmb990eRD6fC_aYBnZBgV4i&w;&AnnR8WTI>+p{NDidHV)AGbNwbKJ|R|Q|Guns z$s+R&Y^Hxg;*Ig;-^;)FRBjfwIrfFpgAp<8gmyVq66kfu4sVy$(j}?K7o?~ae&n5O z_f0w{>|IVh6Y4nAM_%(1O{ZiALDxs|1md2~LukqPiDdF9TeeHP-hve^gPW<#Q=JjQ zXHdX_Z$^Yt@aWo22mF-8dK5JF`Wz_ny#>BFFDA4EvPtV4MYh0#P}xmD{uD!Ash$vd ztJaPo1zpFY61UQ~U^}V%Vpgh%z7VH9$^HfI;>J^eBq=i%3O0pia7EOQFT4A}%}1zm zmf^c6Azen0SQW0EZul9|LfFBc-X@!&BPH$|k!NOBQ2u-WMqIH2#E2cq9aII~!z;;e ztuzRLuCLz@LYuAAgV;n}2Y%PTi}tO2mz2Jb(GpZX!T|qhJb}tfsOsr7@BA83?sv&C z{cG0qyI?6cifk~BW9|A6MiesqEb@42TK6157Ym^D`K%row%to2*T5^MHaPymf96(D>Cr3vqjB0!y3 zgfF|VGECPunx$R2!w@yBiT#vL( zyjXR1LUqe7~hA> z_D8U))-f4GmEh9@bI)!;>pLCIn#g+MFtzSXhhdSbkZYiK7Nn+qir9PKP|w!V3#q`($J~k+-|?W!tSqn8^swIchrV_hs=Nl_3um3Q`Y-&&{ucltaRk%s ziABF{)e8G!_8%5?ULR(GxNhq4PzD1s3|5j}#If!c-Ubw`6VH`n-xE@|-hUBGGR5@! zY}EV?|Aad?y=5wr>ba&r+*jJS_lKf}=mIbVi73HBFvL!k5@uLH6@i$J4Yvv^Ix-3h zs$ldsF!!H6n1t%F9cszKxa@Ii`($rwZJr%%PbgW@lhTNLW=$)uRaIBO zv^a)WeRhxPhql_@LBGnx{Fc#bT1Z3~XUpP(LV@)$i*!!>>ojW^WXzL->j)FFZ#=11Q`Zjo)5uZ=4=wf|2 z&FpErJ|B&#b!EKYKEIMa#N!z8)E^LCNiV}(bk-C01PdVX99Q;}_Hnk@eLR%XCYguw zXFbD}efI;mfjVuQO#8(@@>7oU0W5l??hXJUy>O$Pp=|&HiId5@(YE~i-7#4V`k!1CjOr-lv1 z(TK40?-;2EocPH;$N!`q(*1vcP?Zdk1G?SVUV0_kocY9zy1z24Lul^>)Kis@FpK4m zNES(Sr`n*z%KQ``uQ8Fa5$SWLv|%zM79LD~>HBEe4n_S6(wup4o z$veI;(|*MjF+GkzoVwkzNx8hB*=ezz@WPuy>G%GJQ3L|gu$kj?XcqgiAB{$18Hrza0cYj_LQUqMaGe}<%)x{GcpbnIRd897%1{uKt6(KTJ1{DNdYodi0eK(O;}zoXbix>xl*wXSi2j;)}eXT2v?Uj)$S}Sv0uXe>2IGB}3rDXu;3gQu71M$#Y-k_i^ zp{;dQY&{9~?3z>qZ}KIO#Gf`-W+E}DCfum$;c3qYIfK7BF|u19p0g$lh1v85Zv2YZ zy6^{73SpSPm4$8iH+XNW4FTd+jEt=|32?dH{4 znay6O{PCdYKbkHV#}oa8e&d1cyeryo;?(pQq2SU!rsA3y6yQO5U*?34<<_ypH^Y2$ zkXL=`t`u-4phYDVYzjYV4i4euA<&=wh{SJdZ7r@K7x||ouu1nFe1-^-&h!Zpo`^Au zI++n}zz^$k_>kiFp31TlJ~KYP80Ujp{F{~oqM*brbgBprapB|v;3=6|T}V1SsB0QD z-ucwO=42n>`wKx=DHIOK?u(A-UjVzuzWh#8k%kNRBONSeR~0L@b{@q>%;HDqgx zKKz27IsEYZXTba$2K$%jTy9U9c7Wm|Taz**wm1@ltPtsS=hBQR=13g_kX!>p`S9hj z@F>CWGFLN*nUczru5c(Ra1A3I86q~@?>C;D&bOj!KH<}@2u0&1lzt885dFg3=;bT{ z^-rz{T$X%y_Eae0xGbZvBGLZ-z_^%gEkF#VF|&1^Cf95LcQ|18;SE;v$ONVQJIAnN zv0ev|fAAg`>08*_#Vy{3ob+%U+MN7PY}^@$9gI&`USP`Zv#Whh37!R$f5JQcFw(J~Cdlk6HfLIpP`H)?*;adEetG&U4Z1Jp){& z+<%Y;8LzlHH9hCmqtz&cVs~i9&;oGZ3qFd-{fN!J?b)*Q)V+7Tzc|$Lv@kCVl$m8i z#zA9Z0hqSz7Q21>vN+FlDT1jwBuC^R=Z}eJq|I(rZT=^%+f&LG5ljyAnz)TN28L%- z8ulF>t*ztD#%*lYX{5@7t{&!i( zYG!F-5VeL4m0T0<8L?h#GC4jikVLiInmTtAcJM~5voYnC6M@QvG6KqRO@%|{Ks6_< zPr1`AvAy4P5if4Ri@5F?R=MdiUfCm2P(4S3WKH8FTXFDi&SiHE zje+28GaWiQAvP^UsP)FazF*jtrTNnN4wZ)6V;r`szg508l4=zVa-xMj)FR+IQlg1E z=L#Pfr}fvIHKRrkIzg26T|xht7*)T>jpZ;qv0Y6uF4!b)m0b;QFfb}ZADf0Q4Y>$q z(?|L5pAPxa@o>O<6%V)r0x7x6q0RE70-U5%KjIVoWyKPqv|4Ad`KqY&KL>;yq+pgM zl6EmAYi=7F79|T#NpU7ZQ4WLyuawW1%99%&nRiWOE>~p0^C1~OaMzi7B3V1d7kY3F zpLjtnTVq}=%Ed?j(aW6h7VUp*OWcV{$}oihA6s zPpOjXX{S(h>d&w}JqhklhNb5&?z;esFkRCyc0n(cL5JTr@0Vo6e5{YrR-+9M z?yJoiN9ghpR6g&q*xQ9+;sQe89?76yBstmaMl1H^lHC*CFnWpJ8{x9=Dve-13k)_vIiFf5QW- zcW&0?LqTZJiXZK+?V0qV);BR~$*hnUC^Bk(5f{fHiL)#|kq}2#@Xco91{N@;90NgD z&%e{rl)m)ttpmMHPlBSq0~uyC5m#5&>Dp{C$_XO(B{wllTm{hsY*VXfCKuirvUC*H zjRE|j;_1G4fe#jXLAIl>;TJEgjrwArND1idWL4D~X~H2UnQmK@}A{dn|aNET?!0=^-{glS9^m~IuLBZur!U_UaBMz%7AC=0|KnfG}v0il> z$FS&`GFiOQgs9W+sji%*u+kv+Q?xUK(VGg)?6sRt_+-P?4G{)-j%uIvvurG+3BA zGSib_NEmw%$@=dDcIbHx-wf!~G!KOo9axGwerRtZ4)VqI?1l}I?^dV(t?{AWXT`w? z_dd%6s{~JlQQr!;rMF0n2LTZn5wZca=w|ECTL=12nSXz=A!T$XD5N;Ch2wym5#MMe z4fU}=aj;(91%pq$hyxfE65V+QRI82-8NsMaGDEW`B_Vj2nT4^(2$hJ~b<>CQ*4CHD?Ic(F*`29qM?0nvJ64hoEQ9{#uF*oxS~cuy1p_YQiH@hY-5{lT zVP0QR`&`JCx>7he3t%5Pf|K-RJ0p>PtmiDe-TxhZ4wzDdW;ub`B*lsU0pp(4n}U_P zx@N|;UX9gdL|l)7g0Z(nIVtIgGDM;aN|Uw(AM4DHxqbGRIRDsv@i6X;2*&pZk{~2^ z1_1aSXkyogL$av?ZT$n5!$7!oSRf_ib@z0{=vA`xQVe8#XKHJjLd5lhwukh=XzJz? zOtJOHyU`@?W5n(%BLMOP4S(#%1aiy$pR?$fzYE}3Um^SSSh!h;XGS?d$s}~_i`xi% zZMf(_uL}<0?#=zlP{t_9m1^@WgUH2v7ZwAZiIIF@-!uaA2yX%F^F4qYh z_LZ5G_dRB%L|DIkx7UnuZU+uqVcH4f%)xAk&xa?O;)lUhf6Nk(sEYJ?qN#{oJJV`6 za(zfb{8!-DO&1(*G!c!@*V`S3C$vTD!3eTGbWa@w@a@O2hu%s7xGeGzk@pWLLYAsW zbe&N;rqRzv0fIv_`(U$_QeymCZ6Mg1K)?pey=-~cI>?%@;zm_-xGj7@Qidt~TXe45 zk-D?0`yg9Gv%^mVl69K4dk2Hi!OfJ?O+S7UIv?hZHv%1W>a1JJ?bj~%{rwgnWwYHu z4r`@9TLPL=QrsU9fnpzeheqvPHS3!Vqw8K!Cp_`P_gS? zY`_;?+9W9|-E|+^oJr2bfERnI)2}H1aXC}>DovJ;hEJdEd=+o&KAcfZ$*5y%pKWBS zMbx)*w|NJzPIstCh=Rkc+kKV0S(8sN;Ybu59{8-Y&;J#am>>i_%Uyt;+)i(IHjLg- zrj257qU{A4hZeJ_K|Wkm^TG82(9MI#pP+_nkaOCq|FZaMt{za`;y$mL9>Lq^R(Tm{ z0%NsJNOt!^IEPco^WEyvEu5;-)2FnBu~0q4+_l6 zazcxwLRA}|lw2R(LDF(9d}#}kTz=Wo!aE{Bo%J_7CmQ~(s6%dv5D8Zwp!m*z&H6{{ zQ+a;mrJir_;jQDx7-~B|xmkWK<-#^m8%%Z2@5rZXwCY&2>Cp{9e1DV>7k)ezAWi|{ zqj+iAH=ch~E3&qzFxAxvQnDlY!V!zcDAWSJtrmRtPU0krQJF?Ang&GC_9#t*&o3D(eEzh@{YrG)KULYl! zZ`^9dLYPV?hORZyPbq&v(SH}bZu=pjZ?9q7v|akbd04tuN_b3>@sbrmLPcUFqHTv+B0KJ}IwhyFHRmZ|h8FP{`-@C$Ha;tWn4$=6l z(P8hK^*@zFkv_}-V;9Hj(_M6wW1Xv$X8%U29*%lA=`4SR2;!oky&_ez-!B4zs?5i$ z)gkFg%iKg1GFrh12(LsR;^G{S6YadH#B_<>At6z6`yps@r8#mN;s`Sts=lI zP{Iwo)a6IxS`H^}tbKvGyR2qOR~E1{lojzHGhgLP1pTRh_bYRBk%h#p_rfG1$#02> zblXfEV`S-rzv?ib>RtOE^=dbsBR5?%7ko;v%uVIRfBD$kF`{tLDTh9_U^W{!13V&F z)~YFWPwv;LKjM1IP6DITM}LZMl`$kEfrw1D%;)KY+c^X}MLX=g?2K({+=4D`(|Q$% z*nh_3J%lfo-eb@;*mdc5h3wjyScCZ!%nBA*uyi ztTVJymxDxJ;j9IhA6FD<5h7YeHLFnU^G#*V$jHGOqnkH4RYtLnzsUXD=h-Pg*7sVT zzxgXE?$hvOPLx$gN&sY*BJp^vNjgB5MqvbF0fJ1~Vv@;qEO8)`6&n@p5EmuUA;>-b=p2)!)^0&12aDw?Xc9u80x@S}9tMHLX*?o;O!X${2r_QSR6 zgZ3CTke^t32|6*iP=XFy#X(pbWR9`np106^^VU=-XeZg8c0Jr&W08e}|rQu7)DC;(`^ zk75=>TXy%}6L2M51w`qHh(g1I5zwwHu`z$Pa;a&gXMXJ)7#irv%hgi)Dv9YXnp`({ z;FyBIz0#!cPeO%mJ%s2lC=+u93pe}(-o%iTAALAA{dMQ=F5MmEV@eDNj3)|`u>WgI zocJT_fE^>h;ub<9?0}T$Kkzj|)^DwONml>g>|xC5+Q|8eqJ>xK5>1VDX7GI1e+yE! z_5+U@l|9BlSv=c@bFdJs*zb!cAf|cdp?C9dPHTGe*YMMeFej=U!biRL3dA#BTqSNV z&iJ&AiI6qU#qxAC9Ut!5?mI;?%Vma2FSV)od;dGi*L|!DcBt%DQ(T0yAyxM6`?$+p zhu`vQ1w|+TglbG<|1I;FIEE?oX7ypQx|}_u`(gddWgl4%J45K* z*brcnQg*W4rLK~B39&cU$EMi2lA5gS+9b{L`YWD3xm%@H_)LOZ4pT!+#XpHx%qQ-2 zx56`}H14=ye*<1}E$NC&{{>(4!%Fm|e3$cEU!oMs-%JT7pMsQamIk82}CGBq;4)|h)`7{-4Y7K)s+^PeXl~o zRKULqbA4ccN+12dmFiRCRkw3T3iia7oE21oJJ8?_yHuSj5IRc>S?+QzhfRD_4m^aa z_z!qT@AngGgJr6hkox4Ut(i1BW`iJYhDu8*sg#F*^FWWdNeJgV-l3+t?09^c`gpvf&S#v&-g{Z zl0Ud^$9k1(znS-WaM1?D{QiRRkCE9>79A+fnHAVaHs1R_|dEXxRVkL`OUy{NloB__y4w@uj<0^xtPQYw=S zgFFPa9^GaP==3IvQ$JNwdwHCOr=OySV`+-8=d26hl7OAW*F_=N4U!}3@C|XnPdF4y zroL{kTzU_ZXiaJ9zQ}Sy)=P9&X~|#`rASZ^%`b*)B0}_-t+=@Ke2k4)1hlkzG-FAP zpJduZ=n+??kBelBe9p1xmN%}OQaJASL%IQ9F~q-lo<~QW(#SDI2&M@vP;v0f zM!e~e5o!RjX5KbVd2y`Th#ohcc^~>p$EvE0vnH9uKHTwequ*#t!$IwmK19(YG;J`? z`ssvBEkjPq9uE>W(?M!-n0e~ny&gPk|6ou~&Xp0#j)1ZXGp5eeMIU!5(P6$~2_1moZZtD{!HzkYe+vk_FgcTM zXNy3`L8FA=T$zQRdSj!Y>KvM^yNjYm!-=`nbo|lmFPzs~E#D{t&??5l%~YZO>Xc5? znxs}l2oz-(L`?jAzR;-3I6#T=15<*=fEP!jHik{p!^61dYQEaz zc7a=?Ipg6$j1;3ybATu|eJ}ex?glcc4}de##{$);p3lqYkt#6>g<+FtZ=AYxB3fs# zvxHv&i~z#~3c1^bgK+a}V)hShR^$|5W1oGkhL3jKW?xU{>H+8{j+o|89(vnz(Tc$K zOH70ndHIU^x=5$Rg7RbNz?gm=r|(km4wIHZ*-?;Fy}c$_Y#8GK5EITC06~|a7n(v0 zi=&Cp1798gq{OGqSv!j!+Hc-H#GPa4jM%L}yyC7D4Mau_vT z#^jzO6+>jqePsk4(fz-zi#tW<%O{t`cmE>5kXSN=>D4)f-P**=15w?^0ucV21Th;* zd-PXA){;JEJDLG|&ASF)MS(9*0MG44_^oeS?A!sRo7w z=EapXi&Sme5ac9+9Ozn*xxa=Waev(;l&zP1&xl_w0Eqc#j6sVlZ7GGZd#Hpp>OVfm znt^5wPDVZFv(nwOSDT@i00awO`K^=#a*NVPncsRtZvwbq@gU`ku26tf;#fbwh ze_Fv4M_7pBo&Ml(<-^WFa7dyq43G`AOfIRjdO0|2t9L}^!#bdZ9M zs2N$=eEIV$!_khl*Vc^L#_Lp;6@YXh8*@CRW>#~I&sZ65DK2_4v5qoPBWS#5Rhp1r z^k*)k^A12ehoW_>^&|kqW%0mAiou;Y1?Jnm$A+3&0zT`2z!xM=TNo9jkwHz=vGbLl ze@J}o2q;(@arQ*(bi$zwM+xzqbFzPZG-?PEaXAI8aA?g@J)QSDW!E6V765%uzv5hZY6Hcs(H+keGlV<%t9}n~&kU z@2?QRw=Z-d5kvV5410b?j6@6W(;)_?ewsG6Kc@c`QVhPyxyVpZ(#!)yIJ~t;O-w(h zMaBb|%9P35*y1bED>~EQCW_4CmShJtF{Zo$h8r0=QTT9}q?Lv3I!iWw==jJ3z}ELH z-8b*9)-xKg6~X}{oDH%!5-3@eqs650$4tA#{vVF6!mp|Kjc#l(U@%5V$7rNcX@n8N zq(ndohlC&@-AK66h;&OxiYVO-L{duW?ve&+q<{PV{(<|s_kHjC+;g7ioO2(5F*YqN zwInp-hF+E6?sLvE-JjF4e>yrZt0el^JD&V;NFHzs1j*=pS_0-D8z#FWDp`kf7UO&` z5Pu$|=qxnYNkf@f8qT+~%Gjw!i$W6vGNvVDFLjpt7S$oSt(>E1veKCDz`9eZfMRz@ zrSsfYL1Ot60#ao!kA`)M6Zu7$QbD$+4$1&XB8v7RL^?NSOhyTQkQf=Ak~_bB*to7p z68p`8faBqd&7V_-PS{5P%W|K{Ce`k!IF8=Agi~qRjESG=_v*W&Ny6XxmKMxNd+9d7 ziA7y9dm4pnmUSCk>r25T%tUtVa-9BJ`T!2HSOkOs!$o=*v+>AdE+lyP4Y2!n2cbu` zlq9V;nic^dZ07{4h|+i++Luz$H+Rx#VIDXo{g6w4pH-liz?KI&wAfH%;1A*17Hx~l z-(6rB_HhQzH40^PEw%FF2Ymd5v5TjJhUwr?cYvaB$Bvnk2@fDS0R~HkLH2e|X4XEq z>eabskWhNkzEmq~C%Ai;8nG8JVm|wR-w-Vd&8yH+>B@iuz_@XSB{y~(Acc>wRLW-v zh3b*l&{Y5)5`HH3^L`imasSYPGK)t4f&bT9U~ETc z5v7r9X?HSyyrV?rGNw$&94k-Fnlhp_t9>iWJuOh2hj3I13b_b#zq9$m^11^|aGI0V zwjQVKJI5I5BN(}!Wp?Ri3&iXb7smp`@V+KcX6Y2FDyTpnRSb@84b^f#*9Rx@+-TyW zFDvu>0N5S}P&{u(RY~|ssI*=rn{*!n z#GFKUS*XxvlIB!)kK-r!iz7qs_*9g0WYH-*mPJPUyX15gGP#+!uegRmh@T|%x@=rJ zuE`k=m;9iXFdUfj%8W9Rf&+bO3rB*)+NIgSvod-QO| zUbDSFY(|uMOZllPuA&V9Tn~4T4Xj^u-xbnNfCEG48hfUQQtj#BQ~9J@81;LlU3>kq z2fBt4q==rqKkkI6;~^t5a(^bJ92T>G-gwptVjGw-%#WL)uy#z)X_eSpCuG(NF9&3n zy|&M>*07K}!y0X<0pKrP=mteqUx|;~$HOcGzQ_S$Hovwcktzc$vmMEQi~mp>l4Xrc z*$7z~Tmq*0@w(kFx%(bADpft2G)ud0=Ddn7K57N=v)JZG=9N^w%3^xv7+j!A?jj>V zPt|A3?VQ?`3LqgQH}R96Hci<#E*>?JkM3nEGU0}3c-smBI=*WY59plHzF-#mB(#0k_uIKY-jAonaHWC5#Vu8F z5vnbJuDV%2*S9HLz1;4+iLwpOs|1*yO>heHxx+DF?1k>G6G~#H@NPp6iusr%vcQ3&G z=7)-1AGp)iS!~IC{>DQZo*ewyd%pABkua)&J%=Rcsn-jegZOP#ZAkl~!QhFl=9+yh z01H(VGm(xxVMW%*?ge$DfLf+ssy*OLKculZ;$-FX6up|61sRS-pd>-K`!^gh;&90Y zn2b|irAgt71#r|8EcbgqvwWfscSaFo+T9S1G;(OjatCySt8?)3e(mEhEQ~GtpZ?da z$&)r537iNlOW~+hp-l2eWi^A!g-pf~{Q|GyiR5E-pJ=nd*ue77TkK>!Ec4L)FHG?G zhfM&m`g0Y?D0TY&SBygDzps$kFt<9C_gwlmgn0TY&+z~qq&A+$saX1|4j7jlq4z*~ zDoyDse1`xkNE3QsU6T-W-Y_ItPFY6`d_(eKp@wVpIGkN(S>`WqHGdh=Po#5M%y5#cb zYDcm^!^Z_*xsGJ<{{3{Be{@3-J6OPG9_M%E&(y6oY617g9`#pTlOoWfYEj@vo|_U> zW8FfSc7fc+vkFja5}977=aA!DwScCbUktSL>>(U=drI^ONjH|9j+h}}+hy#}>3R_! z034~D@*EFF7m@S`^wGYmS;!acEWJR&9;n@m?KgTC2quuSRGjl*my->!_V`M{$|GgC zq^u>6d7zz5Ec5k07H<1!X*5&0ngB}81-tNZrEy!P=J+0$IySF#!S=}Zzghk;7QpI^ z*in*S9v62cqWC50B}b!YceLqInW82gHV5wGS%@dgG;gTQ;B z`w_rc?6?$8-Z-a)eVgsl)+JYv3%Mq8XRx6%?5^yx?6Hcc3LIG7B~)cHyk3i6slvDq{#B&Ip500b?)J z#og)tTfWxlxi+Jn6V;cG&%~Z`C|VF$F8T4FB+4s2ad@ZFMv&L+9xj*h3-ZDF z@y?lKEi>76Zt~O4LTE@4uM)mfAu^Zg4$pgF9~o>7993TMXBJGTAI~TrW-r@?Fp@R` zSvY>!u>_Z0w+;@i2RcJBW;bCw{|FIWsM4&00;VrPEpZ>z>0J8&4I!^aXX8{Gihuvn z7T>bF=&*aH0zvlMpREOY1L7W?aGmFYjuZuv_E)N5!6?mNvNuI_R%Q3!^2GLU+2jsH zd5l>991xNw4O9H#to@s+#H#zo;Um<_2^P+sm%vgTsOBL=uPowO4a27y-* z-Fu;yGUKJAJPta}%cQty$=OclW?)4Q&R0oBH+wg=tV`f8FcV7x-&9iJg@#u@$%+?3 zlMMJSRwv8fPp>lw4yWL2T@+={ZGR<=*(kN(KBypLX?7r8jL&R@QW8aIzR77R1zB>( zdhg|N9$$almn1~4X?LNJX5A99@KMEMCETdl=h?6U&Hu6;(iS9{Bm!0f=eiv_rO#yP zv|~W5WN|+lMr+->Qk{7n)Ow_K_yMsiN?eLSOW$f|md5LSj1I;cFJLpg_L9^^f8Dsj zHgVw^1tXeu;!(G;LNZsgh8LDa1cX~We+4!36-2ahf0Ux)bbL&E9H-jiTCf}Ke!q_= z)Z9D=c@MqRF~#!qBHL^@P^+^^bq!=(;|%-Qj4ZZj{(%BAw)s#RUL5sI2zYOfQE^N< zruR(@-Wx+f+d1^)tYets=+#EnupzF>p3eXEJJPu!LlvgWXBY2HAhSeuIM9+zxDjYG z%f7JcRf)TC^<);!<=~WyF*L-(&4&FD1l+0D8P}Q=avwpN1}ZSL40NUXg&-8YCcG;GtNxvz-_34x>s;>jKYEOMk%5&5{mF8EbOx9y79~5hQzd& zca{1J66Xi{YN+sPizO8x46tgEK+t_0LO{;yTi^#%d1?67xR&!|`%9BWRK~Ws3IF}SiZqY^4iS-=AR?~so6jeS(c@+g$*>%X{7ib8{j-j0mp!Z+QGYvtF|B6C|(L@ zLU(YSK$LsxzF0tbDrdvh9=-vsk-FiG*Kv`2_|s8C!G@gm_hTvpQj-P&mjhd8>D2w0 zL6(H!=ueKH8#H`vPW^DMbRY&-u4Mjvr`+vnlpqDio>C->^;xq;zyLm~D+<;>74YR? zP?-ubCq%_zc#&`EnR?@E8p&8tQ-*9MfKM?#(*8#T4B5ay6}L!>gaOJB;>d}m58L82Tx9U?|){l!!`}ishWO~9QOe_z$8vp>DY2|1Nf@aubDcI zP)IHC102zchNGGAu*ZO%#%v!Dn1gTR&|UfiD0k8C8cc@qi6N%tOy}#t!7*1)tzSis z`056(js$(zIM7SkxDF!Vhzjeu`%IkNNN#~0Q7)}pleX-cyd>!q{WZ z9(SY^ey@eWLZQ1^MNkTY?mv;eSky%8rT_`m*;erU81b8ppEe{cMbA#iS(qvA?8ff@ z!+OtQy69AVFNg3(uk7!QuS7~%ZT1UFHSuC1h75TDb1VmL6YqPv&U1JmJH!Ac^JMXp z1;mUG!c+*9o>(YpkO9qAHP2ae#LE`yB=&Q{m|Al`ymS7X7nTxoJJM5C z?X<-)ci$zT$F`WKunAdEwWzvW_l^6BC>_^bVR~k~5~pw%D9LebN|jf@H08sk*w54D zj7EQc{z)Mh%9+t@Lch`qVv&@EXMlu*Ga&=#QhGlg(++xIex15D>WxtXLbzzPT(V0ur%d0 zZUY#e3Q&AQuxvotAJNJ3a3UMDRMVpT?$^CNka5$F7XnVY*;L(#PNH*DP>Foz<1%!Y zsQbz+0#D->_FBSj_eMwSWQC$O`;olToZpXcqdpaOH;7#fJ5x)agpFhiwAlLbVS)LQGpPuFzz7@BA=r7_!?$0Zv)PMI} zsh4L8tE|9B>ONcSE3nMBqeHM;GPOA-ul+ns!+Vwnu_L#7I^V+WIQNZa+0)A_$B#t@ z8Gx?UlRuN}r7C!H4@;>oQhx&9Fgnn<{j&r>E^6b)`|u?t9E`?3Cc65ZmpK};#X5WF ziQp~}p(`7p6AL@9B?59K1~5P>Gmb49(ez?8Qj?0Q+4X5kEy|n0SEd91ab(wmR|y2D zC;8}MmA1S$VOPv1yVLyJ9JB}t`})?qC9?da3VURqSiC-8^f3HDxjs&uf9`5`TI9oO zMeo3Ew!g(Mt`@u=Q4Ef$H~b?nnj5*)I?X6#>|$Dt(X}V@e^H-NeQ{4_>Lto2thUd% zr)tXl*m;i!CwX7DR54_92=qs`;K=(B+4QxD*vjDV@vwn|I1sa_9{6wBjq=*nwE3$~ z{jz&<-R}uh*B^UAq;Qr%JdD^@P)>5#0R7;0z4t{>S7G$}@WQy&h_VU9N(MTJ?3*Ej zx2!CGP&Wr6P_JBMBA3hq!Qydg5yB+#e}uQ+CprH4W2IHsiac0s6(u2h#J3~{=q~xt z@wNmPIAq8J4lvqm5!E%0OiAxt*dYFGs=sf@_?s?vk^|^^?OqQi4))==xc4{Gx-Ptn z#uzhM-ij4zqj)mrx6*E)ic$i%x$^NwL)HQSh`4We< z-r*-mH?gU^(d2?(H(ut%a=+nF(pcv#TD4q~xtUL0;KpMg0g!J z!iwaKCd(zI%3#jBPeWWoK|CxU0YgizZG6H2aELcGLa;u`;l+kY&(N`*6~Fi=;q3b+ zw)!vAk+P>>x8K>%GjX2SC9xsYV!lusre3lGb?Nq`;Y8g@^5UVUUMyKq27!GbxG1W^ zO_~aE8_OWndJt6!mj3hy6n2>6ZnnQ~f&}dko|NX{G2so0`Kac;xCRb11a#GI!L$O` zbN-tiiAnWqdi2o7V0~MI+e1ja&Z$3vhGs)asN5dYh=de?I04ZuE?b5>w;rD>44uUd zc&i^Ie}0p4y{pyP&&lUsP*5%$!FK0}yjsfNP@Df4FkJIEa7Epq8j`?d?THFs-Ho}7 zJHM_lU#XM%H!*6$8zaB;3kH^@ME`L%t@tRl0qkJ$2sx=PcfiHm$wVcxAq=0h-Ywbn zLnmI1EsX1Fn-mUnBQ4IHj^6+M^3E(>&k!wVZ4L{E#ZJw8OLHZ#w+Vww!FdjYSW!85 zjF}}p>6+JZ%~T~-&4}Wm|3t7s94ik$WVl{1tqf+ zNLnZb&!J-J>4hJ-8+yY!{XP`My<-YT3f$>8O`sN2dsP8S8wa?SnAm-NW3bp8jCbm1 zx9SX)r8!#X&XiMf0OA^lU)?S?x1I*|>whAOJ6d&@h|}YcY4uxDd0&}4O0~a-hEvn_ z+0vChTqYoJ1eXI)qUMxsC=r_N3Iz#OmQT2#08d21Fys58uVO*H>6P3M02F)&D5@IP zxqJXe2BZ;R#($lDi7;nH&c+$iR|=f9N7=x@kGyF1#VROm1q8bets&3swnn;0x#ezd zoI}CHEr&6}Qu97inE|&tjMt?QSdQI+QTo{yPy(>p5km8Y}?g^!j2~{zSnfK(T z$$Jyo|G*)kWiWCb5az|8JJc3|xWnFc(pVKa6@oWAIFu(klC56=2&@D3r)Gxh`W~?X z;k2*&k2+Mdz!Bq=!kuo+JW}psv_pTZ6Ez@hfXz%9t+5q52SFADkCf(rph5<^%)J~p z9v|XK4gZ)dP`iERyO^qz5;9iytS#o&Lm3=jHKJvm^B4yYRVCIDv;t@?- z<~d?GqPmbo!oZOVAuu4Q*L*okXSHPB{*x3dLR{+l?~L<12=9wAeiE<8C(}bF2rLt_ zwP@o=)X|yHGm=s9B*xeis(>GGEUBQwRf3B~pA#&`Ex%kaky|)L;W*zgUEB1H9B1x- z8WEtR7zD{?<^3*-8TsBgF=#+7IlQnpiFyY=z1L~|10~tNyFY&4m{EjO3QuawW1yRc z)NgV>Futi9?CLnL=oLleD1+-1L@=$e)xUiS8x&`}-$s*2$VRZl8004fJ-m2X9fr3W zXPn++57eg(0?*hisRI&+mt2R}q?>6tLNyro;99$uFk?f;UU#Z8gtOoP|$Niyz(uyE{2(Xt5@D}7W* zoYBI3*&^@^JLX;Sfy9o<>!n@(lT2AvCs`wQ;tZmsXH^gi5 z;PrR=%=pBiKA@#^Du820b24)SA!ZWFJXX+1PR-i%BrLKq3ZLHtUW@o}CP|1@ocO)> zL#|kupk`J@=^>smdAzZs@dFMqCB-8qg!zx9YQ{`J(9oPKyc z1Zh~xN_ZOcsr2R5PczVFTk}~h8=62ApEPs(w+N&Gz?V=HGIBuBixF(hqo^^fnl3(9%x}may{u!H;#-BK}J!R%QVvIKd{r+1`v*0fwserUC z1-`N<7^eHF!QLN-B~?IjZSmg`vsapT-%0-Z8;K8D|IkABC$HAb~%B} zC2XLq8HVG+6%Is9Vx9S+Gdn7SA05FK>p+tRjfu7QL}cNP zDM8`x8~`LAZ|?&TvZ1{ z^e0nqULDC=;N#ry5Wvsnw-Sx9Ho!RL zhSkJ^bG>J=OEP}b@1gb7j8Ds98;UdFC7?q zqwsNDT?TfQc8|j*Jrdij@mxX59%RaUBk7zBIiy^>CSx@DfQ6<-#%GW(X zuZ`lxU({NXkDK)+TlF2$Q*7@pOj~C*4m2CoQWLkYyPd8dUGBIIun20LW&OP_sX3k2 z5R!18t_4wPaE}opQWBxSj@Q%U!+s-Gtz5W-OR37EOJSt?H@Cf$iFg0n*~-iTh?rfz zw|yz=r%@2?7de70AQ)IiP7xb=Sdg$GA*!TgB!MJT3+#|V0>c5!zDbwevz3<3oPsC` z)#2JqriK*C(*R=IHw3(uI$sS6KH0jb^S2fKq9`2nmmX^Bxr4XlFI!%qd`SJvwHu<1 z3m6GwzS8)UIS1?Mu@lOS{k6usg%!pJ99NgpwBN2f5~iU~W)r2zCyu=@UTWOk&Dz_S zqU0K}+U?5Z8rbC*#D=i6Rhop8#8*XAH+UNdftQ4s7;BXl7x`vosPLIxe)>-{$LV~V z|9yMaf{)636x{B(sq&!-@}rh8-eBx+BCv9>&%C$?$2Pp#Z{>Kia$y5*q$DvlKc$0T z;8)`nfP>9(#{XS76o};dK&VAtAlvm-A`!J)Mltf#WFi;QgBlSeKyR$E? z%I$SJ#F4?P3L@~sdv-(oD$v@$$pr+KPrP%8{2cSVpz(VNm!=iJ*bH=r=&X2-6Yx~^9B^gO~?w0yHQXLM#veu0;vT+U3!87@@w(=dJ9aPI*p*~tO zcb%W5#C=fkLW^KlC+hF0Ao_g5OS2eV0r!xFKcO2szxCWb|ModTsqxbqu({AI1f&0a z?ZR0i`}%twj-JVB0noXy-;5xB9F~$*kgq|vVwC2_07$FN6vE>=Mj-(WJ&dNJ;HJ~2Japb z%SpM&S4J+iv>mA2Cxl7hLrm=cWblh4L%np&ZnaNtby^;~WYFEjz;6bw8s8Vzz5Y2w zG2J^EMXchOBt;i-1WyeIRVW*I@w;%q%g$p($ArvW3v&bqjuJsjU@76lpX#nIoGDMh z>GHT})oa-`nK-7DuJ3@SWt{!(n#HC@J6t&SWel;Z>K_QOV~Q} zB*~OGBW-L^>Wvg7uzNP&mA$=}`wP@sk)Ah@8AU9*hm7bB<2$SLk~I(_?5zqk10Z)| zpV50Ge=yWV&wNCGdQ3`S>Einj-MyJPjg@+%5(-I}+rv5iomc%arAJFZg$xGPy$cH^ zTEwd0^eX%ITi(K5__Wj`DsW^BNU+?2tm`}Lh~sZlFTBOCB)?YPb;?f*jfVJIPvOnk zfzTiSb;%fd@m?L_3__phHJ{{LW(KAKqH`)znA8`4dpj3GW0_vZ*Kz?cZbM!E@e}2r zx}5h{RelCm{gL07NukAgs4a0uk%iwk5xHxlQV)d?BKVdpLk^qc^fDc&{p1Gl4D zjhr5ei4P36Ov9P*W5m;^i!H1k*kbW!t%V|JggEYiu}zw56G(v$KhkS*hC`@`80Whl z=_d*Ys)sweF+THHjJz?+Xwryg#a3kMciE+>1ZX=)md%(b% zqVxyI+K#sYYQ*L}S9{C)2A_m}XS0kr2n+7m36A)r-bY|wr8yBszIcqVSbHEx=Ss~( zi)?$$x(&nvRLmBc)3;?;T~2@WoyiU;N5(tn2+Gmr2wYuuQPAGw8vNWb2eNd{gCGE! zR!(~>r`Bz3H~U?0=>HLU4ouFM%ecO3+!5 z3@HACv=K@@WG5yxatV;_+#1`Yuv8iRmLTT7TQ2#5TR3<K4z;L{R2pg}%G<97Zl z9kjWm9Yf5>i(tJDyzQ%7M*D!Ek^uGnC-F3eOV|aH{F^eT-thIbOJ}RDqpL8& z$HzGwC5@5sn{lCj>h$*6$!U%sWtgV>Rgi&^&6{$owd6#^!tL_bb}k3mh3eafxmA#e zU7}>bx!TTX}dfR)_LW^Nj|7ypUF?S@X`jQvn3F*M@H=sWO^GWeM>uYm0f-`sQv z7ERaouynBUyG|o1HN1}MMu9-@%!~Rj4(3Lr;w%VX+H2`2J-@XR&M%!3j)79@gl`*? zGL}8^j_Rc5obSMafK1E;6j|h$;F6!Nh!vk^mflM9@{TRnfuqbW4v{v;4sY0v)+#c3 z$B4x~+uMd36f9mjOi0Y=&Vk(nb+Fz1BO#JUntm0&$Q)o{OMlnb`KrUe(mou381$wf zB$}y#KK^h(&Ost`r|kg#AvBwviHxZ@=_M(L=R6LWna^=^!d58V%bzSD~hP?tUXq>cUw_KD&hs zyjUD4byMsd356Z6wY{a;xH;r{TOjtyj%RvvvJE)!=(Yy`?F8MQ4QEc5ak2YgP0g{k zbpj8k&vy1gRr@+g!^K2y9K(CT5u5xSX-L<3EO{eUA(tW5j-%_G&+l)A7dGZnncAKu z&ZmlAE#^Qld$AsM@6GxCewaeQA(moz&P2%cUw1>p5x%Ra+Ak|he-Ek3Cptsz&VDJw zH<;g?WMF<^T9L(GPio@}BkZl!&DJmCiXnJpMAL1M-L33YLPkm>P;=Ki-(jer5zw(l zKgS7;w-fZF>zAgcU%QTG?TsFcy2FxUj?dtt3w$p~L|m<-Uc*w9q1n}pU|$l9gT{%9 z+IEu&OBDAHml)R{3WnyGZ^gJSZ$5Ed+2HhXX{xvb;Mf-hx|(`0`qv0YvD%^v%M5r% z-tGO$%P6H{{Alx;)9rfi5gTcWoT)lNtTQ4m|01bMQO!caj11ddWcEWSEk_3(;Px7)y)OUOz~)ShffZ4RGsrArDD!E&md3Bp)qzZ? zANA#7+p1$vNIi=$H-x|&K|z2CCgv{Xa}eiRe`{O=zX<%e#W(n6F)l9uM?s%NJqFzS z*2)8iTErenC3hJEeAH%%a1UzlPL6Y->7h!GMbN!>|H{N&eyo}krCp??8op-*>OfQL z=Ay%jJswATv>wd=(mF0Qs$d0j@W_?V?M*->htB%y$}J;J`F?Pxk0+_=4wV|(?e^sO zU%rt#=AsK=BGQniIjR5z`v?MDL^h)3%(;N!!Ijz}PAnqu1GxcjmI>QnsFhHGD7*04 zxt)BClSa8ik4hjNtNKK!!F@A)x{mDcv+oN3optBM_T%&DpS%prq=rXGK-2RTy!1v>%TO_rK`t2x^)+BmX{*F?YW5 zc>UnoyWHJ87NSbV+x8d4DB4FKbQ8aFm7tSW?|GU+{_^x zpT+vg$QUELRF5|6sT@VLX-66wXmOr$fVXLe!N9RDyu;n0!aai=YQkjBr7j1V<;pOx!DC| zA3KKDThiJPYcgZdvNOt&Cfa>e`Y+QOD7c0w9yI_M7<-Maf81U#QM|hXgL;l35>5f@ z>s)EVIfAQ-ToEw##1J%!SgtJ`$g%JII-^h9?T~v&5wgrPrDaBczaz#Az!B5s0I=L8 zdS5c=pe1KsEDBf}q>bO?%}nN14=e1gXB!t<0@h)5l2>$Qqdo&-w#c-@+n=?Vv}k3U zujEN@Z_4^mHYEu&t5jbwR0weB*SvaoQvImnbXV)pCRd?zZ1yIDJLJwplkIpxz(Ac( z^ZpB}?!^GNQ@OpLlxk{GM$s&D858$YMp@md*UW(yjc{dlZHv2-ftR~(Jes2i1)K$~ z&(=v1wU?qS;S0CDY&YH@B6N3Q^at?>XzSHB-P(zryA%bsTc3@P=dCzOwNa_nMWAL> z4`JoTM{JJ)&{rDIjXZ%W1+)TCtE!~M@3RNEn%d~zZ{II6f016VRi}Zum{&QO)aO zoS3?;0*G=RGh(0f;P!D0trI0DE53JmJzm}Re@`&ze@XV=&w-F$A!-G38Jv@OEu|xF%RF5 zyjUV&9mLfXH&SuVT3$E+19g()0pN9QZHK&=9T?9jAtMjU-a8x+TXQFU7Jf(HxGveX z_vP!lp_f12Z*4!nFUQlEXOqhr2n5iz>P&v3CLq)E7JMy7hiG-6TN5BB?pf3S>*um}G4JLN|A4pN+q_X|Jn3ImdVL|z_nO%mWw<>U zn?*U^)}$Z*9VfRT@AwBfXdj0!MWHL0^5(WQU`!HB4vcs+!ADp5am(0)I4EJWpOsyM z)LbyQoQ#fYrltc2hj2+q4XQzLWsQl+DQb=T-9=Gm805(J7aIZtw{+KAg@5z5+N>E^ zojJljCf^6Z&Ul?Gnc4Y&NyzbBP}x>`-Dla-FvDo>MHRGvPyff96>~ySmSyjZMit`l zP|^9=cB0i0jBoF9w`N30ey|EDS3*NDKp{pz+{)s$#kPg5xrF4lP8@(CVaq~Ltc;ALf$EdL$2_Cl8CGiw*)g892UjwO^Bq7q2@F6$g{jvC zq)jtvRXwaI)g~((JQ-=6eYjW=kxZoaX&b3YXwsd!gj{O^9ALoCu}0Zgqv%IJ8<>vV zuMgQ_4v(vTmiL@ECmGcW?|EUuUw`o3+|c2VGLT!^+pU;vw%>#&%b4oM9XwU=*~3#P zta5XvziYJ!?I1qV41-AYu-6GI{gt7HGVB9(v#*F5f&%v%dE}Da*;V7w&nq-c@2;vn ze*&QDU)J+ihIc=$$HWr>*>_pi+#+2>j4HjMsSJh(wA z6YwSY-DidK7`38@E9qqLsT2Y_Bmk+T&+5%rhYglh?jSL($hbtv(cRB_7ce~4W`N*e z7qV`4dD*VgX3Pq)SVJmVhJIT;%~TJ9aJOJOOZcmmvX{bJ*}GCGoX3)`_7GRXR+rPx z@P-GhlH0QX9d&EbeWBfLp_ALd_?Me;A!#vBe(Nq0j|T-m&S;NAGWT!k#%zwZ`4>D= zv`J+b9C7HzQ%F`0IctY}qVDMvb#p+a9XH|g(p+D?@u72NqgHWtn5f)kFg;@FXqXea ztvq^AdV_wM14B*@mJ@pW6-lQ6D|0Ma9PXO@222fQAsdZXY`mSQ*6*s$;vp2bD2?}S?n4l!hhJ( zT}?1thY%CP9{7))bClMO={o-_~*^sF1Am_Kc zJtCS-a-=RT`s)z}f)3+a)(X#<{iL2k$9Sy$0RvI@O9I7ly%nXv^Q{>VVq}N^Sjo&YvvD!w)ZI@uIPT6o!yKQpuvsX7t`a(wHTW*);uw~9SK<$WG)>dWL?%&-?q|G>xhOG(Udrpk(OZyDoTFD}xbM^E;EcdD zP#QD=LIR2XM2kWM*V1nM{5FCY2TkRI$cM&O#2+kN3AVp-JiAW@YazfNHB82)v8pwN z{d{CDe8C^z>s4rHXRGIhc^2PqH;_Qe<&?OM$n?NiSlz$Yymepcko91V-IR~@?&=R_ z#RQX>q%E3#?>_Q6%B^X{Q##|a^FjE~lAxr!Rd5|wPIUfp%Q1{7gar2Z%gR-dco7*z zKlTBhRw@#(z$v}W{xmQIxLR>_ve$nQ&`VMpJRn{nXu9Gb&W- zBQp=-8ghV83EPJpoi=<5b+2Sm2s_5PwmWXE%TL$#{`LW|@`#qh!1t%?`=sT5E_e*$ zUu|jfRV7yY$r~3YdPB}bkrZWMTTbZ_H7TOKH-vc*&M=wBtah~xB7S|`5buw_JVDn| z@%4V&iWLMQa+mIqYIh5D8d{WZN%z>To{}@eDzs+y;aH}FvoDY5@bzzLVdVT!#*@Eu zNot=;e`mid(Q;uyb(C@u5kJocA$)0&IOA$4!;X43XpV%DLp%Jv^}6?0wXiS!ESfG$ z&K@%D9!yfN&6xYiag?51n`9As?de7mDCfOp%a4Jmyk9N!LMrr$!nl5Q`egj|O%OuH}$SE zhyZ~U3x)l^`e({p>^!>V2O=pdHsE+kr)}x+nu5Jya6;nF@&N$_1(L&QMLrM~ylyox za?s=Vq(?Xf*L$;(%I)H4U>)(wg>|9fU1OsYu|#g0aG)VpcpozuU^0%GgmsXa`(%W# zAORGZmK9+d1b`xg?u@-rWLYBPJvm$t6T$3ed;dm6RcUSosg$861vykD1xSB=$8+Vk zwXV{RO5AvV6pId%qNs|H$h$e?iEV8SzCNQ*Kcx7vb%F!={^fUdJ%mZq}G zxn(I(#s5A<@&Ti{VBsoVDPc^bCoU})N4h~xZgjl#(f*?9tNZ-bX2o0b*k@6ji52&= zT8Ac^h6uw~6&I0hq2;&}8Q6#qxLq%e41!u$9 zPLv(1)TB8+5S zlKaS`N^9-c5}5IAW^aB1z}uM zcWg>C9Sc}4dpC1%?*0BP{#VWhjO+51FLaAu8-RoI3holeG)L3-zeD(OzmcBZx+~t! zojtsDWfRX-8b1pGxY#Ozz{@)0iQ1)o4h?^=S}o~l38+zfZl-2HDCX;|LAo_nEtDh zbcM;+Yf8?701~?X<=(tRal2F@D@u7XnX=KtZE{T-Xk&`%(jRigFUTfcTqPucCmwhY%_pfhUbv|u)j zm|YNn6uyu^Xp)%i93A={iQA{KR~S&x5h)uv!c>HJBviPbnD3BN9n!xzWZpcEe7^5l zd6VeNnq-Ix6Rb?EVWGm2LMZg&rOy8AoL>=;`N0*27S1PsptFwfuS$4u4L!n|LNEKX ze#%a$z)TW6nX8YGmAP5>tc!jhGtSU+H1>wCybWf;?s5}PhY%rJ0zv}M&r8JI4^TM} zj$vrz*(gR+GH@_?TUDnfB)<`6z0}-(zec~DH;8|Rih(ssYuaaWAGtvaz+Ms?X~7;d zlzl8rq79=C^ocggseP((}MjTnZebORvb|4d}dvJDepNVfyHX^JvdZQME}@0t6Vb zltKLb3kV_iZ6>n!F|o?8U>VEM8qrTIeW!sct?fkN!Og$m3}I~<{31<1+gb@^9?YYv z5`>Byik@cyp=s>E@LwE0^T*x^zI&r_5;6)4TIo!E<*oWg@`UfJ#8nP;H#UE|62b+1Sg9)SWrPXjAhf@NH?}3O5V_?BZW!A{`-lN}Li(YO4 zFaJ^mo^l(mn>)rt?oTyrIPnikH{h|H0pNIY8Xs>d{*$f)a)x zpdjwTniS+L#*Y07F`}_4Yd%*v-NT*No_(LX!V|UId3CKaLmoR&+@`b9K|2pxCM9ov?bxJPuJSwc;UE|-EWfW8k6b1oWA7!*I zRlkNvsaMsDE%`>1%@L2bH#* zSFf{?iinXOpZssq_lMKAZ= zHa-*CDb=np-3GSQ#La1Q0k?t%a*B;v!&=iy{Mos>N9KoG7&APY7|2Ms@NThf@d4mZ z(8gb$i@Wf@TzzANS6(v$cguy;f;c#n2&UAHVguEpak16~wyC3cMR&gDBLBzIRR%QK zw(V^U7`c&CVhjZ75RmSc?oL5O>26^(qLhFj-6$z2jkJWcAl)F{B_Vvb&-?x3-?$go zb)H9Bmwx~*jV1w>x$l9Z?6R0;Ok{|{*ARub5Cw`h%+2c$HGKU1hX>CK*^zm#vNAX% zZgq{Q)YOm-Bk?U`M$8$U&a{^G!U!jIJI0wuo#o9UFLWulzLE=?XBO+!h`uP2Og#Wh zK(){wF%=UsSuWKj8ydk-7fMn52i$;Si-QO$%ecW88s}*%g-c=4j4G7G82fi%L3ulM z=VhPW2$7*yWN^+6{IY`FD$*-5B}5m1IWc)9Rd}RzD@^`tWwizlP`y?H8q~*SN;6?{5kM{-(JIh6MpH&`J$r`AHSB+4Y z2Go~NMgC)$RCw1quaf(|kyd6a{pnOYFWtpu7b{uRs-BOT&hRvhaxZ>o~<0B33JeKlkx&hcf3GxK*a zu`BIfpvingekBVO<+D4d%5Em|cp#TeC^n|2X$xr8yJ}@C{`qYzT%rDDsY@>V&+rUX zR8F%jr^mU=JekBlp4lP~1K%avBZ6D~#RVO25%kHDFb`Z!XE z{!c9YGzw?sCp0imJYA~N&>?vlvuE-mli9M<6PdjmegUQHOA-|nk8qa0^ zj40M(nVqXGN^If>4Y7K21`%H$NXz^+EhYA(9|*s$7^FgAsD+1mCM#7(8!l}{c$2;{ z0{K4I5hd1bSUsuqQeh_y>J<7cs$I!8er|L$jUW0}HnM15Uw~}<3Rt>)r-FIftspjb zL62!g=M<1g+|Ab^xHLTt`Fme@^yN;>b~X*|5%&@gV944I4$vcib7^aF>aBM1ZRbgI znMbRR*YDWa7k6dvfXmn6|n4(~6mF~lqkB+CM7 z8-%oyijA(rkqAi}l!!olPn=OP&%`I=!%G(+pXAe;;Shn49O+PE3KM-rrw858=lhL` z>MdEn4myoc!Kw7@!B{d`a<+Dhw^ZiTZp)|lcIIwC+%#gMCQlSE3VmesRKm+tb4x2| zJ35-{{NF(o!Pp|>{<(!w>{nR>L$|4|=l}K zr@Z;9^3BcKGW9lTzPWL&p@ivy%$;WqXOu!O`r_Ua`G%~}E;q2*6I#a?4yyXV8qZl^FpphxpC zl=tczr^q~a#_LQ*QFLBr6tN?1p}{bn=Hk@OmeL)i;0vdSDhHrBW^1+!(LNJ*c<3?* zlQE1JNg-}=LC2@z0%3gXY^8-u;4`A+(LaBj)`dj2ZaO3yt9ZJWguKhrhkz)JRba2P z8Q!j1GJJ`YHs5(vG9P)rqa*M^=FXN=BAS+NNHz3p*3g#Wjr`I;3khrrV=yU(+xx_$xFA586=n&lI*n1Sq zmU*J2@AN=I2Us|3_<7<_cur6cr8H-LRezFO5+s9hPJlVWx1)hZwh`!hhBc+F;ZZD?lrdcfRpCKN;l@Z^o8xG zBr+4SyY;j=)j5Qg#kdSJ&gm;*^gtuy-tS;!qc7fD$ZfxbG zm|i8q@CaB#++Mi(Bsds^DyiU=HCTrF*x0=6Nhta4KtK*K1R<~vBQ90BZQu3q)7aO9 zSDAa4r%iK8|QdLijd^*PCAC?Np(zUx`%uGm3wR^nV;qD ztLt6(EPgg5%u%`Mmp2J=0i! zTb|d;XbL?yjy6L!Q%}*%eIqsbz3m@TLFEy+;|*q_h>{jntY;+{31C4^{ZD*kk%)n_ zlWq~l3uDJ)r1wM=aGiO@(BLP;9~dJrxM8)7hJSGFQkU6bc<$8qw4a4HG@7@1HTz|9 zUN*`Zv|0A!MD=3*+w(=@93pT}O=eH(Tl!aSP~1|CVoa9tC;e|tMYVQnh43KI`RAF| zx-Y>D>d)RcDRklqE(+Z-Lp>2Lqg_Q*bMIF&Q4hl(s|pI^Cp1wx6!IOnHY8rc4`*M z&EhN1d@Drz#lqG6;GuFX?PO^G=bhr&&0`Mn3Q(JYS{u19HD1E;Up z7k4ReKv@FBT8;eP3mc`dVCx+9MenNU1-=EZlicy~i%Y~2upB+Xktn;Mqf!mL4uSM8 zND#$F*p{2^`Tcg^W(fWr4oGCU^3gx8%juTcSyw3xqh{OQxKN_7Ky98~42ucdL{Fxx z+dn5^9fegM-$xyAsTX=1*j8))+IGEPyC#8&s;L^$*{9|zcqT+L{MwCqt;_$ti4%kv zyV94)MM}lv#gg5@;l@6P-J0HR&pr0F!QT;o(ndrH)H_vyHFQNp^}-4@i~rtIaYFyM z)Z=;Y`i?Q%P9a_7GDh9q zxx@u5%s!*GxYcSKqR@L>VxRcM;thuf+>U8kz(cS`;Ce|2lzIA<_XPUgF#C)n$@LtnOg zXe)DfB0qC6zO9Ju{yDLH)~*mP-bkfP`A51oA5ll&vm!F!o;oOo$4G!Duj9yW*X=_a zcsXT$b+T2Fo-HOJLzgb;^3#*PHtEFDN9fAOSvD5_j|zTo1Kb3bDt!m9Y+P3YEZ2f@ zdSms8-d5vyYAxn&)H>nsI*cP7!>a2um269{+hk+}P4#G@ijHZ10Tm$%)ubYSRxW+7 zI$Fz>et4mlJM@>s7)3jb^kD=*XmvxANN6p5TsSt*WZ2HSqvint1JhvisoeK>UmAUc z_qK;}++$iQ*c-e)g;#LxYAzm^Gd3;DRnQK?!+UM=kmwY4BW)Z9Q`$G$uRWfBk?nDM zm8B5={fdALrSgI`cxnVz+z^|r`&BSKE7h*hTm9>ajBYR%ao9YrlvRjzSvZ8u5#>{5 z>o+W^*K}rfnl6T84*dH;Ghf$3Y1r6m42xbV`fln-KMc4KC@2@lXJ-SG-4X z*cNEi@7d+_YX~cs2L##Z_MO^a{R)C6B2sU})~5;MhINZ;zQ@&KBjF3cXZ|$i{ix2g zhClx!{rk}G>#rJp3Y4)rp$JMEs^v07)Rg+#Sri!JV+W=L!E7Kll$<%|R>Pcp!qZ}-yV1>Eud2wAq0x= zI?r1&r&Dh_x38a4+3{KxizO(vSUybNlghd44|x48`Ib>WNpWO+*NGW7Z!+AHsQ0UN zp=m>RvXKh|v+{iH11c1rc`%HyBdjo_dRTFEVw5EU2gI<<&KJf6YIkTvV4%TZSnn;Z z08Ph}EYY8}8Tjeio7oXNn|A{qiNrcaZ7$EkKiW2a1;sz{q;AsBBQ*WOsng=@X18(a z>gQWle3YA*c-{IT`;M57@xKv8s`;|CurOPWoeU?e>@P@8HMlKd=@m&O#S6E@^`QmS zZy6b-U`s4(R!(fdvJ0Y8T1v0kk^#jhiVXqfNou$r*Q8%I@CYc-( z^o)hy>w`VGSsS7=uuz;17fJB(8f%_N#$KtbTDwt)Q zVmCHIAvu}~wYL-u6nmoTMFCYK_iWaTEpF4XfM3<-4dzG zCp{U&2!%}V)3eX|q8HnPxUoRQR@+D;HDUZyd7-@S7dx(op|`>`(4=WCpbvUTQsW)U;fEh+k%|fgu|8 zBZ3*n{VSG=8YtOyqhD!G*^%Hqt*x!LfH7~1XF2RTL1DwO3wwVN<4hAQ(bR{P_c|WKW1wpxdev zvF!TQnytC!=ErZajv>>V zMNB9!cj-xr=o3#EJtvF@Y==1Scym3F!bts;Cxh#y^RS6WyObgb;4n>|PNTXXZ^e>s%#dizTXt4N zgG~F0JpRog?&)WuVI7(Emw;5Qkn9|pQEioUBeMMXCgYDVk3~ASH#Psvo>mT`zL^qC zh5NLmnDaFtei{8I=xs^Ezb8B;#$jx4pAphLRojclYYzlMHmYbNUi;A!`gA=)*5SX!s{*w`Sy3R|!s3 zJ%W#!feQ+fRwDRY14JR>##L$|-+%GIFY{p{M{$=IwjFzt`&?3#6KTyPuWk64;gas# z4Miod$Cu$^YT5)1sHsMN%at2?TD{gkx$^O=5DVw-;*!!N@$3M9U-1(EA+fbx|7;S6 zSTPOpNSZ-ima%T|1QLID|En?<)cCF%r|)F=)7_oBhsN5)mI>aE7xL=R^%VJ^3oTpx zg62}l*a>K9Ct>?%ml8*aPo}=kY!Wv5jO<-f=_L59 zAx(`Q^{L+QF5<8UEq%LeR3EHaiUmRdAHi5FQf^do zP44IX^rL@{gMb^s%k)1};gM1gCcv;c#b=2%YIK{(F1=59-Dt z4%qy+*c&cw+V}+bULn5t;>s;aX>P}yxX>vT8R(V}Xw`b5fBdo&lHwMrSPef@-o826 z;TPlS%)K$pcwaaM`3^$Fl{CYv|O zl7=6!6%0?VZ_X)dh2SW)xPjCz{U+ODk1cmRn<6PPB7K|d^fyGtNM)=@)Loc-nx*7A z3=MS+Q#360oQqauGfy!cgjYA`9y6{E!Su&(!=>SJOA1-yu1g5xT(N(^s)XD>Im~h! z?!F4GXY1v+cklefqiDZZpU{)`cf4^=Wgo8__w!8X8`MK8d0GYehDLlphKalXd6^mU znjrP@l_5iOf}j`WJQ5q zgJi+uX9;C=6bd63uk$zU*VDJ!k2y~@^%%sf0|^3~WQGGw-whNFEb8)H4u9akvI-Pv z8P}FdkJx#!V?*{eV>jX~=b)20QaFPNZB!(6JTCV< zKil*IfE^-aB^>ts;sNO*ZGQ*H#`<{$6@EbpLE9CS*7miRt&W?zjAnwC@s8lOuVVov z=|TLOdWz@iHU*8Hvb z!^V_&cr$ZPZLY|t`PNWl%9)QF7aUm$8#>9U_Z>UZs==v;JoJz{@W$vu;rweM(m4aYXS(uCTN&~hA>VBY7#|VK z8B!`i8Ad)B(k_JjIk#QCu`PdZeea<>XP<{7cnE8(u!+N!HX`Cr=jaD%$71 zY{?iFJ{y$qMS`5>bAKR{!%{$J@oO@cCeCy(FUChga=ljk{PK^KUV6!ooJV+aY1#~x zm}`tuP_xz)rz$Jjm$+8Uhf8lfrIVEjb5C_$z=>pWEsMU@5{{RwG+6vos?9HDT=%gx zFgYU9%=H=mv&L}W?K_IncA%hOnKeQ-b)G}ZkJAh)H?>U4KFS#!;GP#Mk@t=K1`~qo zVek|xZk(dp*W1}Rs}ROkTk$4*YG|dR$%MR*XAsf+q?vNI6MKO-|Hg~p zFUin%zr7Y@O%<`*a&OI}iG{Ss7ax&L=xr0oK4jc+AIs!*AY&5!7XFgK-uLsK9i4UvXUOCNVfNgU3G=9X>GjEtEGk&vNr3v(&=#C^&5?ag`1t9$+ zf_yId$p0MGczB<}&EF9uP(HL!8zX={njOB|8zd1~{LJ*BHBGXHJyHZ$xn54N>;xpl zLru>?je^9_h8OP3JtGh&gm3PI&V);uHqIK8L!-8&8pj(>ZO$&F@T$P@HLiZ%vp2Ia z>vo`ETaIxb z7>I;MCHdF8pMmn<$bds)p$!9{ME2mC`_0Zxje$s_mL$Y}uMxWD%LjyZ854)0plE~_ zBYCjHbe@%^D4dLu_s6On;r-6cRAcHV&arWMH8p;Z>w0_*E3jmaY2HFUja_SAh@+qTY#2qFYym!if29MfU1)gFyfms?%A zp7O~jKzMiiw(2y-(DbH;^q|fJ7ibO!J(afhynsJbDu$~BRzKqOwgy`tOJQP&3R;Q${MdiX9C@*}HQa^Vo`%B@3(KBwxLD8htJ zSw~Xm!&OSwdpYmqb!a#wzs^OEWm;9Ps|?7n$F{S|nvFt)z*e zpav808d+bk5>$LlZwmq)siF^A6G0#UjgFNFD*uPR;1FJF2JS8`knRrhYqZU1!bnNiFV&|xZRc9=FGXnuA=jH31c9CUJ6a6-5D$VNV|*w_ zBgkO&2>TQ~>%ETPfkgr{B-_5Ku(9IMAz4Hr`8{G9Vz3E zu7=R|WcstZEVE#H9S~NmM?Lw8c%qMBW#MD19?!^p(Qc{2g5H<2g*lK(k*eJBSv{c5 z<`@MD8?XEpuE;$?i_GK&HoBn##L`tYyAgsZx);?5re4#l33_0^+8f}xH?f2v4 zf)d~+2qA-kT4Kt0#=KmOH(%!nb)Szkrijgq#VZHJS8yHLHNq^(3v_Z!1L=Dg^PI5| z8QE@2pC2*6;9)fmnrNtPHbH(}vE0vt!XB3sMHn&kb?h>l?uJcsZww- zcy@A!wcflU1L%1F{eW&xl}3-hf44ZI|0fwv0(AM5)2;rSZO!RQaG-%4yeIYP<(uwc z<k-0An1$E(UYCMydxV5OjWMuSKQ1F zzi9byawz6MwDKFa3uWo6ka|iZ|C8?7CQib|b9q1G zVe3b^_dBi(709vVIt->3*N$#ruboxb&*(u>nYfR_1C;tNSD%AO7Nh?GqJ=B=Sp657Chp$0Nm#p|Sl5&_EQf|O@*0qZ^YSWCA>!gq zqWDq$xcrN=Vr4;r4FOG`pLf%mTqay=@o8(7UK2d50*Y>bo65U&rOG>>5nDw4(^c#} zIg66mZ2_^x6N(hh;I4@1Wd(?Rin~tNqLd-7aNOSg0Iil{iT58O+3J;*mq;MQVdW{o ziU9HCbn&HUL@o%Qc2@-t0~?pr-*`9O#Nn|6;+V=2QV0pdoj zz`?+cK|Ao7Y$tgeCJ*b(`IWs%K-5UJIZYG{0kCpFdK15RV!Gk2)s4sk0rs%jw0XVF zJpxXD9!b}Im}9fsYd7wJpMN89bVxeR{yT-BSaj&|{veN+E^n?)`))TO@%t!z4%9C- zWZhZ>#O5buU^^~oA7Nm-$*WpX=>HW`xT*>uwRQldxN_Y zhvjua1zlM1urer0K&pcFO-`$y0HKs>xI2@6nlsw(?UfO^7`~2gp+^o|jJ{`*`;csg zqPuql5~be(q}@E&^2eSyc)i3!(e`M%Deb#oT^M$h)LNU|gUA|C0`196G`aw=0}ntO zSxxO0$MiqFs-vDbc>EgD(0`wty~p6=ZII~rVttEY3tV|~(Ep{=tD?%p+7jmrjkAeS z+#g4RDx;w3>L;PJe?OB7-jBu7(<3$nk>fpk_Nm8FrNE!9W;41`_e%O1!$u8?dwO>p zysmWEM2UO~oRn}5mYd9}$As~B+-{Ep^BJ?Uuhkw0xmQ1cqKe3*UvPsU&rCn)R6KKO z`0u1+rlI-%@`Voz&*MD63ooyKmopU9mf6LOeS#|KsHRW+ke556nVX^Xk=VZPia40D z6N4vXbcxSEF*T(BZCa$QYQ2oQz6rEkdW;tHF)?U+APhwb!X0yFXt1N0v(NP{t!n8* zdX^;GOei+M#xc<1&;QRnE=~-smNfz?X=ps$%XZv2Hs{M=0!@49ZbWs5pou5Om^j&EJr5oahf7y;1#GOU9t#WIq^GNY@n&HVIhOYEAdQ@Hs z{Q#&FJRAwJKM&7q`>AwD)sgL zynqeIGd8krMD#gRp|Nd+5*f3=N1m<`Ee4EG7yN($_->mpK@J4I(Iy z?=Q<3W~c77_O&`!7A#!WAc;v41sb&{eTl&N{If_8E!c&|cZyvb_ zb)rXdRad4<^qi`5&59a-)fQ~M2bJ;53|fn$CK~hb5l`NXwYp0IgaVj^U!7c#q3^WX z^yH|TjsN{6DvmDxRKWaTNjPWqu8puO=>K5=FW-$-={I|M)$f$UzMMY5? z-HJI=#2AXTfiJ*;#XJ$Mc(PL#b74L6_^2SG__iw#^Nbx4DB__I^xp5!dvd#74SQk^ zK%h}C;S(T`hs2eBta088y(>{$B+?E3;j7o$loe`_)SBmh?@!AQd=FQKYD&2akGS=wVIC~4+!4uP2#zq_N+XN zp(Vd3c@GK;rssoN9&&}@qwL=FT5)(Ld}7I!I?~4uE?5#FCPPp7`fLl->P!mz zqAj3f<49$eJz4q#91FOixx}1kULUuue%~~{itBoI#SqOXr0muSTFXpe-)ujIUhR8j z4g@wb4tb(sR(N8E<;bc(JC4y}L7y0sZ)uWMN*?yl$PK5+>$tm zPwouHl1`?eVo>gm1wrXa!>an-L*8Dg0@{GJ@-$a|QLREG(U9%W@XzECu+FD$`A8HQ ziO1&yCcj1YVZR?PYEdP#+1xX7i}MNn>=j@*IEu#F3<7dahh^MJzL`ZIGE+Dv{M!WQ>l=xaUr;%Ya$Ti-K~Aekk-uq$uBuo-EUu86%}F zf90+9EZ(cvjj$lQJN2u64|WSVrm*gPtcu}zaaTPA6$tOkLLaA8dVa=Z>b`~6nB8Zu zMAL?)eMl`}jA4Db{m@30mS5uC_dSBtB*bTphpae3YyN88r$c2zw}COU*C#YB_3`X0 zq}Co|64*g8j8{MBO+FslA2fDA5`xQs zZWn>9NkY-Ea<*CsV@S=q~zKMNc3UOC5UXqv+NADr?t` zrSd^#`R%;Mmz2?&qxmG>35A^t-H}LRmCfu8T=7Gmv*a2-tK9PU!?dEWyTAVDm6_x@ z#9Y37bt`)7XZ19T9)brDsUzQLbCgu!;Xv>Xk2R4J{W(G3C=%Zl1wjDLedjv2(MPg| z5E4(!JsLcHbF)mRz0ZLAW6s7sN^1Gxk}tKJckyEFgv z1AwrxDuA|U$1mgmT*L{V=r+rZD8Yx2|hL4k;DXzmaO$M)o2P026T zI!Eq{eP@X;p^%0b?J>@C3Pi-g(x4EUUTqL2F;A9zYMJpmVrrwa;^+yXOdm&Bq zR?OKrO5HU7iuKYE9%(gzpa0z3c|C|)&$L99v?ZV6fn0DT4PZh}&w(+wVex@NJgEa8 z15(2#m5kQD-uz6M6l57s|wKEn4~32$z(PQ|egUo*yGu#Ti35Dc;CfqV|CNSf_h6i$bD?DAaBk~d!cGUoGWgXZ25Kvu zGAp18Whi6A$QNamx}Ulx^I9~z_hK4YKNi(64ZCmHaGJ|~Q2HF2d}=Yc-IC%Y0`GK9g@|?N#aQXJxG_1u zDE$`Q&rXfPynE*{y!8Sw2{^yk7+H;7o68TRwLeNb%mi?3S6nPQ^6}2Qp_?u-frO68 z?NwylPI#CL{nzzvh@SGC5Xn9yz6$)b9~#9Rwl0KdU`fk`Z$N^TA1rXZe3(fK>+A$a zF<&gNN$NjuUE4Qhw#QYqi&EVH=RU5lhl?33wF|?iJvGO3ZWpaNuR6r$w;+roKV44# z2^*^(f)CpQiq*0Fp1+_9T1^p#GT;*ia8$^)G1Lv7KhXRsP)UGcZ(nSyLG`#kfWW93 zgmB|iH51m(%IAWopIEXQS+QT=DpKQr^tvO?WN(;grBJV>);ehQR}^sy1FeN+9ic3g zHOw<|;dOi87XK;LU2$b4SS(USM?#$~qevwE)(gxH4Hru?mEK-i8t83*kDg7c!lHLW zEuWtolA>dMkWKaR@H=N`jpFbl$Ns?0i0Iy+)csJi$W0K#zFxqO0qDpP&qv_0GH*bEsP`V1C4@=mbZW(exa+vZQKmWY_R=!{8CoSVwlxt+I#^ zWT@Z5{FeM=)0K*w{B6V!X&gwm=EJv|i`H9u?Uw?r-jgkU%xE4+--+@4t0)wOR&=}T z&OdEnCpf)$c{?(F-*2+e_g7@{zNDm@MM?Qh(trE9fUE?g2JzPl8Jc?_u#!+3F%UmT zB18)F&wG#DK_L6RYQ`hY1(G^sWC9)#;Ub1Y(P^=MuQsrTKkuksJ@qVFI0+C)pYJJs zr+!RR<+2u0Nv=C|R-Oazs#ueFLZ|8z-c)Q7U&L_F zn4nuX#fEs*LcXCH%WVH+p)Oyv$1{La6nS}%5<-k;(icwW?*wHFbwNnM_|Zaf7bUX? z+&`AA8x|wtnu`b!G^=MvO+TKD<+5?yQ=Ko6b%Z1YHl1NpwK^}nq~wX7K-A5D*EX&( z9<=9|I~1Wu-ihk1lxMz%kjogx)lmZCg)LOyuaET-p7-JFk5h_Ryf#(oNZ~ zY2lX4_Lb9>)&u+N>i@k}SWh}5m6i9ozq$QVV{v1krS&W9%X9Fx$49sSs&#odwIOQ? zZlrTw-MI3D(0ef$T&*7oL&{smH?AqS5>22-#ZgfUxSJ) zS-n4iJbb|Z!l1L-Qh1x)4pE=7&~!=B$gCGx2xWw?DU2fdT86NiX2GanVyZu`oA`^{ z*Y+*G&<0pKK)DKmjM!`_hA=RpC5a_53EiZw9^m}uj7ym0A=|_7-VAx<_qF+*1-&e zmAZh6#z_$L|D-txiYLF2IRfo1M~Apjikv7@lZgf}0T<<;@21)EO_BKGphrOPLkDjx zIDRc;BNQoay2Rsb+NT)|f`QiD)7k^Ss%?Pl7(jUAwvi#L#9&hOqH6>?71SPJ@Ps!T zSB_`3R!l#Kk?*d8;Q={XABs5&5iz#~g$=iqm?^1;css)S16@bIcN_QnX^q9Wnazez zEmcua-(R6hNvcN;RA4oJ-Jj1IEF95JLqf0_R}-w?8O5$kTz}r)_(SK8l|=)?TARwr z0>fRI0{p-4$PEpTb>fO-bv*C-$7+4iQl4O?0@s%y^d=KtKv(AO05hUH@r8DgT`AXP_UznV{etc!(wnjA+6D2{~ zIs=3Wi9=D&{hCN^U87|N0v>b^7)-U?W(6tm6t!4$!N3g?32-6kn~P)1>N(X^EJjfL_S4axt|BYE`v@x3#|^7MqW3J3?r6I?)+HWkz*IB5 z`fmKX{viwj{yqxEr@0NWG4Q;Yr^5?twjhOpJE%KIJCHDXdSBV#Fu)X47wpP& zk9yTC=Bso5GsZ!NK|9L9hl6&EZ&OC!@XtI>RLBpk;V{ZK`^Dw^&cT{vU|X;mym)bY z&~W$ZXI<%Y1sq(5$-t}=T~AL>Z%@z3%Za-T|6y!7R4-2Ny9PGKlTHz8oCZy|w$IboyeC(!6kQ*=&;0%KxOip#t>BLhA&TQ)6X%!2bB|};ZQ|y` zOF*y^LZaA1*JWL;hpPmEXUj(q`TR1(k(3YpC-LP#@uAcOsQWU8sa})_>6I42;H7(( z!S5E#%^%{EqL8So1Wkw>+&GvQ5erwE8A}=Qu~KcR_onJJOnb)+ zrOMbB$i|(iTpo~t}>v>whM1#!03UL z$&f9pSaF-uEUB; z79-uEO&eO(fX@W~EoA=5#m%rY-!{Sv)oJM3UdKlO+i~CQwxT*3)1kZVe(J5o8i1Z!&NwiS3@vTbm1TvdA1LxBQ)0x z+8{8|+*~;q)OOA>^1cAW{#f2xF}HQ)&8@fIb>3Q_MxB%aioETuHoDKgZALzykY6n) z&^5~asve*&d4!8Jz7N68^}1_{3Cxybb+A>j84U3&t31pmG`Hl*i3Qe~n-InyjkQ2! zow#2sx}=JxW$3IC<{|g2o?wB^sk!0OlS^;^?N9v@^}|LPW<6!%j+HARt3C1Zc>q8C z2pPZ$-;(1}4(j|nxYzNSE0S!R(XMu&!7XD*a;N8&289OI8#A;Wf;Ojz%(HsnFTHE{ zhCre!g4LHU;`nRpsQ5Q4-vCZ!BjDgDd3OPyjARz#YL&Z0xT0lo09*v`A94LFde{1l z%B#luu`9v!^9>QXpguo9mv`Uxid#a(jGYD9Wg}-*lUl&*Qj*l80rNMIuul&2fG<9G zCS_$pj0!Ql1l!ywC=O=aMj>#u>+2hZ!>hoxhQDFfR|IeX*=MNa3@tLiug~uqmuh19 zo9)ta5md=wKDeLnS2Gt?tC4yIqtufV2#~BBYm036m)OL+QC-+*BpR?f>PZR9T_Ovw zri156&xTTMxiMAIRAUde8ysfeitbwwcnvt12{_h?u6$3lj~M0PXZ-lu@t=FXyQ<>& znd5UocnF-yFcE-2bw0)luBr`DuW+|1=kH6eugYq=Hm|Z z4&l>DCx_BSsO3Ep)TR@q;wzDU(yRN1d;Lu*Qlp*9(o$m_yseNXgx7iuqDz=R%{`7K z83>sf9SnsBMnB-uJn#nE}OWv;{prIc6FX2zo$0k$%aNtHy-OokH(!^EoVjL{gKdt9O18m zKevPOFF^4IU#YBty`klTaOz<>b#8)qolNDv1X~5MUJ3Q_wltju+YdKMja;f*dswxh zfZZ_&2@xr}a}jbPetugNL(2Cj9ZJlzp_kCnxwyV_pG?8|k(xFcSt_|xNCBK=;fe}S*hwu7J;&3zaAM*y)UcKG)keOncSoG^m5u<@pu0)eO6 zkYNc6kHaWjvbr`r2DhPYK>UmI7?n>wk4=AiL!hi8_d9N{!IPkk@yZ~OEM&ipkeb{} z+wy7roCE3wfMiyxFq&XtWt_qDmvdH%hrT&I%W#HME!4YPJhDW60Ooy$UhTwps?nsB|C~4vSfzpC?9oAcMb10|4I@aGuA6XM#sXvmA`D%9sE-Pai5FU!7@JUe;nTI?v zF!x!9(g~5px-zMDgBEI#5%u2@Au3f^%tAt2;)I-Nv)_;YTAw^jwYS+UQeNW!0Ia@C z%@vN18ntmj2guL07{vWuhR#g_+x|H`mE&QJImO1y+^G~a8rYWzIKN~060mR4G3P6 zn0lRS*$j+#kD`P3ALpb=fs7`A!E7`BBo(d7IDPqu^v*Iz-v~yuc5bQ19eRI{R4;d&=6B(gfw|r4+ z9xLxfg#*ao=yd*!g%92j3L(yyb@NUjo5Qt3^dPvPZR`@XFjlndaWjF;SB2q{eT`IN zvrznA`b^A-8kUy%fs>|{to{#}GPpQMwlN=}<7KFG_(0oSTl3-lk{y91K}^r3r&#?A zXE0*RAuaBKlV&1#lk|>pan_M(ik$rjp%RQ+IrNX@wR^8ve2*`-hQUGLRm457i71oV z!aw+ib=ugnp?J$hY))}n$$zd@8^N=|^)5A#+Q`Q#2*2gnR9G-xZ~Hpl!QiD;YkSQX zkB_5!mfxQj7mL%vnrBHze&Jh;F_*|GdybA_PC(ymOBOrnN8eV5nkxTst|m0RhWc9p zsKq~GHiGmQ6Xh0Xym+~?)mVHj6g3n)C%|!%aEHz6FN+MXjde=xig$?F+N5Ntw#~E@ zcwX_GAyi`?>@o@=WeZ|a31VGb3ePW?G_2;h^T#h4lHSpVN7$r8;iS|Dw-p(eU*1>- zzPf95uT0Sry!M}r(MuBu0=W#xvOVWNTJ2*nQC%_b5C9ZP6I-{`GGAtK*FJ<#Uw%2N zdx)vTcs%2BK$@afa|9^0izyE=ZP^m`^+<{S9gI@i_@DS>cBFQTGn4!pZzQEMYzueU6N@@2tv}>`s{_5wa*k>(0VYDK|J+i^E3q2qe z`YKG_OcaMS_1Y$OMu+)#LsM}ggu~j!x0GDzm#V*1rqSu@So)35rVXT9{FOw7vZnUk={O$6hHv}IKD*by3)0}UXCrfFjMUv4|@gj)C0QxIF=4?;nO^ho%DYsa}Et+tkfQyX| z=9bLH-48xTc5YpyBGjN2I9EJY;v<|1%sJUIwQhGcV`AUnV*=7vB0@ zeeev}V1FI3$MZEL9D`f0!w?{gm*IgtPj3-br`pu)$I${%Pmn4u*PlFpFxQ{Hl)|Io>b z(fMb}SMK&nnJ=AY9z@l1P_%ge`5=m^-o=Yh+y2zgATy>;3 zEA#OUnBSUhb!AMII|>?qycC4+(r~v4Nt_&J9hwXk21Az5`F(%$9*+5&I53IYq?_(n z82z5PuNY}@=ce?^l4f(BwU(`|n+~ow0tEXwQa3dJ;LHfYJ&+z)b513;-7Sd9Lhpsg zrC%|$RKu__#Z)m3PXuq);_GevsnvpoKn_}%muiIlVd8JSN;fQ2sb){xNYCvej@$a) zoL2wF>RbXDP|*iF!tLX4%>s7H>4D~M2wg*9*6UR}Q-7a)>J&UVLr^sO=v%`ar9kV! zm3Ixhr{L}Q=2q&nLsHR1`<|j~tNGRGEylDr?1s-@${7}gQsTU_5WLNDt)2Tv{W)3a z&34SZk;;MCLFt#+Hnq#AS*&(Fq0Pz^$OaHlk{m9to_zj(fTOiKv_DzAR-moqUW(=* zTP$&kc7AL@&Hi~t&V@i4-z#ncno$`(}4CQUQFrlnT%2Jm!y^3v^awv5>-^x5jU- zM!wN7i+`ec@+;7_&+pH-Y}={6hN2iEDy-Yq<;$Mu6BtU3krx94AG*<0Z~5zs+d0pM ze!TZ6<}#~?kB-E!*1I3K#M=1`Ud`ZpX1 z+3^3xJ%$6Z@A)XI;JT;b!NH|kg_~co{4m6J9?GWjPjD<8lV*NfeS6&*)GqRHv*{+| zewKR!r6z|kU?js2>31)AB2&yQoVB|xa=7)6G7H0>Sx7h6=$!N`1X8I+NooJ{N1C^x(isB**GE@zKTXAUkbQ&mJS#x6agdVG@nhXVaa#hvjT>CKQ zc6lE=f3>{%P_plLtxWq_r7*Mp71JG<`FeRfBtn;2=G$9o&(m4^MXw@d3{-GF7Fwsa z_&VPEx=r!6M**8oze)Y8;#*b4J3kY-0!{oiG1H&7r%Xbms=ozGhX1a0c{4B&BvM4+ zLMlq#lUW1jS|O{CS--PW%Ew>Zzsq{?I_}OOW)&o&#*mjuxtD($CJ@B2A_6P|vO|}4O*+Ke`Lk=_t)tWoyNv<5HbW= z-7{PntXo43v$ z@{dPBS!Du7{r(xM(-!v-RTnlC9kR{k$-%~!PX=4q3p8|z;lzX3;Z^ZGf|J}~ZMey} zzCE4#V^s+n<89*Se{QJh67Xf?xGB1sk%rH>-y2!}UG_A&zpqQo;?tr2_Wiu*$G2JG zAEEU%vHFB88fcceMkb(BT93#V1=Cp{TLWV5v$-So}cpUo7%hcQSRiH zyCUB)D?d&%I8Jb3_@ZaC zD5wVrPJD_26BdSQ9Ssl18tGDYq9Y^es zYSb1#qa1xpIwk`;#4cNf=Z~k+mi}}{y`s$HYy||*3#gVGLFhY2c*MJG)xNgox$^i; z5GhT!9$-E|W@qwZSUiJvSQ+2;rk45P><>%Y_wUF59aS@wuX&P9$fb*qDFaMe3SI2W zA919Fw-s{oQYmP>GFPMj>~6XE2)OoWr=jGMGF^tNk(fS-#s!}3egaXq70L(7Mc8;b z%fwQ2k%c*Qm>4im!Xy(3V`rpIeBT%C`k1Ov(p6!z`c_@0UmewN+ZqKAPf~t{5<#iY zm_>Qu;K}QLqqln18pE7JrSMYeNuyb+Pkz&DVRRgSEETI*h8P@6j67{i(1Q7D`4I7n zSGgjuSAbZmrQ$YbO4l!5&JaUIP}AWRC(B4`0(!|4#ury^a0J3)-EL@CGjydRTRjvF zJ8iGixTWW0{Xa%a8nNj5e%adCzLB`8OK5!nA39 z=&SEK|9+rmxFP(ElnSs`aiHXDV4m7f>%wX>)z#G;mv%T@qh@Fj(sggRFvQEic@ z9~U{S)ocs)t#ZDB5Yr4N)^Nu@M}yL+Uz-zYbeU5gzVFoIrhuM&96V^EP_cM2)^~Y& zt5zl+!)7&y7VjSPD}}`lod&71m@b}bQ+@DGv`u0dKr8vhV zXhyQzJ$Jd!^PAq_;#SI?h=L=CEzM+5+Y>$nI-AdpbUfvPZVu|iS~Qw*5NcqR=*QmM z<3t_9K`*2UR)KDPSd|o*e3EE$o6d=WB9XlN`_>j-hRrt@dpBa}tw6R+msf(w?=RXb zL8p9ZSvL$?RJ3%5MH0aNw*(NTsKZ)H=r|Ij5XCy0A?ft-+2mxsgX2-^hV)7Tb^^<3 zpcGo(>zV1o6>mnM)Iw6KI0j6ab!LKp?ARZkQ_<%{%Tr*Ovt&hzrHD`%UC=2G#LRp9 z594{sh;|dn_5s zREM9ykGU?Jzd@zD&wqmJeI`#O>)8Q0a4 zWr^CWTXNX{V+^y&q2a&U(Uj+|2{rxD9{nAeW1eqg-}j6BYkM>KSILSq`{;S;enh`@ zyFgZAMT~^jQ0g*ZpGB=FjfGnqKq%&B)Hwv5atth`O@XfM*jRb8Y_3KI9vF24sN_}T zuZ-^tAK)u>es)K~L?kFg4_1l?f4b8Fbw-HAtj#-?F{;DUx>7as+%jM0 z?3>fGZAxUl5AM4BxBfBGIqz#Tx8{nQQcAX&_}J!C>6$QAa`*}TK=gEzTE3Yy`ifbf zn~!hCTLFRX-F4GgrAsg_CSeo8K}K$PM0zR9#Y|`Uh|CvaJMlE^Ss=l9s$CWD6QO3j zF3)vV%hF;MIDj*M9@PTM@n~`WM(7y&tf?CD#fVC-9;%Nz>N1Wr#oxa37=Q-dP8O}0 zIcj}IoCPXWijF4Lf0rxn;Y@pW*?8x><~)Na$-URR>aQ;T57qPQ>08+lJMMH%9t5`R zz#d44yI<^Qee~1=L^NWW082zn->_Y7rkf`Zsf*$^@sc$2#C(=jZg*?I@ z5PFYD%BXewR=(5vx0&1;tikYiO6+_`ohQR7Yo3lP!S4eakg<=@^G~r>5|9IL3oQ$_ zjTdjh!Sbd%Yy%%U1?Z!4$AW;-McSg44%d=|=HUhIfmxzfx?aRYoGiEuWBj6q?&y}c zdJ5`%tdsf5Z{D!xSLs0HtJfb0^=wd`8lge2XaRH$?h>EgVEt@<&FS>jYY*z!_TBHl zz9K2g?@RlAC1bPeZ9HuTZ9huvDwsC^n{j9z-|d_@$`%wHCzA5<;l48(0#iBY}=5~s?Z59`;ct1|dQ$jP;wZ_LdIPPtx=%C|zfi&6ZZ*F6eK zPg7duIZ+$@0PL_@8qfKGFE;~=Vg5Koo^I}K?u*ptPMa^b&R;feHKqK@cc}Lql1LkB zj{o%gjcRGVs`4i}NjkkmHnhBrMwm7;De}ovFH?WJ0JgHw`6AUIh}AQVPL3C9)k#0HZuP2)X=U$<3ILY*vb?IWM8OA)E?dCx{rZX?fSVOaOn1viSLmi|N1MH?R}ROC(Q&I|hqDOA zQmYG;QtCC+qgouAMU_TnL8dzidzgpCgKoj0VYtE}6}JhnzD)jM#ywuKlcEG6t&}W9 z8cuL6-oNY1r@$ViN2CCltbI*sU|vMOGe3v4#Mrd68F-tv;dOTLv-e#-h|K?vj^;@g z(^~w?`J-s`{y_dQMcf0oBkGTRD5`s}@lvvSB&R>?Qi3Z2Pnxlz2MdE)=+H*{F zuUydWIChWAlFm&c2|8d$PI3{rl@#U`wBB*YWoh5_4-pf0eATAdL_iXpB_RhJ?U(K> z{falSr;kPrtW(n`Fn;~&S(Wf{`YS7A&3C!g+#l#=TxpyG#J_Y+ZRz2dOD>v6!#zE> z{)v6VwZ9e>%04AXo>>=hS+(o3Po*wAcgIujyP!3kKxnR>{4izQJ+vd1TL&T`Xora zrMoK0_3FTSv}WLq)5JR#vU^Gn72S-{Gos7(*9366AJDnxSFnPV!M-0`Atl7R%Tqu8 zoc$jUc50@^H+W-wb3-8YtZL_NI*FKj2MYXZ2fNH_r+ieC%3`E$Sw9Bir63(cB% zR=RU}3NN#J%&Tm=LA^^9ngzxu{Mu@bP2zB%L=nuoNHUJ^?85KaF&0{bZ*(U8QTfUP zT`dXUIdIqG6hv41ykefemIg!QQy;NrQubqH4=1|Uq0D3WtSCrc5SuC%4o)fb30m<* z!e4n&6Y4uMAlPaGF->@$b0?gU|9ZVEShd(ZbL5ppO3VP@I~YUt5fzT6a>ZsS87O)U zf#Svhm^na^!P$V&5P6jfQ2_CV*!!~Nj0-Jwq7!O474^UsUn_qLg_-Q9@b9U@(}toWavSZh z+sKB32K~v1;ZGer_T4dxXrCtk98{9Q`SKmp+C%Gd#3hZgggb$#lkxObD%CY|Ste@B zSpPfxccEgB4rI*aByl4{a2*us!oE|=t+r6ZgRekvNWxI4Ru$b1DGI}z7H`5p_p%8# zvvIog2xNGim$b97kYY`xWii3)-S}Svu?NDdSu6<{l-!jrcjSUYdsBvSe>B6U#}u9o zn_=SOB#z|;Qj4nNqk`dO3x0uKY_J;oH zry-T_qfaf64MH#6`Ve!1kHfzopdr6--)x4o{MNsvw_L$X7$d-D7A%pslj5FSq8di; zeUeA1p#*1?;;O9nIWp~DJf2*9-}xK*FIXAXQ=Mt{yYX9}U%hqZ&0gf#77?y^uDcFI zL#R{MJWK@8i2y6J`i%DglrH@MkxgkMiG|zzsjO&R&Ra5u`a{q1s-ZC4VnqK-08qf{ zGu-^I_S3+)0kFcVpgxA|WFObq`)x+h*U@TzqD&u3n~Vnl>3|}*m$(74iS+Fae7@`h z;aSp_zkO^b>vquZ9o$R7OkY)+}Ms%p>kNlJyNx%mR`Pe0{IK{|o2S}ML(I&yG z&4u5Yq>31#OQ>n&aTJZ72F<~iN(6ey<1^U?(cg-A0jCjr{+~bIJ`TuEK7QH9r!Q08 z?`JbjcmA4d>tmpS^un`32@i)OktsW57uJ^Dr%fP4CqnqI6M)=fDAdeoTVikTWwEIp zAqgC7%N6#b*5$Kl=i3JViBn4k*kw9joMb9riCkXJ;Z4QIXT`DwOa)1MC`d{KiRF@) z{guQ2BT+C;#9~X?xm4i&&!T}kSg@=PwO6RIK3Ce~nf6C&y)kOMf+FKQTNWjw( zAnxIsqwm0Vr9@x;Z&8h{PHNNa`*fGf?k{Q>Ui8yLU{Me-M31?vDrsXCE?fGj_x^N| zwYAM)Q_Rp26z2{ZSxA0*de_;qj8&8fz;^JLilbA6Kxw2y1|;iy#h>}&cKD@o#QSZo zi1DY?%ln4g(;wmQ+oa({dN~m6vpTIMhkNd6Frugku_(9a{P*m7H4exCPkEwNHLV!c zvG|6iL?Pr3n=a}2H^jjq$_m@?QuxVo#!NC{ym)K-1r|oAjuK!89se|kJ21%-uXD-C;a#1 zP=kk=zwVc)cw}m%&hNwPm_TfXZm_7HV+4}42H0V)g3gY{yKHR zJ7*0!4_&f2v~mIv9USGa?S#Lf6&wB>F}0RXz@GjZAh=#x*y83@0k-jsj_3mRth*%n z+2F=jBH?I$7B441HAwhB6gqd{IIn{$R)>p&8l`VXZ+-U_?kHMZjzp zoX7!j%cowayZeZ<&pmRuuPGg<9F!GjcDYFSm~E-VEJQx4MW5-JMTxgYr=IKbCh@@? z`GVzBQ!R#LEI_kHVK}hWoh7m=A7sg|y!b(bMF-B5U#~qXQwbRG+(kp4vTdc#Ju0lxfh73hU6^ENn|+gZ zfgeMMtly8DeP0k8&QHW#sd7)xVN^UNFnA_9xy(ZBNRBi`cBZ-bXG>v zie~srI3Q@X9;#eu_V2xiAcyR1tX(ASpA0AFH%g~}UKu;{c#|wKbD8x7?xo8391*qZ8Dxusy~oC41;~03;iTtT75^N%0+^mi zrb4Vkp=CL2&>$MT9*p>aEyfl9YV&@z9sgfRW*`?L$+$RwoAxC~YBI(9K#q_!nyMwR zdZ=PAzEzS{$0gkEm{`+&Ca7ynS zWVl^U^!z$BHhTr`X=HCrWd!OyEQhUKGMZ=WD`hb{hg_`yD&0PxefZQVUf*SooNk^t zJ5khvT}NY@Vzkl%R17r`eDk$Lt_G$auwH(C@#|E#Z0hRzk@B$q$yze9ZgH}){Ikih z?J55zRup!(x)N*%6oxY_cwWc3f50UriHX%ou0x)x8BYfAu|(y|k5|bdvb$g6GWM9X z_Qt-ccM)pRqHus9zG=bv)G?_r_Ozcr$as_o+fx+9l zG^unxun=`&&`NzKZkw+-X}J`dKXC}537aF_5t;^sD!61@awi{2DeXc|q!h}IgOA}h ztkgJU^7-7Q(7z7{zG~c58l#!Hnd!K!A3kq-QzP`nls}0PTaKAfY$G(@yZjJ-+PQ;E z^X>KzX&Q;rf5e+j+h);!E!NvBBF60;05g&0Y~M{a5;j(iT${JGH!S-<`C=;3rDx&Q zay_Mzt7oPUiB{utRs3o3pjVzf9a1 zVc!&R;%|T)w%jHu2$2~Q?eW>Un6oR|K^yia(s>bl)Vr$aUdoBaHrf@AxK`ZBj3qGFJ8#dmSi64pfBNpfnNag>I=ErVkDe#>`6I@qmvZG5 z2}j8+?CGAd)OI{aIZ(EVJ1y9v^|8-B_ctj;jH-u;Q5t~gO(~q2k1$5(KU~I>*+tC@ z1HdzAJn3Ou483Q6c~+C2fy*4Q^m6&lI}J+K=VcmS@%O8~(P4qSoarJMND@h4gk~}Q z*>9aZOKF1YV`HbddQ(+GD0)^d!s01ubyXbzg#9+nJnBU#A0sGY zCn&OJ?q%YBy79Ag#>{7E=XR<~eAaWbr-h$^}zi!P58-JH)5&EX~~jq?mU3!7B|BwJdJf_e{{#2}B37 zf+~n~PUo<@ZZ~T&mw8W&<^;E=@C}O-nz4O+&8j!>E}nV@A3Z?MAVSzaAm?R+`lH}~ z;wa@>@cwf^gk5sb1-<`fJT>rtwcvjh^8%jtK?u(G4=0M{T+VzMr1I(jE znM(;+7l0p1394T+s1~!3taa;oM1Is)5-Q0W8x4hIC4@w{>#YwAZMzXd2y^MfY7+s$ zj&0(86x|?UC^6-J&wVpwF~)a0vOBnfpy-^QNit75O#Nc7@Ci-?tqPDj*`kN#=|j*b z@myR{jb7)ry~j8@{OzJS2cJj7>#_t$vCn)d`o@`2HP5^0d(5v{0+X=gBKIW1Il(I^ zvaUKs0EpHJI5o?G8S^@t`qO$L&91fDdhH`57XgoHZX0Y9Wh@wo;A89#3ZrCZl&C4^ zKb+5OYPgtk4q9>CUyeNz=Q%GsPWn)y!StiN7jGeo@g{zZOToH4S{kr+(Ea|^ls)}! zOb;@W6^IrKoAhEQFr6grihN}WpiBUr{>Sf_jkX1mrs}Y3FxPm+J0nGulM9Er>DcMo zh|O)|PiFbUF^Slg41nZMg>o=1P+&CNyWn$!vF+k>CBUk^7LOz(KL5oUhnaI0L~4(8 zDW8;v30@Ln^K%Hl^tdH7@KZSQ?;uSZF98x}U8 z;EF!c-(J#j(SaR^yz0aUf)F{_BNfhSW<0E>AyH=tFg`eTstmg5&EARdJSL)mTrqj| zBOb4K$$wa-E-{T~hOfFYgCXP?aa0cI!#)2_!uH4#fG{pl<_-AeL+eH<^j%L4cN{_w zjMoHY)`sx`J{8EHF-kJFht}(fL|Lx5Yh`b$`Dsb%FkxN?BN5e5vp=oOZLFI@?)azz zWaP@UtbuCTYabRC?WVT!YCSw7mtiCq%Pc}A{HrN@)64iAeUaGFP{nj)_^#^#;cKFP z{%F#0v@>QpfQA8KDT4|f`qL)-#Mo{i%;7pK801pyxgr&Au`PECiXb-GRLL=yK!_2p z!$z?*n&m<+TV%Z?nZj^?EnP;QT|3_WZT?`7LVpOsbB`X2XyQN4Z(@3nJt^)iM-fAw zf<88So6B`kleY&$*7OQvcC5b}WO-qx2)96I8E_79+pu<;gJ-Z%(HTq&{qx5<#%$|q z&~6aixo5o}trtPg1TKfkp~);|58nQctN8=o0xzmRTQdc~5$ zh0Xk`eA5w1ypo!4wVRkAwz3mv)YdWFhM(fQy3u1O2Z8!;t7C(>oP3zu`A42v0eFCa7llI4E~Ae*z{UFN@y6!0yqc#!YYj9Euo zVzVGgJDBeXZoHKDCM9zKtg~sl`Aoer&&6Bwy0EQcKh^puDi=juX z6YuP>Va;=9p2i!Jv$ZfZM3u_KLYlQ4+%^%e=X-yYEybbs@jnb~|J$I-;r3Q{Gw@ZJ%!ake;Fv@m~dpA z4ebp*d|%4Fv$(rM4_{dczq<#-t=1Wl$o)($RRygOHr$a%Q?N&{dY4L@9t__Z0)t!q zw&D43{B^Y0s`Kk04yID5WHAj;ux4T@sSg58!+JUqs!)*Pla8_T_M<$(gunfs@>lQB z^B)h0u=iX^3Hx4vNIsKE60ZVjpUVck{yVPC;(50WUB>&srQmvaM{+U&%;L4l&y6Er~2N_Qa=o_=$#u-Pd`+k{EyuO#>Fva9*x z=s2I}a>CX6#6LS3So@z(HYY1FBLVSDWOd3QfKE7VWYw=zx~v+vP5?=d?r*_pX0K}v z0`?&q3E`_|Q}pt)5ZBc%un&Z2K0>qhwv%j|+BxrY-gnnHj9Z1m*L7QE&Xhu&ua1vP z5t~6-@}k77c(B>HmChU4!Pq@~Kv(TpZLF7Z2q8BsU7k239!jUp?!|BeC7+BAn8=rA zFG#_RGx%->wUMZX*Vd?lAkz@|8qOnT5-rOhEna+@by+!~VB>eQ!u}qYiWsw3xH3l9 zef1bx*U8NFo-1~6$TgTb#fvUl6M6(H;vM;RhT$(#$*wcrts9NZ7ii!guX*RUTHK;J z-v9Y*a4dY~K_wP}J{i>xEMm#tyAzLO@376dM-bppQ2k52^%aZYK<%hufgv$4 z%$Di!T9_y!q4_T9E)%j;u_m`FgCeY+>>!&~;`m|vC9QCv^ZBi1?w;`s`fYUneb4Vh zlYiyoI>%-6GpFIJjk@Wv{7MT^Wu&l~YNMZQMcqBE=lpY?r_PhVnA*1b7se9C*3X_y z&`bJVb8?REq$s{xu+W5QFpIO3iSJi9Qzl2?W~zL;yHE`EO4lgU2*HvpLfG4T$(4QUvwEBb!&rZCWM;!uUrOtsTnkw zSc(Tu;I?iY#Kbu0RhNdBo6>+-mn5SiV2R{nGmWnw1Xr$w6!vA_p>)yU-SICf!H=qU zl1Ul*36;W_OiNqAmhZR4cciyEO(5c*un!?2a4mq>*Y7JWFG5dgA7ej~wqdWC7>K{} z{7Qzk5VOfaUQfh5+S6c0LlXD(w#~U)p6z-&_PF-lS__QK7`=dS|7drgUTAVmze%|{ zuSQ(0Xs3KSeDUL&Jz%-c8zTyO68k1RmiozA?1PTTvIEayMsg`q5Kd$SC4T9!foFrSW@lc0e2fM5=Je>B zHu44%6H#n5(utmUoBNS`G2@Ru?)Uz~X)y_QsoPPV(q;!_IMECEScaN$RZ8pe{N7}i zM25vhIsqWiu-$&u+Sui9O`Qz;&1Cu@za+_nodbSiFplDmI}x->LI~9N6UM}?CX9`x zeVy~_UfQukERkSJEa6`|u`em#Z2vZpt&K62et)r7mv^Cg*UsuLwP~V4&%@tLWrXWh z{HH_gWmx&Lq^GgE8t4ssQ46uP|Go_)7o(%Jm<1e67=6Fu112^3$2uJ9)l(5({yO$b z*}`4`$&B*yLaJDb3Nt)nJojp0kORxx*z^dC>YxDmPd6ZEKrlYCr%(ii-eZxZ^dG-T z=bOssDkTB*1{LxgSr*BXN?Y-kmzJbG(D_$+Wl44vsz~O2wn#;&wnk}CZoQ1dY!+UA z8iBka!G`|%^HFO<#wnfKg-(>`@^YQL)lebL@NfrF$k`>1%Kx%klZv%c;q@1nsHW2m zO^8_vwv)(y4^*N)>NdZZTz)6pI#glwwCR20L2Ld(o6GvwbCdaRr-f}eJ^KO`pG25v&G9G<@0?%QDf@aG|jZ||Z-?MiV7NUWEs-{Qn|j2KGs@he1Hq{z6KRoF-T z?dD7{h?0UkK29XSr1>*RxWvR#)is2GH97v_r*?@oW|jeQxmVb~ z^b2v)!oo3g8YhZ052U&aL@G%;@k|pEsh%9pla84%GluPJJ6BA=@(`(OQ?$=&Oi1dr zZLJk7T-TtV@n(Ri|NRC@XyJ?VfB5`ZAW*`MsWf!c$ArQP3%rnSNP^IRb?EVDuV>@c z^NPY;;I=WB3ia33w|J<$Z#uISR38usG(M|e&I06-9C*kz`W|IQ-wB6Aaf0J&=>cYM z+imp;NyEN0f3o%Jl)I2cRUGhTR0)BgqYaRE$Iz9EIll|31(BC8bRx7PF-9|UQsV#L z^x?e-Tax*JT;ZdBBi>Z!NoNZh7~j6(fNHyxivNy=ZYl^v>hHn*JlcBPwj{olKj(R! zj~{u)go*$`Vz*;m<`(2S`7Fpd<26E8YG3IiSaXAbpYK1YKNWmCBbQyGrL>C7<+PseMDpNbeLv^|gJUrpe=;J!iN z+7rFA&Q5y1ewM{Z(YCK#VW6Prh}oyX1A6)azVT&M45t6iXOrn7EXooAu!G-s>V@)y zOaERX60_YYk<`O93?Xa6)v=CPfD^A|#_1yj`}@=o`C+YX8Jj^Y=O(#P1hHu6?!Lg0 z;07E5ji%4XR{}-wa8P&ml(At$CBNA=P>(-LBQ#r8V;FK^Z3ON6)&1#@-=;HNIry~Rl*9N$ey!Gc~6YI$thWZcYK++lPd#~Ey> z#SXe!ppnBlV7|zok;{yD=H2|t>0Bi-zx9rU&`Cnk#U6Wa+t8EU>r+hJ0M>(`P36>R z@_|v~*YEe*_DNPBo#F>`F8h`EHu-=GD!6xE(r_2OAXiNuy zjsz0ac>`3+p9r~PvW4t>!J2ds6Q*d4IBkgkw{E#l)SV~W0O5ePQsGg1yuQ^u{#V@& zgqmZe6pcVP&R#6^2QXZgnoFBWJh~6R*YMI3rMNn30f%zu^C!QEfD#@Qy)fNzuaqu@ z^XV`AQcIe1yxKLU-Ih!B?1k#jI|>|nEbHEV{3WzSv_JEH>6`QF@+YX$!m%GhJwDLs zX_|z4HebmrjC`)M^3KYi%YB@T?CiPohz$^{22%q;{V2NvF9#!uPvqsdHz|qWKiS?D|6}nHdT%+pQF*U_yJcUwn1-$-35d z8la2AVZW0e9{(D3=FIYSy0e#?BYNDpWVa?on&N$<=V zF|-V#O(P)TgoZU%hg~e!zF-u@GX`_nyqV20-7t8}SYNHNGdrdz9Z@lWD?&!kxxR!A0n3Qd#*uta#hI zS!(B5NJ{3(pL|?RLb}w5{L1oK?@uz#x%I{05QSEK@G-q%OWIKL9wm2HEstfw3dJa> zC1aaYk4QDubVo;lWlNEON8DxdXI-I7ekCGXAT%eMP0dC;nnDhw}lShmgkdLIKXzMhuQ}|BLot`f+*Hy`0sF;*iYZDn0E0 z&Z2GhsDq+L94Ri2o@hyN7JZL?n@Yd*Y*->Yf&5349L^zK7`GD{+q7GcKCY+Q^XlN9 zj+-3A0isgmv~l>b*2F^4Z$rl+|C8)6&XX0Pp1R|~!jEtMH6{>!00K?(dc&n-r_486 zx)7VEl_64ac}uRKQbRoH5yl@5sNnl(+T(=tZEf6%a`BGa#R7$&1^QapRGtq$hDu=K zfNK6zaiE;dP7UR`ksh=5;}o*mamwky8xv}~T&|i)YRvexa~s{=7$Cx*et3;aJqlPL zE0>P$uVdl+;?#)3!C?0hjYB}fZex9#CxUG}gf5zW0BRH#Q?N6IoyDq9-$j8RA09<+ z?icM&R2xobCmlWz5x>(bR^bu^2jRV+Ef#w6qlK9kR@3y$KEhc7URSW55%{LW%AAA%Q+yEBzaPg$^>8i3%Abw1^+<%qbO1N(^cgOvImxWrS^*XY(rgyiBx3t<72ch#{+_9p1pV4YJ6A&8$k>&VXR&pq3Mj~i?%yH-dp}MB+4ud}5!9Xq3eBv3~ zsx%WE0Oo)KSe1g1H5z~^Xi%lGH^ru=R>Y@6&*B$>{X zJ(w+L2G8T23AMziq`Q|7h7(yXoyGLO?#}5wuKw-fu`xlziP6~3L=!hoW7|e!+iKF- zYGX8Z(x9=e#mlE-}_qMwLUA`oMNVHLjXwK(65YlfVJJ&fcCZZ zj^bKtlCiKiaMA2;|9Vh49RW!gaTOY{%jM?C1jLC)pS~EXoXB5LK}5)+Z->~H!j(1TTe6k1mFDx_!n1sq*O#)S|g`X@YLNh;CAGVUx76iZciwaS=*L0EjC7xZqi7WQLMY;>Rw^>#9G;&5KrUY?;lR+& zIx945u~a8w>~mX<^oQ#67OJy?)TYghaB6*vp7PnG{yAqa59wc9z0^;d7sKvOZZ3KV z`MrDzWTZKykWH&XDf`Vh?P1)45(WUHd(34Ctc6D?)RY7&vSNZ zTyPy|tjpKU&vbOhi=Jk$HDirIzyQ??Bv&Rx(l(Cr%bxAlrBCi%4(u29Bz^HaQ%q@f z2&{BPcADy2Lqt0O!t$OljE$zv$u^thJPb2nEGzY+!?>^^6{)yWP@H>*#zlR?ZMu3r zyh&KYojAFSTHeZsF{X>Lp@Ku+R$)^|o5a`jhP=I^6ci2d{6gn@^fh1qUDr|=j_ykB zYZ(95Be0oL3r)@@75YM1jHmG!W*r8OWMl24u^V?e`Wpj8G6H{^A%>*x`|J&(UcdUh zq(hGHUaFdmNk{@7kNG(hq+NL=CKd(abl>!EJwR+gr0}Sec85f*!^31IBuitP)f5{C zcj~1EC>W#cnwXy6Tx~5LCPoOKk4L~4l59X{fMrMlP!??axor3(mIH3v`T|?6!xpe~ z4*W**wfK!hd`a*3PV#x6& z-tq*ZHSufX^HrOZv_hRQfB+U`Lc^~aw|R81WlHB`W-(LI3wn#&cx_y{#qBvNgj%Y65a>JY7h~r*ONPEv?2z%E{XAFt#Zv?&L=1HH_JdsGHzW zuE8+!&|P3j*l?iAGSqZU$k9zns#GywxTOfj!;Tjtf#pW$hCs1u>Wk3^Z1)d@2#v%E z>^={f@b(D=Dj|@RC1lH|y<=#B;ho>{y6{X@>ho3bm~IH7xlDeF%j+qjNZuim`(^lx zfDj-;0T;-dvr2*s1V-)G3H&pmV8UcOqst)_ih%Z_+G?lg$VMjn-{YXMBI4eN<`J(V zXt43~<_cZ>9~HDllkl-3BB!$sR;6v{MUeo^ zz(Agka_|}f05h=|pn)f`(6Sg{akG-)oi+gR8hJUMPilbNZFjA>MQ_*nazh#x;?V(H z^&(Q1gmzi$8b+rie1_;L6wVKN@zBPy z*khP5{ifwuXy9Fe?<2P(SL;4V5V=a)5U_o7FUaSqCZ9BE;rXQkO`n}FFN}n;FxOpt zXOrf&YS|wDr67j&-uYn4pH!~?vksYP0gM zw;CKR9nTQ+fZhvz!fYq`JE@UbjUonLmd+lctBO5%ta}JMR65Kv)zm5l~Q2=GnzYjWP zWH{Z@8J_&=!CWDxc|sh!2f>`ME>Fh(eqW1$9CB9skv>u%zla8oM8??c;@uDa zm=J0mdTGsaNqB1y8P6jATfF#bODrsirTI0-YV0fdNL+P`8Zidmx2K$>LZ0+lm+mk_ z0b+*kPXV^&bRA@a;i42<6Ca8%`r%4|p-Gk&Sp>eGzB8^sm?_bDqk}nS2|b~jnbT}| zG<`R5Zmi6Spsl;FHZG}1pg%A2<+vC+Sl)P8~jiB6a(ML4Xw2;~WQU;Jg%DUgP6?Xz{AncZc%v-2?)}legK^iAhAJJ{(B#D)%eAdnNb%aXwzKjve^b zo#$Ix3FCx{eo&=(UXKhAn2k(JAg&L2A^~!u?;oV zK}lIbA#dOy^xPJLu4yLR`Q%{XF8B-80-Y@jvZ?48@e=2@8K7X1o%!Bq&h}F)H1$09 zGWSR>bmm;}uOss8vOlU>nY6FVT5=Ct>VQ+zSJLULI}PK^c^@I}wwWYacq{?5D5ex3 zcx5{+=404YZ|Fp)L<;6m>133nwZrej-F6!-fepZLVRC!x6AwnNeRHnPw@pmDfJqU@ zmD;BUxdWL~g9yI0oX6V7YP|Tc0s^L#)Muko^cb6K&e2!{=1pwLHa%haU$TMmO-vP-xiW?lGR6`n zGR8uLu%mxg;MeX$ZMSM!*WONu*m_l!ZlHD}e@9e+g}XF*hr#gO$ZqOBHF)4Rki)<| ze*SB@618*Ja=!M$E;gYj#m7UPXYF}t)&?(ameoY)s|Z;NcNN=8$!0A$eIzqw2a^FG z0jJu6ujsm(<34ZI?(H15D*^A(t@mI;%ba;pvijDu+(*T1QyPM4 zf`3LpBUw2d#>N@{=E<~WByXPL3(EZ5|r7;de zMuKEN&D=>(k8we-HGR(4kPE*Ep?hPb>DY&DW@VuT!#5RLUj7SVN!-X zaQx`)Kw*BC?)d6PkjS&%jqm5U{$3uKPS$?Me8zVH?tg|a_8<|NrUIlrE!4lucqoDk zSz~pbw65NHBOr?c=R4>WujfVrD471|lp%%v_cPkr8Ix^3=J0)PV(1`uhFH)Ss*!x2 zda$OaNI8*KYY&X;_zo`tpJdu_kWr(6+Rz#e?QGY-V=}jD>-U*#{ts*e-EHnAT~xz} zhnJqFJ9WBbtDFx`EV!kTht_mWvWd1z`wjC{nZ;nP?9`?Ky!V1`Hph+Ccfa>nR{xX7 zT)~a`2HWL|gwykNsdhP68r+#8vwi+;Yo6`Ck421x8! zt$)2fbZ1^DvQgX>!%GGYWn&(OoNiVuovi~rY?R~db;5;+kHNMn66>Vl#Uasw(tF)a zntOqEA_AJF1~^X<17N`szO@nrNIP78q}phk1(wOElApf3!`zkX$yg+p!!6aCU=Q%U_xpzk^HH46D|b{jA+3M==UP^ z8yoASO#si`{J?(^WoFA+#$+&I%3jydK@(t~&muON9{-@g$?OkUq19lv+aZ@e{nxdl zR-xv{EMt=6qPjmF&hyu~0eWq>t4IoA6Cb?Ow?6(B=WESWj#v1$n$?qbdN}>mTs`pN zml_8vp$CEu>XDk17?eM;Wr=l+0r7ogul=9z9=9@H6MB0#HD9s9 z|Ld|{NggX{1c@h7tMH*>aDXhBu5t)UcUlmk`f~EVWHhVZ8G$WDe!+zj1*^W1>`+h&up+%ji2@#utWbh(SHJ;VVgX^7w%x(bCu9h-wQ z;_>#yDyE*_@DUX?zYi*oCL_Umx;#QLS0orP zT9l2S`U+SZP~f0?InXUTL$kVcpQOIdRsiCk?Iz=q9fcY#ciLHiUVN@@38DBJ%-_9; zGHw3Q&*@e)%ybsYSFRa^n%@U!1Ph+1wD!nwlw+lxbPf2cGyU)!66=&}QV3<(m0B*E1nfsu0Na_AiUyjO|$Jj2)E4U-1K9{0~z@^)SH_ zH22wayqRN^KALOO78e^DGTO+4`AJi!^&YOaXH6I#B5lgbRV$^KnEJo~Vz*+mibO}>& z5YVEL9!l=@cV)y!q0}PRbDVuJZ9U*+6OiDzmj;{2s zes(I>9haEUHE3+8*K%pN+40kLVwC5b{;=K3ZoyP4Dl(C1!J-gfw)=(C=!4^#161XE zd$;b2e++Yn;L}*@*MrS(PmeVmLRktH?pb4Uar9E+S@u;0I{US>qD~QUPZhtPMOljg zLFly1)jz1m@`R%)cam7B09Xi-ORRqLzz-!-GGxcl5!j&>AWI#McU(-)aI z@)DsUf(K}$H^v>Ytu9|BxpRK~yMn8|bkJaoq^82X<>_KMx>KW|Ab92o45{h& z{C;&0th8-7b~8jn?4wj8fs=V$`wc^#C*&=kJc~ugC0aZ1&0%L}>h&IpR?p_^#kd}# zSX>E$%Gv3T<7U%U%~8)C_v7Ze)A&u>(6!+LGuh=}+{wg&s5q?n&o~*s&?b-O-tn?~ zdTXB~p7$h2D_ftlABrUD?*$R@4;^ohq%Q}xiVjKc4soQ|vRi=^Xs`zdz)X;~Dm5#6%0KG#%AL(GAb#gz0B5CH9ve)V=;HST(wGU(TnucAFmWLtf&bXbtDEF&ql*- zm$8oLeMHG?YTB0ijE0R3GQ+?#iT^23i)gTakh%|7AZ~uI_M2>c3n%v9T3uavKR2Ab zZ#1t4zF1qtgh^F&h8RTVQlPg^k;@~+0|PzbRXNn9WR)@!QLzY6;ArWw%P~Xi%Oz?t z649DQvtSdau1?lMc=pwnc4QxXO;ozG!UtZSe1|Je4;nq>c?1{n)7=GsjaAw=j1N@P z>{r_pkMVx<$Y^%hpu@-VE@WzsHpva^Kb1m-_aXgTWs)u|KB(KnS8H#R;Z_o6j0U@3 zmoBWoB^Jnbz~00pD2rjm_LKvc0025YQ!sG>8?U&1{gALaS%0s*<$)=c5y5ixA3Y8{$e4GiAB zK;Z=`{YF0LT2{&3hylE>X_9+NzQwL1%_{P@9_v4C(tD;Fu48ls9RJ$sZ6+<(-~56d z*w1PGWjZ8Wm-C`vk*9yYZu#D=U@Lsr{_Zz>42k~zWzd2L6HQ3+wY@Y!F`V(1RF z%mX*z7NwCL$$Jn0EqNL!vCd8g`dX&%ntc^$a%AuFg$11+Z z-ZnLpl&{K&=y9|H9#*Nn0QD)M$H7E7ZA8`j@@?SAg?_7*;MT63g~AD~x+L=D0j6OD zgythDFrtK4JrbOF3&tG>zZ{!e@hNGU1X6nMXScBma!GpD`Y@xfR!cftp+aAt5VgPk z>tvTn=;lT+l5qZSLrl?p32J@$Oplp(vFwMSGsHV!uq0lkkZJawC;N4rY?6+X)iL|duGGF-9WyZa z_kzZYUnbLQr8iwgyuEjvI_`aY>e3#UZR%t7-M4Nc=!o3CYGwYyD4Ht)qwTG26705W z#Y@rNWc_dKwUeofba6O)0(vFlYFu=P!QcucrUL5QE-Zl5A30nuYCfcdi#V*XAgtB9 zaoPrx)XtRCrVr#3TvEYIG>o-%X;aP#tvjb*9}p0%LCC|aLIvhh!erLiBunNPCuZiD z66?~3U{}ccyB}(5*~H2ui0UNa>8x?|v-zf61T)`*EUz&UXPU3;SaWB>EpaJ%0Ec ztIc}jrz`H<4X%rO-K!1O8Y{#nk}H=*{wLQ_XXkyLzFIxdk)TGy1#4yMAzs}?H?sjh2Bm~#5!aD9rVr{0uR0KQ-|6L-I+KAb;k25 z^|zTC$|dK-6+%LPKtV02m^^5+^vgzFYr|nWs^P;Sox6EyqG}!bk??h}Z-0T9@h%2! zVn^VSdPS|Q0z*#M(cOc#KC4Ps3YK<)w5I;USn4e%xz?`XUck~7O6%VT7#sMD}c9f(CCRAL`z)kcjD zKQk^6>H{;zP-k&4ztrV2aI50sVVmYN_%7MlIip3fdjdo29)TvuXg_+kUN1;li>8d> z!0D*SDTm%7An7pY8#)zBf)w@zVNKh~#pk_yTH^@kJ+X3NK97?rbiY8;Hvg{>>Upf- z0^XvPsf#CH!XBx+ZP8074z%2ut4^eZJP{L-i(s#ZqM_Wk{VwzdLllqA0)cH0e|q1C zA9_0p&qpaQqntk~`#ld6okvj-D`A&ELlt0C$k*nuEpJ+LFp~mZGtHsaZvW|7S&35$ ztx3VkKn{=!n5m~#!oH=cqpzo1ezhbQMaD2r__8{3*fk zfhJnRXMbvkvVX}TI&*BA1~*&ERSJ-ujUY%`wehNH&?j+TubE2!%K{K=F#0A;LB&r^ zi;y8qiTU+RM@)Pya=+yU4o_CSowD=x+;=MJvypW}`sPi4s!C@z;VbOq5$d~h4xOhu z!K1@=Hc}zQ0eU-NnD67sD5`8uB-sA}*?N*sy5qyPtJrah;oKA4KXz_pL$BD+;^lKX3BQ(IE32bKe)dHBApki(}gsRw)?h*&TgOO^fSG<~GRcr(BDLxR-H(AakGh_M=Dy>PaD@V$BoB$4*4}NA>{{$-CoUN+-R0<2q?35KETG z({%rSj)otkF3;<@^63=El7&5r)F9@+ORR=mVi}^xw|0JLwm*C4kX=wa+hrd_XEJGiiS6}UNkj0}tROF@-EYd~9r0HSIP(cuk zvOEKaL!h}8l&qqbZGC9d8aB^}h{oU(E6NoqX{hVL>P?d-u=1S#lYrq_Xwen%Ms@Bd zWi88ec#Q8z1=l?R6XIYfd# zFYz*A(WqM5fBQW$CqG#OPF9Qd2URII8GCISEGB>&jJkSYg-ZE4Kex?>%Q{!dfIZF5 zq)SxrB8nQZNP&P1GYmTa&92y&t2gMFWJs1hl&#l`Tqc>x^5f_A8^%SXkHqxVKj*{P zCs6K7Py~FFan350m1m@pPgm_HW@MmNcwPW=X}^k&e&|$wnBsePeFpH=MSNLWp%y(=RURT&jI`uuoTb~-m&3wuS%n5NwRDS_#wJG(8b5v*L9A`DBXJw z!Bl3Ab!4cbqVBDpSPn42kq3rt4O=QRLrt~q-Fr64DExdDIHC{LJ~V>sMZ2%8pIA;+ zsvG4Xs|GJcN8JJgmk$2^gqZ*Mh(N4-m+xB7lYJ+3tilPM9WLJPspbh>dAU#(U82}T z_pHqK7nZ4p)=_qhEXj2O31m@XTWOZ{>S5vFWXa=xfwRwN>+cVBw*|~@C-9(rp36MG zkdHrpGfyzaN(7?4PFhGo)T1gw{_Praj~GZwlA9weWFV{5YZm_SvPnyE8n@HQ<~sZ| zxk3>lv0W+=FX~_>?D}dFi(D z{fF2p?B~6YpxQDG;P#7Q1r5o=19S1pfh?xb?mz$4W7vJD>quBgFoEDNj6`+7YyNgN z+4fy})Bns{19{qYr_W<;C91EOU(9B8QkFMpngT4*uzz8#U8#6MY)RS89wGWMl_pT4 z4DjUKC4~~n*rx^RI*7|wB$qQ!s-6J-P+}rDQi6OfLV?Sv4A=F37{zSpP_?7;hr`DF)=1QI2u4ojEjJM$+Olxm-2nwM8e z!s)n&a2)AeG*jt#vQ#IkvvhT&gZRJBLe3lyT9^C;KYD2vtsi53hrlmUexy`?lD;1h zVA`WO3vK=iz4#dGzX$0%LwP+Zu~1t08?S8?OCJ0Nh{5cei%!8I9u39 zuyS{SL?jxC#E?Sx6U!sg*1I~#&2)|>;83uh1h-T0+AWu#|x6(Nf3|A3?QZ!04UwgM#a9Kmuf9=mIF!CC9VJ`GU|2}FsM0t^#0P9yjFhm{hLa2$is z#vGfU$1;E0G>>5hG0E(6$ZR=on+qEgtr3{ZStG-XuLv`UXD8rq*Q&d(&kw zPu%BgS30460EB+a&m=POBb zr!S?utfdd!13Dc3sPld${f^Y9ovukF>rOBjWku81fpq%MkD<}2N@If}Z!IhY?~F+#G~o#qvX$in2y!O1*B0s1_n!wd zLS+z&Fn}C6KaggR6>REph(u&gN|ZV?iXMF)tLa~^FbMupP+$qn6|{Zu8t8j-N!Vpl zu8CI6YK@qxqa}j=C(cvA>Bk~PPH~%h|J znV@}Flh59V{Qrj94rHjU=Y(Z^I^$SpNK>ZN?ZBSikw|u-G`^_J!4qA_1K8q!sS{^< z(EU@_>mYq-vkdbDR2y`MvOc7;`$T{Uurb;#PY7MSGq3(tYY0Pt#RW!%PDCUvNOmfE zc&W>SmHADupEX24TzPR8yWQKW>&^K+XFB0Z2MS5w#a$*!jsZqsW{Q3WO#Uixua|vu zQGW%*27)GS^w7#0(Q6F^+~&?j(N& zx);F%U6VYvJ{rq!%_|SuH1od3XL#hOy7HyY@$SEZo`*Ts&iX4u_O(#;&42Xtm0eyart~ zlZA*-saR!7nkKH#F3Kfwet~O5z5E_(zeLt#*&2!~Sap4BKqaJJzAiMkq7fF}In%%O6C#hc=wAW|C3rgz2r|tV5gnV>}or zdNmFY2+F4)@VVM|G}L_2Al~MHK{AM0qzSEZ8S4&64nqn3Du?e@A;QFsXzoXQ`FF=Cy486l*JNA7OZXA%BR z4b8N5s{d(Sbq9q=@lU-TQzjAvG?b@3wrC*$A7US0?LG0~+!s3Ru)P1bBtFX!1oczp z;!|gWCdH|CiD7~nf7%3ykI2RZ(g5W3!-g=f>V|?s1}u6z1ck+bg&y-xAfVXusMCQ7 zHpvozgt9{tj4gA-Cg=yLTo`2_BD51vhav2lE)6aP; zljw8VTM23PZ5{9~8<$LTHf=WAy_Xli?j<$hyT?42Pdb9mu{Um#nxSMWnKK#J-LS%g zt86DR>`7KLNHl`JuFTVOkj@Uzs6BcmQjc1~Lryh1FovQwVPvmt$D?j7AflsQY!0n=!+eZu^LXXW z-U;dszlv2l4t(jsm+e>jH+IFPu*KuT@7b3Xtg|%ceOCh87ic>d1KNUBo&RG+kXrl5 za=lKAG?(qf2dDO~j!F1F#i<%c>_Ard)q&k-Y8Uv*mn=V1c- zbQR8qmPbPB->EO9T^!*<-d+RCwkT>=O#$vu$@Z3i382&m6p0==E>uCkqtvFLWmM2Fg#7xdqeO!Po^WQ(s{5 zexVQ<^_p85mjp@#!VP8tUWM-;AZ}*&0~HDOai8KdnnkE24_+RBX3mQJkukf0-R)DG zUB!%FW@1I(sk9wP`kwDw9x(cJ8FfuPp?DzgoRM58qWk06{V!WA-zPXbP!}~!6QEIG z$&JSuzdIhBhGlT*dE=IdPV2Ah}M z?S>TXhJGx?n=VG-e0EM&m9fqI1*7sDj4Sb?93AR8`jwQ@Q*YuU`{`TP+cyhV#hIAr z57~h6)3H-;j|HFi8^29{OaD9x$`36)ok=DMvU&+zmrhzrm56y57J+Q9Z1*ja#IIrt(Gi7Hhw0yz}9HSA)nEJ#=w!-GOpg0k)$aF0&DILy!avKu2uVJYpb0^%ER&G;wB>k$uO7C zbHYxf_HVEkBFvO^;n9?W2E=iTazk>c$G?l~-hFwPl7c00VG5+vxC5C|89Pk#P9xZR zMK1~e@YTbK2YHc)g_S61_j378>t;#%{FMEkvi5ycv7kml91Toqq!JZHUb5%rxz%lp zuek9CQcQN(n*c@Ya&T4G(i;;qCzJOGc+HJrefbhogxP*O#DEjzhFdx=K^AiG zGP(E(O|-1eh8@7np7^KL3?#$-MG$Ybn6dVB$YX9!&xSxdc)GZxg4`C#I(Zc(M(ohf zGj^D295g^ZgC?;MLz$@9-QjBCmYsx1!T!h&;^Vx#T--1FAdCZ!MYLo7`%9`%*e0OEhp z?E{Do-;Kb+D2JHnY-uKn-g$}&BXt@Xt1th)=h@t1u|LwmnF?S~(=%(6N&I5-XEktc zR{mIq;LF*O4mypekq8Z z5Jwkb@((_AePM^Bkx?!e*rLaZxFrbLkllzMToPRCydH1WrCl)bl5!7Ki!TmLW;F}z zf<`M0Kz_vNp#XS)Ktf`9OqG2JdkY=I7!_EN2D;*Zwg5cCs zrG!C)@K3>vD`Nt#eqSXLi~tTfIbn)O8Qv$DQTtj_YD{C@$T>@aUsFULC11<*I=;Ot zw7tanHL8(9%oWF&Uyw*z{So*@dd-I{BGEgh#8!Zk{WC$hqV+cWJtk)81Fcl76h1e6 z@u8FOfQ+vr)9n{=wQ^PW^xw@3ES+o^_M|*0)39h&)>kzy+SpXnzX4c8`r6Wd{X~+#XMQ$f-$W8ypGt>B zNGW6^CSv~FfPvy4=+k8o+NW5;1n*r?bOZK$wpf!4Gz z>Zar-l+U0JE@C1B!7g#)NZxqQfJ|*Q4h&n$1vZ8ZX_bU7+z>i^zm{PaFS*6H`v);3 z_AL}fg_h^%^QEOXVKBcy(_s;oEs=({3i6Eh*CJWXZ6@Zia0C>gZgNl)I#2c5AHK`B zYu+j4B1FPcovUzX0fON_u44YgL`w643k-hT2Gv(Nyy3+!#m*TpWoGq}c9XL1Fa@F0`c3v-(2 z@jpb;G_XO=M%rv~@medOe*%WnUfg$>oflK@w$neC=dT58yYay?pO%pJW~syz{Qa+u zep;K2NFk(-!N%dpi}PxDR*s7so{gTE=vN;aV}C=7NsmmB8qkw3(vocx`)y%tKHm3* zjIk!_Eb`i|sI;cI4&+k)Oh?V^XKpTHN+Y`)d%$CBBiVTRW> z>_C$QJ(#RD8)$^>y%uHg143J8wvVLY-aWVzz$&c_xU&1{rA5I(FF~cADa$=r052|% z8%(oNG{#yo^i@Vhr}}l;TrDBF2|WGq>c*B}b1*!EC8I+f+}9Q_RauKU2tDFzv}OVb zo8DUuY4qYc9g!AviLxF}$FK)z?+6;UsHI*}+BiUes-8e)XIN-0&R|do2ffcHy6iSthXN9VD20HV5Sa}xX$EUbmvw8!$cz` zilx&)O|+^pmqMq1!|1n&khn0`hKW+t~TbdQjFiG8~eah30Se&R|~~P&dFw9)(?Lt+hO;BR8YD zXCO!BI1Z-f2DGyrRew>DshXB%?rS}^QY33gqyfgX$#QqrPaT%o>qY~@wj5WV!_~EK z*esMyD31wFM}PT=vSGA46k+D|9Y<3oZhX(x9H+P@IPSc@Yt7i>!US*7T$=W;V~X(e zZ)nR{A2q6K{6(3uX4HM4<66TG%15m^hBypd>h_aL3+W_mDCw~xnZN&tp-rQ7!;u=8 zULYdcuRIjLH>E$xIk$Q1lixFGix-x#{#nT+>tTeno?#xYpFurMg!o-!wKh)VJI`NW zcu->+Z`%DWZd$y68&|MB2fCsP+`mwEZa&Lo%DKCQuIktN_jiFzM2ZWJ>mps}?I(4~ zb#+t=3iR%ycLrJ$VtZzN(ZxwwKLenoRzrEQYqjx!(2ktJg@pI6bCEopsge=FUg>(^ zO#F24hA?=hAxX)Tc!$U}0lr zIq0U8-h_xLk&j9lRp1LT^k3+#X!#Z8cRlD;Lgu)A-3k^YvHg0uCfeWF5?#x_7*?$5 zDK9dnBUXp&x|W11#~87skDe-_LR>Mjk@5g_Gf65Q7qMGobXaf!h|xUkkb*h5hbKV( z3mhc_eo!R!bD*&iiA4~Sgfz|4!ubO4`LMK-!?1KkbIXoyNYri10s4c!#d=8M1GEW* z>qO^qyYxJ=we>>+6GLe&tXI3x(cS&+GPkQM@5ijigrZ}I`}xwjm2tI*zy+6w9Vjyo zU4Y+@Ju|CAuXvVo(Kms~k;ApXGL1Ka58P{-#G9}ril_Jo;m+4;w*)^mq4ZazfPu`i zMP5YPA0tO$`9Ir4>kC44M$}Uqswuic6}4&H zkzaz5^$BEiW1jweyI@l9mC46#7*1An-@egyE!S8OZ6qw1sIL_;-OilMUh>7ws@^9BQ7jM-l30gT4G( z=M37PI7)HwyIW8e9RlhLW^L&4vt61)hK8B!?!QL(V=ftYzt=;FP9<04>)|&NM`^)t z@2eI39`jjYT-jX|IGjNv1YfaaC8j!>m*{er3DRu;mEg@teAA`bcAuHsqRd>JNK@=7 zSCCw|`&RX4HIQT?_mn-uiIz8=N4A(gnyn@oJ*mxaE=i3Y6q!_fw&)=uVHPxrvE%9M z1DH`~!^kix@t=gD!UPYyo6hP9&+nm0Mt@KqL0yJiUA1?MuwU7)LvMBAr0DumbAp`6 zkJp+Behc2+zcSjaxX*KUX%;;{&sgm&(&e9Q0N9(|@wMRu;}A z9+xgtiE(aoV#>{Y^Az^pQxo?76y|2hSHl{*Hz4Lw(j`O?$$H-$TG&}UT5D&EDV5A~ z_eIW*$rIyzQ-v-)#@MX5-s}|#O=R0{H5Ci~MqdJn)OTN0)*Fe9Xyq?XJbv+N^UtG@q^Kd_B zvT__HuMS4V!cddjh2EJ`K?@yPkg-YX;MtH~@JaH^B38#Y;Jio;K%4)p`P%YaLrum% zhu90{3x{ze~ z-evBJ#6<5n_AB4!ZFd$vB;B*b-z044O}&0E49 z)BsHr+%Da({6<-~GZpHf(FS*GWg0EF|V)?*tl2=zi0SBg)#)YN{zSDEnn5 zi$p=@S(&kBS0(6mjk8io3M76BCe4Ety1jl{)s&C_p8jLr&sAE3oJ5U{>obAQ9Ix9W zRSx1%kr4C5fX+rF&xPNpt@wFWc{RPZPSxgKtb^rGqD=e(-4*XaN9!XNx?|$Q?&ju) zqrS~=7b6MmE_ukMm6LVC2cZD44IH{P3(ecNqVL@!=-lt&>$FP`CJ#7ZB(FSJ9N841 tYNAuy;t}Bp02qk^^7H=(Uk(T#h;;+l7ZIBF15l8UtfZnuHP|Tl{{ZfW+86); literal 0 HcmV?d00001 diff --git a/_static/minus.png b/_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/_static/plus.png b/_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/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..c2e07c71 --- /dev/null +++ b/_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: #d22323 } /* 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: #d22323 } /* 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: #d22323 } /* 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: #d22323 } /* 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: #d22323 } /* 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: #d22323 } /* 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 */ +} +} \ No newline at end of file diff --git a/_static/scripts/furo-extensions.js b/_static/scripts/furo-extensions.js new file mode 100644 index 00000000..e69de29b diff --git a/_static/scripts/furo.js b/_static/scripts/furo.js new file mode 100644 index 00000000..cbf64878 --- /dev/null +++ b/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={212: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(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;function s(){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 l(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",s)}))}(),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){t<64?document.documentElement.classList.remove("show-back-to-top"):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+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),l()}))})()})(); +//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/_static/scripts/furo.js.LICENSE.txt b/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 00000000..1632189c --- /dev/null +++ b/_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/_static/scripts/furo.js.map b/_static/scripts/furo.js.map new file mode 100644 index 00000000..7ed2be87 --- /dev/null +++ b/_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 + 0.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","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":""} \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..97d56a74 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 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) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + 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 = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + 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 + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + 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.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // 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); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * 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) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you 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); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + 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; + + // 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]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.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] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((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; + }); + + // 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; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * 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); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], 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.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [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) => { + const text = Search.htmlToText(htmlText); + 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/_static/skeleton.css b/_static/skeleton.css new file mode 100644 index 00000000..467c878c --- /dev/null +++ b/_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/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..aae669d7 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* 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))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + 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(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/_static/styles/furo-extensions.css b/_static/styles/furo-extensions.css new file mode 100644 index 00000000..bc447f22 --- /dev/null +++ b/_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*/ \ No newline at end of file diff --git a/_static/styles/furo-extensions.css.map b/_static/styles/furo-extensions.css.map new file mode 100644 index 00000000..9ba5637f --- /dev/null +++ b/_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":""} \ No newline at end of file diff --git a/_static/styles/furo.css b/_static/styles/furo.css new file mode 100644 index 00000000..b30989da --- /dev/null +++ b/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}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{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!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-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:#646776;--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:#2962ff;--color-brand-content:#2a5adf;--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-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--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--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:#ffffffcc;--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:#2b8cee;--color-brand-content:#368ce2;--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-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:#ffffffcc;--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:#2b8cee;--color-brand-content:#368ce2;--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-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,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-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;-webkit-text-decoration-color:var(--color-link-underline);text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);-webkit-text-decoration-color:var(--color-link-underline--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);-webkit-text-decoration-color:var(--color-link-underline--hover);text-decoration-color:var(--color-link-underline--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{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground)}.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:-webkit-sticky;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);-webkit-text-decoration-color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);-webkit-text-decoration-color:var(--color-link--hover);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:1rem;vertical-align:middle;width:1rem}.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:1rem;width:1rem}.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{color:inherit;height:1rem;width:1rem}.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{fill:currentColor;display:inline-block;height:1rem;width:1rem}.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:-webkit-sticky;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:var(--header-height)}.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}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}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:3.5rem}.sig:not(.sig-inline) span.pre{overflow-wrap:anywhere}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}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.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);overflow-wrap:break-word;padding:.1em .2em}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:-webkit-max-content auto;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>p,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:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.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;-webkit-text-decoration-line:none;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;-webkit-text-decoration-color:var(--color-link-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)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%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 .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*/ \ No newline at end of file diff --git a/_static/styles/furo.css.map b/_static/styles/furo.css.map new file mode 100644 index 00000000..92af4075 --- /dev/null +++ b/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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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/_search.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\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\n display: block\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\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: #646776; // 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: #2962ff;\n --color-brand-content: #2a5adf;\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 --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--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #ffffffcc; // 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: #2b8cee;\n --color-brand-content: #368ce2;\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 // 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-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 &: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)\n text-decoration-color: var(--color-link-underline--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\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\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\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: 1rem\n width: 1rem\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: 1rem\n width: 1rem\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 svg\n color: inherit\n height: 1rem\n width: 1rem\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: 1.25rem\n width: 1.25rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: var(--header-height)\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\np.admonition-title, p.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: 3.5rem\n\n // Break words when they're too long\n span.pre\n overflow-wrap: anywhere\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\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\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 overflow-wrap: break-word\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 > p,\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: 0.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(0.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(0.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","//\n// Search Page Listing\n//\nul.search\n padding-left: 0\n list-style: none\n\n li\n padding: 1rem 0\n border-bottom: 1px solid var(--color-background-border)\n\n//\n// Highlighted by links in search page\n//\n[role=main] .highlighted\n background-color: var(--color-highlighted-background)\n color: var(--color-highlighted-text)\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 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