From 5b6bf3bcbf8df2427b6d3408ba0e1fb63d132223 Mon Sep 17 00:00:00 2001 From: Ravi Suhag Date: Sat, 18 Jun 2022 15:09:36 -0500 Subject: [PATCH] docs: move docs to docusaurus (#172) * docs: revamp docs * docs: move docs to docusaurus * docs: move docs to docusaurus * docs: move docs to docusaurus --- .gitbook.yaml | 4 - .github/workflows/docs.yml | 33 + docs/.gitbook/assets/overview (3).svg | 121 - docs/.gitignore | 20 + docs/README.md | 60 +- docs/SUMMARY.md | 55 - docs/assets/architecture.png | Bin 121991 -> 0 bytes docs/assets/firehose-grafana-dashboard.json | 10762 ---------------- docs/assets/integration.png | Bin 164942 -> 0 bytes docs/assets/telegraf.conf | 1021 -- docs/babel.config.js | 3 + docs/{ => docs}/concepts/architecture.md | 81 +- docs/{ => docs}/concepts/consumer.md | 0 docs/{ => docs}/concepts/decorators.md | 0 docs/{ => docs}/concepts/filters.md | 33 +- docs/{ => docs}/concepts/monitoring.md | 71 +- docs/{ => docs}/concepts/offsets.md | 0 .../README.md => docs/concepts/overview.md} | 0 docs/{ => docs}/concepts/templating.md | 11 +- docs/{ => docs}/contribute/contribution.md | 45 +- docs/{ => docs}/contribute/development.md | 0 docs/docs/guides/create_firehose.md | 138 + docs/{ => docs}/guides/deployment.md | 17 +- docs/docs/guides/jexl-based-filters.md | 184 + .../guides}/json-based-filters.md | 0 docs/{ => docs}/guides/manage.md | 0 docs/docs/introduction.md | 55 + docs/{ => docs}/reference/configuration.md | 0 docs/docs/reference/configurations.md | Bin 0 -> 5501 bytes docs/{ => docs}/reference/core-faqs.md | 41 +- .../faq/index.md => docs/reference/faq.md} | 0 docs/{ => docs}/reference/glossary.md | 11 +- docs/{ => docs}/reference/metrics.md | 0 docs/{ => docs}/roadmap.md | 0 docs/{ => docs}/sink/bigquery.md | 0 .../sinks}/bigquery-sink.md | 0 .../configuration => docs/sinks}/blob-sink.md | 0 .../configuration => docs/sinks}/dlq.md | 0 .../sinks}/elasticsearch-sink.md | 0 .../configuration => docs/sinks}/errors.md | 0 .../configuration => docs/sinks}/filters.md | 0 .../configuration => docs/sinks}/grpc-sink.md | 0 .../configuration => docs/sinks}/http-sink.md | 0 .../sinks}/influxdb-sink.md | 0 .../configuration => docs/sinks}/jdbc-sink.md | 0 .../sinks}/mongo-sink.md | 0 docs/docs/sinks/overview.md | 18 + .../sinks}/prometheus-sink.md | 0 .../sinks}/redis-sink.md | 0 .../configuration => docs/sinks}/retries.md | 0 .../configuration => docs/sinks}/sink-pool.md | 0 docs/docusaurus.config.js | 112 + docs/guides/create_firehose.md | 139 - docs/guides/filters/README.md | 7 - docs/guides/filters/jexl-based-filters.md | 360 - docs/guides/overview.md | 28 - docs/package.json | 42 + docs/reference/configuration/README.md | 22 - docs/reference/configuration/generic-1.md | Bin 1951 -> 0 bytes .../configuration/kafka-consumer-1.md | 86 - .../reference/configuration/stencil-client.md | 66 - docs/sidebars.js | 77 + docs/src/core/Container.js | 35 + docs/src/core/GridBlock.js | 56 + docs/src/css/custom.css | 136 + docs/src/css/icons.css | 40 + docs/src/css/theme.css | 58 + docs/src/pages/help.js | 55 + docs/static/.nojekyll | 0 .../assets/architecture.png | Bin .../assets/integration.png | Bin .../assets/metrics_flow.png | Bin docs/{ => static}/assets/overview.svg | 0 .../screenshot-from-2021-07-12-16-55-42.png | Bin .../screenshot-from-2021-07-12-16-57-00.png | Bin .../screenshot-from-2021-07-12-17-02-29.png | Bin .../screenshot-from-2021-07-12-17-08-00.png | Bin .../screenshot-from-2021-07-12-17-10-36.png | Bin .../screenshot-from-2021-07-12-17-10-54.png | Bin .../screenshot-from-2021-07-12-17-15-22.png | Bin .../screenshot-from-2021-07-12-17-19-02.png | Bin .../screenshot-from-2021-07-12-17-19-59.png | Bin .../screenshot-from-2021-07-12-17-20-08.png | Bin .../screenshot-from-2021-07-12-17-20-35.png | Bin .../screenshot-from-2021-07-12-17-22-00.png | Bin .../screenshot-from-2021-07-12-17-51-43.png | Bin .../screenshot-from-2021-07-12-17-55-11.png | Bin .../screenshot-from-2021-07-12-17-55-26.png | Bin docs/static/firehose.png | Bin 0 -> 23001 bytes docs/static/overview.svg | 129 + docs/yarn.lock | 7691 +++++++++++ 91 files changed, 9054 insertions(+), 12869 deletions(-) delete mode 100644 .gitbook.yaml create mode 100644 .github/workflows/docs.yml delete mode 100644 docs/.gitbook/assets/overview (3).svg create mode 100644 docs/.gitignore delete mode 100644 docs/SUMMARY.md delete mode 100644 docs/assets/architecture.png delete mode 100644 docs/assets/firehose-grafana-dashboard.json delete mode 100644 docs/assets/integration.png delete mode 100644 docs/assets/telegraf.conf create mode 100644 docs/babel.config.js rename docs/{ => docs}/concepts/architecture.md (60%) rename docs/{ => docs}/concepts/consumer.md (100%) rename docs/{ => docs}/concepts/decorators.md (100%) rename docs/{ => docs}/concepts/filters.md (78%) rename docs/{ => docs}/concepts/monitoring.md (71%) rename docs/{ => docs}/concepts/offsets.md (100%) rename docs/{concepts/README.md => docs/concepts/overview.md} (100%) rename docs/{ => docs}/concepts/templating.md (55%) rename docs/{ => docs}/contribute/contribution.md (69%) rename docs/{ => docs}/contribute/development.md (100%) create mode 100644 docs/docs/guides/create_firehose.md rename docs/{ => docs}/guides/deployment.md (91%) create mode 100644 docs/docs/guides/jexl-based-filters.md rename docs/{guides/filters => docs/guides}/json-based-filters.md (100%) rename docs/{ => docs}/guides/manage.md (100%) create mode 100644 docs/docs/introduction.md rename docs/{ => docs}/reference/configuration.md (100%) create mode 100644 docs/docs/reference/configurations.md rename docs/{ => docs}/reference/core-faqs.md (91%) rename docs/{reference/faq/index.md => docs/reference/faq.md} (100%) rename docs/{ => docs}/reference/glossary.md (91%) rename docs/{ => docs}/reference/metrics.md (100%) rename docs/{ => docs}/roadmap.md (100%) rename docs/{ => docs}/sink/bigquery.md (100%) rename docs/{reference/configuration => docs/sinks}/bigquery-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/blob-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/dlq.md (100%) rename docs/{reference/configuration => docs/sinks}/elasticsearch-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/errors.md (100%) rename docs/{reference/configuration => docs/sinks}/filters.md (100%) rename docs/{reference/configuration => docs/sinks}/grpc-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/http-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/influxdb-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/jdbc-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/mongo-sink.md (100%) create mode 100644 docs/docs/sinks/overview.md rename docs/{reference/configuration => docs/sinks}/prometheus-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/redis-sink.md (100%) rename docs/{reference/configuration => docs/sinks}/retries.md (100%) rename docs/{reference/configuration => docs/sinks}/sink-pool.md (100%) create mode 100644 docs/docusaurus.config.js delete mode 100644 docs/guides/create_firehose.md delete mode 100644 docs/guides/filters/README.md delete mode 100644 docs/guides/filters/jexl-based-filters.md delete mode 100644 docs/guides/overview.md create mode 100644 docs/package.json delete mode 100644 docs/reference/configuration/README.md delete mode 100644 docs/reference/configuration/generic-1.md delete mode 100644 docs/reference/configuration/kafka-consumer-1.md delete mode 100644 docs/reference/configuration/stencil-client.md create mode 100644 docs/sidebars.js create mode 100644 docs/src/core/Container.js create mode 100644 docs/src/core/GridBlock.js create mode 100644 docs/src/css/custom.css create mode 100644 docs/src/css/icons.css create mode 100644 docs/src/css/theme.css create mode 100644 docs/src/pages/help.js create mode 100644 docs/static/.nojekyll rename docs/{.gitbook => static}/assets/architecture.png (100%) rename docs/{.gitbook => static}/assets/integration.png (100%) rename docs/{.gitbook => static}/assets/metrics_flow.png (100%) rename docs/{ => static}/assets/overview.svg (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-16-55-42.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-16-57-00.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-02-29.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-08-00.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-10-36.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-10-54.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-15-22.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-19-02.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-19-59.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-20-08.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-20-35.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-22-00.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-51-43.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-55-11.png (100%) rename docs/{.gitbook => static}/assets/screenshot-from-2021-07-12-17-55-26.png (100%) create mode 100644 docs/static/firehose.png create mode 100644 docs/static/overview.svg create mode 100644 docs/yarn.lock diff --git a/.gitbook.yaml b/.gitbook.yaml deleted file mode 100644 index 0efd41842..000000000 --- a/.gitbook.yaml +++ /dev/null @@ -1,4 +0,0 @@ -root: ./docs/ - -​structure: - readme: README.md \ No newline at end of file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..dca89862e --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,33 @@ +name: docs + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + documentation: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + - name: Installation + uses: bahmutov/npm-install@v1 + with: + install-command: yarn + working-directory: docs + - name: Build docs + working-directory: docs + run: cd docs && yarn build + - name: Deploy docs + env: + GIT_USER: ravisuhag + GIT_PASS: ${{ secrets.DOCU_RS_TOKEN }} + DEPLOYMENT_BRANCH: gh-pages + CURRENT_BRANCH: master + working-directory: docs + run: | + git config --global user.email "suhag.ravi@gmail.com" + git config --global user.name "ravisuhag" + yarn deploy diff --git a/docs/.gitbook/assets/overview (3).svg b/docs/.gitbook/assets/overview (3).svg deleted file mode 100644 index ec3499d5e..000000000 --- a/docs/.gitbook/assets/overview (3).svg +++ /dev/null @@ -1,121 +0,0 @@ - - - Firehose - Overview - - - - - - Firehose - - - - - - - - - - - - - - - - - - - - - - - - - - Log Sink - - - - - - - - - - - - - - - - - - - - - - - - - - Http Sink - - - - - - - - - Postgres db - - - - - - - - - Influx db - - - - - - - - - Redis Sink - - - - - - - - - Elastic Search - - - - - - - - - - - - - - - - - Kafka Cluster - - - - - - - \ No newline at end of file diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000..e6e9ac43d --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index a840c252d..55d0c3ef4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,51 +1,33 @@ -# Introduction +# Website -Firehose is a cloud-native service for delivering real-time streaming data to destinations such as service endpoints \(HTTP or GRPC\) & managed databases \(MongoDB, Prometheus, Postgres, InfluxDB, Redis, & ElasticSearch\). With Firehose, you don't need to write applications or manage resources. It automatically scales to match the throughput of your data and requires no ongoing administration. If your data is present in Kafka, Firehose delivers it to the destination\(SINK\) that you specified. +This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. -![](.gitbook/assets/overview%20%283%29.svg) +### Installation -## Key Features +``` +$ yarn +``` -Discover why users choose Firehose as their main Kafka Consumer +### Local Development -* **Sinks** Firehose supports sinking stream data to log console, HTTP, GRPC, PostgresDB\(JDBC\), InfluxDB, Elastic Search, Redis, Prometheus and MongoDB. -* **Scale** Firehose scales in an instant, both vertically and horizontally, for high-performance streaming sink and zero data drops. -* **Extensibility** Add your own sink to Firehose with a clearly defined interface or choose from already provided ones. -* **Runtime** Firehose can run inside containers or VMs in a fully managed runtime environment like Kubernetes. -* **Metrics** Always know what’s going on with your deployment with built-in monitoring of throughput, response times, errors, and more. +``` +$ yarn start +``` -## Supported Sinks: +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. -Following sinks are supported in the Firehose +### Build -* [Log](https://en.wikipedia.org/wiki/Log_file) - Standard Output -* [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) - HTTP services -* [JDBC](https://en.wikipedia.org/wiki/Java_Database_Connectivity) - Postgres DB -* [InfluxDB](https://en.wikipedia.org/wiki/InfluxDB) - A time-series database -* [Redis](https://en.wikipedia.org/wiki/Redis) - An in-memory Key value store -* [ElasticSearch](https://en.wikipedia.org/wiki/Elasticsearch) - A search database -* [GRPC](https://en.wikipedia.org/wiki/GRPC) - GRPC based services -* [Prometheus](https://en.wikipedia.org/wiki/Prometheus_%28software) - A time-series database -* [MongoDB](https://en.wikipedia.org/wiki/MongoDB) - A NoSQL database -* [Bigquery](https://cloud.google.com/bigquery) - A data warehouse provided by Google Cloud -* [Blob Storage](https://gocloud.dev/howto/blob/) - A data storage architecture for large stores of unstructured data like google cloud storage, amazon s3, apache hadoop distributed filesystem +``` +$ yarn build +``` -## How is Firehose different from Kafka-Connect? +This command generates static content into the `build` directory and can be served using any static contents hosting service. -* **Ease of use:** Firehose is easier to install, and using different sinks only requires changing a few configurations. When used in distributed mode across multiple nodes, it requires connectors to be installed across all the workers within your Kafka-Connect cluster. -* **Filtering:** Value-based filtering is much easier to implement as compared to Kafka-Connect. Requires no additional plugins/schema-registry to be installed. -* **Extensible:** Provides a comprehensible abstract sink contract making it easier to add a new sink in Firehose. Firehose also comes with an inbuilt serialization/deserialization and doesn't require any converters and serializers when implementing a new sink. -* **Easy monitoring:** Firehose provides a detailed health dashboard \(Grafana\) for effortless monitoring. -* **Connectors:** Some of the Kafka connect available connectors usually have limitations. Its usually rare to find all the required features in a single connector and so is to find documentation for the same -* **Fully open-source:** Firehose is completely open-source while separation of commercial and open-source features is not very structured in Kafka Connect and for monitoring and advanced features, confluent control center requires an enterprise subscription +### Deployment -## How can I get started? - -Explore the following resources to get started with Firehose: - -* [Guides](guides/overview.md) provide guidance on creating Firehose with different sinks. -* [Concepts](concepts/README.md) describe all important Firehose concepts. -* [FAQs](reference/faq/index.md) lists down some common frequently asked questions about Firehose and related components. -* [Reference](reference/configuration/) contains details about configurations, metrics, FAQs, and other aspects of Firehose. -* [Contributing](contribute/contribution.md) contains resources for anyone who wants to contribute to Firehose. +``` +$ GIT_USER= USE_SSH=true yarn deploy +``` +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md deleted file mode 100644 index bcbe4a2dd..000000000 --- a/docs/SUMMARY.md +++ /dev/null @@ -1,55 +0,0 @@ -# Table of contents - -* [Introduction](README.md) -* [Roadmap](roadmap.md) -* [Changelog](https://github.com/odpf/Firehose/blob/main/CHANGELOG.md) - -## Guides - -* [Overview](guides/overview.md) -* [Creating Firehose](guides/create_firehose.md) -* [Using Filters](guides/filters/README.md) - * [JSON-based Filters](guides/filters/json-based-filters.md) - * [JEXL-based Filters](guides/filters/jexl-based-filters.md) -* [Deployment](guides/deployment.md) -* [Troubleshooting](guides/manage.md) - -## Concepts - -* [Overview](concepts/README.md) -* [Architecture](concepts/architecture.md) -* [Filters](concepts/filters.md) -* [Monitoring](concepts/monitoring.md) -* [Templating](concepts/templating.md) - - -## Sink -* [Bigquery](sink/bigquery.md) - -## Reference - -* [Configuration](reference/configuration/README.md) - * [Generic](reference/configuration/generic-1.md) - * [Kafka Consumer](reference/configuration/kafka-consumer-1.md) - * [Filters](reference/configuration/filters.md) - * [Stencil Client](reference/configuration/stencil-client.md) - * [Retries](reference/configuration/retries.md) - * [ElasticSearch Sink](reference/configuration/elasticsearch-sink.md) - * [GRPC Sink](reference/configuration/grpc-sink.md) - * [HTTP Sink](reference/configuration/http-sink.md) - * [MongoDB Sink](reference/configuration/mongo-sink.md) - * [InfluxDB Sink](reference/configuration/influxdb-sink.md) - * [JDBC Sink](reference/configuration/jdbc-sink.md) - * [Prometheus Sink](reference/configuration/prometheus-sink.md) - * [Redis Sink](reference/configuration/redis-sink.md) - * [Blob Sink](reference/configuration/blob-sink.md) - * [Bigquery Sink](reference/configuration/bigquery-sink.md) -* [Metrics](reference/metrics.md) -* [FAQs](reference/core-faqs.md) -* [Glossary](reference/glossary.md) - -## Contribute - -* [Contribution Process](contribute/contribution.md) -* [Development Guide](contribute/development.md) - diff --git a/docs/assets/architecture.png b/docs/assets/architecture.png deleted file mode 100644 index 9ae9fafa576416b0d7feac6269985d2bc01a420b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121991 zcmeFZ=UY?h`u;75*g<8K4k`kpGy&;N2L+|7D7{H<0qG}yGFVvkMSKlaNxkn zJGXD%KX8Ek+JOTH=Z>%g{{tT8esti#`2%-u-gpqgvNV2l=;6Z}7de+N#L`5XP{oLK2lz)zdDZCsCR1pLtl|uCK!>mV`Sg;y0N1 zT21_9sIc%c)C6DAD;fNi|@bd$&(kJ|McOfK4P9c(V0oR zedy@FF8E(Ru$&zHhrj&P`MY2i7DT&J+_5wNpWFKDDy)1Z|NFLq*R$4GS@{xtE}p&g zPdCSQ&HCU!-PZM)Lu}Ws5N}?&{ZBV{#I2hBpPp)X`|%@g59%Wyy#A+~JJtR8|0>7!v(C>d{b!Z_U)$nmmHuDl*nTncvr7M2rT^Eq_*td@ ztkVBgWBt_9|4B>F(qIK%s<<`b$vu8XTL&|gXb95&*K_;h2UERprZR-496~oVZTI)T z5A3UtPXS-#tmO^CBSlYGOro|KEBu z%cuXhq18|z^<#?^+w%0#afgN{EIrw}u@Cthhs{i{b0XRm5wA}FdsqE?KTg<*JRW)! z(WFUV;==CE$S@TS2mHbcI(4es?O>|mf3`mVuJFR)#ZR6zV+Tfi{_!1(M_S+YuveUQ zf0H8b+Wcd(ku>azltRUc=r*UT_?vz(F<j(U~zC_lCbgUZ^(dP*HzatN^} z|JPMRJi~{}U0ddQva@}N^`!%ro^_k-r)Pwm$z2&qZZ;C9KOQ~e)_2LYj0Rk!nTBQV zZS|wV&aRX3c5PkW^G4za1?+aGxJl9SU9Y>{=I4qG|1*5-f2MsYYcLTOTtiXx8u}D} zSKVxB5M>v-jkAk+W2EXHw=DN#wGsuBDygH6w9=Edudm%WEclB!GSsgoc<`NeMD@-> zA@^|C304KbP)+@&x2EYsz$h;kl}|y5blYjIQ-#H7%g9$Q0Tsqb&6xz|)uIkjXqG{` zvaFav@?G2BT*D}zP!j)YIdZRPC_Q8rY8`#HM#nY%lNHDA*vn%b4tNU*Gh^RraHY% z;7g=69XsMCnds7Fbv0~vOL;cgaf$$?NGUBHKFRlh5!Y(pTwtve&2xIt+TU=Vniw}3 zeZcPVmqYLLM+-t9DhK}+NE-^oudcPVkh&I`wnmu25!h5~Y^X!Zg|Wa!Er)NPS{&X; zRYlejVSRF=J`aO7Mm$kX!c1C3jw-#LJT&Ask%+7GfY(m!CT~qu^I%$P9R~L}ElOI- z)^8mW!(3G?p|3yh$tGL+cC;Za0}lD`uT_@1!LA*1(@wO*$3XaR79iOd*vz-sl|Bc| zpYbPmA(-1pW@I^DQ;o5ar`1&2B4o8$OcLqIL5^R)L@Nwh%WH1887G!l7DBFySb6svDj|A})T9VZ22D55 zC}Zloz6^p^M}ZaY-nH(>7WDtijkdQqHWt=-c6F{U`0XIbj45TC`Qy9X=w9+^{M$WE zjg5ECX#ADsxy?bl!qK{GE*pNRkvUi7tBQ`S7i9sg{w|%-{7lH5u^&lMj%!=oN!}!- zfw1Y7Q9Y7-GvQ{5rZu!JGVm#2q( zcUN0FhNawaqpj8|Vb0K?bX z#6=?7@$ocStHfCNE=kID+aT*9i?&f^dznM$?rJPtKxsU{Bw%qsN^>>R_@>wwQ%i1h zfa1{q?frfnh>M$EIuktiE&^R&RwIFE;LA{JI?OpDq8ezv17FL}9)(BSq;keTq!>Ng9oYIH!1j*sXTNX8kRD;}vJxh9WEGVy-)sz9H_YRN5VBfbV#Urx!G@EPib78sWV6n`1f5J94Vv9yA-^rUWEAuhWT7vY$tAZMOr2=W(n%b6%Bun&D4JQ{doR!@ERoQl=C9

b$K!9h2tR*ok%vwBv29-lV`I`I$j?Ix;kB>y79ff)2EU zoKcNhkM9R8e9zH@`*NA>u5kMjr3RClYFC0E3(!mPZ~0e=8q3o>%5IPEd=8!8)`}!& z@|t4XGTV}gd*NJ;ReRjah8oUm->RoE<&M*DVsEh@^vH3gXgU+01rh2LCBoM1kcgwC zW*sa`TC+P*wNO(_JdD~Y(`Qrf*M-t&of|o(O{pyx5E16vUZ~-|NiMPRjIxB`)3)Jz z%V1gWzLyZ=OI1c$n{DpfnpLBjwHGvi4E8;7DnN3A^VSU)$O+C0)>% zQ}9fc4eXZFbus-~>ayb-sl!dWTC{|@kz)6^Ps{6nq$I09dPImm9=4Iu%I{udv?F;3 zycAxG^B7$zYl$!N76h_fQ5h>gsN$ab-bSyixAo$7rclU4xWk+594A`@V~?JM-+mnA zIRj)EPY@c+cJ6eyw&Usev!2bjxNRO>!QeINMdoMW5uT$ZHnl^ZsNB`NGWARH$>VnMFul>5gwb!?hxduTiIsuL^Vd-=PK8YaBt9+X*nG !p}HO-lHY8Z(s9PTbO_3oTeVD9+r6G+%%b(zD->H zx^CF$cg_1vCU@q#)+$Yl@tIBD&!UT;Huf_90DYGdsv>tgzRsObpPITgtc2yM+TB}& zTy@+GTD}N<7|la9-`$BIM%VgaKKs7;PQS3YIh9PFV%F0WzN?8ZCOK0(QsT6e_hvhM znret!u{?}#-9SQ5BEL4oGQKD|+>hEl3-T?f#0!U|lK0Ypmtx=4sb|7=;b$7AyDdCFw=OG{s_dr!l{5&yt$l8A;^PiYr+WI)#!F%^d=TD?ovakhb}Jo0afF zY&2*Tr0@5G-v?8=%hN6%{Pv-){n$6Nsg;(rGbVMz7Fao$3v4w8_sMsz@=^ z(p;3lbVlw@zSYtrww3L86yB;T$#5J<2g_m;CfO1{crTAuN*JvZF7a%*(DR=*ruF0H z{;1zRT|7E{lG>3F=ZyQJcB@LrGjaY46eHnXzfdN3v)d$=BeFPnta8|0!;c2K#}CQd zc&|KfQtHh_T=dzp-7PO~@7;+V^VeO1&E1o=$AMBoX~Ju2oikX5#Tc}=(s`Hzy38%C zx_NxYeY-iq(|D8;Hc?9&Z-G~AIJNFDW|XvK=+%3v5)Sn7G$De=2)Rbqvw5SHa7b8l zIjXd?tF~#Ouu4MvSDTP7PF&}%Rmo?`wfUVTaJ=yhxpQZ!O?DyWQRxg-Euk?MvJ)wX zGEJIn6pAWxES^TJN&0L)fDNHRc6Yo&Gvo1L-Mi<^D z4B5X47tM+rc+(=YlycV;LW=cdZqUzowNcCu3&28$OC0mMa%?SPPpE$gW``>deE?^o zmr~vg=)yPNl;Y|Sx11 z)vfF}XP}kq?(MB5-bh^vUuVGSUS8$WJp@4qsqB4wM*D@nWb?f)Z!+C#XUpJ8LxIRu_wOJ4@V>sT z>DmNj!1p_GH(u6K>eYb$g4on1uC!Tz12MK*v~-GFn%wg;OoQHpBQV@a>)0R9WxmZM z+1b88w%?pg5#Ac{OskidTuGkg`l}UdphXBlKK7};nXTrHZ~yMo6!{B zTP1ZlQw!I*zeNxGziP^E)NR4_o@0;j7@eV)1-Ol&-2d#A&QG;P2z?}547no@E?gQm z5jn_b@nX!^r2L5v;W2jB82&46O>8aFHMEAH|Bjxjf%|0S8pbf0Y4#!9_U7$wrJM#I z#42_?5TZRpZpSt;T-v@(Q#2XhAmdc!xgR{#?!B1=4K@$ah!)7|b}pX6oSrWo_cqih z@dtC%Zp@=#GGSZW#tE4`gL~Uwx2l*s-d^ZVYMi!{Gb(-ward|z5Jy8mRWlmUmwoLL zZ^ZhZ9rQWdUA;4PyuDs6c%Bcry+g~^MG>5pw!`M=n$}OxsbB_8V%5zdy3>YhOJ_}v zYYITu@*MHch$dn`fa0|+GIoXSifIPJp`(IR8%)N%P-b+j?(A82 z$@v5gk+LOvCTZ#iXXXPt%<8OFQ$BI`5%2~RJ=6=jPu-)qCpsmetx)5a!Gd94!zDPr zaR-WatRxE}J?=&}X9l%t4JNH6yu;vZ(O_c4X1h{sSf!k^U%Ew^fJQ^{Bt{EoSFv3L zY>;@K5ZvzWe7n?|@jbZ*IKazy7fau)s|Bsxf6?kOHkf9p6$I~nZ1OBW9B3%f_1VOe&~1dF-gGi?|$?owIUYSm=y!m*G`utVN-G7?_j zS07BtmFblDk&khFh#E%l_F}B4YNi(smsDJ5mqd@b?d^E}aN+M?9L;m3?d)2+(m;w) zv?Uc~svzd!hHbgko!gl#QI>6&W?Cp%D}m}>#Zq@{;QJQ-J2AreOku3*~Gc3Rk1jw=jG~*37GSd zT)ut@u9l?9__cL(?TQ69(%LF>R50vo+l)@=>}NMgFlo=2NqYlS07)>;S6mDtnVY|( zRp=PKDqj9QvDvWE+=(;X^2|cV; zqzyu$0wEo%QrtAG@Ug%WIuIoI*tHX?S# z378&c_`zTl&B+avF@iY}(*a+ute#{%*J|*@@e#{io2T@IWDbhR7(jA1l0Oy)cXy3e z@Hu^y@(CqENMWMNJwuI`lE|8h)~;<&3l6VT1R7+hNa$d%9d#xh@>MMAA7alePk%rng@;0?VtdyG?&GshrGZ=NPHKl<5tQ9wA?T zBi_HR5FN5sDi{3#WU;Jqkhe1aMx|T^N4-PSmH6$<@Knp1HBM}ip&}Hu3>}e>Nt(E4IjHB3JQqpiA1zFb%0Y+K z502DQ--4_%_-Hkz#OE6CJlEytdIJ&O&O;TJ-G%5PDT=Y??sZ;Ouey_mZ;C0J{h^^8 zix$#=^)Z6-*ycO7f+gSAX+@ z%oMD&7EpQr>bHqbzziW6sB|NifXOvC4l2I9V2pUx*6VVuWMpB(6ICa) z{n~mt!U>equ@~29HNF?pYu*C<8R#_0(9b1k+j@Ko&4bsna7J@raa>;Rlk8GWu5j~s zZICpQzp4|%@1Cflyt6sqzohODuYpNrm8uK!Ejpzh2sfBe&A#-iQ+7PBe$5XYUm27g z$r*m-Sit;J>n88s(i>SgV>ez)U@=X8&xCkz_xLTEothE z=Q~B*I0T$RJc^id*HK|w;=HqXxsg5((jB|K?o<|HoBEwqkJjH6P)CC7+fJ5ER1UVEGU>c>`ZP^l zQ(Y*eV7?_Zk7JqiO`9g&=-xjtI)@+#q?kB?mHT2y83)3DJ!;}F`D0(K65U>YddU1p z(Q8)TQ+V;*s$usko(h~$obiN&zSv!U?<>&Dk}LTPGcm(xpr-)TY>_-@@p#^)*%HA= zl}azNi(t0#w2sKQJB4^U6`m+gVD3iwPi^=xL*ghx&UPmo&(`(VudA1pq#z&pIxl@Z z?R<|a_wkUXoLd}fX;OBot;Lan0Xt`OpyHg@L5Gu`=*;%;Xi>N07cY{1DjU0;x2G6$ zW6p@3_X3t4X&Kxc^AGL1uioRIDl|zdnGvwfP|ADczTTG7o2!r(SEslzvpKl<2Em2U z@bp+$3kEI7rnBS%IS@W=B2#&*xV}nYp`dazN%1_vG_Uzs{jExVGf-~;^*&^$=YsR7 z!LO)&7pb9)yY;k-TyorhF6%@}lqpf>w=4lFcVzZhY>B@c7&FRx6{n@tGo6`tqLg6~er%H>* zf-Je6`2|r44T>e441c|1Q+soEBxHUjU(`&Or0EBtcPdIMNyxq1{&u;Sgx1ZB4umSf zcOGx{n?}`ZKqa{&5;s>|`K}C`&x4kp#Z57; z*ej_j>t?9g{`{VydyR`nD`=`) zFGKJVngbp)z~p z*Mq?`p{_;|W6XVhUkz1zWnWX>fq+t4vu<+4zP%CAl+c4$w>Y=CFrJrbcfr+5Atb4q z^jSjR;Rgns;amZ0c;wXTmx^u%mOru0OQtliVu$>EK2TLTe*(;8-7V2A%~*+WudqY z3-~kBQMrQ}Dv}S_1nRW^KiXo14wQFV=t$umyv?{ek7V1Cm~tQK7(m_*_1O4&fzz)xDX%m7L`>gP9u=8` zM=i=Ywr{;FoxXa1zx3MG%@nkOL|^N|WeV|jC(C7Djx{Eg8F<&zg3^-A*zedTtBdN? zUwyZ+00gD^*&8KTi~!%FLux~T*lXhs!d6lgDG_TY1Uxzfb$PUf9;2lhqcWSUy!5H@ zy(@n9OVh*7mhF;iR{z)DriL%Q$+ycPq)_Kk8Fi`nt&?RKpsuob0R9}F+oDr>pT zVUvItIsW`VOPIq{_RtR*c(y<;>+Ah8#t&$^%*)AeV7fWiVm<$SY>dRr_=*uR# zZzD>AM%?qxv<|_Udr4t=X!9AiRL;Ko_KbQivFr8^&$d3wTH)E*NUP5j9KBZWYlUbw z3I)d*LIXW{q$dzLDfo*K$sVCnWshzKEOfuC9CjvDSaco~+;&v*e{?O;@|0uo%JGQI z0x3J|u$U9k6_RzIl`l?p57&NA;8MwhxI*3jiggQ&gL^PAq z#6Dd)+L59m5#~P&Z`n+;dvK;tD0s{_M}md~{6yu+-?`Z2O>?3iiK-8FWvC@(jct>W z!u!$&K8#wv?`5}!9w3M9t#7j7BqsB#w%?xXK-zICPxsC)QhhYww}j3|$Q6tW;4?Y* zjg&5%!I!~xJ!u!8aSzMqDt6qZO73^vdgFfPc?Q*W)$vDjJTQZd=Ceecd z^cT6B0t5S2sx0{HS8L&vKKfH(rSWJx*k(Ve!BMl@D>w~Q2ZD`Szpm5ZgW7vhbslG< z?@{N>aj*c2a5dy#Xco8+0)|HmXZQ9`In% z=sVM&%y@U*Ey^qwMGD-jM&+8?M@}}=)8V0VTV~Al z&G?PlU<$!^J}0Re@c%1brPuXZ_p|M6%yW^`{f*LrVCY=^^ikuBCS&YQ&DIciy-=E$ zirYhy`O@}m=kU_mxS39fYhTdSkl5f`nsvyTFKXVePAU#dawzX?@j#e1qLiBib?ov2 zRtHaj;XWBuUPvSOe{Iq0LX3o2LWzM`?TgT;X~fKlnCT5^I(nJ-(SQTqT`K-fA&F7a zM~YxFd^UxS$i#q4Hssn=m*9PLy@vOtn#2AMy~S0r;=spZm4R}xIvh0#Ir}|jgK*zRUf+vF2ym^FWj=f3K(3t@%1$OYXZ>}shlKX6z{Rp3chJqS znY(6E`i?)GzDo2?z2{$v>7=8~&b)N>ju~JTtAu&U+dt!3+wd>u$k;>$ee7>j3qNad zo{Pi)?1%*WW`Kj?GP4CcdwrhIl~}u+uNE$PX5VxtWkOdXIbn0!zMK7KEr(oTYF%3d zWA2*Bx|?cNN6jExE2HfeGqf#0Jf=zEufDMue38rtA!hh?+(BN^Py(ze@;6a3QZQEQ zv2jPHio6S6;32iYSQoFnRVV(95Funiq)o*~xC#o_1 z&275gZ!SmO+tEVGw2*VV&x_$v*o1}6)B?MPd8&%BCnI`9b}c_Qowvr8a9(RlTUaJ? znZHVHZirI{upgT3WR$UNmps5XQlARjMMqHTHH7MDF|AK-7CU9lM7d@No7wr@Q1`&^Z%b(S zI)S$kMR*G>4q9raHLEIgp$x0g>ZoTqf$gBgiVAfXYWFt%7B+IJ=1raJ8f|f^-6U4i z{2Zu!T}VIFM%vqMmg`TqA7^J@Ip_(CNMe=>JmNhr*~yJT3#qn@61;1d9bz@8FK;|! zzeTKvr5(Da6DuUB{o=%BtzUH!e3f4hDWb>xaPcpHZE@0EYkjWOIb$-mrQkfQdBz0^Z2=MTfX?DT@jTB52;SAzt8a=*)dB*D_7=(sR%fV#Zmfd^zXc9 zptknL5+NflGpDOPx28i@W`XKswr?M#oaXzS_LAsoVG=|Z23k||Wp9tOWm@PhK`=EqM_gwg! zvm22pieFL$Te&P(ZKi*$zB>JK%K9a)c=BR~B*@o8AGU8k z>?sa-mP!So|Ky7vo&&zW!*3DuERg@I{q@j|Y+B?ufEmy@l1N#hY8+a+%4qbcOD8@4s^P*O1!!rQ^>$$ZSEJ)=|rYx zS;ULqfI4@MPzSa4Z91D{=F8DjPJzZ0i`&^gG)$+pi@(OUxELY%@EYq*VCN_Kc*tIR zqzeZ^;IjwNAmGT$!9E0e@J#Pxoj*~*h62g+S*2I17!F+;5ecd*)ubsA;qBXAz}?S8 zE}d|>hOisG7UbofYJ9Z+sX&HWa0~!67KUc3272t5S+YKaGF}Q?w*OjM!?DY+>v;TH zb7&N-XSpl{N}D^k?NL1a*d$nkYTy|)qE0D|a}u4%tMj1N-``|(Wpo0fF_c?MA_>{BR*6N-&+BOFHbw~h{@(w*l} z`viwMoMfm6vgOez%j5~gio`^HfiA6c419n0_h1&zEDM}lJ_D76+Oe>WRQU+ku6*_c z#D}XQ2hZ_Vw~9ZNJG#~VPMg%s?<2_))seEgP>33U`b?t%D-4 zT{fTrQCWdGJYvNu72ae&U4r#-!)&beDOrK?lV*sE@Ugwy7&+MN8BkjI%R&lR*`>Zm zO+=|Zls8sg4HAjQC#)q8j?vvJb6-Hc^cd45%DYq@|mx{<=AOt@8N=*#x zc!ZQY9m1i|UzT@^#3KLW^=2!EUkWG1sm1#yuk&RcdR$$O)-t6hb_q`qlzM}d(T`{n z91UfaNNae*sdXx)BM|V=qHKbOot@P*$l6(*tSOXbF67qD^uPfN*$qam!<*t%&f=k2 z!O_>(pR)xG`4jhv(y1KTY|>05NxyT)NA)UX!@BUd$_Hov##h$>_R%~HEis*`L{b_+fbdkyS}N;x1Y&xL@fa{iS0C0Gdx2>4L#~z zduBIT*>~#LeAah~r0ay2%r+znIx4=IR_J53q$!sYP|~<4vU$Wa zNTN~88THZNfTsIGw7E4QIwBJ+y|!sO^PZm)R`^iw{Pbt~i)KUZ%wM%_i|bry$x84W zZIiP3eU1<(N_11gt{RfOH}q1rGzh;Us@$7n(js@$W&plZG`!lrVc|2v^`V#}s_@M= zn`uxupn;kh_1ra)fa(vU|FBLs-(q7uY_{lIdtnQ?eG^*Xq^j}{l zg)_f?-I4cMNoy@mra5H{`s}3QN2Cs+D0Hc`Wh&LPBvQbkptK`ZL1LwboH^uCSnSZ9 zb)yGmhlR)>46YD>W(lCle~~xL3Jf>rLCWXC`G{t#1I2n#qm`cADgh6wybU8G0-v%hiru672{U}i8Dd_ z{3t*)4!D5D|M~;M8!F7$t|hW$+Z0W+s{HPeI6_Q1yBScfI{=6qzlglhIQK>z!*hHV z9}6^Rx~NKebHj~ij{DKHauB3Ccy?33>;ptAfGo8--N^ZE=$?qfRFosmCnqLDwP|FL zx}V-dwc%R-}h5blsxI(o1DP>ELOAnRCDZi1X$n$+Dzd zVq5!&iXgzeOW-^o&H>RIQ1Cc>TQ5X>1N;pWi0|}Hxhr0}tZ`l;+V&=_T>JM1&GRFl9kwh_tK+DMoDJ(&A?4B^X3VfaL5^%h3> z79klV$=jE_@%{KrAjNR78EUj;zTaN+naS2gA1YI7cE+kI$z}DFb)=~&?dKxQi?J|& z0cO6uL!n@hd(DU(Q{8{3F9b5D?TkfXsg^fuox@(9g+#2Av3#)vsIE%HK4|5~g6P3( zo^{mGg>5 zgSkG7(ZHm{sVZU^^yqyjeDso3oE^LT+~fAkdEe^kEBvIESeY*|0BXBdXJMLxNR*MVNQ4N{)Nz+O0zI)QP#`bXuR07Q#1n9#~M77AS$Cn?b;`r>tXan zGj>5fB&1E;Zp}YYR|x#Uiw@j#0$z&QI-$#cOLKRU6Ifx6hY4WSvcAl$Hqr^6tLND{ zg{&d3_L%^n;xwyBZOoow{2i$FZR3l_qeB-W@9zN~IV8?rXBmSA?6RSd^(l#XJOov4Th#BGu|wM%pw?C_k~MSd$ zFIOqbz{Q=6-nNnKqB#WBnpOF|cm&k~OQdY4VeW%=PKQs&X*jRcuP&6ibyh-J0LegY zUqBx)MI4M((FBO$*%0toec6?oI8m+NkefSFW!@b3HmBCJFV+n#V|}N?l0JMeVX!aO zyYxQx&@VIOFjid6@$Jc3fDtxmDpCXvsh~}Vb}2cSU_Y@t9;2B!TUo{ z9)$w{BB8@BZ=|+d0YJfZdiaX!b zTRr4U-h}%Ef@jIqTV$2FU&J;}!x%vp~{QKW(;Ve20ephJe?8u*gitOk(Nb5lxfA z%IQgI zcrH8j#a-3j?*g^x9-u7IQ=2B{0J2edHG6@x-rA zj8}Gh3udBE9&hyMCWZ12*IvYi4up+4ofpZIZ++cpuwUHz0^zx3%ForSyi?J4DpEW# zlQ%^M0Ft$IVJvLPQS`z#Fe1WT?$T)qUd`bByGUucBK3*U zoR&yn0gG(Bz{$MYiwU(WRC>2A2CBDA#DG&#!{sh$>j#=-+KRO%3DIx|lye$@XNj4c zMCa_paAutc@ZE56Ui&RLZctTvCZ2ol)3am4TISocjnW zuci%>HvKZD*G5q_a+#r9j9aE4U|UdHh#7n1t>0*s-}Cj8&I~0p7YcpJfo4t7`KWII zjG2R0PNZVic!sSm=~G{|#j|9bn07uTEvU#>?VMsqCnenB!UZOeDzdL6Qip1=n8bBU zBp_LVXmRjZxxx02OX2<3s&Bwjj{ezk*v|t@MPip{f`uA=D+9c{@V8BHiz%#{&>pk z3)*@O7YA`;g5dO}3-NZpmOEXYZWW1*28@V=O)Iq*;6Js2{qSKL5Dw_2YC^Tl5kWD+s3B}PCmuKi$L$tsHh`uClGH31j_W65+Blt1F8VX4(P{*rkkPrjd| z#h|3bDW#PMx8&9D)aBS}#RAH1n4R|}@4w8XLS;pNGVN7@MDqr_5-C0=Hdp-BnKa7XVmWQj#I?%$a7AI6X>05SbaD$nQ>3qa_b6yA>39m@Jj_Iu(JLtu6J(K&{~HFPw<8%|_>$#K<3FK*dxm>dtX2?>6PM+ON9rS0H zm$Od_FA$^=v`nM=rwC~%i9ye0rIj<2R*`>|zc=kSZ_Os(m^c}}`##}lgAX9#>`yHU zsZ5)2=ssLb0a)$zE;X4jCY_kXMu-C3^%ceOfL^)K2S`m=J9pFWg*RWKmwJ3>Q(O}V zf%c5w6$uLpC94rH*J%JFpbsFAoixe@n}wiD`%_PWcW#%&{b`o$N06duR<)%X9|6Xf zH@M&xb!-hVe@o&d@c%KeL`^b|MZtFWR&f-#lu!+s+A6-CbgNCA(Gm-*U%C=o2LSF# z7vO7ZP%3NNdHuwD##;BhlVz57WHg!9;C4+~DIjqHb5J4o11z$w+A`v5t{d&ma_Zxs zTZb`=mEJne2;(*APAP<-L5;;P(dni01EWnshXrl@&O{3jKA@nB?1BjG!o!|U?bCOh z@62+#d-D3VbjFc0XZDcl8h~?zIwNpra8qgIlIC6|?Np;P4&SUy-z6iKyoVUto8MfIu5Bb1l4 zL?Ky~OJiSJGVa>?2z=-NGpcv%0Mo^aUyJq9oP7`{yqsdA1y=H@qVf@m5XLsyaiqe1 zGtc52S?=*f!XInDE|$W;m%}Z*Z<4!}5gKy)Wc8Y!H871aRhtKwY>p9N zpn3g%O}A_lV3*RLt!jOjCD$$M-&`RVUy8T z?#-0jD!6A=L;>2k9}ITnLpp7RWE?GQ8{!;F!sK4R-eoniiR-f3bDT`RZbO{QAS`(J z$jSpU*muCb8hV6+aa*Xp38WF7>{INHhdO=#VSveSW@ZzrZm-0gU|R-vPj*r_nZvc5 zSH%lfVo4D|&0i;SEA@85#g`B6v3Wgt@_x#bUTAK6wv@JGdFsJ0Z2YVjU$W}OU96)K z9);)7nCrF5vb9c+f`=2Qp-6FWxs)1tnmjJGBLy1cm4rtwC(aAB$wN%e|7J)mOvGca z!X9jF?%8=-9b((H3hkO_Xw+Iy25e@ZPq_bbyK47&lx3Q?#uz2F%lWrh{qk#l7pY5f zou;d)E{8$mj~T=`B{h+Hy6rX3)J0QrmTkEyK{`~6ziR%b?_(sp@u}+vSlCXzL|)&W z?P~V1^Ex}tdQ39p%ZZbsJB!IL@`leoKhBM|uIb{w(ie0rz9U7xg~6cvsQF#;2(yE= z+M>Nuj=S|0TMdE=oeOI36`9N8GBwnizBqn$QDHrD{>g#;f3Dv?GA(63R8qHkj&}Ey zHkg?Jhc|u2f^eVvR~#r`Ue+m2Z<3e3BoX}GQ>N4&Q)2wa6_A&4&x4tZF`He%gvCY8 zlEuQ?=)tg^H7<(#Tcj;AjxI9R!PR-Jx&Z8{W_cu z(_=`LEYf`znbv{w*W|S?M{ww*qnaj|VP43^-)bz|jwLu4SmmT%@=TIKw;nw0tr$bj zT7IQ_{9*|G;g?`$?(n68o-DL?)0w2TRwhhikaiihOspM+@)aU&yPM!MTj{-Z%ns|j zTF;|&1)mKDms82d;}$CyEH6!0dnkCgkg(fd_eL$$JwMANSJ=-Ad(%`YwiDv@xrA+r z`(*(Q{v~j`R4|D`Mr0uWdRC{@SXlW={T-y_XF47sIC3XPh*HRTq=`75`wkUu%)Qco?5xZ@R=Jt%YXhfrtzQo5 zdt`8^xGrO!-kfhDE~TAnAgy8C+>ruWoAVhz1V0-xP;^+M`K0hvOx36cr&V0M^VqE3 zJXg|Y9gKY^1$$eTyL+e#YL-%Bk!&MqTagqVHp|4!GI%(h$xCd4k9Tzh#-PU z4IqtlcS(a1q97_INb1ntT@p%2cZ*1ewB)nKThH-6_t(!q@cg19FPwMmwO3r%wbquL z9inYOwW$+sQTyhL2Zf5;lb6*_zHvM^!^l}-e1sp}?AumxVRw%yitT;+;&8{YMhPx? zT(^A44P(v%rtLh44b0dtpS7xK|mo?O3=`V0K@7ZLWHi z(}VN4%>@oMD8!0(Kl0NIS{bY|#BQ`Eyt4j6hU_}e=DvDjA z$}QqM+nz;jd|s-Szw$!b(bw1e#y%X3r{rYKOQY&8DqyD-@i@^{xzzt;yuK_!#`W9{ zGRg_ty1VYPfMV_p(wGuN=gq}Go-{gZb^m?w$T`dpT< z&vB*U(uYIq;dwG;j<$^Q$w4VCV}dKf14e?V7z3BGgi60H8JXp$(XbN1h>F!pdgQSP`X z&zosq5S(F$<1p;_Xn*<$2fAzF!;;b!3Y+_UPQ}|??;;cRZhOs49+YvMcT2VGEBF-c zsmYuF=ETd*LrX0uajiU=EN1i-aT`^}gg@d(wc2QVfym<$>C*ut#GHfBth5fbgA$~Q zsk)6J>4^n1_Z_MZchyL@0#9m|dH9?|WttQ8vMRwu2p1#NEiz{1PWFiRf)hasiSj8S zw$tskNQs>eF~e6puA_mI~1#-e@ItAmG+Z*EN<`8&WIK*U~@&g`wA zkKT*oydh3HH>HgwHCVKM=y9>u#XRM>w{p!wB!x+Z+4q<392fjTc%rlK)FyK6S$hoi z#J-l?S!W!`G%89u_g{INqVPnlJ){FOM^+T(7lVvwJWAo&yp7GCFvvn z(pD9ZmQPbZSYVE1FWsWdJHur?a--~#-(orOt{l}ZA*S7kC&ORw?sf(7_>oW8smLf>S1uT$wjUgm z#Twd)%yy^Ex7|K(OMq(rx|FY|al`s+F2KG6& z8p5Qc)fmcBFwT0n?D)r%)iM7`KJa_8T9oGY0-r*{9SJUVwHmjLX`ex_Z$sY%R(dSWM7?_UpJ><5MeLVNmt<;W^nLGC5|IdA zQR|IfeNUu#ZD2rjjGexLxNGiO) z5m2yJSliGhBt(pjanB|!u67|$x8M7QqL^u=Yzr#4(eleizAUvBvb=_G3)2_vY+mfs>0;}77xEVcw=0oE*zsE@7I|On+h0b$ zEgsqSeaNQMnHG{a)!B@^9HccJe0Y1y?}71PxM{4N2dWgejYt>M(;`4_WvvMg~z-fG{CYCl(!-dWamz8X1#$&wm zyR5p(d-F{r40(~)JIMwi>o-iw4Jc@um8yF7;e!|zzhkas*tIHLq!r`0^S>L0G$zUH zoa1-?h@FlCPTRo~W>?(N&a+ziJ*!1UTK+tCk|m$Yu_D7x$?q*&+%&SPGWfLOG}+PYA!)H`h|?-k~m^cPCkn{S)9(~TsYrj^eqU{%D59(6iqV4=*o{UBQqkFzC+mwp_cKy7uh=b?Yj+xV_xBH3 zC73ILQ!sUSaW$M(Hd#w|+j8o5dWf&Wn%Pvlb@P=(OL8&xJ%jfzCm59m7Rs6=p4e1*h^hoOd>Uzr&#LSE zY<-VB(Q&EP-lS%KI2UKVZ?z^JKz&1lQN$xVB(mhSYeDI$Xv>Eqj9otEQljRL6$)?l z*0-l#ETk1nwzT-6a@C#hs@TlTd>T6;yg%uwFub_+-MxLk&-1lgf1FZ>YRvU5frtJO zG%gjm8;wWtJ#5D+7FdkA&GLu{rh~ul>rR`TwUSR!Xx5dJ@gFK=A3B|eU4bIyS)<;< znYirARE>(^uGwR`S?MCD7!{gyeU7XOGC;Q*k`iw9 z!dr%oFL)O(^9Jd)zv-cCa{WVQxeHA1 z&mwN~Op3GNb}uVD1^<#o=hEMO%vkjRvy?}*LX4Pl@wL{BlK z(1VV4-7>UqUWsE|){{P>y7fv?`k2on{|xsT`CNmxY7v%QeZ4n4whemC;kwYI5KL?^ zH(1nxdnwy0l*8h>yQXM7QeMWmpjPT&sUa=wVh~y8w9((0B&Sx1*){fwpgKBo5&$?^La04AA@PoIZH#HPpB^AqT8zZPZx{7-AL#U)ib6G zBOeICFF`tf2~zHtg}8C?-G=+Qses|S;-sXybNJz0FYAVE4r{vz@#mEM^z8gwBlmic zw*0cqCF)Zn38CG?Dj}dp*GP6^?%?>iyWNs7HJGjYG-aT~xCg!6;{WahMROUHc6{1MbRFr^*%}znn|^=Rp9%VlN4C#nXCKpXDGwdVg*skinW!&;tj;U zQ_o)`DBga7$QiJi7e)LE*%eXBAdso=PFI^9?wLEX zOS-(ZIwJUch4xRahM{?g3}-j|oPI)7(9de3p=bj7z@8sF!%nv~K%jAg@_G#nOd{AA zuJfm2hQ=y_o|RJ!wyvvvv&kL2=EHm?+Y2Q_&0YNk?c9TiG1(hdSDhYAc$nPCPw&Tv` zH@b+F<35Np49k(Uw~s3-3d<-V<*>%%&`=Ujmu}A|!}%5YTVe7G1N(u-U@$q{;hd&M z=be{4Y-c(@>P9GK>pbBw?q;g&XF_p8MOPJh2 zFqs_^UFCa7G5d7mpLG4dK6x~fN;fcMOzW8`8xUO+re*&$uIqo(<0$#$Hw5X--72Ey zL|@Yj3t`nfG}D9NSX^5#Ydv;flEhb6yf8Oo>qeI7>eUgm>jeFAltzNCuKIi)^`(<0<^Brkol2)Rbj?im|-Ihj$ z6c4D@mXLpt))da+5D%hzfRhN#7kPS0Et}guUA0J6#-eL{2|+tUd;NO*`oa*^#B;Ig zvm9l=0Yd+Pa_*R$#MspPZOZv3l-dOhneZf?r$?k3xQ;`9_us8|r+4-df%^4F2{rMWV&d>lx| z<%vdpkU-dYoWQ-1Z9a;;Jky>d@)e-XEZ}}acR!gx-vUWXc_DZj>>(0R-mHgVL z6eUE4J?Uy`knJoKA+GwpaU_*9RZLM}Htx-goweUw8sl`?vI#9`s1sT`^#8VaJS>j4 zu;~t}?J83ULHH<@qE?b0VHu0y0SsO)x7c=857yg0DPeta#2kp(oSR;#B8ok6ySNfN~Tc>Vl zw_NTvo1*yLyM3m^U}yt0V@tO{sbsP`)rNM6WtR(=kFE5iaA@t7KcISogJo&-H62|n z%?AiJroEXD(myyfhA>NdJ?;$6Z+t=PlOc!{?1ar~%&3rRAyNq%2YiUK@Tw+fYTL_; zL6&|NZ*D z!^S|5T+?xscGp_@+Pq#%p;4&$xc#ntx@sSiEbcJp&f)pyOm2%&_uX&x=gqbS_jfu1 z&I_77J;iLrCdgyIFej@p9rtMcZG1F%;;a|6x5M?+4V;?4N>e`vSmi!&ZE6p!=2dJt zv7@&Qv+~V`W)Q%XR$BjDUm_O*mqQM)Xm}ri_QwhEP91uJkHIZW2M--3O7V0DJIXq8 z@=9U2E`Fr%)IQ?UXQDDn%8KXbbPv<67xU|W2>O`ZWgO<~g!>8hkzip+t9h0$ngrwCsTIGWoj`CDEGM4fbphP*Gru~Ij8TA=D{-ps5o5j=rxS311%66QDc3z2q%U0OAP@`h>>7MwOjI8fRQ<&Itm&hP- zikjSwd#j-N0Q>`*J62F992Z+X%z#o)xJRvcLU=Y+t)x3%Dte*(8Vfiig$(t1^mRJA z&m#fn_-8!H_uACdoTZJDKfb!EVe#PRtZ|*Uo)h?=TJjScdWJ#ta&@>GSrV^b*xlHL zC1`i<-Q5^jEcqS_PO&>qgcx2>c*zqjaGdLV+lwVs=gPl-rJ`t(mZt5DFxw*P^geOk z%qmeaLp`P;g(PU;d4%SGD0UHsBm$puoJ~_Ia01B-^UeXHcf(LEFl0N@uu| zTBR`8gGA0A5aOl*=)XX!TT9~fty{&s4+hILFnMyn>5)KQFHKLMAA~pj=ogiS54i7W zJUZ#8?sEr`F~p2MlEoNy*Fhhqv&I61+Ar;QL_|gFPB*m%lGU^xCEi^%4{fkb*kH*E zaC7^SR)atCXg%ow8i%_%TwONb1RSrur^+&OhY=POrJ?Dfp^GB9SBsUjAt?m#%gD7B zH?4O9SAgma%D4XZxz-L^cQNLNRpY6|f_NBOIeGFc_V;+}s4zj*a%=VN2~y`X%}?zy z#$detTq-uBdFOpDoZp(!*(s^3Xkq7l)K9tZxODU%r{@uL36|n=q(7M}Q`^C#Z5s79 zn_HggWHMXT>8518trUw8%2Z-+dLhi>FODV`#rDyt)7%mwZSIv8{N?Y#ADHKRi7G=G zG&@kRC~`PWvmW$alkK_-BNh9ewt_oL!i}%4J`ZM6YEQ4&b4&p=Ubi{C%dBG8ZiDi@ z+rh4lb|=RjFe^@rQOri)t!NFb%H08@E56}+{)yL$jFhk$>O(Me_yO$D(oyf{KIdI~ z*AmV=Af`a)!cc^gaTyKN2b;y=p&_Ph(*aJv24AP}$J<1IUzy~>4ZUI2_TInHFDJ!6 zv7Q1WfyFs+dziNr{~1!zR!wz)7BfmD3zgPD#%OMPzsLPOFo8N2K@GUl~4VB7^AS zgEDM4v59ZCD5J;(|3eiKnR)~>DsFiqPztI>S3Ct+48DrQ#A{ahlF~Yx(~HGWCT_jC zZqj>AQQG;_n;U40xZu_A!t~d=u+LQ4wo>6MI5&vZ*`VrEGg?632MYsJG z)A-lvGu9tpUhW3vFr5&YOL^Nj!$ZCT6w^7c+~kr!;hiNV6{JJf=7vtCe|`gf`BqK==Uoxv);rB%r{SqQj2QLPXw)z#dJMDBJ{ zIFp|jbl$Xhwmo+2R{)|W*sT~b4v!@nS%*#i-IJ1mF8ww6*4a4sO4#i>5QQuVo`Qg) zr!IinsmhG32|w(99+VO}e&meBlq6-2YgWy@#L$B9o&$lk| zbW5H|KC=Eb!d&_JIsQRODrmm8=4cGk5|<b>44+LIl@wRTNggGuuS|9PD?ilevY*re+0 zDNHDCdxRO4*JV*D+&+I^wAvphG- z^Yn}x!0zR|90%upbbonC9>gAjKakWl#+qAAvF={so}_}itFO%CZ-WKSLk3}A^$bMp z15ga>L){wMm7yWnP`>=Nc~;NW;A>(y;t+H?#HFd1^_QKyuH!5507nu25TB&E(dmW= z9GuRPTwMorY~axefvHoI4Z)2IC5r+St*xGriS~oWXCmcte5E&nWsC0}R-To^#jc$e zYHl;~A(A*&Z(~N8e9xh^8k%h&Nlg1$1pB_-Kg6}*uylmcO{CdES9|csV|*hE%M+;P zTog1r$itP{tr+63&tei1h=3X7k0hh`Zd@pN#{wlQXp-1vEANOs@rkLt`RaK&6lo9yH>>Y(Z$$OQ@nQffDiNFLkkNcPU4 z;|z`%VGhnxP49w8Pui`fw=KfS^p_FtnZ53_^MSam=V6fbQo;c z5z~F0qgOI&eNgNpEy?bR%JNyHlgI&&$EP+oRJ3kx+;tOTjCoCo(we#_gwt&`Iie=L zBr8cjI*O#uy=#wP2#XCm0vv;9m`Au3ALA&iQ70Wmm>5h3p1tkj;KJxT#;*WZ zX!&ZWdrh8Fu#_7pr(m{qD1Z7dzhU%=v34*f%%ibMz!N4m{{emftfk zn)DDDpu3z9j(T?6e9zKxlbSKe2)H$E;M(+6FVlkhO6}Uq}w}zpooU#pqS2Cuc;WVo;W#})mhRO#03DL_#Zf9xDzuUYZ*6*>MRE}x`XO*6>Rs=ZEU zCK5c4K*o9sa+C@Fvess5R*s=w(jL34z0Od@FTCly*?Tx-X=UB3#bad#n%bZ3H8hIZ zx_?8e4tQLmpqaqFe3dXqJ=5q6h()SlM?88z+mj^RKh|@EVUFLlpPj-$I!4%@Eg2K< zXXHp94_;2sv_Cfs0$|D6&bHf5czR`U`zcHLHS#iStYz0{I_2C%;;1Q?i3kOPZ%R3O zMb+WOv~u(*Kb;c|i8>;jV1|RdXrUwF`Ns88sjf!pc~moMO+aO{<+1cJRM)|$!`Kwz z#Ux}nb!^Mcwup_st6R&xrT3=xv~r}npD@JO(1?q46-wUTw%(Z{HZpO@VQ1)0q_!1S z|4mBdj>$%mw2CS01r=B$F9mTGOUK?si;W@K_I6gJ0Ip~;fpqW`CFQi9oegcqs#9XpX6kj6v? z|DCKz5lrwaNDJpNU?q$J5?Ju|3uAZvK0!gz)Vj^^DNP}Nu0rI7?fY9Xt1=9P3mh)- zv0l$BYY|km0?r*#+d2-Ln%881D|9_EU}+?8-o4|i0UsJBdyoEDke&n`Cie3y7_O5E zRZy6l`%QYvAGzVR#QX6J?wvz^4a90iR=SE)18%!h#$uNH~~dg#({dJ)N26ju?$%6GWT66u5E zWzE{Fr78t8S*LwS&ARJAkCPs9D2Kgzal?a@_HVf8ohpHm!Mj20S6^<&vwUk{o)_d5 z7CPJoQvxCx%XzOUCfZvCxkvU7tQ{qIfCnBedY0=su!AELiUc& zqg9X4A`{hK#Ay!SKBKAQ1?=ghW1}4n^t@zmug&#!;GVZXlgm>rvg!+<<{i|30||ez z?V8eUdd{_nA_K<(YxN_e|E%Xp7+ytc5|^e@VCTc{+AizNaq2Puwg@C*HUKF+xp$V2R~iFu+D7qhPta3k`WUpr`WY){Obe9~zwNeA&gha6^` z`nVa@xq$+f(Zc1)7B?XeNf%22s3a@blze}|QZ@1zip9l>eb?EZjOd6bv5u!vcj<7Q z0DL`we5%wSbgMM(43)SfZnQ3hS!FOEkF@8=y)}OW9cElB>|0igYmhpcIT9Kvs@cj{ znvw^$(Mrp)TDh$ICDE_xubz@~+ZyE5Z6H(0GYT%D7s&w#_IJ<`Lq`M{lUGg{M!PlC zAS2$Z9Gfz|P}83WGquAqpcL)uS{jKgr>9^6CeKwmxqC_eseJzZ z$&EnIVAFVM5K{X&D{&3$W)8D%FDp6YuOiLi9P{%9Bl*y3Ug-H6z;(;UhESG8BV7aP z40``Z=faczv8;d4rk|f^E&y71>9H2kS}f0*hN4t@=eMrpa;n*N+ zFE;X2=`-{k{EC(1HBU}1#P(6Ce-lTtLFPKJ3rB`5?2>V_A3yT%2miH?XvC0Vv83;= zqO(po0kDIw#dvL|0&S;Ss{l&<>PdmpbPzh))hnGTEGX|Zj?bpY-unyyRQA{Q($x7s zer*#TF6}$=ywQS!Mcrf{PJzivt$3)wUUr@sHo1* zM+z%oM18;8{T46_lFKP|)lmpn`Ih5#?u@#h z-t++vtbIKo34r-VyM;l@rFjs9Dg%0VclWU{Z4Bvg{nxBNl}-P=j-Q_>NF4wrGsQE> zO7B&r$AN&(hvQPzZOR@y%TcUIMe^uE_EoS7vn+Ia?sWHnyEfx@T=lhdLy6*Z7ksWb z+mX7S+r_l|Tl021bw$^Dlp(h2bUz51$Gz>%$O=z_aK_H-Ejzf188v z9gNT;zK6@3=ZdT*meY!L8&3falTik}Hs!iccE7-skX%qB3{Yq|zvwLyf4Mg?{oRpG z9k4+ofTy$ZXbO@Y0OE7wS#%a-{C=mHjo^?4Xr21h=Y5Q74muI?piJYaGZh{?hBy;z zafa;t?3LdO%|ULs=Cu^ z9=?zn=q^h1=9c&0Db2s^faM_2Pf7E-gRzIyEVS#C|(SFA-fd4_eO zfM=KjJl9?B;#BY*bgBA`is{ef6~krZfUKe7wun*D2theMHUbk$)(^4#(-uEMC!J>` zuVEfuG{%8EiLDSy3Jf}zEb4y-uZdGM78ZImCE4h>Hlqu5ibWnR12$0;UPyuK?p7aQ z_JcEc2!KI8c@zC9#rv^(OBn0>o*~GtRKu^#%W-hpJlKZ=esaM2!}P-OgmbxVH1M7U zyRZZ1@m?0MOV?gol=3QAEF3@1H6WxdbHQc}U*Ty8?n#yJZ5j6@1gLGJ?`OtzCCSxe z*=W-xJ)S_~Fid_}G4pb|VOi;_eE%X$ZTMWg9itQ-H!5VE%q{%~2SD?kkUgT>xY#$t z4v0@ExMod&ds@izB!j=KbI!BRju!SNl~ogb=tKS-kjK;>EiIPY{IRYB4nL zVLY59!J!PmSNkFGxa3?}b&cROHR;RNH46r0X#nz%p}SAaE1;bl$Wokd;g;+%6694l zyTC9s6kG};L)I)*ziEdLX(UXo3H2>b8 zKYgV~4XJdSk($mvUJzjyL%a#Hz;)Q0g_@#p%E%m)&o%@|wVh}-{eYCBSejcvTT4<5 zb-{UvhoLsvB0j~G3FKlCOX*`PE@TD3|-82(@G^3D+7F(O?lB_z0 zyv_dVR((1i`NFGMhOE0*S_`|Nse68%*ZS+-0!cW$QZ4gRxkwXi$;GWTgup_r;QkHB z5z0UiQSK8k2FOl6p3Du3X8;Olq0q+lW*)0BEw+Ve{HOQw2t2v8K)75^^my<9B?;mP z&FJp7Sg@Z{!C&sL&_7=s%~2!_hd5!}8slO9MO@?E)9t;yD?#cEz!st_mp~j`WXs_c z3+q`v&n|&MCUZCmdpw0EmJ(%BlwG3k$CtIZH_M#BMMM#c(vf7lY}=VzRz{<2oVTVE z7Wn52fRry^!%AquQ>S0?GJlYJ6)H6gp#$bw>WtiRG>vfnr&=<7Sty((AeWp1txCm8 zXCTF3Lt?RP?^Cv8bFrx8L_;TBe)}9L|8pt1F>?+i3;XtEpsCBvR+V?_JA+=Pz%FGi zqyDS$h{59;LmiTz@t5Q{LMc0XpC-ky1(FORCV2V}FZrED$?yC99bqhF2-L)$Cyf@M zmwqz#8a+OqCzGRJaGENY;Ah!SDXv|@Qr)Z~K~iFOiUG7T<99KWGrF>dqwzpolH&VT zgLENOjyXfA?k-{&7su5#DP5d`ku;2Ce_K^y*zK(hD1vj<(ftj`?jc0$*zP&Ae%j798nX zZf!bAEkVZ#k-V>%fr2qMqRu5ufOsU zOz)8?Ew|N5&l$Ny-~1Up2ex`-j_a=Da{7rJa?&GS20;xw^~qsm8Tp*d`QA-ABndaAhd=BR|a)rG4aJT z*Bo3(^nkEy#W-ZHnHc?rB`Au64J(XhBafA*s-~ zCv{*+c6LSJ?@)=sdf=yefaiIOel{k5>(*nZs{nViranOPzZzcEqoN}RJ;d&pb0`zK z+F(6ykYk)f9X0TN+!(UJIURezL(gJoxshf46YnCB)Or_cg0724 zCYpJLZ=LAW5`Rr@pvK(sjHIhoT4(|49{%_)^!@ZvA0vmU*q9H%OqzTMynyEKdVJ*M zU9alkI);3JwG7iM3%h%cJ}>0VF!O15r@tKP_t;1It*m-tq)gqTpZn+nW6aZBd801t zaVlOrlMex}JT8#HBYek7zcon84xzP=+O&Ib_sa|qAhO8l*H$g!Pd@3`m~!E2vx z{sN_tl5|c4lByrhIfG*$7J@TcvK{YGL(-J<8g`#e3#vmC()ISx>;|`?r%2(Qo|ULj zXgA`IGbWb;ptE0WmLj(7V->zfS86PuJLZH}@cra&9Ds{ENf4T8g1r z$dd;kY)nT@HiotUyf&eC9iJx^lt(!XFy0^KV9^C@jVKj~x4Em{HVflgYRD(MBf^81 z;1JoOzH{Zl+TXqaWoo;|z^-yD=hn^uq`ULL$k^5ozPodBBSg=};HdcgJ0;3JQ;24E zGoADWAKcCk^CW-&%Fmvo3-H_e$E(qWqrQq%x7Y-}kd;kumYSADCrd7`vWo7sK2se(7AW{pwNGw%)^3&P6Y?a?(4>(vK7Fs2K>2(Pal7;_l!tY7UOlc z0uq?emO|0pUa8p%o%+;&5=D}??s_j6-COfbRYEz%J)XkmE?LuW3L8V0!=G(9on@YB z09Fj^iu7z$AxhdcbMzEKL)uxqx*)B)#NOQ87SCa($bSQNqy&2p(%5qPz~!ykjP3Ol z&(Go%d5&vFymoV85<+J}sVZ~R^ln2BCE^S$tL?V*?oED08X*Fh;JZ~g-fnUd$;E!C zxuJEFgYhN-(qARV8>n`pW#8d5oF=DTWP*B7t*i3`Tn*P3y%01YC0SBGw3DRiU7=AK z?CEfUjoowei{;d>@ZyRv?7-!OaM@TNbel;^xZB|eWVj}tektJ{1NO-5J8^VN(lg?J zoYEZfvkFGJwuD1CM(oAK^ms2tG8Hx=thQGByE|x$G3qDXa7s?kU5@||6c+X!fnzr8 zs*aLVxWSRbZwCu;>{8-Y@A@c!iCt~}ES-s|I<#gFwU(kZpIWhv9sJMYT&e!(^)U`y zzHA4NN4TDdLp|>E7ktGIYJ`$eUn7@iXE+!d@?j>x{$1N+Yms+Fnt<0bjo`M7qZV-P z?P@+P;9Q84iXNVC7_g7oHKK0bl-9g8un&i3m&Jr_)aLg%Koa~Vzej+>JFM=s!G2Z# zGfKSVkz4&|DoW(!krG~zFX+107W8}#tR%DkoDv41+E0J8*maQwn#WoHt`I+DiM33+| zR8f*sJvWxK5HXBJ2cHq&Wgv=Ml~b=;DO`BEHjc(LBo#(v{jFCGoI@}iAI`S6-ykT* zXRA6NU+M^6Iex(7-KpLJ^XNSDk>QIMFQzUB+s^k>y^eg*IqCinD)R9Hbi*FnP!k(@ zbk1c}hD${;`Ur>cmnT=FuHnjLGsj?*p+vxY?dT_X=@zNw^qF6%fY@CRV_y3L#u?5` zu-W1gAME|--T-AVsTFqyxnksYh{>4E3Rc}#JyqY2X;uA=ZFpFaIl%Dhp{8Txe<@~} zkx!&U9+_lN=t;R)wh_ev>ff`5HyxWmnz*%ko%@%C=@PhzExIn!D!g^24Sg>EQ0egT zvj*X=lEO4tWRS9W?eX9QrJ|sxA!uWJe%24y^%~A53+t)=diw_u1ccb5&Oq#=!(w?T zl6zuxH%8nl7~5T-*f`wlCsKvR9P`%{d~{auS9+C)**Z!&*S&qdz_V7ozs9^G8;)tK z^FB(c)xy8=W(X!{hJX$#bN#_m?BylU91pk?9K>@eW||xsW?Eb$yD>P4Xo1{A4F>;I zD_WPOAw|H8(_V zpi@tJWD09*q6}>#MD5dztgD)2P-5reQ^cTq_(q6)hi_V3&rEJuE2U7GXQhN|+zwCD z?WWGklc0XQvftNZv(M`PoJev`l z7&!6qmCw^k`uQ)Gd@_Vs3O$hb;NzU)T$>Y{TnJNluBpE9VEkKLOJJKy)9)Q)Bt$SF z@yr9OILa%(UaSvhrZXw+-m6mzC6?9$rFOy05nKZyEzzbW`KDRWkWzHpLF`(CG>L^r zp))d7wwXtvNP(YGr6?RH8Hy(Jt~>qD`vgtfIXn{RQFrCnN@K(+TD?a9nqVlt9g%L| z3&PoXu`fbT`A8nzJ}wf!`hIe=S`~vV&zWp6?X&ul&2IR;;jgb1$B+Jwu0|giIqpox z_cIKFPG1qj#)Y-VocJFVbQN77&*>B4+P`R}pVs<2cIUD57rb)y$%wW;0bKyL2EkK! zF6Uad{(6kRYn8u)>f=zbmL;B%XQzH`z~8U(<7XZ*_|*+c@PG8@`=KetgT+1H^>Y7w zDMB1vDu&PWEcVOB*0y@qnN9h>F8g1X@|1;3Nk?%W|J%9# z@7n(V*^Jr`O~_dPd2bxKk_pZTc#;yFcyI%#s_puAMQ`2e1=YknFY$vQFP5ynGK>6;tSwx2bwEHOpZ(*!wAppUNd`(H2CuY0yG~ zmxihUcjVIe@TCLd-5YT}6~{kq_G)oW@YCx685L`af~*uTarr2)2Xn-fAq#STew6Zh zp>}_v`@RX&ebN~fMs)OK3_cs0$aE7^>yxijW+IrzF7F1-_f z@+_@KQbBm7mZ>Oyh5Y+M+gl%rl6RUI(DJ7NC=uU>QlA|vDFC3Wv8z>jV1W zY;x1KI1#WKHpM0tTUzX^n~S^fKGBJmUp|l~#3BZjM~qRvn}_*ICx%-9q8R`l8*%D_ z;u*TK1lvv!3}{jF+SxS1K^3MNZo7Fs{{Gaw-Q_#W5}~rmP-Wq}2}Yc<9^&P&1>q=n z7GP63BMNQ5T!;K^L)C*!`7`l5$sM)K!@u9$?|a8X^OSUqR;4?^I*g^e5AAAmc)k;# zV|BgU1fEj$7>c|*O3Mj8k`d2Ay7joq;Q5J)~FqZu(8M#0kDCo9FT=(*ZwO#=Ym53W-KMANf@-4 zG_cFPg(FWWQtLe*pNye%s8(wK1z!F;ij%xVFc3xsnF6KEy08E~SqAkaCB7Dz4=vSw zS@XmXg+1)Em-3lGAI53WN+S`uwWGU^mu2TiWUKSxN!*hG&Hs~t{ED$?4Vu=Y&!N1o z>CN(cWIkBfwy_65;T#mIOJxDGuYl_)kz^;v0itZ#uWHL*Y9l|)^qkwavcVFcyIn;q z{K>`Qd-O8YYoTb1v$0>FQ+jHc{~n4%Jf>#0I~nEl2`b5{s1)xyC^h3&t&=GFTR=xJ zJL7Jk)^+5Yo{FlG%Hr;~@%jN+p}|HFl{r5B{#p#t*(!GFe(@hOD_^A;Agwsf2Du}y z>-w33at6;RqOKo3%iRjW%el%M=B*Uq)w#@ymPi8K3r<5zgU@?JqB?-=xan+;H8Rch49&$DC0DZz=L@&+$U;`eSEv#={BI@`n|S%f6u943I%9;jE(|P`ajIXf{>P0a;W5V6(KqS&${)1s{Ha6gLa`0GU9V zLYi{)BnA=S;09NH@rM?1&i3b}M5x8CD8%2T z#B+rz%@xsbU>{nuLfuXMf%#&dE2Jj_`?_zUZv&0{kcv}G6>{t+vl5H{il%p%EY_PS z2TINI(qIf$HUeP_LWnravnp2)PBj5c4Mp(`Ibt$58B(Q1?B-#?+$fNjbUvg3m%{_#(=hKrEjQ=V#-m!b& zr^CHl^ckqG*kd1>PKhTLXI9S5gkY`=jcaPxXmQkB^^Ynih|Y3bRKl1?6VPO5;~_aU z-^g#X+!UQDvMEt&PUC3`?{uac`;Y?{NmvMQ-&HDH%iw!HfH#?QGJ#&M4X*wQZDb_A z*$ywyqK{pb^LqVOFb)pc6DV`z`sSLxZ%$_$j6jF4k?xWjdx=tW)>qD26 zq&KZrDAA=zciAt47VnQO#Fix=SirXdFxk%SozV_nmd4XYfkmkS?y&TQFVgD6JD=aAXF<>Hxk|5^_Wpm9^kM-@%K z+Dm=Ba1NLxL)gl;Cy>{J@;@4*&=erCfqYg6Ki1I`Nn9KqZb>T644F{8k78**RfL{1 z9mgQZKjZkI4@HNH%Zxq4BG28FTpkb%}4L-9foTy+TyoSz4tDHk%FzIqnE2d2eqna2G? zVa|u^q8_PZY*_&5oyO})HvF#wS&MFtM$gU0jtF(76ZOPXo>%|21U1*z>7Z^Su+I2S z700Qf$)qzh;?Es`zEOc{MeT*vh&LcF9&}JO$5|}>g2sOOb(+h>&-TAsZ@aA0+56%> zSlRcl5g~7q#AUO|>rV|M8pZ@ctL+59{2a7X=UHl;$l7(XQ%Q*0y-T5LNK_+=$x{}6 zcKQMIqy6Ykl3d+>+h#Xt`#SUF52f%n@K@}Eu+ixW7>xz^Z6 z_*AaTQ~cGHW*o2nF~Vvw$i`1cnt1<1F5>|k!ko&&F=3O2utn8R-ym+a;!lHYdOy}n z3NqS>Nj$VabT=N5y)ZxTl;OLRFkB?@#ne_+*+KGE*Ztj%dFXn{hxIQSp+K@GD`qU5 z6A!&r!bgB)fZ+Shp>-#vl zGJ5=WiKchE6`m$5zxg4SN4?Gqa}#AV-`|C+G=w1=^tvkfXK$o+NfuoBf}Uc$MF@wA zJOI5&DSj-Azu5FUY)vr~Ch6|>zDL<=j|u0fLp%N0xh?x*z2-9!ps0u_`qr!cybtCn z%%_(uWaFtU+^V?c!BKY-v6~PT?)WyR|0_DfAT`I22&(NaO?#iEglJdsYqSfGO+4K3 za!qpD^6B^pllBv|snXwGDx|3k>yTI=pf~yH1c-yIGdQT;LOg{)nwOdG^Wtp9Ih2_L z8`tsk0w#FUAZe*smdO?7sW0&HZ%w@o0nOqUZoc&=m~7(5=3Y@c36lr@buZ}47TnA3 zF1vfiXvt3i<<12_(^Th`(&q;dtVA|2^g-Qm`Z6RfZ~S*QsRt_T?T;E~bF2Ocy!hrE zVpY1ZSd6zGVi1n4MawI3Q*7KjQgIOWiEY(~t5FWsz=TgCwqfeV)@3N4B#-!fV5JHC z0!IGw%^T`}CF3;;nyZuN2gV*9PK9QA^aM=W*5=2H8DdJ7z^NM7KR=hXDB!}fB+hh< z*u(e#BkWD!q3qlCamHZmgD}>{5{g3hCB{w^N|v%KBwG|?pJ6OzPm2mkTFF+4$TDP0 zArXQz_F#1k6A?CJ=1Os3mnqiE8 z|8r#qfQDHR`Ppm!Vek-g0OpJz3{$y>dIWrmY90E!PvDKLERFN*_ucTen0;GU$2p`W z%Lp1~Uk+ilr%2DqQ4scgd2#mbF|OmCd_CJ-SJX2A4^i7s{ zW;v_?&p`I*zugTU0%7-A#G*9fNGT2Y;!=dNb8u$y$O0C9V6{t`({nRfp&BRT)xZy3 zK%{B%5t3)8M-L+xYuao#Z}RJ)Km=F?q?v9oA33!%cC+Hg!tjT?m)P>TgNiUMuJD{} zE)4SgE0l`QLfc}Zz}^-SyV}#KW`!C)$50-V_IX^BwV{Rvj(MbbTXCI83KCvNSYUe- zAtpH@+-0Og`}H36jrfk%6Hpi3q{?6m+J~E%N zJ8W?z6h=q9_#a;4v*#yXa6B;kXra0%H7D(>k~;=l{`%lM$7|?%he<11Ch{( zLvW9M=X1SWz{ga&i%0q^w?pYH3>6!jwAYg0bhunK*&d|ED*le zTY)zc3$~N8_j6q!@jkZp{24sYrLs|-n)}nIgBeR-eA{!B^%11(fKW~Cd#+t&iZ=%C zs#)*-r1<~tUi`Ifs8)n0%I~4l!o|dUw_v0yNNY=euc$TVb>5-ZE~CJ$pj^qb6@eHm z1sYD@-ZdWU0+#y2JwhUP^zk5>t0=I<-7N9a{x@qckr4oG69 zQE;pG`VErh|zz}~KDpShJ z&?&!v$vX*|Ec3(9n!)7D57EyqOrWczE>wE5Rwrny@Izh z=wF^mfNKUD);676;4iYyx(Cf;&{trc7aHpi=${`E@tbEv;(?tmWVWIjLHM7-m0mrV zk`vG0ik<;-Q`~HhrZsv}61JwUuixJclK)zjOj#5dum=CxGqVFyluIUf*ZQac(}hB5SZg>_2>kpKBtkXImz32TciH@ZZ4OmM_c3Xo!&4===ED+}sc+(z znXVCFE6ShwDRT9IeZcFZ1)0Yl*|hC(cKlE|(=O=5FyX^%JU)G4sw!d`bwVw+YGI_Z zLt@QzQ2dX-c8HeEPt*Gtsmn+YZEwm})l8RvI2(V}LDe(hh<*OkSS{rv^PeIoWcR*^ z?^~k(Ye5?=Y^MHfSloD7d2JdiYh6GByssP1Os_}Jf*>Cd4*M?CcHJx|8sQ1o|NbVI z0){nEIf4=3FwZ^D2z@*w^58YeBpDjgky``?pZTZ!`Tgm`zRZbF9A6sjKRqmBYgIuX zdDIA};(SjN!(xU1RKy8zLEOmO>sWtDb&2@o*ds@oyD$v*N-~Po#d32|?u2e^X`b%+ zmAC`T&lgZU{6&iNYtI)NV+2UURcG_|-cWsW?riPJgwBD&qxQwt3!OVcTSPej(f(-? z&qPioC`6IKRCVs_kzw${I{yz=-NkVno#|KfVSvDpQU}30fL7oMBwdv^)#1>0<~G1j zBah|gZZ8rf^Je32EiO0L7e1)1WtfKogcC+z4H+{OWZGvwK7CmGXlO4{?es^z8&KQ3H2n_uZO{-_NKaj z<;L(mwnm5+=UoGY)C1->hFhJ9x3_Dt^OEn!s(_~SqQM{T*fTh$1|e3t&)LgAv$E4U zb*k9*dDW-L;}!d7;-eq@-J3SwXAMRGkq9{+9BU8>#>Qldf~9fuP4&P4K%6J<)l2C~ zR*X%6XM!J~@cS~)0?Z!P-1h8)%NeNZ6kpyG2bv^wr6%N+O~6H7;;%I9=iAr!;{%vh)h#y3QbA~q%{?2EBOOZoE%pXflTfMDyPcVkNHu9=r?N)e8Y3(o0 zGXoRS^||O_mh|T3QmAPDGAxeyp8R#qpn(n1i|eOqoNIoBDZ(c)Rw1l-pB1f3AD&W4}V1@J?0^Sfj zd-C8kbZ?38#e@RX8%-)jnFs9p8~c9s9ufmHmP+`++6qLq1S2iopmyRMs!&!$qmUD> zh`JwADo65Z-k3_IW~SjGW$zNWLkNw|;n&K@C&5Y?9ZTk`Kv9i^IOtryh_EwY9AtBA z>}t)zU}bMW{T#i;HQnf(PRe5W{nS5iTQk;2fM#U*1mQt`XG}^Y$g+H)zWy&?-De1| z`;T5!SGkpc+bl<@=hD_yHRl)BLi;@b(P+l^GG2CZB&U4qFRo3QIq3Qn(CdwvYp#A& z3QNF%321o_aWQK7n9CGc@(8Q>1)Xk!Du34Zq|cI;_YLDdpo7UlJ@`%(8)<-tVU0az z`ZDo`P)W7$tw(=16W)F!u*g7KJT9i;CVb@RKE8y zt37_;^D_CW7MQ$fEB?$aK=GPzJTccx4T>Gk{}uc5Ez0T9BerIXuP@F$KNoiG94jWd z0KYfx;+E_lj6^a$lNsBQI0}W{?Ebkh)_0$rC%2>6)`(s}j0o|ZJsdR`&KWYB8y#Bb zy?EU{Hu7=*^D;Nj#alkcU7b;>1ZX?hK9zH=uY2l0Y^PRse9!ZMk<6b5bSKwdWPFkf zO+uTI&}NN#m_}uuv0|`V=)>A#P9YX}nm`2$fRgg4K0^w9$V}&5-mmQLLVwnNPQFSB zh87k=p%&2$Hp)EOg^Ss~ENf%H_yAZGH=3h%kqe{<`jWDN+RTSgO{Q+$S2-%(TDi1( zmCjBY<&ALYvWlE7=OGENKmvakD&n}zGYyBuUWhg z;RzJ8o|3>}U2_1Kpj)&9?u$`zhgZxFZ z8~HIjc){b1^h023H$T?kdO&^rC3%yhz3(bCt9y>I#_xOvbUzIKy8%C03f;3!T=F+}46O>c|`t2<( z@uQ|uyOXt9%GgV6?`ILpxf{6vq@yVC4C}|*2G%VnZtnl8-Qil8+G3U2 zbJ|f%ik=4#FS6UNOnJxsqFVgF#aW0({LPKRINpUpc$#H$irS`YmgNzRW}<0a8@*a_ zQ!(EBlGG)g@ZjOZdWSK9ZpR`njLpZ-zy;30ue<=mqc>F7;Ta7@N_yO9Mja>G z#p%&3KFOZ95F>6MT9>mj)s3=3xpNm3aPtd_$L_>Cp!RqkRAiUxBekQr*wKjTfp|{n|r*c|yJ2m3i&!qsJh(`0cAcq`*TH zA_M;Ie9IpsIayaiye;x(zqfuDic&K|NfA&|s&gZ;kcz1d-o z<`!M*F3nXVNZAu}-Vm`GRV+|R1(nj7%O- z-6}e;2pt9rg|cq5G<1xICPIed-C&PhiEQ!gwmhG&o{ae=UB?UGYWN+MSzs%{YkeoZ zWr^gk@8HD7=$?@os8H!b@AaKVZIm$ZGZP6=wfxU|n*0T>&E_ondlvnEVCZeW{#Xf?eml zVu01~t=O&IKtAZp-Pb;ZGAxWp_NMvJpE(}H12;K$E$@yrxd0zDyKbZT`O z6m}JjwJQTi2gcN*hALvN*goo$oz;FN_K(ZXBxP`u!eC14!bzw~;x+{kSOuunmb_7s zg~hbXjVGU8&kXfr@Q7cIP%N{{z|7SbuMUJ%GyR}OQorfbPcV&&xQCz1nVRh?AWz)0(h8XPeng3Lk71tW;u;~#vRwdJ21*E+%v8|hhee+T*#0zx!{_9qY^^b4L z`VcQ@-dv7G<$R}JbS@c5yI`(9CetEzi9q8fy!#3v-2#x1LY8{&{2Brobp#AHoK>a{ zNjQAX*e)|&+a6k;S1x4w*vMqX6RVzjX5;6AkO3}VtsLM7bKv6M`P9rfCTwRoOe@u| zPlr6C1Lly*0Fu>be@1gLn{=PWx`(FXK468C!g`{A{*m(;x3~(s+0Ci|4p|}lpX;~( z1kbgeHy63|zMgLEmpr}Xz{=3<;O}2-(ik(Yv_QM*@p08~AbjkC6Zp1PGH%{s;U<_l2xt$MQak=m(cW!l-k(bdYnh!O-5#H`7fE_T%+jx))+MNz)j8C^@8D6Tj zR@y*CnWFRw<1m;r3yc?yq2xKOew^Z_8MR&>0HL8j_c+2rb-oTD2NL4$$oq`cN1vF} zpTTe$AZu|5<$xx&jIS>mtxNb}^bWU+cry4|85ce6W3*F_` zy5kE&&GOPqgDv)wr+4AvDbgfwVKm1ke*qHVN$Ms*?y>D^Tr+~H&_%E)H#9(KP~s>F zkJO#k%iH7eT<8?$tCug=b zM(z}!N~UEf3@xYU_8!#=Sj?tlNd~_NE2Z26k!qGA$w5f@^{LdgAz+o0g!k1^2Qrsb zj#FEa7In})evs_>G?|;Adl71n*H93D{{a-VQ1dQv^mO+vSLoqLg|AF=kLoDv$_`$&fCb z!qw50C&&<_V4@&sY72&;!hP>a$J;W9&lS@MBB;N=aN#qgadX=WJ)HF^%NO?!N=g%S z5`)f8P#HC2x9aL|L#ld^`q%*1dop6c$WS^7MAX|GL96qLKV6 zyKyXIYapc5Lm@F-$tshOiB*i^kE9$}uiD?3;%mtoj;@+pYubyp8J{ z0ifv|7BIYw*bfC%i^(lc9CK5%>}i&x8wMiC!naq?u-aW$C5%~zb<=;|eY71{EhgC`N{TRxUiu+y5@MJXZrV?fv z^ruRJGtjm z{72CpUz$$I z_$#_>n5C=Xx9%#v&Eucdhn35~HhzmPDNoA00L!fEbW7{J@2AXe`ozy@BaW$XHy3dy zDjU5pb+@MS^hT4BT3vHjB1`y_K$kqxX3e?fWTLd2jlge?K)yPy#hac3_THx^qOqez z+P_c#a8eSJ2hcY4s*@Cs4NXT&G;Txdwx%sH*fWW($0(v$jj*_2b$zEGmFd$;x9NuQ7RZVhF;^0cX0XQK(Itsj!ad!>EKe;nRSH6ZTR!;uRl@C6E!4CKWXyh-N4*UigAm- zPZ{E}q6FE+I<$@Rx#?JmxGGI>(yKp8ZT8&&TxX9LQlmqZ)YW1i6F^K_oR48O@i)5j zwCx$cLJzMUOdO~0Waz#NHk0ByQAe!6pS*sjsg~L6Ql6v&o4mZj0peqdjL&#P)HZ%X zgQ84%N=^I;CCqM`#A%2%MGYHI<2TzrV_?l{PEa}F5d8NwBebx;7YqBzekO3 zZ%t?T3{pMYcfU^>!O=)092q?hb_q{egov%pcxk*%om_l1TAwX3@@v<~pL7@*RPQ%j zb;wZKz_MwLTSs-AG5IkNcK1W${G!lX{Ki)$R-u@PsX_n0%G!Svw}1aPNUGE9UfS5tIwWvg&u4wFVHUr(=ZcoY#!iv5;Maw5OdIbMA zy6Y_IZB#8f`nwQZU+6nHR(K>x?=nr6 zixQAn;{_2mJIac=RZ)ZWKP&;B9!pr~w48^rC@#$}@$`xY)>i;vth$KfH3rh-rPa^f zwTv9uw`jB=m27K~Hl^?{J~>7E%}-VcY1JL8P5-cZ0HU!s=H#0j$40|Hi{?$gD$>gr zfV!_{69}cj0M+uLbowg2eG`1h-s~%;@Wv{e_;3tw9YF35aFKACd8OXs^6EUC%@Z*(ZGvuO|9GEJKh9 z9dD$=c@8oI%L$;H$w95vUugC&#o@~$j+$XKpxA+FMt>L%Y!DstC5p0S5>$8_r*$cZ zh_3oH3fRF|z&UcKCOBs6mp56RaBlWy@~k-e+<7e9_>3AvMMNGtYeo$b_TUIMi~^_| zrBIWD^-gU}%XF7!X1x?S6`s-k8pye4!U8ktqM#43r_lc45#w&K20iSWWfU{ro>jF% zQ$YfS!z-R)^CVGdZRIe_5KlR9c)VCXPX40LCW2zuuwp>LN26PzIX1J0YpLCq0u`KwgrN5=g?t zN2hX$Gi#s!R`kK(GP$|}j5YYYz24?Nyf7nPC;6PMKFm^LxjcZ0>VI8p{7P?uK10(Q zk_-HJl43LgZf2KZQzRT?%-9fz+Z{vf8$9(NZg)8kg3TSKObmh)w>10U!0JG>)b^`s zob;8#IV>O%~26znEVAD}P>lPMYi{NjkQMw5S7eD2dORs=&dL zmB-pMUY{-;yg|-Q;%*nyHZPQX5%f!aJe9CUhi0G7BIvUF*_EMn?k{grWJ%`XfjY{) z((J!XoCH@~afY(HDKT+P!itdfBmDE)ZuW0y-W6Q{_Zzd98ePxK4sV0$2d0G`Ge77C z=kW(8E0BGw8~^D4-W`D*QviW`Z?28mr2y6GH#j8^N=usXhlrewn8T#F#9L#8&|CkW zd_XRuICP4AR49ktppNLBsCX2s?B?)w&fHKZ5@)vvywHufj)$;cd<&s7m=sxgdf*V; zd`1*_i0tsAeIyl}1!VUVn57p^OkoWIAc^^iGO*WwkJx_9};j^26dKfHH?(w%r6Yg(cV+7R2hMab`Emtpmh8 z2JD55Vn~e{W~C|dKW;l2FG;!}A(fa1O5xHY#zc-5XN4n0$7Yh@c%S09e6i(W z@~x%4b5OY<8KCEiq)P-eUWy=n8THLyfYaUR5?$Ska`$K2(kbExsW->rxC-7}Kl@`3 zfhgr?XQ<0KJ=XN3bx2Of0HseO-51U;Yaa>%%y+nWsI8^pPLR8Xd*#mCzq**-k{i*Z zQpEb&jZ`2Gij%`L2B*MF`YKQ=eRDWUj=VA& z25V}+9oQI8=nZOJ@Y4P=AzCt-m}vvVbVGVM2;CX(3jq z{Ey58kVq-|l4RrH0R*x{%!BeM%~GP5?g$xfo~2|W2c7g0)wbnte!)FMN^`1SJ7+BY zLgrK*Zu>ujsU8P`gTd%-h^2z}Onooy=)nHJlDeHJ2SF|_c0aS@{_GvOO1)ePjBOk! zj2bZ#e~z!J9ha|393|jb=J@`^Gc&3^^^ShFm~<^lt8PpGWJN?FPI~qV)t`tC&qt5Q z5cHd)?c~k>0*C=4{->AjAv$rV%z|gYS`f0@1X9_1nqsnPdXO04C&a0@^AIKY{Om$P zyCUjgU&X!gHRGT24aU0PFYkpVL0zMxpp#1mGc`tfX{puWtM@L7wN5qF31whbN9&Gf zNZwYXYPdJY*mC?y_~KTlS5h|ky#9Gay4%iC0U`p05R;$`UJCM(`{&Q}Utf=_q8#`{ zvesu@=5WFi$kEUJhL>KP?!-y zjAtLAbVFb^XEmEgw!3#jMftc3fct5v`7VKaYdHPvKRR;%`$rIgcMp=Hu5n9b;`LE1 zEG)fe%9lD3Wuf21$FBI6g4}?E`MXzv6#B z@&CNS$@0K^is{A3L-KhIxUI$&UM`3K&rgdjLFaQ0 zkV8iD#m8m63a$X_=x7&>Jz(JA|MhG7hHyIdjQDnQsl;w=9swUeYmONp5xrLu!_(WN z2loDQE_Hb^{s_~JlvboMZiiZ8zEf>f@6zu#oXEuxj4(7u0q*1S7RcKya_4}w5aDOP zq{)c{cN(rP^7HHZ#8_f@k$q!w%?b(2D5GN-xS#A zlnG&wcweas?hW=anr9bFulI27vgB?*BRNMq05Zod;G5=;x?c=Una~_RTc{^SL$XIZ zg92&BB@`p88R(>T`>p@TJNX%&q{4W*5FaCE;{kWmambLMiNycV`gYuc#!stU4e`(2 zA;BM+613fUWUUKRi(X$orY3));Kb0k^LJZU6%MZ0o~G7GTU)_AyMtg8AOX2}HU!(( zkdaP5yq|vwbeF7kg%LmJcSADdSHO8|N`g$1urBi3<){<+$nD4eD%NL0W^gnX zmR|L+s}Q@LGI+x^F6`q|aB)JUGJ?aiCy=NSq^t@8XT61Rivv7>?P5ZrBM~?Y2T`8|P*})SIeCL@-;|;9p_U38^;Y%ap zRB*btFyV0hF0)L$bb!DxG*N@Hp&4`R)|owhrW^xucwaxKdb3X3;zRDuhZ4E>0v($3 zIw<*uuL14Qgpnh;z54AQADx)ZK|6c+{C;t*&;vgObwHfAa{iEJ@N`h^0e&emL5k$< z{47zS{XMtqR~p{W?|6m7LHozX?vmI*jW+0JLI8j?G7ETyzL8ipsP6Bj>vv zcn}MFmE!FHhmPE{e7JP9$n3UUhmyI4B$YlwN(NwCBAr8s2cthz5CMn-8RaURp|1haI|VGB zZxu>Vdy#XyYW)wQ4Y77WqKOHQY@X1inL2E3S#%bAc$h|qew;j(DBJVm4Fck#PSaz zUKAY!Gc^wCqfM~yxlLR~PKH44#wU-xvSr*;N)9MfTfIMNVS@df8dgr8B|T$byJO-8 ze343zSFG2Bb@sY}yU0~Y9Xdc#T{s|HCQZigqD?zO2ftU?eQNc&7HhB{bbhpL1>q1v zQb5d2!dQK@VV(+=$$&?)jcMza8FX&&e-j}}xl%b;Qa?OC;r)S^a@s6cqvDfNy*Rx$ zI@5x|Md+=3W&+2ind$`&r8jJ#|2_G`DMtr`F20&$hBrNZ0hAAuF!y+SP25(O?ohYZUWpSbY)z{*uM4WocJ z&yR5C9yfD5-ewzUel;(Qz%@Z&tNVSXu{R(NO0q5MqehYeYd(@&uZsX_yFtfQ;c;l2UA?5-Vs9}N!g zBsLdW-Et{Yn#uAJ^$dOrYR=PRjVrLWaiG&^VZIIh)I}c5Ym4TH0|^{*97{`*9n$%d z?uT$WVtn!r)`+G5XeZcWm33o?4}_*dS~JJblyf7$&^fV~H(cp6kYV87d@x}Hjz_8S z8zf}~jyb*^Y9%VwNR5z;c4Fq?Y~c>Ebdez)8%ClyknIQUv^-Fi5XUOPFSu;2%`qNk z^~571b%%C~vBftgikeP$&D^Z?ay2mL8T;cf$vnFBS?fi!MxdRe(6!C+_Tfz3`QjdF5?m zcnU9W%P#8{12VD3`nKJ84V@Cbdl_xb<98yi6ubLSLzX(T3%A*2wr13EFM?j_y3~R=YYKBjjZ|X)D z>TxwK{Z8*bS12VOyfMphEn1z*#FK3QpdTKz?(s?;D-$j<{2`XQ-Q#yBI%!cgk!z)o zlb1=#`R-9~2YXuD-&Qnl{PIiTUfEW?=UBC4r!oGAYT1wApXb)HfC!gHA=$y!ShGrIa%4Cp`p9c7(uZxNO zO!!}Pt<40eA7X2c#*B7@u&N#Q_d-1ZTygN2_$dt~L0-c=APHKk2xI;8SDS1I?~{2y z{E)iL6?&qUf<4#@kw`4yb#B;?i{0PB{P-z`=VEiDI4sKzqbRU{d0 zd3>-`duh3gwANbg-Yf-t$o=3YifDRfMaVfo#Q0oZ83BBRcef3hqX$SAj`geq&Ipj9 zEV?Wc00Mgu*CLwwETH?cE*gUbyMMUI=mJlub9@*R`=7>GPPk(4u+g#6T+JBU^4_SM zbVg~_%aa?SGSSsx>!QG7T2YM50ddEVYSt&DY+j^zh6L6EQs*D?`KH95?>{<&H z@#CVX>-inK84uFJ+)w)4stz_S{S+;AjLj=sNAT9B-k$wGszW%oGI;Wn5}%1t#$Oe( z5o`O9(z9`lg&4s9ZmgqxJAk{Km0Q|2t(fhayrYBz{b{>>9`AO@-ONf>mwpV4Vxb6W z>5cI~e^=ZSf|#hzu2UiRFQs+`(riZ=|Hc4-Qpqam5-w z`jgP(EpL3Wy=M1R(qoncN|3opm*S5}zU*bJid)XPkR2+Swav+bvs%e~m=22do&g=9 zcD=JJ)8>3K;>7W#j?J{@NQM*VgjQm4O3m-tCYU;EvYs;-JnYZxYsMKE>-Xe<=|sf2 z@oMf^OToHHO~i`9@u^Q%V!4p6&QlG9p1?%OAuoG%5J7ecr-O zym_U}(dv;}l>Q~DL((Vg6jCClN}A-*>$%IUUf0r2c4Xb`R=Y;gi47k9cqQP#95!xg zi0M#~!NO-LmreBkz;DFvu=KqUx;1u@683F6f7x-Un)$<4xMR9=jojYjwppJK&Tu}D zI?3j?e2f^bVjTu(@wsIf3iwi`0bh6QG!mMy|HY6?ZBil>G|rZazddJUulM4F`fI@Y zO59wa+IUUYWEI@Uw$Wr>d>>oKBEj3)o-BwfJ->fUD@v-uxbm=~+C+BA=Pc{tUaWvyo!}1-F``%bXh08-Wd+&Bm=9xR-N%L*jq=UWfsP>$&opCePVxYG~q8G>y zKU7+{JQ35uuF_9(EnK+CFP?SSkW_cZP+Nnz>k;chxoDcE)BexqX4T~w4OT(-D^q9J zSn!wg@8Eo2YPnM>1J7+nKZi(n0!jN8Z;$sUzYpD7rsB=rNnHpfBa>v0`9Ald`;>ON zLE>ww&R@V&jM;d@kf7eYPOT-Z!yq~|@VJb()#l8(OtSRJ9DQnEo=9ayJCWe*?tY`%LgdBl&^2p0}7V$BlFX;0BT+Iw1JYRQhIHJ>z`9m z^Y^`38nqd2D&NVRNM+4{G8`>|z@tQaO=%ts9m+l28~rHLJ-~5sWV=Rs8{+x9heu^X zI={-ToND}pb3sEvcnSPB&J6B4iig2*2Ilm!=K;4*- zdo?WaP&={ox|BJ8=;XIAUl`_SobLd6*K;P88n1)U_)N@DUcZZRd3^KH0o`gvg}FXwr;sGWcoR~08sJz z_2fK!t%z}BeA2Hi*^|H?PtWUyRmDC+v(#qg3}5kX1|>CcqJEf>I1Kln@ic2)kT=RU zpH2(z)>%#6EjD3K36Oo*Kb~H#C(SR`DR6+*SLxH~ow69sKk8 z?w$kt{d7?NN!`~8wRc1^YSG^v)x)knCeB23r|5;B%t;5-p?d|I<=>Vb0_4+PpdXL4 z=w?-1&GE-EB@Pt^2UH;Ux!0g6?n^MblSNWS-HKYdu%H+$aO31yRs4uJ*#}P&$tJ4R zoPpe?$M_OW3^*>gra@2Bw`3VsmT^#1KDVWgnO`J_7L8Q~u47SuzINE*LTxJ-+uy={ zA11}z1CVhpycEtg@5qn0w7cu!1Vc;HPrt1u{(MSk|Dx?%sS+^kXmII1dsmZ|AfL|O zOdsLIoyzp#1l@3`^_ufo0e(L;!InbGr~BZ|H?BI`Q#+f77rH zT^?h5(gZTMd;WcV^YPLC7+?$ebySMGIM@f{MXsvqF}Bhxm*HMB?~E$YBVeyZfT~gJ z?D(UXU$oZ1cKD$T`?q+~)3Z}1C;D+<9PO4v zqrQ^lpl-*gU?AM(Qy|$`0pin_r6|iICmJm3`q-)_xzOX+>C2R&Ov>Y8<_9Zme#hqO zrCyKz9*x3$@}p34zW9R+g%seALMB?$AH8oXnUchWl-hu?1qHAE_~OEem5H9S`nxad8A9mizaXkz<+d{B3mxceumXP{Vdnh78~8vI4?uP+2`=?L*0wYa zjq~5k_fJBB@4LlO%O<(b^c+Q$+TGXp2MA~@M3oVXr0bTE?FD4aoE|RqIQRiPlU(gNF0~2BV zcI{Ko5!mt+F#lXU+Y;ll>2w}9fNU?EHcn<2RaM17-wXXNCS8Pj zw(6=AtKQ>!M;C9X-bat{Pl(6Sj$vKFKS~yQgGX%W+OVvze;ZBE2YR z<^%3uR)5iu11KNV?TZacqMzBNW*)&hV?T?HN+rvjHo~=R8r^yHfN%V-Rb46?pp(oKUbhQZYmqLGq0Aw@u+juE$XetomZaZ!;NFN z&O-yX?-d7#^RIxup7Hm>b=j+`pOpcnES3mIW1?V2Ow#O*1LXYVM$4l%t zanK})mKke?wc%`}?>z=#_-o+3AR(0^s%WTdojeU}2~zE_YuL9{yX!gEdh1k=R2d@p zYm5n6UM=#)xvx&?n6pycJGr-a8$3Xld~13JB5O{G3(IbPV`eWvox?QKlnsd_(g>^SZ>T_ngq z7xuA~1%irbhu_;081>bu89H=9E%__Jbm$35k~G$A zh8+b_&L8Kw^+=6zrY?FULt!LCy2!TDfB=MhSl!6j*H z|0u!pWFp9AY>+}M&s2Y>qF($1Ue~DQgtr2N=Z_m zkNi2``^w>q0x&MtLuxrU#)Vmhbcsg?cOj@`IZtD309JqpI*YD7qYiK46$pOZO39*c z(HY6_x%(?~iU8R!53qTh@&Snr3iQMQh?-ry>2$qwJtp)Kgq9}s2ROm#QRj4CVcido zp|W@u9WX&bm7S6|p?12rnU|A9RG6WWf-OgnKPJ)o9M+S^ngP~%XU3WHy^V>Rj%p0% zmsjX@xbRMHHqz{?III|+j^H*3?wGTe$forCkwWopj0O(Pa`a_6MM;9as12+(-ph^5 zW5mbHB%2}Kt_FKmP}3if&bAS=I350p#&6>dA(B+qhm zf)Sk~cz^9x_I`UAFeu+&$@}%g<(XauW&=Ppv=S@SeYTuruMu2IEw5&6@WwNVukA^f zj7wDQYyn_G#*M@9Tn13tV8+5MpiOfJ`m%L5Gd7luqlnmfq5se!H%g$h^Yhq`=9SGg zOJ_BA5q3o7pyfdDe3-g0)}U9}Pt!tfMe=@n%HA8$dV0OL?(=&n!EL)pL=qzdU|;<# zq0_9dJn)t;z_x67-~;HwALP*6&`}qmmOj=(0_vU%MiTQT&FLBl|Eu;MG#d1+D?_Z! z_RVp&a1o;kT?9eP70Kf*KsG4y=`B3IBY%ftG9E*ZnH#LQ6XAnbQ6)lgZrd#!c=)n@ zJtsyPE5gK%D+ssb7G*GClJF!9mPd>jU%n7(WVBHaK{yI=O-fVQ*ad?3Ua29$HfEw0AV+AQAwFYtD=FKQ>>V z^KNzz`?q#+9Eo&6Jgq!Wg(rD8YIZe=?+Mah(rMt;9i_Ux~}R%Y0qV5C>M_pzeT zEyq1+#6~5{PEXV*&OpBzYqtm3G_&PE>NOb!Px+yzr?Xj^s(1qy@gjUHBfG5fokB9H za`cH25Rx9dT&Lm4-XawG?B@&<57N9DjQB6V3S>M(^u_E_Ox}qR3}824X-NTZyNC9S z{D&G1cNJP%MiUcoo_t4p#(+!j%T3AM?;?qlS;;l<)A#Y8KAM2_U`O#9gii4>4bZj- z)rY1&d2~W7WaMytsT?z+K*_DpB`WTyw$tY;LVA+_{30pvDBj*}iDP!1m)zK~jxO&M z@Y2m7>v^PS0*oQR;#OG;Ru21WuYw8owa*ipdhaCzoI&U=T%Q(M_js__otPms>b| z?16O?@Pm1!rTAAaHHNfeG-vC|ULNV8J=5l)`&03#)Jr4zkClFN&$!&bUh02eHe>|W zu?~*ue19+viAHSz_Vqcjyp@On`nYsT8X{@eI_o#Os_KhY)DNHv8Q+yAVj8mkpu? zZsnTCp#?0$H58tQSGiUu40p7_FlInc7P^45?EP~fg=MRviMia~H~r5||9}3POp+qi z6vC-)0kddw)48&XG4b&%i?Fpnb`mxli=HS^P8+^WdVpA^`OAG2e}t!3xg_5wad;dU z4)3fjXAh2e5_jWW8FZL4u_L~i8H(p1-Vco34jzz#W|1(3k!aS~jF<3gLAUwrckd@p zk7Gq?;RairQCs5=mCg*ve}V#967x8agCqH@c(t-AwbagnaY2RWKlA zTiJ*Iwcm)zO6a5V?J;Z|CVPH|io{`&d=^?42~uqfUVllWmlZG)BgeVcK8hb3z$)A# zPf0mm?nchh!67ZJP4E^D{Xkh`5@RuoT96NB*NH@EgyQ!zi>U)22WvhYFn=m^@ z`0@Zcn5;Yr;Op~g;5(F52I1C&hqr2Z9i`KMb7Csu;k2Z=veJ`0UooT zQW~E4v}Dfhlx0$qLPohW#_Y{x{+Q79LC-zubiL1wlJjhlF$|CY5b` zIgFgrB+?2(`6m;gJZXZeJW&Wkb!zIP?g%5UPhe(@c-tB#%XB#cQ8>R-S z5S{V%Z9wSWhgC=5-Dt#B^|9>A1>`^mZEPv9@KJvV6d~nqmaOL9eNNQ{qp~<&o)FW- z3!ZrcYhF$ovl?p2`bhBr;b1PO<(ho~J?y6pX(YxpMly?cx?vJd zIloWq_6An(3`E^Mmm3Ww_FI-LXfF!vu{G-n9E4$huP6l(-@jzRV3C8C>0HEi^bMtH z+k#KMIFSt18crUyi3~L;SL5`gcoSLO?^7dtTE?-1|B2IvY-Umti^i;SXq9{Ig*FxYr_){kqD}V!m?c?Lenh!VCHp%BKLg0S<7`h}r(Pl23TnSL> z4Zn2^v$g`;g!e}$U^v4qOGtF|BxyWk8HN>l$;*7~AvZzM)vMbm$M8XXtqr&&{l(L; zWwc6xY7~#&J=-&9K3lXMPGUnsX2dV49icF_^aJIIRKI2V^xR7mP8}4r|09MBb z0oni4tI4zxx_6SMm=L08<4qLr6D-U4G4k|l8`ZWRyMf=SiXPH&k3VTwni5=bP z(&Pn)Krrw@X6W;=z9QiOcfN_Z{z;dTMf+G$i%%T0?n#~y#>&1q;rwfSzt=|8p8*luD-~j9qMdfjS^1Wz;KXc%j0E-J%lH<~ZarOM+Rs%~axc4p?0Q-*+>-VKY76w375+qkU#z(i4yg#T)6 zcy0H}Z`JYvv(hparx^`Uj^>q-!uMsg80nevAW{^52+gk5K) z;tDoLGOYFl_wkZwKQeu#v-pJ(PoNZSB>`Oic#G_Vi=h-(JhBu~j8*~ zAXB+Os?`9g#sA|^5SHx{g`3q&8O5(vCqi%)N4Z0K6`qAe&^0S5gb0TzSL!PqYM+g? z=$*FclDq)a_MAR$3u9?L+ea!qQhxG3Mk)to;=v1f zS91A8GDpy{C4xHFVHflh*rO5ItQWLFb}1TJHYa7U2E(T--1?0tIi4?Seu;22t%IpK z)(r@%r=uB)zNX;RyT;yYr=yq-*>Vkk>$G7nKigIg&69Y_22ADulRJtfAiNYnz@Vtq zBFo!j0LmEkp*gYfgmdSw~sN($kYmmd8a$Kwa184b|vUK;1X3;~;RWx#!1hYg35;bF+} zRxF7|k9->Rt{p%a)4Zxh!AvhUp^xkN`}@TnCiDY#TyRJUV2=?^X2tJ2D3-x>d8z@3 zwr47c%v7M8S3`kK1}(?FID-sJ@tXasI(}xL-5K^+tyQ{AKkMvxN{ZE0%Tf$23`dwK zGs>u}Oe!yr21AvdRq?_UGh<^UR?i1#2Be0P0_>7 z;C+rp@_QXI$UUckI4TWP7)e2eZIAlWPtY5pGJ(aM3h=8n4But*0W7S_07eITR@l42 zAR(aPAV!w*Ke|f!VoLeK-CVkT?ZsC=yC*KQ7y87izF~5&yqCxSaG}>@QS1b({gmIP z)*d7+1K~j6@zGj?kk+8U(?C*-2te(Qf8Bax&dGM8c0C!=yUf3MwnZHsc$RIT7RRQ{ z;juF0Y|_gHPwjwOph)L{nn=V7xY0(n-lFane;47G1#H@LuCfBo6IH?1v#Q(3Fa5`z z76|HI>g)R9ThH`-c_ius(JZ(!Ja=C@+lML{0?`zCcWuWS@VIoLykkX-O{w_xHRZr~ zZ>+*8{n$L8SzVPMsF?3+_m>3@w;?G}&-P#Vf2+6@>IRcTYhW@W!2$Qz8H6tdI$6F@ zPvX-B1?e7)s&aru-DM9}2PdE}qCa`P5FwDlePTx-X^0a1!(M~cMAH{>27)QmWz`gb zoVCc!(4XAuGVcAL;>~ydLSJLyiut_y5)f zV?FfkDU2nZg%MIzbSCkqyblgb!d(NOXl1#d-`$O>T(f*uPl1u>28e?@!127$=J*)> z$f(XGXax}^q!D0!XWiIPIBcj(p_N7ppYo$YBT49{fY|e1C*B4jxgfhr^w2p=@O!O% zV7|WC=r2aR!RC|cbaUwl)U;7Ji@^|k$PLRs8QQb){dz~d{mE*t&kwPeB{MF!&4`hk zhWQmgmNP&R@2`G#lnARU_F{fFhENsP5lPOJ71KFEP~IR?j}NL*FulY8P%geDfSCuK9S@ zvD5e_H+R3Z70Z*pBX11^I9mhm%a(KmM{2H;qi+b=nFwmlZAfr2gAFv-N&aJ?MIpG( z(iT352Ie9WU8>(b$VKh}Iqys22nOLn=67>*Ka=TCSjQsp-e-idXW|nf^Q*zMkXspsaGU@xUteO|I7}I_zAf*Y`cdT+ z_Q9ohu0y#xuk-czsYMZDHvc2wLO+^fus@`T1}@5@o^%OqWuhVcARLc()TledSdPX5 zbOu*35IH-6D`pMi!jgj}pcS^yURyti{n0%O|`TFX>K3oFJ&akbQ)E0I>DY;FaK?d%zNprIV4L3eKt;~Vv#D__S z8Eb;QN2yq7$o-l1D3Xe?NDX}#HR(VIF<9SbTOQt?y^m@_p$;jMK^lmTGSgrQNJ+=J zY-i{|tcN?mCDRQs%q?1iLwLszg&BOI{-j_ZkxL&&mq{*iP6cvxhLwIOWR1tf z6B)yO@3on&2O|*ai4&_-^3F#JSgEK;B3+)^#?OEl@H|<|W^?O(6|YnnY7AU70Xq+F z9%5X4GrqQ&txIAp_{^+^PowVLwits*!lEbG!@a4;m0mbt!ic2A*c`Yda`bwHJs@XF z*ORr!u=oBqN5MY-Uk5}`F5)C67EpH=;7=98)>}U~F2C4|Ns76iFv%7~$9ZXA&hq8E zz9706?@${fRnHQ-XIcf=wfAUebTZjvIp{N;)Sa%7EekEyMrhx#?o&(yjVNU|?$cCgekhyJekn zPbk-W={hYq6RnPnH=B+faXrveHD<$Op!A3Gahm4J6$o1b z3oyF(6V;^xU~NBURq7;%rA1fzvYvs)FhiHyy`!-vV31pv`H;xTcN zi|re1LFbRNgQn>@JepeXoSvx!#CIG$eFsP%e4g`|5+ss!%Lyc|h2eNk>=d+Y7cNYSK9}LZ^I!&}hSfyayI9%|Op`u-wQkm=@5BF~)?TbN;y&^NxE;&J z99!atb!LJ5AnKC+i8_O}0~h7qlZmKM-h+P*35%RbJok-vm+8jBdPiaHXX!!xqXGm> zyMiOE*+|-z@0w%#(CkMO0L{LvgVt;w6dDz5sy@+H!U>|2*W;0`?$1AFz%ptns2T%a zePAU)Yc!?7iKPxf;PuDDq3=^*1cTfFB^-X9l82w)8I^B$C5F z`J=RVDQruyDYGU7I-oj~i$QM`NqrLXTi*wq#eGx0AwcLAEf2k9*#<(dpYq=^MWU6i zK@tX1K+5g|TVw2KU*@TXRrag9;9z8Nl6mAT3~aWjy58LdVBX$s4IaiY54D^acJv@@ zaRqN$TIRvXv|sM}$59=qp`Wy$`nt>>q@rxybM+(41_x_mCF`L2+JM|;htWK+&qPeD z$_Yavj)GG9sZ_hPBe%dw)z%C?JwEV^j6te>XmTGhxLrZKJ7yw->$nfvi(d_ADWWJR zqwFxRE2~%sv8Q(xC&+5|RW5;>_}%^!#;bnuJZcd?NwE>WCJ#>2Gs$K;DST(0>2Ki( z99~uZm@aa|A~F+ek-Fd&jDC1KuoKs!`DE7AlMEmAf=Xt0$G&?vU4uB@uAh)U;Tl1Y z5sUSz0frW06EpruGCXGz^J!i7h{z{Mmyo_I+NH!3#CmlbxE&l|I=L~Zed;oc7K`iD zeK`l^BR>ttoxne*Cqvda!MY_K_gy0l2SuB_Gv)lhyr`C`+ZH}{{_q>gXeMR>KvUwV zcy&9XnNB8Bxr?Slib_0c%KI5QY5v0P#uoaMc2-4DdRE{D;R7!rH?R@+X1I8r00q}~?a^!c z;iUodT}c{XDkT-}5>9XbdB( zI#R2!!2+Y0CyGeH22lwbq^YVl770^O#t<$A^v4@VI!21s zd2}A0CP$(wzgfc+fxJGN7STiwxs2(b@qc|jfu$aZz{ZvKTOLOV zDTBXFGo6XJ?IZZMW9QJfD?B8v+%b-tZa*1heKk?92xro^A+2t?)9!;rTq~>EecE}Q zU&s3YG=L3Ujf_VF{J;5SZ@QX>F*u)=P@%mtO-JfWZjW}O;bHT>l^6^1233%g-LEOe zf14`BOyR103F^yW>(_*o+;LY(&0X~pm;6%Y>n$H~sO&2uCDr@4<@|7l`W20etziPW zx$62TxV53&2|j^C%n`60Xfr{q!^HMSv;uCNm>IoLQ(pMVkHkNzcp>EVjmOA zcX&Y=SH`egtBN69t4U=(H2yP2KH<74C(xsV@8JRf{Cy3*ql)by!1i2#y;ih(ZPTgN zz9SE-)HwSOJ+^#5=2A!AgX-ZadLD`=033BbZ9{MqeJL8Ypj_~?U`;4n-LAjG@TKI- z+O#>6GC?o^6xB;?#ZKem-m{^!=)NgC2GKZ*qF6(A!2M`M|K zJR3X98-)&z#0l`M0N;8PSeKh$Iu>4*Fr}F;yb^ULS;b_bFMxd(Ybjkx!l7m1mqyg{Z zB@B;Y{=K2gQx_4{FTA$_M${;H`3hrFLC^_uBjsmiFZdQ+Sn1k&kN@*i5vGJ9ug5df ziW{+a(0ea*&F4J08wesQyNl&lIzihIdk1J zi)!YfLiHQpDM4IE^;W%fFk$19#PB02Ro zGAgJ5Wt@T}BnY50jy)V9yK(OweeqiD;3v17EFZE_IrI`UU;uoFU^nHWeyucUHc>jj)vW7 zoUyqFY_8w7ouquX3!M>(4PZuHV8$S7a9Dnx*TiI{+>t-+`4S1=u_nn;Xo=KggjBlT zjSX7Q-BLaQ@qUv4T0ZQnfC=_^h7+8_WM@t@ma>pnd3;FzG=@wD{VSeA?+!siIobW| z-h$)mUj@c~*kAa__uHp@0d)8gdCIf=E%z=@GF*}~YjT=L$nkN3DZ27gR+47Lq{zRq5w$mh! zoi=j-_(`aSYOhwDRmXI`~2L6xBS9I^8}E>sU`6xnbdjdTwj|K3?-tzbbPP?iKwDd}(L7yPx7fI~a!VmD~z%$<{Bo+%QP4}zP~ zQ@}c}4(JJfV8yK@oN?a)e-TwUTREp1GSr>T8D9o3uJwNZp|J7RdPQc#VmUf1Zk8DUkz~yt2A(enZ2maP5u0C8Y0p>=c4^22dD(60@qQlD3r z0k>g=4V;|A)_J5b&7|IMtl(2=$qa`p0Opq=fno;9#R2(3UP{ccY&IeKK0OiuIh|AT)?i*-+|vhUjwaQTXri^CSgZyKM?6s zUYJ9vJp7#=9=$|30Xu-%Q#XY#PA7wgMa&BfbHu_x1KPTIz!P@9&ZGz$KhApge7=Vr zBW53@hD5c*^XRZqUxB)gIrS#VhEAF?4v^MK+$b0W9w6&w*)w$x9>RZK%PIEQ%H@R4 zRM=w1KFDgvb3`Jx21GOhJgJQNFcUAkGOP~C71?I&W@{J*5=j)e2*)9CFyuI3A%TV> z#NcLX3AhMEMkWm}t_hfz=;F5DJ@hpOXXAO}Ap+JXJVX2KoaeUTbabpO0)&|?(c&s2 zpn~#_PgJ~t-u17slVyZ_*6RhES0OsVNplDU4der_a&CJUm=wQ;XdD13Bfi7ns3wb& zU_4&fLa}H&JPPkf5b)aG6L}}JWAzISH-Nv|4cTEF&?cL)@aV4~#)a+0C4KfgxCn%05E;cqcSD!xb136JHI9K=xD*AxezryO&3x>QJFLFY} zXaZ2%Y|5D9T60iWZ1hS@+e`2bU#1$IwD@MmwhjkvC)6C);DvR(x&l*lF69RBK zCoriK0W#2FUi=tAD(Q{jR^)z_s=l;&A=@lMdC6pN!HhkjPG4#JT{CNTn zbqcnpQ-0bR(bO8;lVD@PP<_jb8ZaHuS18E=IzoDU_@RR*5+jg@mcpGsyaGTHVu22Y z99KuTaKLvj)4c|OZhYEat}h+hI}Rfv&mc@S*y=}uPs-{VNXWWU>{iq1>SZ0}!U%+U zy-0%WN`F5Z5IdZXxQ1d;=Ru>zJ1o4Q5RZeYhz9s}P1dG9g7uV$U|*1uV-^QTxW)?_ zryTjn=Nw8XaTKCg>$xX&9&1SgCXbZipwcvzl?1NNF=YG%mH1efd%HV&U83g3&j5s@ z3u&G&6mku1>@kM*oqIWN_l|wwPM79Dox4vy!nLgcm@T?`+z@1u1w* z@Q8OK+^i@Gx?|iOr)U`K(-FcyM^XLPd>OBGd06i}!we0}i%9}Bj%f8{0bazi_H0fJ zaCO$lj36P`8JYV43rZcCYl0-KDXcAfE;QmQSk(tDy@bYL0sf7*%!(Q>U;uVkg^z=y zHQWEv0>_LHa*5sdEl>T&B@P8-CCO}k8GLTPNaYRU1{fVtgh~2Bf~>)_ojOs+$pLQ*W=>qpP?I6lQt%y~aKw`6; zfweRwY@6I&{oyb!$Cey;n}mH+oT6a2Z zIgj3>$2ooRrU8uNs>S)`kOThHZcU~!JGVw6Ko$PuAtYqIMquhgjmhEH)49-ij7a?S zfOhM#F7tuDVCqvZ!>Dk1Uqc+ZCqd9TMFLig;?eJ!JMWlmC2G?rV=KmXz%@(6)A@(f zMC`X$QYv4!Kk*}jJAQ-%tSJlfP8BE5d4)3e06H-z@ zGL(kVLUt<)$8LSVkD4HyJ8+tC$@+YWg)Ltd8kakEbx^SsYs04HFYfnm=dW08!o(t7 zEwjB{1|w0YhlQ!KT3ni`Sj00FD7GCC^3D$l0ye49eqYC~UX)V01Z4z*y{CbdVpr1a z!onk&6E$*QQg`=gd(#xg3fd_GCE5@lk7$H50yad6?GtcGLq;x(>9~7)dwC%vs#lnf z9?joyow?&1V&ulH^y>ERu2*DKlpa2s#Gi?l_6db|`kV7GA3^+gkOJyrg=1bcJTJui zrw|*wDzFv|bEq>Mzaerk=d`bCTBbNja(W6yo^H1CS4F-5FRl~}2~AIeLZSxbibR@G~<5ApK#+<~NX zU<%s_5V8%7pHY1zbmC_jDjfL<`e^j)E$hwkxtI6R5M0mKu@$H^4j831Kq55w8_L)o ziX#q69h?zIJ0e5&9hoXJCa>7@dueiTa}%FV%gN#JXe)o}YZ@)GT{07C(H&b?3-e6f zh5-M$T!W$v;k-)0ivsMpZxHLb`}D@C1T!g-`--mw$j#y0cmxB&$0H9f_}-$YQT6(b z0W`xFq-!zzdZ*eTM&-6~0~ zibmofFLp+k8*`11^T%!_@$g2i*$WAt^hoGmcUx4c;|en2#v!Ly0UljcNnFl;M;tqn z@{~kkoVoL9oO`J+)1Wz6XRMRhOLFELV{@3CYfQ0$Xc|UQ3LXNq-|bzsg`?$<-a3)y_)H$wt-sVud;)rW@v#6*Dxh#BEt2B{1{x24*gGmna&-#Na`RzjbAHrickJxcm z_f5>5DdV)oiVg#%MkX4M7WDYP<|fFCSV*67!rY_NYoMM^^TGtly#K^f0x z>%7eM=vZR(`u(V77Rgwz3F@0qUIOzV$v&!d&+Ak98*8AzZvaA?J3qcYbd$iszcKwL zB4?9>UAn5zZXsEu9Im!v36#x~ZnF1&qbdh}BX6`#Gatb5XuN$hSp>b${Ox|uqsLuY zlPBlnQo+ z3}qWJuWeP6T|4h@cvEa3Kl)hP%dWS|?iUiA91K)@@+hB)+L``!PhFAO`V--j_yV+J zBt1OT3BYTseoOrU2n&A)R^au#J4(Y=vm$l&VFUNYiOs*+EIz*pPtV5(9dZH$hPUaV zJWYUcPB-Av0xO^Y_HF-j_&5FlR{^V**LXCgKx4v1W(QwPMqlk_8f3J z5ys15MwnW3oNGh<_3nQ?+B@8rx=$(<-7-6R7yXxA=9n_ny4T~ZPhBUxP-v(F=eO;S z6wARsaqyyw8`pS>-iPzc>wXR|u3rnL;~4bK&u?>lJ5B(bO*j1X9bc0&;4n8gHw$$A zzFoj$JX4Qm^tM~p8_-Znm`VFp+5YVViA_x8Kt@GiP6vgY@f|l87nk=VPt#!sp|e4b znBV@mnxmrYM84!NKgv>DKUg!dOz@am<124x5tvlFDRXIO2!OmnZwDq9h~GHFwcwjK zAHhS=CM)!hzUz-RY$7301m3F6Ki_JV9=uiOBEQ(SzcN?Thy1prE-S8rF| z6bZrVc~dF#??5 zV*`CL#Y^|esVMSk9`r2^_iMCh-h6Yg)fgd05C!w2uP&qB6q%=hQNNnH`mKS-P{O>1 zBX2H)_TXC&UhHM!)QOA;+;ciU&?R=IyK$C9z5DFs1@D$*&#uk2Xdtx@SLRlF^twe# zc{D$~BXRJ995Y1l06*)uoD`shswfs}?~7$FlQrcbp`k{J|FNpDKPdt|!^8!xNti!Z z4>|UqrY&$kecxwe;$)^ZMx5q{?7%~2m%nakBQ+}2G_R+I!<8Qml^#1eIr$k~S0N!G zWU_q+oS${ipLcoWQ1Ne@*$xX7pJ&^1JQQp8rvHx|{g%gR(YYZ}(wQBzvL|f@$_Rr^ zj^1Be<9^hw-%%#Wf3Qko1I6GSjhyycqrff2#HFUDULFUMs2cDuII&pyVNxQZcqlNC z9AOcsZlb?FiCtIQCw@WL!=&jSpNRU;j)-)$oo})@9b@pC~2OC0Msa>*3u+;y}~fsT8@x#7ok)5%Y-@Q*OYdQN$( zG`F`m4zgBqAcdZ$p8ZT;!&w{!fH~JDv*@OJlv0|Lc>-ge- zyIDkhK|@0q5cg4yZU%@ROU8==L+t#|J;80D<+>vUJ?qP-cu_E2$t#}#isiB6HVbt~ zG?+`3`-NZs78K|jjqPs?P;`9l$5`aBxGLy)3Zc%V?#Sr;b^5<<1Qi_$TGf;*!}&Hf z84n&j(EKo3F!Sk?)0$2Y4~+I}F1GvcOd4QE&iB(QC}cml(QLx<*AM@GJLQ8oaEgMV z&E->hgLpx8fmVM?jSX4!=QU6%dzHn6y! z+^$Gt0x_mJj~=N3yA3_XTv2ztuC6Xe^;mf83*e0+si67#Px-R4vgpr2PK~;ymDM94 z7QOrMA$_(QvRiF?&gq>5e3Vl?(Y1p9!vZUAkql$H674zEIR_T+d2+;V{|>vbaB<+X z&$(soTiyy7G~(edRNIiO z{0e;})yG3fa?Ro?gV`HHxIdg0~4gAh@jJR9WGguosqJW;rLSUtoZ z(v1+n*TDUKVT;z*>g4#N>xK6`(aTwJo*#)nc0dyyUtBDFdrLuZvd+6ynf`CP;IHL= zutwct8o?P9oxT$pDd83!8WPe0N7n*)*118NGrg2s&S_=kP9#-XlTS|0Y=(UHPRil0 z3e)Sw#WuXWyem?5{AH#M0h6hHz(ayOLaDEDSHmRKfQV-UxqWAhpiK#0Z&6|AUX z|6+#ks??mfEv?}iY<+mlJfOhWwjJJ+$;3PeKO?t?C3-FDT>Ghlq&pAhxM3$~et&>| zEnE1yHMIJ-ph=RF!Lr#iKrk-_8JPI;!x)~501qQj;WB*;R)hX9*V%hKNRFPC+ZM_3 zmcBmi{msmu1dCae9t{BUsrLl#u7j<+x{1lXi})dTfYwt`Yy@MFItNrSx}=-&lkUU~Y|buZg0-f*vtPf9-a^W!mXvfTO* zwAe%&BM7ykARn}K2aoALUj*Ib4(vY*=^-zLtvfKcapT%8;SQdmm!aKg20+1q)%Mbn z^|$?-^m2Y)VV9f6bD%rVH{srUb*?iXhqWa6m}$Ox+NlareGoFh>Ck zMvSWx$UC2Rc95+x_r&}_V+vQj%pX2$zYe+Ij=jn=Ghhy+uU5vi6+Ay(45fw|z|?wE zkqtlhje*$72auG=5npd1#;yC4eRlz=&*}!a`lwA&-Nvn}PW6(Y$Es0&MiwEmZB{kn zgm730Ug8NQBD7n}jLASK{v~!}Cv0v(H%h_G?5s%}d`4bAkkuZ2_^>)qxE5eG`Jc7- z!OeuuaeL~TB(I%MU@WfA44{nk`7MLE!SZJ>+Ez;yGdn2l@;fbBFVyt-wcQ?4b&K{_ zRRJ$k(XG@e`e>eoK07MWjise`$)zW_4>dr}Ff6dhn3$MQzFWnhN}Sl3TgW-6=nj_Y zpD!j-8v)kJF>eTnzk8PtYKbHmUaJDajb@!MDZ2Z=~Kcb zFj^@PI$LSX!F^Ci|Lcx9tIxoaKCwLyWVu9zI!T`|_7zVBq@>1d&Ec>sHd@U^46jy> zhtNd`5v1EVt-lL=1IjG|mS_@(_U=&vu~6$}(H*wNoSD@v?}hO({rn4^%}KmRV0eWuyg?sd-sS8+hXh0T3a4)THK` zT87scxKf8JC=YRI`O!xJ}j@DyFYr96G$!vac zab9+Pu{ddlds--w@?TSugJmzl*$?U%>UhGz8$i|JkdZN2ctt=+7>8^!4k1b53Vw8A zR}#DVo!}rth`}T{I2fUcBc}r_YtL$Jb8~YA^K}6Q7C7hh-CtHii*@4i zYmQ;=jhiswXt($YkX#}ZM;eBPsh6IK?jY0SA9AJOLeu(eb9-BSarl|(Nre9)fS_#* zeV<<%LXOCP_7(>p_$%`Mhd15JT}Bk&tw9853x*MPX?CyU^g{eCr54cnZmbj(@y*V_ zTIO@4x|qK6kPcZYVknpK`C_m7N4A zenlhQF692(=Qg){?F9b!kDj7f>jC7Ox&8R+F-|7J>ksivNs`5o<&bomL9Hat+L-(G zK8TyF!N@8Yvmx#I5>8gU@G*!07l3rl?*3zZeCnY=ibFJCqE39O4%+Ws%oTE%4JmyK zgi;C-WQ$Z&Q&X3G54!8Y43>52&Ra{7-pqBcjG^@1NNyO9F+)Vr5Up1dotQ`!q<*D) zeIciT5!y{bdtzFl|H~;RzX~LgTsREhGLb~S@NjdfO}giG4h%k<;_iq2cnKWl0``;N zY|K}Y>FYN?{XMtGu6l!ECiF;5s{Bx~%{dFOhEtm(uM>sJ%VuIT_^+M#Op~%~}6Glf3O-*ABTJ#HLvr+%ixBuh!{W;Okjc)hOb`lq{BUDniB zQ4on$Yg-#pG-x1^Y()em1sX7Y_7ohR3&gJ0$>ELtAN~**xtrqx%g{DzYEU z=4Hyfft0I%9jX8GmDmsHn(LqVfUEJGPC`&n3m9Ek#FozSJMh)b-@>dJNCru;jTsGj zY}tZ}4B2uQ_To~4+Z>8s*hbJp?UjVgr;wHh)WXSNvDpnZtpLnEQ;=L5*_{b?nDbyx zojO%M0f%M>5FrYlfwxPBVDOoM*>@{T@856n+IxM~#(8rfNRUT)%Rg|PZH`ZB=zcv| zgt&Q{WR%48_1@Ti_w-p=*|n5!u9b&zm2dMI_}{p3Dzd>#=b4$-^-9k9JwM8KbFBb7 z@9utG+%u8^>N6-;ZBY_GpNphyfEef3dVv>i zv5mL;WOzqiJ%`z{&vxwc4w_ui=aW>;@ZUI|t<_U)xc5HhbDO_Ht^Ml<^<^&O7jLDC z&(aDQ9ZRoV9DAmw{P{c!!BPIOdD^k21F<6U`ZJ?BB%lmM)Y0u?y; z%J}Vba&kJdl)@2DaK3wq9_G)c=3cUTsbJM4+`O!x00D8t>-c3*e$uy++zIul``pH$ z-rp$OY+cP~AE;(+opVpl|DtyjwnrbvK&9@yY1paD<0E8z+E7JU3JweDYX_(me(~N4qGHBjVo93S6{y?TnfCN zHU?nn9X<@xMjLsHTZDc``zQDnuo4Ue(usa}Ep8HP=~)3nBYaZ88X2>@J!14#pl;~Yds3!&5A zz#k%2XrG`hGKD>e^i5jHKLOEs4b*Ufez{apYfk!&(YJ*&v!QRe>*GgIEqD5TSCIa zi8tIXWt%g|2)h<3lYI&D^`gWYNz{pyZG9X&4?Y)51h{xXO^)j%O@_h|m^7o7Fo~b0 zV$h8RoeS2w;jp=}5f2^E_(Qr)Ep_!1T|iLIe^w&rwCoOA>=hbKtRoVf!%40}u>oLt zLC74Ph{&;y_dy;?4~lK>GQ_7kXlQFoG}~nLjE@_0im9xUeZl{14bugLO*h$(9XoqALndz#$)L~Q0Io8BTu0izVY?izkNv1!3-{l5bg9#qK17=a zw>a)>eMACVMQ*{S(>0+ivCkt+^z#M55u*5-atHPI{TOO9!pM5<`%?T*&Su8lREfT5 z(D#M;M&a;NQ;n_^;*@^fM?=QODaW|G@31jsd28@$_)y-g2q^Op`t^&_GLA`gK_vswC&^)1$8+s}8mC{bXM5eDhpC zrc<+{|6c8v>bQ{e)0=o=wdc*{qluing6v>4va%h?ogv&x@`KUNi&?(E zvEio94q!6kfG?4hDZR4ew@%hMrE35_XdWfu2HlOf1jw$vj+KiT+v9`_LRP-aR06t#{+wv zG+_^)$B{ehj}05Xt&w~Ajf&LG4mW7Kq)EG1kZ!RFK*i&Z!vi`x$QxZ zK0;g@F!xO7htKtwB&IAbNn0=0nD^d&`}v+N;}gbJzeC>L$8I#J!}3>g3kB`^s8x&_ zmxCHZf`sF5g?&6%!FQAGW)x8G@q_o1!Qsa@$t2|`{J!% zkBErqSg!(#8DA?k8n*|ZjaW1ML34xCw;j(<$`~(i8KCg3$eSCAxOvFWrvYY2M2R;J0!xs;)-Q z&wGWn&c9{nsBQZ)6adfIwQatA^2B*Gu)7Uv~?XKua->4JXHLl7X z{U#Tuhn0@CO|B;n*xd|P;6aNz-Tg1`d<(t4px9KTDy~XBn&{ML4ATK{awdP3?rjsT(K{l#lbCc z?^~y%SC;M89gA%+(y;=JYBl87SCCrLj8S@mN>Nv@(5pq`t-h~a7seJy2xr$_EC}df z~695|%rR|rg}%rz2JL>+RzMdCHM^5j$-vG}LY zk7?_uvDWqlp2nXv@uIj$1?PS^PnR1n3YtCMUyjVxHQLJiMoh*p$oeQ)`Pno^^P1GF zlRF=is&6OfS2h5q^s4oC>x4L`nBIufgn*qTSc{d~z3eNB2ni3R*TdTS{g^XUkp2F7 zv#nc*NJgU!4=?FL=V09VL*A+|JbJglPfC8~%}$8Ol2_k2gwhBG~p_4kdwRSjfH zo{#d7iD(QRr2`Vfqtncz{Big@oeLqinajQw3VM8cC>4CuHXR2Yr9SMSF?`V@C*bx; zjvURl*zgMD=ZSEmC<(BhXc_kUAKS*|CSDii`{hU3oCpLx`eb*OjnkK4w|FbySq{Oa zSo_x2)()7NBw3+O=wQ6Pifcp!_;5z+>WVSCfhrK4YoJfjxw&)=v^7U zaKh#Gt?SPFcg01N0;0{^wRJz=IDWmP5hqW-{1zHN=>jvI?Qx~P!Lx6ejY(YYpIG2i zjhw+m%DQ)5J`!42$AMjc9DaL{bh7wiC2!snhO?&(9+L>&;S|}AUnu>VTsCyUN|S@p zrh@>o0ZcdoNuP#`wZ<577X@T}NAC33H1iS9jdF%ZI1DpVil9x<#6hmjfy#Vba zVot4Kc$~2q=KNi7PX+Vx@~#BH%&5CR1Md|`A7*9vNB$0?bts|W^WQYNWc9P2dGg~c z0yBn@^q-4e3Y_ZJt~>Rm9vbdRByV^7gZ>zEa}gmGRC*HgJQv1=>Y%>Z6+RG?1`+J!yp0Ht0yGL!4UR{U;k)G z4-+iDi(pWfN~xFrq1uhKh;Y76o+lTWJoNs};0T&`uN)p`qD3kOhJrfY_1fWNR++?C z48i+xDa~;T90NaT!VSX8Q%mgnm~Xq9Mt^h^V;QtVT|fl*sm zxjz;w(em~Si{8k>$WDq7_eI*g-a)w+H5#`cNAcQPKbX51lu}tK>NKts=D(l)#dlxt zNplVO#j?B>?cP8>yfMhG$X@r@!M%&>Sz~FjX z{p}1cby<>g(>rvu)6*3nArr>nB^_mE=veHoNuSYpRZw{q-K58(tL_oBC>1*41NFx9X1S)6CD0U%CALy}qC_pMgM; zqGlS)JvoN#MRALjYf@g44#zeZ_hml4rM5Vferx>AvvtwaCPk5rccyP7E_bj8OOC=+ z0g2R0&De-XKTp9CuUK~vTR*XMR;7FXr~myIhl(YjzNzF0#Av_mNuR@zzpZSTRl9Y1 z5L~=kCkRyV`fxZf;cpI$Z})~t7efktz8}@IeP^Y3Hv;^(!mFm9laE~PO9KE`%i2nz4qAnS@oWr@|VdFhLl{*d?^Z zBg|JK2L;t*g`~|}&;kyb&^veSs+RgGD6n@gkN#b;gq0w?*WlV@Sv6?a*R`_65M|ZA zD(fb7d_XcMR(Xp=0@_>-vEdUJhNcdM-`Vfq8B29Pb7Oh@%^MXASC=D3Xl1B|evnSB z`onPbXO)ENjM6s?%`JlYZ5c6?^Fxh((M&P%58{(qiv;*K+kop8O6qf2veobb3tQ_@ zn+ZMJn4CPhHA5IAtS-!y!CSg_ z$;6BA%FU&a?OXjYl+T2jyO?=t3JM(zQIV0`8G*D6GCH6O5V8uWaf!f6OG(#VxE4Sf zaRfNr=Z1B4b*Qn0WTnVrQUoBtG;iz7rF(Sc#Qv|WY0Dj_4v`mhl*MO-b7&1fXH z1&w?D#CMjE9Yxh+JwE|+=^95*e==ks5mLv#!H-WKbdCZI@Wjzm6$eZ~K>Gk%C@D!^ z{agvh@#x3t65pak0V74}iWf>5ZV}OLC)-9HRkv5=y}eX-^?o3Y_|ZydJCXLob)pr87ukAOKYsLCa-1DOj|ikb z+P?wJng@UwG(LUP+*wPD>v-+OMi>7E5@VFVSIY75Rc}b+YB|L#qy}Zib$tCHR%d%< z+3f}Iv$bBk5a8{91t^vaa9ZjRkzfhjX3ep0lcA(vfv`XrZ=@vIFU5A|4jrrHz2h&c z$*#^pgLVCJWUq9G3Z4*2h&wc(pD!?2=8QhYn}iq%BA5a!Ct^5?m(0;^At1^F&l2CUAVH(VKc zRbvpgioYbuPZoPckFOhnU;&tXIWq3Py+0$e)9EmdW+Y@74A@h+TlRigxTNlrnbFEK z^t$*$hTw>=M)svBeL5#>^aq!DuO&s8mQ4bDx=&6 zil>@1SPQ~J=7jHrlYTWm9>GSS5Za=rwEF}`2v9e=`S#7QS_us$vme74^)QQwiu%RIop1(lTRPs0WQ>^?dMWgLp;T|#5;>&)Kw}6T`zO6Bx{y*$}cR1Gl z8+Jr)6}geUM<|krjO-BEdyBHAjJoZS>=oG~$_g1Fl#p3Q_DINKHB~h# zTpP--Y+B9Jj@F!zFpONWZ!_?yF?r*VAZlUcfAzz*pycImUz;(4H_w8X?^KJ00&(Bcw5CFs@?nnQe<}4HD=-#)#)X6%-Ib z7rhk{r(0S8>CW!AUCx%TVO;*(lpU1#;)9l5)y>Bnv--V$eRcBEvu_cyv6?U>U_DG=YnMl^Fyv zTV&!FgMY#N85VHbnEW0YoiZ; z%+hEonO$iS5v8-FjHl?(M8cCKDcSIrW2$T{RhQ!pUU(WFc5^#bEFHq5e``>QVu4di z-|Xq)39L`WJ~Y$=-941I=1(MId&H#1X7yXVjZjY`Z)==Zz}}u!-WQo^z2u+<8%}pA z4Z1Rs5>JGIFnLN1?DA{l2Y430HeiggV4(YCxgA^1GLZGC5{_}zrkKo2aFg{+?o$DJZ5jXk_3*^JUco{*&NPG_MD6VH^R~D z8XN{wmDjIp9z1{-5HBH_p?`CgV@1DJ5Yf{87`UukTiqb8Yf2wEpLr zem>lFpakBG#x4BqUurq9@s82QEURa|88^H4aMe7Xnkjwb6|?NM#fqS#)YlHx+x*0D zezKq{aIudHIv-gYgyi(+XUo+(;!CH5LPK74wOW-<8qOgcIVf7lU-mpF_|Eawjp<)s z9{D*^3aHytFu6|Q7dUW?5(k_p%es5Akce5M0qaj(6hdlmW^Bl?5b>87uZJq>lHs{4 zU~RlZa3~yFE}G;k{qiZlpo>4g)f^il(KrNULv%a=QI12}vrJ6V_-qGNp!fU))L74I zcXTZv0|t?Zj1WWA!-+ozL$O}r^%Xlz%eMw>ja>&~!Fc-C{jgsEy8_F=@Rcz!?*Fs&{OAZoqP6+ru2paqW&WQK__ zj)>q5yp6ePfIy`J1C*kWY77p6YvI)CokfZ;;8EXU+5t25hyQ%srND#boy?#nE9I#03;u;C+KB1|wPY<6 z5xG1)J^M97-9)GX@&~0lS=xTzCg@*76mCx@U?2sX2EE%@0G1U1e7^>5$}(azNBk7F z$L<`<0BpxsMH_YVI2!$3Uss%>*kTM34nUd|#RIKCe(XLF-(ZC;rbdbe`VCTJW3!@C znU}YKpECue`1?>rtb{?_*PuaOrY}Ds`IyBqIqK#RJ0jUN-{zAn~VRVTg<-GYdk*{taJT~4y;U#nrM!aW9AI0#vLuYUc^)y2L zOJ#nyeT2Kp1a%q3jLSF;vn_)0`gee6z>dZX8{5LNN5_+SAxs8@K1L(tB)9By-t<{c z4!dr(dnK_j%wsbZad5Wf!?6g_HTuZ~uy7|NKW%Vk8=6hjDzzX7%v^D!IEK0BbKnBs zS%xcEzgW}nERG+%4mfO|?kz93Dz_#F)m+-$a_mmKrq5yctjdkk8{#1WR_`!-iYoS} zi2+#D3s42h2W?n#yeeFVt0s@A(;ovYnAzlAUI!!s0yR0lg2qrphwY3ekSDaLr%^H&MuOCe-Qku&&}2V7DML7S04{JR^>!1}yG;+$|oWr$;IkOqS9p zAn|zqY~w*Qom(3w<0XG6HrmGk}{=+P3T)a7kpiQTX8%~*b2;yWui zt(kGc@W7sw#G?c5fd>EXL`Hm%1^UbpN_Ed|nbQqT6bFPhKHC@|94v+%e3N>bQIaAs zG}l}XphyOb0=|KXbpVv*)Xfa=QYT4CB?VszW7Rbaf2n#jKfWEUEUG#{K~25GrB@mW zgesUi8j}yg*LNe;j$ht?bsjFWCM(D=#6TS<_l)e)Aqim&eXTIgI^?j4dgh)%VJ@LZ z#xtR;doo#FtEt{xRGNrFQbt1BTl^rBz>HFw9ISW0vSj2lD+3@c(gSPF1-X7QGGr+Z zwCZwPp>>ZWkZB!q9`ln`$5Y{1KTzh*ozWwT{F?mqEPuZf=yCUnRb4T1`*dzv&^PkR zW+=KkbS54cSk3O6zxw>2?(XnWEI(2S+gtj0b#@}l4J0e@k*$Ez9cfEEG9*cZPpM-w zDLka0vlWbM_s-xL{?sY#L5%_G1)vh^rc&b^(E%5f3FKVLZ3#Mpsc>(r@q@DX}1#bRI6~4Rmb`DI8q&)(+suOnzip z9TH~FGgF2crp_UipgZ2WzSApyEgXicwtB^KWXk)kb=36+1oo`AtGOq$ zaw-W6A(XqGa$v<=qrgD-E{&w+qx>OI9@kXI$PFIR?*k@??lap229_?sctXo}x{3gv z=MRv1Xm7*I#?+iu$<>p3@HMy3lKN8Bji%C%rUh_!zHWZZ20qu!=g3&KZkvm?mGv zv+Braq3k|0tenXfHJnYJ&-Rw-a+E)h-mWwrz5+IVz42xyB?vy0S)O5+Fx;AyzK=md3X z^}Rfwi85c{7I~DGZgo{ez4P^JKh|G2_^+Q;((oCi@h80X^?^ErNaYcu(dkh|OdL<1 zxLO7faML<8KBu?%V(4;k@SW%p`3u^9NAnX#DRHNxXN89E9;l;l2T>kYCm9UWH~yNJ zTgugYa2*^90H|C5cXN6Q2)0V}!-@{zY0tPlfm$ zJjNUySqcV$m{B1TqS860{6{a~Es+Lx{G{q4M4}p}2};t6Z++6E1nJcwlX~-`rdiBy zw}3DfwhpAfIFR1Wb+b)O2Z?7hjolS;Ba8&NBc|IU&T;Z|AuLajP#YYXLD9W3r#ZFa z(FVyV1B^RE<*Ds;9N{9zytd76vM<=4DCBeFF9-#@wSA zB!V?HicK$;RRZ6|`B4jqd4x&#%cKWF57P(tyaI?g(%(Y4SC|1w%0-_-vl zkxswe;)umHk�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 RZ?pt{Y%I516m8jm{6ElKpUwaP diff --git a/docs/assets/firehose-grafana-dashboard.json b/docs/assets/firehose-grafana-dashboard.json deleted file mode 100644 index 89f6b17c6..000000000 --- a/docs/assets/firehose-grafana-dashboard.json +++ /dev/null @@ -1,10762 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "Firehose monitoring dashboard", - "editable": true, - "gnetId": null, - "graphTooltip": 1, - "id": 3, - "iteration": 1628530437009, - "links": [], - "panels": [ - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 77, - "panels": [ - { - "cacheTimeout": null, - "datasource": "$datasource", - "description": "The type of sink of the firehose. It could be 'log', 'HTTP', 'DB', 'redis', 'influx' or 'Elasticsearch'", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 0, - "y": 7 - }, - "id": 79, - "interval": null, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "first" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.0.1", - "targets": [ - { - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "measurement": "firehose.kafka.process_partitions_time", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"sink\") as filter from (SELECT \"sink\", \"value\" from \"firehose_sink_messages_total\" where $timeFilter AND \"app\"=~/^$firehose.*$/ )", - "rawQuery": true, - "refId": "B", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "/^$consumer_group$/" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "title": "Sink", - "type": "stat" - }, - { - "cacheTimeout": null, - "datasource": "$datasource", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 4, - "x": 2, - "y": 7 - }, - "id": 211, - "interval": null, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "first" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.0.1", - "targets": [ - { - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"team\") as filter from (SELECT \"team\", \"value\" from \"firehose_sink_messages_total\" where $timeFilter AND app=~/^$firehose.*$/ )", - "rawQuery": true, - "refId": "B", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "title": "Team", - "type": "stat" - }, - { - "cacheTimeout": null, - "datasource": "$datasource", - "description": "The proto class used for creating the firehose.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 12, - "x": 6, - "y": 7 - }, - "id": 81, - "interval": null, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "first" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.0.1", - "targets": [ - { - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"proto\") as filter from (SELECT \"proto\", \"value\" from \"firehose_sink_messages_total\" where $timeFilter AND app=~/^$firehose.*$/ )", - "rawQuery": true, - "refId": "B", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "title": "Proto Schema", - "type": "stat" - }, - { - "cacheTimeout": null, - "datasource": "$datasource", - "description": "The stream where the input topic is read from", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 7 - }, - "id": 83, - "interval": null, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "first" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.0.1", - "targets": [ - { - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"stream\") as filter from (SELECT \"stream\", \"value\" from \"firehose_sink_messages_total\" where $timeFilter AND app=~/^$firehose.*$/ )", - "rawQuery": true, - "refId": "B", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "title": "Stream", - "type": "stat" - } - ], - "title": "Type Details", - "type": "row" - }, - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 1 - }, - "id": 188, - "panels": [ - { - "cacheTimeout": null, - "datasource": "$prometheus_datasource", - "description": "The number of pods required by a firehose to reach the desired state", - "fieldConfig": { - "defaults": { - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "yellow", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 0, - "y": 16 - }, - "id": 67, - "links": [], - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.0.1", - "targets": [ - { - "expr": "kube_deployment_spec_replicas{deployment=~\"$firehose\"}", - "format": "time_series", - "instant": true, - "intervalFactor": 1, - "refId": "A" - } - ], - "title": "Total Replica", - "type": "stat" - }, - { - "cacheTimeout": null, - "datasource": "$prometheus_datasource", - "description": "Number of pods currently running successfully for the firehose", - "fieldConfig": { - "defaults": { - "decimals": 0, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 25, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "green", - "value": 2 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 4, - "y": 16 - }, - "hideTimeOverride": false, - "id": 3, - "links": [], - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.0.1", - "targets": [ - { - "dsType": "influxdb", - "expr": "sum(kube_pod_container_status_running{container=~\"$firehose\"})", - "format": "time_series", - "groupBy": [ - { - "params": [ - "1s" - ], - "type": "time" - }, - { - "params": [ - "linear" - ], - "type": "fill" - } - ], - "hide": false, - "instant": true, - "intervalFactor": 1, - "measurement": "kube_pod_container_status_running", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT sum(\"gauge\") FROM \"kube_pod_container_status_running\" WHERE \"container\" =~ /^$firehose$/ AND $timeFilter GROUP BY time(1s) fill(linear)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "gauge" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "container", - "operator": "=~", - "value": "/^$firehose$/" - } - ] - } - ], - "timeFrom": null, - "title": "Running Pods", - "type": "stat" - }, - { - "cacheTimeout": null, - "datasource": "$prometheus_datasource", - "description": "Time since the firehose was last created/edited", - "fieldConfig": { - "defaults": { - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 8, - "y": 16 - }, - "id": 64, - "links": [], - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.0.1", - "targets": [ - { - "expr": "time() - kube_deployment_created{deployment=~\"$firehose\"}", - "format": "time_series", - "instant": true, - "intervalFactor": 1, - "refId": "A" - } - ], - "title": "Deployment Age", - "type": "stat" - }, - { - "columns": [], - "datasource": "$prometheus_datasource", - "description": "Number of times the pods of this firehose restarted", - "fontSize": "100%", - "gridPos": { - "h": 5, - "w": 12, - "x": 12, - "y": 16 - }, - "hideTimeOverride": false, - "id": 62, - "links": [], - "pageSize": null, - "scroll": true, - "showHeader": true, - "sort": { - "col": 2, - "desc": false - }, - "styles": [ - { - "alias": "Time", - "align": "auto", - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "pattern": "Time", - "type": "hidden" - }, - { - "alias": "", - "align": "auto", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "decimals": 2, - "pattern": "/.*/", - "thresholds": [], - "type": "number", - "unit": "short" - } - ], - "targets": [ - { - "expr": "sum(kube_pod_container_status_restarts_total{container=\"$firehose\"}) by (pod)", - "format": "table", - "instant": true, - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "title": "Pod Restart Count", - "transform": "table", - "type": "table-old" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The maximum lag in terms of number of records for any partition in this window. An increasing value over time is your best indication that the consumer group is not keeping up with the producers.", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 24, - "x": 0, - "y": 21 - }, - "hiddenSeries": false, - "id": 120, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_records-lag-max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "ConsumerLag: MaxLag", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:140", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:141", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Sum of all messages received from Kafka per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 28 - }, - "hiddenSeries": false, - "id": 219, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"kafka.consumer.consumer-fetch-manager-metrics-records-consumed-total\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_records-consumed-total" - ], - "type": "field" - }, - { - "params": [], - "type": "last" - }, - { - "params": [ - "10s" - ], - "type": "non_negative_derivative" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Total Message Received", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:265", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:266", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Messages sent successfully to the sink per batch per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 28 - }, - "hiddenSeries": false, - "id": 195, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_sink_messages_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT sum(\"value\") FROM \"firehose.messages.count\" WHERE (\"app\" =~ /^$firehose$/ AND \"success\" = 'true') AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose$/" - }, - { - "condition": "AND", - "key": "success", - "operator": "=", - "value": "true" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Message Sent Successfully", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Messages failed to be pushed into the sink per batch per pod. \nIn case of HTTP sink, if status code is not in retry codes configured, the records will be dropped.", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 28 - }, - "hiddenSeries": false, - "id": 220, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_sink_messages_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT sum(\"value\") FROM \"firehose.messages.count\" WHERE (\"app\" =~ /^$firehose$/ AND \"success\" = 'false') AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - }, - { - "condition": "AND", - "key": "success", - "operator": "=", - "value": "false" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Message Sent Failed", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:378", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:379", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "In case of HTTP sink, when status code is not in retry codes configured, the records are dropped. This metric captures the dropped messages count.", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 28 - }, - "hiddenSeries": false, - "id": 224, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host: $tag_cause", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "cause" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_sink_messages_drop_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT sum(\"value\") FROM \"firehose.messages.dropped.count\" WHERE (\"app\" =~ /^$firehose$/ AND \"success\" = 'false') AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Message Dropped", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:378", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:379", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "99p of batch size distribution for pulled and pushed messages per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 35 - }, - "hiddenSeries": false, - "id": 223, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "Pulled: $tag_host", - "groupBy": [ - { - "params": [ - "1m" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_source_kafka_pull_batch_size_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT max(\"99_percentile\") AS \"99P\" FROM \"firehose_source_kafka_pull_batch_size_total\" WHERE (\"app\" =~ /^$firehose.*$/) AND $timeFilter GROUP BY time(1m), \"host\" fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "99_percentile" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - }, - { - "params": [ - "99P" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - }, - { - "alias": "Pushed: $tag_host", - "groupBy": [ - { - "params": [ - "1m" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_sink_push_batch_size_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT max(\"99_percentile\") AS \"99p\" FROM \"firehose_sink_push_batch_size_total\" WHERE (\"host\" =~ /^$firehose.*$/) AND $timeFilter GROUP BY time(1m), \"host\" fill(none)", - "rawQuery": true, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "99_percentile" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - }, - { - "params": [ - "99p" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "host", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Batch size Distribution", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:467", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:468", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Latency introduced by firehose (time before sending to sink - time when reading from Kafka).\nNote: It could be high if the response time of the sink is higher as subsequent batches could be delayed", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 6, - "y": 35 - }, - "hiddenSeries": false, - "id": 90, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host($col)", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_pipeline_execution_lifetime_milliseconds", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT max(\"99_percentile\") AS \"99p\", max(\"95_percentile\") AS \"95p\", max(\"50_percentile\") AS \"50p\" FROM \"firehose.latency\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "99_percentile" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - }, - { - "params": [ - "99p" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Time spent in firehose", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Time difference between Kafka ingestion and sending to sink (Time before sending to sink - Time of Kafka ingestion)", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 12, - "y": 35 - }, - "hiddenSeries": false, - "id": 191, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host($col)", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_pipeline_end_latency_milliseconds", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT max(\"99_percentile\") AS \"99p\", max(\"95_percentile\") AS \"95p\", max(\"50_percentile\") AS \"50p\" FROM \"firehose.lifetime.till.execution\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "99_percentile" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - }, - { - "params": [ - "99p" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Time spent in pipeline", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Different percentile of the response time of the sink", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 35 - }, - "hiddenSeries": false, - "id": 32, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.0.1", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host($col)", - "groupBy": [ - { - "params": [ - "1m" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_sink_response_time_milliseconds", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT max(\"99_percentile\") AS \"99P\", max(\"95_percentile\") AS \"95P\", max(\"50_percentile\") AS \"50P\" FROM \"firehose.sink.response.time\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time(1m), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "99_percentile" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - }, - { - "params": [ - "99P" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "95_percentile" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - }, - { - "params": [ - "95P" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "50_percentile" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - }, - { - "params": [ - "50P" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Sink Response Time", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Overview", - "type": "row" - }, - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 2 - }, - "id": 137, - "panels": [ - { - "columns": [ - { - "$$hashKey": "object:26", - "text": "Current", - "value": "current" - } - ], - "datasource": "$datasource", - "description": "JVM Uptime of each pod", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fontSize": "100%", - "gridPos": { - "h": 12, - "w": 10, - "x": 0, - "y": 38 - }, - "id": 155, - "links": [], - "pageSize": null, - "scroll": true, - "showHeader": true, - "sort": { - "col": 2, - "desc": false - }, - "styles": [ - { - "$$hashKey": "object:953", - "alias": "Time", - "align": "auto", - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "pattern": "Time", - "type": "hidden" - }, - { - "$$hashKey": "object:954", - "alias": "Lifetime", - "align": "auto", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "decimals": 2, - "pattern": "Current", - "thresholds": [ - "" - ], - "type": "number", - "unit": "ms" - }, - { - "$$hashKey": "object:955", - "alias": "Pod Name", - "align": "auto", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "pattern": "Metric", - "thresholds": [], - "type": "string", - "unit": "short" - } - ], - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"uptime_Uptime\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND time > now() - 1m GROUP BY time($__interval), \"host\"", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "Uptime" - ], - "type": "field" - }, - { - "params": [], - "type": "last" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "title": "JVM Lifetime", - "transform": "timeseries_aggregations", - "type": "table-old" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Returns the \"recent cpu usage\" for the Java Virtual Machine process. This value is a double in the [0.0,1.0] interval. A value of 0.0 means that none of the CPUs were running threads from the JVM process during the recent period of time observed, while a value of 1.0 means that all CPUs were actively running threads from the JVM 100% of the time during the recent period being observed. Threads from the JVM include the application threads as well as the JVM internal threads. All values betweens 0.0 and 1.0 are possible depending of the activities going on in the JVM process and the whole system. If the Java Virtual Machine recent CPU usage is not available, the method returns a negative value.", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 14, - "x": 10, - "y": 38 - }, - "hiddenSeries": false, - "id": 142, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "Pod: $tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_operating_system_", - "orderByTime": "ASC", - "policy": "default", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "ProcessCpuLoad" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cpu Load", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "percentunit", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Returns the CPU time used by the process on which the Java virtual machine is running. The returned value is of nanoseconds precision but not necessarily nanoseconds accuracy", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 14, - "x": 10, - "y": 44 - }, - "hiddenSeries": false, - "id": 143, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "Pod: $tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_operating_system_", - "orderByTime": "ASC", - "policy": "default", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "ProcessCpuTime" - ], - "type": "field" - }, - { - "params": [], - "type": "last" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cpu Time", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ns", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "repeat": null, - "title": "Pods Health", - "type": "row" - }, - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 3 - }, - "id": 118, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Consumer Group Metrics: The number of partitions currently assigned to this consumer (per pod)", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 39 - }, - "hiddenSeries": false, - "id": 132, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "[[tag_host]]", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"coordinator_assigned-partitions\") FROM \"firehose_kafka_consumer_\" WHERE (\"host\" =~ /^$pods$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "coordinator_assigned-partitions" - ], - "type": "field" - }, - { - "params": [], - "type": "last" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Assigned partitions", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Global Request Metrics: The average number of requests sent per second per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 39 - }, - "hiddenSeries": false, - "id": 129, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-metrics-request-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "metrics_request-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Consumer Number of Request/second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ops", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Topic-level Fetch Metrics: The average number of records consumed per second for a specific topic per pod.", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 39 - }, - "hiddenSeries": false, - "id": 122, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-fetch-manager-metrics-records-consumed-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_records-consumed-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Records Consumed Rate/second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ops", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Topic-level Fetch Metrics: The average number of bytes consumed per second per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 39 - }, - "hiddenSeries": false, - "id": 121, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "Pod: $tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-fetch-manager-metrics-bytes-consumed-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_bytes-consumed-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Bytes Consumed Rate/second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Fetch Metrics: The number of fetch requests per second per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 46 - }, - "hiddenSeries": false, - "id": 123, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-fetch-manager-metrics-fetch-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_fetch-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Fetch Rate/second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Fetch Metrics: The max time taken for a fetch request per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 46 - }, - "hiddenSeries": false, - "id": 144, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT max(\"kafka.consumer.consumer-fetch-manager-metrics-fetch-latency-max\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_fetch-latency-max" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Max Fetch Latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Fetch Metrics: The average time taken for a fetch request per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 46 - }, - "hiddenSeries": false, - "id": 126, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-fetch-manager-metrics-fetch-latency-avg\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_fetch-latency-avg" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Average Fetch Latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Fetch Metrics: The average number of bytes fetched per request per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 46 - }, - "hiddenSeries": false, - "id": 145, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "linear" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-fetch-manager-metrics-fetch-size-avg\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(linear)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_fetch-size-avg" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Average Fetch Size", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Fetch Metrics: The max number of bytes fetched per request per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 53 - }, - "hiddenSeries": false, - "id": 146, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT max(\"kafka.consumer.consumer-fetch-manager-metrics-fetch-size-max\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "fetch_manager_fetch-size-max" - ], - "type": "field" - }, - { - "params": [], - "type": "max" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Max Fetch Size", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Consumer Group Metrics: The number of commit calls per second per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 53 - }, - "hiddenSeries": false, - "id": 125, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-coordinator-metrics-commit-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "coordinator_commit-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Commit Rate/second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Global Connection Metrics: The current number of active connections per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 53 - }, - "hiddenSeries": false, - "id": 130, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-metrics-connection-count\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "metrics_connection-count" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Consumer Active Connections Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Global Connection Metrics: New connections established per second in the window per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 53 - }, - "hiddenSeries": false, - "id": 147, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-metrics-connection-creation-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "metrics_connection-creation-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "New Connections Creation Rate/second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ops", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Global Connection Metrics: Connections closed per second in the window per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 60 - }, - "hiddenSeries": false, - "id": 148, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-metrics-connection-close-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "metrics_connection-close-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Connections Close Rate/second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Global Request Metrics: The average number of outgoing bytes sent per second to all servers per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 60 - }, - "hiddenSeries": false, - "id": 128, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "linear" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-metrics-outgoing-byte-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(linear)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "metrics_outgoing-byte-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Consumer Outgoing Byte Rate/S", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "Bps", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Average time spent between poll per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 60 - }, - "hiddenSeries": false, - "id": 134, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-metrics-time-between-poll-avg\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "metrics_time-between-poll-avg" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Avg time between poll", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Max time spent between poll per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 60 - }, - "hiddenSeries": false, - "id": 149, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-metrics-time-between-poll-max\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "metrics_time-between-poll-max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Max time between poll", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Consumer Group Metrics: The number of group syncs per second per pod. Group synchronization is the second and last phase of the rebalance protocol. Similar to join-rate, a large value indicates group instability", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 67 - }, - "hiddenSeries": false, - "id": 131, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-coordinator-metrics-sync-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "coordinator_sync-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Sync rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ops", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The average number of network operations (reads or writes) on all connections per second per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 67 - }, - "hiddenSeries": false, - "id": 127, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-metrics-network-io-rate\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "metrics_network-io-rate" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Consumer Network IO rate /second", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "iops", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Rate of rebalance the consumer. More details here : https://cwiki.apache.org/confluence/display/KAFKA/KIP-429%3A+Kafka+Consumer+Incremental+Rebalance+Protocol", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 67 - }, - "hiddenSeries": false, - "id": 135, - "legend": { - "alignAsTable": false, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-coordinator-metrics-failed-rebalance-rate-per-hour\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "coordinator_rebalance-rate-per-hour" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Rebalance Rate /hour", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Consumer Group Metrics: The average time taken for a commit request per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 67 - }, - "hiddenSeries": false, - "id": 124, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"kafka.consumer.consumer-coordinator-metrics-commit-latency-avg\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "coordinator_commit-latency-avg" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Average Commit latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Consumer Group Metrics: The max time taken for a commit request per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 9, - "x": 0, - "y": 74 - }, - "hiddenSeries": false, - "id": 190, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"kafka.consumer.consumer-coordinator-metrics-commit-latency-max\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "coordinator_commit-latency-max" - ], - "type": "field" - }, - { - "params": [], - "type": "last" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Max Commit latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Average Rebalance Latency for the consumer per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 9, - "y": 74 - }, - "hiddenSeries": false, - "id": 133, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT sum(\"kafka.consumer.consumer-coordinator-metrics-rebalance-latency-avg\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(linear)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "coordinator_rebalance-latency-avg" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Avg Rebalance latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Max Rebalance Latency for the consumer per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 7, - "x": 17, - "y": 74 - }, - "hiddenSeries": false, - "id": 189, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "client-id" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_kafka_consumer_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"kafka.consumer.consumer-coordinator-metrics-rebalance-latency-max\") FROM \"v2_jolokia\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "coordinator_rebalance-latency-max" - ], - "type": "field" - }, - { - "params": [], - "type": "last" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Max Rebalance latency", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Kafka Consumer Details", - "type": "row" - }, - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 4 - }, - "id": 88, - "panels": [ - { - "datasource": "$datasource", - "description": "Count of all the exception raised by the pods which can restart the firehose", - "fieldConfig": { - "defaults": { - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 40 - }, - "id": 85, - "links": [], - "options": { - "showHeader": true - }, - "pluginVersion": "7.5.0", - "targets": [ - { - "alias": "", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "measurement": "firehose.error.event", - "orderByTime": "ASC", - "policy": "default", - "query": "select class as errors, sum as count from (select sum(\"value\") from \"firehose_error_event\" WHERE $timeFilter AND \"app\" =~ /^$firehose$/ AND \"type\"='fatal' group by \"class\")", - "rawQuery": true, - "refId": "A", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "title": "FATAL ERROR", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true - }, - "indexByName": {}, - "renameByName": { - "class": "" - } - } - } - ], - "type": "table" - }, - { - "columns": [], - "datasource": "$datasource", - "description": "Count of all the exception raised by the firehose which will not restart the firehose and firehose will keep retrying", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fontSize": "100%", - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 40 - }, - "id": 86, - "links": [], - "pageSize": null, - "scroll": true, - "showHeader": true, - "sort": { - "col": 0, - "desc": true - }, - "styles": [ - { - "$$hashKey": "object:3821", - "alias": "Time", - "align": "auto", - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "pattern": "Time", - "type": "hidden" - }, - { - "$$hashKey": "object:3822", - "alias": "", - "align": "auto", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "count", - "thresholds": [], - "type": "number", - "unit": "short" - } - ], - "targets": [ - { - "alias": "", - "groupBy": [ - { - "params": [ - "$interval" - ], - "type": "time" - }, - { - "params": [ - "class" - ], - "type": "tag" - } - ], - "measurement": "firehose.error.event", - "orderByTime": "ASC", - "policy": "default", - "query": "select class as errors, sum as count from (select sum(\"value\") from \"firehose_error_event\" WHERE $timeFilter AND \"app\" =~ /^$firehose$/ AND \"type\"='nonfatal' group by \"class\")", - "rawQuery": true, - "refId": "A", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "type", - "operator": "=", - "value": "NON_FATAL_ERROR" - } - ] - } - ], - "title": "NON FATAL ERROR", - "transform": "table", - "type": "table-old" - } - ], - "title": "Error", - "type": "row" - }, - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 5 - }, - "id": 139, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Details of heap memory usage:\n1. Max: The amount of memory that can be used for memory management\n2. Used: The amount of memory currently in use", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 83 - }, - "hiddenSeries": false, - "id": 101, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host:($col)", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"heap_memory_usage_HeapMemoryUsage.max\") AS \"max\", mean(\"heap_memory_usage_HeapMemoryUsage.used\") AS \"used\", mean(\"heap_memory_usage_HeapMemoryUsage.committed\") AS \"committed\" FROM \"v2_jolokia\" WHERE (\"host\" =~ /^$pods$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "HeapMemoryUsage.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "HeapMemoryUsage.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "HeapMemoryUsage.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Heap Memory Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Details of non-heap memory usage:\n1. Max: The amount of memory that can be used for memory management\n2. Used: The amount of memory currently in use", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 83 - }, - "hiddenSeries": false, - "id": 202, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host($col)", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "refId": "C", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "NonHeapMemoryUsage.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "NonHeapMemoryUsage.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "NonHeapMemoryUsage.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Non-Heap Memory Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "For a garbage-collected memory pool, the amount of used memory includes the memory occupied by all objects in the pool including both reachable and unreachable objects. This is for all the names in the type: MemoryPool", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 91 - }, - "hiddenSeries": false, - "id": 203, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host($col)", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "class_count_java_memory_pool_CollectionUsage.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "class_count_java_memory_pool_CollectionUsage.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "class_count_java_memory_pool_CollectionUsage.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "GC: Memory Pool Collection Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "For a garbage-collected memory pool, the amount of used memory includes the memory occupied by all objects in the pool including both reachable and unreachable objects. This is for all the names in the type: MemoryPool", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 91 - }, - "hiddenSeries": false, - "id": 204, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host($col)", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "class_count_java_memory_pool_PeakUsage.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "class_count_java_memory_pool_PeakUsage.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "class_count_java_memory_pool_PeakUsage.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "GC: Memory Pool Peak Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "For a garbage-collected memory pool, the amount of used memory includes the memory occupied by all objects in the pool including both reachable and unreachable objects. This is for all the names in the type: MemoryPool", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 91 - }, - "hiddenSeries": false, - "id": 205, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host: Max", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "class_count_java_memory_pool_Usage.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "class_count_java_memory_pool_Usage.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "class_count_java_memory_pool_Usage.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "GC: Memory Pool Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "decbytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Memory", - "type": "row" - }, - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 6 - }, - "id": 94, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The total number of collections that have occurred per pod. Rather than showing the absolute value we are showing the difference to see the rate of change more easily.", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 84 - }, - "hiddenSeries": false, - "id": 103, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "hideEmpty": true, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host: $tag_name", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "name" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT difference(sum(\"garbage_collection_CollectionCount\")) FROM \"v2_jolokia\" WHERE (\"host\" =~ /^$pods$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "garbage_collection_CollectionCount" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - }, - { - "params": [], - "type": "difference" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "GC Collection Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The approximate accumulated collection elapsed time in milliseconds per pod. Rather than showing the absolute value we are showing the difference to see the rate of change more easily.", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 84 - }, - "hiddenSeries": false, - "id": 104, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "hideEmpty": true, - "max": false, - "min": false, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT difference(\"garbage_collection_CollectionTime\") FROM \"v2_jolokia\" WHERE $timeFilter and host =~ \"$pods\" GROUP BY \"name\"", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "garbage_collection_CollectionTime" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [], - "type": "difference" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "GC Collection Time", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 0, - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": "0", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "daemonThreadCount: Returns the current number of live daemon threads per pod\npeakThreadCount: Returns the peak live thread count since the Java virtual machine started or peak was reset per pod\nthreadCount: Returns the current number of live threads including both daemon and non-daemon threads per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 92 - }, - "hiddenSeries": false, - "id": 108, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host : $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "thread_count_DaemonThreadCount" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "daemonThreadCount" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "thread_count_PeakThreadCount" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "peakThreadCount" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "thread_count_ThreadCount" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "threadCount" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Thread Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "loadedClass: Displays number of classes that are currently loaded in the Java virtual machine per pod\nunloadedClass: Displays the total number of classes unloaded since the Java virtual machine has started execution", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 92 - }, - "hiddenSeries": false, - "id": 109, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host: $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "class_count_LoadedClassCount" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "loadedClass" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "class_count_UnloadedClassCount" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "unloadedClass" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Class Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The code cache memory usage in the memory pools at the end of a GC per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 92 - }, - "hiddenSeries": false, - "id": 112, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host- $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT \"garbage_collection_LastGcInfo.memoryUsageAfterGc.G1 Old Gen.committed\", \"garbage_collection_LastGcInfo.memoryUsageAfterGc.PS Old Gen.committed\", \"garbage_collection_LastGcInfo.memoryUsageAfterGc.CMS Old Gen.committed\" FROM \"v2_jolokia\" WHERE ((\"name\" = 'G1 Old Generation' OR \"name\" = 'PS MarkSweep' OR \"name\" = 'ConcurrentMarkSweep')) AND $timeFilter GROUP BY \"name\"", - "rawQuery": false, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Code Cache.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Code Cache.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Code Cache.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Code Cache Memory after GC", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The compressed class space memory usage in the memory pools at the end of a GC per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 100 - }, - "hiddenSeries": false, - "id": 213, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host- $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT \"garbage_collection_LastGcInfo.memoryUsageAfterGc.G1 Old Gen.committed\", \"garbage_collection_LastGcInfo.memoryUsageAfterGc.PS Old Gen.committed\", \"garbage_collection_LastGcInfo.memoryUsageAfterGc.CMS Old Gen.committed\" FROM \"v2_jolokia\" WHERE ((\"name\" = 'G1 Old Generation' OR \"name\" = 'PS MarkSweep' OR \"name\" = 'ConcurrentMarkSweep')) AND $timeFilter GROUP BY \"name\"", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Compressed Class Space.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Compressed Class Space.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Compressed Class Space.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Compressed Class Space after GC", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The metaspace memory usage in the memory pools at the end of a GC per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 100 - }, - "hiddenSeries": false, - "id": 212, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host- $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.committed\") AS \"committed\", mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.used\") AS \"used\", mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.max\") AS \"max\" FROM \"v2_jolokia\" WHERE (\"host\" =~ /^$pods$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Metaspace after GC", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The eden space memory usage in the memory pools at the end of a GC per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 100 - }, - "hiddenSeries": false, - "id": 214, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host- $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Par Eden Space.committed\") AS \"committed\", mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Par Eden Space.used\") AS \"used\", mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Par Eden Space.max\") AS \"max\" FROM \"v2_jolokia\" WHERE (\"host\" =~ /^$pods$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Par Eden Space.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Par Eden Space after GC", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The survivor space memory usage in the memory pools at the end of a GC per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 108 - }, - "hiddenSeries": false, - "id": 215, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host- $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Par Survivor Space.committed\") AS \"committed\", mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Par Survivor Space.used\") AS \"used\", mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Par Survivor Space.max\") AS \"max\" FROM \"v2_jolokia\" WHERE (\"host\" =~ /^$pods$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Par Survivor Space.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Par Survivor Space after GC", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "The tenured space memory usage in the memory pools at the end of a GC per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 108 - }, - "hiddenSeries": false, - "id": 216, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host- $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_jvm_", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Tenured Gen.committed\") AS \"committed\", mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Tenured Gen.used\") AS \"used\", mean(\"garbage_collection_LastGcInfo.memoryUsageAfterGc.Tenured Gen.max\") AS \"max\" FROM \"v2_jolokia\" WHERE (\"host\" =~ /^$pods$/) AND $timeFilter GROUP BY time($__interval), \"host\" fill(none)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Tenured Gen.committed" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "committed" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.used" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "used" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "garbage_collection_LastGcInfo.memoryUsageAfterGc.Metaspace.max" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Tenured Space after GC", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "bytes", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Number of file descriptor per pod\n1. Open: Current open file descriptors\n2. Max: Based on config max allowed", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 108 - }, - "hiddenSeries": false, - "id": 116, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "hideEmpty": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host: $col", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_operating_system_", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "OpenFileDescriptorCount" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "open" - ], - "type": "alias" - } - ], - [ - { - "params": [ - "MaxFileDescriptorCount" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - }, - { - "params": [ - "max" - ], - "type": "alias" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "File Descriptor", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": false - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Garbage Collection", - "type": "row" - }, - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 7 - }, - "id": 48, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Request retries per min per pod", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 40 - }, - "hiddenSeries": false, - "id": 50, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "1m" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_retry_total", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Average Retry Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Time spent per pod backing off", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 40 - }, - "hiddenSeries": false, - "id": 196, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "groupBy": [ - { - "params": [ - "1m" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_retry_backoff_sleep_milliseconds", - "orderByTime": "ASC", - "policy": "default", - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Back Off time", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "ms", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Retry", - "type": "row" - }, - { - "collapsed": false, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 8 - }, - "id": 34, - "panels": [], - "title": "HTTP Sink", - "type": "row" - }, - { - "datasource": "$datasource", - "description": "Total number of response received by firehose from the HTTP service across different status code", - "fieldConfig": { - "defaults": { - "custom": { - "align": "left", - "displayMode": "auto", - "filterable": false - }, - "mappings": [ - { - "options": { - "": { - "text": "" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 24, - "x": 0, - "y": 9 - }, - "id": 225, - "links": [], - "options": { - "showHeader": true - }, - "pluginVersion": "8.1.0", - "targets": [ - { - "alias": "$tag_status_code", - "groupBy": [ - { - "params": [ - "status_code" - ], - "type": "tag" - } - ], - "measurement": "firehose_sink_http_response_code_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT sum(value) as total FROM \"firehose_sink_http_response_code_total\" WHERE (\"app\" =~ /^$firehose.*$/) and $timeFilter GROUP BY \"status_code\"", - "rawQuery": true, - "refId": "C", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - } - ] - ], - "tags": [ - { - "key": "host", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Response Count Total", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true - }, - "indexByName": {}, - "renameByName": { - "status_code": "Status Code", - "total": "Total Count" - } - } - } - ], - "type": "table" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Total number of 2xx and 3xx response received by firehose from the HTTP service", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 11, - "w": 8, - "x": 0, - "y": 15 - }, - "hiddenSeries": false, - "id": 30, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.1.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_status_code", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "status_code" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_sink_http_response_code_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT sum(\"value\") FROM \"firehose_sink_http_response_code_total\" WHERE (\"app\" =~ /^$firehose.*$/ AND \"status_code\" =~ /^[23].*/) AND $timeFilter GROUP BY time($__interval), \"status_code\" fill(none)", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - }, - { - "condition": "AND", - "key": "status_code", - "operator": "=~", - "value": "/^[23].*/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Success Response Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:251", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:252", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Total number of 4xx and 5xx response received by firehose from the HTTP service", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 11, - "w": 8, - "x": 8, - "y": 15 - }, - "hiddenSeries": false, - "id": 199, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.1.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_status_code", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "status_code" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_sink_http_response_code_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT sum(\"value\") FROM \"firehose_sink_http_response_code_total\" WHERE (\"app\" =~ /^$firehose.*$/ AND \"status_code\" =~ /^[45].*/) AND $timeFilter GROUP BY time($__interval), \"status_code\" fill(none)", - "rawQuery": true, - "refId": "B", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - }, - { - "params": [ - "10s" - ], - "type": "non_negative_derivative" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - }, - { - "condition": "AND", - "key": "status_code", - "operator": "=~", - "value": "/^[45].*/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Unsuccessful Response Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Total number of No response received by firehose from the HTTP service", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 11, - "w": 8, - "x": 16, - "y": 15 - }, - "hiddenSeries": false, - "id": 198, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.1.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "No response (status_code: $tag_status_code)", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "status_code" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "measurement": "firehose_sink_http_response_code_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"value\") FROM \"firehose_http_response_code\" WHERE (\"app\" =~ /^$firehose$/ AND \"status_code\" = '') AND $timeFilter GROUP BY time(1m) fill(null)", - "rawQuery": false, - "refId": "D", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "status_code", - "operator": "!~", - "value": "/^[2345].*/" - }, - { - "condition": "AND", - "key": "app", - "operator": "=~", - "value": "/^$firehose$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "No Response Count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 26 - }, - "id": 229, - "panels": [], - "title": "MongoDB Sink", - "type": "row" - }, - { - "datasource": "${datasource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 27 - }, - "id": 227, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "query": "SELECT sum(\"value\") FROM \"firehose_sink_mongo_inserted_total\" WHERE (\"app\" =~ /^$firehose.*$/) AND $timeFilter GROUP BY time($__interval) fill(none)", - "queryType": "randomWalk", - "rawQuery": true, - "refId": "A" - } - ], - "title": "Inserted Documents Count", - "type": "timeseries" - }, - { - "datasource": "${datasource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 27 - }, - "id": 231, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "query": "SELECT sum(\"value\") FROM \"firehose_sink_mongo_updated_total\" WHERE (\"app\" =~ /^$firehose.*$/) AND $timeFilter GROUP BY time($__interval) fill(none)", - "queryType": "randomWalk", - "rawQuery": true, - "refId": "A" - } - ], - "title": "Updated Documents Count", - "type": "timeseries" - }, - { - "datasource": "${datasource}", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 27 - }, - "id": 233, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "query": "SELECT sum(\"value\") FROM \"firehose_sink_mongo_modified_total\" WHERE (\"app\" =~ /^$firehose.*$/) AND $timeFilter GROUP BY time($__interval) fill(none)", - "queryType": "randomWalk", - "rawQuery": true, - "refId": "A" - } - ], - "title": "Total Modified Documents Count", - "type": "timeseries" - }, - { - "collapsed": true, - "datasource": null, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 36 - }, - "id": 201, - "panels": [ - { - "cacheTimeout": null, - "datasource": "$datasource", - "description": "Type of filter in the firehose. It will be one of the \"none\", \"key\", \"message\"", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 4, - "x": 0, - "y": 42 - }, - "id": 207, - "interval": null, - "links": [], - "maxDataPoints": 100, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "first" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.0.1", - "targets": [ - { - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": true, - "measurement": "firehose.latency", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"filter\") as filter from (SELECT \"filter\", \"value\" from \"firehose.messages.count\" where $timeFilter AND app=~/$firehose/ )", - "rawQuery": false, - "refId": "A", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose$/" - } - ] - }, - { - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "measurement": "firehose_pipeline_end_latency_milliseconds", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT last(\"filter\") as filter from (SELECT \"filter\", \"value\" from \"firehose_sink_messages_total\" where $timeFilter AND host=~/^$firehose.*$/ )", - "rawQuery": true, - "refId": "B", - "resultFormat": "table", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "title": "Filter Type", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "$datasource", - "description": "Sum of all the messages filtered because of the filter condition per pod.", - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 20, - "x": 4, - "y": 42 - }, - "hiddenSeries": false, - "id": 71, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "$tag_host", - "dsType": "influxdb", - "expr": "", - "format": "time_series", - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "host" - ], - "type": "tag" - }, - { - "params": [ - "none" - ], - "type": "fill" - } - ], - "intervalFactor": 1, - "measurement": "firehose_source_kafka_messages_filter_total", - "orderByTime": "ASC", - "policy": "default", - "query": "SELECT mean(\"value\") FROM \"firehose_kafka_messages_received\" WHERE (\"app\" =~ /^$firehose$/) AND $timeFilter GROUP BY time(1m) fill(linear)", - "rawQuery": false, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "sum" - } - ] - ], - "tags": [ - { - "key": "app", - "operator": "=~", - "value": "/^$firehose.*$/" - } - ] - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Total Messages filtered", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Filter", - "type": "row" - } - ], - "refresh": "", - "schemaVersion": 30, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - "selected": true, - "text": "default", - "value": "default" - }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Data Source", - "multi": false, - "name": "datasource", - "options": [], - "query": "influxdb", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "current": { - "selected": true, - "text": "No data sources found", - "value": "" - }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Prometheus Data Source", - "multi": false, - "name": "prometheus_datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "/lens/", - "skipUrlSync": false, - "type": "datasource" - }, - { - "allValue": null, - "current": { - "selected": false, - "text": "org", - "value": "org" - }, - "description": "", - "error": null, - "hide": 0, - "includeAll": false, - "label": "Organisation", - "multi": false, - "name": "organisation", - "options": [], - "query": "", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "allValue": null, - "current": { - "isNone": true, - "selected": true, - "text": "None", - "value": "" - }, - "datasource": "$datasource", - "definition": "SHOW TAG VALUES FROM \"firehose_jvm_\" WITH KEY=\"app\"", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Firehose Name", - "multi": false, - "name": "firehose", - "options": [], - "query": "SHOW TAG VALUES FROM \"firehose_jvm_\" WITH KEY=\"app\"", - "refresh": 1, - "regex": "/$organisation-$landscape.*/", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "datasource": "$datasource", - "definition": "SHOW TAG VALUES FROM \"firehose_jvm_\" WITH KEY=\"host\" WHERE \"app\" =~ /^$firehose$/", - "description": null, - "error": null, - "hide": 0, - "includeAll": true, - "label": "Pods", - "multi": true, - "name": "pods", - "options": [], - "query": "SHOW TAG VALUES FROM \"firehose_jvm_\" WITH KEY=\"host\" WHERE \"app\" =~ /^$firehose$/", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "browser", - "title": "Firehose Timeboard", - "uid": "2W1Us8Gnk", - "version": 4 -} \ No newline at end of file diff --git a/docs/assets/integration.png b/docs/assets/integration.png deleted file mode 100644 index fc71184bc3c989cb9ec1e44488d4224ad99345fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164942 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 = [...] -# [processors.converter.tags] -# measurement = [] -# string = [] -# integer = [] -# unsigned = [] -# boolean = [] -# float = [] -# -# ## Fields to convert -# ## -# ## The table key determines the target type, and the array of key-values -# ## select the keys to convert. The array may contain globs. -# ## = [...] -# [processors.converter.fields] -# measurement = [] -# tag = [] -# string = [] -# integer = [] -# unsigned = [] -# boolean = [] -# float = [] - - -# # Dates measurements, tags, and fields that pass through this filter. -# [[processors.date]] -# ## New tag to create -# tag_key = "month" -# -# ## New field to create (cannot set both field_key and tag_key) -# # field_key = "month" -# -# ## Date format string, must be a representation of the Go "reference time" -# ## which is "Mon Jan 2 15:04:05 -0700 MST 2006". -# date_format = "Jan" -# -# ## If destination is a field, date format can also be one of -# ## "unix", "unix_ms", "unix_us", or "unix_ns", which will insert an integer field. -# # date_format = "unix" -# -# ## Offset duration added to the date string when writing the new tag. -# # date_offset = "0s" -# -# ## Timezone to use when creating the tag or field using a reference time -# ## string. This can be set to one of "UTC", "Local", or to a location name -# ## in the IANA Time Zone database. -# ## example: timezone = "America/Los_Angeles" -# # timezone = "UTC" - - -# # Filter metrics with repeating field values -# [[processors.dedup]] -# ## Maximum time to suppress output -# dedup_interval = "600s" - - -# # Defaults sets default value(s) for specified fields that are not set on incoming metrics. -# [[processors.defaults]] -# ## Ensures a set of fields always exists on your metric(s) with their -# ## respective default value. -# ## For any given field pair (key = default), if it's not set, a field -# ## is set on the metric with the specified default. -# ## -# ## A field is considered not set if it is nil on the incoming metric; -# ## or it is not nil but its value is an empty string or is a string -# ## of one or more spaces. -# ## = -# # [processors.defaults.fields] -# # field_1 = "bar" -# # time_idle = 0 -# # is_error = true - - -# # Map enum values according to given table. -# [[processors.enum]] -# [[processors.enum.mapping]] -# ## Name of the field to map. Globs accepted. -# field = "status" -# -# ## Name of the tag to map. Globs accepted. -# # tag = "status" -# -# ## Destination tag or field to be used for the mapped value. By default the -# ## source tag or field is used, overwriting the original value. -# dest = "status_code" -# -# ## Default value to be used for all values not contained in the mapping -# ## table. When unset, the unmodified value for the field will be used if no -# ## match is found. -# # default = 0 -# -# ## Table of mappings -# [processors.enum.mapping.value_mappings] -# green = 1 -# amber = 2 -# red = 3 - - -# # Run executable as long-running processor plugin -# [[processors.execd]] -# ## Program to run as daemon -# ## eg: command = ["/path/to/your_program", "arg1", "arg2"] -# command = ["cat"] -# -# ## Delay before the process is restarted after an unexpected termination -# restart_delay = "10s" - - -# # Performs file path manipulations on tags and fields -# [[processors.filepath]] -# ## Treat the tag value as a path and convert it to its last element, storing the result in a new tag -# # [[processors.filepath.basename]] -# # tag = "path" -# # dest = "basepath" -# -# ## Treat the field value as a path and keep all but the last element of path, typically the path's directory -# # [[processors.filepath.dirname]] -# # field = "path" -# -# ## Treat the tag value as a path, converting it to its the last element without its suffix -# # [[processors.filepath.stem]] -# # tag = "path" -# -# ## Treat the tag value as a path, converting it to the shortest path name equivalent -# ## to path by purely lexical processing -# # [[processors.filepath.clean]] -# # tag = "path" -# -# ## Treat the tag value as a path, converting it to a relative path that is lexically -# ## equivalent to the source path when joined to 'base_path' -# # [[processors.filepath.rel]] -# # tag = "path" -# # base_path = "/var/log" -# -# ## Treat the tag value as a path, replacing each separator character in path with a '/' character. Has only -# ## effect on Windows -# # [[processors.filepath.toslash]] -# # tag = "path" - - -# # Add a tag of the network interface name looked up over SNMP by interface number -# [[processors.ifname]] -# ## Name of tag holding the interface number -# # tag = "ifIndex" -# -# ## Name of output tag where service name will be added -# # dest = "ifName" -# -# ## Name of tag of the SNMP agent to request the interface name from -# # agent = "agent" -# -# ## Timeout for each request. -# # timeout = "5s" -# -# ## SNMP version; can be 1, 2, or 3. -# # version = 2 -# -# ## SNMP community string. -# # community = "public" -# -# ## Number of retries to attempt. -# # retries = 3 -# -# ## The GETBULK max-repetitions parameter. -# # max_repetitions = 10 -# -# ## SNMPv3 authentication and encryption options. -# ## -# ## Security Name. -# # sec_name = "myuser" -# ## Authentication protocol; one of "MD5", "SHA", or "". -# # auth_protocol = "MD5" -# ## Authentication password. -# # auth_password = "pass" -# ## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv". -# # sec_level = "authNoPriv" -# ## Context Name. -# # context_name = "" -# ## Privacy protocol used for encrypted messages; one of "DES", "AES" or "". -# # priv_protocol = "" -# ## Privacy password used for encrypted messages. -# # priv_password = "" -# -# ## max_parallel_lookups is the maximum number of SNMP requests to -# ## make at the same time. -# # max_parallel_lookups = 100 -# -# ## ordered controls whether or not the metrics need to stay in the -# ## same order this plugin received them in. If false, this plugin -# ## may change the order when data is cached. If you need metrics to -# ## stay in order set this to true. keeping the metrics ordered may -# ## be slightly slower -# # ordered = false -# -# ## cache_ttl is the amount of time interface names are cached for a -# ## given agent. After this period elapses if names are needed they -# ## will be retrieved again. -# # cache_ttl = "8h" - - -# # Apply metric modifications using override semantics. -# [[processors.override]] -# ## All modifications on inputs and aggregators can be overridden: -# # name_override = "new_name" -# # name_prefix = "new_name_prefix" -# # name_suffix = "new_name_suffix" -# -# ## Tags to be added (all values must be strings) -# # [processors.override.tags] -# # additional_tag = "tag_value" - - -# # Parse a value in a specified field/tag(s) and add the result in a new metric -# [[processors.parser]] -# ## The name of the fields whose value will be parsed. -# parse_fields = [] -# -# ## If true, incoming metrics are not emitted. -# drop_original = false -# -# ## If set to override, emitted metrics will be merged by overriding the -# ## original metric using the newly parsed metrics. -# merge = "override" -# -# ## The dataformat to be read from files -# ## Each data format has its own unique set of configuration options, read -# ## more about them here: -# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md -# data_format = "influx" - - -# # Rotate a single valued metric into a multi field metric -# [[processors.pivot]] -# ## Tag to use for naming the new field. -# tag_key = "name" -# ## Field to use as the value of the new field. -# value_key = "value" - - -# # Given a tag/field of a TCP or UDP port number, add a tag/field of the service name looked up in the system services file -# [[processors.port_name]] -# [[processors.port_name]] -# ## Name of tag holding the port number -# # tag = "port" -# ## Or name of the field holding the port number -# # field = "port" -# -# ## Name of output tag or field (depending on the source) where service name will be added -# # dest = "service" -# -# ## Default tcp or udp -# # default_protocol = "tcp" -# -# ## Tag containing the protocol (tcp or udp, case-insensitive) -# # protocol_tag = "proto" -# -# ## Field containing the protocol (tcp or udp, case-insensitive) -# # protocol_field = "proto" - - -# # Print all metrics that pass through this filter. -# [[processors.printer]] - - -# # Transforms tag and field values with regex pattern -# [[processors.regex]] -# ## Tag and field conversions defined in a separate sub-tables -# # [[processors.regex.tags]] -# # ## Tag to change -# # key = "resp_code" -# # ## Regular expression to match on a tag value -# # pattern = "^(\\d)\\d\\d$" -# # ## Matches of the pattern will be replaced with this string. Use ${1} -# # ## notation to use the text of the first submatch. -# # replacement = "${1}xx" -# -# # [[processors.regex.fields]] -# # ## Field to change -# # key = "request" -# # ## All the power of the Go regular expressions available here -# # ## For example, named subgroups -# # pattern = "^/api(?P/[\\w/]+)\\S*" -# # replacement = "${method}" -# # ## If result_key is present, a new field will be created -# # ## instead of changing existing field -# # result_key = "method" -# -# ## Multiple conversions may be applied for one field sequentially -# ## Let's extract one more value -# # [[processors.regex.fields]] -# # key = "request" -# # pattern = ".*category=(\\w+).*" -# # replacement = "${1}" -# # result_key = "search_category" - - -# # Rename measurements, tags, and fields that pass through this filter. -# [[processors.rename]] - - -# # ReverseDNS does a reverse lookup on IP addresses to retrieve the DNS name -# [[processors.reverse_dns]] -# ## For optimal performance, you may want to limit which metrics are passed to this -# ## processor. eg: -# ## namepass = ["my_metric_*"] -# -# ## cache_ttl is how long the dns entries should stay cached for. -# ## generally longer is better, but if you expect a large number of diverse lookups -# ## you'll want to consider memory use. -# cache_ttl = "24h" -# -# ## lookup_timeout is how long should you wait for a single dns request to repsond. -# ## this is also the maximum acceptable latency for a metric travelling through -# ## the reverse_dns processor. After lookup_timeout is exceeded, a metric will -# ## be passed on unaltered. -# ## multiple simultaneous resolution requests for the same IP will only make a -# ## single rDNS request, and they will all wait for the answer for this long. -# lookup_timeout = "3s" -# -# ## max_parallel_lookups is the maximum number of dns requests to be in flight -# ## at the same time. Requesting hitting cached values do not count against this -# ## total, and neither do mulptiple requests for the same IP. -# ## It's probably best to keep this number fairly low. -# max_parallel_lookups = 10 -# -# ## ordered controls whether or not the metrics need to stay in the same order -# ## this plugin received them in. If false, this plugin will change the order -# ## with requests hitting cached results moving through immediately and not -# ## waiting on slower lookups. This may cause issues for you if you are -# ## depending on the order of metrics staying the same. If so, set this to true. -# ## keeping the metrics ordered may be slightly slower. -# ordered = false -# -# [[processors.reverse_dns.lookup]] -# ## get the ip from the field "source_ip", and put the result in the field "source_name" -# field = "source_ip" -# dest = "source_name" -# -# [[processors.reverse_dns.lookup]] -# ## get the ip from the tag "destination_ip", and put the result in the tag -# ## "destination_name". -# tag = "destination_ip" -# dest = "destination_name" -# -# ## If you would prefer destination_name to be a field instead, you can use a -# ## processors.converter after this one, specifying the order attribute. - - -# # Add the S2 Cell ID as a tag based on latitude and longitude fields -# [[processors.s2geo]] -# ## The name of the lat and lon fields containing WGS-84 latitude and -# ## longitude in decimal degrees. -# # lat_field = "lat" -# # lon_field = "lon" -# -# ## New tag to create -# # tag_key = "s2_cell_id" -# -# ## Cell level (see https://s2geometry.io/resources/s2cell_statistics.html) -# # cell_level = 9 - - -# # Process metrics using a Starlark script -# [[processors.starlark]] -# ## The Starlark source can be set as a string in this configuration file, or -# ## by referencing a file containing the script. Only one source or script -# ## should be set at once. -# ## -# ## Source of the Starlark script. -# source = ''' -# def apply(metric): -# return metric -# ''' -# -# ## File containing a Starlark script. -# # script = "/usr/local/bin/myscript.star" -# -# ## The constants of the Starlark script. -# # [processors.starlark.constants] -# # max_size = 10 -# # threshold = 0.75 -# # default_name = "Julia" -# # debug_mode = true - - -# # Perform string processing on tags, fields, and measurements -# [[processors.strings]] -# ## Convert a tag value to uppercase -# # [[processors.strings.uppercase]] -# # tag = "method" -# -# ## Convert a field value to lowercase and store in a new field -# # [[processors.strings.lowercase]] -# # field = "uri_stem" -# # dest = "uri_stem_normalised" -# -# ## Convert a field value to titlecase -# # [[processors.strings.titlecase]] -# # field = "status" -# -# ## Trim leading and trailing whitespace using the default cutset -# # [[processors.strings.trim]] -# # field = "message" -# -# ## Trim leading characters in cutset -# # [[processors.strings.trim_left]] -# # field = "message" -# # cutset = "\t" -# -# ## Trim trailing characters in cutset -# # [[processors.strings.trim_right]] -# # field = "message" -# # cutset = "\r\n" -# -# ## Trim the given prefix from the field -# # [[processors.strings.trim_prefix]] -# # field = "my_value" -# # prefix = "my_" -# -# ## Trim the given suffix from the field -# # [[processors.strings.trim_suffix]] -# # field = "read_count" -# # suffix = "_count" -# -# ## Replace all non-overlapping instances of old with new -# # [[processors.strings.replace]] -# # measurement = "*" -# # old = ":" -# # new = "_" -# -# ## Trims strings based on width -# # [[processors.strings.left]] -# # field = "message" -# # width = 10 -# -# ## Decode a base64 encoded utf-8 string -# # [[processors.strings.base64decode]] -# # field = "message" -# -# ## Sanitize a string to ensure it is a valid utf-8 string -# ## Each run of invalid UTF-8 byte sequences is replaced by the replacement string, which may be empty -# # [[processors.strings.valid_utf8]] -# # field = "message" -# # replacement = "" - - -# # Restricts the number of tags that can pass through this filter and chooses which tags to preserve when over the limit. -# [[processors.tag_limit]] -# ## Maximum number of tags to preserve -# limit = 10 -# -# ## List of tags to preferentially preserve -# keep = ["foo", "bar", "baz"] - - -# # Uses a Go template to create a new tag -# [[processors.template]] -# ## Tag to set with the output of the template. -# tag = "topic" -# -# ## Go template used to create the tag value. In order to ease TOML -# ## escaping requirements, you may wish to use single quotes around the -# ## template string. -# template = '{{ .Tag "hostname" }}.{{ .Tag "level" }}' - - -# # Print all metrics that pass through this filter. -# [[processors.topk]] -# ## How many seconds between aggregations -# # period = 10 -# -# ## How many top metrics to return -# # k = 10 -# -# ## Over which tags should the aggregation be done. Globs can be specified, in -# ## which case any tag matching the glob will aggregated over. If set to an -# ## empty list is no aggregation over tags is done -# # group_by = ['*'] -# -# ## Over which fields are the top k are calculated -# # fields = ["value"] -# -# ## What aggregation to use. Options: sum, mean, min, max -# # aggregation = "mean" -# -# ## Instead of the top k largest metrics, return the bottom k lowest metrics -# # bottomk = false -# -# ## The plugin assigns each metric a GroupBy tag generated from its name and -# ## tags. If this setting is different than "" the plugin will add a -# ## tag (which name will be the value of this setting) to each metric with -# ## the value of the calculated GroupBy tag. Useful for debugging -# # add_groupby_tag = "" -# -# ## These settings provide a way to know the position of each metric in -# ## the top k. The 'add_rank_field' setting allows to specify for which -# ## fields the position is required. If the list is non empty, then a field -# ## will be added to each and every metric for each string present in this -# ## setting. This field will contain the ranking of the group that -# ## the metric belonged to when aggregated over that field. -# ## The name of the field will be set to the name of the aggregation field, -# ## suffixed with the string '_topk_rank' -# # add_rank_fields = [] -# -# ## These settings provide a way to know what values the plugin is generating -# ## when aggregating metrics. The 'add_aggregate_field' setting allows to -# ## specify for which fields the final aggregation value is required. If the -# ## list is non empty, then a field will be added to each every metric for -# ## each field present in this setting. This field will contain -# ## the computed aggregation for the group that the metric belonged to when -# ## aggregated over that field. -# ## The name of the field will be set to the name of the aggregation field, -# ## suffixed with the string '_topk_aggregate' -# # add_aggregate_fields = [] - - -# # Rotate multi field metric into several single field metrics -# [[processors.unpivot]] -# ## Tag to use for the name. -# tag_key = "name" -# ## Field to use for the name of the value. -# value_key = "value" - - -############################################################################### -# AGGREGATOR PLUGINS # -############################################################################### - - -# # Keep the aggregate basicstats of each metric passing through. -# [[aggregators.basicstats]] -# ## The period on which to flush & clear the aggregator. -# period = "30s" -# -# ## If true, the original metric will be dropped by the -# ## aggregator and will not get sent to the output plugins. -# drop_original = false -# -# ## Configures which basic stats to push as fields -# # stats = ["count", "min", "max", "mean", "stdev", "s2", "sum"] - - -# # Calculates a derivative for every field. -# [[aggregators.derivative]] -# ## The period in which to flush the aggregator. -# period = "30s" -# ## -# ## If true, the original metric will be dropped by the -# ## aggregator and will not get sent to the output plugins. -# drop_original = false -# ## -# ## This aggregator will estimate a derivative for each field, which is -# ## contained in both the first and last metric of the aggregation interval. -# ## Without further configuration the derivative will be calculated with -# ## respect to the time difference between these two measurements in seconds. -# ## The formula applied is for every field: -# ## -# ## value_last - value_first -# ## derivative = -------------------------- -# ## time_difference_in_seconds -# ## -# ## The resulting derivative will be named *fieldname_rate*. The suffix -# ## "_rate" can be configured by the *suffix* parameter. When using a -# ## derivation variable you can include its name for more clarity. -# # suffix = "_rate" -# ## -# ## As an abstraction the derivative can be calculated not only by the time -# ## difference but by the difference of a field, which is contained in the -# ## measurement. This field is assumed to be monotonously increasing. This -# ## feature is used by specifying a *variable*. -# ## Make sure the specified variable is not filtered and exists in the metrics -# ## passed to this aggregator! -# # variable = "" -# ## -# ## When using a field as the derivation parameter the name of that field will -# ## be used for the resulting derivative, e.g. *fieldname_by_parameter*. -# ## -# ## Note, that the calculation is based on the actual timestamp of the -# ## measurements. When there is only one measurement during that period, the -# ## measurement will be rolled over to the next period. The maximum number of -# ## such roll-overs can be configured with a default of 10. -# # max_roll_over = 10 -# ## - - -# # Report the final metric of a series -# [[aggregators.final]] -# ## The period on which to flush & clear the aggregator. -# period = "30s" -# ## If true, the original metric will be dropped by the -# ## aggregator and will not get sent to the output plugins. -# drop_original = false -# -# ## The time that a series is not updated until considering it final. -# series_timeout = "5m" - - -# # Create aggregate histograms. -# [[aggregators.histogram]] -# ## The period in which to flush the aggregator. -# period = "30s" -# -# ## If true, the original metric will be dropped by the -# ## aggregator and will not get sent to the output plugins. -# drop_original = false -# -# ## If true, the histogram will be reset on flush instead -# ## of accumulating the results. -# reset = false -# -# ## Whether bucket values should be accumulated. If set to false, "gt" tag will be added. -# ## Defaults to true. -# cumulative = true -# -# ## Example config that aggregates all fields of the metric. -# # [[aggregators.histogram.config]] -# # ## Right borders of buckets (with +Inf implicitly added). -# # buckets = [0.0, 15.6, 34.5, 49.1, 71.5, 80.5, 94.5, 100.0] -# # ## The name of metric. -# # measurement_name = "cpu" -# -# ## Example config that aggregates only specific fields of the metric. -# # [[aggregators.histogram.config]] -# # ## Right borders of buckets (with +Inf implicitly added). -# # buckets = [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0] -# # ## The name of metric. -# # measurement_name = "diskio" -# # ## The concrete fields of metric -# # fields = ["io_time", "read_time", "write_time"] - - -# # Merge metrics into multifield metrics by series key -# [[aggregators.merge]] -# ## If true, the original metric will be dropped by the -# ## aggregator and will not get sent to the output plugins. -# drop_original = true - - -# # Keep the aggregate min/max of each metric passing through. -# [[aggregators.minmax]] -# ## General Aggregator Arguments: -# ## The period on which to flush & clear the aggregator. -# period = "30s" -# ## If true, the original metric will be dropped by the -# ## aggregator and will not get sent to the output plugins. -# drop_original = false - - -# # Keep the aggregate quantiles of each metric passing through. -# [[aggregators.quantile]] -# ## General Aggregator Arguments: -# ## The period on which to flush & clear the aggregator. -# period = "30s" -# -# ## If true, the original metric will be dropped by the -# ## aggregator and will not get sent to the output plugins. -# drop_original = false -# -# ## Quantiles to output in the range [0,1] -# # quantiles = [0.25, 0.5, 0.75] -# -# ## Type of aggregation algorithm -# ## Supported are: -# ## "t-digest" -- approximation using centroids, can cope with large number of samples -# ## "exact R7" -- exact computation also used by Excel or NumPy (Hyndman & Fan 1996 R7) -# ## "exact R8" -- exact computation (Hyndman & Fan 1996 R8) -# ## NOTE: Do not use "exact" algorithms with large number of samples -# ## to not impair performance or memory consumption! -# # algorithm = "t-digest" -# -# ## Compression for approximation (t-digest). The value needs to be -# ## greater or equal to 1.0. Smaller values will result in more -# ## performance but less accuracy. -# # compression = 100.0 - - -# # Count the occurrence of values in fields. -# [[aggregators.valuecounter]] -# ## General Aggregator Arguments: -# ## The period on which to flush & clear the aggregator. -# period = "30s" -# ## If true, the original metric will be dropped by the -# ## aggregator and will not get sent to the output plugins. -# drop_original = false -# ## The fields for which the values will be counted -# fields = [] - - -############################################################################### -# INPUT PLUGINS # -############################################################################### - - -############################################################################### -# SERVICE INPUT PLUGINS # -############################################################################### - - -# Statsd UDP/TCP Server -[[inputs.statsd]] - ## Protocol, must be "tcp", "udp", "udp4" or "udp6" (default=udp) - protocol = "udp" - - ## MaxTCPConnection - applicable when protocol is set to tcp (default=250) - max_tcp_connections = 250 - - ## Enable TCP keep alive probes (default=false) - tcp_keep_alive = false - - ## Specifies the keep-alive period for an active network connection. - ## Only applies to TCP sockets and will be ignored if tcp_keep_alive is false. - ## Defaults to the OS configuration. - # tcp_keep_alive_period = "2h" - - ## Address and port to host UDP listener on - service_address = ":8125" - - ## The following configuration options control when telegraf clears it's cache - ## of previous values. If set to false, then telegraf will only clear it's - ## cache when the daemon is restarted. - ## Reset gauges every interval (default=true) - delete_gauges = true - ## Reset counters every interval (default=true) - delete_counters = true - ## Reset sets every interval (default=true) - delete_sets = true - ## Reset timings & histograms every interval (default=true) - delete_timings = true - - ## Percentiles to calculate for timing & histogram stats - percentiles = [50.0, 90.0, 99.0, 99.9, 99.95, 100.0] - - ## separator to use between elements of a statsd metric - metric_separator = "_" - - ## Parses tags in the datadog statsd format - ## http://docs.datadoghq.com/guides/dogstatsd/ - #parse_data_dog_tags = true - - ## Parses datadog extensions to the statsd format - datadog_extensions = true - ## Parses distributions metric as specified in the datadog statsd format - ## https://docs.datadoghq.com/developers/metrics/types/?tab=distribution#definition - datadog_distributions = true - - ## Statsd data translation templates, more info can be read here: - ## https://github.com/influxdata/telegraf/blob/master/docs/TEMPLATE_PATTERN.md - # templates = [ - # "cpu.* measurement*" - # ] - - ## Number of UDP messages allowed to queue up, once filled, - ## the statsd server will start dropping packets - allowed_pending_messages = 10000 - - ## Number of timing/histogram values to track per-measurement in the - ## calculation of percentiles. Raising this limit increases the accuracy - ## of percentiles but also increases the memory usage and cpu time. - percentile_limit = 1000 - - ## Max duration (TTL) for each metric to stay cached/reported without being updated. - #max_ttl = "1000h" - diff --git a/docs/babel.config.js b/docs/babel.config.js new file mode 100644 index 000000000..e00595dae --- /dev/null +++ b/docs/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/docs/concepts/architecture.md b/docs/docs/concepts/architecture.md similarity index 60% rename from docs/concepts/architecture.md rename to docs/docs/concepts/architecture.md index e77119893..f491d15dc 100644 --- a/docs/concepts/architecture.md +++ b/docs/docs/concepts/architecture.md @@ -1,20 +1,20 @@ # Architecture -![Firehose Architecture](../.gitbook/assets/architecture.png) +![Firehose Architecture](/assets/architecture.png) Firehose has the capability to run parallelly on threads. Each thread does the following: -* Get messages from Kafka -* Filter the messages \(optional\) -* Messages are processed by a chain of decorators, each decorator calling the previous one and processing the returned result. - * Push these messages to sink. - * Process the messages not pushed to sink by chained decorators. +- Get messages from Kafka +- Filter the messages \(optional\) +- Messages are processed by a chain of decorators, each decorator calling the previous one and processing the returned result. + - Push these messages to sink. + - Process the messages not pushed to sink by chained decorators. 1. Fail if the error is configured. 2. Retry if the error is configured. 3. Push to DLQ if the error is configured. 4. Ignore messages. -* Captures telemetry and success/failure events and send them to Telegraf -* Repeat the process +- Captures telemetry and success/failure events and send them to Telegraf +- Repeat the process ## System Design @@ -22,56 +22,58 @@ Firehose has the capability to run parallelly on threads. Each thread does the f _**Consumer**_ -* Firehose supports sync and async consumers. - * Sync and async consumers differ in their kafka offset commit strategy. - * SyncConsumer pulls messages from kafka, sends to sink and commits offsets in one single threads. Although Sink can choose to manage its own offsets by implementation appropriate methods. Consumer will get offsets from the sink while committing. - * AsyncConsumer pulls messages from kafka, submit a task to send messages to SinkPool, tries to commit the kafka offsets for the messages for which the tasks are finished. +- Firehose supports sync and async consumers. + - Sync and async consumers differ in their kafka offset commit strategy. + - SyncConsumer pulls messages from kafka, sends to sink and commits offsets in one single threads. Although Sink can choose to manage its own offsets by implementation appropriate methods. Consumer will get offsets from the sink while committing. + - AsyncConsumer pulls messages from kafka, submit a task to send messages to SinkPool, tries to commit the kafka offsets for the messages for which the tasks are finished. _**Filter**_ -* Here it looks for any filters that are configured while creating Firehose. -* There can be a filter on either Key or on Message depending on which fields you want to apply filters on. -* One can choose not to apply any filters and send all the records to the sink. -* It will apply the provided filter condition on the incoming batch of messages and pass the list of filtered messages to the Sink class for the configured sink type. +- Here it looks for any filters that are configured while creating Firehose. +- There can be a filter on either Key or on Message depending on which fields you want to apply filters on. +- One can choose not to apply any filters and send all the records to the sink. +- It will apply the provided filter condition on the incoming batch of messages and pass the list of filtered messages to the Sink class for the configured sink type. _**Sink**_ -* Firehose has an exclusive Sink class for each of the sink types, this Sink receives a list of filtered messages that will go through a well-defined lifecycle. -* All the existing sink types follow the same contract/lifecycle defined in `AbstractSink.java`. It consists of two stages: - * Prepare: Transformation over-filtered messages’ list to prepare the sink-specific insert/update client requests. - * Execute: Requests created in the Prepare stage are executed at this step and a list of failed messages is returned \(if any\) for retry. -* If the batch has any failures, Firehose will retry to push the failed messages to the sink +- Firehose has an exclusive Sink class for each of the sink types, this Sink receives a list of filtered messages that will go through a well-defined lifecycle. +- All the existing sink types follow the same contract/lifecycle defined in `AbstractSink.java`. It consists of two stages: + - Prepare: Transformation over-filtered messages’ list to prepare the sink-specific insert/update client requests. + - Execute: Requests created in the Prepare stage are executed at this step and a list of failed messages is returned \(if any\) for retry. +- If the batch has any failures, Firehose will retry to push the failed messages to the sink _**SinkPool**_ -* Firehose can have a sinkpool to submit tasks based on the configuration. SinkPool is used to asynchronously process messages. -* SinkPool is defined by number of threads and poll timeout of the worker queue. + +- Firehose can have a sinkpool to submit tasks based on the configuration. SinkPool is used to asynchronously process messages. +- SinkPool is defined by number of threads and poll timeout of the worker queue. _**Instrumentation**_ -* Instrumentation is a wrapper around statsD client and logging. Its job is to capture Important metrics such as Latencies, Successful/Failed Messages Count, Sink Response Time, etc. for each record that goes through the Firehose ecosystem. +- Instrumentation is a wrapper around statsD client and logging. Its job is to capture Important metrics such as Latencies, Successful/Failed Messages Count, Sink Response Time, etc. for each record that goes through the Firehose ecosystem. _**Commit**_ -1. SyncConsumer: +1. SyncConsumer: 1. In the Consumer thread, Firehose commits the offset after the messages are sent successfully . 2. AsyncConsumer: - 1. In the Consumer thread, Firehose checks if any of the sink-pool tasks are finished. It sets the offsets of those messages to be committable. It commits the all the committable offsets. + 1. In the Consumer thread, Firehose checks if any of the sink-pool tasks are finished. It sets the offsets of those messages to be committable. It commits the all the committable offsets. _**Message Final State**_ The final state of message can be any one of the followings after it is consumed from kafka: -* Sink -* DLQ -* Ignored -* Filtered + +- Sink +- DLQ +- Ignored +- Filtered One can monitor via plotting the metrics related to messages. ### Schema Handling -* Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data. Data streams on Kafka topics are bound to a protobuf schema. -* Firehose deserializes the data consumed from the topics using the Protobuf descriptors generated out of the artifacts. The artifactory is an HTTP interface that Firehose uses to deserialize. -* The schema handling ie., find the mapped schema for the topic, downloading the descriptors, and dynamically being notified of/updating with the latest schema is abstracted through the Stencil library. +- Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data. Data streams on Kafka topics are bound to a protobuf schema. +- Firehose deserializes the data consumed from the topics using the Protobuf descriptors generated out of the artifacts. The artifactory is an HTTP interface that Firehose uses to deserialize. +- The schema handling ie., find the mapped schema for the topic, downloading the descriptors, and dynamically being notified of/updating with the latest schema is abstracted through the Stencil library. The Stencil is a proprietary library that provides an abstraction layer, for schema handling. @@ -81,27 +83,26 @@ One can monitor via plotting the metrics related to messages. The section details all integrating systems for Firehose deployment. These are external systems that Firehose connects to. -![Firehose Integration](../.gitbook/assets/integration.png) +![Firehose Integration](/assets/integration.png) ### Kafka -* The Kafka topic\(s\) where Firehose reads from. The [`SOURCE_KAFKA_TOPIC`](../reference/configuration/#source_kafka_topic) config can be set in Firehose. +- The Kafka topic\(s\) where Firehose reads from. The [`SOURCE_KAFKA_TOPIC`](../reference/configuration/#source_kafka_topic) config can be set in Firehose. ### ProtoDescriptors -* Generated protobuf descriptors which are hosted behind an artifactory/HTTP endpoint. This endpoint URL and the proto that the Firehose deployment should use to deserialize data with is configured in Firehose. +- Generated protobuf descriptors which are hosted behind an artifactory/HTTP endpoint. This endpoint URL and the proto that the Firehose deployment should use to deserialize data with is configured in Firehose. ### Telegraf -* Telegraf is run as a process beside Firehose to export metrics to InfluxDB. Firehose internally uses statsd, a java library to export metrics to Telegraf. Configured with statsd host parameter that Firehose points. +- Telegraf is run as a process beside Firehose to export metrics to InfluxDB. Firehose internally uses statsd, a java library to export metrics to Telegraf. Configured with statsd host parameter that Firehose points. ### Sink -* The storage where Firehose eventually pushes the data. Can be an HTTP/GRPC Endpoint or one of the Databases mentioned in the Architecture section. Sink Type and each sink-specific configuration are relevant to this integration point. +- The storage where Firehose eventually pushes the data. Can be an HTTP/GRPC Endpoint or one of the Databases mentioned in the Architecture section. Sink Type and each sink-specific configuration are relevant to this integration point. ### InfluxDB -* InfluxDB - time-series database where all Firehose metrics are stored. Integration through the Telegraf component. +- InfluxDB - time-series database where all Firehose metrics are stored. Integration through the Telegraf component. For a complete set of configurations please refer to the sink-specific [configuration](../reference/configuration/). - diff --git a/docs/concepts/consumer.md b/docs/docs/concepts/consumer.md similarity index 100% rename from docs/concepts/consumer.md rename to docs/docs/concepts/consumer.md diff --git a/docs/concepts/decorators.md b/docs/docs/concepts/decorators.md similarity index 100% rename from docs/concepts/decorators.md rename to docs/docs/concepts/decorators.md diff --git a/docs/concepts/filters.md b/docs/docs/concepts/filters.md similarity index 78% rename from docs/concepts/filters.md rename to docs/docs/concepts/filters.md index eaea353cf..cf713eaaf 100644 --- a/docs/concepts/filters.md +++ b/docs/docs/concepts/filters.md @@ -8,7 +8,7 @@ Instead, use this Filter feature provided in Firehose which allows you to apply However, understand that you are ignoring some data/messages and if that ignored value is important for your sink, you might lose/skip data that is essential. So it is best to verify that your filter condition is not skipping essential data, for example, payment transactions. -Firehose uses the Apache Commons JEXL library for parsing the filter expressions. Refer to the [Using Filters](../guides/filters/) section for details on how to configure filters. +Firehose uses the Apache Commons JEXL library for parsing the filter expressions. Refer to the [Using Filters](../guides/json-based-filters.md) section for details on how to configure filters. ## JEXL - based Filtering @@ -18,9 +18,9 @@ The API and the expression language exploit Java-beans naming patterns through i To evaluate expressions using JEXL, you need three things: -* An [engine](https://commons.apache.org/jexl/apidocs/org/apache/commons/jexl3/JexlEngine.html) to create expressions, -* A [context](https://commons.apache.org/jexl/apidocs/org/apache/commons/jexl3/JexlContext.html) containing any variables, and -* An [expression](https://commons.apache.org/jexl/apidocs/org/apache/commons/jexl3/Expression.html) +- An [engine](https://commons.apache.org/jexl/apidocs/org/apache/commons/jexl3/JexlEngine.html) to create expressions, +- A [context](https://commons.apache.org/jexl/apidocs/org/apache/commons/jexl3/JexlContext.html) containing any variables, and +- An [expression](https://commons.apache.org/jexl/apidocs/org/apache/commons/jexl3/Expression.html) Read more about Apache Commons JEXL project [here](https://commons.apache.org/proper/commons-jexl/index.html). @@ -28,10 +28,10 @@ Read more about Apache Commons JEXL project [here](https://commons.apache.org/pr The filtering occurs in the following steps - -* Firehose Consumer creates a Filter object and initializes it with the values of -`FILTER_DATA_SOURCE` i.e. key/message,`FILTER_JEXL_EXPRESSION` and `FILTER_SCHEMA_PROTO_CLASS`as configured in the environment variables. -* `JexlFilter` iterates over the input List of events. For each event, the Protobuf Class as specified by the environment variable `FILTER_SCHEMA_PROTO_CLASS` , converts the key/message of the event from raw byte array to a POJO \(Plain Old Java Object\), which contains getters for accessing various fields of the event data. -* A`JEXLContext` is created to link the key/message proto reference in the JEXL expression with the POJO object generated earlier. JEXL engine converts `FILTER_JEXL_EXPRESSION` string into `JEXLExpression` object and replaces all occurrences of references in the string by the generated POJO object. `JEXLException` is thrown if the filter expression is invalid. -* The `JEXLExpression` is then evaluated for each of these parsed events. The messages for which the `JEXLExpression` evaluates to `true`, are added to the output List of messages and returned by the Filter. +- Firehose Consumer creates a Filter object and initializes it with the values of -`FILTER_DATA_SOURCE` i.e. key/message,`FILTER_JEXL_EXPRESSION` and `FILTER_SCHEMA_PROTO_CLASS`as configured in the environment variables. +- `JexlFilter` iterates over the input List of events. For each event, the Protobuf Class as specified by the environment variable `FILTER_SCHEMA_PROTO_CLASS` , converts the key/message of the event from raw byte array to a POJO \(Plain Old Java Object\), which contains getters for accessing various fields of the event data. +- A`JEXLContext` is created to link the key/message proto reference in the JEXL expression with the POJO object generated earlier. JEXL engine converts `FILTER_JEXL_EXPRESSION` string into `JEXLExpression` object and replaces all occurrences of references in the string by the generated POJO object. `JEXLException` is thrown if the filter expression is invalid. +- The `JEXLExpression` is then evaluated for each of these parsed events. The messages for which the `JEXLExpression` evaluates to `true`, are added to the output List of messages and returned by the Filter. ## JSON - based Filtering @@ -39,8 +39,8 @@ The filtering occurs in the following steps - To filter messages using JSON-based filters, you need two things: -* A JSON Schema string, containing the filter rules -* A JSON Schema Validator, to validate the message against the JSON Schema +- A JSON Schema string, containing the filter rules +- A JSON Schema Validator, to validate the message against the JSON Schema You can read more about JSON Schema [here](https://json-schema.org/). For more details on JSON Schema syntax and specifications, refer [this](https://json-schema.org/specification.html) article. The JSON Schema Validator library used in Firehose is [networknt/json-schema-validator](https://github.com/networknt/json-schema-validator) . JSON-based filters can be applied to both JSON and Protobuf messages. @@ -48,12 +48,12 @@ You can read more about JSON Schema [here](https://json-schema.org/). For more d The filtering occurs in the following steps - -* JSON filter configurations are validated and logged to instrumentation by JsonFilterUtil. In case any configuration is invalid, then IllegalArgumentException is thrown and Firehose is terminated. -* If `FILTER_ESB_MESSAGE_FORMAT=PROTOBUF`, then the serialized key/message protobuf byte array is deserialized to POJO object by the Proto schema class. It is then converted to a JSON string so that it can be parsed by the JSON Schema Validator. -* If`FILTER_ESB_MESSAGE_FORMAT=JSON`, then the serialized JSON byte array is deserialized to a JSON message string. -* The JSON Schema validator performs a validation on the JSON message against the filter rules specified in the JSON Schema string provided in the environment variable`FILTER_JSON_SCHEMA.` -* If there are any validation errors, then that key/message is filtered out and the validation errors are logged to the instrumentation in debug mode. -* If all validation checks pass, then the key/message is added to the ArrayList of filtered messages and returned by the JsonFilter. +- JSON filter configurations are validated and logged to instrumentation by JsonFilterUtil. In case any configuration is invalid, then IllegalArgumentException is thrown and Firehose is terminated. +- If `FILTER_ESB_MESSAGE_FORMAT=PROTOBUF`, then the serialized key/message protobuf byte array is deserialized to POJO object by the Proto schema class. It is then converted to a JSON string so that it can be parsed by the JSON Schema Validator. +- If`FILTER_ESB_MESSAGE_FORMAT=JSON`, then the serialized JSON byte array is deserialized to a JSON message string. +- The JSON Schema validator performs a validation on the JSON message against the filter rules specified in the JSON Schema string provided in the environment variable`FILTER_JSON_SCHEMA.` +- If there are any validation errors, then that key/message is filtered out and the validation errors are logged to the instrumentation in debug mode. +- If all validation checks pass, then the key/message is added to the ArrayList of filtered messages and returned by the JsonFilter. ## Why Use Filters @@ -62,4 +62,3 @@ Filters enable you to consume only a smaller subset of incoming messages fulfill Additionally, Filters can also help to significantly decrease consumer lag when the rate of incoming messages is too high, thus providing significant performance improvements for your sink. If your underlying sink is not able to handle increased \(or default\) volume of data being pushed to it, adding a filter condition in the Firehose to ignore unnecessary messages in the topic would help you bring down the volume of data being processed by the sink. - diff --git a/docs/concepts/monitoring.md b/docs/docs/concepts/monitoring.md similarity index 71% rename from docs/concepts/monitoring.md rename to docs/docs/concepts/monitoring.md index d91b941e7..5322c23e3 100644 --- a/docs/concepts/monitoring.md +++ b/docs/docs/concepts/monitoring.md @@ -6,7 +6,7 @@ The Firehose Grafana dashboard provides detailed visualization of all Firehose m ## Flow of Metrics from Firehose to Grafana -![](../.gitbook/assets/metrics_flow.png) +![](/assets/metrics_flow.png) ### StatsD Client @@ -64,27 +64,27 @@ Lastly, set up Telegraf to send metrics to InfluxDB, following the corresponding #### **Firehose in Docker or deployed locally** -1. Follow [this guide](https://www.influxdata.com/blog/getting-started-with-sending-statsd-metrics-to-telegraf-influxdb/) to install and set up Telegraf as the StatsD host. For a sample Telegraf file, needed for Firehose you may refer the `telegraf.conf` file in `docs/assets/` -2. Configure the Firehose environment variables `METRIC_STATSD_HOST` and `METRIC_STATSD_PORT` to the IP address and port on which Telegraf is listening. By default, `METRIC_STATSD_HOST` is set to `localhost` and `METRIC_STATSD_PORT` is set to the default listener port of Telegraf, i.e.`8125` +1. Follow [this guide](https://www.influxdata.com/blog/getting-started-with-sending-statsd-metrics-to-telegraf-influxdb/) to install and set up Telegraf as the StatsD host. For a sample Telegraf file, needed for Firehose you may refer the `telegraf.conf` file in `docs/assets/` +2. Configure the Firehose environment variables `METRIC_STATSD_HOST` and `METRIC_STATSD_PORT` to the IP address and port on which Telegraf is listening. By default, `METRIC_STATSD_HOST` is set to `localhost` and `METRIC_STATSD_PORT` is set to the default listener port of Telegraf, i.e.`8125` 3. In `telegraf.conf`, check these 2 configs in INPUT PLUGINS in the StatsD plugin configuration, set `datadog_extensions = true` and `datadog_distributions = true` 4. Configure the URL and port of the InfluxDB server in the Telegraf configuration file, i.e.`~/.telegraf/telegraf.conf` #### Firehose deployed on Kubernetes _\*\*_ -1. Follow[ this guide](https://github.com/odpf/charts/tree/main/stable/firehose#readme) for deploying Firehose on a Kubernetes cluster using a Helm chart. -2. Configure the following parameters in the default [values.yaml](https://github.com/odpf/charts/blob/main/stable/firehose/values.yaml) file and run - +1. Follow[ this guide](https://github.com/odpf/charts/tree/main/stable/firehose#readme) for deploying Firehose on a Kubernetes cluster using a Helm chart. +2. Configure the following parameters in the default [values.yaml](https://github.com/odpf/charts/blob/main/stable/firehose/values.yaml) file and run - ```text $ helm install my-release -f values.yaml odpf/firehose ``` -| Key | Type | Default | Description | -| :--- | :--- | :--- | :--- | -| telegraf.config.output.influxdb.database | string | `"test-db"` | db name for telegraf influxdb output | -| telegraf.config.output.influxdb.enabled | bool | `false` | flag for enabling telegraf influxdb output | -| telegraf.config.output.influxdb.retention\_policy | string | `"autogen"` | retention policy for telegraf influxdb output | -| telegraf.config.output.influxdb.urls | list | `["http://localhost:8086"]` | influxdb urls for telegraf output | -| telegraf.enabled | bool | `false` | flag for enabling telegraf | +| Key | Type | Default | Description | +| :----------------------------------------------- | :----- | :-------------------------- | :-------------------------------------------- | +| telegraf.config.output.influxdb.database | string | `"test-db"` | db name for telegraf influxdb output | +| telegraf.config.output.influxdb.enabled | bool | `false` | flag for enabling telegraf influxdb output | +| telegraf.config.output.influxdb.retention_policy | string | `"autogen"` | retention policy for telegraf influxdb output | +| telegraf.config.output.influxdb.urls | list | `["http://localhost:8086"]` | influxdb urls for telegraf output | +| telegraf.enabled | bool | `false` | flag for enabling telegraf | ## Grafana Dashboard @@ -92,69 +92,68 @@ $ helm install my-release -f values.yaml odpf/firehose Grafana dashboard can be loaded on your Grafana cloud account by importing the JSON file `firehose-grafana-dashboard-updated.json` in the `docs/assets/` directory. -![Firehose Grafana dashboard](../.gitbook/assets/screenshot-from-2021-07-12-17-55-11.png) +![Firehose Grafana dashboard](/assets/screenshot-from-2021-07-12-17-55-11.png) Load a Firehose dashboard by configuring the following parameters - -* **Data Source** - name of InfluxDB database for metrics -* **Prometheus Data Source** - Prometheus cluster name if any -* **Organization** - name of the InfluxDB organization -* **Firehose Name** - the Firehose Kafka Consumer Group ID -* **Pod** - specify a particular Kubernetes pod ID or select **All** to track all pods. +- **Data Source** - name of InfluxDB database for metrics +- **Prometheus Data Source** - Prometheus cluster name if any +- **Organization** - name of the InfluxDB organization +- **Firehose Name** - the Firehose Kafka Consumer Group ID +- **Pod** - specify a particular Kubernetes pod ID or select **All** to track all pods. ## Features of Grafana dashboard -* metrics of every pod at any point of time can be obtained by hovering over that time coordinate. -* each pod has its own color code to distinguish it from other pods, in the visualization graph. -* minimum, maximum, and average values of the metrics are displayed for every pod. +- metrics of every pod at any point of time can be obtained by hovering over that time coordinate. +- each pod has its own color code to distinguish it from other pods, in the visualization graph. +- minimum, maximum, and average values of the metrics are displayed for every pod. ## Dashboard Sections ### Type Details -![](../.gitbook/assets/screenshot-from-2021-07-12-17-55-26.png) +![](/assets/screenshot-from-2021-07-12-17-55-26.png) ### Overview -![](../.gitbook/assets/screenshot-from-2021-07-12-17-51-43.png) +![](/assets/screenshot-from-2021-07-12-17-51-43.png) -![](../.gitbook/assets/screenshot-from-2021-07-12-16-55-42.png) +![](/assets/screenshot-from-2021-07-12-16-55-42.png) ### Pods Health -![](../.gitbook/assets/screenshot-from-2021-07-12-16-57-00.png) +![](/assets/screenshot-from-2021-07-12-16-57-00.png) ### Kafka Consumer Details -![](../.gitbook/assets/screenshot-from-2021-07-12-17-02-29.png) +![](/assets/screenshot-from-2021-07-12-17-02-29.png) -![](../.gitbook/assets/screenshot-from-2021-07-12-17-08-00.png) +![](/assets/screenshot-from-2021-07-12-17-08-00.png) -![](../.gitbook/assets/screenshot-from-2021-07-12-17-10-36.png) +![](/assets/screenshot-from-2021-07-12-17-10-36.png) ### Error -![](../.gitbook/assets/screenshot-from-2021-07-12-17-10-54.png) +![](/assets/screenshot-from-2021-07-12-17-10-54.png) ### Memory -![](../.gitbook/assets/screenshot-from-2021-07-12-17-15-22.png) +![](/assets/screenshot-from-2021-07-12-17-15-22.png) ### Garbage Collection -![](../.gitbook/assets/screenshot-from-2021-07-12-17-19-02.png) +![](/assets/screenshot-from-2021-07-12-17-19-02.png) -![](../.gitbook/assets/screenshot-from-2021-07-12-17-19-59.png) +![](/assets/screenshot-from-2021-07-12-17-19-59.png) ### Retry -![](../.gitbook/assets/screenshot-from-2021-07-12-17-20-08.png) +![](/assets/screenshot-from-2021-07-12-17-20-08.png) ### HTTP Sink -![](../.gitbook/assets/screenshot-from-2021-07-12-17-20-35.png) +![](/assets/screenshot-from-2021-07-12-17-20-35.png) ### Filter -![](../.gitbook/assets/screenshot-from-2021-07-12-17-22-00.png) - +![](/assets/screenshot-from-2021-07-12-17-22-00.png) diff --git a/docs/concepts/offsets.md b/docs/docs/concepts/offsets.md similarity index 100% rename from docs/concepts/offsets.md rename to docs/docs/concepts/offsets.md diff --git a/docs/concepts/README.md b/docs/docs/concepts/overview.md similarity index 100% rename from docs/concepts/README.md rename to docs/docs/concepts/overview.md diff --git a/docs/concepts/templating.md b/docs/docs/concepts/templating.md similarity index 55% rename from docs/concepts/templating.md rename to docs/docs/concepts/templating.md index 801fd277e..709aacae6 100644 --- a/docs/concepts/templating.md +++ b/docs/docs/concepts/templating.md @@ -1,6 +1,6 @@ # Templating -Firehose HTTP sink supports payload templating using [`SINK_HTTP_JSON_BODY_TEMPLATE`](../reference/configuration/#-sink_http_json_body_template) configuration. It uses [JsonPath](https://github.com/json-path/JsonPath) for creating Templates which is a DSL for basic JSON parsing. Playground for this: [https://jsonpath.com/](https://jsonpath.com/), where users can play around with a given JSON to extract out the elements as required and validate the `jsonpath`. The template works only when the output data format [`SINK_HTTP_DATA_FORMAT`](../reference/configuration/#-sink_http_data_format) is JSON. +Firehose HTTP sink supports payload templating using [`SINK_HTTP_JSON_BODY_TEMPLATE`](../sinks/http-sink.md#sink_http_json_body_template) configuration. It uses [JsonPath](https://github.com/json-path/JsonPath) for creating Templates which is a DSL for basic JSON parsing. Playground for this: [https://jsonpath.com/](https://jsonpath.com/), where users can play around with a given JSON to extract out the elements as required and validate the `jsonpath`. The template works only when the output data format [`SINK_HTTP_DATA_FORMAT`](../sinks/http-sink.md#sink_http_data_format) is JSON. _**Creating Templates:**_ @@ -10,8 +10,7 @@ One sample configuration\(On XYZ proto\) : `{"test":"$.routes[0]", "$.order_numb Limitations: -* Works when the input DATA TYPE is a protobuf, not a JSON. -* Supports only on messages, not keys. -* validation on the level of valid JSON template. But after data has been replaced the resulting string may or may not be a valid JSON. Users must do proper testing/validation from the service side. -* If selecting fields from complex data types like repeated/messages/map of proto, the user must do filtering based first as selecting a field that does not exist would fail. - +- Works when the input DATA TYPE is a protobuf, not a JSON. +- Supports only on messages, not keys. +- validation on the level of valid JSON template. But after data has been replaced the resulting string may or may not be a valid JSON. Users must do proper testing/validation from the service side. +- If selecting fields from complex data types like repeated/messages/map of proto, the user must do filtering based first as selecting a field that does not exist would fail. diff --git a/docs/contribute/contribution.md b/docs/docs/contribute/contribution.md similarity index 69% rename from docs/contribute/contribution.md rename to docs/docs/contribute/contribution.md index 91c1e6885..685de333a 100644 --- a/docs/contribute/contribution.md +++ b/docs/docs/contribute/contribution.md @@ -2,9 +2,9 @@ The following is a set of guidelines for contributing to Firehose. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. Here are some important resources: -* The [Concepts](../guides/overview.md) section will explain to you about Firehose architecture, -* Our [roadmap](https://github.com/odpf/firehose/blob/main/docs/roadmap.md) is the 10k foot view of where we're going, and -* Github [issues](https://github.com/odpf/firehose/issues) track the ongoing and reported issues. +- The [Concepts](../guides/create_firehose.md) section will explain to you about Firehose architecture, +- Our [roadmap](https://github.com/odpf/firehose/blob/main/docs/roadmap.md) is the 10k foot view of where we're going, and +- Github [issues](https://github.com/odpf/firehose/issues) track the ongoing and reported issues. Development of Firehose happens in the open on GitHub, and we are grateful to the community for contributing bug fixes and improvements. Read below to learn how you can take part in improving Firehose. @@ -16,12 +16,12 @@ You don’t have to be a developer to make a contribution. We also need technica The following parts are open for contribution: -* Adding a new functionality -* Improve an existing functionality -* Adding a new sink -* Improve an existing sink -* Provide suggestions to make the user experience better -* Provide suggestions to Improve the documentation +- Adding a new functionality +- Improve an existing functionality +- Adding a new sink +- Improve an existing sink +- Provide suggestions to make the user experience better +- Provide suggestions to Improve the documentation To help you get your feet wet and get you familiar with our contribution process, we have a list of [good first issues](https://github.com/odpf/firehose/labels/good%20first%20issue) that contain bugs that have a relatively limited scope. This is a great place to get started. @@ -29,10 +29,10 @@ To help you get your feet wet and get you familiar with our contribution process We use RFCs and GitHub issues to communicate ideas. -* You can report a bug or suggest a feature enhancement or can just ask questions. Reach out on Github discussions for this purpose. -* You are also welcome to add a new sink, improve monitoring and logging and improve code quality. -* You can help with documenting new features or improve existing documentation. -* You can also review and accept other contributions if you are a maintainer. +- You can report a bug or suggest a feature enhancement or can just ask questions. Reach out on Github discussions for this purpose. +- You are also welcome to add a new sink, improve monitoring and logging and improve code quality. +- You can help with documenting new features or improve existing documentation. +- You can also review and accept other contributions if you are a maintainer. Please submit a PR to the main branch of the Firehose repository once you are ready to submit your contribution. Code submission to Firehose \(including a submission from project maintainers\) requires review and approval from maintainers or code owners. PRs that are submitted by the general public need to pass the build. Once the build is passed community members will help to review the pull request. @@ -40,18 +40,17 @@ Please submit a PR to the main branch of the Firehose repository once you are re We are always interested in adding new maintainers. What we look for is a series of contributions, good taste, and an ongoing interest in the project. -* maintainers will have write access to the Firehose repositories. -* There is no strict protocol for becoming a maintainer or PMC member. Candidates for new maintainers are typically people that are active contributors and community members. -* Candidates for new maintainers can also be suggested by current maintainers or PMC members. -* If you would like to become a maintainer, you should start contributing to Firehose in any of the ways mentioned. You might also want to talk to other maintainers and ask for their advice and guidance. +- maintainers will have write access to the Firehose repositories. +- There is no strict protocol for becoming a maintainer or PMC member. Candidates for new maintainers are typically people that are active contributors and community members. +- Candidates for new maintainers can also be suggested by current maintainers or PMC members. +- If you would like to become a maintainer, you should start contributing to Firehose in any of the ways mentioned. You might also want to talk to other maintainers and ask for their advice and guidance. ## Guidelines Please follow these practices for your change to get merged fast and smoothly: -* Contributions can only be accepted if they contain appropriate testing \(Unit and Integration Tests\). -* If you are introducing a completely new feature or making any major changes to an existing one, we recommend starting with an RFC and get consensus on the basic design first. -* Make sure your local build is running with all the tests and checkstyle passing. -* If your change is related to user-facing protocols/configurations, you need to make the corresponding change in the documentation as well. -* Docs live in the code repo under [`docs`](https://github.com/odpf/firehose/tree/7d0df99962507e6ad2147837c4536f36d52d5a48/docs/docs/README.md) so that changes to that can be done in the same PR as changes to the code. - +- Contributions can only be accepted if they contain appropriate testing \(Unit and Integration Tests\). +- If you are introducing a completely new feature or making any major changes to an existing one, we recommend starting with an RFC and get consensus on the basic design first. +- Make sure your local build is running with all the tests and checkstyle passing. +- If your change is related to user-facing protocols/configurations, you need to make the corresponding change in the documentation as well. +- Docs live in the code repo under [`docs`](https://github.com/odpf/firehose/tree/7d0df99962507e6ad2147837c4536f36d52d5a48/docs/docs/README.md) so that changes to that can be done in the same PR as changes to the code. diff --git a/docs/contribute/development.md b/docs/docs/contribute/development.md similarity index 100% rename from docs/contribute/development.md rename to docs/docs/contribute/development.md diff --git a/docs/docs/guides/create_firehose.md b/docs/docs/guides/create_firehose.md new file mode 100644 index 000000000..75ec21142 --- /dev/null +++ b/docs/docs/guides/create_firehose.md @@ -0,0 +1,138 @@ +# Creating Firehose + +This page contains how-to guides for creating Firehose with different sinks along with their features. + +{% hint style="info" %} +If you'd like to connect to a sink which is not yet supported, you can create a new sink by following the [contribution guidelines](../contribute/contribution.md) +{% endhint %} + +## Create a Log Sink + +Firehose provides a log sink to make it easy to consume messages in [standard output](https://en.wikipedia.org/wiki/Standard_streams#Standard_output_%28stdout%29). A log sink firehose requires the following [variables](../reference/configurations) to be set. Firehose log sink can work in key as well as message parsing mode configured through [`KAFKA_RECORD_PARSER_MODE`](../reference/configurations#kafka_record_parser_mode) + +An example log sink configurations: + +```text +SOURCE_KAFKA_BROKERS=localhost:9092 +SOURCE_KAFKA_TOPIC=test-topic +KAFKA_RECOED_CONSUMER_GROUP_ID=sample-group-id +KAFKA_RECORD_PARSER_MODE=message +SINK_TYPE=log +INPUT_SCHEMA_PROTO_CLASS=com.tests.TestMessage +``` + +Sample output of a Firehose log sink: + +```text +2021-03-29T08:43:05,998Z [pool-2-thread-1] INFO i.o.firehose.Consumer- Execution successful for 1 records +2021-03-29T08:43:06,246Z [pool-2-thread-1] INFO i.o.firehose.Consumer - Pulled 1 messages +2021-03-29T08:43:06,246Z [pool-2-thread-1] INFO io.odpf.firehose.sink.log.LogSink - +================= DATA ======================= +sample_field: 81179979 +sample_field_2: 9897987987 +event_timestamp { + seconds: 1617007385 + nanos: 964581040 +} +``` + +## Create an HTTP Sink + +Firehose [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) sink allows users to read data from Kafka and write to an HTTP endpoint. it requires the following [variables](../sinks/http-sink.md#http-sink) to be set. You need to create your own HTTP endpoint so that the Firehose can send data to it. + +### Supported Methods + +Firehose supports `PUT` and `POST` verbs in its HTTP sink. The method can be configured using [`SINK_HTTP_REQUEST_METHOD`](../sinks/http-sink.md#sink_http_request_method). + +### Authentication + +Firehose HTTP sink supports [OAuth](https://en.wikipedia.org/wiki/OAuth) authentication. OAuth can be enabled for the HTTP sink by setting [`SINK_HTTP_OAUTH2_ENABLE`](../sinks/http-sink.md#sink_http_oauth2_enable) + +```text +SINK_HTTP_OAUTH2_ACCESS_TOKEN_URL: https://sample-oauth.my-api.com/oauth2/token # OAuth2 Token Endpoint. +SINK_HTTP_OAUTH2_CLIENT_NAME: client-name # OAuth2 identifier issued to the client. +SINK_HTTP_OAUTH2_CLIENT_SECRET: client-secret # OAuth2 secret issued for the client. +SINK_HTTP_OAUTH2_SCOPE: User:read, sys:info # Space-delimited scope overrides. +``` + +### Retries + +Firehose allows for retrying to sink messages in case of failure of HTTP service. The HTTP error code ranges to retry can be configured with [`SINK_HTTP_RETRY_STATUS_CODE_RANGES`](../sinks/http-sink.md#sink_http_retry_status_code_ranges). HTTP request timeout can be configured with [`SINK_HTTP_REQUEST_TIMEOUT_MS`](../sinks/http-sink.md#sink_http_request_timeout_ms) + +### Templating + +Firehose HTTP sink supports payload templating using [`SINK_HTTP_JSON_BODY_TEMPLATE`](../sinks/http-sink.md#sink_http_json_body_template) configuration. It uses [JsonPath](https://github.com/json-path/JsonPath) for creating Templates which is a DSL for basic JSON parsing. Playground for this: [https://jsonpath.com/](https://jsonpath.com/), where users can play around with a given JSON to extract out the elements as required and validate the `jsonpath`. The template works only when the output data format [`SINK_HTTP_DATA_FORMAT`](../sinks/http-sink.md#sink_http_data_format) is JSON. + +_**Creating Templates:**_ + +This is really simple. Find the paths you need to extract using the JSON path. Create a valid JSON template with the static field names + the paths that need to extract. \(Paths name starts with $.\). Firehose will simply replace the paths with the actual data in the path of the message accordingly. Paths can also be used on keys, but be careful that the element in the key must be a string data type. + +One sample configuration\(On XYZ proto\) : `{"test":"$.routes[0]", "$.order_number" : "xxx"}` If you want to dump the entire JSON as it is in the backend, use `"$._all_"` as a path. + +Limitations: + +- Works when the input DATA TYPE is a protobuf, not a JSON. +- Supports only on messages, not keys. +- validation on the level of valid JSON template. But after data has been replaced the resulting string may or may not be a valid JSON. Users must do proper testing/validation from the service side. +- If selecting fields from complex data types like repeated/messages/map of proto, the user must do filtering based first as selecting a field that does not exist would fail. + +## Create a JDBC SINK + +- Supports only PostgresDB as of now. +- Data read from Kafka is written to the PostgresDB database and it requires the following [variables](../sinks/jdbc-sink.md#jdbc-sink) to be set. + +_**Note: Schema \(Table, Columns, and Any Constraints\) being used in firehose configuration must exist in the Database already.**_ + +## Create an InfluxDB Sink + +- Data read from Kafka is written to the InfluxDB time-series database and it requires the following [variables](../sinks/influxdb-sink.md#influx-sink) to be set. + +_**Note:**_ [_**DATABASE**_](../sinks/influxdb-sink.md#sink_influx_db_name) _**and**_ [_**RETENTION POLICY**_](../sinks/influxdb-sink.md#sink_influx_retention_policy) _**being used in firehose configuration must exist already in the Influx, It’s outside the scope of a firehose and won’t be generated automatically.**_ + +## Create a Redis Sink + +- it requires the following [variables](../sinks/redis-sink.md) to be set. +- Redis sink can be created in 2 different modes based on the value of [`SINK_REDIS_DATA_TYPE`](../sinks/redis-sink.md#sink_redis_data_type): HashSet or List + - `Hashset`: For each message, an entry of the format `key : field : value` is generated and pushed to Redis. field and value are generated on the basis of the config [`INPUT_SCHEMA_PROTO_TO_COLUMN_MAPPING`](../sinks/redis-sink.md#-input_schema_proto_to_column_mapping-2) + - `List`: For each message entry of the format `key : value` is generated and pushed to Redis. Value is fetched for the proto index provided in the config [`SINK_REDIS_LIST_DATA_PROTO_INDEX`](../sinks/redis-sink.md#sink_redis_list_data_proto_index) +- The `key` is picked up from a field in the message itself. +- Redis sink also supports different [Deployment Types](../sinks/redis-sink.md#sink_redis_deployment_type) `Standalone` and `Cluster`. +- Limitation: Firehose Redis sink only supports HashSet and List entries as of now. + +## Create an Elasticsearch Sink + +- it requires the following [variables](../sinks/elasticsearch-sink.md) to be set. +- In the Elasticsearch sink, each message is converted into a document in the specified index with the Document type and ID as specified by the user. +- Elasticsearch sink supports reading messages in both JSON and Protobuf formats. +- Using [Routing Key](../sinks/elasticsearch-sink.md#sink_es_routing_key_name) one can route documents to a particular shard in Elasticsearch. + +## Create a GRPC Sink + +- Data read from Kafka is written to a GRPC endpoint and it requires the following [variables](../sinks/grpc-sink.md) to be set. +- You need to create your own GRPC endpoint so that the Firehose can send data to it. The response proto should have a field “success” with value as true or false. + +## Create an MongoDB Sink + +- it requires the following [variables](../sinks/mongo-sink.md) to be set. +- In the MongoDB sink, each message is converted into a BSON Document and then inserted/updated/upserted into the specified Mongo Collection +- MongoDB sink supports reading messages in both JSON and Protobuf formats. + +## Define Standard Configurations + +- These are the configurations that remain common across all the Sink Types. +- You don’t need to modify them necessarily, It is recommended to use them with the default values. More details [here](../reference/configuration#standard). + +## Create a Blob Sink + +- it requires the following [variables](../sinks/blob-sink.md) to be set. +- Only support google cloud storage for now. +- Only support writing protobuf message to apache parquet file format for now. +- The protobuf message need to have a `google.protobuf.Timestamp` field as partitioning timestamp, `event_timestamp` field is usually being used. +- Google cloud credential with some google cloud storage permission is required to run this sink. + +## Create a Bigquery Sink + +- it requires the following [variables](../sinks/bigquery-sink.md) to be set. +- This sink will generate bigquery schema from protobuf message schema and update bigquery table with the latest generated schema. +- The protobuf message of a `google.protobuf.Timestamp` field might be needed when table partitioning is enabled. +- Google cloud credential with some bigquery permission is required to run this sink. diff --git a/docs/guides/deployment.md b/docs/docs/guides/deployment.md similarity index 91% rename from docs/guides/deployment.md rename to docs/docs/guides/deployment.md index 0f99a999c..fa418f500 100644 --- a/docs/guides/deployment.md +++ b/docs/docs/guides/deployment.md @@ -2,12 +2,12 @@ Firehose can deployed locally, inside a Docker container or in a Kubernetes cluster. The following external services must be installed and launched before deploying Firehose on any platform - -* Apache Kafka Server 2.3+ -* Stencil Server as schema registry -* Telegraf as the StatsD host -* InfluxDB for storing metrics -* Grafana for metrics visualization -* destination Sink server +- Apache Kafka Server 2.3+ +- Stencil Server as schema registry +- Telegraf as the StatsD host +- InfluxDB for storing metrics +- Grafana for metrics visualization +- destination Sink server Refer the [Development Guide](../contribute/development.md) section on how to set up and configure the above services. For instructions on how to set up visualization of Firehose metrics , refer the [Monitoring ](../concepts/monitoring.md#setting-up-grafana-with-firehose)section. @@ -39,10 +39,10 @@ Firehose needs Java SE Development Kit 8 to be installed and configured in `JAVA ```text # Clone the repo -$ git clone https://github.com/odpf/firehose.git +$ git clone https://github.com/odpf/firehose.git # Build the jar -$ ./gradlew clean build +$ ./gradlew clean build # Configure env variables $ cat env/local.properties @@ -52,4 +52,3 @@ $ ./gradlew runConsumer ``` **Note:** Sample configuration for other sinks along with some advanced configurations can be found [here](https://github.com/odpf/firehose/blob/main/docs/reference/configuration.md) - diff --git a/docs/docs/guides/jexl-based-filters.md b/docs/docs/guides/jexl-based-filters.md new file mode 100644 index 000000000..0726b2d34 --- /dev/null +++ b/docs/docs/guides/jexl-based-filters.md @@ -0,0 +1,184 @@ +# JEXL-based Filters + +To enable JEXL-based filtering, you need to set the Firehose environment variable `FILTER_ENGINE=JEXL` and provide the required JEXL filter expression to the variable`FILTER_JEXL_EXPRESSION .` + +## JEXL Filter Expression + +Filter expressions are JEXL expressions used to filter messages just after reading from Kafka and before sending to Sink. + +### Rules to write expressions: + +- All the expressions are like a piece of Java code. Follow rules for every data type, as like writing a Java code. Parenthesis `()`can be used to combine multiple arithmetic or logical expressions into a single JEXL expression, which evaluates to a boolean value ie. `true` or `false` +- Start with the object reference of the schema proto class of the key/message on which you wish to apply the filter. Make sure to change the first letter of the proto class to lower case. eg - `sampleLogMessage` \(if `FILTER_SCHEMA_PROTO_CLASS=com.xyz.SampleLogMessage` \) +- Access a particular field by calling the getter method on the proto object. The name of the getter method will be the field name, changed to camel-case, with all underscore \( `_`\) characters removed, and prefixed by the string `get` eg - if the field name is `vehicle_type` , then the getter method name would be `getVehicleType()` +- Access nested fields using linked invocations of the getter methods, `.` and repeatedly call the getter method for the every level of nested field. eg - `sampleLogKey.getEventTimestamp().getSeconds()` +- You can combine multiple fields of the key/message protobuf in a single JEXL expression and perform any arithmetic or logical operations between them. e.g - `sampleKey.getTime().getSeconds() * 1000 + sampleKey.getTime().getMillis() > 22809` + +## Syntax + +### Literals + +Integer Literals +1 or more digits from 0 to 9, eg 42. + +Float Literals +1 or more digits from 0 to 9, followed by a decimal point and then one or more digits from 0 to 9, optionally followed by f or F, eg 42.0 or 42.0f. + +Long Literals +1 or more digits from 0 to 9 suffixed with l or L , eg 42l. + +Double Literals +1 or more digits from 0 to 9, followed by a decimal point and then one or more digits from 0 to 9 suffixed with d or D , eg 42.0d. A special literal NaN can be used to denote Double.NaN constant + +String literals +Can start and end with either ' or " delimiters, e.g. "Hello world" and 'Hello world' are equivalent. +The escape character is \ (backslash). Unicode characters can be used in string literals; +Unicode escape sequences consist of: +a backslash '\' +a 'u' +4 hexadecimal digits ([0-9],[A-H],[a-h]). +Such sequences represent the UTF-16 encoding of a Unicode character, for example, 'a' is equivalent to '\u0061'. + +Regular expression (regex) literals +Start with ~/ and ends with / delimiters, e.g. ~/ABC.\*/ +The escape character is \ (backslash); it only escapes the string delimiter \ (slash) + +Boolean literals +The literals true and false can be used, e.g. val1 == true + +Null literal +The null value is represented as in java using the literal null, e.g. val1 == null + +Array literal +A [ followed by zero or more expressions separated by , and ending with ], e.g. [ 1, 2, "three" ] +This syntax creates an `Object[]`. + +Empty array literal can be specified as [] with result of creating Object[] +JEXL will attempt to strongly type the array; if all entries are of the same class or if all entries are Number instance, the array literal will be an MyClass[] in the former case, a Number[] in the latter case. +Furthermore, if all entries in the array literal are of the same class and that class has an equivalent primitive type, the array returned will be a primitive array. e.g. [1, 2, 3] will be interpreted as int[]. + +List literal +A [ followed by zero or more expressions separated by , and ending with ,...], e.g. [ 1, 2, "three",...] +This syntax creates an `ArrayList`. +Empty list literal can be specified as [...] + +Set literal +A { followed by zero or more expressions separated by , and ending with }, e.g. { "one" , 2, "more"} +This syntax creates a `HashSet`. +Empty set literal can be specified as {} + +**Map literal** +A { followed by zero or more sets of key : value pairs separated by , and ending with }, e.g. { "one" : 1, "two" : 2, "three" : 3, "more": "many more" } +This syntax creates a `HashMap`. +Empty map literal can be specified as {:} + +### Operators + +In addition to the common arithmetic and logical operations, the following operators are also available. + +Boolean and +The usual && operator can be used as well as the word and, e.g. cond1 and cond2 and cond1 && cond2 are equivalent. +Note that this operator can not be overloaded + +Boolean or +The usual || operator can be used as well as the word or, e.g. cond1 or cond2 and cond1 || cond2 are equivalent. +Note that this operator can not be overloaded + +Boolean not +The usual ! operator can be used as well as the word not, e.g. !cond1 and not cond1 are equivalent. +Note that this operator can not be overloaded + +Bitwise and +The usual & operator is used, e.g. 33 & 4, 0010 0001 & 0000 0100 = 0. + +Bitwise or +The usual | operator is used, e.g. 33 | 4, 0010 0001 | 0000 0100 = 0010 0101 = 37. + +Bitwise xor +The usual ^ operator is used, e.g. 33 ^ 4, 0010 0001 ^ 0000 0100 = 0010 0100 = 37. + +Bitwise complement +The usual ~ operator is used, e.g. ~33, ~0010 0001 = 1101 1110 = -34. + +Ternary conditional ?: +The usual ternary conditional operator condition ? if_true : if_false operator can be used as well as the abbreviation value ?: if_false which returns the value if its evaluation is defined, non-null and non-false, e.g. val1 ? val1 : val2 and val1 ?: val2 are equivalent. +NOTE: The condition will evaluate to false when it refers to an undefined variable or null for all JexlEngine flag combinations. This allows explicit syntactic leniency and treats the condition 'if undefined or null or false' the same way in all cases. +Note that this operator can not be overloaded + +Null coalescing operator ?? +The null coalescing operator returns the result of its first operand if it is defined and is not null. +When xandyare null or undefined, x ?? 'unknown or null x' evaluates as 'unknown or null x' y ?? "default" evaluates as "default". +When var x = 42 and var y = "forty-two",x??"other" evaluates as 42 and y??"other" evaluates as "forty-two". +NOTE: this operator does not behave like the ternary conditional since it does not coerce the first argument to a boolean to evaluate the condition. When var x = false and var y = 0,x??true evaluates as false and y??1 evaluates as 0. +Note that this operator can not be overloaded + +Equality +The usual == operator can be used as well as the abbreviation eq. For example val1 == val2 and val1 eq val2 are equivalent. +null is only ever equal to null, that is if you compare null to any non-null value, the result is false. +Equality uses the java equals method + +In or Match=~ +The syntactically Perl inspired =~ operator can be used to check that a string matches a regular expression (expressed either a Java String or a java.util.regex.Pattern). For example "abcdef" =~ "abc.\* returns true. It also checks whether any collection, set or map (on keys) contains a value or not; in that case, it behaves as an "in" operator. Note that arrays and user classes exposing a public 'contains' method will allow their instances to behave as right-hand side operands of this operator. "a" =~ ["a","b","c","d","e",f"] returns true. + +Not-In or Not-Match!~ +The syntactically Perl inspired !~ operator can be used to check that a string does not match a regular expression (expressed either a Java String or a java.util.regex.Pattern). For example "abcdef" !~ "abc.\* returns false. It also checks whether any collection, set or map (on keys) does not contain a value; in that case, it behaves as "not in" operator. Note that arrays and user classes exposing a public 'contains' method will allow their instances to behave as right-hand side operands of this operator. "a" !~ ["a","b","c","d","e",f"] returns true. + +Starts With=^ +The =^ operator is a short-hand for the 'startsWith' method. For example, "abcdef" =^ "abc" returns true. Note that through duck-typing, user classes exposing a public 'startsWith' method will allow their instances to behave as left-hand side operands of this operator. +Not Starts With!^ +This is the negation of the 'starts with' operator. a !^ "abc" is equivalent to !(a =^ "abc") + +Ends With=$ +The =$ operator is a short-hand for the 'endsWith' method. For example, "abcdef" =$ "def" returns true. Note that through duck-typing, user classes exposing an 'endsWith' method will allow their instances to behave as left-hand side operands of this operator. + +Not Ends With!$ +This is the negation of the 'ends with' operator. a !$ "abc" is equivalent to !(a =$ "abc") + +## **Examples** + +Sample proto message: + +```text +===================KEY========================== +driver_id: "abcde12345" +vehicle_type: BIKE +event_timestamp { + seconds: 186178 + nanos: 323080 +} +driver_status: UNAVAILABLE + +================= MESSAGE======================= +driver_id: "abcde12345" +vehicle_type: BIKE +event_timestamp { + seconds: 186178 + nanos: 323080 +} +driver_status: UNAVAILABLE +app_version: "1.0.0" +driver_location { + latitude: 0.6487193703651428 + longitude: 0.791822075843811 + altitude_in_meters: 0.9949166178703308 + accuracy_in_meters: 0.39277541637420654 + speed_in_meters_per_second: 0.28804516792297363 +} +gcm_key: "abc123" +``` + +_**Key**_-_**based filter expressions examples:**_ + +- `sampleLogKey.getDriverId()=="abcde12345"` +- `sampleLogKey.getVehicleType()=="BIKE"` +- `sampleLogKey.getEventTimestamp().getSeconds()==186178` +- `sampleLogKey.getDriverId()=="abcde12345"&&sampleLogKey.getVehicleType=="BIKE"` \(multiple conditions example 1\) +- `sampleLogKey.getVehicleType()=="BIKE"||sampleLogKey.getEventTimestamp().getSeconds()==186178` \(multiple conditions example 2\) + +_**Message -based filter expressions examples:**_ + +- `sampleLogMessage.getGcmKey()=="abc123"` +- `sampleLogMessage.getDriverId()=="abcde12345"&&sampleLogMessage.getDriverLocation().getLatitude()>0.6487193703651428` +- `sampleLogMessage.getDriverLocation().getAltitudeInMeters>0.9949166178703308` + +_**Note: Use `log` sink for testing the applied filtering**_ diff --git a/docs/guides/filters/json-based-filters.md b/docs/docs/guides/json-based-filters.md similarity index 100% rename from docs/guides/filters/json-based-filters.md rename to docs/docs/guides/json-based-filters.md diff --git a/docs/guides/manage.md b/docs/docs/guides/manage.md similarity index 100% rename from docs/guides/manage.md rename to docs/docs/guides/manage.md diff --git a/docs/docs/introduction.md b/docs/docs/introduction.md new file mode 100644 index 000000000..2cfbb546d --- /dev/null +++ b/docs/docs/introduction.md @@ -0,0 +1,55 @@ +--- +id: introduction +slug: / +--- + +# Introduction + +Firehose is a cloud-native service for delivering real-time streaming data to destinations such as service endpoints \(HTTP or GRPC\) & managed databases \(MongoDB, Prometheus, Postgres, InfluxDB, Redis, & ElasticSearch\). With Firehose, you don't need to write applications or manage resources. It automatically scales to match the throughput of your data and requires no ongoing administration. If your data is present in Kafka, Firehose delivers it to the destination\(SINK\) that you specified. + +![](/assets/overview.svg) + +## Key Features + +Discover why users choose Firehose as their main Kafka Consumer + +- **Sinks** Firehose supports sinking stream data to log console, HTTP, GRPC, PostgresDB\(JDBC\), InfluxDB, Elastic Search, Redis, Prometheus and MongoDB. +- **Scale** Firehose scales in an instant, both vertically and horizontally, for high-performance streaming sink and zero data drops. +- **Extensibility** Add your own sink to Firehose with a clearly defined interface or choose from already provided ones. +- **Runtime** Firehose can run inside containers or VMs in a fully managed runtime environment like Kubernetes. +- **Metrics** Always know what’s going on with your deployment with built-in monitoring of throughput, response times, errors, and more. + +## Supported Sinks: + +Following sinks are supported in the Firehose + +- [Log](https://en.wikipedia.org/wiki/Log_file) - Standard Output +- [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) - HTTP services +- [JDBC](https://en.wikipedia.org/wiki/Java_Database_Connectivity) - Postgres DB +- [InfluxDB](https://en.wikipedia.org/wiki/InfluxDB) - A time-series database +- [Redis](https://en.wikipedia.org/wiki/Redis) - An in-memory Key value store +- [ElasticSearch](https://en.wikipedia.org/wiki/Elasticsearch) - A search database +- [GRPC](https://en.wikipedia.org/wiki/GRPC) - GRPC based services +- [Prometheus](https://en.wikipedia.org/wiki/Prometheus_%28software) - A time-series database +- [MongoDB](https://en.wikipedia.org/wiki/MongoDB) - A NoSQL database +- [Bigquery](https://cloud.google.com/bigquery) - A data warehouse provided by Google Cloud +- [Blob Storage](https://gocloud.dev/howto/blob/) - A data storage architecture for large stores of unstructured data like google cloud storage, amazon s3, apache hadoop distributed filesystem + +## How is Firehose different from Kafka-Connect? + +- **Ease of use:** Firehose is easier to install, and using different sinks only requires changing a few configurations. When used in distributed mode across multiple nodes, it requires connectors to be installed across all the workers within your Kafka-Connect cluster. +- **Filtering:** Value-based filtering is much easier to implement as compared to Kafka-Connect. Requires no additional plugins/schema-registry to be installed. +- **Extensible:** Provides a comprehensible abstract sink contract making it easier to add a new sink in Firehose. Firehose also comes with an inbuilt serialization/deserialization and doesn't require any converters and serializers when implementing a new sink. +- **Easy monitoring:** Firehose provides a detailed health dashboard \(Grafana\) for effortless monitoring. +- **Connectors:** Some of the Kafka connect available connectors usually have limitations. Its usually rare to find all the required features in a single connector and so is to find documentation for the same +- **Fully open-source:** Firehose is completely open-source while separation of commercial and open-source features is not very structured in Kafka Connect and for monitoring and advanced features, confluent control center requires an enterprise subscription + +## How can I get started? + +Explore the following resources to get started with Firehose: + +- [Guides](./guides/create_firehose.md) provide guidance on creating Firehose with different sinks. +- [Concepts](./concepts/overview.md) describe all important Firehose concepts. +- [FAQs](./reference/faq.md) lists down some common frequently asked questions about Firehose and related components. +- [Reference](./reference/configuration/) contains details about configurations, metrics, FAQs, and other aspects of Firehose. +- [Contributing](./contribute/contribution.md) contains resources for anyone who wants to contribute to Firehose. diff --git a/docs/reference/configuration.md b/docs/docs/reference/configuration.md similarity index 100% rename from docs/reference/configuration.md rename to docs/docs/reference/configuration.md diff --git a/docs/docs/reference/configurations.md b/docs/docs/reference/configurations.md new file mode 100644 index 0000000000000000000000000000000000000000..6a99547a4defd84eb71998c16aec15c8a06d5245 GIT binary patch literal 5501 zcmcIoU2mf}6y4|i3afqDk=mvo)9Hsa4>TbuErAHg&Q=aPa0W-$5lU?n9-)ln> zN=S#@&b(A9aqQ!J&pr1Z_R)|egwvqY(V_@tGR{2QX zlk)QGkjNk*0oyhn9kF@iv1)I_8c#gm?cM4l%^y3qXZt-1j$5pV?A z32Q79gaBmidEK2BK-FF8r0Z!B&adt z;ytJ?PfpKU0xFg&Qoe@bX+ufJVZ^35LITe-nJ-iZDJBBMB0EB!{36aFWKjLUwiq8~ z1j-o;GHcANAUOUk3-*vCb0{hhon(FhB>EhdTGNPJAp`=NMo;q$+w#3zN7wpLHo9g_ z#(rNnwFkfpHNCD>$r3cn0SnMTs##2qpdcbR$x~HZV!?s7 zjqpDnA2;Hwr5cpx^jI$4iQAr7GS!wMw@kJSS`-n8wK`o@56=@7^_Au{LON{;=%hsB zIa*Km?=*d=IlgXbH)d7hDymEpDedSElQ{;N<~UG=&QZcZ<+s&V@SL>765=R>wJJKM zJ@ife58Z_StLXy;MG@3{gbolrB1dROrun=}laO@@=ZrT-LoI5FLT*)pXi#L$H0>|` z#JacaFP1+rbhGbn;#CM;fD^R9&jjVkQ^H;#TZQsL=TZXw&M*}b?d+p_96n*xV@a0B zgqIDxcnyE^pTLt9VW20BkCP+Rx8c-^ z{o6H&vt<$}eWgMvLV>YN9S~x>8p{$}Pd=M&xUE$yp2@MNn#6h-UEOt+_!=YKh6!d= z59C^HAN7cF4hM_6= zm^D2&!CO^+8^&H1JX}}VMwHf71}boMdU|$tae93A>GJ&J#l`vM@kQBpYTT`jEul?#ADwaYcbOlKQ8lhf9fi;~@`Tv2M+f+}U<{&-6g2Wh1>l```7>_&y z_cUE@>@3WkGxd`zB&5Pa6RV%jD>FX46}`#ul93a<7^7j z{~W4HZ@C2y{7zl7D;B62YWgG#I86nl4*WcfG%y5$cvl1Af+>=7$adRV2$5cQyPKIo zR!H~xq$|y9mg0b9;09^%1pbYSF1!dR&&s-_aPM8%SvHQW8-a`1VXfZGz(DtUxBgBE z*wK*WBoY!i2*{i64uyL6upNv>1p~X#)-Sy3XgjD?T+ES1Rmij(=~#YV zIzcR3=krsswgpk4y5_*V>cJRq)%vM`QN8eiIET9=f(C`9Rh>UcNFZdA*P^ns zHbu}+U(P<>UCzJ@u3Oedci+U?(;$hynob;j;OOpc1!lv<3UkRJCn3BuTu4%`&;=MY hud!BsveFfJJ}7X0ozT*;)jt@zdAe*rey4wL`@ literal 0 HcmV?d00001 diff --git a/docs/reference/core-faqs.md b/docs/docs/reference/core-faqs.md similarity index 91% rename from docs/reference/core-faqs.md rename to docs/docs/reference/core-faqs.md index e6c0a696f..7ef1826ca 100644 --- a/docs/reference/core-faqs.md +++ b/docs/docs/reference/core-faqs.md @@ -14,17 +14,17 @@ Firehose has been built and tested to work with Java SE Development Kit 1.8. Firehose has the capability to run parallelly on threads. Each thread does the following: -* Get messages from Kafka -* Filter the messages \(optional\) -* Push these messages to sink -* All the existing sink types follow the same contract/lifecycle defined in `AbstractSink.java`. It consists of two stages: - * Prepare: Transformation over-filtered messages’ list to prepare the sink-specific insert/update client requests. - * Execute: Requests created in the Prepare stage are executed at this step and a list of failed messages is returned \(if any\) for retry. -* In case push fails and DLQ is: - * enabled: Firehose keeps on retrying for the configured number of attempts before the messages got pushed to DLQ Kafka topic - * disabled: Firehose keeps on retrying until it receives a success code -* Captures telemetry and success/failure events and send them to Telegraf -* Repeat the process +- Get messages from Kafka +- Filter the messages \(optional\) +- Push these messages to sink +- All the existing sink types follow the same contract/lifecycle defined in `AbstractSink.java`. It consists of two stages: + - Prepare: Transformation over-filtered messages’ list to prepare the sink-specific insert/update client requests. + - Execute: Requests created in the Prepare stage are executed at this step and a list of failed messages is returned \(if any\) for retry. +- In case push fails and DLQ is: + - enabled: Firehose keeps on retrying for the configured number of attempts before the messages got pushed to DLQ Kafka topic + - disabled: Firehose keeps on retrying until it receives a success code +- Captures telemetry and success/failure events and send them to Telegraf +- Repeat the process ## Can I do any transformations\(for example filter\) before sending the data to sink? @@ -40,8 +40,8 @@ Adding some sort of a filter condition in the Firehose to ignore unnecessary mes In case push fails and DLQ \(Dead Letter Queue\) is: -* enabled: Firehose keeps on retrying for the configured number of attempts before the messages got pushed to DLQ Kafka topic -* disabled: Firehose keeps on retrying until it receives a success code +- enabled: Firehose keeps on retrying for the configured number of attempts before the messages got pushed to DLQ Kafka topic +- disabled: Firehose keeps on retrying until it receives a success code ## Which Kafka Client configs are available ? @@ -118,11 +118,11 @@ Refer [https://developers.google.com/protocol-buffers](https://developers.google Firehose will send all the fields of the incoming messages to the specified sink. But you can configure your sink destination/ database to consume only the required fields. -## How can I handle consumer lag ? +## How can I handle consumer lag ? -* When it comes to decreasing the topic lag, it often helps to have the environment variable - [`SOURCE_KAFKA_CONSUMER_CONFIG_MAX_POLL_RECORDS`](configuration/#source_kafka_consumer_config_max_poll_records) to be increased from the default of 500 to something higher which will tell the Kafka Consumer to consume more messages in a single poll. -* Additionally, you can increase the workers in the Firehose which will effectively multiply the number of records being processed by Firehose. -* Alternatively, if your underlying sink is not able to handle increased \(or default\) volume of data being pushed to it, adding some sort of a filter condition in the Firehose to ignore unnecessary messages in the topic would help you bring down the volume of data being processed by the sink. +- When it comes to decreasing the topic lag, it often helps to have the environment variable - [`SOURCE_KAFKA_CONSUMER_CONFIG_MAX_POLL_RECORDS`](configuration/#source_kafka_consumer_config_max_poll_records) to be increased from the default of 500 to something higher which will tell the Kafka Consumer to consume more messages in a single poll. +- Additionally, you can increase the workers in the Firehose which will effectively multiply the number of records being processed by Firehose. +- Alternatively, if your underlying sink is not able to handle increased \(or default\) volume of data being pushed to it, adding some sort of a filter condition in the Firehose to ignore unnecessary messages in the topic would help you bring down the volume of data being processed by the sink. ## What is Stencil in context of Firehose ? @@ -160,8 +160,8 @@ So, when Firehose is restarted, the Kafka Consumer automatically starts pulling In case push fails and DLQ \(Dead Letter Queue\) is: -* enabled: Firehose keeps on retrying for the configured number of attempts before the messages got pushed to DLQ Kafka topic -* disabled: Firehose keeps on retrying until it receives a success code +- enabled: Firehose keeps on retrying for the configured number of attempts before the messages got pushed to DLQ Kafka topic +- disabled: Firehose keeps on retrying until it receives a success code ## How does commits for Kafka consumer works ? @@ -181,7 +181,7 @@ When Firehose is restarted, the Kafka Consumer automatically starts pulling mess ## How to configure the filter for a proto field based on some data? -The environment variables `FILTER_DATA_SOURCE` , `FILTER_JEXL_EXPRESSION` and `FILTER_SCHEMA_PROTO_CLASS` need to be set for filters to work. The required filters need to be written in JEXL expression format. Refer [Using Filters](../guides/filters/) section for more details. +The environment variables `FILTER_DATA_SOURCE` , `FILTER_JEXL_EXPRESSION` and `FILTER_SCHEMA_PROTO_CLASS` need to be set for filters to work. The required filters need to be written in JEXL expression format. Refer [Using Filters](../guides/json-based-filters.md) section for more details. ## Can I perform basic arithmetic operations in filters? @@ -194,4 +194,3 @@ Log Sink uses Logback and SL4J lobrary for logging to standard output. Thus, it' ## What are the use-cases of log sink? Firehose provides a log sink to make it easy to consume messages in [standard output](https://en.wikipedia.org/wiki/Standard_streams#Standard_output_%28stdout%29). Log sink can be used for debugging purposes and experimenting with various filters. It can also be used to test the latency and overall performance of the Firehose. - diff --git a/docs/reference/faq/index.md b/docs/docs/reference/faq.md similarity index 100% rename from docs/reference/faq/index.md rename to docs/docs/reference/faq.md diff --git a/docs/reference/glossary.md b/docs/docs/reference/glossary.md similarity index 91% rename from docs/reference/glossary.md rename to docs/docs/reference/glossary.md index b7d093768..4dd0242ca 100644 --- a/docs/reference/glossary.md +++ b/docs/docs/reference/glossary.md @@ -36,9 +36,7 @@ [Filter](../concepts/architecture.md#components) -[Filter configs](../guides/filters/#filter-variables) - -[Filter expression syntax](../guides/filters/#filter-expressions) +[Filter configs](../guides/json-based-filters.md) [Firehose integration](../concepts/architecture.md#firehose-integration) @@ -72,9 +70,9 @@ [JDBC sink configs](configuration/#jdbc-sink) -[JEXL filters](../guides/filters/#filter-expressions) +[JEXL filters](../guides/json-based-filters.md#filter-expressions) -[JEXL expression syntax](../guides/filters/#syntax) +[JEXL expression syntax](../guides/json-based-filters.md#syntax) ## K @@ -98,7 +96,7 @@ [Object Storage Sink](../guides/create_firehose.md#create-a-blob-sink) -[Blob Sink Config](configuration/blob-sink.md) +[Blob Sink Config](../sinks/blob-sink.md) ## P @@ -131,4 +129,3 @@ [Telegraf](../concepts/architecture.md#telegraf) [templating](../concepts/templating.md) - diff --git a/docs/reference/metrics.md b/docs/docs/reference/metrics.md similarity index 100% rename from docs/reference/metrics.md rename to docs/docs/reference/metrics.md diff --git a/docs/roadmap.md b/docs/docs/roadmap.md similarity index 100% rename from docs/roadmap.md rename to docs/docs/roadmap.md diff --git a/docs/sink/bigquery.md b/docs/docs/sink/bigquery.md similarity index 100% rename from docs/sink/bigquery.md rename to docs/docs/sink/bigquery.md diff --git a/docs/reference/configuration/bigquery-sink.md b/docs/docs/sinks/bigquery-sink.md similarity index 100% rename from docs/reference/configuration/bigquery-sink.md rename to docs/docs/sinks/bigquery-sink.md diff --git a/docs/reference/configuration/blob-sink.md b/docs/docs/sinks/blob-sink.md similarity index 100% rename from docs/reference/configuration/blob-sink.md rename to docs/docs/sinks/blob-sink.md diff --git a/docs/reference/configuration/dlq.md b/docs/docs/sinks/dlq.md similarity index 100% rename from docs/reference/configuration/dlq.md rename to docs/docs/sinks/dlq.md diff --git a/docs/reference/configuration/elasticsearch-sink.md b/docs/docs/sinks/elasticsearch-sink.md similarity index 100% rename from docs/reference/configuration/elasticsearch-sink.md rename to docs/docs/sinks/elasticsearch-sink.md diff --git a/docs/reference/configuration/errors.md b/docs/docs/sinks/errors.md similarity index 100% rename from docs/reference/configuration/errors.md rename to docs/docs/sinks/errors.md diff --git a/docs/reference/configuration/filters.md b/docs/docs/sinks/filters.md similarity index 100% rename from docs/reference/configuration/filters.md rename to docs/docs/sinks/filters.md diff --git a/docs/reference/configuration/grpc-sink.md b/docs/docs/sinks/grpc-sink.md similarity index 100% rename from docs/reference/configuration/grpc-sink.md rename to docs/docs/sinks/grpc-sink.md diff --git a/docs/reference/configuration/http-sink.md b/docs/docs/sinks/http-sink.md similarity index 100% rename from docs/reference/configuration/http-sink.md rename to docs/docs/sinks/http-sink.md diff --git a/docs/reference/configuration/influxdb-sink.md b/docs/docs/sinks/influxdb-sink.md similarity index 100% rename from docs/reference/configuration/influxdb-sink.md rename to docs/docs/sinks/influxdb-sink.md diff --git a/docs/reference/configuration/jdbc-sink.md b/docs/docs/sinks/jdbc-sink.md similarity index 100% rename from docs/reference/configuration/jdbc-sink.md rename to docs/docs/sinks/jdbc-sink.md diff --git a/docs/reference/configuration/mongo-sink.md b/docs/docs/sinks/mongo-sink.md similarity index 100% rename from docs/reference/configuration/mongo-sink.md rename to docs/docs/sinks/mongo-sink.md diff --git a/docs/docs/sinks/overview.md b/docs/docs/sinks/overview.md new file mode 100644 index 000000000..dc6275372 --- /dev/null +++ b/docs/docs/sinks/overview.md @@ -0,0 +1,18 @@ +# Configuration + +This page contains reference for all the application configurations for Firehose. + +## Table of Contents + +- [Retries](retries.md) +- [DLQ](dlq.md) +- [Errors](errors.md) +- [Filters](filters.md) +- [HTTP Sink](http-sink.md) +- [JDBC Sink](jdbc-sink.md) +- [Influx Sink](influxdb-sink.md) +- [MongoDB Sink](mongo-sink.md) +- [Elasticsearch Sink](elasticsearch-sink.md) +- [GRPC Sink](grpc-sink.md) +- [Prometheus Sink](prometheus-sink.md) +- [Redis Sink](redis-sink.md) diff --git a/docs/reference/configuration/prometheus-sink.md b/docs/docs/sinks/prometheus-sink.md similarity index 100% rename from docs/reference/configuration/prometheus-sink.md rename to docs/docs/sinks/prometheus-sink.md diff --git a/docs/reference/configuration/redis-sink.md b/docs/docs/sinks/redis-sink.md similarity index 100% rename from docs/reference/configuration/redis-sink.md rename to docs/docs/sinks/redis-sink.md diff --git a/docs/reference/configuration/retries.md b/docs/docs/sinks/retries.md similarity index 100% rename from docs/reference/configuration/retries.md rename to docs/docs/sinks/retries.md diff --git a/docs/reference/configuration/sink-pool.md b/docs/docs/sinks/sink-pool.md similarity index 100% rename from docs/reference/configuration/sink-pool.md rename to docs/docs/sinks/sink-pool.md diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js new file mode 100644 index 000000000..6cfc2d3b9 --- /dev/null +++ b/docs/docusaurus.config.js @@ -0,0 +1,112 @@ +const lightCodeTheme = require('prism-react-renderer/themes/dracula'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); + +// With JSDoc @type annotations, IDEs can provide config autocompletion +/** @type {import('@docusaurus/types').DocusaurusConfig} */ +(module.exports = { + title: 'Firehose', + tagline: 'Load streaming data from Kafka to data stores, data lakes, and analytical storage systems.', + url: 'https://odpf.github.io/', + baseUrl: '/firehose/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + favicon: 'assets/favicon.ico', + organizationName: 'ODPF', + projectName: 'firehose', + + presets: [ + [ + '@docusaurus/preset-classic', + ({ + gtag: { + trackingID: 'G-XXX', + }, + docs: { + routeBasePath: '/', + sidebarPath: require.resolve('./sidebars.js'), + editUrl: 'https://github.com/odpf/firehose/edit/master/docs/', + sidebarCollapsed: true, + }, + blog: false, + theme: { + customCss: [ + require.resolve('./src/css/theme.css'), + require.resolve('./src/css/custom.css'), + require.resolve('./src/css/icons.css'), + ], + }, + }) + ], + ], + + themeConfig: + ({ + colorMode: { + defaultMode: 'light', + respectPrefersColorScheme: true, + }, + navbar: { + title: 'Firehose', + logo: { src: '/firehose.png', }, + hideOnScroll: true, + items: [ + { + type: 'doc', + docId: 'introduction', + position: 'left', + label: 'Docs', + }, + { to: '/help', label: 'Help', position: 'left' }, + { + href: 'https://bit.ly/2RzPbtn', + position: 'right', + className: 'header-slack-link', + }, + { + href: 'https://github.com/odpf/firehose', + className: 'navbar-item-github', + position: 'right', + }, + ], + }, + footer: { + style: 'light', + links: [ + { + title: 'Products', + items: [ + { label: 'Optimus', href: 'https://github.com/odpf/optimus' }, + { label: 'Firehose', href: 'https://github.com/odpf/firehose' }, + { label: 'Raccoon', href: 'https://github.com/odpf/raccoon' }, + { label: 'Dagger', href: 'https://odpf.github.io/dagger/' }, + ], + }, + { + title: 'Resources', + items: [ + { label: 'Docs', to: '/' }, + { label: 'Help', to: '/help', }, + ], + }, + { + title: 'Community', + items: [ + { label: 'Slack', href: 'https://bit.ly/2RzPbtn' }, + { label: 'GitHub', href: 'https://github.com/odpf/firehose' } + ], + }, + ], + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + announcementBar: { + id: 'star-repo', + content: '⭐️ If you like Firehose, give it a star on GitHub! ⭐', + backgroundColor: '#222', + textColor: '#eee', + isCloseable: true, + }, + }), +}); diff --git a/docs/guides/create_firehose.md b/docs/guides/create_firehose.md deleted file mode 100644 index 439f01480..000000000 --- a/docs/guides/create_firehose.md +++ /dev/null @@ -1,139 +0,0 @@ -# Creating Firehose - -This page contains how-to guides for creating Firehose with different sinks along with their features. - -{% hint style="info" %} -If you'd like to connect to a sink which is not yet supported, you can create a new sink by following the [contribution guidelines](../contribute/contribution.md) -{% endhint %} - -## Create a Log Sink - -Firehose provides a log sink to make it easy to consume messages in [standard output](https://en.wikipedia.org/wiki/Standard_streams#Standard_output_%28stdout%29). A log sink firehose requires the following [variables](../reference/configuration/#-generic) to be set. Firehose log sink can work in key as well as message parsing mode configured through [`KAFKA_RECORD_PARSER_MODE`](../reference/configuration/#kafka_record_parser_mode) - -An example log sink configurations: - -```text -SOURCE_KAFKA_BROKERS=localhost:9092 -SOURCE_KAFKA_TOPIC=test-topic -KAFKA_RECOED_CONSUMER_GROUP_ID=sample-group-id -KAFKA_RECORD_PARSER_MODE=message -SINK_TYPE=log -INPUT_SCHEMA_PROTO_CLASS=com.tests.TestMessage -``` - -Sample output of a Firehose log sink: - -```text -2021-03-29T08:43:05,998Z [pool-2-thread-1] INFO i.o.firehose.Consumer- Execution successful for 1 records -2021-03-29T08:43:06,246Z [pool-2-thread-1] INFO i.o.firehose.Consumer - Pulled 1 messages -2021-03-29T08:43:06,246Z [pool-2-thread-1] INFO io.odpf.firehose.sink.log.LogSink - -================= DATA ======================= -sample_field: 81179979 -sample_field_2: 9897987987 -event_timestamp { - seconds: 1617007385 - nanos: 964581040 -} -``` - -## Create an HTTP Sink - -Firehose [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) sink allows users to read data from Kafka and write to an HTTP endpoint. it requires the following [variables](../reference/configuration/#-http-sink) to be set. You need to create your own HTTP endpoint so that the Firehose can send data to it. - -### Supported Methods - -Firehose supports `PUT` and `POST` verbs in its HTTP sink. The method can be configured using [`SINK_HTTP_REQUEST_METHOD`](../reference/configuration/#-sink_http_request_method). - -### Authentication - -Firehose HTTP sink supports [OAuth](https://en.wikipedia.org/wiki/OAuth) authentication. OAuth can be enabled for the HTTP sink by setting [`SINK_HTTP_OAUTH2_ENABLE`](../reference/configuration/#-sink_http_oauth2_enable) - -```text -SINK_HTTP_OAUTH2_ACCESS_TOKEN_URL: https://sample-oauth.my-api.com/oauth2/token # OAuth2 Token Endpoint. -SINK_HTTP_OAUTH2_CLIENT_NAME: client-name # OAuth2 identifier issued to the client. -SINK_HTTP_OAUTH2_CLIENT_SECRET: client-secret # OAuth2 secret issued for the client. -SINK_HTTP_OAUTH2_SCOPE: User:read, sys:info # Space-delimited scope overrides. -``` - -### Retries - -Firehose allows for retrying to sink messages in case of failure of HTTP service. The HTTP error code ranges to retry can be configured with [`SINK_HTTP_RETRY_STATUS_CODE_RANGES`](../reference/configuration/#-sink_http_retry_status_code_ranges). HTTP request timeout can be configured with [`SINK_HTTP_REQUEST_TIMEOUT_MS`](../reference/configuration/#-sink_http_request_timeout_ms) - -### Templating - -Firehose HTTP sink supports payload templating using [`SINK_HTTP_JSON_BODY_TEMPLATE`](../reference/configuration/#-sink_http_json_body_template) configuration. It uses [JsonPath](https://github.com/json-path/JsonPath) for creating Templates which is a DSL for basic JSON parsing. Playground for this: [https://jsonpath.com/](https://jsonpath.com/), where users can play around with a given JSON to extract out the elements as required and validate the `jsonpath`. The template works only when the output data format [`SINK_HTTP_DATA_FORMAT`](../reference/configuration/#-sink_http_data_format) is JSON. - -_**Creating Templates:**_ - -This is really simple. Find the paths you need to extract using the JSON path. Create a valid JSON template with the static field names + the paths that need to extract. \(Paths name starts with $.\). Firehose will simply replace the paths with the actual data in the path of the message accordingly. Paths can also be used on keys, but be careful that the element in the key must be a string data type. - -One sample configuration\(On XYZ proto\) : `{"test":"$.routes[0]", "$.order_number" : "xxx"}` If you want to dump the entire JSON as it is in the backend, use `"$._all_"` as a path. - -Limitations: - -* Works when the input DATA TYPE is a protobuf, not a JSON. -* Supports only on messages, not keys. -* validation on the level of valid JSON template. But after data has been replaced the resulting string may or may not be a valid JSON. Users must do proper testing/validation from the service side. -* If selecting fields from complex data types like repeated/messages/map of proto, the user must do filtering based first as selecting a field that does not exist would fail. - -## Create a JDBC SINK - -* Supports only PostgresDB as of now. -* Data read from Kafka is written to the PostgresDB database and it requires the following [variables](../reference/configuration/#-jdbc-sink) to be set. - -_**Note: Schema \(Table, Columns, and Any Constraints\) being used in firehose configuration must exist in the Database already.**_ - -## Create an InfluxDB Sink - -* Data read from Kafka is written to the InfluxDB time-series database and it requires the following [variables](../reference/configuration/#-influx-sink) to be set. - -_**Note:**_ [_**DATABASE**_](../reference/configuration/#-sink_influx_db_name) _**and**_ [_**RETENTION POLICY**_](../reference/configuration/#-sink_influx_retention_policy) _**being used in firehose configuration must exist already in the Influx, It’s outside the scope of a firehose and won’t be generated automatically.**_ - -## Create a Redis Sink - -* it requires the following [variables](../reference/configuration/#-redis-sink) to be set. -* Redis sink can be created in 2 different modes based on the value of [`SINK_REDIS_DATA_TYPE`](../reference/configuration/#-sink_redis_data_type): HashSet or List - * `Hashset`: For each message, an entry of the format `key : field : value` is generated and pushed to Redis. field and value are generated on the basis of the config [`INPUT_SCHEMA_PROTO_TO_COLUMN_MAPPING`](https://github.com/odpf/firehose/blob/documentation/docs/reference/configuration.md#-input_schema_proto_to_column_mapping-2) - * `List`: For each message entry of the format `key : value` is generated and pushed to Redis. Value is fetched for the proto index provided in the config [`SINK_REDIS_LIST_DATA_PROTO_INDEX`](../reference/configuration/#-sink_redis_list_data_proto_index) -* The `key` is picked up from a field in the message itself. -* Redis sink also supports different [Deployment Types](../reference/configuration/#-sink_redis_deployment_type) `Standalone` and `Cluster`. -* Limitation: Firehose Redis sink only supports HashSet and List entries as of now. - -## Create an Elasticsearch Sink - -* it requires the following [variables](../reference/configuration/#-elasticsearch-sink) to be set. -* In the Elasticsearch sink, each message is converted into a document in the specified index with the Document type and ID as specified by the user. -* Elasticsearch sink supports reading messages in both JSON and Protobuf formats. -* Using [Routing Key](../reference/configuration/#-sink_es_routing_key_name) one can route documents to a particular shard in Elasticsearch. - -## Create a GRPC Sink - -* Data read from Kafka is written to a GRPC endpoint and it requires the following [variables](../reference/configuration/#-grpc-sink) to be set. -* You need to create your own GRPC endpoint so that the Firehose can send data to it. The response proto should have a field “success” with value as true or false. - -## Create an MongoDB Sink - -* it requires the following [variables](../reference/configuration.md#mongodb-sink) to be set. -* In the MongoDB sink, each message is converted into a BSON Document and then inserted/updated/upserted into the specified Mongo Collection -* MongoDB sink supports reading messages in both JSON and Protobuf formats. - -## Define Standard Configurations - -* These are the configurations that remain common across all the Sink Types. -* You don’t need to modify them necessarily, It is recommended to use them with the default values. More details [here](../reference/configuration/#-standard). - - -## Create a Blob Sink - -* it requires the following [variables](../reference/configuration.md#objectstorage-sink) to be set. -* Only support google cloud storage for now. -* Only support writing protobuf message to apache parquet file format for now. -* The protobuf message need to have a `google.protobuf.Timestamp` field as partitioning timestamp, `event_timestamp` field is usually being used. -* Google cloud credential with some google cloud storage permission is required to run this sink. - -## Create a Bigquery Sink - -* it requires the following [variables](../reference/configuration.md#bigquery-sink) to be set. -* This sink will generate bigquery schema from protobuf message schema and update bigquery table with the latest generated schema. -* The protobuf message of a `google.protobuf.Timestamp` field might be needed when table partitioning is enabled. -* Google cloud credential with some bigquery permission is required to run this sink. \ No newline at end of file diff --git a/docs/guides/filters/README.md b/docs/guides/filters/README.md deleted file mode 100644 index e04d5bde6..000000000 --- a/docs/guides/filters/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Using Filters - -## Table of contents - -* [JSON-based Filters](json-based-filters.md) -* [JEXL-based Filters](jexl-based-filters.md) - diff --git a/docs/guides/filters/jexl-based-filters.md b/docs/guides/filters/jexl-based-filters.md deleted file mode 100644 index 3ffbf4f2d..000000000 --- a/docs/guides/filters/jexl-based-filters.md +++ /dev/null @@ -1,360 +0,0 @@ -# JEXL-based Filters - -To enable JEXL-based filtering, you need to set the Firehose environment variable `FILTER_ENGINE=JEXL` and provide the required JEXL filter expression to the variable`FILTER_JEXL_EXPRESSION .` - -## JEXL Filter Expression - -Filter expressions are JEXL expressions used to filter messages just after reading from Kafka and before sending to Sink. - -### Rules to write expressions: - -* All the expressions are like a piece of Java code. Follow rules for every data type, as like writing a Java code. Parenthesis `()`can be used to combine multiple arithmetic or logical expressions into a single JEXL expression, which evaluates to a boolean value ie. `true` or `false` -* Start with the object reference of the schema proto class of the key/message on which you wish to apply the filter. Make sure to change the first letter of the proto class to lower case. eg - `sampleLogMessage` \(if `FILTER_SCHEMA_PROTO_CLASS=com.xyz.SampleLogMessage` \) -* Access a particular field by calling the getter method on the proto object. The name of the getter method will be the field name, changed to camel-case, with all underscore \( `_`\) characters removed, and prefixed by the string `get` eg - if the field name is `vehicle_type` , then the getter method name would be `getVehicleType()` -* Access nested fields using linked invocations of the getter methods, `.` and repeatedly call the getter method for the every level of nested field. eg - `sampleLogKey.getEventTimestamp().getSeconds()` -* You can combine multiple fields of the key/message protobuf in a single JEXL expression and perform any arithmetic or logical operations between them. e.g - `sampleKey.getTime().getSeconds() * 1000 + sampleKey.getTime().getMillis() > 22809` - -## Syntax - -### Literals - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ItemDescription
Integer Literals1 or more digits from 0 to 9, eg 42.
Float Literals1 or more digits from 0 to 9, followed by a decimal - point and then one or more digits from 0 to 9, optionally - followed by f or F, eg 42.0 or 42.0f.
Long Literals1 or more digits from 0 to 9 suffixed with l or L , - eg 42l.
Double Literals1 or more digits from 0 to 9, followed by a decimal - point and then one or more digits from 0 to 9 suffixed - with d or D , eg 42.0d. A special literal NaN can - be used to denote Double.NaN constant
String literals -

Can start and end with either ' or " delimiters, - e.g. "Hello world" and 'Hello world' are - equivalent.

-

The escape character is \ (backslash). Unicode characters can - be used in string literals;

-
    -
  • Unicode escape sequences consist of:
  • -
  • a backslash '\'
  • -
  • a 'u'
  • -
  • 4 hexadecimal digits ([0-9],[A-H],[a-h]).
  • -
-

Such sequences represent the UTF-16 encoding of a Unicode character, for - example, 'a' is equivalent to '\u0061'.

-
Regular expression (regex) literals -

Start with ~/ and ends with / delimiters, e.g. ~/ABC.*/ -

-

The escape character is \ (backslash); it only escapes the - string delimiter \ (slash)

-
Boolean literalsThe literals true and false can be used, e.g. val1 == true -
Null literalThe null value is represented as in java using the literal null, - e.g. val1 == null -
Array literal -

A [ followed by zero or more expressions separated by , and - ending with ], e.g. [ 1, 2, "three" ] -

-

This syntax creates an Object[].

-

Empty array literal can be specified as [] with result of creating Object[] -

-

JEXL will attempt to strongly type the array; if all entries are of the - same class or if all entries are Number instance, the array literal will - be an MyClass[] in the former case, a Number[] in - the latter case.

-

Furthermore, if all entries in the array literal are of the same class - and that class has an equivalent primitive type, the array returned will - be a primitive array. e.g. [1, 2, 3] will be interpreted as int[].

-
List literal -

A [ followed by zero or more expressions separated by , and - ending with ,...], e.g. [ 1, 2, "three",...] -

-

This syntax creates an ArrayList<Object>.

-

Empty list literal can be specified as [...] -

-
Set literal -

A { followed by zero or more expressions separated by , and - ending with }, e.g. { "one" , 2, "more"} -

-

This syntax creates a HashSet<Object>.

-

Empty set literal can be specified as {} -

-
Map literal -

A { followed by zero or more sets of key : value pairs - separated by , and ending with }, e.g. { "one" : 1, "two" : 2, "three" : 3, "more": "many more" } -

-

This syntax creates a HashMap<Object,Object>.

-

Empty map literal can be specified as {:} -

-
- -### Operators - -In addition to the common arithmetic and logical operations, the following operators are also available. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OperatorDescription
Boolean and - -

The usual && operator can be used as well as the word and, - e.g. cond1 and cond2 and cond1 && cond2 are - equivalent.

-

Note that this operator can not be overloaded

-
Boolean or - -

The usual || operator can be used as well as the word or, - e.g. cond1 or cond2 and cond1 || cond2 are equivalent.

-

Note that this operator can not be overloaded

-
Boolean not - -

The usual ! operator can be used as well as the word not, - e.g. !cond1 and not cond1 are equivalent.

-

Note that this operator can not be overloaded

-
Bitwise and - The usual & operator is used, e.g. 33 & 4, - 0010 0001 & 0000 0100 = 0.
Bitwise or - The usual | operator is used, e.g. 33 | 4, 0010 - 0001 | 0000 0100 = 0010 0101 = 37.
Bitwise xor - The usual ^ operator is used, e.g. 33 ^ 4, 0010 - 0001 ^ 0000 0100 = 0010 0100 = 37.
Bitwise complement - The usual ~ operator is used, e.g. ~33, ~0010 0001 - = 1101 1110 = -34.
Ternary conditional ?: - -

The usual ternary conditional operator condition ? if_true : if_false operator - can be used as well as the abbreviation value ?: if_false which - returns the value if its evaluation is defined, non-null and - non-false, e.g. val1 ? val1 : val2 and val1 ?: val2 are - equivalent.

-

NOTE: The condition will evaluate to false when it refers - to an undefined variable or null for all JexlEngine flag - combinations. This allows explicit syntactic leniency and treats the condition - 'if undefined or null or false' the same way in all cases.

-

Note that this operator can not be overloaded

-
Null coalescing operator ?? - -

The null coalescing operator returns the result of its first operand if - it is defined and is not null.

-

When xandyare null or undefined, x ?? 'unknown or null x' evaluates - as 'unknown or null x' y ?? "default" evaluates - as "default".

-

When var x = 42 and var y = "forty-two",x??"other" evaluates - as 42 and y??"other" evaluates as "forty-two".

-

NOTE: this operator does not behave like the ternary conditional - since it does not coerce the first argument to a boolean to evaluate the - condition. When var x = false and var y = 0,x??true evaluates - as false and y??1 evaluates as 0.

-

Note that this operator can not be overloaded

-
Equality -

The usual == operator can be used as well as the abbreviation eq. - For example val1 == val2 and val1 eq val2 are equivalent.

-
    -
  1. null is only ever equal to null, that is if you compare null - to any non-null value, the result is false.
  2. -
  3. Equality uses the java equals method
  4. -
-
In or Match=~ - The syntactically Perl inspired =~ operator can be used to - check that a string matches a regular expression (expressed - either a Java String or a java.util.regex.Pattern). For example "abcdef" =~ "abc.* returns true. - It also checks whether any collection, set or map (on keys) contains a - value or not; in that case, it behaves as an "in" operator. Note - that arrays and user classes exposing a public 'contains' method - will allow their instances to behave as right-hand side operands of this - operator. "a" =~ ["a","b","c","d","e",f"] returns true.
Not-In or Not-Match!~ - The syntactically Perl inspired !~ operator can be used to - check that a string does not match a regular expression (expressed - either a Java String or a java.util.regex.Pattern). For example "abcdef" !~ "abc.* returns false. - It also checks whether any collection, set or map (on keys) does not contain - a value; in that case, it behaves as "not in" operator. Note - that arrays and user classes exposing a public 'contains' method - will allow their instances to behave as right-hand side operands of this - operator. "a" !~ ["a","b","c","d","e",f"] returns true.
Starts With=^ - The =^ operator is a short-hand for the 'startsWith' - method. For example, "abcdef" =^ "abc" returns true. - Note that through duck-typing, user classes exposing a public 'startsWith' - method will allow their instances to behave as left-hand side operands - of this operator.
Not Starts With!^ - This is the negation of the 'starts with' operator. a !^ "abc" is - equivalent to !(a =^ "abc") -
Ends With=$ - The =$ operator is a short-hand for the 'endsWith' - method. For example, "abcdef" =$ "def" returns true. - Note that through duck-typing, user classes exposing an 'endsWith' - method will allow their instances to behave as left-hand side operands - of this operator.
Not Ends With!$ - This is the negation of the 'ends with' operator. a !$ "abc" is - equivalent to !(a =$ "abc") -
- -## **Examples** - -Sample proto message: - -```text -===================KEY========================== -driver_id: "abcde12345" -vehicle_type: BIKE -event_timestamp { - seconds: 186178 - nanos: 323080 -} -driver_status: UNAVAILABLE - -================= MESSAGE======================= -driver_id: "abcde12345" -vehicle_type: BIKE -event_timestamp { - seconds: 186178 - nanos: 323080 -} -driver_status: UNAVAILABLE -app_version: "1.0.0" -driver_location { - latitude: 0.6487193703651428 - longitude: 0.791822075843811 - altitude_in_meters: 0.9949166178703308 - accuracy_in_meters: 0.39277541637420654 - speed_in_meters_per_second: 0.28804516792297363 -} -gcm_key: "abc123" -``` - -_**Key**_-_**based filter expressions examples:**_ - -* `sampleLogKey.getDriverId()=="abcde12345"` -* `sampleLogKey.getVehicleType()=="BIKE"` -* `sampleLogKey.getEventTimestamp().getSeconds()==186178` -* `sampleLogKey.getDriverId()=="abcde12345"&&sampleLogKey.getVehicleType=="BIKE"` \(multiple conditions example 1\) -* `sampleLogKey.getVehicleType()=="BIKE"||sampleLogKey.getEventTimestamp().getSeconds()==186178` \(multiple conditions example 2\) - -_**Message -based filter expressions examples:**_ - -* `sampleLogMessage.getGcmKey()=="abc123"` -* `sampleLogMessage.getDriverId()=="abcde12345"&&sampleLogMessage.getDriverLocation().getLatitude()>0.6487193703651428` -* `sampleLogMessage.getDriverLocation().getAltitudeInMeters>0.9949166178703308` - -_**Note: Use `log` sink for testing the applied filtering**_ - diff --git a/docs/guides/overview.md b/docs/guides/overview.md deleted file mode 100644 index 3efd61ee9..000000000 --- a/docs/guides/overview.md +++ /dev/null @@ -1,28 +0,0 @@ -# Overview - -The following topics will describe how to manage Firehose throughout its lifecycle. - -## Creating Firehose - -Firehose is designed to work with different sinks. Each deployment of Firehose can only have one sink. Currently supported sinks by Firehose are Log, HTTP, JDBC, InfluxDB, Prometheus, GRPC, Elastic Search and Redis. - -{% page-ref page="create\_firehose.md" %} - -## Using Filters in Firehose - -Use the Filter feature provided in Firehose which allows you to apply any filters on the fields present in the data set and helps you narrow it down to your use case-specific data. - -{% page-ref page="filters/" %} - -## Deploying Firehose - -Firehose can run inside VMs or containers in a fully managed runtime environment like Kubernetes. This section contains guides, best practices and advises related to deploying Firehose in production. - -{% page-ref page="deployment.md" %} - -## Troubleshooting Firehose - -Firehose scales in an instant, both vertically and horizontally for high performance streaming sink and zero data drops. This section contains guides, best practices and advises related to troubleshooting issues with Firehose in production. - -{% page-ref page="manage.md" %} - diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..eafe43b2b --- /dev/null +++ b/docs/package.json @@ -0,0 +1,42 @@ +{ + "name": "firehose", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids" + }, + "dependencies": { + "@docusaurus/core": "^0.0.0-4608", + "@docusaurus/plugin-google-gtag": "^2.0.0-beta.6", + "@docusaurus/preset-classic": "^0.0.0-4608", + "@mdx-js/react": "^1.6.21", + "@svgr/webpack": "^6.0.0", + "classnames": "^2.3.1", + "clsx": "^1.1.1", + "file-loader": "^6.2.0", + "prism-react-renderer": "^1.2.1", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "url-loader": "^4.1.1" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/docs/reference/configuration/README.md b/docs/reference/configuration/README.md deleted file mode 100644 index 7ff4a15a5..000000000 --- a/docs/reference/configuration/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Configuration - -This page contains reference for all the application configurations for Firehose. - -## Table of Contents - -* [Generic](generic-1.md) -* [Stencil Client](stencil-client.md) -* [Retries](retries.md) -* [DLQ](dlq.md) -* [Errors](errors.md) -* [Kafka Consumer ](kafka-consumer-1.md) -* [Filters](filters.md) -* [HTTP Sink](http-sink.md) -* [JDBC Sink](jdbc-sink.md) -* [Influx Sink](influxdb-sink.md) -* [MongoDB Sink](mongo-sink.md) -* [Elasticsearch Sink](elasticsearch-sink.md) -* [GRPC Sink](grpc-sink.md) -* [Prometheus Sink](prometheus-sink.md) -* [Redis Sink](redis-sink.md) - diff --git a/docs/reference/configuration/generic-1.md b/docs/reference/configuration/generic-1.md deleted file mode 100644 index 4d785002d720e3c1804bc6fcc134193e3993154e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1951 zcmbuAUvJws6vg+fPjTVAtV8Pj=>`k|`k>j0<3yGONnTMP0L@5OHW7+cD9V{J^t<;` zc3QX9fDC;xZ0d^q@!WHdPhf@$jVL_Nml9f`9$OF!u7$ykZV?PVb@aUjyFsY5l=@ky zHEg*N{6V^P4G#z{TF*N&!_WzMq6O|bA;lE!(=CZV5Yy*giysyZom@YHcBDuE>^UL)wL@4=BC zP)OdkgA^pt*kWtjaZaC$y|Vv{%b~^LauKnGpCt2W_8nu*o5uCvfR(rg0ny5`_rwNy ziRSF7L$iBXCSToVaYQyUHMfJ@|Bfz3S0iocU8cJF0nO-ibV*CNMP->4)LBctrqy?} zS{kvXN>PqJ9bHa0R%pfLp`nW)Pv;Ys<$j(`*-f0~^kA8WFX)-&ww(gm-IDiml(;s$ zB1@aCDDeKxkin!bxO8s}9{Z!kj_REeep!7BmBguoO0=;*L-psyi@sUNrm%h#>z7aT;Y(Nb8nW60fux+BSG`pIoIf7>FBGq+d{cGe=V-@Ac*i)u|n zMWLhCr(~k{)gfyJ$$LUFU^t)n`8XoWk)Pz z1D9sCkW#c*Xhr7am8EQX-iTu3BB+qaRoC>hWjBUwJBa`L`S~ExT91? z<)R&KIj%XywBbcR=mwOgl>aept?BTUEESh6)%NOy@r;GR-$6*fkK0EH3X;ex`2ilaKzn`hfmPnf8i$-e;lYflvSd diff --git a/docs/reference/configuration/kafka-consumer-1.md b/docs/reference/configuration/kafka-consumer-1.md deleted file mode 100644 index 6d05d8989..000000000 --- a/docs/reference/configuration/kafka-consumer-1.md +++ /dev/null @@ -1,86 +0,0 @@ -# Kafka Consumer - -## `SOURCE_KAFKA_BROKERS` - -Defines the bootstrap server of Kafka brokers to consume from. - -* Example value: `localhost:9092` -* Type: `required` - -## `SOURCE_KAFKA_TOPIC` - -Defines the list of Kafka topics to consume from. - -* Example value: `test-topic` -* Type: `required` - -## `SOURCE_KAFKA_CONSUMER_CONFIG_MAX_POLL_RECORDS` - -Defines the batch size of Kafka messages - -* Example value: `705` -* Type: `optional` -* Default value: `500` - -## `SOURCE_KAFKA_ASYNC_COMMIT_ENABLE` - -Defines whether to enable async commit for Kafka consumer - -* Example value: `false` -* Type: `optional` -* Default value: `true` - -## `SOURCE_KAFKA_CONSUMER_CONFIG_SESSION_TIMEOUT_MS` - -Defines the duration of session timeout in milliseconds - -* Example value: `700` -* Type: `optional` -* Default value: `10000` - -## `SOURCE_KAFKA_COMMIT_ONLY_CURRENT_PARTITIONS_ENABLE` - -Defines whether to commit only current partitions - -* Example value: `false` -* Type: `optional` -* Default value: `true` - -## `SOURCE_KAFKA_CONSUMER_CONFIG_AUTO_COMMIT_ENABLE` - -Defines whether to enable auto commit for Kafka consumer - -* Example value: `705` -* Type: `optional` -* Default value: `500` - -## `SOURCE_KAFKA_CONSUMER_GROUP_ID` - -Defines the Kafka consumer group ID for your Firehose deployment. - -* Example value: `sample-group-id` -* Type: `required` - -## `SOURCE_KAFKA_POLL_TIMEOUT_MS` - -Defines the duration of poll timeout for Kafka messages in milliseconds - -* Example value: `80000` -* Type: `required` -* Default: `9223372036854775807` - -## `SOURCE_KAFKA_CONSUMER_CONFIG_METADATA_MAX_AGE_MS` - -Defines the maximum age of config metadata in milliseconds - -* Example value: `700` -* Type: `optional` -* Default value: `500` - -## `SOURCE_KAFKA_CONSUMER_MODE` - -Mode can ASYNC or SYNC - -* Example value: `SYNC` -* Type: `optional` -* Default value: `SYNC` diff --git a/docs/reference/configuration/stencil-client.md b/docs/reference/configuration/stencil-client.md deleted file mode 100644 index b2da9f43c..000000000 --- a/docs/reference/configuration/stencil-client.md +++ /dev/null @@ -1,66 +0,0 @@ -# Stencil Client - -Stencil, the Protobuf schema registry used by Firehose need the following variables to be set for the Stencil client. - -## `SCHEMA_REGISTRY_STENCIL_ENABLE` - -Defines whether to enable Stencil Schema registry - -* Example value: `true` -* Type: `optional` -* Default value: `false` - -## `SCHEMA_REGISTRY_STENCIL_URLS` - -Defines the URL of the Proto Descriptor set file in the Stencil Server - -* Example value: `http://localhost:8000/v1/namespaces/quickstart/descriptors/example/versions/latest` -* Type: `optional` - -## `SCHEMA_REGISTRY_STENCIL_FETCH_TIMEOUT_MS` - -Defines the timeout in milliseconds to fetch the Proto Descriptor set file from the Stencil Server. - -* Example value: `4000` -* Type: `optional` -* Default value: `10000` - -## `SCHEMA_REGISTRY_STENCIL_FETCH_RETRIES` - -Defines the number of times to retry to fetch the Proto Descriptor set file from the Stencil Server. - -* Example value: `4` -* Type: `optional` -* Default value: `3` - -## `SCHEMA_REGISTRY_STENCIL_FETCH_BACKOFF_MIN_MS` - -Defines the minimum time in milliseconds after which to back off from fetching the Proto Descriptor set file from the Stencil Server. - -* Example value: `70000` -* Type: `optional` -* Default value: `60000` - -## `SCHEMA_REGISTRY_STENCIL_FETCH_AUTH_BEARER_TOKEN` - -Defines the token for authentication to connect to Stencil Server - -* Example value: `tcDpw34J8d1` -* Type: `optional` - -## `SCHEMA_REGISTRY_STENCIL_CACHE_AUTO_REFRESH` - -Defines whether to enable auto-refresh of Stencil cache. - -* Example value: `true` -* Type: `optional` -* Default value: `false` - -## `SCHEMA_REGISTRY_STENCIL_CACHE_TTL_MS` - -Defines the minimum time in milliseconds after which to refresh the Stencil cache. - -* Example value: `900000` -* Type: `optional` -* Default value: `900000` - diff --git a/docs/sidebars.js b/docs/sidebars.js new file mode 100644 index 000000000..dc43d07e9 --- /dev/null +++ b/docs/sidebars.js @@ -0,0 +1,77 @@ +module.exports = { + docsSidebar: [ + 'introduction', + { + type: "category", + label: "Guides", + items: [ + "guides/create_firehose", + "guides/json-based-filters", + "guides/jexl-based-filters", + "guides/deployment", + "guides/manage", + ], + }, + { + type: "category", + label: "Concepts", + items: [ + "concepts/overview", + "concepts/architecture", + "concepts/filters", + "concepts/templating", + "concepts/consumer", + "concepts/decorators", + "concepts/offsets", + "concepts/monitoring", + ], + }, + { + type: "category", + label: "Sinks", + items: [ + "sinks/overview", + "sinks/filters", + "sinks/retries", + "sinks/elasticsearch-sink", + "sinks/grpc-sink", + "sinks/http-sink", + "sinks/mongo-sink", + "sinks/influxdb-sink", + "sinks/jdbc-sink", + "sinks/prometheus-sink", + "sinks/redis-sink", + "sinks/blob-sink", + "sinks/bigquery-sink", + ], + }, + { + type: "category", + label: "Sink", + items: [ + "sink/bigquery", + ], + }, + { + type: "category", + label: "Reference", + items: [ + "reference/configuration", + "reference/configurations", + "reference/core-faqs", + "reference/faq", + "reference/glossary", + "reference/metrics", + ], + }, + { + type: "category", + label: "Contribute", + items: [ + "contribute/contribution", + "contribute/development", + ], + }, + 'roadmap', + ], +}; \ No newline at end of file diff --git a/docs/src/core/Container.js b/docs/src/core/Container.js new file mode 100644 index 000000000..b8db7433d --- /dev/null +++ b/docs/src/core/Container.js @@ -0,0 +1,35 @@ +import classNames from 'classnames'; +import * as React from 'react'; + +const Container = props => { + const containerClasses = classNames(props.className, { + darkBackground: props.background === 'dark', + highlightBackground: props.background === 'highlight', + lightBackground: props.background === 'light', + paddingAll: props.padding.indexOf('all') >= 0, + paddingBottom: props.padding.indexOf('bottom') >= 0, + paddingLeft: props.padding.indexOf('left') >= 0, + paddingRight: props.padding.indexOf('right') >= 0, + paddingTop: props.padding.indexOf('top') >= 0, + }); + let wrappedChildren; + + if (props.wrapper) { + wrappedChildren =
{props.children}
; + } else { + wrappedChildren = props.children; + } + return ( +
+ {wrappedChildren} +
+ ); +}; + +Container.defaultProps = { + background: null, + padding: [], + wrapper: true, +}; + +export default Container; diff --git a/docs/src/core/GridBlock.js b/docs/src/core/GridBlock.js new file mode 100644 index 000000000..49a2c89ac --- /dev/null +++ b/docs/src/core/GridBlock.js @@ -0,0 +1,56 @@ +import classNames from 'classnames'; +import * as React from 'react'; + +class GridBlock extends React.Component { + renderBlock(origBlock) { + const blockDefaults = { + imageAlign: 'left', + }; + + const block = { + ...blockDefaults, + ...origBlock, + }; + + const blockClasses = classNames('blockElement', this.props.className, { + alignCenter: this.props.align === 'center', + alignRight: this.props.align === 'right', + fourByGridBlock: this.props.layout === 'fourColumn', + threeByGridBlock: this.props.layout === 'threeColumn', + twoByGridBlock: this.props.layout === 'twoColumn', + }); + + return ( +
+
+ {this.renderBlockTitle(block.title)} + {block.content} +
+
+ ); + } + + renderBlockTitle(title) { + if (!title) { + return null; + } + + return

{title}

; + } + + render() { + return ( +
+ {this.props.contents.map(this.renderBlock, this)} +
+ ); + } +} + +GridBlock.defaultProps = { + align: 'left', + contents: [], + layout: 'twoColumn', +}; + +export default GridBlock; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css new file mode 100644 index 000000000..06cceb991 --- /dev/null +++ b/docs/src/css/custom.css @@ -0,0 +1,136 @@ +/*********** NAVBAR ****************/ +html[data-theme="light"] .navbar { + /* background-color: #f8fafc; */ + box-shadow: inset 0 -1px rgb(227 232 238); +} + +/* ********** BANNER **************/ +.homeHero { + overflow: hidden; + position: relative; + background-image: linear-gradient(120deg, #155799, #159957); +} + +.logo { + position: absolute; + opacity: 0.3; + right: 0; + top: 0; + max-width: 100%; + margin: auto; +} + +.logo img { + width: 90%; + z-index: 1; +} + +.banner { + color: white; + padding: 8em 1em; + position: relative; + z-index: 10; +} + +.homeTitle { + margin-top: 50px; + max-width: 520px; + font-size: 3rem; + line-height: 1.3em; + font-weight: bold; + letter-spacing: 0.3px; +} + +.homeSubTitle { + display: block; + font-weight: normal; + font-size: 1.2em; + line-height: 1.3em; + margin: 1.3em 0 1.3em; +} + +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.homeHero .button { + color: white; + border: solid 1px #fff; +} + +/* *********** BLOCK CONTAINER *********** */ +.wrapper { + padding: 5em 0; +} + +.lightBackground { + background-color: var(--light-bg-color); +} + +.darkBackground { + background-color: var(--dark-bg-color); +} + +/* ************** BLOCK GRID ************** */ +.gridBlock { + padding-top: 2em; +} + +@media only screen and (min-width: 769px) { + .gridBlock { + display: flex; + flex-direction: row; + flex-wrap: wrap; + grid-gap: 40px; + } + + .gridBlock > * { + margin: 0 24px 0 0; + } + + .gridBlock .twoByGridBlock { + flex: 1 0 40%; + } + + .gridBlock .threeByGridBlock { + flex: 1 0 26%; + } + + .gridBlock .fourByGridBlock { + flex: 1 0 20%; + } + + h2 + .gridBlock { + padding-top: 20px; + } +} + +/* ************** TEXT SECTION ************** */ +.textSection h1 { + margin-top: 0; + font-size: 2.5rem; +} + +.textSection h2 { + margin-top: 0; + font-size: 1.5rem; +} + +.logos { + display: flex; + flex-wrap: wrap; + justify-content: center; +} + +.logos img { + height: 30px; + margin: 2em; +} + +/* ************** FOOTER ************** */ +.footer { + box-shadow: inset 0 1px rgb(227 232 238); +} diff --git a/docs/src/css/icons.css b/docs/src/css/icons.css new file mode 100644 index 000000000..7d6e2976d --- /dev/null +++ b/docs/src/css/icons.css @@ -0,0 +1,40 @@ +/*********** GITHUB ****************/ +.navbar-item-github:hover { + opacity: 0.7; +} +.navbar-item-github:before { + margin-right: 0.5rem; + content: ""; + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-items: center; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: center; +} +html[data-theme="dark"] .navbar-item-github:before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; + background-repeat: no-repeat; + background-position: center; +} + +/*********** SLACK ****************/ +.header-slack-link:hover { + opacity: 0.6; +} + +.header-slack-link:before { + content: ""; + width: 19px; + height: 19px; + display: flex; + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPEAAADvCAYAAAAjFzLiAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA9GVYSWZNTQAqAAAACAAHARIAAwAAAAEAAQAAARoABQAAAAEAAABiARsABQAAAAEAAABqASgAAwAAAAEAAgAAATEAAgAAACQAAAByATIAAgAAABQAAACWh2kABAAAAAEAAACqAAAAAAAAAEgAAAABAAAASAAAAAFBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKQAyMDE4OjEyOjE0IDA5OjM4OjM5AAAEkAQAAgAAABQAAADgoAEAAwAAAAEAAQAAoAIABAAAAAEAAADxoAMABAAAAAEAAADvAAAAADIwMTg6MTI6MTQgMDk6Mzc6MjcA26ZdyAAAAAlwSFlzAAALEwAACxMBAJqcGAAACGNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6YTA4Yjg4ZTAtZDYyYS00NDA0LWI1YjItNmQ4YTU5MTE1OWZlPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOmEwOGI4OGUwLWQ2MmEtNDQwNC1iNWIyLTZkOGE1OTExNTlmZTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOmEwOGI4OGUwLWQ2MmEtNDQwNC1iNWIyLTZkOGE1OTExNTlmZTwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0xMi0xNFQwOTozNzoyNy0wODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDphMDhiODhlMC1kNjJhLTQ0MDQtYjViMi02ZDhhNTkxMTU5ZmU8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bo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"); + background-size: cover; +} + +html[data-theme="dark"] .header-slack-link:before { + filter: invert(100%); +} diff --git a/docs/src/css/theme.css b/docs/src/css/theme.css new file mode 100644 index 000000000..ee82a946d --- /dev/null +++ b/docs/src/css/theme.css @@ -0,0 +1,58 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"); + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #4d4dcb; + --ifm-color-primary-dark: #3939c3; + --ifm-color-primary-darker: #3636b8; + --ifm-color-primary-darkest: #2c2c98; + --ifm-color-primary-light: #6363d1; + --ifm-color-primary-lighter: #6e6ed4; + --ifm-color-primary-lightest: #8e8ede; + --ifm-code-font-size: 90%; + --ifm-font-family-base: "Inter", sans-serif; +} + +.docusaurus-highlight-code-line { + background-color: rgba(0, 0, 0, 0.1); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); +} + +html[data-theme="dark"] .docusaurus-highlight-code-line { + background-color: rgba(0, 0, 0, 0.3); +} + +html[data-theme="light"] { + --main-bg-color: var(--ifm-color-primary); + --light-bg-color: transparent; + --dark-bg-color: #f8f6f0; +} + +html[data-theme="dark"] { + --main-bg-color: var(--ifm-color-primary); + --light-bg-color: transparent; + --dark-bg-color: #131313; +} + +.menu { + font-size: 90%; +} + +.markdown h1 { + font-size: 2.5rem; +} +.markdown h2 { + font-size: 1.7rem; +} + +.markdown h3 { + font-size: 1.4rem; +} diff --git a/docs/src/pages/help.js b/docs/src/pages/help.js new file mode 100644 index 000000000..8ddb6ca16 --- /dev/null +++ b/docs/src/pages/help.js @@ -0,0 +1,55 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import Container from '../core/Container'; +import GridBlock from '../core/GridBlock'; + +export default function Home() { + const { siteConfig } = useDocusaurusContext(); + return ( + +
+ +

Need help?

+

+ Need a bit of help? We're here for you. Check out our current issues, GitHub discussions, or get support through Slack. +

+ + The Compass team has an open source slack workspace to discuss development and support. + Most of the Compass discussions happen in #compass channel. +
Join us on Slack + ) + }, + { + title: 'GitHub Issues', + content: ( +
+ Have a general issue or bug that you've found? We'd love to hear about it in our GitHub issues. This can be feature requests too! +
Go to issues + +
) + }, + { + title: 'GitHub Discussions', + content: ( +
+ For help and questions about best practices, join our GitHub discussions. Browse and ask questions. +
Go to discussions + +
) + } + ]} + /> +
+
+
+ ) +} \ No newline at end of file diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/.gitbook/assets/architecture.png b/docs/static/assets/architecture.png similarity index 100% rename from docs/.gitbook/assets/architecture.png rename to docs/static/assets/architecture.png diff --git a/docs/.gitbook/assets/integration.png b/docs/static/assets/integration.png similarity index 100% rename from docs/.gitbook/assets/integration.png rename to docs/static/assets/integration.png diff --git a/docs/.gitbook/assets/metrics_flow.png b/docs/static/assets/metrics_flow.png similarity index 100% rename from docs/.gitbook/assets/metrics_flow.png rename to docs/static/assets/metrics_flow.png diff --git a/docs/assets/overview.svg b/docs/static/assets/overview.svg similarity index 100% rename from docs/assets/overview.svg rename to docs/static/assets/overview.svg diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-16-55-42.png b/docs/static/assets/screenshot-from-2021-07-12-16-55-42.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-16-55-42.png rename to docs/static/assets/screenshot-from-2021-07-12-16-55-42.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-16-57-00.png b/docs/static/assets/screenshot-from-2021-07-12-16-57-00.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-16-57-00.png rename to docs/static/assets/screenshot-from-2021-07-12-16-57-00.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-02-29.png b/docs/static/assets/screenshot-from-2021-07-12-17-02-29.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-02-29.png rename to docs/static/assets/screenshot-from-2021-07-12-17-02-29.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-08-00.png b/docs/static/assets/screenshot-from-2021-07-12-17-08-00.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-08-00.png rename to docs/static/assets/screenshot-from-2021-07-12-17-08-00.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-10-36.png b/docs/static/assets/screenshot-from-2021-07-12-17-10-36.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-10-36.png rename to docs/static/assets/screenshot-from-2021-07-12-17-10-36.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-10-54.png b/docs/static/assets/screenshot-from-2021-07-12-17-10-54.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-10-54.png rename to docs/static/assets/screenshot-from-2021-07-12-17-10-54.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-15-22.png b/docs/static/assets/screenshot-from-2021-07-12-17-15-22.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-15-22.png rename to docs/static/assets/screenshot-from-2021-07-12-17-15-22.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-19-02.png b/docs/static/assets/screenshot-from-2021-07-12-17-19-02.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-19-02.png rename to docs/static/assets/screenshot-from-2021-07-12-17-19-02.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-19-59.png b/docs/static/assets/screenshot-from-2021-07-12-17-19-59.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-19-59.png rename to docs/static/assets/screenshot-from-2021-07-12-17-19-59.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-20-08.png b/docs/static/assets/screenshot-from-2021-07-12-17-20-08.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-20-08.png rename to docs/static/assets/screenshot-from-2021-07-12-17-20-08.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-20-35.png b/docs/static/assets/screenshot-from-2021-07-12-17-20-35.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-20-35.png rename to docs/static/assets/screenshot-from-2021-07-12-17-20-35.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-22-00.png b/docs/static/assets/screenshot-from-2021-07-12-17-22-00.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-22-00.png rename to docs/static/assets/screenshot-from-2021-07-12-17-22-00.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-51-43.png b/docs/static/assets/screenshot-from-2021-07-12-17-51-43.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-51-43.png rename to docs/static/assets/screenshot-from-2021-07-12-17-51-43.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-55-11.png b/docs/static/assets/screenshot-from-2021-07-12-17-55-11.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-55-11.png rename to docs/static/assets/screenshot-from-2021-07-12-17-55-11.png diff --git a/docs/.gitbook/assets/screenshot-from-2021-07-12-17-55-26.png b/docs/static/assets/screenshot-from-2021-07-12-17-55-26.png similarity index 100% rename from docs/.gitbook/assets/screenshot-from-2021-07-12-17-55-26.png rename to docs/static/assets/screenshot-from-2021-07-12-17-55-26.png diff --git a/docs/static/firehose.png b/docs/static/firehose.png new file mode 100644 index 0000000000000000000000000000000000000000..66c324bd6cbf6b16b55ed5fee6ceea09921d4297 GIT binary patch literal 23001 zcmYIwWmFtZ7iP~eI0Sb{2<{FcxVyUr_h1R`?hYZiySv+9!2<*j2^QSlVV3vXvuA(Q z>7K6J)wiGfT&e0h6RDykjgCT$0ssKItc-*j0DuDiYe)#MSBi$4dtVPAXEkXtpyns( z{_7733msWYMMZ$&^&ANRh1&p-|3qFJ@oNJBxI7R5_j&~VcP$V6|9U|Id2s*#{69gv z0259C5CLQ*L^V7>$G*sE2AV0b}(p;WdbC^{tPS)LP>b^C=`}}pD{lJ z-V{=D`lo)$8p7*Uwc=u6hFGzINN=b-n6)oAcOtn(ci0aW_YwikBVCBW66A!A(s`Nr^r*G=#q4Lrjf;&|oHoUuLNNq=(hWGDyw=V!LtM)kxCo}qL*8Eym#kle>#3T3(f zyX88FeUgH?7p~6s8P|1IRaJSfwAdGFkkd**-yq>G2g;Pp2qIwyV?e;pQ0pngLVKz4 zsbSA8g54{AxbX7RV?t~Gz(Tm;_ec>VtPlyrpBVQ(J%vo<0cf;lm~7YL90=qz66oN= zg=)sr(^I3cU)n)^wRuLQs7@089qKoBc`&Cv}y4(Nla3$Q$A_P?< z)dABet^ADo?O(U=jok*<|6!QkC|O*!ySWfzNQ8j>R-Br|=~`Nvo5{wS$$w5EZ3O|S z0S42XT|`(qEq3Wshu4OX>&b0n)6{<;z7h+c1WqdPJXC^K5f6tzVjFon+}}N)7g-uK zolGG`D})f~3{&`C&6BC&!iU-is~o@T`*pW zpcFwm3m-ofm4awh>v5wVAe!DR25%Td8-1dw#QRz;Tru(RNCGmdhRVBO}AD zi%V9-GzJ+b#}%-Rt2*X*i(V*XCQO=lpn`s*A4jWT*l*R%-|Ttd17Wu~l50mNCokk9 zPgbPP=(MS$W)P%6O5T^|{QM2SI3?Q~)IJ1p@kgtHFmyu?gFif6Tvwb4G7Rr-Ha;}f zrd7!zO?P??oSmILmMG`0y3cEBAOGq0{;+~X(`Wt+p99iaLyW}rF#h995Yw4EguZZ2 zTQC4Sj)0D{;rqY&u^BGnvlNH!#4yPOpdIM4y?ln=^}b2seQFSW?k|!N54hob;f3_6 z|B~AZLJQ?Kx2=i8Vj~JX*4h0^aKrAm zU`~-OMS=<_3U*jdX6Q+1JYiQ9PEW*i()?*B)_*TjQ$T_>dXxNL#!li`9$go2- z1m*-ki2c1(%(_4^ME7vUYmr`u%!$1V)!S2DX&pR6r~_1%MCHFTrK_r`T_|=np^1tS!8Eq=5v8NJZ^P}_=iH6qY3rHHro z+Unfg-0W-2A2_dW&I=TPOF-ibYGH=TcVZ3Iq#AG$3?sD>1q%0hZoYw}ubf(9nzv?K z0oYifH83|em{Gw9Di!{?Bs(}J0CQ3W`ET5k*r)95>=h!+k4R@|BH%c}>qYPG)!3@T zRDgz{56N6=U3CfJ%Hz&OuOnhesK@l-V6I=hBud-*j8bBkAoBm}xki_MA zEBj2H4L0v7@H3w6RVxVyIYiHx+z(>`{U}kViZSYa;)yzF>{WYs za*;I(-(;2HUq58CzKR4`0lGn&%AZw5zEHo_^~B=6jS1jJ1Qf z$!Wsj_CEvg)+`}tVtF`CfBvklzBGw)5lN%4LgZ(ujbGe@?_sPBb48;+S_wf?PytAV z$ggT0-i7#3v#Ct!93tFvG;&#Cku@WbFYMOo@Ht;oL|n0ITjbZ1rhgAyg6Y+N{xxlxF=E`NuZ2SyOy=>JLgy zyC2@@FO3O+!)zl&{g7Mg_y=U4xB$TiRO#|h{RPut_D?ab}{jO#XmxTRknjc5@5Ti6$^(E%T!Mh zG5ZC)8ZIjex>J_97obj(R`sa{8>rN-tr0(R;<%|%L_jbygAjtWDbK(LlC__0Z1!DI zQEF5{@ALF2sh-}=)K5J9y>N5pCkp(7sUt5C2l|Wz87q)?V-xl}JPjtG$cmvo@QT-s^g8*R=%NVOoC&O?$RV&0UgX=o zaPZEQ5;|zjf^WDX$=L_?aOdD~z+U!hBM zv3%1)2@eo`sS75k^tF4`uV=KNsbyg%#P#Hi31+_Xo>)6 zGym>QP4BH*%p8Axu|O9jgLu&H?W{%JxZuh#H2%jWjK353>B8|!5K2s){g7vf9WzkS z`7mwC@>+WR2W2dDezsKkbnocMZvIn!)q~w3 z^XEtLxGAE3+~qf|5w`LZH1%GPkFk*W$atLK5LgkL?F@w=bVne z`Ii=$91|&_b9cxMoM!W1=OVe&mv7R`C4DXD;GmgXhdi%%`veOyqF2|AMXCz0Qh6s3 zoYN})&)x(QRtwVvk_)`?S3nviiLbOYh!w%C?k(x=ezuuaWitdMTAlyAAnmHG5Li z(a2|iywdG|CcA%rc~twux!F)JWlZSn2qy-!gvcpCUZVvY*poa!vp*F|=QA?rgeCPG z_|9t71A*GZt!{f7|1WX^l*ZWL0Ug>p%iW*Z-U<{^*6d2~xUt7D_30lIYfY`8`~Ml& z2a|4?qCOYfaeUV#Wr~m%s4IF{BWKpGwBt&h{7;VnB}hammgB6h6^|=XF*s-yMhskg zV>;k|S_WQI^?&9b34juw^kN;tS+9MiOk$70pDpxKNd6r-ra+ls@}CU@uoB{-m4$_c zjJGF$SD1VE{>XDl!H4Y6NF_{72;T~A(f$XA5Yhw_J^gz_D+!K%bli$u{=A3#Z&(p* zSg#C)B9%!RBO8dv4{(2@Al1oW(gulMHv$#8_<1Te^wo(fi)aHxmnj&Qr<9m=Z=FG1iK-D#r>rb9UjlB&?D1ni~S`7urZ|3WSY$;iye zh;w&!)h$73P@CbI@j#MPUKLqb?p^Y-EjLJg?^u zO1^#Q{eBMx7K;84mL_9kRcc=(;#Tvi96{QuvbBc0hq@4doG>HH7p*J4#Ze>)tTL8& zI7ZKBd2KG|)_My4ChwK5vvCk2`|~dqR3&7luZ`*K*?pWjz|DiGU+&409m{)7BW0wk za!IfbcXtmmhq?cw2m?fba9{Xr6jWc3e#1&H5Nnb?yWfb3FrzDe^nr#=>BfUXjEcOp zqaT^441yNsC{~px?V4Ql2_P48W9}DFS1BUuAQ``YP5#i&NCqujbT7M(k4Bw&`&Ff| zKME8)&Jjo`NU;%P$c;!HC-3HeW^gqNS#Z<(2(2aAue4kjPvozMx#3}^!BVH+SiYd} zB}bb>zKR-4b#p&tJRH>JnT=-6&E34oQfC~p#JciM(op=;7`+it7&3@<_Jb8J5u;Q} z@`bD#sYb8)0OhVnDAv-tT3g7@fP&K4AF}EhYUH!iE#6`;13Qxl#B^+mLyihG(dTwV ztI5}HZfOy!jJD0@1TfNIAEwzXUpl-}4^1Gy$W_cQSrgHg=C|M18(SWvPpr$RN;J=T z)#*I>c}Ffatn85yM;8cOV7rh^oE#*#xB_fXen??!@nw$Ki~l*+GI^bggN#8pNB6BV z&vshYaQJ%%-|IA;pq3sBd!V0!DaV!`%gpSDTrbgVi6VbgGl<`1y#hW|G8$iV0D6u> zJXchxYJf;-EDgaA6EuBuW6gk#%dKM{bR)skW~%e&vPZNTk4Wd?$ME=||MS@1a|xdb zhEAK~n$R}B7c&Dn8_fTQH*{hR8XqXz@D`*d=ks2NVIj0xafCAVChX6CyyxE`&@8-& z`Zp^-x$Bj30enmi;metbPR$P?<5rNPC@8=9(C>6%lVXc2E926Mvc&>J)~0QDX-}*C z?IK^pb|7FCR+$HF>t>rR=>I?jdJS`LXZbG{m$+&e{2@N7tLgs8x&q}cn3#Vz&+T=m z`*aCGHb@C3mBblW#AUxepUX>g$M{j-DIa{teiFWAtR4$OvE3o$hu_#;4_}iKXsWJ0 zrq{IBpa%qWR-aroL!8@Bq@akFLKq0Mmrwz#%~oVIKdG&=2&uadUUMs|fB%C1crhbM zc<$M1lt?%hD*z&2yHN*gr-QJyH?1K)g!QZ>ml1epNxA`Rp1hWU%cXNh9GC7_kLwLT zs>uzbbfLivzpEtxyQR9mXvKKp(ja4&*?Xh}DIct~CrRTwf>^xZbArBzq9L>8`}MD= z_Td1+uUt4~UyoP&m1}oxFEdbsftSitI6;CfSsdXV4v00CaBf=nnN-?~T$VQ5fcvsO zbW$-G3a^^;P{`$Z(Lw#{Lcgt$@!5T7SZ(j#Yrhvk&0P(_dTD-No7RuErs+EsJBbdO z01LsbKB!BergXUIcL2a849MVNZQc3e&`QpR*YWtlxNp{V1A8XMS?M*jB;bKBq58rR zS!V51EVKXCDNkRn%xybuZ8 zgm=0fqio$j6%7}m03jU3It$J;^Zf({k$~r67o!HnLhybv=K6nSAN+eZ+A%X5R9Sl2 z-^Nw#?dd(|-o+|Iq5stw)5kCp)0HRVCbWvTmM<+Q3N))+kdxR8J$e_}Opu1QcJDjf zb0s6Sj-i}T6`5fD;Gs>^H}=L;Z_F!>1E4W-1(+#+czA%6rjsJ9${P;wC?`-;-WS?J&b5e^^-M&r) z{7JHgjWME9hva^E2SOP>1F^lli~G)T`JuNnP0WhY$>Q5B{@hp){HvhHm5~a;(!Y&n z!eg9&Fmebmyj?Gy%bxO6N(AAQSq7;3Zw&ymcVL;Vv(t69PVd%8%6C(K`ZD<-9OpHU z5C%i}3j}x_gHRp{1~%Aq3w5!wK0NIR$(&y~23k$Q6>e|Z4jyj&uh4$K9(%Fgg*>hg zFzGdw5r;)!Y=7buwq^pOPhb0!QNHw|+os=Z=3nc*OG*HDp3IQ&Vy*3L6sQrK`AC6 z8EffFo=(@TaOF^sSzIP4!pHOLPq-e}!-W(KG_)*ewA$fT>d?M@VH^xo>Pd<88Y6t5 zfRz-xJAVlacfiapbnND}JwpS#3>C zZnM{Q!+~}e>z^;a!NI{F3c;2y?Rj=OhQu%*1`USQkZQu?tT5xRgvzHF^mdnuPmG`Eo`lwx-MNrL?`_XZs^b(1XUbSPLPmWfy~|EJ$_JU+V88m$ z=DZj34_=+r*czRp!em7}dcgZST(F6%jptxZUW1_dTUvL+P2PLX@$)+GA!{se zB6`aD_=&PBci@NY7w?Af#-%0OPqWDPNPJ@3hts@{K3EzQ&j`}~!{nV_UF{*)uV^?C zWrK0kT@~A*?)X@e*FjFQVaPj1m05qcRt<@dTTQ<`^-t&VlKrZjn#$H|SDy2Z9-`h( z*(|s~*=`IH^4VUyLKwu!nIKH&8$osDC;Iep89y-kJ*34#+;`!3ugz?UFX;npypjIf zWm+JVBIfB7?y{C6<~}#@{9HNsd2^<*d-^m!;=QCHzvY$KSB4ShYrvA<|Lt4sXD8k2 zaA{TeKgya#9JpS1b7JG{gx2A^Qz98A@9ah?zUh4~3KC#Z=K!nB-nzQFJ_}`<&UT^T zycacgoH zU^T*Nj>ZT12P{Kr997IuS&O2GS+wE7gk|p>Ugvo~OOC1_z)h|JYWal^5B%4+hgf;m zIcriPt@~knPl)Tau<$^?84eDrk?dr3TZq73r>4dBCTm57B>EqD&0=jfoI5b2Z-Yz9 zRMXYD{QxTfvkg~lJye0);yO(9`SO;|`cp~&UC%X=MqsZW8KpnRlU}yWFzjkN;BI-D zbCVa}mi=(*4`s-VY!#=+7i+rB8$O)RDAt+{M{@yveb*bNU%=pXmA7w28um9XiYTWs zxTjA!QZixzI$K-YhqovdqZ)*3t@t1mn=@*NtG+4wCB{JXuH;_JyP!B&3KU7|IqR!r z02_Z4yyMC`(e^cNq%L(+n?emax#a9TCfJqEoun(YE%)m&b>ZbyAkfB&6H2s3Cz0Ms z+EYAb$q;d>9}R>$zkvJs4NT5ajP$4KFSvACR z>2IQya!Shs7Lz#YIqsr9b-LNhYI{lvg3@66vv|tHQP(!hVP zY_7c0y-{4upXCC-qoP61;FB)%GKW(QGlr+skUv3ugP4r}qFgmrW59BCb@i}1UWOJt zE=p*P{582z>)Sv*G-P4a?q0l!TrqZ7QLFybTfgUtr|Vu+Dj!+0EAoec8{vfP)li~s zVNx3IYPv0N}LPNhFZGqNLvH-Sbt*D87g92YmG%T>`Ep0;f&=Z_jK_BSd_7m2SlIYV-3=4t6Fp zlM#aCKEmzo@8^daO+29=oo$;LekrxwQAUta`)Jo+z``G9%~MBGoFw5*`&0mn@u(91 z^k?d+qUgC`^rr-av{H+B9?#f#GIov{K<@s#T>RIsyMnI}x{6(^V4>;`UDG>^f$?w% za0zUGGEjl{|IuHsxW~9$Q-E6Eb|#Mr#?^^SKE{+89oGex%2;g>Ug8Uds=qwbXTcG9 z)7#S0dXv|Y_+HQUIP7ya4`G5~QDob5p%smYJv>Dm#ehu3{J_DQR~ts+i}1cL33weT z35G57JGXz&Nc+NUOZn9_*h?R0C-r)UHrm9^qJGlEEf#Sp%a=%N z-MiebZs8z!qYiBQ&v(%D6B*18pIq_vFjnbd(p!6=1d@tcqF%QE&FvDFq}mV?s-@HuigEi+ECi z^;je9#D+Uq_<7&F&DVRX-V4M$vAi=l8d}ps?uhI)4K*g>F6si572VM*eO9>HqQduY zAS049sG?2?K>=}Zjm;ZG_Q0{i0ho6Q=I_sxs&Mus2i`$@2C^ok0dRnamm3%$(gg_T zN{hUGQRjsDuw&i)(VF8?dcP7~;RM$r4mgTAHA$86%3YHF-IYhx`~csG!UwszMi-@U z5k<-(B*Xj5tAL9j_-Y%}z?Z&`um}{UwH8_-cSOq~t30F!be_}=a{;id=R;9D`xQ)R z5B4}s%5z6DU0PK7^3Lu=Y=yrL*PPhVMoP+IbSr0K)EY8Y(B%tGOojkO62Hp(LrU-B@gXH5yZ%-> z@rzUM5T>F&y_hf`k7*#EPh931wpVmW8EB}|6W5t^{8b~fWU3T>d^oUWM-=PB6%}DA zfMGDUThO3Le`O5;qJi|XF;+$*$6P9);0O4=**Wqf<=LX~OVd!{!5oJGY2ZC zsp_TX5}_~h%}{m1UVD<_Uxtfs{fsuco}q2njcFq>B9hb}zu#lKeO?Kw=Cde~-ym{{ zmSW{jZ|W?rGVk(D0suk*IJWgz@`2M#F%Dn7qz@HveS?02PBiz5vD%}bE?te2xNN^4 zx7O4X(N|VP{6u02^@^}W)G94Sc!0m|o{*5*z(Z2+AJu`-oZldWjkm{Ac7v~Mek7ez z^gGP6W$?kR-Gt}id?(`}Pjz7Eqw|NC8c7wkGISKzRA#X+?rL_@q<(~MHlWBK6X7a7 zSnWN6JbXvx1|Nh6ZU9}U3OXyjZ^QAaf}%i7Y-}}g?*Q%h_iPx2uyH)cNolloEH(hI zeyb5a&gC&xTQgF3Ic}4viDIf{rZzq;(SBUYWkEz>JZtdG#_{mkB>AvWGD%`9e_<2s z9^XZDPlZO;bV+IDjrF8pLY-_Y=pN|v!1`KlaYK@0D93_5C%UTmDdG)5Q|`tJ)dZ+6rb zh#fF!Q1aIU1#L94Gwt$rWan{jzG%me-qMOm`%UQHlmK{VQyb1mc*e3yu7?v zv~j$w!HW89(%Rii}f>?dP+_eU(CPcY8+68a;qqNms7 z4=M~OF!I{+F@PEtMzj^w}be@!tf`Rc6+BU@Y zH`vi6PY9ufFu%cCf33#FDeN*Ix+_p=KV}{`b~GE#bb8J}Pk&QF%}hdiRk-69xQun@V#J8}4;M~at!k{)TT|utym=EY zf(X3mPG5G+A>e;qLKMJ4m9F@v=Xb24_JoKJqR)j4iBtZMBMB9ov?=ndLa1CEm9h}t ztA4Rbu@q7Sa~52x>m6nRRJQHoEWGXe-LP!GUVj$4=v?$Pv9f>rs13Jpbh@@o2Db(rT$8)F#$XJUynUh3;6%;+3{4IO%Yyd z-v%x+UOWqvp+u!pOS>zCA(T^U8P})M*h_F=8~EDmdKQ0QlH~)+cs)TfG`HH=a}IZ{+4zN`fre4RGXL=?m4dHZ~8pk>0uo(xk2k zV~n~|_q=H|Qu46vm2BndtMG!k#%u5pEFA1HdCO25 z7ZF-3%urEUKFmPm*HAOrM^R5t?1uMwn4g-{;0mP+#_4I2R<%f;`?Un;^fo3YhHKp> zXJ{AB1T?s?^J9814U7KR$3 zV#1`|_~8FJmP(j?;&_m;mwdec{gIo6k2COTnZOlU`HM$Ccjt5doqWYD-bvr1tIlSB zo$ejNcSd5Qqqd|D?hw&upiI9L}7i!g`GBc;${D63h z;`4I+`K~ypGLw@$VuQA1nIH#y72A6XY`x1p-{5&0VE{TKxWm^t2~J#^dV+C7B5p6y z*0}|mvdgDoy(se-iZhxeG#;6IQR0OaWV6_F!u4KJ<6@>e73%f9El<>`fA)uL;jeU$ zm_<)Bsw57kqwzjUj1Tr2zBCbRRV$C3-h@9*x?=fF?*^p#RM5P1sqMDoEmn$A9s+CH$sMIZ$bS0aB= zf4;;;3K%H#E5`JaZMFNS*$YvUe2yryn;@M}`Xf5ZJoht_XGfJR<1ueg7r6iSX~dTN zxR%roXf}svo${A-+w5qSnIcSMC0Kov4>O>Q>8Y#|;0&-uPC=Ii&M@{^6c-$c+R)8B2s zddkbJ6%;-#WxB#yS400q9}A+Y2%7Onb(dJs;N^Vb*mpM79enge$g8)qGP_Sbf;Yx} zigjtIz`lR^AXaR=%eCF*r>d4iB1OeEb~uNkm6G-gO{ADO;z;S)2{|Rj(#&|S%-D%4 zT8Q>LPC6*hL;!Aju9FkDYrWzcroMi!4u1bS1~cNda#ePsF7%Mk%-{Z2exkR}!Ir!Q zZqIMZhl|{TB!FhgO6DC5br)i7GOO|wq%oT10w7b;CbX9?q0!>>iMtHu?(2&7lqkoA! zF1txWVpE1G+h%K$7-ChfU2|w~l?Nv$uK7!fA3R1LD_;Ab94eJ`SX{YstS{nKF1eo= zG(LO4!q!8`8E1ez`10MfbY}xNf$vnsI74yzo|p(V!WE~!3y0HD52KN;}WX(Wl@;=O$Wy!?7 z3^#?1$T=_48U ziRO}Fmz*;l6LO=R0kcWMJ%fg9Ul7<3O^C5$JGTDy9#tbsdLDoFd&Ip~w=|z(C`-nc zzN7N_E`B#i5##0iex`})5pOusqw>y3wMZ)>H}NP08fJ{=C_2XReC5`4GhZ|@`~gK$ zq~#%eZ$FXuS!tn%cmNG*!3~;eNOVGs6ZiNHC%revc+wb?|HpINO1mWEJZB{RD#X z`Z#8@>U2-DCR&Jev;w$rUY%l^lls508~hb=5Tz&})M1kTl!cBwpuZzhb$5#4IGL2k zu&2s6RM4YXhcA4__v?t9H_kyv-$em5sF}1RaRL)?fa^oc@cTG{gOVX{bbv6t>1UB; znU38CM&*4O@`u@eVHI9PjyApQh%lFl+`UYWPJaVD3+`?WVV)N)sUKzL!c8a^-@f+A zVn&n&cpxM|h?Y~M@M7%1QBtmRZiNuwZV}CH&NLI^Rm!^09%hijK&}@}!KpdItVCm@ z#55k?CyF%%aJf`R5s8QtqsWNrLo!t zCspI_{?h%81wr|x_`ows3q_j*Q&!`;lft_S%0Mo7N_*~?0m@oX&+h!3$P8$B;0@iX z$TUEsSou>gGtw>hW}Nds3OOFf^xgG-&la6t z>t^d|^rn76@|iaxQhF{q9Am+@o>E#a>V%e^D{%C7A^i?xD8m6_-dNq?4P*#g4xGt& z5;YUJ=^zn|K?ZWgzru97)di;ZqG%{M8X_szH-FrogVoq^Qo1{q z|zWr{4-$^>7k%@+BlPWR{O6E7GX(_W`^t( z(rV6nG6oHi(GPbDRp~H-DBu-TU0ot%08YU#lxO&9H@+y+A{XP@HR{77A&Ty;-ZZqK zsGo=vfDhiPGD`Iu0_Uj(jw|Ip$x1GGwA1~2t&*l%>{s>}`8Nu}^cUtRldJ%BT-1O* z_Cu)}hI#z&-2lEul^(!_JNupD0-K$3xrM`X?qfv}&fudNNthdNg-saGPT3Vvz@K8TT-Pe)^mSeTyH^~)1^cIX~$1KM6Fs(=GK%~5{S8~G^kG`?gKFa$z-Lp^*qa*0dGfbe@S@V z!#+Yx1#+!`j5Vb6uywuo1KxPCEM&di6hS^J?e4txO3Hb7=`PcvDPqucwFiPUf9$+m zi+J`oUXg}^UVDw*&z!(ru-j6ElYX+7#wJp@5R^VC)+uuRhR%{A@_GpN?tnfX_IdpB zMd{G3{g_zuP?B4+57>gN08L%H>^bk$LG|b&s7GR?P#zYJ*(1~D!tvQY)ot4l4G%Pz zWh3C~ZMD+8K=Goiue($|mQf2LCg`i!CLl`>mew$@aI?MBUESU_l%SVN*-Y`eI1S@M|4r<)Sq zg~$Db>g4mplS?PQ&L+hxh%G#^EY!>ifH#XI!O%4$3Iye4cYLQC^H3x-y?>xNJdJmL zn*#8st6xSr%`M(FbfXHr-M;_lkT;k0eB+SpTeimX1)uHjA&xn!N_vMB-1paM|BnN1y9N|hLUz#>H|K4hp~$i>J>!q zJheJoRh`>Dy)VBDW?WkC26ssU{%+3o(4VI^WzQZQ3k`wR%h;KKCfD+)s2`rsZ9rK~ z&1z`IR!3PG`QP^zV@+^esozlWOgwS&g^pS+@kLywnT%ZqeKe=(<}@Gu+;e^rK1Dub z!(eqr-RG$q!bRYu?3;5m5uT#aF;rua)V5!5E@woSc1F6gnl~Hmy^iAZ0(gQgG z-5oiOzBjmITQ&4?oMwRlmYW6(oNQz=t2%Eg;=?fex7*#D$@qjn^l}~_+U#LBvzHqK z<-j5G=U)PtaDHi69LHZgj68n1=X)|tD0iCGV(=xE4yASiZ8T3v_jd%1h>cX>&4-5JOogI z=#H5FRfiO7G{Zf{P~}>$A0A7>6jDqX@G9EbLE6*f%3??{<&K{hY7uw|h#Jh--#;CHTM+wO_xY zck{U4+$-OdHwWE4)4jMc^L^zu&G;r>o7pM0;+YU1s>6kRrwp`*$RcHZ61eDUWX;%UDZSEN;{C)8XX9R^2F+dk)G@2pUxt{q+ZBA0b)5qkY?cj0v$3;O?hgb${i zYu$!#Tq|!LCzDogNY=s6hLE5;MwpGPz`3hry!`xbK4%cD3w@(lc-c)kV9IdxrkL20 zES=A%t(B`Fnza%+f{3wWsA)*BU!Ou*Q8J$_&OVcdt|uNrI#XdX_782UK{jW-=Jv(B z@La+%cJ})Q@XzA(h*nyj*QIHw6iDBtEr}X?a|hNN%zk&1KnizacW13E9tW?SEW}vt;PHM zcnG<_&;0gVDlEh(nX91Ne{@#CjW2G^7aFQ~Nc4U+N9K_VRQGwY1{#IOXejZ65r^~ApBrgf>b&<7VMt#rxr4G6MLR`1 zN*L|tGYQ#A5LN@R_rQY8>N}p=AGDqk3ux0|W<~-V>i3MN^0>)1@8%pk)TsXmX*1|N zNnXt!r6%J;45?OgbksR0*|yWUG-Z4eVB?bOrFWR-HiRRDJ~omm2H@Fm_&;!aEUZ-^ z+~t(N5;pJjLtGE16Bdpi7feO+O{XHY^IkrVocp_UH_Cc?seuwEbn>F*S{KASrc0^3 zAfKY*wL*ubDqe_!L>tg=0J4*aa%-mt*Zvmt34d~?DOX+`%dH1b_)O+)ybTNGyZD*QDocA4*&ss{y$5y*-N>sti$|*$Fw^a+P$*<(nn; zcq!Almv8(_OI;H<6B&tq2!_3*%n_oe#sjADuF0*&i~jhC(u2v;;02h!;Mdi3$sIBU zKtDz#K*F7zlA-~V3VzZLl22Us_{mMpp(l?t z5XSu73b*i1q{9jXnHHJ=$GvyqqWy@}MNEjts?XNg(bXU~=P}3RmfQ}gy&3z-OijkB zOb-CV|9*xJ{`o#rLg@d!jctcx0xW~Mr_>pCRmtemsw(ZqU52fda0e(gF=?h=XO`ItN9Avi^~i~K@sBVFXB zcD+)^XoiD}ydU3MuBN&|6<_;6+4u$2xG=Z9Cc7iNOt8HzORq=|@Hnob)%MiWCJPM_ zq)>>Qe2K>&<-GX>5nrt`z1P3900)M=ZVCsrAe)QXUidZ?Hw{#dq3kH1j>&~4TKJFl zz>@h5X7DyQ2FKO$a@7EdcQPMcWi-kE%L%vasC$WA=cRoMnU$YYsGy8d8R|*9LERuhr1njBXlw#7$?~tfrwqY~| zd_(CX{Y)NwhOPpyn;s@MxQ75~=lRMP4owU&5?FMsHl~`Nise@S<`p9t5E_@&M3Io_ zZiNf5Q9P+Jjv6dOAl6@&Xd>VJG_~9FtuJUh!9h~K48N(dCwYs@k8mBzsU#j}(F#@x zw-48|`w+CR8uN~ERxji#re^-q&B@B0OFEg}_p~Gi`hD+j(i8#cvT% zjBb!SdgHx?Mu4++M zHMX&*e)3jNNC8N8n3pOQdUqXfA=aU1{_w!Mjp}{P}O#1KCRo zIM)uFoC%OSc8&LrXX^CzTU>ro^zC~PXq3QG2)9(Ivy~Y5^>ebDmxgKB!vU4XWRV6l z{TGWl+M2h?r9GZ)wbDmCOdgqtg)=*9xxDXgP*9}pcDIJ*Y6=TqB0iVeJW?|;GRIFq zG$|CKiG>XWDC{jdv)ABbo7|gPTXS<2eRU^+0(ikJ#lS3SX0TBZ!yd#9GdaZ}h{3vK z6U(@!DM|E-+-KuMt{|hE$y^oZi*HR+$(VA*TjFz=O`h`6Fa_^yn(+O@nvQ;{%DJ-= z?98>Rwt%U zC}cGYtwbwCYUCz1U{R9F5QdtUq9NF%-4J=TkYBs@NxxR(R5?u$VSb7w@+a!@4csn{ zE^0uQrN0W?F=E>#k?|qcQowVtFn&_2X(JBb-D&PVJ_rsid4IaN8acDBq8*u1=fb=} zPaGFKD-56QM<9@4o$NNN&6f(U<1gVtxp-1de<1I2ypAQ$DC%0Skn<&?TjwpW7_Em6ab_yrEByeIrH|W#NSIu+RjI zW711ngzy%l!55g4mDR5LvR2ycZG+GK1$CLRdrPRZP%~1(=?{Md`JoIarLO|as{GJt zKi8JU@Ber>2$lOrzVon`UwKiOurfFqX3grq5DPTf*^m=rKX2smMysGxc|3@V?p+#< zo27CFt%qgkeNj!%c=rAGWeL4`YVDiTS+9qJOSU+AJMIh2yP=wOR~b%hod_wAv7tKP zl3E%HCw?;QNQ}>ocmE}M_~i(P^@tH`oAA=ltVx3@i3^9^w$%(S$tc(L=T`TeI+Ywd z|CyMGM<4+*#2_kb)}OdNIq|zCb{$6qfO}gs_WoMQuRFPGs=7n&-F;@|VN(@A8+;nx zO&O&1^7U6VkOpfse)(u){Z$Ln-|IrjU?;e82NbmK}f0@5@$%zGM zAbgdOlj7wK217ZO~b(|U?fjxANKg%z&;GqlE`r)br%3mu&Ih9{; z!VE1MwD+^IhYEkYgFmJu|36)vc{tQv`2T0dVC*A%wn0x6GAPDAC{(g%-$KZ)?81y) z)~6JTW-Jle3L!FMmtDxtphDTVjBUOjJ-_Ssy{_;7pX;3aKKEJfb3XU`CH@|s7E^Hg zu!|JRc6@AhX?jAu=`Q=y&ZA9o2Klr-V_=Dg_26c@yh|@PPRIp#x`}I@&n`N@^?bYj zJd~Muu>WA$ZpTdGPGMp+v2T;_{n3-@FOrYeIkw|NM72(P-hVYSJ7m^64K?4WU|7Go z_r2%Y&N&cJx$Z_yEv1(iDP^957FTUaZKcY$%Tsiv(*Uw)uM#|yCh#i+{m)_iq1&ZH zU9%8o?5u$EXzG=^XQMj~>7t?y8T*z(c2@@=Up3rk?pTJArD53NbDCPcEer2h#^mYg zg*(6KLf@vUMykHd_qpBK_9D;$zqMg-;`4zW+ZgOSd!`6Gw!0ck{ObJZ$0gQfpiW=R z1JZec9=u&a2)h+!zC0}dNp}L>Bn`$s-`pmX(u@DS250jUJJt-pi|bShFkSF47OK~i z3_)}!?zq{_LhR?7!cKf>Pr_|$wlyu`h>E1t7A4n;wjc@BgW)+N`5UF3r!Bw6X56q} zzCBOtqcDy4{ft(MS!tYi@1*STKBg#Xd)B z;U!LlYp6l`*3`uzw005>N~A^d;)xE~rRo?DnGH<@p+~%=nyr!}gc5hb>u$+saQ|B* z`;X?}+Cl_)@axyF*t^YYJq-cj1`LoT&cx(++|5~_M8dBx;;z~q1M6VD5LR>WpZ-)x z=<}n4LO0f8E&}W`fz9-0kz4+qay1R*I=CgnIgp9382h1{5OlLD1ddQ!qqL+r;Mz;( zg%WUHJjZ?V_WIabb?WBwykAF8wNB()+n;^(m8d0(CnhyTu+-$~O3CiMRj8t=3lD!Y z_<}>?tTKHaug`T0rdC0V?aTZ$N5_&Ib#4uEU7<|wgj=g1@!BWBU+TTtmR&VF-k2?; zJBbbFtn`L**RhI*g@G0h{KsnU(AO#3v!#MMFW%dO(J>lKCY2X%Y4O<^M}dNA!l3ze zohnzQ(lT6)c_v-IfA-&Vpr4{C09!F_h+8IUYsXOMhr4ybQuOcb2VLJLs-M@nBCf+Z z@LU))IXM|lb^NEkl*MCa8Z@naN)=)~>F~7w{>6uEC$6p4@ww);E>C&`%xyS5XEk1Z zoV&)6AI{)ndR6y8&Hl9U>)0=OhsM(|!`DjTLUU{naH;_eN67dCy{2f?ngV3MY`n%@ zMb4+f=_@hXqu1_^<_S#Myi9ANv!mQuU4Niq*5(>iLm)(iYirX!_(8At zHTLo6&!3wM3oky=+|QskzP|&3jYP0Kzt_t8+vw8cy-PA8?KItThDe3Uu26cp3=4#B z6i*4xZ>(*)E6f+lTjqC<#X)Zgj%TIZB5lhB?U$Clt!`@&wXl24Qq@J9MHY?f=yu12 zlYeB?b_=5~r@DD~c*OWFoFK|gIk5o}F6T2h8YKBnI+4Gjj=`L^YV{YMl6G}N4Rs_K zLa#GT3d{bBz>^+cfNhq?d%+;}g|1m6C6bBOic+n@<$>QuG(jdXnf;e(u4WY#8f&d0 z5o{rj5GHNXAsK62r1xXrP+!bpL9p1Hk2ThUh$yMM=WuQPP+R?+9GU`L(S)3!o)HESPKY^Q%!Ew&!!A6a)(VL8G@5bXcnMN1N zMvdE)?MYFHtN#pbmk((Bovtr482b!7O^G1BNHxkw-d-|dVq*Fe7#K(qIe%5EN6S}E zlNI5N&L`R}*3rqnv_gzH4Zyl?yZQ$Qe_y7jX_xc3rBAb{9!D2Nv%LG@r{=pt7ld0; zLV`&wZvXI+5%0@!=D4qZX+iH+KVISqDYdTOK7kqSYEHCGzG=LOtcj!g7N>o{ueC{u zWwA6Zx!&OF{OD2Lb(70}E4g{8DKu@WYLJQf)&>#quSevX!K~j~T>*M?K^gKt%Ucm8_W3Dp zu*g77m;^Q%tt|{jN0Od{TC8Xxl{{kUs?=BGM=YzPKdDs|m`F5R#)q_Kg_jmrBh&WN zFV+Z(im;B?25l|eeLD7zESkh0G=c0x_+Y;!H7PC}zRg(&#Zv`InOzA_b}? zeS0%;5h?s9rXYfgXG$w{T@KqkfK|n1o_ZWl#>{uhr)b0s)7w2c-vgW=$ioO0Ey}H+ zVi_<O82JL%OWI5+}zA;%`t>%=hr}?hGkehMdE92r!M$Ly| zkSdI5je0vr{WSU;nIyUs=91T#e8LBy$26&4GDu> z$3k>n*6(P><$ERb{3==(ORJZDz>1>crw|-RD1n5La2q&0;+bJh}tl|{#^70$`ml~`T5pff{(JK#68D!Z8s71cObkez&6sKU%Kll zS&bK#gIIw+F}y2)2NSTLmcssNT`(K}U^rDd6l3o0y8Vunj2kf+h`wCSfH@P|Vk1-a z@GbWu#$l_K%-2d4*gs)gP>r4P5=}{xyhrA_ZssgM^q3h5f{EK5(}Gt>bUn5?0P}~! z*poeH2wLk^8HTR^ z;)Zq_8BmJ+f*uOKpBCc6WxDdwzM7&uq7=H-^Cb*sUwQP%W6L#~w%~^>#{5s~IlU5m z&4HSDKwmk5?4|BHwl6dDg%xq4Qr0`etVQ7el@l<)?M=w!yDV>`qSx4;PQxopg+L=2 z>S(GkbBiNlpB}DBJS+>5Fu2maHj`xiYVGhi9N`1&ZQ>}jayaxv#g^XP`qZS)NM+BM zPm#CZrKDf-gcjUYGW>DZtj|myv*zYi~hJB3$sqC^#*tmFkhv7T1p9222Z{DavO@+iO zY$H?U;)_&nYmP%-@9tK+b4oVl!5P|CkBHw^8pXSJgH5DZB5Kp2Kj$E$1D4$3$&&(O zC@@+I+8Fr)ROyM54D4ZOSp)DF;7(y=5_s)=bm+LFC4;0DT{bfeLXQc%U?b4f`Ij=l z4@cNK3-5@oHWot0fwbfsK(&D#+PYj$*5v}GAQHj@Kj6%yL^yRhPI!vAfTXX&1&Pz8Q zN}4_HUgiP$Ujf6SHv3R-n9=|&8lb_oSA?i9SQN@eK!(hD(T`aI0|ErHRKpG}tQ)TU z|7OlZ>`!qR0;RQZ=y{TW6$~WIr$M6Tj^Ud3yYV4*^BQ1`J(LkmQjZS$)>P}=v?gau z%|3_ZHd!Z9G8QVf{$mxyA~ucEwRtr3oMn>aA)<2N#I~34t0|`RxQw7wVCOlrh8kjU z#HaO`QsYBjtmB~d?4qIcGU!&89XoP-7$enu#?D6hV_i!XoZ z@dok)tAW;BFjDrUpK3_}zTgJGgLD65>!kftA2ZPb%N}n)(hEkq46<5Bgf6I@4*U%Q zGZeV?$8`=!`Hj5EW1gZ1L8vtF92%Gr^WQ6KqJRDJ69WCD1S2Wl%O(0ZR6cTops;A7 zGYm^c*}Q=ut~@*I3VR)BM-a3_5a0SVb2{~vCJiRD;PEVUc`;#(toApW^zb0%?nmtG zWwkomFwmq^Zb`|Lq?T8EEuA$$ATT}faoxt)pcJ-A&)f2YCd5{iYWnru>Y~jz#oL?y ze+}8bP71CIZ2|+Y*#k?-p}nlK819l0>2ba7kmV&yhp~gR4VfFO!HRgT(b#^o7l-ss z2jOV|c-L-T{%pMQ;zv7?!?UPk*5Kos$}vHSYhnZF%6t>_mS^(1$R=ZXUm~G@2?zrb z_8mi1Z`&h$WzNlcI@2u4w5Zh%~J3 z_xwO{7(C`O=rp8Vm~1}y{kZ>ZkkK?yX2l$`@e#iy=q>gF)RjKY_#+)0advnj*dU?t zE~wz|f>gwz%Xo8<6)rif*4wDpXzrEKtub=;UzfNchTb@Njirdo0exQxDL8POVyYs$ zJMD)Ois3yAks>S4)b9QN#V;r8j=$0|8(R#+k7h%ToXvOhRkT?K};s!s0qX1x)Y$iqaXPT41Kc$fFLD5}^ zkPPX(Q|J{<)21`hiZf!9FRZHfST>M`0n^J(H^~H3Y}@NPER*=~h!couB{SB0sP@)e zssDxXB4<MxVx7w7|iZND>CfW)beWL8`#*bj3J@_;5Lj51hYhV`EcPq?Z$-77glye4Dpd zzeNP-hP%Q@nxB+w66>F+Pfu1CvS{~v>$X9Xr>sGAHc?r`R3A^%V}Brm+~7B`M*5!- zyo{gqFO{{=$5gS_5t$3Q;KKvYgLoor?G2Anz_2@EL1FF(KTVN41CUZi3!oGXjJNh` zmGe=u?e`{Sbz8q)Yy=zuXb4dUP3ts^6kF4J1!FCMpXU@UR?7$zs|9_;CI`8NdFem& z0)|B=3gkHvB`@a zB14M#)1$}5AfQclkZqxMhJ=MoenG+aSIBd7>6fJD0AH{`(NKAWpWm)y=>DpL^cFMa zSqwn?v(PELMEeoTyCoCBX5n1;-y9(EK`I;uccl;Z)VeWmZ(u%SMizK4<=8q&=-WL} zn`>_#HfPEN0C3kaP01TyYg>Bl^eI5~089U3P3al3t>alSS0|U!f8VA&QJWy%XKC^0PHUfn-?nscj~8A zTTwC`{fr8_@t&r){z*0~K8?w)O)(=GHmPN+n#~A+E-~}`={mLmWzoXlf6ue-l#b6s zLI%q6Q5CSZs*1qVXC-xFe*y$B?@AHfBwySl_SQq>v zg?{&lpw%;xIu|=L03pWaywH&u(ab=rT#qF2qk_~egwe-#7a>CI`>+vZJM7D)8(Gwk zEDl-i!Fa((_pg-$lnDiH#@S@UiM6){w=8a0SMsuQ6Fqj005I!c&}1DeNc3YCHHIqG ze<<(9X#Cp)udB&P9qi7L{|m94*!;f`%fzcCcmYd}J%JEG`m*PyNUrZr(8Iwx-1X1F zmO0Y~wYACAnA@|MznlhUW-p?4n5fBhv$}$b>0UlK=E;%;Bj;b<=Hw^;-#*N#4^3YI z>xx*&Zw8xysn$XT56ccn-dYMf43`pdH7XEVBqE5LDvB1K?U}k})ymXG2cR?+ntwF* zjyHxgL7N+hP&vGRU%$Ihtr#7Ie|hK5@=jdk#No#af5=a710YM%)0Fv`pm>LhNlWMtUE8o{2oB+K9p5Ml%R3Qq>9$gKmJw+XXPIIUA1V?3=EyjrG) zjyrQ_$sCXOajgnc-yZ%sLKg2yfG(=HaGhf%s&-TXB?bO<;VL6EV+$Fd6V9p2EJg@A z`{+lecfKE*_I^)T_m%B(xU72vm>R_@j$$_KIn_l)F8o~$0===(EpB|r0v5w|j_|JU zg=7@}-rk;-!eQYx{(EDVX8X5C-d>4k)83wu;g$5ot8Q`zc6Dp}& zGE$cClPkWKBK0bVfU|fOce4>FmK1e3FT9*1mC8mxY&{f2PF~gcm(`giw3qYk{KrR` z_sNKc`sIpXX41j)~IdH-%^l zkVD)*8zmY^u54zoWmeL`R!^F!Fr2ulgOX^IW{5MUrjibk>1~2wbp#YyV^dG~1Gc)Y z@Xa@sfJt7h+0Rj^`4 zgDK31sR4fJFJ1^t0ELQTrvQ&72~8Yf`2zFFgzdl)U}+hdub9dpht&N!}3IM`@qJxW&VystjRb(l|BToM~gRfOy&hPwD>cMK(O>n% + + Group 2 + + + + + + + + + + + + + + + + + + + + Compass + + + + + + + + + + + + + + + + + + + + + Data Lineage + + + + + + + + + + Data Discovery + + + + + + + + + + Meta Analytics + + + + + + + + + + Social Graph + + + + + + + + + + Classfication + + + + + + + + + + Data Auditing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Metadata + + + + + \ No newline at end of file diff --git a/docs/yarn.lock b/docs/yarn.lock new file mode 100644 index 000000000..3b6a71eba --- /dev/null +++ b/docs/yarn.lock @@ -0,0 +1,7691 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.6.3.tgz#76832fffb6405ac2c87bac5a040b8a31a1cdef80" + integrity sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA== + dependencies: + "@algolia/autocomplete-shared" "1.6.3" + +"@algolia/autocomplete-shared@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.6.3.tgz#52085ce89a755977841ed0a463aa31ce8f1dea97" + integrity sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg== + +"@algolia/cache-browser-local-storage@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.13.1.tgz#ffacb9230119f77de1a6f163b83680be999110e4" + integrity sha512-UAUVG2PEfwd/FfudsZtYnidJ9eSCpS+LW9cQiesePQLz41NAcddKxBak6eP2GErqyFagSlnVXe/w2E9h2m2ttg== + dependencies: + "@algolia/cache-common" "4.13.1" + +"@algolia/cache-common@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.13.1.tgz#c933fdec9f73b4f7c69d5751edc92eee4a63d76b" + integrity sha512-7Vaf6IM4L0Jkl3sYXbwK+2beQOgVJ0mKFbz/4qSxKd1iy2Sp77uTAazcX+Dlexekg1fqGUOSO7HS4Sx47ZJmjA== + +"@algolia/cache-in-memory@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.13.1.tgz#c19baa67b4597e1a93e987350613ab3b88768832" + integrity sha512-pZzybCDGApfA/nutsFK1P0Sbsq6fYJU3DwIvyKg4pURerlJM4qZbB9bfLRef0FkzfQu7W11E4cVLCIOWmyZeuQ== + dependencies: + "@algolia/cache-common" "4.13.1" + +"@algolia/client-account@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.13.1.tgz#fea591943665477a23922ab31863ad0732e26c66" + integrity sha512-TFLiZ1KqMiir3FNHU+h3b0MArmyaHG+eT8Iojio6TdpeFcAQ1Aiy+2gb3SZk3+pgRJa/BxGmDkRUwE5E/lv3QQ== + dependencies: + "@algolia/client-common" "4.13.1" + "@algolia/client-search" "4.13.1" + "@algolia/transporter" "4.13.1" + +"@algolia/client-analytics@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.13.1.tgz#5275956b2d0d16997148f2085f1701b6c39ecc32" + integrity sha512-iOS1JBqh7xaL5x00M5zyluZ9+9Uy9GqtYHv/2SMuzNW1qP7/0doz1lbcsP3S7KBbZANJTFHUOfuqyRLPk91iFA== + dependencies: + "@algolia/client-common" "4.13.1" + "@algolia/client-search" "4.13.1" + "@algolia/requester-common" "4.13.1" + "@algolia/transporter" "4.13.1" + +"@algolia/client-common@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.13.1.tgz#3bf9e3586f20ef85bbb56ccca390f7dbe57c8f4f" + integrity sha512-LcDoUE0Zz3YwfXJL6lJ2OMY2soClbjrrAKB6auYVMNJcoKZZ2cbhQoFR24AYoxnGUYBER/8B+9sTBj5bj/Gqbg== + dependencies: + "@algolia/requester-common" "4.13.1" + "@algolia/transporter" "4.13.1" + +"@algolia/client-personalization@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.13.1.tgz#438a1f58576ef19c4ad4addb8417bdacfe2fce2e" + integrity sha512-1CqrOW1ypVrB4Lssh02hP//YxluoIYXAQCpg03L+/RiXJlCs+uIqlzC0ctpQPmxSlTK6h07kr50JQoYH/TIM9w== + dependencies: + "@algolia/client-common" "4.13.1" + "@algolia/requester-common" "4.13.1" + "@algolia/transporter" "4.13.1" + +"@algolia/client-search@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.13.1.tgz#5501deed01e23c33d4aaa9f9eb96a849f0fce313" + integrity sha512-YQKYA83MNRz3FgTNM+4eRYbSmHi0WWpo019s5SeYcL3HUan/i5R09VO9dk3evELDFJYciiydSjbsmhBzbpPP2A== + dependencies: + "@algolia/client-common" "4.13.1" + "@algolia/requester-common" "4.13.1" + "@algolia/transporter" "4.13.1" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + +"@algolia/logger-common@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.13.1.tgz#4221378e701e3f1eacaa051bcd4ba1f25ddfaf4d" + integrity sha512-L6slbL/OyZaAXNtS/1A8SAbOJeEXD5JcZeDCPYDqSTYScfHu+2ePRTDMgUTY4gQ7HsYZ39N1LujOd8WBTmM2Aw== + +"@algolia/logger-console@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.13.1.tgz#423d358e4992dd4bceab0d9a4e99d1fd68107043" + integrity sha512-7jQOTftfeeLlnb3YqF8bNgA2GZht7rdKkJ31OCeSH2/61haO0tWPoNRjZq9XLlgMQZH276pPo0NdiArcYPHjCA== + dependencies: + "@algolia/logger-common" "4.13.1" + +"@algolia/requester-browser-xhr@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.13.1.tgz#f8ea79233cf6f0392feaf31e35a6b40d68c5bc9e" + integrity sha512-oa0CKr1iH6Nc7CmU6RE7TnXMjHnlyp7S80pP/LvZVABeJHX3p/BcSCKovNYWWltgTxUg0U1o+2uuy8BpMKljwA== + dependencies: + "@algolia/requester-common" "4.13.1" + +"@algolia/requester-common@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.13.1.tgz#daea143d15ab6ed3909c4c45877f1b6c36a16179" + integrity sha512-eGVf0ID84apfFEuXsaoSgIxbU3oFsIbz4XiotU3VS8qGCJAaLVUC5BUJEkiFENZIhon7hIB4d0RI13HY4RSA+w== + +"@algolia/requester-node-http@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.13.1.tgz#32c63d4c009f22d97e396406de7af9b66fb8e89d" + integrity sha512-7C0skwtLdCz5heKTVe/vjvrqgL/eJxmiEjHqXdtypcE5GCQCYI15cb+wC4ytYioZDMiuDGeVYmCYImPoEgUGPw== + dependencies: + "@algolia/requester-common" "4.13.1" + +"@algolia/transporter@4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.13.1.tgz#509e03e9145102843d5be4a031c521f692d4e8d6" + integrity sha512-pICnNQN7TtrcYJqqPEXByV8rJ8ZRU2hCiIKLTLRyNpghtQG3VAFk6fVtdzlNfdUGZcehSKGarPIZEHlQXnKjgw== + dependencies: + "@algolia/cache-common" "4.13.1" + "@algolia/logger-common" "4.13.1" + "@algolia/requester-common" "4.13.1" + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" + integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.15.5", "@babel/core@^7.18.2": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" + integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.18.2" + "@babel/helper-compilation-targets" "^7.18.2" + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helpers" "^7.18.2" + "@babel/parser" "^7.18.5" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.5" + "@babel/types" "^7.18.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.12.5", "@babel/generator@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" + integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== + dependencies: + "@babel/types" "^7.18.2" + "@jridgewell/gen-mapping" "^0.3.0" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" + integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" + integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-member-expression-to-functions" "^7.17.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd" + integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" + integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" + integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== + dependencies: + "@babel/template" "^7.16.7" + "@babel/types" "^7.17.0" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" + integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== + dependencies: + "@babel/types" "^7.17.0" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" + integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.0" + "@babel/types" "^7.18.0" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" + integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0" + integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== + dependencies: + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-member-expression-to-functions" "^7.17.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.18.2" + "@babel/types" "^7.18.2" + +"@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" + integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== + dependencies: + "@babel/types" "^7.18.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" + integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.2" + "@babel/types" "^7.18.2" + +"@babel/highlight@^7.16.7": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" + integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.3", "@babel/parser@^7.18.4", "@babel/parser@^7.18.5": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" + integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" + integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753" + integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.17.12" + +"@babel/plugin-proposal-async-generator-functions@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03" + integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4" + integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-proposal-class-static-block@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz#7d02253156e3c3793bdb9f2faac3a1c05f0ba710" + integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378" + integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664" + integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23" + integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be" + integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-object-rest-spread@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8" + integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-compilation-targets" "^7.17.10" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.17.12" + +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174" + integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c" + integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-proposal-private-property-in-object@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" + integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d" + integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz#58096a92b11b2e4e54b24c6a0cc0e5e607abcedd" + integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47" + integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz#b54fc3be6de734a56b87508f99d6428b5b605a7b" + integrity sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-arrow-functions@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45" + integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-async-to-generator@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832" + integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-remap-async-to-generator" "^7.16.8" + +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-block-scoping@^7.17.12": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz#7988627b3e9186a13e4d7735dc9c34a056613fb9" + integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-classes@^7.17.12": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz#51310b812a090b846c784e47087fa6457baef814" + integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-replace-supers" "^7.18.2" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f" + integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-destructuring@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz#dc4f92587e291b4daa78aa20cc2d7a63aa11e858" + integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-duplicate-keys@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c" + integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-for-of@^7.18.1": + version "7.18.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz#ed14b657e162b72afbbb2b4cdad277bf2bb32036" + integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-literals@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae" + integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-modules-amd@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz#7ef1002e67e36da3155edc8bf1ac9398064c02ed" + integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz#1aa8efa2e2a6e818b6a7f2235fceaf09bdb31e9e" + integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-simple-access" "^7.18.2" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.18.0": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz#87f11c44fbfd3657be000d4897e192d9cb535996" + integrity sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz#56aac64a2c2a1922341129a4597d1fd5c3ff020f" + integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931" + integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-new-target@^7.17.12": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz#8c228c4a07501dd12c95c5f23d1622131cc23931" + integrity sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766" + integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-constant-elements@^7.14.5": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.12.tgz#cc580857696b6dd9e5e3d079e673d060a0657f37" + integrity sha512-maEkX2xs2STuv2Px8QuqxqjhV2LsFobT1elCgyU5704fcyTu9DyD/bJXxD/mrRiVyhpHweOQ00OJ5FKhHq9oEw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-react-display-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" + integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-jsx-development@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" + integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.16.7" + +"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba" + integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/types" "^7.17.12" + +"@babel/plugin-transform-react-pure-annotations@^7.16.7": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz#ef82c8e310913f3522462c9ac967d395092f1954" + integrity sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-regenerator@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz#44274d655eb3f1af3f3a574ba819d3f48caf99d5" + integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + regenerator-transform "^0.15.0" + +"@babel/plugin-transform-reserved-words@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f" + integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-runtime@^7.18.2": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz#f4d3188ba6a8815793993c71c2c225d0ee1d7743" + integrity sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5" + integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz#31ed6915721864847c48b656281d0098ea1add28" + integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-typeof-symbol@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889" + integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-typescript@^7.17.12": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz#587eaf6a39edb8c06215e550dc939faeadd750bf" + integrity sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-typescript" "^7.17.12" + +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@^7.15.6", "@babel/preset-env@^7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a" + integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-compilation-targets" "^7.18.2" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-async-generator-functions" "^7.17.12" + "@babel/plugin-proposal-class-properties" "^7.17.12" + "@babel/plugin-proposal-class-static-block" "^7.18.0" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.17.12" + "@babel/plugin-proposal-json-strings" "^7.17.12" + "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.18.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-private-methods" "^7.17.12" + "@babel/plugin-proposal-private-property-in-object" "^7.17.12" + "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.17.12" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.17.12" + "@babel/plugin-transform-async-to-generator" "^7.17.12" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.17.12" + "@babel/plugin-transform-classes" "^7.17.12" + "@babel/plugin-transform-computed-properties" "^7.17.12" + "@babel/plugin-transform-destructuring" "^7.18.0" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.17.12" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.18.1" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.17.12" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.18.0" + "@babel/plugin-transform-modules-commonjs" "^7.18.2" + "@babel/plugin-transform-modules-systemjs" "^7.18.0" + "@babel/plugin-transform-modules-umd" "^7.18.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" + "@babel/plugin-transform-new-target" "^7.17.12" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.17.12" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.18.0" + "@babel/plugin-transform-reserved-words" "^7.17.12" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.17.12" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.18.2" + "@babel/plugin-transform-typeof-symbol" "^7.17.12" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.2" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.22.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.14.5", "@babel/preset-react@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d" + integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-react-display-name" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.17.12" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + +"@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.17.12": + version "7.17.12" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz#40269e0a0084d56fc5731b6c40febe1c9a4a3e8c" + integrity sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.17.12" + +"@babel/runtime-corejs3@^7.18.3": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz#52f0241a31e0ec61a6187530af6227c2846bd60c" + integrity sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q== + dependencies: + core-js-pure "^3.20.2" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.8.4": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" + integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.12.7", "@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5": + version "7.18.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" + integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.18.2" + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.18.5" + "@babel/types" "^7.18.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.4.4": + version "7.18.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" + integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@docsearch/css@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.1.0.tgz#6781cad43fc2e034d012ee44beddf8f93ba21f19" + integrity sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA== + +"@docsearch/react@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.1.0.tgz#da943a64c01ee82b04e53b691806469272f943f7" + integrity sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg== + dependencies: + "@algolia/autocomplete-core" "1.6.3" + "@docsearch/css" "3.1.0" + algoliasearch "^4.0.0" + +"@docusaurus/core@0.0.0-5124", "@docusaurus/core@^0.0.0-4608": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-0.0.0-5124.tgz#d32864068dd8662ed349f96080dd864c2182b705" + integrity sha512-46lpqfd/CD+PuSY5fvZkp3nv7WyUUMtkwgOR9Np67FjD5o3/S/TAOOgqM8AWs8jNcONb0eN7DpBnLBp1joX9ZA== + dependencies: + "@babel/core" "^7.18.2" + "@babel/generator" "^7.18.2" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.2" + "@babel/preset-env" "^7.18.2" + "@babel/preset-react" "^7.17.12" + "@babel/preset-typescript" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@babel/runtime-corejs3" "^7.18.3" + "@babel/traverse" "^7.18.2" + "@docusaurus/cssnano-preset" "0.0.0-5124" + "@docusaurus/logger" "0.0.0-5124" + "@docusaurus/mdx-loader" "0.0.0-5124" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "0.0.0-5124" + "@docusaurus/utils-common" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.22.8" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.11" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^1.12.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.0" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.2" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/core@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.21.tgz#50897317b22dbd94b1bf91bb30c2a0fddd15a806" + integrity sha512-qysDMVp1M5UozK3u/qOxsEZsHF7jeBvJDS+5ItMPYmNKvMbNKeYZGA0g6S7F9hRDwjIlEbvo7BaX0UMDcmTAWA== + dependencies: + "@babel/core" "^7.18.2" + "@babel/generator" "^7.18.2" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.2" + "@babel/preset-env" "^7.18.2" + "@babel/preset-react" "^7.17.12" + "@babel/preset-typescript" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@babel/runtime-corejs3" "^7.18.3" + "@babel/traverse" "^7.18.2" + "@docusaurus/cssnano-preset" "2.0.0-beta.21" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/mdx-loader" "2.0.0-beta.21" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/utils-common" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" + "@slorber/static-site-generator-webpack-plugin" "^4.0.4" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.22.7" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.9" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^1.12.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.0" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + remark-admonitions "^1.2.1" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.1" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.72.1" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.0" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/cssnano-preset@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-0.0.0-5124.tgz#9618d3e7af4bd85f88d67e1f7f0d2078e7210744" + integrity sha512-WP22EcwzRggDKTZAz8AMwfHFj7+lz761vROL88iAj7Uj8neC2voSwBeqX2NakS1Y7ZdckPpnkKEsnviM5NpcaQ== + dependencies: + cssnano-preset-advanced "^5.3.6" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/cssnano-preset@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.21.tgz#38113877a5857c3f9d493522085d20909dcec474" + integrity sha512-fhTZrg1vc6zYYZIIMXpe1TnEVGEjqscBo0s1uomSwKjjtMgu7wkzc1KKJYY7BndsSA+fVVkZ+OmL/kAsmK7xxw== + dependencies: + cssnano-preset-advanced "^5.3.5" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/logger@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-0.0.0-5124.tgz#701a2c762030f38b124b805c7781e19a35980547" + integrity sha512-HLJKJwuDxqqbSoH6+TP8rKdBU+CN9lIGsQGzngHfZt2BwZEYlaOKLj+FWgayB348KDYpAjH6I+D6vUj4Z/2exQ== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/logger@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-beta.21.tgz#f6ab4133917965349ae03fd9111a940b24d4fd12" + integrity sha512-HTFp8FsSMrAj7Uxl5p72U+P7rjYU/LRRBazEoJbs9RaqoKEdtZuhv8MYPOCh46K9TekaoquRYqag2o23Qt4ggA== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/mdx-loader@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-0.0.0-5124.tgz#4bcab589a7eac21aa5edb5ed402018387452057c" + integrity sha512-I/XZpJmc9gTcehQ4n0QPS44bd4yeaANzN1yP3sTERK0emkKpcQzCcST8EetMvAjg+Q2qq9FPmvP79ttKGB8zTg== + dependencies: + "@babel/parser" "^7.18.4" + "@babel/traverse" "^7.18.2" + "@docusaurus/logger" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/mdx-loader@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.21.tgz#52af341e21f22be882d2155a7349bea10f5d77a3" + integrity sha512-AI+4obJnpOaBOAYV6df2ux5Y1YJCBS+MhXFf0yhED12sVLJi2vffZgdamYd/d/FwvWDw6QLs/VD2jebd7P50yQ== + dependencies: + "@babel/parser" "^7.18.3" + "@babel/traverse" "^7.18.2" + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.72.1" + +"@docusaurus/module-type-aliases@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-0.0.0-5124.tgz#07830d8be17c85ff307aec909b8ecfc3a1f34c37" + integrity sha512-Hgi/Be5eeo4j7O73eZFI11fnQIavNBH9CqfxBbnKwMONIz/iKxK40OhtjauqdSBVmwa+bV872k6xwBna4OyQEw== + dependencies: + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "0.0.0-5124" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-content-blog@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-0.0.0-5124.tgz#7211aec8a99d22938a594652cc60af139037fc30" + integrity sha512-yvYniJFPnNjj9WP3cvbgvskPPq7mG3VVBUMQnwWLHjTdDNMMhA6nbBAB7U+lf4zJGwa5PZhF9N5t2CZNb0LA0w== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/logger" "0.0.0-5124" + "@docusaurus/mdx-loader" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + "@docusaurus/utils-common" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + cheerio "^1.0.0-rc.11" + feed "^4.2.2" + fs-extra "^10.1.0" + lodash "^4.17.21" + reading-time "^1.5.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-0.0.0-5124.tgz#000c15cbe4d773a298b7b79c8b9d023e66ba9ca3" + integrity sha512-dC7qV5IUpTvAML39mP83gKnG8VKdV+GDd9cBeXeC/KzshToNe3tMnHlzAgaHHCmH5AowJEAxTO87eTZuvZMgCA== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/logger" "0.0.0-5124" + "@docusaurus/mdx-loader" "0.0.0-5124" + "@docusaurus/module-type-aliases" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + "@types/react-router-config" "^5.0.6" + combine-promises "^1.1.0" + fs-extra "^10.1.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-0.0.0-5124.tgz#4466f8bc2b1c671ecaf855c51f60b824218693e2" + integrity sha512-eSXfHkUywXWLXRQsOxq+Zqpme9ex7euHEsexuctxwqeS7Lopl1aZAYuBi9dVAiQ2ks6ExWuoSDxW6cNuqu2h0Q== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/mdx-loader" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + fs-extra "^10.1.0" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-debug@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-0.0.0-5124.tgz#dbe8a44ed885d71238b9ab17843acacfd04d657b" + integrity sha512-0w1nUBQ20HD2rJ54Vj5fewaveWIFWg9DAv7go6oy1itJTWE/p7jSEaJccx51wWbF1DDze/9XTjnJ+zN19cJhbA== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + fs-extra "^10.1.0" + react-json-view "^1.21.3" + tslib "^2.4.0" + +"@docusaurus/plugin-google-analytics@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-0.0.0-5124.tgz#9b144b023bad24fa165a55a80e12ab6981e2ed1e" + integrity sha512-EXTHY9vN5bvdcDtyVnjLNwoA1paNxHYAYo091RP8CLcQ9BvouEEe2lIsmDLpTFSPKVpjbD1aFauySZShMsVEhg== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-0.0.0-5124.tgz#055421c76e93b041db1fe4c81ddee5c26db1621b" + integrity sha512-Bg0elzAfbZ4fGwh4B/PqwEWZIfbaK2QD4LMfQcm1rDURnRudmK7LiqQBSHLrsUtYk58tZIL0k6hzPO2SkICOyA== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@^2.0.0-beta.6": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.21.tgz#a4a101089994a7103c1cc7cddb15170427b185d6" + integrity sha512-4zxKZOnf0rfh6myXLG7a6YZfQcxYDMBsWqANEjCX77H5gPdK+GHZuDrxK6sjFvRBv4liYCrNjo7HJ4DpPoT0zA== + dependencies: + "@docusaurus/core" "2.0.0-beta.21" + "@docusaurus/utils-validation" "2.0.0-beta.21" + tslib "^2.4.0" + +"@docusaurus/plugin-sitemap@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-0.0.0-5124.tgz#74254ca0e474623183698534a2dacaae35f0edf9" + integrity sha512-CaOIJHWwgEARDSyvY3rNN8D80BqbJLzeUfFmS0EI+X3P9cSSq0TcDjL7407egs42U+QSJlndVU69qYu9NlN6Fw== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/logger" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + "@docusaurus/utils-common" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + fs-extra "^10.1.0" + sitemap "^7.1.1" + tslib "^2.4.0" + +"@docusaurus/preset-classic@^0.0.0-4608": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-0.0.0-5124.tgz#846a42539b14df7af0aa0c3bbbaf44c6aaa1036c" + integrity sha512-SYfs0QJ4F5+2ACH+BrgmxHh3xWvYnQyE76WhA+Tejfk4m4EaODvvkuDoONb7rOnDs/ggM2XIGgjtIe1f9NlxjQ== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/plugin-content-blog" "0.0.0-5124" + "@docusaurus/plugin-content-docs" "0.0.0-5124" + "@docusaurus/plugin-content-pages" "0.0.0-5124" + "@docusaurus/plugin-debug" "0.0.0-5124" + "@docusaurus/plugin-google-analytics" "0.0.0-5124" + "@docusaurus/plugin-google-gtag" "0.0.0-5124" + "@docusaurus/plugin-sitemap" "0.0.0-5124" + "@docusaurus/theme-classic" "0.0.0-5124" + "@docusaurus/theme-common" "0.0.0-5124" + "@docusaurus/theme-search-algolia" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + +"@docusaurus/theme-classic@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-0.0.0-5124.tgz#0649eb9b73980078024cb88b35d43f2f19757a9b" + integrity sha512-quSF7UJzUhXQyeAO38sD/o9jAm66b0nTt4WUTSuX/7WFCzDyOt4Dv6Zr6a4fLl0C652pHVitoWahVy640e5faQ== + dependencies: + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/mdx-loader" "0.0.0-5124" + "@docusaurus/module-type-aliases" "0.0.0-5124" + "@docusaurus/plugin-content-blog" "0.0.0-5124" + "@docusaurus/plugin-content-docs" "0.0.0-5124" + "@docusaurus/plugin-content-pages" "0.0.0-5124" + "@docusaurus/theme-common" "0.0.0-5124" + "@docusaurus/theme-translations" "0.0.0-5124" + "@docusaurus/types" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + "@docusaurus/utils-common" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + "@mdx-js/react" "^1.6.22" + clsx "^1.1.1" + copy-text-to-clipboard "^3.0.1" + infima "0.2.0-alpha.39" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.3" + prismjs "^1.28.0" + react-router-dom "^5.3.3" + rtlcss "^3.5.0" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-0.0.0-5124.tgz#ff3b92af1e1f4e7827dfac33cc57a1b174bffd51" + integrity sha512-vXKaMsvgFs4Pk+U2YFuqPKZyNjb+6iaCCcVV71bh18eZPi1X8RSfcvvfcjzR8fwxLfry7SEc6HeP8mMGOmlTbg== + dependencies: + "@docusaurus/mdx-loader" "0.0.0-5124" + "@docusaurus/module-type-aliases" "0.0.0-5124" + "@docusaurus/plugin-content-blog" "0.0.0-5124" + "@docusaurus/plugin-content-docs" "0.0.0-5124" + "@docusaurus/plugin-content-pages" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.1.1" + parse-numeric-range "^1.3.0" + prism-react-renderer "^1.3.3" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-search-algolia@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-0.0.0-5124.tgz#ebcd3dfc21fb93e96ce073442a811542d03bb7d8" + integrity sha512-U99FbmXCxpFB5fW5V+Zcv/DG3x9Wq0bBEdqOxa2hB057N29iPAJJxwgujGCG1CScmDNUkuB3hZGMNs/cmsJAPQ== + dependencies: + "@docsearch/react" "^3.1.0" + "@docusaurus/core" "0.0.0-5124" + "@docusaurus/logger" "0.0.0-5124" + "@docusaurus/plugin-content-docs" "0.0.0-5124" + "@docusaurus/theme-common" "0.0.0-5124" + "@docusaurus/theme-translations" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + "@docusaurus/utils-validation" "0.0.0-5124" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.8.2" + clsx "^1.1.1" + eta "^1.12.3" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-translations@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-0.0.0-5124.tgz#3de7fc354bed5aaa40b1d4b2f4564d9a6a69eddd" + integrity sha512-8j++wQEyrdw1JlajqaV4dsBZsneJRIRJGvlaXJowCXLwP3GmB9vrUMf8sTpJ6Z/fgGzB0XZ+euLRjZ8wuhVfQA== + dependencies: + fs-extra "^10.1.0" + tslib "^2.4.0" + +"@docusaurus/types@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-0.0.0-5124.tgz#c6c2b7d9fd23ef1ad96d6735eb10e373ed406524" + integrity sha512-B4kHzMYNIQfX3JwT2ZEwVN85hCIdLcRfFxfKr2LGWpv5uHYdI4fnYjlwSVJPfcItg83LfNPm0Rdt01aoU0t5Vg== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + commander "^5.1.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-0.0.0-5124.tgz#2c06e697fad965a8a695ee419bcbca3502d3d201" + integrity sha512-2PwQjcUR4p3h7ywjB08ZO/vl1VRgIRNvwo+Gc1of7FwT00W9LBf9bR2zcnz6Wp6ofLDdj6GYxdLBizn+HGbrjQ== + dependencies: + tslib "^2.4.0" + +"@docusaurus/utils-common@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.21.tgz#81e86ed04ad62b75e9ba6a5e7689dc23d5f36a0a" + integrity sha512-5w+6KQuJb6pUR2M8xyVuTMvO5NFQm/p8TOTDFTx60wt3p0P1rRX00v6FYsD4PK6pgmuoKjt2+Ls8dtSXc4qFpQ== + dependencies: + tslib "^2.4.0" + +"@docusaurus/utils-validation@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-0.0.0-5124.tgz#d90cb4fb9ada96aeea576d1300ca006d10049726" + integrity sha512-Nu6Y1xuasrlClrzpXdWekf+s8pLaBJQlqUIAqYEgBoCHwR3NwYWJDzlg5ofWBQcK7XqvK7/bVsikrvwmxyvLFg== + dependencies: + "@docusaurus/logger" "0.0.0-5124" + "@docusaurus/utils" "0.0.0-5124" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils-validation@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.21.tgz#10169661be5f8a233f4c12202ee5802ccb77400f" + integrity sha512-6NG1FHTRjv1MFzqW//292z7uCs77vntpWEbZBHk3n67aB1HoMn5SOwjLPtRDjbCgn6HCHFmdiJr6euCbjhYolg== + dependencies: + "@docusaurus/logger" "2.0.0-beta.21" + "@docusaurus/utils" "2.0.0-beta.21" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils@0.0.0-5124": + version "0.0.0-5124" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-0.0.0-5124.tgz#437edc4a55e5f64719b7afb86222758f2b567de7" + integrity sha512-kpupi5gnzzZ7/Ebkl9uS3s59OhdNtxyJUSA0ccSYwaVD55d0YKowxWC+z2JeiybmWdIdbqd8kY3CkTfyR47+lA== + dependencies: + "@docusaurus/logger" "0.0.0-5124" + "@svgr/webpack" "^6.2.1" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/utils@2.0.0-beta.21": + version "2.0.0-beta.21" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.21.tgz#8fc4499c4cfedd29805025d930f8008cad255044" + integrity sha512-M/BrVCDmmUPZLxtiStBgzpQ4I5hqkggcpnQmEN+LbvbohjbtVnnnZQ0vptIziv1w8jry/woY+ePsyOO7O/yeLQ== + dependencies: + "@docusaurus/logger" "2.0.0-beta.21" + "@svgr/webpack" "^6.2.1" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.72.1" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" + integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" + integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== + +"@jridgewell/set-array@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" + integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.13" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" + integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== + +"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" + integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mdx-js/mdx@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.21", "@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@slorber/static-site-generator-webpack-plugin@^4.0.4", "@slorber/static-site-generator-webpack-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" + integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== + dependencies: + eval "^0.1.8" + p-map "^4.0.0" + webpack-sources "^3.2.2" + +"@svgr/babel-plugin-add-jsx-attribute@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz#bd6d1ff32a31b82b601e73672a789cc41e84fe18" + integrity sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA== + +"@svgr/babel-plugin-remove-jsx-attribute@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz#58654908beebfa069681a83332544b17e5237e89" + integrity sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz#d06dd6e8a8f603f92f9979bb9990a1f85a4f57ba" + integrity sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz#0b85837577b02c31c09c758a12932820f5245cee" + integrity sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ== + +"@svgr/babel-plugin-svg-dynamic-title@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz#28236ec26f7ab9d486a487d36ae52d58ba15676f" + integrity sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg== + +"@svgr/babel-plugin-svg-em-dimensions@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz#40267c5dea1b43c4f83a0eb6169e08b43d8bafce" + integrity sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA== + +"@svgr/babel-plugin-transform-react-native-svg@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz#eb688d0a5f539e34d268d8a516e81f5d7fede7c9" + integrity sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ== + +"@svgr/babel-plugin-transform-svg-component@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz#7ba61d9fc1fb42b0ba1a04e4630019fa7e993c4f" + integrity sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg== + +"@svgr/babel-preset@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.2.0.tgz#1d3ad8c7664253a4be8e4a0f0e6872f30d8af627" + integrity sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^6.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "^6.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "^6.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "^6.0.0" + "@svgr/babel-plugin-transform-svg-component" "^6.2.0" + +"@svgr/core@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.2.1.tgz#195de807a9f27f9e0e0d678e01084b05c54fdf61" + integrity sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA== + dependencies: + "@svgr/plugin-jsx" "^6.2.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + +"@svgr/hast-util-to-babel-ast@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz#ae065567b74cbe745afae617053adf9a764bea25" + integrity sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ== + dependencies: + "@babel/types" "^7.15.6" + entities "^3.0.1" + +"@svgr/plugin-jsx@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz#5668f1d2aa18c2f1bb7a1fc9f682d3f9aed263bd" + integrity sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g== + dependencies: + "@babel/core" "^7.15.5" + "@svgr/babel-preset" "^6.2.0" + "@svgr/hast-util-to-babel-ast" "^6.2.1" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz#4cbe6a33ccccdcae4e3b63ded64cc1cbe1faf48c" + integrity sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.5.0" + +"@svgr/webpack@^6.0.0", "@svgr/webpack@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.2.1.tgz#ef5d51c1b6be4e7537fb9f76b3f2b2e22b63c58d" + integrity sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw== + dependencies: + "@babel/core" "^7.15.5" + "@babel/plugin-transform-react-constant-elements" "^7.14.5" + "@babel/preset-env" "^7.15.6" + "@babel/preset-react" "^7.14.5" + "@babel/preset-typescript" "^7.15.0" + "@svgr/core" "^6.2.1" + "@svgr/plugin-jsx" "^6.2.1" + "@svgr/plugin-svgo" "^6.2.0" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" + integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.3" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.3.tgz#5c92815a3838b1985c90034cd85f26f59d9d0ece" + integrity sha512-YP1S7YJRMPs+7KZKDb9G63n8YejIwW9BALq7a5j2+H4yl6iOv9CB29edho+cuFRrvmJbbaH2yiVChKLJVysDGw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.29" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" + integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + dependencies: + "@types/unist" "*" + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/node@*": + version "18.0.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" + integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" + integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router-dom@*": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.18" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.18.tgz#c8851884b60bc23733500d86c1266e1cfbbd9ef3" + integrity sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*": + version "18.0.12" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.12.tgz#cdaa209d0a542b3fcf69cf31a03976ec4cdd8840" + integrity sha512-duF1OTASSBQtcigUvhuiTB1Ya3OvSy+xORCiEf20H0P0lzx+/KeVsA99U5UjLXSbyo1DRJDlLKqTeM1ngosqtg== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/sax@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" + integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/ws@^8.5.1": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0: + version "8.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + +address@^1.0.1, address@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9" + integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.8.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +algoliasearch-helper@^3.8.2: + version "3.8.3" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.8.3.tgz#74066a6aa56a6dfa7af1f3ab8c6a545d707d5d5e" + integrity sha512-J0H08fQoyhZ2qLi7Uy8EvUeN/NJ4Trtt7NWB8mF1CGLuYpdXPyjZu9+Uoya2eayxQ20RP+QGF9Om/LddPv49vw== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^4.0.0, algoliasearch@^4.13.1: + version "4.13.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.13.1.tgz#54195c41c9e4bd13ed64982248cf49d4576974fe" + integrity sha512-dtHUSE0caWTCE7liE1xaL+19AFf6kWEcyn76uhcitWpntqvicFHXKFoZe5JJcv9whQOTRM6+B8qJz6sFj+rDJA== + dependencies: + "@algolia/cache-browser-local-storage" "4.13.1" + "@algolia/cache-common" "4.13.1" + "@algolia/cache-in-memory" "4.13.1" + "@algolia/client-account" "4.13.1" + "@algolia/client-analytics" "4.13.1" + "@algolia/client-common" "4.13.1" + "@algolia/client-personalization" "4.13.1" + "@algolia/client-search" "4.13.1" + "@algolia/logger-common" "4.13.1" + "@algolia/logger-console" "4.13.1" + "@algolia/requester-browser-xhr" "4.13.1" + "@algolia/requester-common" "4.13.1" + "@algolia/requester-node-http" "4.13.1" + "@algolia/transporter" "4.13.1" + +ansi-align@^3.0.0, ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.3.7, autoprefixer@^10.4.7: + version "10.4.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.7.tgz#1db8d195f41a52ca5069b7593be167618edbbedf" + integrity sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA== + dependencies: + browserslist "^4.20.3" + caniuse-lite "^1.0.30001335" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +babel-loader@^8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.0.13" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1" + integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +boxen@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== + dependencies: + ansi-align "^3.0.1" + camelcase "^6.2.0" + chalk "^4.1.2" + cli-boxes "^3.0.0" + string-width "^5.0.1" + type-fest "^2.5.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.20.4: + version "4.20.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.4.tgz#98096c9042af689ee1e0271333dbc564b8ce4477" + integrity sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw== + dependencies: + caniuse-lite "^1.0.30001349" + electron-to-chromium "^1.4.147" + escalade "^3.1.1" + node-releases "^2.0.5" + picocolors "^1.0.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001349: + version "1.0.30001355" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001355.tgz#e240b7177443ed0198c737a7f609536976701c77" + integrity sha512-Sd6pjJHF27LzCB7pT7qs+kuX2ndurzCzkpJl6Qct7LPSZ9jn0bkOA8mdgMgmqnQAWLVOOGjLpc+66V57eLtb1g== + +ccount@^1.0.0, ccount@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.11: + version "1.0.0-rc.11" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.11.tgz#1be84be1a126958366bcc57a11648cd9b30a60c2" + integrity sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + tslib "^2.4.0" + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +classnames@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== + +clean-css@^5.2.2, clean-css@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.0.tgz#ad3d8238d5f3549e83d5f87205189494bc7cbb59" + integrity sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + +cli-table3@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== + dependencies: + mimic-response "^1.0.0" + +clsx@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.1: + version "2.9.2" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== + +colorette@^2.0.10: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combine-promises@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" + integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +copy-text-to-clipboard@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" + integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== + +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.21.0, core-js-compat@^3.22.1: + version "3.23.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.1.tgz#23d44d9f209086e60dabf9130cea7719af6e199b" + integrity sha512-KeYrEc8t6FJsKYB2qnDwRHWaC0cJNaqlHfCpMe5q3j/W1nje3moib/txNklddLPCtGb+etcBIyJ8zuMa/LN5/A== + dependencies: + browserslist "^4.20.4" + semver "7.0.0" + +core-js-pure@^3.20.2: + version "3.23.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.1.tgz#0b27e4c3ad46178b84e790dbbb81987218ab82ad" + integrity sha512-3qNgf6TqI3U1uhuSYRzJZGfFd4T+YlbyVPl+jgRiKjdZopvG4keZQwWZDAWpu1UH9nCgTpUzIV3GFawC7cJsqg== + +core-js@^3.22.7, core-js@^3.22.8: + version "3.23.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.1.tgz#9f9a9255115f62c512db56d567f636da32ca0b78" + integrity sha512-wfMYHWi1WQjpgZNC9kAlN4ut04TM9fUTdi7CqIoTVM7yaiOUQTklOzfb+oWH3r9edQcT3F887swuVmxrV+CC8w== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-declaration-sorter@^6.2.2: + version "6.3.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz#72ebd995c8f4532ff0036631f7365cce9759df14" + integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og== + +css-loader@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" + integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.7" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz#e11800388c19c2b7442c39cc78ac8ae3675c9605" + integrity sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA== + dependencies: + cssnano "^5.1.8" + jest-worker "^27.5.1" + postcss "^8.4.13" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^5.3.5, cssnano-preset-advanced@^5.3.6: + version "5.3.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.7.tgz#5c00fd6603ab1b2d1dee5540bd3a5931ab275d36" + integrity sha512-VNOdTMRA60KhaURZhnkTGeluHQBHWDMwY7TIDu1Qydf88X6k8xZbV2I+Wlm8JRaj2oi18xvoIOAW17JneoZzEg== + dependencies: + autoprefixer "^10.3.7" + cssnano-preset-default "^5.2.11" + postcss-discard-unused "^5.1.0" + postcss-merge-idents "^5.1.1" + postcss-reduce-idents "^5.2.0" + postcss-zindex "^5.1.0" + +cssnano-preset-default@^5.2.11: + version "5.2.11" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.11.tgz#28350471bc1af9df14052472b61340347f453a53" + integrity sha512-4PadR1NtuaIK8MvLNuY7MznK4WJteldGlzCiMaaTiOUP+apeiIvUDIXykzUOoqgOOUAHrU64ncdD90NfZR3LSQ== + dependencies: + css-declaration-sorter "^6.2.2" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.2" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.5" + postcss-merge-rules "^5.1.2" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.3" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.0" + postcss-normalize-repeat-style "^5.1.0" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.0" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.2" + postcss-reduce-initial "^5.1.0" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.1.11, cssnano@^5.1.8, cssnano@^5.1.9: + version "5.1.11" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.11.tgz#3bb003380718c7948ce3813493370e8946caf04b" + integrity sha512-2nx+O6LvewPo5EBtYrKc8762mMkZRk9cMGIOP4UlkmxHm7ObxH+zvsJJ+qLwPkUc4/yumL/qJkavYi9NlodWIQ== + dependencies: + cssnano-preset-default "^5.2.11" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.4.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" + integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.147: + version "1.4.158" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.158.tgz#abbdaaf64676bfa4bc0307522125db34424a0ada" + integrity sha512-gppO3/+Y6sP432HtvwvuU8S+YYYLH4PmAYvQwqUtt9HDOmEsBwQfLnK9T8+1NIKwAS1BEygIjTaATC4H5EzvxQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" + integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + +entities@^4.2.0, entities@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.0.tgz#62915f08d67353bb4eb67e3d62641a4059aec656" + integrity sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.3.tgz#2982d08adfbef39f9fa50e2fbd42d7337e7338b1" + integrity sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eval@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.3: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flux@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" + integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + +follow-redirects@^1.0.0, follow-redirects@^1.14.7: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" + integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +github-slugger@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" + integrity sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + dependencies: + ini "2.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c" + integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA== + dependencies: + ccount "^1.0.3" + hastscript "^5.0.0" + property-information "^5.0.0" + web-namespaces "^1.1.2" + xtend "^4.0.1" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hastscript@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" + integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hoist-non-react-statics@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" + integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-webpack-plugin@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" + integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" + integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +image-size@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.1.tgz#86d6cfc2b1d19eab5d2b368d4b9194d9e48541c5" + integrity sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ== + dependencies: + queue "6.0.2" + +immer@^9.0.7: + version "9.0.15" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" + integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== + +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infima@0.2.0-alpha.39: + version "0.2.0-alpha.39" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.39.tgz#054b13ac44f3e9a42bc083988f1a1586add2f59c" + integrity sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.8.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5, jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +joi@^17.6.0: + version "17.6.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" + integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.1.2, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lilconfig@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.0.tgz#bcecc51a7898bee7473d4bc6b845b23af8304d4f" + integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.4.4" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.4.tgz#e8973cd8060548916adcca58a248e7805c715e89" + integrity sha512-W4gHNUE++1oSJVn8Y68jPXi+mkx3fXR5ITE/Ubz6EQ3xRpCN5k2CQ4AUR8094Z7211F876TyoBACGsIveqgiGA== + dependencies: + fs-monkey "1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-create-react-context@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" + integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== + dependencies: + "@babel/runtime" "^7.12.1" + tiny-warning "^1.0.3" + +mini-css-extract-plugin@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" + integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" + integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" + integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== + dependencies: + entities "^4.3.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" + integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" + integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== + dependencies: + browserslist "^4.20.3" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-discard-unused@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" + integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-loader@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.0.tgz#367d10eb1c5f1d93700e6b399683a6dc7c3af396" + integrity sha512-IDyttebFzTSY6DI24KuHUcBjbAev1i+RyICoPEWcAstZsj03r533uMXtDn506l6/wlsRYiS5XBdx7TpccCsyUg== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.7" + +postcss-merge-idents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" + integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.5.tgz#b0e03bee3b964336f5f33c4fc8eacae608e91c05" + integrity sha512-NOG1grw9wIO+60arKa2YYsrbgvP6tp+jqc7+ZD5/MalIw234ooH2C6KlR6FEn4yle7GqZoBxSK1mLBE9KPur6w== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.0" + +postcss-merge-rules@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" + integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" + integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== + dependencies: + browserslist "^4.16.6" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz#902a7cb97cf0b9e8b1b654d4a43d451e48966458" + integrity sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz#f6d6fd5a54f51a741cc84a37f7459e60ef7a6398" + integrity sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" + integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== + dependencies: + browserslist "^4.16.6" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.2.tgz#daffacd4abf327d52d5ac570b59dfbcf4b836614" + integrity sha512-wr2avRbW4HS2XE2ZCqpfp4N/tDC6GZKZ+SVP8UBTOVS8QWrc4TD8MYrebJrvVVlGPKszmiSCzue43NDiVtgDmg== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-idents@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" + integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" + integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz#a99bae69ef1098ee3b64a5fa94d258ec240d0355" + integrity sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ== + dependencies: + sort-css-media-queries "2.0.4" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-zindex@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" + integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== + +postcss@^8.3.11, postcss@^8.4.13, postcss@^8.4.14, postcss@^8.4.7: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.2.1, prism-react-renderer@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz#9b5a4211a6756eee3c96fee9a05733abc0b0805c" + integrity sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ== + +prismjs@^1.28.0: + version "1.28.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.28.0.tgz#0d8f561fa0f7cf6ebca901747828b149147044b6" + integrity sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-fast-compare@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-helmet-async@*, react-helmet-async@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-loadable-ssr-addon-v5-slorber@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== + dependencies: + "@babel/runtime" "^7.10.3" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.3.tgz#8779fc28e6691d07afcaf98406d3812fe6f11199" + integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.3" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.3, react-router@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.3.tgz#8e3841f4089e728cf82a429d92cdcaa5e4a3a288" + integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-textarea-autosize@^8.3.2: + version "8.3.4" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" + integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ== + dependencies: + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^2.0.1: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + +rehype-parse@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" + integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug== + dependencies: + hast-util-from-parse5 "^5.0.0" + parse5 "^5.0.0" + xtend "^4.0.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-admonitions@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.2.1.tgz#87caa1a442aa7b4c0cafa04798ed58a342307870" + integrity sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow== + dependencies: + rehype-parse "^6.0.2" + unified "^8.4.2" + unist-util-visit "^2.0.1" + +remark-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" + integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.3" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rtl-detect@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" + integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== + +rtlcss@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" + integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== + dependencies: + find-up "^5.0.0" + picocolors "^1.0.0" + postcss "^8.3.11" + strip-json-comments "^3.1.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.4: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56" + integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== + dependencies: + node-forge "^1" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" + integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.0.4" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-css-media-queries@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz#b2badfa519cb4a938acbc6d3aaa913d4949dc908" + integrity sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.1.1.tgz#1f19c4d3f6278c52efd08a94574a2a8d32b7d092" + integrity sha512-/c645XdExBypL01TpFKiG/3RAa/Qmu+zRi0MwAmrdEkwHNuN0ebo8ccAXBBDa5Z0QOJgBskUIbuCK91x0sCVEw== + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" + integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== + dependencies: + browserslist "^4.16.6" + postcss-selector-parser "^6.0.4" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^2.5.0, svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" + integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.7" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.7.2" + +terser@^5.10.0, terser@^5.7.2: + version "5.14.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.1.tgz#7c95eec36436cb11cf1902cc79ac564741d19eca" + integrity sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-invariant@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" + integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== + +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^2.5.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.13.1.tgz#621c84220df0e01a8469002594fc005714f0cfba" + integrity sha512-hXYyrPFwETT2swFLHeoKtJrvSF/ftG/sA15/8nGaLuaDGfVAaq8DYFpu4yOyV4tzp082WqnTEoMsm3flKMI2FQ== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +ua-parser-js@^0.7.30: + version "0.7.31" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" + integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" + integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" + integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.1, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +wait-on@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" + integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== + dependencies: + axios "^0.25.0" + joi "^17.6.0" + lodash "^4.17.21" + minimist "^1.2.5" + rxjs "^7.5.4" + +watchpack@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0, web-namespaces@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-bundle-analyzer@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" + integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz#c188db28c7bff12f87deda2a5595679ebbc3c9bc" + integrity sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.0.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + +webpack-merge@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.2, webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.72.1, webpack@^5.73.0: + version "5.73.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" + integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.9.3" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.3.1" + webpack-sources "^3.2.3" + +webpackbar@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== + dependencies: + chalk "^4.1.0" + consola "^2.15.3" + pretty-time "^1.1.0" + std-env "^3.0.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.0.1.tgz#2101e861777fec527d0ea90c57c6b03aac56a5b3" + integrity sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.3.1: + version "7.5.8" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" + integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== + +ws@^8.4.2: + version "8.8.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" + integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==